From 2a5e0b799cd6aae5d920c67a5ddc9d9888cf7e80 Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Sat, 1 Dec 2012 17:01:11 +0000 Subject: [PATCH] planned dehyphenation of lambdadelta eventually took place! --- helm/www/lambdadelta/BTM.html | 25 ++ helm/www/lambdadelta/Makefile | 98 +++++ helm/www/lambdadelta/apps_2.html | 62 +++ helm/www/lambdadelta/basic_2.html | 88 +++++ helm/www/lambdadelta/bin/a.ml | 17 + helm/www/lambdadelta/bin/xhtbl/Makefile | 36 ++ .../www/lambdadelta/bin/xhtbl/Makefile.common | 27 ++ helm/www/lambdadelta/bin/xhtbl/css.ml | 20 + helm/www/lambdadelta/bin/xhtbl/fold.ml | 25 ++ helm/www/lambdadelta/bin/xhtbl/matrix.ml | 52 +++ helm/www/lambdadelta/bin/xhtbl/options.ml | 34 ++ helm/www/lambdadelta/bin/xhtbl/pass1.ml | 86 +++++ helm/www/lambdadelta/bin/xhtbl/pass2.ml | 139 +++++++ helm/www/lambdadelta/bin/xhtbl/pass3.ml | 23 ++ helm/www/lambdadelta/bin/xhtbl/table.ml | 54 +++ helm/www/lambdadelta/bin/xhtbl/textLexer.mll | 35 ++ helm/www/lambdadelta/bin/xhtbl/textParser.mly | 95 +++++ .../www/lambdadelta/bin/xhtbl/textUnparser.ml | 91 +++++ helm/www/lambdadelta/bin/xhtbl/xhtbl.ml | 76 ++++ helm/www/lambdadelta/bin/xhtbl/xmlUnparser.ml | 82 ++++ helm/www/lambdadelta/css/ld_web.css | 121 ++++++ helm/www/lambdadelta/css/lddl.css | 43 +++ helm/www/lambdadelta/css/xhtbl.css | 108 ++++++ helm/www/lambdadelta/documentation.html | 355 ++++++++++++++++++ helm/www/lambdadelta/download/automath.sl | 27 ++ helm/www/lambdadelta/download/cie_2007.pdf | Bin 0 -> 34839 bytes helm/www/lambdadelta/download/cie_2010.pdf | Bin 0 -> 289451 bytes helm/www/lambdadelta/download/helena.sl | 28 ++ .../lambdadelta/download/helena_0.8.0.tar.gz | Bin 0 -> 352491 bytes .../lambdadelta/download/helena_0.8.1.tar.gz | Bin 0 -> 252616 bytes helm/www/lambdadelta/download/lambdadelta.bib | 78 ++++ helm/www/lambdadelta/download/lambdadelta.txt | 78 ++++ .../lambdadelta/download/lambdadelta_1.tar.gz | Bin 0 -> 95172 bytes helm/www/lambdadelta/download/ld_talk_1s.pdf | Bin 0 -> 47924 bytes helm/www/lambdadelta/download/ld_talk_2s.pdf | Bin 0 -> 62814 bytes helm/www/lambdadelta/download/ld_talk_3s.pdf | Bin 0 -> 51220 bytes helm/www/lambdadelta/download/ld_talk_4s.pdf | Bin 0 -> 65374 bytes helm/www/lambdadelta/download/ld_talk_5s.pdf | Bin 0 -> 77357 bytes helm/www/lambdadelta/download/ld_talk_6s.pdf | Bin 0 -> 109868 bytes helm/www/lambdadelta/download/ld_talk_7s.pdf | Bin 0 -> 78392 bytes helm/www/lambdadelta/download/lddl.tar.bz2 | Bin 0 -> 1218093 bytes helm/www/lambdadelta/images/PNGnow2.png | Bin 0 -> 526 bytes helm/www/lambdadelta/images/b3.png | Bin 0 -> 866 bytes helm/www/lambdadelta/images/b4.png | Bin 0 -> 865 bytes helm/www/lambdadelta/images/b5.png | Bin 0 -> 867 bytes helm/www/lambdadelta/images/b9.png | Bin 0 -> 878 bytes helm/www/lambdadelta/images/basic_32.png | Bin 0 -> 587 bytes helm/www/lambdadelta/images/crux_16.ico | Bin 0 -> 318 bytes helm/www/lambdadelta/images/crux_177.png | Bin 0 -> 3009 bytes helm/www/lambdadelta/images/crux_177.xcf | Bin 0 -> 6287 bytes helm/www/lambdadelta/images/crux_32.png | Bin 0 -> 232 bytes helm/www/lambdadelta/images/globe_trans.png | Bin 0 -> 1786 bytes helm/www/lambdadelta/images/helena_32.png | Bin 0 -> 549 bytes helm/www/lambdadelta/images/helena_label.png | Bin 0 -> 2346 bytes helm/www/lambdadelta/images/rainbow.png | Bin 0 -> 18662 bytes helm/www/lambdadelta/images/xml_xsl2.png | Bin 0 -> 932 bytes helm/www/lambdadelta/implementation.html | 325 ++++++++++++++++ helm/www/lambdadelta/index.html | 179 +++++++++ helm/www/lambdadelta/news.html | 259 +++++++++++++ helm/www/lambdadelta/web/home/BTM.ldw.xml | 15 + helm/www/lambdadelta/web/home/apps_2.ldw.xml | 52 +++ helm/www/lambdadelta/web/home/apps_2_src.tbl | 38 ++ helm/www/lambdadelta/web/home/basic_2.ldw.xml | 78 ++++ helm/www/lambdadelta/web/home/basic_2_blk.tbl | 52 +++ helm/www/lambdadelta/web/home/basic_2_src.tbl | 304 +++++++++++++++ helm/www/lambdadelta/xml/ld.dtd | 140 +++++++ helm/www/lambdadelta/xslt/ld_web.xsl | 21 ++ helm/www/lambdadelta/xslt/ld_web_library.xsl | 90 +++++ helm/www/lambdadelta/xslt/ld_web_root.xsl | 92 +++++ helm/www/lambdadelta/xslt/lddl.xsl | 33 ++ helm/www/lambdadelta/xslt/lddl_entity.xsl | 62 +++ helm/www/lambdadelta/xslt/lddl_library.xsl | 284 ++++++++++++++ helm/www/lambdadelta/xslt/lddl_root.xsl | 114 ++++++ helm/www/lambdadelta/xslt/lddl_term.xsl | 97 +++++ 74 files changed, 4238 insertions(+) create mode 100644 helm/www/lambdadelta/BTM.html create mode 100644 helm/www/lambdadelta/Makefile create mode 100644 helm/www/lambdadelta/apps_2.html create mode 100644 helm/www/lambdadelta/basic_2.html create mode 100644 helm/www/lambdadelta/bin/a.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/Makefile create mode 100644 helm/www/lambdadelta/bin/xhtbl/Makefile.common create mode 100644 helm/www/lambdadelta/bin/xhtbl/css.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/fold.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/matrix.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/options.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/pass1.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/pass2.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/pass3.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/table.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/textLexer.mll create mode 100644 helm/www/lambdadelta/bin/xhtbl/textParser.mly create mode 100644 helm/www/lambdadelta/bin/xhtbl/textUnparser.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/xhtbl.ml create mode 100644 helm/www/lambdadelta/bin/xhtbl/xmlUnparser.ml create mode 100644 helm/www/lambdadelta/css/ld_web.css create mode 100644 helm/www/lambdadelta/css/lddl.css create mode 100644 helm/www/lambdadelta/css/xhtbl.css create mode 100644 helm/www/lambdadelta/documentation.html create mode 100644 helm/www/lambdadelta/download/automath.sl create mode 100644 helm/www/lambdadelta/download/cie_2007.pdf create mode 100644 helm/www/lambdadelta/download/cie_2010.pdf create mode 100644 helm/www/lambdadelta/download/helena.sl create mode 100644 helm/www/lambdadelta/download/helena_0.8.0.tar.gz create mode 100644 helm/www/lambdadelta/download/helena_0.8.1.tar.gz create mode 100644 helm/www/lambdadelta/download/lambdadelta.bib create mode 100644 helm/www/lambdadelta/download/lambdadelta.txt create mode 100644 helm/www/lambdadelta/download/lambdadelta_1.tar.gz create mode 100644 helm/www/lambdadelta/download/ld_talk_1s.pdf create mode 100644 helm/www/lambdadelta/download/ld_talk_2s.pdf create mode 100644 helm/www/lambdadelta/download/ld_talk_3s.pdf create mode 100644 helm/www/lambdadelta/download/ld_talk_4s.pdf create mode 100644 helm/www/lambdadelta/download/ld_talk_5s.pdf create mode 100644 helm/www/lambdadelta/download/ld_talk_6s.pdf create mode 100644 helm/www/lambdadelta/download/ld_talk_7s.pdf create mode 100644 helm/www/lambdadelta/download/lddl.tar.bz2 create mode 100644 helm/www/lambdadelta/images/PNGnow2.png create mode 100644 helm/www/lambdadelta/images/b3.png create mode 100644 helm/www/lambdadelta/images/b4.png create mode 100644 helm/www/lambdadelta/images/b5.png create mode 100644 helm/www/lambdadelta/images/b9.png create mode 100644 helm/www/lambdadelta/images/basic_32.png create mode 100644 helm/www/lambdadelta/images/crux_16.ico create mode 100644 helm/www/lambdadelta/images/crux_177.png create mode 100644 helm/www/lambdadelta/images/crux_177.xcf create mode 100644 helm/www/lambdadelta/images/crux_32.png create mode 100644 helm/www/lambdadelta/images/globe_trans.png create mode 100644 helm/www/lambdadelta/images/helena_32.png create mode 100644 helm/www/lambdadelta/images/helena_label.png create mode 100644 helm/www/lambdadelta/images/rainbow.png create mode 100644 helm/www/lambdadelta/images/xml_xsl2.png create mode 100644 helm/www/lambdadelta/implementation.html create mode 100644 helm/www/lambdadelta/index.html create mode 100644 helm/www/lambdadelta/news.html create mode 100644 helm/www/lambdadelta/web/home/BTM.ldw.xml create mode 100644 helm/www/lambdadelta/web/home/apps_2.ldw.xml create mode 100644 helm/www/lambdadelta/web/home/apps_2_src.tbl create mode 100644 helm/www/lambdadelta/web/home/basic_2.ldw.xml create mode 100644 helm/www/lambdadelta/web/home/basic_2_blk.tbl create mode 100644 helm/www/lambdadelta/web/home/basic_2_src.tbl create mode 100644 helm/www/lambdadelta/xml/ld.dtd create mode 100644 helm/www/lambdadelta/xslt/ld_web.xsl create mode 100644 helm/www/lambdadelta/xslt/ld_web_library.xsl create mode 100644 helm/www/lambdadelta/xslt/ld_web_root.xsl create mode 100644 helm/www/lambdadelta/xslt/lddl.xsl create mode 100644 helm/www/lambdadelta/xslt/lddl_entity.xsl create mode 100644 helm/www/lambdadelta/xslt/lddl_library.xsl create mode 100644 helm/www/lambdadelta/xslt/lddl_root.xsl create mode 100644 helm/www/lambdadelta/xslt/lddl_term.xsl diff --git a/helm/www/lambdadelta/BTM.html b/helm/www/lambdadelta/BTM.html new file mode 100644 index 000000000..ec1ba2de0 --- /dev/null +++ b/helm/www/lambdadelta/BTM.html @@ -0,0 +1,25 @@ + + + + + + + + + + BTM + + + + + +
[lambdadelta home]
cic:/matita/BTM/
[Spacer]
+
Character classes
+
This table shows how the first 45 positive integers + are distributed in the four classes. +
+
classcontents














p
147101316192225283134374043
q
5111517232933354145




s
268141820242632384244


t
39122127303639






+ +
[Spacer]

[Valid XHTML 1.1][Valid CSS level 2][Generated from XML via XSL][PNG used here][Viewable with any browser]

Last update: 2012-12-01T17:55:33+01:00
+ + diff --git a/helm/www/lambdadelta/Makefile b/helm/www/lambdadelta/Makefile new file mode 100644 index 000000000..388070cd0 --- /dev/null +++ b/helm/www/lambdadelta/Makefile @@ -0,0 +1,98 @@ +H=@ + +TAGS = www up \ + lint-xml index lddl install-xml \ + test-html html install-html \ + install-jed install-bib \ + +LDDLURL = http://lambdadelta.info/static/lddl + +ETCDIR = etc +DOWNDIR = download +XSLTDIR = xslt +XMLDIR = xml +HTMLDIR = $(HOME)/public_html/lddl +JEDDIR = $(HOME)/mps/jed +BIBDIR = $(HOME)/texmf/bibtex/bib +XHTBLDIR = bin/xhtbl + +REMOTE = helm.cs.unibo.it +RDIR = /projects/helm/public_html/lambdadelta +RXMLDIR = $(REMOTE):$(RDIR)/xml +RHTMLDIR = $(REMOTE):$(RDIR)/static/lddl + +SLS = helena.sl automath.sl +BIB = lambdadelta.bib + +XMLS = brg_si/grundlagen/l/not.ld.xml \ + brg_si/grundlagen/l/et.ld.xml \ + brg_si/grundlagen/l/e/st/eq/landau/n/rt/rp/r/c/8283/t234.ld.xml \ + brg_si/grundlagen/l/e/pairis1.ld.xml \ + brg_si/grundlagen/l/e/st/eq/landau/n/327/t25.ld.xml \ + crg_si/grundlagen/l/not.ld.xml \ + crg_si/grundlagen/l/et.ld.xml \ + crg_si/grundlagen/l/e/st/eq/landau/n/rt/rp/r/c/8283/t234.ld.xml \ + crg_si/grundlagen/l/e/pairis1.ld.xml \ + crg_si/grundlagen/l/e/st/eq/landau/n/327/t25.ld.xml \ + brg_si/grundlagen/ccs.ldc.xml + +XMLLINT = xmllint --noout +XSLT = xsltproc + +all: www + +lint-xml: $(XMLS:%=$(XMLDIR)/%) + @echo XMLLINT --valid + $(H)$(XMLLINT) --valid $^ + +$(ETCDIR)/make-html.sh $(XMLDIR)/index.txt index: + @echo " GENERATE INDEXES" + $(H)find $(XMLDIR) -name "*.ld.xml" | sed s/.xml//g | sed s/xml/ld:/g > $(XMLDIR)/index.txt + $(H)sed "s/^/make --no-print-directory /" $(XMLDIR)/index.txt | sed s.ld:/.. > $(ETCDIR)/make_html.sh + +lddl: $(ETCDIR)/exclude.txt index + @echo " GENERATE lddl.tar.bz2" + $(H)tar -cjf $(DOWNDIR)/lddl.tar.bz2 -X $< $(XMLDIR) + +install-xml: $(XMLDIR)/index.txt + @echo " INSTALL xml" + $(H)scp -r $< $(XMLDIR)/brg_si/ $(XMLDIR)/crg_si/ $(RXMLDIR) + +test-html: + @$(MAKE) --no-print-directory $(XMLS:%.xml=%) + +html: $(ETCDIR)/make_html.sh + @echo " MAKE */*.ld" + $(H). $< + +install-html: $(ETCDIR)/make_html.sh + @echo " INSTALL html" + $(H)scp -r $(HTMLDIR)/* $(RHTMLDIR) + +install-jed: $(SLS:%=$(JEDDIR)/%) + @echo " INSTALL $(SLS)" + $(H)scp $^ $(DOWNDIR) + +install-bib: $(BIB:%=$(BIBDIR)/%) + @echo " INSTALL $(BIB)" + $(H)scp $< $(DOWNDIR) + $(H)scp $< $(DOWNDIR)/$(BIB:%.bib=%.txt) + +www: + $(H)$(MAKE) --no-print-directory -C $(XHTBLDIR) www + +up: + @echo " UPDATE $(REMOTE):$(RDIR)" + $(H)ssh $(REMOTE) "svn up $(RDIR)" + +%.ld: BASEURL = --stringparam baseurl $(LDDLURL) + +%.ld: + @echo " XSLT $@" + $(H)mkdir -p $(HTMLDIR)/$(@D) + $(H)$(XSLT) -o $(HTMLDIR)/$@.html $(BASEURL) $(XSLTDIR)/lddl.xsl $(XMLDIR)/$@.xml + +%.ldc: + @echo " SKIP $@" + +.PHONY: $(TAGS) diff --git a/helm/www/lambdadelta/apps_2.html b/helm/www/lambdadelta/apps_2.html new file mode 100644 index 000000000..80c3d45b0 --- /dev/null +++ b/helm/www/lambdadelta/apps_2.html @@ -0,0 +1,62 @@ + + + + + + + + + + applications of lambdadelta version 2 + + + + + +
[lambdadelta home]
cic:/matita/lambdadelta/apps_2/ (applications of λδ version 2)
[Spacer]
+
Contents of the Specification
+
This specification comprises a collection of checked + applications of λδ version 2. + In particular it contains the components below. +
+ + + +
Summary of the Specification
+
Here is a numerical acount of the specification's contents + and its timeline. +
+
categoryobjects




sizesfiles5bytes13143

propositionstheorems4lemmas1total5
conceptsdeclared3defined10total13
+ + + + +
Logical Structure of the Specification
+
The source files are grouped in planes and components + according to the following table. + Each component contains its own notation file. + The notation for the relations or functions introduced in each file + is shown in parentheses (? are placeholders). +
+
componentplanefiles
MLTT1genv_primitivejudgement
functionalreduction and type machinertmrtm_step ( ? ⇨ ? )

unfoldlift ( ↑[?,?] ? )subst ( [?←?] ? )
+ +
Physical Structure of the Specification
+
The source files are grouped in directories, + one for each component. +
+
[Spacer]

[Valid XHTML 1.1][Valid CSS level 2][Generated from XML via XSL][PNG used here][Viewable with any browser]

Last update: 2012-12-01T17:55:33+01:00
+ + diff --git a/helm/www/lambdadelta/basic_2.html b/helm/www/lambdadelta/basic_2.html new file mode 100644 index 000000000..8019b44f8 --- /dev/null +++ b/helm/www/lambdadelta/basic_2.html @@ -0,0 +1,88 @@ + + + + + + + + + + lambdadelta version 2 + + + + + +
[lambdadelta home]
cic:/matita/lambdadelta/basic_2/ (λδ version 2)
[Spacer]
+
System's Syntax and Behavior
+
This is a summary of the "block structure" + of the System's syntactic items and reductions. +
+
domainblockleaderapplicator (with →θ)*reduction→ζ *reference *
{X | Γ ⊢ X : W}local typed abstraction *Γ ⊢ +λWⓐV→βno#i

local typed declaration **Γ ⊢ -λWⓐV→βno#i

global typed declaration ***Γ ⊢ pλWnonono$p

native type annotation *Γ ⊢ ⓝWnonoyesno
{X | Γ ⊢ X = V}local abbreviation *Γ ⊢ +δVnolocal →δyes#i

local definition **Γ ⊢ -δVnolocal →δno#i

global definition ***Γ ⊢ pδVnoglobal →δno$p
nosort ****Γ ⊢ ⋆knononono
+
* In terms only. + ** In terms and local environments only. + *** In global environments only. + **** Sort level k in terms only. +
+ +
Summary of the Specification
+
Here is a numerical acount of the specification's contents + and its timeline. +
+
categoryobjects




sizesfiles226characters427252

propositionstheorems82lemmas981total1063
conceptsdeclared43defined76total119
+ + + + + + + + + + + + +
Logical Structure of the Specification
+
The source files are grouped in planes and components + according to the following table. + A notation file covering the whole specification is provided. + The notation for the relations or functions introduced in each file + is shown in parentheses (? are placeholders). +
+
componentplanefiles



dynamic typingstratified native validitysnv ( ⦃?,?⦄ ⊩ ? :[?] )snv_lift snv_aaa snv_ssta


equivalencefocalized equivalencelfpcs ( ⦃?⦄ ⬌* ⦃?⦄ )lfpcs_aaa lfpcs_lfprs lfpcs_lfpcs




fpcs ( ⦃?,?⦄ ⬌* ⦃?,?⦄ )fpcs_aaa fpcs_cpcs fpcs_fprs fpcs_fpcs



local env. ref. for context-sensitive equivalencelsubse ( ? ⊢•⊑[?] ? )lsubse_ldrop lsubse_ssta lsubse_cpcs



context-sensitive equivalencecpcs ( ? ⊢ ? ⬌* ? )cpcs_ltpss cpcs_delift cpcs_aaa cpcs_ltpr cpcs_cprs cpcs_cpcs


conversionfocalized conversionlfpc ( ⦃?⦄ ⬌ ⦃?⦄ )lfpc_lfpc




fpc ( ⦃?,?⦄ ⬌ ⦃?,?⦄ )fpc_fpc



context-sensitive conversioncpc ( ? ⊢ ? ⬌ ? )cpc_cpc


computationextended computationxprs ( ⦃?,?⦄ ⊢ ? •➡*[?] ? )xprs_lift xprs_aaa xpr_lsubss xprs_cprs xprs_xprs



weakly normalizing computationcpe ( ? ⊢ ➡* 𝐍⦃?⦄ )cpe_cpe



strongly normalizing computationcsn_vector ( ? ⊢ ⬊* ? )csn_cpr_vector csn_tstc_vector csn_aaa




csn ( ? ⊢ ⬊* ? )csn_alt ( ? ⊢ ⬊⬊* ? )csn_lift csn_cpr csn_lfpr


focalized computationlfprs ( ⦃?⦄ ➡* ⦃?⦄ )lfprs_aaa lfprs_cprs lfprs_lfprs




fprs ( ⦃?,?⦄ ➡* ⦃?,?⦄ )fprs_aaa fprs_fprs



context-sensitive computationcprs (? ⊢ ? ➡* ?)cprs_lift cprs_delift cprs_aaa cprs_ltpr cprs_lfpr cprs_cprs cprs_lfprs cprs_tstc cprs_tstc_vector



context-free computationltprs ( ? ➡* ? )ltprs_alt ( ? ➡➡* ? )ltprs_ldrop ltprs_ltprs



tprs ( ? ➡* ?)tprs_lift tprs_tprs



local env. ref. for abstract candidates of reducibilitylsubc ( ? ⊑[?] ? )lsubc_ldrop lsubc_ldrops lsubc_lsuba



support for abstract computation propertiesacpacp_cr ( ⦃?,?⦄ ϵ[?] 〚?〛 )acp_aaa

reducibilityextended reductionxpr ( ⦃?,?⦄ ⊢ ? •➡[?] ? )xpr_lift xpr_aaa xpr_lsubss



context-sensitive focalized reductioncfpr ( ? ⊢ ⦃?,?⦄ ➡ ⦃?,?⦄ )cnfpr_ltpss cfpr_aaa cfpr_cpr cfpr_cfpr



context-free focalized reductionlfpr ( ⦃?⦄ ➡ ⦃?⦄ )lfpr_alt ( ⦃?⦄ ➡➡ ⦃?⦄ )lfpr_aaa lfpr_cpr lfpr_fpr lfpr_lfpr



fpr ( ⦃?,?⦄ ➡ ⦃?,?⦄ )fpr_cpr fpr_fpr



context-sensitive normal formscnf ( ? ⊢ 𝐍⦃?⦄ )cnf_lift cnf_cif



context-sensitive reductioncpr ( ? ⊢ ? ➡ ? )cpr_lift cpr_tpss cpr_ltpss cpr_delift cpr_aaa cpr_ltpr cpr_cpr



context-sensitive reducible formscrf ( ? ⊢ 𝐑⦃?⦄ )crf_appendcif ( ? ⊢ 𝐈⦃?⦄ )cif_append

context-free normal formsthnf ( 𝐇𝐍⦃?⦄ )




context-free reductionltpr ( ? ➡ ? )ltpr_ldrop ltpr_tps ltpr_ltpss_dx ltpr_ltpss_sn ltpr_aaa ltpr_ltpr




tpr ( ? ➡ ? )tpr_lift tpr_tps tpr_tpss tpr_delift tpr_tpr


unwind



static typinglocal env. ref. for stratified static type assignmentlsubss ( ? •⊑[?] ? )lsubss_ldrop lsubss_ssta lsubss_lsubss



stratified static type assignmentssta ( ⦃?,?⦄ ⊢ ? •[?,?] ? )ssta_lift ssta_ltpss_dx ssta_ltpss_sn ssta_aaa ssta_ssta



local env. ref. for atomic arity assignmentlsuba ( ? ⁝⊑ ? )lsuba_ldrop lsuba_aaa lsuba_lsuba



atomic arity assignmentaaa ( ? ⊢ ? ⁝ ? )aaa_lift aaa_lifts aaa_ltpss_dx aaa_ltpss_sn aaa_aaa



parametersshsd


unfoldbasic local env. thinningthin ( ? ▼*[?,?] ≡ ? )thin_ldrop thin_delift



inverse basic term relocationdelift ( ? ⊢ ? ▼*[?,?] ≡ ? )delift_alt ( ? ⊢ ? ▼▼*[?,?] ≡ ? )delift_lift delift_tpss delift_ltpss delift_delift


partial unfoldltpss_sn ( ? ⊢ ▶*[?,?] ? )ltpss_sn_alt ( ? ⊢ ▶▶*[?,?] ? )ltpss_sn_ldrop ltpss_sn_tps ltpss_sn_tpss ltpss_sn_ltpss_sn



ltpss_dx ( ? ▶*[?,?] ? )ltpss_dx_ldrop ltpss_dx_tps ltpss_dx_tpss ltpss_dx_ltpss_dx




tpss ( ? ⊢ ? ▶*[?,?] ? )tpss_alt ( ? ⊢ ? ▶▶*[?,?] ? )tpss_lifttpss_tpss

generic local env. slicingldrops ( ⇩*[?] ? ≡ ? )ldrops_ldrop ldrops_ldrops



iterated restricted structural predecessor for closuresfrsups ( ⦃?,?⦄ ⧁* ⦃?,?⦄ )frsups_frsups




frsupp ( ⦃?,?⦄ ⧁+ ⦃?,?⦄ )frsupp_frsupp



generic term relocationlifts_vector ( ⇧*[?] ? ≡ ? )lifts_lift_vector




lifts ( ⇧*[?] ? ≡ ? )lifts_lift lifts_lifts



support for generic relocationgr2 ( @⦃?,?⦄ ≡ ? )gr2_plus ( ? + ? )gr2_minus ( ? ▭ ? ≡ ? )gr2_gr2
substitutionparallel substitutiontps ( ? ⊢ ? ▶[?,?] ? )tps_lift tps_tps



global env. slicinggdrop ( ⇩[?] ? ≡ ? )gdrop_gdrop



basic local env. slicingldrop ( ⇩[?,?] ? ≡ ? )ldrop_append ldrop_lpx ldrop_sfr ldrop_ldrop



local env. ref. for substitutionlsubs ( ? ≼[?,?] ? )(lsubs_lsubs)lsubs_sfr ( ≽[?,?] ? )


restricted structural predecessor for closuresfrsup ( ⦃?,?⦄ ⧁ ⦃?,?⦄ )




basic term relocationlift_vector ( ⇧[?,?] ? ≡ ? )lift_lift_vector




lift ( ⇧[?,?] ? ≡ ? )lift_lift


grammarsame head term formtshf ( ? ≈ ? )(tshf_tshf)



same top term constructortstc ( ? ≃ ? )tstc_tstc tstc_vector



closurescl_shift ( ? @@ ? )cl_weight ( #{?,?} )



internal syntaxgenv





lenvlenv_weight ( #{?} )lenv_length ( |?| )lenv_append ( ? @@ ? )lenv_px lenv_px_bi


termterm_weight ( #{?} )term_simple ( 𝐒⦃?⦄ )term_vector


item




external syntaxaarity



+ +
Physical Structure of the Specification
+
The source files are grouped in directories, + one for each component. +
+
[Spacer]

[Valid XHTML 1.1][Valid CSS level 2][Generated from XML via XSL][PNG used here][Viewable with any browser]

Last update: 2012-12-01T17:55:33+01:00
+ + diff --git a/helm/www/lambdadelta/bin/a.ml b/helm/www/lambdadelta/bin/a.ml new file mode 100644 index 000000000..4f310c873 --- /dev/null +++ b/helm/www/lambdadelta/bin/a.ml @@ -0,0 +1,17 @@ +let f = "0123456789abcdef" + +let r, g, b = 1.0, 0.5, 0.0 + +let h = 1. /. 2. + +let mk_h x = x +. (1. -. x) *. h + +let rr, gg, bb = mk_h r, mk_h g, mk_h b + +let mk_f x = + let x = int_of_float x in + print_char f.[x / 16]; print_char f.[x mod 16] + +let _ = + mk_f (rr *. 255.); mk_f (gg *. 255.); mk_f (bb *. 255.); + print_newline () diff --git a/helm/www/lambdadelta/bin/xhtbl/Makefile b/helm/www/lambdadelta/bin/xhtbl/Makefile new file mode 100644 index 000000000..9e9db85db --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/Makefile @@ -0,0 +1,36 @@ +EXEC = xhtbl +VERSION=0.1.1 + +REQUIRES = str + +YACCFLAGS = -v + +include Makefile.common + +XSLT = xsltproc +XHTBL = ./xhtbl.native + +LDURL = http://lambdadelta.info/ +XSLDIR = ../../xslt/ +SRCDIR = ../../web/home/ +ETCDIR = ../../etc/ +HOMEDIR = ../../ +TBLDIRS = $(SRCDIR) $(ETCDIR) + +LDWS = $(shell find $(SRCDIR) -name "*.ldw.xml") +TBLS = $(shell find -L $(TBLDIRS) -name "*.tbl") +XSLS = xhtbl.xsl $(patsubst %.tbl, %.xsl, $(notdir $(TBLS))) +HTMLS = $(patsubst %.ldw.xml, $(HOMEDIR)%.html, $(notdir $(LDWS))) +LDWEB = ld_web.xsl ld_web_root.xsl ld_web_library.xsl + +$(HOMEDIR)%.html: BASEURL = --stringparam baseurl $(LDURL) + +www: $(HTMLS) + +$(XSLS:%=$(XSLDIR)%): $(TBLS) $(XHTBL) + @echo " XHTBL *.tbl" + $(H)$(XHTBL) -O $(XSLDIR) $(TBLS) + +$(HOMEDIR)%.html: $(SRCDIR)%.ldw.xml $(XSLS:%=$(XSLDIR)%) $(LDWEB:%=$(XSLDIR)%) + @echo " XSLT $(notdir $<)" + $(H)$(XSLT) -o $@ $(BASEURL) $(XSLDIR)ld_web.xsl $< diff --git a/helm/www/lambdadelta/bin/xhtbl/Makefile.common b/helm/www/lambdadelta/bin/xhtbl/Makefile.common new file mode 100644 index 000000000..bf944971b --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/Makefile.common @@ -0,0 +1,27 @@ +H=@ + +include ../../etc/Makefile.defs + +DIST=$(EXEC)---$(VERSION) +DATE=$(shell date +%y%m%d) + +OCAMLOPTIONS = -linkpkg -thread -rectypes -package \"$(REQUIRES)\" +OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLOPTIONS) +OCAMLOPT = $(OCAMLFIND) opt $(OCAMLOPTIONS) + +all: $(EXEC).native + +$(EXEC).native: $(wildcard *.ml) $(wildcard *.mli) $(wildcard *.mly) $(wildcard *.mll) + @echo " OCAMLBUILD $(EXEC).native" + $(H)ocamlbuild -ocamlc "$(OCAMLC)" -ocamlopt "$(OCAMLOPT)" -yaccflags "$(YACCFLAGS)" $(EXEC).native + +clean: + ocamlbuild -clean + rm -rf $(DIST) $(DIST).tgz + +dist: + mkdir -p $(DIST)/Sources + cp ReadMe $(DIST) + cp *.ml *.mli *.mll *.mly Makefile _tags $(DIST)/Sources + cd $(DIST); ln -s Sources/$(EXEC).native $(EXEC) + tar -cvzf $(DIST).tgz $(DIST) diff --git a/helm/www/lambdadelta/bin/xhtbl/css.ml b/helm/www/lambdadelta/bin/xhtbl/css.ml new file mode 100644 index 000000000..82a41e91c --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/css.ml @@ -0,0 +1,20 @@ +module L = List + +module T = Table + +(* true for a row specification *) +type atom = T.css * bool * int option * int option + +type atoms = atom list + +let get_css a y x = + let map y x (c, b, x1, x2) = match b, x1, x2 with + | _ , None, None -> c + | false, None, Some c2 -> if x <= c2 then c else [] + | false, Some c1, None -> if x >= c1 then c else [] + | false, Some c1, Some c2 -> if x >= c1 && x <= c2 then c else [] + | true , None, Some r2 -> if y <= r2 then c else [] + | true , Some r1, None -> if y >= r1 then c else [] + | true , Some r1, Some r2 -> if y >= r1 && y <= r2 then c else [] + in + L.concat (L.map (map y x) a) diff --git a/helm/www/lambdadelta/bin/xhtbl/fold.ml b/helm/www/lambdadelta/bin/xhtbl/fold.ml new file mode 100644 index 000000000..752b06d77 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/fold.ml @@ -0,0 +1,25 @@ +module T = Table + +type 'a fold_cb = { + open_table : 'a -> T.table -> 'a; + close_table: 'a -> T.table -> 'a; + map_key : 'a -> T.key -> 'a; + open_line : bool -> 'a -> 'a; + close_line : bool -> 'a -> 'a; + open_entry : bool -> 'a -> 'a; + close_entry: bool -> 'a -> 'a -> 'a; +} + +let map h g f a b = h a (g (f a) b) + +let rec fold_table cb a t = + let a = cb.open_table a t in + let a = fold_entry cb a t.T.te in + cb.close_table a t + +and fold_entry cb a = function + | T.Key k -> cb.map_key a k + | T.Line (r, ts) -> + let a = cb.open_line r a in + let a = List.fold_left (map (cb.close_entry r) (fold_table cb) (cb.open_entry r)) a ts in + cb.close_line r a diff --git a/helm/www/lambdadelta/bin/xhtbl/matrix.ml b/helm/www/lambdadelta/bin/xhtbl/matrix.ml new file mode 100644 index 000000000..4769a5457 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/matrix.ml @@ -0,0 +1,52 @@ +module A = Array + +module T = Table + +type cell = { + ck: string list; (* contents *) + cc: T.css; (* css classes *) + cb: T.border; (* border *) +} + +type matrix = { + r: int; (* rows *) + c: int; (* columns *) + m: cell array array; (* matrix *) +} + +let empty = { + ck = []; cc = []; cb = T.border false; +} + +let make ts = { + r = ts.T.rf; c = ts.T.cf; + m = A.make_matrix ts.T.rf ts.T.cf empty; +} + +let set_key m y x kl = + m.m.(y).(x) <- {m.m.(y).(x) with ck = kl} + +let set_css m y x c = + m.m.(y).(x) <- {m.m.(y).(x) with cc = c @ m.m.(y).(x).cc} + +let set_west m y x b = + let c = m.m.(y).(x) in + let cb = {c.cb with T.w = c.cb.T.w || b.T.w} in + m.m.(y).(x) <- {c with cb = cb} + +let set_north m y x b = + let c = m.m.(y).(x) in + let cb = {c.cb with T.n = c.cb.T.n || b.T.n} in + m.m.(y).(x) <- {c with cb = cb} + +let set_east m y x b = + if x < pred m.c then set_west m y (succ x) {b with T.w = b.T.e} else + let c = m.m.(y).(x) in + let cb = {c.cb with T.e = c.cb.T.e || b.T.e} in + m.m.(y).(x) <- {c with cb = cb} + +let set_south m y x b = + if y < pred m.r then set_north m (succ y) x {b with T.n = b.T.s} else + let c = m.m.(y).(x) in + let cb = {c.cb with T.s = c.cb.T.s || b.T.s} in + m.m.(y).(x) <- {c with cb = cb} diff --git a/helm/www/lambdadelta/bin/xhtbl/options.ml b/helm/www/lambdadelta/bin/xhtbl/options.ml new file mode 100644 index 000000000..ce1c88867 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/options.ml @@ -0,0 +1,34 @@ +let output_dir_default = "" + +let debug_lexer_default = false + +let debug_pass_default = false + +let pass_default = false + +let output_dir = ref output_dir_default + +let debug_lexer = ref debug_lexer_default + +let d0 = ref debug_pass_default + +let d1 = ref debug_pass_default + +let d2 = ref debug_pass_default + +let e1 = ref debug_pass_default + +let e2 = ref debug_pass_default + +let p0 = ref pass_default + +let p1 = ref pass_default + +let p2 = ref pass_default + +let clear () = + output_dir := output_dir_default; + debug_lexer := debug_lexer_default; + d0 := debug_pass_default; d1 := debug_pass_default; d2 := debug_pass_default; + e1 := debug_pass_default; e2 := debug_pass_default; + p0 := pass_default; p1 := pass_default; p2 := pass_default diff --git a/helm/www/lambdadelta/bin/xhtbl/pass1.ml b/helm/www/lambdadelta/bin/xhtbl/pass1.ml new file mode 100644 index 000000000..1c53e7d6f --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/pass1.ml @@ -0,0 +1,86 @@ +module L = List + +module T = Table +module F = Fold + +type status = { + ts: T.size; (* current dimensions *) + tc: T.css; (* current class *) +} + +let empty = { + ts = T.no_size; tc = []; +} + +let init b ts = + if b then + {ts with T.ri = max_int; T.ci = 0} + else + {ts with T.ri = 0; T.ci = max_int} + +let combine b ts1 ts2 = + if b then + {ts1 with + T.rf = max ts1.T.rf ts2.T.rf; T.ri = min ts1.T.ri ts2.T.ri; + T.cf = ts1.T.cf + ts2.T.cf; T.ci = ts1.T.ci + ts2.T.ci; + } + else + {ts1 with + T.cf = max ts1.T.cf ts2.T.cf; T.ci = min ts1.T.ci ts2.T.ci; + T.rf = ts1.T.rf + ts2.T.rf; T.ri = ts1.T.ri + ts2.T.ri; + } + +let deinit ts = {ts with + T.ri = if ts.T.ri = max_int then 0 else ts.T.ri; + T.ci = if ts.T.ci = max_int then 0 else ts.T.ci; +} + +(****************************************************************************) + +let open_table st t = + t.T.tc <- t.T.tc @ st.tc; + {st with tc = t.T.tc} + +let close_table st t = + t.T.ts <- st.ts; st + +let map_key st k = + let ts = match k, st.ts.T.p with + | T.Text _ , _ -> + {st.ts with T.rf = 1; T.cf = 1; T.ri = 0; T.ci = 0} + | T.Glue None , _ -> + {st.ts with T.rf = 0; T.cf = 0; T.ri = 1; T.ci = 1} + | T.Glue Some g, Some false -> + {st.ts with T.rf = g; T.cf = 0; T.ri = 0; T.ci = 1} + | T.Glue Some g, Some true -> + {st.ts with T.rf = 0; T.cf = g; T.ri = 1; T.ci = 0} + | T.Glue Some g, None -> + {st.ts with T.rf = g; T.cf = g; T.ri = 0; T.ci = 0} + in + {st with ts = ts} + +let open_line b st = + let ts = init b st.ts in + let ts = {ts with T.rf = 0; T.cf = 0} in + {st with ts = ts} + +let open_entry b st = + let ts = {st.ts with T.p = Some b} in + {st with ts = ts} + +let close_entry b st sst = + {st with ts = combine b st.ts sst.ts} + +let close_line b st = + {st with ts = deinit st.ts} + +let cb = { + F.open_table = open_table; F.close_table = close_table; + F.open_line = open_line; F.close_line = close_line; + F.open_entry = open_entry; F.close_entry = close_entry; + F.map_key = map_key; +} + +let process t = + let st = F.fold_table cb empty t in + st.ts diff --git a/helm/www/lambdadelta/bin/xhtbl/pass2.ml b/helm/www/lambdadelta/bin/xhtbl/pass2.ml new file mode 100644 index 000000000..68cc7ba99 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/pass2.ml @@ -0,0 +1,139 @@ +module O = Options +module T = Table +module M = Matrix +module F = Fold + +type status = { + ts: T.size; (* current dimensions *) + tm: M.matrix; (* current matrix *) +} + +let initial t m = { + ts = {t.T.ts with T.ri = 0; T.ci = 0}; + tm = m; +} + +let resize b sts tts = + if b then begin (* parent is a row *) + if tts.T.rf < sts.T.rf && tts.T.ri = 0 then + failwith "underful column"; + {tts with T.rf = sts.T.rf; T.cf = tts.T.cf + sts.T.ci * tts.T.ci} + end else begin (* parent is a column *) + if tts.T.cf < sts.T.cf && tts.T.ci = 0 then + failwith "underful row"; + {tts with T.cf = sts.T.cf; T.rf = tts.T.rf + sts.T.ri * tts.T.ri} + end + +let fill b sts tts = + if b then (* parent is a row *) + {sts with T.ri = + let rf, ri = sts.T.rf - tts.T.rf, tts.T.ri in + if ri = 0 then 0 else + if rf mod ri = 0 then rf / ri else + failwith "fracted column" + } + else (* parent is a column *) + {sts with T.ci = + let cf, ci = sts.T.cf - tts.T.cf, tts.T.ci in + if ci = 0 then 0 else + if cf mod ci = 0 then cf / ci else + failwith "fracted row" + } + +let place b sts tts = + if b then (* parent is a row *) + {sts with T.x = sts.T.x + tts.T.cf} + else (* parent is a column *) + {sts with T.y = sts.T.y + tts.T.rf} + +let set_key st t = match t.T.te with + | T.Key (T.Text sl) -> M.set_key st.tm t.T.ts.T.y t.T.ts.T.x sl + | _ -> () + +let set_css st t = + let rec aux y x = + if y >= t.T.ts.T.rf then () else + if x >= t.T.ts.T.cf then aux (succ y) 0 else begin + M.set_css st.tm (t.T.ts.T.y + y) (t.T.ts.T.x + x) t.T.tc; + aux y (succ x) + end + in + match t.T.te with + | T.Key _ -> aux 0 0 + | _ -> () + +let set_borders st t = + let rec aux_we y = + if y >= t.T.ts.T.rf then () else begin + M.set_west st.tm (t.T.ts.T.y + y) t.T.ts.T.x t.T.tb; + if t.T.ts.T.cf > 0 then + M.set_east st.tm (t.T.ts.T.y + y) (t.T.ts.T.x + pred t.T.ts.T.cf) t.T.tb; + aux_we (succ y) + end + in + let rec aux_ns x = + if x >= t.T.ts.T.cf then () else begin + M.set_north st.tm t.T.ts.T.y (t.T.ts.T.x + x) t.T.tb; + if t.T.ts.T.rf > 0 then + M.set_south st.tm (t.T.ts.T.y + pred t.T.ts.T.rf) (t.T.ts.T.x + x) t.T.tb; + aux_ns (succ x) + end + in + match t.T.te with + | T.Line (true, _) -> aux_we 0; aux_ns 0 + | _ -> () + +let print st t = + if !O.e2 then + Printf.printf "#%u: (%u+%u, %u+%u) - (%u+%u, %u+%u)\n" + t.T.ti + t.T.ts.T.rf t.T.ts.T.ri + t.T.ts.T.cf t.T.ts.T.ci + st.ts.T.rf st.ts.T.ri + st.ts.T.cf st.ts.T.ci + +(****************************************************************************) + +let open_table st t = + print st t; + let ts = match t.T.ts.T.p with + | None -> + let ts = fill false st.ts t.T.ts in + let ts = fill true ts t.T.ts in + t.T.ts <- resize false st.ts t.T.ts; + t.T.ts <- resize true st.ts t.T.ts; + ts + | Some b -> + let ts = fill b st.ts t.T.ts in + t.T.ts <- resize b st.ts t.T.ts; + ts + in + t.T.ts <- {t.T.ts with T.ri = 0; T.ci = 0; T.x = st.ts.T.x; T.y = st.ts.T.y}; + let ts = {ts with T.rf = t.T.ts.T.rf; T.cf = t.T.ts.T.cf} in + let st = {st with ts = ts} in + print st t; st + +let close_table st t = + set_key st t; set_css st t; set_borders st t; st + +let map_key st k = st + +let open_line b st = st + +let open_entry b st = st + +let close_entry b st sst = + let ts = place b st.ts sst.ts in + {st with ts = ts} + +let close_line b st = st + +let cb = { + F.open_table = open_table; F.close_table = close_table; + F.open_line = open_line; F.close_line = close_line; + F.open_entry = open_entry; F.close_entry = close_entry; + F.map_key = map_key; +} + +let process t m = + let _ = F.fold_table cb (initial t m) t in () diff --git a/helm/www/lambdadelta/bin/xhtbl/pass3.ml b/helm/www/lambdadelta/bin/xhtbl/pass3.ml new file mode 100644 index 000000000..4513828b5 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/pass3.ml @@ -0,0 +1,23 @@ +module A = Array + +module M = Matrix +module C = Css + +type status = { + m: M.matrix; + a: C.atoms; +} + +let initial a m = { + m = m; a = a; +} + +let process_cell st y x c = + M.set_css st.m y x (C.get_css st.a y x) + +let process_row st y row = + A.iteri (process_cell st y) row + +let process css matrix = + let st = initial css matrix in + A.iteri (process_row st) matrix.M.m diff --git a/helm/www/lambdadelta/bin/xhtbl/table.ml b/helm/www/lambdadelta/bin/xhtbl/table.ml new file mode 100644 index 000000000..e363cd434 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/table.ml @@ -0,0 +1,54 @@ +type css = string list + +type size = { + y : int; (* first row *) + x : int; (* first column *) + rf: int; (* finite rows *) + cf: int; (* finite columns *) + ri: int; (* infinite rows *) + ci: int; (* infinite columns *) + p : bool option; (* parent kind *) +} + +type border = { + n: bool; (* north *) + s: bool; (* south *) + e: bool; (* east *) + w: bool; (* west *) +} + +type key = Text of string list + | Glue of int option + +type table = { + mutable tc: css; (* css classes *) + mutable ts: size; (* dimension *) + tb: border; (* border *) + te: entry; (* contents *) + ti: int; (* table identifier *) +} + +and entry = Key of key + | Line of bool * table list (* true for a row *) + +let id = + let current = ref 0 in + fun () -> incr current; !current + +let no_size = { + y = 0; x = 0; rf = 0; cf = 0; ri = 0; ci = 0; p = None; +} + +let border b = { + n = b; s = b; e = b; w = b; +} + +let mk_key k tc = { + ts = no_size; tb = border false; te = Key k; tc = tc; + ti = id (); +} + +let mk_line b tl tc = { + ts = no_size; tb = border b; te = Line (b, tl); tc = tc; + ti = id (); +} diff --git a/helm/www/lambdadelta/bin/xhtbl/textLexer.mll b/helm/www/lambdadelta/bin/xhtbl/textLexer.mll new file mode 100644 index 000000000..7557e7bb8 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/textLexer.mll @@ -0,0 +1,35 @@ +{ + module S = String + module O = Options + module TP = TextParser + + let trim s = S.sub s 1 (S.length s - 2) + + let out s = if !O.debug_lexer then prerr_endline s +} + +let SPC = ['\r' '\n' '\t' ' ']+ +let QT = '"' +let STR = QT [^'"']* QT +let NUM = ['0'-'9']+ + +rule token = parse + | SPC { token lexbuf } + | STR as s { out s; TP.TEXT (trim s) } + | NUM as s { out s; TP.NUM (int_of_string s) } + | "{" { out "{"; TP.OC } + | "}" { out "}"; TP.CC } + | "[" { out "["; TP.OB } + | "]" { out "]"; TP.CB } + | "*" { out "*"; TP.SR } + | "+" { out "+"; TP.PS } + | "name" { out "name"; TP.NAME } + | "table" { out "table"; TP.TABLE } + | "class" { out "class"; TP.CSS } + | "(*" { block lexbuf; token lexbuf } + | eof { TP.EOF } +and block = parse + | "*)" { () } + | "(*" { block lexbuf; block lexbuf } + | STR { block lexbuf } + | _ { block lexbuf } diff --git a/helm/www/lambdadelta/bin/xhtbl/textParser.mly b/helm/www/lambdadelta/bin/xhtbl/textParser.mly new file mode 100644 index 000000000..333d3421f --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/textParser.mly @@ -0,0 +1,95 @@ +%{ + +module S = Str +module L = List +module T = Table + +let split s = + S.split (S.regexp "[ \r\n\t]+") s + +let mk_atom s rs = + let map c (b, (x1, x2)) = c, b, x1, x2 in + L.map (map (split s)) rs + +%} + +%token NUM +%token TEXT +%token NAME TABLE CSS SR OC CC OB CB PS EOF + +%start script +%type <(string * Table.table * Css.atoms) list> script + +%% + +text: + | TEXT { $1 } + +texts: + | text { [$1] } + | text PS texts { $1 :: $3 } +; + +key: + | texts { T.Text $1 } + | SR { T.Glue None } + | NUM { T.Glue (Some $1) } +; + +css: + | { [] } + | CSS TEXT { split $2 } +; + +table: + | css key { T.mk_key $2 $1 } + | css OC tables CC { T.mk_line false $3 $1 } + | css OB tables CB { T.mk_line true $3 $1 } +; + +tables: + | { [] } + | table tables { $1 :: $2 } +; + +name: + | { "" } + | NAME TEXT { $2 } +; + +interval: + | NUM { Some $1, Some $1 } + | SR { None, None } + | NUM NUM { Some $1, Some $2 } + | NUM SR { Some $1, None } + | SR NUM { None, Some $2 } + | SR SR { None, None } +; + +range: + | OB interval CB { true, $2 } + | OC interval CC { false, $2 } +; + +ranges: + | { [] } + | range ranges { $1 :: $2 } +; + +atom: + | CSS TEXT ranges { mk_atom $2 $3 } +; + +atoms: + | { [] } + | atom atoms { $1 @ $2 } +; + +directive: + | name TABLE table atoms { $1, $3, $4 } +; + +script: + | EOF { [] } + | directive script { $1 :: $2 } +; diff --git a/helm/www/lambdadelta/bin/xhtbl/textUnparser.ml b/helm/www/lambdadelta/bin/xhtbl/textUnparser.ml new file mode 100644 index 000000000..54995e96b --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/textUnparser.ml @@ -0,0 +1,91 @@ +module L = List +module P = Printf +module S = String + +module T = Table +module F = Fold + +type status = { + i: int; (* indentation *) + out: string -> unit; (* output function *) +} + +let home = { + i = 0; out = print_string +} + +let indent st = + S.make st.i ' ' + +let add st = {st with i = st.i + 3} + +let sub st = {st with i = st.i - 3} + +let parent = function + | None -> "key" + | Some false -> "col" + | Some true -> "row" + +let size ts = + P.sprintf "(%u, %u); (%u+%u, %u+%u); %s" + ts.T.y ts.T.x ts.T.rf ts.T.ri ts.T.cf ts.T.ci (parent ts.T.p) + +let border tb = + let str = S.make 4 ' ' in + if tb.T.w then str.[0] <- 'W'; + if tb.T.n then str.[1] <- 'N'; + if tb.T.e then str.[2] <- 'E'; + if tb.T.s then str.[3] <- 'S'; + str + +let css tc = + P.sprintf "\"%s\"" (S.concat " " tc) + +let key = function + | T.Text sl -> + let map s = P.sprintf "\"%s\"" s in + S.concat " + " (L.map map sl) + | T.Glue None -> "*" + | T.Glue (Some i) -> P.sprintf "%u" i + +let entry = function + | false -> "column" + | true -> "row" + +(****************************************************************************) + +let open_table st t = + let str = + P.sprintf "%s[{#%u: %s; %s; %s}\n" + (indent st) t.T.ti (size t.T.ts) (border t.T.tb) (css t.T.tc) + in + st.out str; add st + +let close_table st t = + let st = sub st in + let str = P.sprintf "%s]\n" (indent st) in + st.out str; st + +let map_key st k = + let str = P.sprintf "%s%s\n" (indent st) (key k) in + st.out str; st + +let open_line b st = + let str = P.sprintf "%s%s\n" (indent st) (entry b) in + st.out str; st + +let close_line b st = st + +let open_entry b st = st + +let close_entry b st sst = st + +let cb = { + F.open_table = open_table; F.close_table = close_table; + F.open_line = open_line; F.close_line = close_line; + F.open_entry = open_entry; F.close_entry = close_entry; + F.map_key = map_key; +} + +let debug t = + let _ = F.fold_table cb home t in () diff --git a/helm/www/lambdadelta/bin/xhtbl/xhtbl.ml b/helm/www/lambdadelta/bin/xhtbl/xhtbl.ml new file mode 100644 index 000000000..cf4d818b6 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/xhtbl.ml @@ -0,0 +1,76 @@ +module A = Arg +module F = Filename +module L = List + +module O = Options +module TP = TextParser +module TL = TextLexer +module TU = TextUnparser +module P1 = Pass1 +module P2 = Pass2 +module P3 = Pass3 +module M = Matrix +module XU = XmlUnparser + +let help = "" +let help_L = "" +let help_O = "" +let help_X = "" +let help_d0 = "" +let help_d1 = "" +let help_d2 = "" +let help_e1 = "" +let help_e2 = "" +let help_p0 = "" +let help_p1 = "" +let help_p2 = "" + +let hook = "xhtbl" + +let includes, tables = ref [], ref [] + +let set_output_dir s = O.output_dir := s + +let process_directive och bname (name, table, css) = + tables := name :: !tables; + if !O.d0 then TU.debug table; + if not !O.p0 then begin + let size = P1.process table in + if !O.d1 then TU.debug table; + if not !O.p1 then begin + let matrix = M.make size in + let _ = P2.process table matrix in + if !O.d2 then TU.debug table; + if not !O.p2 then P3.process css matrix; + let name = if name = "" then bname else name in + XU.output och name matrix + end + end + +let process_file fname = + let bname = F.chop_extension (F.basename fname) in + let ich = open_in fname in + let lexbuf = Lexing.from_channel ich in + let ds = TP.script TL.token lexbuf in + close_in ich; includes := bname :: !includes; + let och = XU.open_out true bname in + L.iter (process_directive och bname) ds; + XU.close_out och + +let main () = + A.parse [ + "-L", A.Set O.debug_lexer, help_L; + "-O", A.String set_output_dir, help_O; + "-X", A.Unit O.clear, help_X; + "-d0", A.Set O.d0, help_d0; + "-d1", A.Set O.d1, help_d1; + "-d2", A.Set O.d2, help_d2; + "-e1", A.Set O.e1, help_e1; + "-e2", A.Set O.e2, help_e2; + "-p0", A.Set O.p0, help_p0; + "-p1", A.Set O.p1, help_p1; + "-p2", A.Set O.p2, help_p2; + ] process_file help; + XU.write_hook hook !includes !tables + +let _ = main () diff --git a/helm/www/lambdadelta/bin/xhtbl/xmlUnparser.ml b/helm/www/lambdadelta/bin/xhtbl/xmlUnparser.ml new file mode 100644 index 000000000..3583c2f75 --- /dev/null +++ b/helm/www/lambdadelta/bin/xhtbl/xmlUnparser.ml @@ -0,0 +1,82 @@ +module A = Array +module F = Filename +module L = List +module P = Printf +module S = String + +module O = Options +module T = Table +module M = Matrix + +let i = 0 + +let myself = F.basename (Sys.argv.(0)) + +let msg = P.sprintf "This file was generated by %s, do not edit" myself + +let border cell = + let str = S.make 4 'n' in + if cell.M.cb.T.n then str.[0] <- 's'; + if cell.M.cb.T.e then str.[1] <- 's'; + if cell.M.cb.T.s then str.[2] <- 's'; + if cell.M.cb.T.w then str.[3] <- 's'; + str :: cell.M.cc + +let key cell = + if cell.M.ck = [] then "
" else S.concat " " cell.M.ck + +let ind i = S.make (2 * i) ' ' + +let out_cell och cell = + let cc = border cell in + P.fprintf och "%s%s\n" + (ind (i+4)) (S.concat " " cc) (key cell) + +let out_row och row = + P.fprintf och "%s\n" (ind (i+3)); + A.iter (out_cell och) row; + P.fprintf och "%s\n" (ind (i+3)) + +(****************************************************************************) + +let open_out html name = + let fname = F.concat !O.output_dir (P.sprintf "%s.xsl" name) in + let och = open_out fname in + P.fprintf och "\n\n"; + P.fprintf och "\n\n" msg; + P.fprintf och "\n\n"; + och + +let output och name matrix = + P.fprintf och "\n" name; + P.fprintf och "%s\n" (ind (i+1)); + P.fprintf och "%s\n" (ind (i+2)); + A.iter (out_row och) matrix.M.m; + P.fprintf och "%s\n" (ind (i+2)); + P.fprintf och "%s
\n" (ind (i+1)); + P.fprintf och "
\n\n" + +let close_out och = + P.fprintf och "
\n"; + close_out och + +let map_incs och name = + P.fprintf och "\n" name + +let map_tbls och name = + P.fprintf och "%s\n" (ind (i+2)) name; + P.fprintf och "%s\n" (ind (i+3)) name; + P.fprintf och "%s\n" (ind (i+2)) + +let write_hook name incs tbls = + let och = open_out false name in + L.iter (map_incs och) incs; + P.fprintf och "\n\n" name; + P.fprintf och "%s\n" (ind (i+1)); + L.iter (map_tbls och) tbls; + P.fprintf och "%s\n" (ind (i+1)); + P.fprintf och "\n\n"; + close_out och diff --git a/helm/www/lambdadelta/css/ld_web.css b/helm/www/lambdadelta/css/ld_web.css new file mode 100644 index 000000000..9e7c3fc08 --- /dev/null +++ b/helm/www/lambdadelta/css/ld_web.css @@ -0,0 +1,121 @@ +@charset "UTF-8"; + +/* general ******************************************************************/ + +body { + background: rgb(255, 255, 255); + color: rgb(0, 0, 0); + margin: 2.5%; +} + +a:link, a:visited { + text-decoration: underline; +} + +a:active, a:hover, a:focus { + background: rgb(192, 192, 192); +} + +/* blocks *******************************************************************/ + +div.spacer { + text-align: center; +} + +div.head1 { + margin: 0.5em 0; + text-align: center; + font-weight: bold; + font-size: xx-large; +} + +div.head2 { + margin: 0.5em 0; + text-align: left; + font-weight: bold; + font-size: x-large; +} + +div.text { + margin: 1em 0; + text-align: left; +} + +span.date { + font-weight: bold; +} + +/* inline decorations *******************************************************/ + +img.icon32 { + border: 0; + width: 32px; + height: 32px; +} + +img.rule { + border: 0; + height: 4px; + width: 100%; +} + +img.w3c { + margin: 0 0.5em; + border: 0; + width: 88px; + height: 32px; /* this should be 31px */ +} + +/* background colors ********************************************************/ + +.grey { + background-color:#dfdfdf; /* + 7/8 */ +} + +.wine { + background-color:#ffbfdf; /* + 3/4 */ +} + +.magenta { + background-color:#ffccff; /* + 4/5 */ +} + +.prune { + background-color:#e5ccff; /* + 4/5 */ +} + +.blue { + background-color:#ccccff; /* + 4/5 */ +} + +.sky { + background-color:#bfdfff; /* + 3/4 */ +} + +.cyan { + background-color:#bfffff; /* + 3/4 */ +} + +.water { + background-color:#ccffe5; /* + 4/5 */ +} + +.green { + background-color:#bfffbf; /* + 3/4 */ +} + +.grass { + background-color:#dfffbf; /* + 3/4 */ +} + +.yellow { + background-color:#ffffbf; /* + 3/4 */ +} + +.orange { + background-color:#ffdfbf; /* + 3/4 */ +} + +.red { + background-color:#ffbfbf; /* + 3/4 */ +} diff --git a/helm/www/lambdadelta/css/lddl.css b/helm/www/lambdadelta/css/lddl.css new file mode 100644 index 000000000..41a635d45 --- /dev/null +++ b/helm/www/lambdadelta/css/lddl.css @@ -0,0 +1,43 @@ +@charset "UTF-8"; + +/* terms ********************************************************************/ + +.separator { + background: rgb(255, 255, 255); + color: rgb(0, 0, 0); +} + +.sort { + background: rgb(255, 255, 255); + color: rgb(128, 0, 255); +} + +.lref { + background: rgb(255, 255, 255); + color: rgb(0, 0, 0); +} + +.gref { + background: rgb(255, 255, 255); + color: rgb(0, 0, 255); +} + +.appl { + background: rgb(255, 255, 255); + color: rgb(0, 0, 0); +} + +.cast { + background: rgb(255, 255, 255); + color: rgb(255, 0, 0); +} + +.local { + background: rgb(255, 255, 255); + color: rgb(0, 160, 0); +} + +.global { + background: rgb(255, 255, 255); + color: rgb(0, 0, 0); +} diff --git a/helm/www/lambdadelta/css/xhtbl.css b/helm/www/lambdadelta/css/xhtbl.css new file mode 100644 index 000000000..f58db47c3 --- /dev/null +++ b/helm/www/lambdadelta/css/xhtbl.css @@ -0,0 +1,108 @@ +@charset "UTF-8"; + +/* positioning **************************************************************/ + +table { + margin-left: auto; + margin-right: auto; + width: 100%; +} + +td { + border-color:#000000; + border-width:1px; + color:#000000; +} + +/* content types ************************************************************/ + +.text { + font-style: normal; +} + +.component { + font-style: italic; + text-transform: capitalize; +} + +.plane { + font-style: italic; + text-transform: lowercase; +} + +.file { + font-style: normal; + text-transform: lowercase; +} + +.number { + text-align: right; + font-style: italic; + text-transform: lowercase; +} + +/* cell borders *************************************************************/ + +td.nnnn { + border-style:none none none none; +} + +td.nnns { + border-style:none none none solid; +} + +td.nnsn { + border-style:none none solid none; +} + +td.nnss { + border-style:none none solid solid; +} + +td.nsnn { + border-style:none solid none none; +} + +td.nsns { + border-style:none solid none solid; +} + +td.nssn { + border-style:none solid solid none; +} + +td.nsss { + border-style:none solid solid solid; +} + +td.snnn { + border-style:solid none none none; +} + +td.snns { + border-style:solid none none solid; +} + +td.snsn { + border-style:solid none solid none; +} + +td.snss { + border-style:solid none solid solid; +} + +td.ssnn { + border-style:solid solid none none; +} + +td.ssns { + border-style:solid solid none solid; +} + +td.sssn { + border-style:solid solid solid none; +} + +td.ssss { + border-style:solid solid solid solid; +} diff --git a/helm/www/lambdadelta/documentation.html b/helm/www/lambdadelta/documentation.html new file mode 100644 index 000000000..3f24ef43c --- /dev/null +++ b/helm/www/lambdadelta/documentation.html @@ -0,0 +1,355 @@ + + + + + lambdadelta home page + + + + + +
+
+ [Crux Logo] +

The Formal System λδ (lambdadelta)
+

+

Towards the unification of terms, types, environments and + contexts

+ [Separator]
+ + + + + + + +
+ + +
    +
  • Papers
  • +
+ +
+

Documentation [Butterfly]

+ Currently the main + source of + information on λδ (version 1) is Resource + 1.1 below.
+ A summary of + basic λδ (version + 1) is found in Resource + 1.5 + below.
+

[Basic
+                  lambdadelta Logo] Basic λδ version 2 (in + progress):

+ + + + + + + + + + + + + + + + + + + +
2.1.
+
F. + Guidi: An + Efficient + Validation Procedure for the Formal System λδ + (2010-07). + In CiE 2010 + Local Proceedings. + University of Azores, CMATI Booklet, pp. 204-213. + BibTeX entry.
+
+
2.2.
+
F. +Guidi: + + + + + + + + + + + + Landau's + "Grundlagen der Analysis" from Automath to + lambdadelta (2009-09). + University of + Bologna, technical report UBLCS-2009-16. BibTeX entry.
+
+
2.3.
+
F. + Guidi: An + Efficient + Validation Procedure for the Formal System λδ + (2010-07). + Presentation + at + CiE + 2010 + (slides).
+
+
2.4.
+
F. + Guidi: A + Validator + for the Formal System λδ (revised 2010-02). + Presentation + at + the + University + of + Bologna + (slides).
+

[Basic
+                  lambdadelta Logo] Basic λδ version 1 + (dismissed):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1.1.
+
F. +Guidi: + The Formal System + λδ (2009-10). In ACM ToCL 11(1), + Article + No. 5 (accepted + 2008-07). + CoRR + identifier cs/0611040 + [v10] (revised 2008-09). + BibTeX + entry.
+
+
1.2.
+
F. + Guidi: Lambda + Types on the Lambda Calculus with + Abbreviations (2007-06). + In CiE 2007 + Local Proceedings. + University + of + Siena, + technical + report + 487, + p. + 387 + (abstract + of + a + presentation). BibTeX + entry.
+
+
1.3.
+
F. + Guidi: Lambda Types on + the Lambda Calculus with + Abbreviations (2006-11). + University + of + Bologna, + technical + report + UBLCS-2006-25. BibTeX + entry.
+
+
1.4.
+
F. + Guidi: Lambda + Types + on + the + Lambda + Calculus + with + Abbreviations: + a + Certified + Specification (2006-01). + University of + Bologna, technical report UBLCS-2006-01. BibTeX entry.
+
+
1.5.
+
F. + Guidi: The + Formal + System lambdadelta + (2008-10). + Presentation at + "Advances in Constructive Topology and Logical + Foundations" (slides).
+
+
1.6.
+
F. + Guidi: Towards + the Unification of Terms, Types + and Contexts (2008-03). + Presentation + at + Types + 2008 + (slides).
+
+
1.7.
+
F. + Guidi: Lambda + Types on the Lambda Calculus with + Abbreviations (2007-06). + Presentation + at + CiE + 2007 + (slides).
+
+
1.8.
+
F. + Guidi: Lambda + Tipi sul Lambda Calcolo con + Abbreviazioni (2007-01). + Presentation + at + the + University + of + Padova + (slides in + Italian).
+
+
1.9.
+
F. +Guidi: + Lambda Tipi sul + Lambda Calcolo con + Abbreviazioni: una Specifica Certificata + (2005-12). + Presentation at + the University of Bologna (slides in + Italian).
+
+
+
+ [Valid HTML 4.01 Transitional] [Use Any
+          Browser Here] [PNG Used Here]
+
+ Last update 2012-12-01 by Ferruccio + Guidi
+
+ + diff --git a/helm/www/lambdadelta/download/automath.sl b/helm/www/lambdadelta/download/automath.sl new file mode 100644 index 000000000..d28950a36 --- /dev/null +++ b/helm/www/lambdadelta/download/automath.sl @@ -0,0 +1,27 @@ +$1 = "Automath"; + +create_syntax_table ($1); + +define_syntax ("{","}",'%', $1); % comments +define_syntax ("#","",'%', $1); % comments +define_syntax ("%","",'%', $1); % comments +define_syntax ("([<", ")]>", '(', $1); % brackets +define_syntax ('"', '"', $1); % strings +define_syntax ("a-zA-Z_0-9`'", 'w', $1); % words +define_syntax (":+-=*@~,;.?", '+', $1); % operators + + +() = define_keywords_n ($1, "EBPN_E", 2, 0); +() = define_keywords_n ($1, "'_E''eb''pn'PRIMPROPTYPE", 4, 0); +() = define_keywords_n ($1, "'prim''prop''type'", 6, 0); + +define Automath_mode () +{ + variable kmap = "Automath"; + + set_mode(kmap, 0x04); + use_syntax_table (kmap); + runhooks("Automath_mode_hook"); +} + +add_mode_for_extension ("Automath", "aut"); diff --git a/helm/www/lambdadelta/download/cie_2007.pdf b/helm/www/lambdadelta/download/cie_2007.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d369a8bc3b89e511ab9d1b00cae0524b6ae1c2fd GIT binary patch literal 34839 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 literal 0 HcmV?d00001 diff --git a/helm/www/lambdadelta/download/cie_2010.pdf b/helm/www/lambdadelta/download/cie_2010.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8afbebb2669f7929ddf413d8bc81b7f1749004eb GIT binary patch literal 289451 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

=asjF<(vsBkR`hykz6?fTr-LL~@! z^?@z=*;dNc zgYr-JO1DNXhJz>76T{h1EnNp+sA4jpe(J2vp1q^cn${0(Z6j9I^L0kwEjVp!Y=aRk ztMxkc_1D2jYq<9Z)mD0Az*I2YiOd}Jy2k2YyOA)Xv(66V;jmpeqdpsFJ21NDJX3|z z3-q;(o{JzpF;-E!X755*^z})zb>BMayazj<0GC$J=h`SD10(-+faGb8Wm^LyP{erW z?Kip=#bgn>Qjb07d_uEM1CeR&j4Q5(uCbx7c+ysh-%m`*y_(bWX4o-G)#k1rV61+; zaf3A$yPR79*cZG-`hgZ3RUBXpevwsfB#n6P1%8?J>e+}GID9C9&_b;T&>t8v0{fBH z`eaDxXf$PQ)TL4VbH$9h0$;~=y~Mnt^VaN~p+;9)K-L}V!;Pznb0X4xdw>{rZP3d% zao}5>hCrz8Pd~?(lNaoatGpoaGfIs4(I>Llpk+XBVaUqh?E(>=MK1j>JT+Je(ddY~ zcPb*vJ(d^w=|P#`W~KZ-d1dGiniPRadl*zhefpA4bithXB!<6wJ<(;GwE}6$oy9~9 z=r3*tvzTm@wa*oh1KB4B?_mAy!ozuTgcPlpNNmTU_Srat6c^%e@iGx+lVauO?`vjQ{@Mac5uB?V=+ zLkg>Fg~$iB!-XAqxePF0b6?qbeA?~-XxKw2_O@iBD87U`qhPE7qI&~hg{Xj6GWbCN zuNYeHKCL?OVtk6<^MUr=^16OJ6pYon{KSigX#E4=De|1~ZxHwYmA%FEAM7or{}FqO z`7eC_-^!7HF8@!&{kvY}Z-Dx9In$pBj8D1B|CXry?EfZp$-+eNx%ywSm+S>ywhrS>V~^Nx}bW+s&0wZ5qCy@$i+6hm=`= z{2rzt2zv!v`|%w&t0pBT;eMYH@8N^#*Ndwu;S<>YAj2|tFI(n#&$Z;1+zTwnT>8D) zvH|<6q%Q$RB(H)#uA5W#hkXzXB~6}$ZM%P+nlC|7 z{M?({{4s5N#nbzFn?>@NZf39 znmj^BPsHZUd8tWL38UI*+EPPgq0ZwZ`_onzNVb2-V?==@t7*pSHH)pWjS(ElpY1}M znfBx(44^LD{zm zGfBDLxm~0Oj4z$LV?D==IE)>~R7eCa`0^$vMJ<_1)l0Xcyhu#~JB4%`p8mbQHFZ>)IZM_b;^%1y+K>huzaT%6(@;=4z_RgZT@~t1%oQo2Jd<(I z&wh4V`XB-^!%i9s3lrL_v|EFt^?m5Cjpk#q8wrFvjQOdsebSkI`$9(q$YP432yT;u z!PtaZ>>@#!0kzeH)a!bV$uiz4Xs~nRcmpYoMbd=jL*_!^dq2V&p-oATQ!0$ zLD6doRW{#CFSQzRW>go9n*4Y(Ba&kp+*k&M;B4Z<&=Hc3%5W;76+x-ZV>R3WPf$7i z7?$Xr0lbfeGJRvfx0O(0JFB2^fMS?MRz!5b_{R1&pOO=qqnnJn=7nSn|$vlFE zx+<@Ag3bw;lw53ga^G$^qrjz6z=gYYcKsd?GGePJNL8QecnQ*%jQHt>{(}V>D1J48 zLn_ehIH3L#0O7MmCo#Y)&@lGcI{O9EB6GAz0(WWel#aV8Jprnpq_*a;;r#~>*p)=E z@)bV_8`mH*-Vqo4KwvRc#MMBYF-PZt)gAUqZD1U@wn8A&M%FvL{k-@&>4TsZja{ta z2N1EeNL@Av#jKBDdOOBy4&XJEGhtUa1GS!Gp$Wg8^4hMQm#0VB`BTN+vNmr}T;XEd zg^{AoLW@?~uza087Lh(p!rg(*P!S|R64U!zK|+0@RYAEA}ZM#S1NKT&~u@{l}=q9MRT%Jt)y^~ub1G7=m?QoNxxXh zUXn-8-e%#m!Z>pvi5ZSzevxNqN+eZjLm!RuQh>D+D^?4aW^Q2&?0YszkFpxT-B6)F zfUW8oD~FW)(WsLYk{8TZoT@v1-HLC9rB%}?;HrDYnSbp$p$$x#8?fjP&T~TwWTRMJ zJ)Ued82tXxTJz%>bf&EBB(|W~r!=782q1cSm#$-IJCpQ%$Keht9nE4!b(oa+)IhHv3kWME)?rOo6+$~LBO!dXLT7^^ zazSh5xC$l?Tz3*Tnf^XyQ!Q?1imsR;Z`_h)YljT0v@u(46ASGouHm8!JGnPgpGqP#W^9aRObpqk2Da&g+jV5B!7gH#yQPlM`EDJM&@sDbgr}YLa!F;1zE&3wO0pjST0~5;M&Ls5^7=DmvRI0TQ)LElRp{~$Y207 zn*=$pt1uuWA7Z5138`tmZ3H`bIuJBwm{onb(h!0upF?2e+H8gSwG{CLjt|U}#Y{W1 zMkZU~%FOwsQegkaja3sl)_@q2ZJzHyr4zoKYLY>)`Fsc^R4Ip>jb))$aY76IqgrL| zGq>)YMr`Y*(F%t>hk|{rTnjmsS1LNt>hW>n|PJ}CjJjohwirL6zw!|`0?#eJ%O;;S~QJa7xA@khqe8Ni+m}LJ((3`N4n-^2$>7V1ZuEpVv@XQcrOIWqHzm7{ znoz+I@I?ow)5ynhzxC{<&N`SCGx%a=zb-~8gzqq|NU?0n@tsT?h8%C>2W0fmdT7`C z4Q3@Q_6o~kc1V!vTk>#XckqeAQW*)va|YSlbebs>0Qr(nrJZ$iz$H+OWNR34s1Xo! z(5s&3ST%)~s!uIL^+y0b=$g6S?8?lg45ZV3+|>*k+a_oYYDehPrWG41E3R$7N>-km zZcjPa;-B!pvYDVD=EviHpl11}CCe(V%7dE_7<91xK72e&hX*gOo7_>UM>U9N}hPpp4zC=zNVLIglv=_$-IVCqfE3 zq+xJ$2kh1iHQK-f%vhn57BctsIeVsjYC4-o3$Qy0^Yk<(6{G3H;mg(rB_~^>;`!>O zDZYlcCmmX>sS>tVxo6f-_Pobh>`uiLu=N0TskJEoCkAK!o#XPiq@F)f>c5eCK4Z&& z>f!w}^}GMT;D0XvPYnJ$sQw?~@lTNcFWmhpEB{}3{GVa)zX^OZv9kSRDfx5lPYlk6 z^ohZxtZ(?2LLg>asWMWG*w!SBD_p1)I+exC2_+k+P-x6W*6rVYu$hFWtH2%SU?{je z62uV#&7E?1y#ZgBp2v>2$>Z3MzR8b0M+#$%;gk+KO!uxIymCI9U*Dh79dCQTe`7B4 zPZ!@u&W3$Tv&@dUE@Fr`Cv!D?PlC65Qnamt1hykj8H;D?@k}JZD@vUuq=4-o311*# z?|Ndy*6{|N%0%rL!LvK3zyI!gq=h7@IBC~{-2e$J^KS2R)01$;l?|~WqzC0?(5Wv& ztXd=M^DCHa*G5yU*_xaK}9ZX5*egr>PjreaViTZEzD?; zJ|(ugJJ&$vXiyyduc*{lJ;JYKOA4HJZIgRW>?^Ifxk$e!|p+;+5sJ z`DGFU46!s?Tto2E+NV@LOo30k0()!&x*gl1vQzF@oAwvMwoW|oJ zaX2;{nKN&Q9>&0i3aknJ{HO4Jp1mYF4oS?kqWJFt!hJSyd+7$;daO*2svWtSP?-33 zQTQqP5;u9?Jq-*7j2L!SJ4-1(s*5^^B0iwUdt;A0c_dW!Pu!FGw6}UT<|~lCr<7pp zJv8|Z2m5^`8&)$x6ehfaL?S}lCAz}QRWndCYNT^}&)sPhF>|SPT;DA@9hOboE5XHy zCdB~GU!6BT!m)Pj@et@Qfq_>LJE3NR5Cjj*WytG!?iKpDL**sGgTv`_?CF0zpaM8c z5k(RnD_oV_)kGR%PeBH{3XErq8$DTXU}hcHiAyOU%#zXcdGh2`G?j&S|L%EHI+;fBAPn798V2$9sTvVE|(Z1PVM3|ve zCm|{rB;j?$m2}O&!fRQGe|}*o^;{lfZ_U@RTk6x&9vwEMw>libd-4oM4ySCM?_A1{ znnHB@xmwFNRQ3*_?Bf9@w{S3ny6_c0o+?J1B?{oKwNnqv9T(^qexgc*0G~SMD)Nkg zNH!W-fIvxo(&^161AD0J7ZhpJhNp5Mvfx#wA|}W}j?0LWvWtdB54aAqbyIc&`CQk# zMa!IBh!+_6HB%OOKxjb=VU?e%J@Vv%zv#!E%Ejk?rTa`YGf=&Q4isg7qm{PjvJmRX z-a^6dE`4Bl_(^SXpS|~yVC3b`#VS?6C^^LZE-C9UdFCYvI>7{OBMkZzz~1beBV{<1 ze7MV~p>(37M0G05oK;y})c!!DvlPT*ovRgckbSo7q13O(&IVC&M zTmeSy+qi=4>s@#b@AU$i&#yt*oTt;eXY*V6bkw!>o+i7(F4;_zs)YKragB1Thf?=O zFt$n!F9Gv2aKSE7Lhw!QCbC8i`l@2WM)tBB*&tRyGf3_w^A8aaK!jhY^;&WD+9W$W zhlC8)ZKKXfk&B9LX44Mx!kPF`5OACEV()#t0k1+a>FA;`GRzee_KV+n2*3ji>?#($#~NU> z*K6CsSad6EzUQ&GFEiiHsTBLe>7=MVcP-_6vyjFuE>Iah?`=1wj|h(p1ekGDj?l%T z`JO|u1yZ0Jb?DU@!&JrTaitNOYW3_kX!yu$=585P6wCf;qoqc0g7;p*4=2)Fv5h=| zj{1@bJRRh^!QdUbq~=oMIi)N|Gl6>2-SJ&bOh#uyd8qA-0j=su_+ZwgBlwIXi|>;x z2H)x@u&B%jUY3;Ww)3#$FAZ3xkb!`Ttd1G`&|T7!0)7w! zzFAQ>H84fgj8l+rH#i}3Nr!-h@pOWyNlZ)#lI<7ukn4Y3n8GW!rc{(Bgor&D|Jp@c z)2!4FLV1mGMsfLe#O?Eenz3*b5Hw5wXKdx&i0mW%|%0vjjj>?W*(ioc8yK7id9K2kZP6p zd0fWC@t2t{HS2oc59-42)gSTFNR4z|`V4Ot-i}S~9opMlMq}4b0_$fLEo?v0TOMoJ zd=GxMc?J&9vUO}9)-p0%OTR5l8#4w?3A489-4BS-JG;-#9ij3+&jU-N>o@U%n zvAYLYk}n3eKVcGR7fy4UeEe9VL93(S2*@PDwkTtiG(-cadJHV9 zyxWb(;?CyUW2L2`@|;xeBV@rlu@iY)`xEtAEi%k7em)n!!v>b4K+_m{jt`mwtnlH| z-nNTu!az@u@8$xWpD>K39UhE%W;tOegksQ;!dW88Kr6`6B)?^V^9Udhz8^J)w40vC z`nJ0uz5SFFtYLkqs5z3!!kh4E`5JKjF_8|eF{n%DU7}e53o?yyyqs~FcIJ+g0`^y9 z1^Zog<`5dnTV+9AN6|*`t{}yzr#MO*2~|nBM`Ek0QWl|`jU7ds<3a_Bwoe8ofA*YP zIqKaevXTzqcMt&i%msjaH3nU5pHlGsP!tTr@$4r=+O80~!*r`DiqNC>=X>p>Xs;C}7jTKB^gkL6<5pt0yOj9&^F$zQ zbLo9cp^RWKBLgykH7CS*>YbHzSnSn)v?-zNRclAW`sz?FAPt9+wV-5}nGJaQO==R` zTadDV!a~ckUY#;1sdF>ZMD_BbAK0J?b2xEtn}sC%jx@(Bxktf3lxOHTdH+PE5fYQI zK~l#CqETRp;_6P`Oi^24*5s>3x zEDHKz0gXjyi+NDtQy7^5kZT0FhD&Ma%pl=(y?R-GWI(JnNM<{|T=T1R57#6^91gai zEsC(@ys8t2$a$tBJIY008gb>S;|)n~pg=QO<7_ajZ`N*$Qs(HYD1bukl)7^~{RX43 z$iSRT*l$wZQqhqgZpF*mGwdx%J8s!Lk)E-R@#P^1RbQD*=X$=_KzvJd+sZW*UEk8Lo(}R;gafY(yKm2olDrr?yI=YhJ;ltF+{9hqVnaWOe;PXBDxvHKa!S>E@R&mgpIa=r+ZmPSf`r7<+Tas%sc&V2 zqMugT5!kAKI3*C#8bkeXSosxCo2si@JOi}H%;q} zKeK9YZOV(#@&lvU#HPF`9svzo6r{WSq%&hBXu@1fm3PfkpD>aQyCO|?j*T!?4;8@p z!gr$0amjt4*vM#67M&^s^&DQUc6v>81h!xCrkqFtQRy0Y& z%T;1!-H>*DMG6vHpPdu((kgjduG|0E{fd5|7=T_v4<}M^Klt9#!k=L07~p(}jFsoA z-oJ-CC)g$IY=B0l1{6Xj4BupZp0`DJ!F^T8cYzT2MrcdXvthGBXRDJFF+^#ZF^yIH zsJ(5Tz^PAzlO!g)#c4fJwJ^KId0tVqAi(kgj|!}3@i%Vz|20*{{2!?@=KsG`*`Le* z#!de%C-z&a?B6{0-`w%v(`KK=H~*DQ`!9Oh|0$dHkGyx5Kk|G3`;Pyr&|#+k=Nbs- z+UkGM)_hiK_$kDf@~xzfcoWA1aW(64%Osl3Px~B{3GBr4fq-D()^2KKXU@(H(9gR3 zNGQ~O?7~67nY?|xr7nL>G>H28Qm&06l{DdGX-B0Z1*tPIP9l^)ot$~yIo{M<)0u9+ zy_L-t1xG+wi!y6og-~Lxw9aD*BqlwlqmPnCs|`qG)LsW^CcQ3v6eRQzYC1?1+CQuM z2tn>^9YDXw(UjJchv^NK&BW3$=P7MK+G4qNd~#zBn`W{*^Rz_zDX#XT=Ik*Qt(fx$ zIkZvv-9M{8F_V@%A1v{_y&q0|V_q?x2KC6kMm6Oc>j_oNo&B1d>6xA5c)jL&Dz|gF zvsCloG0;LR=qyGrz{mIgIFYnvRQ^##qEZ`|7jb~*7(BWOkiZf1A#l9oILG8SjKZU~+hQ*bhnB4WXIUbI=atC-IpMY*=VGT$>%5tw?)w=se zHWV|yg%)mr`G`K(fQCM_?8^0oUe$WB=PRrIpn5i4YRmc6!IE_e$_}4KyNnD4=G-I; zdy!nCnVcnf$zt^s)pO{6(m28pT-ObdzSZ6k1%D=Tm=RXgAs~*TX>?h9k6tvSC#8!S zL%RdH@cu=#`bb8{l%_HIjHdl0{3xj&(bdZ=kj1r~XraRMuVZzwO!9AEnJ6HF7n%zC zLeg8H5Kc8PB*!`F+X7VL9wN8g1cL;|sHCMdN|JPP8A)9G7=70%<<3_sXe!x;2|z-0;?naF z_tZOQ#C_CiuVv9kXd`%;N=MYq?IY-$nJZ8I=8Pqe$RQRuk-P`!HgCBEYw}D9aa7l_ z1STnBLNz6pe&v=*;Z_$%=<5Tj$=qEE{1~W&JIQ{tFAUAGa9*cm zMyAJt86aA*U-3$8*)*9C{N*qq21B{Y289lX&Yu7=bB-}z1=0>6v)|Wv-_(OshBZO?qu;rsX zbF2awE}L)wB%mQr0bkfNZ01UougoKXF$?0^O@QLZaK^T(F`y? znja3dPLM+pd8nh53SfadsLu)Ov~ zLG2}yO zCW~_7BD4zOBMdbmCf%Zt|5#!4NYYhQseuU-DipA689{$jJ4NcXRY$gh?a(FoIWAtf zU83#IhT5$@J*U7O>@W|ni%+(^N1}AC$)n^R%6eaNIu2}cb_tG1XE;YA-NBP-yMHI? z86YHh-YK7P#D+H2NYM{ zk{7ERq|G36M>2H#sq6F?-bf*=j<9xP7wm%~+xmN)^VVa^h)B8E=0S(Ri=vE&{>3V4 z`Od4{8o6C4B3@9ImQ5nxXlHc5dzK%A?IaM}npI0ceZ|l^sTOwJm8uwK=nB-*;Wm@C zt$;|4mei`m*SEeA$fK*gvlESgPFzxW3ZbxKxiM}Vh5VMidooh#m31jXU> zhK|0BcZ&1A3xRA)3Nk?aw)ySTkrzt4YSx07)n8>o|NhXzJGKj3M5%(qD6m z^QC)nYF9g$1S*+I6mdT@zuA4U->^+MM~B?DVS4aS|Cu4;kwyFV=7y5tr+l^ka(4X5 zsl`1cjkk6|lU+VFX<0=>8YC4%je8OEDB)|PDZ~GQQW)#`SUoXP1J|(uYey?_YfD{U29pM}UDYy|72$N;|?*Dj`hbQ0>BIElU z1YM>Aw-?{@PDAsHj+M}x-Fgl2_{XS1OU2bdtiYEqu0#}l5Y~pyh0JwRfgza~5Hkvl zYO4(|TA-dZPgjDa$=Iv}T;wD*_�y?YA)e0c!-f;FT<5qDO58*4)8FG{^$n(LZ&@ zTvL5v+VD)6VZs)Q7u1T%Fe@sfUNuI4h`6WQw`o$>KE#9Uw$e|X@Jc_3!+=-m+(D9?8`u!R`lNAy8Kj-O6a)PeccM8>@swvSELv zkrDIQJE?I$BH|3MWszTmd*(jDRhwkdbo4XdAjUIlu068E`z*hjp3Y3AN=1~AUNZy2 z*B^Sf$sx{jW%z?aG-CkfpiqzKf_PQx)e95s5nwlB4ZPR$gP=^&gSZV2nEM;NWrkYc zV#z`TJ^3}k2l3=;-q!*RC3=*dj4j(jw@72?zM?d-7$SXHHfFQav6Rv-EcNOeuBFteqLpTkuJ=W(!wV= ztx7V4l?VZRst`&spzo>arcH1*aFsxoM@?+tkxrBGFWnpvD_{@))v$1!Ye1cw+m(y= zb=ubW8TfZ~A~!ab)Hob`Ii|ShQ6X!Tmc})zks?0pax23j-!p#Zt*;gvVy`Q&uZ9j# zW!fG0-lf_autkF__CGH4jiQaqsxe;xPB2YS=9|8YhaAsNY)jPn{!>=TmvW>OpAdA)Jw=C*fCV@Xp^nxNh?QtW{(Ff= zA9t2bf-utDbVNZohe`y}#z4yBclsl&@nCBC)#;jrvy#Z2%!RZXY=o+(qbgid*SJY| zk8sxVA2j|TTLu{}=c)v_gSeDaFn5#Y_aC}vA}+SACeI(8(TLKE1zTG6RwA0(UD+Z4v!B)tXAFvM$J{|C5Kma=CH5v#zQ83mKesAQbYjfSkliWGS0DyXWxef^Z>9 zsTw>H;bBeqo+DC`fb*p|L7IB+4m+4`d_$`)@*c2iH(zrmrZD_8vnQspnTsSg@{dYf!2oriHsh?n=4@I!(-jX;!a`|%8 zvoM4mK(RDB{aOJ;oT@W}RXMjk&{a{Bq@M3p=f!Q*0?Wbm3TB3bN~7 zn_#+!__3WfGRUR)s^S_0(<)_zuo$h;TqvBl0>DAN zC4Y(lOiDtTz(QR}qgH1mQ|AT-tOpvHVuVol9;gElWLX62%a9}$i@S;Xi zKk&x6dPfXMIj?>Tcxp7k$sRqD7OvL{W{AIi&3G=A zs2gy}DqbZX=j>81$#|+fW_~PtBbZ>7B^D~fNZXz^7L+?* z?-#khiG{HIE`0d6l!ZUT0{>1~_}3@={$D8zze}I|ccI?z{NVpXEadn2$L}d4D_@tpCc>;tQ>5# z>;w$-Y>c0O{+hzh!a~5t&PK~f@JElGg@cxvfc5jqvi-RMJ3IX!Gg(_lul;`8gN6PNOPSeO|F{wRr=_3wVbT60e)bs^g8F=z|9U#C zp9ZlK{Mr8ZuYbhH{+Oo8!Nl@;Lnao6PotR`{y6imJ}bi?7XAOUf9>;o``1}4Z0w(> z{MG(7^2clWe19zTpO&z*(SKUZ!NBr4hn<1_^Chr-TFCJEB>u4WubIrujDJ|f$o#+9 zd&_{TwsvipQ0Wo`0g(_pXWK}d*1i_{eCbQYxKC|x??dXP&*g28b2>LC=r}U&c6qpEDbMlQWxL`+wk%8 z{=Ln~#_;wCEMB{Jw2Qc9>ODl00Vgh0HfgA$vC(VMK*ZcA10q9PI2|Q5j=psyntYU@c)Yv zwa)1h=+Qq`gg*20antd0aY3x(<^hc2=ZDk~MHEiJGJYh)IA|0%P+Tyd8&WEM0VEJa z=mr9SsSqpRb-;S4x$w$70?BP$8`=x}AUL@o41lMAk9=H6u<>8lh7jPdIz)og z7eJAN2fzatzz$ejVFID*sFA1JPtQfQbMbM3odvj&;KHb*ohC7A3=hz0B+xG;bP^!R z2s&O^+EKlH0$iYlhab8+4-&}y9~Peci59LtKN5l|E&&LZP<37eH$*nL{d67G@;{e= zTo6%E)BbNK|3^!o>~MPQNz=dC`=34knEKByKA`Oo@HXa)oe zE|Gv{d;ndb5;CQ{;IG}FA5`xNApp7nNkWw{by1fmCbpgIs) zZdlBL^?{HKtPNxXCBQ%p0GEN-a`J;d05*`c3xG)o0CUhJeoz9t1H=dj6IdPzt_dy4 z%f}5JA3hEr5F_Z~2!2?(pl)z-=&UC376xu`Z=fe|iIO?E z_m5njyqpZ!4@ivxxdBxny@OTxpEc;yzxx3+fCz$`@@L||8~We1oh)(k>#tG&Y(2gH zKYLD1`)3C~A8dEv@}E7Yrf>rf0hk>45`XA&;w%B5gdfn4iyLqVLVsYP;W{rLj1vEg z@?=fa%5Vwo1VQLuCG=SUz$g$YfF*oDydcaF;De!;50XB9ZhlDYfH?$G3XkMLKyu0p z8%P20mN$M*K5+6A1wsvhmgR@1!y5qk1;Pj3;&8G&ybNk20s*iMi1Mi>J|tugPSfCD z>!(|wg?V93`BUTOki-GBZ1hfDK2U-E9GgL$M^8m}t10)}K z4}WtEICv+X5En2j0>D_ozzEFnf32ZD|Ia0Czj-0&?(YTu=L!EwFT5yRoF4tB^{@T@ zw456Jr}4Be_owyLP%dDn;g5WLkROOD1q2}Dj4ENogne9IxI~SBuL`R&Wb^^TouVUZ zPe={{M_|O^<>CW%e&D4;-abrm;GzN915N=XjXa>27cTiw>+nI?2B8sx3oscBf!tgm z+OP`_{0B(Dq2mhhK%mIS2|M3l0mwn*1q=lb6@n58{C&V&0Q>-?fMNsXfX)2rtNxq% zDJPf*cE$g-{EPbBFriQ-EJ}Yw?BttTTzy{H&_mY&XMwRF(kS3`0>=O-9e`0JP(tW7 z{6K{uhZa~HUhH6f7w1J)<2@sy<0lR>V0Y?_x2XfvZ4nlSi#9UAt5)cNg1{_G> zDhhCd&yd_8frNq2K#~B7xFJg{0JI&n!2TW#Jkay0ATk2v1SbKc1y~29ixV=dr^|oh zIxie1@bN=3$P1s07lefXHvp4>JPH6F0O14Y1(*bOhL6j`1B)8W5k7#ffJb0o=r+J1 zfUpu0T1fhURHBvvp$$0736~*3=i!G;F$Bku%L)aou&oCnEAo%@oV=R{c=5cD408i$ z2CKl5`M)Vq>zpq6VYNTKCaQ%WWlT6>cM}*B;L3ownGb|<;M9Pn5NJZ~5NaFD$iP#*gE^9eQPPuuA^P%9Su`@fz1A1!^d!|AanP5)-^ zfA;)i>OZ@n^a(&-xcq0&KPGX*;(%)UL%BZ*4PYvOdIOz;)Efb zU>6zq)Iei^zXs$Ia1`(eh2_9j0R8~&1DXir6O=$_fh>V!0^kYIP2g^zat54G!hr_~ zcnXi^<%eVm(q#x}pf)fPBntq<0E+}{4h#@{AgKa;Bmh~^$`H0eNgQxy*cpfBa|6i& zqhS~3znEnBBg!Q~m4Dfp|Md6ixhRti8|uH^8(wY*vVffdKd`$Cas&W_fwn>pq5!xN z6pKUP3!NNAXC6RFKtpg|fK@yYq@t2bNPuhriUC4ES`Xg|ge3eR8v|hlJPv3qL`^uI z1*{;@DwwjU1Q$dR2xd`2VEzytG{2iRE9 z3%SNHAGu+df(M``Y8)RO7eE!j3w}U<*m>juX9J_b9Y834;wU1ZwE>C&)CEQf3Kd~q z!XqJ^f}{lGWd6wL-)S`n<-vUcjiFErmNVd`K+Y$0M<|#AD+A*P&aYH6_9u!f8Z{F69Ah5pTJ&#*O2QA znOgxc9#9xwfg6}PAeZ3e|4k5m;`gHhzf<8Kd~R@OaQgq(^7NXhuo|`6={hfvJ76nd zYY9m%sB=U11?AyE#vigfkah}iLU}DHaR~7YHu12Yon*rRH9;y7Mp!6pM}^>kBB;3_ zNCz!oeaKUUaUP5Zbx;CMqvpcY1d=`U$~Ke(?ZD2=E3aaeym; z6QB;(08$Fsd}uEy%>$Lt$x*zA5`ciOK!!mJNXq_Y$B+P}z|LI2f&sq(@DP?e9-vi_ zY(kXc0hSah*djB^iYMql3-Vv1rc30E@safUZEi zghLBhdXPZUfvX8~0@7wkOCbF~!Z86qTt^^ap+F5fiE}uCIGsd1uo(d^7X;W4C?J8^ z0zwFj6Yw4(c{*(#`QbsR^P^~cnlh(v#|u)x0A1mwfu97ys4*Z*42}$09Ux^eHBlo`y(p@o>ZlSv#~&Q~JM9ShasU6% ze@lZu6#F|N_E$<#0H6$nyHJTjJ&-#7|G-WZ=Alw^C%6c_94L_kAsMO#31bz46E?6= z^Jz#$4MA;sx{g}ltqvn`IBC-Aux`>IfbC+{~hR2b5EZQRY#o!a*DZO*Z8l? zoxnZH{XktB`c4Zz8D!LeUIHbDG6(Q?GEi<6r~zItOF{}sXPjEM|lE8BWLUF46XN&;Z zIlyY*9YKB??Eio}0j2^w1X=*|c>$&Z`hgOh8TQ+Fz!3o*f!~G--cbk(eK!Dz1uhJ( z$MrYKfLDK#3q(1ms4N$%6aX#=Bf8yjwr;Z2p{ii>t_ea%HJDz-b1%EAuYJuYg zR1}B0798WAe8r5)1)#iRK!OvW`P4n390wB4*1_w*Cr8aaSslm(#6L*#PLhdme8LIH z1;ZXHTmb<#oc=%^6}seqt^N6oTI_@y@WQD2Del3os2L}%@Ls5v6IQ@uU~-~r@Ca_$ z?4Gzmu-9-RF{rb`1VZIFQ6;?dA8GrO7KBIgzyT32Ok5C>fPfYCojeeEkP8FG9{`iU zpV@z>g^+MaiYmF`bQ3r10zqjDpd9~A359Q<7upA?Bb3I6Mhk!}9cl)UPbelsAi!Fv z_P^GK>;ta=l$(RyQFwh+9h!|AbrMvc8u6!(`|nZz-P!*0_LDQ6+!{I=d;^da0AK)@ z&}YpaNnG^c#e2AZ$bcXC2%S^`{`Huh|ita6%F_07_E> zECdJxEe?Yqh`2yx0cE{_zYSbQkO6`s7Kq3oqX~W02Zv#B$p=EXzbFOmgSrLk)~9a- z{UrgEKtu5f{tc7~K-ek%LairrP_1zC5!Hg?3OoyUDZ5NG-8ic9JmmYS^UzT`qX}*g%|u{FVu9@)_1hlH=HptHkmqlpPG+J zB-YV=))ph&@=VL%u-_#TW@)<>@Olf2ITZ(|qkU2_J0(n`xw*OY-)YQXh zGXx18;{6UJ&k6F;a!Q(v!Xx&N%aZ4~J)8@s(J>4R3@8cmX(;VzI?hT zv6z}f*w@z1Czp+^OgDm4QzFw=;;T}g(GRwD&nr)M^%9_;uWLiAFU391>H0c|Zu?`V zWgfd^FHL5G)_!c5)!vlho{b$rfs?b;!4*-&2h5h8{I%7ZYW9I|P5pgMzpBk}OAv^| zG<;G^q2vmJ!7)lkw%^fT;<49hV<}s3YQ8iyG_=+dpbcS)**DGAh+<@yk32dOHan6$ z&IUCW z)lbATk0(p_JN^l~7zFtIV6J$kX1q>Znk8lg=wkiMTgQ%xi- zW&0g15q~)k?Hswg1sXRu3%_4P0?x!?^~0mp8sFSw^&B(oBNm}dUtxujm|={vWAz68 z?IZn=cEbqq!-3&$v?G3h|CJHp0JPrY&}w#4p@{Vn+PUK{#h+QN$JIl}_3g(?JICXp zjBoPuj)b$0Ueq0Tm8b9ywjFXjFZFbH_ZlJa94RIExLchQmwe1x6p|m=dVDj&oy%v0 z*qE9-w|WHI{WV(UBc<0hDou08l&QyKb@47N9|+`H`$-O(12Bz@EKK%9Eggg`ZFhfX z3w-|Gmn5598o4(fKE>Bm!sNSr8BYkSrn|Pbo95+$U5(D*5PD*VgW^35=Y5wFbTJuf z{Vaac8hxiRGW9IDXkx{_A(&{rJMm@XK2%4NchHi*if%^5u8(iZj{7kkOIV;0 zZ*ur3)@;)H;91|pJ&GSMIctUMzAKw_NaUt(8SIO^&y6^y_*{&Cz~R&0v1qsx6}KhY zau5~QS^blZccl8|it_e~Z&P*HxXH*N-Z;iF3(;I@P1tc=sXOv8;&;5|H5aVzYFtme zm6?0{908?ag2#B{=RJ0@bjL20f$Ht`9nxdVvCssXOJieGqK1K`#s?h7yFUZO?CDG! zGCcK7$LOBLC70~qGse(!{A#`S!PSBI-Z% zR(hWJ4U?Uj<>V40e8C%n5hZa|_t=6pANaE|fgF9QgqMnx$H2e*Y8E)h=R$1jQwm z=wSR01UZv=H~4ruZsE6Q)H&etRCU{^HS_g?oDshnsRp8-m`={*)Ha&KPHJcO>vG2;m{?x^>Bwmw@NG=lb!c&xkL?} zmIcFxJDq2oSXznncE0DT<4uEty=OLkOO1q6>NL_F_G`T*t5KO4X;$dPO`)r?bw?t` z?%uaZm$1lUbd75jSulB;SI_SfXEasbP7k~8p{}_-mA|W!)=4y7l~kVaWI6SmePl_n zNzR2gG;`K7I|-eNsdE?>j~kexob@UqEv{@n`{YC&FK1LyVL{?S`ShA_uXVF_h;BQP zkG)4a?j0wLo4;Rsj&%~$7r#pGaCpw$bjy^oviP;hkMaqo$SL)#bIHG~e+9X)W)`%+ z>&WbvI7URvs-1`IWWg_ zp=x_;Ve|p#@UXR1|J^2m67iIA(}Q5lbhms-GCBz#+uKtweyfB#6t2g(t|uzbhWA`b zrudOUI(%?p|L%i{=z*qNso!o?sM4q0rw_=M&5qiZKZvMMuEzT8i$Q+ThUx6nt3)Ex z7hJ^8g$ZZlt1hLIV-+hI%}8vsb-HGXs0}8V`dmq1xT04z_3pU_`cId8hF;O>@0;eo z(s=v%JMm7q-j*T$X`H`ADQLy-Uconni(rnL;%z9R%sF4lqHe((ZBDwfm>Yh}C7#OJ zr}xbo?w21IUf9HbG-;Rj-6!3y&B)NFm>HHb0G70dj~ zjnp#*%d%X@=4dV$HhoXs=xi}*3yotcv}wEV=XUe%JS>U$A)F<5EyzT;JIdRM`|XXy8o+w6N!uMv5a^7+mi7p9tyTK;Mjpnf2J#4WLIaq-++=F&%g-_#=c zKS@1owF^S)n0m-1BO%E(dRcg+l#hX(s9VVGz98i&Y0UWjDB7RlyJzMzd~R&DKc?$D zo8u#r{C>Y%%w?KU!2)4Kb>^$`m&bKXA4f|Yb+Y`oeQ%j@N(%Vgy1wi7og>-6U9f~* zfRgu1aXxq%$|3i;s8K4$OxK$UdIv#iL3Dga{2nQI)#dl2ACYhQc`Jp~J>a^;%m45z zdKk{Wu;FS2xjwTJi_kgiO=Llo6_stVz{d_d4PDtQajR2#iCTnA_KFNn2Ij*(uP)g2 zEMG+Lx>o0P4qc+s_{&HjQ+ZT#MXmHohqzkOuy}6#IREVAd_EI%$L_SS*fEwLCG*WW zI+OjJ?SV^Vvp5wl0`^)2x5Q-qH?(tiOhi4X7le7?-ZCM>P$t1bmmym}bhM%Znj%^9($?ZdX0dGD7{wQqCqLGJrntYPAtsU2PhKatG+ z4zW&-dm)Eb1;zMcCFDlKiHD5|T3h^#Pq*zZ>f8>f@B2V<-tt*p1ye&1QKzJSteBzw zs-OI%T%*WVlxt9w%b>2xM?3%V7LU;%o2^F5=O%S|#Pq^n9Hye3lP4Ie|CqhnFrvHa zl6sJ8XpKc_nQ7Zh#F*Vv8PMPUJ)D=_Ls~5G$E>;1XYG=9ORA~MG9QU0B>LZE9G=mA zdPcb8QxZ0_9h#TccwBEoEN}A|KH^P(C+&^*#^bnNy<_}4&nbO_Sxk2?P|GbG&#-5* z7;cM4>fc+xvuiVQ=W)P7vDwR`2zDWFD~#PQukfN&fD~4`*T$LH zF=6DF>?Eg|ukci6obhoa#>Cc?V^&%1yFQ$I5H(8pI5bWDH_OvYPhR!UKMp2QFphE$ zS?@^L&OOEw6Y&>37ee!H_b*?5YhfM4 z)-6%2d&O-7(=)+a(2qWG&f`bgFOLRxOF^Yv!H9T+lD&GS7w1ip&D{=z+xNIW2nut~ zvXk!Is@;F-A7_laO|qd=#I}}u!KlVE%Q;g!^L$|qgLt}d$jAHoMNbfz^-kZG`?g0I zWL3QQFQZqi2v~E@F0J3FA;T&;m`-XQ+#qUvGU!5Vjd%XtXGu#s_nhlhisOPS>={lb zmGmvyK|zltf^XE)XI!jLHtxkKchJCBJ#!cm(WFDGa7AlP=V}#RFWov}_U&kwRJ)3n z;LWpR(p_d<>gL?(yyE-$`}qo^9%XGTIgJ`mkZp`FZjcuB-gL$Cs-qX)E6vUK;JI6< zac`ng>xO`Rht$oxseA6KPtUN&%ievbO3dEvV1Q$`5-fldABtimWe{Ck%#@?>1oKU=Ujv!%H%GREXQhk>kQ*^#xQB-FTmShvk@cOJ)F ziV8c(_BXvDGBB3VyQ7j*ld&wfuy^j|P19@_QKlqy+cV8O8=-gOJ*LL1#-!S-^;~Ic zE?ClYoIgkneR)4PjbyXpK-$^6B?Ez`^|SCs*Bs&nev68^QJ(R|tuc>yp?rJ>E^pW8 zYdr~JovODb8@DF*Dzi=RchJVu=>K|jN0y8zVaAMZhxy?qQjvi%6|cvwC;3god`q5M zy29owKS8sr+8FCztEutwxIz8N=ATD@Obu|Dk%PD0>4m9wZ4mA}lbzCZtLB=UNo;xe z>L``BF+=f6kOl?evxG~Y!Acx0PsfU*9Q4`~bpa&Ort_!#T^=o$xiCn9*j$6pJrso3YUx ziF^G;*L?9^Aic)3oM+uimv=tYZW%Qt91JmTZ5edU>ta)7Ot(C~6~|6C?=g5tbaOGg z&|E69N>MT@%BR*kv`@2ZV!4W@HE&nxehO9Mqf5CP!4GBYAG}LaqptY%@gzwal%8otb!|?nRiiT0n zG^eAH5Rq_Jjeafv)`sg%#MQGDV@o>y70mJJM>^%^mx_OguL*SBVDM2mY_GVCDVOQ= z6STvGL-1yUd$+xE`Su}ASiIQW7p^&g1s zuHt8^hq5`4eY3c-DsL?-5m6pH3LXo}4vU;PXUw0Qb0 zQ`|*`!GHw&5%Y_vsk@Uxp-Arumkhh{hqnuqFrvN?{LZ@Gah^s~G0hE+b!EVt^`=~U zITO02xP;(G>#VEy#5xvr*MfF!4*Wt4w0sWc*0eo)WK7SYKeU$llx}waTAE0BzNub* zW+M{MtbvG+urcgsuy*i~gs80nSIAW-H`m1x31hmY0cu2ynC1nboVd+(b%)K(~NmmINB z`p_w1DSKy=@1vtvBVX4k`K4eCn<(SVYFostcv9%hX>wE4Vv6#G>8bd>9no1f{T7|; z6}0rj{@JLVG+*kJdq)OgTJb>D!QA_B73BHo)#&|VZ+;5eF5&lgBHiYT>dmK|SK^5m z;z|Rw;?O5t?d6C3#b$%NcHbu#iir(K32vfZiEN{HMCOIYUABw0|3le&N zeQ7dV!=p-#k<{@1=G8dCYT>!)kkwggx>lKletJB2)4IT&55GcRJEyHIQ2s35_DTpu zU{mY{+PH@2h*PJ$^B%1U|JE^6bt~5)^y`;fx}8G>rdzfz!WCOaMngz~Lc>S(y{v1< z=E*`Ge|}L&o?J*aX}^DsBOUKCq1Dw_H&+61W=VXSKO{ZxO+kxz_arFAdUTQaW{}gx zOOHvJ=SR}S9j36}D%R@jtV(5Pev^K}+||eSyS>y}fxUe_!ZJpO21)(xL2^u%@soFF z9j*i^qsO(%k@xMCyLB__7eMz&uL*~#)+*C@%`hTm==xG!&Veof^_9^6J;HfJ)82z&n51=X<^Rx@g!0T zH_Q@$uIQKjwa#$~@$4xLmNrp*VH_#z_*S&jnkk){Fk`MtBAQXqa_p0WAC?|H?wEbr z1y>)*$`p2$?l4?>g%#2z+01~`a7&U&FAK31!>`tSxMBe<^zm)bt;y(2BNc|=l`XieM5!r~T@EVK}@Mv7q`rSA}roed{&N!e<7e@#~G=Wps=`T)QneRh5>W zjs_hF6uTC@{K`N#NvPb-`&K~DJn$LqRR=RaOF1%;R4KJ|w~?`-HIIYjS#z70fz-vG z_J!+$730lK!(OIgnhMu{ls@?U)8iRXdJjkM3MG2NYB9c!Sm+DIe7o$F{EZal>uF5vF zp4a?WJcC+uGG}sD>TDw~qmn_E{@BdKj86HLS@Z8j?D+OMW0972&wa>d)5dP?l8^BW z%Y+TaXW2d2O{CnGm5-RCM%FP9exp(_8FH)a)Y$1S{*3FLd=^>Uwn}Q3C~iviWAB!` z2tEj_Y-|w%#*xqwg_ z^-JIk3N*SI!k32}j=I4{wp@z#VOvlO`+iZvlh#kiuZ_GE(<_J%-qvPs-DqW<&?pfN zH7kFh?)0^>Pu}i#TINo-G%k7QQK`lC`tp<&iTq(i;dWAPG{MH(vpw4_Sv&sAv9~zp zz#BMows=375LR8MY#ADQ$8ocI@iW)Z#s&$kp45#QENYs{Vm664cd0zJ>`ZfNJP-;^gyf@q@A+Aa& zaPW${IB3w~qSKFq-Q>G{jc2?xJmg>Kr;5fhXiP{JgkC-u+0 zt@s{uo_%o@G8qk}^}G6$qXXUKmMz#0N0TXCwHZG6IHWOM?4s{H zXdelDL!l?A%ACL(<2b36TNp!IoWAe z+b2DRU5t+?c$EW`)k}nUlJS}E-XZ3vOpZT3pO6_mzJWf*7t*`?6&{PA|)3qsgU5hvr%K#TzBRXQ{`nG7;yQx~|oJF@G5*tI})DIEJ(RrP7(} z?n4>o^Kod=JjJ&H6GgJdT^@|!(+FpHF6^O06=Y(;iCq z1lZu@-r0V7yKwvF8waoTEnHg-zPg3d7l4G1BU5Mr^LMK zGJ$*Q4&p+J7!g%Z&uWEu7Z(q-RK&PAaW>bPq^I7rsE zD>T5ME8EJi%4y6x$$PKjnVI9O$IK#wnK4P$^RFL@x>0*02!H3zqSIR4*I<+A>?;&v zwBzTzvSlHlEa7_(pPh4pvWT|O|Mg+Wl{e8wGh&RJ2uY&&AYRXRF1n-&SFzr4On7%p zC>GbX-PDOwSzh*!R}Fe*y(9iTMbTfu)y~I%Ed3sr9WqIlGtqVzd!dG>hw-!ivfoQb z=cqT^j~=Hx?o}RSk!D~Wj9k<_V?Qo*Yb_#PoHSu*FnsE3TZrvbQa=?t7jo(MgSamb zE_=pBzAn*oc}Ywgk(a`yeQ@8(bBoK%X!^JN^z56f%^Wsb`oBKwVky{Qzaw$IdD%kY z2>1S5>^gSED-$mbLky$M@@4%9Bf7NDZQ2dR@}{TBWe(;$Juc8BWojtjY^ld@92E1) zG}|ee(AZ{@wN7H|j^dk$aghV_WTVbr!+3 zFx%VlLT`IDugfWRmkt>1JYRhNaoyUyi$y@YKGyh>T4<$jy_h?rx!K3`FNdr2-QPW^ zt3}!lB)i`u*n8K)*>XN=?J}-5*Sb%rPM1}^eO-{4nEqXc0g;;-cx6EE z9U7wrAzJVDEuJ$tnv*rEEDI&L2py##IfBAH$g=_-;!XY5gNp2%;+rB-lU9_=vhSC_ z%>62ScHwBp1k?ENK~scy*Tl1MbC;{{yP{^ArNoq1@(piayyO%*TwYJfP%ycw@)Kdw z#1!i}|6@-0q~E3|jEq$7~+BU@@{ zzvMFV@*Oe0CSND|+;3Gz72{lseB8X(_s+H{mndY=^4F{C>CefRN$(w*Ff_095omdq-XeJffcC+=egfkM!-??N*fY z&}naF2)=r7=VQQcW~Rx7_*RAmZJ7ie3zbeU0~ZtaU%CoXcjOzINne{`MwVaIE5(?0 zq@?vK>+$m%l;lnbbQ<))j^k|Gy(n=d-48+Iop{Op-HpDxY!7ZsYA8Q!_T(Ef9h1j2 zU>%O56nwElwqtQe2!XwCo^x%yAsfH+n_RC;CccHO`GVA^4@BXlWUZl{Nknud(_GDR zeC2u0hmCnJaV3)ookm7!N~yG87_Vk!bp$@R`xbxE{HsXwjgC0y+FM-=G9g5Fk2bG| zF}Gw3-)`V@Bzf>tH0&lWc?wH!kOY?3gr)>h#2NAW%HbGOSwo+TOnniYQmrPF`ejAw z8ch?U-HL}>)XHCx7w)*Vt_tK_vcRI}34X=c(0~`GN}AqQ@-c@ceze_?d#lH)iEm-7 zy4siN_o0#r&9jGX0S4y-T8+ANZ;-jlH0fV|RobwUuyCj{@L(?W;hp`RbKA*+5m_@V zSTv#iT^u>Yh7XPT4aodSgG+hUM`+{mHo2{XHhQURws2`~*%>o)pnmAcec@&o zcK?!dcwznvInPadx4wfp1_3Wl&&3W!jI?6%OqG{=e%mCPm40|6C^b&Du;5sJ|A(mQQQ_LXTRj7Z6bH6l=I$PG{H$)$}b{MKzV4uHL;9((+rfr^jXc z)kgH0_ugLx$z6osxp*(jvsd4KmU)xoCTiDwl(005lDeWv4+IdcvHssL zGEhG_`%;_b(nn?FC*lx|s7fljXPmDeO}o8Wmb^GPNrY}m$)BU5+cO*cm1r1?GbFX4 zVg%o2oo?BRAusYu?xRfZ_T9yR>bM`vYv-15lHD-Fur<#^&ngS^MO_gE2cf*xA8!)-Gw9 zO6^u}g`=phaVGhLgy|_CTWQTlp@~bp;wdv)8J=j7-$d^D)kZxpCG;=nmB8DHK)1-g zbfCwEeXzzGz$e*|oNz>K>3o|)C9e}<;5N?_ zj*0b^CvB+;L&oM=1o!!S>jpwaUBB*YK0P*=oRywwbL}MWRP>T|`t;)M66c}25U~rN z5S#jKDjB7GOua{kSubi2CKf;Tv;TN9^)`r1I<16uiPbrA7s1eXb9&1TA5kq(b6g&K zjfOh-(hL0d>+@Nd-ZMtdq!n$J`)7XD|9qVq)9SOn9oZk#q|Dy%L#Xh~M^(meX*HUN zje~2mmg;`;`p=uoyqi7v1MQ`MdE#x&a6Y0%a&yJBU{aW>)`g%Yo%^((VPPg8R)Br3 zGUTVl!*=G{uW9$!id*qy>2Gflsy)z^p<7`$%d&)a!5lYGVOxc?A#&3w5zAs%$i5hw|-(2c}EK?(X=cMfAl9X;I zkyH1nl|S^CF51erqkRRt4JPN1F#nUf{h+(NQhEr?&7__-8k`Ih;q|$E&GU(fu**eU z8>8#X(WP~HZ@cBql8En9XY?xbVw$}8UZq6e6)T#W-mO(BBHABC`|dX4@#t5|rpZR7 z3?(&%U(BD~mr3;lc{oNs%sTK>G2hJmI;T+W?ME;E=t|EP!B+a}X zflJgvPk(Ti5V`cyXj7L)pRGCx)k@OefcfZP44E?8po|;K3-PW-lWLn z;U~r|7j1nk+=pnAS}5;)F}uo0wPXJi#|+t1=aw1qFxR%KKSul&Q*58+&%WXq+c=^` zq~{Z4&oYx40X+wmrIKDWSaRa)HBSP;~d zn)afZi1mEn#n;v{KXSFj$UVBHT~=NmI+Nu7Zm%>Frkk@d2uwL@GP+eVFH_nk;E*iF zXn&D;-_?D|J@KxgtAT4dVuafogP-kkTsYyY6eEZ5x&i#mIc47RIxd=bNVCn+_{^8Q zMW5+>EY`3`24as6X}-^}U>s!Y+7EIChce%=wMdxr&fzj#c-DD&W1w4g`@QTtx6Y?8 zR$N{Q)_#0o>cprZ%y4UuarAq0;O4KdXZtSkNKwheI@%>l84zivpI62ScvP&;EYqM| zrrMC7`+GKdtVYO6CX;k?P{gGFjsA!OBYMzbexe~Rhqez_O3-^#Zmn{;1x}^${kzD{ z%UDjrs^?0Z&LC$)FH2I0mxPDz_u}%mt6KzrrpTTzu1WW8i)jf+`8w?#ED|+lYkE|F zJZ2(Pqbq&uye136hVsyS=&8tCyQ8gIA(K!#Dnlq=${22eB z3~A-JKd^I1mbza{bY5X1OuVoVE<@Cm)7)rP;PZw3;;hFQv(VvC;M3>wv^KMeA(i*e zFmcE+kq8b6c{&>hUT^HpKX0!>rR2=cDaHNyx?`Ol{mnc_`g2+M;RzrR8XF?*8i+gF zK<}<&opOIv_xc;P7Z?%I66c+hQdsTSX%*Dmel-<4tF+BIOw+3pw%FxRD{FXJX;D1= zLTza0MRS=uf_EsNj1@;Qr?B&0!_|*z{tK4gG9uqRrMC&3wXk)uN@=vx9Sw?Fo|3P# zIlYo45}8ybddc3Ask3_AA)3SX?A)eY);31NjDKisCrM*LIo~3;UEQjoxD3l1y!t74%N%{VrL9en>wY83YKW3W6gNjY+WBuq(y)yn6b*n`F zvv|vo2?E^duGW+%$&)xEjaHT&b?d*Ha&9@2@JZvE$4fr-Uu?w6&bXXdz)aW5@f9n* zfAG823*vc`UU^UQ7u7792X*<&=SSyW`Wh{AgqKv_Px1A*&UWNjZ+NzCWl{YX({tJ* zL8hl)=YH6l#V(~%$~CWCHLFQ}@{s8q_sa}LamL$1%{5B$H}_q*II&1DoLL9H@{-E_ z8g5DZNd8S>;2pw=`Qv^@Yv1qyQ8}INjbc$WHoZu!N0u%vViR?{?7akw2CA5ueW_`x z5fTsj^su$(UQ2d7h_BnMzb(Q%jHBtw#DRr~?WD)cDQwy9XT|WRn{Z# z7o4~JQy*M)lWzDh&)6FsUY-?}o*vI0zHwW%@DR^^kiQNoJ?t~Wwm$PKTCGOP4Otw)_h z%E*1)0-xymP22lKzv8;!E#1mL`s@R=G6jV9~# zYcVz{QU=p^`p<4&O9~`3Mxak2T_fM=S#2zI-c$TMx5}r{5;QdXv0`JDH-{|LU0}nX z{=8mKa_WT9wNi&I5walfSpDeM?<@i0a(U-@$D5^^;&Oi9-8**~*UB-}VER1XK1X`t zl(UAiBB4PBZyx?n**FXA{$F2gkYlp19#E0uE+4Lr-2WbbwDs~n?aDRR^+SV)-BFpF z*wW9wPVIgO77QEx{X-SoAeolt((!WW^$_PRQy0GHi5K#}G*o`C`qc1ctLEKunW~4U zVVGho-Zgc(j?@=+?*lj5oMs_EDXmm^jN@%}O(;I&~x!tCAKveBH|yyhq<~({&;;>$^*&n=JVALn+fo z(v8aglP`jmqRBcx`#+(SVT|ln<5<%sIsY&+eBlxF25-ez{^4 zSIe^U(U6(bZUjFL$8)alR}Jgf!bLm1rGNpy+18(Z=~0W1;>KUFQO0(@{PeDBy|%Ae z7~fvz&f1vUXUXRKW@FED?gbJKJip~hcrkMcNy)aeUV&GpceiKwZaxRqvTF9d2=RA2 zac{6Q^N80q6^J@5UdL7t`e`+hwKkWp#Z<~AGPCaJyb4f=%31tOP>pHpuo0y2>~_W3 zn%Xd#Gg@}|G77=hLmCMDtz+|6&JpmJ8{BputN+PHvq_KDr{DToTRbSbF0$nLR#3^g z5_x&?g6@5L>-Pj#ZxfK27x_NWtp}bBc%SHylh&q4L@U|z=Jh(^X982J-|ZyZb(L2YIsw^c2{s6q6Ol0l9@@+o_DjzS`VM2)^N!XUF|7X>=`bke(t-&GEw%#tAD`8 z@l`3Gy#gm!SP)WqaqFB`mce>_Zp0UhHKT%g1&NW*LSHLYLXJeJUb<3hI)4!P9*isL z8fcr)-nU-op-ZkaKO1Cz?QK%gjpyY`Y7e{)KGx1Y#3#hSOZ;rQx!(Liij~c!k;9C2 z8@GU0w%9CKb~&QNGkRiR>C7N?c?U-Kj{6-uvMX<&7Wi9L=Tu=T<~ozRsPO