Codebase list unbound / 1add3d7
New upstream version 1.9.3~rc1 Robert Edmonds 4 years ago
93 changed file(s) with 8706 addition(s) and 5506 deletion(s). Raw diff Collapse all Expand all
33 /Makefile
44 /autom4te.cache/
55 /config.h
6 /config.h.in~
67 /config.log
78 /config.status
89 /dnstap/dnstap_config.h
1718 /doc/unbound.conf.5
1819 /libtool
1920 /libunbound.la
21 /_unbound.la
2022 /smallapp/unbound-control-setup.sh
2123 /unbound
2224 /unbound-anchor
3840 /contrib/libunbound.pc
3941 /contrib/unbound.service
4042 /contrib/unbound.socket
41
43 /dnstap/dnstap.pb-c.c
44 /dnstap/dnstap.pb-c.h
45 /libunbound/python/libunbound_wrap.c
46 /libunbound/python/unbound.py
47 /pythonmod/interface.h
48 /pythonmod/unboundmodule.py
49 /testdata/result.*
50 /testdata/.done-*
51 /testdata/.perfstats.txt
52 /doc/html
53 /doc/xml
0 sudo: false
1 language: c
2 compiler:
3 - gcc
4 addons:
5 apt:
6 packages:
7 - libssl-dev
8 - libevent-dev
9 - libexpat-dev
10 - clang
11 script:
12 - ./configure --enable-debug --disable-flto
13 - make
14 - make test
15 - (cd testdata/clang-analysis.tdir; bash clang-analysis.test)
125125 edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \
126126 edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \
127127 cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \
128 $(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC)
128 $(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC)
129129 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
130130 as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
131131 iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \
138138 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
139139 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \
140140 $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \
141 $(IPSECMOD_OBJ) respip.lo
141 $(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo
142142 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
143143 outside_network.lo
144144 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo
228228 DELAYER_OBJ=delayer.lo
229229 DELAYER_OBJ_LINK=$(DELAYER_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \
230230 $(SLDNS_OBJ)
231 IPSET_SRC=@IPSET_SRC@
232 IPSET_OBJ=@IPSET_OBJ@
231233 LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \
232234 libunbound/libworker.c
233235 LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo
255257 $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \
256258 $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \
257259 $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) \
258 $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC)\
260 $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC) \
259261 $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC)
262
260263 ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \
261264 $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \
262265 $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \
634637
635638 # Dependencies
636639 dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \
637 $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
638 $(srcdir)/util/locks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \
640 $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \
641 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
642 $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \
639643 $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
640644 $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \
641645 $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
642646 infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \
643 $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
644 $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \
645 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \
646 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h \
647 $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \
647 $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \
648 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \
649 $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
650 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
651 $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \
652 $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \
648653 $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
649654 $(srcdir)/sldns/pkthdr.h
650655 rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \
774779 $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \
775780 $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \
776781 $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
777 $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h
782 $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \
783 $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \
784 $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \
785 $(srcdir)/ipset/ipset.h
778786 view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \
779787 $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
780788 $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \
810818 $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
811819 $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \
812820 $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \
813 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc
821 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/edns-subnet/edns-subnet.h \
822 $(srcdir)/util/iana_ports.inc
814823 configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \
815824 $(srcdir)/util/config_file.h util/configparser.h
816825 configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \
843852 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \
844853 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
845854 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
846 $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
847 $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \
848 $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \
849 $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \
850 $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \
851 $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \
852 $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \
853 $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \
854 $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \
855 $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \
856 $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \
857 $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h
855 $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/services/outside_network.h \
856 $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
857 $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \
858 $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \
859 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \
860 $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \
861 $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \
862 $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \
863 $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h \
864 $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
865 $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h $(PYTHONMOD_HEADER) \
866 $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \
867 $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h
858868 locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
859869 log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h
860 mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
861 $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
862 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
863 $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
864 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
865 $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h
870 mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h
866871 module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
867872 $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
868873 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
925930 $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h
926931 ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \
927932 $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
928 $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
933 $(srcdir)/util/tube.h \
934
929935 ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \
930936 $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
931937 $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \
932938 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
933939 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
934940 $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
935 $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
941 $(srcdir)/services/modstack.h \
942
936943 winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h
937944 autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \
938945 $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
10241031 $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
10251032 $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/data/dname.h \
10261033 $(srcdir)/sldns/str2wire.h
1027 edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h
1028 subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h
1034 edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h \
1035 $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h
1036 subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h $(srcdir)/edns-subnet/subnetmod.h \
1037 $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
1038 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
1039 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \
1040 $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h \
1041 $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h \
1042 $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
1043 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \
1044 $(srcdir)/services/cache/dns.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h \
1045 $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h
10291046 addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \
10301047 $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
10311048 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
10321049 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h
1033 subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h
1050 subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h \
1051 $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \
1052 $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \
1053 $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \
1054 $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h
10341055 cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h
10351056 redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h
10361057 respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \
10641085 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \
10651086 $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \
10661087 $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h
1088 ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.h $(srcdir)/util/module.h \
1089 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
1090 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
1091 $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \
1092 $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h
10671093 unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \
10681094 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \
10691095 $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h
10741100 $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h
10751101 unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \
10761102 $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \
1077 $(srcdir)/util/log.h \
1078 $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \
1103 $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \
10791104 $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \
10801105 $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \
10811106 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
11131138 $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h
11141139 unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \
11151140 $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
1116 unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h
1141 unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h $(srcdir)/util/log.h $(srcdir)/util/module.h \
1142 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgreply.h \
1143 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
1144 $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/edns-subnet/addrtree.h \
1145 $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \
1146 $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/edns-subnet.h
11171147 unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \
11181148 $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
11191149 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \
11851215 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \
11861216 $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
11871217 $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \
1188 $(srcdir)/validator/val_neg.h \
1218 $(srcdir)/validator/val_neg.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/addrtree.h \
1219 $(srcdir)/edns-subnet/edns-subnet.h \
11891220
11901221 unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \
11911222 $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
12801311 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \
12811312 $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
12821313 $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \
1283 $(srcdir)/validator/val_neg.h \
1314 $(srcdir)/validator/val_neg.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/addrtree.h \
1315 $(srcdir)/edns-subnet/edns-subnet.h \
12841316
12851317 replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
12861318 $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
13231355 $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \
13241356 $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
13251357 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \
1326 $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER)
1358 $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER) \
1359 $(srcdir)/edns-subnet/subnet-whitelist.h
13271360 worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \
13281361 $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
13291362 $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \
0 # Unbound
1
2 [![Travis Build Status](https://travis-ci.org/NLnetLabs/unbound.svg?branch=master)](https://travis-ci.org/NLnetLabs/unbound)
3 [![Packaging status](https://repology.org/badge/tiny-repos/unbound.svg)](https://repology.org/project/unbound/versions)
4
5 Unbound is a validating, recursive, caching DNS resolver. It is designed to be
6 fast and lean and incorporates modern features based on open standards. If you
7 have any feedback, we would love to hear from you. Don’t hesitate to
8 [create an issue on Github](https://github.com/NLnetLabs/unbound/issues/new)
9 or post a message on the [Unbound mailing list](https://nlnetlabs.nl/mailman/listinfo/unbound-users).
10 You can lean more about Unbound by reading our
11 [documentation](https://nlnetlabs.nl/documentation/unbound/).
12
13 ## Compiling
14
15 Make sure you have the C toolchain, OpenSSL and its include files, and libexpat
16 installed. Unbound can be compiled and installed using:
17
18 ```
19 ./configure && make && make install
20 ```
21
22 You can use libevent if you want. libevent is useful when using many (10000)
23 outgoing ports. By default max 256 ports are opened at the same time and the
24 builtin alternative is equally capable and a little faster.
25
26 Use the `--with-libevent=dir` configure option to compile Unbound with libevent
27 support.
28
29 ## Unbound configuration
30
31 All of Unbound's configuration options are described in the man pages, which
32 will be installed and are available on the Unbound
33 [documentation page](https://nlnetlabs.nl/documentation/unbound/).
34
35 An example configuration file is located in
36 [doc/example.conf](https://github.com/NLnetLabs/unbound/blob/master/doc/example.conf.in).
7171 # define be64toh(x) OSSwapBigToHostInt64(x)
7272 #endif
7373
74 /* Some compilers do not define __BYTE_ORDER__, like IBM XLC on AIX */
75 #ifndef be64toh
76 #if defined(__sun) || defined(_AIX)
77 # if __BIG_ENDIAN__
78 # define be64toh(n) (n)
79 # define htobe64(n) (n)
80 # else
81 # define be64toh(n) (((uint64_t)htonl((n) & 0xFFFFFFFF) << 32) | htonl((n) >> 32))
82 # define htobe64(n) (((uint64_t)htonl((n) & 0xFFFFFFFF) << 32) | htonl((n) >> 32))
83 # endif
84 #endif
85 #endif /* be64toh */
86
7487 /** the unit test testframe for cachedb, its module state contains
7588 * a cache for a couple queries (in memory). */
7689 struct testframe_moddata {
1313
1414 /* Do sha512 definitions in config.h */
1515 #undef COMPAT_SHA512
16
17 /* Command line arguments used with configure */
18 #undef CONFCMDLINE
1619
1720 /* Pathname to the Unbound configuration file */
1821 #undef CONFIGFILE
6871 /* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
6972 #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
7073
74 /* Define to 1 if you have the `CRYPTO_THREADID_set_callback' function. */
75 #undef HAVE_CRYPTO_THREADID_SET_CALLBACK
76
7177 /* Define to 1 if you have the `ctime_r' function. */
7278 #undef HAVE_CTIME_R
7379
8288 if you don't. */
8389 #undef HAVE_DECL_ARC4RANDOM_UNIFORM
8490
91 /* Define to 1 if you have the declaration of `evsignal_assign', and to 0 if
92 you don't. */
93 #undef HAVE_DECL_EVSIGNAL_ASSIGN
94
8595 /* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you
8696 don't. */
8797 #undef HAVE_DECL_INET_NTOP
162172 /* Define to 1 if you have the `ERR_load_crypto_strings' function. */
163173 #undef HAVE_ERR_LOAD_CRYPTO_STRINGS
164174
175 /* Define to 1 if you have the `event_assign' function. */
176 #undef HAVE_EVENT_ASSIGN
177
165178 /* Define to 1 if you have the `event_base_free' function. */
166179 #undef HAVE_EVENT_BASE_FREE
167180
402415 /* Define to 1 if you have the `RAND_cleanup' function. */
403416 #undef HAVE_RAND_CLEANUP
404417
405 /* Define to 1 if you have the `reallocarray' function. */
418 /* If we have reallocarray(3) */
406419 #undef HAVE_REALLOCARRAY
407420
408421 /* Define to 1 if you have the `recvmsg' function. */
763776
764777 /* Define to 1 to use ipsecmod support. */
765778 #undef USE_IPSECMOD
779
780 /* Define to 1 to use ipset support */
781 #undef USE_IPSET
766782
767783 /* Define if you want to use internal select based events */
768784 #undef USE_MINI_EVENT
961977
962978
963979
980 #ifndef _OPENBSD_SOURCE
981 #define _OPENBSD_SOURCE 1
982 #endif
983
964984 #ifndef UNBOUND_DEBUG
985 # ifndef NDEBUG
965986 # define NDEBUG
987 # endif
966988 #endif
967989
968990 /** Use small-ldns codebase */
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for unbound 1.9.0.
2 # Generated by GNU Autoconf 2.69 for unbound 1.9.3rc1.
33 #
4 # Report bugs to <unbound-bugs@nlnetlabs.nl>.
4 # Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
55 #
66 #
77 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
274274 $as_echo "$0: be upgraded to zsh 4.3.4 or later."
275275 else
276276 $as_echo "$0: Please tell bug-autoconf@gnu.org and
277 $0: unbound-bugs@nlnetlabs.nl about your system, including
278 $0: any error possibly output before this message. Then
279 $0: install a modern shell, or manually run the script
280 $0: under such a shell if you do have one."
277 $0: unbound-bugs@nlnetlabs.nl or
278 $0: https://github.com/NLnetLabs/unbound/issues about your
279 $0: system, including any error possibly output before this
280 $0: message. Then install a modern shell, or manually run
281 $0: the script under such a shell if you do have one."
281282 fi
282283 exit 1
283284 fi
589590 # Identity of this package.
590591 PACKAGE_NAME='unbound'
591592 PACKAGE_TARNAME='unbound'
592 PACKAGE_VERSION='1.9.0'
593 PACKAGE_STRING='unbound 1.9.0'
594 PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl'
593 PACKAGE_VERSION='1.9.3rc1'
594 PACKAGE_STRING='unbound 1.9.3rc1'
595 PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
595596 PACKAGE_URL=''
596597
597598 # Factoring default headers for most tests.
637638 ALLTARGET
638639 SOURCEFILE
639640 SOURCEDETERMINE
641 IPSET_OBJ
642 IPSET_SRC
640643 IPSECMOD_HEADER
641644 IPSECMOD_OBJ
642645 DNSCRYPT_OBJ
693696 SWIG_LIB
694697 SWIG
695698 PC_PY_DEPENDENCY
696 PKG_CONFIG_LIBDIR
697 PKG_CONFIG_PATH
698 PKG_CONFIG
699699 PY_MAJOR_VERSION
700700 PYTHON_SITE_PKG
701701 PYTHON_LDFLAGS
709709 ax_pthread_config
710710 RUNTIME_PATH
711711 LIBOBJS
712 PKG_CONFIG_LIBDIR
713 PKG_CONFIG_PATH
714 PKG_CONFIG
712715 LT_SYS_LIBRARY_PATH
713716 OTOOL64
714717 OTOOL
877880 with_libsodium
878881 enable_cachedb
879882 enable_ipsecmod
883 enable_ipset
884 with_libmnl
880885 with_libunbound_only
881886 '
882887 ac_precious_vars='build_alias
891896 YACC
892897 YFLAGS
893898 LT_SYS_LIBRARY_PATH
894 PYTHON_VERSION
895899 PKG_CONFIG
896900 PKG_CONFIG_PATH
897901 PKG_CONFIG_LIBDIR
902 PYTHON_VERSION
898903 SYSTEMD_CFLAGS
899904 SYSTEMD_LIBS
900905 SYSTEMD_DAEMON_CFLAGS
14391444 # Omit some internal or obsolete options to make the list less imposing.
14401445 # This message is too long to be a string in the A/UX 3.1 sh.
14411446 cat <<_ACEOF
1442 \`configure' configures unbound 1.9.0 to adapt to many kinds of systems.
1447 \`configure' configures unbound 1.9.3rc1 to adapt to many kinds of systems.
14431448
14441449 Usage: $0 [OPTION]... [VAR=VALUE]...
14451450
15041509
15051510 if test -n "$ac_init_help"; then
15061511 case $ac_init_help in
1507 short | recursive ) echo "Configuration of unbound 1.9.0:";;
1512 short | recursive ) echo "Configuration of unbound 1.9.3rc1:";;
15081513 esac
15091514 cat <<\_ACEOF
15101515
15641569 storage
15651570 --enable-ipsecmod Enable ipsecmod module that facilitates
15661571 opportunistic IPsec
1572 --enable-ipset enable ipset module
15671573
15681574 Optional Packages:
15691575 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
16181624 --with-protobuf-c=path Path where protobuf-c is installed, for dnstap
16191625 --with-libfstrm=path Path where libfstrm is installed, for dnstap
16201626 --with-libsodium=path Path where libsodium is installed, for dnscrypt
1627 --with-libmnl=path specify explicit path for libmnl.
16211628 --with-libunbound-only do not build daemon and tool programs
16221629
16231630 Some influential environment variables:
16371644 default value of `-d' given by some make applications.
16381645 LT_SYS_LIBRARY_PATH
16391646 User-defined run-time library search path.
1640 PYTHON_VERSION
1641 The installed Python version to use, for example '2.3'. This
1642 string will be appended to the Python interpreter canonical
1643 name.
16441647 PKG_CONFIG path to pkg-config utility
16451648 PKG_CONFIG_PATH
16461649 directories to add to pkg-config's search path
16471650 PKG_CONFIG_LIBDIR
16481651 path overriding pkg-config's built-in search path
1652 PYTHON_VERSION
1653 The installed Python version to use, for example '2.3'. This
1654 string will be appended to the Python interpreter canonical
1655 name.
16491656 SYSTEMD_CFLAGS
16501657 C compiler flags for SYSTEMD, overriding pkg-config
16511658 SYSTEMD_LIBS
16581665 Use these variables to override the choices made by `configure' or to help
16591666 it to find libraries and programs with nonstandard names/locations.
16601667
1661 Report bugs to <unbound-bugs@nlnetlabs.nl>.
1668 Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
16621669 _ACEOF
16631670 ac_status=$?
16641671 fi
17211728 test -n "$ac_init_help" && exit $ac_status
17221729 if $ac_init_version; then
17231730 cat <<\_ACEOF
1724 unbound configure 1.9.0
1731 unbound configure 1.9.3rc1
17251732 generated by GNU Autoconf 2.69
17261733
17271734 Copyright (C) 2012 Free Software Foundation, Inc.
18801887 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
18811888 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
18821889 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
1883 ( $as_echo "## ---------------------------------------- ##
1884 ## Report this to unbound-bugs@nlnetlabs.nl ##
1885 ## ---------------------------------------- ##"
1890 ( $as_echo "## --------------------------------------------------------------------------------------- ##
1891 ## Report this to unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues ##
1892 ## --------------------------------------------------------------------------------------- ##"
18861893 ) | sed "s/^/$as_me: WARNING: /" >&2
18871894 ;;
18881895 esac
24302437 This file contains any messages produced by compilers while
24312438 running configure, to aid debugging if configure makes a mistake.
24322439
2433 It was created by unbound $as_me 1.9.0, which was
2440 It was created by unbound $as_me 1.9.3rc1, which was
24342441 generated by GNU Autoconf 2.69. Invocation command line was
24352442
24362443 $ $0 $@
27822789
27832790 UNBOUND_VERSION_MINOR=9
27842791
2785 UNBOUND_VERSION_MICRO=0
2792 UNBOUND_VERSION_MICRO=3rc1
27862793
27872794
27882795 LIBUNBOUND_CURRENT=9
2789 LIBUNBOUND_REVISION=0
2796 LIBUNBOUND_REVISION=3
27902797 LIBUNBOUND_AGE=1
27912798 # 1.0.0 had 0:12:0
27922799 # 1.0.1 had 0:13:0
28532860 # 1.8.1 had 8:1:0
28542861 # 1.8.2 had 8:2:0
28552862 # 1.8.3 had 8:3:0
2856 # 1.8.4 had 9:0:1 # add ub_ctx_set_tls
2863 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls
2864 # 1.9.1 had 9:1:1
2865 # 1.9.2 had 9:2:1
2866 # 1.9.3 had 9:3:1
28572867
28582868 # Current -- the number of the binary API that we're implementing
28592869 # Revision -- which iteration of the implementation of the binary
28752885 # to 0 too.
28762886
28772887
2888
2889
2890
2891 cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`"
2892
2893 cat >>confdefs.h <<_ACEOF
2894 #define CONFCMDLINE "$cmdln"
2895 _ACEOF
28782896
28792897
28802898 CFLAGS="$CFLAGS"
1455714575
1455814576
1455914577
14578
14579
14580
14581
14582
14583
14584
14585 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
14586 if test -n "$ac_tool_prefix"; then
14587 # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
14588 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
14589 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
14590 $as_echo_n "checking for $ac_word... " >&6; }
14591 if ${ac_cv_path_PKG_CONFIG+:} false; then :
14592 $as_echo_n "(cached) " >&6
14593 else
14594 case $PKG_CONFIG in
14595 [\\/]* | ?:[\\/]*)
14596 ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
14597 ;;
14598 *)
14599 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
14600 for as_dir in $PATH
14601 do
14602 IFS=$as_save_IFS
14603 test -z "$as_dir" && as_dir=.
14604 for ac_exec_ext in '' $ac_executable_extensions; do
14605 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
14606 ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
14607 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
14608 break 2
14609 fi
14610 done
14611 done
14612 IFS=$as_save_IFS
14613
14614 ;;
14615 esac
14616 fi
14617 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
14618 if test -n "$PKG_CONFIG"; then
14619 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
14620 $as_echo "$PKG_CONFIG" >&6; }
14621 else
14622 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
14623 $as_echo "no" >&6; }
14624 fi
14625
14626
14627 fi
14628 if test -z "$ac_cv_path_PKG_CONFIG"; then
14629 ac_pt_PKG_CONFIG=$PKG_CONFIG
14630 # Extract the first word of "pkg-config", so it can be a program name with args.
14631 set dummy pkg-config; ac_word=$2
14632 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
14633 $as_echo_n "checking for $ac_word... " >&6; }
14634 if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
14635 $as_echo_n "(cached) " >&6
14636 else
14637 case $ac_pt_PKG_CONFIG in
14638 [\\/]* | ?:[\\/]*)
14639 ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
14640 ;;
14641 *)
14642 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
14643 for as_dir in $PATH
14644 do
14645 IFS=$as_save_IFS
14646 test -z "$as_dir" && as_dir=.
14647 for ac_exec_ext in '' $ac_executable_extensions; do
14648 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
14649 ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
14650 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
14651 break 2
14652 fi
14653 done
14654 done
14655 IFS=$as_save_IFS
14656
14657 ;;
14658 esac
14659 fi
14660 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
14661 if test -n "$ac_pt_PKG_CONFIG"; then
14662 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
14663 $as_echo "$ac_pt_PKG_CONFIG" >&6; }
14664 else
14665 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
14666 $as_echo "no" >&6; }
14667 fi
14668
14669 if test "x$ac_pt_PKG_CONFIG" = x; then
14670 PKG_CONFIG=""
14671 else
14672 case $cross_compiling:$ac_tool_warned in
14673 yes:)
14674 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
14675 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
14676 ac_tool_warned=yes ;;
14677 esac
14678 PKG_CONFIG=$ac_pt_PKG_CONFIG
14679 fi
14680 else
14681 PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
14682 fi
14683
14684 fi
14685 if test -n "$PKG_CONFIG"; then
14686 _pkg_min_version=0.9.0
14687 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
14688 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
14689 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
14690 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
14691 $as_echo "yes" >&6; }
14692 else
14693 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
14694 $as_echo "no" >&6; }
14695 PKG_CONFIG=""
14696 fi
14697 fi
14698
1456014699 # Checks for header files.
1456114700 for ac_header in stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.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
1456214701 do :
1701417153 CPPFLAGS="$PYTHON_CPPFLAGS"
1701517154 fi
1701617155 ub_have_python=yes
17017
17018
17019
17020
17021
17022
17023
17024 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
17025 if test -n "$ac_tool_prefix"; then
17026 # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
17027 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
17028 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17029 $as_echo_n "checking for $ac_word... " >&6; }
17030 if ${ac_cv_path_PKG_CONFIG+:} false; then :
17031 $as_echo_n "(cached) " >&6
17032 else
17033 case $PKG_CONFIG in
17034 [\\/]* | ?:[\\/]*)
17035 ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
17036 ;;
17037 *)
17038 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17039 for as_dir in $PATH
17040 do
17041 IFS=$as_save_IFS
17042 test -z "$as_dir" && as_dir=.
17043 for ac_exec_ext in '' $ac_executable_extensions; do
17044 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17045 ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
17046 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
17047 break 2
17048 fi
17049 done
17050 done
17051 IFS=$as_save_IFS
17052
17053 ;;
17054 esac
17055 fi
17056 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
17057 if test -n "$PKG_CONFIG"; then
17058 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
17059 $as_echo "$PKG_CONFIG" >&6; }
17060 else
17061 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17062 $as_echo "no" >&6; }
17063 fi
17064
17065
17066 fi
17067 if test -z "$ac_cv_path_PKG_CONFIG"; then
17068 ac_pt_PKG_CONFIG=$PKG_CONFIG
17069 # Extract the first word of "pkg-config", so it can be a program name with args.
17070 set dummy pkg-config; ac_word=$2
17071 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17072 $as_echo_n "checking for $ac_word... " >&6; }
17073 if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
17074 $as_echo_n "(cached) " >&6
17075 else
17076 case $ac_pt_PKG_CONFIG in
17077 [\\/]* | ?:[\\/]*)
17078 ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
17079 ;;
17080 *)
17081 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17082 for as_dir in $PATH
17083 do
17084 IFS=$as_save_IFS
17085 test -z "$as_dir" && as_dir=.
17086 for ac_exec_ext in '' $ac_executable_extensions; do
17087 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17088 ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
17089 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
17090 break 2
17091 fi
17092 done
17093 done
17094 IFS=$as_save_IFS
17095
17096 ;;
17097 esac
17098 fi
17099 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
17100 if test -n "$ac_pt_PKG_CONFIG"; then
17101 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
17102 $as_echo "$ac_pt_PKG_CONFIG" >&6; }
17103 else
17104 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17105 $as_echo "no" >&6; }
17106 fi
17107
17108 if test "x$ac_pt_PKG_CONFIG" = x; then
17109 PKG_CONFIG=""
17110 else
17111 case $cross_compiling:$ac_tool_warned in
17112 yes:)
17113 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
17114 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
17115 ac_tool_warned=yes ;;
17116 esac
17117 PKG_CONFIG=$ac_pt_PKG_CONFIG
17118 fi
17119 else
17120 PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
17121 fi
17122
17123 fi
17124 if test -n "$PKG_CONFIG"; then
17125 _pkg_min_version=0.9.0
17126 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
17127 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
17128 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
17129 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
17130 $as_echo "yes" >&6; }
17131 else
17132 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17133 $as_echo "no" >&6; }
17134 PKG_CONFIG=""
17135 fi
17136 fi
1713717156 if test -n "$PKG_CONFIG" && \
1713817157 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"python\${PY_MAJOR_VERSION}\"\""; } >&5
1713917158 ($PKG_CONFIG --exists --print-errors ""python${PY_MAJOR_VERSION}"") 2>&5
1799218011
1799318012 done
1799418013
17995 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 ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex
18014 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 ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback
1799618015 do :
1799718016 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
1799818017 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
1900919028 fi
1901019029 done
1901119030 # only in libev. (tested on 4.00)
19031 for ac_func in event_assign
19032 do :
19033 ac_fn_c_check_func "$LINENO" "event_assign" "ac_cv_func_event_assign"
19034 if test "x$ac_cv_func_event_assign" = xyes; then :
19035 cat >>confdefs.h <<_ACEOF
19036 #define HAVE_EVENT_ASSIGN 1
19037 _ACEOF
19038
19039 fi
19040 done
19041 # in libevent, for thread-safety
19042 ac_fn_c_check_decl "$LINENO" "evsignal_assign" "ac_cv_have_decl_evsignal_assign" "$ac_includes_default
19043 #ifdef HAVE_EVENT_H
19044 # include <event.h>
19045 #else
19046 # include \"event2/event.h\"
19047 #endif
19048
19049 "
19050 if test "x$ac_cv_have_decl_evsignal_assign" = xyes; then :
19051 ac_have_decl=1
19052 else
19053 ac_have_decl=0
19054 fi
19055
19056 cat >>confdefs.h <<_ACEOF
19057 #define HAVE_DECL_EVSIGNAL_ASSIGN $ac_have_decl
19058 _ACEOF
19059
1901219060 PC_LIBEVENT_DEPENDENCY="libevent"
1901319061
1901419062 if test -n "$BAK_LDFLAGS_SET"; then
2011120159
2011220160 LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
2011320161
20114 ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray"
20115 if test "x$ac_cv_func_reallocarray" = xyes; then :
20116 $as_echo "#define HAVE_REALLOCARRAY 1" >>confdefs.h
20117
20118 else
20119 case " $LIBOBJS " in
20162 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for reallocarray" >&5
20163 $as_echo_n "checking for reallocarray... " >&6; }
20164 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
20165 /* end confdefs.h. */
20166 $ac_includes_default
20167
20168 #ifndef _OPENBSD_SOURCE
20169 #define _OPENBSD_SOURCE 1
20170 #endif
20171 #include <stdlib.h>
20172 int main(void) {
20173 void* p = reallocarray(NULL, 10, 100);
20174 free(p);
20175 return 0;
20176 }
20177
20178 _ACEOF
20179 if ac_fn_c_try_link "$LINENO"; then :
20180 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20181 $as_echo "yes" >&6; }
20182
20183 $as_echo "#define HAVE_REALLOCARRAY 1" >>confdefs.h
20184
20185
20186 else
20187
20188 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20189 $as_echo "no" >&6; }
20190 case " $LIBOBJS " in
2012020191 *" reallocarray.$ac_objext "* ) ;;
2012120192 *) LIBOBJS="$LIBOBJS reallocarray.$ac_objext"
2012220193 ;;
2012320194 esac
2012420195
20125 fi
20126
20127
20196
20197 fi
20198 rm -f core conftest.err conftest.$ac_objext \
20199 conftest$ac_exeext conftest.$ac_ext
2012820200 if test "$USE_NSS" = "no"; then
2012920201 ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random"
2013020202 if test "x$ac_cv_func_arc4random" = xyes; then :
2099221064 ;;
2099321065 esac
2099421066
21067 # check for ipset if requested
21068 # Check whether --enable-ipset was given.
21069 if test "${enable_ipset+set}" = set; then :
21070 enableval=$enable_ipset;
21071 fi
21072
21073 case "$enable_ipset" in
21074 yes)
21075
21076 $as_echo "#define USE_IPSET 1" >>confdefs.h
21077
21078 IPSET_SRC="ipset/ipset.c"
21079
21080 IPSET_OBJ="ipset.lo"
21081
21082
21083 # mnl
21084
21085 # Check whether --with-libmnl was given.
21086 if test "${with_libmnl+set}" = set; then :
21087 withval=$with_libmnl;
21088 else
21089 withval="yes"
21090 fi
21091
21092 found_libmnl="no"
21093 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmnl" >&5
21094 $as_echo_n "checking for libmnl... " >&6; }
21095 if test x_$withval = x_ -o x_$withval = x_yes; then
21096 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
21097 fi
21098 for dir in $withval ; do
21099 if test -f "$dir/include/libmnl/libmnl.h"; then
21100 found_libmnl="yes"
21101 if test "$dir" != "/usr"; then
21102 CPPFLAGS="$CPPFLAGS -I$dir/include"
21103 LDFLAGS="$LDFLAGS -L$dir/lib"
21104 fi
21105 { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5
21106 $as_echo "found in $dir" >&6; }
21107 LIBS="$LIBS -lmnl"
21108 break;
21109 fi
21110 done
21111 if test x_$found_libmnl != x_yes; then
21112 as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5
21113 fi
21114 ;;
21115 no|*)
21116 # nothing
21117 ;;
21118 esac
21119
2099521120 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${MAKE:-make} supports $< with implicit rule in scope" >&5
2099621121 $as_echo_n "checking if ${MAKE:-make} supports $< with implicit rule in scope... " >&6; }
2099721122 # on openBSD, the implicit rule make $< work.
2114721272
2114821273
2114921274
21150 version=1.9.0
21275 version=1.9.3rc1
2115121276
2115221277 date=`date +'%b %e, %Y'`
2115321278
2166621791 # report actual input values of CONFIG_FILES etc. instead of their
2166721792 # values after options handling.
2166821793 ac_log="
21669 This file was extended by unbound $as_me 1.9.0, which was
21794 This file was extended by unbound $as_me 1.9.3rc1, which was
2167021795 generated by GNU Autoconf 2.69. Invocation command line was
2167121796
2167221797 CONFIG_FILES = $CONFIG_FILES
2172621851 Configuration commands:
2172721852 $config_commands
2172821853
21729 Report bugs to <unbound-bugs@nlnetlabs.nl>."
21854 Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>."
2173021855
2173121856 _ACEOF
2173221857 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2173321858 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2173421859 ac_cs_version="\\
21735 unbound config.status 1.9.0
21860 unbound config.status 1.9.3rc1
2173621861 configured by $0, generated by GNU Autoconf 2.69,
2173721862 with options \\"\$ac_cs_config\\"
2173821863
1010 # must be numbers. ac_defun because of later processing
1111 m4_define([VERSION_MAJOR],[1])
1212 m4_define([VERSION_MINOR],[9])
13 m4_define([VERSION_MICRO],[0])
14 AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound)
13 m4_define([VERSION_MICRO],[3rc1])
14 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)
1515 AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
1616 AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
1717 AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
1818
1919 LIBUNBOUND_CURRENT=9
20 LIBUNBOUND_REVISION=0
20 LIBUNBOUND_REVISION=3
2121 LIBUNBOUND_AGE=1
2222 # 1.0.0 had 0:12:0
2323 # 1.0.1 had 0:13:0
8484 # 1.8.1 had 8:1:0
8585 # 1.8.2 had 8:2:0
8686 # 1.8.3 had 8:3:0
87 # 1.8.4 had 9:0:1 # add ub_ctx_set_tls
87 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls
88 # 1.9.1 had 9:1:1
89 # 1.9.2 had 9:2:1
90 # 1.9.3 had 9:3:1
8891
8992 # Current -- the number of the binary API that we're implementing
9093 # Revision -- which iteration of the implementation of the binary
107110 AC_SUBST(LIBUNBOUND_CURRENT)
108111 AC_SUBST(LIBUNBOUND_REVISION)
109112 AC_SUBST(LIBUNBOUND_AGE)
113
114
115 cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`"
116 AC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure])
110117
111118 CFLAGS="$CFLAGS"
112119 AC_AIX
380387 AC_CHECK_PROG(doxygen, doxygen, doxygen)
381388 AC_CHECK_TOOL(STRIP, strip)
382389 ACX_LIBTOOL_C_ONLY
390
391 PKG_PROG_PKG_CONFIG
383392
384393 # Checks for header files.
385394 AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.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],,, [AC_INCLUDES_DEFAULT])
640649 CPPFLAGS="$PYTHON_CPPFLAGS"
641650 fi
642651 ub_have_python=yes
643 PKG_PROG_PKG_CONFIG
644652 PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"],
645653 [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"],
646654 [PC_PY_DEPENDENCY="python"])
780788 AC_MSG_RESULT([no])
781789 fi
782790 AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h],,, [AC_INCLUDES_DEFAULT])
783 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 ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex])
791 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 ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback])
784792
785793 # these check_funcs need -lssl
786794 BAKLIBS="$LIBS"
11961204 AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later
11971205 AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51)
11981206 AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00)
1207 AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety
1208 AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT
1209 #ifdef HAVE_EVENT_H
1210 # include <event.h>
1211 #else
1212 # include "event2/event.h"
1213 #endif
1214 ])
11991215 PC_LIBEVENT_DEPENDENCY="libevent"
12001216 AC_SUBST(PC_LIBEVENT_DEPENDENCY)
12011217 if test -n "$BAK_LDFLAGS_SET"; then
14351451 dnl without CTIME, ARC4-functions and without reallocarray.
14361452 LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
14371453 AC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4)
1438 AC_REPLACE_FUNCS(reallocarray)
1454 AC_MSG_CHECKING([for reallocarray])
1455 AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1456 [[
1457 #ifndef _OPENBSD_SOURCE
1458 #define _OPENBSD_SOURCE 1
1459 #endif
1460 #include <stdlib.h>
1461 int main(void) {
1462 void* p = reallocarray(NULL, 10, 100);
1463 free(p);
1464 return 0;
1465 }
1466 ]])], [AC_MSG_RESULT(yes)
1467 AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)])
1468 ], [
1469 AC_MSG_RESULT(no)
1470 AC_LIBOBJ(reallocarray)
1471 ])
14391472 if test "$USE_NSS" = "no"; then
14401473 AC_REPLACE_FUNCS(arc4random)
14411474 AC_REPLACE_FUNCS(arc4random_uniform)
15741607 ;;
15751608 esac
15761609
1610 # check for ipset if requested
1611 AC_ARG_ENABLE(ipset, AC_HELP_STRING([--enable-ipset], [enable ipset module]))
1612 case "$enable_ipset" in
1613 yes)
1614 AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support])
1615 IPSET_SRC="ipset/ipset.c"
1616 AC_SUBST(IPSET_SRC)
1617 IPSET_OBJ="ipset.lo"
1618 AC_SUBST(IPSET_OBJ)
1619
1620 # mnl
1621 AC_ARG_WITH(libmnl, AC_HELP_STRING([--with-libmnl=path],
1622 [specify explicit path for libmnl.]),
1623 [ ],[ withval="yes" ])
1624 found_libmnl="no"
1625 AC_MSG_CHECKING(for libmnl)
1626 if test x_$withval = x_ -o x_$withval = x_yes; then
1627 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1628 fi
1629 for dir in $withval ; do
1630 if test -f "$dir/include/libmnl/libmnl.h"; then
1631 found_libmnl="yes"
1632 dnl assume /usr is in default path.
1633 if test "$dir" != "/usr"; then
1634 CPPFLAGS="$CPPFLAGS -I$dir/include"
1635 LDFLAGS="$LDFLAGS -L$dir/lib"
1636 fi
1637 AC_MSG_RESULT(found in $dir)
1638 LIBS="$LIBS -lmnl"
1639 break;
1640 fi
1641 done
1642 if test x_$found_libmnl != x_yes; then
1643 AC_ERROR([Could not find libmnl, libmnl.h])
1644 fi
1645 ;;
1646 no|*)
1647 # nothing
1648 ;;
1649 esac
1650
15771651 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
15781652 # on openBSD, the implicit rule make $< work.
15791653 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
16481722
16491723 dnl includes
16501724 [
1725 #ifndef _OPENBSD_SOURCE
1726 #define _OPENBSD_SOURCE 1
1727 #endif
1728
16511729 #ifndef UNBOUND_DEBUG
1730 # ifndef NDEBUG
16521731 # define NDEBUG
1732 # endif
16531733 #endif
16541734
16551735 /** Use small-ldns codebase */
00 Description: based on the included patch contrib/fastrpz.patch
11 Author: fastrpz@farsightsecurity.com
22 ---
3 Index: unboundfastrpz/Makefile.in
4 ===================================================================
5 --- unboundfastrpz/Makefile.in (revision 5073)
6 +++ unboundfastrpz/Makefile.in (working copy)
7 @@ -23,6 +23,8 @@
3 diff --git a/Makefile.in b/Makefile.in
4 index 03a6347..6758bea 100644
5 --- a/Makefile.in
6 +++ b/Makefile.in
7 @@ -23,6 +23,8 @@ CHECKLOCK_SRC=testcode/checklocks.c
88 CHECKLOCK_OBJ=@CHECKLOCK_OBJ@
99 DNSTAP_SRC=@DNSTAP_SRC@
1010 DNSTAP_OBJ=@DNSTAP_OBJ@
1313 DNSCRYPT_SRC=@DNSCRYPT_SRC@
1414 DNSCRYPT_OBJ=@DNSCRYPT_OBJ@
1515 WITH_PYTHONMODULE=@WITH_PYTHONMODULE@
16 @@ -126,7 +128,7 @@
16 @@ -126,7 +128,7 @@ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \
1717 edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \
1818 edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \
1919 cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \
2222 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
2323 as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
2424 iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \
25 @@ -139,7 +141,7 @@
25 @@ -139,7 +141,7 @@ autotrust.lo val_anchor.lo \
2626 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
2727 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \
2828 $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \
3131 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
3232 outside_network.lo
3333 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo
34 @@ -405,6 +407,11 @@
34 @@ -405,6 +407,11 @@ dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \
3535 $(srcdir)/util/config_file.h $(srcdir)/util/log.h \
3636 $(srcdir)/util/netevent.h
3737
4343 # Python Module
4444 pythonmod.lo pythonmod.o: $(srcdir)/pythonmod/pythonmod.c config.h \
4545 pythonmod/interface.h \
46 Index: unboundfastrpz/config.h.in
47 ===================================================================
48 --- unboundfastrpz/config.h.in (revision 5073)
49 +++ unboundfastrpz/config.h.in (working copy)
50 @@ -1293,4 +1293,11 @@
46 diff --git a/config.h.in b/config.h.in
47 index 74c14d1..a18f4ff 100644
48 --- a/config.h.in
49 +++ b/config.h.in
50 @@ -1305,4 +1305,11 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
5151 /** the version of unbound-control that this software implements */
5252 #define UNBOUND_CONTROL_VERSION 1
5353
6060 +#undef FASTRPZ_LIB_OPEN
6161 +/** turn on fastrpz response policy zones */
6262 +#undef ENABLE_FASTRPZ
63 Index: unboundfastrpz/configure.ac
64 ===================================================================
65 --- unboundfastrpz/configure.ac (revision 5073)
66 +++ unboundfastrpz/configure.ac (working copy)
67 @@ -6,6 +6,7 @@
63 diff --git a/configure.ac b/configure.ac
64 index abbecf0..6454274 100644
65 --- a/configure.ac
66 +++ b/configure.ac
67 @@ -6,6 +6,7 @@ sinclude(ax_pthread.m4)
6868 sinclude(acx_python.m4)
6969 sinclude(ac_pkg_swig.m4)
7070 sinclude(dnstap/dnstap.m4)
7272 sinclude(dnscrypt/dnscrypt.m4)
7373
7474 # must be numbers. ac_defun because of later processing
75 @@ -1575,6 +1576,9 @@
75 @@ -1586,6 +1587,9 @@ case "$enable_ipsecmod" in
7676 ;;
7777 esac
7878
8282 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
8383 # on openBSD, the implicit rule make $< work.
8484 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
85 Index: unboundfastrpz/daemon/daemon.c
86 ===================================================================
87 --- unboundfastrpz/daemon/daemon.c (revision 5073)
88 +++ unboundfastrpz/daemon/daemon.c (working copy)
85 diff --git a/daemon/daemon.c b/daemon/daemon.c
86 index 7461a26..706f8f6 100644
87 --- a/daemon/daemon.c
88 +++ b/daemon/daemon.c
8989 @@ -91,6 +91,9 @@
9090 #include "sldns/keyraw.h"
9191 #include "respip/respip.h"
9696
9797 #ifdef HAVE_SYSTEMD
9898 #include <systemd/sd-daemon.h>
99 @@ -462,6 +465,14 @@
99 @@ -460,6 +463,14 @@ daemon_create_workers(struct daemon* daemon)
100 dt_apply_cfg(daemon->dtenv, daemon->cfg);
101 #else
100102 fatal_exit("dnstap enabled in config but not built with dnstap support");
101 #endif
102 }
103 +#endif
104 + }
103105 + if(daemon->cfg->rpz_enable) {
104106 +#ifdef ENABLE_FASTRPZ
105107 + rpz_init(&daemon->rpz_clist, &daemon->rpz_client, daemon->cfg);
106108 +#else
107109 + fatal_exit("fastrpz enabled in config"
108110 + " but not built with fastrpz");
109 +#endif
110 + }
111 #endif
112 }
111113 for(i=0; i<daemon->num; i++) {
112 if(!(daemon->workers[i] = worker_create(daemon, i,
113 shufport+numport*i/daemon->num,
114 @@ -719,6 +730,9 @@
114 @@ -718,6 +729,9 @@ daemon_cleanup(struct daemon* daemon)
115 #ifdef USE_DNSCRYPT
115116 dnsc_delete(daemon->dnscenv);
116117 daemon->dnscenv = NULL;
118 +#endif
119 +#ifdef ENABLE_FASTRPZ
120 + rpz_delete(&daemon->rpz_clist, &daemon->rpz_client);
117121 #endif
118 +#ifdef ENABLE_FASTRPZ
119 + rpz_delete(&daemon->rpz_clist, &daemon->rpz_client);
120 +#endif
121122 daemon->cfg = NULL;
122123 }
123
124 Index: unboundfastrpz/daemon/daemon.h
125 ===================================================================
126 --- unboundfastrpz/daemon/daemon.h (revision 5073)
127 +++ unboundfastrpz/daemon/daemon.h (working copy)
128 @@ -136,6 +136,11 @@
124 diff --git a/daemon/daemon.h b/daemon/daemon.h
125 index 5749dbe..64ce230 100644
126 --- a/daemon/daemon.h
127 +++ b/daemon/daemon.h
128 @@ -136,6 +136,11 @@ struct daemon {
129129 /** the dnscrypt environment */
130130 struct dnsc_env* dnscenv;
131131 #endif
137137 };
138138
139139 /**
140 Index: unboundfastrpz/daemon/worker.c
141 ===================================================================
142 --- unboundfastrpz/daemon/worker.c (revision 5073)
143 +++ unboundfastrpz/daemon/worker.c (working copy)
140 diff --git a/daemon/worker.c b/daemon/worker.c
141 index fc93817..e435226 100644
142 --- a/daemon/worker.c
143 +++ b/daemon/worker.c
144144 @@ -75,6 +75,9 @@
145145 #include "libunbound/context.h"
146146 #include "libunbound/libworker.h"
151151 #include "sldns/wire2str.h"
152152 #include "util/shm_side/shm_main.h"
153153 #include "dnscrypt/dnscrypt.h"
154 @@ -533,8 +536,27 @@
154 @@ -533,8 +536,27 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
155155 /* not secure */
156156 secure = 0;
157157 break;
179179 /* return this delegation from the cache */
180180 edns_bak = *edns;
181181 edns->edns_version = EDNS_ADVERTISED_VERSION;
182 @@ -702,6 +724,23 @@
182 @@ -699,6 +721,23 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
183183 secure = 0;
184184 }
185185 } else secure = 0;
203203
204204 edns_bak = *edns;
205205 edns->edns_version = EDNS_ADVERTISED_VERSION;
206 @@ -1407,6 +1446,15 @@
206 @@ -1409,6 +1448,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
207207 log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from",
208208 &repinfo->addr, repinfo->addrlen);
209209 goto send_reply;
219219 }
220220
221221 /* If we've found a local alias, replace the qname with the alias
222 @@ -1455,12 +1503,21 @@
222 @@ -1457,12 +1505,21 @@ lookup_cache:
223223 h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2));
224224 if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) {
225225 /* answer from cache - we have acquired a readlock on it */
243243 /* prefetch it if the prefetch TTL expired.
244244 * Note that if there is more than one pass
245245 * its qname must be that used for cache
246 @@ -1514,11 +1571,19 @@
246 @@ -1516,11 +1573,19 @@ lookup_cache:
247247 lock_rw_unlock(&e->lock);
248248 }
249249 if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) {
265265 goto send_reply;
266266 }
267267 verbose(VERB_ALGO, "answer norec from cache -- "
268 Index: unboundfastrpz/doc/unbound.conf.5.in
269 ===================================================================
270 --- unboundfastrpz/doc/unbound.conf.5.in (revision 5073)
271 +++ unboundfastrpz/doc/unbound.conf.5.in (working copy)
272 @@ -1781,6 +1781,81 @@
268 diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
269 index c14ee27..0b71eaf 100644
270 --- a/doc/unbound.conf.5.in
271 +++ b/doc/unbound.conf.5.in
272 @@ -1795,6 +1795,81 @@ List domain for which the AAAA records are ignored and the A record is
273273 used by dns64 processing instead. Can be entered multiple times, list a
274274 new domain for which it applies, one per line. Applies also to names
275275 underneath the name given.
351351 .SS "DNSCrypt Options"
352352 .LP
353353 The
354 Index: unboundfastrpz/fastrpz/librpz.h
355 ===================================================================
356 --- unboundfastrpz/fastrpz/librpz.h (nonexistent)
357 +++ unboundfastrpz/fastrpz/librpz.h (working copy)
354 diff --git a/fastrpz/librpz.h b/fastrpz/librpz.h
355 new file mode 100644
356 index 0000000..645279d
357 --- /dev/null
358 +++ b/fastrpz/librpz.h
358359 @@ -0,0 +1,957 @@
359360 +/*
360361 + * Define the interface from a DNS resolver to the Response Policy Zone
13131314 +#endif /* LIBRPZ_LIB_OPEN */
13141315 +
13151316 +#endif /* LIBRPZ_H */
1316 Index: unboundfastrpz/fastrpz/rpz.c
1317 ===================================================================
1318 --- unboundfastrpz/fastrpz/rpz.c (nonexistent)
1319 +++ unboundfastrpz/fastrpz/rpz.c (working copy)
1317 diff --git a/fastrpz/rpz.c b/fastrpz/rpz.c
1318 new file mode 100644
1319 index 0000000..c5ab780
1320 --- /dev/null
1321 +++ b/fastrpz/rpz.c
13201322 @@ -0,0 +1,1352 @@
13211323 +/*
13221324 + * fastrpz/rpz.c - interface to the fastrpz response policy zone library
26702672 +}
26712673 +
26722674 +#endif /* ENABLE_FASTRPZ */
2673 Index: unboundfastrpz/fastrpz/rpz.h
2674 ===================================================================
2675 --- unboundfastrpz/fastrpz/rpz.h (nonexistent)
2676 +++ unboundfastrpz/fastrpz/rpz.h (working copy)
2675 diff --git a/fastrpz/rpz.h b/fastrpz/rpz.h
2676 new file mode 100644
2677 index 0000000..5d7e31c
2678 --- /dev/null
2679 +++ b/fastrpz/rpz.h
26772680 @@ -0,0 +1,138 @@
26782681 +/*
26792682 + * fastrpz/rpz.h - interface to the fastrpz response policy zone library
28132816 +
28142817 +#endif /* ENABLE_FASTRPZ */
28152818 +#endif /* UNBOUND_FASTRPZ_RPZ_H */
2816 Index: unboundfastrpz/fastrpz/rpz.m4
2817 ===================================================================
2818 --- unboundfastrpz/fastrpz/rpz.m4 (nonexistent)
2819 +++ unboundfastrpz/fastrpz/rpz.m4 (working copy)
2819 diff --git a/fastrpz/rpz.m4 b/fastrpz/rpz.m4
2820 new file mode 100644
2821 index 0000000..2123535
2822 --- /dev/null
2823 +++ b/fastrpz/rpz.m4
28202824 @@ -0,0 +1,64 @@
28212825 +# fastrpz/rpz.m4
28222826 +
28822886 + AC_MSG_WARN([[dlopen and librpz.so needed for fastrpz]])
28832887 + fi
28842888 +])
2885 Index: unboundfastrpz/iterator/iterator.c
2886 ===================================================================
2887 --- unboundfastrpz/iterator/iterator.c (revision 5073)
2888 +++ unboundfastrpz/iterator/iterator.c (working copy)
2889 diff --git a/iterator/iterator.c b/iterator/iterator.c
2890 index c906c27..55bf218 100644
2891 --- a/iterator/iterator.c
2892 +++ b/iterator/iterator.c
28892893 @@ -68,6 +68,9 @@
28902894 #include "sldns/str2wire.h"
28912895 #include "sldns/parseutil.h"
28962900
28972901 /* in msec */
28982902 int UNKNOWN_SERVER_NICENESS = 376;
2899 @@ -551,6 +554,23 @@
2903 @@ -551,6 +554,23 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
29002904 if(ntohs(r->rk.type) == LDNS_RR_TYPE_CNAME &&
29012905 query_dname_compare(*mname, r->rk.dname) == 0 &&
29022906 !iter_find_rrset_in_prepend_answer(iq, r)) {
29202924 /* Add this relevant CNAME rrset to the prepend list.*/
29212925 if(!iter_add_prepend_answer(qstate, iq, r))
29222926 return 0;
2923 @@ -559,6 +579,9 @@
2927 @@ -559,6 +579,9 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
29242928
29252929 /* Other rrsets in the section are ignored. */
29262930 }
29302934 /* add authority rrsets to authority prepend, for wildcarded CNAMEs */
29312935 for(i=msg->rep->an_numrrsets; i<msg->rep->an_numrrsets +
29322936 msg->rep->ns_numrrsets; i++) {
2933 @@ -1195,6 +1218,7 @@
2937 @@ -1195,6 +1218,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29342938 uint8_t* delname;
29352939 size_t delnamelen;
29362940 struct dns_msg* msg = NULL;
29382942
29392943 log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo);
29402944 /* check effort */
2941 @@ -1281,8 +1305,7 @@
2945 @@ -1281,8 +1305,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29422946 }
29432947 if(msg) {
29442948 /* handle positive cache response */
29482952 if(verbosity >= VERB_ALGO) {
29492953 log_dns_msg("msg from cache lookup", &msg->qinfo,
29502954 msg->rep);
2951 @@ -1290,7 +1313,22 @@
2955 @@ -1290,7 +1313,22 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29522956 (int)msg->rep->ttl,
29532957 (int)msg->rep->prefetch_ttl);
29542958 }
29712975 if(type == RESPONSE_TYPE_CNAME) {
29722976 uint8_t* sname = 0;
29732977 size_t slen = 0;
2974 @@ -2694,6 +2732,62 @@
2978 @@ -2714,6 +2752,62 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
29752979 sock_list_insert(&qstate->reply_origin,
29762980 &qstate->reply->addr, qstate->reply->addrlen,
29772981 qstate->region);
30343038 if(iq->minimisation_state != DONOT_MINIMISE_STATE
30353039 && !(iq->chase_flags & BIT_RD)) {
30363040 if(FLAGS_GET_RCODE(iq->response->rep->flags) !=
3037 @@ -3440,6 +3534,10 @@
3041 @@ -3467,12 +3561,44 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq,
30383042 * but only if we did recursion. The nonrecursion referral
30393043 * from cache does not need to be stored in the msg cache. */
30403044 if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) {
30453049 iter_dns_store(qstate->env, &qstate->qinfo,
30463050 iq->response->rep, 0, qstate->prefetch_leeway,
30473051 iq->dp&&iq->dp->has_parent_side_NS,
3048 @@ -3446,6 +3544,34 @@
30493052 qstate->region, qstate->query_flags);
30503053 }
30513054 }
30803083 qstate->return_rcode = LDNS_RCODE_NOERROR;
30813084 qstate->return_msg = iq->response;
30823085 return 0;
3083 Index: unboundfastrpz/iterator/iterator.h
3084 ===================================================================
3085 --- unboundfastrpz/iterator/iterator.h (revision 5073)
3086 +++ unboundfastrpz/iterator/iterator.h (working copy)
3087 @@ -386,6 +386,16 @@
3086 diff --git a/iterator/iterator.h b/iterator/iterator.h
3087 index a2f1b57..e1e4a73 100644
3088 --- a/iterator/iterator.h
3089 +++ b/iterator/iterator.h
3090 @@ -386,6 +386,16 @@ struct iter_qstate {
30883091 */
30893092 int minimise_count;
30903093
31013104 /**
31023105 * Count number of time-outs. Used to prevent resolving failures when
31033106 * the QNAME minimisation QTYPE is blocked. */
3104 Index: unboundfastrpz/services/cache/dns.c
3105 ===================================================================
3106 --- unboundfastrpz/services/cache/dns.c (revision 5073)
3107 +++ unboundfastrpz/services/cache/dns.c (working copy)
3108 @@ -939,6 +939,14 @@
3107 diff --git a/services/cache/dns.c b/services/cache/dns.c
3108 index aa4efec..5dd3412 100644
3109 --- a/services/cache/dns.c
3110 +++ b/services/cache/dns.c
3111 @@ -945,6 +945,14 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf,
31093112 struct regional* region, uint32_t flags)
31103113 {
31113114 struct reply_info* rep = NULL;
31203123 /* alloc, malloc properly (not in region, like msg is) */
31213124 rep = reply_info_copy(msgrep, env->alloc, NULL);
31223125 if(!rep)
3123 Index: unboundfastrpz/services/mesh.c
3124 ===================================================================
3125 --- unboundfastrpz/services/mesh.c (revision 5073)
3126 +++ unboundfastrpz/services/mesh.c (working copy)
3126 diff --git a/services/mesh.c b/services/mesh.c
3127 index d96289e..2e9f267 100644
3128 --- a/services/mesh.c
3129 +++ b/services/mesh.c
31273130 @@ -60,6 +60,9 @@
31283131 #include "sldns/wire2str.h"
31293132 #include "services/localzone.h"
31343137 #include "respip/respip.h"
31353138 #include "services/listen_dnsport.h"
31363139
3137 @@ -1072,6 +1075,13 @@
3140 @@ -1072,6 +1075,13 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
31383141 else secure = 0;
31393142 if(!rep && rcode == LDNS_RCODE_NOERROR)
31403143 rcode = LDNS_RCODE_SERVFAIL;
31483151 /* send the reply */
31493152 /* We don't reuse the encoded answer if either the previous or current
31503153 * response has a local alias. We could compare the alias records
3151 @@ -1247,6 +1257,7 @@
3154 @@ -1247,6 +1257,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
31523155 key.s.is_valrec = valrec;
31533156 key.s.qinfo = *qinfo;
31543157 key.s.query_flags = qflags;
31563159 /* We are searching for a similar mesh state when we DO want to
31573160 * aggregate the state. Thus unique is set to NULL. (default when we
31583161 * desire aggregation).*/
3159 @@ -1293,6 +1304,10 @@
3162 @@ -1293,6 +1304,10 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
31603163 if(!r)
31613164 return 0;
31623165 r->query_reply = *rep;
31673170 r->edns = *edns;
31683171 if(edns->opt_list) {
31693172 r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
3170 Index: unboundfastrpz/util/config_file.c
3171 ===================================================================
3172 --- unboundfastrpz/util/config_file.c (revision 5073)
3173 +++ unboundfastrpz/util/config_file.c (working copy)
3174 @@ -1418,6 +1418,8 @@
3173 diff --git a/util/config_file.c b/util/config_file.c
3174 index 9b60254..d791f8f 100644
3175 --- a/util/config_file.c
3176 +++ b/util/config_file.c
3177 @@ -1418,6 +1418,8 @@ config_delete(struct config_file* cfg)
31753178 free(cfg->dnstap_socket_path);
31763179 free(cfg->dnstap_identity);
31773180 free(cfg->dnstap_version);
31803183 config_deldblstrlist(cfg->ratelimit_for_domain);
31813184 config_deldblstrlist(cfg->ratelimit_below_domain);
31823185 #ifdef USE_IPSECMOD
3183 Index: unboundfastrpz/util/config_file.h
3184 ===================================================================
3185 --- unboundfastrpz/util/config_file.h (revision 5073)
3186 +++ unboundfastrpz/util/config_file.h (working copy)
3187 @@ -490,6 +490,11 @@
3186 diff --git a/util/config_file.h b/util/config_file.h
3187 index 3cffdbf..e0fa1c8 100644
3188 --- a/util/config_file.h
3189 +++ b/util/config_file.h
3190 @@ -490,6 +490,11 @@ struct config_file {
31883191 /** true to disable DNSSEC lameness check in iterator */
31893192 int disable_dnssec_lame_check;
31903193
31963199 /** ratelimit for ip addresses. 0 is off, otherwise qps (unless overridden) */
31973200 int ip_ratelimit;
31983201 /** number of slabs for ip_ratelimit cache */
3199 Index: unboundfastrpz/util/configlexer.lex
3200 ===================================================================
3201 --- unboundfastrpz/util/configlexer.lex (revision 5073)
3202 +++ unboundfastrpz/util/configlexer.lex (working copy)
3203 @@ -439,6 +439,10 @@
3202 diff --git a/util/configlexer.lex b/util/configlexer.lex
3203 index 16b5bc5..038045d 100644
3204 --- a/util/configlexer.lex
3205 +++ b/util/configlexer.lex
3206 @@ -439,6 +439,10 @@ dnstap-log-forwarder-query-messages{COLON} {
32043207 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
32053208 dnstap-log-forwarder-response-messages{COLON} {
32063209 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
32113214 disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
32123215 ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) }
32133216 ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
3214 Index: unboundfastrpz/util/configparser.y
3215 ===================================================================
3216 --- unboundfastrpz/util/configparser.y (revision 5073)
3217 +++ unboundfastrpz/util/configparser.y (working copy)
3218 @@ -125,6 +125,7 @@
3217 diff --git a/util/configparser.y b/util/configparser.y
3218 index c7b9169..bef15b5 100644
3219 --- a/util/configparser.y
3220 +++ b/util/configparser.y
3221 @@ -125,6 +125,7 @@ extern struct config_parser_state* cfg_parser;
32193222 %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
32203223 %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
32213224 %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
32233226 %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA
32243227 %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
32253228 %token VAR_DISABLE_DNSSEC_LAME_CHECK
3226 @@ -170,7 +171,7 @@
3229 @@ -170,7 +171,7 @@ extern struct config_parser_state* cfg_parser;
32273230
32283231 %%
32293232 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
32323235 forwardstart contents_forward | pythonstart contents_py |
32333236 rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
32343237 dnscstart contents_dnsc | cachedbstart contents_cachedb |
3235 @@ -2708,6 +2709,50 @@
3238 @@ -2710,6 +2711,50 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
32363239 free($2);
32373240 }
32383241 ;
32833286 pythonstart: VAR_PYTHON
32843287 {
32853288 OUTYY(("\nP(python:)\n"));
3286 Index: unboundfastrpz/util/data/msgencode.c
3287 ===================================================================
3288 --- unboundfastrpz/util/data/msgencode.c (revision 5073)
3289 +++ unboundfastrpz/util/data/msgencode.c (working copy)
3290 @@ -590,6 +590,35 @@
3289 diff --git a/util/data/msgencode.c b/util/data/msgencode.c
3290 index 4c0a555..e51e9b8 100644
3291 --- a/util/data/msgencode.c
3292 +++ b/util/data/msgencode.c
3293 @@ -590,6 +590,35 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
32913294 return RETVAL_OK;
32923295 }
32933296
33233326 /** store query section in wireformat buffer, return RETVAL */
33243327 static int
33253328 insert_query(struct query_info* qinfo, struct compress_tree_node** tree,
3326 @@ -753,6 +782,19 @@
3329 @@ -753,6 +782,19 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
33273330 return 0;
33283331 }
33293332 sldns_buffer_write_u16_at(buffer, 10, arcount);
33433346 }
33443347 sldns_buffer_flip(buffer);
33453348 return 1;
3346 Index: unboundfastrpz/util/data/packed_rrset.c
3347 ===================================================================
3348 --- unboundfastrpz/util/data/packed_rrset.c (revision 5073)
3349 +++ unboundfastrpz/util/data/packed_rrset.c (working copy)
3350 @@ -255,6 +255,10 @@
3349 diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c
3350 index 7b9d549..e44b2ce 100644
3351 --- a/util/data/packed_rrset.c
3352 +++ b/util/data/packed_rrset.c
3353 @@ -255,6 +255,10 @@ sec_status_to_string(enum sec_status s)
33513354 case sec_status_insecure: return "sec_status_insecure";
33523355 case sec_status_secure_sentinel_fail: return "sec_status_secure_sentinel_fail";
33533356 case sec_status_secure: return "sec_status_secure";
33583361 }
33593362 return "unknown_sec_status_value";
33603363 }
3361 Index: unboundfastrpz/util/data/packed_rrset.h
3362 ===================================================================
3363 --- unboundfastrpz/util/data/packed_rrset.h (revision 5073)
3364 +++ unboundfastrpz/util/data/packed_rrset.h (working copy)
3365 @@ -193,7 +193,15 @@
3364 diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h
3365 index 3a5335d..2011321 100644
3366 --- a/util/data/packed_rrset.h
3367 +++ b/util/data/packed_rrset.h
3368 @@ -193,7 +193,15 @@ enum sec_status {
33663369 sec_status_secure_sentinel_fail,
33673370 /** SECURE means that the object (RRset or message) validated
33683371 * according to local policy. */
33793382 };
33803383
33813384 /**
3382 Index: unboundfastrpz/util/netevent.c
3383 ===================================================================
3384 --- unboundfastrpz/util/netevent.c (revision 5073)
3385 +++ unboundfastrpz/util/netevent.c (working copy)
3385 diff --git a/util/netevent.c b/util/netevent.c
3386 index b8b2a09..5ccc29a 100644
3387 --- a/util/netevent.c
3388 +++ b/util/netevent.c
33863389 @@ -57,6 +57,9 @@
33873390 #ifdef HAVE_OPENSSL_ERR_H
33883391 #include <openssl/err.h>
33933396
33943397 /* -------- Start of local definitions -------- */
33953398 /** if CMSG_ALIGN is not defined on this platform, a workaround */
3396 @@ -590,6 +593,9 @@
3399 @@ -590,6 +593,9 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
33973400 struct cmsghdr* cmsg;
33983401 #endif /* S_SPLINT_S */
33993402
34033406 rep.c = (struct comm_point*)arg;
34043407 log_assert(rep.c->type == comm_udp);
34053408
3406 @@ -679,6 +685,9 @@
3409 @@ -679,6 +685,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
34073410 int i;
34083411 struct sldns_buffer *buffer;
34093412
34133416 rep.c = (struct comm_point*)arg;
34143417 log_assert(rep.c->type == comm_udp);
34153418
3416 @@ -722,6 +731,9 @@
3419 @@ -722,6 +731,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
34173420 (void)comm_point_send_udp_msg(rep.c, buffer,
34183421 (struct sockaddr*)&rep.addr, rep.addrlen);
34193422 }
34233426 if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for
34243427 another UDP port. Note rep.c cannot be reused with TCP fd. */
34253428 break;
3426 @@ -3108,6 +3120,9 @@
3429 @@ -3142,6 +3154,9 @@ comm_point_send_reply(struct comm_reply *repinfo)
34273430 repinfo->c->tcp_timeout_msec);
34283431 }
34293432 }
34333436 }
34343437
34353438 void
3436 @@ -3117,6 +3132,9 @@
3439 @@ -3151,6 +3166,9 @@ comm_point_drop_reply(struct comm_reply* repinfo)
34373440 return;
34383441 log_assert(repinfo && repinfo->c);
34393442 log_assert(repinfo->c->type != comm_tcp_accept);
34433446 if(repinfo->c->type == comm_udp)
34443447 return;
34453448 if(repinfo->c->tcp_req_info)
3446 @@ -3138,6 +3156,9 @@
3449 @@ -3172,6 +3190,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
34473450 {
3448 verbose(VERB_ALGO, "comm point start listening %d",
3449 c->fd==-1?newfd:c->fd);
3451 verbose(VERB_ALGO, "comm point start listening %d (%d msec)",
3452 c->fd==-1?newfd:c->fd, msec);
34503453 +#ifdef ENABLE_FASTRPZ
34513454 + rpz_end(&c->repinfo);
34523455 +#endif
34533456 if(c->type == comm_tcp_accept && !c->tcp_free) {
34543457 /* no use to start listening no free slots. */
34553458 return;
3456 Index: unboundfastrpz/util/netevent.h
3457 ===================================================================
3458 --- unboundfastrpz/util/netevent.h (revision 5073)
3459 +++ unboundfastrpz/util/netevent.h (working copy)
3460 @@ -120,6 +120,10 @@
3459 diff --git a/util/netevent.h b/util/netevent.h
3460 index d80c72b..0233292 100644
3461 --- a/util/netevent.h
3462 +++ b/util/netevent.h
3463 @@ -120,6 +120,10 @@ struct comm_reply {
34613464 /** return type 0 (none), 4(IP4), 6(IP6) */
34623465 int srctype;
34633466 /* DnsCrypt context */
34683471 #ifdef USE_DNSCRYPT
34693472 uint8_t client_nonce[crypto_box_HALF_NONCEBYTES];
34703473 uint8_t nmkey[crypto_box_BEFORENMBYTES];
3471 Index: unboundfastrpz/validator/validator.c
3472 ===================================================================
3473 --- unboundfastrpz/validator/validator.c (revision 5073)
3474 +++ unboundfastrpz/validator/validator.c (working copy)
3475 @@ -2755,6 +2755,12 @@
3474 diff --git a/validator/validator.c b/validator/validator.c
3475 index fa8d541..5628ef0 100644
3476 --- a/validator/validator.c
3477 +++ b/validator/validator.c
3478 @@ -2755,6 +2755,12 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
34763479 default:
34773480 /* NSEC proof did not work, try next */
34783481 break;
34853488 }
34863489
34873490 sec = nsec3_prove_nods(qstate->env, ve,
3488 @@ -2788,6 +2794,12 @@
3491 @@ -2788,6 +2794,12 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
34893492 default:
34903493 /* NSEC3 proof did not work */
34913494 break;
1313 int ub_ctx_get_option(ub_ctx*, string, +string*);
1414 int ub_ctx_config(ub_ctx*, string);
1515 int ub_ctx_set_fwd(ub_ctx*, string);
16 int ub_ctx_set_tls(ub_ctx*, bool(int));
1617 int ub_ctx_set_stub(ub_ctx*, string, string, bool(int));
1718 int ub_ctx_resolvconf(ub_ctx*, string);
1819 int ub_ctx_hosts(ub_ctx*, string);
3838 # setup root jail
3939 if [ -s /etc/localtime ]; then
4040 [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ;
41 if [ ! -e ${rootdir}/etc/localtime ] || /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then
41 if [ ! -e ${rootdir}/etc/localtime ] || ! /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then
4242 cp -fp /etc/localtime ${rootdir}/etc/localtime
4343 fi;
4444 fi;
4545 if [ -s /etc/resolv.conf ]; then
4646 [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ;
47 if [ ! -e ${rootdir}/etc/resolv.conf ] || /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then
47 if [ ! -e ${rootdir}/etc/resolv.conf ] || ! /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then
4848 cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf
4949 fi;
5050 fi;
574574 daemon_fork(struct daemon* daemon)
575575 {
576576 int have_view_respip_cfg = 0;
577 #ifdef HAVE_SYSTEMD
578 int ret;
579 #endif
577580
578581 log_assert(daemon);
579582 if(!(daemon->views = views_create()))
659662
660663 /* Start resolver service on main thread. */
661664 #ifdef HAVE_SYSTEMD
662 sd_notify(0, "READY=1");
665 ret = sd_notify(0, "READY=1");
666 if(ret <= 0 && getenv("NOTIFY_SOCKET"))
667 fatal_exit("sd_notify failed %s: %s. Make sure that unbound has "
668 "access/permission to use the socket presented by systemd.",
669 getenv("NOTIFY_SOCKET"),
670 (ret==0?"no $NOTIFY_SOCKET": strerror(-ret)));
663671 #endif
664672 log_info("start of service (%s).", PACKAGE_STRING);
665673 worker_work(daemon->workers[0]);
769777 # endif
770778 # ifdef HAVE_OPENSSL_CONFIG
771779 EVP_cleanup();
772 # if OPENSSL_VERSION_NUMBER < 0x10100000
780 # if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE)
773781 ENGINE_cleanup();
774782 # endif
775783 CONF_modules_free();
19861986 return NULL;
19871987 }
19881988 } else {
1989 #ifndef HAVE_SSL_SET1_HOST
1989 #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
19901990 if(auth_name)
19911991 log_err("no name verification functionality in "
19921992 "ssl library, ignored name for %s", todo);
7676 #ifndef S_SPLINT_S
7777 (*d_sec) += add_sec;
7878 (*d_usec) += add_usec;
79 if((*d_usec) > 1000000) {
79 if((*d_usec) >= 1000000) {
8080 (*d_usec) -= 1000000;
8181 (*d_sec)++;
8282 }
8787 # include "nss.h"
8888 #endif
8989
90 /** print usage. */
91 static void usage(void)
90 /** print build options. */
91 static void
92 print_build_options(void)
9293 {
9394 const char** m;
9495 const char *evnm="event", *evsys="", *evmethod="";
9596 time_t t;
9697 struct timeval now;
9798 struct ub_event_base* base;
98 printf("usage: unbound [options]\n");
99 printf(" start unbound daemon DNS resolver.\n");
100 printf("-h this help\n");
101 printf("-c file config file to read instead of %s\n", CONFIGFILE);
102 printf(" file format is described in unbound.conf(5).\n");
103 printf("-d do not fork into the background.\n");
104 printf("-p do not create a pidfile.\n");
105 printf("-v verbose (more times to increase verbosity)\n");
106 #ifdef UB_ON_WINDOWS
107 printf("-w opt windows option: \n");
108 printf(" install, remove - manage the services entry\n");
109 printf(" service - used to start from services control panel\n");
110 #endif
111 printf("Version %s\n", PACKAGE_VERSION);
99 printf("Version %s\n\n", PACKAGE_VERSION);
100 printf("Configure line: %s\n", CONFCMDLINE);
112101 base = ub_default_event_base(0,&t,&now);
113102 ub_get_event_sys(base, &evnm, &evsys, &evmethod);
114 printf("linked libs: %s %s (it uses %s), %s\n",
103 printf("Linked libs: %s %s (it uses %s), %s\n",
115104 evnm, evsys, evmethod,
116105 #ifdef HAVE_SSL
117106 # ifdef SSLEAY_VERSION
125114 "nettle"
126115 #endif
127116 );
128 printf("linked modules:");
117 printf("Linked modules:");
129118 for(m = module_list_avail(); *m; m++)
130119 printf(" %s", *m);
131120 printf("\n");
132121 #ifdef USE_DNSCRYPT
133122 printf("DNSCrypt feature available\n");
134123 #endif
124 ub_event_base_free(base);
125 printf("\nBSD licensed, see LICENSE in source package for details.\n");
126 printf("Report bugs to %s\n", PACKAGE_BUGREPORT);
127 }
128
129 /** print usage. */
130 static void
131 usage(void)
132 {
133 printf("usage: unbound [options]\n");
134 printf(" start unbound daemon DNS resolver.\n");
135 printf("-h this help.\n");
136 printf("-c file config file to read instead of %s\n", CONFIGFILE);
137 printf(" file format is described in unbound.conf(5).\n");
138 printf("-d do not fork into the background.\n");
139 printf("-p do not create a pidfile.\n");
140 printf("-v verbose (more times to increase verbosity).\n");
141 printf("-V show version number and build options.\n");
142 #ifdef UB_ON_WINDOWS
143 printf("-w opt windows option: \n");
144 printf(" install, remove - manage the services entry\n");
145 printf(" service - used to start from services control panel\n");
146 #endif
147 printf("\nVersion %s\n", PACKAGE_VERSION);
135148 printf("BSD licensed, see LICENSE in source package for details.\n");
136149 printf("Report bugs to %s\n", PACKAGE_BUGREPORT);
137 ub_event_base_free(base);
138150 }
139151
140152 #ifndef unbound_testbound
442454 }
443455 }
444456 #endif
445 if(cfg->tls_session_ticket_keys.first) {
457 if(cfg->tls_session_ticket_keys.first &&
458 cfg->tls_session_ticket_keys.first->str[0] != 0) {
446459 if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys.first)) {
447460 fatal_exit("could not set session ticket SSL_CTX");
448461 }
718731 log_ident_default = strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0];
719732 log_ident_set(log_ident_default);
720733 /* parse the options */
721 while( (c=getopt(argc, argv, "c:dhpvw:")) != -1) {
734 while( (c=getopt(argc, argv, "c:dhpvw:V")) != -1) {
722735 switch(c) {
723736 case 'c':
724737 cfgfile = optarg;
739752 case 'w':
740753 winopt = optarg;
741754 break;
755 case 'V':
756 print_build_options();
757 return 0;
742758 case '?':
743759 case 'h':
744760 default:
659659 if(!reply_check_cname_chain(qinfo, rep)) {
660660 /* cname chain invalid, redo iterator steps */
661661 verbose(VERB_ALGO, "Cache reply: cname chain broken");
662 bail_out:
663 rrset_array_unlock_touch(worker->env.rrset_cache,
664 worker->scratchpad, rep->ref, rep->rrset_count);
665 return 0;
662 goto bail_out;
666663 }
667664 }
668665 /* check security status of the cached answer */
723720 if(encode_rep != rep)
724721 secure = 0; /* if rewritten, it can't be considered "secure" */
725722 if(!encode_rep || *alias_rrset) {
726 sldns_buffer_clear(repinfo->c->buffer);
727 sldns_buffer_flip(repinfo->c->buffer);
728723 if(!encode_rep)
729724 *need_drop = 1;
730725 else {
757752 }
758753 /* go and return this buffer to the client */
759754 return 1;
760 }
761
762 /** Reply to client and perform prefetch to keep cache up to date.
763 * If the buffer for the reply is empty, it indicates that only prefetch is
764 * necessary and the reply should be suppressed (because it's dropped or
765 * being deferred). */
755
756 bail_out:
757 rrset_array_unlock_touch(worker->env.rrset_cache,
758 worker->scratchpad, rep->ref, rep->rrset_count);
759 return 0;
760 }
761
762 /** Reply to client and perform prefetch to keep cache up to date. */
766763 static void
767764 reply_and_prefetch(struct worker* worker, struct query_info* qinfo,
768 uint16_t flags, struct comm_reply* repinfo, time_t leeway)
765 uint16_t flags, struct comm_reply* repinfo, time_t leeway, int noreply)
769766 {
770767 /* first send answer to client to keep its latency
771768 * as small as a cachereply */
772 if(sldns_buffer_limit(repinfo->c->buffer) != 0)
769 if(!noreply) {
770 if(repinfo->c->tcp_req_info) {
771 sldns_buffer_copy(
772 repinfo->c->tcp_req_info->spool_buffer,
773 repinfo->c->buffer);
774 }
773775 comm_point_send_reply(repinfo);
776 }
774777 server_stats_prefetch(&worker->stats, worker);
775778
776779 /* create the prefetch in the mesh as a normal lookup without
10911094 struct respip_client_info* cinfo = NULL, cinfo_tmp;
10921095 memset(&qinfo, 0, sizeof(qinfo));
10931096
1094 if(error != NETEVENT_NOERROR) {
1097 if(error != NETEVENT_NOERROR || !repinfo) {
10951098 /* some bad tcp query DNS formats give these error calls */
10961099 verbose(VERB_ALGO, "handle request called with err=%d", error);
10971100 return 0;
11701173
11711174 /* check if this query should be dropped based on source ip rate limiting */
11721175 if(!infra_ip_ratelimit_inc(worker->env.infra_cache, repinfo,
1173 *worker->env.now)) {
1176 *worker->env.now, c->buffer)) {
11741177 /* See if we are passed through with slip factor */
11751178 if(worker->env.cfg->ip_ratelimit_factor != 0 &&
11761179 ub_random_max(worker->env.rnd,
14751478 lock_rw_unlock(&e->lock);
14761479 reply_and_prefetch(worker, lookup_qinfo,
14771480 sldns_buffer_read_u16_at(c->buffer, 2),
1478 repinfo, leeway);
1481 repinfo, leeway,
1482 (partial_rep || need_drop));
14791483 if(!partial_rep) {
14801484 rc = 0;
14811485 regional_free_all(worker->scratchpad);
15581562 if(worker->env.cfg->log_replies)
15591563 {
15601564 struct timeval tv = {0, 0};
1561 log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen,
1562 tv, 1, c->buffer);
1565 if(qinfo.local_alias && qinfo.local_alias->rrset &&
1566 qinfo.local_alias->rrset->rk.dname) {
1567 /* log original qname, before the local alias was
1568 * used to resolve that CNAME to something else */
1569 qinfo.qname = qinfo.local_alias->rrset->rk.dname;
1570 log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen,
1571 tv, 1, c->buffer);
1572 } else {
1573 log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen,
1574 tv, 1, c->buffer);
1575 }
15631576 }
15641577 #ifdef USE_DNSCRYPT
15651578 if(!dnsc_handle_uncurved_request(repinfo)) {
0 5 February 2019: Wouter
1 - Fix tls-ciphers spelling in example.conf
0 15 August 2019: Wouter
1 - iana portlist updated.
2 - Fix autotrust temp file uniqueness windows compile.
3 - avoid warning about upcast on 32bit systems for autotrust.
4 - escape commandline contents for -V.
5 - Fix character buffer size in ub_ctx_hosts.
6 - 1.9.3rc1 release candidate tag.
7
8 14 August 2019: George
9 - Fix #59, when compiled with systemd support check that we can properly
10 communicate with systemd through the `NOTIFY_SOCKET`.
11
12 14 August 2019: Wouter
13 - Generate configlexer with newer flex.
14 - Fix warning for unused variable for compilation without systemd.
15
16 12 August 2019: George
17 - Introduce `-V` option to print the version number and build options.
18 Previously reported build options like linked libs and linked modules
19 are now moved from `-h` to `-V` as well for consistency.
20 - PACKAGE_BUGREPORT now also includes link to GitHub issues.
21
22 1 August 2019: Wouter
23 - For #52 #53, second context does not close logfile override.
24 - Fix #52 #53, fix for example fail program.
25 - Fix to return after failed auth zone http chunk write.
26 - Fix to remove unused test for task_probe existance.
27 - Fix to timeval_add for remaining second in microseconds.
28 - Check repinfo in worker_handle_request, if null, drop it.
29
30 29 July 2019: Wouter
31 - Add verbose log message when auth zone file is written, at level 4.
32 - Add hex print of trust anchor pointer to trust anchor file temp
33 name to make it unique, for libunbound created multiple contexts.
34
35 23 July 2019: Wouter
36 - Fix question section mismatch in local zone redirect.
37
38 19 July 2019: Wouter
39 - Fix #49: Set no renegotiation on the SSL context to stop client
40 session renegotiation.
41
42 12 July 2019: Wouter
43 - Fix #48: Unbound returns additional records on NODATA response,
44 if minimal-responses is enabled, also the additional for negative
45 responses is removed.
46
47 9 July 2019: Ralph
48 - Fix in respip addrtree selection. Absence of addr_tree_init_parents()
49 call made it impossible to go up the tree when the matching netmask is
50 too specific.
51
52 5 July 2019: Ralph
53 - Fix for possible assertion failure when answering respip CNAME from
54 cache.
55
56 25 June 2019: Wouter
57 - For #45, check that 127.0.0.1 and ::1 are not used in unbound.conf
58 when do-not-query-localhost is turned on, or at default on,
59 unbound-checkconf prints a warning if it is found in forward-addr or
60 stub-addr statements.
61
62 24 June 2019: Wouter
63 - Fix memleak in unit test, reported from the clang 8.0 static analyzer.
64
65 18 June 2019: Wouter
66 - PR #28: IPSet module, by Kevin Chou. Created a module to support
67 the ipset that could add the domain's ip to a list easily.
68 Needs libmnl, and --enable-ipset and config it, doc/README.ipset.md.
69 - Fix to omit RRSIGs from addition to the ipset.
70 - Fix to make unbound-control with ipset, remove unused variable,
71 use unsigned type because of comparison, and assign null instead
72 of compare with it. Remade lex and yacc output.
73 - make depend
74 - Added documentation to the ipset files (for doxygen output).
75 - Merge PR #6: Python module: support multiple instances
76 - Merge PR #5: Python module: define constant MODULE_RESTART_NEXT
77 - Merge PR #4: Python module: assign something useful to the
78 per-query data store 'qdata'
79 - Fix python dict reference and double free in config.
80
81 17 June 2019: Wouter
82 - Master contains version 1.9.3 in development.
83 - Fix #39: In libunbound, leftover logfile is close()d unpredictably.
84 - Fix for #24: Fix abort due to scan of auth zone masters using old
85 address from previous scan.
86
87 12 June 2019: Wouter
88 - Fix another spoolbuf storage code point, in prefetch.
89 - 1.9.2rc3 release candidate tag. Which became the 1.9.2 release
90 on 17 June 2019.
91
92 11 June 2019: Wouter
93 - Fix that fixes the Fix that spoolbuf is not used to store tcp
94 pipelined response between mesh send and callback end, this fixes
95 error cases that did not use the correct spoolbuf.
96 - 1.9.2rc2 release candidate tag.
97
98 6 June 2019: Wouter
99 - 1.9.2rc1 release candidate tag.
100
101 4 June 2019: Wouter
102 - iana portlist updated.
103
104 29 May 2019: Wouter
105 - Fix to guard _OPENBSD_SOURCE from redefinition.
106
107 28 May 2019: Wouter
108 - Fix to define _OPENBSD_SOURCE to get reallocarray on NetBSD.
109 - gitignore config.h.in~.
110
111 27 May 2019: Wouter
112 - Fix double file close in tcp pipelined response code.
113
114 24 May 2019: Wouter
115 - Fix that spoolbuf is not used to store tcp pipelined response
116 between mesh send and callback end.
117
118 20 May 2019: Wouter
119 - Note that so-reuseport at extreme load is better turned off,
120 otherwise queries are not distributed evenly, on Linux 4.4.x.
121
122 16 May 2019: Wouter
123 - Fix #31: swig 4.0 and python module.
124
125 13 May 2019: Wouter
126 - Squelch log messages from tcp send about connection reset by peer.
127 They can be enabled with verbosity at higher values for diagnosing
128 network connectivity issues.
129 - Attempt to fix malformed tcp response.
130
131 9 May 2019: Wouter
132 - Revert fix for oss-fuzz, error is in that build script that
133 unconditionally includes .o files detected by configure, also
134 when the machine architecture uses different LIBOBJS files.
135
136 8 May 2019: Wouter
137 - Attempt to fix build failure in oss-fuzz because of reallocarray.
138 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14648.
139 Does not omit compile flags from commandline.
140
141 7 May 2019: Wouter
142 - Fix edns-subnet locks, in error cases the lock was not unlocked.
143 - Fix doxygen output error on readme markdown vignettes.
144
145 6 May 2019: Wouter
146 - Fix #29: Solaris 11.3 and missing symbols be64toh, htobe64.
147 - Fix #30: AddressSanitizer finding in lookup3.c. This sets the
148 hash function to use a slower but better auditable code that does
149 not read beyond array boundaries. This makes code better security
150 checkable, and is better for security. It is fixed to be slower,
151 but not read outside of the array.
152
153 2 May 2019: Wouter
154 - contrib/fastrpz.patch updated for code changes, and with git diff.
155 - Fix .gitignore, add pythonmod and dnstap generated files.
156 And unit test generated files, and generated doc files.
157
158 1 May 2019: Wouter
159 - Update makedist for git.
160 - Nicer travis output for clang analysis.
161 - PR #16: XoT support, AXFR over TLS, turn it on with
162 master: <ip>#<authname> in unbound.conf. This uses TLS to
163 download the AXFR (or IXFR).
164
165 25 April 2019: Wouter
166 - Fix wrong query name in local zone redirect answers with a CNAME,
167 the copy of the local alias is in unpacked form.
168
169 18 April 2019: Ralph
170 - Scrub RRs from answer section when reusing NXDOMAIN message for
171 subdomain answers.
172 - For harden-below-nxdomain: do not consider a name to be non-exitent
173 when message contains a CNAME record.
174
175 18 April 2019: Wouter
176 - travis build file.
177
178 16 April 2019: Wouter
179 - Better braces in if statement in TCP fastopen code.
180 - iana portlist updated.
181
182 15 April 2019: Wouter
183 - Fix tls write event for read state change to re-call SSL_write and
184 not resume the TLS handshake.
185
186 11 April 2019: George
187 - Update python documentation for init_standard().
188 - Typos.
189
190 11 April 2019: Wouter
191 - Fix that auth zone uses correct network type for sockets for
192 SOA serial probes. This fixes that probes fail because earlier
193 probe addresses are unreachable.
194 - Fix that auth zone fails over to next master for timeout in tcp.
195 - Squelch SSL read and write connection reset by peer and broken pipe
196 messages. Verbosity 2 and higher enables them.
197
198 8 April 2019: Wouter
199 - Fix to use event_assign with libevent for thread-safety.
200 - verbose information about auth zone lookup process, also lookup
201 start, timeout and fail.
202 - Fix #17: Add python module example from Jan Janak, that is a
203 plugin for the Unbound DNS resolver to resolve DNS records in
204 multicast DNS [RFC 6762] via Avahi. The plugin communicates
205 with Avahi via DBus. The comment section at the beginning of
206 the file contains detailed documentation.
207 - Fix to wipe ssl ticket keys from memory with explicit_bzero,
208 if available.
209
210 5 April 2019: Wouter
211 - Fix to reinit event structure for accepted TCP (and TLS) sockets.
212
213 4 April 2019: Wouter
214 - Fix spelling error in log output for event method.
215
216 3 April 2019: Wouter
217 - Move goto label in answer_from_cache to the end of the function
218 where it is more visible.
219 - Fix auth-zone NSEC3 response for wildcard nodata answers,
220 include the closest encloser in the answer.
221
222 2 April 2019: Wouter
223 - Fix auth-zone NSEC3 response for empty nonterminals with exact
224 match nsec3 records.
225 - Fix for out of bounds integers, thanks to OSTIF audit. It is in
226 allocation debug code.
227 - Fix for auth zone nsec3 ent fix for wildcard nodata.
228
229 25 March 2019: Wouter
230 - Fix that tls-session-ticket-keys: "" on its own in unbound.conf
231 disables the tls session ticker key calls into the OpenSSL API.
232 - Fix crash if tls-servic-pem not filled in when necessary.
233
234 21 March 2019: Wouter
235 - Fix #4240: Fix whitespace cleanup in example.conf.
236
237 19 March 2019: Wouter
238 - add type CAA to libpyunbound (accessing libunbound from python).
239
240 18 March 2019: Wouter
241 - Add log message, at verbosity 4, that says the query is encrypted
242 with TLS, if that is enabled for the query.
243 - Fix #4239: set NOTIMPL when deny-any is enabled, for RFC8482.
244
245 7 March 2019: Wouter
246 - Fix for #4233: guard use of NDEBUG, so that it can be passed in
247 CFLAGS into configure.
248
249 5 March 2019: Wouter
250 - Tag release 1.9.1rc1. Which became 1.9.1 on 12 March 2019. Trunk
251 has 1.9.2 in development.
252
253 1 March 2019: Wouter
254 - output forwarder log in ssl_req_order test.
255
256 28 February 2019: Wouter
257 - Remove memory leak on pythonmod python2 script file init.
258 - Remove swig gcc8 python function cast warnings, they are ignored.
259 - Print correct module that failed when module-config is wrong.
260
261 27 February 2019: Wouter
262 - Fix #4229: Unbound man pages lack information, about access-control
263 order and local zone tags, and elements in views.
264 - Fix #14: contrib/unbound.init: Fix wrong comparison judgment
265 before copying.
266 - Fix for python module on Windows, fix fopen.
267
268 25 February 2019: Wouter
269 - Fix #4227: pair event del and add for libevent for tcp_req_info.
270
271 21 February 2019: Wouter
272 - Fix the error for unknown module in module-config is understandable,
273 and explains it was not compiled in and where to see the list.
274 - In example.conf explain where to put cachedb module in module-config.
275 - In man page and example config explain that most modules have to
276 be listed at the start of module-config.
277
278 20 February 2019: Wouter
279 - Fix pythonmod include and sockaddr_un ifdefs for compile on
280 Windows, and for libunbound.
281
282 18 February 2019: Wouter
283 - Print query name with ip_ratelimit exceeded log lines.
284 - Spaces instead of tabs in that log message.
285 - Print query name and IP address when domain rate limit exceeded.
286
287 14 February 2019: Wouter
288 - Fix capsforid canonical sort qsort callback.
289
290 11 February 2019: Wouter
291 - Note default for module-config in man page.
292 - Fix recursion lame test for qname minimisation asked queries,
293 that were not present in the set of prepared answers.
294 - Fix #13: Remove left-over requirements on OpenSSL >= 1.1.0 for
295 cert name matching, from man page.
296 - make depend, with newer gcc, nicer layout.
297
298 7 February 2019: Wouter
299 - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2.
300 - Fix that qname minimisation does not skip a label when missing
301 nameserver targets need to be fetched.
302 - Fix #4225: clients seem to erroneously receive no answer with
303 DNS-over-TLS and qname-minimisation.
304
305 4 February 2019: Wouter
306 - Fix that log-replies prints the correct name for local-alias
307 names, for names that have a CNAME in local-data configuration.
308 It logs the original query name, not the target of the CNAME.
309 - Add local-zone type inform_redirect, which logs like type inform,
310 and redirects like type redirect.
311 - Perform canonical sort for 0x20 capsforid compare of replies,
312 this sorts rrsets in the authority and additional section before
313 comparison, so that out of order rrsets do not cause failure.
314
315 31 January 2019: Wouter
316 - Set ub_ctx_set_tls call signature in ltrace config file for
317 libunbound in contrib/libunbound.so.conf.
318 - improve documentation for tls-service-key and forward-first.
319 - #10: fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of
320 conditional section, fixes systemd builds, from Enrico Scholz.
321 - #9: For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks,
322 still supports the set_id_callback previous API. And for 1.1.0
323 no locking callbacks are needed.
324 - #8: Fix OpenSSL without ENGINE support compilation.
325 - Wipe TLS session key data from memory on exit.
326
327 30 January 2019: Ralph
328 - Fix case in which query timeout can result in marking delegation
329 as edns_lame_known.
330
331 29 January 2019: Wouter
332 - Fix spelling of tls-ciphers in example.conf.in.
333 - Fix #4224: auth_xfr_notify.rpl test broken due to typo
334 - Fix locking for libunbound context setup with broken port config.
2335
3336 28 January 2019: Wouter
4337 - ub_ctx_set_tls call for libunbound that enables DoT for the machines
7340 - List example config for root zone copy locally hosted with auth-zone
8341 as suggested from draft-ietf-dnsop-7706-bis-02. But with updated
9342 B root address.
10 - set version to 1.9.0 for release.
343 - set version to 1.9.0 for release. And this was released with the
344 spelling for tls-ciphers fix as 1.9.0 on Feb 5. Trunk has 1.9.1 in
345 development.
11346
12347 25 January 2019: Wouter
13348 - Fix that tcp for auth zone and outgoing does not remove and
0 README for Unbound 1.9.0
0 README for Unbound 1.9.3rc1
11 Copyright 2007 NLnet Labs
22 http://unbound.net
33
0 ## Created a module to support the ipset that could add the domain's ip to a list easily.
1
2 ### Purposes:
3 * In my case, I can't access the facebook, twitter, youtube and thousands web site for some reason. VPN is a solution. But the internet too slow whether all traffics pass through the vpn.
4 So, I set up a transparent proxy to proxy the traffic which has been blocked only.
5 At the final step, I need to install a dns service which would work with ipset well to launch the system.
6 I did some research for this. Unfortunately, Unbound, My favorite dns service doesn't support ipset yet. So, I decided to implement it by my self and contribute the patch. It's good for me and the community.
7 ```
8 # unbound.conf
9 server:
10 ...
11 local-zone: "facebook.com" ipset
12 local-zone: "twitter.com" ipset
13 local-zone: "instagram.com" ipset
14 more social website
15
16 ipset:
17 name-v4: "gfwlist"
18 ```
19 ```
20 # iptables
21 iptables -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-ports 10800
22 iptables -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-ports 10800
23 ```
24
25 * This patch could work with iptables rules to batch block the IPs.
26 ```
27 # unbound.conf
28 server:
29 ...
30 local-zone: "facebook.com" ipset
31 local-zone: "twitter.com" ipset
32 local-zone: "instagram.com" ipset
33 more social website
34
35 ipset:
36 name-v4: "blacklist"
37 name-v6: "blacklist6"
38 ```
39 ```
40 # iptables
41 iptables -A INPUT -m set --set blacklist src -j DROP
42 ip6tables -A INPUT -m set --set blacklist6 src -j DROP
43 ```
44
45 ### Notes:
46 * To enable this module the root privileges is required.
47 * Please create a set with ipset command first. eg. **ipset -N blacklist iphash**
48
49 ### How to use:
50 ```
51 ./configure --enable-ipset
52 make && make install
53 ```
54
55 ### Configuration:
56 ```
57 # unbound.conf
58 server:
59 ...
60 local-zone: "example.com" ipset
61
62 ipset:
63 name-v4: "blacklist"
64 ```
00 #
11 # Example configuration file.
22 #
3 # See unbound.conf(5) man page, version 1.9.0.
3 # See unbound.conf(5) man page, version 1.9.3rc1.
44 #
55 # this is a comment.
66
102102 # so-sndbuf: 0
103103
104104 # use SO_REUSEPORT to distribute queries over threads.
105 # at extreme load it could be better to turn it off to distribute even.
105106 # so-reuseport: yes
106107
107108 # use IP_TRANSPARENT so the interface: addresses can be non-local
474475
475476 # module configuration of the server. A string with identifiers
476477 # separated by spaces. Syntax: "[dns64] [validator] iterator"
478 # most modules have to be listed at the beginning of the line,
479 # except cachedb(just before iterator), and python (at the beginning,
480 # or, just before the iterator).
477481 # module-config: "validator iterator"
478482
479483 # File with trusted keys, kept uptodate using RFC5011 probes,
488492
489493 # trust anchor signaling sends a RFC8145 key tag query after priming.
490494 # trust-anchor-signaling: yes
491
495
492496 # Root key trust anchor sentinel (draft-ietf-dnsop-kskroll-sentinel)
493497 # root-key-sentinel: yes
494498
649653 # local-zone: "8.b.d.0.1.0.0.2.ip6.arpa." nodefault
650654 # And for 64.100.in-addr.arpa. to 127.100.in-addr.arpa.
651655
656 # Add example.com into ipset
657 # local-zone: "example.com" ipset
658
652659 # If unbound is running service for the local host then it is useful
653660 # to perform lan-wide lookups to the upstream, and unblock the
654661 # long list of local-zones above. If this unbound is a dns server
672679 # o typetransparent resolves normally for other types and other names
673680 # o inform acts like transparent, but logs client IP address
674681 # o inform_deny drops queries and logs client IP address
682 # o inform_redirect redirects queries and logs client IP address
675683 # o always_transparent, always_refuse, always_nxdomain, resolve in
676684 # that way but ignore local data for that name
677685 # o noview breaks out of that view towards global local-zones.
716724
717725 # cipher setting for TLSv1.2
718726 # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256"
719 # cipher setting for TLSv1.3
727 # cipher setting for TLSv1.3
720728 # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"
721729
722730 # Add the secret file for TLS Session Ticket.
788796 # fast-server-permil: 0
789797 # the number of servers that will be used in the fast server selection.
790798 # fast-server-num: 3
791
799
792800 # Specific options for ipsecmod. unbound needs to be configured with
793801 # --enable-ipsecmod for these to take effect.
794802 #
821829 # Python config section. To enable:
822830 # o use --with-pythonmodule to configure before compiling.
823831 # o list python in the module-config string (above) to enable.
832 # It can be at the start, it gets validated results, or just before
833 # the iterator and process before DNSSEC validation.
824834 # o and give a python-script to run.
825835 python:
826836 # Script file to load
905915 # notifies.
906916 # auth-zone:
907917 # name: "."
908 # master: 199.9.14.201 # b.root-servers.net
909 # master: 192.33.4.12 # c.root-servers.net
910 # master: 199.7.91.13 # d.root-servers.net
911 # master: 192.5.5.241 # f.root-servers.net
912 # master: 192.112.36.4 # g.root-servers.net
913 # master: 193.0.14.129 # k.root-servers.net
914 # master: 192.0.47.132 # xfr.cjr.dns.icann.org
915 # master: 192.0.32.132 # xfr.lax.dns.icann.org
916 # master: 2001:500:200::b # b.root-servers.net
917 # master: 2001:500:2::c # c.root-servers.net
918 # master: 2001:500:2d::d # d.root-servers.net
919 # master: 2001:500:2f::f # f.root-servers.net
920 # master: 2001:500:12::d0d # g.root-servers.net
921 # master: 2001:7fd::1 # k.root-servers.net
922 # master: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org
923 # master: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org
924 # fallback-enabled: yes
925 # for-downstream: no
918 # master: 199.9.14.201 # b.root-servers.net
919 # master: 192.33.4.12 # c.root-servers.net
920 # master: 199.7.91.13 # d.root-servers.net
921 # master: 192.5.5.241 # f.root-servers.net
922 # master: 192.112.36.4 # g.root-servers.net
923 # master: 193.0.14.129 # k.root-servers.net
924 # master: 192.0.47.132 # xfr.cjr.dns.icann.org
925 # master: 192.0.32.132 # xfr.lax.dns.icann.org
926 # master: 2001:500:200::b # b.root-servers.net
927 # master: 2001:500:2::c # c.root-servers.net
928 # master: 2001:500:2d::d # d.root-servers.net
929 # master: 2001:500:2f::f # f.root-servers.net
930 # master: 2001:500:12::d0d # g.root-servers.net
931 # master: 2001:7fd::1 # k.root-servers.net
932 # master: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org
933 # master: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org
934 # fallback-enabled: yes
935 # for-downstream: no
926936 # for-upstream: yes
927937 # auth-zone:
928938 # name: "example.org"
971981 # Enable external backend DB as auxiliary cache. Specify the backend name
972982 # (default is "testframe", which has no use other than for debugging and
973983 # testing) and backend-specific options. The 'cachedb' module must be
974 # included in module-config.
984 # included in module-config, just before the iterator module.
975985 # cachedb:
976986 # backend: "testframe"
977987 # # secret seed string to calculate hashed keys
984994 # redis-server-port: 6379
985995 # # timeout (in ms) for communication with the redis server
986996 # redis-timeout: 100
997
998 # IPSet
999 # Add specify domain into set via ipset.
1000 # Note: To enable ipset needs run unbound as root user.
1001 # ipset:
1002 # # set name for ip v4 addresses
1003 # name-v4: "list-v4"
1004 # # set name for ip v6 addresses
1005 # name-v6: "list-v6"
1006 #
1007
0 .TH "libunbound" "3" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "libunbound" "3" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" libunbound.3 -- unbound library functions manual
33 .\"
4343 .B ub_ctx_zone_remove,
4444 .B ub_ctx_data_add,
4545 .B ub_ctx_data_remove
46 \- Unbound DNS validating resolver 1.9.0 functions.
46 \- Unbound DNS validating resolver 1.9.3rc1 functions.
4747 .SH "SYNOPSIS"
4848 .B #include <unbound.h>
4949 .LP
0 .TH "unbound-anchor" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "unbound-anchor" "8" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" unbound-anchor.8 -- unbound anchor maintenance utility manual
33 .\"
0 .TH "unbound-checkconf" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "unbound-checkconf" "8" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" unbound-checkconf.8 -- unbound configuration checker manual
33 .\"
0 .TH "unbound-control" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "unbound-control" "8" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" unbound-control.8 -- unbound remote control manual
33 .\"
0 .TH "unbound\-host" "1" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "unbound\-host" "1" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" unbound-host.1 -- unbound DNS lookup utility
33 .\"
0 .TH "unbound" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "unbound" "8" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" unbound.8 -- unbound manual
33 .\"
88 .\"
99 .SH "NAME"
1010 .B unbound
11 \- Unbound DNS validating resolver 1.9.0.
11 \- Unbound DNS validating resolver 1.9.3rc1.
1212 .SH "SYNOPSIS"
1313 .B unbound
1414 .RB [ \-h ]
5353 The available options are:
5454 .TP
5555 .B \-h
56 Show the version and commandline option help.
56 Show the version number and commandline option help, and exit.
5757 .TP
5858 .B \-c\fI cfgfile
5959 Set the config file with settings for unbound to read instead of reading the
7575 .B \-v
7676 Increase verbosity. If given multiple times, more information is logged.
7777 This is in addition to the verbosity (if any) from the config file.
78 .TP
79 .B \-V
80 Show the version number and build options, and exit.
7881 .SH "SEE ALSO"
7982 \fIunbound.conf\fR(5),
8083 \fIunbound\-checkconf\fR(8),
0 .TH "unbound.conf" "5" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
0 .TH "unbound.conf" "5" "Aug 15, 2019" "NLnet Labs" "unbound 1.9.3rc1"
11 .\"
22 .\" unbound.conf.5 -- unbound.conf manual
33 .\"
299299 it then attempts to open the port and passes the option if it was available
300300 at compile time, if that works it is used, if it fails, it continues
301301 silently (unless verbosity 3) without the option.
302 At extreme load it could be better to turn it off to distribute the queries
303 evenly, reported for Linux systems (4.4.x).
302304 .TP
303305 .B ip\-transparent: \fI<yes or no>
304306 If yes, then use IP_TRANSPARENT socket option on sockets where unbound
457459 file the last is used.
458460 .TP
459461 .B tls\-service\-key: \fI<file>
460 If enabled, the server provides TLS service on its TCP sockets. The clients
461 have to use tls\-upstream: yes. The file is the private key for the TLS
462 session. The public certificate is in the tls\-service\-pem file. Default
463 is "", turned off. Requires a restart (a reload is not enough) if changed,
464 because the private key is read while root permissions are held and before
465 chroot (if any). Normal DNS TCP service is not provided and gives errors,
466 this service is best run with a different \fBport:\fR config or \fI@port\fR
467 suffixes in the \fBinterface\fR config.
462 If enabled, the server provides TLS service on the TCP ports marked
463 implicitly or explicitly for TLS service with tls\-port. The file must
464 contain the private key for the TLS session, the public certificate is in
465 the tls\-service\-pem file and it must also be specified if tls\-service\-key
466 is specified. The default is "", turned off. Enabling or disabling
467 this service requires a restart (a reload is not enough), because the
468 key is read while root permissions are held and before chroot (if any).
469 The ports enabled implicitly or explicitly via \fBtls\-port:\fR do not provide
470 normal DNS TCP service.
468471 .TP
469472 .B ssl\-service\-key: \fI<file>
470473 Alternate syntax for \fBtls\-service\-key\fR.
544547 \fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or
545548 \fIrefuse_non_local\fR.
546549 The most specific netblock match is used, if none match \fIdeny\fR is used.
550 The order of the access\-control statements therefore does not matter.
547551 .IP
548552 The action \fIdeny\fR stops queries from hosts from that netblock.
549553 .IP
825829 .TP
826830 .B qname\-minimisation: \fI<yes or no>
827831 Send minimum amount of information to upstream servers to enhance privacy.
828 Only sent minimum required labels of the QNAME and set QTYPE to A when
832 Only send minimum required labels of the QNAME and set QTYPE to A when
829833 possible. Best effort approach; full QNAME and original QTYPE will be sent when
830834 upstream replies with a RCODE other than NOERROR, except when receiving
831835 NXDOMAIN from a DNSSEC signed zone. Default is yes.
928932 Setting this to "validator iterator" will turn on DNSSEC validation.
929933 The ordering of the modules is important.
930934 You must also set trust\-anchors for validation to be useful.
935 The default is "validator iterator". When the server is built with
936 EDNS client subnet support the default is "subnetcache validator iterator".
937 Most modules that need to be listed here have to be listed at the beginning
938 of the line. The cachedb module has to be listed just before the iterator.
939 The python module can be listed in different places, it then processes the
940 output of the module it is just before.
931941 .TP
932942 .B trust\-anchor\-file: \fI<filename>
933943 File with trusted keys for validation. Both DS and DNSKEY entries can appear
11391149 Configure a local zone. The type determines the answer to give if
11401150 there is no match from local\-data. The types are deny, refuse, static,
11411151 transparent, redirect, nodefault, typetransparent, inform, inform_deny,
1142 always_transparent, always_refuse, always_nxdomain, noview,
1152 inform_redirect, always_transparent, always_refuse, always_nxdomain, noview,
11431153 and are explained below. After that the default settings are listed. Use
11441154 local\-data: to enter data into the local zone. Answers for local zones
11451155 are authoritative DNS answers. By default the zones are class IN.
11991209 \h'5'\fIinform_deny\fR
12001210 The query is dropped, like 'deny', and logged, like 'inform'. Ie. find
12011211 infected machines without answering the queries.
1212 .TP 10
1213 \h'5'\fIinform_redirect\fR
1214 The query is redirected, like 'redirect', and logged, like 'inform'.
1215 Ie. answer queries with fixed data and also log the machines that ask.
12021216 .TP 10
12031217 \h'5'\fIalways_transparent\fR
12041218 Like transparent, but ignores local data and resolves normally.
13551369 Assign tags to localzones. Tagged localzones will only be applied when the
13561370 used access-control element has a matching tag. Tags must be defined in
13571371 \fIdefine\-tags\fR. Enclose list of tags in quotes ("") and put spaces between
1358 tags.
1372 tags. When there are multiple tags it checks if the intersection of the
1373 list of tags for the query and local\-zone\-tag is non-empty.
13591374 .TP 5
13601375 .B local\-zone\-override: \fI<zone> <IP netblock> <type>
13611376 Override the localzone type for queries from addresses matching netblock.
16131628 At high verbosity it logs the TLS certificate, with TLS enabled.
16141629 If you leave out the '#' and auth name from the forward\-addr, any
16151630 name is accepted. The cert must also match a CA from the tls\-cert\-bundle.
1616 The cert name match code needs OpenSSL 1.1.0 or later to be enabled.
16171631 .TP
16181632 .B forward\-first: \fI<yes or no>
1619 If enabled, a query is attempted without the forward clause if it fails.
1620 The data could not be retrieved and would have caused SERVFAIL because
1621 the servers are unreachable, instead it is tried without this clause.
1622 The default is no.
1633 If a forwarded query is met with a SERVFAIL error, and this option is
1634 enabled, unbound will fall back to normal recursive resolution for this
1635 query as if no query forwarding had been specified. The default is "no".
16231636 .TP
16241637 .B forward\-tls\-upstream: \fI<yes or no>
16251638 Enabled or disable whether the queries to this forwarder use TLS for transport.
16631676 .B master: \fI<IP address or host name>
16641677 Where to download a copy of the zone from, with AXFR and IXFR. Multiple
16651678 masters can be specified. They are all tried if one fails.
1679 With the "ip#name" notation a AXFR over TLS can be used.
16661680 .TP
16671681 .B url: \fI<url to zonefile>
16681682 Where to download a zonefile for the zone. With http or https. An example
17141728 There may be multiple
17151729 .B view:
17161730 clauses. Each with a \fBname:\fR and zero or more \fBlocal\-zone\fR and
1717 \fBlocal\-data\fR elements. View can be mapped to requests by specifying the
1731 \fBlocal\-data\fR elements. Views can also contain view\-first,
1732 response\-ip, response\-ip\-data and local\-data\-ptr elements.
1733 View can be mapped to requests by specifying the
17181734 view name in an \fBaccess\-control\-view\fR element. Options from matching
17191735 views will override global options. Global options will be used if no matching
17201736 view is found, or when the matching view does not have the option specified.
17511767 acts like the iterator and validator modules do, on queries and answers.
17521768 To enable the script module it has to be compiled into the daemon,
17531769 and the word "python" has to be put in the \fBmodule\-config:\fR option
1754 (usually first, or between the validator and iterator).
1770 (usually first, or between the validator and iterator). Multiple instances of
1771 the python module are supported by adding the word "python" more than once.
17551772 .LP
17561773 If the \fBchroot:\fR option is enabled, you should make sure Python's
17571774 library directory structure is bind mounted in the new root environment, see
17601777 directory.
17611778 .TP
17621779 .B python\-script: \fI<python file>\fR
1763 The script file to load.
1780 The script file to load. Repeat this option for every python module instance
1781 added to the \fBmodule\-config:\fR option.
17641782 .SS "DNS64 Module Options"
17651783 .LP
17661784 The dns64 module must be configured in the \fBmodule\-config:\fR "dns64
628628 libunbound/python/doc \
629629 libunbound/python/examples \
630630 ./ldns-src \
631 README.md \
631632 doc/control_proto_spec.txt \
632633 doc/requirements.txt
633634
333333 /* Step 1, general qinfo lookup */
334334 struct lruhash_entry *lru_entry = slabhash_lookup(subnet_msg_cache, h,
335335 &qstate->qinfo, 1);
336 int acquired_lock = (lru_entry != NULL);
336 int need_to_insert = (lru_entry == NULL);
337337 if (!lru_entry) {
338 void* data = calloc(1,
339 sizeof(struct subnet_msg_cache_data));
340 if(!data) {
341 log_err("malloc failed");
342 return;
343 }
338344 qinf = qstate->qinfo;
339345 qinf.qname = memdup(qstate->qinfo.qname,
340346 qstate->qinfo.qname_len);
341347 if(!qinf.qname) {
348 free(data);
342349 log_err("memdup failed");
343350 return;
344351 }
345 mrep_entry = query_info_entrysetup(&qinf, NULL, h);
352 mrep_entry = query_info_entrysetup(&qinf, data, h);
346353 free(qinf.qname); /* if qname 'consumed', it is set to NULL */
347354 if (!mrep_entry) {
355 free(data);
348356 log_err("query_info_entrysetup failed");
349357 return;
350358 }
351359 lru_entry = &mrep_entry->entry;
352360 lock_rw_wrlock(&lru_entry->lock);
353 lru_entry->data = calloc(1,
354 sizeof(struct subnet_msg_cache_data));
355 if (!lru_entry->data) {
356 log_err("malloc failed");
357 return;
358 }
359 }
361 }
362 /* lru_entry->lock is locked regardless of how we got here,
363 * either from the slabhash_lookup, or above in the new allocated */
360364 /* Step 2, find the correct tree */
361365 if (!(tree = get_tree(lru_entry->data, edns, sne, qstate->env->cfg))) {
362 if (acquired_lock) lock_rw_unlock(&lru_entry->lock);
366 lock_rw_unlock(&lru_entry->lock);
363367 log_err("Subnet cache insertion failed");
364368 return;
365369 }
367371 rep = reply_info_copy(qstate->return_msg->rep, &sne->alloc, NULL);
368372 lock_quick_unlock(&sne->alloc.lock);
369373 if (!rep) {
370 if (acquired_lock) lock_rw_unlock(&lru_entry->lock);
374 lock_rw_unlock(&lru_entry->lock);
371375 log_err("Subnet cache insertion failed");
372376 return;
373377 }
384388 edns->subnet_source_mask,
385389 sq->ecs_server_in.subnet_scope_mask, rep,
386390 rep->ttl, *qstate->env->now);
387 if (acquired_lock) {
388 lock_rw_unlock(&lru_entry->lock);
389 } else {
390 lock_rw_unlock(&lru_entry->lock);
391
392 lock_rw_unlock(&lru_entry->lock);
393 if (need_to_insert) {
391394 slabhash_insert(subnet_msg_cache, h, lru_entry, lru_entry->data,
392395 NULL);
393396 }
0 /**
1 * \file
2 * This file implements the ipset module. It can handle packets by putting
3 * the A and AAAA addresses that are configured in unbound.conf as type
4 * ipset (local-zone statements) into a firewall rule IPSet. For firewall
5 * blacklist and whitelist usage.
6 */
7 #include "config.h"
8 #include "ipset/ipset.h"
9 #include "util/regional.h"
10 #include "util/config_file.h"
11
12 #include "services/cache/dns.h"
13
14 #include "sldns/sbuffer.h"
15 #include "sldns/wire2str.h"
16 #include "sldns/parseutil.h"
17
18 #include <libmnl/libmnl.h>
19 #include <linux/netfilter/nfnetlink.h>
20 #include <linux/netfilter/ipset/ip_set.h>
21
22 #define BUFF_LEN 256
23
24 /**
25 * Return an error
26 * @param qstate: our query state
27 * @param id: module id
28 * @param rcode: error code (DNS errcode).
29 * @return: 0 for use by caller, to make notation easy, like:
30 * return error_response(..).
31 */
32 static int error_response(struct module_qstate* qstate, int id, int rcode) {
33 verbose(VERB_QUERY, "return error response %s",
34 sldns_lookup_by_id(sldns_rcodes, rcode)?
35 sldns_lookup_by_id(sldns_rcodes, rcode)->name:"??");
36 qstate->return_rcode = rcode;
37 qstate->return_msg = NULL;
38 qstate->ext_state[id] = module_finished;
39 return 0;
40 }
41
42 static struct mnl_socket * open_mnl_socket() {
43 struct mnl_socket *mnl;
44
45 mnl = mnl_socket_open(NETLINK_NETFILTER);
46 if (!mnl) {
47 log_err("ipset: could not open netfilter.");
48 return NULL;
49 }
50
51 if (mnl_socket_bind(mnl, 0, MNL_SOCKET_AUTOPID) < 0) {
52 mnl_socket_close(mnl);
53 log_err("ipset: could not bind netfilter.");
54 return NULL;
55 }
56 return mnl;
57 }
58
59 static int add_to_ipset(struct mnl_socket *mnl, const char *setname, const void *ipaddr, int af) {
60 struct nlmsghdr *nlh;
61 struct nfgenmsg *nfg;
62 struct nlattr *nested[2];
63 static char buffer[BUFF_LEN];
64
65 if (strlen(setname) >= IPSET_MAXNAMELEN) {
66 errno = ENAMETOOLONG;
67 return -1;
68 }
69 if (af != AF_INET && af != AF_INET6) {
70 errno = EAFNOSUPPORT;
71 return -1;
72 }
73
74 nlh = mnl_nlmsg_put_header(buffer);
75 nlh->nlmsg_type = IPSET_CMD_ADD | (NFNL_SUBSYS_IPSET << 8);
76 nlh->nlmsg_flags = NLM_F_REQUEST|NLM_F_ACK|NLM_F_EXCL;
77
78 nfg = mnl_nlmsg_put_extra_header(nlh, sizeof(struct nfgenmsg));
79 nfg->nfgen_family = af;
80 nfg->version = NFNETLINK_V0;
81 nfg->res_id = htons(0);
82
83 mnl_attr_put_u8(nlh, IPSET_ATTR_PROTOCOL, IPSET_PROTOCOL);
84 mnl_attr_put(nlh, IPSET_ATTR_SETNAME, strlen(setname) + 1, setname);
85 nested[0] = mnl_attr_nest_start(nlh, IPSET_ATTR_DATA);
86 nested[1] = mnl_attr_nest_start(nlh, IPSET_ATTR_IP);
87 mnl_attr_put(nlh, (af == AF_INET ? IPSET_ATTR_IPADDR_IPV4 : IPSET_ATTR_IPADDR_IPV6)
88 | NLA_F_NET_BYTEORDER, (af == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)), ipaddr);
89 mnl_attr_nest_end(nlh, nested[1]);
90 mnl_attr_nest_end(nlh, nested[0]);
91
92 if (mnl_socket_sendto(mnl, nlh, nlh->nlmsg_len) < 0) {
93 return -1;
94 }
95 return 0;
96 }
97
98 static int ipset_update(struct module_env *env, struct dns_msg *return_msg, struct ipset_env *ie) {
99 int ret;
100
101 struct mnl_socket *mnl;
102
103 size_t i, j;
104
105 const char *setname;
106
107 struct ub_packed_rrset_key *rrset;
108 struct packed_rrset_data *d;
109
110 int af;
111
112 static char dname[BUFF_LEN];
113 const char *s;
114 int dlen, plen;
115
116 struct config_strlist *p;
117
118 size_t rr_len, rd_len;
119
120 uint8_t *rr_data;
121
122 mnl = (struct mnl_socket *)ie->mnl;
123 if (!mnl) {
124 // retry to create mnl socket
125 mnl = open_mnl_socket();
126 if (!mnl) {
127 return -1;
128 }
129
130 ie->mnl = mnl;
131 }
132
133 for (i = 0; i < return_msg->rep->rrset_count; ++i) {
134 setname = NULL;
135
136 rrset = return_msg->rep->rrsets[i];
137
138 if (rrset->rk.type == htons(LDNS_RR_TYPE_A)) {
139 af = AF_INET;
140 if ((ie->v4_enabled == 1)) {
141 setname = ie->name_v4;
142 }
143 } else {
144 af = AF_INET6;
145 if ((ie->v6_enabled == 1)) {
146 setname = ie->name_v6;
147 }
148 }
149
150 if (setname) {
151 dlen = sldns_wire2str_dname_buf(rrset->rk.dname, rrset->rk.dname_len, dname, BUFF_LEN);
152 if (dlen == 0) {
153 log_err("bad domain name");
154 return -1;
155 }
156 if (dname[dlen - 1] == '.') {
157 dlen--;
158 }
159
160 for (p = env->cfg->local_zones_ipset; p; p = p->next) {
161 plen = strlen(p->str);
162
163 if (dlen >= plen) {
164 s = dname + (dlen - plen);
165
166 if (strncasecmp(p->str, s, plen) == 0) {
167 d = (struct packed_rrset_data*)rrset->entry.data;
168 /* to d->count, not d->rrsig_count, because we do not want to add the RRSIGs, only the addresses */
169 for (j = 0; j < d->count; j++) {
170 rr_len = d->rr_len[j];
171 rr_data = d->rr_data[j];
172
173 rd_len = sldns_read_uint16(rr_data);
174 if (rr_len - 2 >= rd_len) {
175 ret = add_to_ipset(mnl, setname, rr_data + 2, af);
176 if (ret < 0) {
177 log_err("ipset: could not add %s into %s", dname, setname);
178
179 mnl_socket_close(mnl);
180 ie->mnl = NULL;
181 break;
182 }
183 }
184 }
185 break;
186 }
187 }
188 }
189 }
190 }
191
192 return 0;
193 }
194
195 int ipset_init(struct module_env* env, int id) {
196 struct ipset_env *ipset_env;
197
198 ipset_env = (struct ipset_env *)calloc(1, sizeof(struct ipset_env));
199 if (!ipset_env) {
200 log_err("malloc failure");
201 return 0;
202 }
203
204 env->modinfo[id] = (void *)ipset_env;
205
206 ipset_env->mnl = NULL;
207
208 ipset_env->name_v4 = env->cfg->ipset_name_v4;
209 ipset_env->name_v6 = env->cfg->ipset_name_v6;
210
211 ipset_env->v4_enabled = !ipset_env->name_v4 || (strlen(ipset_env->name_v4) == 0) ? 0 : 1;
212 ipset_env->v6_enabled = !ipset_env->name_v6 || (strlen(ipset_env->name_v6) == 0) ? 0 : 1;
213
214 if ((ipset_env->v4_enabled < 1) && (ipset_env->v6_enabled < 1)) {
215 log_err("ipset: set name no configuration?");
216 return 0;
217 }
218
219 return 1;
220 }
221
222 void ipset_deinit(struct module_env *env, int id) {
223 struct mnl_socket *mnl;
224 struct ipset_env *ipset_env;
225
226 if (!env || !env->modinfo[id]) {
227 return;
228 }
229
230 ipset_env = (struct ipset_env *)env->modinfo[id];
231
232 mnl = (struct mnl_socket *)ipset_env->mnl;
233 if (mnl) {
234 mnl_socket_close(mnl);
235 ipset_env->mnl = NULL;
236 }
237
238 free(ipset_env);
239 env->modinfo[id] = NULL;
240 }
241
242 static int ipset_new(struct module_qstate* qstate, int id) {
243 struct ipset_qstate *iq = (struct ipset_qstate *)regional_alloc(
244 qstate->region, sizeof(struct ipset_qstate));
245 qstate->minfo[id] = iq;
246 if (!iq) {
247 return 0;
248 }
249
250 memset(iq, 0, sizeof(*iq));
251 /* initialise it */
252 /* TODO */
253
254 return 1;
255 }
256
257 void ipset_operate(struct module_qstate *qstate, enum module_ev event, int id,
258 struct outbound_entry *outbound) {
259 struct ipset_env *ie = (struct ipset_env *)qstate->env->modinfo[id];
260 struct ipset_qstate *iq = (struct ipset_qstate *)qstate->minfo[id];
261 verbose(VERB_QUERY, "ipset[module %d] operate: extstate:%s event:%s",
262 id, strextstate(qstate->ext_state[id]), strmodulevent(event));
263 if (iq) {
264 log_query_info(VERB_QUERY, "ipset operate: query", &qstate->qinfo);
265 }
266
267 /* perform ipset state machine */
268 if ((event == module_event_new || event == module_event_pass) && !iq) {
269 if (!ipset_new(qstate, id)) {
270 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
271 return;
272 }
273 iq = (struct ipset_qstate*)qstate->minfo[id];
274 }
275
276 if (iq && (event == module_event_pass || event == module_event_new)) {
277 qstate->ext_state[id] = module_wait_module;
278 return;
279 }
280
281 if (iq && (event == module_event_moddone)) {
282 if (qstate->return_msg && qstate->return_msg->rep) {
283 ipset_update(qstate->env, qstate->return_msg, ie);
284 }
285 qstate->ext_state[id] = module_finished;
286 return;
287 }
288
289 if (iq && outbound) {
290 /* ipset does not need to process responses at this time
291 * ignore it.
292 ipset_process_response(qstate, iq, ie, id, outbound, event);
293 */
294 return;
295 }
296
297 if (event == module_event_error) {
298 verbose(VERB_ALGO, "got called with event error, giving up");
299 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
300 return;
301 }
302
303 if (!iq && (event == module_event_moddone)) {
304 /* during priming, module done but we never started */
305 qstate->ext_state[id] = module_finished;
306 return;
307 }
308
309 log_err("bad event for ipset");
310 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
311 }
312
313 void ipset_inform_super(struct module_qstate *ATTR_UNUSED(qstate),
314 int ATTR_UNUSED(id), struct module_qstate *ATTR_UNUSED(super)) {
315 /* ipset does not use subordinate requests at this time */
316 verbose(VERB_ALGO, "ipset inform_super was called");
317 }
318
319 void ipset_clear(struct module_qstate *qstate, int id) {
320 struct cachedb_qstate *iq;
321 if (!qstate) {
322 return;
323 }
324 iq = (struct cachedb_qstate *)qstate->minfo[id];
325 if (iq) {
326 /* free contents of iq */
327 /* TODO */
328 }
329 qstate->minfo[id] = NULL;
330 }
331
332 size_t ipset_get_mem(struct module_env *env, int id) {
333 struct ipset_env *ie = (struct ipset_env *)env->modinfo[id];
334 if (!ie) {
335 return 0;
336 }
337 return sizeof(*ie);
338 }
339
340 /**
341 * The ipset function block
342 */
343 static struct module_func_block ipset_block = {
344 "ipset",
345 &ipset_init, &ipset_deinit, &ipset_operate,
346 &ipset_inform_super, &ipset_clear, &ipset_get_mem
347 };
348
349 struct module_func_block * ipset_get_funcblock(void) {
350 return &ipset_block;
351 }
352
0 /**
1 * ipset.h
2 *
3 * Author: Kevin Chou
4 * Email: k9982874@gmail.com
5 */
6 #ifndef IPSET_H
7 #define IPSET_H
8 /** \file
9 *
10 * This file implements the ipset module. It can handle packets by putting
11 * the A and AAAA addresses that are configured in unbound.conf as type
12 * ipset (local-zone statements) into a firewall rule IPSet. For firewall
13 * blacklist and whitelist usage.
14 *
15 * To use the IPset module, install the libmnl-dev (or libmnl-devel) package
16 * and configure with --enable-ipset. And compile. Then enable the ipset
17 * module in unbound.conf with module-config: "ipset validator iterator"
18 * then create it with ipset -N blacklist iphash and then add
19 * local-zone: "example.com." ipset
20 * statements for the zones where you want the addresses of the names
21 * looked up added to the set.
22 *
23 * Set the name of the set with
24 * ipset:
25 * name-v4: "blacklist"
26 * name-v6: "blacklist6"
27 * in unbound.conf. The set can be used in this way:
28 * iptables -A INPUT -m set --set blacklist src -j DROP
29 * ip6tables -A INPUT -m set --set blacklist6 src -j DROP
30 */
31
32 #include "util/module.h"
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 struct ipset_env {
39 void* mnl;
40
41 int v4_enabled;
42 int v6_enabled;
43
44 const char *name_v4;
45 const char *name_v6;
46 };
47
48 struct ipset_qstate {
49 int dummy;
50 };
51
52 /** Init the ipset module */
53 int ipset_init(struct module_env* env, int id);
54 /** Deinit the ipset module */
55 void ipset_deinit(struct module_env* env, int id);
56 /** Operate on an event on a query (in qstate). */
57 void ipset_operate(struct module_qstate* qstate, enum module_ev event,
58 int id, struct outbound_entry* outbound);
59 /** Subordinate query done, inform this super request of its conclusion */
60 void ipset_inform_super(struct module_qstate* qstate, int id,
61 struct module_qstate* super);
62 /** clear the ipset query-specific contents out of qstate */
63 void ipset_clear(struct module_qstate* qstate, int id);
64 /** return memory estimate for ipset module */
65 size_t ipset_get_mem(struct module_env* env, int id);
66
67 /**
68 * Get the function block with pointers to the ipset functions
69 * @return the function block for "ipset".
70 */
71 struct module_func_block* ipset_get_funcblock(void);
72
73 #ifdef __cplusplus
74 }
75 #endif
76
77 #endif /* IPSET_H */
78
238238 s->name, p->str);
239239 return 0;
240240 }
241 #ifndef HAVE_SSL_SET1_HOST
241 #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
242242 if(tls_auth_name)
243243 log_err("no name verification functionality in "
244244 "ssl library, ignored name for %s", p->str);
251251 s->name, p->str);
252252 return 0;
253253 }
254 #ifndef HAVE_SSL_SET1_HOST
254 #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
255255 if(auth_name)
256256 log_err("no name verification functionality in "
257257 "ssl library, ignored name for %s", p->str);
881881 return 1;
882882 }
883883
884 /** compare rrsets and sort canonically. Compares rrset name, type, class.
885 * return 0 if equal, +1 if x > y, and -1 if x < y.
886 */
887 static int
888 rrset_canonical_sort_cmp(const void* x, const void* y)
889 {
890 struct ub_packed_rrset_key* rrx = *(struct ub_packed_rrset_key**)x;
891 struct ub_packed_rrset_key* rry = *(struct ub_packed_rrset_key**)y;
892 int r = dname_canonical_compare(rrx->rk.dname, rry->rk.dname);
893 if(r != 0)
894 return r;
895 if(rrx->rk.type != rry->rk.type) {
896 if(ntohs(rrx->rk.type) > ntohs(rry->rk.type))
897 return 1;
898 else return -1;
899 }
900 if(rrx->rk.rrset_class != rry->rk.rrset_class) {
901 if(ntohs(rrx->rk.rrset_class) > ntohs(rry->rk.rrset_class))
902 return 1;
903 else return -1;
904 }
905 return 0;
906 }
907
884908 int
885909 reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region)
886910 {
887911 size_t i;
912 struct ub_packed_rrset_key** sorted_p, **sorted_q;
888913 if(p->flags != q->flags ||
889914 p->qdcount != q->qdcount ||
890915 /* do not check TTL, this may differ */
898923 p->ar_numrrsets != q->ar_numrrsets ||
899924 p->rrset_count != q->rrset_count)
900925 return 0;
926 /* sort the rrsets in the authority and additional sections before
927 * compare, the query and answer sections are ordered in the sequence
928 * they should have (eg. one after the other for aliases). */
929 sorted_p = (struct ub_packed_rrset_key**)regional_alloc_init(
930 region, p->rrsets, sizeof(*sorted_p)*p->rrset_count);
931 if(!sorted_p) return 0;
932 log_assert(p->an_numrrsets + p->ns_numrrsets + p->ar_numrrsets <=
933 p->rrset_count);
934 qsort(sorted_p + p->an_numrrsets, p->ns_numrrsets,
935 sizeof(*sorted_p), rrset_canonical_sort_cmp);
936 qsort(sorted_p + p->an_numrrsets + p->ns_numrrsets, p->ar_numrrsets,
937 sizeof(*sorted_p), rrset_canonical_sort_cmp);
938
939 sorted_q = (struct ub_packed_rrset_key**)regional_alloc_init(
940 region, q->rrsets, sizeof(*sorted_q)*q->rrset_count);
941 if(!sorted_q) {
942 regional_free_all(region);
943 return 0;
944 }
945 log_assert(q->an_numrrsets + q->ns_numrrsets + q->ar_numrrsets <=
946 q->rrset_count);
947 qsort(sorted_q + q->an_numrrsets, q->ns_numrrsets,
948 sizeof(*sorted_q), rrset_canonical_sort_cmp);
949 qsort(sorted_q + q->an_numrrsets + q->ns_numrrsets, q->ar_numrrsets,
950 sizeof(*sorted_q), rrset_canonical_sort_cmp);
951
952 /* compare the rrsets */
901953 for(i=0; i<p->rrset_count; i++) {
902 if(!rrset_equal(p->rrsets[i], q->rrsets[i])) {
903 if(!rrset_canonical_equal(region, p->rrsets[i],
904 q->rrsets[i])) {
954 if(!rrset_equal(sorted_p[i], sorted_q[i])) {
955 if(!rrset_canonical_equal(region, sorted_p[i],
956 sorted_q[i])) {
905957 regional_free_all(region);
906958 return 0;
907959 }
908 regional_free_all(region);
909 }
910 }
960 }
961 }
962 regional_free_all(region);
911963 return 1;
912964 }
913965
11581210 }
11591211 }
11601212
1213 void
1214 iter_scrub_nxdomain(struct dns_msg* msg)
1215 {
1216 if(msg->rep->an_numrrsets == 0)
1217 return;
1218
1219 memmove(msg->rep->rrsets, msg->rep->rrsets+msg->rep->an_numrrsets,
1220 sizeof(struct ub_packed_rrset_key*) *
1221 (msg->rep->rrset_count-msg->rep->an_numrrsets));
1222 msg->rep->rrset_count -= msg->rep->an_numrrsets;
1223 msg->rep->an_numrrsets = 0;
1224 }
1225
11611226 void iter_dec_attempts(struct delegpt* dp, int d)
11621227 {
11631228 struct delegpt_addr* a;
334334 uint8_t* z);
335335
336336 /**
337 * Prepare an NXDOMAIN message to be used for a subdomain answer by removing all
338 * RRs from the ANSWER section.
339 * @param msg: the response to scrub.
340 */
341 void iter_scrub_nxdomain(struct dns_msg* msg);
342
343 /**
337344 * Remove query attempts from all available ips. For 0x20.
338345 * @param dp: delegpt.
339346 * @param d: decrease.
14471447 * now will also exceed the rate, keeping cache fresh */
14481448 (void)infra_ratelimit_inc(qstate->env->infra_cache,
14491449 iq->dp->name, iq->dp->namelen,
1450 *qstate->env->now);
1450 *qstate->env->now, &qstate->qinfo,
1451 qstate->reply);
14511452 /* see if we are passed through with slip factor */
14521453 if(qstate->env->cfg->ratelimit_factor != 0 &&
14531454 ub_random_max(qstate->env->rnd,
21042105 struct delegpt_addr* target;
21052106 struct outbound_entry* outq;
21062107 int auth_fallback = 0;
2108 uint8_t* qout_orig = NULL;
2109 size_t qout_orig_len = 0;
21072110
21082111 /* NOTE: a request will encounter this state for each target it
21092112 * needs to send a query to. That is, at least one per referral,
21772180 int labdiff = qchaselabs -
21782181 dname_count_labels(iq->qinfo_out.qname);
21792182
2183 qout_orig = iq->qinfo_out.qname;
2184 qout_orig_len = iq->qinfo_out.qname_len;
21802185 iq->qinfo_out.qname = iq->qchase.qname;
21812186 iq->qinfo_out.qname_len = iq->qchase.qname_len;
21822187 iq->minimise_count++;
23292334 /* wait to get all targets, we want to try em */
23302335 verbose(VERB_ALGO, "wait for all targets for fallback");
23312336 qstate->ext_state[id] = module_wait_reply;
2337 /* undo qname minimise step because we'll get back here
2338 * to do it again */
2339 if(qout_orig && iq->minimise_count > 0) {
2340 iq->minimise_count--;
2341 iq->qinfo_out.qname = qout_orig;
2342 iq->qinfo_out.qname_len = qout_orig_len;
2343 }
23322344 return 0;
23332345 }
23342346 /* did we do enough fallback queries already? */
24622474 iq->num_current_queries);
24632475 qstate->ext_state[id] = module_wait_reply;
24642476 }
2477 /* undo qname minimise step because we'll get back here
2478 * to do it again */
2479 if(qout_orig && iq->minimise_count > 0) {
2480 iq->minimise_count--;
2481 iq->qinfo_out.qname = qout_orig;
2482 iq->qinfo_out.qname_len = qout_orig_len;
2483 }
24652484 return 0;
24662485 }
24672486
24682487 /* if not forwarding, check ratelimits per delegationpoint name */
24692488 if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) {
24702489 if(!infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name,
2471 iq->dp->namelen, *qstate->env->now)) {
2490 iq->dp->namelen, *qstate->env->now, &qstate->qinfo,
2491 qstate->reply)) {
24722492 lock_basic_lock(&ie->queries_ratelimit_lock);
24732493 ie->num_queries_ratelimited++;
24742494 lock_basic_unlock(&ie->queries_ratelimit_lock);
26972717 && !(iq->chase_flags & BIT_RD)) {
26982718 if(FLAGS_GET_RCODE(iq->response->rep->flags) !=
26992719 LDNS_RCODE_NOERROR) {
2700 if(qstate->env->cfg->qname_minimisation_strict)
2701 return final_state(iq);
2720 if(qstate->env->cfg->qname_minimisation_strict) {
2721 if(FLAGS_GET_RCODE(iq->response->rep->flags) ==
2722 LDNS_RCODE_NXDOMAIN) {
2723 iter_scrub_nxdomain(iq->response);
2724 return final_state(iq);
2725 }
2726 return error_response(qstate, id,
2727 LDNS_RCODE_SERVFAIL);
2728 }
27022729 /* Best effort qname-minimisation.
27032730 * Stop minimising and send full query when
27042731 * RCODE is not NOERROR. */
5656 {
5757 struct config_file* cfg = ctx->env->cfg;
5858 verbosity = cfg->verbosity;
59 if(ctx->logfile_override)
59 if(ctx_logfile_overridden && !ctx->logfile_override) {
60 log_file(NULL); /* clear that override */
61 ctx_logfile_overridden = 0;
62 }
63 if(ctx->logfile_override) {
64 ctx_logfile_overridden = 1;
6065 log_file(ctx->log_out);
61 else log_init(cfg->logfile, cfg->use_syslog, NULL);
66 } else {
67 log_init(cfg->logfile, cfg->use_syslog, NULL);
68 }
6269 config_apply(cfg);
6370 if(!modstack_setup(&ctx->mods, cfg->module_conf, ctx->env))
6471 return UB_INITFAIL;
5050 struct tube;
5151 struct sldns_buffer;
5252 struct ub_event_base;
53
54 /** store that the logfile has a debug override */
55 extern int ctx_logfile_overridden;
5356
5457 /**
5558 * The context structure
7878 #include <iphlpapi.h>
7979 #endif /* UB_ON_WINDOWS */
8080
81 /** store that the logfile has a debug override */
82 int ctx_logfile_overridden = 0;
83
8184 /** create context functionality, but no pipes */
8285 static struct ub_ctx* ub_ctx_create_nopipe(void)
8386 {
8992 #endif
9093
9194 checklock_start();
92 log_init(NULL, 0, NULL); /* logs to stderr */
95 if(!ctx_logfile_overridden)
96 log_init(NULL, 0, NULL); /* logs to stderr */
9397 log_ident_set("libunbound");
9498 #ifdef USE_WINSOCK
9599 if((r = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) {
327331 ub_randfree(ctx->seed_rnd);
328332 alloc_clear(&ctx->superalloc);
329333 traverse_postorder(&ctx->queries, delq, NULL);
334 if(ctx_logfile_overridden) {
335 log_file(NULL);
336 ctx_logfile_overridden = 0;
337 }
330338 free(ctx);
331339 #ifdef USE_WINSOCK
332340 WSACleanup();
468476 {
469477 lock_basic_lock(&ctx->cfglock);
470478 log_file((FILE*)out);
479 ctx_logfile_overridden = 1;
471480 ctx->logfile_override = 1;
472481 ctx->log_out = out;
473482 lock_basic_unlock(&ctx->cfglock);
11491158 ub_ctx_hosts(struct ub_ctx* ctx, const char* fname)
11501159 {
11511160 FILE* in;
1152 char buf[1024], ldata[1024];
1161 char buf[1024], ldata[2048];
11531162 char* parse, *addr, *name, *ins;
11541163 lock_basic_lock(&ctx->cfglock);
11551164 if(ctx->finalized) {
221221 }
222222 numports = cfg_condense_ports(cfg, &ports);
223223 if(numports == 0) {
224 int locked = !w->is_bg || w->is_bg_thread;
225 libworker_delete(w);
226 if(locked) {
224 if(!w->is_bg || w->is_bg_thread) {
227225 lock_basic_unlock(&ctx->cfglock);
228226 }
227 libworker_delete(w);
229228 return NULL;
230229 }
231230 w->back = outside_network_create(w->base, cfg->msg_buffer_size,
3232 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3333 * POSSIBILITY OF SUCH DAMAGE.
3434 */
35 %begin %{
36 /* store state of warning output, restored at later pop */
37 #pragma GCC diagnostic push
38 /* ignore gcc8 METH_NOARGS function cast warnings for swig function pointers */
39 #pragma GCC diagnostic ignored "-Wcast-function-type"
40 %}
3541 %module unbound
3642 %{
43 /* restore state of warning output, remove the functioncast ignore */
44 #pragma GCC diagnostic pop
3745 #include <sys/types.h>
46 #ifdef HAVE_SYS_SOCKET_H
3847 #include <sys/socket.h>
48 #endif
49 #ifdef HAVE_NETINET_IN_H
3950 #include <netinet/in.h>
51 #endif
52 #ifdef HAVE_ARPA_INET_H
4053 #include <arpa/inet.h>
54 #endif
4155 #include "libunbound/unbound.h"
4256 %}
4357
107121
108122 %inline %{
109123 void ub_ctx_free_dbg (struct ub_ctx* c) {
110 printf("******** UB_CTX free 0x%lX ************\n", (long unsigned int)c);
124 printf("******** UB_CTX free 0x%p ************\n", c);
111125 ub_ctx_delete(c);
112126 }
113127
227241 RR_TYPE_MAILA = 254,
228242 /** any type (wildcard) */
229243 RR_TYPE_ANY = 255,
244 RR_TYPE_CAA = 257,
230245
231246 /* RFC 4431, 5074, DNSSEC Lookaside Validation */
232247 RR_TYPE_DLV = 32769,
647662
648663 %inline %{
649664 void ub_resolve_free_dbg (struct ub_result* r) {
650 printf("******** UB_RESOLVE free 0x%lX ************\n", (long unsigned int)r);
665 printf("******** UB_RESOLVE free 0x%p ************\n", r);
651666 ub_resolve_free(r);
652667 }
653668 %}
808823 """
809824 return self.rcode2str[self.rcode]
810825
811 __swig_getmethods__["rcode_str"] = _get_rcode_str
812 if _newclass:rcode_str = _swig_property(_get_rcode_str)
826 rcode_str = property(_get_rcode_str)
813827
814828 def _get_raw_data(self):
815829 """Result data, a list of network order DNS rdata items.
818832 """
819833 return self._ub_result_data(self)
820834
821 __swig_getmethods__["rawdata"] = _get_raw_data
822835 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.")
823836
824837 def _get_data(self):
825838 if not self.havedata: return None
826839 return ub_data(self._ub_result_data(self))
827840
828 __swig_getmethods__["data"] = _get_data
829 __swig_getmethods__["packet"] = _packet
841 packet = property(_packet)
830842 data = property(_get_data, doc="Returns :class:`ub_data` instance containing various decoding functions or None")
831843
832844 %}
0
10 def init(id, cfg):
21 log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script))
2 return True
3
4 def init_standard(id, env):
5 log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, env.cfg.python_script))
36 return True
47
58 def deinit(id):
5151 def init(id, cfg):
5252 log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script))
5353 return True
54
55
56 .. function:: init_standard(id, env)
57
58 Initialize module internals, like database etc.
59 Called just once on module load.
60
61 *Preferred* over the init() function above as this function's signature is the
62 same as the C counterpart and allows for extra functionality during init.
63 The previously accessible configuration options can now be found in env.cfg.
64
65 :param id: module identifier (integer)
66 :param env: :class:`module_env` module environment
67
68 ::
69
70 def init_standard(id, env):
71 log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, env.cfg.python_script))
72 return True
5473
5574
5675 .. function:: deinit(id)
0 #!/usr/bin/env python3
1 #
2 # A plugin for the Unbound DNS resolver to resolve DNS records in
3 # multicast DNS [RFC 6762] via Avahi.
4 #
5 # Copyright (C) 2018-2019 Internet Real-Time Lab, Columbia University
6 # http://www.cs.columbia.edu/irt/
7 #
8 # Written by Jan Janak <janakj@cs.columbia.edu>
9 #
10 # Permission is hereby granted, free of charge, to any person
11 # obtaining a copy of this software and associated documentation files
12 # (the "Software"), to deal in the Software without restriction,
13 # including without limitation the rights to use, copy, modify, merge,
14 # publish, distribute, sublicense, and/or sell copies of the Software,
15 # and to permit persons to whom the Software is furnished to do so,
16 # subject to the following conditions:
17 #
18 # The above copyright notice and this permission notice shall be
19 # included in all copies or substantial portions of the Software.
20 #
21 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
25 # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26 # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
27 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 # SOFTWARE.
29 #
30 #
31 # Dependendies:
32 # Unbound with pythonmodule configured for Python 3
33 # dnspython [http://www.dnspython.org]
34 # pydbus [https://github.com/LEW21/pydbus]
35 #
36 # To enable Python 3 support, configure Unbound as follows:
37 # PYTHON_VERSION=3 ./configure --with-pythonmodule
38 #
39 # The plugin in meant to be used as a fallback resolver that resolves
40 # records in multicast DNS if the upstream server cannot be reached or
41 # provides no answer (NXDOMAIN).
42 #
43 # mDNS requests for negative records, i.e., records for which Avahi
44 # returns no answer (NXDOMAIN), are expensive. Since there is no
45 # single authoritative server in mDNS, such requests terminate only
46 # via a timeout. The timeout is about a second (if MDNS_TIMEOUT is not
47 # configured), or the value configured via MDNS_TIMEOUT. The
48 # corresponding Unbound thread will be blocked for this amount of
49 # time. For this reason, it is important to configure an appropriate
50 # number of threads in unbound.conf and limit the RR types and names
51 # that will be resolved via Avahi via the environment variables
52 # described later.
53 #
54 # An example unbound.conf with the plugin enabled:
55 #
56 # | server:
57 # | module-config: "validator python iterator"
58 # | num-threads: 32
59 # | cache-max-negative-ttl: 60
60 # | cache-max-ttl: 60
61 #
62 #
63 # The plugin can also be run interactively. Provide the name and
64 # record type to be resolved as command line arguments and the
65 # resolved record will be printed to standard output:
66 #
67 # $ ./avahi-resolver.py voip-phx4.phxnet.org A
68 # voip-phx4.phxnet.org. 120 IN A 10.4.3.2
69 #
70 #
71 # The behavior of the plugin can be controlled via the following
72 # environment variables:
73 #
74 # DBUS_SYSTEM_BUS_ADDRESS
75 #
76 # The address of the system DBus bus, in the format expected by DBus,
77 # e.g., unix:path=/run/avahi/system-bus.sock
78 #
79 #
80 # DEBUG
81 #
82 # Set this environment variable to "yes", "true", "on", or "1" to
83 # enable debugging. In debugging mode, the plugin will output a lot
84 # more information about what it is doing either to the standard
85 # output (when run interactively) or to Unbound via log_info and
86 # log_error.
87 #
88 # By default debugging is disabled.
89 #
90 #
91 # MDNS_TTL
92 #
93 # Avahi does not provide the TTL value for the records it returns.
94 # This environment variable can be used to configure the TTL value for
95 # such records.
96 #
97 # The default value is 120 seconds.
98 #
99 #
100 # MDNS_TIMEOUT
101 #
102 # The maximum amount of time (in milliseconds) an Avahi request is
103 # allowed to run. This value sets the time it takes to resolve
104 # negative (non-existent) records in Avahi. If unset, the request
105 # terminates when Avahi sends the "AllForNow" signal, telling the
106 # client that more records are unlikely to arrive. This takes roughly
107 # about one second. You may need to configure a longer value here on
108 # slower networks, e.g., networks that relay mDNS packets such as
109 # MANETs.
110 #
111 #
112 # MDNS_GETONE
113 #
114 # If set to "true", "1", or "on", an Avahi request will terminate as
115 # soon as at least one record has been found. If there are multiple
116 # nodes in the mDNS network publishing the same record, only one (or
117 # subset) will be returned.
118 #
119 # If set to "false", "0", or "off", the plugin will gather records for
120 # MDNS_TIMEOUT and return all records found. This is only useful in
121 # networks where multiple nodes are known to publish different records
122 # under the same name and the client needs to be able to obtain them
123 # all. When configured this way, all Avahi requests will always take
124 # MDNS_TIMEOUT to complete!
125 #
126 # This option is set to true by default.
127 #
128 #
129 # MDNS_REJECT_TYPES
130 #
131 # A comma-separated list of record types that will NOT be resolved in
132 # mDNS via Avahi. Use this environment variable to prevent specific
133 # record types from being resolved via Avahi. For example, if your
134 # network does not support IPv6, you can put AAAA on this list.
135 #
136 # The default value is an empty list.
137 #
138 # Example: MDNS_REJECT_TYPES=aaaa,mx,soa
139 #
140 #
141 # MDNS_ACCEPT_TYPES
142 #
143 # If set, a record type will be resolved via Avahi if and only if it
144 # is present on this comma-separated list. In other words, this is a
145 # whitelist.
146 #
147 # The default value is an empty list which means all record types will
148 # be resolved via Avahi.
149 #
150 # Example: MDNS_ACCEPT_TYPES=a,ptr,txt,srv,aaaa,cname
151 #
152 #
153 # MDNS_REJECT_NAMES
154 #
155 # If the name being resolved matches the regular expression in this
156 # environment variable, the name will NOT be resolved via Avahi. In
157 # other words, this environment variable provides a blacklist.
158 #
159 # The default value is empty--no names will be reject.
160 #
161 # Example: MDNS_REJECT_NAMES=(^|\.)example\.com\.$
162 #
163 #
164 # MDNS_ACCEPT_NAMES
165 #
166 # If set to a regular expression, a name will be resolved via Avahi if
167 # and only if it matches the regular expression. In other words, this
168 # variable provides a whitelist.
169 #
170 # The default value is empty--all names will be resolved via Avahi.
171 #
172 # Example: MDNS_ACCEPT_NAMES=^.*\.example\.com\.$
173 #
174
175 import os
176 import re
177 import array
178 import threading
179 import traceback
180 import dns.rdata
181 import dns.rdatatype
182 import dns.rdataclass
183 from queue import Queue
184 from gi.repository import GLib
185 from pydbus import SystemBus
186
187
188 IF_UNSPEC = -1
189 PROTO_UNSPEC = -1
190
191 sysbus = None
192 avahi = None
193 trampoline = dict()
194 thread_local = threading.local()
195 dbus_thread = None
196 dbus_loop = None
197
198
199 def str2bool(v):
200 if v.lower() in ['false', 'no', '0', 'off', '']:
201 return False
202 return True
203
204
205 def dbg(msg):
206 if DEBUG != False:
207 log_info('avahi-resolver: %s' % msg)
208
209
210 #
211 # Although pydbus has an internal facility for handling signals, we
212 # cannot use that with Avahi. When responding from an internal cache,
213 # Avahi sends the first signal very quickly, before pydbus has had a
214 # chance to subscribe for the signal. This will result in lost signal
215 # and missed data:
216 #
217 # https://github.com/LEW21/pydbus/issues/87
218 #
219 # As a workaround, we subscribe to all signals before creating a
220 # record browser and do our own signal matching and dispatching via
221 # the following function.
222 #
223 def signal_dispatcher(connection, sender, path, interface, name, args):
224 o = trampoline.get(path, None)
225 if o is None:
226 return
227
228 if name == 'ItemNew': o.itemNew(*args)
229 elif name == 'ItemRemove': o.itemRemove(*args)
230 elif name == 'AllForNow': o.allForNow(*args)
231 elif name == 'Failure': o.failure(*args)
232
233
234 class RecordBrowser:
235 def __init__(self, callback, name, type_, timeout=None, getone=True):
236 self.callback = callback
237 self.records = []
238 self.error = None
239 self.getone = getone
240
241 self.timer = None if timeout is None else GLib.timeout_add(timeout, self.timedOut)
242
243 self.browser_path = avahi.RecordBrowserNew(IF_UNSPEC, PROTO_UNSPEC, name, dns.rdataclass.IN, type_, 0)
244 trampoline[self.browser_path] = self
245 self.browser = sysbus.get('.Avahi', self.browser_path)
246 self.dbg('Created RecordBrowser(name=%s, type=%s, getone=%s, timeout=%s)'
247 % (name, dns.rdatatype.to_text(type_), getone, timeout))
248
249 def dbg(self, msg):
250 dbg('[%s] %s' % (self.browser_path, msg))
251
252 def _done(self):
253 del trampoline[self.browser_path]
254 self.dbg('Freeing')
255 self.browser.Free()
256
257 if self.timer is not None:
258 self.dbg('Removing timer')
259 GLib.source_remove(self.timer)
260
261 self.callback(self.records, self.error)
262
263 def itemNew(self, interface, protocol, name, class_, type_, rdata, flags):
264 self.dbg('Got signal ItemNew')
265 self.records.append((name, class_, type_, rdata))
266 if self.getone:
267 self._done()
268
269 def itemRemove(self, interface, protocol, name, class_, type_, rdata, flags):
270 self.dbg('Got signal ItemRemove')
271 self.records.remove((name, class_, type_, rdata))
272
273 def failure(self, error):
274 self.dbg('Got signal Failure')
275 self.error = Exception(error)
276 self._done()
277
278 def allForNow(self):
279 self.dbg('Got signal AllForNow')
280 if self.timer is None:
281 self._done()
282
283 def timedOut(self):
284 self.dbg('Timed out')
285 self._done()
286 return False
287
288
289 #
290 # This function runs the main event loop for DBus (GLib). This
291 # function must be run in a dedicated worker thread.
292 #
293 def dbus_main():
294 global sysbus, avahi, dbus_loop
295
296 dbg('Connecting to system DBus')
297 sysbus = SystemBus()
298
299 dbg('Subscribing to .Avahi.RecordBrowser signals')
300 sysbus.con.signal_subscribe('org.freedesktop.Avahi',
301 'org.freedesktop.Avahi.RecordBrowser',
302 None, None, None, 0, signal_dispatcher)
303
304 avahi = sysbus.get('.Avahi', '/')
305
306 dbg("Connected to Avahi Daemon: %s (API %s) [%s]"
307 % (avahi.GetVersionString(), avahi.GetAPIVersion(), avahi.GetHostNameFqdn()))
308
309 dbg('Starting DBus main loop')
310 dbus_loop = GLib.MainLoop()
311 dbus_loop.run()
312
313
314 #
315 # This function must be run in the DBus worker thread. It creates a
316 # new RecordBrowser instance and once it has finished doing it thing,
317 # it will send the result back to the original thread via the queue.
318 #
319 def start_resolver(queue, *args, **kwargs):
320 try:
321 RecordBrowser(lambda *v: queue.put_nowait(v), *args, **kwargs)
322 except Exception as e:
323 queue.put_nowait((None, e))
324
325 return False
326
327
328 #
329 # To resolve a request, we setup a queue, post a task to the DBus
330 # worker thread, and wait for the result (or error) to arrive over the
331 # queue. If the worker thread reports an error, raise the error as an
332 # exception.
333 #
334 def resolve(*args, **kwargs):
335 try:
336 queue = thread_local.queue
337 except AttributeError:
338 dbg('Creating new per-thread queue')
339 queue = Queue()
340 thread_local.queue = queue
341
342 GLib.idle_add(lambda: start_resolver(queue, *args, **kwargs))
343
344 records, error = queue.get()
345 queue.task_done()
346
347 if error is not None:
348 raise error
349
350 return records
351
352
353 def parse_type_list(lst):
354 return list(map(dns.rdatatype.from_text, [v.strip() for v in lst.split(',') if len(v)]))
355
356
357 def init(*args, **kwargs):
358 global dbus_thread, DEBUG
359 global MDNS_TTL, MDNS_GETONE, MDNS_TIMEOUT
360 global MDNS_REJECT_TYPES, MDNS_ACCEPT_TYPES
361 global MDNS_REJECT_NAMES, MDNS_ACCEPT_NAMES
362
363 DEBUG = str2bool(os.environ.get('DEBUG', str(False)))
364
365 MDNS_TTL = int(os.environ.get('MDNS_TTL', 120))
366 dbg("TTL for records from Avahi: %d" % MDNS_TTL)
367
368 MDNS_REJECT_TYPES = parse_type_list(os.environ.get('MDNS_REJECT_TYPES', ''))
369 if MDNS_REJECT_TYPES:
370 dbg('Types NOT resolved via Avahi: %s' % MDNS_REJECT_TYPES)
371
372 MDNS_ACCEPT_TYPES = parse_type_list(os.environ.get('MDNS_ACCEPT_TYPES', ''))
373 if MDNS_ACCEPT_TYPES:
374 dbg('ONLY resolving the following types via Avahi: %s' % MDNS_ACCEPT_TYPES)
375
376 v = os.environ.get('MDNS_REJECT_NAMES', None)
377 MDNS_REJECT_NAMES = re.compile(v, flags=re.I | re.S) if v is not None else None
378 if MDNS_REJECT_NAMES is not None:
379 dbg('Names NOT resolved via Avahi: %s' % MDNS_REJECT_NAMES.pattern)
380
381 v = os.environ.get('MDNS_ACCEPT_NAMES', None)
382 MDNS_ACCEPT_NAMES = re.compile(v, flags=re.I | re.S) if v is not None else None
383 if MDNS_ACCEPT_NAMES is not None:
384 dbg('ONLY resolving the following names via Avahi: %s' % MDNS_ACCEPT_NAMES.pattern)
385
386 v = os.environ.get('MDNS_TIMEOUT', None)
387 MDNS_TIMEOUT = int(v) if v is not None else None
388 if MDNS_TIMEOUT is not None:
389 dbg('Avahi request timeout: %s' % MDNS_TIMEOUT)
390
391 MDNS_GETONE = str2bool(os.environ.get('MDNS_GETONE', str(True)))
392 dbg('Terminate Avahi requests on first record: %s' % MDNS_GETONE)
393
394 dbus_thread = threading.Thread(target=dbus_main)
395 dbus_thread.daemon = True
396 dbus_thread.start()
397
398
399 def deinit(*args, **kwargs):
400 dbus_loop.quit()
401 dbus_thread.join()
402 return True
403
404
405 def inform_super(id, qstate, superqstate, qdata):
406 return True
407
408
409 def get_rcode(msg):
410 if not msg:
411 return RCODE_SERVFAIL
412
413 return msg.rep.flags & 0xf
414
415
416 def rr2text(rec, ttl):
417 name, class_, type_, rdata = rec
418 wire = array.array('B', rdata).tostring()
419 return '%s. %d %s %s %s' % (
420 name,
421 ttl,
422 dns.rdataclass.to_text(class_),
423 dns.rdatatype.to_text(type_),
424 dns.rdata.from_wire(class_, type_, wire, 0, len(wire), None))
425
426
427 def operate(id, event, qstate, qdata):
428 qi = qstate.qinfo
429 name = qi.qname_str
430 type_ = qi.qtype
431 type_str = dns.rdatatype.to_text(type_)
432 class_ = qi.qclass
433 class_str = dns.rdataclass.to_text(class_)
434 rc = get_rcode(qstate.return_msg)
435
436 if event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS:
437 qstate.ext_state[id] = MODULE_WAIT_MODULE
438 return True
439
440 if event != MODULE_EVENT_MODDONE:
441 log_err("avahi-resolver: Unexpected event %d" % event)
442 qstate.ext_state[id] = MODULE_ERROR
443 return True
444
445 qstate.ext_state[id] = MODULE_FINISHED
446
447 # Only resolve via Avahi if we got NXDOMAIn from the upstream DNS
448 # server, or if we could not reach the upstream DNS server. If we
449 # got some records for the name from the upstream DNS server
450 # already, do not resolve the record in Avahi.
451 if rc != RCODE_NXDOMAIN and rc != RCODE_SERVFAIL:
452 return True
453
454 dbg("Got request for '%s %s %s'" % (name, class_str, type_str))
455
456 # Avahi only supports the IN class
457 if class_ != RR_CLASS_IN:
458 dbg('Rejected, Avahi only supports the IN class')
459 return True
460
461 # Avahi does not support meta queries (e.g., ANY)
462 if dns.rdatatype.is_metatype(type_):
463 dbg('Rejected, Avahi does not support the type %s' % type_str)
464 return True
465
466 # If we have a type blacklist and the requested type is on the
467 # list, reject it.
468 if MDNS_REJECT_TYPES and type_ in MDNS_REJECT_TYPES:
469 dbg('Rejected, type %s is on the blacklist' % type_str)
470 return True
471
472 # If we have a type whitelist and if the requested type is not on
473 # the list, reject it.
474 if MDNS_ACCEPT_TYPES and type_ not in MDNS_ACCEPT_TYPES:
475 dbg('Rejected, type %s is not on the whitelist' % type_str)
476 return True
477
478 # If we have a name blacklist and if the requested name matches
479 # the blacklist, reject it.
480 if MDNS_REJECT_NAMES is not None:
481 if MDNS_REJECT_NAMES.search(name):
482 dbg('Rejected, name %s is on the blacklist' % name)
483 return True
484
485 # If we have a name whitelist and if the requested name does not
486 # match the whitelist, reject it.
487 if MDNS_ACCEPT_NAMES is not None:
488 if not MDNS_ACCEPT_NAMES.search(name):
489 dbg('Rejected, name %s is not on the whitelist' % name)
490 return True
491
492 dbg("Resolving '%s %s %s' via Avahi" % (name, class_str, type_str))
493
494 recs = resolve(name, type_, getone=MDNS_GETONE, timeout=MDNS_TIMEOUT)
495
496 if not recs:
497 dbg('Result: Not found (NXDOMAIN)')
498 qstate.return_rcode = RCODE_NXDOMAIN
499 return True
500
501 m = DNSMessage(name, type_, class_, PKT_QR | PKT_RD | PKT_RA)
502 for r in recs:
503 s = rr2text(r, MDNS_TTL)
504 dbg('Result: %s' % s)
505 m.answer.append(s)
506
507 if not m.set_return_msg(qstate):
508 raise Exception("Error in set_return_msg")
509
510 if not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0):
511 raise Exception("Error in storeQueryInCache")
512
513 qstate.return_msg.rep.security = 2
514 qstate.return_rcode = RCODE_NOERROR
515 return True
516
517
518 #
519 # It does not appear to be sufficient to check __name__ to determine
520 # whether we are being run in interactive mode. As a workaround, try
521 # to import module unboundmodule and if that fails, assume we're being
522 # run in interactive mode.
523 #
524 try:
525 import unboundmodule
526 embedded = True
527 except ImportError:
528 embedded = False
529
530 if __name__ == '__main__' and not embedded:
531 import sys
532
533 def log_info(msg):
534 print(msg)
535
536 def log_err(msg):
537 print('ERROR: %s' % msg, file=sys.stderr)
538
539 if len(sys.argv) != 3:
540 print('Usage: %s <name> <rr_type>' % sys.argv[0])
541 sys.exit(2)
542
543 name = sys.argv[1]
544 type_str = sys.argv[2]
545
546 try:
547 type_ = dns.rdatatype.from_text(type_str)
548 except dns.rdatatype.UnknownRdatatype:
549 log_err('Unsupported DNS record type "%s"' % type_str)
550 sys.exit(2)
551
552 if dns.rdatatype.is_metatype(type_):
553 log_err('Meta record type "%s" cannot be resolved via Avahi' % type_str)
554 sys.exit(2)
555
556 init()
557 try:
558 recs = resolve(name, type_, getone=MDNS_GETONE, timeout=MDNS_TIMEOUT)
559 if not len(recs):
560 print('%s not found (NXDOMAIN)' % name)
561 sys.exit(1)
562
563 for r in recs:
564 print(rr2text(r, MDNS_TTL))
565 finally:
566 deinit()
7777 extra functionality during init.
7878 ..note:: This function is preferred by unbound over the old init function.
7979 ..note:: The previously accessible configuration options can now be found in
80 env.cgf.
80 env.cfg.
8181 """
8282 log_info("python: inited script {}".format(env.cfg.python_script))
8383
274274
275275 ..note:: This function is preferred by unbound over the old init function.
276276 ..note:: The previously accessible configuration options can now be found in
277 env.cgf.
277 env.cfg.
278278
279279 """
280280 log_info("python: inited script {}".format(env.cfg.python_script))
00 /*
11 * interface.i: unbound python module
22 */
3 %begin %{
4 /* store state of warning output, restored at later pop */
5 #pragma GCC diagnostic push
6 /* ignore gcc8 METH_NOARGS function cast warnings for swig function pointers */
7 #pragma GCC diagnostic ignored "-Wcast-function-type"
8 %}
39 %module unboundmodule
410 %{
11 /* restore state of warning output, remove the functioncast ignore */
12 #pragma GCC diagnostic pop
513 /**
614 * \file
715 * This is the interface between the unbound server and a python module
816 * called to perform operations on queries.
917 */
1018 #include <sys/types.h>
19 #ifdef HAVE_SYS_SOCKET_H
1120 #include <sys/socket.h>
21 #endif
22 #ifdef HAVE_NETINET_IN_H
1223 #include <netinet/in.h>
24 #endif
25 #ifdef HAVE_ARPA_INET_H
1326 #include <arpa/inet.h>
27 #endif
28 #ifdef HAVE_NETDB_H
1429 #include <netdb.h>
30 #endif
31 #ifdef HAVE_SYS_UN_H
1532 #include <sys/un.h>
33 #endif
1634 #include <stdarg.h>
1735 #include "config.h"
1836 #include "util/log.h"
177195 %extend query_info {
178196 %pythoncode %{
179197 def _get_qtype_str(self): return sldns_wire2str_type(self.qtype)
180 __swig_getmethods__["qtype_str"] = _get_qtype_str
181 if _newclass:qtype_str = _swig_property(_get_qtype_str)
198 qtype_str = property(_get_qtype_str)
182199
183200 def _get_qclass_str(self): return sldns_wire2str_class(self.qclass)
184 __swig_getmethods__["qclass_str"] = _get_qclass_str
185 if _newclass:qclass_str = _swig_property(_get_qclass_str)
186
187 __swig_getmethods__["qname"] = _unboundmodule._get_qname
188 if _newclass:qname = _swig_property(_unboundmodule._get_qname)
189
190 __swig_getmethods__["qname_list"] = _unboundmodule._get_qname_components
191 if _newclass:qname_list = _swig_property(_unboundmodule._get_qname_components)
201 qclass_str = property(_get_qclass_str)
202
203 qname = property(_unboundmodule._get_qname)
204
205 qname_list = property(_unboundmodule._get_qname_components)
192206
193207 def _get_qname_str(self): return dnameAsStr(self.qname)
194 __swig_getmethods__["qname_str"] = _get_qname_str
195 if _newclass:qname_str = _swig_property(_get_qname_str)
208 qname_str = property(_get_qname_str)
196209 %}
197210 }
198211
232245 %extend packed_rrset_key {
233246 %pythoncode %{
234247 def _get_type_str(self): return sldns_wire2str_type(_unboundmodule.ntohs(self.type))
235 __swig_getmethods__["type_str"] = _get_type_str
236 if _newclass:type_str = _swig_property(_get_type_str)
248 type_str = property(_get_type_str)
237249
238250 def _get_class_str(self): return sldns_wire2str_class(_unboundmodule.ntohs(self.rrset_class))
239 __swig_getmethods__["rrset_class_str"] = _get_class_str
240 if _newclass:rrset_class_str = _swig_property(_get_class_str)
241
242 __swig_getmethods__["dname"] = _unboundmodule._get_dname
243 if _newclass:dname = _swig_property(_unboundmodule._get_dname)
244
245 __swig_getmethods__["dname_list"] = _unboundmodule._get_dname_components
246 if _newclass:dname_list = _swig_property(_unboundmodule._get_dname_components)
251 rrset_class_str = property(_get_class_str)
252
253 dname = property(_unboundmodule._get_dname)
254
255 dname_list = property(_unboundmodule._get_dname_components)
247256
248257 def _get_dname_str(self): return dnameAsStr(self.dname)
249 __swig_getmethods__["dname_str"] = _get_dname_str
250 if _newclass:dname_str = _swig_property(_get_dname_str)
258 dname_str = property(_get_dname_str)
251259 %}
252260 }
253261
345353 %extend packed_rrset_data {
346354 %pythoncode %{
347355 def _get_data_rr_len(self): return RRSetData_RRLen(self)
348 __swig_getmethods__["rr_len"] = _get_data_rr_len
349 if _newclass:rr_len = _swig_property(_get_data_rr_len)
356 rr_len = property(_get_data_rr_len)
350357 def _get_data_rr_ttl(self): return RRSetData_RRTTL(self)
351 __swig_getmethods__["rr_ttl"] =_get_data_rr_ttl
352 if _newclass:rr_len = _swig_property(_get_data_rr_ttl)
358 rr_ttl = property(_get_data_rr_ttl)
353359 def _get_data_rr_data(self): return RRSetData_RRData(self)
354 __swig_getmethods__["rr_data"] = _get_data_rr_data
355 if _newclass:rr_len = _swig_property(_get_data_rr_data)
360 rr_data = property(_get_data_rr_data)
356361 %}
357362 }
358363
424429 %extend reply_info {
425430 %pythoncode %{
426431 def _rrset_ref_get(self): return ReplyInfo_Ref(self)
427 __swig_getmethods__["ref"] = _rrset_ref_get
428 if _newclass:ref = _swig_property(_rrset_ref_get)
432 ref = property(_rrset_ref_get)
429433
430434 def _rrset_rrsets_get(self): return ReplyInfo_RRSet(self)
431 __swig_getmethods__["rrsets"] = _rrset_rrsets_get
432 if _newclass:rrsets = _swig_property(_rrset_rrsets_get)
435 rrsets = property(_rrset_rrsets_get)
433436 %}
434437 }
435438
448451 switch (ss->ss_family) {
449452 case AF_INET: return sizeof(struct sockaddr_in);
450453 case AF_INET6: return sizeof(struct sockaddr_in6);
454 #ifdef HAVE_SYS_UN_H
451455 case AF_UNIX: return sizeof(struct sockaddr_un);
456 #endif
452457 default:
453458 return 0;
454459 }
514519 return PyBytes_FromStringAndSize((const char *)raw, sizeof(*raw));
515520 }
516521
522 #ifdef HAVE_SYS_UN_H
517523 if (ss->ss_family == AF_UNIX) {
518524 const struct sockaddr_un *sa = (struct sockaddr_un *)ss;
519525 return PyBytes_FromString(sa->sun_path);
520526 }
527 #endif
521528
522529 return Py_None;
523530 }
566573 %extend sockaddr_storage {
567574 %pythoncode %{
568575 def _family_get(self): return _sockaddr_storage_family(self)
569 __swig_getmethods__["family"] = _family_get
570 if _newclass: family = _swig_property(_family_get)
576 family = property(_family_get)
571577
572578 def _addr_get(self): return _sockaddr_storage_addr(self)
573 __swig_getmethods__["addr"] = _addr_get
574 if _newclass: addr = _swig_property(_addr_get)
579 addr = property(_addr_get)
575580
576581 def _raw_addr_get(self): return _sockaddr_storage_raw_addr(self)
577 __swig_getmethods__["raw_addr"] = _raw_addr_get
578 if _newclass: raw_addr = _swig_property(_raw_addr_get)
582 raw_addr = property(_raw_addr_get)
579583
580584 def _port_get(self): return _sockaddr_storage_port(self)
581 __swig_getmethods__["port"] = _port_get
582 if _newclass: port = _swig_property(_port_get)
585 port = property(_port_get)
583586
584587 def _flowinfo_get(self): return _sockaddr_storage_flowinfo(self)
585 __swig_getmethods__["flowinfo"] = _flowinfo_get
586 if _newclass: flowinfo = _swig_property(_flowinfo_get)
588 flowinfo = property(_flowinfo_get)
587589
588590 def _scope_id_get(self): return _sockaddr_storage_scope_id(self)
589 __swig_getmethods__["scope_id"] = _scope_id_get
590 if _newclass: scope_id = _swig_property(_scope_id_get)
591 scope_id = property(_scope_id_get)
591592 %}
592593 }
593594
611612 %extend comm_reply {
612613 %pythoncode %{
613614 def _addr_get(self): return _sockaddr_storage_addr(self._addr)
614 __swig_getmethods__["addr"] = _addr_get
615 if _newclass:addr = _swig_property(_addr_get)
615 addr = property(_addr_get)
616616
617617 def _port_get(self): return _sockaddr_storage_port(self._addr)
618 __swig_getmethods__["port"] = _port_get
619 if _newclass:port = _swig_property(_port_get)
618 port = property(_port_get)
620619
621620 def _family_get(self): return _sockaddr_storage_family(self._addr)
622 __swig_getmethods__["family"] = _family_get
623 if _newclass:family = _swig_property(_family_get)
621 family = property(_family_get)
624622 %}
625623 }
626624
655653 %extend edns_option {
656654 %pythoncode %{
657655 def _opt_code_get(self): return _edns_option_opt_code_get(self)
658 __swig_getmethods__["code"] = _opt_code_get
659 if _newclass: opt_code = _swig_property(_opt_code_get)
656 code = property(_opt_code_get)
660657
661658 def _opt_data_get(self): return _edns_option_opt_data_get(self)
662 __swig_getmethods__["data"] = _opt_data_get
663 if _newclass: opt_data = _swig_property(_opt_data_get)
659 data = property(_opt_data_get)
664660 %}
665661 }
666662
687683 %extend edns_data {
688684 %pythoncode %{
689685 def _opt_list_iter(self): return EdnsOptsListIter(self.opt_list)
690 __swig_getmethods__["opt_list_iter"] = _opt_list_iter
691 if _newclass:opt_list_iter = _swig_property(_opt_list_iter)
686 opt_list_iter = property(_opt_list_iter)
692687 def _opt_list(self): return _edns_data_opt_list_get(self)
693 __swig_getmethods__["opt_list"] = _opt_list
694 if _newclass:opt_list = _swig_property(_opt_list)
688 opt_list = property(_opt_list)
695689 %}
696690 }
697691
892886 _unboundmodule._ext_state_set(self, id, state)
893887
894888 def __ext_state_get(self): return ExtState(self)
895 __swig_getmethods__["ext_state"] = __ext_state_get
896 if _newclass:ext_state = _swig_property(__ext_state_get)#, __ext_state_set)
889 ext_state = property(__ext_state_get) #, __ext_state_set
897890
898891 def _edns_opts_front_in_iter(self): return EdnsOptsListIter(self.edns_opts_front_in)
899 __swig_getmethods__["edns_opts_front_in_iter"] = _edns_opts_front_in_iter
900 if _newclass:edns_opts_front_in_iter = _swig_property(_edns_opts_front_in_iter)
892 edns_opts_front_in_iter = property(_edns_opts_front_in_iter)
901893 def _edns_opts_back_out_iter(self): return EdnsOptsListIter(self.edns_opts_back_out)
902 __swig_getmethods__["edns_opts_back_out_iter"] = _edns_opts_back_out_iter
903 if _newclass:edns_opts_back_out_iter = _swig_property(_edns_opts_back_out_iter)
894 edns_opts_back_out_iter = property(_edns_opts_back_out_iter)
904895 def _edns_opts_back_in_iter(self): return EdnsOptsListIter(self.edns_opts_back_in)
905 __swig_getmethods__["edns_opts_back_in_iter"] = _edns_opts_back_in_iter
906 if _newclass:edns_opts_back_in_iter = _swig_property(_edns_opts_back_in_iter)
896 edns_opts_back_in_iter = property(_edns_opts_back_in_iter)
907897 def _edns_opts_front_out_iter(self): return EdnsOptsListIter(self.edns_opts_front_out)
908 __swig_getmethods__["edns_opts_front_out_iter"] = _edns_opts_front_out_iter
909 if _newclass:edns_opts_front_out_iter = _swig_property(_edns_opts_front_out_iter)
898 edns_opts_front_out_iter = property(_edns_opts_front_out_iter)
910899
911900 def _edns_opts_front_in(self): return _edns_opts_front_in_get(self)
912 __swig_getmethods__["edns_opts_front_in"] = _edns_opts_front_in
913 if _newclass:edns_opts_front_in = _swig_property(_edns_opts_front_in)
901 edns_opts_front_in = property(_edns_opts_front_in)
914902 def _edns_opts_back_out(self): return _edns_opts_back_out_get(self)
915 __swig_getmethods__["edns_opts_back_out"] = _edns_opts_back_out
916 if _newclass:edns_opts_back_out = _swig_property(_edns_opts_back_out)
903 edns_opts_back_out = property(_edns_opts_back_out)
917904 def _edns_opts_back_in(self): return _edns_opts_back_in_get(self)
918 __swig_getmethods__["edns_opts_back_in"] = _edns_opts_back_in
919 if _newclass:edns_opts_back_in = _swig_property(_edns_opts_back_in)
905 edns_opts_back_in = property(_edns_opts_back_in)
920906 def _edns_opts_front_out(self): return _edns_opts_front_out_get(self)
921 __swig_getmethods__["edns_opts_front_out"] = _edns_opts_front_out
922 if _newclass:edns_opts_front_out = _swig_property(_edns_opts_front_out)
907 edns_opts_front_out = property(_edns_opts_front_out)
923908 %}
924909 }
925910
10251010 char* control_key_file;
10261011 char* control_cert_file;
10271012 int do_daemonize;
1028 char* python_script;
1013 struct config_strlist* python_script;
10291014 };
10301015
10311016 /* ************************************************************************************ *
10891074
10901075 %extend delegpt {
10911076 %pythoncode %{
1092 __swig_getmethods__["dname"] = _unboundmodule._get_dp_dname
1093 if _newclass:dname = _swig_property(_unboundmodule._get_dp_dname)
1094
1095 __swig_getmethods__["dname_list"] = _unboundmodule._get_dp_dname_components
1096 if _newclass:dname_list = _swig_property(_unboundmodule._get_dp_dname_components)
1077 dname = property(_unboundmodule._get_dp_dname)
1078
1079 dname_list = property(_unboundmodule._get_dp_dname_components)
10971080
10981081 def _get_dname_str(self): return dnameAsStr(self.dname)
1099 __swig_getmethods__["dname_str"] = _get_dname_str
1100 if _newclass:dname_str = _swig_property(_get_dname_str)
1082 dname_str = property(_get_dname_str)
11011083 %}
11021084 }
11031085 %extend delegpt_ns {
11041086 %pythoncode %{
1105 __swig_getmethods__["dname"] = _unboundmodule._get_dpns_dname
1106 if _newclass:dname = _swig_property(_unboundmodule._get_dpns_dname)
1107
1108 __swig_getmethods__["dname_list"] = _unboundmodule._get_dpns_dname_components
1109 if _newclass:dname_list = _swig_property(_unboundmodule._get_dpns_dname_components)
1087 dname = property(_unboundmodule._get_dpns_dname)
1088
1089 dname_list = property(_unboundmodule._get_dpns_dname_components)
11101090
11111091 def _get_dname_str(self): return dnameAsStr(self.dname)
1112 __swig_getmethods__["dname_str"] = _get_dname_str
1113 if _newclass:dname_str = _swig_property(_get_dname_str)
1092 dname_str = property(_get_dname_str)
11141093 %}
11151094 }
11161095 %extend delegpt_addr {
11171096 %pythoncode %{
11181097 def _addr_get(self): return _delegpt_addr_addr_get(self)
1119 __swig_getmethods__["addr"] = _addr_get
1120 if _newclass:addr = _swig_property(_addr_get)
1098 addr = property(_addr_get)
11211099 %}
11221100 }
11231101
11271105 %rename ("MODULE_STATE_INITIAL") "module_state_initial";
11281106 %rename ("MODULE_WAIT_REPLY") "module_wait_reply";
11291107 %rename ("MODULE_WAIT_MODULE") "module_wait_module";
1108 %rename ("MODULE_RESTART_NEXT") "module_restart_next";
11301109 %rename ("MODULE_WAIT_SUBQUERY") "module_wait_subquery";
11311110 %rename ("MODULE_ERROR") "module_error";
11321111 %rename ("MODULE_FINISHED") "module_finished";
11351114 module_state_initial = 0,
11361115 module_wait_reply,
11371116 module_wait_module,
1117 module_restart_next,
11381118 module_wait_subquery,
11391119 module_error,
11401120 module_finished
6464 #endif
6565
6666 /**
67 * counter for python module instances
68 * incremented by pythonmod_init(...)
69 */
70 int py_mod_count = 0;
71
72 /** Python main thread */
73 PyThreadState* mainthr;
74
75 /**
6776 * Global state for the module.
6877 */
6978 struct pythonmod_env {
7180 /** Python script filename. */
7281 const char* fname;
7382
74 /** Python main thread */
75 PyThreadState* mainthr;
7683 /** Python module. */
7784 PyObject* module;
7885
241248
242249 int pythonmod_init(struct module_env* env, int id)
243250 {
251 int py_mod_idx = py_mod_count++;
252
244253 /* Initialize module */
245254 FILE* script_py = NULL;
246255 PyObject* py_init_arg, *res;
247256 PyGILState_STATE gil;
248 int init_standard = 1;
257 int init_standard = 1, i = 0;
258 #if PY_MAJOR_VERSION < 3
259 PyObject* PyFileObject = NULL;
260 #endif
261 struct config_strlist* cfg_item = env->cfg->python_script;
249262
250263 struct pythonmod_env* pe = (struct pythonmod_env*)calloc(1, sizeof(struct pythonmod_env));
251264 if (!pe)
257270 env->modinfo[id] = (void*) pe;
258271
259272 /* Initialize module */
260 pe->fname = env->cfg->python_script;
273 pe->fname=NULL; i = 0;
274 while (cfg_item!=NULL) {
275 if (py_mod_idx==i++) {
276 pe->fname=cfg_item->str;
277 break;
278 }
279 cfg_item = cfg_item->next;
280 }
261281 if(pe->fname==NULL || pe->fname[0]==0) {
262 log_err("pythonmod: no script given.");
282 log_err("pythonmod[%d]: no script given.", py_mod_idx);
263283 return 0;
264284 }
265285
266286 /* Initialize Python libraries */
267 if (!Py_IsInitialized())
287 if (py_mod_count==1 && !Py_IsInitialized())
268288 {
269289 #if PY_MAJOR_VERSION >= 3
270290 wchar_t progname[8];
280300 Py_Initialize();
281301 PyEval_InitThreads();
282302 SWIG_init();
283 pe->mainthr = PyEval_SaveThread();
303 mainthr = PyEval_SaveThread();
284304 }
285305
286306 gil = PyGILState_Ensure();
287307
288 /* Initialize Python */
289 PyRun_SimpleString("import sys \n");
290 PyRun_SimpleString("sys.path.append('.') \n");
291 if(env->cfg->directory && env->cfg->directory[0]) {
292 char wdir[1524];
293 snprintf(wdir, sizeof(wdir), "sys.path.append('%s') \n",
294 env->cfg->directory);
295 PyRun_SimpleString(wdir);
296 }
297 PyRun_SimpleString("sys.path.append('"RUN_DIR"') \n");
298 PyRun_SimpleString("sys.path.append('"SHARE_DIR"') \n");
299 PyRun_SimpleString("import distutils.sysconfig \n");
300 PyRun_SimpleString("sys.path.append(distutils.sysconfig.get_python_lib(1,0)) \n");
301 if (PyRun_SimpleString("from unboundmodule import *\n") < 0)
302 {
303 log_err("pythonmod: cannot initialize core module: unboundmodule.py");
304 PyGILState_Release(gil);
305 return 0;
308 if (py_mod_count==1) {
309 /* Initialize Python */
310 PyRun_SimpleString("import sys \n");
311 PyRun_SimpleString("sys.path.append('.') \n");
312 if(env->cfg->directory && env->cfg->directory[0]) {
313 char wdir[1524];
314 snprintf(wdir, sizeof(wdir), "sys.path.append('%s') \n",
315 env->cfg->directory);
316 PyRun_SimpleString(wdir);
317 }
318 PyRun_SimpleString("sys.path.append('"RUN_DIR"') \n");
319 PyRun_SimpleString("sys.path.append('"SHARE_DIR"') \n");
320 PyRun_SimpleString("import distutils.sysconfig \n");
321 PyRun_SimpleString("sys.path.append(distutils.sysconfig.get_python_lib(1,0)) \n");
322 if (PyRun_SimpleString("from unboundmodule import *\n") < 0)
323 {
324 log_err("pythonmod: cannot initialize core module: unboundmodule.py");
325 PyGILState_Release(gil);
326 return 0;
327 }
306328 }
307329
308330 /* Check Python file load */
309 if ((script_py = fopen(pe->fname, "r")) == NULL)
331 /* uses python to open the file, this works on other platforms,
332 * eg. Windows, to open the file in the correct mode for python */
333 #if PY_MAJOR_VERSION < 3
334 PyFileObject = PyFile_FromString((char*)pe->fname, "r");
335 script_py = PyFile_AsFile(PyFileObject);
336 #else
337 script_py = _Py_fopen(pe->fname, "r");
338 #endif
339 if (script_py == NULL)
310340 {
311341 log_err("pythonmod: can't open file %s for reading", pe->fname);
312342 PyGILState_Release(gil);
316346 /* Load file */
317347 pe->module = PyImport_AddModule("__main__");
318348 pe->dict = PyModule_GetDict(pe->module);
319 pe->data = Py_None;
320 Py_INCREF(pe->data);
349 pe->data = PyDict_New();
350 Py_XINCREF(pe->data);
321351 PyModule_AddObject(pe->module, "mod_env", pe->data);
322352
323353 /* TODO: deallocation of pe->... if an error occurs */
340370 (void)PyParser_SimpleParseFile(script_py, pe->fname, Py_file_input);
341371 log_py_err();
342372 PyGILState_Release(gil);
343 return 0;
344 }
373 fclose(script_py);
374 return 0;
375 }
376 #if PY_MAJOR_VERSION < 3
377 Py_XDECREF(PyFileObject);
378 #else
345379 fclose(script_py);
380 #endif
346381
347382 if ((pe->func_init = PyDict_GetItemString(pe->dict, "init_standard")) == NULL)
348383 {
424459 Py_XDECREF(pe->data);
425460 PyGILState_Release(gil);
426461
427 PyEval_RestoreThread(pe->mainthr);
428 Py_Finalize();
429 pe->mainthr = NULL;
462 if(--py_mod_count==0) {
463 PyEval_RestoreThread(mainthr);
464 Py_Finalize();
465 mainthr = NULL;
466 }
430467 }
431468 pe->fname = NULL;
432469 free(pe);
484521 pq = qstate->minfo[id] = malloc(sizeof(struct pythonmod_qstate));
485522
486523 /* Initialize per query data */
487 pq->data = Py_None;
488 Py_INCREF(pq->data);
524 pq->data = PyDict_New();
489525 }
490526
491527 /* Call operate */
516552 return;
517553
518554 pq = (struct pythonmod_qstate*)qstate->minfo[id];
519 verbose(VERB_ALGO, "pythonmod: clear, id: %d, pq:%lX", id,
520 (unsigned long int)pq);
555 verbose(VERB_ALGO, "pythonmod: clear, id: %d, pq:%p", id, pq);
521556 if(pq != NULL)
522557 {
523558 PyGILState_STATE gil = PyGILState_Ensure();
533568 size_t pythonmod_get_mem(struct module_env* env, int id)
534569 {
535570 struct pythonmod_env* pe = (struct pythonmod_env*)env->modinfo[id];
536 verbose(VERB_ALGO, "pythonmod: get_mem, id: %d, pe:%lX", id,
537 (unsigned long int)pe);
571 verbose(VERB_ALGO, "pythonmod: get_mem, id: %d, pe:%p", id, pe);
538572 if(!pe)
539573 return 0;
540574 return sizeof(*pe);
182182 action = respip_inform;
183183 else if(strcmp(actnstr, "inform_deny") == 0)
184184 action = respip_inform_deny;
185 else if(strcmp(actnstr, "inform_redirect") == 0)
186 action = respip_inform_redirect;
185187 else if(strcmp(actnstr, "always_transparent") == 0)
186188 action = respip_always_transparent;
187189 else if(strcmp(actnstr, "always_refuse") == 0)
244246 struct packed_rrset_data* pd;
245247 struct sockaddr* sa;
246248 int ret;
247 if(raddr->action != respip_redirect) {
249 if(raddr->action != respip_redirect
250 && raddr->action != respip_inform_redirect) {
248251 log_err("cannot parse response-ip-data %s: response-ip "
249252 "action for %s is not redirect", rrstr, netblock);
250253 return 0;
357360 free(pd);
358361 pd = np;
359362 }
363 addr_tree_init_parents(&set->ip_tree);
360364
361365 return 1;
362366 }
749753 *new_repp = new_rep;
750754 return 1;
751755 } else if(action == respip_static || action == respip_redirect ||
752 action == respip_always_nxdomain) {
756 action == respip_always_nxdomain ||
757 action == respip_inform_redirect) {
753758 /* Since we don't know about other types of the owner name,
754759 * we generally return NOERROR/NODATA unless an NXDOMAIN action
755760 * is explicitly specified. */
20412041 if(xfr->task_probe) {
20422042 auth_free_masters(xfr->task_probe->masters);
20432043 comm_point_delete(xfr->task_probe->cp);
2044 comm_timer_delete(xfr->task_probe->timer);
20442045 free(xfr->task_probe);
20452046 }
20462047 if(xfr->task_transfer) {
20472048 auth_free_masters(xfr->task_transfer->masters);
20482049 comm_point_delete(xfr->task_transfer->cp);
2050 comm_timer_delete(xfr->task_transfer->timer);
20492051 if(xfr->task_transfer->chunks_first) {
20502052 auth_chunks_delete(xfr->task_transfer);
20512053 }
27452747 * that is an exact match that should exist for it.
27462748 * If that does not exist, a higher exact match + nxproof is enabled
27472749 * (for some sort of opt-out empty nonterminal cases).
2750 * nodataproof: search for exact match and include that instead.
27482751 * ceproof: include ce proof NSEC3 (omitted for wildcard replies).
27492752 * nxproof: include denial of the qname.
27502753 * wcproof: include denial of wildcard (wildcard.ce).
27522755 static int
27532756 az_add_nsec3_proof(struct auth_zone* z, struct regional* region,
27542757 struct dns_msg* msg, uint8_t* cenm, size_t cenmlen, uint8_t* qname,
2755 size_t qname_len, int ceproof, int nxproof, int wcproof)
2758 size_t qname_len, int nodataproof, int ceproof, int nxproof,
2759 int wcproof)
27562760 {
27572761 int algo;
27582762 size_t iter, saltlen;
27632767 /* find parameters of nsec3 proof */
27642768 if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen))
27652769 return 1; /* no nsec3 */
2770 if(nodataproof) {
2771 /* see if the node has a hash of itself for the nodata
2772 * proof nsec3, this has to be an exact match nsec3. */
2773 struct auth_data* match;
2774 match = az_nsec3_find_exact(z, qname, qname_len, algo,
2775 iter, salt, saltlen);
2776 if(match) {
2777 if(!az_nsec3_insert(z, region, msg, match))
2778 return 0;
2779 /* only nodata NSEC3 needed, no CE or others. */
2780 return 1;
2781 }
2782 }
27662783 /* find ce that has an NSEC3 */
27672784 if(ceproof) {
27682785 node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce,
29152932 /* DNSSEC denial NSEC3 */
29162933 if(!az_add_nsec3_proof(z, region, msg, node->name,
29172934 node->namelen, msg->qinfo.qname,
2918 msg->qinfo.qname_len, 1, 0, 0))
2935 msg->qinfo.qname_len, 1, 1, 0, 0))
29192936 return 0;
29202937 }
29212938 return 1;
29422959 } else {
29432960 if(!az_add_nsec3_proof(z, region, msg, ce->name,
29442961 ce->namelen, msg->qinfo.qname,
2945 msg->qinfo.qname_len, 1, 0, 0))
2962 msg->qinfo.qname_len, 1, 1, 0, 0))
29462963 return 0;
29472964 }
29482965 }
29812998 struct auth_data* wildcard, struct auth_data* node)
29822999 {
29833000 struct auth_rrset* rrset, *nsec;
3001 int insert_ce = 0;
29843002 if((rrset=az_domain_rrset(wildcard, qinfo->qtype)) != NULL) {
29853003 /* wildcard has type, add it */
29863004 if(!msg_add_rrset_an(z, region, msg, wildcard, rrset))
30073025 /* call other notype routine for dnssec notype denials */
30083026 if(!az_generate_notype_answer(z, region, msg, wildcard))
30093027 return 0;
3028 /* because the notype, there is no positive data with an
3029 * RRSIG that indicates the wildcard position. Thus the
3030 * wildcard qname denial needs to have a CE nsec3. */
3031 insert_ce = 1;
30103032 }
30113033
30123034 /* ce and node for dnssec denial of wildcard original name */
30183040 dname_remove_label(&wildup, &wilduplen);
30193041 if(!az_add_nsec3_proof(z, region, msg, wildup,
30203042 wilduplen, msg->qinfo.qname,
3021 msg->qinfo.qname_len, 0, 1, 0))
3043 msg->qinfo.qname_len, 0, insert_ce, 1, 0))
30223044 return 0;
30233045 }
30243046
30443066 } else if(ce) {
30453067 if(!az_add_nsec3_proof(z, region, msg, ce->name,
30463068 ce->namelen, msg->qinfo.qname,
3047 msg->qinfo.qname_len, 1, 1, 1))
3069 msg->qinfo.qname_len, 0, 1, 1, 1))
30483070 return 0;
30493071 }
30503072 return 1;
36753697 xfr_transfer_start_lookups(struct auth_xfer* xfr)
36763698 {
36773699 /* delete all the looked up addresses in the list */
3700 xfr->task_transfer->scan_addr = NULL;
36783701 xfr_masterlist_free_addrs(xfr->task_transfer->masters);
36793702
36803703 /* start lookup at the first master */
37053728 xfr_probe_start_lookups(struct auth_xfer* xfr)
37063729 {
37073730 /* delete all the looked up addresses in the list */
3731 xfr->task_probe->scan_addr = NULL;
37083732 xfr_masterlist_free_addrs(xfr->task_probe->masters);
37093733
37103734 /* start lookup at the first master */
48424866 if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(zfilename,
48434867 cfg->chrootdir, strlen(cfg->chrootdir)) == 0)
48444868 zfilename += strlen(cfg->chrootdir);
4869 if(verbosity >= VERB_ALGO) {
4870 char nm[255+1];
4871 dname_str(z->name, nm);
4872 verbose(VERB_ALGO, "write zonefile %s for %s", zfilename, nm);
4873 }
48454874
48464875 /* write to tempfile first */
48474876 if((size_t)strlen(zfilename) + 16 > sizeof(tmpfile)) {
48574886 if(!auth_zone_write_chunks(xfr, tmpfile)) {
48584887 unlink(tmpfile);
48594888 lock_rw_unlock(&z->lock);
4889 return;
48604890 }
48614891 } else if(!auth_zone_write_file(z, tmpfile)) {
48624892 unlink(tmpfile);
49524982 static void
49534983 xfr_transfer_disown(struct auth_xfer* xfr)
49544984 {
4985 /* remove timer (from this worker's event base) */
4986 comm_timer_delete(xfr->task_transfer->timer);
4987 xfr->task_transfer->timer = NULL;
49554988 /* remove the commpoint */
49564989 comm_point_delete(xfr->task_transfer->cp);
49574990 xfr->task_transfer->cp = NULL;
50335066 struct sockaddr_storage addr;
50345067 socklen_t addrlen = 0;
50355068 struct auth_master* master = xfr->task_transfer->master;
5069 char *auth_name = NULL;
5070 struct timeval t;
5071 int timeout;
50365072 if(!master) return 0;
50375073 if(master->allow_notify) return 0; /* only for notify */
50385074
50415077 addrlen = xfr->task_transfer->scan_addr->addrlen;
50425078 memmove(&addr, &xfr->task_transfer->scan_addr->addr, addrlen);
50435079 } else {
5044 if(!extstrtoaddr(master->host, &addr, &addrlen)) {
5080 if(!authextstrtoaddr(master->host, &addr, &addrlen, &auth_name)) {
50455081 /* the ones that are not in addr format are supposed
50465082 * to be looked up. The lookup has failed however,
50475083 * so skip them */
50585094 comm_point_delete(xfr->task_transfer->cp);
50595095 xfr->task_transfer->cp = NULL;
50605096 }
5097 if(!xfr->task_transfer->timer) {
5098 xfr->task_transfer->timer = comm_timer_create(env->worker_base,
5099 auth_xfer_transfer_timer_callback, xfr);
5100 if(!xfr->task_transfer->timer) {
5101 log_err("malloc failure");
5102 return 0;
5103 }
5104 }
5105 timeout = AUTH_TRANSFER_TIMEOUT;
5106 #ifndef S_SPLINT_S
5107 t.tv_sec = timeout/1000;
5108 t.tv_usec = (timeout%1000)*1000;
5109 #endif
50615110
50625111 if(master->http) {
50635112 /* perform http fetch */
50645113 /* store http port number into sockaddr,
50655114 * unless someone used unbound's host@port notation */
5115 xfr->task_transfer->on_ixfr = 0;
50665116 if(strchr(master->host, '@') == NULL)
50675117 sockaddr_store_port(&addr, addrlen, master->port);
50685118 xfr->task_transfer->cp = outnet_comm_point_for_http(
50695119 env->outnet, auth_xfer_transfer_http_callback, xfr,
5070 &addr, addrlen, AUTH_TRANSFER_TIMEOUT, master->ssl,
5071 master->host, master->file);
5120 &addr, addrlen, -1, master->ssl, master->host,
5121 master->file);
50725122 if(!xfr->task_transfer->cp) {
5073 char zname[255+1];
5123 char zname[255+1], as[256];
50745124 dname_str(xfr->name, zname);
5125 addr_to_str(&addr, addrlen, as, sizeof(as));
50755126 verbose(VERB_ALGO, "cannot create http cp "
5076 "connection for %s to %s", zname,
5077 master->host);
5078 return 0;
5127 "connection for %s to %s", zname, as);
5128 return 0;
5129 }
5130 comm_timer_set(xfr->task_transfer->timer, &t);
5131 if(verbosity >= VERB_ALGO) {
5132 char zname[255+1], as[256];
5133 dname_str(xfr->name, zname);
5134 addr_to_str(&addr, addrlen, as, sizeof(as));
5135 verbose(VERB_ALGO, "auth zone %s transfer next HTTP fetch from %s started", zname, as);
50795136 }
50805137 return 1;
50815138 }
50905147 /* connect on fd */
50915148 xfr->task_transfer->cp = outnet_comm_point_for_tcp(env->outnet,
50925149 auth_xfer_transfer_tcp_callback, xfr, &addr, addrlen,
5093 env->scratch_buffer, AUTH_TRANSFER_TIMEOUT);
5150 env->scratch_buffer, -1,
5151 auth_name != NULL, auth_name);
50945152 if(!xfr->task_transfer->cp) {
5095 char zname[255+1];
5096 dname_str(xfr->name, zname);
5153 char zname[255+1], as[256];
5154 dname_str(xfr->name, zname);
5155 addr_to_str(&addr, addrlen, as, sizeof(as));
50975156 verbose(VERB_ALGO, "cannot create tcp cp connection for "
5098 "xfr %s to %s", zname, master->host);
5099 return 0;
5157 "xfr %s to %s", zname, as);
5158 return 0;
5159 }
5160 comm_timer_set(xfr->task_transfer->timer, &t);
5161 if(verbosity >= VERB_ALGO) {
5162 char zname[255+1], as[256];
5163 dname_str(xfr->name, zname);
5164 addr_to_str(&addr, addrlen, as, sizeof(as));
5165 verbose(VERB_ALGO, "auth zone %s transfer next %s fetch from %s started", zname,
5166 (xfr->task_transfer->on_ixfr?"IXFR":"AXFR"), as);
51005167 }
51015168 return 1;
51025169 }
51155182 * and we may then get an instant cache response,
51165183 * and that calls the callback just like a full
51175184 * lookup and lookup failures also call callback */
5185 if(verbosity >= VERB_ALGO) {
5186 char zname[255+1];
5187 dname_str(xfr->name, zname);
5188 verbose(VERB_ALGO, "auth zone %s transfer next target lookup", zname);
5189 }
51185190 lock_basic_unlock(&xfr->lock);
51195191 return;
51205192 }
51325204 }
51335205 /* failed to fetch, next master */
51345206 xfr_transfer_nextmaster(xfr);
5207 }
5208 if(verbosity >= VERB_ALGO) {
5209 char zname[255+1];
5210 dname_str(xfr->name, zname);
5211 verbose(VERB_ALGO, "auth zone %s transfer failed, wait", zname);
51355212 }
51365213
51375214 /* we failed to fetch the zone, move to wait task
52305307 if(answer) {
52315308 xfr_master_add_addrs(xfr->task_transfer->
52325309 lookup_target, answer, wanted_qtype);
5310 } else {
5311 if(verbosity >= VERB_ALGO) {
5312 char zname[255+1];
5313 dname_str(xfr->name, zname);
5314 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"));
5315 }
52335316 }
5317 } else {
5318 if(verbosity >= VERB_ALGO) {
5319 char zname[255+1];
5320 dname_str(xfr->name, zname);
5321 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"));
5322 }
5323 }
5324 } else {
5325 if(verbosity >= VERB_ALGO) {
5326 char zname[255+1];
5327 dname_str(xfr->name, zname);
5328 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"));
52345329 }
52355330 }
52365331 if(xfr->task_transfer->lookup_target->list &&
56155710 xfr_transfer_nexttarget_or_end(xfr, env);
56165711 }
56175712
5713 /** callback for the task_transfer timer */
5714 void
5715 auth_xfer_transfer_timer_callback(void* arg)
5716 {
5717 struct auth_xfer* xfr = (struct auth_xfer*)arg;
5718 struct module_env* env;
5719 int gonextonfail = 1;
5720 log_assert(xfr->task_transfer);
5721 lock_basic_lock(&xfr->lock);
5722 env = xfr->task_transfer->env;
5723 if(env->outnet->want_to_quit) {
5724 lock_basic_unlock(&xfr->lock);
5725 return; /* stop on quit */
5726 }
5727
5728 verbose(VERB_ALGO, "xfr stopped, connection timeout to %s",
5729 xfr->task_transfer->master->host);
5730
5731 /* see if IXFR caused the failure, if so, try AXFR */
5732 if(xfr->task_transfer->on_ixfr) {
5733 xfr->task_transfer->ixfr_possible_timeout_count++;
5734 if(xfr->task_transfer->ixfr_possible_timeout_count >=
5735 NUM_TIMEOUTS_FALLBACK_IXFR) {
5736 verbose(VERB_ALGO, "xfr to %s, fallback "
5737 "from IXFR to AXFR (because of timeouts)",
5738 xfr->task_transfer->master->host);
5739 xfr->task_transfer->ixfr_fail = 1;
5740 gonextonfail = 0;
5741 }
5742 }
5743
5744 /* delete transferred data from list */
5745 auth_chunks_delete(xfr->task_transfer);
5746 comm_point_delete(xfr->task_transfer->cp);
5747 xfr->task_transfer->cp = NULL;
5748 if(gonextonfail)
5749 xfr_transfer_nextmaster(xfr);
5750 xfr_transfer_nexttarget_or_end(xfr, env);
5751 }
5752
56185753 /** callback for task_transfer tcp connections */
56195754 int
56205755 auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err,
56315766 lock_basic_unlock(&xfr->lock);
56325767 return 0; /* stop on quit */
56335768 }
5769 /* stop the timer */
5770 comm_timer_disable(xfr->task_transfer->timer);
56345771
56355772 if(err != NETEVENT_NOERROR) {
56365773 /* connection failed, closed, or timeout */
57115848 return 0; /* stop on quit */
57125849 }
57135850 verbose(VERB_ALGO, "auth zone transfer http callback");
5851 /* stop the timer */
5852 comm_timer_disable(xfr->task_transfer->timer);
57145853
57155854 if(err != NETEVENT_NOERROR && err != NETEVENT_DONE) {
57165855 /* connection failed, closed, or timeout */
58085947 struct timeval t;
58095948 /* pick master */
58105949 struct auth_master* master = xfr_probe_current_master(xfr);
5950 char *auth_name = NULL;
58115951 if(!master) return 0;
58125952 if(master->allow_notify) return 0; /* only for notify */
58135953 if(master->http) return 0; /* only masters get SOA UDP probe,
58185958 addrlen = xfr->task_probe->scan_addr->addrlen;
58195959 memmove(&addr, &xfr->task_probe->scan_addr->addr, addrlen);
58205960 } else {
5821 if(!extstrtoaddr(master->host, &addr, &addrlen)) {
5961 if(!authextstrtoaddr(master->host, &addr, &addrlen, &auth_name)) {
58225962 /* the ones that are not in addr format are supposed
58235963 * to be looked up. The lookup has failed however,
58245964 * so skip them */
58285968 zname, master->host);
58295969 return 0;
58305970 }
5971 if (auth_name != NULL) {
5972 if (addr.ss_family == AF_INET
5973 && ntohs(((struct sockaddr_in *)&addr)->sin_port)
5974 == env->cfg->ssl_port)
5975 ((struct sockaddr_in *)&addr)->sin_port
5976 = htons(env->cfg->port);
5977 else if (addr.ss_family == AF_INET6
5978 && ntohs(((struct sockaddr_in6 *)&addr)->sin6_port)
5979 == env->cfg->ssl_port)
5980 ((struct sockaddr_in6 *)&addr)->sin6_port
5981 = htons(env->cfg->port);
5982 }
58315983 }
58325984
58335985 /* create packet */
58375989 xfr->task_probe->id = (uint16_t)(ub_random(env->rnd)&0xffff);
58385990 xfr_create_soa_probe_packet(xfr, env->scratch_buffer,
58395991 xfr->task_probe->id);
5992 /* we need to remove the cp if we have a different ip4/ip6 type now */
5993 if(xfr->task_probe->cp &&
5994 ((xfr->task_probe->cp_is_ip6 && !addr_is_ip6(&addr, addrlen)) ||
5995 (!xfr->task_probe->cp_is_ip6 && addr_is_ip6(&addr, addrlen)))
5996 ) {
5997 comm_point_delete(xfr->task_probe->cp);
5998 xfr->task_probe->cp = NULL;
5999 }
58406000 if(!xfr->task_probe->cp) {
6001 if(addr_is_ip6(&addr, addrlen))
6002 xfr->task_probe->cp_is_ip6 = 1;
6003 else xfr->task_probe->cp_is_ip6 = 0;
58416004 xfr->task_probe->cp = outnet_comm_point_for_udp(env->outnet,
58426005 auth_xfer_probe_udp_callback, xfr, &addr, addrlen);
58436006 if(!xfr->task_probe->cp) {
5844 char zname[255+1];
6007 char zname[255+1], as[256];
58456008 dname_str(xfr->name, zname);
6009 addr_to_str(&addr, addrlen, as, sizeof(as));
58466010 verbose(VERB_ALGO, "cannot create udp cp for "
5847 "probe %s to %s", zname, master->host);
6011 "probe %s to %s", zname, as);
58486012 return 0;
58496013 }
58506014 }
58606024 /* send udp packet */
58616025 if(!comm_point_send_udp_msg(xfr->task_probe->cp, env->scratch_buffer,
58626026 (struct sockaddr*)&addr, addrlen)) {
5863 char zname[255+1];
6027 char zname[255+1], as[256];
58646028 dname_str(xfr->name, zname);
6029 addr_to_str(&addr, addrlen, as, sizeof(as));
58656030 verbose(VERB_ALGO, "failed to send soa probe for %s to %s",
5866 zname, master->host);
5867 return 0;
6031 zname, as);
6032 return 0;
6033 }
6034 if(verbosity >= VERB_ALGO) {
6035 char zname[255+1], as[256];
6036 dname_str(xfr->name, zname);
6037 addr_to_str(&addr, addrlen, as, sizeof(as));
6038 verbose(VERB_ALGO, "auth zone %s soa probe sent to %s", zname,
6039 as);
58686040 }
58696041 xfr->task_probe->timeout = timeout;
58706042 #ifndef S_SPLINT_S
58906062 return; /* stop on quit */
58916063 }
58926064
6065 if(verbosity >= VERB_ALGO) {
6066 char zname[255+1];
6067 dname_str(xfr->name, zname);
6068 verbose(VERB_ALGO, "auth zone %s soa probe timeout", zname);
6069 }
58936070 if(xfr->task_probe->timeout <= AUTH_PROBE_TIMEOUT_STOP) {
58946071 /* try again with bigger timeout */
58956072 if(xfr_probe_send_probe(xfr, env, xfr->task_probe->timeout*2)) {
60776254 * and we may then get an instant cache response,
60786255 * and that calls the callback just like a full
60796256 * lookup and lookup failures also call callback */
6257 if(verbosity >= VERB_ALGO) {
6258 char zname[255+1];
6259 dname_str(xfr->name, zname);
6260 verbose(VERB_ALGO, "auth zone %s probe next target lookup", zname);
6261 }
60806262 lock_basic_unlock(&xfr->lock);
60816263 return;
60826264 }
60856267 /* probe of list has ended. Create or refresh the list of of
60866268 * allow_notify addrs */
60876269 probe_copy_masters_for_allow_notify(xfr);
6270 if(verbosity >= VERB_ALGO) {
6271 char zname[255+1];
6272 dname_str(xfr->name, zname);
6273 verbose(VERB_ALGO, "auth zone %s probe: notify addrs updated", zname);
6274 }
60886275 if(xfr->task_probe->only_lookup) {
60896276 /* only wanted lookups for copy, stop probe and start wait */
60906277 xfr->task_probe->only_lookup = 0;
6278 if(verbosity >= VERB_ALGO) {
6279 char zname[255+1];
6280 dname_str(xfr->name, zname);
6281 verbose(VERB_ALGO, "auth zone %s probe: finished only_lookup", zname);
6282 }
60916283 xfr_probe_disown(xfr);
60926284 if(xfr->task_nextprobe->worker == NULL)
60936285 xfr_set_timeout(xfr, env, 0, 0);
61096301 /* done with probe sequence, wait */
61106302 if(xfr->task_probe->have_new_lease) {
61116303 /* if zone not updated, start the wait timer again */
6112 verbose(VERB_ALGO, "auth_zone unchanged, new lease, wait");
6304 if(verbosity >= VERB_ALGO) {
6305 char zname[255+1];
6306 dname_str(xfr->name, zname);
6307 verbose(VERB_ALGO, "auth_zone %s unchanged, new lease, wait", zname);
6308 }
61136309 xfr_probe_disown(xfr);
61146310 if(xfr->have_zone)
61156311 xfr->lease_time = *env->now;
61166312 if(xfr->task_nextprobe->worker == NULL)
61176313 xfr_set_timeout(xfr, env, 0, 0);
61186314 } else {
6315 if(verbosity >= VERB_ALGO) {
6316 char zname[255+1];
6317 dname_str(xfr->name, zname);
6318 verbose(VERB_ALGO, "auth zone %s soa probe failed, wait to retry", zname);
6319 }
61196320 /* we failed to send this as well, move to the wait task,
61206321 * use the shorter retry timeout */
61216322 xfr_probe_disown(xfr);
61606361 if(answer) {
61616362 xfr_master_add_addrs(xfr->task_probe->
61626363 lookup_target, answer, wanted_qtype);
6364 } else {
6365 if(verbosity >= VERB_ALGO) {
6366 char zname[255+1];
6367 dname_str(xfr->name, zname);
6368 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"));
6369 }
61636370 }
6371 } else {
6372 if(verbosity >= VERB_ALGO) {
6373 char zname[255+1];
6374 dname_str(xfr->name, zname);
6375 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"));
6376 }
6377 }
6378 } else {
6379 if(verbosity >= VERB_ALGO) {
6380 char zname[255+1];
6381 dname_str(xfr->name, zname);
6382 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"));
61646383 }
61656384 }
61666385 if(xfr->task_probe->lookup_target->list &&
63496568 /* don't lookup_only, if lookup timeout is 0 anyway,
63506569 * or if we don't have masters to lookup */
63516570 tv.tv_sec = 0;
6352 if(xfr->task_probe && xfr->task_probe->worker == NULL)
6571 if(xfr->task_probe->worker == NULL)
63536572 xfr->task_probe->only_lookup = 1;
63546573 }
63556574 if(verbosity >= VERB_ALGO) {
326326 /** the SOA probe udp event.
327327 * on the workers event base. */
328328 struct comm_point* cp;
329 /** is the cp for ip6 or ip4 */
330 int cp_is_ip6;
329331 /** timeout for packets.
330332 * on the workers event base. */
331333 struct comm_timer* timer;
397399 /** the transfer (TCP) to the master.
398400 * on the workers event base. */
399401 struct comm_point* cp;
402 /** timeout for the transfer.
403 * on the workers event base. */
404 struct comm_timer* timer;
400405 };
401406
402407 /** list of addresses */
646651 struct comm_reply* repinfo);
647652 /** xfer probe timeout callback, part of task_probe */
648653 void auth_xfer_probe_timer_callback(void* arg);
654 /** xfer transfer timeout callback, part of task_transfer */
655 void auth_xfer_transfer_timer_callback(void* arg);
649656 /** mesh callback for task_probe on lookup of host names */
650657 void auth_xfer_probe_lookup_callback(void* arg, int rcode,
651658 struct sldns_buffer* buf, enum sec_status sec, char* why_bogus,
3939 */
4040 #include "config.h"
4141 #include "iterator/iter_delegpt.h"
42 #include "iterator/iter_utils.h"
4243 #include "validator/val_nsec.h"
4344 #include "validator/val_utils.h"
4445 #include "services/cache/dns.h"
727728 if(!msg) {
728729 return NULL;
729730 }
731 /* set NOTIMPL for RFC 8482 */
732 msg->rep->flags |= LDNS_RCODE_NOTIMPL;
730733 msg->rep->security = sec_status_indeterminate;
731734 return msg;
732735 }
911914 struct dns_msg* msg;
912915 if(FLAGS_GET_RCODE(data->flags) == LDNS_RCODE_NXDOMAIN
913916 && data->security == sec_status_secure
917 && (data->an_numrrsets == 0 ||
918 ntohs(data->rrsets[0]->rk.type) != LDNS_RR_TYPE_CNAME)
914919 && (msg=tomsg(env, &k, data, region, now, scratch))){
915920 lock_rw_unlock(&e->lock);
916921 msg->qinfo.qname=qname;
917922 msg->qinfo.qname_len=qnamelen;
918923 /* check that DNSSEC really works out */
919924 msg->rep->security = sec_status_unchecked;
925 iter_scrub_nxdomain(msg);
920926 return msg;
921927 }
922928 lock_rw_unlock(&e->lock);
4040 #include "config.h"
4141 #include "sldns/rrdef.h"
4242 #include "sldns/str2wire.h"
43 #include "sldns/sbuffer.h"
44 #include "sldns/wire2str.h"
4345 #include "services/cache/infra.h"
4446 #include "util/storage/slabhash.h"
4547 #include "util/storage/lookup3.h"
906908 }
907909
908910 int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name,
909 size_t namelen, time_t timenow)
911 size_t namelen, time_t timenow, struct query_info* qinfo,
912 struct comm_reply* replylist)
910913 {
911914 int lim, max;
912915 struct lruhash_entry* entry;
929932 lock_rw_unlock(&entry->lock);
930933
931934 if(premax < lim && max >= lim) {
932 char buf[257];
935 char buf[257], qnm[257], ts[12], cs[12], ip[128];
933936 dname_str(name, buf);
934 verbose(VERB_OPS, "ratelimit exceeded %s %d", buf, lim);
937 dname_str(qinfo->qname, qnm);
938 sldns_wire2str_type_buf(qinfo->qtype, ts, sizeof(ts));
939 sldns_wire2str_class_buf(qinfo->qclass, cs, sizeof(cs));
940 ip[0]=0;
941 if(replylist) {
942 addr_to_str((struct sockaddr_storage *)&replylist->addr,
943 replylist->addrlen, ip, sizeof(ip));
944 verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s from %s", buf, lim, qnm, cs, ts, ip);
945 } else {
946 verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s", buf, lim, qnm, cs, ts);
947 }
935948 }
936949 return (max < lim);
937950 }
9901003 }
9911004
9921005 int infra_ip_ratelimit_inc(struct infra_cache* infra,
993 struct comm_reply* repinfo, time_t timenow)
1006 struct comm_reply* repinfo, time_t timenow, struct sldns_buffer* buffer)
9941007 {
9951008 int max;
9961009 struct lruhash_entry* entry;
10091022 lock_rw_unlock(&entry->lock);
10101023
10111024 if(premax < infra_ip_ratelimit && max >= infra_ip_ratelimit) {
1012 char client_ip[128];
1025 char client_ip[128], qnm[LDNS_MAX_DOMAINLEN+1+12+12];
10131026 addr_to_str((struct sockaddr_storage *)&repinfo->addr,
10141027 repinfo->addrlen, client_ip, sizeof(client_ip));
1015 verbose(VERB_OPS, "ip_ratelimit exceeded %s %d",
1016 client_ip, infra_ip_ratelimit);
1028 qnm[0]=0;
1029 if(sldns_buffer_limit(buffer)>LDNS_HEADER_SIZE &&
1030 LDNS_QDCOUNT(sldns_buffer_begin(buffer))!=0) {
1031 (void)sldns_wire2str_rrquestion_buf(
1032 sldns_buffer_at(buffer, LDNS_HEADER_SIZE),
1033 sldns_buffer_limit(buffer)-LDNS_HEADER_SIZE,
1034 qnm, sizeof(qnm));
1035 if(strlen(qnm)>0 && qnm[strlen(qnm)-1]=='\n')
1036 qnm[strlen(qnm)-1] = 0; /*remove newline*/
1037 if(strchr(qnm, '\t'))
1038 *strchr(qnm, '\t') = ' ';
1039 if(strchr(qnm, '\t'))
1040 *strchr(qnm, '\t') = ' ';
1041 verbose(VERB_OPS, "ip_ratelimit exceeded %s %d %s",
1042 client_ip, infra_ip_ratelimit, qnm);
1043 } else {
1044 verbose(VERB_OPS, "ip_ratelimit exceeded %s %d (no query name)",
1045 client_ip, infra_ip_ratelimit);
1046 }
10171047 }
10181048 return (max <= infra_ip_ratelimit);
10191049 }
365365 * @param name: zone name
366366 * @param namelen: zone name length
367367 * @param timenow: what time it is now.
368 * @param qinfo: for logging, query name.
369 * @param replylist: for logging, querier's address (if any).
368370 * @return 1 if it could be incremented. 0 if the increment overshot the
369371 * ratelimit or if in the previous second the ratelimit was exceeded.
370372 * Failures like alloc failures are not returned (probably as 1).
371373 */
372374 int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name,
373 size_t namelen, time_t timenow);
375 size_t namelen, time_t timenow, struct query_info* qinfo,
376 struct comm_reply* replylist);
374377
375378 /**
376379 * Decrement the query rate counter for a delegation point.
409412 * @param infra: infra cache
410413 * @param repinfo: information about client
411414 * @param timenow: what time it is now.
415 * @param buffer: with query for logging.
412416 * @return 1 if it could be incremented. 0 if the increment overshot the
413417 * ratelimit and the query should be dropped. */
414418 int infra_ip_ratelimit_inc(struct infra_cache* infra,
415 struct comm_reply* repinfo, time_t timenow);
419 struct comm_reply* repinfo, time_t timenow,
420 struct sldns_buffer* buffer);
416421
417422 /**
418423 * Get memory used by the infra cache.
850850 #ifdef ENOPROTOOPT
851851 /* squelch ENOPROTOOPT: freebsd server mode with kernel support
852852 disabled, except when verbosity enabled for debugging */
853 if(errno != ENOPROTOOPT || verbosity >= 3)
853 if(errno != ENOPROTOOPT || verbosity >= 3) {
854854 #endif
855855 if(errno == EPERM) {
856856 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));
857857 } else {
858858 log_err("Setting TCP Fast Open as server failed: %s", strerror(errno));
859859 }
860 #ifdef ENOPROTOOPT
861 }
862 #endif
860863 }
861864 #endif
862865 return s;
16351638
16361639 if(wr) {
16371640 req->cp->tcp_is_reading = 0;
1641 comm_point_stop_listening(req->cp);
16381642 comm_point_start_listening(req->cp, -1,
16391643 req->cp->tcp_timeout_msec);
16401644 } else if(rd) {
16411645 req->cp->tcp_is_reading = 1;
1646 comm_point_stop_listening(req->cp);
16421647 comm_point_start_listening(req->cp, -1,
16431648 req->cp->tcp_timeout_msec);
16441649 /* and also read it (from SSL stack buffers), so
16461651 * the TLS frame is sitting in the buffers. */
16471652 req->read_again = 1;
16481653 } else {
1654 comm_point_stop_listening(req->cp);
16491655 comm_point_start_listening(req->cp, -1,
16501656 req->cp->tcp_timeout_msec);
16511657 comm_point_listen_for_rw(req->cp, 0, 0);
17451751 req->is_drop = 0;
17461752 req->is_reply = 0;
17471753 req->in_worker_handle = 1;
1754 sldns_buffer_set_limit(req->spool_buffer, 0);
17481755 /* handle the current request */
17491756 /* this calls the worker handle request routine that could give
17501757 * a cache response, or localdata response, or drop the reply,
17581765 * clear to write to */
17591766 send_it:
17601767 c->tcp_is_reading = 0;
1768 comm_point_stop_listening(c);
17611769 comm_point_start_listening(c, -1, c->tcp_timeout_msec);
17621770 return;
17631771 }
17661774 * If mesh failed to add a new entry and called commpoint_drop_reply.
17671775 * Then the mesh state has been cleared. */
17681776 if(req->is_drop) {
1769 /* we can now call drop_reply without recursing into ourselves
1770 * whilst in the callback */
1771 /* we have to close the stream because there is no reply,
1772 * no servfail to send, but the query needs an action, for
1773 * a stream that is close the connection */
1774 sldns_buffer_clear(c->buffer);
1775 comm_point_drop_reply(&c->repinfo);
1777 /* the reply has been dropped, stream has been closed. */
17761778 return;
17771779 }
17781780 /* If mesh failed(mallocfail) and called commpoint_send_reply with
18561858 tcp_req_info_send_reply(struct tcp_req_info* req)
18571859 {
18581860 if(req->in_worker_handle) {
1859 /* It is in the right buffer to answer straight away */
1861 /* reply from mesh is in the spool_buffer */
1862 /* copy now, so that the spool buffer is free for other tasks
1863 * before the callback is done */
1864 sldns_buffer_clear(req->cp->buffer);
1865 sldns_buffer_write(req->cp->buffer,
1866 sldns_buffer_begin(req->spool_buffer),
1867 sldns_buffer_limit(req->spool_buffer));
1868 sldns_buffer_flip(req->cp->buffer);
18601869 req->is_reply = 1;
18611870 return;
18621871 }
463463 return 0;
464464 }
465465 log_assert(z->dclass == rrclass);
466 if(z->type == local_zone_redirect &&
466 if((z->type == local_zone_redirect ||
467 z->type == local_zone_inform_redirect) &&
467468 query_dname_compare(z->name, nm) != 0) {
468469 log_err("local-data in redirect zone must reside at top of zone"
469470 ", not at %s", rrstr);
480481
481482 /* Reject it if we would end up having CNAME and other data (including
482483 * another CNAME) for a redirect zone. */
483 if(z->type == local_zone_redirect && node->rrsets) {
484 if((z->type == local_zone_redirect ||
485 z->type == local_zone_inform_redirect) && node->rrsets) {
484486 const char* othertype = NULL;
485487 if (rrtype == LDNS_RR_TYPE_CNAME)
486488 othertype = "other";
13221324 key.name = qinfo->qname;
13231325 key.namelen = qinfo->qname_len;
13241326 key.namelabs = labs;
1325 if(lz_type == local_zone_redirect) {
1327 if(lz_type == local_zone_redirect ||
1328 lz_type == local_zone_inform_redirect) {
13261329 key.name = z->name;
13271330 key.namelen = z->namelen;
13281331 key.namelabs = z->namelabs;
13541357 return 0;
13551358
13561359 /* Special case for alias matching. See local_data_answer(). */
1357 if(lz_type == local_zone_redirect &&
1360 if((lz_type == local_zone_redirect ||
1361 lz_type == local_zone_inform_redirect) &&
13581362 qinfo->qtype != LDNS_RR_TYPE_CNAME &&
13591363 lr->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) {
13601364 qinfo->local_alias =
13691373 qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len;
13701374 return 1;
13711375 }
1372 if(lz_type == local_zone_redirect) {
1376 if(lz_type == local_zone_redirect ||
1377 lz_type == local_zone_inform_redirect) {
13731378 /* convert rrset name to query name; like a wildcard */
13741379 struct ub_packed_rrset_key r = *lr->rrset;
13751380 r.rk.dname = qinfo->qname;
14411446 return 1;
14421447 } else if(lz_type == local_zone_static ||
14431448 lz_type == local_zone_redirect ||
1449 lz_type == local_zone_inform_redirect ||
14441450 lz_type == local_zone_always_nxdomain) {
14451451 /* for static, reply nodata or nxdomain
14461452 * for redirect, reply nodata */
14491455 * or using closest match for NSEC.
14501456 * or using closest match for returning delegation downwards
14511457 */
1452 int rcode = (ld || lz_type == local_zone_redirect)?
1458 int rcode = (ld || lz_type == local_zone_redirect ||
1459 lz_type == local_zone_inform_redirect)?
14531460 LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN;
14541461 if(z->soa)
14551462 return local_encode(qinfo, env, edns, repinfo, buf, temp,
16231630 }
16241631 }
16251632 if((env->cfg->log_local_actions ||
1626 lzt == local_zone_inform || lzt == local_zone_inform_deny)
1633 lzt == local_zone_inform ||
1634 lzt == local_zone_inform_deny ||
1635 lzt == local_zone_inform_redirect)
16271636 && repinfo)
16281637 lz_inform_print(z, qinfo, repinfo);
16291638
16551664 case local_zone_nodefault: return "nodefault";
16561665 case local_zone_inform: return "inform";
16571666 case local_zone_inform_deny: return "inform_deny";
1667 case local_zone_inform_redirect: return "inform_redirect";
16581668 case local_zone_always_transparent: return "always_transparent";
16591669 case local_zone_always_refuse: return "always_refuse";
16601670 case local_zone_always_nxdomain: return "always_nxdomain";
16811691 *t = local_zone_inform;
16821692 else if(strcmp(type, "inform_deny") == 0)
16831693 *t = local_zone_inform_deny;
1694 else if(strcmp(type, "inform_redirect") == 0)
1695 *t = local_zone_inform_redirect;
16841696 else if(strcmp(type, "always_transparent") == 0)
16851697 *t = local_zone_always_transparent;
16861698 else if(strcmp(type, "always_refuse") == 0)
8282 local_zone_inform,
8383 /** log client address, and block (drop) */
8484 local_zone_inform_deny,
85 /** log client address, and direct */
86 local_zone_inform_redirect,
8587 /** resolve normally, even when there is local data */
8688 local_zone_always_transparent,
8789 /** answer with error, even when there is local data */
490492 respip_inform = local_zone_inform,
491493 /** log query source and don't answer query */
492494 respip_inform_deny = local_zone_inform_deny,
495 /** log query source and redirect */
496 respip_inform_redirect = local_zone_inform_redirect,
493497 /** resolve normally, even when there is response-ip data */
494498 respip_always_transparent = local_zone_always_transparent,
495499 /** answer with 'refused' response */
8484 #ifndef S_SPLINT_S
8585 d->tv_sec += add->tv_sec;
8686 d->tv_usec += add->tv_usec;
87 if(d->tv_usec > 1000000 ) {
87 if(d->tv_usec >= 1000000 ) {
8888 d->tv_usec -= 1000000;
8989 d->tv_sec++;
9090 }
353353 int was_detached = 0;
354354 int was_noreply = 0;
355355 int added = 0;
356 struct sldns_buffer* r_buffer = rep->c->buffer;
357 if(rep->c->tcp_req_info) {
358 r_buffer = rep->c->tcp_req_info->spool_buffer;
359 }
356360 if(!unique)
357361 s = mesh_area_find(mesh, cinfo, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
358362 /* does this create a new reply state? */
388392 if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL,
389393 LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch))
390394 edns->opt_list = NULL;
391 error_encode(rep->c->buffer, LDNS_RCODE_SERVFAIL,
395 error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
392396 qinfo, qid, qflags, edns);
393397 comm_point_send_reply(rep);
394398 return;
404408 if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL,
405409 NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch))
406410 edns->opt_list = NULL;
407 error_encode(rep->c->buffer, LDNS_RCODE_SERVFAIL,
411 error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
408412 qinfo, qid, qflags, edns);
409413 comm_point_send_reply(rep);
410414 return;
433437 if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, &s->s,
434438 NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch))
435439 edns->opt_list = NULL;
436 error_encode(rep->c->buffer, LDNS_RCODE_SERVFAIL,
440 error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
437441 qinfo, qid, qflags, edns);
438442 comm_point_send_reply(rep);
439443 if(added)
11911195 comm_point_drop_reply(&r->query_reply);
11921196 else {
11931197 struct sldns_buffer* r_buffer = r->query_reply.c->buffer;
1194 if(r->query_reply.c->tcp_req_info)
1198 if(r->query_reply.c->tcp_req_info) {
11951199 r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
1200 prev_buffer = NULL;
1201 }
11961202 mesh_send_reply(mstate, mstate->s.return_rcode, rep,
11971203 r, r_buffer, prev, prev_buffer);
1198 if(r->query_reply.c->tcp_req_info)
1204 if(r->query_reply.c->tcp_req_info) {
11991205 tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
1206 r_buffer = NULL;
1207 }
12001208 prev = r;
12011209 prev_buffer = r_buffer;
12021210 }
13311339 log_assert(!qinfo->local_alias->next && dsrc->count == 1 &&
13321340 qinfo->local_alias->rrset->rk.type ==
13331341 htons(LDNS_RR_TYPE_CNAME));
1334 /* Technically, we should make a local copy for the owner
1335 * name of the RRset, but in the case of the first (and
1336 * currently only) local alias RRset, the owner name should
1337 * point to the qname of the corresponding query, which should
1338 * be valid throughout the lifetime of this mesh_reply. So
1339 * we can skip copying. */
1340 log_assert(qinfo->local_alias->rrset->rk.dname ==
1341 sldns_buffer_at(rep->c->buffer, LDNS_HEADER_SIZE));
1342
1343 d = regional_alloc_init(s->s.region, dsrc,
1344 sizeof(struct packed_rrset_data)
1345 + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t));
1342 /* we should make a local copy for the owner name of
1343 * the RRset */
1344 r->local_alias->rrset->rk.dname_len =
1345 qinfo->local_alias->rrset->rk.dname_len;
1346 r->local_alias->rrset->rk.dname = regional_alloc_init(
1347 s->s.region, qinfo->local_alias->rrset->rk.dname,
1348 qinfo->local_alias->rrset->rk.dname_len);
1349 if(!r->local_alias->rrset->rk.dname)
1350 return 0;
1351
1352 /* the rrset is not packed, like in the cache, but it is
1353 * individualy allocated with an allocator from localzone. */
1354 d = regional_alloc_zero(s->s.region, sizeof(*d));
13461355 if(!d)
13471356 return 0;
13481357 r->local_alias->rrset->entry.data = d;
1349 d->rr_len = (size_t*)((uint8_t*)d +
1350 sizeof(struct packed_rrset_data));
1351 d->rr_data = (uint8_t**)&(d->rr_len[1]);
1352 d->rr_ttl = (time_t*)&(d->rr_data[1]);
1353 d->rr_len[0] = dsrc->rr_len[0];
1354 d->rr_ttl[0] = dsrc->rr_ttl[0];
1355 d->rr_data[0] = regional_alloc_init(s->s.region,
1356 dsrc->rr_data[0], d->rr_len[0]);
1357 if(!d->rr_data[0])
1358 if(!rrset_insert_rr(s->s.region, d, dsrc->rr_data[0],
1359 dsrc->rr_len[0], dsrc->rr_ttl[0], "CNAME local alias"))
13581360 return 0;
13591361 } else
13601362 r->local_alias = NULL;
5959 #ifdef CLIENT_SUBNET
6060 #include "edns-subnet/subnetmod.h"
6161 #endif
62 #ifdef USE_IPSET
63 #include "ipset/ipset.h"
64 #endif
6265
6366 /** count number of modules (words) in the string */
6467 static int
112115 for(i=0; i<stack->num; i++) {
113116 stack->mod[i] = module_factory(&module_conf);
114117 if(!stack->mod[i]) {
115 log_err("Unknown value for next module: '%s'",
116 module_conf);
118 char md[256];
119 snprintf(md, sizeof(md), "%s", module_conf);
120 if(strchr(md, ' ')) *(strchr(md, ' ')) = 0;
121 if(strchr(md, '\t')) *(strchr(md, '\t')) = 0;
122 log_err("Unknown value in module-config, module: '%s'."
123 " This module is not present (not compiled in),"
124 " See the list of linked modules with unbound -h",
125 md);
117126 return 0;
118127 }
119128 }
139148 #ifdef CLIENT_SUBNET
140149 "subnetcache",
141150 #endif
151 #ifdef USE_IPSET
152 "ipset",
153 #endif
142154 "respip",
143155 "validator",
144156 "iterator",
166178 #endif
167179 #ifdef CLIENT_SUBNET
168180 &subnetmod_get_funcblock,
181 #endif
182 #ifdef USE_IPSET
183 &ipset_get_funcblock,
169184 #endif
170185 &respip_get_funcblock,
171186 &val_get_funcblock,
363363 comm_point_close(pend->c);
364364 return 0;
365365 }
366 verbose(VERB_ALGO, "the query is using TLS encryption, for %s",
367 (w->tls_auth_name?w->tls_auth_name:"an unauthenticated connection"));
366368 #ifdef USE_WINSOCK
367369 comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl);
368370 #endif
403405 }
404406 SSL_set_verify(pend->c->ssl, SSL_VERIFY_PEER, NULL);
405407 }
408 #else
409 verbose(VERB_ALGO, "the query has an auth_name, but libssl has no call to perform TLS authentication");
406410 #endif /* HAVE_SSL_SET1_HOST */
407411 }
408412 w->pkt = NULL;
19631967 struct serviced_query* sq = (struct serviced_query*)arg;
19641968 struct outside_network* outnet = sq->outnet;
19651969 struct timeval now = *sq->outnet->now_tv;
1966 int fallback_tcp = 0;
19671970
19681971 sq->pending = NULL; /* removed after callback */
19691972 if(error == NETEVENT_TIMEOUT) {
19951998 }
19961999 return 0;
19972000 }
1998 if(rto >= RTT_MAX_TIMEOUT) {
1999 /* fallback_tcp = 1; */
2000 /* UDP does not work, fallback to TCP below */
2001 } else {
2002 serviced_callbacks(sq, NETEVENT_TIMEOUT, c, rep);
2003 return 0;
2004 }
2005 } else if(error != NETEVENT_NOERROR) {
2001 }
2002 if(error != NETEVENT_NOERROR) {
20062003 /* udp returns error (due to no ID or interface available) */
20072004 serviced_callbacks(sq, error, c, rep);
20082005 return 0;
20152012 sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen,
20162013 &sq->last_sent_time, sq->outnet->now_tv, c->buffer);
20172014 #endif
2018 if(!fallback_tcp) {
2019 if( (sq->status == serviced_query_UDP_EDNS
2020 ||sq->status == serviced_query_UDP_EDNS_FRAG)
2015 if( (sq->status == serviced_query_UDP_EDNS
2016 ||sq->status == serviced_query_UDP_EDNS_FRAG)
20212017 && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer))
20222018 == LDNS_RCODE_FORMERR || LDNS_RCODE_WIRE(
20232019 sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOTIMPL
20312027 serviced_callbacks(sq, NETEVENT_CLOSED, c, rep);
20322028 }
20332029 return 0;
2034 } else if(sq->status == serviced_query_UDP_EDNS &&
2030 } else if(sq->status == serviced_query_UDP_EDNS &&
20352031 !sq->edns_lame_known) {
20362032 /* now we know that edns queries received answers store that */
20372033 log_addr(VERB_ALGO, "serviced query: EDNS works for",
20412037 log_err("Out of memory caching edns works");
20422038 }
20432039 sq->edns_lame_known = 1;
2044 } else if(sq->status == serviced_query_UDP_EDNS_fallback &&
2040 } else if(sq->status == serviced_query_UDP_EDNS_fallback &&
20452041 !sq->edns_lame_known && (LDNS_RCODE_WIRE(
20462042 sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOERROR ||
20472043 LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) ==
20592055 }
20602056 } else {
20612057 log_addr(VERB_ALGO, "serviced query: EDNS fails, but "
2062 "not stored because need DNSSEC for", &sq->addr,
2058 "not stored because need DNSSEC for", &sq->addr,
20632059 sq->addrlen);
20642060 }
20652061 sq->status = serviced_query_UDP;
2066 }
2067 if(now.tv_sec > sq->last_sent_time.tv_sec ||
2062 }
2063 if(now.tv_sec > sq->last_sent_time.tv_sec ||
20682064 (now.tv_sec == sq->last_sent_time.tv_sec &&
20692065 now.tv_usec > sq->last_sent_time.tv_usec)) {
20702066 /* convert from microseconds to milliseconds */
20802076 sq->last_rtt, (time_t)now.tv_sec))
20812077 log_err("out of memory noting rtt.");
20822078 }
2083 }
2084 } /* end of if_!fallback_tcp */
2079 }
20852080 /* perform TC flag check and TCP fallback after updating our
20862081 * cache entries for EDNS status and RTT times */
2087 if(LDNS_TC_WIRE(sldns_buffer_begin(c->buffer)) || fallback_tcp) {
2082 if(LDNS_TC_WIRE(sldns_buffer_begin(c->buffer))) {
20882083 /* fallback to TCP */
20892084 /* this discards partial UDP contents */
20902085 if(sq->status == serviced_query_UDP_EDNS ||
22852280 return cp;
22862281 }
22872282
2283 /** setup SSL for comm point */
2284 static int
2285 setup_comm_ssl(struct comm_point* cp, struct outside_network* outnet,
2286 int fd, char* host)
2287 {
2288 cp->ssl = outgoing_ssl_fd(outnet->sslctx, fd);
2289 if(!cp->ssl) {
2290 log_err("cannot create SSL object");
2291 return 0;
2292 }
2293 #ifdef USE_WINSOCK
2294 comm_point_tcp_win_bio_cb(cp, cp->ssl);
2295 #endif
2296 cp->ssl_shake_state = comm_ssl_shake_write;
2297 /* https verification */
2298 #ifdef HAVE_SSL_SET1_HOST
2299 if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
2300 /* because we set SSL_VERIFY_PEER, in netevent in
2301 * ssl_handshake, it'll check if the certificate
2302 * verification has succeeded */
2303 /* SSL_VERIFY_PEER is set on the sslctx */
2304 /* and the certificates to verify with are loaded into
2305 * it with SSL_load_verify_locations or
2306 * SSL_CTX_set_default_verify_paths */
2307 /* setting the hostname makes openssl verify the
2308 * host name in the x509 certificate in the
2309 * SSL connection*/
2310 if(!SSL_set1_host(cp->ssl, host)) {
2311 log_err("SSL_set1_host failed");
2312 return 0;
2313 }
2314 }
2315 #elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
2316 /* openssl 1.0.2 has this function that can be used for
2317 * set1_host like verification */
2318 if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
2319 X509_VERIFY_PARAM* param = SSL_get0_param(cp->ssl);
2320 X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
2321 if(!X509_VERIFY_PARAM_set1_host(param, host, strlen(host))) {
2322 log_err("X509_VERIFY_PARAM_set1_host failed");
2323 return 0;
2324 }
2325 }
2326 #else
2327 (void)host;
2328 #endif /* HAVE_SSL_SET1_HOST */
2329 return 1;
2330 }
2331
22882332 struct comm_point*
22892333 outnet_comm_point_for_tcp(struct outside_network* outnet,
22902334 comm_point_callback_type* cb, void* cb_arg,
22912335 struct sockaddr_storage* to_addr, socklen_t to_addrlen,
2292 sldns_buffer* query, int timeout)
2336 sldns_buffer* query, int timeout, int ssl, char* host)
22932337 {
22942338 struct comm_point* cp;
22952339 int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss);
23092353 }
23102354 cp->repinfo.addrlen = to_addrlen;
23112355 memcpy(&cp->repinfo.addr, to_addr, to_addrlen);
2356
2357 /* setup for SSL (if needed) */
2358 if(ssl) {
2359 if(!setup_comm_ssl(cp, outnet, fd, host)) {
2360 log_err("cannot setup XoT");
2361 comm_point_delete(cp);
2362 return NULL;
2363 }
2364 }
2365
23122366 /* set timeout on TCP connection */
23132367 comm_point_start_listening(cp, fd, timeout);
23142368 /* copy scratch buffer to cp->buffer */
23652419
23662420 /* setup for SSL (if needed) */
23672421 if(ssl) {
2368 cp->ssl = outgoing_ssl_fd(outnet->sslctx, fd);
2369 if(!cp->ssl) {
2422 if(!setup_comm_ssl(cp, outnet, fd, host)) {
23702423 log_err("cannot setup https");
23712424 comm_point_delete(cp);
23722425 return NULL;
23732426 }
2374 #ifdef USE_WINSOCK
2375 comm_point_tcp_win_bio_cb(cp, cp->ssl);
2376 #endif
2377 cp->ssl_shake_state = comm_ssl_shake_write;
2378 /* https verification */
2379 #ifdef HAVE_SSL_SET1_HOST
2380 if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
2381 /* because we set SSL_VERIFY_PEER, in netevent in
2382 * ssl_handshake, it'll check if the certificate
2383 * verification has succeeded */
2384 /* SSL_VERIFY_PEER is set on the sslctx */
2385 /* and the certificates to verify with are loaded into
2386 * it with SSL_load_verify_locations or
2387 * SSL_CTX_set_default_verify_paths */
2388 /* setting the hostname makes openssl verify the
2389 * host name in the x509 certificate in the
2390 * SSL connection*/
2391 if(!SSL_set1_host(cp->ssl, host)) {
2392 log_err("SSL_set1_host failed");
2393 comm_point_delete(cp);
2394 return NULL;
2395 }
2396 }
2397 #elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
2398 /* openssl 1.0.2 has this function that can be used for
2399 * set1_host like verification */
2400 if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
2401 X509_VERIFY_PARAM* param = SSL_get0_param(cp->ssl);
2402 X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
2403 if(!X509_VERIFY_PARAM_set1_host(param, host, strlen(host))) {
2404 log_err("X509_VERIFY_PARAM_set1_host failed");
2405 comm_point_delete(cp);
2406 return NULL;
2407 }
2408 }
2409 #endif /* HAVE_SSL_SET1_HOST */
24102427 }
24112428
24122429 /* set timeout on TCP connection */
569569 * @param timeout: timeout for the TCP connection.
570570 * timeout in milliseconds, or -1 for no (change to the) timeout.
571571 * So seconds*1000.
572 * @param ssl: set to true for TLS.
573 * @param host: hostname for host name verification of TLS (or NULL if no TLS).
572574 * @return tcp_out commpoint, or NULL.
573575 */
574576 struct comm_point* outnet_comm_point_for_tcp(struct outside_network* outnet,
575577 comm_point_callback_type* cb, void* cb_arg,
576578 struct sockaddr_storage* to_addr, socklen_t to_addrlen,
577 struct sldns_buffer* query, int timeout);
579 struct sldns_buffer* query, int timeout, int ssl, char* host);
578580
579581 /**
580582 * Create http commpoint suitable for communication to the destination.
145145 edns_known_options_delete(&env);
146146 }
147147
148 /** true if addr is a localhost address, 127.0.0.1 or ::1 (@port) */
149 static int
150 str_addr_is_localhost(const char* a)
151 {
152 if(strncmp(a, "127.", 4) == 0) return 1;
153 if(strncmp(a, "::1", 3) == 0) return 1;
154 return 0;
155 }
156
157 /** check do-not-query-localhost */
158 static void
159 donotquerylocalhostcheck(struct config_file* cfg)
160 {
161 if(cfg->donotquery_localhost) {
162 struct config_stub* p;
163 struct config_strlist* s;
164 for(p=cfg->forwards; p; p=p->next) {
165 for(s=p->addrs; s; s=s->next) {
166 if(str_addr_is_localhost(s->str)) {
167 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",
168 s->str, p->name);
169 }
170 }
171 }
172 for(p=cfg->stubs; p; p=p->next) {
173 for(s=p->addrs; s; s=s->next) {
174 if(str_addr_is_localhost(s->str)) {
175 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",
176 s->str, p->name);
177 }
178 }
179 }
180 }
181 }
182
148183 /** check localzones */
149184 static void
150185 localzonechecks(struct config_file* cfg)
573608 && strcmp(cfg->module_conf, "ipsecmod python validator iterator") != 0
574609 && strcmp(cfg->module_conf, "ipsecmod validator python iterator") != 0
575610 #endif
611 #ifdef USE_IPSET
612 && strcmp(cfg->module_conf, "validator ipset iterator") != 0
613 && strcmp(cfg->module_conf, "ipset iterator") != 0
614 #endif
576615 ) {
577616 fatal_exit("module conf '%s' is not known to work",
578617 cfg->module_conf);
601640 cfg->control_cert_file);
602641 }
603642
643 donotquerylocalhostcheck(cfg);
604644 localzonechecks(cfg);
605645 view_and_respipchecks(cfg);
606646 #ifdef CLIENT_SUBNET
498498 if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3)
499499 != SSL_OP_NO_SSLv3)
500500 ssl_err("could not set SSL_OP_NO_SSLv3");
501 #if defined(SSL_OP_NO_RENEGOTIATION)
502 /* disable client renegotiation */
503 if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) &
504 SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION)
505 ssl_err("could not set SSL_OP_NO_RENEGOTIATION");
506 #endif
501507 if(!SSL_CTX_use_certificate_chain_file(ctx,c_cert))
502508 ssl_path_err("Error setting up SSL_CTX client cert", c_cert);
503509 if (!SSL_CTX_use_PrivateKey_file(ctx,c_key,SSL_FILETYPE_PEM))
173173 #ifndef S_SPLINT_S
174174 t1->tv_sec += t2->tv_sec;
175175 t1->tv_usec += t2->tv_usec;
176 while(t1->tv_usec > 1000000) {
176 while(t1->tv_usec >= 1000000) {
177177 t1->tv_usec -= 1000000;
178178 t1->tv_sec++;
179179 }
9999 #ifndef S_SPLINT_S
100100 d->tv_sec += add->tv_sec;
101101 d->tv_usec += add->tv_usec;
102 if(d->tv_usec > 1000000) {
102 if(d->tv_usec >= 1000000) {
103103 d->tv_usec -= 1000000;
104104 d->tv_sec++;
105105 }
16281628 struct comm_point* outnet_comm_point_for_tcp(struct outside_network* outnet,
16291629 comm_point_callback_type* cb, void* cb_arg,
16301630 struct sockaddr_storage* to_addr, socklen_t to_addrlen,
1631 struct sldns_buffer* query, int timeout)
1631 struct sldns_buffer* query, int timeout, int ATTR_UNUSED(ssl),
1632 char* ATTR_UNUSED(host))
16321633 {
16331634 struct replay_runtime* runtime = (struct replay_runtime*)
16341635 outnet->base;
105105 cl = calloc(1, sizeof(*cl));
106106 if(!cl) return 0;
107107 cl->codeline = strdup(key);
108 if(!cl->codeline) return 0;
108 if(!cl->codeline) {
109 free(cl);
110 return 0;
111 }
109112 cl->func = strdup(func);
110 if(!cl->func) return 0;
113 if(!cl->func) {
114 free(cl->codeline);
115 free(cl);
116 return 0;
117 }
111118 cl->alloc = 0;
112119 cl->node.key = cl->codeline;
113120 (void)rbtree_insert(tree, &cl->node);
176176 #ifndef S_SPLINT_S
177177 t1->tv_sec += t2->tv_sec;
178178 t1->tv_usec += t2->tv_usec;
179 while(t1->tv_usec > 1000000) {
179 while(t1->tv_usec >= 1000000) {
180180 t1->tv_usec -= 1000000;
181181 t1->tv_sec++;
182182 }
0 ; config options
1 server:
2 target-fetch-policy: "0 0 0 0 0"
3
4 auth-zone:
5 name: "unbound-auth-test.nlnetlabs.nl."
6 ## zonefile (or none).
7 ## zonefile: "example.com.zone"
8 ## master by IP address or hostname
9 ## can list multiple masters, each on one line.
10 ## master:
11 ## url for http fetch
12 ## url:
13 ## queries from downstream clients get authoritative answers.
14 ## for-downstream: yes
15 for-downstream: yes
16 ## queries are used to fetch authoritative answers from this zone,
17 ## instead of unbound itself sending queries there.
18 ## for-upstream: yes
19 for-upstream: yes
20 ## on failures with for-upstream, fallback to sending queries to
21 ## the authority servers
22 ## fallback-enabled: no
23
24 ## this line generates zonefile: \n"/tmp/xxx.example.com"\n
25 zonefile:
26 TEMPFILE_NAME unbound-auth-test.nlnetlabs.nl
27 ## this is the inline file /tmp/xxx.unbound-auth-test.nlnetlabs.nl
28 ## the tempfiles are deleted when the testrun is over.
29 TEMPFILE_CONTENTS unbound-auth-test.nlnetlabs.nl
30 ;; Zone: unbound-auth-test.nlnetlabs.nl.
31 ;
32 unbound-auth-test.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1554201247 14400 3600 604800 3600
33 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==
34 ;
35 unbound-auth-test.nlnetlabs.nl. 3600 IN NS ns.nlnetlabs.nl.
36 unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NS 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Gm0UF77ljiInG4/HZ6Tkzx7z9N45WwwmbBt9KxeN3z1BkdBLiy10Du71ZBFLP71b+USs1rv5SJQ0hteZFbl8sg==
37 unbound-auth-test.nlnetlabs.nl. 3600 IN DNSKEY 256 3 13 S3Da9HqpFj0pEbI8WXOdkvN3vgZ6qxNSz4XyKkmWWAG28kq5T+/lWp36DUDvnMI9wJNuixzUHtgZ6oZoAaVrPg== ;{id = 15486 (zsk), size = 256b}
38 unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 1cLFaDb6kP8KnRJujW1ieHUdS5Tgdv59TCZ+FloCRJMJBwQAow6UKAIY7HHlTb8IHTajyUrjlxX/dN8S/5VwuA==
39 unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3PARAM 1 0 1 -
40 unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3PARAM 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. GWgtJArNpfJ4ifoinUBUVRTlkk0CMemdozhMKY13dk3EQMP0jb4g49PcTAgEP2dBUs9efttQVQQpmFPyTGfN1w==
41 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.}
42 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==
43 ;
44 ;; Empty nonterminal: b.unbound-auth-test.nlnetlabs.nl.
45 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.}
46 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==
47 ;
48 ;; Empty nonterminal: a.b.unbound-auth-test.nlnetlabs.nl.
49 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.}
50 toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Jr1oPPs+DGBVV13n4gG4AGVFsleItluLbtCIyQDcYZEA+e5JMkrLzfW3rXqXaUSUauR4iEu5FmTfs4GTsumdUw==
51 ;
52 *.a.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.a.b"
53 *.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==
54 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.}
55 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==
56 ;
57 ;; Empty nonterminal: b.b.unbound-auth-test.nlnetlabs.nl.
58 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.}
59 41pcah2j3fr8k99gj5pveh4igrjfc871.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. XlIjnuF313w0GXn6vymrAcsyuxZSaN6IShFjxQ5T2HUFePHBNvtRkL+TtMQZNlR8nTR3+MWcON0cOZIGjVCCjg==
60 ;
61 *.b.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.b.b"
62 *.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==
63 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.}
64 ft7dasbom0copm9e2ak9k151dj08kjfs.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 5QhLGohTRLQSGC8vstzDjqcwfrbOnLUG2OelSjvsZFy1smsWUxJBCQXQdx1+JX7xamZHlZESQtS+cELuZUqpvA==
65 ;
66 ;; Empty nonterminal: c.b.unbound-auth-test.nlnetlabs.nl.
67 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.}
68 dbs0aj50410urbvt3ghfr644n7h06gs5.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. hjk1foJWW68JK3O1Ktf0ZogoXVrMDw3mHVBBYTrpaBKX1gWR5icmJiOCYZWYx3z88PUnGkfH+kx4oDUjioqN+Q==
69 ;
70 *.c.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.c.b"
71 *.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==
72 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.}
73 k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 34BS1ajedCNdfXgUfxTyiAK1ichfFLshhJ3TnfplrUps0UsZaQLEG+EIlP4wTBtro2c6V8YCSmOuxuce4gYoDw==
74 ;
75 TEMPFILE_END
76
77 stub-zone:
78 name: "."
79 stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
80 CONFIG_END
81
82 SCENARIO_BEGIN Test authority zone with NSEC3 empty nonterminal
83 ; with exact match NSEC3 in existence (eg. not a CE-proof)
84
85 ; K.ROOT-SERVERS.NET.
86 RANGE_BEGIN 0 100
87 ADDRESS 193.0.14.129
88 ENTRY_BEGIN
89 MATCH opcode qtype qname
90 ADJUST copy_id
91 REPLY QR NOERROR
92 SECTION QUESTION
93 . IN NS
94 SECTION ANSWER
95 . IN NS K.ROOT-SERVERS.NET.
96 SECTION ADDITIONAL
97 K.ROOT-SERVERS.NET. IN A 193.0.14.129
98 ENTRY_END
99
100 ENTRY_BEGIN
101 MATCH opcode subdomain
102 ADJUST copy_id copy_query
103 REPLY QR NOERROR
104 SECTION QUESTION
105 com. IN NS
106 SECTION AUTHORITY
107 com. IN NS a.gtld-servers.net.
108 SECTION ADDITIONAL
109 a.gtld-servers.net. IN A 192.5.6.30
110 ENTRY_END
111 RANGE_END
112
113 ; a.gtld-servers.net.
114 RANGE_BEGIN 0 100
115 ADDRESS 192.5.6.30
116 ENTRY_BEGIN
117 MATCH opcode qtype qname
118 ADJUST copy_id
119 REPLY QR NOERROR
120 SECTION QUESTION
121 com. IN NS
122 SECTION ANSWER
123 com. IN NS a.gtld-servers.net.
124 SECTION ADDITIONAL
125 a.gtld-servers.net. IN A 192.5.6.30
126 ENTRY_END
127
128 ENTRY_BEGIN
129 MATCH opcode subdomain
130 ADJUST copy_id copy_query
131 REPLY QR NOERROR
132 SECTION QUESTION
133 example.com. IN NS
134 SECTION AUTHORITY
135 example.com. IN NS ns.example.com.
136 SECTION ADDITIONAL
137 ns.example.com. IN A 1.2.3.44
138 ENTRY_END
139 RANGE_END
140
141 ; ns.example.net.
142 RANGE_BEGIN 0 100
143 ADDRESS 1.2.3.44
144 ENTRY_BEGIN
145 MATCH opcode qtype qname
146 ADJUST copy_id
147 REPLY QR NOERROR
148 SECTION QUESTION
149 example.net. IN NS
150 SECTION ANSWER
151 example.net. IN NS ns.example.net.
152 SECTION ADDITIONAL
153 ns.example.net. IN A 1.2.3.44
154 ENTRY_END
155
156 ENTRY_BEGIN
157 MATCH opcode qtype qname
158 ADJUST copy_id
159 REPLY QR NOERROR
160 SECTION QUESTION
161 ns.example.net. IN A
162 SECTION ANSWER
163 ns.example.net. IN A 1.2.3.44
164 SECTION AUTHORITY
165 example.net. IN NS ns.example.net.
166 ENTRY_END
167
168 ENTRY_BEGIN
169 MATCH opcode qtype qname
170 ADJUST copy_id
171 REPLY QR NOERROR
172 SECTION QUESTION
173 ns.example.net. IN AAAA
174 SECTION AUTHORITY
175 example.net. IN NS ns.example.net.
176 SECTION ADDITIONAL
177 www.example.net. IN A 1.2.3.44
178 ENTRY_END
179
180 ENTRY_BEGIN
181 MATCH opcode qtype qname
182 ADJUST copy_id
183 REPLY QR NOERROR
184 SECTION QUESTION
185 example.com. IN NS
186 SECTION ANSWER
187 example.com. IN NS ns.example.net.
188 ENTRY_END
189
190 ENTRY_BEGIN
191 MATCH opcode qtype qname
192 ADJUST copy_id
193 REPLY QR NOERROR
194 SECTION QUESTION
195 www.example.com. IN A
196 SECTION ANSWER
197 www.example.com. IN A 10.20.30.40
198 ENTRY_END
199 RANGE_END
200
201 STEP 1 QUERY
202 ENTRY_BEGIN
203 REPLY RD DO
204 SECTION QUESTION
205 a.b.unbound-auth-test.nlnetlabs.nl. IN TXT
206 ENTRY_END
207
208 ; recursion happens here.
209 STEP 20 CHECK_ANSWER
210 ENTRY_BEGIN
211 MATCH all
212 REPLY QR AA RD RA DO NOERROR
213 SECTION QUESTION
214 a.b.unbound-auth-test.nlnetlabs.nl. IN TXT
215 SECTION ANSWER
216 SECTION AUTHORITY
217 unbound-auth-test.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1554201247 14400 3600 604800 3600
218 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==
219 toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - TVDHFML24JP7COTT1QIJJ9812QU9IBH3
220 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==
221 ENTRY_END
222
223 SCENARIO_END
199199 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=
200200 ENTRY_END
201201
202 ; Check that the reply for a wildcard nodata answer contains the NSEC3s.
203 ; qname denial NSEC3, closest encloser NSEC3, and type bitmap NSEC3.
204 STEP 30 QUERY
205 ENTRY_BEGIN
206 REPLY RD DO
207 SECTION QUESTION
208 something.a.b.test-ns-signed.dev.internet.nl. IN AAAA
209 ENTRY_END
210
211 STEP 40 CHECK_ANSWER
212 ENTRY_BEGIN
213 MATCH all
214 REPLY QR AA RD RA DO NOERROR
215 SECTION QUESTION
216 something.a.b.test-ns-signed.dev.internet.nl. IN AAAA
217 SECTION ANSWER
218 SECTION AUTHORITY
219 test-ns-signed.dev.internet.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 4 14400 3600 604800 3600
220 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}
221 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 93stp7o7i5n9gb83uu7vv6h8qltk14ig TXT RRSIG
222 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}
223 fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv
224 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}
225 i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - kl94uofq16t2vlq0bmampf6e4o9k5hbi A AAAA RRSIG
226 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}
227 ENTRY_END
228
202229 SCENARIO_END
194194 RANGE_END
195195
196196 ; lookups for notify hostnames.
197 STEP 1 TIME_PASSES ELAPSED 0
197 STEP 1 TIME_PASSES ELAPSE 0
198198
199199 ; now the query
200200 STEP 2 QUERY
0 ; This is a comment.
1 ; config options go here.
2 server:
3 ; the snoop is to elicit a referral and check the additional
4 ; is fine for that, not removed by minimal-responses.
5 access-control: 127.0.0.1 allow_snoop
6 minimal-responses: yes
7 forward-zone: name: "." forward-addr: 216.0.0.1
8 CONFIG_END
9
10 SCENARIO_BEGIN Test minimal-responses
11 RANGE_BEGIN 0 100
12 ENTRY_BEGIN
13 MATCH opcode qtype qname
14 ADJUST copy_id
15 REPLY QR RD RA NOERROR
16 SECTION QUESTION
17 www.example.com. IN A
18 SECTION ANSWER
19 www.example.com. IN A 10.20.30.40
20 SECTION AUTHORITY
21 example.com. IN NS ns.example.com.
22 SECTION ADDITIONAL
23 ns.example.com. IN A 10.20.30.50
24 txt.example.com. IN TXT "foo"
25 ENTRY_END
26
27 ENTRY_BEGIN
28 MATCH opcode qtype qname
29 ADJUST copy_id
30 REPLY QR RD RA NOERROR
31 SECTION QUESTION
32 a.example.com. IN A
33 SECTION ANSWER
34 SECTION AUTHORITY
35 example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5
36 example.com. IN NS ns.example.com.
37 SECTION ADDITIONAL
38 ns.example.com. IN A 10.20.30.50
39 txt.example.com. IN TXT "foo"
40 ENTRY_END
41
42 ENTRY_BEGIN
43 MATCH opcode qtype qname
44 ADJUST copy_id
45 REPLY QR RD RA NXDOMAIN
46 SECTION QUESTION
47 b.example.com. IN A
48 SECTION ANSWER
49 SECTION AUTHORITY
50 example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5
51 SECTION ADDITIONAL
52 ns.example.com. IN A 10.20.30.50
53 txt.example.com. IN TXT "foo"
54 ENTRY_END
55 RANGE_END
56
57 STEP 1 QUERY
58 ENTRY_BEGIN
59 REPLY RD
60 SECTION QUESTION
61 www.example.com. IN A
62 ENTRY_END
63 STEP 4 CHECK_ANSWER
64 ENTRY_BEGIN
65 MATCH opcode qname qtype all
66 REPLY QR RD RA
67 SECTION QUESTION
68 www.example.com. IN A
69 SECTION ANSWER
70 www.example.com. IN A 10.20.30.40
71 ENTRY_END
72
73 STEP 11 QUERY
74 ENTRY_BEGIN
75 REPLY RD
76 SECTION QUESTION
77 a.example.com. IN A
78 ENTRY_END
79 STEP 14 CHECK_ANSWER
80 ENTRY_BEGIN
81 MATCH opcode qname qtype all
82 REPLY QR RD RA
83 SECTION QUESTION
84 a.example.com. IN A
85 SECTION AUTHORITY
86 example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5
87 ENTRY_END
88
89 STEP 21 QUERY
90 ENTRY_BEGIN
91 REPLY RD
92 SECTION QUESTION
93 b.example.com. IN A
94 ENTRY_END
95 STEP 24 CHECK_ANSWER
96 ENTRY_BEGIN
97 MATCH opcode qname qtype all
98 REPLY QR RD RA NXDOMAIN
99 SECTION QUESTION
100 b.example.com. IN A
101 SECTION AUTHORITY
102 example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5
103 ENTRY_END
104
105 ; get a referral, the additional is not removed.
106 STEP 31 QUERY
107 ENTRY_BEGIN
108 REPLY
109 SECTION QUESTION
110 c.example.com. IN A
111 ENTRY_END
112 STEP 34 CHECK_ANSWER
113 ENTRY_BEGIN
114 MATCH opcode qname qtype all
115 REPLY QR RA NOERROR
116 SECTION QUESTION
117 c.example.com. IN A
118 SECTION AUTHORITY
119 example.com. IN NS ns.example.com.
120 SECTION ADDITIONAL
121 ns.example.com. IN A 10.20.30.50
122 ENTRY_END
123
124 SCENARIO_END
157157 ADJUST copy_id
158158 REPLY QR NOERROR
159159 SECTION QUESTION
160 ns.example.com. IN A
161 SECTION ANSWER
162 ns.example.com. IN A 1.2.3.55
163 ENTRY_END
164
165 ENTRY_BEGIN
166 MATCH opcode qtype qname
167 ADJUST copy_id
168 REPLY QR NOERROR
169 SECTION QUESTION
160170 ns.example.net. IN AAAA
161171 SECTION AUTHORITY
162172 example.net. IN NS ns.example.net.
109109 ADJUST copy_id
110110 REPLY QR RA NOERROR
111111 SECTION QUESTION
112 ns.example.com. IN A
113 SECTION ANSWER
114 ns.example.com. IN A 1.2.3.4
115 ENTRY_END
116
117 ENTRY_BEGIN
118 MATCH opcode qtype qname
119 ADJUST copy_id
120 REPLY QR RA NOERROR
121 SECTION QUESTION
122 lame.example.com. IN A
123 SECTION ANSWER
124 lame.example.com. IN A 1.2.3.5
125 ENTRY_END
126
127 ENTRY_BEGIN
128 MATCH opcode qtype qname
129 ADJUST copy_id
130 REPLY QR RA NOERROR
131 SECTION QUESTION
112132 www.example.com. IN A
113133 SECTION ANSWER
114134 www.example.com. IN A 10.20.30.40
88 kill_pid $FWD_PID
99 kill_pid $UNBOUND_PID
1010 cat unbound.log
11 cat fwd.log
375375 {
376376 void* res;
377377 if(size == 0) size = 1;
378 log_assert(size <= SIZE_MAX-16);
378379 res = malloc(size+16);
379380 if(!res) return NULL;
380381 unbound_mem_alloc += size;
397398 if(nmemb != 0 && INT_MAX/nmemb < size)
398399 return NULL; /* integer overflow check */
399400 s = (nmemb*size==0)?(size_t)1:nmemb*size;
401 log_assert(s <= SIZE_MAX-16);
400402 res = calloc(1, s+16);
401403 if(!res) return NULL;
402404 log_info("stat %p=calloc(%u, %u)", res+16, (unsigned)nmemb, (unsigned)size);
446448 /* nothing changes */
447449 return ptr;
448450 }
451 log_assert(size <= SIZE_MAX-16);
449452 res = malloc(size+16);
450453 if(!res) return NULL;
451454 unbound_mem_alloc += size;
520523 const char* func)
521524 {
522525 /* [prefix .. len .. actual data .. suffix] */
523 void* res = malloc(size+lite_pad*2+sizeof(size_t));
526 void* res;
527 log_assert(size <= SIZE_MAX-(lite_pad*2+sizeof(size_t)));
528 res = malloc(size+lite_pad*2+sizeof(size_t));
524529 if(!res) return NULL;
525530 memmove(res, lite_pre, lite_pad);
526531 memmove(res+lite_pad, &size, sizeof(size_t));
537542 if(nmemb != 0 && INT_MAX/nmemb < size)
538543 return NULL; /* integer overflow check */
539544 req = nmemb * size;
545 log_assert(req <= SIZE_MAX-(lite_pad*2+sizeof(size_t)));
540546 res = malloc(req+lite_pad*2+sizeof(size_t));
541547 if(!res) return NULL;
542548 memmove(res, lite_pre, lite_pad);
254254 cfg->neg_cache_size = 1 * 1024 * 1024;
255255 cfg->local_zones = NULL;
256256 cfg->local_zones_nodefault = NULL;
257 #ifdef USE_IPSET
258 cfg->local_zones_ipset = NULL;
259 #endif
257260 cfg->local_zones_disable_default = 0;
258261 cfg->local_data = NULL;
259262 cfg->local_zone_overrides = NULL;
326329 cfg->cachedb_backend = NULL;
327330 cfg->cachedb_secret = NULL;
328331 #endif
332 #ifdef USE_IPSET
333 cfg->ipset_name_v4 = NULL;
334 cfg->ipset_name_v6 = NULL;
335 #endif
329336 return cfg;
330337 error_exit:
331 config_delete(cfg);
338 config_delete(cfg);
332339 return NULL;
333340 }
334341
601608 else S_STR("control-key-file:", control_key_file)
602609 else S_STR("control-cert-file:", control_cert_file)
603610 else S_STR("module-config:", module_conf)
604 else S_STR("python-script:", python_script)
611 else S_STRLIST("python-script:", python_script)
605612 else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
606613 #ifdef CLIENT_SUBNET
607614 /* Can't set max subnet prefix here, since that value is used when
10531060 else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones)
10541061 else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
10551062 else O_DEC(opt, "max-udp-size", max_udp_size)
1056 else O_STR(opt, "python-script", python_script)
1063 else O_LST(opt, "python-script", python_script)
10571064 else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
10581065 else O_DEC(opt, "ip-ratelimit", ip_ratelimit)
10591066 else O_DEC(opt, "ratelimit", ratelimit)
10901097 #ifdef USE_CACHEDB
10911098 else O_STR(opt, "backend", cachedb_backend)
10921099 else O_STR(opt, "secret-seed", cachedb_secret)
1100 #endif
1101 #ifdef USE_IPSET
1102 else O_STR(opt, "name-v4", ipset_name_v4)
1103 else O_STR(opt, "name-v6", ipset_name_v6)
10931104 #endif
10941105 /* not here:
10951106 * outgoing-permit, outgoing-avoid - have list of ports
13091320 free(p->name);
13101321 config_deldblstrlist(p->local_zones);
13111322 config_delstrlist(p->local_zones_nodefault);
1323 #ifdef USE_IPSET
1324 config_delstrlist(p->local_zones_ipset);
1325 #endif
13121326 config_delstrlist(p->local_data);
13131327 free(p);
13141328 }
13831397 free(cfg->version);
13841398 free(cfg->module_conf);
13851399 free(cfg->outgoing_avail_ports);
1386 free(cfg->python_script);
13871400 config_delstrlist(cfg->caps_whitelist);
13881401 config_delstrlist(cfg->private_address);
13891402 config_delstrlist(cfg->private_domain);
13991412 free(cfg->val_nsec3_key_iterations);
14001413 config_deldblstrlist(cfg->local_zones);
14011414 config_delstrlist(cfg->local_zones_nodefault);
1415 #ifdef USE_IPSET
1416 config_delstrlist(cfg->local_zones_ipset);
1417 #endif
14021418 config_delstrlist(cfg->local_data);
14031419 config_deltrplstrlist(cfg->local_zone_overrides);
14041420 config_del_strarray(cfg->tagname, cfg->num_tags);
14191435 free(cfg->dnstap_version);
14201436 config_deldblstrlist(cfg->ratelimit_for_domain);
14211437 config_deldblstrlist(cfg->ratelimit_below_domain);
1438 config_delstrlist(cfg->python_script);
14221439 #ifdef USE_IPSECMOD
14231440 free(cfg->ipsecmod_hook);
14241441 config_delstrlist(cfg->ipsecmod_whitelist);
14261443 #ifdef USE_CACHEDB
14271444 free(cfg->cachedb_backend);
14281445 free(cfg->cachedb_secret);
1446 #endif
1447 #ifdef USE_IPSET
1448 free(cfg->ipset_name_v4);
1449 free(cfg->ipset_name_v6);
14291450 #endif
14301451 free(cfg);
14311452 }
16291650 return 1;
16301651 }
16311652
1653 int
1654 cfg_strlist_append_ex(struct config_strlist** head, char* item)
1655 {
1656 struct config_strlist *s;
1657 if(!item || !head)
1658 return 0;
1659 s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist));
1660 if(!s)
1661 return 0;
1662 s->str = item;
1663 s->next = NULL;
1664
1665 if (*head==NULL) {
1666 *head = s;
1667 } else {
1668 struct config_strlist *last = *head;
1669 while (last->next!=NULL) {
1670 last = last->next;
1671 }
1672 last->next = s;
1673 }
1674
1675 return 1;
1676 }
1677
16321678 int
16331679 cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
16341680 {
21062152 if(strcmp(type, "nodefault")==0) {
21072153 return cfg_strlist_insert(&cfg->local_zones_nodefault,
21082154 strdup(name));
2155 #ifdef USE_IPSET
2156 } else if(strcmp(type, "ipset")==0) {
2157 return cfg_strlist_insert(&cfg->local_zones_ipset,
2158 strdup(name));
2159 #endif
21092160 } else {
21102161 return cfg_str2list_insert(&cfg->local_zones, strdup(buf),
21112162 strdup(type));
23802431 if(cfg->control_ifs.first->str[0] == 0) return 1;
23812432 return (cfg->control_ifs.first->str[0] != '/');
23822433 }
2434
383383 struct config_str2list* local_zones;
384384 /** local zones nodefault list */
385385 struct config_strlist* local_zones_nodefault;
386 #ifdef USE_IPSET
387 /** local zones ipset list */
388 struct config_strlist* local_zones_ipset;
389 #endif
386390 /** do not add any default local zone */
387391 int local_zones_disable_default;
388392 /** local data RRs configured */
432436 char* control_cert_file;
433437
434438 /** Python script file */
435 char* python_script;
439 struct config_strlist* python_script;
436440
437441 /** Use systemd socket activation. */
438442 int use_systemd;
574578 int redis_timeout;
575579 #endif
576580 #endif
581
582 /* ipset module */
583 #ifdef USE_IPSET
584 char* ipset_name_v4;
585 char* ipset_name_v6;
586 #endif
577587 };
578588
579589 /** from cfg username, after daemonize setup performed */
646656 struct config_strlist* local_data;
647657 /** local zones nodefault list */
648658 struct config_strlist* local_zones_nodefault;
659 #ifdef USE_IPSET
660 /** local zones ipset list */
661 struct config_strlist* local_zones_ipset;
662 #endif
649663 /** Fallback to global local_zones when there is no match in the view
650664 * view specific tree. 1 for yes, 0 for no */
651665 int isfirst;
818832 * on fail the item is free()ed.
819833 */
820834 int cfg_strlist_append(struct config_strlist_head* list, char* item);
835
836 /**
837 * Searches the end of a string list and appends the given text.
838 * @param head: pointer to strlist head variable.
839 * @param item: new item. malloced by caller. if NULL the insertion fails.
840 * @return true on success.
841 */
842 int cfg_strlist_append_ex(struct config_strlist** head, char* item);
821843
822844 /**
823845 * Find string in strlist.
11801202 extern int fake_dsa, fake_sha1;
11811203
11821204 #endif /* UTIL_CONFIG_FILE_H */
1205
00 #include "config.h"
11 #include "util/configyyrename.h"
22
3 #line 3 "<stdout>"
3 #line 2 "<stdout>"
44
55 #define YY_INT_ALIGNED short int
66
99 #define FLEX_SCANNER
1010 #define YY_FLEX_MAJOR_VERSION 2
1111 #define YY_FLEX_MINOR_VERSION 6
12 #define YY_FLEX_SUBMINOR_VERSION 1
12 #define YY_FLEX_SUBMINOR_VERSION 4
1313 #if YY_FLEX_SUBMINOR_VERSION > 0
1414 #define FLEX_BETA
1515 #endif
8484 #define UINT32_MAX (4294967295U)
8585 #endif
8686
87 #ifndef SIZE_MAX
88 #define SIZE_MAX (~(size_t)0)
89 #endif
90
8791 #endif /* ! C99 */
8892
8993 #endif /* ! FLEXINT_H */
94
95 /* begin standard C++ headers. */
9096
9197 /* TODO: this is always defined, so inline it */
9298 #define yyconst const
100106 /* Returned upon end-of-file. */
101107 #define YY_NULL 0
102108
103 /* Promotes a possibly negative, possibly signed char to an unsigned
104 * integer for use as an array index. If the signed char is negative,
105 * we want to instead treat it as an 8-bit unsigned char, hence the
106 * double cast.
109 /* Promotes a possibly negative, possibly signed char to an
110 * integer in range [0..255] for use as an array index.
107111 */
108 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
112 #define YY_SC_TO_UI(c) ((YY_CHAR) (c))
109113
110114 /* Enter a start condition. This macro really ought to take a parameter,
111115 * but we do it the disgusting crufty way forced on us by the ()-less
112116 * definition of BEGIN.
113117 */
114118 #define BEGIN (yy_start) = 1 + 2 *
115
116119 /* Translate the current start state into a value that can be later handed
117120 * to BEGIN to return to the state. The YYSTATE alias is for lex
118121 * compatibility.
119122 */
120123 #define YY_START (((yy_start) - 1) / 2)
121124 #define YYSTATE YY_START
122
123125 /* Action number for EOF rule of a given start state. */
124126 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
125
126127 /* Special action meaning "start processing a new file". */
127 #define YY_NEW_FILE yyrestart(yyin )
128
128 #define YY_NEW_FILE yyrestart( yyin )
129129 #define YY_END_OF_BUFFER_CHAR 0
130130
131131 /* Size of default input buffer. */
162162 #define EOB_ACT_CONTINUE_SCAN 0
163163 #define EOB_ACT_END_OF_FILE 1
164164 #define EOB_ACT_LAST_MATCH 2
165
165
166166 #define YY_LESS_LINENO(n)
167167 #define YY_LINENO_REWIND_TO(ptr)
168168
171171 do \
172172 { \
173173 /* Undo effects of setting up yytext. */ \
174 yy_size_t yyless_macro_arg = (n); \
174 int yyless_macro_arg = (n); \
175175 YY_LESS_LINENO(yyless_macro_arg);\
176176 *yy_cp = (yy_hold_char); \
177177 YY_RESTORE_YY_MORE_OFFSET \
179179 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
180180 } \
181181 while ( 0 )
182
183182 #define unput(c) yyunput( c, (yytext_ptr) )
184183
185184 #ifndef YY_STRUCT_YY_BUFFER_STATE
222221
223222 int yy_bs_lineno; /**< The line count. */
224223 int yy_bs_column; /**< The column count. */
225
224
226225 /* Whether to try to fill the input buffer when we reach the
227226 * end of it.
228227 */
261260 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
262261 ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
263262 : NULL)
264
265263 /* Same as previous macro, but useful when we know that the buffer stack is not
266264 * NULL or when we need an lvalue. For internal use only.
267265 */
282280 */
283281 static int yy_did_buffer_switch_on_eof;
284282
285 void yyrestart (FILE *input_file );
286 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
287 YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
288 void yy_delete_buffer (YY_BUFFER_STATE b );
289 void yy_flush_buffer (YY_BUFFER_STATE b );
290 void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
291 void yypop_buffer_state (void );
292
293 static void yyensure_buffer_stack (void );
294 static void yy_load_buffer_state (void );
295 static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
296
297 #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
298
299 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
300 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
301 YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len );
302
303 void *yyalloc (yy_size_t );
304 void *yyrealloc (void *,yy_size_t );
305 void yyfree (void * );
283 void yyrestart ( FILE *input_file );
284 void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
285 YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
286 void yy_delete_buffer ( YY_BUFFER_STATE b );
287 void yy_flush_buffer ( YY_BUFFER_STATE b );
288 void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
289 void yypop_buffer_state ( void );
290
291 static void yyensure_buffer_stack ( void );
292 static void yy_load_buffer_state ( void );
293 static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
294 #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
295
296 YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
297 YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
298 YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
299
300 void *yyalloc ( yy_size_t );
301 void *yyrealloc ( void *, yy_size_t );
302 void yyfree ( void * );
306303
307304 #define yy_new_buffer yy_create_buffer
308
309305 #define yy_set_interactive(is_interactive) \
310306 { \
311307 if ( ! YY_CURRENT_BUFFER ){ \
312308 yyensure_buffer_stack (); \
313309 YY_CURRENT_BUFFER_LVALUE = \
314 yy_create_buffer(yyin,YY_BUF_SIZE ); \
310 yy_create_buffer( yyin, YY_BUF_SIZE ); \
315311 } \
316312 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
317313 }
318
319314 #define yy_set_bol(at_bol) \
320315 { \
321316 if ( ! YY_CURRENT_BUFFER ){\
322317 yyensure_buffer_stack (); \
323318 YY_CURRENT_BUFFER_LVALUE = \
324 yy_create_buffer(yyin,YY_BUF_SIZE ); \
319 yy_create_buffer( yyin, YY_BUF_SIZE ); \
325320 } \
326321 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
327322 }
328
329323 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
330324
331325 /* Begin user sect3 */
332
333 typedef unsigned char YY_CHAR;
326 typedef flex_uint8_t YY_CHAR;
334327
335328 FILE *yyin = NULL, *yyout = NULL;
336329
337330 typedef int yy_state_type;
338331
339332 extern int yylineno;
340
341333 int yylineno = 1;
342334
343335 extern char *yytext;
346338 #endif
347339 #define yytext_ptr yytext
348340
349 static yy_state_type yy_get_previous_state (void );
350 static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
351 static int yy_get_next_buffer (void );
352 static void yynoreturn yy_fatal_error (yyconst char* msg );
341 static yy_state_type yy_get_previous_state ( void );
342 static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
343 static int yy_get_next_buffer ( void );
344 static void yynoreturn yy_fatal_error ( const char* msg );
353345
354346 /* Done after the current pattern has been matched and before the
355347 * corresponding action - sets up yytext.
361353 (yy_hold_char) = *yy_cp; \
362354 *yy_cp = '\0'; \
363355 (yy_c_buf_p) = yy_cp;
364
365 #define YY_NUM_RULES 291
366 #define YY_END_OF_BUFFER 292
356 #define YY_NUM_RULES 294
357 #define YY_END_OF_BUFFER 295
367358 /* This struct is not used in this scanner,
368359 but its presence is necessary. */
369360 struct yy_trans_info
371362 flex_int32_t yy_verify;
372363 flex_int32_t yy_nxt;
373364 };
374 static yyconst flex_int16_t yy_accept[2905] =
365 static const flex_int16_t yy_accept[2913] =
375366 { 0,
376 1, 1, 273, 273, 277, 277, 281, 281, 285, 285,
377 1, 1, 292, 289, 1, 271, 271, 290, 2, 289,
378 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
379 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
380 289, 290, 273, 274, 274, 275, 290, 277, 278, 278,
381 279, 290, 284, 281, 282, 282, 283, 290, 285, 286,
382 286, 287, 290, 288, 272, 2, 276, 288, 290, 289,
383 0, 1, 2, 2, 2, 2, 289, 289, 289, 289,
384 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
385 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
386
387 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
388 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
389 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
390 289, 289, 289, 289, 289, 289, 289, 289, 289, 273,
391 0, 277, 0, 284, 0, 281, 285, 0, 288, 0,
392 2, 2, 288, 289, 289, 289, 289, 289, 289, 289,
393 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
394 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
395 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
396 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
397
398 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
399 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
400 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
401 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
402 288, 289, 289, 289, 289, 289, 289, 289, 289, 289,
403 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
404 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
405 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
406 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
407 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
408
409 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
410 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
411 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
412 289, 289, 289, 289, 289, 289, 289, 289, 289, 114,
413 289, 289, 289, 289, 289, 289, 289, 288, 289, 289,
414 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
415 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
416 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
417 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
418 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
419
420 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
421 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
422 96, 289, 289, 289, 289, 289, 289, 8, 289, 289,
423 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
424 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
425 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
426 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
427 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
428 289, 289, 119, 289, 288, 289, 289, 289, 289, 289,
429 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
430
431 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
432 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
433 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
434 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
435 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
436 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
437 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
438 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
439 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
440 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
441
442 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
443 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
444 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
445 289, 289, 289, 289, 289, 289, 289, 288, 289, 289,
446 289, 289, 289, 289, 289, 289, 289, 289, 289, 54,
447 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
448 289, 289, 289, 289, 214, 289, 14, 15, 289, 18,
449 17, 289, 289, 289, 289, 289, 289, 289, 289, 289,
450 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
451 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
452
453 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
454 289, 289, 289, 289, 113, 289, 289, 289, 289, 289,
455 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
456 289, 289, 289, 198, 289, 289, 289, 289, 289, 289,
457 289, 289, 289, 289, 289, 289, 289, 289, 3, 289,
458 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
459 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
460 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
461 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
462 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
463
464 289, 288, 289, 289, 289, 289, 289, 289, 289, 264,
465 289, 289, 263, 289, 289, 289, 289, 289, 289, 289,
466 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
467 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
468 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
469 289, 289, 289, 289, 289, 289, 289, 280, 289, 289,
470 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
471 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
472 289, 57, 289, 238, 289, 289, 289, 289, 289, 289,
473 289, 289, 289, 289, 289, 289, 289, 58, 289, 289,
474
475 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
476 289, 289, 289, 289, 289, 289, 289, 289, 187, 289,
477 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
478 289, 289, 289, 289, 289, 289, 289, 289, 289, 20,
479 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
480 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
481 289, 289, 289, 289, 289, 289, 289, 138, 289, 289,
482 280, 289, 289, 289, 289, 289, 289, 289, 289, 289,
483 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
484 289, 94, 289, 289, 289, 289, 289, 289, 289, 246,
485
486 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
487 289, 289, 159, 289, 289, 289, 289, 289, 289, 289,
488 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
489 289, 289, 289, 289, 289, 137, 289, 289, 289, 289,
490 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
491 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
492 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
493 289, 289, 289, 289, 289, 289, 93, 289, 289, 289,
494 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
495 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
496
497 31, 289, 289, 289, 289, 289, 289, 289, 289, 289,
498 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
499 32, 289, 289, 289, 289, 289, 289, 289, 289, 289,
500 289, 289, 289, 289, 55, 289, 289, 289, 289, 289,
501 289, 289, 289, 289, 112, 289, 289, 289, 289, 289,
502 111, 289, 289, 289, 289, 289, 289, 289, 289, 289,
503 289, 289, 289, 289, 289, 56, 289, 289, 289, 289,
504 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
505 289, 289, 289, 289, 289, 289, 289, 160, 289, 289,
506 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
507
508 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
509 289, 289, 289, 289, 289, 289, 45, 289, 289, 289,
510 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
511 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
512 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
513 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
514 289, 289, 289, 289, 289, 229, 289, 289, 289, 289,
515 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
516 49, 289, 50, 289, 289, 289, 289, 289, 97, 289,
517 98, 289, 289, 289, 289, 95, 289, 289, 289, 289,
518
519 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
520 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
521 289, 289, 289, 7, 289, 289, 289, 289, 289, 289,
522 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
523 289, 289, 207, 289, 289, 289, 289, 140, 289, 289,
524 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
525 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
526 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
527 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
528 289, 289, 289, 289, 289, 289, 289, 46, 289, 289,
529
530 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
531 289, 179, 289, 178, 289, 289, 289, 289, 289, 289,
532 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
533 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
534 16, 289, 289, 289, 289, 289, 289, 289, 289, 289,
535 289, 289, 289, 59, 289, 289, 289, 289, 289, 289,
536 289, 289, 186, 289, 289, 289, 289, 289, 289, 100,
537 289, 99, 289, 289, 289, 289, 289, 289, 289, 289,
538 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
539 289, 289, 170, 289, 289, 289, 289, 289, 289, 289,
540
541 289, 120, 289, 289, 289, 289, 289, 289, 289, 289,
542 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
543 289, 78, 289, 289, 289, 289, 289, 289, 289, 289,
544 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
545 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
546 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
547 289, 82, 289, 289, 289, 289, 289, 289, 289, 289,
548 289, 289, 289, 289, 289, 53, 289, 289, 289, 289,
549 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
550 289, 289, 289, 173, 174, 289, 289, 289, 240, 289,
551
552 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
553 289, 6, 289, 289, 289, 289, 289, 289, 289, 289,
554 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
555 289, 289, 244, 289, 289, 289, 265, 289, 289, 289,
556 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
557 289, 289, 289, 289, 289, 289, 289, 41, 289, 289,
558 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
559 43, 289, 289, 289, 289, 289, 289, 289, 289, 166,
560 289, 289, 289, 115, 289, 289, 289, 289, 289, 289,
561 289, 289, 289, 289, 191, 289, 167, 289, 289, 289,
562
563 204, 289, 289, 289, 289, 289, 289, 289, 289, 289,
564 289, 289, 289, 289, 289, 289, 289, 44, 289, 289,
565 289, 289, 289, 289, 289, 289, 289, 117, 105, 289,
566 106, 289, 289, 289, 104, 289, 289, 289, 289, 289,
567 289, 289, 289, 135, 289, 289, 289, 289, 289, 289,
568 289, 289, 289, 289, 289, 228, 289, 289, 289, 289,
569 289, 289, 289, 289, 168, 289, 289, 289, 289, 289,
570 171, 289, 177, 289, 289, 289, 289, 289, 203, 289,
571 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
572 289, 289, 289, 92, 289, 289, 289, 289, 289, 289,
573
574 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
575 289, 289, 289, 289, 289, 51, 289, 289, 289, 25,
576 289, 289, 289, 289, 289, 289, 289, 289, 289, 19,
577 289, 289, 289, 289, 289, 289, 26, 35, 289, 145,
578 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
579 289, 289, 289, 289, 289, 289, 289, 289, 289, 67,
580 69, 289, 289, 289, 289, 289, 289, 289, 289, 289,
581 289, 289, 289, 289, 248, 289, 289, 289, 215, 289,
582 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
583 289, 289, 289, 289, 289, 289, 289, 107, 289, 289,
584
585 289, 289, 289, 289, 289, 289, 289, 134, 289, 289,
586 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
587 289, 289, 289, 259, 289, 289, 289, 289, 289, 289,
588 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
589 289, 289, 139, 289, 289, 289, 289, 289, 289, 289,
590 289, 289, 289, 289, 289, 289, 197, 289, 289, 289,
591 289, 289, 289, 289, 289, 268, 289, 289, 289, 289,
592 289, 289, 289, 289, 289, 156, 289, 289, 289, 289,
593 289, 289, 289, 289, 101, 289, 289, 289, 289, 289,
594 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
595
596 289, 289, 289, 289, 151, 289, 161, 289, 289, 289,
597 289, 289, 123, 289, 289, 289, 289, 289, 88, 289,
598 289, 289, 289, 189, 289, 289, 289, 289, 289, 289,
599 205, 289, 289, 289, 289, 289, 289, 289, 289, 289,
600 289, 289, 289, 220, 289, 289, 289, 289, 289, 289,
601 289, 289, 289, 116, 289, 289, 289, 289, 289, 289,
602 289, 289, 289, 289, 155, 289, 289, 289, 289, 289,
603 70, 71, 289, 289, 289, 289, 289, 52, 289, 289,
604 289, 289, 289, 77, 162, 289, 180, 289, 208, 289,
605 289, 172, 241, 289, 289, 289, 289, 289, 63, 289,
606
607 164, 289, 289, 289, 289, 289, 9, 289, 289, 289,
608 91, 289, 289, 289, 289, 233, 289, 289, 289, 188,
609 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
610 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
611 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
612 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
613 289, 289, 289, 289, 289, 154, 289, 289, 289, 289,
614 289, 289, 289, 289, 289, 289, 141, 289, 247, 289,
615 289, 289, 289, 219, 289, 289, 289, 289, 289, 289,
616 289, 289, 199, 289, 289, 289, 289, 239, 289, 289,
617
618 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
619 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
620 289, 289, 262, 289, 163, 289, 289, 289, 289, 289,
621 289, 289, 62, 64, 289, 289, 289, 289, 289, 289,
622 289, 90, 289, 289, 289, 289, 231, 289, 289, 289,
623 243, 289, 289, 289, 289, 289, 289, 289, 193, 33,
624 27, 29, 289, 289, 289, 289, 289, 289, 289, 289,
625 289, 34, 289, 28, 30, 289, 289, 289, 289, 289,
626 289, 289, 289, 87, 289, 289, 289, 289, 289, 289,
627 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
628
629 289, 195, 192, 289, 289, 289, 289, 289, 289, 289,
630 289, 289, 289, 289, 289, 289, 289, 61, 289, 289,
631 118, 289, 108, 289, 289, 289, 289, 289, 289, 289,
632 289, 136, 13, 289, 289, 289, 289, 289, 289, 289,
633 289, 289, 257, 289, 260, 289, 289, 289, 289, 289,
634 289, 289, 289, 289, 289, 12, 289, 289, 21, 289,
635 289, 289, 237, 289, 289, 289, 245, 289, 65, 289,
636 201, 289, 289, 194, 289, 289, 60, 289, 289, 289,
637 289, 22, 289, 42, 289, 289, 289, 289, 289, 289,
638 289, 289, 289, 289, 289, 289, 150, 149, 289, 289,
639
640 289, 289, 289, 289, 289, 289, 289, 196, 190, 289,
641 206, 289, 289, 249, 289, 289, 289, 289, 289, 289,
642 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
643 289, 289, 289, 289, 289, 289, 289, 289, 72, 289,
644 289, 289, 232, 289, 289, 289, 289, 176, 289, 289,
645 289, 289, 200, 289, 289, 289, 289, 289, 289, 289,
646 289, 266, 267, 147, 66, 289, 289, 157, 289, 289,
647 102, 103, 289, 289, 289, 289, 142, 289, 144, 289,
648 181, 289, 289, 289, 289, 148, 289, 289, 209, 289,
649 289, 289, 289, 289, 289, 289, 125, 289, 289, 289,
650
651 289, 289, 289, 289, 289, 289, 289, 289, 216, 289,
652 289, 289, 23, 289, 242, 289, 289, 289, 289, 289,
653 289, 289, 289, 289, 289, 289, 182, 289, 289, 230,
654 289, 261, 289, 175, 289, 289, 289, 289, 47, 289,
655 289, 289, 289, 4, 289, 289, 124, 289, 289, 289,
656 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
657 289, 289, 289, 212, 36, 37, 289, 289, 289, 289,
658 289, 289, 289, 250, 289, 289, 289, 289, 289, 289,
659 218, 289, 289, 289, 185, 289, 289, 289, 289, 289,
660 289, 289, 289, 289, 75, 289, 48, 236, 289, 213,
661
662 289, 289, 289, 289, 11, 289, 289, 289, 289, 289,
663 289, 289, 183, 79, 289, 39, 289, 289, 289, 289,
664 289, 289, 289, 289, 153, 289, 289, 289, 289, 289,
665 127, 289, 289, 289, 289, 289, 289, 289, 289, 289,
666 217, 121, 289, 289, 109, 110, 289, 289, 289, 81,
667 85, 80, 289, 73, 289, 289, 289, 289, 289, 10,
668 289, 289, 289, 234, 289, 289, 270, 38, 289, 289,
669 289, 289, 289, 152, 289, 289, 289, 289, 289, 289,
670 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
671 289, 289, 86, 84, 289, 74, 258, 289, 289, 289,
672
673 289, 289, 289, 289, 169, 289, 289, 289, 184, 289,
674 289, 289, 289, 289, 289, 289, 289, 143, 68, 289,
675 289, 289, 289, 289, 251, 289, 289, 289, 289, 289,
676 289, 289, 122, 289, 83, 128, 129, 132, 133, 130,
677 131, 76, 289, 235, 289, 289, 146, 289, 289, 289,
678 289, 289, 211, 289, 289, 289, 289, 289, 289, 289,
679 289, 289, 289, 289, 289, 289, 289, 158, 40, 289,
680 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
681 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
682 89, 289, 210, 289, 227, 255, 289, 289, 289, 289,
683
684 289, 289, 289, 289, 289, 289, 5, 289, 202, 289,
685 289, 256, 289, 289, 289, 289, 289, 289, 289, 289,
686 24, 289, 289, 289, 289, 289, 289, 289, 289, 289,
687 289, 289, 289, 289, 126, 289, 289, 289, 289, 289,
688 289, 289, 289, 289, 165, 289, 289, 289, 289, 289,
689 289, 289, 289, 289, 252, 289, 289, 289, 289, 289,
690 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
691 289, 289, 269, 289, 289, 223, 289, 289, 289, 289,
692 289, 253, 289, 289, 289, 289, 289, 289, 254, 289,
693 289, 289, 221, 289, 224, 225, 289, 289, 289, 289,
694
695 289, 222, 226, 0
367 1, 1, 276, 276, 280, 280, 284, 284, 288, 288,
368 1, 1, 295, 292, 1, 274, 274, 293, 2, 292,
369 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
370 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
371 292, 293, 276, 277, 277, 278, 293, 280, 281, 281,
372 282, 293, 287, 284, 285, 285, 286, 293, 288, 289,
373 289, 290, 293, 291, 275, 2, 279, 291, 293, 292,
374 0, 1, 2, 2, 2, 2, 292, 292, 292, 292,
375 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
376 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
377
378 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
379 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
380 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
381 292, 292, 292, 292, 292, 292, 292, 292, 292, 276,
382 0, 280, 0, 287, 0, 284, 288, 0, 291, 0,
383 2, 2, 291, 292, 292, 292, 292, 292, 292, 292,
384 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
385 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
386 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
387 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
388
389 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
390 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
391 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
392 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
393 291, 292, 292, 292, 292, 292, 292, 292, 292, 292,
394 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
395 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
396 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
397 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
398 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
399
400 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
401 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
402 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
403 292, 292, 292, 292, 292, 292, 292, 292, 292, 114,
404 292, 292, 292, 292, 292, 292, 292, 291, 292, 292,
405 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
406 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
407 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
408 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
409 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
410
411 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
412 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
413 292, 292, 96, 292, 292, 292, 292, 292, 292, 8,
414 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
415 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
416 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
417 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
418 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
419 292, 292, 292, 292, 119, 292, 291, 292, 292, 292,
420 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
421
422 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
423 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
424 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
425 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
426 292, 292, 292, 292, 269, 292, 292, 292, 292, 292,
427 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
428 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
429 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
430 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
431 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
432
433 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
434 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
435 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
436 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
437 292, 291, 292, 292, 292, 292, 292, 292, 292, 292,
438 292, 292, 292, 54, 292, 292, 292, 292, 292, 292,
439 292, 292, 292, 292, 292, 292, 292, 292, 214, 292,
440 14, 15, 292, 18, 17, 292, 292, 292, 292, 292,
441 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
442 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
443
444 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
445 292, 292, 292, 292, 292, 292, 292, 292, 113, 292,
446 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
447 292, 292, 292, 292, 292, 292, 292, 292, 292, 198,
448 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
449 292, 292, 292, 292, 3, 292, 292, 292, 292, 292,
450 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
451 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
452 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
453 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
454
455 292, 292, 292, 292, 292, 292, 292, 291, 292, 292,
456 292, 292, 292, 292, 292, 264, 292, 292, 263, 292,
457 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
458 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
459 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
460 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
461 292, 292, 292, 283, 292, 292, 292, 292, 292, 292,
462 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
463 292, 292, 292, 292, 292, 292, 292, 57, 292, 238,
464 292, 292, 292, 292, 292, 292, 292, 292, 270, 271,
465
466 292, 292, 292, 292, 292, 58, 292, 292, 292, 292,
467 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
468 292, 292, 292, 292, 292, 292, 187, 292, 292, 292,
469 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
470 292, 292, 292, 292, 292, 292, 292, 20, 292, 292,
471 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
472 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
473 292, 292, 292, 292, 292, 138, 292, 292, 283, 292,
474 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
475 292, 292, 292, 292, 292, 292, 292, 292, 292, 94,
476
477 292, 292, 292, 292, 292, 292, 292, 246, 292, 292,
478 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
479 159, 292, 292, 292, 292, 292, 292, 292, 292, 292,
480 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
481 292, 292, 292, 137, 292, 292, 292, 292, 292, 292,
482 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
483 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
484 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
485 292, 292, 292, 292, 93, 292, 292, 292, 292, 292,
486 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
487
488 292, 292, 292, 292, 292, 292, 292, 292, 31, 292,
489 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
490 292, 292, 292, 292, 292, 292, 292, 292, 32, 292,
491 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
492 292, 292, 55, 292, 292, 292, 292, 292, 292, 292,
493 292, 292, 112, 292, 292, 292, 292, 292, 111, 292,
494 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
495 292, 292, 292, 56, 292, 292, 292, 292, 292, 292,
496 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
497 292, 292, 292, 292, 292, 160, 292, 292, 292, 292,
498
499 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
500 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
501 292, 292, 292, 292, 45, 292, 292, 292, 292, 292,
502 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
503 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
504 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
505 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
506 292, 292, 292, 229, 292, 292, 292, 292, 292, 292,
507 292, 292, 292, 292, 292, 292, 292, 292, 49, 292,
508 50, 292, 292, 292, 292, 292, 97, 292, 98, 292,
509
510 292, 292, 292, 95, 292, 292, 292, 292, 292, 292,
511 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
512 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
513 292, 7, 292, 292, 292, 292, 292, 292, 292, 292,
514 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
515 207, 292, 292, 292, 292, 140, 292, 292, 292, 292,
516 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
517 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
518 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
519 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
520
521 292, 292, 292, 292, 292, 46, 292, 292, 292, 292,
522 292, 292, 292, 292, 292, 292, 292, 292, 292, 179,
523 292, 178, 292, 292, 292, 292, 292, 292, 292, 292,
524 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
525 292, 292, 292, 292, 292, 292, 292, 292, 16, 292,
526 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
527 292, 59, 292, 292, 292, 292, 292, 292, 292, 292,
528 186, 292, 292, 292, 292, 292, 292, 100, 292, 99,
529 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
530 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
531
532 170, 292, 292, 292, 292, 292, 292, 292, 292, 120,
533 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
534 292, 292, 292, 292, 292, 292, 292, 292, 292, 78,
535 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
536 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
537 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
538 292, 292, 292, 292, 292, 292, 292, 292, 292, 82,
539 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
540 292, 292, 292, 53, 292, 292, 292, 292, 292, 292,
541 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
542
543 292, 173, 174, 292, 292, 292, 240, 292, 292, 292,
544 292, 292, 292, 292, 292, 292, 292, 292, 292, 6,
545 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
546 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
547 244, 292, 292, 292, 265, 292, 292, 292, 292, 292,
548 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
549 292, 292, 292, 292, 292, 41, 292, 292, 292, 292,
550 292, 292, 292, 292, 292, 292, 292, 292, 43, 292,
551 292, 292, 292, 292, 292, 292, 292, 166, 292, 292,
552 292, 115, 292, 292, 292, 292, 292, 292, 292, 292,
553
554 292, 292, 191, 292, 167, 292, 292, 292, 204, 292,
555 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
556 292, 292, 292, 292, 292, 44, 292, 292, 292, 292,
557 292, 292, 292, 292, 292, 117, 105, 292, 106, 292,
558 292, 292, 104, 292, 292, 292, 292, 292, 292, 292,
559 292, 135, 292, 292, 292, 292, 292, 292, 292, 292,
560 292, 292, 292, 228, 292, 292, 292, 292, 292, 292,
561 292, 292, 168, 292, 292, 292, 292, 292, 171, 292,
562 177, 292, 292, 292, 292, 292, 203, 292, 292, 292,
563 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
564
565 292, 92, 292, 292, 292, 292, 292, 292, 292, 292,
566 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
567 292, 292, 292, 51, 292, 292, 292, 25, 292, 292,
568 292, 292, 292, 292, 292, 292, 292, 19, 292, 292,
569 292, 292, 292, 292, 26, 35, 292, 145, 292, 292,
570 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
571 292, 292, 292, 292, 292, 292, 292, 67, 69, 292,
572 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
573 292, 292, 248, 292, 292, 292, 215, 292, 292, 292,
574 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
575
576 292, 292, 292, 292, 292, 107, 292, 292, 292, 292,
577 292, 292, 292, 292, 292, 134, 292, 292, 292, 292,
578 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
579 292, 259, 292, 292, 292, 292, 292, 292, 292, 292,
580 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
581 139, 292, 292, 292, 292, 292, 292, 292, 292, 292,
582 292, 292, 292, 292, 197, 292, 292, 292, 292, 292,
583 292, 292, 292, 268, 292, 292, 292, 292, 292, 292,
584 292, 292, 292, 156, 292, 292, 292, 292, 292, 292,
585 292, 292, 101, 292, 292, 292, 292, 292, 292, 292,
586
587 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
588 292, 292, 151, 292, 161, 292, 292, 292, 292, 292,
589 123, 292, 292, 292, 292, 292, 88, 292, 292, 292,
590 292, 189, 292, 292, 292, 292, 292, 292, 205, 292,
591 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
592 292, 220, 292, 292, 292, 292, 292, 292, 292, 292,
593 292, 116, 292, 292, 292, 292, 292, 292, 292, 292,
594 292, 292, 155, 292, 292, 292, 292, 292, 70, 71,
595 292, 292, 292, 292, 292, 52, 292, 292, 292, 292,
596 292, 77, 162, 292, 180, 292, 208, 292, 292, 172,
597
598 241, 292, 292, 292, 292, 292, 63, 292, 164, 292,
599 292, 292, 292, 292, 9, 292, 292, 292, 91, 292,
600 292, 292, 292, 233, 292, 292, 292, 188, 292, 292,
601 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
602 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
603 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
604 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
605 292, 292, 292, 154, 292, 292, 292, 292, 292, 292,
606 292, 292, 292, 292, 141, 292, 247, 292, 292, 292,
607 292, 219, 292, 292, 292, 292, 292, 292, 292, 292,
608
609 199, 292, 292, 292, 292, 239, 292, 292, 292, 292,
610 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
611 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
612 262, 292, 163, 292, 292, 292, 292, 292, 292, 292,
613 62, 64, 292, 292, 292, 292, 292, 292, 292, 90,
614 292, 292, 292, 292, 231, 292, 292, 292, 243, 292,
615 292, 292, 292, 292, 292, 292, 193, 33, 27, 29,
616 292, 292, 292, 292, 292, 292, 292, 292, 292, 34,
617 292, 28, 30, 292, 292, 292, 292, 292, 292, 292,
618 292, 87, 292, 292, 292, 292, 292, 292, 292, 292,
619
620 292, 292, 292, 292, 292, 292, 292, 292, 292, 195,
621 192, 292, 292, 292, 292, 292, 292, 292, 292, 292,
622 292, 292, 292, 292, 292, 61, 292, 292, 118, 292,
623 108, 292, 292, 292, 292, 292, 292, 292, 292, 136,
624 13, 292, 292, 292, 292, 292, 292, 292, 292, 292,
625 257, 292, 260, 292, 292, 292, 292, 292, 292, 292,
626 292, 292, 292, 12, 292, 292, 21, 292, 292, 292,
627 237, 292, 292, 292, 245, 292, 65, 292, 201, 292,
628 292, 194, 292, 292, 60, 292, 292, 292, 292, 22,
629 292, 42, 292, 292, 292, 292, 292, 292, 292, 292,
630
631 292, 292, 292, 292, 150, 149, 292, 292, 292, 292,
632 292, 292, 292, 292, 292, 196, 190, 292, 206, 292,
633 292, 249, 292, 292, 292, 292, 292, 292, 292, 292,
634 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
635 292, 292, 292, 292, 292, 292, 72, 292, 292, 292,
636 232, 292, 292, 292, 292, 176, 292, 292, 292, 292,
637 200, 292, 292, 292, 292, 292, 292, 292, 292, 266,
638 267, 147, 66, 292, 292, 157, 292, 292, 102, 103,
639 292, 292, 292, 292, 142, 292, 144, 292, 181, 292,
640 292, 292, 292, 148, 292, 292, 209, 292, 292, 292,
641
642 292, 292, 292, 292, 125, 292, 292, 292, 292, 292,
643 292, 292, 292, 292, 292, 292, 216, 292, 292, 292,
644 23, 292, 242, 292, 292, 292, 292, 292, 292, 292,
645 292, 292, 292, 292, 182, 292, 292, 230, 292, 261,
646 292, 175, 292, 292, 292, 292, 47, 292, 292, 292,
647 292, 4, 292, 292, 124, 292, 292, 292, 292, 292,
648 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
649 292, 212, 36, 37, 292, 292, 292, 292, 292, 292,
650 292, 250, 292, 292, 292, 292, 292, 292, 218, 292,
651 292, 292, 185, 292, 292, 292, 292, 292, 292, 292,
652
653 292, 292, 75, 292, 48, 236, 292, 213, 292, 292,
654 292, 292, 11, 292, 292, 292, 292, 292, 292, 292,
655 183, 79, 292, 39, 292, 292, 292, 292, 292, 292,
656 292, 292, 153, 292, 292, 292, 292, 292, 127, 292,
657 292, 292, 292, 292, 292, 292, 292, 292, 217, 121,
658 292, 292, 109, 110, 292, 292, 292, 81, 85, 80,
659 292, 73, 292, 292, 292, 292, 292, 10, 292, 292,
660 292, 234, 292, 292, 273, 38, 292, 292, 292, 292,
661 292, 152, 292, 292, 292, 292, 292, 292, 292, 292,
662 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
663
664 86, 84, 292, 74, 258, 292, 292, 292, 292, 292,
665 292, 292, 169, 292, 292, 292, 184, 292, 292, 292,
666 292, 292, 292, 292, 292, 143, 68, 292, 292, 292,
667 292, 292, 251, 292, 292, 292, 292, 292, 292, 292,
668 122, 292, 83, 128, 129, 132, 133, 130, 131, 76,
669 292, 235, 292, 292, 146, 292, 292, 292, 292, 292,
670 211, 292, 292, 292, 292, 292, 292, 292, 292, 292,
671 292, 292, 292, 292, 292, 158, 40, 292, 292, 292,
672 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
673 292, 292, 292, 292, 292, 292, 292, 292, 89, 292,
674
675 210, 292, 227, 255, 292, 292, 292, 292, 292, 292,
676 292, 292, 292, 292, 5, 292, 202, 292, 292, 256,
677 292, 292, 292, 292, 292, 292, 292, 292, 24, 292,
678 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
679 292, 292, 126, 292, 292, 292, 292, 292, 292, 292,
680 292, 292, 165, 292, 292, 292, 292, 292, 292, 292,
681 292, 292, 252, 292, 292, 292, 292, 292, 292, 292,
682 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
683 272, 292, 292, 223, 292, 292, 292, 292, 292, 253,
684 292, 292, 292, 292, 292, 292, 254, 292, 292, 292,
685
686 221, 292, 224, 225, 292, 292, 292, 292, 292, 222,
687 226, 0
696688 } ;
697689
698 static yyconst YY_CHAR yy_ec[256] =
690 static const YY_CHAR yy_ec[256] =
699691 { 0,
700692 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
701693 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
727719 1, 1, 1, 1, 1
728720 } ;
729721
730 static yyconst YY_CHAR yy_meta[67] =
722 static const YY_CHAR yy_meta[67] =
731723 { 0,
732724 1, 2, 3, 4, 5, 1, 6, 1, 1, 1,
733725 1, 1, 7, 1, 1, 1, 1, 1, 1, 1,
738730 1, 1, 1, 1, 1, 1
739731 } ;
740732
741 static yyconst flex_uint16_t yy_base[2919] =
733 static const flex_int16_t yy_base[2927] =
742734 { 0,
743735 0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
744 131, 137, 352, 307, 96, 8293, 8293, 8293, 109, 171,
736 131, 137, 352, 307, 96, 8310, 8310, 8310, 109, 171,
745737 85, 142, 215, 83, 117, 152, 207, 50, 110, 75,
746738 167, 231, 112, 275, 121, 259, 323, 243, 291, 320,
747 170, 368, 289, 8293, 8293, 8293, 104, 288, 8293, 8293,
748 8293, 147, 286, 289, 8293, 8293, 8293, 305, 239, 8293,
749 8293, 8293, 160, 210, 8293, 372, 8293, 177, 382, 201,
739 170, 368, 289, 8310, 8310, 8310, 104, 288, 8310, 8310,
740 8310, 147, 286, 289, 8310, 8310, 8310, 305, 239, 8310,
741 8310, 8310, 160, 210, 8310, 372, 8310, 177, 382, 201,
750742 386, 115, 0, 390, 0, 0, 160, 162, 199, 204,
751743 188, 169, 303, 222, 256, 248, 377, 369, 254, 226,
752744 313, 271, 365, 382, 296, 327, 396, 392, 381, 423,
771763 928, 173, 916, 936, 943, 932, 935, 949, 947, 945,
772764 958, 953, 962, 963, 971, 978, 968, 979, 973, 966,
773765 970, 980, 989, 990, 1000, 992, 1004, 994, 1013, 1005,
774 1017, 1021, 1009, 1019, 1026, 1057, 1015, 1007, 1040, 1058,
775
776 1051, 1030, 1044, 1084, 668, 1065, 1080, 1067, 1053, 1089,
777 784, 1094, 1090, 1093, 1105, 1103, 1104, 1092, 1107, 1078,
778 1109, 1128, 1143, 1135, 1136, 1148, 1130, 1163, 1137, 1158,
779 1150, 1149, 1186, 1234, 1145, 1167, 1176, 1181, 1173, 8293,
780 1198, 1183, 1283, 1204, 1193, 1232, 1206, 1215, 1221, 1239,
781 1229, 1222, 1203, 1225, 1249, 1231, 1284, 1220, 1267, 1273,
782 1274, 1300, 1276, 1265, 1303, 1301, 1296, 1292, 1280, 1309,
783 1322, 1312, 1342, 1323, 1329, 1330, 1333, 1335, 1348, 1349,
784 1350, 1339, 1344, 1365, 1366, 1369, 1378, 1379, 1362, 1386,
785 1382, 1402, 1380, 1393, 1408, 1411, 1403, 1418, 1409, 1426,
786
787 1420, 1436, 1407, 1417, 1425, 1430, 1427, 1450, 1460, 1429,
788 1445, 1444, 1454, 1467, 1471, 1464, 1472, 1474, 1459, 1482,
789 8293, 1484, 1487, 1496, 1486, 1497, 1493, 8293, 1498, 1499,
790 1501, 1447, 1512, 1532, 1524, 1520, 1522, 1541, 1535, 1537,
791 1557, 1536, 1549, 1531, 1544, 1562, 1564, 1558, 1567, 1563,
792 1551, 1561, 1606, 1583, 1571, 1600, 1589, 1601, 1611, 1631,
793 1628, 1618, 1621, 1642, 1661, 1630, 1657, 1645, 1634, 1664,
794 1649, 1670, 1662, 1663, 1667, 1680, 1678, 1681, 1676, 1687,
795 1695, 1690, 8293, 1702, 1712, 1592, 1703, 1704, 1701, 1707,
796 1709, 1714, 1731, 1727, 1723, 1736, 1718, 1754, 1741, 1760,
797
798 1745, 1758, 1742, 1749, 1765, 1763, 1780, 1759, 1778, 1781,
799 1774, 1777, 1784, 1782, 1795, 1803, 1779, 1807, 1808, 1793,
800 1806, 1815, 1819, 1802, 1809, 1827, 1820, 1834, 1826, 1843,
801 1829, 1837, 1845, 1846, 1854, 1841, 1868, 1856, 1858, 1873,
802 1853, 1864, 1887, 1883, 1885, 1894, 1897, 1896, 1903, 1891,
803 1886, 1909, 1914, 1906, 1912, 1917, 1913, 1918, 1926, 1919,
804 1936, 1955, 1945, 1949, 1953, 1957, 1940, 1946, 1966, 1963,
805 1970, 1971, 1972, 1986, 1975, 1978, 1987, 1976, 1973, 1985,
806 2003, 1993, 2014, 1998, 2012, 2027, 2015, 1999, 2026, 2013,
807 2029, 2018, 2030, 2034, 2041, 2042, 2051, 2043, 2040, 2050,
808
809 2056, 2046, 2053, 2054, 2067, 2089, 2074, 2073, 2076, 2077,
810 2086, 2079, 2091, 2084, 2101, 2106, 2094, 2104, 2110, 2111,
811 2115, 2113, 2131, 2123, 2124, 2132, 2137, 2150, 2141, 2151,
812 2157, 2142, 2154, 2140, 2159, 2165, 2167, 2175, 2182, 2186,
813 2177, 2184, 2181, 2183, 2178, 2195, 2218, 2198, 2194, 8293,
814 2209, 2220, 2211, 2210, 2217, 2207, 2215, 2221, 2235, 2242,
815 2234, 2226, 2230, 2275, 8293, 2248, 8293, 8293, 2247, 8293,
816 8293, 2256, 2262, 2255, 2269, 2239, 2285, 2261, 2283, 2279,
817 2288, 2290, 2335, 2298, 2295, 2300, 2304, 2330, 2305, 2331,
818 2322, 2319, 2340, 2343, 2349, 2346, 2357, 2360, 2358, 2367,
819
820 2362, 2364, 2380, 2389, 2378, 2381, 2391, 2379, 2384, 2399,
821 2405, 2398, 2401, 2434, 8293, 2408, 2417, 2419, 2422, 2436,
822 2430, 2431, 2435, 2439, 2423, 2440, 2444, 2446, 2442, 2450,
823 2448, 2457, 2460, 8293, 2467, 2471, 2477, 2472, 2485, 2484,
824 2483, 2466, 2494, 2475, 2486, 2487, 2501, 2516, 8293, 2518,
825 2526, 2508, 2528, 2509, 2511, 2514, 2515, 2524, 2539, 2536,
826 2545, 2547, 2543, 2458, 2541, 2555, 2554, 2564, 2563, 2566,
827 2574, 2583, 2568, 2575, 2577, 2590, 2589, 2581, 2593, 2594,
828 2592, 2599, 2604, 2602, 2623, 2628, 2629, 2608, 2625, 2638,
829 2611, 2641, 2639, 2644, 2630, 2640, 2649, 2631, 2646, 2659,
830
831 2656, 2662, 2664, 2678, 2680, 2663, 2667, 2688, 2665, 8293,
832 2671, 2683, 8293, 2676, 2692, 2738, 2698, 2717, 2703, 2700,
833 2704, 2724, 2719, 2723, 2730, 2725, 2758, 2746, 2763, 2756,
834 2764, 2770, 2766, 2715, 2768, 2772, 2706, 2777, 2784, 1156,
835 2793, 2781, 2773, 2783, 2830, 2800, 2808, 2802, 2806, 2814,
836 2819, 2826, 2833, 2835, 2840, 2821, 2848, 8293, 2828, 2861,
837 2851, 2853, 2842, 2863, 2865, 2873, 2876, 2871, 2877, 2880,
838 2875, 2891, 2879, 2901, 2890, 2893, 2904, 2916, 2902, 2907,
839 2906, 8293, 2903, 8293, 2922, 2918, 2920, 2927, 2926, 2933,
840 2945, 2951, 2952, 2946, 2958, 2963, 2949, 8293, 2953, 2992,
841
842 2966, 2961, 2981, 2954, 2980, 2986, 2985, 3007, 2983, 3009,
843 3002, 2990, 3001, 3010, 3004, 3013, 3016, 3012, 8293, 3008,
844 3028, 3040, 3054, 3023, 3043, 3035, 3055, 3056, 3041, 3042,
845 3045, 3060, 3051, 3071, 3079, 3070, 3072, 3084, 3081, 8293,
846 3076, 3073, 3100, 3091, 3101, 3098, 3103, 3087, 3106, 3110,
847 3104, 3099, 3123, 3119, 3124, 3127, 3114, 3140, 3143, 3128,
848 3134, 3137, 410, 3139, 3144, 3133, 3156, 8293, 3150, 3158,
849 61, 3159, 3163, 3170, 3183, 3180, 3168, 3167, 3164, 3197,
850 3193, 3199, 3206, 3190, 3205, 3207, 3203, 3194, 3195, 3208,
851 3217, 8293, 3227, 3228, 3225, 3222, 3235, 3231, 3260, 8293,
852
853 3255, 3248, 3250, 3245, 3258, 3263, 3262, 3268, 3272, 3288,
854 3283, 3277, 8293, 3297, 3300, 3302, 3289, 3306, 3308, 3304,
855 3299, 3310, 3303, 3316, 3327, 3337, 3333, 3329, 3326, 3332,
856 3340, 3336, 3338, 3341, 3353, 8293, 3371, 3343, 3368, 3359,
857 3377, 3369, 3392, 3364, 3380, 3384, 3389, 3420, 3386, 3391,
858 3407, 3404, 3388, 3413, 3417, 3409, 3418, 3434, 3421, 3436,
859 3448, 3438, 3441, 3445, 3447, 3452, 3462, 3455, 3482, 3488,
860 3466, 3483, 3507, 3490, 1584, 3481, 8293, 3493, 3480, 3484,
861 3503, 3501, 3477, 3508, 3517, 3524, 3518, 3519, 3528, 3535,
862 3542, 3539, 3532, 3543, 3546, 3551, 3505, 3552, 3557, 3570,
863
864 8293, 3574, 3576, 3563, 3566, 3585, 3569, 3586, 3590, 3587,
865 3579, 3584, 3595, 3601, 3604, 3603, 3610, 3611, 3622, 3608,
866 8293, 3630, 3614, 3631, 3634, 3617, 3635, 3638, 3644, 3641,
867 3637, 3648, 3652, 3656, 8293, 3679, 3681, 3672, 3683, 3671,
868 3665, 3674, 3687, 3668, 8293, 3670, 3666, 3696, 3699, 3694,
869 8293, 3707, 3704, 3693, 3710, 3705, 3711, 3708, 3721, 3678,
870 3715, 3720, 3728, 3716, 3745, 8293, 3734, 3759, 3740, 3735,
871 3749, 3751, 3748, 3755, 3783, 3767, 3760, 3784, 3777, 3778,
872 3776, 3772, 3775, 3801, 3794, 3802, 3797, 8293, 3799, 3796,
873 3809, 3818, 3826, 3820, 3816, 3836, 3825, 3823, 3834, 3840,
874
875 3841, 3832, 3844, 3853, 3861, 3852, 3863, 3857, 3859, 3867,
876 3868, 3876, 3882, 3896, 3891, 3897, 8293, 3902, 3900, 3901,
877 3887, 3893, 3906, 3908, 3911, 3916, 3914, 3925, 3899, 3926,
878 3951, 3955, 3927, 3943, 3937, 3939, 3950, 3957, 3941, 3949,
879 3961, 3966, 3968, 3954, 3970, 3948, 3984, 3996, 3982, 3983,
880 3985, 3986, 3989, 3971, 3993, 3998, 4011, 4006, 4015, 4016,
881 4020, 4009, 4025, 4026, 4038, 8293, 4032, 4031, 4035, 4047,
882 4027, 4045, 4051, 4064, 4065, 4059, 4058, 4060, 4075, 4081,
883 8293, 4070, 8293, 4072, 4084, 4097, 4099, 4085, 8293, 4100,
884 8293, 4101, 4109, 4094, 4102, 8293, 4111, 4103, 4108, 4112,
885
886 4107, 4121, 4124, 4128, 4132, 4151, 4129, 4138, 4136, 4156,
887 4140, 4144, 4159, 4160, 4158, 4168, 4170, 4165, 4155, 4183,
888 4192, 4179, 4195, 8293, 4176, 4187, 4193, 4189, 4197, 4188,
889 4217, 4221, 4210, 4219, 4220, 4223, 4222, 4231, 4236, 4248,
890 4232, 4256, 8293, 4240, 4261, 4243, 4258, 8293, 4260, 4247,
891 4272, 4275, 4263, 4266, 4267, 4283, 4279, 4285, 4281, 4311,
892 4300, 4291, 4306, 4316, 4295, 4322, 4310, 4326, 4318, 4333,
893 4335, 4327, 4323, 4337, 4338, 4346, 4348, 4340, 4344, 4363,
894 4345, 4347, 4364, 4376, 4372, 4361, 4360, 4365, 4367, 4375,
895 4371, 4373, 4406, 4391, 4394, 4395, 4396, 8293, 4405, 4399,
896
897 4410, 4423, 4412, 4416, 4401, 4402, 4422, 4433, 4428, 4444,
898 4418, 8293, 4449, 8293, 4438, 4465, 4440, 4459, 4454, 4452,
899 4471, 4472, 4460, 4458, 4479, 4483, 4475, 4462, 4498, 4489,
900 4500, 4504, 4487, 4503, 4497, 4505, 4501, 4506, 4510, 4511,
901 8293, 4516, 4524, 4521, 4536, 4545, 4550, 4556, 4549, 4546,
902 4538, 4548, 4567, 8293, 4560, 4565, 4562, 4529, 4575, 4573,
903 4595, 4590, 8293, 4577, 4585, 4600, 4593, 4605, 4615, 8293,
904 4601, 8293, 4584, 4594, 4610, 4607, 4612, 4631, 4624, 4632,
905 4629, 4620, 4636, 4635, 4633, 4637, 4630, 4641, 4666, 4645,
906 4658, 4651, 8293, 4670, 4659, 4680, 4678, 4682, 4685, 4686,
907
908 4665, 8293, 4676, 4689, 4681, 4692, 4701, 4698, 4707, 4716,
909 4712, 4714, 4710, 4713, 4735, 4730, 4718, 4732, 4744, 4743,
910 4749, 8293, 4747, 4745, 4737, 4755, 4756, 4759, 4763, 4757,
911 4753, 4740, 4760, 4784, 4782, 4780, 4779, 4793, 4788, 4776,
912 4785, 4799, 4806, 4787, 4803, 4801, 4809, 4811, 4818, 4830,
913 4839, 4841, 4823, 4842, 4845, 4826, 4827, 4851, 4856, 4857,
914 4852, 8293, 4867, 4853, 4868, 4840, 4861, 4876, 4880, 4882,
915 4887, 4866, 4869, 4890, 4877, 8293, 4910, 4888, 4909, 4907,
916 4904, 4895, 4903, 4905, 4914, 4920, 4916, 4922, 4924, 4926,
917 4939, 4954, 4936, 8293, 8293, 4955, 4932, 4949, 8293, 4951,
918
919 4943, 4966, 4965, 4947, 4962, 4972, 4971, 4970, 4985, 4974,
920 4978, 8293, 4983, 4995, 4982, 5001, 5016, 5019, 5003, 5012,
921 5009, 5004, 5006, 5014, 5029, 5020, 5022, 5033, 5042, 5030,
922 5039, 5051, 8293, 5043, 5045, 5047, 8293, 5049, 5069, 5052,
923 5074, 5040, 5076, 5077, 5084, 5065, 5085, 5075, 5082, 5096,
924 5097, 5102, 5091, 5100, 5108, 5118, 5121, 8293, 5113, 5120,
925 5110, 5128, 5134, 5156, 5143, 5144, 5115, 5145, 5142, 5158,
926 8293, 5147, 5160, 5153, 5148, 5167, 5157, 5171, 5166, 8293,
927 5170, 5169, 5184, 8293, 5187, 5175, 5195, 5199, 5181, 5209,
928 5204, 5202, 5206, 5211, 8293, 5208, 8293, 5215, 5229, 5222,
929
930 8293, 5231, 5232, 5219, 5221, 5245, 5225, 5248, 5255, 5240,
931 5252, 5246, 5247, 5258, 5271, 5268, 5251, 8293, 5282, 5259,
932 5275, 5289, 5287, 5285, 5278, 5295, 5288, 8293, 8293, 5306,
933 8293, 5304, 5292, 5302, 8293, 5298, 5316, 5325, 5315, 5335,
934 5337, 5338, 5333, 8293, 5340, 5324, 5345, 5349, 5327, 5343,
935 5357, 5365, 5352, 5366, 5380, 8293, 5363, 5375, 5353, 5370,
936 5371, 5392, 5384, 5374, 8293, 5398, 5404, 5382, 5407, 5410,
937 8293, 5411, 8293, 5405, 5415, 5416, 5427, 5421, 8293, 5433,
938 5422, 5441, 5419, 5447, 5451, 5454, 5456, 5439, 5438, 5469,
939 5465, 5460, 5463, 8293, 5472, 5462, 5475, 5481, 5478, 5474,
940
941 5500, 5499, 5505, 5498, 5510, 5501, 5511, 5515, 5508, 5536,
942 5520, 5502, 5524, 5537, 5540, 8293, 5541, 5549, 5550, 8293,
943 5543, 5538, 5551, 5530, 5544, 5566, 5570, 5547, 5575, 8293,
944 5579, 5580, 5574, 5593, 5595, 5587, 8293, 8293, 5597, 8293,
945 5599, 5581, 5613, 5611, 5585, 5606, 5609, 5625, 5635, 5620,
946 5637, 5640, 5631, 5651, 5653, 5654, 5647, 5649, 5643, 8293,
947 8293, 5659, 5668, 5664, 5660, 5674, 5670, 5661, 5658, 5684,
948 5691, 5693, 5698, 5704, 8293, 5701, 5687, 5708, 8293, 5688,
949 5717, 5700, 5709, 5721, 5711, 5725, 5733, 5738, 5728, 5732,
950 5719, 5735, 5739, 5749, 5744, 5755, 5761, 8293, 5759, 5756,
951
952 5760, 5766, 5753, 5771, 5770, 5780, 5774, 8293, 5781, 5778,
953 5800, 5786, 5797, 5801, 5808, 5810, 5812, 5805, 5802, 5824,
954 5822, 5821, 5828, 8293, 5835, 5823, 5826, 5832, 5845, 5854,
955 5837, 5857, 5847, 5863, 5851, 5864, 5868, 5875, 5862, 5870,
956 5871, 5861, 8293, 5872, 5882, 5867, 5887, 5883, 5894, 5902,
957 5907, 5911, 5897, 5903, 5898, 5915, 8293, 5899, 5910, 5921,
958 5927, 5920, 5922, 5924, 5925, 8293, 5953, 5935, 5949, 5943,
959 5938, 5958, 5952, 5967, 5951, 8293, 5960, 5968, 5970, 5965,
960 5976, 5980, 5988, 5978, 8293, 6003, 6005, 5991, 5982, 5992,
961 6016, 6007, 6009, 5996, 6011, 6019, 6017, 6018, 6020, 6033,
962
963 6036, 6030, 6057, 6051, 8293, 6038, 8293, 6052, 6063, 6067,
964 6065, 6048, 8293, 6056, 6060, 6059, 6081, 6062, 8293, 6088,
965 6086, 6089, 6093, 8293, 6103, 6107, 6090, 6097, 6080, 6113,
966 8293, 6111, 6115, 6116, 6124, 6127, 6125, 6130, 6134, 6137,
967 6132, 6128, 6152, 8293, 6154, 6157, 6150, 6151, 6159, 6143,
968 6161, 6166, 6162, 8293, 6164, 6174, 6177, 6184, 6178, 6179,
969 6195, 6208, 6201, 6192, 8293, 6196, 6209, 6213, 6221, 6215,
970 8293, 8293, 6204, 6219, 6227, 6206, 6237, 8293, 6239, 6254,
971 6240, 6250, 6242, 8293, 8293, 6253, 8293, 6244, 8293, 6241,
972 6245, 8293, 8293, 6258, 6247, 6270, 6271, 6260, 8293, 6283,
973
974 8293, 6289, 6285, 6277, 6269, 6287, 8293, 6280, 6282, 6295,
975 8293, 6296, 6306, 6290, 6300, 8293, 6311, 6309, 6307, 8293,
976 6323, 6329, 6326, 6332, 6338, 6316, 6327, 6319, 6342, 6344,
977 6345, 6348, 6349, 6350, 6343, 6355, 6372, 6377, 6367, 6368,
978 6363, 6365, 6384, 6366, 6386, 6391, 6387, 6389, 6390, 6403,
979 6376, 6404, 6399, 6400, 6402, 6412, 6406, 6414, 6422, 6413,
980 6424, 6442, 6436, 6429, 6439, 8293, 6440, 6428, 6430, 6449,
981 6446, 6463, 6469, 6475, 6478, 6481, 8293, 6483, 8293, 6485,
982 6470, 6480, 6473, 8293, 6479, 6471, 6495, 6494, 6511, 6503,
983 6506, 6526, 8293, 6504, 6507, 6516, 6528, 8293, 6530, 6532,
984
985 6518, 6519, 6533, 6534, 6544, 6547, 6542, 6551, 6548, 6568,
986 6508, 6554, 6564, 6561, 6577, 6563, 6566, 6589, 6571, 6584,
987 6585, 6596, 8293, 6598, 8293, 6592, 6599, 6593, 6588, 6597,
988 6607, 6603, 8293, 8293, 6611, 6630, 6636, 6624, 6619, 6640,
989 6638, 8293, 6626, 6643, 6648, 6646, 8293, 6635, 6651, 6650,
990 8293, 6649, 6652, 6653, 6656, 6676, 6673, 6684, 8293, 8293,
991 8293, 8293, 6686, 6667, 6690, 6678, 6679, 6688, 6693, 6695,
992 6694, 8293, 6696, 8293, 8293, 6699, 6705, 6711, 6722, 6720,
993 6714, 6721, 6726, 8293, 6724, 6735, 6737, 6729, 6743, 6745,
994 6751, 6741, 6732, 6747, 6768, 6770, 6778, 6761, 6777, 6780,
995
996 6781, 8293, 8293, 6771, 6783, 6786, 6791, 6785, 6788, 6792,
997 6795, 6796, 6805, 6806, 6816, 6820, 6815, 8293, 6826, 6832,
998 8293, 6817, 8293, 6833, 6834, 6818, 6837, 6840, 6846, 6856,
999 6859, 8293, 8293, 6851, 6852, 6861, 6869, 6862, 6865, 6860,
1000 6871, 6866, 8293, 6876, 8293, 6884, 6886, 6894, 6889, 6905,
1001 6910, 6911, 6909, 6907, 6917, 8293, 6916, 6906, 8293, 6920,
1002 6912, 6908, 8293, 6927, 6929, 6930, 8293, 6940, 8293, 6945,
1003 8293, 6938, 6964, 8293, 6941, 6947, 8293, 6960, 6962, 6963,
1004 6956, 8293, 6952, 8293, 6951, 6973, 6975, 6977, 6965, 6981,
1005 6982, 6983, 6972, 6987, 6984, 6990, 8293, 8293, 7020, 6989,
1006
1007 6998, 6999, 7000, 7010, 7004, 7026, 7023, 8293, 8293, 7027,
1008 8293, 7016, 7031, 8293, 7011, 7037, 7048, 7044, 7017, 7021,
1009 7028, 7052, 7051, 7064, 7082, 7054, 7060, 7079, 7083, 7085,
1010 7087, 7058, 7089, 7075, 7077, 7081, 7078, 7099, 8293, 7096,
1011 7115, 7102, 8293, 7124, 7121, 7127, 7126, 8293, 7132, 7125,
1012 7129, 7130, 8293, 7117, 7133, 7136, 7141, 7122, 7174, 7157,
1013 7162, 8293, 8293, 8293, 8293, 7172, 7155, 8293, 7166, 7164,
1014 8293, 8293, 7153, 7177, 7161, 7184, 8293, 7180, 8293, 7169,
1015 8293, 7182, 7189, 7205, 7201, 8293, 7207, 7214, 8293, 7195,
1016 7220, 7223, 7216, 7204, 7208, 7221, 8293, 7234, 7231, 7233,
1017
1018 7230, 7222, 7235, 7239, 7228, 7264, 7243, 7269, 8293, 7253,
1019 7259, 7255, 8293, 7276, 8293, 7265, 7266, 7273, 7280, 7271,
1020 7290, 7286, 7283, 7258, 7281, 7293, 8293, 7297, 7318, 8293,
1021 7298, 8293, 7322, 8293, 7307, 7310, 7311, 7324, 8293, 7328,
1022 7313, 7308, 7325, 8293, 7340, 7316, 8293, 7337, 7339, 7332,
1023 7347, 7343, 7362, 7364, 7356, 7352, 7353, 7357, 7366, 7367,
1024 7373, 7374, 7384, 8293, 8293, 8293, 7370, 7386, 7391, 7395,
1025 7393, 7403, 7389, 8293, 7405, 7412, 7400, 7420, 7408, 7421,
1026 8293, 7424, 7409, 7422, 8293, 7429, 7438, 7435, 7427, 7437,
1027 7443, 7445, 7450, 7452, 8293, 7459, 8293, 8293, 7444, 8293,
1028
1029 7439, 7451, 7453, 7480, 8293, 7460, 7462, 7465, 7474, 7482,
1030 7472, 7488, 8293, 8293, 7494, 8293, 7495, 7492, 7484, 7479,
1031 7501, 7496, 7505, 7509, 8293, 7506, 7507, 7511, 7517, 7524,
1032 8293, 7531, 7518, 7515, 7528, 7532, 7533, 7551, 7525, 7556,
1033 8293, 8293, 7543, 7552, 8293, 8293, 7547, 7567, 7576, 8293,
1034 8293, 8293, 7571, 8293, 7572, 7583, 7586, 7588, 7585, 8293,
1035 7591, 7575, 7587, 8293, 7592, 7600, 8293, 8293, 7579, 7598,
1036 7607, 7599, 7594, 8293, 7612, 7613, 7616, 7623, 7629, 7618,
1037 7632, 7639, 7646, 7647, 7627, 7638, 7634, 7657, 7658, 7649,
1038 7667, 7664, 8293, 8293, 7670, 8293, 8293, 7671, 7672, 7677,
1039
1040 7681, 7683, 7686, 7687, 8293, 7679, 7692, 7673, 8293, 7682,
1041 7702, 7690, 7694, 7691, 7710, 7697, 7716, 8293, 8293, 7704,
1042 7720, 7699, 7726, 7715, 8293, 7732, 7741, 7730, 7740, 7729,
1043 7728, 7742, 8293, 7736, 8293, 8293, 8293, 8293, 8293, 8293,
1044 8293, 8293, 7761, 8293, 7765, 7766, 8293, 7747, 7767, 7773,
1045 7759, 7768, 8293, 7757, 7772, 7784, 7785, 7775, 7795, 7788,
1046 7786, 7800, 7792, 7799, 7806, 7804, 7809, 8293, 8293, 7816,
1047 7814, 7820, 7828, 7838, 7839, 7842, 7844, 7827, 7833, 7847,
1048 7854, 7857, 7843, 7848, 7877, 7864, 7856, 7858, 7860, 7882,
1049 8293, 7873, 8293, 7874, 8293, 8293, 7893, 7895, 7886, 7880,
1050
1051 7902, 7903, 7897, 7901, 7889, 7910, 8293, 7898, 8293, 7913,
1052 7928, 8293, 7916, 7907, 7923, 7904, 7920, 7929, 7941, 7944,
1053 8293, 7934, 7938, 7951, 7953, 7967, 7963, 7961, 7965, 7969,
1054 7962, 7972, 7977, 7983, 8293, 7991, 7979, 7980, 7984, 7986,
1055 8007, 7993, 8002, 7999, 8293, 8016, 8019, 8018, 8014, 8017,
1056 8008, 8037, 8035, 8034, 8293, 8025, 8048, 8050, 8052, 8055,
1057 8054, 8061, 8065, 8066, 8067, 8071, 8070, 8078, 8080, 8082,
1058 8086, 8083, 8293, 8089, 8096, 8293, 8098, 8099, 8100, 8105,
1059 8107, 8293, 8090, 8114, 8117, 8120, 8122, 8130, 8293, 8138,
1060 8139, 8143, 8293, 8135, 8293, 8293, 8147, 8126, 8142, 8154,
1061
1062 8155, 8293, 8293, 8293, 8201, 8208, 8215, 8222, 8229, 83,
1063 8236, 8243, 8250, 8257, 8264, 8271, 8278, 8285
766 1022, 1021, 1009, 1017, 1026, 1061, 1036, 1016, 1019, 1063,
767
768 1055, 1049, 1044, 1072, 1059, 1064, 1092, 1083, 1087, 1094,
769 668, 1099, 1114, 1101, 1108, 1105, 1110, 1100, 1107, 1060,
770 1118, 1119, 1123, 1128, 1143, 1156, 1139, 1155, 1160, 1151,
771 1162, 1163, 1191, 1239, 1164, 1172, 1182, 1187, 1178, 8310,
772 1203, 1196, 1288, 1201, 1198, 1241, 1211, 1205, 1227, 1230,
773 1238, 1229, 1256, 1244, 1188, 1236, 1257, 1269, 1259, 1274,
774 1266, 1293, 1284, 1283, 1308, 1285, 1301, 1310, 1319, 1314,
775 1306, 1311, 1346, 1327, 1326, 1332, 1336, 1356, 1351, 1353,
776 1359, 1343, 1337, 1365, 1370, 1377, 1385, 1384, 1363, 1392,
777 1389, 1406, 1379, 1403, 1410, 1397, 1408, 1412, 1404, 784,
778
779 1421, 1425, 1441, 1427, 1439, 1430, 1429, 1444, 1446, 1458,
780 1435, 1455, 1461, 1468, 1457, 1477, 1471, 1462, 1486, 1472,
781 1495, 1470, 8310, 1499, 1482, 1497, 1502, 1494, 1489, 8310,
782 1513, 1515, 1498, 1520, 1525, 1522, 1532, 1529, 1540, 1541,
783 1526, 1542, 1559, 1530, 1558, 1552, 1555, 1561, 1575, 1566,
784 1578, 1568, 1570, 1585, 1625, 1567, 1594, 1592, 1572, 1597,
785 1611, 1623, 1607, 1630, 1621, 1620, 1668, 1627, 1658, 1642,
786 1647, 1674, 1652, 1679, 1666, 1664, 1669, 1663, 1683, 1692,
787 1689, 1693, 1672, 1707, 8310, 1706, 1714, 1694, 1710, 1702,
788 1704, 1716, 1711, 1709, 1724, 1733, 1745, 1740, 1600, 1757,
789
790 1744, 1763, 1749, 1732, 1750, 1751, 1760, 1767, 1780, 1752,
791 1785, 1773, 1781, 1782, 1774, 1798, 1802, 1808, 1783, 1803,
792 1800, 1792, 1807, 1814, 1813, 1797, 1809, 1833, 1819, 1835,
793 1825, 1844, 1830, 1826, 1846, 1834, 1855, 1838, 1853, 1841,
794 1864, 1874, 1870, 1872, 8310, 1877, 1880, 1885, 1891, 1893,
795 1897, 1903, 1876, 1905, 1902, 1913, 1916, 1911, 1910, 1919,
796 1914, 1918, 1930, 1935, 1954, 1936, 1948, 1966, 1949, 1962,
797 1941, 1956, 1961, 1968, 1976, 1969, 1975, 1982, 1971, 1974,
798 1985, 1990, 1989, 1983, 1986, 2003, 1995, 2011, 2010, 2025,
799 2026, 1999, 2032, 2009, 2037, 2022, 2029, 2042, 2038, 2043,
800
801 2046, 2041, 2035, 2061, 2062, 2064, 2056, 2066, 2065, 2084,
802 2067, 2073, 2079, 2091, 2092, 2068, 2099, 2102, 2103, 2097,
803 2087, 2126, 2113, 2112, 2123, 2118, 2128, 2119, 2137, 2125,
804 2144, 2136, 2150, 2161, 2162, 2152, 2165, 2160, 2159, 2171,
805 2163, 2176, 2179, 2187, 2190, 2186, 2196, 2198, 2189, 2174,
806 2218, 2205, 2206, 8310, 2201, 2226, 2209, 2230, 2223, 2199,
807 2222, 2246, 2236, 2241, 2225, 2233, 2239, 2282, 8310, 2250,
808 8310, 8310, 2252, 8310, 8310, 2263, 2249, 2262, 2276, 2283,
809 2292, 2270, 2288, 2286, 2275, 2303, 2333, 2311, 2296, 2314,
810 2321, 2309, 2326, 2322, 2341, 2339, 2349, 2353, 2344, 2360,
811
812 2355, 2363, 2364, 2366, 2368, 2367, 2381, 2395, 2384, 2387,
813 2397, 2382, 2391, 2385, 2409, 2412, 2405, 2438, 8310, 2414,
814 2425, 2426, 2424, 2436, 2432, 2431, 2434, 2440, 2443, 2439,
815 2427, 2444, 2441, 2454, 2450, 2451, 2471, 2462, 2461, 8310,
816 2474, 2475, 2477, 2476, 2487, 2481, 2478, 2466, 2493, 2500,
817 2497, 2513, 2472, 2523, 8310, 2527, 2525, 2509, 2528, 2510,
818 2512, 2518, 2519, 2524, 2539, 2540, 2543, 2546, 2550, 2567,
819 2570, 2560, 2557, 2566, 2575, 2568, 2573, 2583, 2565, 2577,
820 2591, 2590, 2594, 2593, 2597, 2599, 2606, 2608, 2628, 2607,
821 2633, 2634, 2626, 2612, 2620, 2639, 2624, 2635, 2642, 2647,
822
823 2638, 2651, 2653, 2648, 2652, 2655, 2665, 2676, 2666, 2680,
824 2685, 2667, 2678, 2682, 2669, 8310, 2675, 2690, 8310, 2700,
825 2697, 2745, 2705, 2715, 2695, 2701, 2711, 2726, 2725, 2735,
826 2738, 2737, 2744, 2741, 2765, 2758, 2774, 2775, 2770, 2777,
827 2772, 2781, 2763, 2764, 2794, 1268, 2800, 2783, 2790, 2785,
828 2836, 2806, 2814, 2808, 2812, 2825, 2833, 2832, 2820, 2839,
829 2849, 2843, 2853, 8310, 2859, 2845, 2854, 2861, 2883, 2882,
830 2871, 2870, 2884, 2875, 2897, 2885, 2877, 2898, 2888, 2899,
831 2902, 2904, 2910, 2918, 2901, 2915, 2938, 8310, 2920, 8310,
832 2925, 2921, 2931, 2930, 2933, 2940, 2948, 2956, 8310, 8310,
833
834 2957, 2960, 2963, 2943, 2959, 8310, 2958, 2981, 2991, 2970,
835 2979, 2978, 2976, 2989, 2996, 3009, 2987, 3014, 3010, 3003,
836 3012, 3021, 3015, 3022, 3023, 3020, 8310, 3029, 3030, 3037,
837 3038, 3045, 3051, 3034, 3063, 3067, 3053, 3050, 3054, 3072,
838 3070, 3081, 3087, 3079, 3080, 3086, 3093, 8310, 3082, 3095,
839 3094, 3098, 3092, 3096, 3107, 3099, 3101, 3121, 3118, 3119,
840 3123, 3114, 3141, 3143, 3125, 3134, 3147, 3130, 3144, 3142,
841 410, 3145, 3146, 3156, 3152, 8310, 3159, 3153, 61, 3170,
842 3172, 3176, 3186, 3180, 3165, 3173, 3199, 3200, 3196, 3204,
843 3203, 3195, 3198, 3205, 3202, 3215, 3214, 3223, 3224, 8310,
844
845 3219, 3226, 3227, 3232, 3246, 3229, 3250, 8310, 3256, 3253,
846 3261, 3248, 3260, 3274, 3272, 3273, 3267, 3293, 3291, 3284,
847 8310, 3297, 3299, 3301, 3287, 3305, 3308, 3300, 3323, 3325,
848 3296, 3329, 3328, 3337, 3333, 3327, 3326, 3330, 3352, 3334,
849 3339, 3342, 3354, 8310, 3356, 3364, 3369, 3360, 3379, 3370,
850 3393, 3373, 3381, 3385, 3400, 3424, 3386, 3394, 3407, 3413,
851 3412, 3409, 3415, 3426, 3430, 3422, 3425, 3453, 3458, 3428,
852 3449, 3456, 3451, 3464, 3452, 3450, 3477, 3487, 3479, 3482,
853 3506, 3500, 1065, 3478, 8310, 3498, 3492, 3485, 3508, 3523,
854 3509, 3505, 3525, 3529, 3521, 3527, 3533, 3543, 3550, 3545,
855
856 3552, 3544, 3549, 3558, 3564, 3554, 3575, 3576, 8310, 3577,
857 3582, 3573, 3584, 3583, 3579, 3594, 3596, 3590, 3591, 3604,
858 3608, 3607, 3610, 3609, 3611, 3606, 3626, 3614, 8310, 3641,
859 3630, 3642, 3643, 3638, 3653, 3655, 3649, 3656, 3663, 3672,
860 3657, 3666, 8310, 3603, 3667, 3684, 3668, 3677, 3673, 3685,
861 3697, 3682, 8310, 3683, 3691, 3671, 3706, 3701, 8310, 3720,
862 3711, 3712, 3709, 3708, 3699, 3726, 3723, 3715, 3719, 3746,
863 3745, 3733, 3750, 8310, 3738, 3766, 3744, 3754, 3760, 3761,
864 3759, 3776, 3792, 3777, 3771, 3781, 3765, 3788, 3786, 3783,
865 3789, 3806, 3796, 3812, 3802, 8310, 3816, 3810, 3813, 3819,
866
867 3821, 3824, 3826, 3840, 3838, 3835, 3846, 3841, 3844, 3847,
868 3858, 3857, 3865, 3861, 3867, 3874, 3880, 3872, 3877, 3884,
869 3885, 3887, 3899, 3907, 8310, 3896, 3905, 3901, 3897, 3903,
870 3904, 3906, 3920, 3918, 3931, 3924, 3927, 3930, 3955, 3964,
871 3933, 3942, 3944, 3948, 3952, 3957, 3954, 3958, 3956, 3925,
872 3972, 3960, 3997, 3976, 3987, 4001, 3979, 3983, 3988, 3989,
873 4003, 3991, 3994, 4010, 4016, 4014, 4023, 4022, 4028, 4018,
874 4024, 4029, 4046, 8310, 4035, 4049, 4041, 4047, 4057, 4066,
875 4067, 4073, 4074, 4060, 4068, 4062, 4075, 4081, 8310, 4079,
876 8310, 4089, 4091, 4084, 4088, 4094, 8310, 4103, 8310, 4116,
877
878 4117, 4104, 4106, 8310, 4123, 4105, 4118, 4128, 4121, 4113,
879 4132, 4130, 4144, 4137, 4142, 4152, 4141, 4169, 4159, 4154,
880 4171, 4162, 4174, 4178, 4163, 4179, 4186, 4164, 4184, 4193,
881 4187, 8310, 4195, 4198, 4203, 4204, 4207, 4201, 4228, 4213,
882 4222, 4227, 4232, 4231, 4237, 4244, 4233, 4266, 4250, 4267,
883 8310, 4258, 4252, 4256, 4274, 8310, 4271, 4254, 4281, 4285,
884 4273, 4277, 4291, 4289, 4309, 4284, 4297, 4322, 4293, 4316,
885 4318, 4324, 4305, 4312, 4331, 4333, 4334, 4345, 4336, 4342,
886 4337, 4341, 4351, 4355, 4363, 4358, 4376, 4374, 4381, 4357,
887 4378, 4387, 4384, 4373, 4368, 4372, 4382, 4390, 4386, 4399,
888
889 4425, 4401, 4402, 4410, 4406, 8310, 4430, 4414, 4431, 4437,
890 4417, 4426, 4418, 4428, 4441, 4420, 4449, 4462, 4454, 8310,
891 4460, 8310, 4457, 4463, 4472, 4478, 4467, 4468, 4485, 4491,
892 4483, 4473, 4498, 4499, 4489, 4495, 4505, 4501, 4512, 4518,
893 4490, 4529, 4513, 4523, 4516, 4528, 4530, 4525, 8310, 4540,
894 4526, 4548, 4543, 4553, 4561, 4557, 4569, 4550, 4570, 4556,
895 4587, 8310, 4576, 4584, 4580, 4594, 4605, 4597, 4609, 4600,
896 8310, 4592, 4596, 4614, 4603, 4617, 4618, 8310, 4607, 8310,
897 4619, 4621, 4623, 4642, 4622, 4639, 4641, 4643, 4654, 4633,
898 4661, 4646, 4644, 4645, 4658, 4667, 4666, 4665, 4673, 4656,
899
900 8310, 4676, 4678, 4691, 4692, 4694, 4701, 4700, 4685, 8310,
901 4696, 4710, 4712, 4703, 4713, 4717, 4720, 4722, 4733, 4736,
902 4724, 4726, 4725, 4738, 4737, 4735, 4754, 4763, 4757, 8310,
903 4762, 4760, 4776, 4774, 4768, 4777, 4775, 4765, 4761, 4773,
904 4781, 4792, 4789, 4801, 4794, 4806, 4805, 4795, 4802, 4820,
905 4828, 4810, 4816, 4818, 4819, 4846, 4836, 4829, 4849, 4851,
906 4833, 4859, 4863, 4844, 4847, 4867, 4866, 4874, 4869, 8310,
907 4886, 4871, 4887, 4858, 4881, 4888, 4899, 4892, 4890, 4885,
908 4898, 4911, 4901, 8310, 4939, 4906, 4922, 4926, 4908, 4927,
909 4931, 4932, 4934, 4941, 4916, 4943, 4936, 4935, 4945, 4960,
910
911 4954, 8310, 8310, 4965, 4950, 4967, 8310, 4969, 4959, 4990,
912 4988, 4968, 4982, 4984, 4995, 4972, 4992, 4986, 4994, 8310,
913 5001, 5005, 5003, 5007, 5013, 5031, 5027, 5024, 5026, 5016,
914 5019, 5030, 5041, 5034, 5021, 5048, 5050, 5039, 5040, 5060,
915 8310, 5058, 5054, 5057, 8310, 5069, 5066, 5077, 5081, 5089,
916 5091, 5087, 5092, 5085, 5097, 5075, 5096, 5093, 5107, 5114,
917 5116, 5121, 5129, 5134, 5128, 8310, 5130, 5133, 5125, 5136,
918 5137, 5147, 5151, 5155, 5141, 5160, 5157, 5156, 8310, 5158,
919 5171, 5161, 5152, 5185, 5159, 5194, 5178, 8310, 5179, 5174,
920 5198, 8310, 5192, 5206, 5199, 5209, 5196, 5215, 5205, 5208,
921
922 5218, 5219, 8310, 5222, 8310, 5226, 5225, 5230, 8310, 5232,
923 5235, 5234, 5214, 5241, 5243, 5255, 5263, 5245, 5258, 5251,
924 5254, 5272, 5274, 5285, 5270, 8310, 5290, 5268, 5280, 5282,
925 5295, 5281, 5294, 5300, 5301, 8310, 8310, 5298, 8310, 5316,
926 5307, 5308, 8310, 5311, 5322, 5335, 5320, 5332, 5338, 5339,
927 5344, 8310, 5341, 5334, 5355, 5349, 5351, 5357, 5361, 5362,
928 5360, 5365, 5371, 8310, 5375, 5379, 5370, 5376, 5385, 5406,
929 5388, 5396, 8310, 5403, 5412, 5392, 5419, 5404, 8310, 5417,
930 8310, 5407, 5418, 5428, 5445, 5423, 8310, 5446, 5435, 5429,
931 5431, 5454, 5458, 5456, 5463, 5452, 5444, 5471, 5472, 5465,
932
933 5474, 8310, 5475, 5466, 5489, 5495, 5485, 5483, 5511, 5508,
934 5512, 5509, 5515, 5506, 5519, 5523, 5522, 5544, 5530, 5507,
935 5548, 5545, 5549, 8310, 5550, 5555, 5558, 8310, 5551, 5546,
936 5559, 5565, 5552, 5576, 5580, 5584, 5585, 8310, 5587, 5589,
937 5582, 5603, 5605, 5595, 8310, 8310, 5614, 8310, 5607, 5592,
938 5609, 5621, 5618, 5629, 5617, 5637, 5649, 5631, 5648, 5654,
939 5640, 5662, 5542, 5579, 5658, 5647, 5651, 8310, 8310, 5663,
940 5668, 5675, 5672, 5686, 5679, 5674, 5673, 5688, 5696, 5703,
941 5699, 5710, 8310, 5705, 5702, 5708, 8310, 5700, 5711, 5717,
942 5718, 5723, 5724, 5730, 5707, 5737, 5732, 5743, 5727, 5744,
943
944 5739, 5757, 5750, 5754, 5761, 8310, 5768, 5759, 5760, 5769,
945 5767, 5774, 5777, 5770, 5781, 8310, 5785, 5807, 5808, 5797,
946 5799, 5801, 5815, 5817, 5821, 5818, 5809, 5829, 5838, 5831,
947 5827, 8310, 5834, 5826, 5835, 5840, 5851, 5863, 5845, 5868,
948 5853, 5869, 5860, 5865, 5876, 5881, 5872, 5874, 5879, 5885,
949 8310, 5884, 5888, 5890, 5894, 5887, 5901, 5897, 5917, 5919,
950 5903, 5908, 5910, 5925, 8310, 5920, 5915, 5924, 5937, 5926,
951 5935, 5928, 5942, 8310, 5948, 5951, 5952, 5947, 5946, 5962,
952 5949, 5975, 5960, 8310, 5970, 5978, 5986, 5967, 5987, 5974,
953 5988, 5985, 8310, 5998, 6001, 5981, 6021, 6005, 6022, 6019,
954
955 6029, 6010, 6018, 6033, 6030, 6032, 6038, 6043, 6028, 6045,
956 6048, 6040, 8310, 6053, 8310, 6055, 6049, 6059, 6080, 6063,
957 8310, 6068, 6071, 6078, 6077, 6079, 8310, 6082, 6086, 6103,
958 6105, 8310, 6093, 6119, 6106, 6110, 6101, 6130, 8310, 6125,
959 6132, 6129, 6141, 6143, 6127, 6128, 6138, 6136, 6133, 6145,
960 6149, 8310, 6163, 6168, 6173, 6174, 6169, 6160, 6177, 6182,
961 6170, 8310, 6184, 6165, 6166, 6188, 6195, 6194, 6198, 6193,
962 6211, 6200, 8310, 6207, 6219, 6233, 6227, 6229, 8310, 8310,
963 6222, 6238, 6234, 6206, 6241, 8310, 6243, 6245, 6240, 6248,
964 6244, 8310, 8310, 6255, 8310, 6258, 8310, 6259, 6261, 8310,
965
966 8310, 6278, 6263, 6279, 6282, 6281, 8310, 6291, 8310, 6297,
967 6292, 6280, 6272, 6290, 8310, 6306, 6300, 6301, 8310, 6304,
968 6302, 6308, 6315, 8310, 6332, 6317, 6316, 8310, 6337, 6341,
969 6340, 6342, 6344, 6335, 6352, 6328, 6351, 6350, 6354, 6358,
970 6360, 6368, 6364, 6365, 6383, 6385, 6376, 6377, 6374, 6390,
971 6396, 6381, 6398, 6399, 6391, 6393, 6407, 6410, 6404, 6423,
972 6415, 6416, 6419, 6421, 6412, 6420, 6431, 6429, 6445, 6451,
973 6455, 6439, 6446, 8310, 6442, 6448, 6462, 6465, 6463, 6469,
974 6471, 6483, 6484, 6492, 8310, 6498, 8310, 6501, 6482, 6494,
975 6487, 8310, 6488, 6489, 6491, 6497, 6514, 6510, 6504, 6535,
976
977 8310, 6538, 6520, 6534, 6539, 8310, 6537, 6545, 6533, 6540,
978 6541, 6544, 6556, 6561, 6560, 6562, 6553, 6555, 6557, 6572,
979 6577, 6575, 6586, 6573, 6578, 6602, 6595, 6596, 6608, 6609,
980 8310, 6611, 8310, 6605, 6612, 6615, 6606, 6623, 6620, 6624,
981 8310, 8310, 6625, 6641, 6646, 6633, 6638, 6649, 6655, 8310,
982 6647, 6657, 6663, 6651, 8310, 6660, 6665, 6666, 8310, 6667,
983 6669, 6676, 6677, 6692, 6686, 6681, 8310, 8310, 8310, 8310,
984 6699, 6683, 6701, 6689, 6696, 6706, 6708, 6711, 6703, 8310,
985 6714, 8310, 8310, 6716, 6726, 6720, 6732, 6738, 6730, 6741,
986 6743, 8310, 6725, 6755, 6757, 6739, 6756, 6763, 6764, 6767,
987
988 6761, 6768, 6774, 6770, 6784, 6765, 6788, 6796, 6800, 8310,
989 8310, 6790, 6804, 6802, 6814, 6811, 6813, 6815, 6817, 6819,
990 6799, 6807, 6820, 6831, 6825, 8310, 6834, 6830, 8310, 6838,
991 8310, 6848, 6849, 6841, 6843, 6858, 6860, 6861, 6863, 8310,
992 8310, 6852, 6864, 6855, 6873, 6876, 6883, 6878, 6897, 6885,
993 8310, 6887, 8310, 6886, 6903, 6908, 6890, 6914, 6921, 6923,
994 6925, 6918, 6922, 8310, 6919, 6924, 8310, 6932, 6929, 6942,
995 8310, 6938, 6940, 6944, 8310, 6947, 8310, 6958, 8310, 6941,
996 6977, 8310, 6953, 6959, 8310, 6962, 6975, 6976, 6965, 8310,
997 6963, 8310, 6971, 6982, 6992, 6983, 6980, 6994, 6984, 6996,
998
999 6985, 7001, 7013, 7011, 8310, 8310, 7030, 7004, 7009, 7012,
1000 7010, 7006, 7019, 7031, 7034, 8310, 8310, 7040, 8310, 7039,
1001 7046, 8310, 7023, 7050, 7051, 7055, 7052, 7061, 7071, 7063,
1002 7064, 7057, 7094, 7074, 7086, 7098, 7101, 7103, 7105, 7084,
1003 7109, 7095, 7090, 7110, 7118, 7120, 8310, 7107, 7121, 7117,
1004 8310, 7123, 7132, 7149, 7147, 8310, 7153, 7145, 7146, 7148,
1005 8310, 7142, 7156, 7159, 7161, 7162, 7196, 7158, 7183, 8310,
1006 8310, 8310, 8310, 7168, 7175, 8310, 7185, 7187, 8310, 8310,
1007 7176, 7191, 7186, 7210, 8310, 7195, 8310, 7188, 8310, 7203,
1008 7211, 7223, 7220, 8310, 7212, 7241, 8310, 7225, 7231, 7232,
1009
1010 7237, 7228, 7230, 7235, 8310, 7258, 7255, 7256, 7254, 7247,
1011 7250, 7273, 7252, 7268, 7259, 7266, 8310, 7272, 7274, 7276,
1012 8310, 7280, 8310, 7277, 7281, 7298, 7297, 7293, 7295, 7304,
1013 7305, 7300, 7313, 7311, 8310, 7315, 7319, 8310, 7307, 8310,
1014 7335, 8310, 7327, 7329, 7331, 7339, 8310, 7348, 7332, 7337,
1015 7342, 8310, 7349, 7351, 8310, 7358, 7346, 7367, 7380, 7362,
1016 7381, 7372, 7375, 7366, 7396, 7378, 7389, 7392, 7398, 7403,
1017 7413, 8310, 8310, 8310, 7405, 7395, 7408, 7404, 7418, 7423,
1018 7402, 8310, 7429, 7431, 7419, 7442, 7435, 7443, 8310, 7449,
1019 7432, 7445, 8310, 7455, 7457, 7459, 7446, 7461, 7467, 7468,
1020
1021 7471, 7469, 8310, 7475, 8310, 8310, 7458, 8310, 7470, 7478,
1022 7481, 7482, 8310, 7489, 7485, 7486, 7498, 7490, 7495, 7510,
1023 8310, 8310, 7511, 8310, 7518, 7516, 7509, 7525, 7512, 7520,
1024 7529, 7526, 8310, 7534, 7537, 7535, 7532, 7543, 8310, 7538,
1025 7541, 7552, 7555, 7551, 7547, 7568, 7556, 7561, 8310, 8310,
1026 7571, 7567, 8310, 8310, 7589, 7592, 7593, 8310, 8310, 8310,
1027 7600, 8310, 7601, 7607, 7610, 7612, 7599, 8310, 7614, 7604,
1028 7609, 8310, 7616, 7615, 8310, 8310, 7608, 7618, 7613, 7620,
1029 7631, 8310, 7635, 7642, 7637, 7632, 7654, 7640, 7652, 7659,
1030 7666, 7675, 7647, 7648, 7656, 7680, 7682, 7669, 7676, 7684,
1031
1032 8310, 8310, 7691, 8310, 8310, 7692, 7694, 7697, 7700, 7701,
1033 7705, 7706, 8310, 7699, 7710, 7693, 8310, 7698, 7722, 7714,
1034 7718, 7711, 7733, 7715, 7736, 8310, 8310, 7721, 7740, 7720,
1035 7750, 7735, 8310, 7749, 7759, 7741, 7760, 7745, 7756, 7768,
1036 8310, 7754, 8310, 8310, 8310, 8310, 8310, 8310, 8310, 8310,
1037 7772, 8310, 7771, 7785, 8310, 7766, 7779, 7786, 7777, 7780,
1038 8310, 7782, 7792, 7795, 7806, 7799, 7809, 7807, 7804, 7811,
1039 7812, 7815, 7830, 7822, 7824, 8310, 8310, 7832, 7833, 7825,
1040 7839, 7854, 7857, 7861, 7862, 7849, 7859, 7860, 7864, 7872,
1041 7867, 7878, 7870, 7884, 7880, 7874, 7883, 7882, 8310, 7888,
1042
1043 8310, 7890, 8310, 8310, 7912, 7913, 7910, 7897, 7926, 7927,
1044 7909, 7915, 7919, 7931, 8310, 7924, 8310, 7920, 7929, 8310,
1045 7932, 7943, 7930, 7950, 7951, 7947, 7957, 7967, 8310, 7955,
1046 7961, 7968, 7976, 7974, 7982, 7987, 7991, 7993, 7978, 7990,
1047 7999, 7986, 8310, 8002, 8003, 8005, 8008, 8009, 8007, 8018,
1048 8025, 8014, 8310, 8016, 8035, 8041, 8021, 8031, 8043, 8052,
1049 8054, 8048, 8310, 8058, 8062, 8068, 8065, 8071, 8064, 8075,
1050 8078, 8051, 8089, 8074, 8100, 8099, 8101, 8085, 8102, 8091,
1051 8310, 8113, 8096, 8310, 8112, 8114, 8103, 8124, 8131, 8310,
1052 8120, 8126, 8129, 8135, 8125, 8147, 8310, 8138, 8150, 8153,
1053
1054 8310, 8152, 8310, 8310, 8156, 8149, 8159, 8155, 8164, 8310,
1055 8310, 8310, 8218, 8225, 8232, 8239, 8246, 83, 8253, 8260,
1056 8267, 8274, 8281, 8288, 8295, 8302
10641057 } ;
10651058
1066 static yyconst flex_int16_t yy_def[2919] =
1059 static const flex_int16_t yy_def[2927] =
10671060 { 0,
1068 2904, 1, 2905, 2905, 2906, 2906, 2907, 2907, 2908, 2908,
1069 2909, 2909, 2904, 2910, 2904, 2904, 2904, 2904, 2911, 2910,
1070 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1071 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1072 2910, 2910, 2912, 2904, 2904, 2904, 2912, 2913, 2904, 2904,
1073 2904, 2913, 2914, 2904, 2904, 2904, 2904, 2914, 2915, 2904,
1074 2904, 2904, 2915, 2916, 2904, 2917, 2904, 2916, 2916, 2910,
1075 2910, 2904, 2918, 2911, 2918, 2911, 2910, 2910, 2910, 2910,
1076 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1077 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1078
1079 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1080 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1081 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1082 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2912,
1083 2912, 2913, 2913, 2914, 2914, 2904, 2915, 2915, 2916, 2916,
1084 2917, 2917, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1085 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1086 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1087 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1088 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1089
1090 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1091 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1092 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1093 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1094 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1095 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1096 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1097 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1098 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1099 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1100
1101 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1102 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1103 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1104 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1105 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910,
1106 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1107 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1108 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1109 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1110 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1111
1112 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1113 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1114 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1115 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1116 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1117 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1118 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1119 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1120 2910, 2910, 2904, 2910, 2916, 2910, 2910, 2910, 2910, 2910,
1121 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1122
1123 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1124 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1125 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1126 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1127 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1128 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1129 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1130 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1131 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1132 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1133
1134 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1135 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1136 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1137 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910,
1138 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1139 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1140 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904,
1141 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1142 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1143 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1144
1145 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1146 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1147 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1148 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1149 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1150 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1151 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1152 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1153 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1154 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1155
1156 2910, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1157 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1158 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1159 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1160 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1161 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1162 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1163 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1164 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1165 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1166
1167 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1168 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1169 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1170 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1171 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1172 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1173 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1174 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1175 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1176 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1177
1178 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1179 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1180 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1181 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1182 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1183 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1184 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1185 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1186 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1187 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1188
1189 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1190 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1191 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1192 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1193 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1194 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1195 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1196 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1197 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1198 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1199
1200 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1201 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1202 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1203 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1204 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1205 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1206 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1207 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1208 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1209 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1210
1211 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1212 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1213 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1214 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1215 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1216 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1217 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1218 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1219 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1220 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1221
1222 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1223 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1224 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1225 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1226 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1227 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1228 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1229 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1230 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1231 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1232
1233 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1234 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1235 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1236 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1237 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1238 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1239 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1240 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1241 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1242 2910, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904, 2910,
1243
1244 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1245 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1246 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1247 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1248 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1249 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1250 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1251 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1252 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1253 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910,
1254
1255 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1256 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1257 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
1258 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1259 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1260 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1261 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1262 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1263 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1264 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1265
1266 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1267 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904,
1268 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1269 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2904,
1270 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1271 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
1272 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1273 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910,
1274 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1275 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1276
1277 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1278 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1279 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1280 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1281 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1282 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1283 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1284 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1285 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1286 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1287
1288 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910,
1289 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1290 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1291 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1292 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1293 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1294 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1295 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1296 2910, 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2904, 2910,
1297 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1298
1299 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1300 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904,
1301 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1302 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1303 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1304 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1305 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1306 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
1307 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1308 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1309
1310 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1311 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1312 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1313 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1314 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1315 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904,
1316 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1317 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910,
1318 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1319 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1320
1321 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1322 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1323 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1324 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1325 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1326 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910,
1327 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
1328 2904, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910,
1329 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1330 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2910,
1331
1332 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
1333 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1334 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1335 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1336 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
1337 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1338 2910, 2904, 2904, 2904, 2904, 2910, 2910, 2904, 2910, 2910,
1339 2904, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
1340 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910,
1341 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
1342
1343 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1344 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1345 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904,
1346 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910,
1347 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910,
1348 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1349 2910, 2910, 2910, 2904, 2904, 2904, 2910, 2910, 2910, 2910,
1350 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1351 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1352 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904,
1353
1354 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1355 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910,
1356 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1357 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1358 2904, 2904, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904,
1359 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904,
1360 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2904, 2910, 2910,
1361 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
1362 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1363 2910, 2910, 2904, 2904, 2910, 2904, 2904, 2910, 2910, 2910,
1364
1365 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910,
1366 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
1367 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1368 2910, 2910, 2904, 2910, 2904, 2904, 2904, 2904, 2904, 2904,
1369 2904, 2904, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910,
1370 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1371 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
1372 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1373 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1374 2904, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910,
1375
1376 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
1377 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1378 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1379 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1380 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1381 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
1382 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
1383 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
1384 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
1385 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910,
1386
1387 2910, 2904, 2904, 0, 2904, 2904, 2904, 2904, 2904, 2904,
1388 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904
1061 2912, 1, 2913, 2913, 2914, 2914, 2915, 2915, 2916, 2916,
1062 2917, 2917, 2912, 2918, 2912, 2912, 2912, 2912, 2919, 2918,
1063 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1064 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1065 2918, 2918, 2920, 2912, 2912, 2912, 2920, 2921, 2912, 2912,
1066 2912, 2921, 2922, 2912, 2912, 2912, 2912, 2922, 2923, 2912,
1067 2912, 2912, 2923, 2924, 2912, 2925, 2912, 2924, 2924, 2918,
1068 2918, 2912, 2926, 2919, 2926, 2919, 2918, 2918, 2918, 2918,
1069 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1070 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1071
1072 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1073 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1074 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1075 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2920,
1076 2920, 2921, 2921, 2922, 2922, 2912, 2923, 2923, 2924, 2924,
1077 2925, 2925, 2924, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1078 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1079 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1080 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1081 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1082
1083 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1084 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1085 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1086 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1087 2924, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1088 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1089 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1090 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1091 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1092 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1093
1094 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1095 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1096 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1097 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1098 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2924, 2918, 2918,
1099 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1100 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1101 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1102 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1103 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1104
1105 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1106 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1107 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1108 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1109 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1110 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1111 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1112 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1113 2918, 2918, 2918, 2918, 2912, 2918, 2924, 2918, 2918, 2918,
1114 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1115
1116 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1117 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1118 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1119 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1120 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1121 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1122 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1123 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1124 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1125 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1126
1127 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1128 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1129 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1130 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1131 2918, 2924, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1132 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1133 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1134 2912, 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918,
1135 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1136 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1137
1138 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1139 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1140 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1141 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1142 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1143 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1144 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1145 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1146 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1147 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1148
1149 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2924, 2918, 2918,
1150 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918,
1151 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1152 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1153 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1154 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1155 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1156 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1157 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912,
1158 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912,
1159
1160 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1161 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1162 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1163 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1164 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918,
1165 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1166 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1167 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2924, 2918,
1168 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1169 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1170
1171 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918,
1172 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1173 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1174 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1175 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1176 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1177 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1178 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1179 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1180 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1181
1182 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1183 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1184 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1185 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1186 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1187 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1188 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1189 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1190 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1191 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1192
1193 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1194 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1195 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1196 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1197 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1198 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1199 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1200 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1201 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1202 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918,
1203
1204 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1205 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1206 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1207 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1208 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1209 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1210 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1211 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1212 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1213 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1214
1215 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1216 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1217 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1218 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1219 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1220 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1221 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1222 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912,
1223 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1224 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1225
1226 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1227 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1228 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1229 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1230 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1231 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1232 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1233 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1234 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1235 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1236
1237 2918, 2912, 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1238 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1239 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1240 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1241 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1242 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1243 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1244 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1245 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918,
1246 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1247
1248 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2918, 2912, 2918,
1249 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1250 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1251 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2912, 2918,
1252 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1253 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1254 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1255 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1256 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1257 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1258
1259 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1260 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1261 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918,
1262 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918,
1263 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2912, 2918, 2918,
1264 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1265 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918,
1266 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1267 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1268 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1269
1270 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1271 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1272 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1273 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1274 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1275 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1276 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1277 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1278 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1279 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1280
1281 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1282 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1283 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1284 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1285 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1286 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1287 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1288 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2912,
1289 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1290 2918, 2912, 2912, 2918, 2912, 2918, 2912, 2918, 2918, 2912,
1291
1292 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918,
1293 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918,
1294 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918,
1295 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1296 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1297 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1298 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1299 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1300 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2918,
1301 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1302
1303 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1304 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1305 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1306 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1307 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1308 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918,
1309 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2912, 2912,
1310 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1311 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1312 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1313
1314 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1315 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1316 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918,
1317 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1318 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1319 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1320 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918,
1321 2912, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2912, 2918,
1322 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2912,
1323 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1324
1325 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2918, 2918, 2918,
1326 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2912, 2918,
1327 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1328 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1329 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1330 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918,
1331 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912,
1332 2912, 2912, 2912, 2918, 2918, 2912, 2918, 2918, 2912, 2912,
1333 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2912, 2918,
1334 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918,
1335
1336 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1337 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1338 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1339 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2912, 2918, 2912,
1340 2918, 2912, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1341 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1342 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1343 2918, 2912, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1344 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1345 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1346
1347 2918, 2918, 2912, 2918, 2912, 2912, 2918, 2912, 2918, 2918,
1348 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1349 2912, 2912, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1350 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1351 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2912,
1352 2918, 2918, 2912, 2912, 2918, 2918, 2918, 2912, 2912, 2912,
1353 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918,
1354 2918, 2912, 2918, 2918, 2912, 2912, 2918, 2918, 2918, 2918,
1355 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1356 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1357
1358 2912, 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918,
1359 2918, 2918, 2912, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1360 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2918, 2918,
1361 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1362 2912, 2918, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
1363 2918, 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918,
1364 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1365 2918, 2918, 2918, 2918, 2918, 2912, 2912, 2918, 2918, 2918,
1366 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1367 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1368
1369 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2918,
1370 2918, 2918, 2918, 2918, 2912, 2918, 2912, 2918, 2918, 2912,
1371 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918,
1372 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1373 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1374 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1375 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1376 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
1377 2912, 2918, 2918, 2912, 2918, 2918, 2918, 2918, 2918, 2912,
1378 2918, 2918, 2918, 2918, 2918, 2918, 2912, 2918, 2918, 2918,
1379
1380 2912, 2918, 2912, 2912, 2918, 2918, 2918, 2918, 2918, 2912,
1381 2912, 0, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
1382 2912, 2912, 2912, 2912, 2912, 2912
13891383 } ;
13901384
1391 static yyconst flex_uint16_t yy_nxt[8360] =
1385 static const flex_int16_t yy_nxt[8377] =
13921386 { 0,
13931387 14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
13941388 14, 14, 18, 20, 21, 22, 23, 24, 25, 14,
14281422 172, 134, 135, 114, 174, 145, 179, 143, 141, 115,
14291423 71, 161, 116, 136, 132, 71, 200, 137, 173, 117,
14301424 123, 138, 71, 124, 133, 160, 71, 261, 134, 135,
1431 125, 2904, 71, 179, 126, 127, 71, 180, 161, 71,
1432 136, 2904, 71, 200, 137, 173, 71, 123, 138, 70,
1425 125, 2912, 71, 179, 126, 127, 71, 180, 161, 71,
1426 136, 2912, 71, 200, 137, 173, 71, 123, 138, 70,
14331427 124, 70, 70, 75, 70, 75, 75, 125, 75, 71,
14341428 70, 126, 127, 149, 180, 149, 149, 70, 149, 70,
14351429 70, 75, 70, 75, 75, 165, 75, 175, 70, 168,
14361430
14371431 169, 166, 75, 167, 71, 176, 177, 183, 71, 182,
1438 2904, 152, 181, 178, 294, 2904, 71, 190, 188, 1139,
1439 71, 71, 165, 2904, 175, 71, 168, 169, 166, 76,
1432 2912, 152, 181, 178, 294, 2912, 71, 190, 188, 1147,
1433 71, 71, 165, 2912, 175, 71, 168, 169, 166, 76,
14401434 167, 71, 176, 177, 183, 71, 182, 191, 184, 181,
14411435 178, 185, 189, 193, 190, 198, 71, 194, 196, 71,
14421436 71, 202, 201, 197, 186, 187, 71, 192, 71, 71,
1443 199, 2904, 71, 195, 191, 184, 71, 71, 185, 189,
1437 199, 2912, 71, 195, 191, 184, 71, 71, 185, 189,
14441438 193, 71, 198, 206, 194, 196, 211, 203, 202, 201,
14451439 197, 186, 187, 71, 192, 204, 205, 199, 207, 208,
14461440 195, 71, 71, 209, 210, 71, 71, 71, 212, 213,
14471441
1448 206, 71, 71, 211, 203, 71, 216, 2904, 214, 217,
1442 206, 71, 71, 211, 203, 71, 216, 2912, 214, 217,
14491443 221, 71, 204, 205, 215, 207, 208, 71, 71, 218,
1450 209, 210, 71, 223, 71, 212, 213, 224, 228, 2904,
1451 219, 227, 2904, 216, 220, 214, 217, 221, 71, 71,
1444 209, 210, 71, 223, 71, 212, 213, 224, 228, 2912,
1445 219, 227, 2912, 216, 220, 214, 217, 221, 71, 71,
14521446 71, 215, 236, 71, 225, 230, 218, 226, 229, 231,
14531447 223, 71, 235, 71, 224, 228, 71, 219, 227, 232,
1454 71, 220, 237, 239, 71, 240, 2904, 71, 233, 236,
1448 71, 220, 237, 239, 71, 240, 2912, 71, 233, 236,
14551449 280, 225, 230, 238, 226, 229, 231, 71, 71, 235,
1456 234, 2904, 71, 71, 71, 71, 232, 241, 242, 237,
1450 234, 2912, 71, 71, 71, 71, 232, 241, 242, 237,
14571451 239, 144, 240, 144, 144, 233, 144, 280, 243, 149,
14581452
14591453 238, 149, 149, 75, 149, 75, 75, 234, 75, 245,
14601454 71, 150, 244, 246, 241, 242, 247, 249, 71, 250,
1461 251, 2904, 252, 248, 254, 71, 253, 255, 71, 340,
1462 71, 71, 2904, 71, 71, 71, 245, 259, 71, 244,
1455 251, 2912, 252, 248, 254, 71, 253, 255, 71, 340,
1456 71, 71, 2912, 71, 71, 71, 245, 259, 71, 244,
14631457 246, 152, 260, 247, 249, 71, 250, 251, 71, 252,
14641458 248, 254, 256, 253, 255, 258, 71, 71, 257, 71,
14651459 270, 274, 262, 276, 259, 271, 263, 272, 71, 260,
1466 275, 2904, 284, 71, 273, 278, 71, 71, 279, 2904,
1467 421, 71, 258, 264, 71, 257, 71, 270, 274, 71,
1460 275, 2912, 284, 71, 273, 278, 71, 71, 279, 2912,
1461 430, 71, 258, 264, 71, 257, 71, 270, 274, 71,
14681462 71, 277, 271, 263, 272, 71, 71, 275, 71, 284,
14691463
1470 71, 273, 278, 281, 285, 279, 293, 71, 2904, 282,
1471 264, 265, 283, 286, 2904, 71, 266, 71, 277, 291,
1472 2904, 267, 2904, 2904, 71, 298, 71, 268, 269, 2904,
1464 71, 273, 278, 281, 285, 279, 293, 71, 2912, 282,
1465 264, 265, 283, 286, 2912, 71, 266, 71, 277, 291,
1466 2912, 267, 2912, 2912, 71, 298, 71, 268, 269, 2912,
14731467 281, 285, 287, 293, 71, 71, 282, 288, 265, 283,
14741468 286, 71, 295, 266, 305, 292, 291, 300, 267, 289,
14751469 296, 290, 71, 299, 268, 269, 303, 71, 71, 287,
14761470 71, 297, 71, 301, 288, 304, 71, 306, 71, 295,
1477 307, 305, 292, 308, 311, 2904, 289, 302, 290, 71,
1471 307, 305, 292, 308, 311, 2912, 289, 302, 290, 71,
14781472 299, 71, 71, 303, 309, 310, 312, 313, 297, 314,
1479 2904, 315, 71, 71, 2904, 71, 428, 71, 71, 71,
1473 2912, 315, 71, 71, 2912, 71, 545, 71, 71, 71,
14801474
14811475 308, 311, 71, 316, 302, 71, 71, 71, 71, 317,
14821476 318, 309, 310, 312, 313, 319, 314, 320, 315, 321,
14841478 316, 326, 327, 324, 328, 330, 317, 318, 71, 333,
14851479 71, 71, 319, 329, 320, 332, 321, 322, 331, 334,
14861480 71, 71, 336, 71, 341, 323, 335, 71, 326, 327,
1487 324, 337, 330, 339, 71, 71, 71, 338, 343, 2904,
1481 324, 337, 330, 339, 71, 71, 71, 338, 343, 2912,
14881482 329, 71, 332, 71, 344, 331, 71, 342, 346, 350,
14891483 71, 71, 71, 335, 71, 347, 71, 348, 337, 71,
1490 339, 345, 2904, 354, 338, 349, 355, 352, 71, 71,
1484 339, 345, 2912, 354, 338, 349, 355, 352, 71, 71,
14911485
14921486 71, 344, 150, 71, 342, 346, 350, 71, 351, 353,
14931487 356, 357, 347, 71, 348, 71, 358, 359, 345, 71,
1494 365, 2904, 349, 363, 352, 71, 360, 366, 71, 71,
1488 365, 2912, 349, 363, 352, 71, 360, 366, 71, 71,
14951489 362, 361, 71, 71, 367, 351, 353, 356, 357, 71,
14961490 71, 368, 71, 71, 359, 364, 370, 71, 71, 371,
14971491 363, 71, 71, 360, 366, 71, 372, 362, 361, 71,
14981492 373, 367, 374, 376, 375, 378, 377, 71, 368, 380,
1499 2904, 71, 364, 370, 71, 71, 371, 381, 382, 379,
1500 387, 385, 71, 372, 71, 2904, 71, 373, 71, 374,
1501 376, 375, 71, 377, 383, 2904, 386, 71, 388, 2904,
1493 2912, 71, 364, 370, 71, 71, 371, 381, 382, 379,
1494 387, 385, 71, 372, 71, 2912, 71, 373, 71, 374,
1495 376, 375, 71, 377, 383, 2912, 386, 71, 388, 2912,
15021496
15031497 389, 71, 71, 392, 381, 71, 379, 71, 385, 71,
1504 71, 384, 71, 390, 391, 393, 401, 71, 71, 71,
1498 71, 384, 71, 390, 391, 393, 402, 71, 71, 71,
15051499 395, 383, 394, 386, 396, 388, 397, 389, 71, 71,
1506 392, 71, 399, 71, 402, 398, 410, 411, 384, 71,
1507 390, 391, 393, 71, 71, 400, 71, 395, 71, 394,
1508 403, 396, 71, 397, 71, 417, 71, 412, 71, 399,
1509 71, 402, 398, 410, 411, 71, 416, 2904, 418, 71,
1510 2904, 2904, 400, 413, 426, 414, 2904, 403, 404, 71,
1511 422, 405, 417, 71, 412, 437, 406, 407, 408, 409,
1512 71, 415, 71, 416, 425, 418, 71, 71, 419, 420,
1513
1514 413, 426, 414, 430, 71, 404, 71, 422, 405, 423,
1515 427, 429, 424, 406, 407, 408, 409, 71, 415, 71,
1516 431, 425, 432, 71, 435, 419, 420, 433, 71, 71,
1517 430, 71, 71, 71, 436, 434, 423, 427, 429, 424,
1518 2904, 438, 71, 71, 71, 439, 71, 431, 71, 432,
1519 440, 435, 441, 442, 433, 2904, 446, 453, 451, 443,
1520 2904, 436, 434, 444, 1014, 445, 454, 71, 438, 71,
1521 2904, 452, 439, 2904, 71, 71, 71, 465, 447, 441,
1522 442, 2904, 71, 446, 71, 451, 443, 71, 71, 71,
1523 444, 448, 445, 454, 449, 71, 450, 71, 452, 469,
1524
1525 466, 455, 71, 467, 465, 447, 71, 456, 468, 472,
1526 490, 457, 71, 470, 481, 71, 2904, 2904, 448, 458,
1527 71, 449, 71, 450, 484, 71, 469, 466, 455, 471,
1528 467, 480, 71, 2904, 456, 468, 472, 71, 457, 482,
1529 470, 481, 71, 71, 483, 71, 458, 459, 485, 460,
1530 488, 484, 486, 489, 150, 496, 471, 493, 480, 71,
1531 71, 71, 461, 491, 71, 462, 487, 463, 71, 464,
1532 71, 71, 502, 71, 459, 485, 460, 488, 71, 486,
1533 489, 492, 496, 2904, 493, 2904, 2904, 507, 71, 461,
1534 491, 494, 462, 487, 463, 2904, 464, 473, 474, 497,
1535
1536 495, 499, 2904, 501, 71, 498, 71, 475, 492, 476,
1537 477, 478, 71, 71, 479, 71, 503, 500, 506, 71,
1538 505, 2904, 71, 71, 473, 474, 497, 495, 499, 510,
1539 501, 71, 498, 504, 475, 71, 476, 477, 478, 71,
1540 71, 479, 71, 503, 500, 506, 508, 505, 71, 517,
1541 509, 71, 511, 512, 2904, 513, 510, 514, 515, 516,
1542 504, 71, 71, 522, 519, 520, 2904, 518, 71, 71,
1543 523, 524, 71, 508, 71, 2904, 517, 509, 71, 532,
1544 521, 71, 513, 71, 514, 515, 516, 71, 71, 71,
1545 522, 519, 520, 525, 518, 527, 526, 523, 524, 528,
1546
1547 531, 71, 533, 534, 71, 71, 532, 521, 71, 535,
1548 529, 537, 530, 536, 546, 2904, 2904, 71, 71, 71,
1549 525, 71, 527, 526, 538, 71, 528, 531, 539, 533,
1550 534, 541, 71, 547, 542, 540, 2904, 529, 537, 530,
1551 536, 71, 71, 543, 550, 544, 71, 71, 71, 545,
1552 71, 538, 548, 554, 575, 539, 71, 71, 541, 71,
1553 547, 542, 540, 549, 71, 71, 71, 551, 71, 71,
1554 543, 550, 544, 552, 556, 71, 545, 555, 557, 548,
1555 554, 553, 558, 71, 71, 561, 71, 559, 560, 71,
1556 549, 562, 563, 71, 551, 564, 2904, 565, 71, 71,
1557
1558 552, 556, 2904, 71, 555, 557, 71, 568, 553, 558,
1559 71, 71, 561, 71, 559, 560, 567, 570, 562, 563,
1560 566, 71, 564, 71, 565, 71, 71, 574, 571, 569,
1561 572, 573, 71, 576, 568, 71, 71, 71, 71, 577,
1562 71, 578, 580, 567, 570, 581, 579, 566, 582, 2904,
1563 2904, 71, 584, 2904, 574, 571, 569, 572, 573, 71,
1564 576, 71, 587, 71, 585, 589, 588, 583, 578, 580,
1565 71, 71, 581, 579, 71, 71, 71, 590, 591, 584,
1566 71, 592, 596, 71, 594, 593, 597, 586, 71, 587,
1567 71, 595, 589, 588, 583, 1259, 71, 71, 607, 639,
1568
1569 71, 71, 71, 71, 590, 591, 71, 2904, 592, 596,
1570 71, 594, 593, 597, 586, 606, 608, 2904, 595, 598,
1571 609, 2904, 71, 71, 599, 607, 600, 611, 71, 610,
1572 2904, 71, 601, 2904, 602, 615, 2904, 603, 604, 71,
1573 71, 2904, 606, 608, 605, 71, 598, 609, 612, 616,
1574 71, 599, 613, 600, 611, 614, 610, 71, 620, 601,
1575 71, 602, 615, 617, 603, 604, 623, 71, 618, 71,
1576 71, 605, 621, 71, 2904, 612, 616, 624, 619, 613,
1577 622, 71, 614, 626, 71, 620, 625, 628, 71, 627,
1578 617, 2904, 2904, 623, 629, 2904, 71, 633, 632, 621,
1579
1580 71, 71, 71, 71, 624, 619, 71, 622, 636, 71,
1581 626, 630, 631, 625, 628, 71, 627, 71, 634, 71,
1582 71, 629, 635, 637, 633, 632, 71, 640, 638, 71,
1583 650, 641, 642, 643, 71, 636, 644, 648, 630, 631,
1584 71, 71, 71, 71, 645, 634, 71, 646, 71, 635,
1585 637, 150, 647, 71, 640, 638, 649, 71, 641, 642,
1586 643, 651, 71, 644, 648, 652, 71, 653, 656, 654,
1587 71, 645, 2904, 655, 646, 71, 657, 2904, 659, 647,
1588 71, 71, 658, 649, 71, 664, 667, 663, 71, 668,
1589 665, 669, 652, 71, 670, 656, 654, 71, 71, 71,
1590
1591 655, 660, 71, 657, 71, 659, 666, 671, 661, 658,
1592 672, 662, 673, 71, 663, 2904, 71, 71, 71, 71,
1593 71, 71, 674, 71, 676, 675, 677, 683, 660, 2904,
1594 678, 2904, 71, 666, 71, 661, 679, 680, 662, 673,
1595 681, 71, 71, 682, 688, 71, 71, 71, 71, 674,
1596 684, 676, 675, 677, 71, 2904, 685, 678, 71, 71,
1597 686, 687, 689, 679, 680, 71, 71, 681, 71, 691,
1598 682, 694, 690, 71, 692, 697, 71, 684, 693, 699,
1599 71, 695, 71, 685, 71, 71, 696, 686, 687, 689,
1600 698, 700, 71, 71, 701, 71, 691, 71, 694, 690,
1601
1602 703, 692, 697, 71, 702, 693, 699, 71, 695, 2904,
1603 704, 707, 71, 696, 706, 2904, 710, 698, 700, 709,
1604 708, 2904, 71, 713, 71, 71, 71, 703, 711, 715,
1605 71, 702, 705, 71, 716, 71, 71, 704, 707, 712,
1606 719, 706, 71, 710, 714, 71, 709, 708, 71, 717,
1607 713, 71, 71, 71, 718, 711, 71, 71, 71, 705,
1608 720, 716, 721, 722, 723, 71, 712, 719, 724, 2904,
1609 726, 714, 727, 728, 725, 71, 717, 730, 2904, 71,
1610 729, 718, 2904, 739, 71, 71, 731, 720, 71, 732,
1611 722, 723, 71, 733, 71, 724, 71, 726, 734, 727,
1612
1613 735, 725, 71, 736, 740, 71, 741, 729, 743, 71,
1614 71, 71, 71, 731, 71, 71, 732, 71, 737, 738,
1615 742, 745, 746, 744, 71, 71, 71, 735, 750, 747,
1616 736, 740, 71, 741, 748, 743, 751, 71, 71, 749,
1617 752, 2904, 71, 754, 753, 737, 738, 742, 755, 746,
1618 744, 71, 71, 71, 71, 750, 747, 71, 760, 761,
1619 756, 762, 2904, 751, 757, 71, 71, 752, 71, 71,
1620 754, 753, 758, 71, 759, 755, 765, 763, 767, 71,
1621 71, 71, 71, 764, 766, 71, 761, 756, 762, 71,
1622 71, 757, 71, 71, 768, 71, 769, 771, 2904, 758,
1623
1624 770, 759, 774, 765, 763, 767, 71, 772, 773, 775,
1625 764, 766, 71, 71, 777, 71, 71, 782, 71, 776,
1626 781, 768, 2904, 71, 771, 71, 783, 770, 71, 774,
1627 71, 778, 779, 71, 772, 773, 775, 780, 785, 786,
1628 71, 777, 784, 71, 782, 71, 776, 781, 787, 71,
1629 71, 788, 71, 783, 71, 789, 791, 790, 778, 779,
1630 793, 798, 71, 71, 780, 785, 786, 792, 794, 784,
1631 71, 71, 796, 797, 795, 787, 71, 2904, 788, 71,
1632 71, 71, 789, 791, 790, 799, 800, 793, 798, 71,
1633 71, 801, 802, 71, 792, 794, 71, 803, 71, 796,
1634
1635 797, 795, 804, 805, 71, 806, 71, 810, 807, 808,
1636 813, 809, 799, 800, 150, 814, 71, 71, 801, 802,
1637 71, 71, 71, 71, 803, 71, 818, 816, 822, 804,
1638 805, 811, 806, 71, 71, 807, 808, 71, 809, 812,
1639 815, 819, 814, 817, 820, 821, 71, 2904, 71, 71,
1640 71, 2904, 839, 818, 71, 823, 71, 71, 811, 71,
1641 71, 824, 827, 826, 825, 71, 812, 815, 819, 71,
1642 817, 820, 821, 71, 71, 833, 834, 835, 71, 839,
1643 836, 71, 823, 837, 841, 838, 71, 71, 824, 827,
1644 826, 825, 828, 2904, 71, 71, 829, 845, 840, 830,
1645
1646 71, 71, 833, 834, 835, 843, 831, 836, 71, 832,
1647 837, 841, 838, 842, 71, 853, 2904, 858, 71, 828,
1648 844, 2904, 71, 829, 71, 840, 830, 71, 854, 71,
1649 855, 2904, 843, 831, 71, 860, 832, 71, 2904, 71,
1650 842, 856, 853, 71, 71, 857, 861, 844, 846, 847,
1651 859, 848, 2904, 862, 849, 854, 2904, 855, 71, 850,
1652 863, 71, 860, 865, 864, 851, 852, 2904, 856, 71,
1653 71, 866, 857, 861, 71, 846, 847, 859, 848, 71,
1654 862, 849, 71, 869, 867, 71, 850, 863, 71, 868,
1655 865, 864, 851, 852, 870, 871, 71, 71, 866, 71,
1656
1657 872, 71, 873, 71, 876, 874, 71, 875, 878, 877,
1658 869, 867, 880, 882, 2904, 881, 868, 71, 71, 71,
1659 71, 870, 871, 71, 886, 885, 887, 872, 71, 873,
1660 71, 876, 874, 879, 875, 878, 877, 71, 71, 888,
1661 71, 883, 881, 889, 71, 890, 884, 71, 2904, 891,
1662 2904, 2904, 885, 894, 898, 892, 71, 895, 71, 893,
1663 879, 71, 71, 896, 901, 932, 888, 2904, 900, 71,
1664 71, 899, 890, 71, 71, 71, 891, 897, 71, 71,
1665 894, 71, 892, 71, 895, 71, 893, 71, 903, 71,
1666 896, 902, 904, 906, 905, 900, 71, 71, 899, 71,
1667
1668 907, 908, 912, 910, 897, 71, 71, 911, 914, 909,
1669 71, 71, 2904, 2904, 71, 903, 71, 913, 902, 904,
1670 906, 905, 71, 71, 71, 71, 71, 907, 908, 912,
1671 910, 916, 918, 71, 911, 914, 909, 915, 919, 917,
1672 71, 920, 922, 923, 913, 921, 924, 71, 71, 925,
1673 71, 2904, 2904, 71, 71, 71, 926, 71, 916, 918,
1674 927, 929, 933, 71, 915, 71, 917, 71, 920, 922,
1675 923, 928, 921, 924, 931, 71, 925, 930, 71, 934,
1676 71, 937, 71, 926, 71, 935, 71, 927, 929, 933,
1677 936, 939, 938, 71, 71, 940, 942, 2904, 928, 949,
1678
1679 941, 931, 71, 71, 930, 71, 934, 71, 937, 943,
1680 944, 951, 935, 71, 71, 946, 71, 936, 939, 938,
1681 71, 945, 71, 942, 947, 950, 948, 941, 71, 71,
1682 953, 71, 71, 71, 952, 954, 943, 944, 71, 956,
1683 2904, 71, 946, 71, 960, 955, 962, 71, 945, 957,
1684 71, 947, 950, 948, 961, 959, 966, 958, 968, 963,
1685 964, 952, 71, 967, 71, 965, 956, 71, 71, 71,
1686 71, 960, 955, 970, 971, 2904, 957, 71, 71, 71,
1687 71, 961, 959, 71, 958, 71, 963, 964, 71, 969,
1688 967, 972, 965, 974, 973, 71, 978, 975, 71, 976,
1689
1690 970, 150, 71, 71, 71, 977, 71, 979, 981, 980,
1691 71, 989, 992, 1011, 2904, 71, 969, 71, 972, 71,
1692 974, 973, 71, 978, 975, 982, 976, 71, 2904, 2904,
1693 991, 71, 977, 990, 979, 981, 980, 71, 989, 71,
1694 994, 993, 71, 71, 2904, 71, 995, 997, 1008, 996,
1695 2904, 998, 982, 983, 71, 984, 71, 991, 71, 985,
1696 990, 986, 71, 71, 71, 999, 987, 994, 993, 71,
1697 1000, 988, 1001, 995, 997, 1008, 996, 71, 998, 1002,
1698 983, 1004, 984, 1003, 1012, 71, 985, 1006, 986, 2904,
1699 1010, 1005, 1007, 987, 1009, 71, 1013, 71, 988, 1001,
1700
1701 1015, 2904, 71, 71, 1017, 71, 1002, 71, 1004, 71,
1702 1003, 71, 71, 1018, 1006, 1016, 71, 1010, 1005, 1007,
1703 71, 1009, 71, 71, 1026, 1027, 2904, 1030, 1028, 2904,
1704 1029, 1017, 71, 1036, 2904, 1038, 1031, 2904, 2904, 71,
1705 1018, 71, 1016, 1019, 2904, 71, 1032, 71, 1020, 1042,
1706 1021, 1026, 1027, 71, 1030, 1028, 1022, 1029, 71, 1033,
1707 71, 1023, 1024, 1031, 1037, 71, 1034, 71, 1025, 71,
1708 1019, 1035, 71, 1032, 71, 1020, 1039, 1021, 1041, 71,
1709 1043, 71, 1040, 1022, 1048, 2904, 1033, 71, 1023, 1024,
1710 71, 1037, 71, 1034, 1045, 1025, 1044, 1046, 1035, 1047,
1711
1712 71, 1049, 71, 1039, 71, 1041, 1050, 1043, 1051, 1040,
1713 71, 1052, 71, 1060, 71, 71, 71, 1055, 71, 71,
1714 1058, 1045, 1054, 1044, 1046, 1056, 1047, 1053, 1049, 71,
1715 71, 1061, 71, 1050, 2904, 1051, 1059, 1057, 1052, 2904,
1716 71, 71, 71, 71, 1055, 71, 71, 1058, 1062, 1054,
1717 1063, 1064, 1056, 1065, 1053, 71, 1066, 71, 1061, 71,
1718 1067, 71, 1068, 1059, 1057, 71, 71, 1071, 1069, 1070,
1719 1073, 1072, 71, 2904, 1074, 1062, 1080, 1063, 1064, 1078,
1720 1065, 1075, 1079, 1066, 71, 71, 1082, 1067, 71, 1068,
1721 71, 71, 71, 71, 1071, 1069, 1070, 71, 1072, 1076,
1722
1723 71, 1074, 71, 1080, 1077, 71, 1078, 1081, 1075, 1079,
1724 1083, 1084, 1085, 1082, 1086, 1087, 1088, 1089, 1091, 71,
1725 71, 2904, 71, 1090, 71, 71, 1097, 1092, 2904, 71,
1726 1094, 71, 1093, 1095, 1081, 1101, 1096, 1083, 1084, 1085,
1727 71, 71, 1087, 71, 1089, 1091, 71, 71, 71, 71,
1728 1090, 71, 71, 1097, 1092, 71, 1098, 1094, 1099, 1093,
1729 1095, 1100, 71, 1096, 1102, 1103, 2904, 71, 2904, 1105,
1730 1104, 1106, 2904, 1107, 71, 1109, 1110, 1108, 1111, 71,
1731 71, 71, 71, 1098, 71, 1099, 1112, 1113, 1116, 1114,
1732 71, 1102, 1103, 71, 71, 71, 1105, 1104, 1106, 71,
1733
1734 1107, 1115, 1109, 1110, 1108, 1118, 1117, 1119, 1120, 71,
1735 71, 71, 71, 1121, 1113, 71, 1114, 1124, 71, 1122,
1736 71, 1125, 2904, 71, 1123, 1126, 71, 1127, 1115, 1128,
1737 71, 1131, 1118, 1117, 1132, 1120, 2904, 71, 71, 71,
1738 71, 1133, 71, 71, 1124, 71, 1122, 1129, 1125, 71,
1739 1130, 1123, 1126, 71, 1127, 1135, 1128, 1134, 71, 1136,
1740 1137, 1138, 71, 71, 1142, 1141, 71, 71, 1133, 1140,
1741 1145, 1153, 71, 71, 1129, 2904, 71, 1130, 71, 71,
1742 1151, 1144, 71, 71, 1134, 1146, 1136, 1137, 1138, 71,
1743 1147, 1142, 1141, 1143, 1148, 71, 1140, 71, 71, 1152,
1744
1745 1149, 1150, 71, 71, 1154, 2904, 71, 71, 1144, 71,
1746 1155, 2904, 1146, 1156, 1163, 2904, 1158, 1147, 2904, 71,
1747 1143, 1148, 71, 1157, 1160, 1162, 1152, 1149, 1150, 71,
1748 1161, 1159, 71, 71, 71, 1164, 71, 1155, 71, 1166,
1749 1156, 1163, 71, 1158, 71, 71, 71, 71, 1165, 1169,
1750 1157, 1160, 1162, 1170, 1167, 1168, 71, 1161, 1159, 2904,
1751 2904, 71, 1164, 1171, 71, 1177, 71, 71, 1176, 1178,
1752 71, 1179, 2904, 1180, 71, 1165, 1169, 1172, 2904, 2904,
1753 1170, 1167, 1168, 1182, 71, 1183, 1173, 71, 1174, 71,
1754 1171, 1175, 1177, 1181, 71, 1176, 1178, 71, 1179, 71,
1755
1756 1180, 71, 71, 1184, 1172, 1185, 1186, 71, 1187, 1188,
1757 1182, 71, 1183, 1173, 2904, 1174, 71, 1189, 1175, 1190,
1758 1181, 1191, 71, 1192, 1193, 1194, 1195, 71, 71, 2904,
1759 1184, 2904, 1185, 1186, 1197, 1187, 71, 1196, 71, 71,
1760 1198, 71, 71, 71, 1189, 71, 1190, 71, 1191, 71,
1761 1192, 1193, 1194, 1195, 1199, 71, 1200, 1201, 1205, 1203,
1762 1202, 1197, 1204, 1206, 1196, 71, 71, 1198, 71, 1211,
1763 1207, 71, 71, 1208, 1209, 71, 71, 71, 1210, 71,
1764 71, 1199, 71, 1200, 1201, 1205, 1203, 1202, 1212, 1204,
1765 1206, 1213, 71, 1215, 1214, 1218, 1211, 1207, 71, 1216,
1766
1767 1208, 1209, 1221, 71, 1217, 1232, 1219, 71, 71, 1220,
1768 71, 1228, 1229, 2904, 1230, 1212, 71, 1231, 1213, 71,
1769 1215, 1214, 1218, 71, 1234, 71, 1235, 71, 71, 1221,
1770 71, 71, 1232, 1219, 1233, 1236, 1220, 1222, 1228, 1229,
1771 1223, 1224, 2904, 71, 1231, 1225, 71, 1237, 71, 1239,
1772 2904, 1226, 71, 1235, 1238, 1227, 71, 71, 2904, 71,
1773 71, 1233, 1236, 1240, 1222, 1241, 1244, 1223, 1224, 1246,
1774 1242, 1243, 1225, 71, 1237, 71, 1239, 71, 1226, 1245,
1775 71, 1238, 1227, 1251, 71, 1248, 71, 71, 1247, 1249,
1776 1240, 71, 1241, 1244, 71, 1250, 1246, 1242, 1243, 1252,
1777
1778 2904, 71, 2904, 1258, 1260, 71, 1245, 1262, 1265, 1261,
1779 1251, 1267, 1248, 1266, 1263, 1247, 71, 1281, 2904, 71,
1780 71, 71, 71, 71, 1264, 1268, 1252, 71, 1253, 71,
1781 1258, 1260, 71, 1254, 1262, 1255, 1261, 1256, 1267, 1257,
1782 71, 1263, 71, 1269, 71, 1270, 71, 71, 1273, 1271,
1783 1272, 1264, 1268, 1277, 2904, 1253, 71, 71, 71, 1275,
1784 1254, 1274, 1255, 71, 1256, 1276, 1257, 71, 1280, 1283,
1785 1269, 71, 1270, 1278, 71, 1273, 1271, 1272, 71, 1282,
1786 1277, 71, 71, 1279, 1284, 71, 1275, 1288, 1274, 1285,
1787 71, 71, 1276, 1286, 1287, 1280, 71, 1289, 1291, 2904,
1788
1789 1278, 1290, 71, 1292, 1293, 71, 1282, 1296, 71, 71,
1790 1279, 1284, 1294, 71, 1288, 71, 1285, 1295, 71, 1298,
1791 1286, 1287, 2904, 71, 71, 71, 71, 1300, 1290, 71,
1792 1292, 1293, 1301, 1297, 71, 1299, 1302, 1308, 1303, 1294,
1793 71, 1305, 71, 71, 1295, 1304, 1298, 71, 1306, 71,
1794 71, 1307, 1309, 71, 1300, 1310, 71, 1311, 1312, 1301,
1795 1297, 71, 1299, 1302, 1308, 1303, 1314, 1313, 1305, 71,
1796 71, 1315, 1304, 71, 71, 1306, 71, 71, 1307, 1309,
1797 71, 1316, 1310, 71, 1311, 1312, 1317, 71, 1318, 1319,
1798 1320, 71, 1321, 1314, 1313, 71, 1322, 1323, 1315, 1324,
1799
1800 1325, 1327, 1326, 1328, 71, 71, 1329, 71, 1316, 71,
1801 71, 71, 1330, 71, 1331, 1340, 1319, 71, 71, 1321,
1802 71, 1338, 71, 1322, 1323, 1334, 71, 1325, 1327, 1326,
1803 1332, 1336, 71, 71, 1335, 71, 1333, 1342, 71, 1330,
1804 1343, 1337, 1340, 71, 71, 1341, 71, 71, 1338, 71,
1805 71, 1344, 1334, 1339, 71, 71, 1350, 1332, 1336, 71,
1806 71, 1335, 1345, 1333, 1342, 1346, 1347, 71, 1337, 1351,
1807 1349, 1348, 1341, 71, 71, 1353, 2904, 1352, 1344, 71,
1808 1339, 1358, 1354, 1350, 71, 1355, 1359, 71, 71, 1345,
1809 71, 1360, 1346, 1361, 71, 2904, 1351, 1349, 71, 71,
1810
1811 1356, 1362, 1353, 1357, 1352, 1365, 71, 1363, 1358, 1354,
1812 1364, 71, 1355, 1359, 71, 71, 71, 71, 1366, 1368,
1813 1361, 2904, 71, 71, 1367, 1370, 1371, 1356, 1362, 1369,
1814 1357, 1373, 1365, 71, 1363, 71, 71, 1364, 71, 1372,
1815 71, 71, 1374, 1377, 2904, 1366, 1368, 1376, 71, 1378,
1816 1375, 1367, 1370, 1371, 1379, 71, 1369, 71, 1373, 71,
1817 1380, 1384, 71, 1383, 71, 71, 1372, 1381, 1382, 1374,
1818 1389, 71, 1385, 71, 1376, 71, 1378, 1375, 1386, 71,
1819 71, 1379, 1387, 71, 1388, 1391, 1390, 1380, 1384, 1394,
1820 1383, 71, 71, 1393, 1381, 1382, 71, 1389, 71, 1385,
1821
1822 71, 1392, 71, 1395, 1396, 1386, 71, 71, 2904, 1387,
1823 1397, 1388, 1391, 1390, 1398, 71, 1399, 1401, 2904, 1402,
1824 1393, 71, 1400, 2904, 1405, 1409, 71, 1404, 1392, 2904,
1825 71, 1396, 71, 1403, 1407, 71, 71, 1397, 71, 71,
1826 71, 71, 1408, 1399, 1401, 71, 1402, 71, 1406, 1400,
1827 71, 1405, 1409, 71, 1404, 71, 1416, 1410, 1411, 1415,
1828 1403, 1407, 1413, 1412, 71, 71, 71, 1414, 1417, 1408,
1829 1418, 1419, 1421, 1424, 1420, 1406, 71, 1427, 71, 1428,
1830 71, 1422, 71, 1416, 1410, 1425, 1415, 71, 71, 71,
1831 71, 1423, 1426, 71, 71, 1417, 71, 1418, 1419, 1421,
1832
1833 71, 1420, 1429, 1430, 1436, 71, 1428, 71, 1422, 71,
1834 71, 1438, 1425, 1431, 1432, 1435, 1433, 1434, 1423, 1426,
1835 1437, 71, 71, 71, 71, 71, 1439, 1441, 71, 1429,
1836 1440, 1436, 71, 1442, 1444, 71, 1443, 71, 1438, 1454,
1837 1431, 1432, 1435, 1433, 1434, 71, 1445, 1437, 71, 1450,
1838 71, 1446, 1447, 1439, 71, 71, 1448, 1440, 1451, 71,
1839 1442, 1444, 1455, 1443, 71, 71, 71, 1452, 1456, 1449,
1840 71, 71, 2904, 1445, 71, 1453, 1450, 71, 1446, 1447,
1841 1457, 1458, 1462, 1448, 71, 1451, 71, 2904, 1460, 1455,
1842 71, 1459, 1461, 1463, 1452, 1456, 1449, 71, 71, 71,
1843
1844 1464, 1466, 1453, 71, 71, 1465, 1468, 1457, 1458, 71,
1845 1467, 71, 1470, 2904, 71, 1460, 1471, 1469, 1459, 1461,
1846 71, 1472, 1473, 71, 71, 1478, 1475, 1464, 1466, 1477,
1847 1474, 2904, 1465, 71, 1479, 1476, 71, 1467, 71, 71,
1848 71, 71, 71, 1471, 1469, 1482, 71, 71, 71, 1473,
1849 71, 71, 1478, 1475, 1480, 1481, 1477, 1474, 1483, 1485,
1850 71, 1479, 1476, 71, 1484, 1486, 1489, 71, 71, 1488,
1851 1493, 71, 1482, 1487, 1490, 71, 1491, 71, 1496, 71,
1852 2904, 1480, 1481, 71, 1494, 1483, 1485, 1492, 1502, 1497,
1853 71, 1484, 1486, 1489, 71, 71, 1488, 71, 71, 71,
1854
1855 1487, 1490, 1495, 1491, 71, 1496, 1498, 71, 1499, 71,
1856 1500, 1494, 1501, 2904, 1492, 71, 1497, 1503, 71, 1504,
1857 1505, 1506, 71, 1507, 2904, 1508, 71, 71, 71, 1495,
1858 1509, 71, 71, 1498, 71, 1499, 71, 1500, 1510, 1501,
1859 1514, 1513, 1511, 2904, 1503, 1516, 1504, 1505, 1506, 71,
1860 1507, 1512, 1508, 1517, 1515, 1518, 71, 1509, 71, 71,
1861 71, 71, 71, 1520, 1519, 1510, 1521, 1514, 1513, 1511,
1862 71, 71, 1516, 1522, 1523, 71, 1524, 1525, 1512, 71,
1863 1517, 1515, 71, 1526, 2904, 1527, 71, 71, 1528, 1529,
1864 2904, 1519, 1533, 1521, 1531, 71, 1530, 71, 1532, 71,
1865
1866 71, 1523, 71, 1524, 1525, 71, 71, 1539, 1540, 1534,
1867 1526, 71, 1527, 1535, 71, 1528, 1529, 1545, 71, 1533,
1868 71, 1531, 71, 1530, 71, 1532, 1536, 1541, 2904, 1537,
1869 71, 1547, 1543, 1542, 71, 1540, 1534, 1544, 2904, 71,
1870 1535, 1538, 1549, 1546, 1550, 71, 1548, 1556, 1551, 71,
1871 71, 1557, 1559, 1536, 1541, 71, 1537, 71, 1547, 1543,
1872 1542, 71, 71, 1555, 1544, 71, 71, 1552, 1538, 1553,
1873 1546, 1550, 71, 1548, 71, 1551, 71, 71, 1554, 71,
1874 1558, 1561, 1560, 71, 71, 71, 71, 71, 1562, 1563,
1875 1555, 1564, 1565, 1567, 1552, 1569, 1553, 1566, 1570, 71,
1876
1877 71, 1568, 71, 71, 71, 1554, 71, 1558, 1561, 1560,
1878 71, 71, 71, 1571, 71, 71, 1563, 1576, 1564, 1565,
1879 1567, 1574, 1569, 1572, 1566, 1570, 1573, 1578, 1568, 1575,
1880 71, 1577, 1583, 71, 71, 71, 1579, 1582, 71, 1580,
1881 71, 71, 1581, 1584, 71, 71, 1589, 1586, 1574, 71,
1882 1572, 71, 1594, 1573, 1578, 71, 1575, 71, 1577, 1583,
1883 1585, 71, 71, 1579, 1582, 1587, 1580, 71, 1588, 1581,
1884 1584, 1595, 71, 1589, 1586, 1592, 1590, 71, 1596, 71,
1885 1593, 1591, 1597, 71, 1599, 1600, 1598, 1585, 71, 1601,
1886 1605, 71, 1587, 71, 1611, 1588, 1602, 71, 71, 71,
1887
1888 1603, 71, 1592, 1590, 71, 1596, 1604, 1593, 1591, 1597,
1889 71, 71, 1600, 1598, 71, 1612, 1601, 1605, 71, 1606,
1890 1607, 1608, 71, 1602, 1609, 1610, 71, 1603, 71, 1613,
1891 1614, 1615, 1616, 1604, 1621, 1618, 71, 71, 1617, 71,
1892 71, 1637, 71, 71, 71, 71, 1606, 1607, 1608, 71,
1893 71, 1609, 1610, 1619, 1620, 71, 1613, 1614, 1615, 1616,
1894 71, 1621, 1618, 71, 1622, 1617, 1623, 1624, 71, 1625,
1895 1627, 1630, 1635, 1628, 1632, 71, 1629, 71, 1631, 1633,
1896 1619, 1620, 1638, 1626, 71, 71, 1634, 71, 71, 71,
1897 1639, 1622, 1636, 1623, 1624, 71, 1625, 1627, 1630, 71,
1898
1899 1628, 71, 1640, 1629, 71, 1631, 71, 1644, 1641, 1642,
1900 1626, 1643, 71, 1634, 71, 1650, 71, 1639, 1645, 1636,
1901 1646, 1649, 1648, 71, 71, 1651, 1647, 1660, 1653, 71,
1902 1652, 2904, 71, 71, 71, 1641, 1642, 1654, 1643, 71,
1903 71, 1658, 1650, 1661, 71, 1645, 71, 1646, 1649, 71,
1904 1656, 71, 1651, 1647, 71, 1653, 1655, 1652, 1657, 71,
1905 1662, 1665, 1659, 71, 1654, 1663, 1666, 1664, 71, 71,
1906 71, 71, 71, 1667, 71, 71, 71, 1656, 2904, 1668,
1907 71, 1670, 1671, 1655, 71, 1657, 1669, 1662, 1665, 1659,
1908 71, 1672, 1663, 1666, 1664, 1674, 1673, 71, 71, 1675,
1909
1910 1678, 1680, 1676, 1679, 71, 71, 1668, 1677, 1670, 71,
1911 1684, 2904, 1681, 1669, 2904, 71, 1682, 71, 1672, 71,
1912 71, 71, 1674, 1673, 71, 71, 1675, 1678, 71, 1676,
1913 1679, 71, 1683, 1685, 1677, 1686, 1687, 71, 1688, 1681,
1914 71, 1689, 1691, 1682, 1700, 1690, 71, 2904, 1693, 71,
1915 1694, 71, 71, 71, 1692, 71, 1695, 71, 1696, 1683,
1916 1685, 1697, 1686, 1687, 1698, 1688, 1699, 1701, 1689, 71,
1917 1707, 71, 1690, 1703, 71, 1693, 71, 1694, 1704, 71,
1918 1702, 1692, 71, 71, 71, 1696, 71, 1706, 71, 1705,
1919 1708, 1698, 71, 1699, 71, 71, 71, 1707, 71, 71,
1920
1921 1703, 1709, 71, 1710, 1711, 1704, 1712, 1702, 1716, 1714,
1922 1713, 1718, 1717, 1719, 1706, 71, 1705, 1708, 71, 71,
1923 1720, 71, 1715, 71, 71, 1724, 71, 71, 1709, 1722,
1924 1710, 1711, 71, 1712, 1721, 1716, 1714, 1713, 71, 1717,
1925 71, 1723, 71, 1727, 1725, 71, 1726, 1720, 71, 1715,
1926 71, 1728, 1724, 1729, 1731, 1730, 1722, 71, 1732, 1733,
1927 1734, 1721, 71, 1735, 1737, 71, 71, 1738, 1723, 71,
1928 1727, 1725, 1736, 1726, 1739, 1741, 1743, 1742, 71, 71,
1929 71, 71, 1730, 1740, 71, 1732, 1733, 1734, 1744, 1746,
1930 71, 71, 71, 1745, 1738, 71, 71, 1753, 1751, 1736,
1931
1932 71, 1752, 1761, 1743, 1742, 71, 71, 71, 71, 1754,
1933 1740, 1747, 1748, 1749, 1757, 71, 71, 1755, 1750, 71,
1934 1745, 71, 1756, 1758, 1762, 1751, 71, 71, 1752, 71,
1935 1759, 1760, 1765, 2904, 71, 1767, 1754, 1763, 1747, 1748,
1936 1749, 1757, 71, 71, 71, 1750, 71, 1764, 71, 71,
1937 1758, 1762, 1770, 71, 1766, 71, 1768, 1759, 1760, 71,
1938 1769, 71, 1767, 71, 1763, 71, 1771, 1773, 1772, 1774,
1939 1775, 71, 1776, 1778, 1764, 71, 1777, 1779, 71, 1770,
1940 1780, 1766, 71, 1768, 2904, 2904, 71, 1769, 71, 1781,
1941 71, 1782, 1783, 71, 71, 1772, 1774, 1775, 1785, 1776,
1942
1943 1788, 71, 1789, 1777, 71, 71, 1787, 1780, 1784, 71,
1944 71, 71, 1786, 71, 1790, 1794, 1781, 71, 1782, 1783,
1945 1791, 71, 71, 1792, 71, 1785, 1793, 1788, 2904, 1795,
1946 1796, 2904, 2904, 1787, 71, 1784, 1797, 1798, 1799, 1786,
1947 71, 1790, 71, 71, 1800, 71, 1803, 1791, 71, 1804,
1948 1801, 71, 1816, 71, 2904, 71, 1795, 1796, 71, 71,
1949 1802, 71, 1805, 1797, 1798, 1799, 1806, 1807, 71, 71,
1950 1814, 1800, 71, 1803, 1811, 1809, 1810, 1801, 71, 71,
1951 1812, 71, 71, 1808, 71, 1813, 71, 1802, 71, 1805,
1952 71, 71, 1817, 1806, 1807, 1815, 1820, 1814, 1821, 1824,
1953
1954 1818, 1811, 1809, 1810, 71, 1819, 1823, 1812, 71, 1827,
1955 1808, 1822, 1813, 71, 71, 71, 71, 1829, 1828, 1817,
1956 1830, 71, 1815, 71, 71, 1821, 1824, 1818, 1825, 1826,
1957 71, 1831, 1819, 1823, 1833, 71, 71, 1832, 1822, 71,
1958 1837, 71, 1836, 1834, 1829, 1828, 1838, 71, 1835, 71,
1959 1841, 1842, 71, 1843, 71, 1825, 1826, 71, 1831, 71,
1960 71, 1833, 1844, 1839, 1832, 1846, 1845, 71, 1840, 1836,
1961 1834, 1847, 2904, 71, 1851, 1835, 1848, 1849, 1853, 2904,
1962 1843, 71, 71, 71, 71, 1850, 71, 71, 1859, 1844,
1963 1854, 1852, 71, 1845, 1855, 71, 71, 71, 1847, 71,
1964
1965 1856, 1857, 1858, 1848, 1849, 71, 71, 1860, 71, 71,
1966 71, 1861, 1850, 1862, 71, 1859, 1863, 1854, 1852, 1865,
1967 71, 1855, 1864, 71, 1866, 1868, 71, 1856, 1857, 1858,
1968 1869, 2904, 1867, 1875, 71, 1871, 1874, 2904, 71, 2904,
1969 1862, 71, 1877, 71, 2904, 71, 1865, 71, 71, 1864,
1970 71, 1866, 1868, 1870, 71, 1872, 1873, 1869, 71, 1867,
1971 71, 71, 1871, 1874, 71, 1878, 1876, 1879, 71, 1877,
1972 71, 71, 1880, 1881, 1884, 1886, 1882, 1887, 1883, 71,
1973 1870, 2904, 1872, 1873, 71, 71, 71, 71, 1885, 1890,
1974 71, 71, 1878, 1876, 71, 1888, 1891, 71, 71, 1880,
1975
1976 1881, 1884, 1892, 1882, 1887, 1883, 1889, 71, 1893, 1894,
1977 71, 1895, 1896, 1897, 71, 1885, 1890, 71, 1898, 1899,
1978 1900, 71, 1888, 1891, 71, 1902, 71, 71, 71, 1892,
1979 1901, 71, 1904, 1889, 71, 1893, 1894, 71, 1895, 1896,
1980 1897, 71, 1903, 71, 1905, 71, 1899, 1900, 1906, 2904,
1981 1908, 1907, 1902, 1909, 71, 71, 1911, 1901, 1912, 1910,
1982 1914, 2904, 2904, 71, 71, 1924, 71, 1915, 2904, 1903,
1983 1913, 1905, 71, 2904, 71, 1906, 71, 71, 1907, 71,
1984 1909, 1916, 71, 1911, 71, 1912, 1910, 1914, 71, 1917,
1985 1918, 71, 71, 1919, 1915, 1922, 71, 1913, 1920, 1923,
1986
1987 1925, 1928, 71, 1926, 71, 71, 1929, 1927, 1916, 71,
1988 71, 1921, 1932, 71, 71, 1930, 1917, 1918, 1931, 71,
1989 1919, 71, 1922, 71, 1933, 1920, 1923, 1925, 1928, 1934,
1990 1926, 71, 1935, 1929, 1927, 1936, 1937, 71, 1921, 1932,
1991 1938, 1939, 1930, 71, 71, 1931, 71, 1941, 1942, 71,
1992 71, 1933, 1940, 1943, 71, 71, 1934, 1944, 71, 1935,
1993 71, 71, 1936, 1937, 1945, 1946, 71, 1938, 1939, 1949,
1994 1950, 1947, 71, 1948, 1941, 1942, 1951, 71, 71, 1940,
1995 71, 2904, 1952, 1954, 1944, 1953, 71, 1957, 1956, 2904,
1996 71, 1945, 1946, 71, 1958, 71, 1949, 1950, 1947, 71,
1997
1998 1948, 71, 71, 1955, 71, 1959, 1960, 1961, 71, 1952,
1999 1954, 71, 1953, 71, 71, 1956, 1962, 71, 1964, 1963,
2000 71, 1958, 1966, 2904, 1968, 1967, 1965, 2904, 1969, 1970,
2001 1955, 1975, 1959, 1960, 1973, 1974, 1976, 71, 71, 71,
2002 71, 71, 1985, 1962, 71, 1964, 1963, 71, 2904, 71,
2003 71, 1968, 1967, 1965, 71, 1969, 1970, 1971, 1977, 71,
2004 1972, 1973, 1974, 71, 1978, 1979, 1980, 1981, 1982, 71,
2005 1983, 2904, 1984, 1989, 1986, 71, 71, 71, 2904, 71,
2006 71, 2904, 71, 71, 1971, 1977, 71, 1972, 71, 71,
2007 71, 1978, 1979, 1980, 1981, 1982, 1987, 1983, 1988, 1984,
2008
2009 1989, 1986, 1990, 1991, 1992, 71, 1993, 2904, 1996, 71,
2010 1994, 2904, 1995, 71, 71, 1997, 2000, 1999, 71, 71,
2011 71, 2005, 2003, 1987, 71, 1988, 71, 2004, 1998, 1990,
2012 1991, 1992, 71, 1993, 71, 1996, 71, 1994, 71, 1995,
2013 2001, 2002, 1997, 2000, 1999, 71, 2006, 2007, 71, 2003,
2014 71, 2008, 71, 2009, 2004, 1998, 2011, 2010, 2012, 71,
2015 2014, 2015, 2016, 2013, 71, 2028, 2904, 2001, 2002, 2017,
2016 71, 2019, 2024, 2006, 71, 2018, 71, 2904, 2008, 71,
2017 2009, 2020, 71, 2011, 2010, 2023, 71, 2025, 71, 2016,
2018 71, 2027, 71, 71, 2026, 2021, 2017, 71, 71, 71,
2019
2020 71, 2029, 2018, 71, 2030, 2031, 2022, 71, 2020, 71,
2021 2904, 2033, 2023, 71, 2025, 2032, 2904, 2034, 2027, 2035,
2022 2904, 2026, 2021, 71, 2036, 2037, 71, 71, 2029, 2904,
2023 71, 2030, 71, 2022, 2038, 2039, 2040, 71, 2041, 71,
2024 71, 2042, 2032, 71, 2034, 2044, 2035, 71, 71, 2047,
2025 71, 2036, 2037, 2043, 2045, 2046, 71, 2048, 71, 2049,
2026 71, 2038, 2039, 2040, 71, 2041, 2051, 71, 2042, 2052,
2027 2050, 71, 71, 2054, 71, 2904, 2047, 71, 71, 2055,
2028 2043, 2045, 2046, 71, 2048, 2053, 2049, 2056, 71, 2059,
2029 2065, 2057, 71, 2051, 71, 71, 2052, 2050, 71, 71,
2030
2031 71, 2058, 2060, 2061, 2062, 71, 2055, 2063, 2064, 71,
2032 71, 2067, 2053, 71, 2056, 2066, 2059, 71, 2057, 71,
2033 71, 2070, 2071, 2068, 2072, 71, 2069, 2074, 2058, 2060,
2034 2061, 2062, 2073, 2078, 2063, 2064, 71, 2075, 2067, 71,
2035 71, 71, 2066, 2076, 71, 2079, 2077, 71, 2070, 71,
2036 2068, 71, 2080, 2069, 2074, 2081, 2083, 2084, 2082, 2073,
2037 71, 71, 71, 71, 2075, 71, 2085, 71, 2086, 2087,
2038 2076, 71, 2079, 2077, 71, 2089, 71, 2088, 2090, 2080,
2039 2092, 2091, 2081, 2083, 71, 2082, 71, 2093, 2094, 2098,
2040 71, 2095, 2097, 71, 2099, 2086, 71, 2096, 2100, 2101,
2041
2042 71, 71, 71, 71, 2088, 2090, 71, 71, 2091, 71,
2043 71, 71, 2103, 2102, 71, 2094, 2098, 2104, 2095, 2097,
2044 2105, 71, 71, 2107, 2096, 2100, 71, 2111, 2108, 2110,
2045 2109, 2112, 2116, 71, 2904, 2106, 71, 71, 71, 2103,
2046 2102, 71, 71, 2115, 2104, 2113, 71, 2105, 2114, 71,
2047 71, 2118, 2119, 2117, 71, 2108, 2110, 2109, 2112, 71,
2048 71, 71, 2106, 71, 71, 2120, 71, 2121, 2122, 2123,
2049 2115, 2125, 2113, 2126, 71, 2114, 2124, 71, 2118, 2119,
2050 2117, 2127, 71, 2128, 2129, 2130, 2904, 2131, 71, 2140,
2051 71, 71, 71, 2904, 2121, 2122, 2123, 71, 2125, 71,
2052
2053 2126, 2133, 2132, 2124, 71, 2135, 71, 71, 2127, 71,
2054 2128, 2129, 2130, 2134, 2131, 71, 2136, 71, 2139, 71,
2055 2137, 71, 2138, 2142, 2143, 2141, 2144, 71, 2133, 2132,
2056 71, 71, 2135, 2145, 2147, 71, 2146, 2153, 2148, 2149,
2057 2134, 2150, 71, 2136, 71, 2139, 71, 2137, 71, 2138,
2058 71, 2143, 2141, 2144, 2151, 71, 71, 71, 71, 71,
2059 2145, 2147, 2152, 2146, 2154, 2148, 2149, 2155, 2150, 71,
2060 2156, 2166, 71, 2157, 2159, 71, 2158, 71, 2160, 2904,
2061 2162, 2151, 2163, 2168, 2164, 2904, 2161, 71, 2165, 2152,
2062 71, 71, 2177, 2904, 2155, 71, 71, 2156, 71, 71,
2063
2064 2157, 71, 71, 2158, 71, 2160, 71, 2162, 2167, 2163,
2065 2168, 2164, 2169, 2161, 2170, 2165, 2171, 2172, 2173, 71,
2066 71, 2176, 2175, 2179, 2174, 71, 2178, 71, 71, 71,
2067 2180, 2182, 71, 2181, 2183, 2167, 71, 2184, 2904, 2169,
2068 2904, 2170, 71, 2171, 2172, 2173, 71, 2186, 2176, 2175,
2069 71, 2174, 71, 2178, 71, 71, 2185, 2180, 2188, 2189,
2070 2181, 2187, 2193, 71, 71, 2190, 71, 71, 2194, 71,
2071 2191, 71, 2192, 71, 2186, 2196, 71, 2197, 2198, 2904,
2072 2195, 2200, 71, 2185, 2904, 2188, 2189, 2199, 2187, 71,
2073 71, 71, 2190, 71, 2204, 2194, 71, 2191, 71, 2192,
2074
2075 71, 71, 2196, 71, 2197, 71, 2201, 2195, 2200, 2202,
2076 2203, 2205, 2206, 71, 2199, 2207, 71, 71, 71, 2208,
2077 2212, 2204, 2209, 71, 2210, 2904, 2211, 2904, 2904, 2214,
2078 2215, 71, 2216, 2201, 71, 71, 2202, 2203, 2205, 2206,
2079 71, 2213, 2217, 71, 2218, 71, 2208, 71, 71, 2209,
2080 2219, 2210, 71, 2211, 71, 2220, 2214, 2215, 71, 2216,
2081 71, 2221, 2223, 2224, 2222, 2225, 71, 2227, 2213, 2217,
2082 2904, 2218, 2233, 2228, 2226, 2229, 71, 2219, 71, 71,
2083 71, 71, 2220, 71, 71, 2230, 71, 2231, 2232, 71,
2084 2224, 2222, 71, 71, 2227, 2234, 2235, 71, 2236, 71,
2085
2086 2228, 2226, 2229, 2238, 2239, 2237, 2241, 2242, 71, 71,
2087 71, 2240, 2230, 2244, 2231, 2232, 71, 2243, 2904, 71,
2088 2245, 71, 71, 2247, 71, 2236, 71, 2246, 71, 71,
2089 2238, 2239, 2237, 2241, 71, 71, 2250, 2249, 2240, 71,
2090 2248, 2251, 2255, 2252, 2243, 71, 71, 2245, 71, 2253,
2091 71, 2257, 2254, 2256, 2246, 71, 2259, 2260, 71, 2258,
2092 2261, 2262, 71, 2250, 2249, 71, 71, 2248, 71, 2255,
2093 2252, 71, 2265, 2264, 2263, 2904, 2253, 71, 2257, 2254,
2094 2256, 71, 71, 71, 71, 2266, 2258, 71, 71, 71,
2095 2267, 2268, 2269, 2271, 71, 2270, 2272, 2273, 2274, 2265,
2096
2097 2264, 2263, 71, 2275, 71, 71, 71, 71, 2280, 2278,
2098 2276, 71, 2266, 2277, 2284, 71, 71, 2267, 2268, 2269,
2099 2271, 2281, 2270, 71, 2273, 71, 71, 2279, 71, 71,
2100 71, 2282, 2283, 2285, 2904, 2280, 2278, 2276, 71, 71,
2101 2277, 71, 71, 71, 2286, 71, 2287, 2288, 2281, 2289,
2102 2290, 71, 71, 71, 2279, 2291, 2293, 2292, 2282, 2283,
2103 2285, 71, 2296, 71, 2298, 2297, 2294, 71, 71, 71,
2104 2295, 2286, 2299, 2287, 2288, 71, 2289, 2290, 71, 71,
2105 2300, 71, 2291, 2293, 2292, 71, 2301, 2302, 71, 2296,
2106 2303, 2298, 2297, 2294, 2304, 2904, 2305, 2295, 2306, 2299,
2107
2108 2307, 2311, 71, 2308, 2309, 2904, 2904, 2300, 71, 71,
2109 71, 2310, 71, 2301, 71, 2334, 2318, 71, 71, 71,
2110 71, 2304, 71, 2305, 71, 2306, 2313, 2307, 2311, 2312,
2111 2308, 2309, 2314, 71, 71, 2315, 2316, 2320, 2310, 2317,
2112 2321, 2319, 71, 71, 2323, 71, 71, 71, 2324, 2325,
2113 71, 2322, 2326, 2313, 2904, 71, 2312, 71, 71, 2314,
2114 2332, 2327, 2315, 2316, 2320, 71, 2317, 71, 2319, 71,
2115 2330, 71, 71, 71, 2328, 2324, 2325, 2329, 2322, 2326,
2116 2333, 71, 2331, 71, 2335, 2342, 71, 71, 2327, 2904,
2117 71, 2336, 2337, 71, 2338, 2339, 2343, 2330, 2340, 2344,
2118
2119 71, 2328, 71, 71, 2329, 71, 2341, 71, 2345, 2331,
2120 71, 2335, 2342, 2347, 2351, 2904, 71, 2349, 2336, 2337,
2121 2350, 2338, 2339, 71, 71, 2340, 2344, 71, 71, 2346,
2122 2348, 71, 71, 2341, 2353, 71, 71, 71, 71, 2352,
2123 2347, 2351, 71, 2354, 2349, 2355, 71, 2350, 2356, 2358,
2124 71, 2357, 2359, 2361, 2360, 2904, 2346, 2348, 71, 2362,
2125 2363, 2353, 2367, 71, 2369, 71, 2352, 2365, 2371, 71,
2126 2354, 2364, 2355, 2368, 71, 71, 2358, 71, 2357, 71,
2127 2361, 2360, 71, 2366, 2370, 71, 2362, 71, 71, 71,
2128 71, 71, 71, 2372, 2365, 71, 2374, 2373, 2364, 2375,
2129
2130 2368, 2376, 2377, 2378, 2379, 2904, 71, 2382, 2384, 2380,
2131 2366, 2370, 71, 2904, 2381, 71, 2385, 71, 71, 2904,
2132 2372, 2383, 2386, 71, 2373, 71, 2375, 71, 2376, 71,
2133 2378, 2379, 71, 71, 71, 71, 2380, 2387, 71, 2388,
2134 2389, 2381, 2391, 2385, 71, 2390, 2392, 2904, 2383, 2386,
2135 71, 2393, 2394, 71, 2395, 2397, 2396, 2398, 2400, 71,
2136 71, 71, 2401, 71, 2387, 71, 2388, 2389, 71, 2391,
2137 2399, 71, 2390, 2392, 71, 2403, 71, 2402, 2393, 2394,
2138 71, 2395, 71, 2396, 71, 2400, 71, 2404, 2406, 2401,
2139 71, 2405, 2408, 2409, 2407, 2411, 2410, 2399, 2413, 2417,
2140
2141 71, 2412, 2415, 2414, 2402, 2416, 2904, 71, 2904, 71,
2142 71, 2418, 2904, 2419, 2404, 2406, 71, 71, 2405, 71,
2143 71, 2407, 71, 2410, 71, 71, 2420, 71, 2412, 2415,
2144 71, 71, 2416, 2421, 71, 71, 2422, 2423, 2418, 2424,
2145 2419, 2427, 2904, 2425, 71, 71, 2904, 2426, 2430, 2904,
2146 2428, 2429, 2904, 2420, 71, 71, 71, 71, 2904, 71,
2147 2421, 2432, 2431, 2422, 2423, 71, 2424, 2433, 2427, 2434,
2148 2425, 71, 71, 71, 2426, 2430, 71, 2428, 2429, 71,
2149 2435, 2439, 2436, 2443, 2437, 71, 2441, 2442, 2432, 2431,
2150 71, 71, 2438, 2440, 2433, 71, 2434, 2444, 71, 71,
2151
2152 71, 71, 2447, 2445, 71, 71, 2448, 2435, 71, 2436,
2153 71, 2437, 2450, 2441, 2442, 71, 2446, 2451, 2452, 2438,
2154 2440, 2453, 2904, 71, 2444, 71, 2449, 2454, 71, 2447,
2155 2445, 2457, 2904, 71, 2455, 2460, 2458, 2456, 2459, 2904,
2156 2461, 2462, 2463, 2446, 71, 71, 71, 71, 71, 71,
2157 71, 71, 2464, 2449, 2454, 71, 71, 2465, 2457, 71,
2158 2470, 2455, 2460, 2458, 2456, 2459, 71, 2461, 71, 71,
2159 2466, 2467, 2471, 2469, 2472, 2904, 2468, 71, 2473, 71,
2160 71, 2474, 2475, 2476, 71, 2477, 71, 2470, 2478, 2479,
2161 71, 71, 2480, 2481, 2485, 71, 2486, 2466, 2484, 71,
2162
2163 2469, 71, 71, 71, 71, 2473, 2487, 2482, 2474, 2475,
2164 2476, 71, 71, 2483, 71, 2478, 71, 2494, 2493, 2480,
2165 71, 71, 71, 71, 2490, 2484, 71, 2488, 71, 71,
2166 2491, 2492, 2489, 2487, 2482, 2497, 2499, 71, 71, 71,
2167 2483, 2495, 2496, 71, 2498, 2493, 2500, 2506, 2501, 71,
2168 71, 2490, 2502, 2507, 2508, 71, 71, 2491, 2492, 71,
2169 71, 2505, 71, 2499, 2509, 71, 71, 71, 2495, 2496,
2170 71, 2498, 2515, 2500, 2506, 2501, 71, 2503, 2504, 2502,
2171 2507, 2508, 2510, 71, 2511, 2514, 2520, 71, 2505, 2512,
2172 71, 71, 2516, 71, 2513, 2904, 2517, 71, 2518, 71,
2173
2174 2519, 2904, 2524, 71, 2503, 2504, 2521, 2522, 2527, 2510,
2175 2525, 2511, 2514, 2520, 71, 2523, 71, 71, 71, 2516,
2176 71, 71, 71, 2517, 71, 2518, 71, 2519, 71, 2524,
2177 2528, 2526, 2529, 2521, 2522, 71, 2530, 2525, 71, 2532,
2178 2531, 71, 2523, 2533, 2534, 2539, 2535, 2538, 2904, 2542,
2179 2536, 2537, 2540, 2904, 71, 2904, 71, 2528, 2526, 2529,
2180 71, 71, 2541, 71, 71, 71, 71, 2531, 71, 71,
2181 2533, 71, 71, 2535, 2538, 71, 2542, 2536, 2537, 2540,
2182 71, 2543, 2545, 2546, 2547, 2548, 2544, 2549, 2550, 2541,
2183 2551, 2554, 71, 2553, 71, 2904, 71, 2904, 2552, 2557,
2184
2185 71, 71, 2556, 71, 2555, 71, 2558, 2564, 71, 2545,
2186 2546, 71, 2548, 71, 2549, 2550, 71, 2551, 2559, 71,
2187 2553, 71, 2560, 71, 2561, 2552, 2557, 2562, 71, 2556,
2188 2563, 2555, 2565, 2558, 71, 2566, 2568, 2567, 2570, 2569,
2189 71, 2571, 2574, 71, 71, 2559, 71, 71, 2572, 2560,
2190 2573, 2561, 2575, 71, 2562, 71, 2577, 2563, 2578, 71,
2191 71, 71, 71, 2568, 2567, 2570, 2569, 71, 2576, 71,
2192 71, 2579, 71, 71, 71, 2572, 2904, 2573, 71, 2575,
2193 2580, 2581, 71, 2577, 2582, 2578, 2583, 2584, 2585, 2588,
2194 2586, 2587, 71, 2595, 71, 2576, 2594, 71, 71, 2590,
2195
2196 2593, 2589, 2904, 71, 71, 71, 2592, 2580, 71, 2597,
2197 71, 2582, 71, 2583, 2584, 71, 2588, 2586, 2587, 71,
2198 71, 2591, 71, 2594, 2596, 71, 2590, 2593, 2589, 71,
2199 2598, 2599, 71, 2592, 2600, 2601, 71, 71, 2602, 2603,
2200 2605, 2604, 2610, 2607, 2613, 2606, 71, 71, 2591, 71,
2201 71, 2596, 71, 2609, 2611, 71, 2608, 71, 2599, 2614,
2202 2621, 71, 2601, 71, 71, 2602, 2603, 71, 2604, 2610,
2203 2607, 71, 2606, 2612, 2616, 2615, 71, 2619, 71, 71,
2204 2609, 2611, 71, 2608, 2620, 2625, 71, 2618, 2622, 2626,
2205 2623, 71, 71, 2617, 2628, 71, 71, 2627, 2630, 2624,
2206
2207 2612, 71, 2615, 71, 2619, 71, 71, 2631, 2632, 71,
2208 2633, 2620, 71, 71, 2618, 2622, 2626, 2623, 2629, 2634,
2209 2617, 2628, 2635, 71, 2627, 71, 2624, 2638, 71, 2636,
2210 71, 2637, 71, 2641, 71, 2632, 2642, 2639, 2640, 71,
2211 2643, 2645, 71, 2644, 71, 2629, 2634, 71, 71, 2635,
2212 2646, 71, 2647, 2648, 2649, 2650, 2636, 2651, 2637, 71,
2213 71, 71, 2652, 71, 2639, 2640, 71, 2643, 71, 2653,
2214 2644, 2654, 2660, 2656, 71, 2655, 71, 71, 71, 2647,
2215 2648, 2649, 71, 71, 71, 2657, 2671, 2658, 2661, 71,
2216 71, 71, 71, 2659, 2664, 2663, 2653, 2662, 71, 71,
2217
2218 2656, 71, 2655, 2665, 71, 2666, 2667, 2668, 2904, 2669,
2219 2670, 71, 2657, 71, 2658, 2661, 2673, 2674, 71, 71,
2220 2659, 71, 2663, 71, 2662, 2672, 2675, 71, 2678, 2904,
2221 2665, 71, 2666, 71, 71, 71, 2669, 2670, 2676, 2677,
2222 71, 2679, 2680, 2673, 71, 71, 71, 2683, 71, 2682,
2223 71, 2681, 2672, 2675, 71, 2678, 71, 71, 2689, 2693,
2224 2684, 2686, 2685, 71, 71, 2676, 2677, 71, 2679, 2680,
2225 71, 71, 71, 2690, 2683, 2691, 2682, 2692, 2681, 2694,
2226 2687, 2688, 71, 2696, 2697, 2689, 71, 2684, 2686, 2685,
2227 71, 71, 2695, 2698, 2699, 71, 2700, 2701, 2702, 2703,
2228
2229 2690, 2704, 2691, 2705, 2692, 2706, 71, 2687, 2688, 2708,
2230 71, 71, 2709, 2707, 71, 71, 2710, 2711, 71, 2695,
2231 2713, 2714, 71, 2712, 71, 71, 71, 71, 2704, 2717,
2232 71, 71, 2706, 71, 2716, 2718, 2708, 71, 71, 71,
2233 2707, 2719, 2715, 2710, 2711, 2720, 71, 2713, 2714, 2721,
2234 2712, 71, 71, 2724, 2726, 71, 2717, 71, 2725, 2904,
2235 2722, 2716, 71, 2723, 2727, 2728, 71, 2729, 71, 2715,
2236 2904, 71, 2720, 71, 2730, 2731, 2721, 71, 71, 2733,
2237 2732, 2734, 2735, 2736, 2737, 71, 71, 2722, 71, 2738,
2238 2723, 2727, 2728, 2739, 2729, 2740, 71, 71, 2741, 2742,
2239
2240 2743, 2730, 2731, 71, 2744, 2745, 71, 2732, 2734, 71,
2241 71, 71, 71, 2746, 2747, 2750, 71, 2748, 71, 2749,
2242 71, 71, 71, 2751, 2752, 71, 71, 2743, 2753, 71,
2243 71, 71, 2745, 71, 2754, 2755, 71, 2756, 71, 2757,
2244 2746, 71, 2750, 71, 2748, 2758, 2749, 2759, 2760, 71,
2245 2751, 2752, 2904, 2904, 71, 71, 2761, 2762, 2764, 71,
2246 2763, 2754, 2755, 2766, 2756, 71, 2757, 71, 71, 71,
2247 2765, 71, 2758, 2904, 2759, 71, 2767, 2768, 2769, 71,
2248 71, 71, 2770, 2761, 2762, 2764, 71, 2763, 2771, 2772,
2249 2766, 2773, 2775, 2904, 2774, 2776, 71, 2765, 71, 2778,
2250
2251 71, 2777, 2779, 2767, 71, 71, 71, 71, 2780, 2770,
2252 2904, 71, 71, 2781, 71, 2771, 2772, 2782, 2773, 2775,
2253 2784, 2774, 2776, 71, 71, 71, 2778, 71, 2777, 2779,
2254 2783, 71, 2791, 2786, 71, 2780, 2785, 2787, 71, 71,
2255 2781, 2788, 2789, 71, 2782, 71, 2790, 2784, 71, 2792,
2256 2793, 2904, 2794, 71, 2795, 71, 2796, 2783, 2797, 71,
2257 2786, 2904, 2799, 2785, 2787, 2798, 71, 71, 2788, 2789,
2258 2807, 2800, 71, 2790, 2801, 2803, 2792, 71, 71, 2794,
2259 2802, 71, 71, 71, 2804, 2797, 71, 71, 2806, 2799,
2260 2805, 2808, 2798, 71, 2809, 71, 71, 71, 2800, 71,
2261
2262 2810, 2801, 2803, 71, 2811, 2812, 2814, 2802, 2813, 2816,
2263 2817, 2815, 71, 71, 2904, 2806, 71, 2805, 2808, 71,
2264 2820, 71, 2821, 2818, 2826, 71, 2819, 2810, 71, 2828,
2265 2822, 2811, 71, 2814, 71, 2813, 71, 71, 2815, 2823,
2266 71, 71, 71, 71, 2824, 2829, 71, 2820, 2825, 71,
2267 2818, 2826, 71, 2819, 2827, 71, 2828, 2822, 2831, 71,
2268 2830, 2832, 71, 2835, 2833, 2904, 2823, 71, 71, 2834,
2269 2836, 2824, 2829, 71, 2837, 2825, 2838, 71, 2839, 2843,
2270 71, 2827, 2840, 71, 2904, 2831, 2841, 2830, 2832, 2904,
2271 71, 2833, 71, 2842, 2844, 2845, 2834, 2836, 2904, 2848,
2272
2273 71, 71, 71, 2838, 71, 2839, 71, 2846, 71, 2840,
2274 2847, 71, 2854, 2841, 2851, 2849, 71, 2850, 71, 71,
2275 2842, 2844, 71, 71, 2852, 71, 2848, 2853, 2855, 2904,
2276 71, 2904, 71, 2861, 2846, 2858, 2904, 2847, 71, 2854,
2277 2856, 71, 2849, 2857, 2850, 2859, 71, 71, 2860, 2904,
2278 2862, 2852, 2863, 71, 2853, 71, 71, 71, 71, 2864,
2279 2861, 2866, 2858, 2865, 71, 2868, 2904, 2856, 2869, 2904,
2280 2857, 2870, 2859, 71, 71, 2860, 71, 2862, 2873, 2863,
2281 2871, 2867, 2876, 2904, 2874, 2875, 2864, 71, 2866, 71,
2282 2865, 71, 2868, 71, 71, 2869, 2872, 2877, 2870, 2878,
2283
2284 71, 2882, 2889, 2880, 71, 71, 71, 2871, 2867, 71,
2285 71, 2874, 2875, 2879, 2881, 2884, 2885, 71, 2904, 71,
2286 2888, 71, 71, 2872, 2877, 71, 2878, 2883, 71, 71,
2287 2880, 2886, 2904, 2892, 2893, 71, 2887, 71, 71, 71,
2288 2879, 2881, 2884, 2885, 71, 2890, 71, 2888, 2891, 2894,
2289 2895, 2896, 2898, 71, 2883, 2904, 71, 2900, 2886, 71,
2290 2892, 71, 2897, 2887, 2899, 71, 2902, 2903, 2904, 71,
2291 2904, 2904, 2890, 2901, 71, 2891, 2894, 71, 71, 2898,
2292 2904, 71, 71, 2904, 2900, 2904, 71, 2904, 2904, 2897,
2293 2904, 2899, 2904, 71, 71, 2904, 2904, 2904, 2904, 2904,
2294
2295 2901, 43, 43, 43, 43, 43, 43, 43, 48, 48,
2296 48, 48, 48, 48, 48, 53, 53, 53, 53, 53,
2297 53, 53, 59, 59, 59, 59, 59, 59, 59, 64,
2298 64, 64, 64, 64, 64, 64, 74, 74, 2904, 74,
2299 74, 74, 74, 140, 140, 2904, 2904, 2904, 140, 140,
2300 142, 142, 2904, 2904, 142, 2904, 142, 144, 2904, 2904,
2301 2904, 2904, 2904, 144, 147, 147, 2904, 2904, 2904, 147,
2302 147, 149, 2904, 2904, 2904, 2904, 2904, 149, 151, 151,
2303 2904, 151, 151, 151, 151, 75, 75, 2904, 75, 75,
2304 75, 75, 13, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
2305
2306 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
2307 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
2308 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
2309 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
2310 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
2311 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904
1500 392, 71, 403, 71, 2912, 398, 413, 399, 384, 71,
1501 390, 391, 393, 71, 71, 401, 412, 395, 71, 394,
1502 404, 396, 71, 397, 400, 71, 71, 411, 71, 403,
1503 71, 71, 398, 413, 399, 71, 422, 439, 419, 2912,
1504 417, 423, 401, 412, 418, 71, 1267, 404, 414, 424,
1505 415, 400, 405, 71, 411, 406, 420, 421, 71, 2912,
1506 407, 408, 409, 410, 71, 419, 416, 417, 71, 71,
1507
1508 71, 418, 71, 71, 71, 414, 424, 415, 428, 405,
1509 427, 71, 406, 420, 421, 429, 431, 407, 408, 409,
1510 410, 425, 71, 416, 426, 434, 71, 432, 433, 435,
1511 442, 71, 437, 71, 438, 428, 441, 427, 71, 71,
1512 71, 436, 429, 431, 71, 443, 71, 71, 425, 71,
1513 440, 426, 434, 71, 432, 433, 435, 71, 71, 437,
1514 444, 438, 71, 441, 454, 448, 445, 71, 436, 455,
1515 449, 446, 443, 447, 2912, 2912, 2912, 440, 71, 2912,
1516 456, 453, 71, 450, 2912, 2912, 451, 444, 452, 2912,
1517 71, 454, 448, 445, 71, 71, 467, 449, 446, 71,
1518
1519 447, 71, 71, 71, 471, 468, 457, 456, 453, 469,
1520 450, 71, 458, 451, 470, 452, 459, 71, 472, 483,
1521 494, 71, 474, 467, 460, 2912, 71, 71, 482, 486,
1522 71, 471, 468, 457, 473, 71, 469, 71, 487, 458,
1523 71, 470, 71, 459, 150, 472, 483, 494, 484, 474,
1524 71, 460, 461, 485, 462, 482, 486, 489, 488, 490,
1525 491, 473, 495, 492, 496, 487, 71, 463, 71, 71,
1526 464, 2912, 465, 497, 466, 71, 1022, 71, 71, 461,
1527 71, 462, 493, 71, 489, 488, 490, 491, 2912, 495,
1528 504, 499, 2912, 501, 463, 71, 71, 464, 71, 465,
1529
1530 497, 466, 475, 476, 498, 71, 500, 71, 71, 493,
1531 502, 503, 477, 71, 478, 479, 480, 506, 499, 481,
1532 501, 505, 71, 71, 71, 507, 509, 71, 512, 475,
1533 476, 498, 71, 500, 511, 2912, 508, 502, 503, 477,
1534 71, 478, 479, 480, 506, 71, 481, 71, 505, 71,
1535 71, 510, 507, 71, 516, 512, 513, 514, 71, 515,
1536 517, 511, 518, 508, 526, 71, 71, 521, 2912, 522,
1537 519, 71, 524, 2912, 525, 71, 71, 2912, 510, 2912,
1538 534, 516, 71, 2912, 523, 71, 515, 517, 520, 518,
1539 71, 526, 71, 527, 521, 71, 522, 519, 71, 524,
1540
1541 528, 525, 71, 529, 71, 533, 530, 534, 535, 71,
1542 536, 523, 538, 537, 541, 520, 71, 531, 71, 532,
1543 527, 539, 2912, 71, 71, 543, 540, 528, 71, 544,
1544 529, 71, 533, 530, 549, 535, 71, 536, 546, 538,
1545 542, 541, 71, 71, 531, 71, 532, 71, 539, 71,
1546 547, 71, 543, 540, 548, 550, 544, 551, 2912, 557,
1547 71, 553, 552, 554, 71, 546, 71, 542, 71, 71,
1548 2912, 555, 561, 2912, 71, 564, 2912, 547, 71, 556,
1549 71, 548, 550, 71, 551, 71, 557, 558, 553, 552,
1550 554, 559, 560, 562, 71, 563, 71, 71, 555, 561,
1551
1552 71, 71, 564, 565, 568, 566, 556, 71, 567, 71,
1553 71, 71, 569, 574, 558, 570, 71, 571, 559, 560,
1554 562, 71, 563, 572, 578, 71, 573, 579, 71, 581,
1555 565, 568, 566, 71, 71, 567, 71, 71, 71, 569,
1556 574, 71, 570, 575, 571, 576, 580, 577, 586, 582,
1557 572, 578, 71, 573, 71, 583, 591, 588, 587, 71,
1558 584, 71, 2912, 585, 71, 71, 589, 2912, 71, 71,
1559 575, 71, 576, 580, 577, 592, 582, 595, 2912, 71,
1560 71, 71, 583, 591, 588, 587, 593, 584, 594, 590,
1561 585, 71, 596, 597, 71, 598, 599, 71, 71, 610,
1562
1563 71, 600, 592, 613, 595, 71, 71, 71, 612, 71,
1564 601, 71, 654, 593, 71, 594, 590, 71, 2912, 596,
1565 597, 611, 598, 599, 71, 614, 610, 615, 600, 2912,
1566 613, 71, 2912, 71, 618, 612, 71, 601, 602, 71,
1567 616, 621, 2912, 603, 617, 604, 71, 619, 611, 620,
1568 71, 605, 614, 606, 615, 624, 607, 608, 2912, 71,
1569 71, 618, 71, 609, 71, 602, 71, 616, 621, 71,
1570 603, 617, 604, 625, 619, 622, 620, 626, 605, 627,
1571 606, 71, 624, 607, 608, 623, 71, 628, 632, 629,
1572 609, 71, 630, 631, 634, 2912, 633, 71, 2912, 639,
1573
1574 625, 643, 71, 71, 626, 71, 627, 71, 71, 636,
1575 637, 71, 623, 71, 628, 632, 629, 635, 71, 630,
1576 631, 634, 71, 633, 638, 640, 639, 641, 71, 645,
1577 642, 71, 71, 71, 644, 646, 636, 637, 648, 649,
1578 650, 71, 647, 71, 635, 71, 71, 659, 71, 71,
1579 71, 638, 640, 150, 641, 71, 645, 642, 651, 652,
1580 653, 644, 646, 71, 655, 648, 649, 650, 656, 647,
1581 657, 71, 71, 658, 659, 2912, 660, 662, 661, 71,
1582 667, 673, 663, 71, 71, 651, 652, 653, 71, 71,
1583 71, 71, 668, 671, 672, 656, 71, 669, 670, 71,
1584
1585 658, 664, 71, 660, 662, 661, 71, 667, 665, 663,
1586 674, 666, 71, 71, 675, 676, 677, 679, 678, 71,
1587 71, 71, 71, 680, 71, 670, 687, 681, 664, 682,
1588 683, 71, 684, 692, 2912, 665, 71, 71, 666, 71,
1589 685, 71, 71, 677, 679, 678, 71, 71, 71, 686,
1590 680, 688, 71, 71, 681, 689, 682, 683, 71, 684,
1591 694, 690, 691, 693, 71, 71, 699, 685, 698, 71,
1592 695, 700, 71, 71, 71, 696, 686, 71, 688, 697,
1593 71, 701, 689, 71, 705, 71, 2912, 694, 690, 691,
1594 693, 702, 71, 699, 71, 698, 703, 695, 700, 704,
1595
1596 707, 706, 696, 71, 713, 2912, 697, 708, 701, 71,
1597 710, 71, 711, 71, 2912, 71, 71, 2912, 702, 71,
1598 712, 715, 719, 703, 71, 2912, 704, 707, 706, 709,
1599 71, 713, 71, 717, 708, 714, 71, 710, 716, 711,
1600 720, 71, 71, 718, 71, 721, 722, 712, 715, 71,
1601 71, 723, 71, 71, 726, 71, 709, 71, 71, 724,
1602 717, 725, 714, 727, 730, 716, 2912, 720, 734, 71,
1603 718, 732, 721, 722, 71, 71, 728, 729, 723, 731,
1604 71, 726, 733, 736, 737, 735, 724, 71, 71, 739,
1605 727, 730, 738, 71, 740, 71, 741, 745, 732, 742,
1606
1607 71, 71, 751, 748, 747, 71, 731, 71, 71, 733,
1608 71, 737, 735, 71, 71, 71, 743, 744, 749, 738,
1609 746, 71, 71, 741, 71, 71, 742, 753, 71, 71,
1610 748, 747, 754, 750, 71, 752, 757, 755, 71, 756,
1611 759, 2912, 71, 743, 744, 749, 758, 746, 71, 71,
1612 71, 760, 761, 766, 753, 2912, 768, 767, 2912, 762,
1613 750, 71, 752, 757, 71, 71, 756, 759, 71, 764,
1614 2912, 71, 763, 758, 71, 765, 71, 71, 760, 761,
1615 71, 71, 71, 768, 767, 71, 762, 772, 769, 770,
1616 773, 775, 774, 776, 771, 71, 764, 777, 781, 763,
1617
1618 71, 71, 765, 71, 71, 71, 71, 71, 780, 2912,
1619 778, 2912, 71, 787, 772, 769, 770, 773, 71, 774,
1620 776, 771, 779, 71, 777, 781, 71, 782, 786, 789,
1621 71, 71, 783, 784, 785, 780, 71, 778, 71, 788,
1622 787, 71, 71, 790, 792, 793, 791, 794, 2912, 779,
1623 796, 71, 71, 798, 782, 786, 789, 71, 71, 783,
1624 784, 785, 71, 797, 71, 71, 788, 71, 795, 799,
1625 790, 792, 793, 791, 794, 71, 71, 796, 800, 801,
1626 798, 804, 802, 71, 803, 805, 816, 807, 2912, 71,
1627 797, 71, 806, 808, 809, 795, 799, 2912, 71, 71,
1628
1629 71, 71, 71, 810, 71, 800, 801, 812, 804, 802,
1630 71, 803, 805, 71, 807, 150, 811, 819, 71, 806,
1631 808, 809, 815, 813, 814, 71, 71, 820, 71, 71,
1632 810, 817, 821, 822, 812, 71, 826, 71, 71, 818,
1633 71, 823, 2912, 811, 71, 71, 824, 825, 71, 815,
1634 813, 814, 827, 828, 820, 831, 829, 71, 817, 821,
1635 830, 71, 71, 826, 71, 71, 818, 842, 823, 71,
1636 832, 833, 71, 824, 825, 71, 2912, 839, 71, 827,
1637 71, 840, 831, 829, 841, 71, 2912, 830, 71, 71,
1638 843, 71, 844, 847, 842, 2912, 845, 832, 833, 834,
1639
1640 2912, 71, 71, 835, 839, 846, 836, 850, 840, 71,
1641 851, 841, 849, 837, 71, 71, 838, 843, 848, 844,
1642 847, 71, 71, 845, 863, 71, 834, 71, 859, 860,
1643 835, 71, 846, 836, 850, 71, 2912, 2912, 864, 849,
1644 837, 865, 71, 838, 861, 848, 852, 853, 71, 854,
1645 71, 863, 855, 71, 866, 859, 860, 856, 862, 870,
1646 71, 71, 868, 857, 858, 71, 867, 2912, 865, 872,
1647 869, 861, 71, 852, 853, 2912, 854, 871, 71, 855,
1648 71, 866, 875, 71, 856, 862, 870, 873, 71, 868,
1649 857, 858, 71, 867, 71, 874, 872, 869, 877, 71,
1650
1651 876, 878, 71, 71, 871, 71, 71, 71, 879, 875,
1652 882, 880, 883, 881, 873, 884, 886, 888, 2912, 885,
1653 71, 71, 874, 71, 71, 877, 71, 876, 878, 887,
1654 71, 891, 892, 893, 71, 879, 71, 882, 880, 883,
1655 881, 894, 884, 895, 71, 889, 885, 896, 71, 897,
1656 890, 71, 899, 71, 898, 900, 887, 902, 891, 901,
1657 904, 903, 906, 71, 71, 71, 71, 2912, 894, 909,
1658 71, 71, 907, 71, 896, 71, 897, 71, 71, 71,
1659 71, 898, 71, 71, 902, 905, 901, 904, 903, 71,
1660 71, 908, 910, 71, 913, 911, 912, 914, 916, 907,
1661
1662 71, 71, 915, 918, 917, 71, 919, 2912, 923, 2912,
1663 71, 71, 905, 71, 71, 71, 71, 71, 908, 910,
1664 71, 913, 911, 912, 914, 916, 71, 920, 921, 915,
1665 918, 917, 71, 919, 922, 923, 71, 927, 924, 71,
1666 2912, 926, 928, 930, 931, 929, 925, 2912, 71, 71,
1667 932, 71, 71, 933, 920, 921, 934, 71, 71, 937,
1668 935, 922, 71, 71, 71, 924, 71, 71, 926, 928,
1669 930, 931, 929, 925, 940, 936, 938, 932, 71, 71,
1670 933, 939, 71, 934, 942, 71, 937, 935, 943, 71,
1671 947, 941, 944, 945, 946, 948, 71, 949, 950, 71,
1672
1673 2912, 2912, 936, 938, 71, 71, 71, 71, 939, 71,
1674 952, 942, 71, 957, 71, 943, 71, 947, 941, 944,
1675 945, 946, 71, 951, 949, 950, 953, 954, 955, 71,
1676 71, 956, 71, 71, 958, 959, 71, 952, 71, 960,
1677 961, 962, 963, 964, 965, 71, 71, 71, 969, 970,
1678 951, 71, 966, 953, 954, 955, 967, 968, 956, 71,
1679 974, 958, 971, 71, 976, 71, 960, 71, 972, 963,
1680 964, 965, 71, 71, 71, 969, 973, 71, 71, 966,
1681 975, 71, 978, 967, 968, 977, 71, 71, 979, 971,
1682 71, 71, 71, 980, 71, 972, 981, 2912, 982, 985,
1683
1684 986, 983, 2912, 973, 71, 71, 71, 975, 71, 978,
1685 984, 987, 977, 1000, 71, 150, 988, 71, 997, 71,
1686 980, 71, 999, 981, 71, 982, 985, 986, 983, 71,
1687 990, 998, 989, 2912, 71, 2912, 71, 984, 987, 71,
1688 71, 2912, 1002, 988, 71, 997, 2912, 2912, 1001, 999,
1689 71, 1007, 1003, 2912, 71, 1005, 1008, 990, 998, 989,
1690 991, 1004, 992, 1006, 71, 71, 993, 1009, 994, 1002,
1691 1019, 1020, 2912, 995, 71, 1001, 71, 71, 996, 1003,
1692 71, 1010, 1005, 71, 71, 1011, 2912, 991, 1004, 992,
1693 1006, 1012, 1014, 993, 1009, 994, 1015, 71, 1017, 1018,
1694
1695 995, 1013, 71, 71, 71, 996, 1021, 1023, 1010, 71,
1696 1016, 71, 1011, 71, 71, 1026, 71, 1024, 1012, 1014,
1697 71, 1025, 71, 1015, 71, 1017, 1018, 2912, 1013, 71,
1698 1034, 1035, 2912, 71, 1036, 2912, 1037, 1016, 1038, 71,
1699 2912, 2912, 1026, 2912, 1024, 71, 1041, 71, 1025, 1027,
1700 1039, 71, 1040, 71, 1028, 1044, 1029, 1034, 1035, 71,
1701 1047, 1036, 1030, 1037, 71, 1038, 1046, 1031, 1032, 1045,
1702 1042, 71, 71, 1041, 1033, 71, 1027, 1039, 71, 1040,
1703 1043, 1028, 71, 1029, 71, 1048, 1049, 1047, 71, 1030,
1704 1050, 1053, 71, 71, 1031, 1032, 1045, 1042, 71, 1051,
1705
1706 71, 1033, 1052, 1055, 1056, 1054, 1057, 1043, 1058, 71,
1707 71, 2912, 1048, 1049, 71, 1059, 71, 2912, 1053, 1066,
1708 1060, 71, 71, 71, 71, 1061, 1051, 71, 1063, 1052,
1709 1055, 1064, 1054, 1057, 1062, 1058, 71, 71, 71, 1065,
1710 71, 71, 1059, 71, 1067, 1068, 1066, 1060, 1069, 71,
1711 1081, 1070, 1061, 1071, 71, 1063, 1073, 71, 1064, 71,
1712 71, 1062, 1072, 1074, 71, 1076, 1065, 1075, 2912, 71,
1713 71, 1067, 71, 1077, 1078, 1069, 1080, 71, 1070, 71,
1714 1071, 1079, 71, 1073, 1082, 1088, 1083, 71, 1084, 1072,
1715 1074, 2912, 1076, 1085, 1075, 71, 71, 71, 71, 71,
1716
1717 1077, 1078, 71, 1080, 1086, 1089, 1091, 1087, 1079, 71,
1718 1090, 1082, 1088, 1083, 1092, 71, 1094, 71, 71, 1095,
1719 71, 1096, 2912, 1093, 2912, 1097, 71, 2912, 71, 1099,
1720 71, 1086, 1089, 1091, 1087, 71, 1098, 1090, 1100, 1102,
1721 1103, 1092, 71, 1101, 1104, 1108, 1095, 1105, 71, 71,
1722 1093, 71, 1097, 71, 71, 1107, 1099, 1109, 1106, 71,
1723 71, 71, 71, 1098, 1111, 1100, 1102, 1103, 71, 71,
1724 1101, 1104, 1110, 71, 1105, 2912, 71, 71, 1112, 2912,
1725 1113, 1115, 1107, 1114, 71, 1106, 1116, 1117, 1119, 71,
1726 71, 1111, 71, 71, 1120, 1118, 1121, 1122, 2912, 1110,
1727
1728 1124, 1127, 71, 1123, 1129, 1112, 71, 1113, 1115, 71,
1729 1114, 71, 1125, 1116, 1117, 1128, 1133, 1130, 71, 71,
1730 71, 71, 1118, 1121, 1122, 71, 71, 1126, 1131, 1132,
1731 1123, 71, 71, 71, 71, 71, 1134, 71, 71, 1125,
1732 71, 1135, 1128, 1133, 1130, 1138, 71, 1137, 1139, 1136,
1733 1140, 1142, 1141, 71, 1126, 1131, 1132, 71, 71, 1143,
1734 71, 1144, 71, 1134, 71, 1153, 1146, 1149, 1135, 71,
1735 1145, 2912, 1138, 71, 1137, 1148, 1136, 1159, 1142, 1141,
1736 71, 71, 71, 71, 71, 71, 71, 1150, 1144, 1151,
1737 1152, 71, 71, 1146, 1149, 71, 1154, 1145, 71, 1155,
1738
1739 1156, 1158, 1148, 1157, 71, 1160, 1161, 1162, 2912, 71,
1740 2912, 71, 71, 1163, 1150, 71, 1151, 1152, 1164, 71,
1741 1165, 1166, 1168, 1154, 1167, 71, 1155, 1156, 1158, 1169,
1742 1157, 1174, 1160, 1171, 71, 71, 2912, 71, 71, 71,
1743 1163, 71, 71, 71, 71, 1164, 1170, 1165, 1166, 1168,
1744 1172, 1167, 1175, 71, 71, 1173, 1169, 1176, 71, 1177,
1745 1171, 1179, 71, 71, 1178, 71, 71, 1180, 71, 1184,
1746 1185, 71, 2912, 1170, 1187, 1188, 1181, 1172, 1182, 1175,
1747 1186, 1183, 1173, 2912, 1176, 71, 1177, 71, 1179, 71,
1748 1191, 1178, 71, 1190, 1180, 71, 1184, 1185, 1192, 71,
1749
1750 71, 1187, 1188, 1181, 1189, 1182, 71, 1186, 1183, 1196,
1751 1193, 71, 71, 71, 1194, 1195, 1197, 1191, 1198, 1199,
1752 1190, 1202, 1200, 71, 1201, 1192, 71, 1205, 2912, 2912,
1753 71, 1189, 71, 2912, 2912, 71, 71, 1193, 71, 71,
1754 71, 1194, 1195, 1197, 71, 1198, 1199, 71, 1202, 1200,
1755 1203, 1201, 1204, 1206, 1205, 1207, 1208, 1209, 1210, 1211,
1756 1212, 1214, 71, 1218, 71, 71, 71, 71, 71, 71,
1757 1213, 1215, 71, 71, 1216, 1217, 71, 1203, 71, 1204,
1758 1206, 71, 1207, 1208, 1209, 1210, 1211, 1212, 1214, 1220,
1759 1219, 71, 1221, 71, 1223, 71, 1222, 1213, 1215, 71,
1760
1761 1224, 1216, 1217, 71, 1226, 1225, 2912, 1227, 71, 71,
1762 1228, 1236, 71, 1229, 1238, 1237, 1220, 1219, 71, 1221,
1763 71, 1223, 1242, 1222, 71, 71, 1239, 2912, 2912, 1240,
1764 1241, 1226, 71, 71, 1227, 1245, 2912, 1228, 1236, 71,
1765 1229, 1230, 1237, 1243, 1231, 1232, 71, 1244, 71, 1233,
1766 2912, 71, 71, 1239, 71, 1234, 1240, 1241, 1246, 1235,
1767 1250, 71, 1245, 71, 71, 71, 1247, 71, 1230, 71,
1768 1243, 1231, 1232, 1248, 1244, 1249, 1233, 1252, 1255, 1251,
1769 1256, 1254, 1234, 1253, 1257, 1246, 1235, 1250, 71, 71,
1770 71, 71, 71, 1247, 1258, 71, 1259, 71, 1260, 2912,
1771
1772 1248, 1268, 1249, 71, 1252, 1255, 1251, 1256, 1254, 2912,
1773 1253, 2912, 2912, 1266, 1269, 1271, 71, 71, 71, 1270,
1774 2912, 71, 1276, 1259, 71, 1260, 71, 1261, 1268, 1272,
1775 1273, 71, 1262, 2912, 1263, 1274, 1264, 71, 1265, 71,
1776 1266, 1269, 1271, 1275, 71, 71, 1270, 71, 71, 1276,
1777 1278, 1277, 1279, 1281, 1261, 2912, 1272, 2912, 1280, 1262,
1778 71, 1263, 71, 1264, 71, 1265, 71, 1283, 71, 1282,
1779 1275, 1284, 71, 1285, 1286, 1288, 1289, 1278, 1277, 1279,
1780 1281, 1290, 71, 71, 71, 1280, 1287, 1291, 71, 71,
1781 1292, 71, 1293, 71, 1283, 1297, 1282, 71, 1284, 1294,
1782
1783 1285, 1286, 1288, 71, 1295, 1296, 1299, 1301, 1290, 1300,
1784 1325, 1298, 71, 1287, 71, 71, 71, 1292, 71, 1293,
1785 1304, 71, 71, 71, 1302, 1306, 1294, 1309, 1308, 71,
1786 71, 1295, 1296, 71, 1301, 71, 1300, 1303, 1298, 1305,
1787 1310, 1307, 71, 71, 1311, 71, 71, 71, 71, 71,
1788 71, 1302, 1306, 71, 1309, 1308, 1312, 1313, 1316, 1314,
1789 1315, 2912, 1319, 2912, 1303, 71, 1305, 1310, 1307, 71,
1790 1317, 1311, 1318, 1320, 1326, 1328, 1323, 71, 1336, 2912,
1791 71, 71, 71, 1312, 1313, 1316, 1314, 1315, 71, 1319,
1792 1322, 1324, 71, 1321, 71, 71, 71, 1317, 1329, 1318,
1793
1794 1320, 1327, 71, 1323, 1330, 71, 71, 71, 1331, 1332,
1795 71, 71, 71, 1337, 1333, 1334, 71, 1322, 1324, 1338,
1796 1321, 71, 71, 71, 71, 1329, 1335, 1339, 1327, 1345,
1797 71, 1330, 2912, 1343, 1344, 1331, 71, 1340, 71, 1346,
1798 71, 1333, 1334, 1341, 1342, 71, 1338, 71, 71, 1349,
1799 71, 71, 1348, 1335, 71, 1347, 1345, 1351, 71, 71,
1800 1343, 1344, 71, 1350, 1340, 71, 1346, 1353, 1352, 1354,
1801 1341, 1342, 71, 1355, 1357, 1358, 1349, 71, 1356, 1348,
1802 1359, 1369, 1347, 71, 71, 71, 1361, 1360, 1368, 71,
1803 1350, 1366, 2912, 71, 1353, 1352, 1354, 1367, 71, 71,
1804
1805 71, 1357, 1358, 1362, 71, 71, 1363, 1359, 1369, 1364,
1806 71, 1370, 1365, 1361, 1360, 71, 71, 1371, 1366, 1373,
1807 71, 1372, 71, 1374, 1367, 71, 1375, 71, 71, 1376,
1808 1362, 71, 1381, 1363, 1377, 71, 1364, 1382, 1370, 1365,
1809 1379, 71, 1378, 1380, 1371, 71, 1373, 1385, 1372, 71,
1810 1374, 71, 71, 1375, 1383, 71, 1376, 1384, 71, 1381,
1811 71, 1377, 1386, 71, 1382, 71, 1387, 1379, 1389, 1378,
1812 1380, 1390, 1388, 2912, 71, 1392, 1393, 71, 1391, 71,
1813 71, 1383, 1394, 71, 1384, 71, 71, 1397, 1396, 1386,
1814 1399, 1395, 1402, 1387, 1403, 1389, 71, 71, 1390, 1388,
1815
1816 71, 1401, 1392, 1393, 71, 1391, 71, 1398, 1406, 1394,
1817 1400, 71, 1404, 71, 1397, 1396, 71, 1399, 1395, 71,
1818 1405, 1407, 1408, 71, 71, 1412, 71, 1409, 1401, 1410,
1819 2912, 1411, 1432, 1413, 1398, 71, 71, 1400, 71, 1404,
1820 71, 1416, 71, 71, 71, 71, 71, 1405, 1407, 1408,
1821 1414, 1415, 1412, 1417, 1409, 1424, 1410, 71, 1411, 71,
1822 1413, 1418, 1419, 71, 71, 1423, 71, 1420, 1416, 71,
1823 71, 1421, 71, 1427, 1428, 1425, 1422, 1414, 1415, 1426,
1824 1417, 71, 1424, 71, 2912, 1429, 1431, 71, 1418, 1433,
1825 1430, 71, 1423, 71, 71, 71, 71, 71, 1434, 71,
1826
1827 1427, 1428, 1425, 71, 1435, 1437, 1426, 1436, 1438, 2912,
1828 1439, 71, 1429, 1431, 1440, 71, 1433, 1430, 71, 1441,
1829 1442, 1445, 71, 1446, 1444, 1434, 71, 71, 71, 1443,
1830 71, 1447, 1437, 71, 1436, 1449, 71, 1439, 1448, 1450,
1831 71, 1440, 71, 1452, 1451, 1453, 1441, 1442, 1445, 71,
1832 1446, 1444, 1458, 71, 1454, 71, 1443, 71, 1447, 2912,
1833 1455, 71, 71, 71, 1456, 1448, 1450, 71, 71, 1462,
1834 1452, 1451, 1453, 1460, 71, 1461, 1459, 1457, 2912, 1458,
1835 71, 1454, 1470, 1463, 1464, 71, 71, 1455, 71, 1465,
1836 1466, 1456, 1467, 1471, 1469, 1476, 71, 1475, 1468, 71,
1837
1838 1460, 71, 1461, 1459, 1457, 71, 71, 71, 1474, 1472,
1839 1463, 1464, 71, 71, 71, 1478, 1465, 1466, 71, 1467,
1840 71, 1469, 1473, 71, 1475, 1468, 1477, 71, 71, 1480,
1841 71, 1479, 1481, 71, 1482, 1474, 1472, 1484, 1483, 1485,
1842 2912, 1486, 71, 71, 71, 71, 1488, 1490, 1487, 1473,
1843 1492, 2912, 71, 1477, 2912, 71, 71, 71, 1479, 1481,
1844 71, 1482, 71, 1489, 1484, 1483, 1485, 71, 1486, 71,
1845 1491, 71, 1493, 1488, 1490, 1487, 71, 1492, 1495, 1494,
1846 71, 71, 1496, 71, 1498, 1497, 1501, 1506, 1499, 1500,
1847 1489, 71, 1504, 71, 1502, 1503, 2912, 1491, 71, 1493,
1848
1849 1507, 71, 71, 71, 1509, 1495, 1494, 1510, 71, 1496,
1850 71, 1498, 1497, 71, 1506, 1499, 1500, 71, 71, 1504,
1851 1505, 1502, 1503, 71, 1508, 71, 71, 1507, 1511, 1512,
1852 1518, 1509, 71, 1515, 71, 1513, 1514, 71, 1516, 2912,
1853 71, 1517, 71, 71, 2912, 2912, 71, 1505, 1522, 2912,
1854 1525, 1508, 71, 1521, 1519, 1511, 1512, 1518, 1524, 1520,
1855 1515, 71, 1513, 1514, 1530, 1516, 71, 71, 1517, 1523,
1856 71, 71, 71, 1526, 1528, 1522, 71, 1525, 2912, 2912,
1857 1521, 1519, 1527, 71, 1529, 1524, 1520, 1531, 1533, 71,
1858 1534, 71, 1532, 71, 1535, 71, 1523, 71, 1536, 1537,
1859
1860 1547, 2912, 2912, 2912, 1540, 71, 71, 1538, 1542, 1527,
1861 71, 1529, 71, 71, 1531, 1533, 71, 1534, 1539, 1532,
1862 71, 1535, 1541, 71, 71, 1536, 1537, 1552, 71, 1543,
1863 71, 1540, 71, 1548, 1538, 1542, 71, 1544, 1553, 1549,
1864 1545, 1550, 1551, 1557, 71, 1539, 2912, 1555, 71, 1541,
1865 1554, 71, 1546, 2912, 1552, 71, 1543, 71, 1556, 1558,
1866 1548, 71, 1559, 71, 1544, 1564, 1549, 1545, 1550, 1551,
1867 71, 1560, 71, 71, 1555, 71, 71, 1554, 1563, 1546,
1868 71, 71, 1561, 1565, 71, 1556, 1558, 1562, 1567, 1559,
1869 71, 1566, 1568, 2912, 71, 1569, 71, 71, 1560, 1570,
1870
1871 1573, 1571, 71, 1572, 1574, 1563, 2912, 71, 1575, 1561,
1872 1577, 71, 71, 71, 1562, 71, 1576, 71, 1566, 1568,
1873 71, 71, 1569, 71, 1578, 71, 71, 1573, 1571, 71,
1874 1572, 1574, 1579, 1580, 1581, 1575, 1582, 1577, 71, 1583,
1875 71, 71, 1584, 1576, 1588, 71, 1585, 1593, 1586, 71,
1876 1587, 1578, 1589, 71, 1590, 2912, 71, 71, 1591, 71,
1877 1580, 1581, 1592, 1582, 71, 71, 1583, 71, 1594, 71,
1878 71, 1588, 2912, 1585, 1593, 1586, 71, 1587, 1601, 1589,
1879 71, 1590, 1597, 1595, 1602, 1591, 1596, 1598, 71, 1592,
1880 1603, 1604, 1599, 71, 1600, 1594, 71, 1619, 1605, 71,
1881
1882 1606, 71, 71, 1607, 1609, 1601, 71, 71, 1608, 1597,
1883 1595, 71, 71, 1596, 1598, 1610, 1611, 71, 1604, 1599,
1884 1612, 1600, 71, 1613, 71, 1605, 1614, 1606, 71, 71,
1885 71, 1609, 1615, 1616, 71, 1608, 1617, 71, 71, 1618,
1886 71, 1620, 1610, 1611, 71, 1621, 1623, 1612, 1622, 1626,
1887 1613, 71, 71, 1614, 1624, 71, 1628, 71, 1625, 1615,
1888 1616, 1629, 71, 1617, 71, 71, 1618, 71, 71, 71,
1889 1633, 1630, 1621, 1623, 1631, 1622, 1626, 1627, 1632, 71,
1890 1637, 1624, 71, 1628, 1634, 1625, 1639, 71, 1629, 71,
1891 1635, 1643, 71, 1636, 1640, 71, 71, 1633, 1630, 1641,
1892
1893 71, 1631, 1642, 1638, 1627, 1632, 1645, 1637, 71, 71,
1894 1644, 1634, 1646, 1639, 1647, 71, 1648, 1635, 1649, 71,
1895 1636, 1652, 1651, 71, 1650, 1656, 71, 1657, 1653, 1642,
1896 1638, 71, 1654, 71, 2912, 71, 71, 1644, 1655, 71,
1897 1668, 1647, 71, 1660, 71, 1649, 71, 1662, 71, 1651,
1898 1658, 1650, 1659, 71, 1657, 1653, 71, 71, 71, 1654,
1899 71, 71, 71, 1661, 1663, 1655, 1666, 1664, 1669, 1665,
1900 1660, 1670, 71, 1675, 1662, 1672, 1671, 1658, 71, 1659,
1901 71, 71, 71, 71, 71, 71, 1678, 1667, 1679, 1673,
1902 1661, 1663, 1674, 71, 1664, 71, 1665, 71, 1670, 1676,
1903
1904 71, 1677, 1672, 1671, 71, 71, 71, 1681, 2912, 1682,
1905 1680, 1683, 71, 1678, 1667, 71, 1673, 71, 1684, 1674,
1906 1686, 1685, 1688, 1687, 71, 2912, 1676, 1690, 1677, 1692,
1907 71, 71, 1699, 71, 1681, 71, 1682, 1680, 1683, 71,
1908 71, 1694, 71, 1689, 1691, 1684, 1693, 1686, 1685, 71,
1909 1687, 71, 71, 1702, 1690, 1697, 71, 1695, 1698, 71,
1910 1696, 71, 1700, 71, 71, 71, 1703, 1701, 1694, 1705,
1911 1689, 1691, 71, 1693, 71, 71, 71, 71, 1704, 1706,
1912 1702, 1707, 1697, 1708, 1695, 1698, 1709, 1696, 2912, 1700,
1913 1712, 1711, 1710, 71, 1701, 1714, 71, 1713, 2912, 71,
1914
1915 71, 71, 71, 1715, 71, 1704, 1706, 71, 1707, 1717,
1916 1718, 1716, 71, 71, 71, 71, 71, 1712, 1711, 1710,
1917 71, 1720, 1714, 1721, 1713, 1719, 1722, 1724, 71, 1725,
1918 1715, 71, 1726, 71, 71, 1727, 1717, 1718, 1716, 1723,
1919 71, 71, 1735, 1728, 71, 71, 1730, 1729, 1720, 71,
1920 1721, 1731, 1719, 1722, 1724, 71, 1725, 71, 71, 71,
1921 1732, 1736, 1733, 1737, 1734, 1738, 1723, 71, 71, 1735,
1922 1728, 1739, 71, 1730, 1729, 71, 1740, 1741, 1731, 1743,
1923 1742, 1745, 1744, 71, 1746, 71, 71, 1732, 71, 1733,
1924 71, 1734, 1738, 1747, 1749, 1750, 1751, 71, 71, 1754,
1925
1926 1752, 1748, 71, 1740, 1741, 71, 71, 1742, 71, 1744,
1927 71, 1746, 1753, 71, 1755, 1756, 1757, 1759, 1761, 2912,
1928 71, 1758, 1750, 1751, 71, 71, 71, 71, 1748, 71,
1929 1760, 71, 1765, 1762, 1769, 1768, 1766, 71, 71, 1753,
1930 71, 1755, 1756, 1757, 1759, 71, 1763, 71, 1758, 1767,
1931 71, 1764, 1770, 1773, 1774, 71, 1775, 1760, 1778, 1765,
1932 1762, 71, 1768, 1766, 1771, 71, 71, 1772, 1776, 1777,
1933 71, 71, 1779, 71, 71, 71, 1767, 1781, 71, 1770,
1934 71, 1774, 71, 1775, 71, 1778, 1780, 1782, 1783, 71,
1935 1784, 1771, 1785, 71, 1772, 1776, 1777, 1786, 71, 71,
1936
1937 1787, 1788, 2912, 1790, 71, 1793, 71, 71, 71, 1789,
1938 1792, 71, 1797, 1780, 1782, 1783, 1791, 1784, 1796, 1785,
1939 1800, 71, 1795, 71, 1794, 71, 1799, 71, 1788, 71,
1940 1790, 71, 1793, 71, 71, 1798, 1789, 1792, 1801, 1802,
1941 71, 1803, 71, 1791, 71, 1796, 71, 1804, 1805, 1795,
1942 1806, 1794, 71, 1799, 1807, 71, 1808, 1812, 71, 1810,
1943 71, 1811, 1798, 71, 1809, 71, 71, 1814, 1803, 71,
1944 71, 1813, 2912, 71, 1804, 1805, 1815, 1806, 71, 71,
1945 71, 1807, 1821, 1808, 1819, 1818, 1810, 71, 1811, 71,
1946 1817, 1809, 1816, 71, 1814, 1822, 71, 71, 1813, 71,
1947
1948 1820, 1824, 1823, 1815, 1828, 71, 1831, 1825, 71, 1821,
1949 1826, 1819, 1818, 1832, 71, 1827, 71, 1817, 1829, 1816,
1950 71, 1835, 1822, 1830, 71, 1833, 71, 1820, 71, 1823,
1951 71, 71, 71, 1831, 1825, 71, 71, 1826, 1837, 1834,
1952 1832, 1838, 1827, 1836, 1840, 1829, 71, 1839, 1845, 1846,
1953 1830, 1841, 1833, 71, 1847, 71, 1842, 1844, 1849, 1848,
1954 71, 1843, 1850, 1854, 71, 1837, 1834, 71, 71, 71,
1955 1836, 1840, 71, 71, 1839, 71, 71, 1852, 1841, 1851,
1956 71, 1853, 1855, 1842, 1844, 1857, 71, 1856, 1843, 1858,
1957 71, 71, 1859, 1860, 71, 71, 71, 71, 71, 71,
1958
1959 71, 1861, 1862, 1863, 1852, 1864, 1851, 1866, 1853, 1855,
1960 71, 1868, 1857, 71, 1856, 1865, 1858, 71, 71, 1867,
1961 1860, 1869, 1871, 1872, 71, 1873, 1883, 2912, 1870, 1862,
1962 1863, 71, 1864, 71, 1866, 71, 1874, 71, 71, 1876,
1963 1875, 1877, 1865, 1879, 71, 71, 1867, 71, 71, 1878,
1964 1872, 1882, 1873, 71, 71, 1870, 1880, 71, 71, 1881,
1965 1885, 71, 1884, 1874, 71, 71, 1876, 1875, 1877, 71,
1966 1879, 71, 1886, 71, 71, 1887, 1878, 1888, 1882, 1889,
1967 71, 1890, 71, 1880, 71, 1891, 1881, 1885, 1892, 1884,
1968 71, 1893, 1894, 71, 71, 1900, 1895, 71, 1898, 1886,
1969
1970 2912, 1899, 71, 1896, 1888, 1902, 1889, 71, 1890, 71,
1971 1906, 71, 1891, 71, 1897, 1892, 1901, 1904, 1893, 71,
1972 71, 71, 1900, 1895, 71, 1898, 1905, 1903, 1899, 71,
1973 1896, 1907, 1902, 71, 71, 1908, 1909, 71, 1910, 71,
1974 71, 1897, 1912, 1901, 1904, 1914, 71, 71, 1911, 1913,
1975 71, 1916, 1915, 1905, 1903, 71, 2912, 2912, 1907, 71,
1976 1918, 71, 1908, 1909, 1917, 1910, 1919, 2912, 1920, 2912,
1977 1921, 71, 1914, 71, 71, 1911, 1913, 71, 71, 1915,
1978 71, 1923, 1932, 71, 1922, 1924, 1925, 1918, 71, 1928,
1979 71, 1917, 1927, 1919, 71, 1920, 71, 1921, 1926, 71,
1980
1981 71, 71, 1929, 1931, 71, 1936, 1933, 1930, 1923, 71,
1982 71, 1922, 1924, 1925, 71, 71, 1928, 1934, 71, 1927,
1983 1938, 1935, 1940, 1942, 71, 1926, 1939, 71, 1937, 1929,
1984 1931, 71, 1936, 1933, 1930, 71, 1941, 1944, 1943, 1945,
1985 2912, 1951, 71, 71, 1934, 71, 71, 1938, 1935, 1940,
1986 1942, 71, 1946, 1939, 1948, 1937, 71, 71, 71, 1947,
1987 1949, 1950, 71, 1941, 1944, 1943, 1945, 71, 71, 1952,
1988 71, 1953, 1954, 1955, 71, 2912, 1958, 2912, 1959, 1946,
1989 1956, 1948, 1957, 71, 71, 71, 1947, 1949, 1950, 1960,
1990 1961, 71, 1964, 71, 1962, 71, 1952, 71, 1953, 1954,
1991
1992 1955, 1965, 71, 1958, 71, 71, 1963, 1956, 1966, 1957,
1993 71, 71, 1967, 71, 71, 1968, 1960, 1961, 1969, 1964,
1994 2912, 1962, 71, 2912, 71, 1970, 1971, 1974, 71, 1972,
1995 1975, 2912, 1976, 1963, 71, 1966, 1977, 1973, 2912, 1967,
1996 1982, 2912, 1968, 1978, 1981, 71, 71, 71, 71, 2022,
1997 71, 71, 1970, 1971, 71, 1983, 1972, 1975, 71, 1976,
1998 1984, 71, 71, 1977, 1973, 1979, 1985, 1982, 1980, 71,
1999 1978, 1981, 1988, 1986, 1987, 1989, 1990, 1993, 1991, 2912,
2000 1992, 71, 1994, 71, 71, 71, 2023, 71, 71, 71,
2001 71, 71, 1979, 1985, 71, 1980, 2912, 71, 71, 1988,
2002
2003 1986, 1987, 1989, 1990, 71, 1991, 1995, 1992, 1996, 1994,
2004 1997, 1999, 1998, 2000, 2001, 71, 2004, 2912, 71, 71,
2005 2002, 71, 2003, 71, 71, 2007, 71, 2008, 71, 2013,
2006 2912, 71, 2005, 1995, 71, 1996, 2009, 1997, 1999, 1998,
2007 2000, 2001, 71, 2004, 71, 2006, 71, 2002, 71, 2003,
2008 2012, 2010, 2007, 71, 2008, 2011, 71, 71, 2014, 2005,
2009 71, 2015, 2016, 2009, 2017, 2019, 2912, 2025, 71, 2020,
2010 71, 2018, 2006, 2024, 2021, 2027, 71, 2012, 2010, 71,
2011 2036, 2028, 2011, 2026, 2032, 2014, 71, 71, 71, 2016,
2012 71, 2017, 2019, 71, 2025, 2029, 2031, 71, 2018, 2033,
2013
2014 2024, 71, 71, 2034, 2035, 2037, 2030, 71, 2028, 2038,
2015 2026, 71, 71, 71, 71, 2039, 2040, 2041, 71, 2052,
2016 2912, 2042, 2029, 2031, 2044, 71, 2033, 71, 2046, 2912,
2017 2034, 2035, 2037, 2030, 2043, 71, 2038, 2045, 71, 71,
2018 2049, 71, 71, 2040, 71, 2048, 71, 71, 2042, 71,
2019 71, 2044, 2047, 2053, 2050, 2046, 71, 71, 2051, 2054,
2020 2055, 2043, 71, 71, 2045, 2056, 71, 2049, 2057, 71,
2021 2058, 71, 2048, 2062, 2059, 2060, 71, 2912, 71, 2047,
2022 2053, 2050, 71, 71, 2061, 2051, 2054, 2055, 2063, 71,
2023 2064, 2065, 2056, 71, 2070, 2057, 71, 2058, 71, 71,
2024
2025 71, 2059, 2060, 2067, 2066, 2068, 71, 71, 71, 71,
2026 2069, 2061, 2072, 71, 2071, 2063, 71, 2064, 2065, 2073,
2027 71, 2070, 2075, 2074, 71, 2076, 2077, 2912, 2078, 2079,
2028 2067, 2066, 2068, 2080, 2082, 2912, 71, 2069, 71, 2072,
2029 71, 2071, 2083, 2086, 2087, 2081, 71, 71, 71, 2075,
2030 2074, 2088, 2076, 2077, 71, 2078, 71, 71, 2089, 2084,
2031 71, 2082, 2085, 2092, 2091, 71, 71, 2090, 71, 2083,
2032 71, 2087, 2081, 71, 71, 2093, 2094, 71, 2088, 71,
2033 2095, 2097, 2099, 2096, 71, 2089, 2084, 2098, 2100, 2085,
2034 71, 2091, 71, 2101, 2090, 2103, 2912, 2912, 2102, 71,
2035
2036 2107, 2106, 71, 2094, 71, 2104, 2109, 71, 71, 2099,
2037 2096, 71, 2112, 71, 2098, 71, 2105, 2110, 71, 2111,
2038 71, 2108, 2103, 71, 71, 2102, 71, 71, 2106, 71,
2039 2113, 2115, 2104, 71, 2116, 2117, 71, 2119, 2124, 2112,
2040 71, 2118, 71, 2105, 2110, 2114, 2111, 71, 2108, 71,
2041 2121, 2122, 2120, 2123, 71, 2126, 71, 2113, 71, 71,
2042 2128, 2116, 2117, 71, 71, 71, 2125, 71, 2118, 2127,
2043 2134, 2130, 2114, 2131, 71, 2133, 71, 2121, 2122, 2120,
2044 2123, 71, 2126, 2129, 2132, 71, 71, 71, 71, 2135,
2045 71, 71, 2136, 2125, 2137, 2138, 2127, 2134, 2130, 71,
2046
2047 2131, 71, 2133, 2139, 2140, 2143, 71, 2142, 2147, 71,
2048 2129, 2132, 2141, 71, 71, 2145, 2135, 71, 2146, 2136,
2049 71, 2137, 2138, 2144, 71, 71, 71, 71, 2148, 2150,
2050 2139, 2140, 2143, 2912, 2142, 2147, 2151, 71, 2149, 2141,
2051 71, 2912, 2145, 2154, 71, 2146, 2152, 2153, 2155, 71,
2052 2144, 2156, 2161, 2157, 2160, 2162, 2163, 71, 71, 2158,
2053 71, 71, 2166, 2151, 2159, 2149, 2167, 71, 71, 71,
2054 2154, 71, 71, 2152, 2153, 2155, 2165, 71, 2156, 71,
2055 2157, 2160, 71, 2163, 71, 2164, 2158, 71, 71, 2166,
2056 2174, 2159, 71, 2168, 71, 2170, 2172, 2171, 71, 2173,
2057
2058 2176, 2169, 71, 2165, 2175, 2912, 2177, 71, 2181, 2912,
2059 71, 2912, 2164, 2185, 2178, 2912, 71, 71, 71, 71,
2060 2168, 71, 2170, 2172, 2171, 71, 2173, 2176, 2169, 2180,
2061 2179, 2175, 71, 2177, 2184, 2181, 2182, 2187, 2183, 2192,
2062 71, 2178, 71, 2186, 71, 71, 2189, 2188, 2190, 71,
2063 2191, 2194, 2912, 2912, 2193, 2912, 2180, 2179, 71, 2196,
2064 2195, 2184, 2198, 2182, 71, 2183, 71, 71, 71, 71,
2065 2186, 71, 71, 2189, 2188, 71, 2197, 71, 2194, 2199,
2066 71, 2193, 71, 2200, 71, 2201, 2196, 2195, 71, 2198,
2067 2203, 2202, 2204, 2205, 2206, 2207, 2912, 2209, 2210, 71,
2068
2069 2215, 2208, 71, 2197, 71, 71, 2199, 71, 71, 71,
2070 2200, 2212, 71, 71, 2211, 2214, 71, 2203, 2202, 2204,
2071 2205, 71, 2207, 71, 2209, 2210, 2213, 71, 2208, 2216,
2072 2217, 2912, 71, 71, 71, 2218, 2219, 71, 2212, 71,
2073 2220, 2211, 2214, 2222, 2226, 71, 71, 2221, 2223, 2225,
2074 71, 2224, 2229, 2213, 2227, 2912, 2216, 2217, 71, 2228,
2075 2231, 71, 2218, 2219, 2230, 2232, 71, 2233, 71, 2912,
2076 2222, 2226, 71, 71, 2221, 2223, 2225, 71, 2224, 71,
2077 71, 2227, 71, 71, 71, 2235, 2228, 71, 2234, 2236,
2078 2912, 2230, 2232, 2241, 71, 2237, 2239, 71, 71, 2240,
2079
2080 71, 2238, 71, 2242, 2243, 2244, 2246, 2247, 2245, 2252,
2081 2912, 71, 2235, 2250, 2912, 2234, 2236, 71, 71, 71,
2082 71, 71, 2237, 2239, 2249, 2251, 2240, 2912, 2238, 71,
2083 71, 71, 2244, 2246, 2247, 2245, 71, 2248, 2253, 71,
2084 71, 71, 2254, 71, 2255, 71, 2257, 71, 2256, 2912,
2085 2258, 2249, 2251, 2259, 71, 71, 71, 2260, 2262, 2261,
2086 2265, 2263, 2267, 2912, 2248, 2253, 2268, 71, 2266, 2254,
2087 2269, 71, 2270, 2257, 71, 2256, 71, 2258, 2264, 71,
2088 71, 71, 2273, 71, 2260, 2262, 2261, 2265, 2263, 71,
2089 71, 71, 2271, 71, 2272, 2266, 2274, 71, 2275, 71,
2090
2091 2276, 2277, 2912, 71, 71, 2264, 2278, 71, 2280, 2273,
2092 2282, 2283, 2281, 71, 2284, 71, 71, 2285, 2279, 2271,
2093 71, 2272, 71, 2274, 71, 2275, 2286, 2276, 2277, 71,
2094 71, 2292, 71, 2278, 2287, 71, 2288, 71, 71, 2281,
2095 2289, 2284, 2293, 71, 2285, 2279, 71, 2290, 2291, 71,
2096 2294, 71, 2295, 2286, 71, 71, 2296, 2912, 71, 71,
2097 71, 2287, 71, 2288, 2299, 2297, 2301, 2289, 71, 2293,
2098 71, 2298, 2303, 2302, 2290, 2291, 2300, 2294, 71, 2295,
2099 2306, 71, 2304, 2296, 71, 71, 2308, 71, 2309, 2307,
2100 71, 2299, 2297, 2301, 71, 2310, 2311, 2305, 2298, 2303,
2101
2102 2302, 71, 71, 2300, 71, 2312, 2912, 2306, 71, 2304,
2103 71, 2313, 2315, 2308, 2314, 2309, 2307, 2316, 2317, 2319,
2104 2318, 71, 71, 71, 2305, 2320, 71, 71, 71, 2321,
2105 71, 71, 2312, 71, 2324, 2322, 71, 71, 2313, 2315,
2106 71, 2314, 2323, 71, 2316, 2317, 2319, 2318, 2325, 71,
2107 2326, 2329, 2320, 71, 2327, 2328, 2321, 2331, 2330, 71,
2108 2334, 2324, 2322, 2332, 2342, 2340, 2912, 2341, 2912, 2323,
2109 2333, 2335, 71, 71, 71, 2325, 71, 71, 71, 71,
2110 71, 2327, 2328, 71, 71, 2330, 2336, 2334, 2338, 2912,
2111 2332, 2337, 71, 2339, 71, 71, 71, 2333, 2335, 71,
2112
2113 71, 71, 2343, 2346, 2344, 2347, 2345, 2912, 2351, 2350,
2114 2348, 71, 71, 2336, 71, 2338, 71, 71, 2337, 2349,
2115 2339, 2353, 2352, 2912, 2912, 71, 2355, 2912, 2912, 2343,
2116 2346, 2344, 2347, 2345, 71, 71, 2350, 2348, 2358, 2357,
2117 2359, 71, 2354, 2356, 71, 71, 2349, 71, 71, 2352,
2118 71, 71, 2360, 2355, 71, 2361, 2363, 2362, 2364, 71,
2119 2365, 2367, 71, 71, 71, 2358, 2357, 2359, 2366, 2354,
2120 2356, 2368, 71, 2370, 2369, 2371, 2372, 71, 2375, 2360,
2121 71, 2377, 2361, 2363, 2362, 71, 71, 2365, 71, 2379,
2122 71, 2376, 2373, 2382, 71, 2366, 71, 2374, 2368, 71,
2123
2124 2370, 2369, 71, 2372, 71, 71, 71, 2378, 71, 2380,
2125 2381, 2912, 2383, 2385, 2386, 71, 71, 2384, 2376, 2373,
2126 71, 2387, 71, 2390, 2374, 71, 2392, 2388, 71, 2389,
2127 2391, 71, 2912, 2393, 2378, 71, 2380, 2381, 71, 2383,
2128 71, 2386, 71, 2394, 2384, 71, 2395, 71, 2387, 2396,
2129 71, 2912, 2401, 71, 2388, 71, 2389, 2391, 2397, 71,
2130 2393, 2398, 2399, 2400, 71, 71, 2404, 2912, 2405, 71,
2131 2394, 71, 2402, 2395, 2403, 2406, 2396, 71, 71, 2401,
2132 71, 2411, 71, 2407, 2408, 2397, 2912, 2412, 2398, 2399,
2133 2400, 2409, 2414, 2404, 71, 71, 71, 2413, 2410, 2402,
2134
2135 71, 2403, 71, 71, 71, 2415, 71, 71, 2416, 71,
2136 2407, 2408, 2417, 71, 2412, 2418, 2419, 2420, 2409, 2414,
2137 2428, 2421, 2425, 71, 2413, 2410, 2422, 71, 2423, 71,
2138 2424, 2912, 2415, 2426, 2429, 71, 2427, 2912, 71, 71,
2139 2430, 71, 2418, 71, 2420, 2434, 71, 2428, 2431, 2432,
2140 71, 2433, 71, 71, 71, 2423, 71, 2424, 71, 71,
2141 2426, 2429, 2435, 2427, 71, 2436, 2437, 2430, 2439, 71,
2142 71, 2438, 2434, 71, 2442, 2431, 2432, 71, 2433, 2440,
2143 71, 2441, 71, 2444, 2443, 2447, 2446, 71, 71, 2435,
2144 2912, 71, 2436, 2437, 71, 2439, 2445, 71, 2438, 71,
2145
2146 71, 2442, 71, 71, 2449, 2450, 2440, 2448, 2441, 2451,
2147 2444, 2443, 71, 2446, 2453, 71, 2452, 71, 2454, 2455,
2148 2456, 2458, 71, 2445, 71, 71, 71, 2457, 2459, 71,
2149 2460, 2449, 2450, 2912, 2448, 2912, 71, 2461, 2462, 2463,
2150 2464, 2453, 71, 2452, 2912, 2454, 2455, 71, 2466, 2465,
2151 2912, 2469, 2470, 71, 2457, 2467, 2471, 71, 71, 2472,
2152 71, 71, 71, 71, 71, 2462, 2463, 2464, 71, 2468,
2153 2473, 71, 2478, 2474, 2479, 2466, 2465, 71, 2469, 71,
2154 71, 71, 2467, 71, 2475, 2477, 71, 2480, 2912, 2476,
2155 2482, 2481, 71, 2483, 2485, 2487, 2468, 71, 71, 2478,
2156
2157 2474, 71, 71, 2484, 71, 2486, 2489, 2488, 2493, 2490,
2158 71, 2492, 2477, 2502, 71, 71, 71, 2482, 2481, 71,
2159 2483, 71, 71, 71, 71, 2494, 2491, 2495, 2501, 2912,
2160 2484, 71, 2486, 71, 2488, 71, 2490, 2496, 2492, 2498,
2161 71, 2499, 2497, 71, 2500, 71, 2505, 2504, 71, 71,
2162 71, 71, 71, 2491, 2495, 2501, 2503, 2506, 71, 2507,
2163 2509, 2508, 71, 2912, 2912, 2510, 2498, 2912, 2499, 71,
2164 71, 2500, 2513, 71, 2504, 2517, 2912, 2519, 71, 71,
2165 2511, 2512, 2514, 2503, 2506, 71, 2507, 2509, 2508, 71,
2166 71, 71, 2510, 2515, 71, 2518, 71, 2516, 2523, 2513,
2167
2168 71, 2520, 71, 71, 2519, 2522, 2521, 2511, 2512, 2514,
2169 71, 2524, 2528, 71, 2525, 2912, 2526, 2912, 2527, 2535,
2170 2515, 2912, 2518, 71, 2516, 71, 2529, 2530, 2531, 71,
2171 2912, 2532, 2522, 71, 71, 2538, 2536, 71, 2524, 2528,
2172 71, 2525, 71, 2526, 71, 2527, 71, 2537, 71, 71,
2173 2533, 2539, 2534, 2529, 2530, 2531, 71, 71, 2532, 71,
2174 71, 2540, 71, 2536, 2541, 2542, 2543, 2544, 2547, 2545,
2175 2912, 71, 2546, 2912, 2537, 2548, 2912, 2533, 2539, 2534,
2176 2555, 71, 2549, 2553, 71, 71, 71, 71, 71, 2550,
2177 2912, 2541, 71, 2543, 2544, 71, 2545, 71, 71, 2546,
2178
2179 71, 71, 2548, 2551, 2554, 2556, 2557, 71, 2552, 2549,
2180 2553, 2558, 2560, 2559, 71, 71, 2550, 2562, 2561, 2563,
2181 2565, 2564, 71, 2912, 71, 71, 71, 71, 2566, 2569,
2182 71, 2554, 2556, 2557, 71, 71, 2567, 2572, 2558, 2560,
2183 2559, 2568, 71, 2573, 2574, 2561, 2563, 2565, 2564, 71,
2184 71, 71, 2578, 2912, 2570, 2566, 2569, 2571, 2575, 71,
2185 2576, 2577, 71, 2567, 71, 2579, 2582, 71, 2568, 71,
2186 71, 71, 2580, 2581, 71, 2587, 71, 2583, 2589, 2578,
2187 71, 2570, 2586, 2584, 2571, 2575, 71, 2576, 2577, 71,
2188 2585, 71, 2593, 71, 71, 71, 2588, 71, 71, 2580,
2189
2190 2581, 2591, 2594, 2590, 2583, 71, 2595, 71, 2592, 2586,
2191 2584, 71, 71, 71, 2596, 71, 71, 2585, 2597, 71,
2192 71, 2598, 2601, 2588, 2600, 2603, 2599, 2605, 2591, 2594,
2193 2590, 2606, 71, 2595, 71, 2592, 71, 71, 2602, 71,
2194 2607, 2596, 2604, 71, 71, 2597, 71, 2608, 2598, 2601,
2195 71, 2600, 71, 2599, 71, 2609, 2612, 2610, 71, 2611,
2196 2613, 2912, 2617, 2912, 2614, 2602, 71, 2607, 71, 2604,
2197 71, 71, 2615, 2616, 71, 2619, 71, 2618, 71, 2621,
2198 2620, 71, 2609, 2612, 2610, 71, 2611, 71, 71, 2617,
2199 71, 2614, 2622, 2624, 2623, 2626, 2627, 71, 2628, 2615,
2200
2201 2616, 71, 2619, 2629, 2618, 71, 71, 2620, 2912, 2630,
2202 2633, 71, 2625, 2631, 71, 2638, 2639, 71, 2634, 71,
2203 71, 2623, 2626, 2627, 2632, 2628, 2635, 2637, 71, 2636,
2204 2641, 71, 2642, 2640, 71, 71, 2630, 71, 2912, 2625,
2205 2631, 71, 71, 71, 71, 2634, 2643, 71, 2644, 2646,
2206 2645, 2632, 71, 2635, 2637, 2649, 2636, 71, 71, 2642,
2207 2640, 2650, 71, 2651, 2647, 2648, 2652, 2653, 71, 2654,
2208 71, 71, 2656, 2643, 71, 2644, 2655, 2645, 2657, 2658,
2209 2659, 71, 71, 2660, 71, 71, 2661, 2662, 71, 2663,
2210 2651, 2647, 2648, 2652, 71, 2667, 71, 71, 71, 2656,
2211
2212 71, 2668, 2672, 2655, 2664, 2657, 71, 71, 71, 71,
2213 71, 2669, 2665, 2661, 71, 2666, 2663, 71, 2670, 2671,
2214 71, 71, 2667, 2675, 71, 71, 2673, 2674, 71, 71,
2215 2676, 2664, 2679, 2677, 71, 2678, 2680, 71, 2669, 2665,
2216 2681, 2682, 2666, 2683, 2912, 2670, 2671, 2912, 71, 71,
2217 71, 71, 2686, 2673, 2674, 71, 2687, 71, 2689, 71,
2218 2677, 2688, 2678, 2680, 71, 71, 2684, 2681, 71, 2685,
2219 2683, 71, 2690, 71, 71, 2694, 71, 71, 2698, 2686,
2220 71, 2693, 71, 2687, 2691, 2689, 71, 2692, 2688, 2697,
2221 71, 71, 2700, 2684, 71, 71, 2685, 2695, 2696, 2690,
2222
2223 71, 2701, 2694, 2699, 2702, 2698, 71, 71, 2693, 2703,
2224 71, 2691, 2704, 2705, 2692, 2712, 2697, 2706, 2707, 2700,
2225 2708, 2709, 2710, 2711, 2695, 2696, 2713, 2717, 71, 2720,
2226 2699, 71, 71, 2716, 2714, 2715, 2703, 2719, 71, 71,
2227 71, 2721, 2712, 71, 2726, 2718, 71, 71, 71, 71,
2228 2725, 71, 71, 71, 71, 71, 2720, 71, 2722, 71,
2229 2716, 2714, 2715, 2724, 2719, 2723, 2727, 2728, 2721, 2729,
2230 71, 71, 2718, 2732, 71, 2736, 71, 2725, 2733, 71,
2231 2730, 71, 2734, 2731, 2735, 2722, 71, 71, 2741, 2737,
2232 2724, 71, 2723, 71, 2728, 71, 2729, 2738, 71, 2739,
2233
2234 2740, 2742, 2736, 2743, 2744, 71, 2745, 2730, 71, 2746,
2235 2731, 2735, 2747, 2748, 71, 71, 2737, 2749, 2750, 71,
2236 2751, 71, 2752, 71, 2738, 2753, 2739, 2740, 2742, 2754,
2237 71, 71, 71, 71, 2755, 2758, 71, 71, 71, 71,
2238 71, 2756, 2760, 2757, 71, 71, 2759, 2751, 2761, 71,
2239 71, 2762, 2753, 71, 71, 2763, 2754, 71, 2764, 71,
2240 71, 71, 2758, 2765, 2767, 2766, 2768, 2769, 2756, 2760,
2241 2757, 2912, 71, 2759, 71, 71, 2771, 2770, 2762, 71,
2242 71, 2774, 2763, 2776, 71, 2764, 2772, 2775, 71, 71,
2243 2765, 2767, 2766, 71, 2769, 71, 2773, 2777, 71, 71,
2244
2245 2779, 2778, 2780, 2771, 2770, 71, 2782, 71, 2774, 2781,
2246 71, 71, 2785, 2772, 2775, 2784, 71, 2783, 71, 71,
2247 2786, 71, 2788, 2773, 71, 71, 2787, 2779, 2778, 2780,
2248 2912, 71, 2789, 2782, 71, 2790, 2781, 2799, 71, 2785,
2249 2792, 2791, 2784, 71, 2783, 71, 71, 2786, 71, 2788,
2250 71, 71, 2793, 2787, 71, 2795, 2796, 2794, 2797, 2789,
2251 2800, 71, 2790, 71, 71, 2798, 2801, 2792, 2791, 71,
2252 2802, 71, 71, 2803, 2804, 2807, 2912, 2812, 71, 2793,
2253 2805, 2808, 2795, 2796, 2794, 2797, 2815, 2800, 71, 2809,
2254 2912, 2806, 2798, 71, 2817, 2912, 71, 2802, 71, 71,
2255
2256 71, 71, 2807, 71, 2810, 2811, 71, 2805, 2808, 71,
2257 2813, 71, 2814, 71, 2816, 2818, 2809, 71, 2806, 71,
2258 2819, 71, 71, 71, 2820, 2912, 2821, 71, 2823, 71,
2259 2822, 2810, 2811, 2824, 2825, 2826, 71, 2813, 2912, 2814,
2260 2827, 2816, 2818, 2829, 2912, 2832, 2831, 2819, 71, 71,
2261 2828, 71, 71, 2821, 71, 2823, 2830, 2822, 71, 71,
2262 2834, 2835, 2826, 71, 2833, 71, 71, 2827, 71, 71,
2263 71, 71, 2832, 2831, 2839, 2836, 2837, 2828, 2838, 2912,
2264 2843, 2845, 71, 2830, 2840, 2841, 71, 2834, 2835, 71,
2265 71, 2833, 2842, 2844, 71, 2846, 71, 2851, 2853, 2912,
2266
2267 71, 2839, 2836, 2837, 2847, 2838, 71, 71, 2848, 2850,
2268 2849, 2840, 2841, 71, 2859, 71, 2852, 71, 2854, 2842,
2269 2844, 71, 2846, 2912, 2856, 71, 71, 2862, 2863, 71,
2270 71, 2847, 71, 2912, 2855, 2848, 2850, 2849, 71, 2857,
2271 2858, 71, 71, 2852, 71, 2854, 71, 71, 71, 2860,
2272 2861, 2856, 2867, 71, 2862, 71, 2864, 71, 2866, 2865,
2273 71, 2855, 2868, 2881, 71, 2870, 2857, 2858, 2869, 2912,
2274 71, 2871, 2912, 2872, 71, 2874, 2860, 2861, 2876, 2867,
2275 71, 2878, 71, 2864, 2877, 2866, 2865, 71, 2883, 2868,
2276 71, 71, 2870, 71, 2879, 2869, 2873, 71, 2871, 2875,
2277
2278 2872, 71, 2874, 71, 71, 2876, 2882, 71, 2878, 2880,
2279 71, 2877, 2884, 71, 71, 2883, 2887, 71, 2885, 2888,
2280 2886, 2879, 2889, 2873, 71, 2890, 2875, 2891, 71, 2892,
2281 71, 2893, 2897, 2882, 2894, 71, 2880, 2901, 71, 71,
2282 71, 71, 71, 2887, 2896, 2885, 2888, 2886, 2900, 2889,
2283 2903, 71, 71, 71, 2891, 2895, 2892, 2898, 2893, 71,
2284 2899, 2894, 2904, 71, 71, 71, 2902, 2910, 71, 2906,
2285 71, 2896, 2905, 2907, 71, 2900, 2911, 71, 2912, 2912,
2286 2908, 2912, 2895, 2912, 2898, 2912, 71, 2899, 71, 71,
2287 2909, 71, 71, 2902, 71, 71, 2906, 2912, 71, 2905,
2288
2289 2907, 2912, 2912, 71, 2912, 2912, 2912, 2908, 2912, 2912,
2290 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2909, 43, 43,
2291 43, 43, 43, 43, 43, 48, 48, 48, 48, 48,
2292 48, 48, 53, 53, 53, 53, 53, 53, 53, 59,
2293 59, 59, 59, 59, 59, 59, 64, 64, 64, 64,
2294 64, 64, 64, 74, 74, 2912, 74, 74, 74, 74,
2295 140, 140, 2912, 2912, 2912, 140, 140, 142, 142, 2912,
2296 2912, 142, 2912, 142, 144, 2912, 2912, 2912, 2912, 2912,
2297 144, 147, 147, 2912, 2912, 2912, 147, 147, 149, 2912,
2298 2912, 2912, 2912, 2912, 149, 151, 151, 2912, 151, 151,
2299
2300 151, 151, 75, 75, 2912, 75, 75, 75, 75, 13,
2301 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
2302 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
2303 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
2304 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
2305 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
2306 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
2307 2912, 2912, 2912, 2912, 2912, 2912
23122308 } ;
23132309
2314 static yyconst flex_int16_t yy_chk[8360] =
2310 static const flex_int16_t yy_chk[8377] =
23152311 { 0,
23162312 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23172313 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23212317 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23222318 1, 1, 1, 1, 1, 1, 3, 3, 3, 4,
23232319 4, 4, 5, 5, 6, 6, 5, 28, 6, 7,
2324 7, 7, 7, 2910, 7, 8, 8, 8, 8, 28,
2320 7, 7, 7, 2918, 7, 8, 8, 8, 8, 28,
23252321 8, 9, 9, 9, 10, 10, 10, 15, 21, 24,
23262322
2327 971, 15, 30, 3, 28, 149, 4, 47, 47, 5,
2323 979, 15, 30, 3, 28, 149, 4, 47, 47, 5,
23282324 19, 6, 19, 19, 30, 19, 72, 7, 147, 24,
23292325 72, 19, 24, 8, 21, 21, 24, 29, 9, 30,
23302326 25, 10, 11, 11, 11, 11, 11, 11, 12, 12,
23582354 71, 74, 71, 74, 74, 87, 74, 93, 71, 88,
23592355
23602356 88, 87, 74, 87, 93, 94, 94, 99, 88, 98,
2361 0, 66, 97, 94, 192, 0, 87, 102, 101, 963,
2357 0, 66, 97, 94, 192, 0, 87, 102, 101, 971,
23622358 99, 94, 87, 0, 93, 102, 88, 88, 87, 74,
23632359 87, 98, 94, 94, 99, 97, 98, 103, 100, 97,
2364 94, 100, 101, 104, 102, 106, 192, 104, 105, 963,
2360 94, 100, 101, 104, 102, 106, 192, 104, 105, 971,
23652361 101, 110, 109, 105, 100, 100, 105, 103, 106, 103,
23662362 107, 0, 100, 104, 103, 100, 109, 104, 100, 101,
23672363 104, 110, 106, 114, 104, 105, 118, 111, 110, 109,
23872383 158, 164, 166, 163, 165, 167, 235, 167, 166, 168,
23882384 173, 177, 171, 179, 168, 174, 171, 175, 169, 169,
23892385 178, 0, 185, 174, 176, 180, 177, 178, 181, 0,
2390 305, 185, 167, 171, 166, 166, 173, 173, 177, 175,
2386 311, 185, 167, 171, 166, 166, 173, 173, 177, 175,
23912387 171, 179, 174, 171, 175, 179, 176, 178, 180, 185,
23922388
2393 181, 176, 180, 183, 186, 181, 191, 305, 0, 184,
2389 181, 176, 180, 183, 186, 181, 191, 311, 0, 184,
23942390 171, 172, 184, 187, 0, 183, 172, 191, 179, 189,
23952391 0, 172, 0, 0, 184, 195, 186, 172, 172, 0,
23962392 183, 186, 188, 191, 172, 187, 184, 188, 172, 184,
23992395 196, 194, 199, 198, 188, 200, 201, 202, 193, 193,
24002396 203, 201, 190, 204, 207, 0, 188, 198, 188, 197,
24012397 196, 207, 194, 199, 205, 206, 208, 209, 194, 210,
2402 0, 211, 209, 204, 0, 198, 311, 200, 205, 202,
2398 0, 211, 209, 204, 0, 198, 400, 200, 205, 202,
24032399
24042400 204, 207, 203, 212, 198, 211, 206, 208, 210, 213,
24052401 214, 205, 206, 208, 209, 215, 210, 216, 211, 217,
2406 218, 221, 214, 311, 216, 212, 215, 213, 219, 218,
2402 218, 221, 214, 400, 216, 212, 215, 213, 219, 218,
24072403 212, 222, 222, 220, 223, 225, 213, 214, 220, 228,
24082404 222, 217, 215, 224, 216, 227, 217, 218, 226, 229,
24092405 224, 219, 231, 221, 236, 219, 230, 225, 222, 222,
24262422 281, 273, 274, 284, 274, 280, 272, 277, 277, 281,
24272423 275, 276, 279, 282, 283, 285, 293, 276, 278, 282,
24282424 287, 276, 286, 278, 288, 280, 289, 281, 283, 284,
2429 284, 286, 291, 288, 294, 290, 297, 298, 276, 285,
2425 284, 286, 294, 288, 0, 290, 299, 291, 276, 285,
24302426 282, 283, 285, 287, 290, 292, 298, 287, 293, 286,
2431 295, 288, 289, 289, 297, 302, 291, 299, 294, 291,
2432 292, 294, 290, 297, 298, 295, 301, 0, 303, 302,
2433 0, 0, 292, 300, 309, 300, 0, 295, 296, 299,
2434 306, 296, 302, 303, 299, 320, 296, 296, 296, 296,
2435 301, 300, 309, 301, 308, 303, 296, 300, 304, 304,
2436
2437 300, 309, 300, 313, 306, 296, 308, 306, 296, 307,
2438 310, 312, 307, 296, 296, 296, 296, 320, 300, 307,
2439 314, 308, 315, 304, 318, 304, 304, 316, 310, 313,
2440 313, 318, 314, 312, 319, 317, 307, 310, 312, 307,
2441 0, 321, 316, 317, 315, 322, 319, 314, 321, 315,
2442 323, 318, 324, 325, 316, 0, 327, 331, 329, 325,
2443 0, 319, 317, 326, 840, 326, 332, 322, 321, 327,
2444 0, 330, 322, 0, 324, 325, 329, 335, 328, 324,
2445 325, 0, 323, 327, 335, 329, 325, 326, 332, 331,
2446 326, 328, 326, 332, 328, 840, 328, 330, 330, 339,
2447
2448 336, 333, 328, 337, 335, 328, 336, 333, 338, 342,
2449 353, 333, 339, 341, 345, 337, 0, 0, 328, 333,
2450 338, 328, 342, 328, 347, 333, 339, 336, 333, 341,
2451 337, 344, 345, 0, 333, 338, 342, 341, 333, 346,
2452 341, 345, 353, 344, 346, 347, 333, 334, 348, 334,
2453 351, 347, 349, 352, 348, 358, 341, 356, 344, 358,
2454 349, 352, 334, 354, 354, 334, 350, 334, 351, 334,
2455 356, 346, 364, 334, 334, 348, 334, 351, 350, 349,
2456 352, 355, 358, 0, 356, 0, 0, 369, 355, 334,
2457 354, 357, 334, 350, 334, 0, 334, 343, 343, 359,
2458
2459 357, 361, 0, 363, 364, 360, 359, 343, 355, 343,
2460 343, 343, 360, 361, 343, 363, 365, 362, 368, 369,
2461 367, 0, 343, 357, 343, 343, 359, 357, 361, 372,
2462 363, 368, 360, 366, 343, 367, 343, 343, 343, 362,
2463 366, 343, 365, 365, 362, 368, 370, 367, 370, 378,
2464 371, 372, 373, 373, 0, 374, 372, 375, 376, 377,
2465 366, 371, 374, 381, 379, 380, 0, 378, 375, 376,
2466 382, 383, 377, 370, 378, 0, 378, 371, 382, 389,
2467 380, 373, 374, 383, 375, 376, 377, 379, 380, 381,
2468 381, 379, 380, 384, 378, 386, 385, 382, 383, 387,
2469
2470 388, 389, 390, 391, 384, 385, 389, 380, 386, 392,
2471 387, 394, 387, 393, 403, 0, 0, 387, 388, 393,
2472 384, 391, 386, 385, 395, 390, 387, 388, 396, 390,
2473 391, 398, 394, 404, 399, 397, 0, 387, 394, 387,
2474 393, 392, 397, 400, 407, 401, 403, 395, 399, 402,
2475 396, 395, 405, 410, 432, 396, 404, 398, 398, 401,
2476 404, 399, 397, 406, 405, 400, 407, 408, 410, 406,
2477 400, 407, 401, 409, 412, 402, 402, 411, 413, 405,
2478 410, 409, 414, 412, 411, 417, 432, 415, 416, 408,
2479 406, 418, 419, 413, 408, 420, 0, 422, 419, 409,
2480
2481 409, 412, 0, 416, 411, 413, 414, 425, 409, 414,
2482 415, 417, 417, 418, 415, 416, 424, 427, 418, 419,
2483 423, 420, 420, 422, 422, 425, 423, 431, 429, 426,
2484 429, 430, 427, 433, 425, 424, 426, 429, 430, 434,
2485 431, 435, 437, 424, 427, 437, 436, 423, 438, 0,
2486 0, 433, 440, 0, 431, 429, 426, 429, 430, 436,
2487 433, 437, 442, 435, 441, 444, 443, 439, 435, 437,
2488 444, 434, 437, 436, 439, 442, 440, 445, 446, 440,
2489 438, 447, 451, 445, 449, 448, 452, 441, 443, 442,
2490 451, 450, 444, 443, 439, 1075, 441, 448, 455, 486,
2491
2492 452, 446, 450, 447, 445, 446, 449, 0, 447, 451,
2493 455, 449, 448, 452, 441, 454, 456, 0, 450, 453,
2494 457, 0, 454, 1075, 453, 455, 453, 459, 457, 458,
2495 0, 486, 453, 0, 453, 462, 0, 453, 453, 456,
2496 458, 0, 454, 456, 453, 453, 453, 457, 460, 463,
2497 459, 453, 460, 453, 459, 461, 458, 462, 466, 453,
2498 463, 453, 462, 464, 453, 453, 469, 461, 465, 466,
2499 460, 453, 467, 469, 0, 460, 463, 470, 465, 460,
2500 468, 464, 461, 472, 468, 466, 471, 474, 471, 473,
2501 464, 0, 0, 469, 475, 0, 467, 479, 478, 467,
2502
2503 465, 473, 474, 470, 470, 465, 475, 468, 482, 472,
2504 472, 476, 477, 471, 474, 479, 473, 477, 480, 476,
2505 478, 475, 481, 484, 479, 478, 480, 487, 485, 482,
2506 497, 488, 489, 490, 481, 482, 491, 495, 476, 477,
2507 489, 484, 487, 488, 492, 480, 490, 493, 491, 481,
2508 484, 485, 494, 492, 487, 485, 496, 497, 488, 489,
2509 490, 498, 495, 491, 495, 499, 494, 500, 503, 501,
2510 493, 492, 0, 502, 493, 496, 504, 0, 506, 494,
2511 499, 503, 505, 496, 501, 509, 511, 508, 504, 512,
2512 509, 513, 499, 498, 514, 503, 501, 502, 508, 500,
2513
2514 502, 507, 506, 504, 505, 506, 510, 515, 507, 505,
2515 516, 507, 517, 511, 508, 0, 512, 509, 517, 507,
2516 510, 514, 518, 513, 520, 519, 521, 527, 507, 0,
2517 522, 0, 520, 510, 515, 507, 523, 524, 507, 517,
2518 525, 524, 516, 526, 532, 521, 518, 519, 525, 518,
2519 528, 520, 519, 521, 522, 0, 529, 522, 523, 527,
2520 530, 531, 533, 523, 524, 529, 526, 525, 531, 535,
2521 526, 536, 534, 528, 535, 539, 532, 528, 535, 541,
2522 536, 537, 530, 529, 533, 534, 538, 530, 531, 533,
2523 540, 542, 541, 535, 543, 538, 535, 539, 536, 534,
2524
2525 545, 535, 539, 542, 544, 535, 541, 537, 537, 0,
2526 546, 548, 540, 538, 547, 0, 551, 540, 542, 550,
2527 549, 0, 544, 554, 545, 551, 543, 545, 552, 556,
2528 550, 544, 546, 546, 557, 548, 547, 546, 548, 553,
2529 560, 547, 549, 551, 555, 554, 550, 549, 552, 558,
2530 554, 555, 557, 553, 559, 552, 556, 558, 560, 546,
2531 561, 557, 562, 563, 564, 559, 553, 560, 565, 0,
2532 567, 555, 568, 569, 566, 561, 558, 571, 0, 567,
2533 570, 559, 0, 578, 563, 568, 572, 561, 564, 573,
2534 563, 564, 565, 574, 562, 565, 566, 567, 574, 568,
2535
2536 575, 566, 570, 576, 579, 569, 580, 570, 582, 571,
2537 572, 573, 579, 572, 575, 578, 573, 576, 577, 577,
2538 581, 583, 584, 582, 580, 574, 577, 575, 587, 585,
2539 576, 579, 582, 580, 586, 582, 588, 584, 588, 586,
2540 589, 0, 581, 591, 590, 577, 577, 581, 592, 584,
2541 582, 585, 590, 583, 587, 587, 585, 592, 597, 598,
2542 593, 599, 0, 588, 594, 589, 586, 589, 591, 593,
2543 591, 590, 595, 594, 596, 592, 602, 600, 604, 599,
2544 595, 596, 598, 601, 603, 602, 598, 593, 599, 600,
2545 597, 594, 603, 604, 605, 601, 606, 608, 0, 595,
2546
2547 607, 596, 611, 602, 600, 604, 605, 609, 610, 612,
2548 601, 603, 608, 607, 614, 609, 610, 618, 612, 613,
2549 617, 605, 0, 614, 608, 611, 619, 607, 606, 611,
2550 613, 615, 615, 617, 609, 610, 612, 616, 621, 622,
2551 615, 614, 620, 618, 618, 616, 613, 617, 623, 619,
2552 620, 624, 622, 619, 621, 625, 627, 626, 615, 615,
2553 629, 634, 624, 625, 616, 621, 622, 628, 630, 620,
2554 623, 626, 632, 633, 631, 623, 627, 0, 624, 634,
2555 629, 632, 625, 627, 626, 635, 636, 629, 634, 628,
2556 630, 637, 638, 633, 628, 630, 631, 639, 635, 632,
2557
2558 633, 631, 640, 641, 636, 642, 637, 646, 643, 644,
2559 648, 645, 635, 636, 638, 649, 641, 645, 637, 638,
2560 643, 639, 644, 642, 639, 640, 654, 652, 658, 640,
2561 641, 647, 642, 649, 646, 643, 644, 648, 645, 647,
2562 651, 655, 649, 653, 656, 657, 656, 0, 651, 654,
2563 653, 0, 676, 654, 657, 659, 655, 647, 647, 652,
2564 658, 660, 663, 662, 661, 662, 647, 651, 655, 663,
2565 653, 656, 657, 661, 659, 666, 669, 672, 676, 676,
2566 673, 660, 659, 674, 678, 675, 669, 666, 660, 663,
2567 662, 661, 664, 0, 674, 672, 664, 682, 677, 664,
2568
2569 678, 673, 666, 669, 672, 680, 664, 673, 675, 664,
2570 674, 678, 675, 679, 664, 684, 0, 689, 680, 664,
2571 681, 0, 679, 664, 677, 677, 664, 681, 685, 682,
2572 686, 0, 680, 664, 685, 691, 664, 684, 0, 686,
2573 679, 687, 684, 687, 689, 688, 692, 681, 683, 683,
2574 690, 683, 0, 693, 683, 685, 0, 686, 692, 683,
2575 694, 691, 691, 696, 695, 683, 683, 0, 687, 688,
2576 690, 697, 688, 692, 683, 683, 683, 690, 683, 693,
2577 693, 683, 694, 700, 698, 696, 683, 694, 695, 699,
2578 696, 695, 683, 683, 701, 702, 697, 699, 697, 698,
2579
2580 703, 701, 704, 702, 707, 705, 700, 706, 709, 708,
2581 700, 698, 711, 713, 0, 712, 699, 705, 708, 703,
2582 706, 701, 702, 709, 717, 716, 718, 703, 704, 704,
2583 707, 707, 705, 710, 706, 709, 708, 712, 710, 719,
2584 713, 714, 712, 720, 711, 721, 714, 716, 0, 722,
2585 0, 0, 716, 725, 729, 723, 717, 726, 718, 724,
2586 710, 719, 725, 727, 732, 764, 719, 0, 731, 721,
2587 722, 730, 721, 714, 723, 720, 722, 728, 724, 726,
2588 725, 729, 723, 727, 726, 728, 724, 731, 735, 730,
2589 727, 733, 736, 738, 737, 731, 732, 764, 730, 733,
2590
2591 739, 740, 744, 742, 728, 742, 735, 743, 746, 741,
2592 736, 738, 0, 0, 744, 735, 737, 745, 733, 736,
2593 738, 737, 741, 740, 739, 745, 746, 739, 740, 744,
2594 742, 748, 750, 743, 743, 746, 741, 747, 751, 748,
2595 747, 752, 754, 755, 745, 753, 756, 752, 754, 757,
2596 755, 0, 0, 756, 757, 748, 758, 750, 748, 750,
2597 759, 761, 765, 758, 747, 751, 748, 753, 752, 754,
2598 755, 760, 753, 756, 763, 760, 757, 762, 759, 766,
2599 765, 769, 763, 758, 761, 767, 762, 759, 761, 765,
2600 768, 771, 770, 767, 766, 772, 774, 0, 760, 781,
2601
2602 773, 763, 769, 768, 762, 770, 766, 773, 769, 775,
2603 776, 783, 767, 771, 774, 778, 775, 768, 771, 770,
2604 778, 777, 772, 774, 779, 782, 780, 773, 777, 776,
2605 785, 781, 779, 780, 784, 786, 775, 776, 782, 788,
2606 0, 784, 778, 783, 791, 787, 793, 788, 777, 789,
2607 791, 779, 782, 780, 792, 790, 797, 789, 799, 794,
2608 795, 784, 785, 798, 789, 796, 788, 786, 787, 795,
2609 798, 791, 787, 801, 802, 0, 789, 790, 793, 796,
2610 792, 792, 790, 794, 789, 799, 794, 795, 797, 800,
2611 798, 803, 796, 805, 804, 801, 809, 806, 800, 807,
2612
2613 801, 802, 806, 803, 809, 808, 807, 811, 814, 812,
2614 811, 817, 820, 837, 0, 814, 800, 804, 803, 805,
2615 805, 804, 812, 809, 806, 815, 807, 808, 0, 0,
2616 819, 815, 808, 818, 811, 814, 812, 817, 817, 820,
2617 822, 821, 819, 821, 0, 837, 823, 825, 834, 824,
2618 0, 826, 815, 816, 834, 816, 818, 819, 823, 816,
2619 818, 816, 824, 822, 826, 827, 816, 822, 821, 825,
2620 827, 816, 828, 823, 825, 834, 824, 816, 826, 829,
2621 816, 831, 816, 830, 838, 828, 816, 832, 816, 0,
2622 836, 831, 833, 816, 835, 830, 839, 827, 816, 828,
2623
2624 841, 0, 829, 831, 843, 833, 829, 835, 831, 832,
2625 830, 836, 843, 844, 832, 842, 838, 836, 831, 833,
2626 842, 835, 844, 839, 846, 847, 0, 850, 848, 0,
2627 849, 843, 841, 856, 0, 859, 851, 0, 0, 846,
2628 844, 848, 842, 845, 0, 849, 852, 847, 845, 863,
2629 845, 846, 847, 850, 850, 848, 845, 849, 851, 853,
2630 856, 845, 845, 851, 857, 852, 854, 859, 845, 845,
2631 845, 855, 853, 852, 854, 845, 860, 845, 862, 855,
2632 864, 863, 861, 845, 869, 0, 853, 857, 845, 845,
2633 861, 857, 862, 854, 866, 845, 865, 867, 855, 868,
2634
2635 860, 870, 864, 860, 865, 862, 871, 864, 872, 861,
2636 868, 873, 866, 881, 871, 867, 869, 876, 873, 870,
2637 879, 866, 875, 865, 867, 877, 868, 874, 870, 875,
2638 872, 883, 876, 871, 0, 872, 880, 878, 873, 0,
2639 874, 879, 883, 877, 876, 881, 880, 879, 885, 875,
2640 886, 887, 877, 888, 874, 878, 889, 886, 883, 887,
2641 890, 885, 891, 880, 878, 889, 888, 894, 892, 893,
2642 896, 895, 890, 0, 897, 885, 902, 886, 887, 901,
2643 888, 899, 901, 889, 891, 894, 904, 890, 897, 891,
2644 892, 893, 899, 904, 894, 892, 893, 895, 895, 900,
2645
2646 902, 897, 896, 902, 900, 901, 901, 903, 899, 901,
2647 905, 906, 907, 904, 908, 909, 910, 911, 913, 905,
2648 903, 0, 909, 912, 907, 906, 920, 914, 0, 912,
2649 916, 900, 915, 917, 903, 924, 918, 905, 906, 907,
2650 913, 911, 909, 915, 911, 913, 908, 920, 910, 914,
2651 912, 918, 916, 920, 914, 917, 921, 916, 922, 915,
2652 917, 923, 924, 918, 925, 926, 0, 921, 0, 928,
2653 927, 929, 0, 930, 926, 932, 933, 931, 934, 922,
2654 929, 930, 925, 921, 931, 922, 935, 936, 939, 937,
2655 933, 925, 926, 923, 927, 928, 928, 927, 929, 932,
2656
2657 930, 938, 932, 933, 931, 942, 941, 943, 944, 936,
2658 934, 937, 942, 945, 936, 941, 937, 948, 935, 946,
2659 939, 949, 0, 938, 947, 950, 948, 951, 938, 952,
2660 944, 955, 942, 941, 956, 944, 0, 946, 952, 943,
2661 945, 957, 947, 951, 948, 949, 946, 953, 949, 950,
2662 954, 947, 950, 957, 951, 959, 952, 958, 954, 960,
2663 961, 962, 953, 955, 966, 965, 956, 960, 957, 964,
2664 970, 979, 966, 961, 953, 0, 962, 954, 964, 958,
2665 977, 969, 959, 965, 958, 972, 960, 961, 962, 969,
2666 973, 966, 965, 967, 974, 967, 964, 970, 972, 978,
2667
2668 975, 976, 973, 979, 980, 0, 978, 977, 969, 974,
2669 981, 0, 972, 982, 989, 0, 984, 973, 0, 976,
2670 967, 974, 975, 983, 986, 988, 978, 975, 976, 984,
2671 987, 985, 981, 988, 989, 990, 980, 981, 982, 993,
2672 982, 989, 987, 984, 985, 983, 986, 990, 991, 996,
2673 983, 986, 988, 997, 994, 995, 991, 987, 985, 0,
2674 0, 996, 990, 998, 995, 1002, 993, 994, 1001, 1003,
2675 998, 1004, 0, 1005, 997, 991, 996, 999, 0, 0,
2676 997, 994, 995, 1007, 1004, 1008, 999, 1002, 999, 1003,
2677 998, 999, 1002, 1006, 1001, 1001, 1003, 1005, 1004, 999,
2678
2679 1005, 1007, 1006, 1009, 999, 1010, 1011, 1008, 1012, 1014,
2680 1007, 1009, 1008, 999, 0, 999, 1012, 1015, 999, 1016,
2681 1006, 1017, 1011, 1018, 1019, 1020, 1021, 1010, 1017, 0,
2682 1009, 0, 1010, 1011, 1023, 1012, 1014, 1022, 1021, 1015,
2683 1024, 1016, 1023, 1020, 1015, 1018, 1016, 1019, 1017, 1022,
2684 1018, 1019, 1020, 1021, 1025, 1024, 1026, 1027, 1031, 1029,
2685 1028, 1023, 1030, 1032, 1022, 1029, 1025, 1024, 1028, 1038,
2686 1033, 1030, 1027, 1034, 1035, 1032, 1026, 1033, 1037, 1031,
2687 1034, 1025, 1038, 1026, 1027, 1031, 1029, 1028, 1039, 1030,
2688 1032, 1040, 1035, 1042, 1041, 1044, 1038, 1033, 1040, 1043,
2689
2690 1034, 1035, 1047, 1044, 1043, 1053, 1045, 1039, 1042, 1046,
2691 1037, 1049, 1050, 0, 1051, 1039, 1041, 1052, 1040, 1045,
2692 1042, 1041, 1044, 1046, 1055, 1049, 1056, 1053, 1047, 1047,
2693 1050, 1043, 1053, 1045, 1054, 1057, 1046, 1048, 1049, 1050,
2694 1048, 1048, 0, 1052, 1052, 1048, 1051, 1058, 1056, 1060,
2695 0, 1048, 1054, 1056, 1059, 1048, 1055, 1057, 0, 1048,
2696 1059, 1054, 1057, 1061, 1048, 1061, 1064, 1048, 1048, 1066,
2697 1062, 1063, 1048, 1058, 1058, 1060, 1060, 1062, 1048, 1065,
2698 1063, 1059, 1048, 1071, 1064, 1068, 1065, 1061, 1067, 1069,
2699 1061, 1066, 1061, 1064, 1068, 1070, 1066, 1062, 1063, 1072,
2700
2701 0, 1067, 0, 1074, 1076, 1071, 1065, 1079, 1082, 1078,
2702 1071, 1083, 1068, 1082, 1080, 1067, 1083, 1097, 0, 1079,
2703 1076, 1069, 1072, 1080, 1081, 1084, 1072, 1070, 1073, 1074,
2704 1074, 1076, 1078, 1073, 1079, 1073, 1078, 1073, 1083, 1073,
2705 1082, 1080, 1081, 1085, 1097, 1086, 1073, 1084, 1089, 1087,
2706 1088, 1081, 1084, 1093, 0, 1073, 1085, 1087, 1088, 1091,
2707 1073, 1090, 1073, 1086, 1073, 1092, 1073, 1089, 1096, 1099,
2708 1085, 1093, 1086, 1094, 1090, 1089, 1087, 1088, 1092, 1098,
2709 1093, 1091, 1094, 1095, 1100, 1095, 1091, 1105, 1090, 1102,
2710 1096, 1098, 1092, 1103, 1104, 1096, 1099, 1106, 1108, 0,
2711
2712 1094, 1107, 1104, 1109, 1110, 1105, 1098, 1113, 1107, 1100,
2713 1095, 1100, 1111, 1102, 1105, 1103, 1102, 1112, 1111, 1115,
2714 1103, 1104, 0, 1112, 1106, 1108, 1110, 1117, 1107, 1109,
2715 1109, 1110, 1118, 1114, 1113, 1116, 1119, 1126, 1120, 1111,
2716 1114, 1123, 1116, 1115, 1112, 1122, 1115, 1120, 1124, 1117,
2717 1118, 1125, 1127, 1123, 1117, 1128, 1126, 1129, 1130, 1118,
2718 1114, 1119, 1116, 1119, 1126, 1120, 1132, 1131, 1123, 1122,
2719 1124, 1133, 1122, 1125, 1127, 1124, 1131, 1128, 1125, 1127,
2720 1130, 1134, 1128, 1129, 1129, 1130, 1136, 1132, 1137, 1138,
2721 1139, 1133, 1140, 1132, 1131, 1134, 1141, 1142, 1133, 1143,
2722
2723 1144, 1147, 1146, 1148, 1141, 1147, 1149, 1144, 1134, 1146,
2724 1140, 1138, 1150, 1142, 1152, 1160, 1138, 1160, 1136, 1140,
2725 1137, 1158, 1139, 1141, 1142, 1154, 1143, 1144, 1147, 1146,
2726 1153, 1156, 1154, 1150, 1155, 1148, 1153, 1162, 1149, 1150,
2727 1163, 1157, 1160, 1153, 1156, 1161, 1152, 1158, 1158, 1155,
2728 1157, 1164, 1154, 1159, 1161, 1164, 1170, 1153, 1156, 1162,
2729 1159, 1155, 1165, 1153, 1162, 1167, 1168, 1163, 1157, 1171,
2730 1169, 1168, 1161, 1167, 1170, 1173, 0, 1172, 1164, 1169,
2731 1159, 1176, 1174, 1170, 1165, 1174, 1177, 1173, 1171, 1165,
2732 1172, 1178, 1167, 1179, 1174, 0, 1171, 1169, 1168, 1177,
2733
2734 1175, 1180, 1173, 1175, 1172, 1183, 1176, 1181, 1176, 1174,
2735 1182, 1182, 1174, 1177, 1183, 1181, 1179, 1180, 1184, 1186,
2736 1179, 0, 1175, 1178, 1185, 1189, 1190, 1175, 1180, 1187,
2737 1175, 1192, 1183, 1185, 1181, 1190, 1187, 1182, 1189, 1191,
2738 1184, 1186, 1193, 1196, 0, 1184, 1186, 1195, 1191, 1197,
2739 1194, 1185, 1189, 1190, 1198, 1195, 1187, 1192, 1192, 1194,
2740 1199, 1203, 1198, 1202, 1197, 1193, 1191, 1200, 1201, 1193,
2741 1208, 1202, 1204, 1199, 1195, 1196, 1197, 1194, 1205, 1200,
2742 1201, 1198, 1206, 1203, 1207, 1210, 1209, 1199, 1203, 1213,
2743 1202, 1206, 1204, 1212, 1200, 1201, 1208, 1208, 1209, 1204,
2744
2745 1205, 1211, 1207, 1214, 1215, 1205, 1210, 1211, 0, 1206,
2746 1216, 1207, 1210, 1209, 1218, 1212, 1219, 1221, 0, 1222,
2747 1212, 1213, 1220, 0, 1225, 1229, 1221, 1224, 1211, 0,
2748 1215, 1215, 1222, 1223, 1227, 1214, 1216, 1216, 1229, 1219,
2749 1220, 1218, 1228, 1219, 1221, 1223, 1222, 1224, 1226, 1220,
2750 1225, 1225, 1229, 1227, 1224, 1226, 1234, 1230, 1231, 1233,
2751 1223, 1227, 1232, 1231, 1228, 1230, 1233, 1232, 1235, 1228,
2752 1236, 1237, 1239, 1242, 1238, 1226, 1235, 1245, 1236, 1246,
2753 1239, 1240, 1234, 1234, 1230, 1243, 1233, 1246, 1240, 1237,
2754 1231, 1241, 1244, 1244, 1232, 1235, 1238, 1236, 1237, 1239,
2755
2756 1241, 1238, 1247, 1248, 1254, 1242, 1246, 1243, 1240, 1245,
2757 1254, 1256, 1243, 1249, 1250, 1253, 1251, 1252, 1241, 1244,
2758 1255, 1249, 1250, 1247, 1251, 1252, 1257, 1259, 1253, 1247,
2759 1258, 1254, 1255, 1260, 1262, 1248, 1261, 1256, 1256, 1271,
2760 1249, 1250, 1253, 1251, 1252, 1258, 1263, 1255, 1262, 1267,
2761 1257, 1264, 1265, 1257, 1259, 1260, 1265, 1258, 1268, 1261,
2762 1260, 1262, 1272, 1261, 1263, 1264, 1271, 1269, 1273, 1265,
2763 1268, 1267, 0, 1263, 1269, 1270, 1267, 1265, 1264, 1265,
2764 1274, 1275, 1279, 1265, 1272, 1268, 1270, 0, 1277, 1272,
2765 1273, 1276, 1278, 1280, 1269, 1273, 1265, 1277, 1276, 1278,
2766
2767 1282, 1285, 1270, 1274, 1275, 1284, 1287, 1274, 1275, 1282,
2768 1286, 1284, 1290, 0, 1279, 1277, 1292, 1288, 1276, 1278,
2769 1280, 1293, 1294, 1285, 1288, 1300, 1297, 1282, 1285, 1299,
2770 1295, 0, 1284, 1294, 1301, 1298, 1286, 1286, 1287, 1290,
2771 1292, 1295, 1298, 1292, 1288, 1304, 1301, 1299, 1293, 1294,
2772 1297, 1300, 1300, 1297, 1302, 1303, 1299, 1295, 1305, 1307,
2773 1302, 1301, 1298, 1303, 1306, 1308, 1311, 1304, 1307, 1310,
2774 1315, 1305, 1304, 1309, 1312, 1309, 1313, 1308, 1318, 1311,
2775 0, 1302, 1303, 1312, 1316, 1305, 1307, 1314, 1325, 1319,
2776 1306, 1306, 1308, 1311, 1319, 1310, 1310, 1315, 1313, 1314,
2777
2778 1309, 1312, 1317, 1313, 1318, 1318, 1320, 1316, 1321, 1317,
2779 1322, 1316, 1323, 0, 1314, 1325, 1319, 1326, 1322, 1327,
2780 1328, 1328, 1320, 1329, 0, 1330, 1326, 1330, 1328, 1317,
2781 1331, 1321, 1327, 1320, 1323, 1321, 1329, 1322, 1332, 1323,
2782 1336, 1335, 1333, 0, 1326, 1338, 1327, 1328, 1328, 1333,
2783 1329, 1334, 1330, 1339, 1337, 1340, 1331, 1331, 1334, 1335,
2784 1332, 1337, 1336, 1342, 1341, 1332, 1344, 1336, 1335, 1333,
2785 1338, 1341, 1338, 1345, 1346, 1339, 1347, 1349, 1334, 1344,
2786 1339, 1337, 1346, 1350, 0, 1351, 1350, 1340, 1352, 1353,
2787 0, 1341, 1357, 1344, 1355, 1342, 1354, 1347, 1356, 1349,
2788
2789 1345, 1346, 1353, 1347, 1349, 1354, 1355, 1361, 1362, 1358,
2790 1350, 1351, 1351, 1359, 1352, 1352, 1353, 1367, 1357, 1357,
2791 1359, 1355, 1356, 1354, 1358, 1356, 1360, 1363, 0, 1360,
2792 1362, 1369, 1365, 1364, 1365, 1362, 1358, 1366, 0, 1361,
2793 1359, 1360, 1371, 1368, 1372, 1363, 1370, 1378, 1373, 1367,
2794 1360, 1379, 1381, 1360, 1363, 1364, 1360, 1369, 1369, 1365,
2795 1364, 1366, 1373, 1377, 1366, 1368, 1372, 1374, 1360, 1375,
2796 1368, 1372, 1370, 1370, 1371, 1373, 1374, 1375, 1376, 1378,
2797 1380, 1383, 1382, 1379, 1381, 1376, 1382, 1377, 1384, 1385,
2798 1377, 1386, 1387, 1389, 1374, 1391, 1375, 1388, 1392, 1387,
2799
2800 1386, 1390, 1380, 1383, 1388, 1376, 1389, 1380, 1383, 1382,
2801 1391, 1385, 1392, 1393, 1390, 1384, 1385, 1399, 1386, 1387,
2802 1389, 1396, 1391, 1394, 1388, 1392, 1395, 1401, 1390, 1397,
2803 1394, 1400, 1406, 1395, 1396, 1397, 1402, 1405, 1400, 1403,
2804 1405, 1406, 1404, 1407, 1399, 1393, 1411, 1409, 1396, 1401,
2805 1394, 1403, 1417, 1395, 1401, 1404, 1397, 1411, 1400, 1406,
2806 1408, 1407, 1402, 1402, 1405, 1410, 1403, 1409, 1410, 1404,
2807 1407, 1418, 1408, 1411, 1409, 1415, 1413, 1415, 1419, 1417,
2808 1416, 1413, 1420, 1410, 1422, 1423, 1421, 1408, 1413, 1424,
2809 1428, 1420, 1410, 1419, 1433, 1410, 1425, 1424, 1418, 1423,
2810
2811 1426, 1428, 1415, 1413, 1416, 1419, 1427, 1416, 1413, 1420,
2812 1421, 1422, 1423, 1421, 1427, 1434, 1424, 1428, 1425, 1429,
2813 1430, 1431, 1426, 1425, 1431, 1432, 1433, 1426, 1430, 1435,
2814 1436, 1437, 1438, 1427, 1444, 1440, 1435, 1429, 1439, 1431,
2815 1437, 1458, 1434, 1432, 1436, 1438, 1429, 1430, 1431, 1439,
2816 1440, 1431, 1432, 1442, 1443, 1442, 1435, 1436, 1437, 1438,
2817 1444, 1444, 1440, 1443, 1445, 1439, 1446, 1447, 1458, 1448,
2818 1449, 1451, 1456, 1449, 1453, 1445, 1450, 1451, 1452, 1453,
2819 1442, 1443, 1459, 1448, 1446, 1450, 1455, 1452, 1449, 1447,
2820 1460, 1445, 1457, 1446, 1447, 1448, 1448, 1449, 1451, 1455,
2821
2822 1449, 1457, 1461, 1450, 1456, 1452, 1453, 1466, 1462, 1464,
2823 1448, 1465, 1460, 1455, 1459, 1473, 1464, 1460, 1467, 1457,
2824 1468, 1471, 1469, 1473, 1465, 1474, 1468, 1482, 1476, 1462,
2825 1475, 0, 1467, 1474, 1461, 1462, 1464, 1477, 1465, 1466,
2826 1471, 1481, 1473, 1483, 1468, 1467, 1476, 1468, 1471, 1475,
2827 1479, 1477, 1474, 1468, 1469, 1476, 1478, 1475, 1480, 1482,
2828 1484, 1487, 1481, 1479, 1477, 1485, 1488, 1486, 1481, 1487,
2829 1478, 1480, 1485, 1489, 1484, 1483, 1486, 1479, 0, 1490,
2830 1488, 1492, 1494, 1478, 1490, 1480, 1491, 1484, 1487, 1481,
2831 1492, 1495, 1485, 1488, 1486, 1497, 1496, 1491, 1495, 1498,
2832
2833 1501, 1504, 1499, 1503, 1501, 1489, 1490, 1500, 1492, 1494,
2834 1508, 0, 1505, 1491, 0, 1503, 1506, 1497, 1495, 1496,
2835 1505, 1498, 1497, 1496, 1499, 1500, 1498, 1501, 1504, 1499,
2836 1503, 1506, 1507, 1509, 1500, 1510, 1511, 1508, 1512, 1505,
2837 1507, 1513, 1515, 1506, 1525, 1514, 1509, 0, 1517, 1513,
2838 1518, 1511, 1514, 1512, 1516, 1510, 1519, 1517, 1520, 1507,
2839 1509, 1521, 1510, 1511, 1523, 1512, 1524, 1526, 1513, 1516,
2840 1532, 1518, 1514, 1528, 1515, 1517, 1525, 1518, 1529, 1532,
2841 1527, 1516, 1520, 1519, 1524, 1520, 1523, 1531, 1521, 1530,
2842 1533, 1523, 1531, 1524, 1526, 1527, 1530, 1532, 1528, 1533,
2843
2844 1528, 1534, 1529, 1535, 1536, 1529, 1537, 1527, 1540, 1539,
2845 1538, 1542, 1541, 1543, 1531, 1540, 1530, 1533, 1537, 1536,
2846 1544, 1535, 1539, 1534, 1541, 1548, 1544, 1539, 1534, 1546,
2847 1535, 1536, 1538, 1537, 1545, 1540, 1539, 1538, 1542, 1541,
2848 1546, 1547, 1545, 1550, 1549, 1543, 1549, 1544, 1547, 1539,
2849 1548, 1551, 1548, 1552, 1554, 1553, 1546, 1549, 1555, 1556,
2850 1557, 1545, 1553, 1558, 1560, 1556, 1557, 1561, 1547, 1550,
2851 1550, 1549, 1559, 1549, 1563, 1565, 1567, 1566, 1551, 1566,
2852 1552, 1554, 1553, 1564, 1555, 1555, 1556, 1557, 1568, 1570,
2853 1558, 1561, 1564, 1569, 1561, 1559, 1560, 1574, 1572, 1559,
2854
2855 1567, 1573, 1582, 1567, 1566, 1572, 1563, 1565, 1573, 1575,
2856 1564, 1571, 1571, 1571, 1578, 1568, 1575, 1577, 1571, 1569,
2857 1569, 1570, 1577, 1579, 1583, 1572, 1571, 1578, 1573, 1574,
2858 1580, 1581, 1586, 0, 1582, 1588, 1575, 1584, 1571, 1571,
2859 1571, 1578, 1583, 1581, 1584, 1571, 1580, 1585, 1579, 1577,
2860 1579, 1583, 1591, 1585, 1587, 1587, 1589, 1580, 1581, 1586,
2861 1590, 1588, 1588, 1589, 1584, 1590, 1592, 1596, 1593, 1597,
2862 1598, 1597, 1600, 1602, 1585, 1593, 1601, 1603, 1591, 1591,
2863 1604, 1587, 1601, 1589, 0, 0, 1604, 1590, 1598, 1605,
2864 1600, 1606, 1607, 1592, 1596, 1593, 1597, 1598, 1609, 1600,
2865
2866 1613, 1605, 1614, 1601, 1603, 1602, 1611, 1604, 1608, 1608,
2867 1607, 1606, 1610, 1610, 1615, 1619, 1605, 1611, 1606, 1607,
2868 1616, 1615, 1613, 1617, 1609, 1609, 1618, 1613, 0, 1620,
2869 1621, 0, 0, 1611, 1614, 1608, 1622, 1623, 1624, 1610,
2870 1616, 1615, 1619, 1622, 1625, 1623, 1628, 1616, 1621, 1629,
2871 1626, 1620, 1642, 1624, 0, 1617, 1620, 1621, 1618, 1626,
2872 1627, 1627, 1630, 1622, 1623, 1624, 1631, 1632, 1625, 1630,
2873 1640, 1625, 1628, 1628, 1636, 1634, 1635, 1626, 1631, 1642,
2874 1638, 1629, 1634, 1632, 1635, 1639, 1636, 1627, 1638, 1630,
2875 1632, 1640, 1643, 1631, 1632, 1641, 1645, 1640, 1646, 1649,
2876
2877 1644, 1636, 1634, 1635, 1646, 1644, 1648, 1638, 1639, 1652,
2878 1632, 1647, 1639, 1641, 1648, 1643, 1644, 1654, 1653, 1643,
2879 1655, 1649, 1641, 1645, 1647, 1646, 1649, 1644, 1650, 1651,
2880 1653, 1656, 1644, 1648, 1659, 1650, 1651, 1657, 1647, 1654,
2881 1662, 1652, 1661, 1660, 1654, 1653, 1663, 1655, 1660, 1661,
2882 1665, 1666, 1659, 1667, 1667, 1650, 1651, 1656, 1656, 1660,
2883 1657, 1659, 1668, 1664, 1657, 1670, 1669, 1662, 1664, 1661,
2884 1660, 1672, 0, 1663, 1676, 1660, 1673, 1674, 1678, 0,
2885 1667, 1669, 1665, 1666, 1668, 1675, 1672, 1675, 1686, 1668,
2886 1679, 1677, 1674, 1669, 1681, 1664, 1677, 1670, 1672, 1673,
2887
2888 1682, 1683, 1685, 1673, 1674, 1679, 1676, 1687, 1682, 1681,
2889 1678, 1688, 1675, 1689, 1686, 1686, 1690, 1679, 1677, 1692,
2890 1689, 1681, 1691, 1683, 1693, 1696, 1685, 1682, 1683, 1685,
2891 1698, 0, 1694, 1705, 1687, 1700, 1704, 0, 1688, 0,
2892 1689, 1692, 1707, 1691, 0, 1693, 1692, 1696, 1690, 1691,
2893 1694, 1693, 1696, 1699, 1698, 1702, 1703, 1698, 1704, 1694,
2894 1705, 1700, 1700, 1704, 1707, 1708, 1706, 1709, 1699, 1707,
2895 1702, 1703, 1710, 1711, 1714, 1716, 1712, 1717, 1713, 1710,
2896 1699, 0, 1702, 1703, 1706, 1712, 1713, 1708, 1715, 1720,
2897 1717, 1711, 1708, 1706, 1709, 1719, 1721, 1714, 1720, 1710,
2898
2899 1711, 1714, 1722, 1712, 1717, 1713, 1719, 1716, 1723, 1724,
2900 1715, 1725, 1726, 1727, 1721, 1715, 1720, 1725, 1730, 1732,
2901 1733, 1719, 1719, 1721, 1724, 1736, 1723, 1727, 1722, 1722,
2902 1734, 1733, 1738, 1719, 1726, 1723, 1724, 1736, 1725, 1726,
2903 1727, 1734, 1737, 1732, 1739, 1730, 1732, 1733, 1740, 0,
2904 1742, 1741, 1736, 1743, 1739, 1737, 1746, 1734, 1747, 1745,
2905 1749, 0, 0, 1746, 1738, 1759, 1749, 1750, 0, 1737,
2906 1748, 1739, 1743, 0, 1740, 1740, 1741, 1742, 1741, 1745,
2907 1743, 1751, 1750, 1746, 1747, 1747, 1745, 1749, 1748, 1752,
2908 1753, 1753, 1759, 1754, 1750, 1757, 1751, 1748, 1755, 1758,
2909
2910 1760, 1763, 1757, 1761, 1752, 1754, 1764, 1762, 1751, 1760,
2911 1761, 1755, 1768, 1764, 1758, 1766, 1752, 1753, 1767, 1755,
2912 1754, 1768, 1757, 1763, 1769, 1755, 1758, 1760, 1763, 1770,
2913 1761, 1762, 1772, 1764, 1762, 1774, 1775, 1766, 1755, 1768,
2914 1776, 1777, 1766, 1767, 1774, 1767, 1769, 1780, 1781, 1770,
2915 1772, 1769, 1778, 1782, 1775, 1776, 1770, 1783, 1783, 1772,
2916 1778, 1781, 1774, 1775, 1784, 1785, 1777, 1776, 1777, 1788,
2917 1789, 1786, 1780, 1787, 1780, 1781, 1790, 1789, 1788, 1778,
2918 1782, 0, 1791, 1793, 1783, 1792, 1784, 1797, 1796, 0,
2919 1785, 1784, 1785, 1786, 1798, 1787, 1788, 1789, 1786, 1792,
2920
2921 1787, 1796, 1793, 1795, 1791, 1799, 1800, 1801, 1790, 1791,
2922 1793, 1795, 1792, 1800, 1797, 1796, 1802, 1799, 1804, 1803,
2923 1798, 1798, 1805, 0, 1807, 1806, 1804, 0, 1808, 1809,
2924 1795, 1813, 1799, 1800, 1811, 1812, 1813, 1804, 1802, 1801,
2925 1806, 1812, 1824, 1802, 1803, 1804, 1803, 1809, 0, 1805,
2926 1807, 1807, 1806, 1804, 1808, 1808, 1809, 1810, 1814, 1811,
2927 1810, 1811, 1812, 1813, 1815, 1817, 1818, 1819, 1821, 1824,
2928 1822, 0, 1823, 1828, 1825, 1810, 1814, 1822, 0, 1815,
2929 1817, 0, 1821, 1825, 1810, 1814, 1828, 1810, 1818, 1819,
2930 1823, 1815, 1817, 1818, 1819, 1821, 1826, 1822, 1827, 1823,
2931
2932 1828, 1825, 1829, 1831, 1832, 1826, 1833, 0, 1836, 1827,
2933 1834, 0, 1835, 1833, 1829, 1839, 1842, 1841, 1831, 1832,
2934 1842, 1847, 1845, 1826, 1845, 1827, 1836, 1846, 1839, 1829,
2935 1831, 1832, 1834, 1833, 1835, 1836, 1839, 1834, 1841, 1835,
2936 1843, 1844, 1839, 1842, 1841, 1846, 1848, 1849, 1847, 1845,
2937 1844, 1850, 1843, 1851, 1846, 1839, 1853, 1852, 1854, 1850,
2938 1855, 1856, 1857, 1854, 1848, 1869, 0, 1843, 1844, 1858,
2939 1853, 1862, 1865, 1848, 1849, 1859, 1851, 0, 1850, 1852,
2940 1851, 1863, 1859, 1853, 1852, 1864, 1857, 1866, 1858, 1857,
2941 1854, 1868, 1855, 1856, 1867, 1863, 1858, 1869, 1862, 1865,
2942
2943 1868, 1870, 1859, 1864, 1871, 1872, 1863, 1863, 1863, 1867,
2944 0, 1874, 1864, 1866, 1866, 1873, 0, 1876, 1868, 1877,
2945 0, 1867, 1863, 1870, 1878, 1880, 1877, 1880, 1870, 0,
2946 1871, 1871, 1872, 1863, 1881, 1882, 1883, 1873, 1884, 1882,
2947 1876, 1885, 1873, 1874, 1876, 1887, 1877, 1878, 1883, 1890,
2948 1885, 1878, 1880, 1886, 1888, 1889, 1881, 1891, 1891, 1892,
2949 1884, 1881, 1882, 1883, 1886, 1884, 1894, 1889, 1885, 1895,
2950 1893, 1890, 1887, 1897, 1892, 0, 1890, 1888, 1893, 1899,
2951 1886, 1888, 1889, 1895, 1891, 1896, 1892, 1900, 1894, 1903,
2952 1910, 1901, 1903, 1894, 1896, 1900, 1895, 1893, 1899, 1901,
2953
2954 1897, 1902, 1904, 1905, 1906, 1902, 1899, 1907, 1909, 1905,
2955 1904, 1912, 1896, 1907, 1900, 1911, 1903, 1910, 1901, 1906,
2956 1909, 1915, 1916, 1913, 1917, 1912, 1914, 1919, 1902, 1904,
2957 1905, 1906, 1918, 1922, 1907, 1909, 1913, 1920, 1912, 1911,
2958 1914, 1919, 1911, 1921, 1918, 1923, 1921, 1915, 1915, 1916,
2959 1913, 1917, 1925, 1914, 1919, 1926, 1928, 1929, 1927, 1918,
2960 1922, 1921, 1926, 1920, 1920, 1927, 1930, 1923, 1931, 1932,
2961 1921, 1928, 1923, 1921, 1925, 1934, 1931, 1933, 1935, 1925,
2962 1937, 1936, 1926, 1928, 1929, 1927, 1933, 1938, 1939, 1944,
2963 1935, 1940, 1942, 1930, 1945, 1931, 1932, 1941, 1946, 1947,
2964
2965 1942, 1939, 1934, 1936, 1933, 1935, 1946, 1937, 1936, 1940,
2966 1941, 1944, 1949, 1948, 1938, 1939, 1944, 1950, 1940, 1942,
2967 1951, 1945, 1948, 1952, 1941, 1946, 1947, 1956, 1953, 1955,
2968 1954, 1958, 1962, 1949, 0, 1951, 1953, 1955, 1958, 1949,
2969 1948, 1950, 1954, 1961, 1950, 1959, 1951, 1951, 1960, 1959,
2970 1952, 1964, 1965, 1963, 1956, 1953, 1955, 1954, 1958, 1962,
2971 1960, 1963, 1951, 1964, 1965, 1967, 1961, 1968, 1969, 1970,
2972 1961, 1972, 1959, 1973, 1968, 1960, 1971, 1971, 1964, 1965,
2973 1963, 1974, 1970, 1975, 1977, 1978, 0, 1979, 1969, 1989,
2974 1975, 1973, 1967, 0, 1968, 1969, 1970, 1972, 1972, 1977,
2975
2976 1973, 1981, 1980, 1971, 1980, 1983, 1974, 1978, 1974, 1979,
2977 1975, 1977, 1978, 1982, 1979, 1981, 1984, 1984, 1988, 1982,
2978 1986, 1989, 1987, 1991, 1992, 1990, 1993, 1983, 1981, 1980,
2979 1988, 1990, 1983, 1994, 1996, 1994, 1995, 2002, 1997, 1998,
2980 1982, 1999, 1986, 1984, 1987, 1988, 1992, 1986, 1993, 1987,
2981 1995, 1992, 1990, 1993, 2000, 1991, 1997, 1998, 1996, 1999,
2982 1994, 1996, 2001, 1995, 2003, 1997, 1998, 2004, 1999, 2002,
2983 2006, 2016, 2000, 2008, 2010, 2001, 2009, 2006, 2011, 0,
2984 2012, 2000, 2012, 2018, 2014, 0, 2011, 2012, 2015, 2001,
2985 2004, 2008, 2029, 0, 2004, 2014, 2003, 2006, 2016, 2015,
2986
2987 2008, 2018, 2009, 2009, 2011, 2011, 2010, 2012, 2017, 2012,
2988 2018, 2014, 2020, 2011, 2021, 2015, 2022, 2023, 2025, 2029,
2989 2017, 2028, 2027, 2032, 2026, 2021, 2030, 2020, 2022, 2027,
2990 2033, 2035, 2023, 2034, 2036, 2017, 2028, 2037, 0, 2020,
2991 0, 2021, 2025, 2022, 2023, 2025, 2026, 2039, 2028, 2027,
2992 2032, 2026, 2030, 2030, 2033, 2034, 2038, 2033, 2041, 2042,
2993 2034, 2040, 2047, 2035, 2037, 2043, 2036, 2042, 2048, 2038,
2994 2045, 2041, 2046, 2039, 2039, 2050, 2040, 2051, 2052, 0,
2995 2049, 2055, 2050, 2038, 0, 2041, 2042, 2053, 2040, 2047,
2996 2048, 2043, 2043, 2045, 2059, 2048, 2046, 2045, 2049, 2046,
2997
2998 2051, 2053, 2050, 2055, 2051, 2052, 2056, 2049, 2055, 2057,
2999 2058, 2060, 2061, 2056, 2053, 2062, 2057, 2059, 2060, 2063,
3000 2068, 2059, 2064, 2058, 2066, 0, 2067, 0, 0, 2070,
3001 2073, 2064, 2074, 2056, 2061, 2066, 2057, 2058, 2060, 2061,
3002 2063, 2069, 2075, 2073, 2076, 2076, 2063, 2062, 2067, 2064,
3003 2077, 2066, 2068, 2067, 2070, 2079, 2070, 2073, 2074, 2074,
3004 2069, 2080, 2082, 2083, 2081, 2086, 2075, 2090, 2069, 2075,
3005 0, 2076, 2098, 2091, 2088, 2094, 2077, 2077, 2079, 2081,
3006 2090, 2083, 2079, 2088, 2091, 2095, 2095, 2096, 2097, 2082,
3007 2083, 2081, 2086, 2080, 2090, 2100, 2102, 2094, 2103, 2098,
3008
3009 2091, 2088, 2094, 2105, 2106, 2104, 2109, 2110, 2105, 2096,
3010 2097, 2108, 2095, 2113, 2096, 2097, 2104, 2112, 0, 2108,
3011 2114, 2109, 2100, 2117, 2103, 2103, 2106, 2115, 2102, 2114,
3012 2105, 2106, 2104, 2109, 2110, 2112, 2121, 2119, 2108, 2115,
3013 2118, 2122, 2126, 2123, 2112, 2113, 2119, 2114, 2118, 2124,
3014 2117, 2128, 2125, 2127, 2115, 2126, 2130, 2131, 2128, 2129,
3015 2132, 2133, 2121, 2121, 2119, 2123, 2127, 2118, 2122, 2126,
3016 2123, 2124, 2136, 2135, 2134, 0, 2124, 2125, 2128, 2125,
3017 2127, 2129, 2135, 2130, 2131, 2137, 2129, 2132, 2133, 2134,
3018 2138, 2139, 2140, 2142, 2136, 2141, 2143, 2144, 2145, 2136,
3019
3020 2135, 2134, 2141, 2146, 2142, 2144, 2139, 2140, 2151, 2149,
3021 2147, 2137, 2137, 2148, 2155, 2151, 2138, 2138, 2139, 2140,
3022 2142, 2152, 2141, 2143, 2144, 2145, 2147, 2150, 2148, 2149,
3023 2146, 2153, 2154, 2156, 0, 2151, 2149, 2147, 2153, 2154,
3024 2148, 2155, 2150, 2152, 2157, 2157, 2158, 2159, 2152, 2160,
3025 2161, 2156, 2160, 2158, 2150, 2162, 2164, 2163, 2153, 2154,
3026 2156, 2159, 2168, 2161, 2170, 2169, 2165, 2168, 2164, 2169,
3027 2167, 2157, 2171, 2158, 2159, 2163, 2160, 2161, 2165, 2167,
3028 2172, 2162, 2162, 2164, 2163, 2171, 2173, 2174, 2170, 2168,
3029 2175, 2170, 2169, 2165, 2176, 0, 2178, 2167, 2180, 2171,
3030
3031 2181, 2186, 2172, 2182, 2183, 0, 0, 2172, 2173, 2181,
3032 2186, 2185, 2183, 2173, 2174, 2211, 2194, 2175, 2185, 2182,
3033 2176, 2176, 2178, 2178, 2180, 2180, 2188, 2181, 2186, 2187,
3034 2182, 2183, 2189, 2188, 2187, 2190, 2191, 2196, 2185, 2192,
3035 2197, 2195, 2190, 2194, 2200, 2191, 2195, 2211, 2201, 2202,
3036 2189, 2199, 2203, 2188, 0, 2196, 2187, 2201, 2202, 2189,
3037 2209, 2204, 2190, 2191, 2196, 2192, 2192, 2197, 2195, 2199,
3038 2207, 2200, 2203, 2204, 2205, 2201, 2202, 2206, 2199, 2203,
3039 2210, 2207, 2208, 2205, 2212, 2219, 2206, 2209, 2204, 0,
3040 2208, 2213, 2214, 2212, 2215, 2216, 2220, 2207, 2217, 2221,
3041
3042 2214, 2205, 2216, 2213, 2206, 2217, 2218, 2210, 2222, 2208,
3043 2219, 2212, 2219, 2226, 2230, 0, 2215, 2228, 2213, 2214,
3044 2229, 2215, 2216, 2220, 2221, 2217, 2221, 2229, 2218, 2224,
3045 2227, 2226, 2228, 2218, 2232, 2222, 2230, 2224, 2227, 2231,
3046 2226, 2230, 2232, 2235, 2228, 2236, 2231, 2229, 2237, 2239,
3047 2235, 2238, 2240, 2243, 2241, 0, 2224, 2227, 2239, 2244,
3048 2245, 2232, 2250, 2238, 2253, 2243, 2231, 2248, 2255, 2236,
3049 2235, 2246, 2236, 2252, 2248, 2237, 2239, 2241, 2238, 2240,
3050 2243, 2241, 2244, 2249, 2254, 2246, 2244, 2245, 2252, 2250,
3051 2249, 2253, 2254, 2256, 2248, 2255, 2258, 2257, 2246, 2263,
3052
3053 2252, 2264, 2265, 2266, 2267, 0, 2264, 2270, 2273, 2268,
3054 2249, 2254, 2257, 0, 2269, 2256, 2276, 2266, 2267, 0,
3055 2256, 2271, 2277, 2258, 2257, 2263, 2263, 2268, 2264, 2265,
3056 2266, 2267, 2269, 2271, 2270, 2273, 2268, 2278, 2276, 2279,
3057 2280, 2269, 2282, 2276, 2277, 2281, 2283, 0, 2271, 2277,
3058 2278, 2285, 2286, 2281, 2287, 2289, 2288, 2290, 2292, 2280,
3059 2282, 2279, 2293, 2285, 2278, 2283, 2279, 2280, 2288, 2282,
3060 2291, 2293, 2281, 2283, 2286, 2295, 2287, 2294, 2285, 2286,
3061 2292, 2287, 2289, 2288, 2290, 2292, 2294, 2296, 2298, 2293,
3062 2291, 2297, 2300, 2301, 2299, 2305, 2304, 2291, 2307, 2310,
3063
3064 2298, 2306, 2308, 2307, 2294, 2309, 0, 2295, 0, 2296,
3065 2304, 2311, 0, 2312, 2296, 2298, 2299, 2297, 2297, 2300,
3066 2301, 2299, 2305, 2304, 2308, 2306, 2313, 2309, 2306, 2308,
3067 2307, 2310, 2309, 2314, 2311, 2312, 2315, 2316, 2311, 2317,
3068 2312, 2322, 0, 2319, 2313, 2314, 0, 2320, 2326, 0,
3069 2324, 2325, 0, 2313, 2317, 2315, 2322, 2326, 0, 2316,
3070 2314, 2328, 2327, 2315, 2316, 2319, 2317, 2329, 2322, 2330,
3071 2319, 2320, 2324, 2325, 2320, 2326, 2327, 2324, 2325, 2328,
3072 2331, 2337, 2334, 2341, 2335, 2329, 2339, 2340, 2328, 2327,
3073 2334, 2335, 2336, 2338, 2329, 2330, 2330, 2342, 2331, 2340,
3074
3075 2336, 2338, 2347, 2344, 2339, 2342, 2348, 2331, 2337, 2334,
3076 2341, 2335, 2350, 2339, 2340, 2344, 2346, 2351, 2352, 2336,
3077 2338, 2353, 0, 2346, 2342, 2347, 2349, 2354, 2349, 2347,
3078 2344, 2358, 0, 2348, 2355, 2362, 2360, 2357, 2361, 0,
3079 2364, 2365, 2366, 2346, 2350, 2358, 2354, 2362, 2353, 2351,
3080 2352, 2361, 2368, 2349, 2354, 2357, 2355, 2370, 2358, 2360,
3081 2376, 2355, 2362, 2360, 2357, 2361, 2364, 2364, 2365, 2366,
3082 2372, 2373, 2378, 2375, 2379, 0, 2373, 2372, 2380, 2368,
3083 2375, 2381, 2383, 2385, 2370, 2386, 2376, 2376, 2387, 2388,
3084 2385, 2383, 2389, 2390, 2394, 2381, 2395, 2372, 2393, 2378,
3085
3086 2375, 2379, 2380, 2373, 2389, 2380, 2396, 2391, 2381, 2383,
3087 2385, 2393, 2386, 2392, 2387, 2387, 2388, 2404, 2403, 2389,
3088 2390, 2391, 2392, 2395, 2400, 2393, 2394, 2399, 2400, 2396,
3089 2401, 2402, 2399, 2396, 2391, 2407, 2412, 2401, 2402, 2403,
3090 2392, 2405, 2406, 2405, 2410, 2403, 2413, 2419, 2415, 2404,
3091 2415, 2400, 2416, 2420, 2421, 2412, 2419, 2401, 2402, 2399,
3092 2420, 2418, 2407, 2412, 2422, 2406, 2410, 2421, 2405, 2406,
3093 2413, 2410, 2427, 2413, 2419, 2415, 2416, 2417, 2417, 2416,
3094 2420, 2421, 2423, 2418, 2424, 2426, 2432, 2417, 2418, 2425,
3095 2423, 2422, 2428, 2426, 2425, 0, 2429, 2432, 2430, 2427,
3096
3097 2431, 0, 2436, 2424, 2417, 2417, 2433, 2434, 2440, 2423,
3098 2437, 2424, 2426, 2432, 2434, 2435, 2435, 2437, 2428, 2428,
3099 2436, 2425, 2429, 2429, 2430, 2430, 2431, 2431, 2433, 2436,
3100 2441, 2438, 2442, 2433, 2434, 2440, 2444, 2437, 2438, 2446,
3101 2445, 2442, 2435, 2447, 2449, 2455, 2450, 2454, 0, 2458,
3102 2451, 2452, 2456, 0, 2441, 0, 2454, 2441, 2438, 2442,
3103 2445, 2458, 2457, 2444, 2450, 2447, 2446, 2445, 2451, 2452,
3104 2447, 2449, 2455, 2450, 2454, 2456, 2458, 2451, 2452, 2456,
3105 2457, 2459, 2460, 2461, 2466, 2467, 2459, 2469, 2470, 2457,
3106 2473, 2476, 2473, 2475, 2467, 0, 2460, 0, 2474, 2482,
3107
3108 2475, 2461, 2480, 2470, 2478, 2469, 2483, 2490, 2480, 2460,
3109 2461, 2466, 2467, 2459, 2469, 2470, 2474, 2473, 2484, 2478,
3110 2475, 2482, 2485, 2476, 2487, 2474, 2482, 2488, 2483, 2480,
3111 2488, 2478, 2491, 2483, 2490, 2492, 2494, 2493, 2496, 2495,
3112 2485, 2498, 2501, 2494, 2484, 2484, 2487, 2495, 2499, 2485,
3113 2500, 2487, 2502, 2488, 2488, 2493, 2504, 2488, 2505, 2491,
3114 2496, 2502, 2492, 2494, 2493, 2496, 2495, 2505, 2503, 2501,
3115 2499, 2506, 2500, 2498, 2503, 2499, 0, 2500, 2504, 2502,
3116 2507, 2508, 2507, 2504, 2510, 2505, 2511, 2512, 2514, 2518,
3117 2516, 2517, 2510, 2525, 2512, 2503, 2524, 2524, 2511, 2520,
3118
3119 2523, 2519, 0, 2506, 2516, 2517, 2522, 2507, 2508, 2528,
3120 2520, 2510, 2518, 2511, 2512, 2514, 2518, 2516, 2517, 2519,
3121 2525, 2521, 2523, 2524, 2526, 2522, 2520, 2523, 2519, 2521,
3122 2529, 2531, 2526, 2522, 2533, 2535, 2528, 2531, 2536, 2537,
3123 2540, 2538, 2546, 2542, 2550, 2541, 2535, 2542, 2521, 2536,
3124 2537, 2526, 2541, 2545, 2548, 2546, 2543, 2529, 2531, 2551,
3125 2557, 2533, 2535, 2538, 2543, 2536, 2537, 2540, 2538, 2546,
3126 2542, 2550, 2541, 2549, 2553, 2552, 2548, 2555, 2549, 2545,
3127 2545, 2548, 2552, 2543, 2556, 2561, 2551, 2554, 2558, 2562,
3128 2559, 2556, 2557, 2553, 2567, 2555, 2558, 2563, 2569, 2560,
3129
3130 2549, 2553, 2552, 2554, 2555, 2559, 2560, 2570, 2571, 2567,
3131 2572, 2556, 2561, 2562, 2554, 2558, 2562, 2559, 2568, 2573,
3132 2553, 2567, 2575, 2563, 2563, 2568, 2560, 2578, 2573, 2576,
3133 2569, 2577, 2571, 2580, 2570, 2571, 2582, 2579, 2579, 2577,
3134 2583, 2586, 2572, 2584, 2575, 2568, 2573, 2579, 2583, 2575,
3135 2587, 2576, 2588, 2589, 2590, 2591, 2576, 2592, 2577, 2578,
3136 2580, 2584, 2593, 2582, 2579, 2579, 2589, 2583, 2586, 2594,
3137 2584, 2596, 2606, 2601, 2588, 2599, 2590, 2587, 2601, 2588,
3138 2589, 2590, 2591, 2599, 2592, 2602, 2620, 2603, 2607, 2593,
3139 2602, 2594, 2603, 2604, 2610, 2609, 2594, 2608, 2596, 2606,
3140
3141 2601, 2607, 2599, 2611, 2608, 2612, 2615, 2617, 0, 2618,
3142 2619, 2611, 2602, 2609, 2603, 2607, 2622, 2623, 2620, 2604,
3143 2604, 2610, 2609, 2619, 2608, 2621, 2624, 2612, 2628, 0,
3144 2611, 2618, 2612, 2615, 2617, 2622, 2618, 2619, 2626, 2627,
3145 2621, 2629, 2630, 2622, 2623, 2626, 2627, 2634, 2624, 2633,
3146 2628, 2632, 2621, 2624, 2634, 2628, 2629, 2633, 2639, 2647,
3147 2635, 2637, 2636, 2630, 2639, 2626, 2627, 2635, 2629, 2630,
3148 2632, 2636, 2637, 2640, 2634, 2643, 2633, 2644, 2632, 2648,
3149 2638, 2638, 2643, 2653, 2655, 2639, 2647, 2635, 2637, 2636,
3150 2638, 2644, 2649, 2656, 2656, 2640, 2657, 2657, 2658, 2658,
3151
3152 2640, 2659, 2643, 2661, 2644, 2662, 2648, 2638, 2638, 2665,
3153 2653, 2655, 2666, 2663, 2662, 2649, 2669, 2670, 2669, 2649,
3154 2672, 2673, 2656, 2671, 2659, 2657, 2663, 2658, 2659, 2677,
3155 2661, 2665, 2662, 2673, 2676, 2678, 2665, 2670, 2672, 2666,
3156 2663, 2679, 2675, 2669, 2670, 2680, 2671, 2672, 2673, 2681,
3157 2671, 2675, 2676, 2683, 2684, 2677, 2677, 2680, 2683, 0,
3158 2682, 2676, 2678, 2682, 2685, 2686, 2685, 2687, 2679, 2675,
3159 0, 2681, 2680, 2687, 2688, 2689, 2681, 2686, 2682, 2691,
3160 2690, 2692, 2695, 2698, 2699, 2683, 2684, 2682, 2690, 2700,
3161 2682, 2685, 2686, 2701, 2687, 2702, 2688, 2689, 2703, 2704,
3162
3163 2706, 2688, 2689, 2692, 2707, 2708, 2691, 2690, 2692, 2695,
3164 2698, 2699, 2708, 2710, 2711, 2714, 2700, 2712, 2706, 2713,
3165 2701, 2710, 2702, 2715, 2716, 2703, 2704, 2706, 2717, 2712,
3166 2714, 2707, 2708, 2713, 2720, 2721, 2716, 2722, 2722, 2723,
3167 2710, 2711, 2714, 2720, 2712, 2724, 2713, 2726, 2727, 2715,
3168 2715, 2716, 0, 0, 2724, 2717, 2728, 2729, 2731, 2721,
3169 2730, 2720, 2721, 2734, 2722, 2723, 2723, 2731, 2730, 2728,
3170 2732, 2726, 2724, 0, 2726, 2734, 2743, 2745, 2746, 2729,
3171 2727, 2732, 2748, 2728, 2729, 2731, 2748, 2730, 2749, 2750,
3172 2734, 2751, 2754, 0, 2752, 2755, 2754, 2732, 2751, 2757,
3173
3174 2743, 2756, 2758, 2743, 2745, 2746, 2749, 2752, 2759, 2748,
3175 0, 2755, 2750, 2760, 2758, 2749, 2750, 2761, 2751, 2754,
3176 2763, 2752, 2755, 2756, 2757, 2761, 2757, 2760, 2756, 2758,
3177 2762, 2763, 2772, 2765, 2759, 2759, 2764, 2766, 2764, 2762,
3178 2760, 2767, 2770, 2766, 2761, 2765, 2771, 2763, 2767, 2773,
3179 2774, 0, 2775, 2771, 2776, 2770, 2777, 2762, 2778, 2772,
3180 2765, 0, 2780, 2764, 2766, 2779, 2778, 2773, 2767, 2770,
3181 2788, 2781, 2779, 2771, 2782, 2784, 2773, 2774, 2775, 2775,
3182 2783, 2776, 2783, 2777, 2785, 2778, 2780, 2784, 2787, 2780,
3183 2786, 2789, 2779, 2781, 2790, 2787, 2782, 2788, 2781, 2789,
3184
3185 2792, 2782, 2784, 2786, 2794, 2797, 2799, 2783, 2798, 2801,
3186 2802, 2800, 2792, 2794, 0, 2787, 2785, 2786, 2789, 2800,
3187 2805, 2790, 2806, 2803, 2814, 2799, 2804, 2792, 2805, 2816,
3188 2808, 2794, 2797, 2799, 2798, 2798, 2803, 2808, 2800, 2810,
3189 2804, 2801, 2802, 2816, 2811, 2817, 2814, 2805, 2813, 2806,
3190 2803, 2814, 2810, 2804, 2815, 2813, 2816, 2808, 2819, 2817,
3191 2818, 2820, 2815, 2824, 2822, 0, 2810, 2811, 2818, 2823,
3192 2825, 2811, 2817, 2822, 2826, 2813, 2827, 2823, 2828, 2832,
3193 2819, 2815, 2829, 2820, 0, 2819, 2830, 2818, 2820, 0,
3194 2824, 2822, 2825, 2831, 2833, 2834, 2823, 2825, 0, 2838,
3195
3196 2828, 2831, 2827, 2827, 2829, 2828, 2826, 2836, 2830, 2829,
3197 2837, 2832, 2844, 2830, 2841, 2839, 2833, 2840, 2837, 2838,
3198 2831, 2833, 2834, 2839, 2842, 2840, 2838, 2843, 2846, 0,
3199 2836, 0, 2842, 2851, 2836, 2848, 0, 2837, 2844, 2844,
3200 2847, 2843, 2839, 2847, 2840, 2849, 2841, 2851, 2850, 0,
3201 2852, 2842, 2853, 2849, 2843, 2846, 2850, 2848, 2847, 2854,
3202 2851, 2857, 2848, 2856, 2856, 2859, 0, 2847, 2860, 0,
3203 2847, 2861, 2849, 2854, 2853, 2850, 2852, 2852, 2864, 2853,
3204 2862, 2858, 2867, 0, 2865, 2866, 2854, 2857, 2857, 2858,
3205 2856, 2859, 2859, 2861, 2860, 2860, 2863, 2868, 2861, 2869,
3206
3207 2862, 2874, 2883, 2871, 2863, 2864, 2865, 2862, 2858, 2867,
3208 2866, 2865, 2866, 2870, 2872, 2877, 2878, 2868, 0, 2869,
3209 2881, 2870, 2872, 2863, 2868, 2871, 2869, 2875, 2874, 2883,
3210 2871, 2879, 0, 2886, 2887, 2875, 2880, 2877, 2878, 2879,
3211 2870, 2872, 2877, 2878, 2880, 2884, 2881, 2881, 2885, 2888,
3212 2890, 2891, 2894, 2884, 2875, 0, 2885, 2898, 2879, 2886,
3213 2886, 2887, 2892, 2880, 2897, 2898, 2900, 2901, 0, 2888,
3214 0, 0, 2884, 2899, 2894, 2885, 2888, 2890, 2891, 2894,
3215 0, 2899, 2892, 0, 2898, 0, 2897, 0, 0, 2892,
3216 0, 2897, 0, 2900, 2901, 0, 0, 0, 0, 0,
3217
3218 2899, 2905, 2905, 2905, 2905, 2905, 2905, 2905, 2906, 2906,
3219 2906, 2906, 2906, 2906, 2906, 2907, 2907, 2907, 2907, 2907,
3220 2907, 2907, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2909,
3221 2909, 2909, 2909, 2909, 2909, 2909, 2911, 2911, 0, 2911,
3222 2911, 2911, 2911, 2912, 2912, 0, 0, 0, 2912, 2912,
3223 2913, 2913, 0, 0, 2913, 0, 2913, 2914, 0, 0,
3224 0, 0, 0, 2914, 2915, 2915, 0, 0, 0, 2915,
3225 2915, 2916, 0, 0, 0, 0, 0, 2916, 2917, 2917,
3226 0, 2917, 2917, 2917, 2917, 2918, 2918, 0, 2918, 2918,
3227 2918, 2918, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
3228
3229 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
3230 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
3231 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
3232 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
3233 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
3234 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904
2427 295, 288, 289, 289, 291, 298, 294, 297, 299, 294,
2428 292, 291, 290, 299, 291, 295, 305, 320, 303, 0,
2429 301, 305, 292, 298, 302, 297, 1083, 295, 300, 306,
2430 300, 291, 296, 303, 297, 296, 304, 304, 302, 0,
2431 296, 296, 296, 296, 301, 303, 300, 301, 305, 320,
2432
2433 296, 302, 300, 306, 1083, 300, 306, 300, 309, 296,
2434 308, 304, 296, 304, 304, 310, 312, 296, 296, 296,
2435 296, 307, 308, 300, 307, 315, 309, 313, 314, 316,
2436 323, 307, 318, 310, 319, 309, 322, 308, 312, 318,
2437 314, 317, 310, 312, 316, 324, 319, 315, 307, 317,
2438 321, 307, 315, 313, 313, 314, 316, 321, 322, 318,
2439 325, 319, 323, 322, 330, 327, 325, 324, 317, 331,
2440 328, 326, 324, 326, 0, 0, 0, 321, 327, 0,
2441 332, 329, 325, 328, 0, 0, 328, 325, 328, 0,
2442 330, 330, 327, 325, 328, 326, 335, 328, 326, 329,
2443
2444 326, 331, 332, 335, 339, 336, 333, 332, 329, 337,
2445 328, 336, 333, 328, 338, 328, 333, 339, 341, 345,
2446 355, 337, 342, 335, 333, 0, 338, 355, 344, 347,
2447 333, 339, 336, 333, 341, 342, 337, 345, 348, 333,
2448 344, 338, 341, 333, 348, 341, 345, 355, 346, 342,
2449 347, 333, 334, 346, 334, 344, 347, 350, 349, 351,
2450 352, 341, 356, 353, 357, 348, 349, 334, 352, 350,
2451 334, 0, 334, 357, 334, 356, 846, 351, 334, 334,
2452 346, 334, 354, 354, 350, 349, 351, 352, 0, 356,
2453 364, 359, 0, 361, 334, 353, 357, 334, 359, 334,
2454
2455 357, 334, 343, 343, 358, 361, 360, 846, 358, 354,
2456 362, 363, 343, 360, 343, 343, 343, 366, 359, 343,
2457 361, 365, 364, 363, 366, 367, 369, 343, 372, 343,
2458 343, 358, 362, 360, 371, 0, 368, 362, 363, 343,
2459 367, 343, 343, 343, 366, 371, 343, 365, 365, 368,
2460 372, 370, 367, 370, 375, 372, 373, 373, 369, 374,
2461 376, 371, 377, 368, 383, 375, 374, 379, 0, 380,
2462 378, 376, 381, 0, 382, 377, 383, 0, 370, 0,
2463 389, 375, 382, 0, 380, 373, 374, 376, 378, 377,
2464 379, 383, 380, 384, 379, 378, 380, 378, 381, 381,
2465
2466 385, 382, 389, 386, 384, 388, 387, 389, 390, 385,
2467 391, 380, 393, 392, 396, 378, 386, 387, 393, 387,
2468 384, 394, 0, 388, 387, 398, 395, 385, 391, 399,
2469 386, 390, 388, 387, 404, 390, 396, 391, 401, 393,
2470 397, 396, 394, 399, 387, 392, 387, 397, 394, 395,
2471 402, 398, 398, 395, 403, 405, 399, 406, 0, 411,
2472 401, 408, 407, 409, 402, 401, 404, 397, 407, 406,
2473 0, 410, 415, 0, 411, 418, 0, 402, 405, 410,
2474 403, 403, 405, 408, 406, 409, 411, 412, 408, 407,
2475 409, 413, 414, 416, 412, 417, 415, 410, 410, 415,
2476
2477 413, 418, 418, 419, 422, 420, 410, 414, 421, 422,
2478 417, 420, 424, 429, 412, 425, 416, 426, 413, 414,
2479 416, 425, 417, 427, 433, 419, 428, 434, 429, 436,
2480 419, 422, 420, 428, 421, 421, 426, 433, 424, 424,
2481 429, 427, 425, 431, 426, 431, 435, 432, 440, 437,
2482 427, 433, 431, 428, 432, 438, 444, 442, 441, 434,
2483 439, 436, 0, 439, 435, 441, 443, 0, 438, 444,
2484 431, 437, 431, 435, 432, 445, 437, 448, 0, 439,
2485 440, 442, 438, 444, 442, 441, 446, 439, 447, 443,
2486 439, 446, 449, 450, 447, 451, 452, 445, 443, 456,
2487
2488 448, 453, 445, 459, 448, 450, 456, 452, 458, 453,
2489 454, 459, 499, 446, 449, 447, 443, 451, 0, 449,
2490 450, 457, 451, 452, 454, 460, 456, 461, 453, 0,
2491 459, 458, 0, 457, 463, 458, 460, 454, 455, 499,
2492 462, 466, 0, 455, 462, 455, 463, 464, 457, 465,
2493 461, 455, 460, 455, 461, 468, 455, 455, 0, 466,
2494 465, 463, 462, 455, 455, 455, 468, 462, 466, 464,
2495 455, 462, 455, 469, 464, 467, 465, 470, 455, 471,
2496 455, 470, 468, 455, 455, 467, 471, 472, 476, 473,
2497 455, 473, 474, 475, 478, 0, 477, 469, 0, 483,
2498
2499 469, 488, 478, 476, 470, 475, 471, 467, 477, 480,
2500 481, 483, 467, 472, 472, 476, 473, 479, 474, 474,
2501 475, 478, 479, 477, 482, 484, 483, 486, 481, 490,
2502 487, 480, 482, 488, 489, 491, 480, 481, 493, 494,
2503 495, 490, 492, 491, 479, 486, 484, 504, 494, 489,
2504 493, 482, 484, 487, 486, 492, 490, 487, 496, 497,
2505 498, 489, 491, 495, 500, 493, 494, 495, 501, 492,
2506 502, 504, 496, 503, 504, 0, 505, 507, 506, 498,
2507 510, 515, 508, 501, 497, 496, 497, 498, 503, 505,
2508 506, 510, 511, 513, 514, 501, 500, 511, 512, 507,
2509
2510 503, 509, 502, 505, 507, 506, 508, 510, 509, 508,
2511 516, 509, 512, 515, 517, 518, 519, 521, 520, 509,
2512 513, 514, 519, 522, 511, 512, 529, 523, 509, 524,
2513 525, 522, 526, 534, 0, 509, 526, 516, 509, 521,
2514 527, 517, 520, 519, 521, 520, 523, 518, 527, 528,
2515 522, 530, 525, 524, 523, 531, 524, 525, 529, 526,
2516 536, 532, 533, 535, 531, 534, 539, 527, 538, 533,
2517 537, 540, 528, 536, 530, 537, 528, 538, 530, 537,
2518 540, 541, 531, 532, 546, 535, 0, 536, 532, 533,
2519 535, 542, 539, 539, 537, 538, 543, 537, 540, 544,
2520
2521 548, 547, 537, 541, 553, 0, 537, 549, 541, 543,
2522 550, 544, 551, 542, 0, 553, 546, 0, 542, 547,
2523 552, 555, 559, 543, 548, 0, 544, 548, 547, 549,
2524 549, 553, 550, 557, 549, 554, 551, 550, 556, 551,
2525 560, 555, 552, 558, 554, 561, 562, 552, 555, 559,
2526 558, 563, 556, 561, 566, 557, 549, 562, 560, 564,
2527 557, 565, 554, 567, 569, 556, 0, 560, 573, 563,
2528 558, 571, 561, 562, 564, 566, 568, 568, 563, 570,
2529 571, 566, 572, 575, 576, 574, 564, 567, 569, 578,
2530 567, 569, 577, 565, 578, 572, 579, 582, 571, 580,
2531
2532 573, 570, 587, 585, 584, 568, 570, 574, 576, 572,
2533 579, 576, 574, 580, 577, 575, 581, 581, 586, 577,
2534 583, 578, 584, 579, 581, 585, 580, 589, 583, 582,
2535 585, 584, 590, 586, 587, 588, 592, 590, 592, 591,
2536 594, 0, 586, 581, 581, 586, 593, 583, 594, 589,
2537 588, 595, 596, 601, 589, 0, 603, 602, 0, 597,
2538 586, 596, 588, 592, 590, 591, 591, 594, 597, 599,
2539 0, 593, 598, 593, 603, 600, 595, 599, 595, 596,
2540 602, 598, 600, 603, 602, 601, 597, 607, 604, 605,
2541 608, 610, 609, 611, 606, 607, 599, 612, 616, 598,
2542
2543 604, 605, 600, 606, 609, 608, 611, 616, 615, 0,
2544 613, 0, 612, 621, 607, 604, 605, 608, 613, 609,
2545 611, 606, 614, 610, 612, 616, 621, 617, 620, 623,
2546 614, 615, 618, 619, 619, 615, 620, 613, 617, 622,
2547 621, 618, 619, 624, 626, 627, 625, 628, 0, 614,
2548 630, 624, 623, 632, 617, 620, 623, 626, 628, 618,
2549 619, 619, 625, 631, 630, 622, 622, 627, 629, 633,
2550 624, 626, 627, 625, 628, 632, 629, 630, 634, 635,
2551 632, 638, 636, 631, 637, 639, 650, 641, 0, 633,
2552 631, 636, 640, 642, 643, 629, 633, 0, 639, 638,
2553
2554 634, 635, 641, 644, 637, 634, 635, 646, 638, 636,
2555 640, 637, 639, 650, 641, 642, 645, 652, 643, 640,
2556 642, 643, 649, 647, 648, 646, 644, 653, 649, 645,
2557 644, 651, 655, 656, 646, 647, 660, 648, 660, 651,
2558 655, 657, 0, 645, 652, 653, 658, 659, 657, 649,
2559 647, 648, 661, 662, 653, 665, 663, 651, 651, 655,
2560 664, 661, 659, 660, 665, 656, 651, 677, 657, 658,
2561 666, 667, 666, 658, 659, 663, 0, 670, 667, 661,
2562 664, 673, 665, 663, 676, 662, 0, 664, 677, 670,
2563 678, 673, 679, 682, 677, 0, 680, 666, 667, 668,
2564
2565 0, 678, 676, 668, 670, 681, 668, 685, 673, 682,
2566 686, 676, 684, 668, 685, 679, 668, 678, 683, 679,
2567 682, 668, 680, 680, 692, 684, 668, 683, 688, 689,
2568 668, 681, 681, 668, 685, 689, 0, 0, 693, 684,
2569 668, 694, 686, 668, 690, 683, 687, 687, 692, 687,
2570 688, 692, 687, 690, 695, 688, 689, 687, 691, 699,
2571 691, 694, 697, 687, 687, 693, 696, 0, 694, 701,
2572 698, 690, 687, 687, 687, 0, 687, 700, 696, 687,
2573 695, 695, 704, 699, 687, 691, 699, 702, 697, 697,
2574 687, 687, 698, 696, 701, 703, 701, 698, 706, 700,
2575
2576 705, 707, 702, 703, 700, 704, 706, 705, 708, 704,
2577 711, 709, 712, 710, 702, 713, 715, 717, 0, 714,
2578 707, 712, 703, 709, 714, 706, 710, 705, 707, 716,
2579 713, 720, 721, 722, 708, 708, 711, 711, 709, 712,
2580 710, 723, 713, 724, 717, 718, 714, 725, 715, 726,
2581 718, 716, 728, 720, 727, 729, 716, 731, 720, 730,
2582 733, 732, 735, 723, 721, 722, 731, 0, 723, 738,
2583 726, 725, 736, 727, 725, 724, 726, 718, 730, 728,
2584 733, 727, 729, 732, 731, 734, 730, 733, 732, 735,
2585 736, 737, 739, 734, 743, 741, 742, 744, 746, 736,
2586
2587 739, 738, 745, 748, 747, 748, 749, 0, 753, 0,
2588 737, 753, 734, 741, 742, 744, 743, 747, 737, 739,
2589 746, 743, 741, 742, 744, 746, 745, 750, 751, 745,
2590 748, 747, 749, 749, 752, 753, 751, 757, 754, 750,
2591 0, 756, 758, 760, 761, 759, 754, 0, 758, 760,
2592 762, 761, 752, 763, 750, 751, 764, 762, 763, 767,
2593 765, 752, 754, 764, 757, 754, 756, 759, 756, 758,
2594 760, 761, 759, 754, 770, 766, 768, 762, 765, 766,
2595 763, 769, 767, 764, 772, 768, 767, 765, 773, 769,
2596 777, 771, 774, 775, 776, 778, 773, 779, 780, 772,
2597
2598 0, 0, 766, 768, 779, 774, 770, 776, 769, 771,
2599 782, 772, 777, 787, 775, 773, 780, 777, 771, 774,
2600 775, 776, 778, 781, 779, 780, 783, 784, 785, 782,
2601 781, 786, 784, 783, 788, 789, 785, 782, 786, 790,
2602 791, 792, 793, 794, 795, 787, 790, 788, 798, 799,
2603 781, 794, 795, 783, 784, 785, 796, 797, 786, 795,
2604 803, 788, 800, 797, 805, 793, 790, 789, 801, 793,
2605 794, 795, 791, 792, 798, 798, 802, 801, 796, 795,
2606 804, 799, 807, 796, 797, 806, 800, 804, 808, 800,
2607 802, 805, 803, 809, 806, 801, 810, 0, 811, 814,
2608
2609 815, 812, 0, 802, 807, 809, 812, 804, 815, 807,
2610 813, 817, 806, 826, 817, 808, 818, 813, 823, 810,
2611 809, 814, 825, 810, 811, 811, 814, 815, 812, 818,
2612 821, 824, 820, 0, 825, 0, 821, 813, 817, 820,
2613 826, 0, 828, 818, 823, 823, 0, 0, 827, 825,
2614 827, 833, 829, 0, 824, 831, 833, 821, 824, 820,
2615 822, 830, 822, 832, 829, 828, 822, 834, 822, 828,
2616 843, 844, 0, 822, 830, 827, 832, 831, 822, 829,
2617 834, 835, 831, 833, 822, 836, 0, 822, 830, 822,
2618 832, 837, 838, 822, 834, 822, 839, 836, 841, 842,
2619
2620 822, 837, 843, 844, 835, 822, 845, 847, 835, 839,
2621 840, 841, 836, 837, 838, 850, 840, 848, 837, 838,
2622 842, 849, 848, 839, 850, 841, 842, 0, 837, 849,
2623 852, 853, 0, 845, 854, 0, 855, 840, 856, 847,
2624 0, 0, 850, 0, 848, 852, 859, 854, 849, 851,
2625 857, 855, 858, 853, 851, 862, 851, 852, 853, 859,
2626 866, 854, 851, 855, 856, 856, 865, 851, 851, 863,
2627 860, 858, 857, 859, 851, 851, 851, 857, 860, 858,
2628 861, 851, 862, 851, 866, 867, 868, 866, 861, 851,
2629 869, 872, 863, 867, 851, 851, 863, 860, 865, 870,
2630
2631 868, 851, 871, 874, 875, 873, 876, 861, 877, 872,
2632 871, 0, 867, 868, 874, 878, 877, 0, 872, 885,
2633 879, 870, 869, 873, 876, 880, 870, 879, 882, 871,
2634 874, 883, 873, 876, 881, 877, 875, 878, 880, 884,
2635 885, 881, 878, 882, 886, 887, 885, 879, 889, 883,
2636 904, 891, 880, 892, 886, 882, 894, 884, 883, 889,
2637 892, 881, 893, 895, 891, 897, 884, 896, 0, 894,
2638 893, 886, 895, 898, 901, 889, 903, 887, 891, 896,
2639 892, 902, 904, 894, 905, 910, 907, 897, 908, 893,
2640 895, 0, 897, 908, 896, 898, 901, 907, 905, 902,
2641
2642 898, 901, 903, 903, 909, 911, 913, 909, 902, 910,
2643 912, 905, 910, 907, 914, 913, 916, 912, 911, 917,
2644 908, 918, 0, 915, 0, 919, 917, 0, 914, 921,
2645 909, 909, 911, 913, 909, 915, 920, 912, 922, 924,
2646 925, 914, 920, 923, 926, 931, 917, 928, 916, 919,
2647 915, 921, 919, 918, 923, 930, 921, 932, 929, 926,
2648 922, 924, 925, 920, 934, 922, 924, 925, 928, 929,
2649 923, 926, 933, 934, 928, 0, 930, 931, 935, 0,
2650 936, 938, 930, 937, 932, 929, 939, 940, 942, 938,
2651 933, 934, 937, 939, 943, 941, 944, 945, 0, 933,
2652
2653 947, 951, 935, 946, 953, 935, 936, 936, 938, 941,
2654 937, 940, 949, 939, 940, 952, 957, 954, 944, 945,
2655 942, 949, 941, 944, 945, 946, 943, 950, 955, 956,
2656 946, 953, 947, 951, 950, 954, 958, 952, 956, 949,
2657 957, 959, 952, 957, 954, 962, 955, 961, 963, 960,
2658 964, 966, 965, 962, 950, 955, 956, 959, 960, 967,
2659 958, 968, 961, 958, 965, 978, 970, 973, 959, 968,
2660 969, 0, 962, 966, 961, 972, 960, 985, 966, 965,
2661 963, 970, 964, 969, 972, 973, 967, 974, 968, 975,
2662 977, 975, 978, 970, 973, 974, 980, 969, 977, 981,
2663
2664 982, 984, 972, 983, 985, 986, 987, 988, 0, 980,
2665 0, 981, 986, 989, 974, 982, 975, 977, 990, 984,
2666 991, 992, 994, 980, 993, 983, 981, 982, 984, 995,
2667 983, 1001, 986, 997, 992, 989, 0, 993, 987, 988,
2668 989, 995, 991, 990, 994, 990, 996, 991, 992, 994,
2669 998, 993, 1002, 997, 996, 999, 995, 1003, 1001, 1004,
2670 997, 1006, 998, 999, 1005, 1002, 1003, 1007, 1006, 1009,
2671 1010, 1004, 0, 996, 1012, 1013, 1007, 998, 1007, 1002,
2672 1011, 1007, 999, 0, 1003, 1005, 1004, 1012, 1006, 1007,
2673 1016, 1005, 1010, 1015, 1007, 1009, 1009, 1010, 1017, 1013,
2674
2675 1011, 1012, 1013, 1007, 1014, 1007, 1017, 1011, 1007, 1022,
2676 1018, 1015, 1016, 1014, 1019, 1020, 1023, 1016, 1024, 1025,
2677 1015, 1028, 1026, 1020, 1027, 1017, 1025, 1031, 0, 0,
2678 1019, 1014, 1018, 0, 0, 1031, 1022, 1018, 1023, 1028,
2679 1024, 1019, 1020, 1023, 1026, 1024, 1025, 1027, 1028, 1026,
2680 1029, 1027, 1030, 1032, 1031, 1033, 1034, 1035, 1036, 1037,
2681 1038, 1040, 1029, 1045, 1030, 1037, 1036, 1033, 1032, 1038,
2682 1039, 1041, 1035, 1040, 1042, 1043, 1034, 1029, 1041, 1030,
2683 1032, 1042, 1033, 1034, 1035, 1036, 1037, 1038, 1040, 1047,
2684 1046, 1039, 1048, 1043, 1050, 1045, 1049, 1039, 1041, 1048,
2685
2686 1051, 1042, 1043, 1046, 1052, 1051, 0, 1053, 1047, 1050,
2687 1054, 1057, 1052, 1055, 1059, 1058, 1047, 1046, 1049, 1048,
2688 1053, 1050, 1063, 1049, 1054, 1057, 1060, 0, 0, 1061,
2689 1062, 1052, 1051, 1058, 1053, 1066, 0, 1054, 1057, 1055,
2690 1055, 1056, 1058, 1064, 1056, 1056, 1059, 1065, 1062, 1056,
2691 0, 1061, 1060, 1060, 1063, 1056, 1061, 1062, 1067, 1056,
2692 1070, 1066, 1066, 1056, 1067, 1064, 1068, 1070, 1056, 1065,
2693 1064, 1056, 1056, 1069, 1065, 1069, 1056, 1072, 1075, 1071,
2694 1076, 1074, 1056, 1073, 1077, 1067, 1056, 1070, 1071, 1076,
2695 1073, 1075, 1068, 1068, 1078, 1072, 1079, 1069, 1080, 0,
2696
2697 1069, 1084, 1069, 1074, 1072, 1075, 1071, 1076, 1074, 0,
2698 1073, 0, 0, 1082, 1086, 1088, 1077, 1084, 1079, 1087,
2699 0, 1080, 1092, 1079, 1088, 1080, 1078, 1081, 1084, 1089,
2700 1090, 1087, 1081, 0, 1081, 1090, 1081, 1086, 1081, 1082,
2701 1082, 1086, 1088, 1091, 1092, 1081, 1087, 1089, 1091, 1092,
2702 1094, 1093, 1095, 1097, 1081, 0, 1089, 0, 1096, 1081,
2703 1095, 1081, 1090, 1081, 1093, 1081, 1096, 1099, 1094, 1098,
2704 1091, 1100, 1097, 1101, 1102, 1104, 1105, 1094, 1093, 1095,
2705 1097, 1106, 1098, 1102, 1100, 1096, 1103, 1107, 1103, 1099,
2706 1108, 1101, 1110, 1106, 1099, 1114, 1098, 1104, 1100, 1111,
2707
2708 1101, 1102, 1104, 1105, 1112, 1113, 1116, 1118, 1106, 1117,
2709 1144, 1115, 1112, 1103, 1107, 1108, 1110, 1108, 1115, 1110,
2710 1121, 1111, 1114, 1113, 1119, 1123, 1111, 1126, 1125, 1118,
2711 1119, 1112, 1113, 1116, 1118, 1117, 1117, 1120, 1115, 1122,
2712 1127, 1124, 1144, 1120, 1128, 1126, 1122, 1121, 1124, 1123,
2713 1125, 1119, 1123, 1128, 1126, 1125, 1130, 1131, 1134, 1132,
2714 1133, 0, 1137, 0, 1120, 1127, 1122, 1127, 1124, 1131,
2715 1135, 1128, 1136, 1138, 1145, 1147, 1141, 1134, 1156, 0,
2716 1130, 1132, 1133, 1130, 1131, 1134, 1132, 1133, 1137, 1137,
2717 1140, 1142, 1135, 1139, 1136, 1138, 1141, 1135, 1148, 1136,
2718
2719 1138, 1146, 1139, 1141, 1149, 1142, 1145, 1147, 1150, 1151,
2720 1156, 1140, 1149, 1157, 1152, 1154, 1148, 1140, 1142, 1158,
2721 1139, 1152, 1154, 1146, 1150, 1148, 1155, 1160, 1146, 1165,
2722 1155, 1149, 0, 1163, 1164, 1150, 1151, 1161, 1165, 1166,
2723 1158, 1152, 1154, 1161, 1162, 1157, 1158, 1164, 1163, 1169,
2724 1161, 1162, 1168, 1155, 1168, 1167, 1165, 1171, 1169, 1160,
2725 1163, 1164, 1167, 1170, 1161, 1166, 1166, 1173, 1172, 1175,
2726 1161, 1162, 1172, 1176, 1177, 1178, 1169, 1175, 1176, 1168,
2727 1179, 1187, 1167, 1177, 1171, 1170, 1181, 1180, 1186, 1173,
2728 1170, 1184, 0, 1178, 1173, 1172, 1175, 1185, 1181, 1179,
2729
2730 1180, 1177, 1178, 1182, 1187, 1176, 1182, 1179, 1187, 1183,
2731 1185, 1188, 1183, 1181, 1180, 1182, 1184, 1189, 1184, 1191,
2732 1186, 1190, 1190, 1192, 1185, 1189, 1193, 1188, 1191, 1194,
2733 1182, 1183, 1200, 1182, 1195, 1193, 1183, 1201, 1188, 1183,
2734 1198, 1195, 1197, 1199, 1189, 1192, 1191, 1204, 1190, 1198,
2735 1192, 1194, 1199, 1193, 1202, 1197, 1194, 1203, 1200, 1200,
2736 1201, 1195, 1205, 1202, 1201, 1203, 1206, 1198, 1208, 1197,
2737 1199, 1209, 1207, 0, 1206, 1211, 1212, 1205, 1210, 1204,
2738 1208, 1202, 1213, 1209, 1203, 1207, 1210, 1216, 1215, 1205,
2739 1218, 1214, 1221, 1206, 1222, 1208, 1212, 1211, 1209, 1207,
2740
2741 1214, 1220, 1211, 1212, 1213, 1210, 1215, 1217, 1226, 1213,
2742 1219, 1218, 1223, 1216, 1216, 1215, 1219, 1218, 1214, 1217,
2743 1224, 1227, 1228, 1220, 1221, 1232, 1222, 1229, 1220, 1230,
2744 0, 1231, 1250, 1233, 1217, 1226, 1229, 1219, 1223, 1223,
2745 1228, 1236, 1230, 1231, 1227, 1232, 1224, 1224, 1227, 1228,
2746 1234, 1235, 1232, 1237, 1229, 1242, 1230, 1234, 1231, 1233,
2747 1233, 1238, 1239, 1236, 1250, 1241, 1237, 1239, 1236, 1238,
2748 1235, 1240, 1241, 1245, 1246, 1243, 1240, 1234, 1235, 1244,
2749 1237, 1242, 1242, 1243, 0, 1247, 1249, 1244, 1238, 1251,
2750 1248, 1245, 1241, 1247, 1239, 1249, 1246, 1248, 1252, 1252,
2751
2752 1245, 1246, 1243, 1240, 1253, 1255, 1244, 1254, 1256, 0,
2753 1257, 1251, 1247, 1249, 1258, 1254, 1251, 1248, 1257, 1259,
2754 1260, 1263, 1258, 1264, 1262, 1252, 1255, 1259, 1260, 1261,
2755 1262, 1265, 1255, 1263, 1254, 1267, 1253, 1257, 1266, 1268,
2756 1256, 1258, 1261, 1270, 1269, 1271, 1259, 1260, 1263, 1264,
2757 1264, 1262, 1275, 1266, 1272, 1265, 1261, 1270, 1265, 0,
2758 1273, 1268, 1267, 1271, 1273, 1266, 1268, 1269, 1272, 1279,
2759 1270, 1269, 1271, 1277, 1275, 1278, 1276, 1273, 0, 1275,
2760 1277, 1272, 1287, 1280, 1281, 1273, 1278, 1273, 1276, 1282,
2761 1283, 1273, 1284, 1288, 1286, 1295, 1279, 1294, 1285, 1284,
2762
2763 1277, 1286, 1278, 1276, 1273, 1280, 1281, 1285, 1293, 1290,
2764 1280, 1281, 1282, 1283, 1287, 1298, 1282, 1283, 1290, 1284,
2765 1288, 1286, 1292, 1294, 1294, 1285, 1296, 1295, 1292, 1301,
2766 1293, 1300, 1302, 1296, 1303, 1293, 1290, 1306, 1305, 1307,
2767 0, 1308, 1298, 1302, 1306, 1303, 1310, 1312, 1309, 1292,
2768 1314, 0, 1310, 1296, 0, 1300, 1301, 1307, 1300, 1302,
2769 1309, 1303, 1305, 1311, 1306, 1305, 1307, 1308, 1308, 1312,
2770 1313, 1311, 1315, 1310, 1312, 1309, 1314, 1314, 1317, 1316,
2771 1317, 1315, 1318, 1313, 1320, 1319, 1323, 1328, 1321, 1322,
2772 1311, 1316, 1326, 1320, 1324, 1325, 0, 1313, 1319, 1315,
2773
2774 1329, 1322, 1325, 1328, 1331, 1317, 1316, 1333, 1318, 1318,
2775 1321, 1320, 1319, 1323, 1328, 1321, 1322, 1324, 1326, 1326,
2776 1327, 1324, 1325, 1329, 1330, 1327, 1331, 1329, 1334, 1335,
2777 1340, 1331, 1330, 1337, 1333, 1336, 1336, 1334, 1338, 0,
2778 1338, 1339, 1335, 1336, 0, 0, 1337, 1327, 1344, 0,
2779 1347, 1330, 1340, 1343, 1341, 1334, 1335, 1340, 1346, 1342,
2780 1337, 1341, 1336, 1336, 1353, 1338, 1342, 1339, 1339, 1345,
2781 1344, 1343, 1347, 1348, 1350, 1344, 1345, 1347, 0, 0,
2782 1343, 1341, 1349, 1346, 1352, 1346, 1342, 1354, 1357, 1349,
2783 1358, 1353, 1355, 1358, 1359, 1354, 1345, 1352, 1360, 1361,
2784
2785 1369, 0, 0, 0, 1364, 1348, 1350, 1362, 1366, 1349,
2786 1357, 1352, 1361, 1355, 1354, 1357, 1362, 1358, 1363, 1355,
2787 1359, 1359, 1365, 1366, 1360, 1360, 1361, 1374, 1364, 1367,
2788 1363, 1364, 1369, 1370, 1362, 1366, 1367, 1368, 1375, 1371,
2789 1368, 1372, 1373, 1379, 1373, 1363, 0, 1377, 1365, 1365,
2790 1376, 1374, 1368, 0, 1374, 1370, 1367, 1371, 1378, 1380,
2791 1370, 1368, 1381, 1372, 1368, 1386, 1371, 1368, 1372, 1373,
2792 1375, 1382, 1376, 1377, 1377, 1379, 1381, 1376, 1385, 1368,
2793 1382, 1380, 1383, 1387, 1378, 1378, 1380, 1384, 1389, 1381,
2794 1383, 1388, 1390, 0, 1384, 1391, 1390, 1386, 1382, 1392,
2795
2796 1395, 1393, 1385, 1394, 1396, 1385, 0, 1395, 1397, 1383,
2797 1399, 1396, 1394, 1388, 1384, 1387, 1398, 1391, 1388, 1390,
2798 1389, 1397, 1391, 1393, 1400, 1399, 1392, 1395, 1393, 1398,
2799 1394, 1396, 1401, 1402, 1403, 1397, 1404, 1399, 1400, 1405,
2800 1402, 1403, 1407, 1398, 1411, 1405, 1408, 1416, 1409, 1404,
2801 1410, 1400, 1412, 1408, 1413, 0, 1411, 1413, 1414, 1416,
2802 1402, 1403, 1415, 1404, 1401, 1412, 1405, 1414, 1417, 1407,
2803 1409, 1411, 0, 1408, 1416, 1409, 1410, 1410, 1424, 1412,
2804 1415, 1413, 1419, 1418, 1425, 1414, 1418, 1421, 1417, 1415,
2805 1426, 1427, 1421, 1419, 1423, 1417, 1423, 1441, 1428, 1421,
2806
2807 1429, 1418, 1424, 1430, 1432, 1424, 1427, 1428, 1431, 1419,
2808 1418, 1425, 1432, 1418, 1421, 1433, 1434, 1426, 1427, 1421,
2809 1435, 1423, 1431, 1436, 1429, 1428, 1437, 1429, 1435, 1441,
2810 1430, 1432, 1438, 1439, 1436, 1431, 1439, 1433, 1434, 1440,
2811 1438, 1442, 1433, 1434, 1437, 1443, 1445, 1435, 1444, 1448,
2812 1436, 1439, 1443, 1437, 1446, 1445, 1451, 1440, 1447, 1438,
2813 1439, 1452, 1444, 1439, 1448, 1451, 1440, 1446, 1442, 1447,
2814 1456, 1453, 1443, 1445, 1454, 1444, 1448, 1450, 1455, 1450,
2815 1458, 1446, 1453, 1451, 1456, 1447, 1460, 1452, 1452, 1458,
2816 1457, 1464, 1454, 1457, 1461, 1460, 1456, 1456, 1453, 1461,
2817
2818 1455, 1454, 1463, 1459, 1450, 1455, 1466, 1458, 1457, 1459,
2819 1465, 1456, 1467, 1460, 1468, 1463, 1469, 1457, 1470, 1465,
2820 1457, 1474, 1473, 1464, 1472, 1477, 1461, 1479, 1475, 1463,
2821 1459, 1472, 1476, 1466, 0, 1473, 1468, 1465, 1476, 1470,
2822 1490, 1468, 1475, 1483, 1467, 1470, 1479, 1485, 1469, 1473,
2823 1481, 1472, 1482, 1474, 1479, 1475, 1476, 1477, 1481, 1476,
2824 1482, 1485, 1483, 1484, 1486, 1476, 1489, 1487, 1491, 1488,
2825 1483, 1492, 1490, 1497, 1485, 1494, 1493, 1481, 1486, 1482,
2826 1487, 1484, 1488, 1493, 1494, 1492, 1500, 1489, 1502, 1495,
2827 1484, 1486, 1496, 1489, 1487, 1500, 1488, 1495, 1492, 1498,
2828
2829 1491, 1499, 1494, 1493, 1498, 1497, 1496, 1504, 0, 1505,
2830 1503, 1506, 1499, 1500, 1489, 1502, 1495, 1503, 1507, 1496,
2831 1509, 1508, 1512, 1511, 1509, 0, 1498, 1514, 1499, 1516,
2832 1504, 1505, 1523, 1506, 1504, 1511, 1505, 1503, 1506, 1508,
2833 1507, 1518, 1514, 1513, 1515, 1507, 1517, 1509, 1508, 1512,
2834 1511, 1513, 1515, 1526, 1514, 1521, 1516, 1519, 1522, 1517,
2835 1520, 1518, 1524, 1521, 1523, 1522, 1527, 1525, 1518, 1529,
2836 1513, 1515, 1519, 1517, 1526, 1520, 1525, 1524, 1528, 1531,
2837 1526, 1532, 1521, 1533, 1519, 1522, 1534, 1520, 0, 1524,
2838 1537, 1536, 1535, 1527, 1525, 1539, 1529, 1538, 0, 1532,
2839
2840 1539, 1531, 1528, 1540, 1538, 1528, 1531, 1535, 1532, 1542,
2841 1543, 1541, 1540, 1534, 1537, 1533, 1536, 1537, 1536, 1535,
2842 1541, 1545, 1539, 1546, 1538, 1544, 1547, 1548, 1543, 1549,
2843 1540, 1542, 1550, 1545, 1548, 1551, 1542, 1543, 1541, 1547,
2844 1544, 1549, 1558, 1552, 1547, 1546, 1554, 1553, 1545, 1552,
2845 1546, 1555, 1544, 1547, 1548, 1553, 1549, 1554, 1555, 1550,
2846 1556, 1559, 1557, 1560, 1557, 1561, 1547, 1551, 1558, 1558,
2847 1552, 1562, 1561, 1554, 1553, 1557, 1563, 1564, 1555, 1566,
2848 1565, 1568, 1567, 1564, 1569, 1556, 1565, 1556, 1559, 1557,
2849 1560, 1557, 1561, 1571, 1573, 1574, 1575, 1574, 1562, 1578,
2850
2851 1576, 1572, 1563, 1563, 1564, 1567, 1566, 1565, 1569, 1567,
2852 1572, 1569, 1577, 1568, 1579, 1579, 1579, 1580, 1582, 0,
2853 1575, 1579, 1574, 1575, 1580, 1571, 1573, 1576, 1572, 1579,
2854 1581, 1578, 1586, 1583, 1590, 1589, 1587, 1581, 1577, 1577,
2855 1583, 1579, 1579, 1579, 1580, 1586, 1585, 1589, 1579, 1588,
2856 1582, 1585, 1591, 1594, 1595, 1595, 1596, 1581, 1599, 1586,
2857 1583, 1587, 1589, 1587, 1592, 1588, 1590, 1593, 1597, 1598,
2858 1591, 1592, 1600, 1593, 1598, 1597, 1588, 1604, 1585, 1591,
2859 1594, 1595, 1596, 1596, 1599, 1599, 1601, 1605, 1606, 1605,
2860 1608, 1592, 1609, 1601, 1593, 1597, 1598, 1610, 1609, 1600,
2861
2862 1611, 1612, 0, 1614, 1604, 1617, 1606, 1612, 1608, 1613,
2863 1616, 1616, 1622, 1601, 1605, 1606, 1615, 1608, 1621, 1609,
2864 1625, 1613, 1619, 1614, 1618, 1618, 1624, 1611, 1612, 1610,
2865 1614, 1617, 1617, 1619, 1615, 1623, 1613, 1616, 1626, 1627,
2866 1621, 1628, 1623, 1615, 1622, 1621, 1624, 1629, 1630, 1619,
2867 1631, 1618, 1625, 1624, 1632, 1630, 1633, 1637, 1631, 1635,
2868 1635, 1636, 1623, 1628, 1634, 1629, 1627, 1639, 1628, 1632,
2869 1626, 1638, 0, 1634, 1629, 1630, 1640, 1631, 1638, 1639,
2870 1633, 1632, 1647, 1633, 1644, 1643, 1635, 1636, 1636, 1637,
2871 1642, 1634, 1640, 1643, 1639, 1648, 1644, 1642, 1638, 1640,
2872
2873 1646, 1650, 1649, 1640, 1653, 1647, 1656, 1651, 1646, 1647,
2874 1652, 1644, 1643, 1657, 1656, 1652, 1648, 1642, 1654, 1640,
2875 1649, 1660, 1648, 1655, 1654, 1658, 1652, 1646, 1650, 1649,
2876 1651, 1653, 1658, 1656, 1651, 1657, 1655, 1652, 1662, 1659,
2877 1657, 1663, 1652, 1661, 1665, 1654, 1659, 1664, 1670, 1671,
2878 1655, 1667, 1658, 1660, 1672, 1661, 1668, 1669, 1673, 1672,
2879 1662, 1668, 1674, 1678, 1669, 1662, 1659, 1665, 1663, 1667,
2880 1661, 1665, 1668, 1664, 1664, 1670, 1671, 1676, 1667, 1675,
2881 1675, 1677, 1680, 1668, 1669, 1682, 1672, 1681, 1668, 1683,
2882 1673, 1683, 1684, 1685, 1674, 1678, 1677, 1680, 1685, 1676,
2883
2884 1682, 1686, 1687, 1689, 1676, 1690, 1675, 1693, 1677, 1680,
2885 1681, 1695, 1682, 1690, 1681, 1691, 1683, 1687, 1689, 1694,
2886 1685, 1696, 1698, 1699, 1684, 1700, 1713, 0, 1697, 1687,
2887 1689, 1693, 1690, 1686, 1693, 1697, 1701, 1691, 1695, 1704,
2888 1702, 1706, 1691, 1708, 1699, 1694, 1694, 1700, 1696, 1707,
2889 1699, 1712, 1700, 1713, 1698, 1697, 1710, 1701, 1702, 1711,
2890 1715, 1704, 1714, 1701, 1707, 1706, 1704, 1702, 1706, 1708,
2891 1708, 1710, 1716, 1712, 1711, 1717, 1707, 1718, 1712, 1719,
2892 1714, 1720, 1715, 1710, 1718, 1721, 1711, 1715, 1722, 1714,
2893 1720, 1723, 1724, 1721, 1716, 1730, 1725, 1719, 1728, 1716,
2894
2895 0, 1729, 1717, 1727, 1718, 1732, 1719, 1728, 1720, 1725,
2896 1738, 1722, 1721, 1723, 1727, 1722, 1731, 1734, 1723, 1729,
2897 1732, 1730, 1730, 1725, 1724, 1728, 1735, 1733, 1729, 1727,
2898 1727, 1740, 1732, 1733, 1731, 1741, 1742, 1738, 1744, 1734,
2899 1735, 1727, 1746, 1731, 1734, 1748, 1741, 1742, 1745, 1747,
2900 1744, 1750, 1749, 1735, 1733, 1740, 0, 0, 1740, 1747,
2901 1753, 1745, 1741, 1742, 1751, 1744, 1754, 0, 1755, 0,
2902 1756, 1748, 1748, 1754, 1746, 1745, 1747, 1749, 1750, 1749,
2903 1753, 1758, 1767, 1751, 1757, 1759, 1760, 1753, 1756, 1763,
2904 1757, 1751, 1762, 1754, 1755, 1755, 1758, 1756, 1761, 1761,
2905
2906 1759, 1760, 1763, 1766, 1762, 1771, 1768, 1765, 1758, 1767,
2907 1763, 1757, 1759, 1760, 1765, 1768, 1763, 1769, 1766, 1762,
2908 1774, 1770, 1776, 1778, 1769, 1761, 1775, 1771, 1772, 1763,
2909 1766, 1776, 1771, 1768, 1765, 1772, 1777, 1782, 1780, 1783,
2910 0, 1790, 1774, 1778, 1769, 1770, 1782, 1774, 1770, 1776,
2911 1778, 1775, 1784, 1775, 1786, 1772, 1780, 1783, 1777, 1785,
2912 1788, 1789, 1786, 1777, 1782, 1780, 1783, 1784, 1790, 1791,
2913 1791, 1792, 1793, 1794, 1789, 0, 1797, 0, 1798, 1784,
2914 1795, 1786, 1796, 1797, 1785, 1788, 1785, 1788, 1789, 1799,
2915 1800, 1796, 1804, 1792, 1801, 1794, 1791, 1793, 1792, 1793,
2916
2917 1794, 1805, 1795, 1797, 1800, 1804, 1803, 1795, 1806, 1796,
2918 1798, 1799, 1807, 1801, 1803, 1808, 1799, 1800, 1809, 1804,
2919 0, 1801, 1808, 0, 1807, 1810, 1811, 1813, 1805, 1812,
2920 1814, 0, 1815, 1803, 1806, 1806, 1816, 1812, 0, 1807,
2921 1820, 0, 1808, 1817, 1819, 1814, 1820, 1810, 1812, 1863,
2922 1809, 1811, 1810, 1811, 1813, 1821, 1812, 1814, 1815, 1815,
2923 1821, 1817, 1816, 1816, 1812, 1818, 1822, 1820, 1818, 1819,
2924 1817, 1819, 1826, 1823, 1825, 1827, 1829, 1832, 1830, 0,
2925 1831, 1863, 1833, 1818, 1822, 1830, 1864, 1821, 1823, 1825,
2926 1829, 1833, 1818, 1822, 1826, 1818, 0, 1827, 1831, 1826,
2927
2928 1823, 1825, 1827, 1829, 1832, 1830, 1834, 1831, 1835, 1833,
2929 1836, 1839, 1837, 1840, 1841, 1834, 1844, 0, 1864, 1835,
2930 1842, 1841, 1843, 1836, 1837, 1849, 1839, 1850, 1840, 1855,
2931 0, 1850, 1847, 1834, 1844, 1835, 1851, 1836, 1839, 1837,
2932 1840, 1841, 1842, 1844, 1843, 1847, 1849, 1842, 1851, 1843,
2933 1854, 1852, 1849, 1847, 1850, 1853, 1855, 1853, 1856, 1847,
2934 1852, 1857, 1858, 1851, 1859, 1861, 0, 1866, 1854, 1862,
2935 1858, 1860, 1847, 1865, 1862, 1870, 1856, 1854, 1852, 1861,
2936 1877, 1871, 1853, 1867, 1873, 1856, 1866, 1859, 1857, 1858,
2937 1867, 1859, 1861, 1860, 1866, 1871, 1872, 1865, 1860, 1874,
2938
2939 1865, 1862, 1870, 1875, 1876, 1878, 1871, 1871, 1871, 1879,
2940 1867, 1873, 1877, 1876, 1872, 1880, 1881, 1882, 1875, 1895,
2941 0, 1884, 1871, 1872, 1886, 1874, 1874, 1878, 1889, 0,
2942 1875, 1876, 1878, 1871, 1885, 1879, 1879, 1888, 1881, 1888,
2943 1892, 1885, 1880, 1881, 1884, 1891, 1895, 1886, 1884, 1882,
2944 1889, 1886, 1890, 1896, 1893, 1889, 1890, 1891, 1894, 1897,
2945 1898, 1885, 1892, 1893, 1888, 1899, 1899, 1892, 1900, 1894,
2946 1901, 1897, 1891, 1905, 1902, 1903, 1896, 0, 1901, 1890,
2947 1896, 1893, 1898, 1900, 1904, 1894, 1897, 1898, 1907, 1903,
2948 1908, 1909, 1899, 1904, 1914, 1900, 1902, 1901, 1908, 1909,
2949
2950 1905, 1902, 1903, 1911, 1910, 1912, 1911, 1907, 1910, 1914,
2951 1913, 1904, 1917, 1912, 1915, 1907, 1913, 1908, 1909, 1918,
2952 1915, 1914, 1920, 1919, 1917, 1921, 1922, 0, 1923, 1924,
2953 1911, 1910, 1912, 1925, 1927, 0, 1920, 1913, 1921, 1917,
2954 1922, 1915, 1928, 1930, 1931, 1926, 1918, 1919, 1927, 1920,
2955 1919, 1933, 1921, 1922, 1923, 1923, 1924, 1926, 1934, 1929,
2956 1925, 1927, 1929, 1937, 1936, 1934, 1931, 1935, 1928, 1928,
2957 1930, 1931, 1926, 1933, 1935, 1938, 1939, 1929, 1933, 1936,
2958 1940, 1942, 1944, 1941, 1939, 1934, 1929, 1943, 1945, 1929,
2959 1937, 1936, 1941, 1946, 1935, 1948, 0, 0, 1947, 1943,
2960
2961 1953, 1952, 1938, 1939, 1944, 1949, 1955, 1940, 1942, 1944,
2962 1941, 1947, 1958, 1948, 1943, 1945, 1950, 1956, 1949, 1957,
2963 1946, 1954, 1948, 1952, 1950, 1947, 1956, 1953, 1952, 1954,
2964 1959, 1960, 1949, 1955, 1961, 1962, 1958, 1964, 1970, 1958,
2965 1957, 1963, 1961, 1950, 1956, 1959, 1957, 1962, 1954, 1963,
2966 1967, 1968, 1966, 1969, 1967, 1972, 1959, 1959, 1960, 1966,
2967 1975, 1961, 1962, 1968, 1964, 1970, 1971, 1972, 1963, 1973,
2968 1981, 1977, 1959, 1978, 1971, 1980, 1969, 1967, 1968, 1966,
2969 1969, 1973, 1972, 1976, 1979, 1979, 1978, 1975, 1981, 1982,
2970 1976, 1977, 1983, 1971, 1985, 1986, 1973, 1981, 1977, 1983,
2971
2972 1978, 1980, 1980, 1987, 1988, 1991, 1988, 1990, 1996, 1985,
2973 1976, 1979, 1989, 1990, 1982, 1994, 1982, 1986, 1995, 1983,
2974 1996, 1985, 1986, 1992, 1992, 1987, 1989, 1991, 1997, 1999,
2975 1987, 1988, 1991, 0, 1990, 1996, 2000, 1994, 1998, 1989,
2976 1995, 0, 1994, 2003, 1998, 1995, 2001, 2002, 2004, 2002,
2977 1992, 2005, 2010, 2006, 2009, 2011, 2012, 2003, 2000, 2007,
2978 1997, 1999, 2017, 2000, 2008, 1998, 2018, 2009, 2001, 2005,
2979 2003, 2006, 2004, 2001, 2002, 2004, 2016, 2007, 2005, 2012,
2980 2006, 2009, 2008, 2012, 2010, 2014, 2007, 2011, 2017, 2017,
2981 2024, 2008, 2014, 2019, 2016, 2020, 2022, 2020, 2018, 2023,
2982
2983 2026, 2019, 2020, 2016, 2025, 0, 2028, 2022, 2033, 0,
2984 2023, 0, 2014, 2037, 2029, 0, 2025, 2024, 2026, 2019,
2985 2019, 2028, 2020, 2022, 2020, 2029, 2023, 2026, 2019, 2031,
2986 2030, 2025, 2033, 2028, 2036, 2033, 2034, 2040, 2035, 2045,
2987 2037, 2029, 2030, 2038, 2031, 2035, 2042, 2041, 2043, 2036,
2988 2044, 2047, 0, 0, 2046, 0, 2031, 2030, 2034, 2049,
2989 2048, 2036, 2051, 2034, 2040, 2035, 2045, 2046, 2042, 2038,
2990 2038, 2041, 2049, 2042, 2041, 2048, 2050, 2047, 2047, 2053,
2991 2043, 2046, 2044, 2054, 2050, 2055, 2049, 2048, 2051, 2051,
2992 2057, 2056, 2058, 2059, 2060, 2061, 0, 2064, 2065, 2058,
2993
2994 2070, 2063, 2053, 2050, 2064, 2065, 2053, 2054, 2057, 2061,
2995 2054, 2067, 2055, 2056, 2066, 2069, 2059, 2057, 2056, 2058,
2996 2059, 2060, 2061, 2063, 2064, 2065, 2068, 2066, 2063, 2071,
2997 2072, 0, 2070, 2068, 2067, 2074, 2075, 2069, 2067, 2072,
2998 2076, 2066, 2069, 2078, 2084, 2084, 2074, 2077, 2081, 2083,
2999 2071, 2082, 2088, 2068, 2085, 0, 2071, 2072, 2075, 2087,
3000 2090, 2081, 2074, 2075, 2089, 2091, 2077, 2094, 2078, 0,
3001 2078, 2084, 2076, 2083, 2077, 2081, 2083, 2082, 2082, 2089,
3002 2085, 2085, 2087, 2091, 2088, 2098, 2087, 2090, 2096, 2099,
3003 0, 2089, 2091, 2106, 2094, 2102, 2104, 2096, 2098, 2105,
3004
3005 2099, 2103, 2103, 2108, 2110, 2111, 2113, 2114, 2112, 2121,
3006 0, 2113, 2098, 2118, 0, 2096, 2099, 2102, 2104, 2112,
3007 2106, 2105, 2102, 2104, 2117, 2120, 2105, 0, 2103, 2114,
3008 2108, 2111, 2111, 2113, 2114, 2112, 2110, 2116, 2122, 2117,
3009 2118, 2121, 2123, 2120, 2125, 2116, 2127, 2122, 2126, 0,
3010 2129, 2117, 2120, 2130, 2123, 2127, 2126, 2131, 2133, 2132,
3011 2136, 2134, 2138, 0, 2116, 2122, 2139, 2136, 2137, 2123,
3012 2140, 2125, 2141, 2127, 2134, 2126, 2129, 2129, 2135, 2131,
3013 2130, 2132, 2144, 2133, 2131, 2133, 2132, 2136, 2134, 2138,
3014 2137, 2135, 2142, 2139, 2143, 2137, 2145, 2140, 2146, 2141,
3015
3016 2147, 2148, 0, 2143, 2144, 2135, 2149, 2142, 2151, 2144,
3017 2153, 2154, 2152, 2149, 2155, 2147, 2148, 2156, 2150, 2142,
3018 2152, 2143, 2145, 2145, 2146, 2146, 2157, 2147, 2148, 2150,
3019 2155, 2163, 2156, 2149, 2158, 2151, 2159, 2153, 2154, 2152,
3020 2160, 2155, 2164, 2159, 2156, 2150, 2157, 2161, 2162, 2158,
3021 2165, 2165, 2166, 2157, 2161, 2162, 2167, 0, 2163, 2166,
3022 2164, 2158, 2160, 2159, 2170, 2168, 2172, 2160, 2168, 2164,
3023 2167, 2169, 2175, 2173, 2161, 2162, 2171, 2165, 2172, 2166,
3024 2178, 2175, 2176, 2167, 2169, 2173, 2180, 2176, 2181, 2179,
3025 2170, 2170, 2168, 2172, 2171, 2182, 2183, 2177, 2169, 2175,
3026
3027 2173, 2177, 2179, 2171, 2178, 2184, 0, 2178, 2180, 2176,
3028 2181, 2186, 2189, 2180, 2188, 2181, 2179, 2190, 2191, 2194,
3029 2193, 2189, 2182, 2183, 2177, 2195, 2191, 2193, 2194, 2196,
3030 2195, 2184, 2184, 2190, 2199, 2197, 2196, 2186, 2186, 2189,
3031 2188, 2188, 2198, 2199, 2190, 2191, 2194, 2193, 2200, 2198,
3032 2202, 2205, 2195, 2197, 2203, 2204, 2196, 2208, 2207, 2203,
3033 2211, 2199, 2197, 2209, 2219, 2217, 0, 2218, 0, 2198,
3034 2210, 2212, 2209, 2204, 2200, 2200, 2207, 2202, 2205, 2210,
3035 2211, 2203, 2204, 2212, 2208, 2207, 2213, 2211, 2215, 0,
3036 2209, 2214, 2217, 2216, 2218, 2213, 2219, 2210, 2212, 2215,
3037
3038 2214, 2216, 2220, 2223, 2221, 2224, 2222, 0, 2228, 2227,
3039 2225, 2220, 2224, 2213, 2222, 2215, 2221, 2225, 2214, 2226,
3040 2216, 2230, 2229, 0, 0, 2223, 2234, 0, 0, 2220,
3041 2223, 2221, 2224, 2222, 2227, 2228, 2227, 2225, 2237, 2236,
3042 2238, 2226, 2232, 2235, 2234, 2237, 2226, 2229, 2230, 2229,
3043 2232, 2235, 2239, 2234, 2236, 2240, 2244, 2243, 2245, 2239,
3044 2246, 2248, 2238, 2240, 2243, 2237, 2236, 2238, 2247, 2232,
3045 2235, 2249, 2246, 2252, 2251, 2253, 2254, 2247, 2258, 2239,
3046 2244, 2261, 2240, 2244, 2243, 2245, 2251, 2246, 2248, 2263,
3047 2254, 2260, 2256, 2266, 2249, 2247, 2252, 2257, 2249, 2256,
3048
3049 2252, 2251, 2253, 2254, 2257, 2258, 2260, 2262, 2261, 2264,
3050 2265, 0, 2271, 2273, 2274, 2262, 2263, 2272, 2260, 2256,
3051 2266, 2275, 2272, 2278, 2257, 2265, 2281, 2276, 2274, 2277,
3052 2279, 2264, 0, 2284, 2262, 2275, 2264, 2265, 2271, 2271,
3053 2273, 2274, 2279, 2285, 2272, 2276, 2286, 2277, 2275, 2287,
3054 2278, 0, 2293, 2281, 2276, 2284, 2277, 2279, 2288, 2286,
3055 2284, 2289, 2290, 2291, 2293, 2285, 2296, 0, 2297, 2289,
3056 2285, 2287, 2294, 2286, 2295, 2298, 2287, 2288, 2296, 2293,
3057 2290, 2303, 2291, 2299, 2300, 2288, 0, 2304, 2289, 2290,
3058 2291, 2301, 2306, 2296, 2294, 2297, 2295, 2305, 2302, 2294,
3059
3060 2301, 2295, 2298, 2299, 2306, 2307, 2300, 2302, 2308, 2304,
3061 2299, 2300, 2309, 2303, 2304, 2312, 2313, 2314, 2301, 2306,
3062 2321, 2315, 2318, 2305, 2305, 2302, 2315, 2307, 2316, 2312,
3063 2317, 0, 2307, 2319, 2322, 2308, 2320, 0, 2321, 2309,
3064 2323, 2314, 2312, 2313, 2314, 2328, 2322, 2321, 2324, 2325,
3065 2316, 2327, 2317, 2315, 2318, 2316, 2319, 2317, 2320, 2323,
3066 2319, 2322, 2330, 2320, 2325, 2332, 2333, 2323, 2335, 2328,
3067 2324, 2334, 2328, 2327, 2338, 2324, 2325, 2330, 2327, 2336,
3068 2334, 2337, 2335, 2342, 2339, 2345, 2344, 2332, 2333, 2330,
3069 0, 2342, 2332, 2333, 2344, 2335, 2343, 2336, 2334, 2337,
3070
3071 2338, 2338, 2339, 2343, 2347, 2348, 2336, 2346, 2337, 2349,
3072 2342, 2339, 2345, 2344, 2352, 2346, 2350, 2348, 2354, 2355,
3073 2356, 2358, 2347, 2343, 2350, 2354, 2352, 2357, 2359, 2357,
3074 2360, 2347, 2348, 0, 2346, 0, 2349, 2361, 2362, 2363,
3075 2365, 2352, 2355, 2350, 0, 2354, 2355, 2356, 2368, 2366,
3076 0, 2372, 2373, 2358, 2357, 2369, 2374, 2362, 2365, 2376,
3077 2359, 2363, 2360, 2366, 2361, 2362, 2363, 2365, 2369, 2370,
3078 2378, 2368, 2384, 2380, 2386, 2368, 2366, 2372, 2372, 2373,
3079 2380, 2370, 2369, 2374, 2381, 2383, 2376, 2387, 0, 2381,
3080 2389, 2388, 2383, 2391, 2394, 2396, 2370, 2378, 2384, 2384,
3081
3082 2380, 2386, 2391, 2393, 2389, 2395, 2398, 2397, 2402, 2399,
3083 2393, 2401, 2383, 2412, 2387, 2388, 2381, 2389, 2388, 2397,
3084 2391, 2394, 2396, 2399, 2401, 2403, 2400, 2404, 2411, 0,
3085 2393, 2395, 2395, 2398, 2397, 2400, 2399, 2407, 2401, 2408,
3086 2402, 2409, 2407, 2408, 2410, 2412, 2415, 2414, 2409, 2411,
3087 2404, 2410, 2403, 2400, 2404, 2411, 2413, 2418, 2413, 2420,
3088 2423, 2421, 2423, 0, 0, 2424, 2408, 0, 2409, 2407,
3089 2414, 2410, 2426, 2415, 2414, 2430, 0, 2432, 2420, 2418,
3090 2425, 2425, 2427, 2413, 2418, 2421, 2420, 2423, 2421, 2424,
3091 2425, 2427, 2424, 2428, 2426, 2431, 2432, 2429, 2435, 2426,
3092
3093 2428, 2433, 2430, 2431, 2432, 2434, 2433, 2425, 2425, 2427,
3094 2429, 2436, 2440, 2434, 2437, 0, 2438, 0, 2439, 2448,
3095 2428, 0, 2431, 2440, 2429, 2435, 2441, 2442, 2443, 2443,
3096 0, 2444, 2434, 2433, 2442, 2452, 2449, 2436, 2436, 2440,
3097 2437, 2437, 2438, 2438, 2439, 2439, 2448, 2450, 2441, 2444,
3098 2445, 2453, 2446, 2441, 2442, 2443, 2450, 2445, 2444, 2446,
3099 2449, 2454, 2452, 2449, 2455, 2457, 2458, 2459, 2463, 2460,
3100 0, 2453, 2462, 0, 2450, 2464, 0, 2445, 2453, 2446,
3101 2474, 2462, 2465, 2468, 2458, 2459, 2455, 2460, 2454, 2466,
3102 0, 2455, 2457, 2458, 2459, 2463, 2460, 2468, 2464, 2462,
3103
3104 2465, 2466, 2464, 2467, 2469, 2475, 2477, 2474, 2467, 2465,
3105 2468, 2478, 2482, 2481, 2475, 2481, 2466, 2484, 2483, 2486,
3106 2490, 2488, 2469, 0, 2477, 2483, 2478, 2488, 2491, 2495,
3107 2482, 2469, 2475, 2477, 2486, 2467, 2492, 2498, 2478, 2482,
3108 2481, 2493, 2490, 2499, 2500, 2483, 2486, 2490, 2488, 2484,
3109 2491, 2495, 2504, 0, 2496, 2491, 2495, 2496, 2501, 2493,
3110 2502, 2503, 2492, 2492, 2498, 2506, 2509, 2502, 2493, 2503,
3111 2499, 2500, 2507, 2508, 2504, 2514, 2501, 2510, 2516, 2504,
3112 2496, 2496, 2513, 2511, 2496, 2501, 2510, 2502, 2503, 2511,
3113 2512, 2513, 2522, 2509, 2507, 2508, 2515, 2506, 2515, 2507,
3114
3115 2508, 2519, 2524, 2518, 2510, 2516, 2525, 2514, 2520, 2513,
3116 2511, 2518, 2512, 2519, 2526, 2520, 2524, 2512, 2527, 2522,
3117 2525, 2528, 2531, 2515, 2530, 2533, 2529, 2536, 2519, 2524,
3118 2518, 2537, 2528, 2525, 2529, 2520, 2527, 2526, 2532, 2532,
3119 2539, 2526, 2534, 2530, 2531, 2527, 2539, 2541, 2528, 2531,
3120 2534, 2530, 2533, 2529, 2536, 2543, 2546, 2544, 2537, 2545,
3121 2548, 0, 2553, 0, 2549, 2532, 2543, 2539, 2544, 2534,
3122 2545, 2549, 2550, 2551, 2541, 2556, 2550, 2554, 2546, 2558,
3123 2557, 2551, 2543, 2546, 2544, 2557, 2545, 2548, 2553, 2553,
3124 2554, 2549, 2559, 2561, 2560, 2562, 2563, 2556, 2564, 2550,
3125
3126 2551, 2560, 2556, 2565, 2554, 2564, 2558, 2557, 0, 2566,
3127 2569, 2562, 2561, 2567, 2563, 2577, 2578, 2566, 2570, 2559,
3128 2561, 2560, 2562, 2563, 2568, 2564, 2571, 2576, 2567, 2575,
3129 2580, 2568, 2581, 2579, 2576, 2565, 2566, 2569, 0, 2561,
3130 2567, 2581, 2570, 2578, 2575, 2570, 2583, 2577, 2584, 2586,
3131 2585, 2568, 2571, 2571, 2576, 2588, 2575, 2579, 2585, 2581,
3132 2579, 2590, 2580, 2591, 2587, 2587, 2592, 2594, 2583, 2595,
3133 2584, 2591, 2597, 2583, 2587, 2584, 2596, 2585, 2598, 2599,
3134 2600, 2586, 2588, 2601, 2592, 2597, 2602, 2604, 2590, 2607,
3135 2591, 2587, 2587, 2592, 2594, 2612, 2595, 2607, 2596, 2597,
3136
3137 2598, 2614, 2618, 2596, 2609, 2598, 2599, 2600, 2602, 2609,
3138 2601, 2615, 2610, 2602, 2604, 2611, 2607, 2610, 2616, 2617,
3139 2611, 2612, 2612, 2623, 2615, 2616, 2619, 2620, 2614, 2618,
3140 2625, 2609, 2628, 2626, 2619, 2627, 2629, 2617, 2615, 2610,
3141 2630, 2631, 2611, 2632, 0, 2616, 2617, 0, 2627, 2620,
3142 2623, 2629, 2636, 2619, 2620, 2626, 2637, 2625, 2640, 2630,
3143 2626, 2638, 2627, 2629, 2628, 2632, 2634, 2630, 2631, 2635,
3144 2632, 2637, 2641, 2634, 2636, 2645, 2635, 2640, 2648, 2636,
3145 2641, 2644, 2638, 2637, 2642, 2640, 2645, 2643, 2638, 2647,
3146 2644, 2642, 2652, 2634, 2643, 2647, 2635, 2646, 2646, 2641,
3147
3148 2648, 2655, 2645, 2651, 2656, 2648, 2652, 2646, 2644, 2657,
3149 2651, 2642, 2661, 2663, 2643, 2667, 2647, 2664, 2664, 2652,
3150 2665, 2665, 2666, 2666, 2646, 2646, 2669, 2674, 2655, 2679,
3151 2651, 2656, 2657, 2673, 2670, 2671, 2657, 2678, 2667, 2661,
3152 2663, 2680, 2667, 2670, 2686, 2677, 2664, 2677, 2671, 2665,
3153 2685, 2666, 2679, 2669, 2674, 2673, 2679, 2678, 2681, 2680,
3154 2673, 2670, 2671, 2684, 2678, 2683, 2687, 2688, 2680, 2689,
3155 2681, 2686, 2677, 2691, 2683, 2694, 2685, 2685, 2691, 2688,
3156 2690, 2684, 2692, 2690, 2693, 2681, 2693, 2694, 2699, 2695,
3157 2684, 2689, 2683, 2687, 2688, 2695, 2689, 2696, 2690, 2697,
3158
3159 2698, 2700, 2694, 2703, 2706, 2691, 2707, 2690, 2698, 2708,
3160 2690, 2693, 2709, 2710, 2692, 2699, 2695, 2711, 2712, 2696,
3161 2714, 2697, 2715, 2700, 2696, 2716, 2697, 2698, 2700, 2718,
3162 2703, 2706, 2716, 2707, 2719, 2722, 2708, 2718, 2714, 2709,
3163 2710, 2720, 2724, 2721, 2711, 2712, 2723, 2714, 2725, 2715,
3164 2722, 2728, 2716, 2720, 2724, 2729, 2718, 2721, 2730, 2730,
3165 2728, 2719, 2722, 2731, 2734, 2732, 2735, 2736, 2720, 2724,
3166 2721, 0, 2723, 2723, 2732, 2725, 2738, 2737, 2728, 2729,
3167 2736, 2742, 2729, 2753, 2738, 2730, 2739, 2751, 2734, 2731,
3168 2731, 2734, 2732, 2742, 2736, 2739, 2740, 2754, 2735, 2737,
3169
3170 2757, 2756, 2758, 2738, 2737, 2756, 2760, 2740, 2742, 2759,
3171 2753, 2751, 2764, 2739, 2751, 2763, 2759, 2762, 2757, 2760,
3172 2765, 2762, 2767, 2740, 2754, 2758, 2766, 2757, 2756, 2758,
3173 0, 2763, 2768, 2760, 2764, 2769, 2759, 2780, 2766, 2764,
3174 2771, 2770, 2763, 2769, 2762, 2765, 2768, 2765, 2767, 2767,
3175 2770, 2771, 2772, 2766, 2772, 2774, 2775, 2773, 2778, 2768,
3176 2781, 2774, 2769, 2775, 2780, 2779, 2782, 2771, 2770, 2773,
3177 2783, 2778, 2779, 2784, 2785, 2788, 0, 2793, 2781, 2772,
3178 2786, 2789, 2774, 2775, 2773, 2778, 2796, 2781, 2786, 2790,
3179 0, 2787, 2779, 2782, 2798, 0, 2783, 2783, 2787, 2788,
3180
3181 2784, 2785, 2788, 2789, 2791, 2792, 2791, 2786, 2789, 2793,
3182 2794, 2790, 2795, 2796, 2797, 2800, 2790, 2792, 2787, 2795,
3183 2802, 2798, 2797, 2794, 2805, 0, 2806, 2800, 2808, 2802,
3184 2807, 2791, 2792, 2809, 2810, 2811, 2808, 2794, 0, 2795,
3185 2812, 2797, 2800, 2814, 0, 2819, 2818, 2802, 2811, 2807,
3186 2813, 2805, 2806, 2806, 2812, 2808, 2816, 2807, 2813, 2818,
3187 2822, 2823, 2811, 2816, 2821, 2809, 2810, 2812, 2819, 2823,
3188 2814, 2821, 2819, 2818, 2827, 2824, 2825, 2813, 2826, 0,
3189 2832, 2834, 2822, 2816, 2828, 2830, 2826, 2822, 2823, 2824,
3190 2825, 2821, 2831, 2833, 2830, 2835, 2827, 2840, 2842, 0,
3191
3192 2831, 2827, 2824, 2825, 2836, 2826, 2828, 2832, 2837, 2839,
3193 2838, 2828, 2830, 2834, 2849, 2833, 2841, 2839, 2844, 2831,
3194 2833, 2835, 2835, 0, 2846, 2842, 2836, 2852, 2854, 2840,
3195 2837, 2836, 2838, 0, 2845, 2837, 2839, 2838, 2841, 2847,
3196 2848, 2844, 2845, 2841, 2846, 2844, 2849, 2847, 2848, 2850,
3197 2851, 2846, 2857, 2852, 2852, 2854, 2855, 2850, 2856, 2855,
3198 2857, 2845, 2858, 2872, 2851, 2860, 2847, 2848, 2859, 0,
3199 2858, 2861, 0, 2862, 2855, 2865, 2850, 2851, 2867, 2857,
3200 2856, 2869, 2859, 2855, 2868, 2856, 2855, 2862, 2874, 2858,
3201 2872, 2860, 2860, 2861, 2870, 2859, 2864, 2864, 2861, 2866,
3202
3203 2862, 2865, 2865, 2869, 2867, 2867, 2873, 2866, 2869, 2871,
3204 2868, 2868, 2875, 2874, 2870, 2874, 2878, 2871, 2876, 2879,
3205 2877, 2870, 2880, 2864, 2878, 2882, 2866, 2883, 2873, 2885,
3206 2880, 2886, 2891, 2873, 2887, 2883, 2871, 2895, 2876, 2875,
3207 2877, 2879, 2887, 2878, 2889, 2876, 2879, 2877, 2894, 2880,
3208 2898, 2885, 2882, 2886, 2883, 2888, 2885, 2892, 2886, 2891,
3209 2893, 2887, 2899, 2888, 2895, 2892, 2896, 2908, 2893, 2902,
3210 2889, 2889, 2900, 2905, 2894, 2894, 2909, 2898, 0, 0,
3211 2906, 0, 2888, 0, 2892, 0, 2896, 2893, 2906, 2899,
3212 2907, 2902, 2900, 2896, 2908, 2905, 2902, 0, 2907, 2900,
3213
3214 2905, 0, 0, 2909, 0, 0, 0, 2906, 0, 0,
3215 0, 0, 0, 0, 0, 0, 0, 2907, 2913, 2913,
3216 2913, 2913, 2913, 2913, 2913, 2914, 2914, 2914, 2914, 2914,
3217 2914, 2914, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2916,
3218 2916, 2916, 2916, 2916, 2916, 2916, 2917, 2917, 2917, 2917,
3219 2917, 2917, 2917, 2919, 2919, 0, 2919, 2919, 2919, 2919,
3220 2920, 2920, 0, 0, 0, 2920, 2920, 2921, 2921, 0,
3221 0, 2921, 0, 2921, 2922, 0, 0, 0, 0, 0,
3222 2922, 2923, 2923, 0, 0, 0, 2923, 2923, 2924, 0,
3223 0, 0, 0, 0, 2924, 2925, 2925, 0, 2925, 2925,
3224
3225 2925, 2925, 2926, 2926, 0, 2926, 2926, 2926, 2926, 2912,
3226 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
3227 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
3228 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
3229 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
3230 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
3231 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
3232 2912, 2912, 2912, 2912, 2912, 2912
32353233 } ;
32363234
32373235 static yy_state_type yy_last_accepting_state;
33563354 config_include_stack = s;
33573355 cfg_parser->filename = nm;
33583356 cfg_parser->line = 1;
3359 yy_switch_to_buffer(yy_create_buffer(input,YY_BUF_SIZE));
3357 yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE));
33603358 }
33613359
33623360 static void config_start_include_glob(const char* filename)
34263424 #define yy_set_bol(at_bol) \
34273425 { \
34283426 if ( ! yy_current_buffer ) \
3429 yy_current_buffer = yy_create_buffer(yyin,YY_BUF_SIZE ); \
3427 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
34303428 yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \
34313429 }
34323430 #endif
34333431
3432 #line 3431 "<stdout>"
34343433 #define YY_NO_INPUT 1
34353434 #line 185 "util/configlexer.lex"
34363435 #ifndef YY_NO_UNPUT
34393438 #ifndef YY_NO_INPUT
34403439 #define YY_NO_INPUT 1
34413440 #endif
3442
3443 #line 3443 "<stdout>"
3441 #line 3440 "<stdout>"
3442
3443 #line 3442 "<stdout>"
34443444
34453445 #define INITIAL 0
34463446 #define quotedstring 1
34613461 #define YY_EXTRA_TYPE void *
34623462 #endif
34633463
3464 static int yy_init_globals (void );
3464 static int yy_init_globals ( void );
34653465
34663466 /* Accessor methods to globals.
34673467 These are made visible to non-reentrant scanners for convenience. */
34683468
3469 int yylex_destroy (void );
3470
3471 int yyget_debug (void );
3472
3473 void yyset_debug (int debug_flag );
3474
3475 YY_EXTRA_TYPE yyget_extra (void );
3476
3477 void yyset_extra (YY_EXTRA_TYPE user_defined );
3478
3479 FILE *yyget_in (void );
3480
3481 void yyset_in (FILE * _in_str );
3482
3483 FILE *yyget_out (void );
3484
3485 void yyset_out (FILE * _out_str );
3486
3487 int yyget_leng (void );
3488
3489 char *yyget_text (void );
3490
3491 int yyget_lineno (void );
3492
3493 void yyset_lineno (int _line_number );
3469 int yylex_destroy ( void );
3470
3471 int yyget_debug ( void );
3472
3473 void yyset_debug ( int debug_flag );
3474
3475 YY_EXTRA_TYPE yyget_extra ( void );
3476
3477 void yyset_extra ( YY_EXTRA_TYPE user_defined );
3478
3479 FILE *yyget_in ( void );
3480
3481 void yyset_in ( FILE * _in_str );
3482
3483 FILE *yyget_out ( void );
3484
3485 void yyset_out ( FILE * _out_str );
3486
3487 int yyget_leng ( void );
3488
3489 char *yyget_text ( void );
3490
3491 int yyget_lineno ( void );
3492
3493 void yyset_lineno ( int _line_number );
34943494
34953495 /* Macros after this point can all be overridden by user definitions in
34963496 * section 1.
34983498
34993499 #ifndef YY_SKIP_YYWRAP
35003500 #ifdef __cplusplus
3501 extern "C" int yywrap (void );
3501 extern "C" int yywrap ( void );
35023502 #else
3503 extern int yywrap (void );
3503 extern int yywrap ( void );
35043504 #endif
35053505 #endif
35063506
35093509 #endif
35103510
35113511 #ifndef yytext_ptr
3512 static void yy_flex_strncpy (char *,yyconst char *,int );
3512 static void yy_flex_strncpy ( char *, const char *, int );
35133513 #endif
35143514
35153515 #ifdef YY_NEED_STRLEN
3516 static int yy_flex_strlen (yyconst char * );
3516 static int yy_flex_strlen ( const char * );
35173517 #endif
35183518
35193519 #ifndef YY_NO_INPUT
3520
35213520 #ifdef __cplusplus
3522 static int yyinput (void );
3521 static int yyinput ( void );
35233522 #else
3524 static int input (void );
3523 static int input ( void );
35253524 #endif
35263525
35273526 #endif
36543653 if ( ! YY_CURRENT_BUFFER ) {
36553654 yyensure_buffer_stack ();
36563655 YY_CURRENT_BUFFER_LVALUE =
3657 yy_create_buffer(yyin,YY_BUF_SIZE );
3656 yy_create_buffer( yyin, YY_BUF_SIZE );
36583657 }
36593658
3660 yy_load_buffer_state( );
3659 yy_load_buffer_state( );
36613660 }
36623661
36633662 {
36643663 #line 205 "util/configlexer.lex"
36653664
3666 #line 3666 "<stdout>"
3665 #line 3664 "<stdout>"
36673666
36683667 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
36693668 {
36703669 (yy_more_len) = 0;
36713670 if ( (yy_more_flag) )
36723671 {
3673 (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
3672 (yy_more_len) = (int) ((yy_c_buf_p) - (yytext_ptr));
36743673 (yy_more_flag) = 0;
36753674 }
36763675 yy_cp = (yy_c_buf_p);
36963695 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
36973696 {
36983697 yy_current_state = (int) yy_def[yy_current_state];
3699 if ( yy_current_state >= 2905 )
3700 yy_c = yy_meta[(unsigned int) yy_c];
3698 if ( yy_current_state >= 2913 )
3699 yy_c = yy_meta[yy_c];
37013700 }
3702 yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
3701 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
37033702 ++yy_cp;
37043703 }
3705 while ( yy_base[yy_current_state] != 8293 );
3704 while ( yy_base[yy_current_state] != 8310 );
37063705
37073706 yy_find_action:
37083707 yy_act = yy_accept[yy_current_state];
50815080 case 269:
50825081 YY_RULE_SETUP
50835082 #line 486 "util/configlexer.lex"
5083 { YDVAR(0, VAR_IPSET) }
5084 YY_BREAK
5085 case 270:
5086 YY_RULE_SETUP
5087 #line 487 "util/configlexer.lex"
5088 { YDVAR(1, VAR_IPSET_NAME_V4) }
5089 YY_BREAK
5090 case 271:
5091 YY_RULE_SETUP
5092 #line 488 "util/configlexer.lex"
5093 { YDVAR(1, VAR_IPSET_NAME_V6) }
5094 YY_BREAK
5095 case 272:
5096 YY_RULE_SETUP
5097 #line 489 "util/configlexer.lex"
50845098 { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
50855099 YY_BREAK
5086 case 270:
5087 YY_RULE_SETUP
5088 #line 487 "util/configlexer.lex"
5100 case 273:
5101 YY_RULE_SETUP
5102 #line 490 "util/configlexer.lex"
50895103 { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
50905104 YY_BREAK
5091 case 271:
5092 /* rule 271 can match eol */
5093 YY_RULE_SETUP
5094 #line 488 "util/configlexer.lex"
5105 case 274:
5106 /* rule 274 can match eol */
5107 YY_RULE_SETUP
5108 #line 491 "util/configlexer.lex"
50955109 { LEXOUT(("NL\n")); cfg_parser->line++; }
50965110 YY_BREAK
50975111 /* Quoted strings. Strip leading and ending quotes */
5098 case 272:
5099 YY_RULE_SETUP
5100 #line 491 "util/configlexer.lex"
5112 case 275:
5113 YY_RULE_SETUP
5114 #line 494 "util/configlexer.lex"
51015115 { BEGIN(quotedstring); LEXOUT(("QS ")); }
51025116 YY_BREAK
51035117 case YY_STATE_EOF(quotedstring):
5104 #line 492 "util/configlexer.lex"
5118 #line 495 "util/configlexer.lex"
51055119 {
51065120 yyerror("EOF inside quoted string");
51075121 if(--num_args == 0) { BEGIN(INITIAL); }
51085122 else { BEGIN(val); }
51095123 }
51105124 YY_BREAK
5111 case 273:
5112 YY_RULE_SETUP
5113 #line 497 "util/configlexer.lex"
5125 case 276:
5126 YY_RULE_SETUP
5127 #line 500 "util/configlexer.lex"
51145128 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
51155129 YY_BREAK
5116 case 274:
5117 /* rule 274 can match eol */
5118 YY_RULE_SETUP
5119 #line 498 "util/configlexer.lex"
5130 case 277:
5131 /* rule 277 can match eol */
5132 YY_RULE_SETUP
5133 #line 501 "util/configlexer.lex"
51205134 { yyerror("newline inside quoted string, no end \"");
51215135 cfg_parser->line++; BEGIN(INITIAL); }
51225136 YY_BREAK
5123 case 275:
5124 YY_RULE_SETUP
5125 #line 500 "util/configlexer.lex"
5137 case 278:
5138 YY_RULE_SETUP
5139 #line 503 "util/configlexer.lex"
51265140 {
51275141 LEXOUT(("QE "));
51285142 if(--num_args == 0) { BEGIN(INITIAL); }
51355149 }
51365150 YY_BREAK
51375151 /* Single Quoted strings. Strip leading and ending quotes */
5138 case 276:
5139 YY_RULE_SETUP
5140 #line 512 "util/configlexer.lex"
5152 case 279:
5153 YY_RULE_SETUP
5154 #line 515 "util/configlexer.lex"
51415155 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
51425156 YY_BREAK
51435157 case YY_STATE_EOF(singlequotedstr):
5144 #line 513 "util/configlexer.lex"
5158 #line 516 "util/configlexer.lex"
51455159 {
51465160 yyerror("EOF inside quoted string");
51475161 if(--num_args == 0) { BEGIN(INITIAL); }
51485162 else { BEGIN(val); }
51495163 }
51505164 YY_BREAK
5151 case 277:
5152 YY_RULE_SETUP
5153 #line 518 "util/configlexer.lex"
5165 case 280:
5166 YY_RULE_SETUP
5167 #line 521 "util/configlexer.lex"
51545168 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
51555169 YY_BREAK
5156 case 278:
5157 /* rule 278 can match eol */
5158 YY_RULE_SETUP
5159 #line 519 "util/configlexer.lex"
5170 case 281:
5171 /* rule 281 can match eol */
5172 YY_RULE_SETUP
5173 #line 522 "util/configlexer.lex"
51605174 { yyerror("newline inside quoted string, no end '");
51615175 cfg_parser->line++; BEGIN(INITIAL); }
51625176 YY_BREAK
5163 case 279:
5164 YY_RULE_SETUP
5165 #line 521 "util/configlexer.lex"
5177 case 282:
5178 YY_RULE_SETUP
5179 #line 524 "util/configlexer.lex"
51665180 {
51675181 LEXOUT(("SQE "));
51685182 if(--num_args == 0) { BEGIN(INITIAL); }
51755189 }
51765190 YY_BREAK
51775191 /* include: directive */
5178 case 280:
5179 YY_RULE_SETUP
5180 #line 533 "util/configlexer.lex"
5192 case 283:
5193 YY_RULE_SETUP
5194 #line 536 "util/configlexer.lex"
51815195 {
51825196 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
51835197 YY_BREAK
51845198 case YY_STATE_EOF(include):
5185 #line 535 "util/configlexer.lex"
5199 #line 538 "util/configlexer.lex"
51865200 {
51875201 yyerror("EOF inside include directive");
51885202 BEGIN(inc_prev);
51895203 }
51905204 YY_BREAK
5191 case 281:
5192 YY_RULE_SETUP
5193 #line 539 "util/configlexer.lex"
5205 case 284:
5206 YY_RULE_SETUP
5207 #line 542 "util/configlexer.lex"
51945208 { LEXOUT(("ISP ")); /* ignore */ }
51955209 YY_BREAK
5196 case 282:
5197 /* rule 282 can match eol */
5198 YY_RULE_SETUP
5199 #line 540 "util/configlexer.lex"
5210 case 285:
5211 /* rule 285 can match eol */
5212 YY_RULE_SETUP
5213 #line 543 "util/configlexer.lex"
52005214 { LEXOUT(("NL\n")); cfg_parser->line++;}
52015215 YY_BREAK
5202 case 283:
5203 YY_RULE_SETUP
5204 #line 541 "util/configlexer.lex"
5216 case 286:
5217 YY_RULE_SETUP
5218 #line 544 "util/configlexer.lex"
52055219 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
52065220 YY_BREAK
5207 case 284:
5208 YY_RULE_SETUP
5209 #line 542 "util/configlexer.lex"
5221 case 287:
5222 YY_RULE_SETUP
5223 #line 545 "util/configlexer.lex"
52105224 {
52115225 LEXOUT(("Iunquotedstr(%s) ", yytext));
52125226 config_start_include_glob(yytext);
52145228 }
52155229 YY_BREAK
52165230 case YY_STATE_EOF(include_quoted):
5217 #line 547 "util/configlexer.lex"
5231 #line 550 "util/configlexer.lex"
52185232 {
52195233 yyerror("EOF inside quoted string");
52205234 BEGIN(inc_prev);
52215235 }
52225236 YY_BREAK
5223 case 285:
5224 YY_RULE_SETUP
5225 #line 551 "util/configlexer.lex"
5237 case 288:
5238 YY_RULE_SETUP
5239 #line 554 "util/configlexer.lex"
52265240 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
52275241 YY_BREAK
5228 case 286:
5229 /* rule 286 can match eol */
5230 YY_RULE_SETUP
5231 #line 552 "util/configlexer.lex"
5242 case 289:
5243 /* rule 289 can match eol */
5244 YY_RULE_SETUP
5245 #line 555 "util/configlexer.lex"
52325246 { yyerror("newline before \" in include name");
52335247 cfg_parser->line++; BEGIN(inc_prev); }
52345248 YY_BREAK
5235 case 287:
5236 YY_RULE_SETUP
5237 #line 554 "util/configlexer.lex"
5249 case 290:
5250 YY_RULE_SETUP
5251 #line 557 "util/configlexer.lex"
52385252 {
52395253 LEXOUT(("IQE "));
52405254 yytext[yyleng - 1] = '\0';
52445258 YY_BREAK
52455259 case YY_STATE_EOF(INITIAL):
52465260 case YY_STATE_EOF(val):
5247 #line 560 "util/configlexer.lex"
5261 #line 563 "util/configlexer.lex"
52485262 {
52495263 LEXOUT(("LEXEOF "));
52505264 yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
52565270 }
52575271 }
52585272 YY_BREAK
5259 case 288:
5260 YY_RULE_SETUP
5261 #line 571 "util/configlexer.lex"
5273 case 291:
5274 YY_RULE_SETUP
5275 #line 574 "util/configlexer.lex"
52625276 { LEXOUT(("unquotedstr(%s) ", yytext));
52635277 if(--num_args == 0) { BEGIN(INITIAL); }
52645278 yylval.str = strdup(yytext); return STRING_ARG; }
52655279 YY_BREAK
5266 case 289:
5267 YY_RULE_SETUP
5268 #line 575 "util/configlexer.lex"
5280 case 292:
5281 YY_RULE_SETUP
5282 #line 578 "util/configlexer.lex"
52695283 {
52705284 ub_c_error_msg("unknown keyword '%s'", yytext);
52715285 }
52725286 YY_BREAK
5273 case 290:
5274 YY_RULE_SETUP
5275 #line 579 "util/configlexer.lex"
5287 case 293:
5288 YY_RULE_SETUP
5289 #line 582 "util/configlexer.lex"
52765290 {
52775291 ub_c_error_msg("stray '%s'", yytext);
52785292 }
52795293 YY_BREAK
5280 case 291:
5281 YY_RULE_SETUP
5282 #line 583 "util/configlexer.lex"
5294 case 294:
5295 YY_RULE_SETUP
5296 #line 586 "util/configlexer.lex"
52835297 ECHO;
52845298 YY_BREAK
5285 #line 5285 "<stdout>"
5299 #line 5298 "<stdout>"
52865300
52875301 case YY_END_OF_BUFFER:
52885302 {
53585372 {
53595373 (yy_did_buffer_switch_on_eof) = 0;
53605374
5361 if ( yywrap( ) )
5375 if ( yywrap( ) )
53625376 {
53635377 /* Note: because we've taken care in
53645378 * yy_get_next_buffer() to have set up
54255439 {
54265440 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
54275441 char *source = (yytext_ptr);
5428 yy_size_t number_to_move, i;
5442 int number_to_move, i;
54295443 int ret_val;
54305444
54315445 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
54545468 /* Try to read more data. */
54555469
54565470 /* First move last chars to start of buffer. */
5457 number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
5471 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
54585472
54595473 for ( i = 0; i < number_to_move; ++i )
54605474 *(dest++) = *(source++);
54905504
54915505 b->yy_ch_buf = (char *)
54925506 /* Include room in for 2 EOB chars. */
5493 yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2) );
5507 yyrealloc( (void *) b->yy_ch_buf,
5508 (yy_size_t) (b->yy_buf_size + 2) );
54945509 }
54955510 else
54965511 /* Can't grow it, we don't own it. */
55225537 if ( number_to_move == YY_MORE_ADJ )
55235538 {
55245539 ret_val = EOB_ACT_END_OF_FILE;
5525 yyrestart(yyin );
5540 yyrestart( yyin );
55265541 }
55275542
55285543 else
55365551 else
55375552 ret_val = EOB_ACT_CONTINUE_SCAN;
55385553
5539 if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
5554 if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
55405555 /* Extend the array by 50%, plus the number we really need. */
55415556 int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
5542 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size );
5557 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
5558 (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size );
55435559 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
55445560 YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
5561 /* "- 2" to take care of EOB's */
5562 YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
55455563 }
55465564
55475565 (yy_n_chars) += number_to_move;
55735591 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
55745592 {
55755593 yy_current_state = (int) yy_def[yy_current_state];
5576 if ( yy_current_state >= 2905 )
5577 yy_c = yy_meta[(unsigned int) yy_c];
5594 if ( yy_current_state >= 2913 )
5595 yy_c = yy_meta[yy_c];
55785596 }
5579 yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
5597 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
55805598 }
55815599
55825600 return yy_current_state;
56015619 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
56025620 {
56035621 yy_current_state = (int) yy_def[yy_current_state];
5604 if ( yy_current_state >= 2905 )
5605 yy_c = yy_meta[(unsigned int) yy_c];
5622 if ( yy_current_state >= 2913 )
5623 yy_c = yy_meta[yy_c];
56065624 }
5607 yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
5608 yy_is_jam = (yy_current_state == 2904);
5625 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
5626 yy_is_jam = (yy_current_state == 2912);
56095627
56105628 return yy_is_jam ? 0 : yy_current_state;
56115629 }
56385656
56395657 else
56405658 { /* need more input */
5641 int offset = (yy_c_buf_p) - (yytext_ptr);
5659 int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
56425660 ++(yy_c_buf_p);
56435661
56445662 switch ( yy_get_next_buffer( ) )
56555673 */
56565674
56575675 /* Reset buffer status. */
5658 yyrestart(yyin );
5676 yyrestart( yyin );
56595677
56605678 /*FALLTHROUGH*/
56615679
56625680 case EOB_ACT_END_OF_FILE:
56635681 {
5664 if ( yywrap( ) )
5682 if ( yywrap( ) )
56655683 return 0;
56665684
56675685 if ( ! (yy_did_buffer_switch_on_eof) )
56995717 if ( ! YY_CURRENT_BUFFER ){
57005718 yyensure_buffer_stack ();
57015719 YY_CURRENT_BUFFER_LVALUE =
5702 yy_create_buffer(yyin,YY_BUF_SIZE );
5720 yy_create_buffer( yyin, YY_BUF_SIZE );
57035721 }
57045722
5705 yy_init_buffer(YY_CURRENT_BUFFER,input_file );
5706 yy_load_buffer_state( );
5723 yy_init_buffer( YY_CURRENT_BUFFER, input_file );
5724 yy_load_buffer_state( );
57075725 }
57085726
57095727 /** Switch to a different input buffer.
57315749 }
57325750
57335751 YY_CURRENT_BUFFER_LVALUE = new_buffer;
5734 yy_load_buffer_state( );
5752 yy_load_buffer_state( );
57355753
57365754 /* We don't actually know whether we did this switch during
57375755 * EOF (yywrap()) processing, but the only time this flag
57595777 {
57605778 YY_BUFFER_STATE b;
57615779
5762 b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
5780 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
57635781 if ( ! b )
57645782 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
57655783
57685786 /* yy_ch_buf has to be 2 characters longer than the size given because
57695787 * we need to put in 2 end-of-buffer characters.
57705788 */
5771 b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2) );
5789 b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
57725790 if ( ! b->yy_ch_buf )
57735791 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
57745792
57755793 b->yy_is_our_buffer = 1;
57765794
5777 yy_init_buffer(b,file );
5795 yy_init_buffer( b, file );
57785796
57795797 return b;
57805798 }
57935811 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
57945812
57955813 if ( b->yy_is_our_buffer )
5796 yyfree((void *) b->yy_ch_buf );
5797
5798 yyfree((void *) b );
5814 yyfree( (void *) b->yy_ch_buf );
5815
5816 yyfree( (void *) b );
57995817 }
58005818
58015819 /* Initializes or reinitializes a buffer.
58075825 {
58085826 int oerrno = errno;
58095827
5810 yy_flush_buffer(b );
5828 yy_flush_buffer( b );
58115829
58125830 b->yy_input_file = file;
58135831 b->yy_fill_buffer = 1;
58505868 b->yy_buffer_status = YY_BUFFER_NEW;
58515869
58525870 if ( b == YY_CURRENT_BUFFER )
5853 yy_load_buffer_state( );
5871 yy_load_buffer_state( );
58545872 }
58555873
58565874 /** Pushes the new state onto the stack. The new state becomes
58815899 YY_CURRENT_BUFFER_LVALUE = new_buffer;
58825900
58835901 /* copied from yy_switch_to_buffer. */
5884 yy_load_buffer_state( );
5902 yy_load_buffer_state( );
58855903 (yy_did_buffer_switch_on_eof) = 1;
58865904 }
58875905
59005918 --(yy_buffer_stack_top);
59015919
59025920 if (YY_CURRENT_BUFFER) {
5903 yy_load_buffer_state( );
5921 yy_load_buffer_state( );
59045922 (yy_did_buffer_switch_on_eof) = 1;
59055923 }
59065924 }
59105928 */
59115929 static void yyensure_buffer_stack (void)
59125930 {
5913 int num_to_alloc;
5931 yy_size_t num_to_alloc;
59145932
59155933 if (!(yy_buffer_stack)) {
59165934
59245942 );
59255943 if ( ! (yy_buffer_stack) )
59265944 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
5927
5945
59285946 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
5929
5947
59305948 (yy_buffer_stack_max) = num_to_alloc;
59315949 (yy_buffer_stack_top) = 0;
59325950 return;
59555973 * @param base the character buffer
59565974 * @param size the size in bytes of the character buffer
59575975 *
5958 * @return the newly allocated buffer state object.
5976 * @return the newly allocated buffer state object.
59595977 */
59605978 YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
59615979 {
59675985 /* They forgot to leave room for the EOB's. */
59685986 return NULL;
59695987
5970 b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
5988 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
59715989 if ( ! b )
59725990 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
59735991
59815999 b->yy_fill_buffer = 0;
59826000 b->yy_buffer_status = YY_BUFFER_NEW;
59836001
5984 yy_switch_to_buffer(b );
6002 yy_switch_to_buffer( b );
59856003
59866004 return b;
59876005 }
59946012 * @note If you want to scan bytes that may contain NUL values, then use
59956013 * yy_scan_bytes() instead.
59966014 */
5997 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
6015 YY_BUFFER_STATE yy_scan_string (const char * yystr )
59986016 {
59996017
6000 return yy_scan_bytes(yystr,(int) strlen(yystr) );
6018 return yy_scan_bytes( yystr, (int) strlen(yystr) );
60016019 }
60026020
60036021 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
60076025 *
60086026 * @return the newly allocated buffer state object.
60096027 */
6010 YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len )
6028 YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len )
60116029 {
60126030 YY_BUFFER_STATE b;
60136031 char *buf;
60166034
60176035 /* Get memory for full buffer, including space for trailing EOB's. */
60186036 n = (yy_size_t) (_yybytes_len + 2);
6019 buf = (char *) yyalloc(n );
6037 buf = (char *) yyalloc( n );
60206038 if ( ! buf )
60216039 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
60226040
60256043
60266044 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
60276045
6028 b = yy_scan_buffer(buf,n );
6046 b = yy_scan_buffer( buf, n );
60296047 if ( ! b )
60306048 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
60316049
60416059 #define YY_EXIT_FAILURE 2
60426060 #endif
60436061
6044 static void yynoreturn yy_fatal_error (yyconst char* msg )
6062 static void yynoreturn yy_fatal_error (const char* msg )
60456063 {
6046 (void) fprintf( stderr, "%s\n", msg );
6064 fprintf( stderr, "%s\n", msg );
60476065 exit( YY_EXIT_FAILURE );
60486066 }
60496067
60546072 do \
60556073 { \
60566074 /* Undo effects of setting up yytext. */ \
6057 yy_size_t yyless_macro_arg = (n); \
6075 int yyless_macro_arg = (n); \
60586076 YY_LESS_LINENO(yyless_macro_arg);\
60596077 yytext[yyleng] = (yy_hold_char); \
60606078 (yy_c_buf_p) = yytext + yyless_macro_arg; \
60716089 */
60726090 int yyget_lineno (void)
60736091 {
6074
6092
60756093 return yylineno;
60766094 }
60776095
61786196
61796197 /* Pop the buffer stack, destroying each element. */
61806198 while(YY_CURRENT_BUFFER){
6181 yy_delete_buffer(YY_CURRENT_BUFFER );
6199 yy_delete_buffer( YY_CURRENT_BUFFER );
61826200 YY_CURRENT_BUFFER_LVALUE = NULL;
61836201 yypop_buffer_state();
61846202 }
61996217 */
62006218
62016219 #ifndef yytext_ptr
6202 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
6220 static void yy_flex_strncpy (char* s1, const char * s2, int n )
62036221 {
62046222
62056223 int i;
62096227 #endif
62106228
62116229 #ifdef YY_NEED_STRLEN
6212 static int yy_flex_strlen (yyconst char * s )
6230 static int yy_flex_strlen (const char * s )
62136231 {
62146232 int n;
62156233 for ( n = 0; s[n]; ++n )
62446262
62456263 #define YYTABLES_NAME "yytables"
62466264
6247 #line 583 "util/configlexer.lex"
6248
6249
6250
6265 #line 586 "util/configlexer.lex"
6266
6267
482482 redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) }
483483 redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) }
484484 redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
485 ipset{COLON} { YDVAR(0, VAR_IPSET) }
486 name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) }
487 name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) }
485488 udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
486489 tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
487490 <INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
388388 VAR_STREAM_WAIT_SIZE = 518,
389389 VAR_TLS_CIPHERS = 519,
390390 VAR_TLS_CIPHERSUITES = 520,
391 VAR_TLS_SESSION_TICKET_KEYS = 521
391 VAR_TLS_SESSION_TICKET_KEYS = 521,
392 VAR_IPSET = 522,
393 VAR_IPSET_NAME_V4 = 523,
394 VAR_IPSET_NAME_V6 = 524
392395 };
393396 #endif
394397 /* Tokens. */
656659 #define VAR_TLS_CIPHERS 519
657660 #define VAR_TLS_CIPHERSUITES 520
658661 #define VAR_TLS_SESSION_TICKET_KEYS 521
662 #define VAR_IPSET 522
663 #define VAR_IPSET_NAME_V4 523
664 #define VAR_IPSET_NAME_V6 524
659665
660666 /* Value type. */
661667 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
666672
667673 char* str;
668674
669 #line 671 "util/configparser.c" /* yacc.c:355 */
675 #line 677 "util/configparser.c" /* yacc.c:355 */
670676 };
671677
672678 typedef union YYSTYPE YYSTYPE;
683689
684690 /* Copy the second part of user declarations. */
685691
686 #line 688 "util/configparser.c" /* yacc.c:358 */
692 #line 694 "util/configparser.c" /* yacc.c:358 */
687693
688694 #ifdef short
689695 # undef short
925931 /* YYFINAL -- State number of the termination state. */
926932 #define YYFINAL 2
927933 /* YYLAST -- Last index in YYTABLE. */
928 #define YYLAST 536
934 #define YYLAST 543
929935
930936 /* YYNTOKENS -- Number of terminals. */
931 #define YYNTOKENS 267
937 #define YYNTOKENS 270
932938 /* YYNNTS -- Number of nonterminals. */
933 #define YYNNTS 286
939 #define YYNNTS 291
934940 /* YYNRULES -- Number of rules. */
935 #define YYNRULES 549
941 #define YYNRULES 557
936942 /* YYNSTATES -- Number of states. */
937 #define YYNSTATES 823
943 #define YYNSTATES 833
938944
939945 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
940946 by yylex, with out-of-bounds checking. */
941947 #define YYUNDEFTOK 2
942 #define YYMAXUTOK 521
948 #define YYMAXUTOK 524
943949
944950 #define YYTRANSLATE(YYX) \
945951 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
10001006 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
10011007 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
10021008 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1003 265, 266
1009 265, 266, 267, 268, 269
10041010 };
10051011
10061012 #if YYDEBUG
10071013 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
10081014 static const yytype_uint16 yyrline[] =
10091015 {
1010 0, 172, 172, 172, 173, 173, 174, 174, 175, 175,
1011 175, 176, 176, 177, 181, 186, 187, 188, 188, 188,
1012 189, 189, 190, 190, 191, 191, 192, 192, 192, 193,
1013 193, 194, 194, 194, 195, 195, 195, 196, 196, 197,
1014 197, 198, 198, 199, 199, 200, 200, 201, 201, 202,
1015 202, 203, 203, 204, 204, 204, 205, 205, 205, 206,
1016 206, 206, 207, 207, 208, 208, 209, 209, 210, 210,
1017 211, 211, 211, 212, 212, 213, 213, 214, 214, 214,
1018 215, 215, 216, 216, 217, 217, 218, 218, 218, 219,
1019 219, 220, 220, 221, 221, 222, 222, 223, 223, 224,
1020 224, 224, 225, 225, 226, 226, 226, 227, 227, 227,
1021 228, 228, 228, 229, 229, 229, 229, 230, 231, 231,
1022 231, 232, 232, 232, 233, 233, 234, 234, 235, 235,
1023 235, 236, 236, 237, 237, 237, 238, 238, 239, 239,
1024 240, 241, 241, 242, 242, 243, 243, 244, 245, 245,
1025 246, 246, 247, 247, 248, 248, 249, 249, 250, 250,
1026 250, 251, 251, 252, 252, 253, 253, 254, 254, 255,
1027 255, 256, 256, 256, 257, 257, 257, 258, 258, 258,
1028 259, 259, 260, 261, 261, 262, 262, 263, 263, 264,
1029 264, 265, 265, 265, 266, 266, 266, 267, 267, 267,
1030 268, 268, 269, 269, 270, 270, 272, 284, 285, 286,
1031 286, 286, 286, 286, 287, 287, 289, 301, 302, 303,
1032 303, 303, 303, 304, 304, 306, 320, 321, 322, 322,
1033 322, 322, 323, 323, 323, 325, 341, 342, 343, 343,
1034 343, 343, 344, 344, 344, 345, 347, 356, 365, 376,
1035 385, 394, 403, 414, 423, 434, 447, 462, 473, 490,
1036 507, 524, 541, 556, 571, 584, 599, 608, 617, 626,
1037 635, 644, 653, 662, 671, 680, 689, 698, 707, 716,
1038 729, 738, 751, 760, 769, 778, 785, 792, 801, 808,
1039 817, 825, 832, 839, 847, 856, 865, 879, 888, 897,
1040 906, 915, 924, 933, 940, 947, 973, 981, 988, 995,
1041 1002, 1009, 1017, 1025, 1033, 1040, 1051, 1062, 1069, 1078,
1042 1087, 1096, 1103, 1110, 1118, 1126, 1136, 1146, 1156, 1164,
1043 1177, 1188, 1196, 1209, 1218, 1227, 1236, 1246, 1256, 1264,
1044 1277, 1286, 1294, 1303, 1311, 1324, 1333, 1340, 1350, 1360,
1045 1370, 1380, 1390, 1400, 1410, 1420, 1427, 1434, 1441, 1450,
1046 1459, 1468, 1477, 1484, 1494, 1514, 1521, 1539, 1552, 1565,
1047 1574, 1583, 1592, 1601, 1611, 1621, 1632, 1641, 1650, 1659,
1048 1668, 1681, 1694, 1703, 1710, 1719, 1728, 1737, 1746, 1754,
1049 1767, 1775, 1806, 1813, 1828, 1838, 1848, 1855, 1862, 1869,
1050 1878, 1886, 1900, 1921, 1942, 1954, 1966, 1978, 1987, 2008,
1051 2018, 2027, 2035, 2043, 2056, 2069, 2084, 2099, 2108, 2117,
1052 2123, 2132, 2141, 2151, 2161, 2174, 2187, 2199, 2213, 2225,
1053 2239, 2249, 2256, 2263, 2272, 2281, 2291, 2301, 2311, 2318,
1054 2325, 2334, 2343, 2353, 2363, 2370, 2377, 2384, 2392, 2402,
1055 2412, 2422, 2432, 2464, 2474, 2482, 2490, 2505, 2514, 2519,
1056 2520, 2521, 2521, 2521, 2522, 2522, 2522, 2523, 2523, 2525,
1057 2535, 2544, 2551, 2558, 2565, 2572, 2579, 2586, 2591, 2592,
1058 2593, 2593, 2594, 2594, 2595, 2595, 2596, 2597, 2598, 2599,
1059 2600, 2601, 2603, 2612, 2619, 2628, 2637, 2644, 2651, 2661,
1060 2671, 2681, 2691, 2701, 2711, 2716, 2717, 2718, 2720, 2726,
1061 2736, 2743, 2752, 2760, 2765, 2766, 2768, 2768, 2768, 2769,
1062 2769, 2770, 2771, 2772, 2773, 2774, 2776, 2786, 2795, 2802,
1063 2811, 2818, 2827, 2835, 2848, 2856, 2869, 2874, 2875, 2876,
1064 2876, 2877, 2877, 2877, 2879, 2894, 2909, 2921, 2936, 2949
1016 0, 173, 173, 173, 174, 174, 175, 175, 176, 176,
1017 176, 177, 177, 178, 178, 182, 187, 188, 189, 189,
1018 189, 190, 190, 191, 191, 192, 192, 193, 193, 193,
1019 194, 194, 195, 195, 195, 196, 196, 196, 197, 197,
1020 198, 198, 199, 199, 200, 200, 201, 201, 202, 202,
1021 203, 203, 204, 204, 205, 205, 205, 206, 206, 206,
1022 207, 207, 207, 208, 208, 209, 209, 210, 210, 211,
1023 211, 212, 212, 212, 213, 213, 214, 214, 215, 215,
1024 215, 216, 216, 217, 217, 218, 218, 219, 219, 219,
1025 220, 220, 221, 221, 222, 222, 223, 223, 224, 224,
1026 225, 225, 225, 226, 226, 227, 227, 227, 228, 228,
1027 228, 229, 229, 229, 230, 230, 230, 230, 231, 232,
1028 232, 232, 233, 233, 233, 234, 234, 235, 235, 236,
1029 236, 236, 237, 237, 238, 238, 238, 239, 239, 240,
1030 240, 241, 242, 242, 243, 243, 244, 244, 245, 246,
1031 246, 247, 247, 248, 248, 249, 249, 250, 250, 251,
1032 251, 251, 252, 252, 253, 253, 254, 254, 255, 255,
1033 256, 256, 257, 257, 257, 258, 258, 258, 259, 259,
1034 259, 260, 260, 261, 262, 262, 263, 263, 264, 264,
1035 265, 265, 266, 266, 266, 267, 267, 267, 268, 268,
1036 268, 269, 269, 270, 270, 271, 271, 273, 285, 286,
1037 287, 287, 287, 287, 287, 288, 288, 290, 302, 303,
1038 304, 304, 304, 304, 305, 305, 307, 321, 322, 323,
1039 323, 323, 323, 324, 324, 324, 326, 342, 343, 344,
1040 344, 344, 344, 345, 345, 345, 346, 348, 357, 366,
1041 377, 386, 395, 404, 415, 424, 435, 448, 463, 474,
1042 491, 508, 525, 542, 557, 572, 585, 600, 609, 618,
1043 627, 636, 645, 654, 663, 672, 681, 690, 699, 708,
1044 717, 730, 739, 752, 761, 770, 779, 786, 793, 802,
1045 809, 818, 826, 833, 840, 848, 857, 866, 880, 889,
1046 898, 907, 916, 925, 934, 941, 948, 974, 982, 989,
1047 996, 1003, 1010, 1018, 1026, 1034, 1041, 1052, 1063, 1070,
1048 1079, 1088, 1097, 1104, 1111, 1119, 1127, 1137, 1147, 1157,
1049 1165, 1178, 1189, 1197, 1210, 1219, 1228, 1237, 1247, 1257,
1050 1265, 1278, 1287, 1295, 1304, 1312, 1325, 1334, 1341, 1351,
1051 1361, 1371, 1381, 1391, 1401, 1411, 1421, 1428, 1435, 1442,
1052 1451, 1460, 1469, 1478, 1485, 1495, 1515, 1522, 1540, 1553,
1053 1566, 1575, 1584, 1593, 1602, 1612, 1622, 1633, 1642, 1651,
1054 1660, 1669, 1682, 1695, 1704, 1711, 1720, 1729, 1738, 1747,
1055 1755, 1768, 1776, 1817, 1824, 1839, 1849, 1859, 1866, 1873,
1056 1880, 1889, 1897, 1911, 1932, 1953, 1965, 1977, 1989, 1998,
1057 2019, 2029, 2038, 2046, 2054, 2067, 2080, 2095, 2110, 2119,
1058 2128, 2134, 2143, 2152, 2162, 2172, 2185, 2198, 2210, 2224,
1059 2236, 2250, 2260, 2267, 2274, 2283, 2292, 2302, 2312, 2322,
1060 2329, 2336, 2345, 2354, 2364, 2374, 2381, 2388, 2395, 2403,
1061 2413, 2423, 2433, 2443, 2482, 2492, 2500, 2508, 2523, 2532,
1062 2537, 2538, 2539, 2539, 2539, 2540, 2540, 2540, 2541, 2541,
1063 2543, 2553, 2562, 2569, 2576, 2583, 2590, 2597, 2604, 2609,
1064 2610, 2611, 2611, 2612, 2612, 2613, 2613, 2614, 2615, 2616,
1065 2617, 2618, 2619, 2621, 2630, 2637, 2646, 2655, 2662, 2669,
1066 2679, 2689, 2699, 2709, 2719, 2729, 2734, 2735, 2736, 2738,
1067 2744, 2754, 2761, 2770, 2778, 2783, 2784, 2786, 2786, 2786,
1068 2787, 2787, 2788, 2789, 2790, 2791, 2792, 2794, 2804, 2813,
1069 2820, 2829, 2836, 2845, 2853, 2866, 2874, 2887, 2892, 2893,
1070 2894, 2894, 2895, 2895, 2895, 2897, 2912, 2927, 2939, 2954,
1071 2967, 2978, 2983, 2984, 2985, 2985, 2987, 3002
10651072 };
10661073 #endif
10671074
11681175 "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY",
11691176 "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY",
11701177 "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES",
1171 "VAR_TLS_SESSION_TICKET_KEYS", "$accept", "toplevelvars", "toplevelvar",
1178 "VAR_TLS_SESSION_TICKET_KEYS", "VAR_IPSET", "VAR_IPSET_NAME_V4",
1179 "VAR_IPSET_NAME_V6", "$accept", "toplevelvars", "toplevelvar",
11721180 "serverstart", "contents_server", "content_server", "stubstart",
11731181 "contents_stub", "content_stub", "forwardstart", "contents_forward",
11741182 "content_forward", "viewstart", "contents_view", "content_view",
12841292 "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
12851293 "cachedbstart", "contents_cachedb", "content_cachedb",
12861294 "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host",
1287 "redis_server_port", "redis_timeout", "server_tcp_connection_limit", YY_NULLPTR
1295 "redis_server_port", "redis_timeout", "server_tcp_connection_limit",
1296 "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4",
1297 "ipset_name_v6", YY_NULLPTR
12881298 };
12891299 #endif
12901300
13191329 485, 486, 487, 488, 489, 490, 491, 492, 493, 494,
13201330 495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
13211331 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
1322 515, 516, 517, 518, 519, 520, 521
1332 515, 516, 517, 518, 519, 520, 521, 522, 523, 524
13231333 };
13241334 # endif
13251335
1326 #define YYPACT_NINF -154
1336 #define YYPACT_NINF -262
13271337
13281338 #define yypact_value_is_default(Yystate) \
1329 (!!((Yystate) == (-154)))
1339 (!!((Yystate) == (-262)))
13301340
13311341 #define YYTABLE_NINF -1
13321342
13371347 STATE-NUM. */
13381348 static const yytype_int16 yypact[] =
13391349 {
1340 -154, 212, -154, -154, -154, -154, -154, -154, -154, -154,
1341 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1342 -154, -154, -154, -154, -12, 102, 98, 166, 39, 213,
1343 142, -80, 52, -153, 22, 23, 24, 28, 29, 30,
1344 78, 79, 80, 84, 88, 89, 114, 115, 116, 118,
1345 129, 130, 132, 133, 134, 136, 141, 180, 182, 196,
1346 197, 200, 201, 203, 204, 205, 206, 214, 215, 216,
1347 217, 218, 220, 221, 222, 223, 225, 245, 247, 248,
1348 249, 250, 251, 253, 254, 255, 256, 257, 258, 259,
1349 272, 278, 279, 280, 281, 282, 297, 306, 307, 308,
1350 309, 310, 311, 313, 314, 315, 316, 317, 318, 319,
1351 320, 323, 324, 325, 326, 327, 328, 329, 330, 331,
1352 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
1353 342, 343, 344, 346, 347, 348, 349, 351, 352, 354,
1354 355, 356, 357, 358, 359, 361, 362, 363, 364, 365,
1355 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
1356 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
1357 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
1358 396, 397, 398, 399, 400, 401, 402, 403, 405, 406,
1359 407, 408, 409, 410, 411, 412, 413, 414, 415, 416,
1360 417, 418, 419, 421, 422, 423, 424, 425, 426, 427,
1361 428, 429, 430, 431, 432, 433, 434, 435, 436, 438,
1362 439, 440, 441, -154, -154, -154, -154, -154, -154, -154,
1363 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1364 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1365 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1366 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1367 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1368 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1369 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1370 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1371 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1372 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1373 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1374 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1375 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1376 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1377 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1378 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1379 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1380 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1381 -154, -154, -154, 442, 443, 444, 446, 447, 448, 449,
1382 -154, -154, -154, -154, -154, -154, -154, -154, 450, 451,
1383 452, 453, 454, 455, -154, -154, -154, -154, -154, -154,
1384 -154, 456, 457, 458, 459, 460, 461, 462, -154, -154,
1385 -154, -154, -154, -154, -154, -154, 463, 464, 465, 466,
1386 467, 468, 469, 470, -154, -154, -154, -154, -154, -154,
1387 -154, -154, -154, 471, 472, 473, 474, 475, 476, 477,
1388 478, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1389 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
1390 489, 490, -154, -154, -154, -154, -154, -154, -154, -154,
1391 -154, -154, -154, -154, -154, 491, -154, -154, 492, 493,
1392 494, 495, 496, 497, 498, 499, 500, 501, -154, -154,
1393 -154, -154, -154, -154, -154, -154, -154, -154, -154, 502,
1394 503, 504, 505, 506, -154, -154, -154, -154, -154, -154,
1395 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1396 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1397 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1398 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1399 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1400 -154, -154, -154, -154, -154, -154, -154, -154, -154, 507,
1401 508, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1402 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1403 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1404 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1405 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1406 -154, -154, -154, -154, -154, -154, 509, 510, 511, -154,
1407 -154, -154, -154, -154, -154, -154, -154, -154, 512, 513,
1408 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1409 -154, -154, -154, -154, -154, -154, -154, -154, -154, 514,
1410 515, 516, 517, 518, 519, -154, -154, -154, -154, -154,
1411 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1412 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1413 520, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1414 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1415 -154, -154, -154, 521, -154, -154, 522, 523, -154, -154,
1416 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1417 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1418 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1419 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1420 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1421 -154, -154, 524, 525, 526, -154, -154, -154, -154, -154,
1422 -154, -154, -154
1350 -262, 0, -262, -262, -262, -262, -262, -262, -262, -262,
1351 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1352 -262, -262, -262, -262, -262, -262, 256, -42, -37, -38,
1353 -41, -44, -136, -102, -191, -177, -261, 2, 3, 28,
1354 29, 30, 33, 35, 36, 37, 38, 39, 55, 57,
1355 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1356 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
1357 78, 79, 80, 81, 82, 83, 86, 87, 90, 92,
1358 93, 94, 95, 96, 97, 98, 99, 101, 102, 103,
1359 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
1360 114, 115, 116, 119, 120, 121, 122, 123, 124, 125,
1361 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
1362 136, 137, 138, 139, 140, 142, 143, 144, 145, 146,
1363 147, 148, 149, 150, 151, 152, 153, 154, 155, 157,
1364 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
1365 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
1366 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
1367 188, 189, 190, 198, 199, 200, 201, 202, 204, 205,
1368 207, 209, 211, 212, 213, 214, 215, 216, 217, 218,
1369 219, 220, 221, 222, 223, 224, 226, 227, 228, 229,
1370 230, 231, 232, 234, 235, 236, 237, 238, 239, 240,
1371 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
1372 251, 252, 253, 254, 255, 289, -262, -262, -262, -262,
1373 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1374 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1375 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1376 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1377 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1378 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1379 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1380 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1381 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1382 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1383 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1384 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1385 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1386 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1387 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1388 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1389 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1390 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1391 -262, -262, -262, -262, -262, -262, 290, 291, 292, 296,
1392 297, 298, 340, -262, -262, -262, -262, -262, -262, -262,
1393 -262, 341, 342, 343, 344, 345, 346, -262, -262, -262,
1394 -262, -262, -262, -262, 347, 348, 352, 356, 357, 382,
1395 383, -262, -262, -262, -262, -262, -262, -262, -262, 384,
1396 386, 397, 398, 399, 400, 401, 402, -262, -262, -262,
1397 -262, -262, -262, -262, -262, -262, 403, 404, 405, 406,
1398 407, 408, 409, 448, -262, -262, -262, -262, -262, -262,
1399 -262, -262, -262, 450, 464, 465, 466, 467, 468, 469,
1400 470, 471, 472, 473, 474, -262, -262, -262, -262, -262,
1401 -262, -262, -262, -262, -262, -262, -262, -262, 481, -262,
1402 -262, 482, 483, 484, 485, 486, 488, 489, 490, 491,
1403 492, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1404 -262, -262, 493, 494, 497, 500, 503, -262, -262, -262,
1405 -262, -262, -262, 504, 513, -262, -262, -262, -262, -262,
1406 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1407 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1408 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1409 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1410 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1411 -262, -262, -262, -262, -262, -262, -262, 514, 515, -262,
1412 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1413 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1414 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1415 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1416 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1417 -262, -262, -262, -262, 516, 517, 518, -262, -262, -262,
1418 -262, -262, -262, -262, -262, -262, 519, 520, -262, -262,
1419 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1420 -262, -262, -262, -262, -262, -262, -262, 521, 522, 523,
1421 524, 525, 526, -262, -262, -262, -262, -262, -262, -262,
1422 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1423 -262, -262, -262, -262, -262, -262, -262, -262, 527, -262,
1424 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1425 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1426 -262, 528, -262, -262, 529, 530, -262, -262, -262, -262,
1427 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1428 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1429 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1430 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1431 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1432 -262, -262, 531, 532, 533, -262, -262, -262, -262, -262,
1433 -262, -262, -262
14231434 };
14241435
14251436 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
14271438 means the default is an error. */
14281439 static const yytype_uint16 yydefact[] =
14291440 {
1430 2, 0, 1, 14, 206, 216, 458, 504, 477, 225,
1431 513, 536, 235, 3, 16, 208, 218, 227, 237, 460,
1432 479, 506, 515, 538, 4, 5, 6, 10, 13, 8,
1433 9, 7, 11, 12, 0, 0, 0, 0, 0, 0,
1441 2, 0, 1, 15, 207, 217, 459, 505, 478, 226,
1442 514, 537, 236, 551, 3, 17, 209, 219, 228, 238,
1443 461, 480, 507, 516, 539, 553, 4, 5, 6, 10,
1444 14, 8, 9, 7, 11, 12, 13, 0, 0, 0,
14341445 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14351446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14361447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14491460 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14501461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14511462 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1452 0, 0, 0, 15, 17, 18, 80, 83, 92, 177,
1453 178, 19, 144, 145, 146, 147, 148, 149, 150, 151,
1454 152, 153, 31, 71, 20, 84, 85, 42, 64, 79,
1455 21, 22, 24, 25, 23, 26, 27, 28, 29, 30,
1456 115, 189, 116, 118, 119, 120, 191, 196, 192, 203,
1457 204, 205, 173, 81, 70, 96, 113, 114, 201, 198,
1458 117, 32, 33, 34, 35, 36, 72, 86, 87, 102,
1459 58, 68, 59, 181, 182, 97, 52, 53, 180, 54,
1460 55, 106, 110, 124, 133, 158, 202, 107, 65, 37,
1461 38, 39, 94, 125, 126, 127, 40, 41, 43, 44,
1462 46, 47, 45, 131, 48, 49, 50, 56, 75, 111,
1463 89, 132, 82, 154, 90, 91, 108, 109, 199, 95,
1464 51, 73, 76, 57, 60, 98, 99, 74, 155, 100,
1465 61, 62, 63, 190, 112, 168, 169, 170, 171, 179,
1466 101, 69, 103, 104, 105, 156, 66, 67, 88, 77,
1467 78, 93, 121, 122, 200, 123, 128, 129, 130, 159,
1468 160, 162, 164, 165, 163, 166, 174, 134, 135, 138,
1469 139, 136, 137, 140, 141, 143, 142, 193, 195, 194,
1470 157, 167, 183, 185, 184, 186, 187, 188, 161, 172,
1471 175, 176, 197, 0, 0, 0, 0, 0, 0, 0,
1472 207, 209, 210, 211, 213, 214, 215, 212, 0, 0,
1473 0, 0, 0, 0, 217, 219, 220, 221, 222, 223,
1474 224, 0, 0, 0, 0, 0, 0, 0, 226, 228,
1475 229, 232, 233, 230, 234, 231, 0, 0, 0, 0,
1476 0, 0, 0, 0, 236, 238, 239, 240, 241, 245,
1477 242, 243, 244, 0, 0, 0, 0, 0, 0, 0,
1478 0, 459, 461, 463, 462, 468, 464, 465, 466, 467,
1479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1480 0, 0, 478, 480, 481, 482, 483, 484, 485, 486,
1481 487, 488, 489, 490, 491, 0, 505, 507, 0, 0,
1482 0, 0, 0, 0, 0, 0, 0, 0, 514, 516,
1483 517, 518, 520, 521, 519, 522, 523, 524, 525, 0,
1484 0, 0, 0, 0, 537, 539, 540, 541, 542, 543,
1485 247, 246, 253, 266, 264, 272, 273, 276, 274, 275,
1486 277, 278, 279, 280, 281, 303, 304, 305, 306, 307,
1487 331, 332, 333, 338, 339, 269, 340, 341, 344, 342,
1488 343, 346, 347, 348, 362, 318, 319, 321, 322, 349,
1489 365, 312, 314, 366, 372, 373, 374, 270, 330, 388,
1490 389, 313, 383, 296, 265, 308, 363, 369, 350, 0,
1491 0, 392, 271, 248, 295, 354, 249, 267, 268, 309,
1492 310, 390, 352, 356, 357, 250, 393, 334, 361, 297,
1493 317, 367, 368, 371, 382, 311, 386, 384, 385, 323,
1494 329, 358, 359, 324, 325, 351, 376, 298, 299, 302,
1495 282, 284, 285, 286, 287, 288, 394, 395, 397, 335,
1496 336, 337, 345, 398, 399, 400, 0, 0, 0, 353,
1497 326, 509, 409, 413, 411, 410, 414, 412, 0, 0,
1498 417, 418, 254, 255, 256, 257, 258, 259, 260, 261,
1499 262, 263, 355, 370, 387, 422, 423, 327, 401, 0,
1500 0, 0, 0, 0, 0, 377, 378, 379, 380, 381,
1501 510, 320, 315, 375, 294, 251, 252, 316, 424, 426,
1502 425, 427, 428, 429, 283, 290, 419, 421, 420, 289,
1503 0, 301, 360, 396, 300, 328, 291, 292, 293, 430,
1504 431, 432, 436, 435, 433, 434, 437, 438, 439, 440,
1505 442, 441, 451, 0, 455, 456, 0, 0, 457, 443,
1506 449, 444, 445, 446, 448, 450, 447, 469, 471, 470,
1507 473, 474, 475, 476, 472, 492, 493, 494, 495, 496,
1508 497, 498, 499, 500, 501, 502, 503, 508, 526, 527,
1509 528, 531, 529, 530, 532, 533, 534, 535, 544, 545,
1510 546, 547, 548, 364, 391, 408, 511, 512, 415, 416,
1511 402, 403, 0, 0, 0, 407, 549, 452, 453, 454,
1512 406, 404, 405
1463 0, 0, 0, 0, 0, 0, 16, 18, 19, 81,
1464 84, 93, 178, 179, 20, 145, 146, 147, 148, 149,
1465 150, 151, 152, 153, 154, 32, 72, 21, 85, 86,
1466 43, 65, 80, 22, 23, 25, 26, 24, 27, 28,
1467 29, 30, 31, 116, 190, 117, 119, 120, 121, 192,
1468 197, 193, 204, 205, 206, 174, 82, 71, 97, 114,
1469 115, 202, 199, 118, 33, 34, 35, 36, 37, 73,
1470 87, 88, 103, 59, 69, 60, 182, 183, 98, 53,
1471 54, 181, 55, 56, 107, 111, 125, 134, 159, 203,
1472 108, 66, 38, 39, 40, 95, 126, 127, 128, 41,
1473 42, 44, 45, 47, 48, 46, 132, 49, 50, 51,
1474 57, 76, 112, 90, 133, 83, 155, 91, 92, 109,
1475 110, 200, 96, 52, 74, 77, 58, 61, 99, 100,
1476 75, 156, 101, 62, 63, 64, 191, 113, 169, 170,
1477 171, 172, 180, 102, 70, 104, 105, 106, 157, 67,
1478 68, 89, 78, 79, 94, 122, 123, 201, 124, 129,
1479 130, 131, 160, 161, 163, 165, 166, 164, 167, 175,
1480 135, 136, 139, 140, 137, 138, 141, 142, 144, 143,
1481 194, 196, 195, 158, 168, 184, 186, 185, 187, 188,
1482 189, 162, 173, 176, 177, 198, 0, 0, 0, 0,
1483 0, 0, 0, 208, 210, 211, 212, 214, 215, 216,
1484 213, 0, 0, 0, 0, 0, 0, 218, 220, 221,
1485 222, 223, 224, 225, 0, 0, 0, 0, 0, 0,
1486 0, 227, 229, 230, 233, 234, 231, 235, 232, 0,
1487 0, 0, 0, 0, 0, 0, 0, 237, 239, 240,
1488 241, 242, 246, 243, 244, 245, 0, 0, 0, 0,
1489 0, 0, 0, 0, 460, 462, 464, 463, 469, 465,
1490 466, 467, 468, 0, 0, 0, 0, 0, 0, 0,
1491 0, 0, 0, 0, 0, 479, 481, 482, 483, 484,
1492 485, 486, 487, 488, 489, 490, 491, 492, 0, 506,
1493 508, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1494 0, 515, 517, 518, 519, 521, 522, 520, 523, 524,
1495 525, 526, 0, 0, 0, 0, 0, 538, 540, 541,
1496 542, 543, 544, 0, 0, 552, 554, 555, 248, 247,
1497 254, 267, 265, 273, 274, 277, 275, 276, 278, 279,
1498 280, 281, 282, 304, 305, 306, 307, 308, 332, 333,
1499 334, 339, 340, 270, 341, 342, 345, 343, 344, 347,
1500 348, 349, 363, 319, 320, 322, 323, 350, 366, 313,
1501 315, 367, 373, 374, 375, 271, 331, 389, 390, 314,
1502 384, 297, 266, 309, 364, 370, 351, 0, 0, 393,
1503 272, 249, 296, 355, 250, 268, 269, 310, 311, 391,
1504 353, 357, 358, 251, 394, 335, 362, 298, 318, 368,
1505 369, 372, 383, 312, 387, 385, 386, 324, 330, 359,
1506 360, 325, 326, 352, 377, 299, 300, 303, 283, 285,
1507 286, 287, 288, 289, 395, 396, 398, 336, 337, 338,
1508 346, 399, 400, 401, 0, 0, 0, 354, 327, 510,
1509 410, 414, 412, 411, 415, 413, 0, 0, 418, 419,
1510 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1511 356, 371, 388, 423, 424, 328, 402, 0, 0, 0,
1512 0, 0, 0, 378, 379, 380, 381, 382, 511, 321,
1513 316, 376, 295, 252, 253, 317, 425, 427, 426, 428,
1514 429, 430, 284, 291, 420, 422, 421, 290, 0, 302,
1515 361, 397, 301, 329, 292, 293, 294, 431, 432, 433,
1516 437, 436, 434, 435, 438, 439, 440, 441, 443, 442,
1517 452, 0, 456, 457, 0, 0, 458, 444, 450, 445,
1518 446, 447, 449, 451, 448, 470, 472, 471, 474, 475,
1519 476, 477, 473, 493, 494, 495, 496, 497, 498, 499,
1520 500, 501, 502, 503, 504, 509, 527, 528, 529, 532,
1521 530, 531, 533, 534, 535, 536, 545, 546, 547, 548,
1522 549, 556, 557, 365, 392, 409, 512, 513, 416, 417,
1523 403, 404, 0, 0, 0, 408, 550, 453, 454, 455,
1524 407, 405, 406
15131525 };
15141526
15151527 /* YYPGOTO[NTERM-NUM]. */
15161528 static const yytype_int16 yypgoto[] =
15171529 {
1518 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1519 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1520 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1521 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1522 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1523 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1524 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1525 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1526 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1527 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1528 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1529 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1530 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1531 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1532 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1533 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1534 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1535 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1536 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1537 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1538 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1539 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1540 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1541 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1542 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1543 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1544 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1545 -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1546 -154, -154, -154, -154, -154, -154
1530 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1531 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1532 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1533 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1534 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1535 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1536 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1537 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1538 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1539 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1540 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1541 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1542 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1543 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1544 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1545 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1546 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1547 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1548 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1549 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1550 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1551 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1552 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1553 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1554 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1555 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1556 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1557 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1558 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1559 -262
15471560 };
15481561
15491562 /* YYDEFGOTO[NTERM-NUM]. */
15501563 static const yytype_int16 yydefgoto[] =
15511564 {
1552 -1, 1, 13, 14, 24, 223, 15, 25, 420, 16,
1553 26, 434, 17, 27, 448, 18, 28, 464, 224, 225,
1554 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
1555 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
1556 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
1557 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
1558 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
1559 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
1560 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
1561 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
1562 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
1563 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
1564 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
1565 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
1566 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
1567 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
1568 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
1569 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
1570 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
1571 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
1572 406, 407, 421, 422, 423, 424, 425, 426, 427, 435,
1573 436, 437, 438, 439, 440, 465, 466, 467, 468, 469,
1574 470, 471, 472, 449, 450, 451, 452, 453, 454, 455,
1575 19, 29, 481, 482, 483, 484, 485, 486, 487, 488,
1576 489, 20, 30, 502, 503, 504, 505, 506, 507, 508,
1577 509, 510, 511, 512, 513, 514, 21, 31, 516, 517,
1578 408, 409, 410, 411, 22, 32, 528, 529, 530, 531,
1579 532, 533, 534, 535, 536, 537, 538, 23, 33, 544,
1580 545, 546, 547, 548, 549, 412
1565 -1, 1, 14, 15, 26, 226, 16, 27, 423, 17,
1566 28, 437, 18, 29, 451, 19, 30, 467, 227, 228,
1567 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
1568 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
1569 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
1570 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
1571 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
1572 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
1573 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
1574 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
1575 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
1576 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
1577 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
1578 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
1579 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
1580 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
1581 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
1582 379, 380, 381, 382, 383, 384, 385, 386, 387, 388,
1583 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
1584 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
1585 409, 410, 424, 425, 426, 427, 428, 429, 430, 438,
1586 439, 440, 441, 442, 443, 468, 469, 470, 471, 472,
1587 473, 474, 475, 452, 453, 454, 455, 456, 457, 458,
1588 20, 31, 484, 485, 486, 487, 488, 489, 490, 491,
1589 492, 21, 32, 505, 506, 507, 508, 509, 510, 511,
1590 512, 513, 514, 515, 516, 517, 22, 33, 519, 520,
1591 411, 412, 413, 414, 23, 34, 531, 532, 533, 534,
1592 535, 536, 537, 538, 539, 540, 541, 24, 35, 547,
1593 548, 549, 550, 551, 552, 415, 25, 36, 555, 556,
1594 557
15811595 };
15821596
15831597 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
15851599 number is the opposite. If YYTABLE_NINF, syntax error. */
15861600 static const yytype_uint16 yytable[] =
15871601 {
1588 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
1589 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
1590 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1591 64, 515, 550, 551, 552, 65, 66, 67, 553, 554,
1592 555, 68, 69, 70, 71, 72, 73, 74, 75, 76,
1593 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1594 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1595 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1596 107, 108, 456, 539, 540, 541, 542, 543, 556, 557,
1597 558, 109, 110, 111, 559, 112, 113, 114, 560, 561,
1598 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1599 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1600 135, 136, 137, 138, 562, 563, 564, 139, 565, 140,
1601 141, 142, 143, 144, 145, 146, 147, 148, 149, 566,
1602 567, 428, 568, 569, 570, 413, 571, 414, 415, 429,
1603 430, 572, 150, 151, 152, 153, 154, 155, 156, 157,
1604 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
1605 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
1606 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
1607 573, 188, 574, 189, 190, 191, 192, 193, 194, 195,
1608 196, 197, 198, 199, 200, 201, 575, 576, 416, 441,
1609 577, 578, 2, 579, 580, 581, 582, 202, 203, 204,
1610 205, 206, 207, 3, 583, 584, 585, 586, 587, 208,
1611 588, 589, 590, 591, 431, 592, 432, 209, 210, 417,
1612 211, 212, 418, 213, 214, 442, 443, 215, 216, 217,
1613 218, 219, 220, 221, 222, 593, 4, 594, 595, 596,
1614 597, 598, 5, 599, 600, 601, 602, 603, 604, 605,
1615 444, 518, 519, 520, 521, 522, 523, 524, 525, 526,
1616 527, 457, 606, 458, 459, 460, 461, 462, 607, 608,
1617 609, 610, 611, 463, 490, 491, 492, 493, 494, 495,
1618 496, 497, 498, 499, 500, 501, 6, 612, 473, 474,
1619 475, 476, 477, 478, 479, 480, 613, 614, 615, 616,
1620 617, 618, 7, 619, 620, 621, 622, 623, 624, 625,
1621 626, 445, 446, 627, 628, 629, 630, 631, 632, 633,
1622 634, 635, 636, 637, 638, 639, 640, 641, 642, 643,
1623 644, 645, 646, 647, 648, 433, 649, 650, 651, 652,
1624 419, 653, 654, 8, 655, 656, 657, 658, 659, 660,
1625 447, 661, 662, 663, 664, 665, 666, 667, 668, 669,
1626 670, 671, 672, 673, 674, 675, 676, 677, 678, 679,
1627 680, 681, 682, 683, 684, 685, 686, 687, 688, 689,
1628 690, 691, 692, 693, 694, 695, 696, 697, 698, 699,
1629 700, 701, 702, 703, 9, 704, 705, 706, 707, 708,
1630 709, 710, 711, 712, 713, 714, 715, 716, 717, 718,
1631 10, 719, 720, 721, 722, 723, 724, 725, 726, 727,
1632 728, 729, 730, 731, 732, 733, 734, 11, 735, 736,
1633 737, 738, 739, 740, 741, 12, 742, 743, 744, 745,
1634 746, 747, 748, 749, 750, 751, 752, 753, 754, 755,
1635 756, 757, 758, 759, 760, 761, 762, 763, 764, 765,
1636 766, 767, 768, 769, 770, 771, 772, 773, 774, 775,
1637 776, 777, 778, 779, 780, 781, 782, 783, 784, 785,
1638 786, 787, 788, 789, 790, 791, 792, 793, 794, 795,
1639 796, 797, 798, 799, 800, 801, 802, 803, 804, 805,
1640 806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
1641 816, 817, 818, 819, 820, 821, 822
1642 };
1643
1644 static const yytype_uint16 yycheck[] =
1645 {
1646 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1647 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1648 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
1649 42, 111, 10, 10, 10, 47, 48, 49, 10, 10,
1650 10, 53, 54, 55, 56, 57, 58, 59, 60, 61,
1651 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1602 2, 416, 459, 417, 418, 444, 431, 553, 554, 518,
1603 0, 3, 558, 559, 432, 433, 493, 494, 495, 496,
1604 497, 498, 499, 500, 501, 502, 503, 504, 521, 522,
1605 523, 524, 525, 526, 527, 528, 529, 530, 560, 561,
1606 562, 445, 446, 563, 4, 564, 565, 566, 567, 568,
1607 5, 476, 477, 478, 479, 480, 481, 482, 483, 542,
1608 543, 544, 545, 546, 419, 569, 447, 570, 571, 572,
1609 573, 574, 575, 576, 577, 578, 579, 580, 581, 582,
1610 583, 584, 585, 586, 587, 588, 589, 590, 591, 592,
1611 593, 594, 595, 596, 6, 420, 597, 598, 421, 434,
1612 599, 435, 600, 601, 602, 603, 604, 605, 606, 607,
1613 7, 608, 609, 610, 611, 612, 613, 614, 615, 616,
1614 617, 618, 619, 620, 621, 622, 623, 448, 449, 624,
1615 625, 626, 627, 628, 629, 630, 631, 632, 633, 634,
1616 635, 636, 637, 638, 639, 640, 641, 642, 643, 644,
1617 645, 8, 646, 647, 648, 649, 650, 651, 652, 653,
1618 654, 655, 656, 657, 658, 659, 450, 660, 661, 662,
1619 663, 664, 665, 666, 667, 668, 669, 670, 671, 672,
1620 673, 674, 675, 676, 677, 678, 679, 680, 681, 682,
1621 683, 684, 685, 686, 687, 688, 689, 690, 691, 692,
1622 693, 460, 9, 461, 462, 463, 464, 465, 694, 695,
1623 696, 697, 698, 466, 699, 700, 422, 701, 10, 702,
1624 436, 703, 704, 705, 706, 707, 708, 709, 710, 711,
1625 712, 713, 714, 715, 716, 11, 717, 718, 719, 720,
1626 721, 722, 723, 12, 724, 725, 726, 727, 728, 729,
1627 730, 731, 732, 733, 734, 735, 736, 737, 738, 739,
1628 740, 741, 742, 743, 744, 745, 0, 13, 37, 38,
1629 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
1630 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
1631 59, 60, 61, 62, 63, 64, 65, 66, 67, 746,
1632 747, 748, 749, 68, 69, 70, 750, 751, 752, 71,
16521633 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
16531634 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1654 92, 93, 43, 236, 237, 238, 239, 240, 10, 10,
1655 10, 103, 104, 105, 10, 107, 108, 109, 10, 10,
1656 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
1657 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
1658 132, 133, 134, 135, 10, 10, 10, 139, 10, 141,
1659 142, 143, 144, 145, 146, 147, 148, 149, 150, 10,
1660 10, 43, 10, 10, 10, 43, 10, 45, 46, 51,
1661 52, 10, 164, 165, 166, 167, 168, 169, 170, 171,
1662 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
1663 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
1664 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
1665 10, 203, 10, 205, 206, 207, 208, 209, 210, 211,
1666 212, 213, 214, 215, 216, 217, 10, 10, 106, 43,
1667 10, 10, 0, 10, 10, 10, 10, 229, 230, 231,
1668 232, 233, 234, 11, 10, 10, 10, 10, 10, 241,
1669 10, 10, 10, 10, 136, 10, 138, 249, 250, 137,
1670 252, 253, 140, 255, 256, 79, 80, 259, 260, 261,
1671 262, 263, 264, 265, 266, 10, 44, 10, 10, 10,
1672 10, 10, 50, 10, 10, 10, 10, 10, 10, 10,
1673 104, 219, 220, 221, 222, 223, 224, 225, 226, 227,
1674 228, 242, 10, 244, 245, 246, 247, 248, 10, 10,
1675 10, 10, 10, 254, 152, 153, 154, 155, 156, 157,
1676 158, 159, 160, 161, 162, 163, 94, 10, 95, 96,
1677 97, 98, 99, 100, 101, 102, 10, 10, 10, 10,
1678 10, 10, 110, 10, 10, 10, 10, 10, 10, 10,
1679 10, 165, 166, 10, 10, 10, 10, 10, 10, 10,
1635 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1636 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1637 753, 754, 755, 756, 757, 758, 759, 760, 761, 112,
1638 113, 114, 762, 115, 116, 117, 763, 764, 118, 119,
1639 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
1640 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
1641 140, 141, 765, 766, 767, 142, 768, 143, 144, 145,
1642 146, 147, 148, 149, 150, 151, 152, 769, 770, 771,
1643 772, 773, 774, 775, 776, 777, 778, 779, 780, 781,
1644 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
1645 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
1646 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
1647 183, 184, 185, 186, 187, 188, 189, 190, 782, 191,
1648 783, 192, 193, 194, 195, 196, 197, 198, 199, 200,
1649 201, 202, 203, 204, 784, 785, 786, 787, 788, 789,
1650 790, 791, 792, 793, 794, 205, 206, 207, 208, 209,
1651 210, 795, 796, 797, 798, 799, 800, 211, 801, 802,
1652 803, 804, 805, 806, 807, 212, 213, 808, 214, 215,
1653 809, 216, 217, 810, 811, 218, 219, 220, 221, 222,
1654 223, 224, 225, 812, 813, 814, 815, 816, 817, 818,
1655 819, 820, 821, 822, 823, 824, 825, 826, 827, 828,
1656 829, 830, 831, 832
1657 };
1658
1659 static const yytype_int16 yycheck[] =
1660 {
1661 0, 43, 43, 45, 46, 43, 43, 268, 269, 111,
1662 -1, 11, 10, 10, 51, 52, 152, 153, 154, 155,
1663 156, 157, 158, 159, 160, 161, 162, 163, 219, 220,
1664 221, 222, 223, 224, 225, 226, 227, 228, 10, 10,
1665 10, 79, 80, 10, 44, 10, 10, 10, 10, 10,
1666 50, 95, 96, 97, 98, 99, 100, 101, 102, 236,
1667 237, 238, 239, 240, 106, 10, 104, 10, 10, 10,
16801668 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1681 10, 10, 10, 10, 10, 257, 10, 10, 10, 10,
1682 258, 10, 10, 151, 10, 10, 10, 10, 10, 10,
1683 204, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1669 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1670 10, 10, 10, 10, 94, 137, 10, 10, 140, 136,
1671 10, 138, 10, 10, 10, 10, 10, 10, 10, 10,
1672 110, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1673 10, 10, 10, 10, 10, 10, 10, 165, 166, 10,
1674 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1675 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1676 10, 151, 10, 10, 10, 10, 10, 10, 10, 10,
1677 10, 10, 10, 10, 10, 10, 204, 10, 10, 10,
16841678 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
16851679 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
16861680 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1687 10, 10, 10, 10, 202, 10, 10, 10, 10, 10,
1681 10, 242, 202, 244, 245, 246, 247, 248, 10, 10,
1682 10, 10, 10, 254, 10, 10, 258, 10, 218, 10,
1683 257, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1684 10, 10, 10, 10, 10, 235, 10, 10, 10, 10,
1685 10, 10, 10, 243, 10, 10, 10, 10, 10, 10,
16881686 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1689 218, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1690 10, 10, 10, 10, 10, 10, 10, 235, 10, 10,
1691 10, 10, 10, 10, 10, 243, 10, 10, 10, 10,
1687 10, 10, 10, 10, 10, 10, -1, 267, 12, 13,
1688 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
1689 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
1690 34, 35, 36, 37, 38, 39, 40, 41, 42, 10,
1691 10, 10, 10, 47, 48, 49, 10, 10, 10, 53,
1692 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1693 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1694 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1695 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
1696 10, 10, 10, 10, 10, 10, 10, 10, 10, 103,
1697 104, 105, 10, 107, 108, 109, 10, 10, 112, 113,
1698 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1699 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
1700 134, 135, 10, 10, 10, 139, 10, 141, 142, 143,
1701 144, 145, 146, 147, 148, 149, 150, 10, 10, 10,
16921702 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1703 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
1704 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
1705 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
1706 194, 195, 196, 197, 198, 199, 200, 201, 10, 203,
1707 10, 205, 206, 207, 208, 209, 210, 211, 212, 213,
1708 214, 215, 216, 217, 10, 10, 10, 10, 10, 10,
1709 10, 10, 10, 10, 10, 229, 230, 231, 232, 233,
1710 234, 10, 10, 10, 10, 10, 10, 241, 10, 10,
1711 10, 10, 10, 10, 10, 249, 250, 10, 252, 253,
1712 10, 255, 256, 10, 10, 259, 260, 261, 262, 263,
1713 264, 265, 266, 10, 10, 10, 10, 10, 10, 10,
16931714 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1694 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1695 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1696 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1697 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1698 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1699 10, 10, 10, 10, 10, 10, 10
1715 10, 10, 10, 10
17001716 };
17011717
17021718 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
17031719 symbol of state STATE-NUM. */
17041720 static const yytype_uint16 yystos[] =
17051721 {
1706 0, 268, 0, 11, 44, 50, 94, 110, 151, 202,
1707 218, 235, 243, 269, 270, 273, 276, 279, 282, 497,
1708 508, 523, 531, 544, 271, 274, 277, 280, 283, 498,
1709 509, 524, 532, 545, 12, 13, 14, 15, 16, 17,
1710 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
1711 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
1712 38, 39, 40, 41, 42, 47, 48, 49, 53, 54,
1713 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1714 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1715 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1716 85, 86, 87, 88, 89, 90, 91, 92, 93, 103,
1717 104, 105, 107, 108, 109, 112, 113, 114, 115, 116,
1718 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1719 127, 128, 129, 130, 131, 132, 133, 134, 135, 139,
1720 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
1721 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
1722 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
1723 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
1724 194, 195, 196, 197, 198, 199, 200, 201, 203, 205,
1725 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
1726 216, 217, 229, 230, 231, 232, 233, 234, 241, 249,
1727 250, 252, 253, 255, 256, 259, 260, 261, 262, 263,
1728 264, 265, 266, 272, 285, 286, 287, 288, 289, 290,
1722 0, 271, 0, 11, 44, 50, 94, 110, 151, 202,
1723 218, 235, 243, 267, 272, 273, 276, 279, 282, 285,
1724 500, 511, 526, 534, 547, 556, 274, 277, 280, 283,
1725 286, 501, 512, 527, 535, 548, 557, 12, 13, 14,
1726 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1727 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1728 35, 36, 37, 38, 39, 40, 41, 42, 47, 48,
1729 49, 53, 54, 55, 56, 57, 58, 59, 60, 61,
1730 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1731 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1732 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1733 92, 93, 103, 104, 105, 107, 108, 109, 112, 113,
1734 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1735 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
1736 134, 135, 139, 141, 142, 143, 144, 145, 146, 147,
1737 148, 149, 150, 164, 165, 166, 167, 168, 169, 170,
1738 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
1739 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1740 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
1741 201, 203, 205, 206, 207, 208, 209, 210, 211, 212,
1742 213, 214, 215, 216, 217, 229, 230, 231, 232, 233,
1743 234, 241, 249, 250, 252, 253, 255, 256, 259, 260,
1744 261, 262, 263, 264, 265, 266, 275, 288, 289, 290,
17291745 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
17301746 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
17311747 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
17431759 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
17441760 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
17451761 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
1746 461, 462, 463, 464, 465, 466, 467, 468, 527, 528,
1747 529, 530, 552, 43, 45, 46, 106, 137, 140, 258,
1748 275, 469, 470, 471, 472, 473, 474, 475, 43, 51,
1749 52, 136, 138, 257, 278, 476, 477, 478, 479, 480,
1750 481, 43, 79, 80, 104, 165, 166, 204, 281, 490,
1751 491, 492, 493, 494, 495, 496, 43, 242, 244, 245,
1752 246, 247, 248, 254, 284, 482, 483, 484, 485, 486,
1753 487, 488, 489, 95, 96, 97, 98, 99, 100, 101,
1754 102, 499, 500, 501, 502, 503, 504, 505, 506, 507,
1755 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
1756 162, 163, 510, 511, 512, 513, 514, 515, 516, 517,
1757 518, 519, 520, 521, 522, 111, 525, 526, 219, 220,
1758 221, 222, 223, 224, 225, 226, 227, 228, 533, 534,
1759 535, 536, 537, 538, 539, 540, 541, 542, 543, 236,
1760 237, 238, 239, 240, 546, 547, 548, 549, 550, 551,
1762 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
1763 471, 530, 531, 532, 533, 555, 43, 45, 46, 106,
1764 137, 140, 258, 278, 472, 473, 474, 475, 476, 477,
1765 478, 43, 51, 52, 136, 138, 257, 281, 479, 480,
1766 481, 482, 483, 484, 43, 79, 80, 104, 165, 166,
1767 204, 284, 493, 494, 495, 496, 497, 498, 499, 43,
1768 242, 244, 245, 246, 247, 248, 254, 287, 485, 486,
1769 487, 488, 489, 490, 491, 492, 95, 96, 97, 98,
1770 99, 100, 101, 102, 502, 503, 504, 505, 506, 507,
1771 508, 509, 510, 152, 153, 154, 155, 156, 157, 158,
1772 159, 160, 161, 162, 163, 513, 514, 515, 516, 517,
1773 518, 519, 520, 521, 522, 523, 524, 525, 111, 528,
1774 529, 219, 220, 221, 222, 223, 224, 225, 226, 227,
1775 228, 536, 537, 538, 539, 540, 541, 542, 543, 544,
1776 545, 546, 236, 237, 238, 239, 240, 549, 550, 551,
1777 552, 553, 554, 268, 269, 558, 559, 560, 10, 10,
17611778 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
17621779 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
17631780 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
17911808 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
17921809 static const yytype_uint16 yyr1[] =
17931810 {
1794 0, 267, 268, 268, 269, 269, 269, 269, 269, 269,
1795 269, 269, 269, 269, 270, 271, 271, 272, 272, 272,
1796 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1797 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1798 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1799 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1800 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1801 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1802 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1803 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1804 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1805 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1806 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1807 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1808 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1809 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1810 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1811 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1812 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1813 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
1814 272, 272, 272, 272, 272, 272, 273, 274, 274, 275,
1815 275, 275, 275, 275, 275, 275, 276, 277, 277, 278,
1816 278, 278, 278, 278, 278, 279, 280, 280, 281, 281,
1817 281, 281, 281, 281, 281, 282, 283, 283, 284, 284,
1818 284, 284, 284, 284, 284, 284, 285, 286, 287, 288,
1819 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
1820 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
1821 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
1822 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
1823 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
1824 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
1825 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
1826 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
1827 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
1828 379, 380, 381, 382, 383, 384, 385, 386, 387, 388,
1829 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
1830 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
1831 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
1832 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
1833 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
1834 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
1835 449, 450, 451, 452, 453, 454, 455, 456, 457, 458,
1836 459, 460, 461, 462, 463, 464, 465, 466, 467, 468,
1837 469, 470, 471, 472, 473, 474, 475, 476, 477, 478,
1838 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
1839 489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
1840 498, 499, 499, 499, 499, 499, 499, 499, 499, 500,
1841 501, 502, 503, 504, 505, 506, 507, 508, 509, 509,
1842 510, 510, 510, 510, 510, 510, 510, 510, 510, 510,
1843 510, 510, 511, 512, 513, 514, 515, 516, 517, 518,
1844 519, 520, 521, 522, 523, 524, 524, 525, 526, 527,
1845 528, 529, 530, 531, 532, 532, 533, 533, 533, 533,
1846 533, 533, 533, 533, 533, 533, 534, 535, 536, 537,
1847 538, 539, 540, 541, 542, 543, 544, 545, 545, 546,
1848 546, 546, 546, 546, 547, 548, 549, 550, 551, 552
1811 0, 270, 271, 271, 272, 272, 272, 272, 272, 272,
1812 272, 272, 272, 272, 272, 273, 274, 274, 275, 275,
1813 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1814 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1815 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1816 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1817 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1818 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1819 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1820 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1821 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1822 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1823 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1824 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1825 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1826 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1827 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1828 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1829 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1830 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
1831 275, 275, 275, 275, 275, 275, 275, 276, 277, 277,
1832 278, 278, 278, 278, 278, 278, 278, 279, 280, 280,
1833 281, 281, 281, 281, 281, 281, 282, 283, 283, 284,
1834 284, 284, 284, 284, 284, 284, 285, 286, 286, 287,
1835 287, 287, 287, 287, 287, 287, 287, 288, 289, 290,
1836 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
1837 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
1838 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
1839 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
1840 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
1841 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
1842 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
1843 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
1844 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
1845 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
1846 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
1847 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
1848 411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
1849 421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
1850 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
1851 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
1852 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
1853 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
1854 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
1855 481, 482, 483, 484, 485, 486, 487, 488, 489, 490,
1856 491, 492, 493, 494, 495, 496, 497, 498, 499, 500,
1857 501, 501, 502, 502, 502, 502, 502, 502, 502, 502,
1858 503, 504, 505, 506, 507, 508, 509, 510, 511, 512,
1859 512, 513, 513, 513, 513, 513, 513, 513, 513, 513,
1860 513, 513, 513, 514, 515, 516, 517, 518, 519, 520,
1861 521, 522, 523, 524, 525, 526, 527, 527, 528, 529,
1862 530, 531, 532, 533, 534, 535, 535, 536, 536, 536,
1863 536, 536, 536, 536, 536, 536, 536, 537, 538, 539,
1864 540, 541, 542, 543, 544, 545, 546, 547, 548, 548,
1865 549, 549, 549, 549, 549, 550, 551, 552, 553, 554,
1866 555, 556, 557, 557, 558, 558, 559, 560
18491867 };
18501868
18511869 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
18521870 static const yytype_uint8 yyr2[] =
18531871 {
18541872 0, 2, 0, 2, 2, 2, 2, 2, 2, 2,
1855 2, 2, 2, 2, 1, 2, 0, 1, 1, 1,
1873 2, 2, 2, 2, 2, 1, 2, 0, 1, 1,
18561874 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18571875 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18581876 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18711889 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18721890 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18731891 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1892 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
1893 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
18741894 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
18751895 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
1876 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
1877 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
1878 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
1896 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
18791897 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18801898 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18811899 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18871905 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18881906 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18891907 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1890 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
1908 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
18911909 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18921910 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1893 2, 3, 2, 2, 2, 2, 2, 2, 2, 2,
1894 2, 2, 3, 3, 4, 4, 4, 3, 3, 2,
1895 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
1911 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
1912 2, 2, 2, 3, 3, 4, 4, 4, 3, 3,
1913 2, 2, 2, 2, 2, 2, 3, 3, 2, 2,
18961914 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18971915 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18981916 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1899 2, 2, 3, 3, 3, 2, 2, 2, 1, 2,
1900 0, 1, 1, 1, 1, 1, 1, 1, 1, 2,
1917 2, 2, 2, 3, 3, 3, 2, 2, 2, 1,
1918 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1919 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
1920 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1921 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
1922 2, 2, 2, 2, 2, 1, 2, 0, 1, 2,
1923 2, 2, 3, 3, 1, 2, 0, 1, 1, 1,
1924 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
19011925 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
1902 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1903 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
1904 2, 2, 2, 2, 1, 2, 0, 1, 2, 2,
1905 2, 3, 3, 1, 2, 0, 1, 1, 1, 1,
1906 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
1907 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
1908 1, 1, 1, 1, 2, 2, 2, 2, 2, 3
1926 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
1927 3, 1, 2, 0, 1, 1, 2, 2
19091928 };
19101929
19111930
25822601 YY_REDUCE_PRINT (yyn);
25832602 switch (yyn)
25842603 {
2585 case 14:
2586 #line 182 "util/configparser.y" /* yacc.c:1648 */
2604 case 15:
2605 #line 183 "util/configparser.y" /* yacc.c:1648 */
25872606 {
25882607 OUTYY(("\nP(server:)\n"));
25892608 }
2590 #line 2592 "util/configparser.c" /* yacc.c:1648 */
2591 break;
2592
2593 case 206:
2594 #line 273 "util/configparser.y" /* yacc.c:1648 */
2609 #line 2611 "util/configparser.c" /* yacc.c:1648 */
2610 break;
2611
2612 case 207:
2613 #line 274 "util/configparser.y" /* yacc.c:1648 */
25952614 {
25962615 struct config_stub* s;
25972616 OUTYY(("\nP(stub_zone:)\n"));
26022621 } else
26032622 yyerror("out of memory");
26042623 }
2605 #line 2607 "util/configparser.c" /* yacc.c:1648 */
2606 break;
2607
2608 case 216:
2609 #line 290 "util/configparser.y" /* yacc.c:1648 */
2624 #line 2626 "util/configparser.c" /* yacc.c:1648 */
2625 break;
2626
2627 case 217:
2628 #line 291 "util/configparser.y" /* yacc.c:1648 */
26102629 {
26112630 struct config_stub* s;
26122631 OUTYY(("\nP(forward_zone:)\n"));
26172636 } else
26182637 yyerror("out of memory");
26192638 }
2620 #line 2622 "util/configparser.c" /* yacc.c:1648 */
2621 break;
2622
2623 case 225:
2624 #line 307 "util/configparser.y" /* yacc.c:1648 */
2639 #line 2641 "util/configparser.c" /* yacc.c:1648 */
2640 break;
2641
2642 case 226:
2643 #line 308 "util/configparser.y" /* yacc.c:1648 */
26252644 {
26262645 struct config_view* s;
26272646 OUTYY(("\nP(view:)\n"));
26342653 } else
26352654 yyerror("out of memory");
26362655 }
2637 #line 2639 "util/configparser.c" /* yacc.c:1648 */
2638 break;
2639
2640 case 235:
2641 #line 326 "util/configparser.y" /* yacc.c:1648 */
2656 #line 2658 "util/configparser.c" /* yacc.c:1648 */
2657 break;
2658
2659 case 236:
2660 #line 327 "util/configparser.y" /* yacc.c:1648 */
26422661 {
26432662 struct config_auth* s;
26442663 OUTYY(("\nP(auth_zone:)\n"));
26532672 } else
26542673 yyerror("out of memory");
26552674 }
2656 #line 2658 "util/configparser.c" /* yacc.c:1648 */
2657 break;
2658
2659 case 246:
2660 #line 348 "util/configparser.y" /* yacc.c:1648 */
2675 #line 2677 "util/configparser.c" /* yacc.c:1648 */
2676 break;
2677
2678 case 247:
2679 #line 349 "util/configparser.y" /* yacc.c:1648 */
26612680 {
26622681 OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
26632682 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
26652684 else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
26662685 free((yyvsp[0].str));
26672686 }
2668 #line 2670 "util/configparser.c" /* yacc.c:1648 */
2669 break;
2670
2671 case 247:
2672 #line 357 "util/configparser.y" /* yacc.c:1648 */
2687 #line 2689 "util/configparser.c" /* yacc.c:1648 */
2688 break;
2689
2690 case 248:
2691 #line 358 "util/configparser.y" /* yacc.c:1648 */
26732692 {
26742693 OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
26752694 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
26772696 else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
26782697 free((yyvsp[0].str));
26792698 }
2680 #line 2682 "util/configparser.c" /* yacc.c:1648 */
2681 break;
2682
2683 case 248:
2684 #line 366 "util/configparser.y" /* yacc.c:1648 */
2699 #line 2701 "util/configparser.c" /* yacc.c:1648 */
2700 break;
2701
2702 case 249:
2703 #line 367 "util/configparser.y" /* yacc.c:1648 */
26852704 {
26862705 OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
26872706 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
26912710 else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
26922711 free((yyvsp[0].str));
26932712 }
2694 #line 2696 "util/configparser.c" /* yacc.c:1648 */
2695 break;
2696
2697 case 249:
2698 #line 377 "util/configparser.y" /* yacc.c:1648 */
2713 #line 2715 "util/configparser.c" /* yacc.c:1648 */
2714 break;
2715
2716 case 250:
2717 #line 378 "util/configparser.y" /* yacc.c:1648 */
26992718 {
27002719 OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
27012720 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
27032722 else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
27042723 free((yyvsp[0].str));
27052724 }
2706 #line 2708 "util/configparser.c" /* yacc.c:1648 */
2707 break;
2708
2709 case 250:
2710 #line 386 "util/configparser.y" /* yacc.c:1648 */
2725 #line 2727 "util/configparser.c" /* yacc.c:1648 */
2726 break;
2727
2728 case 251:
2729 #line 387 "util/configparser.y" /* yacc.c:1648 */
27112730 {
27122731 OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
27132732 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
27152734 else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
27162735 free((yyvsp[0].str));
27172736 }
2718 #line 2720 "util/configparser.c" /* yacc.c:1648 */
2719 break;
2720
2721 case 251:
2722 #line 395 "util/configparser.y" /* yacc.c:1648 */
2737 #line 2739 "util/configparser.c" /* yacc.c:1648 */
2738 break;
2739
2740 case 252:
2741 #line 396 "util/configparser.y" /* yacc.c:1648 */
27232742 {
27242743 OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
27252744 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
27272746 else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
27282747 free((yyvsp[0].str));
27292748 }
2730 #line 2732 "util/configparser.c" /* yacc.c:1648 */
2731 break;
2732
2733 case 252:
2734 #line 404 "util/configparser.y" /* yacc.c:1648 */
2749 #line 2751 "util/configparser.c" /* yacc.c:1648 */
2750 break;
2751
2752 case 253:
2753 #line 405 "util/configparser.y" /* yacc.c:1648 */
27352754 {
27362755 OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
27372756 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
27412760 else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
27422761 free((yyvsp[0].str));
27432762 }
2744 #line 2746 "util/configparser.c" /* yacc.c:1648 */
2745 break;
2746
2747 case 253:
2748 #line 415 "util/configparser.y" /* yacc.c:1648 */
2763 #line 2765 "util/configparser.c" /* yacc.c:1648 */
2764 break;
2765
2766 case 254:
2767 #line 416 "util/configparser.y" /* yacc.c:1648 */
27492768 {
27502769 OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
27512770 if(atoi((yyvsp[0].str)) == 0)
27532772 else cfg_parser->cfg->port = atoi((yyvsp[0].str));
27542773 free((yyvsp[0].str));
27552774 }
2756 #line 2758 "util/configparser.c" /* yacc.c:1648 */
2757 break;
2758
2759 case 254:
2760 #line 424 "util/configparser.y" /* yacc.c:1648 */
2775 #line 2777 "util/configparser.c" /* yacc.c:1648 */
2776 break;
2777
2778 case 255:
2779 #line 425 "util/configparser.y" /* yacc.c:1648 */
27612780 {
27622781 #ifdef CLIENT_SUBNET
27632782 OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
27672786 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
27682787 #endif
27692788 }
2770 #line 2772 "util/configparser.c" /* yacc.c:1648 */
2771 break;
2772
2773 case 255:
2774 #line 435 "util/configparser.y" /* yacc.c:1648 */
2789 #line 2791 "util/configparser.c" /* yacc.c:1648 */
2790 break;
2791
2792 case 256:
2793 #line 436 "util/configparser.y" /* yacc.c:1648 */
27752794 {
27762795 #ifdef CLIENT_SUBNET
27772796 OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
27822801 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
27832802 #endif
27842803 }
2785 #line 2787 "util/configparser.c" /* yacc.c:1648 */
2786 break;
2787
2788 case 256:
2789 #line 448 "util/configparser.y" /* yacc.c:1648 */
2804 #line 2806 "util/configparser.c" /* yacc.c:1648 */
2805 break;
2806
2807 case 257:
2808 #line 449 "util/configparser.y" /* yacc.c:1648 */
27902809 {
27912810 #ifdef CLIENT_SUBNET
27922811 OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
28002819 #endif
28012820 free((yyvsp[0].str));
28022821 }
2803 #line 2805 "util/configparser.c" /* yacc.c:1648 */
2804 break;
2805
2806 case 257:
2807 #line 463 "util/configparser.y" /* yacc.c:1648 */
2822 #line 2824 "util/configparser.c" /* yacc.c:1648 */
2823 break;
2824
2825 case 258:
2826 #line 464 "util/configparser.y" /* yacc.c:1648 */
28082827 {
28092828 #ifdef CLIENT_SUBNET
28102829 OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
28142833 #endif
28152834 free((yyvsp[0].str));
28162835 }
2817 #line 2819 "util/configparser.c" /* yacc.c:1648 */
2818 break;
2819
2820 case 258:
2821 #line 474 "util/configparser.y" /* yacc.c:1648 */
2836 #line 2838 "util/configparser.c" /* yacc.c:1648 */
2837 break;
2838
2839 case 259:
2840 #line 475 "util/configparser.y" /* yacc.c:1648 */
28222841 {
28232842 #ifdef CLIENT_SUBNET
28242843 OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
28342853 #endif
28352854 free((yyvsp[0].str));
28362855 }
2837 #line 2839 "util/configparser.c" /* yacc.c:1648 */
2838 break;
2839
2840 case 259:
2841 #line 491 "util/configparser.y" /* yacc.c:1648 */
2856 #line 2858 "util/configparser.c" /* yacc.c:1648 */
2857 break;
2858
2859 case 260:
2860 #line 492 "util/configparser.y" /* yacc.c:1648 */
28422861 {
28432862 #ifdef CLIENT_SUBNET
28442863 OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
28542873 #endif
28552874 free((yyvsp[0].str));
28562875 }
2857 #line 2859 "util/configparser.c" /* yacc.c:1648 */
2858 break;
2859
2860 case 260:
2861 #line 508 "util/configparser.y" /* yacc.c:1648 */
2876 #line 2878 "util/configparser.c" /* yacc.c:1648 */
2877 break;
2878
2879 case 261:
2880 #line 509 "util/configparser.y" /* yacc.c:1648 */
28622881 {
28632882 #ifdef CLIENT_SUBNET
28642883 OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
28742893 #endif
28752894 free((yyvsp[0].str));
28762895 }
2877 #line 2879 "util/configparser.c" /* yacc.c:1648 */
2878 break;
2879
2880 case 261:
2881 #line 525 "util/configparser.y" /* yacc.c:1648 */
2896 #line 2898 "util/configparser.c" /* yacc.c:1648 */
2897 break;
2898
2899 case 262:
2900 #line 526 "util/configparser.y" /* yacc.c:1648 */
28822901 {
28832902 #ifdef CLIENT_SUBNET
28842903 OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
28942913 #endif
28952914 free((yyvsp[0].str));
28962915 }
2897 #line 2899 "util/configparser.c" /* yacc.c:1648 */
2898 break;
2899
2900 case 262:
2901 #line 542 "util/configparser.y" /* yacc.c:1648 */
2916 #line 2918 "util/configparser.c" /* yacc.c:1648 */
2917 break;
2918
2919 case 263:
2920 #line 543 "util/configparser.y" /* yacc.c:1648 */
29022921 {
29032922 #ifdef CLIENT_SUBNET
29042923 OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
29122931 #endif
29132932 free((yyvsp[0].str));
29142933 }
2915 #line 2917 "util/configparser.c" /* yacc.c:1648 */
2916 break;
2917
2918 case 263:
2919 #line 557 "util/configparser.y" /* yacc.c:1648 */
2934 #line 2936 "util/configparser.c" /* yacc.c:1648 */
2935 break;
2936
2937 case 264:
2938 #line 558 "util/configparser.y" /* yacc.c:1648 */
29202939 {
29212940 #ifdef CLIENT_SUBNET
29222941 OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
29302949 #endif
29312950 free((yyvsp[0].str));
29322951 }
2933 #line 2935 "util/configparser.c" /* yacc.c:1648 */
2934 break;
2935
2936 case 264:
2937 #line 572 "util/configparser.y" /* yacc.c:1648 */
2952 #line 2954 "util/configparser.c" /* yacc.c:1648 */
2953 break;
2954
2955 case 265:
2956 #line 573 "util/configparser.y" /* yacc.c:1648 */
29382957 {
29392958 OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
29402959 if(cfg_parser->cfg->num_ifs == 0)
29462965 else
29472966 cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
29482967 }
2949 #line 2951 "util/configparser.c" /* yacc.c:1648 */
2950 break;
2951
2952 case 265:
2953 #line 585 "util/configparser.y" /* yacc.c:1648 */
2968 #line 2970 "util/configparser.c" /* yacc.c:1648 */
2969 break;
2970
2971 case 266:
2972 #line 586 "util/configparser.y" /* yacc.c:1648 */
29542973 {
29552974 OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
29562975 if(cfg_parser->cfg->num_out_ifs == 0)
29642983 cfg_parser->cfg->out_ifs[
29652984 cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
29662985 }
2967 #line 2969 "util/configparser.c" /* yacc.c:1648 */
2968 break;
2969
2970 case 266:
2971 #line 600 "util/configparser.y" /* yacc.c:1648 */
2986 #line 2988 "util/configparser.c" /* yacc.c:1648 */
2987 break;
2988
2989 case 267:
2990 #line 601 "util/configparser.y" /* yacc.c:1648 */
29722991 {
29732992 OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
29742993 if(atoi((yyvsp[0].str)) == 0)
29762995 else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
29772996 free((yyvsp[0].str));
29782997 }
2979 #line 2981 "util/configparser.c" /* yacc.c:1648 */
2980 break;
2981
2982 case 267:
2983 #line 609 "util/configparser.y" /* yacc.c:1648 */
2998 #line 3000 "util/configparser.c" /* yacc.c:1648 */
2999 break;
3000
3001 case 268:
3002 #line 610 "util/configparser.y" /* yacc.c:1648 */
29843003 {
29853004 OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
29863005 if(!cfg_mark_ports((yyvsp[0].str), 1,
29883007 yyerror("port number or range (\"low-high\") expected");
29893008 free((yyvsp[0].str));
29903009 }
2991 #line 2993 "util/configparser.c" /* yacc.c:1648 */
2992 break;
2993
2994 case 268:
2995 #line 618 "util/configparser.y" /* yacc.c:1648 */
3010 #line 3012 "util/configparser.c" /* yacc.c:1648 */
3011 break;
3012
3013 case 269:
3014 #line 619 "util/configparser.y" /* yacc.c:1648 */
29963015 {
29973016 OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
29983017 if(!cfg_mark_ports((yyvsp[0].str), 0,
30003019 yyerror("port number or range (\"low-high\") expected");
30013020 free((yyvsp[0].str));
30023021 }
3003 #line 3005 "util/configparser.c" /* yacc.c:1648 */
3004 break;
3005
3006 case 269:
3007 #line 627 "util/configparser.y" /* yacc.c:1648 */
3022 #line 3024 "util/configparser.c" /* yacc.c:1648 */
3023 break;
3024
3025 case 270:
3026 #line 628 "util/configparser.y" /* yacc.c:1648 */
30083027 {
30093028 OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
30103029 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
30123031 else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
30133032 free((yyvsp[0].str));
30143033 }
3015 #line 3017 "util/configparser.c" /* yacc.c:1648 */
3016 break;
3017
3018 case 270:
3019 #line 636 "util/configparser.y" /* yacc.c:1648 */
3034 #line 3036 "util/configparser.c" /* yacc.c:1648 */
3035 break;
3036
3037 case 271:
3038 #line 637 "util/configparser.y" /* yacc.c:1648 */
30203039 {
30213040 OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
30223041 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
30243043 else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
30253044 free((yyvsp[0].str));
30263045 }
3027 #line 3029 "util/configparser.c" /* yacc.c:1648 */
3028 break;
3029
3030 case 271:
3031 #line 645 "util/configparser.y" /* yacc.c:1648 */
3046 #line 3048 "util/configparser.c" /* yacc.c:1648 */
3047 break;
3048
3049 case 272:
3050 #line 646 "util/configparser.y" /* yacc.c:1648 */
30323051 {
30333052 OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
30343053 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30363055 else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
30373056 free((yyvsp[0].str));
30383057 }
3039 #line 3041 "util/configparser.c" /* yacc.c:1648 */
3040 break;
3041
3042 case 272:
3043 #line 654 "util/configparser.y" /* yacc.c:1648 */
3058 #line 3060 "util/configparser.c" /* yacc.c:1648 */
3059 break;
3060
3061 case 273:
3062 #line 655 "util/configparser.y" /* yacc.c:1648 */
30443063 {
30453064 OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
30463065 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30483067 else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
30493068 free((yyvsp[0].str));
30503069 }
3051 #line 3053 "util/configparser.c" /* yacc.c:1648 */
3052 break;
3053
3054 case 273:
3055 #line 663 "util/configparser.y" /* yacc.c:1648 */
3070 #line 3072 "util/configparser.c" /* yacc.c:1648 */
3071 break;
3072
3073 case 274:
3074 #line 664 "util/configparser.y" /* yacc.c:1648 */
30563075 {
30573076 OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
30583077 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30603079 else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
30613080 free((yyvsp[0].str));
30623081 }
3063 #line 3065 "util/configparser.c" /* yacc.c:1648 */
3064 break;
3065
3066 case 274:
3067 #line 672 "util/configparser.y" /* yacc.c:1648 */
3082 #line 3084 "util/configparser.c" /* yacc.c:1648 */
3083 break;
3084
3085 case 275:
3086 #line 673 "util/configparser.y" /* yacc.c:1648 */
30683087 {
30693088 OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
30703089 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30723091 else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
30733092 free((yyvsp[0].str));
30743093 }
3075 #line 3077 "util/configparser.c" /* yacc.c:1648 */
3076 break;
3077
3078 case 275:
3079 #line 681 "util/configparser.y" /* yacc.c:1648 */
3094 #line 3096 "util/configparser.c" /* yacc.c:1648 */
3095 break;
3096
3097 case 276:
3098 #line 682 "util/configparser.y" /* yacc.c:1648 */
30803099 {
30813100 OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
30823101 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30843103 else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
30853104 free((yyvsp[0].str));
30863105 }
3087 #line 3089 "util/configparser.c" /* yacc.c:1648 */
3088 break;
3089
3090 case 276:
3091 #line 690 "util/configparser.y" /* yacc.c:1648 */
3106 #line 3108 "util/configparser.c" /* yacc.c:1648 */
3107 break;
3108
3109 case 277:
3110 #line 691 "util/configparser.y" /* yacc.c:1648 */
30923111 {
30933112 OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
30943113 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30963115 else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
30973116 free((yyvsp[0].str));
30983117 }
3099 #line 3101 "util/configparser.c" /* yacc.c:1648 */
3100 break;
3101
3102 case 277:
3103 #line 699 "util/configparser.y" /* yacc.c:1648 */
3118 #line 3120 "util/configparser.c" /* yacc.c:1648 */
3119 break;
3120
3121 case 278:
3122 #line 700 "util/configparser.y" /* yacc.c:1648 */
31043123 {
31053124 OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
31063125 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31083127 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
31093128 free((yyvsp[0].str));
31103129 }
3111 #line 3113 "util/configparser.c" /* yacc.c:1648 */
3112 break;
3113
3114 case 278:
3115 #line 708 "util/configparser.y" /* yacc.c:1648 */
3130 #line 3132 "util/configparser.c" /* yacc.c:1648 */
3131 break;
3132
3133 case 279:
3134 #line 709 "util/configparser.y" /* yacc.c:1648 */
31163135 {
31173136 OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
31183137 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31203139 else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
31213140 free((yyvsp[0].str));
31223141 }
3123 #line 3125 "util/configparser.c" /* yacc.c:1648 */
3124 break;
3125
3126 case 279:
3127 #line 717 "util/configparser.y" /* yacc.c:1648 */
3142 #line 3144 "util/configparser.c" /* yacc.c:1648 */
3143 break;
3144
3145 case 280:
3146 #line 718 "util/configparser.y" /* yacc.c:1648 */
31283147 {
31293148 OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
31303149 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31363155 else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
31373156 free((yyvsp[0].str));
31383157 }
3139 #line 3141 "util/configparser.c" /* yacc.c:1648 */
3140 break;
3141
3142 case 280:
3143 #line 730 "util/configparser.y" /* yacc.c:1648 */
3158 #line 3160 "util/configparser.c" /* yacc.c:1648 */
3159 break;
3160
3161 case 281:
3162 #line 731 "util/configparser.y" /* yacc.c:1648 */
31443163 {
31453164 OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
31463165 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
31483167 else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
31493168 free((yyvsp[0].str));
31503169 }
3151 #line 3153 "util/configparser.c" /* yacc.c:1648 */
3152 break;
3153
3154 case 281:
3155 #line 739 "util/configparser.y" /* yacc.c:1648 */
3170 #line 3172 "util/configparser.c" /* yacc.c:1648 */
3171 break;
3172
3173 case 282:
3174 #line 740 "util/configparser.y" /* yacc.c:1648 */
31563175 {
31573176 OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
31583177 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31643183 else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
31653184 free((yyvsp[0].str));
31663185 }
3167 #line 3169 "util/configparser.c" /* yacc.c:1648 */
3168 break;
3169
3170 case 282:
3171 #line 752 "util/configparser.y" /* yacc.c:1648 */
3186 #line 3188 "util/configparser.c" /* yacc.c:1648 */
3187 break;
3188
3189 case 283:
3190 #line 753 "util/configparser.y" /* yacc.c:1648 */
31723191 {
31733192 OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
31743193 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
31763195 else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
31773196 free((yyvsp[0].str));
31783197 }
3179 #line 3181 "util/configparser.c" /* yacc.c:1648 */
3180 break;
3181
3182 case 283:
3183 #line 761 "util/configparser.y" /* yacc.c:1648 */
3198 #line 3200 "util/configparser.c" /* yacc.c:1648 */
3199 break;
3200
3201 case 284:
3202 #line 762 "util/configparser.y" /* yacc.c:1648 */
31843203 {
31853204 OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
31863205 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
31883207 else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
31893208 free((yyvsp[0].str));
31903209 }
3191 #line 3193 "util/configparser.c" /* yacc.c:1648 */
3192 break;
3193
3194 case 284:
3195 #line 770 "util/configparser.y" /* yacc.c:1648 */
3210 #line 3212 "util/configparser.c" /* yacc.c:1648 */
3211 break;
3212
3213 case 285:
3214 #line 771 "util/configparser.y" /* yacc.c:1648 */
31963215 {
31973216 OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
31983217 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32003219 else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
32013220 free((yyvsp[0].str));
32023221 }
3203 #line 3205 "util/configparser.c" /* yacc.c:1648 */
3204 break;
3205
3206 case 285:
3207 #line 779 "util/configparser.y" /* yacc.c:1648 */
3222 #line 3224 "util/configparser.c" /* yacc.c:1648 */
3223 break;
3224
3225 case 286:
3226 #line 780 "util/configparser.y" /* yacc.c:1648 */
32083227 {
32093228 OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
32103229 free(cfg_parser->cfg->ssl_service_key);
32113230 cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
32123231 }
3213 #line 3215 "util/configparser.c" /* yacc.c:1648 */
3214 break;
3215
3216 case 286:
3217 #line 786 "util/configparser.y" /* yacc.c:1648 */
3232 #line 3234 "util/configparser.c" /* yacc.c:1648 */
3233 break;
3234
3235 case 287:
3236 #line 787 "util/configparser.y" /* yacc.c:1648 */
32183237 {
32193238 OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
32203239 free(cfg_parser->cfg->ssl_service_pem);
32213240 cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
32223241 }
3223 #line 3225 "util/configparser.c" /* yacc.c:1648 */
3224 break;
3225
3226 case 287:
3227 #line 793 "util/configparser.y" /* yacc.c:1648 */
3242 #line 3244 "util/configparser.c" /* yacc.c:1648 */
3243 break;
3244
3245 case 288:
3246 #line 794 "util/configparser.y" /* yacc.c:1648 */
32283247 {
32293248 OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
32303249 if(atoi((yyvsp[0].str)) == 0)
32323251 else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
32333252 free((yyvsp[0].str));
32343253 }
3235 #line 3237 "util/configparser.c" /* yacc.c:1648 */
3236 break;
3237
3238 case 288:
3239 #line 802 "util/configparser.y" /* yacc.c:1648 */
3254 #line 3256 "util/configparser.c" /* yacc.c:1648 */
3255 break;
3256
3257 case 289:
3258 #line 803 "util/configparser.y" /* yacc.c:1648 */
32403259 {
32413260 OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
32423261 free(cfg_parser->cfg->tls_cert_bundle);
32433262 cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
32443263 }
3245 #line 3247 "util/configparser.c" /* yacc.c:1648 */
3246 break;
3247
3248 case 289:
3249 #line 809 "util/configparser.y" /* yacc.c:1648 */
3264 #line 3266 "util/configparser.c" /* yacc.c:1648 */
3265 break;
3266
3267 case 290:
3268 #line 810 "util/configparser.y" /* yacc.c:1648 */
32503269 {
32513270 OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
32523271 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32543273 else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
32553274 free((yyvsp[0].str));
32563275 }
3257 #line 3259 "util/configparser.c" /* yacc.c:1648 */
3258 break;
3259
3260 case 290:
3261 #line 818 "util/configparser.y" /* yacc.c:1648 */
3276 #line 3278 "util/configparser.c" /* yacc.c:1648 */
3277 break;
3278
3279 case 291:
3280 #line 819 "util/configparser.y" /* yacc.c:1648 */
32623281 {
32633282 OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
32643283 if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
32653284 (yyvsp[0].str)))
32663285 yyerror("out of memory");
32673286 }
3268 #line 3270 "util/configparser.c" /* yacc.c:1648 */
3269 break;
3270
3271 case 291:
3272 #line 826 "util/configparser.y" /* yacc.c:1648 */
3287 #line 3289 "util/configparser.c" /* yacc.c:1648 */
3288 break;
3289
3290 case 292:
3291 #line 827 "util/configparser.y" /* yacc.c:1648 */
32733292 {
32743293 OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
32753294 free(cfg_parser->cfg->tls_ciphers);
32763295 cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
32773296 }
3278 #line 3280 "util/configparser.c" /* yacc.c:1648 */
3279 break;
3280
3281 case 292:
3282 #line 833 "util/configparser.y" /* yacc.c:1648 */
3297 #line 3299 "util/configparser.c" /* yacc.c:1648 */
3298 break;
3299
3300 case 293:
3301 #line 834 "util/configparser.y" /* yacc.c:1648 */
32833302 {
32843303 OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
32853304 free(cfg_parser->cfg->tls_ciphersuites);
32863305 cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
32873306 }
3288 #line 3290 "util/configparser.c" /* yacc.c:1648 */
3289 break;
3290
3291 case 293:
3292 #line 840 "util/configparser.y" /* yacc.c:1648 */
3307 #line 3309 "util/configparser.c" /* yacc.c:1648 */
3308 break;
3309
3310 case 294:
3311 #line 841 "util/configparser.y" /* yacc.c:1648 */
32933312 {
32943313 OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
32953314 if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
32963315 (yyvsp[0].str)))
32973316 yyerror("out of memory");
32983317 }
3299 #line 3301 "util/configparser.c" /* yacc.c:1648 */
3300 break;
3301
3302 case 294:
3303 #line 848 "util/configparser.y" /* yacc.c:1648 */
3318 #line 3320 "util/configparser.c" /* yacc.c:1648 */
3319 break;
3320
3321 case 295:
3322 #line 849 "util/configparser.y" /* yacc.c:1648 */
33043323 {
33053324 OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
33063325 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33083327 else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
33093328 free((yyvsp[0].str));
33103329 }
3311 #line 3313 "util/configparser.c" /* yacc.c:1648 */
3312 break;
3313
3314 case 295:
3315 #line 857 "util/configparser.y" /* yacc.c:1648 */
3330 #line 3332 "util/configparser.c" /* yacc.c:1648 */
3331 break;
3332
3333 case 296:
3334 #line 858 "util/configparser.y" /* yacc.c:1648 */
33163335 {
33173336 OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
33183337 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33203339 else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
33213340 free((yyvsp[0].str));
33223341 }
3323 #line 3325 "util/configparser.c" /* yacc.c:1648 */
3324 break;
3325
3326 case 296:
3327 #line 866 "util/configparser.y" /* yacc.c:1648 */
3342 #line 3344 "util/configparser.c" /* yacc.c:1648 */
3343 break;
3344
3345 case 297:
3346 #line 867 "util/configparser.y" /* yacc.c:1648 */
33283347 {
33293348 OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
33303349 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33373356 #endif
33383357 free((yyvsp[0].str));
33393358 }
3340 #line 3342 "util/configparser.c" /* yacc.c:1648 */
3341 break;
3342
3343 case 297:
3344 #line 880 "util/configparser.y" /* yacc.c:1648 */
3359 #line 3361 "util/configparser.c" /* yacc.c:1648 */
3360 break;
3361
3362 case 298:
3363 #line 881 "util/configparser.y" /* yacc.c:1648 */
33453364 {
33463365 OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
33473366 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33493368 else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
33503369 free((yyvsp[0].str));
33513370 }
3352 #line 3354 "util/configparser.c" /* yacc.c:1648 */
3353 break;
3354
3355 case 298:
3356 #line 889 "util/configparser.y" /* yacc.c:1648 */
3371 #line 3373 "util/configparser.c" /* yacc.c:1648 */
3372 break;
3373
3374 case 299:
3375 #line 890 "util/configparser.y" /* yacc.c:1648 */
33573376 {
33583377 OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
33593378 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33613380 else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
33623381 free((yyvsp[0].str));
33633382 }
3364 #line 3366 "util/configparser.c" /* yacc.c:1648 */
3365 break;
3366
3367 case 299:
3368 #line 898 "util/configparser.y" /* yacc.c:1648 */
3383 #line 3385 "util/configparser.c" /* yacc.c:1648 */
3384 break;
3385
3386 case 300:
3387 #line 899 "util/configparser.y" /* yacc.c:1648 */
33693388 {
33703389 OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
33713390 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33733392 else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
33743393 free((yyvsp[0].str));
33753394 }
3376 #line 3378 "util/configparser.c" /* yacc.c:1648 */
3377 break;
3378
3379 case 300:
3380 #line 907 "util/configparser.y" /* yacc.c:1648 */
3395 #line 3397 "util/configparser.c" /* yacc.c:1648 */
3396 break;
3397
3398 case 301:
3399 #line 908 "util/configparser.y" /* yacc.c:1648 */
33813400 {
33823401 OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
33833402 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33853404 else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
33863405 free((yyvsp[0].str));
33873406 }
3388 #line 3390 "util/configparser.c" /* yacc.c:1648 */
3389 break;
3390
3391 case 301:
3392 #line 916 "util/configparser.y" /* yacc.c:1648 */
3407 #line 3409 "util/configparser.c" /* yacc.c:1648 */
3408 break;
3409
3410 case 302:
3411 #line 917 "util/configparser.y" /* yacc.c:1648 */
33933412 {
33943413 OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
33953414 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33973416 else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
33983417 free((yyvsp[0].str));
33993418 }
3400 #line 3402 "util/configparser.c" /* yacc.c:1648 */
3401 break;
3402
3403 case 302:
3404 #line 925 "util/configparser.y" /* yacc.c:1648 */
3419 #line 3421 "util/configparser.c" /* yacc.c:1648 */
3420 break;
3421
3422 case 303:
3423 #line 926 "util/configparser.y" /* yacc.c:1648 */
34053424 {
34063425 OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
34073426 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34093428 else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
34103429 free((yyvsp[0].str));
34113430 }
3412 #line 3414 "util/configparser.c" /* yacc.c:1648 */
3413 break;
3414
3415 case 303:
3416 #line 934 "util/configparser.y" /* yacc.c:1648 */
3431 #line 3433 "util/configparser.c" /* yacc.c:1648 */
3432 break;
3433
3434 case 304:
3435 #line 935 "util/configparser.y" /* yacc.c:1648 */
34173436 {
34183437 OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
34193438 free(cfg_parser->cfg->chrootdir);
34203439 cfg_parser->cfg->chrootdir = (yyvsp[0].str);
34213440 }
3422 #line 3424 "util/configparser.c" /* yacc.c:1648 */
3423 break;
3424
3425 case 304:
3426 #line 941 "util/configparser.y" /* yacc.c:1648 */
3441 #line 3443 "util/configparser.c" /* yacc.c:1648 */
3442 break;
3443
3444 case 305:
3445 #line 942 "util/configparser.y" /* yacc.c:1648 */
34273446 {
34283447 OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
34293448 free(cfg_parser->cfg->username);
34303449 cfg_parser->cfg->username = (yyvsp[0].str);
34313450 }
3432 #line 3434 "util/configparser.c" /* yacc.c:1648 */
3433 break;
3434
3435 case 305:
3436 #line 948 "util/configparser.y" /* yacc.c:1648 */
3451 #line 3453 "util/configparser.c" /* yacc.c:1648 */
3452 break;
3453
3454 case 306:
3455 #line 949 "util/configparser.y" /* yacc.c:1648 */
34373456 {
34383457 OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
34393458 free(cfg_parser->cfg->directory);
34583477 }
34593478 }
34603479 }
3461 #line 3463 "util/configparser.c" /* yacc.c:1648 */
3462 break;
3463
3464 case 306:
3465 #line 974 "util/configparser.y" /* yacc.c:1648 */
3480 #line 3482 "util/configparser.c" /* yacc.c:1648 */
3481 break;
3482
3483 case 307:
3484 #line 975 "util/configparser.y" /* yacc.c:1648 */
34663485 {
34673486 OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
34683487 free(cfg_parser->cfg->logfile);
34693488 cfg_parser->cfg->logfile = (yyvsp[0].str);
34703489 cfg_parser->cfg->use_syslog = 0;
34713490 }
3472 #line 3474 "util/configparser.c" /* yacc.c:1648 */
3473 break;
3474
3475 case 307:
3476 #line 982 "util/configparser.y" /* yacc.c:1648 */
3491 #line 3493 "util/configparser.c" /* yacc.c:1648 */
3492 break;
3493
3494 case 308:
3495 #line 983 "util/configparser.y" /* yacc.c:1648 */
34773496 {
34783497 OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
34793498 free(cfg_parser->cfg->pidfile);
34803499 cfg_parser->cfg->pidfile = (yyvsp[0].str);
34813500 }
3482 #line 3484 "util/configparser.c" /* yacc.c:1648 */
3483 break;
3484
3485 case 308:
3486 #line 989 "util/configparser.y" /* yacc.c:1648 */
3501 #line 3503 "util/configparser.c" /* yacc.c:1648 */
3502 break;
3503
3504 case 309:
3505 #line 990 "util/configparser.y" /* yacc.c:1648 */
34873506 {
34883507 OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
34893508 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
34903509 yyerror("out of memory");
34913510 }
3492 #line 3494 "util/configparser.c" /* yacc.c:1648 */
3493 break;
3494
3495 case 309:
3496 #line 996 "util/configparser.y" /* yacc.c:1648 */
3511 #line 3513 "util/configparser.c" /* yacc.c:1648 */
3512 break;
3513
3514 case 310:
3515 #line 997 "util/configparser.y" /* yacc.c:1648 */
34973516 {
34983517 OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
34993518 free(cfg_parser->cfg->dlv_anchor_file);
35003519 cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
35013520 }
3502 #line 3504 "util/configparser.c" /* yacc.c:1648 */
3503 break;
3504
3505 case 310:
3506 #line 1003 "util/configparser.y" /* yacc.c:1648 */
3521 #line 3523 "util/configparser.c" /* yacc.c:1648 */
3522 break;
3523
3524 case 311:
3525 #line 1004 "util/configparser.y" /* yacc.c:1648 */
35073526 {
35083527 OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
35093528 if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
35103529 yyerror("out of memory");
35113530 }
3512 #line 3514 "util/configparser.c" /* yacc.c:1648 */
3513 break;
3514
3515 case 311:
3516 #line 1010 "util/configparser.y" /* yacc.c:1648 */
3531 #line 3533 "util/configparser.c" /* yacc.c:1648 */
3532 break;
3533
3534 case 312:
3535 #line 1011 "util/configparser.y" /* yacc.c:1648 */
35173536 {
35183537 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
35193538 if(!cfg_strlist_insert(&cfg_parser->cfg->
35203539 auto_trust_anchor_file_list, (yyvsp[0].str)))
35213540 yyerror("out of memory");
35223541 }
3523 #line 3525 "util/configparser.c" /* yacc.c:1648 */
3524 break;
3525
3526 case 312:
3527 #line 1018 "util/configparser.y" /* yacc.c:1648 */
3542 #line 3544 "util/configparser.c" /* yacc.c:1648 */
3543 break;
3544
3545 case 313:
3546 #line 1019 "util/configparser.y" /* yacc.c:1648 */
35283547 {
35293548 OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
35303549 if(!cfg_strlist_insert(&cfg_parser->cfg->
35313550 trust_anchor_file_list, (yyvsp[0].str)))
35323551 yyerror("out of memory");
35333552 }
3534 #line 3536 "util/configparser.c" /* yacc.c:1648 */
3535 break;
3536
3537 case 313:
3538 #line 1026 "util/configparser.y" /* yacc.c:1648 */
3553 #line 3555 "util/configparser.c" /* yacc.c:1648 */
3554 break;
3555
3556 case 314:
3557 #line 1027 "util/configparser.y" /* yacc.c:1648 */
35393558 {
35403559 OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
35413560 if(!cfg_strlist_insert(&cfg_parser->cfg->
35423561 trusted_keys_file_list, (yyvsp[0].str)))
35433562 yyerror("out of memory");
35443563 }
3545 #line 3547 "util/configparser.c" /* yacc.c:1648 */
3546 break;
3547
3548 case 314:
3549 #line 1034 "util/configparser.y" /* yacc.c:1648 */
3564 #line 3566 "util/configparser.c" /* yacc.c:1648 */
3565 break;
3566
3567 case 315:
3568 #line 1035 "util/configparser.y" /* yacc.c:1648 */
35503569 {
35513570 OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
35523571 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
35533572 yyerror("out of memory");
35543573 }
3555 #line 3557 "util/configparser.c" /* yacc.c:1648 */
3556 break;
3557
3558 case 315:
3559 #line 1041 "util/configparser.y" /* yacc.c:1648 */
3574 #line 3576 "util/configparser.c" /* yacc.c:1648 */
3575 break;
3576
3577 case 316:
3578 #line 1042 "util/configparser.y" /* yacc.c:1648 */
35603579 {
35613580 OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
35623581 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35663585 (strcmp((yyvsp[0].str), "yes")==0);
35673586 free((yyvsp[0].str));
35683587 }
3569 #line 3571 "util/configparser.c" /* yacc.c:1648 */
3570 break;
3571
3572 case 316:
3573 #line 1052 "util/configparser.y" /* yacc.c:1648 */
3588 #line 3590 "util/configparser.c" /* yacc.c:1648 */
3589 break;
3590
3591 case 317:
3592 #line 1053 "util/configparser.y" /* yacc.c:1648 */
35743593 {
35753594 OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
35763595 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35803599 (strcmp((yyvsp[0].str), "yes")==0);
35813600 free((yyvsp[0].str));
35823601 }
3583 #line 3585 "util/configparser.c" /* yacc.c:1648 */
3584 break;
3585
3586 case 317:
3587 #line 1063 "util/configparser.y" /* yacc.c:1648 */
3602 #line 3604 "util/configparser.c" /* yacc.c:1648 */
3603 break;
3604
3605 case 318:
3606 #line 1064 "util/configparser.y" /* yacc.c:1648 */
35883607 {
35893608 OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
35903609 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
35913610 yyerror("out of memory");
35923611 }
3593 #line 3595 "util/configparser.c" /* yacc.c:1648 */
3594 break;
3595
3596 case 318:
3597 #line 1070 "util/configparser.y" /* yacc.c:1648 */
3612 #line 3614 "util/configparser.c" /* yacc.c:1648 */
3613 break;
3614
3615 case 319:
3616 #line 1071 "util/configparser.y" /* yacc.c:1648 */
35983617 {
35993618 OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
36003619 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36023621 else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
36033622 free((yyvsp[0].str));
36043623 }
3605 #line 3607 "util/configparser.c" /* yacc.c:1648 */
3606 break;
3607
3608 case 319:
3609 #line 1079 "util/configparser.y" /* yacc.c:1648 */
3624 #line 3626 "util/configparser.c" /* yacc.c:1648 */
3625 break;
3626
3627 case 320:
3628 #line 1080 "util/configparser.y" /* yacc.c:1648 */
36103629 {
36113630 OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
36123631 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36143633 else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
36153634 free((yyvsp[0].str));
36163635 }
3617 #line 3619 "util/configparser.c" /* yacc.c:1648 */
3618 break;
3619
3620 case 320:
3621 #line 1088 "util/configparser.y" /* yacc.c:1648 */
3636 #line 3638 "util/configparser.c" /* yacc.c:1648 */
3637 break;
3638
3639 case 321:
3640 #line 1089 "util/configparser.y" /* yacc.c:1648 */
36223641 {
36233642 OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
36243643 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36263645 else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
36273646 free((yyvsp[0].str));
36283647 }
3629 #line 3631 "util/configparser.c" /* yacc.c:1648 */
3630 break;
3631
3632 case 321:
3633 #line 1097 "util/configparser.y" /* yacc.c:1648 */
3648 #line 3650 "util/configparser.c" /* yacc.c:1648 */
3649 break;
3650
3651 case 322:
3652 #line 1098 "util/configparser.y" /* yacc.c:1648 */
36343653 {
36353654 OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
36363655 free(cfg_parser->cfg->identity);
36373656 cfg_parser->cfg->identity = (yyvsp[0].str);
36383657 }
3639 #line 3641 "util/configparser.c" /* yacc.c:1648 */
3640 break;
3641
3642 case 322:
3643 #line 1104 "util/configparser.y" /* yacc.c:1648 */
3658 #line 3660 "util/configparser.c" /* yacc.c:1648 */
3659 break;
3660
3661 case 323:
3662 #line 1105 "util/configparser.y" /* yacc.c:1648 */
36443663 {
36453664 OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
36463665 free(cfg_parser->cfg->version);
36473666 cfg_parser->cfg->version = (yyvsp[0].str);
36483667 }
3649 #line 3651 "util/configparser.c" /* yacc.c:1648 */
3650 break;
3651
3652 case 323:
3653 #line 1111 "util/configparser.y" /* yacc.c:1648 */
3668 #line 3670 "util/configparser.c" /* yacc.c:1648 */
3669 break;
3670
3671 case 324:
3672 #line 1112 "util/configparser.y" /* yacc.c:1648 */
36543673 {
36553674 OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
36563675 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
36573676 yyerror("buffer size expected");
36583677 free((yyvsp[0].str));
36593678 }
3660 #line 3662 "util/configparser.c" /* yacc.c:1648 */
3661 break;
3662
3663 case 324:
3664 #line 1119 "util/configparser.y" /* yacc.c:1648 */
3679 #line 3681 "util/configparser.c" /* yacc.c:1648 */
3680 break;
3681
3682 case 325:
3683 #line 1120 "util/configparser.y" /* yacc.c:1648 */
36653684 {
36663685 OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
36673686 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
36683687 yyerror("buffer size expected");
36693688 free((yyvsp[0].str));
36703689 }
3671 #line 3673 "util/configparser.c" /* yacc.c:1648 */
3672 break;
3673
3674 case 325:
3675 #line 1127 "util/configparser.y" /* yacc.c:1648 */
3690 #line 3692 "util/configparser.c" /* yacc.c:1648 */
3691 break;
3692
3693 case 326:
3694 #line 1128 "util/configparser.y" /* yacc.c:1648 */
36763695 {
36773696 OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
36783697 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36813700 (strcmp((yyvsp[0].str), "yes")==0);
36823701 free((yyvsp[0].str));
36833702 }
3684 #line 3686 "util/configparser.c" /* yacc.c:1648 */
3685 break;
3686
3687 case 326:
3688 #line 1137 "util/configparser.y" /* yacc.c:1648 */
3703 #line 3705 "util/configparser.c" /* yacc.c:1648 */
3704 break;
3705
3706 case 327:
3707 #line 1138 "util/configparser.y" /* yacc.c:1648 */
36893708 {
36903709 OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
36913710 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36943713 (strcmp((yyvsp[0].str), "yes")==0);
36953714 free((yyvsp[0].str));
36963715 }
3697 #line 3699 "util/configparser.c" /* yacc.c:1648 */
3698 break;
3699
3700 case 327:
3701 #line 1147 "util/configparser.y" /* yacc.c:1648 */
3716 #line 3718 "util/configparser.c" /* yacc.c:1648 */
3717 break;
3718
3719 case 328:
3720 #line 1148 "util/configparser.y" /* yacc.c:1648 */
37023721 {
37033722 OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
37043723 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37073726 (strcmp((yyvsp[0].str), "yes")==0);
37083727 free((yyvsp[0].str));
37093728 }
3710 #line 3712 "util/configparser.c" /* yacc.c:1648 */
3711 break;
3712
3713 case 328:
3714 #line 1157 "util/configparser.y" /* yacc.c:1648 */
3729 #line 3731 "util/configparser.c" /* yacc.c:1648 */
3730 break;
3731
3732 case 329:
3733 #line 1158 "util/configparser.y" /* yacc.c:1648 */
37153734 {
37163735 OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
37173736 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
37183737 yyerror("memory size expected");
37193738 free((yyvsp[0].str));
37203739 }
3721 #line 3723 "util/configparser.c" /* yacc.c:1648 */
3722 break;
3723
3724 case 329:
3725 #line 1165 "util/configparser.y" /* yacc.c:1648 */
3740 #line 3742 "util/configparser.c" /* yacc.c:1648 */
3741 break;
3742
3743 case 330:
3744 #line 1166 "util/configparser.y" /* yacc.c:1648 */
37263745 {
37273746 OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
37283747 if(atoi((yyvsp[0].str)) == 0)
37343753 else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
37353754 free((yyvsp[0].str));
37363755 }
3737 #line 3739 "util/configparser.c" /* yacc.c:1648 */
3738 break;
3739
3740 case 330:
3741 #line 1178 "util/configparser.y" /* yacc.c:1648 */
3756 #line 3758 "util/configparser.c" /* yacc.c:1648 */
3757 break;
3758
3759 case 331:
3760 #line 1179 "util/configparser.y" /* yacc.c:1648 */
37423761 {
37433762 OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
37443763 if(atoi((yyvsp[0].str)) == 0)
37483767 else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
37493768 free((yyvsp[0].str));
37503769 }
3751 #line 3753 "util/configparser.c" /* yacc.c:1648 */
3752 break;
3753
3754 case 331:
3755 #line 1189 "util/configparser.y" /* yacc.c:1648 */
3770 #line 3772 "util/configparser.c" /* yacc.c:1648 */
3771 break;
3772
3773 case 332:
3774 #line 1190 "util/configparser.y" /* yacc.c:1648 */
37563775 {
37573776 OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
37583777 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
37593778 yyerror("memory size expected");
37603779 free((yyvsp[0].str));
37613780 }
3762 #line 3764 "util/configparser.c" /* yacc.c:1648 */
3763 break;
3764
3765 case 332:
3766 #line 1197 "util/configparser.y" /* yacc.c:1648 */
3781 #line 3783 "util/configparser.c" /* yacc.c:1648 */
3782 break;
3783
3784 case 333:
3785 #line 1198 "util/configparser.y" /* yacc.c:1648 */
37673786 {
37683787 OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
37693788 if(atoi((yyvsp[0].str)) == 0)
37753794 }
37763795 free((yyvsp[0].str));
37773796 }
3778 #line 3780 "util/configparser.c" /* yacc.c:1648 */
3779 break;
3780
3781 case 333:
3782 #line 1210 "util/configparser.y" /* yacc.c:1648 */
3797 #line 3799 "util/configparser.c" /* yacc.c:1648 */
3798 break;
3799
3800 case 334:
3801 #line 1211 "util/configparser.y" /* yacc.c:1648 */
37833802 {
37843803 OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
37853804 if(atoi((yyvsp[0].str)) == 0)
37873806 else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
37883807 free((yyvsp[0].str));
37893808 }
3790 #line 3792 "util/configparser.c" /* yacc.c:1648 */
3791 break;
3792
3793 case 334:
3794 #line 1219 "util/configparser.y" /* yacc.c:1648 */
3809 #line 3811 "util/configparser.c" /* yacc.c:1648 */
3810 break;
3811
3812 case 335:
3813 #line 1220 "util/configparser.y" /* yacc.c:1648 */
37953814 {
37963815 OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
37973816 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
37993818 else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
38003819 free((yyvsp[0].str));
38013820 }
3802 #line 3804 "util/configparser.c" /* yacc.c:1648 */
3803 break;
3804
3805 case 335:
3806 #line 1228 "util/configparser.y" /* yacc.c:1648 */
3821 #line 3823 "util/configparser.c" /* yacc.c:1648 */
3822 break;
3823
3824 case 336:
3825 #line 1229 "util/configparser.y" /* yacc.c:1648 */
38073826 {
38083827 OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
38093828 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
38113830 else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
38123831 free((yyvsp[0].str));
38133832 }
3814 #line 3816 "util/configparser.c" /* yacc.c:1648 */
3815 break;
3816
3817 case 336:
3818 #line 1237 "util/configparser.y" /* yacc.c:1648 */
3833 #line 3835 "util/configparser.c" /* yacc.c:1648 */
3834 break;
3835
3836 case 337:
3837 #line 1238 "util/configparser.y" /* yacc.c:1648 */
38193838 {
38203839 OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
38213840 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38243843 (strcmp((yyvsp[0].str), "yes")==0);
38253844 free((yyvsp[0].str));
38263845 }
3827 #line 3829 "util/configparser.c" /* yacc.c:1648 */
3828 break;
3829
3830 case 337:
3831 #line 1247 "util/configparser.y" /* yacc.c:1648 */
3846 #line 3848 "util/configparser.c" /* yacc.c:1648 */
3847 break;
3848
3849 case 338:
3850 #line 1248 "util/configparser.y" /* yacc.c:1648 */
38323851 {
38333852 OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
38343853 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38373856 (strcmp((yyvsp[0].str), "yes")==0);
38383857 free((yyvsp[0].str));
38393858 }
3840 #line 3842 "util/configparser.c" /* yacc.c:1648 */
3841 break;
3842
3843 case 338:
3844 #line 1257 "util/configparser.y" /* yacc.c:1648 */
3859 #line 3861 "util/configparser.c" /* yacc.c:1648 */
3860 break;
3861
3862 case 339:
3863 #line 1258 "util/configparser.y" /* yacc.c:1648 */
38453864 {
38463865 OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
38473866 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
38483867 yyerror("memory size expected");
38493868 free((yyvsp[0].str));
38503869 }
3851 #line 3853 "util/configparser.c" /* yacc.c:1648 */
3852 break;
3853
3854 case 339:
3855 #line 1265 "util/configparser.y" /* yacc.c:1648 */
3870 #line 3872 "util/configparser.c" /* yacc.c:1648 */
3871 break;
3872
3873 case 340:
3874 #line 1266 "util/configparser.y" /* yacc.c:1648 */
38563875 {
38573876 OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
38583877 if(atoi((yyvsp[0].str)) == 0)
38643883 }
38653884 free((yyvsp[0].str));
38663885 }
3867 #line 3869 "util/configparser.c" /* yacc.c:1648 */
3868 break;
3869
3870 case 340:
3871 #line 1278 "util/configparser.y" /* yacc.c:1648 */
3886 #line 3888 "util/configparser.c" /* yacc.c:1648 */
3887 break;
3888
3889 case 341:
3890 #line 1279 "util/configparser.y" /* yacc.c:1648 */
38723891 {
38733892 OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
38743893 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
38763895 else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
38773896 free((yyvsp[0].str));
38783897 }
3879 #line 3881 "util/configparser.c" /* yacc.c:1648 */
3880 break;
3881
3882 case 341:
3883 #line 1287 "util/configparser.y" /* yacc.c:1648 */
3898 #line 3900 "util/configparser.c" /* yacc.c:1648 */
3899 break;
3900
3901 case 342:
3902 #line 1288 "util/configparser.y" /* yacc.c:1648 */
38843903 {
38853904 OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
38863905 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
38873906 "removed, use infra-host-ttl)", (yyvsp[0].str));
38883907 free((yyvsp[0].str));
38893908 }
3890 #line 3892 "util/configparser.c" /* yacc.c:1648 */
3891 break;
3892
3893 case 342:
3894 #line 1295 "util/configparser.y" /* yacc.c:1648 */
3909 #line 3911 "util/configparser.c" /* yacc.c:1648 */
3910 break;
3911
3912 case 343:
3913 #line 1296 "util/configparser.y" /* yacc.c:1648 */
38953914 {
38963915 OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
38973916 if(atoi((yyvsp[0].str)) == 0)
38993918 else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
39003919 free((yyvsp[0].str));
39013920 }
3902 #line 3904 "util/configparser.c" /* yacc.c:1648 */
3903 break;
3904
3905 case 343:
3906 #line 1304 "util/configparser.y" /* yacc.c:1648 */
3921 #line 3923 "util/configparser.c" /* yacc.c:1648 */
3922 break;
3923
3924 case 344:
3925 #line 1305 "util/configparser.y" /* yacc.c:1648 */
39073926 {
39083927 OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
39093928 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
39103929 "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
39113930 free((yyvsp[0].str));
39123931 }
3913 #line 3915 "util/configparser.c" /* yacc.c:1648 */
3914 break;
3915
3916 case 344:
3917 #line 1312 "util/configparser.y" /* yacc.c:1648 */
3932 #line 3934 "util/configparser.c" /* yacc.c:1648 */
3933 break;
3934
3935 case 345:
3936 #line 1313 "util/configparser.y" /* yacc.c:1648 */
39183937 {
39193938 OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
39203939 if(atoi((yyvsp[0].str)) == 0)
39263945 }
39273946 free((yyvsp[0].str));
39283947 }
3929 #line 3931 "util/configparser.c" /* yacc.c:1648 */
3930 break;
3931
3932 case 345:
3933 #line 1325 "util/configparser.y" /* yacc.c:1648 */
3948 #line 3950 "util/configparser.c" /* yacc.c:1648 */
3949 break;
3950
3951 case 346:
3952 #line 1326 "util/configparser.y" /* yacc.c:1648 */
39343953 {
39353954 OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
39363955 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
39383957 else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
39393958 free((yyvsp[0].str));
39403959 }
3941 #line 3943 "util/configparser.c" /* yacc.c:1648 */
3942 break;
3943
3944 case 346:
3945 #line 1334 "util/configparser.y" /* yacc.c:1648 */
3960 #line 3962 "util/configparser.c" /* yacc.c:1648 */
3961 break;
3962
3963 case 347:
3964 #line 1335 "util/configparser.y" /* yacc.c:1648 */
39463965 {
39473966 OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
39483967 free(cfg_parser->cfg->target_fetch_policy);
39493968 cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
39503969 }
3951 #line 3953 "util/configparser.c" /* yacc.c:1648 */
3952 break;
3953
3954 case 347:
3955 #line 1341 "util/configparser.y" /* yacc.c:1648 */
3970 #line 3972 "util/configparser.c" /* yacc.c:1648 */
3971 break;
3972
3973 case 348:
3974 #line 1342 "util/configparser.y" /* yacc.c:1648 */
39563975 {
39573976 OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
39583977 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39613980 (strcmp((yyvsp[0].str), "yes")==0);
39623981 free((yyvsp[0].str));
39633982 }
3964 #line 3966 "util/configparser.c" /* yacc.c:1648 */
3965 break;
3966
3967 case 348:
3968 #line 1351 "util/configparser.y" /* yacc.c:1648 */
3983 #line 3985 "util/configparser.c" /* yacc.c:1648 */
3984 break;
3985
3986 case 349:
3987 #line 1352 "util/configparser.y" /* yacc.c:1648 */
39693988 {
39703989 OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
39713990 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39743993 (strcmp((yyvsp[0].str), "yes")==0);
39753994 free((yyvsp[0].str));
39763995 }
3977 #line 3979 "util/configparser.c" /* yacc.c:1648 */
3978 break;
3979
3980 case 349:
3981 #line 1361 "util/configparser.y" /* yacc.c:1648 */
3996 #line 3998 "util/configparser.c" /* yacc.c:1648 */
3997 break;
3998
3999 case 350:
4000 #line 1362 "util/configparser.y" /* yacc.c:1648 */
39824001 {
39834002 OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
39844003 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39874006 (strcmp((yyvsp[0].str), "yes")==0);
39884007 free((yyvsp[0].str));
39894008 }
3990 #line 3992 "util/configparser.c" /* yacc.c:1648 */
3991 break;
3992
3993 case 350:
3994 #line 1371 "util/configparser.y" /* yacc.c:1648 */
4009 #line 4011 "util/configparser.c" /* yacc.c:1648 */
4010 break;
4011
4012 case 351:
4013 #line 1372 "util/configparser.y" /* yacc.c:1648 */
39954014 {
39964015 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
39974016 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40004019 (strcmp((yyvsp[0].str), "yes")==0);
40014020 free((yyvsp[0].str));
40024021 }
4003 #line 4005 "util/configparser.c" /* yacc.c:1648 */
4004 break;
4005
4006 case 351:
4007 #line 1381 "util/configparser.y" /* yacc.c:1648 */
4022 #line 4024 "util/configparser.c" /* yacc.c:1648 */
4023 break;
4024
4025 case 352:
4026 #line 1382 "util/configparser.y" /* yacc.c:1648 */
40084027 {
40094028 OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
40104029 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40134032 (strcmp((yyvsp[0].str), "yes")==0);
40144033 free((yyvsp[0].str));
40154034 }
4016 #line 4018 "util/configparser.c" /* yacc.c:1648 */
4017 break;
4018
4019 case 352:
4020 #line 1391 "util/configparser.y" /* yacc.c:1648 */
4035 #line 4037 "util/configparser.c" /* yacc.c:1648 */
4036 break;
4037
4038 case 353:
4039 #line 1392 "util/configparser.y" /* yacc.c:1648 */
40214040 {
40224041 OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
40234042 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40264045 (strcmp((yyvsp[0].str), "yes")==0);
40274046 free((yyvsp[0].str));
40284047 }
4029 #line 4031 "util/configparser.c" /* yacc.c:1648 */
4030 break;
4031
4032 case 353:
4033 #line 1401 "util/configparser.y" /* yacc.c:1648 */
4048 #line 4050 "util/configparser.c" /* yacc.c:1648 */
4049 break;
4050
4051 case 354:
4052 #line 1402 "util/configparser.y" /* yacc.c:1648 */
40344053 {
40354054 OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
40364055 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40394058 (strcmp((yyvsp[0].str), "yes")==0);
40404059 free((yyvsp[0].str));
40414060 }
4042 #line 4044 "util/configparser.c" /* yacc.c:1648 */
4043 break;
4044
4045 case 354:
4046 #line 1411 "util/configparser.y" /* yacc.c:1648 */
4061 #line 4063 "util/configparser.c" /* yacc.c:1648 */
4062 break;
4063
4064 case 355:
4065 #line 1412 "util/configparser.y" /* yacc.c:1648 */
40474066 {
40484067 OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
40494068 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40524071 (strcmp((yyvsp[0].str), "yes")==0);
40534072 free((yyvsp[0].str));
40544073 }
4055 #line 4057 "util/configparser.c" /* yacc.c:1648 */
4056 break;
4057
4058 case 355:
4059 #line 1421 "util/configparser.y" /* yacc.c:1648 */
4074 #line 4076 "util/configparser.c" /* yacc.c:1648 */
4075 break;
4076
4077 case 356:
4078 #line 1422 "util/configparser.y" /* yacc.c:1648 */
40604079 {
40614080 OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
40624081 if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
40634082 yyerror("out of memory");
40644083 }
4065 #line 4067 "util/configparser.c" /* yacc.c:1648 */
4066 break;
4067
4068 case 356:
4069 #line 1428 "util/configparser.y" /* yacc.c:1648 */
4084 #line 4086 "util/configparser.c" /* yacc.c:1648 */
4085 break;
4086
4087 case 357:
4088 #line 1429 "util/configparser.y" /* yacc.c:1648 */
40704089 {
40714090 OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
40724091 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
40734092 yyerror("out of memory");
40744093 }
4075 #line 4077 "util/configparser.c" /* yacc.c:1648 */
4076 break;
4077
4078 case 357:
4079 #line 1435 "util/configparser.y" /* yacc.c:1648 */
4094 #line 4096 "util/configparser.c" /* yacc.c:1648 */
4095 break;
4096
4097 case 358:
4098 #line 1436 "util/configparser.y" /* yacc.c:1648 */
40804099 {
40814100 OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
40824101 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
40834102 yyerror("out of memory");
40844103 }
4085 #line 4087 "util/configparser.c" /* yacc.c:1648 */
4086 break;
4087
4088 case 358:
4089 #line 1442 "util/configparser.y" /* yacc.c:1648 */
4104 #line 4106 "util/configparser.c" /* yacc.c:1648 */
4105 break;
4106
4107 case 359:
4108 #line 1443 "util/configparser.y" /* yacc.c:1648 */
40904109 {
40914110 OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
40924111 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40944113 else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
40954114 free((yyvsp[0].str));
40964115 }
4097 #line 4099 "util/configparser.c" /* yacc.c:1648 */
4098 break;
4099
4100 case 359:
4101 #line 1451 "util/configparser.y" /* yacc.c:1648 */
4116 #line 4118 "util/configparser.c" /* yacc.c:1648 */
4117 break;
4118
4119 case 360:
4120 #line 1452 "util/configparser.y" /* yacc.c:1648 */
41024121 {
41034122 OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
41044123 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41064125 else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
41074126 free((yyvsp[0].str));
41084127 }
4109 #line 4111 "util/configparser.c" /* yacc.c:1648 */
4110 break;
4111
4112 case 360:
4113 #line 1460 "util/configparser.y" /* yacc.c:1648 */
4128 #line 4130 "util/configparser.c" /* yacc.c:1648 */
4129 break;
4130
4131 case 361:
4132 #line 1461 "util/configparser.y" /* yacc.c:1648 */
41144133 {
41154134 OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
41164135 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41184137 else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
41194138 free((yyvsp[0].str));
41204139 }
4121 #line 4123 "util/configparser.c" /* yacc.c:1648 */
4122 break;
4123
4124 case 361:
4125 #line 1469 "util/configparser.y" /* yacc.c:1648 */
4140 #line 4142 "util/configparser.c" /* yacc.c:1648 */
4141 break;
4142
4143 case 362:
4144 #line 1470 "util/configparser.y" /* yacc.c:1648 */
41264145 {
41274146 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
41284147 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
41304149 else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
41314150 free((yyvsp[0].str));
41324151 }
4133 #line 4135 "util/configparser.c" /* yacc.c:1648 */
4134 break;
4135
4136 case 362:
4137 #line 1478 "util/configparser.y" /* yacc.c:1648 */
4152 #line 4154 "util/configparser.c" /* yacc.c:1648 */
4153 break;
4154
4155 case 363:
4156 #line 1479 "util/configparser.y" /* yacc.c:1648 */
41384157 {
41394158 OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
41404159 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
41414160 yyerror("out of memory");
41424161 }
4143 #line 4145 "util/configparser.c" /* yacc.c:1648 */
4144 break;
4145
4146 case 363:
4147 #line 1485 "util/configparser.y" /* yacc.c:1648 */
4162 #line 4164 "util/configparser.c" /* yacc.c:1648 */
4163 break;
4164
4165 case 364:
4166 #line 1486 "util/configparser.y" /* yacc.c:1648 */
41484167 {
41494168 OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
41504169 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41534172 (strcmp((yyvsp[0].str), "yes")==0);
41544173 free((yyvsp[0].str));
41554174 }
4156 #line 4158 "util/configparser.c" /* yacc.c:1648 */
4157 break;
4158
4159 case 364:
4160 #line 1495 "util/configparser.y" /* yacc.c:1648 */
4175 #line 4177 "util/configparser.c" /* yacc.c:1648 */
4176 break;
4177
4178 case 365:
4179 #line 1496 "util/configparser.y" /* yacc.c:1648 */
41614180 {
41624181 OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
41634182 if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
41764195 fatal_exit("out of memory adding acl");
41774196 }
41784197 }
4179 #line 4181 "util/configparser.c" /* yacc.c:1648 */
4180 break;
4181
4182 case 365:
4183 #line 1515 "util/configparser.y" /* yacc.c:1648 */
4198 #line 4200 "util/configparser.c" /* yacc.c:1648 */
4199 break;
4200
4201 case 366:
4202 #line 1516 "util/configparser.y" /* yacc.c:1648 */
41844203 {
41854204 OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
41864205 free(cfg_parser->cfg->module_conf);
41874206 cfg_parser->cfg->module_conf = (yyvsp[0].str);
41884207 }
4189 #line 4191 "util/configparser.c" /* yacc.c:1648 */
4190 break;
4191
4192 case 366:
4193 #line 1522 "util/configparser.y" /* yacc.c:1648 */
4208 #line 4210 "util/configparser.c" /* yacc.c:1648 */
4209 break;
4210
4211 case 367:
4212 #line 1523 "util/configparser.y" /* yacc.c:1648 */
41944213 {
41954214 OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
41964215 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
42074226 }
42084227 free((yyvsp[0].str));
42094228 }
4210 #line 4212 "util/configparser.c" /* yacc.c:1648 */
4211 break;
4212
4213 case 367:
4214 #line 1540 "util/configparser.y" /* yacc.c:1648 */
4229 #line 4231 "util/configparser.c" /* yacc.c:1648 */
4230 break;
4231
4232 case 368:
4233 #line 1541 "util/configparser.y" /* yacc.c:1648 */
42154234 {
42164235 OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
42174236 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
42234242 }
42244243 free((yyvsp[0].str));
42254244 }
4226 #line 4228 "util/configparser.c" /* yacc.c:1648 */
4227 break;
4228
4229 case 368:
4230 #line 1553 "util/configparser.y" /* yacc.c:1648 */
4245 #line 4247 "util/configparser.c" /* yacc.c:1648 */
4246 break;
4247
4248 case 369:
4249 #line 1554 "util/configparser.y" /* yacc.c:1648 */
42314250 {
42324251 OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
42334252 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
42394258 }
42404259 free((yyvsp[0].str));
42414260 }
4242 #line 4244 "util/configparser.c" /* yacc.c:1648 */
4243 break;
4244
4245 case 369:
4246 #line 1566 "util/configparser.y" /* yacc.c:1648 */
4261 #line 4263 "util/configparser.c" /* yacc.c:1648 */
4262 break;
4263
4264 case 370:
4265 #line 1567 "util/configparser.y" /* yacc.c:1648 */
42474266 {
42484267 OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
42494268 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42514270 else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
42524271 free((yyvsp[0].str));
42534272 }
4254 #line 4256 "util/configparser.c" /* yacc.c:1648 */
4255 break;
4256
4257 case 370:
4258 #line 1575 "util/configparser.y" /* yacc.c:1648 */
4273 #line 4275 "util/configparser.c" /* yacc.c:1648 */
4274 break;
4275
4276 case 371:
4277 #line 1576 "util/configparser.y" /* yacc.c:1648 */
42594278 {
42604279 OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
42614280 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42634282 else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
42644283 free((yyvsp[0].str));
42654284 }
4266 #line 4268 "util/configparser.c" /* yacc.c:1648 */
4267 break;
4268
4269 case 371:
4270 #line 1584 "util/configparser.y" /* yacc.c:1648 */
4285 #line 4287 "util/configparser.c" /* yacc.c:1648 */
4286 break;
4287
4288 case 372:
4289 #line 1585 "util/configparser.y" /* yacc.c:1648 */
42714290 {
42724291 OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
42734292 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42754294 else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
42764295 free((yyvsp[0].str));
42774296 }
4278 #line 4280 "util/configparser.c" /* yacc.c:1648 */
4279 break;
4280
4281 case 372:
4282 #line 1593 "util/configparser.y" /* yacc.c:1648 */
4297 #line 4299 "util/configparser.c" /* yacc.c:1648 */
4298 break;
4299
4300 case 373:
4301 #line 1594 "util/configparser.y" /* yacc.c:1648 */
42834302 {
42844303 OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
42854304 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42874306 else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
42884307 free((yyvsp[0].str));
42894308 }
4290 #line 4292 "util/configparser.c" /* yacc.c:1648 */
4291 break;
4292
4293 case 373:
4294 #line 1602 "util/configparser.y" /* yacc.c:1648 */
4309 #line 4311 "util/configparser.c" /* yacc.c:1648 */
4310 break;
4311
4312 case 374:
4313 #line 1603 "util/configparser.y" /* yacc.c:1648 */
42954314 {
42964315 OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
42974316 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43004319 (strcmp((yyvsp[0].str), "yes")==0);
43014320 free((yyvsp[0].str));
43024321 }
4303 #line 4305 "util/configparser.c" /* yacc.c:1648 */
4304 break;
4305
4306 case 374:
4307 #line 1612 "util/configparser.y" /* yacc.c:1648 */
4322 #line 4324 "util/configparser.c" /* yacc.c:1648 */
4323 break;
4324
4325 case 375:
4326 #line 1613 "util/configparser.y" /* yacc.c:1648 */
43084327 {
43094328 OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
43104329 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43134332 (strcmp((yyvsp[0].str), "yes")==0);
43144333 free((yyvsp[0].str));
43154334 }
4316 #line 4318 "util/configparser.c" /* yacc.c:1648 */
4317 break;
4318
4319 case 375:
4320 #line 1622 "util/configparser.y" /* yacc.c:1648 */
4335 #line 4337 "util/configparser.c" /* yacc.c:1648 */
4336 break;
4337
4338 case 376:
4339 #line 1623 "util/configparser.y" /* yacc.c:1648 */
43214340 {
43224341 OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
43234342 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43274346 (strcmp((yyvsp[0].str), "yes")==0);
43284347 free((yyvsp[0].str));
43294348 }
4330 #line 4332 "util/configparser.c" /* yacc.c:1648 */
4331 break;
4332
4333 case 376:
4334 #line 1633 "util/configparser.y" /* yacc.c:1648 */
4349 #line 4351 "util/configparser.c" /* yacc.c:1648 */
4350 break;
4351
4352 case 377:
4353 #line 1634 "util/configparser.y" /* yacc.c:1648 */
43354354 {
43364355 OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
43374356 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43394358 else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
43404359 free((yyvsp[0].str));
43414360 }
4342 #line 4344 "util/configparser.c" /* yacc.c:1648 */
4343 break;
4344
4345 case 377:
4346 #line 1642 "util/configparser.y" /* yacc.c:1648 */
4361 #line 4363 "util/configparser.c" /* yacc.c:1648 */
4362 break;
4363
4364 case 378:
4365 #line 1643 "util/configparser.y" /* yacc.c:1648 */
43474366 {
43484367 OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
43494368 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43514370 else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
43524371 free((yyvsp[0].str));
43534372 }
4354 #line 4356 "util/configparser.c" /* yacc.c:1648 */
4355 break;
4356
4357 case 378:
4358 #line 1651 "util/configparser.y" /* yacc.c:1648 */
4373 #line 4375 "util/configparser.c" /* yacc.c:1648 */
4374 break;
4375
4376 case 379:
4377 #line 1652 "util/configparser.y" /* yacc.c:1648 */
43594378 {
43604379 OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
43614380 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
43634382 else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
43644383 free((yyvsp[0].str));
43654384 }
4366 #line 4368 "util/configparser.c" /* yacc.c:1648 */
4367 break;
4368
4369 case 379:
4370 #line 1660 "util/configparser.y" /* yacc.c:1648 */
4385 #line 4387 "util/configparser.c" /* yacc.c:1648 */
4386 break;
4387
4388 case 380:
4389 #line 1661 "util/configparser.y" /* yacc.c:1648 */
43714390 {
43724391 OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
43734392 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43754394 else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
43764395 free((yyvsp[0].str));
43774396 }
4378 #line 4380 "util/configparser.c" /* yacc.c:1648 */
4379 break;
4380
4381 case 380:
4382 #line 1669 "util/configparser.y" /* yacc.c:1648 */
4397 #line 4399 "util/configparser.c" /* yacc.c:1648 */
4398 break;
4399
4400 case 381:
4401 #line 1670 "util/configparser.y" /* yacc.c:1648 */
43834402 {
43844403 OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
43854404 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43914410 #endif
43924411 free((yyvsp[0].str));
43934412 }
4394 #line 4396 "util/configparser.c" /* yacc.c:1648 */
4395 break;
4396
4397 case 381:
4398 #line 1682 "util/configparser.y" /* yacc.c:1648 */
4413 #line 4415 "util/configparser.c" /* yacc.c:1648 */
4414 break;
4415
4416 case 382:
4417 #line 1683 "util/configparser.y" /* yacc.c:1648 */
43994418 {
44004419 OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
44014420 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44074426 #endif
44084427 free((yyvsp[0].str));
44094428 }
4410 #line 4412 "util/configparser.c" /* yacc.c:1648 */
4411 break;
4412
4413 case 382:
4414 #line 1695 "util/configparser.y" /* yacc.c:1648 */
4429 #line 4431 "util/configparser.c" /* yacc.c:1648 */
4430 break;
4431
4432 case 383:
4433 #line 1696 "util/configparser.y" /* yacc.c:1648 */
44154434 {
44164435 OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
44174436 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44194438 else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
44204439 free((yyvsp[0].str));
44214440 }
4422 #line 4424 "util/configparser.c" /* yacc.c:1648 */
4423 break;
4424
4425 case 383:
4426 #line 1704 "util/configparser.y" /* yacc.c:1648 */
4441 #line 4443 "util/configparser.c" /* yacc.c:1648 */
4442 break;
4443
4444 case 384:
4445 #line 1705 "util/configparser.y" /* yacc.c:1648 */
44274446 {
44284447 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
44294448 free(cfg_parser->cfg->val_nsec3_key_iterations);
44304449 cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
44314450 }
4432 #line 4434 "util/configparser.c" /* yacc.c:1648 */
4433 break;
4434
4435 case 384:
4436 #line 1711 "util/configparser.y" /* yacc.c:1648 */
4451 #line 4453 "util/configparser.c" /* yacc.c:1648 */
4452 break;
4453
4454 case 385:
4455 #line 1712 "util/configparser.y" /* yacc.c:1648 */
44374456 {
44384457 OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
44394458 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44414460 else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
44424461 free((yyvsp[0].str));
44434462 }
4444 #line 4446 "util/configparser.c" /* yacc.c:1648 */
4445 break;
4446
4447 case 385:
4448 #line 1720 "util/configparser.y" /* yacc.c:1648 */
4463 #line 4465 "util/configparser.c" /* yacc.c:1648 */
4464 break;
4465
4466 case 386:
4467 #line 1721 "util/configparser.y" /* yacc.c:1648 */
44494468 {
44504469 OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
44514470 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44534472 else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
44544473 free((yyvsp[0].str));
44554474 }
4456 #line 4458 "util/configparser.c" /* yacc.c:1648 */
4457 break;
4458
4459 case 386:
4460 #line 1729 "util/configparser.y" /* yacc.c:1648 */
4475 #line 4477 "util/configparser.c" /* yacc.c:1648 */
4476 break;
4477
4478 case 387:
4479 #line 1730 "util/configparser.y" /* yacc.c:1648 */
44614480 {
44624481 OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
44634482 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44654484 else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
44664485 free((yyvsp[0].str));
44674486 }
4468 #line 4470 "util/configparser.c" /* yacc.c:1648 */
4469 break;
4470
4471 case 387:
4472 #line 1738 "util/configparser.y" /* yacc.c:1648 */
4487 #line 4489 "util/configparser.c" /* yacc.c:1648 */
4488 break;
4489
4490 case 388:
4491 #line 1739 "util/configparser.y" /* yacc.c:1648 */
44734492 {
44744493 OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
44754494 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44784497 (strcmp((yyvsp[0].str), "yes")==0);
44794498 free((yyvsp[0].str));
44804499 }
4481 #line 4483 "util/configparser.c" /* yacc.c:1648 */
4482 break;
4483
4484 case 388:
4485 #line 1747 "util/configparser.y" /* yacc.c:1648 */
4500 #line 4502 "util/configparser.c" /* yacc.c:1648 */
4501 break;
4502
4503 case 389:
4504 #line 1748 "util/configparser.y" /* yacc.c:1648 */
44864505 {
44874506 OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
44884507 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
44894508 yyerror("memory size expected");
44904509 free((yyvsp[0].str));
44914510 }
4492 #line 4494 "util/configparser.c" /* yacc.c:1648 */
4493 break;
4494
4495 case 389:
4496 #line 1755 "util/configparser.y" /* yacc.c:1648 */
4511 #line 4513 "util/configparser.c" /* yacc.c:1648 */
4512 break;
4513
4514 case 390:
4515 #line 1756 "util/configparser.y" /* yacc.c:1648 */
44974516 {
44984517 OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
44994518 if(atoi((yyvsp[0].str)) == 0)
45054524 }
45064525 free((yyvsp[0].str));
45074526 }
4508 #line 4510 "util/configparser.c" /* yacc.c:1648 */
4509 break;
4510
4511 case 390:
4512 #line 1768 "util/configparser.y" /* yacc.c:1648 */
4527 #line 4529 "util/configparser.c" /* yacc.c:1648 */
4528 break;
4529
4530 case 391:
4531 #line 1769 "util/configparser.y" /* yacc.c:1648 */
45134532 {
45144533 OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
45154534 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
45164535 yyerror("memory size expected");
45174536 free((yyvsp[0].str));
45184537 }
4519 #line 4521 "util/configparser.c" /* yacc.c:1648 */
4520 break;
4521
4522 case 391:
4523 #line 1776 "util/configparser.y" /* yacc.c:1648 */
4538 #line 4540 "util/configparser.c" /* yacc.c:1648 */
4539 break;
4540
4541 case 392:
4542 #line 1777 "util/configparser.y" /* yacc.c:1648 */
45244543 {
45254544 OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
45264545 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
45314550 && strcmp((yyvsp[0].str), "always_refuse")!=0
45324551 && strcmp((yyvsp[0].str), "always_nxdomain")!=0
45334552 && strcmp((yyvsp[0].str), "noview")!=0
4534 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) {
4553 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
4554 && strcmp((yyvsp[0].str), "inform_redirect") != 0
4555 && strcmp((yyvsp[0].str), "ipset") != 0) {
45354556 yyerror("local-zone type: expected static, deny, "
45364557 "refuse, redirect, transparent, "
45374558 "typetransparent, inform, inform_deny, "
4538 "always_transparent, always_refuse, "
4539 "always_nxdomain, noview or nodefault");
4559 "inform_redirect, always_transparent, "
4560 "always_refuse, always_nxdomain, noview "
4561 ", nodefault or ipset");
45404562 free((yyvsp[-1].str));
45414563 free((yyvsp[0].str));
45424564 } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
45444566 local_zones_nodefault, (yyvsp[-1].str)))
45454567 fatal_exit("out of memory adding local-zone");
45464568 free((yyvsp[0].str));
4569 #ifdef USE_IPSET
4570 } else if(strcmp((yyvsp[0].str), "ipset")==0) {
4571 if(!cfg_strlist_insert(&cfg_parser->cfg->
4572 local_zones_ipset, (yyvsp[-1].str)))
4573 fatal_exit("out of memory adding local-zone");
4574 free((yyvsp[0].str));
4575 #endif
45474576 } else {
45484577 if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
45494578 (yyvsp[-1].str), (yyvsp[0].str)))
45504579 fatal_exit("out of memory adding local-zone");
45514580 }
45524581 }
4553 #line 4555 "util/configparser.c" /* yacc.c:1648 */
4554 break;
4555
4556 case 392:
4557 #line 1807 "util/configparser.y" /* yacc.c:1648 */
4582 #line 4584 "util/configparser.c" /* yacc.c:1648 */
4583 break;
4584
4585 case 393:
4586 #line 1818 "util/configparser.y" /* yacc.c:1648 */
45584587 {
45594588 OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
45604589 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
45614590 fatal_exit("out of memory adding local-data");
45624591 }
4563 #line 4565 "util/configparser.c" /* yacc.c:1648 */
4564 break;
4565
4566 case 393:
4567 #line 1814 "util/configparser.y" /* yacc.c:1648 */
4592 #line 4594 "util/configparser.c" /* yacc.c:1648 */
4593 break;
4594
4595 case 394:
4596 #line 1825 "util/configparser.y" /* yacc.c:1648 */
45684597 {
45694598 char* ptr;
45704599 OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
45784607 yyerror("local-data-ptr could not be reversed");
45794608 }
45804609 }
4581 #line 4583 "util/configparser.c" /* yacc.c:1648 */
4582 break;
4583
4584 case 394:
4585 #line 1829 "util/configparser.y" /* yacc.c:1648 */
4610 #line 4612 "util/configparser.c" /* yacc.c:1648 */
4611 break;
4612
4613 case 395:
4614 #line 1840 "util/configparser.y" /* yacc.c:1648 */
45864615 {
45874616 OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
45884617 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45914620 (strcmp((yyvsp[0].str), "yes")==0);
45924621 free((yyvsp[0].str));
45934622 }
4594 #line 4596 "util/configparser.c" /* yacc.c:1648 */
4595 break;
4596
4597 case 395:
4598 #line 1839 "util/configparser.y" /* yacc.c:1648 */
4623 #line 4625 "util/configparser.c" /* yacc.c:1648 */
4624 break;
4625
4626 case 396:
4627 #line 1850 "util/configparser.y" /* yacc.c:1648 */
45994628 {
46004629 OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
46014630 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
46044633 (strcmp((yyvsp[0].str), "yes")==0);
46054634 free((yyvsp[0].str));
46064635 }
4607 #line 4609 "util/configparser.c" /* yacc.c:1648 */
4608 break;
4609
4610 case 396:
4611 #line 1849 "util/configparser.y" /* yacc.c:1648 */
4636 #line 4638 "util/configparser.c" /* yacc.c:1648 */
4637 break;
4638
4639 case 397:
4640 #line 1860 "util/configparser.y" /* yacc.c:1648 */
46124641 {
46134642 OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
46144643 cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
46154644 free((yyvsp[0].str));
46164645 }
4617 #line 4619 "util/configparser.c" /* yacc.c:1648 */
4618 break;
4619
4620 case 397:
4621 #line 1856 "util/configparser.y" /* yacc.c:1648 */
4646 #line 4648 "util/configparser.c" /* yacc.c:1648 */
4647 break;
4648
4649 case 398:
4650 #line 1867 "util/configparser.y" /* yacc.c:1648 */
46224651 {
46234652 OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
46244653 cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
46254654 free((yyvsp[0].str));
46264655 }
4627 #line 4629 "util/configparser.c" /* yacc.c:1648 */
4628 break;
4629
4630 case 398:
4631 #line 1863 "util/configparser.y" /* yacc.c:1648 */
4656 #line 4658 "util/configparser.c" /* yacc.c:1648 */
4657 break;
4658
4659 case 399:
4660 #line 1874 "util/configparser.y" /* yacc.c:1648 */
46324661 {
46334662 OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
46344663 free(cfg_parser->cfg->dns64_prefix);
46354664 cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
46364665 }
4637 #line 4639 "util/configparser.c" /* yacc.c:1648 */
4638 break;
4639
4640 case 399:
4641 #line 1870 "util/configparser.y" /* yacc.c:1648 */
4666 #line 4668 "util/configparser.c" /* yacc.c:1648 */
4667 break;
4668
4669 case 400:
4670 #line 1881 "util/configparser.y" /* yacc.c:1648 */
46424671 {
46434672 OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
46444673 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
46464675 else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
46474676 free((yyvsp[0].str));
46484677 }
4649 #line 4651 "util/configparser.c" /* yacc.c:1648 */
4650 break;
4651
4652 case 400:
4653 #line 1879 "util/configparser.y" /* yacc.c:1648 */
4678 #line 4680 "util/configparser.c" /* yacc.c:1648 */
4679 break;
4680
4681 case 401:
4682 #line 1890 "util/configparser.y" /* yacc.c:1648 */
46544683 {
46554684 OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
46564685 if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
46574686 (yyvsp[0].str)))
46584687 fatal_exit("out of memory adding dns64-ignore-aaaa");
46594688 }
4660 #line 4662 "util/configparser.c" /* yacc.c:1648 */
4661 break;
4662
4663 case 401:
4664 #line 1887 "util/configparser.y" /* yacc.c:1648 */
4689 #line 4691 "util/configparser.c" /* yacc.c:1648 */
4690 break;
4691
4692 case 402:
4693 #line 1898 "util/configparser.y" /* yacc.c:1648 */
46654694 {
46664695 char* p, *s = (yyvsp[0].str);
46674696 OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
46744703 }
46754704 free((yyvsp[0].str));
46764705 }
4677 #line 4679 "util/configparser.c" /* yacc.c:1648 */
4678 break;
4679
4680 case 402:
4681 #line 1901 "util/configparser.y" /* yacc.c:1648 */
4706 #line 4708 "util/configparser.c" /* yacc.c:1648 */
4707 break;
4708
4709 case 403:
4710 #line 1912 "util/configparser.y" /* yacc.c:1648 */
46824711 {
46834712 size_t len = 0;
46844713 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
46984727 }
46994728 }
47004729 }
4701 #line 4703 "util/configparser.c" /* yacc.c:1648 */
4702 break;
4703
4704 case 403:
4705 #line 1922 "util/configparser.y" /* yacc.c:1648 */
4730 #line 4732 "util/configparser.c" /* yacc.c:1648 */
4731 break;
4732
4733 case 404:
4734 #line 1933 "util/configparser.y" /* yacc.c:1648 */
47064735 {
47074736 size_t len = 0;
47084737 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
47224751 }
47234752 }
47244753 }
4725 #line 4727 "util/configparser.c" /* yacc.c:1648 */
4726 break;
4727
4728 case 404:
4729 #line 1943 "util/configparser.y" /* yacc.c:1648 */
4754 #line 4756 "util/configparser.c" /* yacc.c:1648 */
4755 break;
4756
4757 case 405:
4758 #line 1954 "util/configparser.y" /* yacc.c:1648 */
47304759 {
47314760 OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
47324761 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
47374766 free((yyvsp[0].str));
47384767 }
47394768 }
4740 #line 4742 "util/configparser.c" /* yacc.c:1648 */
4741 break;
4742
4743 case 405:
4744 #line 1955 "util/configparser.y" /* yacc.c:1648 */
4769 #line 4771 "util/configparser.c" /* yacc.c:1648 */
4770 break;
4771
4772 case 406:
4773 #line 1966 "util/configparser.y" /* yacc.c:1648 */
47454774 {
47464775 OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
47474776 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
47524781 free((yyvsp[0].str));
47534782 }
47544783 }
4755 #line 4757 "util/configparser.c" /* yacc.c:1648 */
4756 break;
4757
4758 case 406:
4759 #line 1967 "util/configparser.y" /* yacc.c:1648 */
4784 #line 4786 "util/configparser.c" /* yacc.c:1648 */
4785 break;
4786
4787 case 407:
4788 #line 1978 "util/configparser.y" /* yacc.c:1648 */
47604789 {
47614790 OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
47624791 if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
47674796 free((yyvsp[0].str));
47684797 }
47694798 }
4770 #line 4772 "util/configparser.c" /* yacc.c:1648 */
4771 break;
4772
4773 case 407:
4774 #line 1979 "util/configparser.y" /* yacc.c:1648 */
4799 #line 4801 "util/configparser.c" /* yacc.c:1648 */
4800 break;
4801
4802 case 408:
4803 #line 1990 "util/configparser.y" /* yacc.c:1648 */
47754804 {
47764805 OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
47774806 if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
47794808 yyerror("out of memory");
47804809 }
47814810 }
4782 #line 4784 "util/configparser.c" /* yacc.c:1648 */
4783 break;
4784
4785 case 408:
4786 #line 1988 "util/configparser.y" /* yacc.c:1648 */
4811 #line 4813 "util/configparser.c" /* yacc.c:1648 */
4812 break;
4813
4814 case 409:
4815 #line 1999 "util/configparser.y" /* yacc.c:1648 */
47874816 {
47884817 size_t len = 0;
47894818 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
48034832 }
48044833 }
48054834 }
4806 #line 4808 "util/configparser.c" /* yacc.c:1648 */
4807 break;
4808
4809 case 409:
4810 #line 2009 "util/configparser.y" /* yacc.c:1648 */
4835 #line 4837 "util/configparser.c" /* yacc.c:1648 */
4836 break;
4837
4838 case 410:
4839 #line 2020 "util/configparser.y" /* yacc.c:1648 */
48114840 {
48124841 OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
48134842 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48154844 else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
48164845 free((yyvsp[0].str));
48174846 }
4818 #line 4820 "util/configparser.c" /* yacc.c:1648 */
4819 break;
4820
4821 case 410:
4822 #line 2019 "util/configparser.y" /* yacc.c:1648 */
4847 #line 4849 "util/configparser.c" /* yacc.c:1648 */
4848 break;
4849
4850 case 411:
4851 #line 2030 "util/configparser.y" /* yacc.c:1648 */
48234852 {
48244853 OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
48254854 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48274856 else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
48284857 free((yyvsp[0].str));
48294858 }
4830 #line 4832 "util/configparser.c" /* yacc.c:1648 */
4831 break;
4832
4833 case 411:
4834 #line 2028 "util/configparser.y" /* yacc.c:1648 */
4859 #line 4861 "util/configparser.c" /* yacc.c:1648 */
4860 break;
4861
4862 case 412:
4863 #line 2039 "util/configparser.y" /* yacc.c:1648 */
48354864 {
48364865 OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
48374866 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
48384867 yyerror("memory size expected");
48394868 free((yyvsp[0].str));
48404869 }
4841 #line 4843 "util/configparser.c" /* yacc.c:1648 */
4842 break;
4843
4844 case 412:
4845 #line 2036 "util/configparser.y" /* yacc.c:1648 */
4870 #line 4872 "util/configparser.c" /* yacc.c:1648 */
4871 break;
4872
4873 case 413:
4874 #line 2047 "util/configparser.y" /* yacc.c:1648 */
48464875 {
48474876 OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
48484877 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
48494878 yyerror("memory size expected");
48504879 free((yyvsp[0].str));
48514880 }
4852 #line 4854 "util/configparser.c" /* yacc.c:1648 */
4853 break;
4854
4855 case 413:
4856 #line 2044 "util/configparser.y" /* yacc.c:1648 */
4881 #line 4883 "util/configparser.c" /* yacc.c:1648 */
4882 break;
4883
4884 case 414:
4885 #line 2055 "util/configparser.y" /* yacc.c:1648 */
48574886 {
48584887 OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
48594888 if(atoi((yyvsp[0].str)) == 0)
48654894 }
48664895 free((yyvsp[0].str));
48674896 }
4868 #line 4870 "util/configparser.c" /* yacc.c:1648 */
4869 break;
4870
4871 case 414:
4872 #line 2057 "util/configparser.y" /* yacc.c:1648 */
4897 #line 4899 "util/configparser.c" /* yacc.c:1648 */
4898 break;
4899
4900 case 415:
4901 #line 2068 "util/configparser.y" /* yacc.c:1648 */
48734902 {
48744903 OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
48754904 if(atoi((yyvsp[0].str)) == 0)
48814910 }
48824911 free((yyvsp[0].str));
48834912 }
4884 #line 4886 "util/configparser.c" /* yacc.c:1648 */
4885 break;
4886
4887 case 415:
4888 #line 2070 "util/configparser.y" /* yacc.c:1648 */
4913 #line 4915 "util/configparser.c" /* yacc.c:1648 */
4914 break;
4915
4916 case 416:
4917 #line 2081 "util/configparser.y" /* yacc.c:1648 */
48894918 {
48904919 OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
48914920 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
48994928 "ratelimit-for-domain");
49004929 }
49014930 }
4902 #line 4904 "util/configparser.c" /* yacc.c:1648 */
4903 break;
4904
4905 case 416:
4906 #line 2085 "util/configparser.y" /* yacc.c:1648 */
4931 #line 4933 "util/configparser.c" /* yacc.c:1648 */
4932 break;
4933
4934 case 417:
4935 #line 2096 "util/configparser.y" /* yacc.c:1648 */
49074936 {
49084937 OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
49094938 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
49174946 "ratelimit-below-domain");
49184947 }
49194948 }
4920 #line 4922 "util/configparser.c" /* yacc.c:1648 */
4921 break;
4922
4923 case 417:
4924 #line 2100 "util/configparser.y" /* yacc.c:1648 */
4949 #line 4951 "util/configparser.c" /* yacc.c:1648 */
4950 break;
4951
4952 case 418:
4953 #line 2111 "util/configparser.y" /* yacc.c:1648 */
49254954 {
49264955 OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
49274956 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
49294958 else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
49304959 free((yyvsp[0].str));
49314960 }
4932 #line 4934 "util/configparser.c" /* yacc.c:1648 */
4933 break;
4934
4935 case 418:
4936 #line 2109 "util/configparser.y" /* yacc.c:1648 */
4961 #line 4963 "util/configparser.c" /* yacc.c:1648 */
4962 break;
4963
4964 case 419:
4965 #line 2120 "util/configparser.y" /* yacc.c:1648 */
49374966 {
49384967 OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
49394968 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
49414970 else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
49424971 free((yyvsp[0].str));
49434972 }
4944 #line 4946 "util/configparser.c" /* yacc.c:1648 */
4945 break;
4946
4947 case 419:
4948 #line 2118 "util/configparser.y" /* yacc.c:1648 */
4973 #line 4975 "util/configparser.c" /* yacc.c:1648 */
4974 break;
4975
4976 case 420:
4977 #line 2129 "util/configparser.y" /* yacc.c:1648 */
49494978 {
49504979 OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
49514980 free((yyvsp[0].str));
49524981 }
4953 #line 4955 "util/configparser.c" /* yacc.c:1648 */
4954 break;
4955
4956 case 420:
4957 #line 2124 "util/configparser.y" /* yacc.c:1648 */
4982 #line 4984 "util/configparser.c" /* yacc.c:1648 */
4983 break;
4984
4985 case 421:
4986 #line 2135 "util/configparser.y" /* yacc.c:1648 */
49584987 {
49594988 OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
49604989 if(atoi((yyvsp[0].str)) <= 0)
49624991 else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
49634992 free((yyvsp[0].str));
49644993 }
4965 #line 4967 "util/configparser.c" /* yacc.c:1648 */
4966 break;
4967
4968 case 421:
4969 #line 2133 "util/configparser.y" /* yacc.c:1648 */
4994 #line 4996 "util/configparser.c" /* yacc.c:1648 */
4995 break;
4996
4997 case 422:
4998 #line 2144 "util/configparser.y" /* yacc.c:1648 */
49704999 {
49715000 OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
49725001 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
49745003 else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
49755004 free((yyvsp[0].str));
49765005 }
4977 #line 4979 "util/configparser.c" /* yacc.c:1648 */
4978 break;
4979
4980 case 422:
4981 #line 2142 "util/configparser.y" /* yacc.c:1648 */
5006 #line 5008 "util/configparser.c" /* yacc.c:1648 */
5007 break;
5008
5009 case 423:
5010 #line 2153 "util/configparser.y" /* yacc.c:1648 */
49825011 {
49835012 OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
49845013 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
49875016 (strcmp((yyvsp[0].str), "yes")==0);
49885017 free((yyvsp[0].str));
49895018 }
4990 #line 4992 "util/configparser.c" /* yacc.c:1648 */
4991 break;
4992
4993 case 423:
4994 #line 2152 "util/configparser.y" /* yacc.c:1648 */
5019 #line 5021 "util/configparser.c" /* yacc.c:1648 */
5020 break;
5021
5022 case 424:
5023 #line 2163 "util/configparser.y" /* yacc.c:1648 */
49955024 {
49965025 OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
49975026 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
50005029 (strcmp((yyvsp[0].str), "yes")==0);
50015030 free((yyvsp[0].str));
50025031 }
5003 #line 5005 "util/configparser.c" /* yacc.c:1648 */
5004 break;
5005
5006 case 424:
5007 #line 2162 "util/configparser.y" /* yacc.c:1648 */
5032 #line 5034 "util/configparser.c" /* yacc.c:1648 */
5033 break;
5034
5035 case 425:
5036 #line 2173 "util/configparser.y" /* yacc.c:1648 */
50085037 {
50095038 #ifdef USE_IPSECMOD
50105039 OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
50165045 #endif
50175046 free((yyvsp[0].str));
50185047 }
5019 #line 5021 "util/configparser.c" /* yacc.c:1648 */
5020 break;
5021
5022 case 425:
5023 #line 2175 "util/configparser.y" /* yacc.c:1648 */
5048 #line 5050 "util/configparser.c" /* yacc.c:1648 */
5049 break;
5050
5051 case 426:
5052 #line 2186 "util/configparser.y" /* yacc.c:1648 */
50245053 {
50255054 #ifdef USE_IPSECMOD
50265055 OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
50325061 #endif
50335062 free((yyvsp[0].str));
50345063 }
5035 #line 5037 "util/configparser.c" /* yacc.c:1648 */
5036 break;
5037
5038 case 426:
5039 #line 2188 "util/configparser.y" /* yacc.c:1648 */
5064 #line 5066 "util/configparser.c" /* yacc.c:1648 */
5065 break;
5066
5067 case 427:
5068 #line 2199 "util/configparser.y" /* yacc.c:1648 */
50405069 {
50415070 #ifdef USE_IPSECMOD
50425071 OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
50475076 free((yyvsp[0].str));
50485077 #endif
50495078 }
5050 #line 5052 "util/configparser.c" /* yacc.c:1648 */
5051 break;
5052
5053 case 427:
5054 #line 2200 "util/configparser.y" /* yacc.c:1648 */
5079 #line 5081 "util/configparser.c" /* yacc.c:1648 */
5080 break;
5081
5082 case 428:
5083 #line 2211 "util/configparser.y" /* yacc.c:1648 */
50555084 {
50565085 #ifdef USE_IPSECMOD
50575086 OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
50645093 free((yyvsp[0].str));
50655094 #endif
50665095 }
5067 #line 5069 "util/configparser.c" /* yacc.c:1648 */
5068 break;
5069
5070 case 428:
5071 #line 2214 "util/configparser.y" /* yacc.c:1648 */
5096 #line 5098 "util/configparser.c" /* yacc.c:1648 */
5097 break;
5098
5099 case 429:
5100 #line 2225 "util/configparser.y" /* yacc.c:1648 */
50725101 {
50735102 #ifdef USE_IPSECMOD
50745103 OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
50795108 free((yyvsp[0].str));
50805109 #endif
50815110 }
5082 #line 5084 "util/configparser.c" /* yacc.c:1648 */
5083 break;
5084
5085 case 429:
5086 #line 2226 "util/configparser.y" /* yacc.c:1648 */
5111 #line 5113 "util/configparser.c" /* yacc.c:1648 */
5112 break;
5113
5114 case 430:
5115 #line 2237 "util/configparser.y" /* yacc.c:1648 */
50875116 {
50885117 #ifdef USE_IPSECMOD
50895118 OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
50965125 free((yyvsp[0].str));
50975126 #endif
50985127 }
5099 #line 5101 "util/configparser.c" /* yacc.c:1648 */
5100 break;
5101
5102 case 430:
5103 #line 2240 "util/configparser.y" /* yacc.c:1648 */
5128 #line 5130 "util/configparser.c" /* yacc.c:1648 */
5129 break;
5130
5131 case 431:
5132 #line 2251 "util/configparser.y" /* yacc.c:1648 */
51045133 {
51055134 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
51065135 if(cfg_parser->cfg->stubs->name)
51095138 free(cfg_parser->cfg->stubs->name);
51105139 cfg_parser->cfg->stubs->name = (yyvsp[0].str);
51115140 }
5112 #line 5114 "util/configparser.c" /* yacc.c:1648 */
5113 break;
5114
5115 case 431:
5116 #line 2250 "util/configparser.y" /* yacc.c:1648 */
5141 #line 5143 "util/configparser.c" /* yacc.c:1648 */
5142 break;
5143
5144 case 432:
5145 #line 2261 "util/configparser.y" /* yacc.c:1648 */
51175146 {
51185147 OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
51195148 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
51205149 yyerror("out of memory");
51215150 }
5122 #line 5124 "util/configparser.c" /* yacc.c:1648 */
5123 break;
5124
5125 case 432:
5126 #line 2257 "util/configparser.y" /* yacc.c:1648 */
5151 #line 5153 "util/configparser.c" /* yacc.c:1648 */
5152 break;
5153
5154 case 433:
5155 #line 2268 "util/configparser.y" /* yacc.c:1648 */
51275156 {
51285157 OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
51295158 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
51305159 yyerror("out of memory");
51315160 }
5132 #line 5134 "util/configparser.c" /* yacc.c:1648 */
5133 break;
5134
5135 case 433:
5136 #line 2264 "util/configparser.y" /* yacc.c:1648 */
5161 #line 5163 "util/configparser.c" /* yacc.c:1648 */
5162 break;
5163
5164 case 434:
5165 #line 2275 "util/configparser.y" /* yacc.c:1648 */
51375166 {
51385167 OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
51395168 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
51415170 else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
51425171 free((yyvsp[0].str));
51435172 }
5144 #line 5146 "util/configparser.c" /* yacc.c:1648 */
5145 break;
5146
5147 case 434:
5148 #line 2273 "util/configparser.y" /* yacc.c:1648 */
5173 #line 5175 "util/configparser.c" /* yacc.c:1648 */
5174 break;
5175
5176 case 435:
5177 #line 2284 "util/configparser.y" /* yacc.c:1648 */
51495178 {
51505179 OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
51515180 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
51535182 else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
51545183 free((yyvsp[0].str));
51555184 }
5156 #line 5158 "util/configparser.c" /* yacc.c:1648 */
5157 break;
5158
5159 case 435:
5160 #line 2282 "util/configparser.y" /* yacc.c:1648 */
5185 #line 5187 "util/configparser.c" /* yacc.c:1648 */
5186 break;
5187
5188 case 436:
5189 #line 2293 "util/configparser.y" /* yacc.c:1648 */
51615190 {
51625191 OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
51635192 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
51665195 (strcmp((yyvsp[0].str), "yes")==0);
51675196 free((yyvsp[0].str));
51685197 }
5169 #line 5171 "util/configparser.c" /* yacc.c:1648 */
5170 break;
5171
5172 case 436:
5173 #line 2292 "util/configparser.y" /* yacc.c:1648 */
5198 #line 5200 "util/configparser.c" /* yacc.c:1648 */
5199 break;
5200
5201 case 437:
5202 #line 2303 "util/configparser.y" /* yacc.c:1648 */
51745203 {
51755204 OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
51765205 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
51795208 (strcmp((yyvsp[0].str), "yes")==0);
51805209 free((yyvsp[0].str));
51815210 }
5182 #line 5184 "util/configparser.c" /* yacc.c:1648 */
5183 break;
5184
5185 case 437:
5186 #line 2302 "util/configparser.y" /* yacc.c:1648 */
5211 #line 5213 "util/configparser.c" /* yacc.c:1648 */
5212 break;
5213
5214 case 438:
5215 #line 2313 "util/configparser.y" /* yacc.c:1648 */
51875216 {
51885217 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
51895218 if(cfg_parser->cfg->forwards->name)
51925221 free(cfg_parser->cfg->forwards->name);
51935222 cfg_parser->cfg->forwards->name = (yyvsp[0].str);
51945223 }
5195 #line 5197 "util/configparser.c" /* yacc.c:1648 */
5196 break;
5197
5198 case 438:
5199 #line 2312 "util/configparser.y" /* yacc.c:1648 */
5224 #line 5226 "util/configparser.c" /* yacc.c:1648 */
5225 break;
5226
5227 case 439:
5228 #line 2323 "util/configparser.y" /* yacc.c:1648 */
52005229 {
52015230 OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
52025231 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
52035232 yyerror("out of memory");
52045233 }
5205 #line 5207 "util/configparser.c" /* yacc.c:1648 */
5206 break;
5207
5208 case 439:
5209 #line 2319 "util/configparser.y" /* yacc.c:1648 */
5234 #line 5236 "util/configparser.c" /* yacc.c:1648 */
5235 break;
5236
5237 case 440:
5238 #line 2330 "util/configparser.y" /* yacc.c:1648 */
52105239 {
52115240 OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
52125241 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
52135242 yyerror("out of memory");
52145243 }
5215 #line 5217 "util/configparser.c" /* yacc.c:1648 */
5216 break;
5217
5218 case 440:
5219 #line 2326 "util/configparser.y" /* yacc.c:1648 */
5244 #line 5246 "util/configparser.c" /* yacc.c:1648 */
5245 break;
5246
5247 case 441:
5248 #line 2337 "util/configparser.y" /* yacc.c:1648 */
52205249 {
52215250 OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
52225251 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
52245253 else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
52255254 free((yyvsp[0].str));
52265255 }
5227 #line 5229 "util/configparser.c" /* yacc.c:1648 */
5228 break;
5229
5230 case 441:
5231 #line 2335 "util/configparser.y" /* yacc.c:1648 */
5256 #line 5258 "util/configparser.c" /* yacc.c:1648 */
5257 break;
5258
5259 case 442:
5260 #line 2346 "util/configparser.y" /* yacc.c:1648 */
52325261 {
52335262 OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
52345263 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
52365265 else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
52375266 free((yyvsp[0].str));
52385267 }
5239 #line 5241 "util/configparser.c" /* yacc.c:1648 */
5240 break;
5241
5242 case 442:
5243 #line 2344 "util/configparser.y" /* yacc.c:1648 */
5268 #line 5270 "util/configparser.c" /* yacc.c:1648 */
5269 break;
5270
5271 case 443:
5272 #line 2355 "util/configparser.y" /* yacc.c:1648 */
52445273 {
52455274 OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
52465275 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
52495278 (strcmp((yyvsp[0].str), "yes")==0);
52505279 free((yyvsp[0].str));
52515280 }
5252 #line 5254 "util/configparser.c" /* yacc.c:1648 */
5253 break;
5254
5255 case 443:
5256 #line 2354 "util/configparser.y" /* yacc.c:1648 */
5281 #line 5283 "util/configparser.c" /* yacc.c:1648 */
5282 break;
5283
5284 case 444:
5285 #line 2365 "util/configparser.y" /* yacc.c:1648 */
52575286 {
52585287 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
52595288 if(cfg_parser->cfg->auths->name)
52625291 free(cfg_parser->cfg->auths->name);
52635292 cfg_parser->cfg->auths->name = (yyvsp[0].str);
52645293 }
5265 #line 5267 "util/configparser.c" /* yacc.c:1648 */
5266 break;
5267
5268 case 444:
5269 #line 2364 "util/configparser.y" /* yacc.c:1648 */
5294 #line 5296 "util/configparser.c" /* yacc.c:1648 */
5295 break;
5296
5297 case 445:
5298 #line 2375 "util/configparser.y" /* yacc.c:1648 */
52705299 {
52715300 OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
52725301 free(cfg_parser->cfg->auths->zonefile);
52735302 cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
52745303 }
5275 #line 5277 "util/configparser.c" /* yacc.c:1648 */
5276 break;
5277
5278 case 445:
5279 #line 2371 "util/configparser.y" /* yacc.c:1648 */
5304 #line 5306 "util/configparser.c" /* yacc.c:1648 */
5305 break;
5306
5307 case 446:
5308 #line 2382 "util/configparser.y" /* yacc.c:1648 */
52805309 {
52815310 OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
52825311 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
52835312 yyerror("out of memory");
52845313 }
5285 #line 5287 "util/configparser.c" /* yacc.c:1648 */
5286 break;
5287
5288 case 446:
5289 #line 2378 "util/configparser.y" /* yacc.c:1648 */
5314 #line 5316 "util/configparser.c" /* yacc.c:1648 */
5315 break;
5316
5317 case 447:
5318 #line 2389 "util/configparser.y" /* yacc.c:1648 */
52905319 {
52915320 OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
52925321 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
52935322 yyerror("out of memory");
52945323 }
5295 #line 5297 "util/configparser.c" /* yacc.c:1648 */
5296 break;
5297
5298 case 447:
5299 #line 2385 "util/configparser.y" /* yacc.c:1648 */
5324 #line 5326 "util/configparser.c" /* yacc.c:1648 */
5325 break;
5326
5327 case 448:
5328 #line 2396 "util/configparser.y" /* yacc.c:1648 */
53005329 {
53015330 OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
53025331 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
53035332 (yyvsp[0].str)))
53045333 yyerror("out of memory");
53055334 }
5306 #line 5308 "util/configparser.c" /* yacc.c:1648 */
5307 break;
5308
5309 case 448:
5310 #line 2393 "util/configparser.y" /* yacc.c:1648 */
5335 #line 5337 "util/configparser.c" /* yacc.c:1648 */
5336 break;
5337
5338 case 449:
5339 #line 2404 "util/configparser.y" /* yacc.c:1648 */
53115340 {
53125341 OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
53135342 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53165345 (strcmp((yyvsp[0].str), "yes")==0);
53175346 free((yyvsp[0].str));
53185347 }
5319 #line 5321 "util/configparser.c" /* yacc.c:1648 */
5320 break;
5321
5322 case 449:
5323 #line 2403 "util/configparser.y" /* yacc.c:1648 */
5348 #line 5350 "util/configparser.c" /* yacc.c:1648 */
5349 break;
5350
5351 case 450:
5352 #line 2414 "util/configparser.y" /* yacc.c:1648 */
53245353 {
53255354 OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
53265355 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53295358 (strcmp((yyvsp[0].str), "yes")==0);
53305359 free((yyvsp[0].str));
53315360 }
5332 #line 5334 "util/configparser.c" /* yacc.c:1648 */
5333 break;
5334
5335 case 450:
5336 #line 2413 "util/configparser.y" /* yacc.c:1648 */
5361 #line 5363 "util/configparser.c" /* yacc.c:1648 */
5362 break;
5363
5364 case 451:
5365 #line 2424 "util/configparser.y" /* yacc.c:1648 */
53375366 {
53385367 OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
53395368 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53425371 (strcmp((yyvsp[0].str), "yes")==0);
53435372 free((yyvsp[0].str));
53445373 }
5345 #line 5347 "util/configparser.c" /* yacc.c:1648 */
5346 break;
5347
5348 case 451:
5349 #line 2423 "util/configparser.y" /* yacc.c:1648 */
5374 #line 5376 "util/configparser.c" /* yacc.c:1648 */
5375 break;
5376
5377 case 452:
5378 #line 2434 "util/configparser.y" /* yacc.c:1648 */
53505379 {
53515380 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
53525381 if(cfg_parser->cfg->views->name)
53555384 free(cfg_parser->cfg->views->name);
53565385 cfg_parser->cfg->views->name = (yyvsp[0].str);
53575386 }
5358 #line 5360 "util/configparser.c" /* yacc.c:1648 */
5359 break;
5360
5361 case 452:
5362 #line 2433 "util/configparser.y" /* yacc.c:1648 */
5387 #line 5389 "util/configparser.c" /* yacc.c:1648 */
5388 break;
5389
5390 case 453:
5391 #line 2444 "util/configparser.y" /* yacc.c:1648 */
53635392 {
53645393 OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
53655394 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
53835412 local_zones_nodefault, (yyvsp[-1].str)))
53845413 fatal_exit("out of memory adding local-zone");
53855414 free((yyvsp[0].str));
5415 #ifdef USE_IPSET
5416 } else if(strcmp((yyvsp[0].str), "ipset")==0) {
5417 if(!cfg_strlist_insert(&cfg_parser->cfg->views->
5418 local_zones_ipset, (yyvsp[-1].str)))
5419 fatal_exit("out of memory adding local-zone");
5420 free((yyvsp[0].str));
5421 #endif
53865422 } else {
53875423 if(!cfg_str2list_insert(
53885424 &cfg_parser->cfg->views->local_zones,
53905426 fatal_exit("out of memory adding local-zone");
53915427 }
53925428 }
5393 #line 5395 "util/configparser.c" /* yacc.c:1648 */
5394 break;
5395
5396 case 453:
5397 #line 2465 "util/configparser.y" /* yacc.c:1648 */
5429 #line 5431 "util/configparser.c" /* yacc.c:1648 */
5430 break;
5431
5432 case 454:
5433 #line 2483 "util/configparser.y" /* yacc.c:1648 */
53985434 {
53995435 OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
54005436 validate_respip_action((yyvsp[0].str));
54035439 fatal_exit("out of memory adding per-view "
54045440 "response-ip action");
54055441 }
5406 #line 5408 "util/configparser.c" /* yacc.c:1648 */
5407 break;
5408
5409 case 454:
5410 #line 2475 "util/configparser.y" /* yacc.c:1648 */
5442 #line 5444 "util/configparser.c" /* yacc.c:1648 */
5443 break;
5444
5445 case 455:
5446 #line 2493 "util/configparser.y" /* yacc.c:1648 */
54115447 {
54125448 OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
54135449 if(!cfg_str2list_insert(
54145450 &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
54155451 fatal_exit("out of memory adding response-ip-data");
54165452 }
5417 #line 5419 "util/configparser.c" /* yacc.c:1648 */
5418 break;
5419
5420 case 455:
5421 #line 2483 "util/configparser.y" /* yacc.c:1648 */
5453 #line 5455 "util/configparser.c" /* yacc.c:1648 */
5454 break;
5455
5456 case 456:
5457 #line 2501 "util/configparser.y" /* yacc.c:1648 */
54225458 {
54235459 OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
54245460 if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
54255461 fatal_exit("out of memory adding local-data");
54265462 }
54275463 }
5428 #line 5430 "util/configparser.c" /* yacc.c:1648 */
5429 break;
5430
5431 case 456:
5432 #line 2491 "util/configparser.y" /* yacc.c:1648 */
5464 #line 5466 "util/configparser.c" /* yacc.c:1648 */
5465 break;
5466
5467 case 457:
5468 #line 2509 "util/configparser.y" /* yacc.c:1648 */
54335469 {
54345470 char* ptr;
54355471 OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
54435479 yyerror("local-data-ptr could not be reversed");
54445480 }
54455481 }
5446 #line 5448 "util/configparser.c" /* yacc.c:1648 */
5447 break;
5448
5449 case 457:
5450 #line 2506 "util/configparser.y" /* yacc.c:1648 */
5482 #line 5484 "util/configparser.c" /* yacc.c:1648 */
5483 break;
5484
5485 case 458:
5486 #line 2524 "util/configparser.y" /* yacc.c:1648 */
54515487 {
54525488 OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
54535489 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54555491 else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
54565492 free((yyvsp[0].str));
54575493 }
5458 #line 5460 "util/configparser.c" /* yacc.c:1648 */
5459 break;
5460
5461 case 458:
5462 #line 2515 "util/configparser.y" /* yacc.c:1648 */
5494 #line 5496 "util/configparser.c" /* yacc.c:1648 */
5495 break;
5496
5497 case 459:
5498 #line 2533 "util/configparser.y" /* yacc.c:1648 */
54635499 {
54645500 OUTYY(("\nP(remote-control:)\n"));
54655501 }
5466 #line 5468 "util/configparser.c" /* yacc.c:1648 */
5467 break;
5468
5469 case 469:
5470 #line 2526 "util/configparser.y" /* yacc.c:1648 */
5502 #line 5504 "util/configparser.c" /* yacc.c:1648 */
5503 break;
5504
5505 case 470:
5506 #line 2544 "util/configparser.y" /* yacc.c:1648 */
54715507 {
54725508 OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
54735509 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54765512 (strcmp((yyvsp[0].str), "yes")==0);
54775513 free((yyvsp[0].str));
54785514 }
5479 #line 5481 "util/configparser.c" /* yacc.c:1648 */
5480 break;
5481
5482 case 470:
5483 #line 2536 "util/configparser.y" /* yacc.c:1648 */
5515 #line 5517 "util/configparser.c" /* yacc.c:1648 */
5516 break;
5517
5518 case 471:
5519 #line 2554 "util/configparser.y" /* yacc.c:1648 */
54845520 {
54855521 OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
54865522 if(atoi((yyvsp[0].str)) == 0)
54885524 else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
54895525 free((yyvsp[0].str));
54905526 }
5491 #line 5493 "util/configparser.c" /* yacc.c:1648 */
5492 break;
5493
5494 case 471:
5495 #line 2545 "util/configparser.y" /* yacc.c:1648 */
5527 #line 5529 "util/configparser.c" /* yacc.c:1648 */
5528 break;
5529
5530 case 472:
5531 #line 2563 "util/configparser.y" /* yacc.c:1648 */
54965532 {
54975533 OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
54985534 if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
54995535 yyerror("out of memory");
55005536 }
5501 #line 5503 "util/configparser.c" /* yacc.c:1648 */
5502 break;
5503
5504 case 472:
5505 #line 2552 "util/configparser.y" /* yacc.c:1648 */
5537 #line 5539 "util/configparser.c" /* yacc.c:1648 */
5538 break;
5539
5540 case 473:
5541 #line 2570 "util/configparser.y" /* yacc.c:1648 */
55065542 {
55075543 OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
55085544 cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
55095545 free((yyvsp[0].str));
55105546 }
5511 #line 5513 "util/configparser.c" /* yacc.c:1648 */
5512 break;
5513
5514 case 473:
5515 #line 2559 "util/configparser.y" /* yacc.c:1648 */
5547 #line 5549 "util/configparser.c" /* yacc.c:1648 */
5548 break;
5549
5550 case 474:
5551 #line 2577 "util/configparser.y" /* yacc.c:1648 */
55165552 {
55175553 OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
55185554 free(cfg_parser->cfg->server_key_file);
55195555 cfg_parser->cfg->server_key_file = (yyvsp[0].str);
55205556 }
5521 #line 5523 "util/configparser.c" /* yacc.c:1648 */
5522 break;
5523
5524 case 474:
5525 #line 2566 "util/configparser.y" /* yacc.c:1648 */
5557 #line 5559 "util/configparser.c" /* yacc.c:1648 */
5558 break;
5559
5560 case 475:
5561 #line 2584 "util/configparser.y" /* yacc.c:1648 */
55265562 {
55275563 OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
55285564 free(cfg_parser->cfg->server_cert_file);
55295565 cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
55305566 }
5531 #line 5533 "util/configparser.c" /* yacc.c:1648 */
5532 break;
5533
5534 case 475:
5535 #line 2573 "util/configparser.y" /* yacc.c:1648 */
5567 #line 5569 "util/configparser.c" /* yacc.c:1648 */
5568 break;
5569
5570 case 476:
5571 #line 2591 "util/configparser.y" /* yacc.c:1648 */
55365572 {
55375573 OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
55385574 free(cfg_parser->cfg->control_key_file);
55395575 cfg_parser->cfg->control_key_file = (yyvsp[0].str);
55405576 }
5541 #line 5543 "util/configparser.c" /* yacc.c:1648 */
5542 break;
5543
5544 case 476:
5545 #line 2580 "util/configparser.y" /* yacc.c:1648 */
5577 #line 5579 "util/configparser.c" /* yacc.c:1648 */
5578 break;
5579
5580 case 477:
5581 #line 2598 "util/configparser.y" /* yacc.c:1648 */
55465582 {
55475583 OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
55485584 free(cfg_parser->cfg->control_cert_file);
55495585 cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
55505586 }
5551 #line 5553 "util/configparser.c" /* yacc.c:1648 */
5552 break;
5553
5554 case 477:
5555 #line 2587 "util/configparser.y" /* yacc.c:1648 */
5587 #line 5589 "util/configparser.c" /* yacc.c:1648 */
5588 break;
5589
5590 case 478:
5591 #line 2605 "util/configparser.y" /* yacc.c:1648 */
55565592 {
55575593 OUTYY(("\nP(dnstap:)\n"));
55585594 }
5559 #line 5561 "util/configparser.c" /* yacc.c:1648 */
5560 break;
5561
5562 case 492:
5563 #line 2604 "util/configparser.y" /* yacc.c:1648 */
5595 #line 5597 "util/configparser.c" /* yacc.c:1648 */
5596 break;
5597
5598 case 493:
5599 #line 2622 "util/configparser.y" /* yacc.c:1648 */
55645600 {
55655601 OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
55665602 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
55685604 else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
55695605 free((yyvsp[0].str));
55705606 }
5571 #line 5573 "util/configparser.c" /* yacc.c:1648 */
5572 break;
5573
5574 case 493:
5575 #line 2613 "util/configparser.y" /* yacc.c:1648 */
5607 #line 5609 "util/configparser.c" /* yacc.c:1648 */
5608 break;
5609
5610 case 494:
5611 #line 2631 "util/configparser.y" /* yacc.c:1648 */
55765612 {
55775613 OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
55785614 free(cfg_parser->cfg->dnstap_socket_path);
55795615 cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
55805616 }
5581 #line 5583 "util/configparser.c" /* yacc.c:1648 */
5582 break;
5583
5584 case 494:
5585 #line 2620 "util/configparser.y" /* yacc.c:1648 */
5617 #line 5619 "util/configparser.c" /* yacc.c:1648 */
5618 break;
5619
5620 case 495:
5621 #line 2638 "util/configparser.y" /* yacc.c:1648 */
55865622 {
55875623 OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
55885624 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
55905626 else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
55915627 free((yyvsp[0].str));
55925628 }
5593 #line 5595 "util/configparser.c" /* yacc.c:1648 */
5594 break;
5595
5596 case 495:
5597 #line 2629 "util/configparser.y" /* yacc.c:1648 */
5629 #line 5631 "util/configparser.c" /* yacc.c:1648 */
5630 break;
5631
5632 case 496:
5633 #line 2647 "util/configparser.y" /* yacc.c:1648 */
55985634 {
55995635 OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
56005636 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56025638 else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
56035639 free((yyvsp[0].str));
56045640 }
5605 #line 5607 "util/configparser.c" /* yacc.c:1648 */
5606 break;
5607
5608 case 496:
5609 #line 2638 "util/configparser.y" /* yacc.c:1648 */
5641 #line 5643 "util/configparser.c" /* yacc.c:1648 */
5642 break;
5643
5644 case 497:
5645 #line 2656 "util/configparser.y" /* yacc.c:1648 */
56105646 {
56115647 OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
56125648 free(cfg_parser->cfg->dnstap_identity);
56135649 cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
56145650 }
5615 #line 5617 "util/configparser.c" /* yacc.c:1648 */
5616 break;
5617
5618 case 497:
5619 #line 2645 "util/configparser.y" /* yacc.c:1648 */
5651 #line 5653 "util/configparser.c" /* yacc.c:1648 */
5652 break;
5653
5654 case 498:
5655 #line 2663 "util/configparser.y" /* yacc.c:1648 */
56205656 {
56215657 OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
56225658 free(cfg_parser->cfg->dnstap_version);
56235659 cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
56245660 }
5625 #line 5627 "util/configparser.c" /* yacc.c:1648 */
5626 break;
5627
5628 case 498:
5629 #line 2652 "util/configparser.y" /* yacc.c:1648 */
5661 #line 5663 "util/configparser.c" /* yacc.c:1648 */
5662 break;
5663
5664 case 499:
5665 #line 2670 "util/configparser.y" /* yacc.c:1648 */
56305666 {
56315667 OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
56325668 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56355671 (strcmp((yyvsp[0].str), "yes")==0);
56365672 free((yyvsp[0].str));
56375673 }
5638 #line 5640 "util/configparser.c" /* yacc.c:1648 */
5639 break;
5640
5641 case 499:
5642 #line 2662 "util/configparser.y" /* yacc.c:1648 */
5674 #line 5676 "util/configparser.c" /* yacc.c:1648 */
5675 break;
5676
5677 case 500:
5678 #line 2680 "util/configparser.y" /* yacc.c:1648 */
56435679 {
56445680 OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
56455681 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56485684 (strcmp((yyvsp[0].str), "yes")==0);
56495685 free((yyvsp[0].str));
56505686 }
5651 #line 5653 "util/configparser.c" /* yacc.c:1648 */
5652 break;
5653
5654 case 500:
5655 #line 2672 "util/configparser.y" /* yacc.c:1648 */
5687 #line 5689 "util/configparser.c" /* yacc.c:1648 */
5688 break;
5689
5690 case 501:
5691 #line 2690 "util/configparser.y" /* yacc.c:1648 */
56565692 {
56575693 OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
56585694 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56615697 (strcmp((yyvsp[0].str), "yes")==0);
56625698 free((yyvsp[0].str));
56635699 }
5664 #line 5666 "util/configparser.c" /* yacc.c:1648 */
5665 break;
5666
5667 case 501:
5668 #line 2682 "util/configparser.y" /* yacc.c:1648 */
5700 #line 5702 "util/configparser.c" /* yacc.c:1648 */
5701 break;
5702
5703 case 502:
5704 #line 2700 "util/configparser.y" /* yacc.c:1648 */
56695705 {
56705706 OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
56715707 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56745710 (strcmp((yyvsp[0].str), "yes")==0);
56755711 free((yyvsp[0].str));
56765712 }
5677 #line 5679 "util/configparser.c" /* yacc.c:1648 */
5678 break;
5679
5680 case 502:
5681 #line 2692 "util/configparser.y" /* yacc.c:1648 */
5713 #line 5715 "util/configparser.c" /* yacc.c:1648 */
5714 break;
5715
5716 case 503:
5717 #line 2710 "util/configparser.y" /* yacc.c:1648 */
56825718 {
56835719 OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
56845720 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56875723 (strcmp((yyvsp[0].str), "yes")==0);
56885724 free((yyvsp[0].str));
56895725 }
5690 #line 5692 "util/configparser.c" /* yacc.c:1648 */
5691 break;
5692
5693 case 503:
5694 #line 2702 "util/configparser.y" /* yacc.c:1648 */
5726 #line 5728 "util/configparser.c" /* yacc.c:1648 */
5727 break;
5728
5729 case 504:
5730 #line 2720 "util/configparser.y" /* yacc.c:1648 */
56955731 {
56965732 OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
56975733 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57005736 (strcmp((yyvsp[0].str), "yes")==0);
57015737 free((yyvsp[0].str));
57025738 }
5703 #line 5705 "util/configparser.c" /* yacc.c:1648 */
5704 break;
5705
5706 case 504:
5707 #line 2712 "util/configparser.y" /* yacc.c:1648 */
5739 #line 5741 "util/configparser.c" /* yacc.c:1648 */
5740 break;
5741
5742 case 505:
5743 #line 2730 "util/configparser.y" /* yacc.c:1648 */
57085744 {
57095745 OUTYY(("\nP(python:)\n"));
57105746 }
5711 #line 5713 "util/configparser.c" /* yacc.c:1648 */
5712 break;
5713
5714 case 508:
5715 #line 2721 "util/configparser.y" /* yacc.c:1648 */
5747 #line 5749 "util/configparser.c" /* yacc.c:1648 */
5748 break;
5749
5750 case 509:
5751 #line 2739 "util/configparser.y" /* yacc.c:1648 */
57165752 {
57175753 OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
5718 free(cfg_parser->cfg->python_script);
5719 cfg_parser->cfg->python_script = (yyvsp[0].str);
5720 }
5721 #line 5723 "util/configparser.c" /* yacc.c:1648 */
5722 break;
5723
5724 case 509:
5725 #line 2727 "util/configparser.y" /* yacc.c:1648 */
5754 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
5755 yyerror("out of memory");
5756 }
5757 #line 5759 "util/configparser.c" /* yacc.c:1648 */
5758 break;
5759
5760 case 510:
5761 #line 2745 "util/configparser.y" /* yacc.c:1648 */
57265762 {
57275763 OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
57285764 if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57315767 (strcmp((yyvsp[0].str), "yes")==0);
57325768 free((yyvsp[0].str));
57335769 }
5734 #line 5736 "util/configparser.c" /* yacc.c:1648 */
5735 break;
5736
5737 case 510:
5738 #line 2737 "util/configparser.y" /* yacc.c:1648 */
5770 #line 5772 "util/configparser.c" /* yacc.c:1648 */
5771 break;
5772
5773 case 511:
5774 #line 2755 "util/configparser.y" /* yacc.c:1648 */
57395775 {
57405776 OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
57415777 free(cfg_parser->cfg->log_identity);
57425778 cfg_parser->cfg->log_identity = (yyvsp[0].str);
57435779 }
5744 #line 5746 "util/configparser.c" /* yacc.c:1648 */
5745 break;
5746
5747 case 511:
5748 #line 2744 "util/configparser.y" /* yacc.c:1648 */
5780 #line 5782 "util/configparser.c" /* yacc.c:1648 */
5781 break;
5782
5783 case 512:
5784 #line 2762 "util/configparser.y" /* yacc.c:1648 */
57495785 {
57505786 OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
57515787 validate_respip_action((yyvsp[0].str));
57535789 (yyvsp[-1].str), (yyvsp[0].str)))
57545790 fatal_exit("out of memory adding response-ip");
57555791 }
5756 #line 5758 "util/configparser.c" /* yacc.c:1648 */
5757 break;
5758
5759 case 512:
5760 #line 2753 "util/configparser.y" /* yacc.c:1648 */
5792 #line 5794 "util/configparser.c" /* yacc.c:1648 */
5793 break;
5794
5795 case 513:
5796 #line 2771 "util/configparser.y" /* yacc.c:1648 */
57615797 {
57625798 OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
57635799 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
57645800 (yyvsp[-1].str), (yyvsp[0].str)))
57655801 fatal_exit("out of memory adding response-ip-data");
57665802 }
5767 #line 5769 "util/configparser.c" /* yacc.c:1648 */
5768 break;
5769
5770 case 513:
5771 #line 2761 "util/configparser.y" /* yacc.c:1648 */
5803 #line 5805 "util/configparser.c" /* yacc.c:1648 */
5804 break;
5805
5806 case 514:
5807 #line 2779 "util/configparser.y" /* yacc.c:1648 */
57725808 {
57735809 OUTYY(("\nP(dnscrypt:)\n"));
57745810 }
5775 #line 5777 "util/configparser.c" /* yacc.c:1648 */
5776 break;
5777
5778 case 526:
5779 #line 2777 "util/configparser.y" /* yacc.c:1648 */
5811 #line 5813 "util/configparser.c" /* yacc.c:1648 */
5812 break;
5813
5814 case 527:
5815 #line 2795 "util/configparser.y" /* yacc.c:1648 */
57805816 {
57815817 OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
57825818 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57845820 else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
57855821 free((yyvsp[0].str));
57865822 }
5787 #line 5789 "util/configparser.c" /* yacc.c:1648 */
5788 break;
5789
5790 case 527:
5791 #line 2787 "util/configparser.y" /* yacc.c:1648 */
5823 #line 5825 "util/configparser.c" /* yacc.c:1648 */
5824 break;
5825
5826 case 528:
5827 #line 2805 "util/configparser.y" /* yacc.c:1648 */
57925828 {
57935829 OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
57945830 if(atoi((yyvsp[0].str)) == 0)
57965832 else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
57975833 free((yyvsp[0].str));
57985834 }
5799 #line 5801 "util/configparser.c" /* yacc.c:1648 */
5800 break;
5801
5802 case 528:
5803 #line 2796 "util/configparser.y" /* yacc.c:1648 */
5835 #line 5837 "util/configparser.c" /* yacc.c:1648 */
5836 break;
5837
5838 case 529:
5839 #line 2814 "util/configparser.y" /* yacc.c:1648 */
58045840 {
58055841 OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
58065842 free(cfg_parser->cfg->dnscrypt_provider);
58075843 cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
58085844 }
5809 #line 5811 "util/configparser.c" /* yacc.c:1648 */
5810 break;
5811
5812 case 529:
5813 #line 2803 "util/configparser.y" /* yacc.c:1648 */
5845 #line 5847 "util/configparser.c" /* yacc.c:1648 */
5846 break;
5847
5848 case 530:
5849 #line 2821 "util/configparser.y" /* yacc.c:1648 */
58145850 {
58155851 OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
58165852 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
58185854 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
58195855 fatal_exit("out of memory adding dnscrypt-provider-cert");
58205856 }
5821 #line 5823 "util/configparser.c" /* yacc.c:1648 */
5822 break;
5823
5824 case 530:
5825 #line 2812 "util/configparser.y" /* yacc.c:1648 */
5857 #line 5859 "util/configparser.c" /* yacc.c:1648 */
5858 break;
5859
5860 case 531:
5861 #line 2830 "util/configparser.y" /* yacc.c:1648 */
58265862 {
58275863 OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
58285864 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
58295865 fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
58305866 }
5831 #line 5833 "util/configparser.c" /* yacc.c:1648 */
5832 break;
5833
5834 case 531:
5835 #line 2819 "util/configparser.y" /* yacc.c:1648 */
5867 #line 5869 "util/configparser.c" /* yacc.c:1648 */
5868 break;
5869
5870 case 532:
5871 #line 2837 "util/configparser.y" /* yacc.c:1648 */
58365872 {
58375873 OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
58385874 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
58405876 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
58415877 fatal_exit("out of memory adding dnscrypt-secret-key");
58425878 }
5843 #line 5845 "util/configparser.c" /* yacc.c:1648 */
5844 break;
5845
5846 case 532:
5847 #line 2828 "util/configparser.y" /* yacc.c:1648 */
5879 #line 5881 "util/configparser.c" /* yacc.c:1648 */
5880 break;
5881
5882 case 533:
5883 #line 2846 "util/configparser.y" /* yacc.c:1648 */
58485884 {
58495885 OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
58505886 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
58515887 yyerror("memory size expected");
58525888 free((yyvsp[0].str));
58535889 }
5854 #line 5856 "util/configparser.c" /* yacc.c:1648 */
5855 break;
5856
5857 case 533:
5858 #line 2836 "util/configparser.y" /* yacc.c:1648 */
5890 #line 5892 "util/configparser.c" /* yacc.c:1648 */
5891 break;
5892
5893 case 534:
5894 #line 2854 "util/configparser.y" /* yacc.c:1648 */
58595895 {
58605896 OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
58615897 if(atoi((yyvsp[0].str)) == 0)
58675903 }
58685904 free((yyvsp[0].str));
58695905 }
5870 #line 5872 "util/configparser.c" /* yacc.c:1648 */
5871 break;
5872
5873 case 534:
5874 #line 2849 "util/configparser.y" /* yacc.c:1648 */
5906 #line 5908 "util/configparser.c" /* yacc.c:1648 */
5907 break;
5908
5909 case 535:
5910 #line 2867 "util/configparser.y" /* yacc.c:1648 */
58755911 {
58765912 OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
58775913 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
58785914 yyerror("memory size expected");
58795915 free((yyvsp[0].str));
58805916 }
5881 #line 5883 "util/configparser.c" /* yacc.c:1648 */
5882 break;
5883
5884 case 535:
5885 #line 2857 "util/configparser.y" /* yacc.c:1648 */
5917 #line 5919 "util/configparser.c" /* yacc.c:1648 */
5918 break;
5919
5920 case 536:
5921 #line 2875 "util/configparser.y" /* yacc.c:1648 */
58865922 {
58875923 OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
58885924 if(atoi((yyvsp[0].str)) == 0)
58945930 }
58955931 free((yyvsp[0].str));
58965932 }
5897 #line 5899 "util/configparser.c" /* yacc.c:1648 */
5898 break;
5899
5900 case 536:
5901 #line 2870 "util/configparser.y" /* yacc.c:1648 */
5933 #line 5935 "util/configparser.c" /* yacc.c:1648 */
5934 break;
5935
5936 case 537:
5937 #line 2888 "util/configparser.y" /* yacc.c:1648 */
59025938 {
59035939 OUTYY(("\nP(cachedb:)\n"));
59045940 }
5905 #line 5907 "util/configparser.c" /* yacc.c:1648 */
5906 break;
5907
5908 case 544:
5909 #line 2880 "util/configparser.y" /* yacc.c:1648 */
5941 #line 5943 "util/configparser.c" /* yacc.c:1648 */
5942 break;
5943
5944 case 545:
5945 #line 2898 "util/configparser.y" /* yacc.c:1648 */
59105946 {
59115947 #ifdef USE_CACHEDB
59125948 OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
59205956 free((yyvsp[0].str));
59215957 #endif
59225958 }
5923 #line 5925 "util/configparser.c" /* yacc.c:1648 */
5924 break;
5925
5926 case 545:
5927 #line 2895 "util/configparser.y" /* yacc.c:1648 */
5959 #line 5961 "util/configparser.c" /* yacc.c:1648 */
5960 break;
5961
5962 case 546:
5963 #line 2913 "util/configparser.y" /* yacc.c:1648 */
59285964 {
59295965 #ifdef USE_CACHEDB
59305966 OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
59385974 free((yyvsp[0].str));
59395975 #endif
59405976 }
5941 #line 5943 "util/configparser.c" /* yacc.c:1648 */
5942 break;
5943
5944 case 546:
5945 #line 2910 "util/configparser.y" /* yacc.c:1648 */
5977 #line 5979 "util/configparser.c" /* yacc.c:1648 */
5978 break;
5979
5980 case 547:
5981 #line 2928 "util/configparser.y" /* yacc.c:1648 */
59465982 {
59475983 #if defined(USE_CACHEDB) && defined(USE_REDIS)
59485984 OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
59535989 free((yyvsp[0].str));
59545990 #endif
59555991 }
5956 #line 5958 "util/configparser.c" /* yacc.c:1648 */
5957 break;
5958
5959 case 547:
5960 #line 2922 "util/configparser.y" /* yacc.c:1648 */
5992 #line 5994 "util/configparser.c" /* yacc.c:1648 */
5993 break;
5994
5995 case 548:
5996 #line 2940 "util/configparser.y" /* yacc.c:1648 */
59615997 {
59625998 #if defined(USE_CACHEDB) && defined(USE_REDIS)
59635999 int port;
59716007 #endif
59726008 free((yyvsp[0].str));
59736009 }
5974 #line 5976 "util/configparser.c" /* yacc.c:1648 */
5975 break;
5976
5977 case 548:
5978 #line 2937 "util/configparser.y" /* yacc.c:1648 */
6010 #line 6012 "util/configparser.c" /* yacc.c:1648 */
6011 break;
6012
6013 case 549:
6014 #line 2955 "util/configparser.y" /* yacc.c:1648 */
59796015 {
59806016 #if defined(USE_CACHEDB) && defined(USE_REDIS)
59816017 OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
59876023 #endif
59886024 free((yyvsp[0].str));
59896025 }
5990 #line 5992 "util/configparser.c" /* yacc.c:1648 */
5991 break;
5992
5993 case 549:
5994 #line 2950 "util/configparser.y" /* yacc.c:1648 */
6026 #line 6028 "util/configparser.c" /* yacc.c:1648 */
6027 break;
6028
6029 case 550:
6030 #line 2968 "util/configparser.y" /* yacc.c:1648 */
59956031 {
59966032 OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
59976033 if (atoi((yyvsp[0].str)) < 0)
60016037 fatal_exit("out of memory adding tcp connection limit");
60026038 }
60036039 }
6004 #line 6006 "util/configparser.c" /* yacc.c:1648 */
6005 break;
6006
6007
6008 #line 6010 "util/configparser.c" /* yacc.c:1648 */
6040 #line 6042 "util/configparser.c" /* yacc.c:1648 */
6041 break;
6042
6043 case 551:
6044 #line 2979 "util/configparser.y" /* yacc.c:1648 */
6045 {
6046 OUTYY(("\nP(ipset:)\n"));
6047 }
6048 #line 6050 "util/configparser.c" /* yacc.c:1648 */
6049 break;
6050
6051 case 556:
6052 #line 2988 "util/configparser.y" /* yacc.c:1648 */
6053 {
6054 #ifdef USE_IPSET
6055 OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
6056 if(cfg_parser->cfg->ipset_name_v4)
6057 yyerror("ipset name v4 override, there must be one "
6058 "name for ip v4");
6059 free(cfg_parser->cfg->ipset_name_v4);
6060 cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
6061 #else
6062 OUTYY(("P(Compiled without ipset, ignoring)\n"));
6063 free((yyvsp[0].str));
6064 #endif
6065 }
6066 #line 6068 "util/configparser.c" /* yacc.c:1648 */
6067 break;
6068
6069 case 557:
6070 #line 3003 "util/configparser.y" /* yacc.c:1648 */
6071 {
6072 #ifdef USE_IPSET
6073 OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
6074 if(cfg_parser->cfg->ipset_name_v6)
6075 yyerror("ipset name v6 override, there must be one "
6076 "name for ip v6");
6077 free(cfg_parser->cfg->ipset_name_v6);
6078 cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
6079 #else
6080 OUTYY(("P(Compiled without ipset, ignoring)\n"));
6081 free((yyvsp[0].str));
6082 #endif
6083 }
6084 #line 6086 "util/configparser.c" /* yacc.c:1648 */
6085 break;
6086
6087
6088 #line 6090 "util/configparser.c" /* yacc.c:1648 */
60096089 default: break;
60106090 }
60116091 /* User semantic actions sometimes alter yychar, and that requires
62336313 #endif
62346314 return yyresult;
62356315 }
6236 #line 2960 "util/configparser.y" /* yacc.c:1907 */
6316 #line 3017 "util/configparser.y" /* yacc.c:1907 */
62376317
62386318
62396319 /* parse helper routines could be here */
62536333 "always_refuse or always_nxdomain");
62546334 }
62556335 }
6336
6337
307307 VAR_STREAM_WAIT_SIZE = 518,
308308 VAR_TLS_CIPHERS = 519,
309309 VAR_TLS_CIPHERSUITES = 520,
310 VAR_TLS_SESSION_TICKET_KEYS = 521
310 VAR_TLS_SESSION_TICKET_KEYS = 521,
311 VAR_IPSET = 522,
312 VAR_IPSET_NAME_V4 = 523,
313 VAR_IPSET_NAME_V6 = 524
311314 };
312315 #endif
313316 /* Tokens. */
575578 #define VAR_TLS_CIPHERS 519
576579 #define VAR_TLS_CIPHERSUITES 520
577580 #define VAR_TLS_SESSION_TICKET_KEYS 521
581 #define VAR_IPSET 522
582 #define VAR_IPSET_NAME_V4 523
583 #define VAR_IPSET_NAME_V6 524
578584
579585 /* Value type. */
580586 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
585591
586592 char* str;
587593
588 #line 590 "util/configparser.h" /* yacc.c:1910 */
594 #line 596 "util/configparser.h" /* yacc.c:1910 */
589595 };
590596
591597 typedef union YYSTYPE YYSTYPE;
166166 %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY
167167 %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES
168168 %token VAR_TLS_SESSION_TICKET_KEYS
169 %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6
169170
170171 %%
171172 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
173174 forwardstart contents_forward | pythonstart contents_py |
174175 rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
175176 dnscstart contents_dnsc | cachedbstart contents_cachedb |
176 authstart contents_auth
177 ipsetstart contents_ipset | authstart contents_auth
177178 ;
178179
179180 /* server: declaration */
17821783 && strcmp($3, "always_refuse")!=0
17831784 && strcmp($3, "always_nxdomain")!=0
17841785 && strcmp($3, "noview")!=0
1785 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) {
1786 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0
1787 && strcmp($3, "inform_redirect") != 0
1788 && strcmp($3, "ipset") != 0) {
17861789 yyerror("local-zone type: expected static, deny, "
17871790 "refuse, redirect, transparent, "
17881791 "typetransparent, inform, inform_deny, "
1789 "always_transparent, always_refuse, "
1790 "always_nxdomain, noview or nodefault");
1792 "inform_redirect, always_transparent, "
1793 "always_refuse, always_nxdomain, noview "
1794 ", nodefault or ipset");
17911795 free($2);
17921796 free($3);
17931797 } else if(strcmp($3, "nodefault")==0) {
17951799 local_zones_nodefault, $2))
17961800 fatal_exit("out of memory adding local-zone");
17971801 free($3);
1802 #ifdef USE_IPSET
1803 } else if(strcmp($3, "ipset")==0) {
1804 if(!cfg_strlist_insert(&cfg_parser->cfg->
1805 local_zones_ipset, $2))
1806 fatal_exit("out of memory adding local-zone");
1807 free($3);
1808 #endif
17981809 } else {
17991810 if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
18001811 $2, $3))
24522463 local_zones_nodefault, $2))
24532464 fatal_exit("out of memory adding local-zone");
24542465 free($3);
2466 #ifdef USE_IPSET
2467 } else if(strcmp($3, "ipset")==0) {
2468 if(!cfg_strlist_insert(&cfg_parser->cfg->views->
2469 local_zones_ipset, $2))
2470 fatal_exit("out of memory adding local-zone");
2471 free($3);
2472 #endif
24552473 } else {
24562474 if(!cfg_str2list_insert(
24572475 &cfg_parser->cfg->views->local_zones,
27192737 py_script: VAR_PYTHON_SCRIPT STRING_ARG
27202738 {
27212739 OUTYY(("P(python-script:%s)\n", $2));
2722 free(cfg_parser->cfg->python_script);
2723 cfg_parser->cfg->python_script = $2;
2740 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2))
2741 yyerror("out of memory");
27242742 }
27252743 server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG
27262744 {
29562974 }
29572975 }
29582976 ;
2977 ipsetstart: VAR_IPSET
2978 {
2979 OUTYY(("\nP(ipset:)\n"));
2980 }
2981 ;
2982 contents_ipset: contents_ipset content_ipset
2983 | ;
2984 content_ipset: ipset_name_v4 | ipset_name_v6
2985 ;
2986 ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG
2987 {
2988 #ifdef USE_IPSET
2989 OUTYY(("P(name-v4:%s)\n", $2));
2990 if(cfg_parser->cfg->ipset_name_v4)
2991 yyerror("ipset name v4 override, there must be one "
2992 "name for ip v4");
2993 free(cfg_parser->cfg->ipset_name_v4);
2994 cfg_parser->cfg->ipset_name_v4 = $2;
2995 #else
2996 OUTYY(("P(Compiled without ipset, ignoring)\n"));
2997 free($2);
2998 #endif
2999 }
3000 ;
3001 ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG
3002 {
3003 #ifdef USE_IPSET
3004 OUTYY(("P(name-v6:%s)\n", $2));
3005 if(cfg_parser->cfg->ipset_name_v6)
3006 yyerror("ipset name v6 override, there must be one "
3007 "name for ip v6");
3008 free(cfg_parser->cfg->ipset_name_v6);
3009 cfg_parser->cfg->ipset_name_v6 = $2;
3010 #else
3011 OUTYY(("P(Compiled without ipset, ignoring)\n"));
3012 free($2);
3013 #endif
3014 }
3015 ;
29593016 %%
29603017
29613018 /* parse helper routines could be here */
29753032 "always_refuse or always_nxdomain");
29763033 }
29773034 }
3035
3036
638638 return 0;
639639 }
640640
641 int
642 reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
643 uint16_t id, uint16_t flags, sldns_buffer* buffer, time_t timenow,
641 static int
642 negative_answer(struct reply_info* rep) {
643 size_t i;
644 int ns_seen = 0;
645 if(FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN)
646 return 1;
647 if(FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR &&
648 rep->an_numrrsets != 0)
649 return 0; /* positive */
650 if(FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NOERROR &&
651 FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NXDOMAIN)
652 return 0;
653 for(i=rep->an_numrrsets; i<rep->an_numrrsets+rep->ns_numrrsets; i++){
654 if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_SOA)
655 return 1;
656 if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS)
657 ns_seen = 1;
658 }
659 if(ns_seen) return 0; /* could be referral, NS, but no SOA */
660 return 1;
661 }
662
663 int
664 reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
665 uint16_t id, uint16_t flags, sldns_buffer* buffer, time_t timenow,
644666 struct regional* region, uint16_t udpsize, int dnssec)
645667 {
646668 uint16_t ancount=0, nscount=0, arcount=0;
647669 struct compress_tree_node* tree = 0;
648670 int r;
649 size_t rr_offset;
671 size_t rr_offset;
650672
651673 sldns_buffer_clear(buffer);
652674 if(udpsize < sldns_buffer_limit(buffer))
662684
663685 /* insert query section */
664686 if(rep->qdcount) {
665 if((r=insert_query(qinfo, &tree, buffer, region)) !=
687 if((r=insert_query(qinfo, &tree, buffer, region)) !=
666688 RETVAL_OK) {
667689 if(r == RETVAL_TRUNC) {
668690 /* create truncated message */
706728 }
707729
708730 /* insert answer section */
709 if((r=insert_section(rep, rep->an_numrrsets, &ancount, buffer,
710 0, timenow, region, &tree, LDNS_SECTION_ANSWER, qinfo->qtype,
731 if((r=insert_section(rep, rep->an_numrrsets, &ancount, buffer,
732 0, timenow, region, &tree, LDNS_SECTION_ANSWER, qinfo->qtype,
711733 dnssec, rr_offset)) != RETVAL_OK) {
712734 if(r == RETVAL_TRUNC) {
713735 /* create truncated message */
723745 /* if response is positive answer, auth/add sections are not required */
724746 if( ! (MINIMAL_RESPONSES && positive_answer(rep, qinfo->qtype)) ) {
725747 /* insert auth section */
726 if((r=insert_section(rep, rep->ns_numrrsets, &nscount, buffer,
748 if((r=insert_section(rep, rep->ns_numrrsets, &nscount, buffer,
727749 rep->an_numrrsets, timenow, region, &tree,
728750 LDNS_SECTION_AUTHORITY, qinfo->qtype,
729751 dnssec, rr_offset)) != RETVAL_OK) {
738760 }
739761 sldns_buffer_write_u16_at(buffer, 8, nscount);
740762
741 /* insert add section */
742 if((r=insert_section(rep, rep->ar_numrrsets, &arcount, buffer,
743 rep->an_numrrsets + rep->ns_numrrsets, timenow, region,
744 &tree, LDNS_SECTION_ADDITIONAL, qinfo->qtype,
745 dnssec, rr_offset)) != RETVAL_OK) {
746 if(r == RETVAL_TRUNC) {
747 /* no need to set TC bit, this is the additional */
748 sldns_buffer_write_u16_at(buffer, 10, arcount);
749 sldns_buffer_flip(buffer);
750 return 1;
763 if(! (MINIMAL_RESPONSES && negative_answer(rep))) {
764 /* insert add section */
765 if((r=insert_section(rep, rep->ar_numrrsets, &arcount, buffer,
766 rep->an_numrrsets + rep->ns_numrrsets, timenow, region,
767 &tree, LDNS_SECTION_ADDITIONAL, qinfo->qtype,
768 dnssec, rr_offset)) != RETVAL_OK) {
769 if(r == RETVAL_TRUNC) {
770 /* no need to set TC bit, this is the additional */
771 sldns_buffer_write_u16_at(buffer, 10, arcount);
772 sldns_buffer_flip(buffer);
773 return 1;
774 }
775 return 0;
751776 }
752 return 0;
753 }
754 sldns_buffer_write_u16_at(buffer, 10, arcount);
777 sldns_buffer_write_u16_at(buffer, 10, arcount);
778 }
755779 }
756780 sldns_buffer_flip(buffer);
757781 return 1;
762786 {
763787 size_t rdatalen = 0;
764788 struct edns_option* opt;
765 if(!edns || !edns->edns_present)
789 if(!edns || !edns->edns_present)
766790 return 0;
767791 for(opt = edns->opt_list; opt; opt = opt->next) {
768792 rdatalen += 4 + opt->opt_len;
156156 time_t prefetch_ttl;
157157
158158 /**
159 * Reply TTL extended with serve exipred TTL, to limit time to serve
159 * Reply TTL extended with serve expired TTL, to limit time to serve
160160 * expired message.
161161 */
162162 time_t serve_expired_ttl;
8989 #ifdef CLIENT_SUBNET
9090 #include "edns-subnet/subnetmod.h"
9191 #endif
92 #ifdef USE_IPSET
93 #include "ipset/ipset.h"
94 #endif
9295
9396 int
9497 fptr_whitelist_comm_point(comm_point_callback_type *fptr)
126129 #endif
127130 else if(fptr == &auth_xfer_timer) return 1;
128131 else if(fptr == &auth_xfer_probe_timer_callback) return 1;
132 else if(fptr == &auth_xfer_transfer_timer_callback) return 1;
129133 return 0;
130134 }
131135
356360 }
357361
358362 int
359 fptr_whitelist_modenv_detect_cycle(int (*fptr)(
360 struct module_qstate* qstate, struct query_info* qinfo,
363 fptr_whitelist_modenv_detect_cycle(int (*fptr)(
364 struct module_qstate* qstate, struct query_info* qinfo,
361365 uint16_t flags, int prime, int valrec))
362366 {
363367 if(fptr == &mesh_detect_cycle) return 1;
383387 #ifdef CLIENT_SUBNET
384388 else if(fptr == &subnetmod_init) return 1;
385389 #endif
390 #ifdef USE_IPSET
391 else if(fptr == &ipset_init) return 1;
392 #endif
386393 return 0;
387394 }
388395
405412 #ifdef CLIENT_SUBNET
406413 else if(fptr == &subnetmod_deinit) return 1;
407414 #endif
415 #ifdef USE_IPSET
416 else if(fptr == &ipset_deinit) return 1;
417 #endif
408418 return 0;
409419 }
410420
428438 #ifdef CLIENT_SUBNET
429439 else if(fptr == &subnetmod_operate) return 1;
430440 #endif
441 #ifdef USE_IPSET
442 else if(fptr == &ipset_operate) return 1;
443 #endif
431444 return 0;
432445 }
433446
451464 #ifdef CLIENT_SUBNET
452465 else if(fptr == &subnetmod_inform_super) return 1;
453466 #endif
467 #ifdef USE_IPSET
468 else if(fptr == &ipset_inform_super) return 1;
469 #endif
454470 return 0;
455471 }
456472
474490 #ifdef CLIENT_SUBNET
475491 else if(fptr == &subnetmod_clear) return 1;
476492 #endif
493 #ifdef USE_IPSET
494 else if(fptr == &ipset_clear) return 1;
495 #endif
477496 return 0;
478497 }
479498
495514 #endif
496515 #ifdef CLIENT_SUBNET
497516 else if(fptr == &subnetmod_get_mem) return 1;
517 #endif
518 #ifdef USE_IPSET
519 else if(fptr == &ipset_get_mem) return 1;
498520 #endif
499521 return 0;
500522 }
595617 #endif
596618 return 0;
597619 }
620
18471847 2197,
18481848 2198,
18491849 2199,
1850 2200,
18511850 2201,
18521851 2202,
18531852 2203,
47674766 8088,
47684767 8097,
47694768 8100,
4769 8111,
47704770 8115,
47714771 8116,
47724772 8118,
48634863 8805,
48644864 8807,
48654865 8808,
4866 8809,
48664867 8873,
48674868 8880,
48684869 8883,
312312 struct timeval *now = ev->ev_base->time_tv;
313313 ev->ev_timeout.tv_sec = tv->tv_sec + now->tv_sec;
314314 ev->ev_timeout.tv_usec = tv->tv_usec + now->tv_usec;
315 while(ev->ev_timeout.tv_usec > 1000000) {
315 while(ev->ev_timeout.tv_usec >= 1000000) {
316316 ev->ev_timeout.tv_usec -= 1000000;
317317 ev->ev_timeout.tv_sec++;
318318 }
743743 return 0;
744744 }
745745 #endif
746 #if defined(SSL_OP_NO_RENEGOTIATION)
747 /* disable client renegotiation */
748 if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) &
749 SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION) {
750 log_crypto_err("could not set SSL_OP_NO_RENEGOTIATION");
751 return 0;
752 }
753 #endif
746754 #if defined(SHA256_DIGEST_LENGTH) && defined(USE_ECDSA)
747755 /* if we have sha256, set the cipher list to have no known vulns */
748756 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"))
799807 SSL_CTX* ctx = SSL_CTX_new(SSLv23_server_method());
800808 if(!ctx) {
801809 log_crypto_err("could not SSL_CTX_new");
810 return NULL;
811 }
812 if(!key || key[0] == 0) {
813 log_err("error: no tls-service-key file specified");
814 SSL_CTX_free(ctx);
815 return NULL;
816 }
817 if(!pem || pem[0] == 0) {
818 log_err("error: no tls-service-pem file specified");
819 SSL_CTX_free(ctx);
802820 return NULL;
803821 }
804822 if(!listen_sslctx_setup(ctx)) {
951969 SSL_CTX_free(ctx);
952970 return NULL;
953971 }
972 #if defined(SSL_OP_NO_RENEGOTIATION)
973 /* disable client renegotiation */
974 if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) &
975 SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION) {
976 log_crypto_err("could not set SSL_OP_NO_RENEGOTIATION");
977 return 0;
978 }
979 #endif
954980 if(key && key[0]) {
955981 if(!SSL_CTX_use_certificate_chain_file(ctx, pem)) {
956982 log_err("error in client certificate %s", pem);
10481074 static lock_basic_type *ub_openssl_locks = NULL;
10491075
10501076 /** callback that gets thread id for openssl */
1077 #ifdef HAVE_CRYPTO_THREADID_SET_CALLBACK
1078 static void
1079 ub_crypto_id_cb(CRYPTO_THREADID *id)
1080 {
1081 CRYPTO_THREADID_set_numeric(id, (unsigned long)log_thread_get());
1082 }
1083 #else
10511084 static unsigned long
10521085 ub_crypto_id_cb(void)
10531086 {
10541087 return (unsigned long)log_thread_get();
10551088 }
1089 #endif
10561090
10571091 static void
10581092 ub_crypto_lock_cb(int mode, int type, const char *ATTR_UNUSED(file),
10771111 for(i=0; i<CRYPTO_num_locks(); i++) {
10781112 lock_basic_init(&ub_openssl_locks[i]);
10791113 }
1114 # ifdef HAVE_CRYPTO_THREADID_SET_CALLBACK
1115 CRYPTO_THREADID_set_callback(&ub_crypto_id_cb);
1116 # else
10801117 CRYPTO_set_id_callback(&ub_crypto_id_cb);
1118 # endif
10811119 CRYPTO_set_locking_callback(&ub_crypto_lock_cb);
10821120 #endif /* OPENSSL_THREADS */
10831121 return 1;
10891127 int i;
10901128 if(!ub_openssl_locks)
10911129 return;
1130 # ifdef HAVE_CRYPTO_THREADID_SET_CALLBACK
1131 CRYPTO_THREADID_set_callback(NULL);
1132 # else
10921133 CRYPTO_set_id_callback(NULL);
1134 # endif
10931135 CRYPTO_set_locking_callback(NULL);
10941136 for(i=0; i<CRYPTO_num_locks(); i++) {
10951137 lock_basic_destroy(&ub_openssl_locks[i]);
12181260 struct tls_session_ticket_key *key;
12191261 if(!ticket_keys) return;
12201262 for(key = ticket_keys; key->key_name != NULL; key++) {
1263 /* wipe key data from memory*/
1264 #ifdef HAVE_EXPLICIT_BZERO
1265 explicit_bzero(key->key_name, 80);
1266 #else
1267 memset(key->key_name, 0xdd, 80);
1268 #endif
12211269 free(key->key_name);
12221270 }
12231271 free(ticket_keys);
177177 }
178178 ub_comm_base_now(b);
179179 ub_get_event_sys(b->eb->base, &evnm, &evsys, &evmethod);
180 verbose(VERB_ALGO, "%s %s user %s method.", evnm, evsys, evmethod);
180 verbose(VERB_ALGO, "%s %s uses %s method.", evnm, evsys, evmethod);
181181 return b;
182182 }
183183
925925 }
926926 /* accept incoming connection. */
927927 c_hdl = c->tcp_free;
928 /* clear leftover flags from previous use, and then set the
929 * correct event base for the event structure for libevent */
930 ub_event_free(c_hdl->ev->ev);
931 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);
932 if(!c_hdl->ev->ev) {
933 log_warn("could not ub_event_new, dropped tcp");
934 return;
935 }
928936 log_assert(fd != -1);
929937 (void)fd;
930938 new_fd = comm_point_perform_accept(c, &c_hdl->repinfo.addr,
988996 c->tcp_is_reading = 1;
989997 c->tcp_byte_count = 0;
990998 /* switch from listening(write) to listening(read) */
991 comm_point_stop_listening(c);
992999 if(c->tcp_req_info) {
9931000 tcp_req_info_handle_writedone(c->tcp_req_info);
9941001 } else {
1002 comm_point_stop_listening(c);
9951003 comm_point_start_listening(c, -1, -1);
9961004 }
9971005 }
10051013 if(c->tcp_do_toggle_rw)
10061014 c->tcp_is_reading = 0;
10071015 c->tcp_byte_count = 0;
1008 if(c->type == comm_tcp)
1009 comm_point_stop_listening(c);
10101016 if(c->tcp_req_info) {
10111017 tcp_req_info_handle_readdone(c->tcp_req_info);
10121018 } else {
1019 if(c->type == comm_tcp)
1020 comm_point_stop_listening(c);
10131021 fptr_ok(fptr_whitelist_comm_point(c->callback));
10141022 if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) {
10151023 comm_point_start_listening(c, -1, c->tcp_timeout_msec);
11831191 comm_point_listen_for_rw(c, 0, 1);
11841192 return 1;
11851193 } else if(want == SSL_ERROR_SYSCALL) {
1194 #ifdef ECONNRESET
1195 if(errno == ECONNRESET && verbosity < 2)
1196 return 0; /* silence reset by peer */
1197 #endif
11861198 if(errno != 0)
11871199 log_err("SSL_read syscall: %s",
11881200 strerror(errno));
12271239 comm_point_listen_for_rw(c, 0, 1);
12281240 return 1;
12291241 } else if(want == SSL_ERROR_SYSCALL) {
1242 #ifdef ECONNRESET
1243 if(errno == ECONNRESET && verbosity < 2)
1244 return 0; /* silence reset by peer */
1245 #endif
12301246 if(errno != 0)
12311247 log_err("SSL_read syscall: %s",
12321248 strerror(errno));
12871303 if(want == SSL_ERROR_ZERO_RETURN) {
12881304 return 0; /* closed */
12891305 } else if(want == SSL_ERROR_WANT_READ) {
1290 c->ssl_shake_state = comm_ssl_shake_read;
1306 c->ssl_shake_state = comm_ssl_shake_hs_read;
12911307 comm_point_listen_for_rw(c, 1, 0);
12921308 return 1; /* wait for read condition */
12931309 } else if(want == SSL_ERROR_WANT_WRITE) {
12941310 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
12951311 return 1; /* write more later */
12961312 } else if(want == SSL_ERROR_SYSCALL) {
1313 #ifdef EPIPE
1314 if(errno == EPIPE && verbosity < 2)
1315 return 0; /* silence 'broken pipe' */
1316 #endif
12971317 if(errno != 0)
12981318 log_err("SSL_write syscall: %s",
12991319 strerror(errno));
13211341 if(want == SSL_ERROR_ZERO_RETURN) {
13221342 return 0; /* closed */
13231343 } else if(want == SSL_ERROR_WANT_READ) {
1324 c->ssl_shake_state = comm_ssl_shake_read;
1344 c->ssl_shake_state = comm_ssl_shake_hs_read;
13251345 comm_point_listen_for_rw(c, 1, 0);
13261346 return 1; /* wait for read condition */
13271347 } else if(want == SSL_ERROR_WANT_WRITE) {
13281348 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
13291349 return 1; /* write more later */
13301350 } else if(want == SSL_ERROR_SYSCALL) {
1351 #ifdef EPIPE
1352 if(errno == EPIPE && verbosity < 2)
1353 return 0; /* silence 'broken pipe' */
1354 #endif
13311355 if(errno != 0)
13321356 log_err("SSL_write syscall: %s",
13331357 strerror(errno));
15421566 iov[1].iov_base = sldns_buffer_begin(buffer);
15431567 iov[1].iov_len = sldns_buffer_limit(buffer);
15441568 log_assert(iov[0].iov_len > 0);
1545 log_assert(iov[1].iov_len > 0);
15461569 msg.msg_name = &c->repinfo.addr;
15471570 msg.msg_namelen = c->repinfo.addrlen;
15481571 msg.msg_iov = iov;
16091632 iov[1].iov_base = sldns_buffer_begin(buffer);
16101633 iov[1].iov_len = sldns_buffer_limit(buffer);
16111634 log_assert(iov[0].iov_len > 0);
1612 log_assert(iov[1].iov_len > 0);
16131635 r = writev(fd, iov, 2);
16141636 #else /* HAVE_WRITEV */
16151637 r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count),
16231645 #endif
16241646 if(errno == EINTR || errno == EAGAIN)
16251647 return 1;
1648 #ifdef ECONNRESET
1649 if(errno == ECONNRESET && verbosity < 2)
1650 return 0; /* silence reset by peer */
1651 #endif
16261652 # ifdef HAVE_WRITEV
16271653 log_err_addr("tcp writev", strerror(errno),
16281654 &c->repinfo.addr, c->repinfo.addrlen);
16401666 UB_EV_WRITE);
16411667 return 1;
16421668 }
1669 if(WSAGetLastError() == WSAECONNRESET && verbosity < 2)
1670 return 0; /* silence reset by peer */
16431671 log_err_addr("tcp send s",
16441672 wsa_strerror(WSAGetLastError()),
16451673 &c->repinfo.addr, c->repinfo.addrlen);
16631691 #ifndef USE_WINSOCK
16641692 if(errno == EINTR || errno == EAGAIN)
16651693 return 1;
1694 #ifdef ECONNRESET
1695 if(errno == ECONNRESET && verbosity < 2)
1696 return 0; /* silence reset by peer */
1697 #endif
16661698 log_err_addr("tcp send r", strerror(errno),
16671699 &c->repinfo.addr, c->repinfo.addrlen);
16681700 #else
16721704 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
16731705 return 1;
16741706 }
1707 if(WSAGetLastError() == WSAECONNRESET && verbosity < 2)
1708 return 0; /* silence reset by peer */
16751709 log_err_addr("tcp send r", wsa_strerror(WSAGetLastError()),
16761710 &c->repinfo.addr, c->repinfo.addrlen);
16771711 #endif
17371771 }
17381772 #endif
17391773
1774 if(event&UB_EV_TIMEOUT) {
1775 verbose(VERB_QUERY, "tcp took too long, dropped");
1776 reclaim_tcp_handler(c);
1777 if(!c->tcp_do_close) {
1778 fptr_ok(fptr_whitelist_comm_point(c->callback));
1779 (void)(*c->callback)(c, c->cb_arg,
1780 NETEVENT_TIMEOUT, NULL);
1781 }
1782 return;
1783 }
17401784 if(event&UB_EV_READ) {
17411785 int has_tcpq = (c->tcp_req_info != NULL);
17421786 if(!comm_point_tcp_handle_read(fd, c, 0)) {
17651809 }
17661810 if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again)
17671811 tcp_req_info_read_again(fd, c);
1768 return;
1769 }
1770 if(event&UB_EV_TIMEOUT) {
1771 verbose(VERB_QUERY, "tcp took too long, dropped");
1772 reclaim_tcp_handler(c);
1773 if(!c->tcp_do_close) {
1774 fptr_ok(fptr_whitelist_comm_point(c->callback));
1775 (void)(*c->callback)(c, c->cb_arg,
1776 NETEVENT_TIMEOUT, NULL);
1777 }
17781812 return;
17791813 }
17801814 log_err("Ignored event %d for tcphdl.", event);
18251859 comm_point_listen_for_rw(c, 0, 1);
18261860 return 1;
18271861 } else if(want == SSL_ERROR_SYSCALL) {
1862 #ifdef ECONNRESET
1863 if(errno == ECONNRESET && verbosity < 2)
1864 return 0; /* silence reset by peer */
1865 #endif
18281866 if(errno != 0)
18291867 log_err("SSL_read syscall: %s",
18301868 strerror(errno));
22672305 if(want == SSL_ERROR_ZERO_RETURN) {
22682306 return 0; /* closed */
22692307 } else if(want == SSL_ERROR_WANT_READ) {
2270 c->ssl_shake_state = comm_ssl_shake_read;
2308 c->ssl_shake_state = comm_ssl_shake_hs_read;
22712309 comm_point_listen_for_rw(c, 1, 0);
22722310 return 1; /* wait for read condition */
22732311 } else if(want == SSL_ERROR_WANT_WRITE) {
22742312 return 1; /* write more later */
22752313 } else if(want == SSL_ERROR_SYSCALL) {
2314 #ifdef EPIPE
2315 if(errno == EPIPE && verbosity < 2)
2316 return 0; /* silence 'broken pipe' */
2317 #endif
22762318 if(errno != 0)
22772319 log_err("SSL_write syscall: %s",
22782320 strerror(errno));
23812423 log_assert(c->type == comm_http);
23822424 ub_comm_base_now(c->ev->base);
23832425
2426 if(event&UB_EV_TIMEOUT) {
2427 verbose(VERB_QUERY, "http took too long, dropped");
2428 reclaim_http_handler(c);
2429 if(!c->tcp_do_close) {
2430 fptr_ok(fptr_whitelist_comm_point(c->callback));
2431 (void)(*c->callback)(c, c->cb_arg,
2432 NETEVENT_TIMEOUT, NULL);
2433 }
2434 return;
2435 }
23842436 if(event&UB_EV_READ) {
23852437 if(!comm_point_http_handle_read(fd, c)) {
23862438 reclaim_http_handler(c);
24022454 (void)(*c->callback)(c, c->cb_arg,
24032455 NETEVENT_CLOSED, NULL);
24042456 }
2405 }
2406 return;
2407 }
2408 if(event&UB_EV_TIMEOUT) {
2409 verbose(VERB_QUERY, "http took too long, dropped");
2410 reclaim_http_handler(c);
2411 if(!c->tcp_do_close) {
2412 fptr_ok(fptr_whitelist_comm_point(c->callback));
2413 (void)(*c->callback)(c, c->cb_arg,
2414 NETEVENT_TIMEOUT, NULL);
24152457 }
24162458 return;
24172459 }
31373179 void
31383180 comm_point_start_listening(struct comm_point* c, int newfd, int msec)
31393181 {
3140 verbose(VERB_ALGO, "comm point start listening %d",
3141 c->fd==-1?newfd:c->fd);
3182 verbose(VERB_ALGO, "comm point start listening %d (%d msec)",
3183 c->fd==-1?newfd:c->fd, msec);
31423184 if(c->type == comm_tcp_accept && !c->tcp_free) {
31433185 /* no use to start listening no free slots. */
31443186 return;
00 /*
1 May 2019(Wouter) patch to enable the valgrind clean implementation all the
2 time. This enables better security audit and checks, which is better
3 than the speedup. Git issue #30. Renamed the define ARRAY_CLEAN_ACCESS.
14 February 2013(Wouter) patch defines for BSD endianness, from Brad Smith.
25 January 2012(Wouter) added randomised initial value, fallout from 28c3.
36 March 2007(Wouter) adapted from lookup3.c original, add config.h include.
4346 -------------------------------------------------------------------------------
4447 */
4548 /*#define SELF_TEST 1*/
49 #define ARRAY_CLEAN_ACCESS 1
4650
4751 #include "config.h"
4852 #include "util/storage/lookup3.h"
335339 u.ptr = key;
336340 if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
337341 const uint32_t *k = (const uint32_t *)key; /* read 32-bit chunks */
338 #ifdef VALGRIND
342 #ifdef ARRAY_CLEAN_ACCESS
339343 const uint8_t *k8;
340344 #endif
341345
360364 * still catch it and complain. The masking trick does make the hash
361365 * noticeably faster for short strings (like English words).
362366 */
363 #ifndef VALGRIND
367 #ifndef ARRAY_CLEAN_ACCESS
364368
365369 switch(length)
366370 {
294294 if (!ev)
295295 return NULL;
296296
297 #ifndef HAVE_EVENT_ASSIGN
297298 event_set(ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg);
298299 if (event_base_set(AS_EVENT_BASE(base), ev) != 0) {
299300 free(ev);
300301 return NULL;
301302 }
303 #else
304 if (event_assign(ev, AS_EVENT_BASE(base), fd, bits, cb, arg) != 0) {
305 free(ev);
306 return NULL;
307 }
308 #endif
302309 return AS_UB_EVENT(ev);
303310 }
304311
311318 if (!ev)
312319 return NULL;
313320
321 #if !HAVE_DECL_EVSIGNAL_ASSIGN
314322 signal_set(ev, fd, NATIVE_BITS_CB(cb), arg);
315323 if (event_base_set(AS_EVENT_BASE(base), ev) != 0) {
316324 free(ev);
317325 return NULL;
318326 }
327 #else
328 if (evsignal_assign(ev, AS_EVENT_BASE(base), fd, cb, arg) != 0) {
329 free(ev);
330 return NULL;
331 }
332 #endif
319333 return AS_UB_EVENT(ev);
320334 }
321335
557557 struct timeval *now = ev->ev_base->time_tv;
558558 ev->ev_timeout.tv_sec = tv->tv_sec + now->tv_sec;
559559 ev->ev_timeout.tv_usec = tv->tv_usec + now->tv_usec;
560 while(ev->ev_timeout.tv_usec > 1000000) {
560 while(ev->ev_timeout.tv_usec >= 1000000) {
561561 ev->ev_timeout.tv_usec -= 1000000;
562562 ev->ev_timeout.tv_sec++;
563563 }
11741174 {
11751175 FILE* out;
11761176 char* fname = tp->autr->file;
1177 long long llvalue;
11771178 char tempf[2048];
11781179 log_assert(tp->autr);
11791180 if(!env) {
11801181 log_err("autr_write_file: Module environment is NULL.");
11811182 return;
11821183 }
1183 /* unique name with pid number and thread number */
1184 snprintf(tempf, sizeof(tempf), "%s.%d-%d", fname, (int)getpid(),
1185 env->worker?*(int*)env->worker:0);
1184 /* unique name with pid number, thread number, and struct pointer
1185 * (the pointer uniquifies for multiple libunbound contexts) */
1186 #if defined(SIZE_MAX) && defined(UINT32_MAX) && (UINT32_MAX == SIZE_MAX || INT32_MAX == SIZE_MAX)
1187 /* avoid warning about upcast on 32bit systems */
1188 llvalue = (unsigned long)tp;
1189 #else
1190 llvalue = (unsigned long long)tp;
1191 #endif
1192 #ifndef USE_WINSOCK
1193 snprintf(tempf, sizeof(tempf), "%s.%d-%d-%llx", fname, (int)getpid(),
1194 env->worker?*(int*)env->worker:0, llvalue);
1195 #else
1196 snprintf(tempf, sizeof(tempf), "%s.%d-%d-%I64x", fname, (int)getpid(),
1197 env->worker?*(int*)env->worker:0, llvalue);
1198 #endif
11861199 verbose(VERB_ALGO, "autotrust: write to disk: %s", tempf);
11871200 out = fopen(tempf, "w");
11881201 if(!out) {