From eef63799c9054b946a209672d887a8451f1f37ad Mon Sep 17 00:00:00 2001 From: Ilya Yaroshenko Date: Sun, 2 Oct 2016 00:10:13 +0200 Subject: [PATCH 01/33] Fix a link and typo --- changelog/2.072.0_pre.dd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/2.072.0_pre.dd b/changelog/2.072.0_pre.dd index 4661e8ecb4..43a51fd687 100644 --- a/changelog/2.072.0_pre.dd +++ b/changelog/2.072.0_pre.dd @@ -418,7 +418,7 @@ $(BUGSTITLE Library Changes, `ptr` property is used in $(LINK2 https://github.com/libmir/mir, Mir) for $(LINK2 http://docs.mir.dlang.io/latest/mir_sparse.html, sparse tensors). `ndslice` developer mirror in Mir will be removed as - soon as LDC (LLVM D compiler) supports D version 2.072.. + soon as LDC (LLVM D compiler) supports D version 2.072. ) $(P Public constructor for `Slice` was added to support $(MREF std,experimental,ndslice) integration @@ -426,7 +426,7 @@ $(BUGSTITLE Library Changes, ) ) - $(LI $(LNAME2 slice_toHash, $(P $(REF .Slice.toHash, std,experimental,ndslice,slice) method was added.)) + $(LI $(LNAME2 slice_toHash, $(P $(REF Slice.toHash, std,experimental,ndslice,slice) method was added.)) --- import std.experimental.ndslice; From d685363d928a553186baea5e86bf9822e3c74e71 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Mon, 3 Oct 2016 23:05:15 +0000 Subject: [PATCH 02/33] latex.ddoc: Remove breakatwhitespace The option seems to be gone in the 2016 edition of the listings package. This should fix the documentation CI. --- latex.ddoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/latex.ddoc b/latex.ddoc index 34797767f6..3b4a90c234 100644 --- a/latex.ddoc +++ b/latex.ddoc @@ -428,7 +428,7 @@ DDOC=% Copyright (c) 1999-$(YEAR) by Digital Mars \usepackage{MnSymbol} \lstset{prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\rhookswarrow}}} \lstset{postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}} -\lstset{breaklines=true,breakatwhitespace=true} +\lstset{breaklines=true} \sloppy % Page size From efe2a98ef5be5d092ff5d72b15d77d4f6c145ba7 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Mon, 3 Oct 2016 23:26:17 +0000 Subject: [PATCH 03/33] Convert HTML comments to DDoc comments The target output is not always HTML. Fixes HTML comments visible in the PDF. --- cpptod.dd | 26 +++++++++--------- ctod.dd | 76 ++++++++++++++++++++++++++--------------------------- spec/lex.dd | 2 +- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/cpptod.dd b/cpptod.dd index 526016b0be..83efe76167 100644 --- a/cpptod.dd +++ b/cpptod.dd @@ -2,7 +2,7 @@ Ddoc $(COMMUNITY Programming in D for C++ Programmers, - +$(COMMENT img src="images/cpp1.gif" border="0" align="right" alt="C++") $(P Every experienced C++ programmer accumulates a series of idioms and techniques which become second nature. Sometimes, when learning a new language, those @@ -28,7 +28,7 @@ $(UL ) -
+
$(COMMENT -------------------------------------------- ) $(H3 Defining constructors) @@ -56,7 +56,7 @@ class Foo which reflects how they are used in D. -
+
$(COMMENT -------------------------------------------- ) $(H3 Base class initialization) $(H4 The C++ Way) @@ -125,7 +125,7 @@ class A } ------ -
+
$(COMMENT -------------------------------------------- ) $(H3 Comparing structs) $(H4 The C++ Way) @@ -188,7 +188,7 @@ if (x == y) ... ------ -
+
$(COMMENT -------------------------------------------- ) $(H3 Creating a new typedef'd type) $(H4 The C++ Way) @@ -255,7 +255,7 @@ if (h != Handle.init) default initializer can be supplied to $(REF Typedef, std,typecons) as a value of the underlying type. -
+
$(COMMENT -------------------------------------------- ) $(H3 Friends) $(H4 The C++ Way) @@ -326,7 +326,7 @@ int abc(A p) { return p.a; } The $(D private) attribute prevents other modules from accessing the members. -
+
$(COMMENT -------------------------------------------- ) $(H3 Operator overloading) $(H4 The C++ Way) @@ -375,7 +375,7 @@ struct A error prone. Far less code needs to be written to accomplish the same effect.) -
+
$(COMMENT -------------------------------------------- ) $(H3 Namespace using declarations) $(H4 The C++ Way) @@ -410,7 +410,7 @@ alias x = foo.x; declaration. Alias can be used to rename symbols, refer to template members, refer to nested class types, etc. -
+
$(COMMENT -------------------------------------------- ) $(H3 RAII (Resource Acquisition Is Initialization)) $(H4 The C++ Way) @@ -475,7 +475,7 @@ mechanism that lets you run arbitrary statements whenever leaving the current scope.) -
+
$(COMMENT -------------------------------------------- ) $(H3 Properties) $(H4 The C++ Way) @@ -542,7 +542,7 @@ int x = a.property; It's also a way to have interface classes, which do not have data fields, behave syntactically as if they did. -
+
$(COMMENT -------------------------------------------- ) $(H3 Recursive Templates) $(H4 The C++ Way) @@ -593,7 +593,7 @@ void test() } ------ -
+
$(COMMENT -------------------------------------------- ) $(H3 Meta Templates) @@ -745,7 +745,7 @@ int main() } ------ -
+
$(COMMENT -------------------------------------------- ) $(H3 Type Traits) diff --git a/ctod.dd b/ctod.dd index b9969cb06c..20b38b2d89 100644 --- a/ctod.dd +++ b/ctod.dd @@ -6,7 +6,7 @@ $(COMMENT $(BLOCKQUOTE_BY William Nerdspeare, Et tu, D? Then fall, C! )) - +$(COMMENT img src="images/c1.gif" border="0" align="right" alt="ouch!") $(P Every experienced C programmer accumulates a series of idioms and techniques which become second nature. Sometimes, when learning a new language, those @@ -64,7 +64,7 @@ $(UL $(LI $(RELATIVE_LINK2 variadic, Variadic Function Parameters)) ) -
+
$(COMMENT -------------------------------------------- ) $(H3 Getting the Size of a Type) $(H4 The C Way) @@ -87,7 +87,7 @@ double.sizeof Foo.sizeof ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Get the max and min values of a type) $(H4 The C Way) @@ -111,7 +111,7 @@ ulong.max double.min ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Primitive Types) $(H4 C to D types) @@ -143,7 +143,7 @@ $(P ) $(P Ints and unsigneds in C are of varying size; not so in D.) -
+
$(COMMENT ============================================ ) $(H3 Special Floating Point Values) $(H4 The C Way) @@ -179,7 +179,7 @@ double.min_10_exp double.min_exp ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Remainder after division of floating point numbers) $(H4 The C Way) @@ -202,7 +202,7 @@ double d = x % y; real r = x % y; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Dealing with NANs in floating point compares) $(H4 The C Way) @@ -229,7 +229,7 @@ $(H4 The D Way) result = (x < y); // false if x or y is nan ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Asserts are a necessary part of any good defensive coding strategy) $(H4 The C Way) @@ -251,7 +251,7 @@ D simply builds assert into the language: assert(e == 0); ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Initializing all elements of an array) $(H4 The C Way) @@ -270,7 +270,7 @@ int[17] array; array[] = value; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Looping through an array) $(H4 The C Way) @@ -327,7 +327,7 @@ foreach (ref value; array) value += 42; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Creating an array of variable size) $(H4 The C Way) @@ -363,7 +363,7 @@ array.length = array.length + 1; array[array.length - 1] = x; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 String Concatenation) $(H4 The C Way) @@ -418,7 +418,7 @@ s = s1 ~ s2; s ~= "hello"; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Formatted printing) $(H4 The C Way) @@ -447,7 +447,7 @@ import std.stdio; writefln("Calling all cars %s times!", ntimes); ----------------------- -
+
$(COMMENT ============================================ ) $(H3 Forward referencing functions) $(H4 The C Way) @@ -490,7 +490,7 @@ void forwardfunc() } ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Functions that have no arguments) $(H4 The C Way) @@ -512,7 +512,7 @@ void foo() } ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Labeled break and continue statements) $(H4 The C Way) @@ -559,7 +559,7 @@ Louter: // break Louter goes here ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Goto Statements) $(H4 The C Way) @@ -577,7 +577,7 @@ $(H4 The D Way) programmers who know when the rules need to be broken. So of course D supports goto statements. -
+
$(COMMENT ============================================ ) $(H3 Struct tag name space) $(H4 The C Way) @@ -598,7 +598,7 @@ $(H4 The D Way) struct ABC { ... } ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Looking up strings) $(H4 The C Way) @@ -665,7 +665,7 @@ void dostring(char[] s) to generate a fast lookup scheme for it, eliminating the bugs and time required in hand-coding one. -
+
$(COMMENT ============================================ ) $(H3 Setting struct member alignment) $(H4 The C Way) @@ -711,7 +711,7 @@ struct ABC } ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Anonymous Structs and Unions) Sometimes, it's nice to control the layout of a struct with nested structs and unions. @@ -771,7 +771,7 @@ f.y; f.p; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Declaring struct types and variables) $(H4 The C Way) @@ -805,7 +805,7 @@ Foo foo; block {} in how semicolons are used. ) -
+
$(COMMENT ============================================ ) $(H3 Getting the offset of a struct member) $(H4 The C Way) @@ -829,7 +829,7 @@ struct Foo { int x; int y; } off = Foo.y.offsetof; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Union Initializations) $(H4 The C Way) @@ -855,7 +855,7 @@ U x = { a:5 }; avoiding the confusion and maintenance problems. -
+
$(COMMENT ============================================ ) $(H3 Struct Initializations) $(H4 The C Way) @@ -884,7 +884,7 @@ S x = { b:3, a:5 }; The meaning is clear, and there no longer is a positional dependence. -
+
$(COMMENT ============================================ ) $(H3 Array Initializations) $(H4 The C Way) @@ -927,7 +927,7 @@ int[2][3] b = [ [2,3], [6,5], [3,4] ]; int[2][3] b = [[2,6,3],[3,5,4]]; // error ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 Escaped String Literals) $(H4 The C Way) @@ -962,7 +962,7 @@ string quotedString = `"[^\\]*(\\.[^\\]*)*"`; // "[^\\]*(\\.[^\\]*)*" string hello = "hello world\n"; ---------------------------- -
+
$(COMMENT ============================================ ) $(H3 ASCII versus Wide Characters) $(P Modern programming requires that wchar strings be supported in an easy way, for internationalization of the programs.) @@ -995,7 +995,7 @@ auto _utf16 = "hello"w; // UTF-16 string auto _utf32 = "hello"d; // UTF-32 string ----------------------------- -
+
$(COMMENT ============================================ ) $(H3 Arrays that parallel an enum) $(H4 The C Way) @@ -1021,7 +1021,7 @@ string[COLORS.max + 1] cstring = Not perfect, but better. -
+
$(COMMENT ============================================ ) $(H3 Creating a new type with typedef) $(H4 The C Way) @@ -1117,7 +1117,7 @@ if (h != Handle.init) There's only one name to remember: $(D Handle). -
+
$(COMMENT ============================================ ) $(H3 Comparing structs) $(H4 The C Way) @@ -1163,7 +1163,7 @@ if (x == y) ----------------------------- -
+
$(COMMENT ============================================ ) $(H3 Comparing strings) $(H4 The C Way) @@ -1206,7 +1206,7 @@ if (str < "betty") which is useful for sorting/searching. -
+
$(COMMENT ============================================ ) $(H3 Sorting arrays) $(H4 The C Way) @@ -1246,7 +1246,7 @@ type[] array; sort(array); // sort array in-place ----------------------------- -
+
$(COMMENT ============================================ ) $(H3 String literals) $(H4 The C Way) @@ -1276,7 +1276,7 @@ lines So blocks of text can just be cut and pasted into the D source. -
+
$(COMMENT ============================================ ) $(H3 Data Structure Traversal) $(H4 The C Way) @@ -1389,7 +1389,7 @@ Symbol symbol_membersearch(Symbol[] table, char[] id) } ----------------------------- -
+
$(COMMENT ============================================ ) $(H3 Unsigned Right Shift) $(H4 The C Way) @@ -1437,7 +1437,7 @@ j = i >>> 3; avoids the unsafe cast and will work as expected with any integral type. -
+
$(COMMENT ============================================ ) $(H3 Dynamic Closures) $(H4 The C Way) @@ -1531,7 +1531,7 @@ void func(Collection c) eliminating the need to create irrelevant function names. -
+
$(COMMENT ============================================ ) $(H3 Variadic Function Parameters) The task is to write a function that takes a varying diff --git a/spec/lex.dd b/spec/lex.dd index 1247727d28..212a2a6426 100644 --- a/spec/lex.dd +++ b/spec/lex.dd @@ -1083,7 +1083,7 @@ $(H3 $(LNAME2 global_symbols, Globally Defined Symbols)) $(GRAMMAR $(GNAME Symbols): $(MULTICOLS 4, - $(D $(LINK2 arrays.html#strings, string)) (alias to immutable(char)[]) + $(D $(LINK2 arrays.html#strings, string)) (alias to immutable(char)[]) $(COMMENT This is important; people want to know these things up front.) $(D $(LINK2 arrays.html#strings, wstring)) (alias to immutable(wchar)[]) $(D $(LINK2 arrays.html#strings, dstring)) (alias to immutable(dchar)[]) From 8319bb96b9828393fdbe76b936dbafd50afb9893 Mon Sep 17 00:00:00 2001 From: Alexandru Caciulescu Date: Thu, 6 Oct 2016 11:19:17 +0300 Subject: [PATCH 04/33] Fix Issue 16592 - Building dlang.org does not work without a preexisting dmd installation https://issues.dlang.org/show_bug.cgi?id=16592 --- posix.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posix.mak b/posix.mak index 83a0ea31b5..77180912b1 100644 --- a/posix.mak +++ b/posix.mak @@ -360,7 +360,7 @@ $(DMD_REL) : ${DMD_DIR}-${LATEST} ${MAKE} --directory=${DMD_DIR}-${LATEST}/src -f posix.mak AUTO_BOOTSTRAP=1 -j 4 dmd-prerelease : $(STD_DDOC_PRE) $(DMD_DIR) $(DMD) - $(MAKE) --directory=$(DMD_DIR) -f posix.mak html \ + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html \ DOCDIR=${DOC_OUTPUT_DIR}/dmd-prerelease \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC_PRE))" From 8ac46c0c0ac4de6a88d84043d813c67a8c04da90 Mon Sep 17 00:00:00 2001 From: Johnny Date: Sun, 9 Oct 2016 00:31:05 +1300 Subject: [PATCH 05/33] fixed typo --- ctod.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctod.dd b/ctod.dd index 20b38b2d89..d40703191b 100644 --- a/ctod.dd +++ b/ctod.dd @@ -502,7 +502,7 @@ void foo(void); $(H4 The D Way) D is a strongly typed language, so there is no need to explicitly - say a function takes no arguments, just don't declare it has having + say a function takes no arguments, just don't declare it as having arguments. ---------------------------- From 01bceb7066f38358b8b2d1d7a345989414bca46f Mon Sep 17 00:00:00 2001 From: Jacob Carlborg Date: Wed, 12 Oct 2016 21:16:54 +0200 Subject: [PATCH 06/33] Minor tweaks to fix current Ddoc themes due to the new Ddoc theme The new Ddoc theme [1] introduced three new macros: DDOC_MEMBER, DDOC_MEMBER_HEADER and DDOC_HEADER_ANCHOR. This tweak configures these new macros to have no impact on the existing ddoc themes. [1] https://github.com/dlang/dmd/pull/6173 --- html.ddoc | 3 +++ plaintext.ddoc | 3 +++ verbatim.ddoc | 3 +++ 3 files changed, 9 insertions(+) diff --git a/html.ddoc b/html.ddoc index f0cc052672..519833e2d1 100644 --- a/html.ddoc +++ b/html.ddoc @@ -110,6 +110,9 @@ _= _=DDoc-related stuff DDOC_COMMENT = +DDOC_MEMBER = $0 +DDOC_MEMBER_HEADER = +DDOC_HEADER_ANCHOR = DDOC_DECL = $(DT $(BIG $0)) DDOC_DECL_DD = $(DD $0) DDOC_DITTO = $(BR)$0 diff --git a/plaintext.ddoc b/plaintext.ddoc index 2d4389b330..7b3911d2bf 100644 --- a/plaintext.ddoc +++ b/plaintext.ddoc @@ -57,10 +57,13 @@ DDOC_DESCRIPTION = $0 DDOC_DITTO = $0 DDOC_ENUM_MEMBERS = $0 DDOC_EXAMPLES = $0 +DDOC_HEADER_ANCHOR = DDOC_HISTORY = $0 DDOC_KEYWORD = $0 DDOC_LICENSE = $0 +DDOC_MEMBER = $0 DDOC_MEMBERS = $0 +DDOC_MEMBER_HEADER = DDOC_MODULE_MEMBERS = $0 DDOC_PARAM_DESC = $0 DDOC_PARAM = $0 diff --git a/verbatim.ddoc b/verbatim.ddoc index acf5ec9beb..eaa133bed0 100644 --- a/verbatim.ddoc +++ b/verbatim.ddoc @@ -59,10 +59,13 @@ DDOC_DESCRIPTION = $(DOLLAR)(DDOC_DESCRIPTION $0) DDOC_DITTO = $(DOLLAR)(DDOC_DITTO $0) DDOC_ENUM_MEMBERS = $(DOLLAR)(DDOC_ENUM_MEMBERS $0) DDOC_EXAMPLES = $(DOLLAR)(DDOC_EXAMPLES $0) +DDOC_HEADER_ANCHOR = $(DOLLAR)(DDOC_HEADER_ANCHOR $0) DDOC_HISTORY = $(DOLLAR)(DDOC_HISTORY $0) DDOC_KEYWORD = $(DOLLAR)(DDOC_KEYWORD $0) DDOC_LICENSE = $(DOLLAR)(DDOC_LICENSE $0) DDOC_MEMBERS = $(DOLLAR)(DDOC_MEMBERS $0) +DDOC_MEMBER = $(DOLLAR)(DDOC_MEMBER $0) +DDOC_MEMBER_HEADER = $(DOLLAR)(DDOC_MEMBER_HEADER $0) DDOC_MODULE_MEMBERS = $(DOLLAR)(DDOC_MODULE_MEMBERS $0) DDOC_PARAM_DESC = $(DOLLAR)(DDOC_PARAM_DESC $0) DDOC_PARAM = $(DOLLAR)(DDOC_PARAM $0) From 14d8156765bf9ee615b45f27095274d1a795c4b6 Mon Sep 17 00:00:00 2001 From: Mathias Lang Date: Mon, 26 Sep 2016 14:40:25 +0200 Subject: [PATCH 07/33] Document comma expression deprecation as part of 2.072 --- deprecate.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deprecate.dd b/deprecate.dd index 26efc0d574..48c031e167 100644 --- a/deprecate.dd +++ b/deprecate.dd @@ -10,7 +10,7 @@ $(SPEC_S Deprecated Features, $(TABLE2 Deprecated Features, $(THEAD Feature, Spec, Dep, Error, Gone) - $(TROW $(DEPLINK Using the result of a comma expression), future,  ,  ,  ) + $(TROW $(DEPLINK Using the result of a comma expression), 2.072, 2.072,  ,  ) $(TROW $(DEPLINK delete), future,  ,  ,  ) $(TROW $(DEPLINK scope for allocating classes on the stack), future,  ,  ,  ) $(TROW $(DEPLINK Imaginary and complex types), future,  ,  ,  ) From 3c4b87936718e284ce76b139964cc859a210c309 Mon Sep 17 00:00:00 2001 From: Sean Enck Date: Thu, 20 Oct 2016 18:32:35 -0400 Subject: [PATCH 08/33] typo "als" -> "also" --- spec/class.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/class.dd b/spec/class.dd index 020bd7c016..19a10b4306 100644 --- a/spec/class.dd +++ b/spec/class.dd @@ -575,7 +575,7 @@ $(H3 $(LNAME2 field-init, Field initialization inside constructor)) ------ $(P If the assignment expression for the field initialization may be invoked - multiple times, it would als be rejected. + multiple times, it would also be rejected. ) ------ From aed85471943baba2b003df341dacc7a185a33d53 Mon Sep 17 00:00:00 2001 From: Mathias Lang Date: Mon, 26 Sep 2016 15:02:47 +0200 Subject: [PATCH 09/33] Issue 3827: Document deprecation of implicit string concatenation See dlang/dmd#6155 --- deprecate.dd | 37 +++++++++++++++++++++++++++++++++++++ spec/lex.dd | 10 ++++------ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/deprecate.dd b/deprecate.dd index 48c031e167..784871a84d 100644 --- a/deprecate.dd +++ b/deprecate.dd @@ -10,6 +10,7 @@ $(SPEC_S Deprecated Features, $(TABLE2 Deprecated Features, $(THEAD Feature, Spec, Dep, Error, Gone) + $(TROW $(DEPLINK Implicit string concatenation), 2.072, 2.072,  ,  ) $(TROW $(DEPLINK Using the result of a comma expression), 2.072, 2.072,  ,  ) $(TROW $(DEPLINK delete), future,  ,  ,  ) $(TROW $(DEPLINK scope for allocating classes on the stack), future,  ,  ,  ) @@ -57,6 +58,42 @@ $(SPEC_S Deprecated Features, ) +$(H3 $(DEPNAME Implicit string concatenation)) + $(P Currently, two adjacent strings are implicitly concatenated: + + --- + string foo = "Hello" "World"; + --- + + This feature is handy for a long string that spans multiple lines, + however it is possible to get the same behaviour explicitly by + using the concatenation operator ('~'): + + --- + string foo = "Hello" ~ "World"; // No allocation is performed + --- + ) +$(H4 Corrective Action) + $(P Replace implicit string concatenation by explicit one, using '~'.) +$(H4 Rationale) + $(P This is a very early feature of the language, which is nowadays totally + covered by the concatenation operator: it is performed at compile time + for constants and doesn't result in memory allocation.) + + $(P However, having implicit concatenation can and did result in hard + to spot bugs, for example:) + + --- + string[] names = + [ + "Anna", + "Michael" + "Emma", + "David" + ]; + // The content of arr is [ "Anna", "MichaelEmma", "David" ] + --- + $(H3 $(DEPNAME Using the result of a comma expression)) $(P The comma operator (`,`) allows executing multiple expressions and discards the result of them except for the last which is returned. diff --git a/spec/lex.dd b/spec/lex.dd index 212a2a6426..9cfd1dc0aa 100644 --- a/spec/lex.dd +++ b/spec/lex.dd @@ -436,8 +436,7 @@ x"00 FBCD 32FD 0A" // same as The number of hex characters must be a multiple of 2. $(P ) - Adjacent strings are concatenated with the ~ operator, or by simple - juxtaposition: + Adjacent strings are concatenated with the ~ operator: -------------- "hello " ~ "world" ~ "\n" // forms the string @@ -448,9 +447,9 @@ x"00 FBCD 32FD 0A" // same as The following are all equivalent: ----------------- -"ab" "c" -r"ab" r"c" -r"a" "bc" +"ab" ~ "c" +r"ab" ~ r"c" +r"a" ~ "bc" "a" ~ "b" ~ "c" ----------------- @@ -1152,4 +1151,3 @@ x; // this is now line 6 of file foo\bar Macros: TITLE=Lexical - From 979d857fa75700e63100b4297d20174cdb7c74a8 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Tue, 25 Oct 2016 13:56:56 -0700 Subject: [PATCH 10/33] add dlangupb-scholarship.dd --- dlangupb-scholarship.dd | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 dlangupb-scholarship.dd diff --git a/dlangupb-scholarship.dd b/dlangupb-scholarship.dd new file mode 100644 index 0000000000..78c0cc3819 --- /dev/null +++ b/dlangupb-scholarship.dd @@ -0,0 +1,77 @@ +Ddoc + +$(D_S The DLang UPB Languages and Systems Research Scholarship, + +$(P The D Language Foundation is pleased to extend the Languages and Systems +Research Scholarships to EE and CS students at University "Politehnica" +Bucharest (UPB).) + +$(P This scholarship was established to recognize outstanding full-time +students enrolled in postgraduate research in the Departments of +Electrical Engineering ("Electronica si Telecomunicatii") and Computer +Science ("Automatica si Calculatoare") at UPB. The award fosters +graduate-level (MSc and PhD) research in the fields of Programming +Languages and Systems, with an emphasis on subdomains and topics most +relevant to the mission of the Foundation. These include but are not limited to:) + +$(UL + $(LI Systems programming languages semantics and implementation) + $(LI Engines for code transformation and refactoring) + $(LI Optimizers) + $(LI Plugins for code editors) + $(LI Memory safety) + $(LI Static and dynamic program analysis) + $(LI Networking and security) + $(LI Core runtime, memory allocation, garbage collection) + $(LI Libraries and frameworks) + $(LI Static/dynamic linking and loading) + $(LI Generic and Generative Programming) +) + +$(P The scholarship award may be for an amount up to 900 RON per week decided on a semester basis. +Semester dates are defined by the UPB academic calendar. We may approve +partial scholarships that start during a semester; however, a +scholarship period always ends with the semester. The funds are intended +to cover room, board, books and other educational supplies, equipment, +and other research costs of students. Approved applicants agree to not +pursue paid employment for the duration of the scholarship.) + +$(H3 Eligibility Requirements) + +$(OL + $(LI Completed, signed, and dated application.) + + $(LI Proof of enrollment in the MSc or PhD program at UPB EE ("Electronica + si Telecomunicatii") or CS ("Automatica si Calculatoare").) + + $(LI Transcript with classes attended and their respective grades.) + + $(LI Submission of an original essay (800-1200 words) describing how this + award will assist you in reaching your educational and research objectives.) + + $(LI Letter of recommendation from your program director evaluating your + research potential.) + + $(LI Public link to the completed BSc dissertation.) + + $(LI Pass one or more interviews (in person, by phone, or via Skype) with + Foundation representatives. The interviews assess technical competence, + research vision, and command of the English language of applicants.) +) + +$(P The D Language Foundation may offer to renew a scholarship for +existing/former recipients without the need to complete a new +application. The Foundation also reserves the rights to terminate a +scholarship before the end of semester if it assesses that the funds are +misused, progress in research is inadequate, or recipient behaves in a +manner unbecoming of an outstanding student and young researcher.) + +$(P We wish our applicants good luck and are looking forward to hearing from +you. Feel free to direct any related questions to foundation@dlang.org.) + +) + +Macros: + TITLE=The DLang UPB Languages and Systems Research Scholarship + WIKI=DLangUPBScholarship + SUBNAV=$(SUBNAV_ARTICLES) From 06e93cad74e5c74b9c2092582f89950ce88d52eb Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Tue, 25 Oct 2016 14:11:09 -0700 Subject: [PATCH 11/33] add dlangupb-scholarship to makefiles --- posix.mak | 2 +- win32.mak | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/posix.mak b/posix.mak index 77180912b1..351dd0eed7 100644 --- a/posix.mak +++ b/posix.mak @@ -165,7 +165,7 @@ PAGES_ROOT=$(SPEC_ROOT) acknowledgements areas-of-d-usage \ articles ascii-table bugstats.php builtin \ $(CHANGELOG_FILES) code_coverage community comparison concepts \ const-faq cpptod ctarguments ctod \ - D1toD2 d-array-article d-floating-point deprecate dll-linux dmd \ + D1toD2 d-array-article d-floating-point deprecate dlangupb-scholarship dll-linux dmd \ dmd-freebsd dmd-linux dmd-osx dmd-windows documentation download dstyle \ exception-safe faq forum-template foundation gpg_keys glossary \ gsoc2011 gsoc2012 gsoc2012-template hijack howto-promote htod index \ diff --git a/win32.mak b/win32.mak index fa74e94e03..689385ae68 100644 --- a/win32.mak +++ b/win32.mak @@ -48,7 +48,7 @@ SRC= $(SPECSRC) cpptod.dd ctod.dd pretod.dd cppcontracts.dd index.dd overview.dd D1toD2.dd intro-to-datetime.dd simd.dd deprecate.dd download.dd \ dll-linux.dd bugstats.php.dd \ ctarguments.dd articles.dd community.dd documentation.dd menu.dd \ - resources.dd search.dd + resources.dd search.dd dlangupb-scholarship.dd.dd SPECSRC=spec\spec.dd spec\intro.dd spec\lex.dd \ spec\grammar.dd spec\module.dd spec\declaration.dd \ @@ -136,7 +136,7 @@ TARGETS= $(SPECTARGETS) cpptod.html ctod.html pretod.html cppcontracts.html inde dmd-linux.html dmd-osx.html dmd-freebsd.html concepts.html \ d-floating-point.html migrate-to-shared.html \ D1toD2.html intro-to-datetime.html \ - deprecate.html download.html \ + deprecate.html download.html dlangupb-scholarship.dd.html \ d-array-article.html dll-linux.html bugstats.php.html \ gpg_keys.html forum-template.html ctarguments.html articles.html \ community.html documentation.html menu.html resources.html search.html \ @@ -371,6 +371,8 @@ d-floating-point.html : $(DDOC) d-floating-point.dd deprecate.html : $(DDOC) deprecate.dd +dlangupb-scholarship.dd.html : $(DDOC) dlangupb-scholarship.dd.dd + dll-linux.html : $(DDOC) dll-linux.dd documentation.html : $(DDOC) documentation.dd From 97c83a7d7d02559834fa1777c7813757a263b7a7 Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Wed, 26 Oct 2016 14:34:41 +0200 Subject: [PATCH 12/33] repair (hopefully) win32.mak build target - fixup for #1505 --- win32.mak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win32.mak b/win32.mak index 689385ae68..07d6fa3f94 100644 --- a/win32.mak +++ b/win32.mak @@ -48,7 +48,7 @@ SRC= $(SPECSRC) cpptod.dd ctod.dd pretod.dd cppcontracts.dd index.dd overview.dd D1toD2.dd intro-to-datetime.dd simd.dd deprecate.dd download.dd \ dll-linux.dd bugstats.php.dd \ ctarguments.dd articles.dd community.dd documentation.dd menu.dd \ - resources.dd search.dd dlangupb-scholarship.dd.dd + resources.dd search.dd dlangupb-scholarship.dd SPECSRC=spec\spec.dd spec\intro.dd spec\lex.dd \ spec\grammar.dd spec\module.dd spec\declaration.dd \ @@ -371,7 +371,7 @@ d-floating-point.html : $(DDOC) d-floating-point.dd deprecate.html : $(DDOC) deprecate.dd -dlangupb-scholarship.dd.html : $(DDOC) dlangupb-scholarship.dd.dd +dlangupb-scholarship.dd.html : $(DDOC) dlangupb-scholarship.dd dll-linux.html : $(DDOC) dll-linux.dd From 94a912c6588a41a085ac67d99f5038b5ce74b43f Mon Sep 17 00:00:00 2001 From: Steven Schveighoffer Date: Fri, 28 Oct 2016 10:34:35 -0400 Subject: [PATCH 13/33] The foundation is tax-exempt --- foundation.dd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/foundation.dd b/foundation.dd index 4a57b91d23..1a4f865d76 100644 --- a/foundation.dd +++ b/foundation.dd @@ -53,6 +53,9 @@ $(P If you want to help the D Language to advance further and have resources Your help is highly appreciated! ) +$(P We are pleased to announce that the D Language Foundation is now a 501(c)(3) tax exempt organization, and as such, + donations may be tax-deductible) + $(H3 Official contacts) $(P The D Language Foundation has been incorporated with the state of Washington, USA. From 4461be79b48b049df1551f9c0397668e000de04f Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Sun, 23 Oct 2016 13:43:07 +0100 Subject: [PATCH 14/33] [2.072 changelog] Refine comma expression examples Add link to comma bug examples. --- changelog/2.072.0.dd | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/changelog/2.072.0.dd b/changelog/2.072.0.dd index 5eae07a00f..cf71a9d2c2 100644 --- a/changelog/2.072.0.dd +++ b/changelog/2.072.0.dd @@ -120,30 +120,32 @@ $(HR) $(BUGSTITLE Language Changes, $(LI $(LNAME2 deprecated_commaexp, Using the result of a comma expression is deprecated.) - $(P Comma expressions expressions have proven to be a frequent source of confusion, and bug. - Using their result will now trigger a deprecation message.) + $(P Comma expressions have proven to be a frequent source of confusion, and bugs - + see $(HTTPS issues.dlang.org/show_bug.cgi?id=2659#c2, here) for examples.) + + $(P Using the result of a comma expression will now trigger a deprecation message.) $(P Example:) --- - module comma; - void main () { - size_t aggr; - MyContainerClass mc; + // OK, result of increment not directly used + for (int i, j; i != 3; i++, j++) {...} + auto r1 = getRange!int, r2 = getRange!int; - // This is okay - for (; !r1.empty && r2.empty; r1.popFront, r2.popFront) - aggr += compute(r1.front, r2.front); - // This is not, as only the 3rd part (increment) allows commas - for (; !r1.empty, r2.empty; r1.popFront, r2.popFront) - aggr += compute(r1.front, r2.front); - // This is okay, the result is not used. - if (!mc) - mc = new MyContainerClass, mc.append(new Entry); - // But this is not + // OK + for (; !r1.empty && !r2.empty; r1.popFront, r2.popFront) {...} + // Deprecated - the loop condition is always used + for (; !r1.empty, !r2.empty; r1.popFront, r2.popFront) {...} + + MyContainerClass mc; + // OK - expression statement, result not used if (!mc) - mc = (aggr++, new MyContainerClass); + (mc = new MyContainerClass), mc.append(new Entry); + + int i; + // Deprecated + mc = (i++, new MyContainerClass); } --- ) From 28ddcecbc0af82e276f4e7353d207e31a30e8cd5 Mon Sep 17 00:00:00 2001 From: Andrei Alexandrescu Date: Thu, 3 Nov 2016 16:58:56 -0400 Subject: [PATCH 15/33] Add link to application form --- dlangupb-scholarship.dd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dlangupb-scholarship.dd b/dlangupb-scholarship.dd index 78c0cc3819..19744aa887 100644 --- a/dlangupb-scholarship.dd +++ b/dlangupb-scholarship.dd @@ -39,7 +39,9 @@ pursue paid employment for the duration of the scholarship.) $(H3 Eligibility Requirements) $(OL - $(LI Completed, signed, and dated application.) + $(LI Completed, signed, and dated + $(HTTPS docs.google.com/forms/d/e/1FAIpQLSdy5fg611KBySjZVckYdRUbIxPTS4tucglP_WGINvfy7o-zVQ/viewform, application form) + (online and scan/hardcopy).) $(LI Proof of enrollment in the MSc or PhD program at UPB EE ("Electronica si Telecomunicatii") or CS ("Automatica si Calculatoare").) From dc537e52e541fc69b3e1c6ebc92c67943f4e2ec7 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Tue, 8 Nov 2016 01:22:22 +0000 Subject: [PATCH 16/33] fix Issue 16147 - Provide shiny 404 error pages --- .htaccess | 3 +++ 404.dd | 12 ++++++++++++ posix.mak | 2 +- win32.mak | 6 ++++-- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 404.dd diff --git a/.htaccess b/.htaccess index 1eab97db59..7a0eafc6d7 100644 --- a/.htaccess +++ b/.htaccess @@ -52,3 +52,6 @@ version|traits|errors|unittest|garbage|float|iasm|ddoc|interfaceToC|\ cpp_interface|objc_interface|portability|entity|memory-safe-d|abi|simd)\ (\.html)?$ \ spec/$1.html [R=301,L] + +# Error pages +ErrorDocument 404 /404.html diff --git a/404.dd b/404.dd new file mode 100644 index 0000000000..38a415eb34 --- /dev/null +++ b/404.dd @@ -0,0 +1,12 @@ +Ddoc + +$(D_S 404 Not Found, + +$(P +Page not found! + +If you think there should be something here, please use the "Report a bug" link above to let us know. +)) + +Macros: + TITLE=404 Not Found diff --git a/posix.mak b/posix.mak index 351dd0eed7..588a34d3e9 100644 --- a/posix.mak +++ b/posix.mak @@ -161,7 +161,7 @@ CHANGELOG_FILES=$(basename $(subst _pre.dd,.dd,$(wildcard changelog/*.dd))) # Website root filenames. They have extension .dd in the source # and .html in the generated HTML. Save for the expansion of # $(SPEC_ROOT), the list is sorted alphabetically. -PAGES_ROOT=$(SPEC_ROOT) acknowledgements areas-of-d-usage \ +PAGES_ROOT=$(SPEC_ROOT) 404 acknowledgements areas-of-d-usage \ articles ascii-table bugstats.php builtin \ $(CHANGELOG_FILES) code_coverage community comparison concepts \ const-faq cpptod ctarguments ctod \ diff --git a/win32.mak b/win32.mak index dbe6c9dc6f..fa0736feda 100644 --- a/win32.mak +++ b/win32.mak @@ -6,7 +6,7 @@ DMD=dmd DPL_DOCS_PATH=dpl-docs DPL_DOCS=dub run --root $(DPL_DOCS_PATH) -- -SRC= $(SPECSRC) cpptod.dd ctod.dd pretod.dd cppcontracts.dd index.dd overview.dd \ +SRC= $(SPECSRC) 404.dd cpptod.dd ctod.dd pretod.dd cppcontracts.dd index.dd overview.dd \ mixin.dd faq.dd \ dstyle.dd wc.dd \ changelog\2.000.dd changelog\2.001.dd changelog\2.002.dd \ @@ -94,7 +94,7 @@ SPECTARGETS=spec\spec.html spec\intro.html spec\lex.html \ spec\objc_interface.html spec\portability.html spec\entity.html \ spec\memory-safe-d.html spec\abi.html spec\simd.html -TARGETS= $(SPECTARGETS) cpptod.html ctod.html pretod.html cppcontracts.html index.html overview.html \ +TARGETS= $(SPECTARGETS) cpptod.html ctod.html pretod.html cppcontracts.html 404.html index.html overview.html \ mixin.html \ faq.html dstyle.html wc.html \ changelog\2.000.html changelog\2.001.html changelog\2.002.html \ @@ -174,6 +174,8 @@ dmd-osx.html : $(DDOC) osx.ddoc dcompiler.dd dmd-windows.html : $(DDOC) windows.ddoc dcompiler.dd $(DMD) -o- -c -D $(DDOC) windows.ddoc dcompiler.dd -Dfdmd-windows.html +404.html : $(DDOC) 404.dd + acknowledgements.html : $(DDOC) acknowledgements.dd articles.html : $(DDOC) articles.dd From 436c6dddfc5c3b348a608bd17b44203e105a47d8 Mon Sep 17 00:00:00 2001 From: kozhevnikov_myriad Date: Mon, 31 Oct 2016 19:12:54 +0300 Subject: [PATCH 17/33] Add CERERIS to orgs-using-d.dd --- images/orgs-using-d/cereris.png | Bin 0 -> 19895 bytes images/orgs-using-d/cereris_hq.png | Bin 0 -> 53996 bytes orgs-using-d.dd | 9 +++++++++ 3 files changed, 9 insertions(+) create mode 100644 images/orgs-using-d/cereris.png create mode 100644 images/orgs-using-d/cereris_hq.png diff --git a/images/orgs-using-d/cereris.png b/images/orgs-using-d/cereris.png new file mode 100644 index 0000000000000000000000000000000000000000..58f074b4309e4b9c5eadfc4bae59e5e41601f912 GIT binary patch literal 19895 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 literal 0 HcmV?d00001 diff --git a/images/orgs-using-d/cereris_hq.png b/images/orgs-using-d/cereris_hq.png new file mode 100644 index 0000000000000000000000000000000000000000..f0fe9dcb9f8d891e7bdf92a3308be61b88d7cb51 GIT binary patch literal 53996 zcmc$E1yfvIu?;-QC`Nx8D5?x28_j zseNjyc6YDc-D~v@S5}lpK_Wl`001a5UnNul0H`d;Lx2DWS@~xX(F*_|Dg6`|S5`K+ zb+UCdx3wda5f>-3bFel0Y4rmDa9hq&1FNeY;Rrsg--^kF`6bHPs$wIMsfzvb!-}J( zBS%D+4I|H6!dB_|EGY>j9Lf!YiH`P*#8zSW6oIq|ze}DU9as<+@$Y5Jv%qq`{b7IX zy>UV4pzWmKtu}4FDsQ= z4Uh{2d>=6}-T^2x0>0Du?#}@HvL4esp#XY`!K$``C zWhU3p3s__Xu*hhceFfAu1G>l2k$(daJ^@%%!h&f5Ku^H;AqomNKu{V0OX^xn;EKK) z{eTYQskGk$EtI^H{(1fU|;0Iu6?duBlhFn;EN zTNADy7s7ASxl{l@GnsgM0Kh>g0N zKO#_c2m#ZGd^rrtI6|8u8UZ&g_>sKlD-h!sCE0KomdY2oIL@!EsuAjB8efU81s$My zL%&J2#_ zFh^UC5fUF{=|04RXYaRSVH)TYtK(rnOfVU#`%?L-Vt}Alvl6B){LW;e&J~E^FWHUA z1#}f7Ga?cFsx7arxcIe{jEIus^D-hgB217lN}{+TmISF9?p zNwr2Lv=o!WIh}Vb5JyI?s472chQJ)x{NZQKp;PPUwImY7lu51Wkt6BDltY+X*H0)R z*nxv#U=V%=9y}fx-xaSWRlXR1<`@2;Itw@JN$NowTAHnfHeC~)7k1n~q$JrS>Lfxs zX7#f2;_~%!WQ`k*5%rid12ykzDGheDoifDPh4sfb%kt!uWbKNt6)F|d zCmmeXXC+z19g=N2FaD^agR(T=Xr#e0TlN1C3n)FwBhPMQNpc!8pjj(%V}>bK+HV2a-|}! z-zOqoWRzr-vK189G9^$jClw`y7Ws4F+YaT9^?>z20W};oIklX^vBG(}szOUKZ85(* zzx?3X=ve;Pd>UtlAnO9#LB>JGLdHh(cU?DKhNjY{KR;xC@9GxooHw=G1nctZ6lrVd z>eowEWmQqlw^g;3d@gBGOi--Io(K2UUNsFjl{Mqn?k&QtR5w{Sc^iR^aly@htNYFq zIug8Fy`$a);ZZ`DP%DUaiG3U!9I*H_`PS3NGtY&+|K27aF@v=y&?gqzcbYIqX#0O= zsb$PagK@zvj)6B}zry7LMwn8Bm@)_l)`mKEWu5Nq^|w5x@3J!LGkVWTS8C3=&VQbV zuI7w#`e(H=OnRMZdCdxi7WYo8xJU$O_<}fsupUSi(Jbej4p76 z?u8t3c7%2WxYya%bqq(jyPJoaN0j<(vkikc#C<6~Og}t6rT`^=R8U};aDP#MJ?NK5 z4=?hrXkosUANRkP&O{?~TST!%V*;uI_Ij$w&4*57tH>V?Qpe-Qf1(B}`y9?s!W-=y z{p$1iL=zkutQ8_0Z5O6ZFvXg}={mJ4?zkcGERig+o&jc6;;mtn<)jlTXR;7j=5FO^ z6&_$R(;1!9&eE2#k|W|}qO0bzvFhA-J-Z3r&e}%a@x)DK9@4jS&l~T(4KBecW5QtI zOBRt2Q{+j!6h)^i#fhZ4#&o5MMsn{Z?gf8gp5mGcTNM9BN1}NBl}^DU{xq(g)1C4! zdlAE4OAt+2Y`Z*){8|QIHcq+=nKhdrUk7Vod|a%(SUI^uLKFBHyl>_*Qu!nJ_xoR) zU(L)UN$|s#^|6((I*dq7V#SB*x}XI*_}}0kT4r5i;s1D(E3)aw&PMD1t;BL?UgUh7 zVf12b#Wxj&$Z0VWYwvedTJZiBuyRIV6iv2s=EY8fyhN1>1KKwCc7;7;5{k zD{VEgp{%06#dN}K+U#h5oiSSvHMu-xKLynWWofwqWka*!?CxH2g*jymw9*#XB;Hcc zCGe;HN6GN`7{9Q3q57@*vpU!L^jf3Q!lTX9IiY9!J;&+XieCG}o6vCQiUyR1!kpRM zj~AJj`Um0a@baU_SZ*`iq{iUaQim z(A50#y2q>Z3MpD9hk%Z|?2Y>H&*h_lnFR3lL}XS{mbVYn)9Uw?{3g!>lkp7;G~0_- zbf>Lp$&X(L{O$bX->&~SUH@L$!_@ktm0rVVXnpK-EbyK%qcqr-*_K}2^3Ag4+@qt> z)9m4hFq?aP?Y6`H3g=^fE}K_yt>ebS_Tlft-3HE@j|0uy_(e>f*(!uSK_O?#lSJB&X_X&Q@%0TY`N$0Q|JFCI1 z=F3@+>#8g9MZpG|(ykYoFX+SksqRi~vg9QJKOx}*2$OpAYQoOA0_iZ}jOC;y03ZMT zayv>AAS;M=Uv(S-049q69w@gWVHe0EypxQAB>W~a0z3i3g(AoZ03ZX%NQkPtEuUt& zd+BSmJak!}bxdStj`GUPaAnb2Pve*}aEN?HS5ZO7mL@Xv(#X8H^B`6+1b38%v9oJo zfkny?e$v7MWfO2f*0jWqY&2jYFxttRNzS+oJBPK}V%Nlh*EGjVW_{>g<;Jt%34V7V zJQ|6B+vR4@|J_SF^c04k+vbJyO-IIdPah)E)*3Wg0`Y+cw?4Jw^_$Dkk@O_WC%t&V8$jSwNsIBgP*^$qI3QBZ$UCO(^*hOD}fbF z!nUZss5CRnSCtPe5a)ay>>Ek8GFE69Sov9|gZEk1>u-6j@RG9zS}+o3BENbtN)lQk z<|+|c2boMB`LFeZzQZdcr>DsTK3T+Aq>527e6DCEa%AYVnOJueqr4zStR{f;DMkdU zRigpu>Wi!uHYzinM9Org`gK0IExWT%X!G^In8Zbgrl4KD(xkTvz0Z>f8XDrgi@^70 z1gNiRiFOLfZQuHP2QES70m)dlnaH2`V9aGusIU|li+w(+p`Y7d0Z6*Dwo zWz{H~+vUxRdzHE`5!vySiiF*jv}6qShjmCnwCKeW=@{0^gNL^!pYY6SiKSg5f)WQS zM^s8{(R)SZ@PJK02-eZJ-y;qZx4gPI*WYO_j@J&4Ute+i_jV4Zpn2}}*?$fO( zOj;6x+&0jb>^fodd4Q^IAd@IX2=wl@iq14+sTk||m`Ts!4 zmT7bmt*UJ#-8I`=pLdiIHcN}Li+*)XDvnJqeC+}CRQX)1vG1ChsrV2Qu~LsHtDZHY zTPsUnaI-vnnaiwEQAp>~I3-eul&&G1L%&1s?^InK+yEGzZ^U`NfQYJyLRF1M9I%o= zbU<|q^}y+}`o3{>daD$~9;XgN+AB?Lh^PTLEhA2e}zYel!jwb`UCVu@t@jaM{`y-e8&r8XEGx=pt_iPb>R;LLzN_8#Lf1X*~z$L=RI0?An=`P7b z(N#Nm9XET|oY4p}^D}WT{~;5VGl%?B3iLH|CY1QM2;u^Os2k^ymN;#8l8sMSO1zk( zA+at6D+%a@R6jdV*~C&IKT3yOKVPV9W0JH4()T}0PhJ$)7LU!e>+YIS+S|wny5QX! z#ui@mQvTza>?rk$NHZ)q*^CsW`%v+(mBdh2v-EmvO1X0j=X~${!oc0*!YXg+E(#vrkdgAgo2Uc_!*9+h*X4@!ZdbTQ>~u0QLc zR0*P5E;OoUc%X(^+pda{iL})yU4~dNtWa?L-xO*QHPG1FhiIvHP?3~K<3n^7_Ak8`=9bl&L=TXO&5&{YuPREv;*iK$ukR&HAG;<%wOZ z(yPBjpCg8k#BZF(QA>duT|9|N;GrtL4`ic?a}RHzjGh=k1SOIZ<@7Suvy3oQh6NJa zEBnCn7uvm|Dh~Br(GqQRh8tk5fj!4V!?m^KxEsGJ$;y)cLSI7fM&&I`uQ%P_8yb{1 z6^)iX@Z)m=gqb<(pa~7AYkIw7a<>C&$o^<|sw0R#dLC4Cznxqr|HSY3*n2 zIRe{@JBCpTVl)!KAF}0d+jz$bPf|A{SIzecX&H_sQQH!cz@nCGkws`7baQ+Z6+l{& zIdAwVR>3e*z-0)4>LlPh;%Tk;_9<34`%J0|A^j;?PzJ{_20VgZt0?05%I$2!19o1=#`UZ3`Wu$<{_ApZQ}N4x zq>EW#lYE(}ev^00<(w4m4x>w{eo-Ts;xvjcDf!AUtQ@9O;Al@wb@I8m`)~@;`bzEE z2|*?Hwu`T)dx^HTKL{wxBN}?N5y5IFCG64OSQiD4vn-W0)u@cUuabU%oxpxBMM`lL`OLH8ygHadg*S3#W^@bM(7z8z zB^!{8{pk7v(!=lR8j@=-X^pOFH%zCA~1b*`PRSq^BZcy7X0qs~B0ONCFp;PkRYwgm&{K)0UhJuRp-SyH zm&EXl=&0;3f5-UU6UM{|{Df!KbpEcN_%fGN!c%jfBMq`nM~MQ#rbFW(EX0e&^w{L7 z)aN(4*7Zg2!zz0qHd+#<7waEi{5&q@3tI>rAHt7a=t7iyQSqv3Ts$q?-%_$06&20b z882Dr`fB*otjlZ&kG1rM&-ble*J_Rqp zdk!lw6KUp|DvqnXys$Y$QM>fhB9Zym0;84UvNUo(#F`5gpZba<7J{Z!F)G^e_KM4l zMJL6>r9l4KvmkFi3CPF9cm7Bg*tZc?Cw*QK3sF@5?LVI<@9PZfX}iAE_MtWPMlXk= zJ9zjI?5RDvKCf9~%?3P*m=wC;TuwHrYn@9FdakJIyFeEBlsRP^)n@R@)>;_n=5Ayg z7mDQ4mp)(ICPs&1F8|F#lxCC)%R$MG6LMY%eV$}9emyVTUjO>&F3jngGIR3`1*bIf z#nD*3Ky^g6_$@ab_oL0x%{7}YTIY@+YeuRe>)?AOzbN9r4yKNAdfT-63<9D-4k2kSSv7_#5C(5OzVE!&h>0 z4E%u>iYLISuzmU|dISF@h(Tl*c-O3vOL_XNJh2Fa222$CJkTXq@^alXr7+)`fu(-; z04jKuyFcG4!N63$j5itE5?oOE2Kh^*Wl)q!W(X1s>8Nb;IDt44adE zbL}2(Fvd*tn=6`NO37gdN0bw#bF(`7>T!XxiIIkG!E%FE$d~5}7H3!WNzWs)4qTeS zj-{LomE7Y_&=IT-_vUxXYzLqiBAes&Ck8pAd0q8&(!Z4rhi+P=X$cMpazwbzOWJV; zsYUnMvTTlQeN4o`6hq_xjHQVJ_@Q487=ry>xuh%%*YL`$*OHHqZNoY180R>bz78xv zR%{|?;Rq-iH$xOAfb#c$LH~@_&jIYsMXe-hkqa)L5DsKl`sqcDW3IIrv00KUT&OTr-htED0->V_z#*4S4-@%G@-NLu?+-n9JE| z^gA{hAf%otfce+43U2!E24;74zC%LasBH`+hhKQZmS=+fm$z$5sts1|<00nAXJh|3 z6Vr4N7=bMs11nWkwOU`^-r{EFvNy8KnXS-xl(yApp56qrw2O#;9xhX14mE-*cZW-jzi!s1QAvWyq}TmERh#AjSO@Bja)akhb(h4g*B3 z@yS)TWc$MrB~+?**9`JdrP%nM@Ada4rw|e^wJYUBEAjir?Oo)nGF6+kV?sl%xfV%qwD~b!q68T{Hb@&tV zfu^ab6{!Z0ZzSEG00Czg@SCc-C$x4u#k%{TDX)^!ksDz1^?E<%huOggc(a{y4=rWV z*C)N28+H2ej9`0#a)>jX0uBY#C00zy*~Of9dj%K{)`>4MD{X6puAip%aVG7>DHVie zm)2u&1cLNgPk!By>)wP_iaudsqa`X|n}+!(V+~WKA@U9uK*RbI3t5~;Pv4}k zt87#Zg|PgHky^965eNH~_{E6aU(G+7&0%CHS-!UHl(|5N&kTm;GbT$H4>*a`4R_K{ z7=}M2ZH5aHMq5v+#j9zmG4k)2=sbr?j+!;rCpVB}wiC^c%X#dGG;@B=FMKuJtDX>F z(rfi0k2d_5m+r$LLaqEzSeU&WyQ>yfHgxwV?rmD05m`^lE70ZX z^6uFDXER;~`k!E)w|`Y5)DJvzQY9fl6nH$`e`iUxX1WBNB|O=BadyqH@C0Zi3mGNu za{jT{)q(Yj@Nq8qysqeRKK?OyWx~k%Gh_{iN zpFnovnZb;;veu()gl)3}boMM243!v=*B(@UP|i;EJn@2pW>b04rY32Y?MY55I`{~O ztjdk$Ke}?hfEJsUB5t-<_?w84D((J_fUo9|AY*R@a*z|JOTP5M8k>rEw{dp9(=*nw zn@0)ze5|t z9yd<^iIEfe=b7#VEY+{|q_mVaRzY@BRF}svLqQQU8xkW#ZnWKJ-6r4a7_lnO21^-i zep3SF>xP^NPm073_DBt*sXH_7a8*R^Tetl?XR9ZN!F2~V8#5};hp?cX_{dt3RGVP) zG)Ea3C7D|x;xt@y{P65qbRB;V{og8lpsv8_ZiZ&ihZb#{(4>Nm8C3nM%ZluZG}m-e z-lg-2x`1+o5ZO@&hp3AbNm?4^E=AsXvh42})m=-Z>S@dZU)#+h0HgtF!zK%fhV_Jc zjDeiyoamRwD9#R;M+_TahJh2slih=7X1-Ks^H+gqQG+Z!yNuqB)giNqJHhC-3C>Kd zlWRydB)NxleXM`oIg!0UPg&|}_a?Gxi$5l>s)bH-)tq8zkA3w;uSW&ma81$03zK+7 zgV$+j^|153B*P|=g%aV`QmF6*_=BgHaFeLXp0)89X^*@WjIC6RjFsqtjoj1nd9h7; z-Xi<3UzlTyB}TrQN^PG^g{`T|w9*C=s}`pJHU%Hhs_TJYYwJh3!#e6~P{&n~ zxbfU^qjidB;m+0}rh+pjnrpM8fsSJmri&&e?hhPzm$qZ-r}EQI88xv>SkfO#K}+vT zoiI1xLVDYVM5#04qC_ErLS++-#bXM4v-D2ngvC4~v0PaB4@E|Pq3K{up4MZ7qkn6^ zuJuy)s3DSr7;_Ln#=|JNhkZs{WyN_bs$Qgo4GSWISX|Ija5suf{0Ln1r$GAq#XIMQ5)Y0gN0NJ(jIHU*Xu4+`T_s4) za{8E6#57IEwB?!Tmqh6JTXrzo2v&w2O=A$kBAw+n&NXuCi(_o2{A6?x`f`8&V`+rG zDfjAGmuqA4$Yq|P7nMIz2*2y?&JMb-%-J(@c1;D(*^y z6z?Rr3AX;dEn5E~X6JEL*HYJD`{eSok5HIzN{(2SY3drt7JiZWFZ+8s>ri|BuNYqV{0Gu zpDYm+EU7rk+if}e&VJF2YV^~eV+Vki{C~r^zGyfb2jH9pWq_VPWi0LcDX9tL=umWhG0iqX{eNq=u6O`981;*?<;ju+xZj!==TphcX9_?WoR z>POHnExrenZ2pg!>Tq74zlnw#818&dfVxx-YJJ;N0$u;}t8&EPT)a1M+gZ<@D2(?c z6@@oMC*@iNb6)>QY#LahQJDFY+)8baZuAr(TY;Jyo=ad3D8|xva^&IoC{d;y<*{M; zd(-`^o6l;#$))K6g~m2*TH>VI$ z_&oGys7qHN6mq34G_npd(Wj%YDmAN>l%tOxjQS}L#-V3@(JoYLh}u{{e_|i84CqG> z6bBTXaJ8A;lC;#lWI}ycyc^AQIU#JcWON(k$%k~{aPjHqI|73Dk?zBppY5IFC`~+v zwr?XZ!(3*A?K~o_P=viWK}|s*-&!vYUXd>AsOB!`>E*vh_qMvn8K!ZGz1>!uSeqK% z4BzPj@Zraj6sM}137Zw}yCMo3>YTM+)`6opC+Tj7pmTgi{b?`q%N6_4r!$Br8c)fY zAUrN|qt+s2a=9frS$n2!YIaOfr0#5H&2%3tBny-jw3HK*_h3P3kW_pDY0DPLYgeRC z$C21>uARD!(4FnzC$6p)HK!lP2n=2=q**!64twz?Q=j`RTwXU&O%0U3Cf}VPj@|KL%o<2-kdhmABK5 z-#9TNq!|$5186~jaKUSIR?-hQyxho>uao&SHytr z0{W^|?aNxnZt)*p5)^I?6OCo3&MH#=Q+X>yJj5UL6rh~G?xmyfpEQC2%Vl1*zzv(I z_aA{f%@}+8sQ4XlQ-c(b{I8Ts6O)cdWM*Z8UZ5rbBV*aS3BJER9Dnsm?-ccZ2%O7f z>U~E#jKwx_q?osV^+@YldvSph-*A4$*`BotiUQPXN5Kr%E9quqA5nVG8qKpI)`m_? zMTcwtxDkYTyFzhC_EfpVVqXtJ>{&m7!1xLy3ZR1AfGnqO{qhaBEI72rAfH3>v?)h0f%1?)FUrLmR-7e%5*5-u^(zL<(5AMcBI>&%!T3yJlrN^}p_uWlyj z^p%Hgrm+xh9OTEbM}EQT!P%T^-Zegc!nbCDv?D;wf5`Io(g-xXBwdfdzBO2t?j+}~ zzCf}@Re7&bNkHvxg*08;n2ntGZnc$p!=Z$gc5neP(BMyv1N7y&&fVNv=jMjaL51wF zZXsKG{E-|X^@=TjoW=rAqFa2&D6%lqt?sEuI`mVwwU&6@Kkk*BOp^F15?e!mOZO%U z?SLQnUoJ1Mryj@f=Ar$u8Eu#>kqQB{%0m8ZA_)G(PT^mJSBJknbt6KD=(#G$z=lX1 z+1zHR$PhO>=xc9;e#5@Be3AKyeHqn6T#t)A_7z3qUv@juMG)o%{aI z^bom^MK)YGXFh9U3PR@mS^f^T)esflRKeKLCiFpcm@NgLV;frViSOSlS3HhY#$&j+YusCEeu}%jhb5Xf?ZnDd1g8!ym5{Z zKROllwrua%Nis_rDdwtk7!=yp=Bko`Ux#nU?3p%NZz6t#i}2L6vAw_#T-HH-jjjVe zA_w>xCWR{&T{Uvj&%gCUie!O0@0d}d$0{m6vO#+%WZXkAH_86YNzkRz_sj4Yl8Vj$ z)In+jsxtNQQI}>ky^I4#fqV@8aZQswiMdoT)pC}g_8!i?WqzM27$GP&3_Nq#MJV!0 z5sX*+H9PSOr?5g(ogXHUMtOBotAIriDr%#&=%CSikW$NBNhDy(L>WTcx|;wHY3bQ8 zt5Er;2|V#6Hq{3zW?Mz%c=K(7L8{|iKEXSC-^5edht6GURr5o+MNFmc;JlHLUZ(oS6oUUgXR%%Z0-_)Fd^_}V?;~z7D4BfXE zbJO<=S@Lf=vZD_gu{ku+|H4?B#NJ+rD+h7>kCsEcz69Txqs@bjJwI$Y=w0%F#(Fq! z)jp3SWNbEZx`|Zoy2+-FE{2#pM!8g!Gd87W2k`tcig-6+2WVRdy@}1q+jtS@+$iz7 znWBgw9b8HmIo>v*ML9DA8*`2P?*m%Llb9wKvc{p-+ggLtH7>v)t`Lx~+qc4-2#5Np za4&)kzeJbg|Gf(Uv^o2;^0}`m#hu`f>E8VP`RCd31v@$DrBL^1pH-kPt|*4$*Fyi$ z|7=Hvl)g{W91Q~tGpY->*gvl~^g5?$*&UJlLQhGyH3M}F%ZpB~p)&o%-xxIn9x`}b z`nL)vxF#Jf5jdyZ*)e+2Xz6UPj5b&=0Bq=b4q+=UDv!_VEN68wx=;vE_=K#7Wc&)d z-hrhrFWt@El@B=Ck$)qM7D1%Au} zj)Eazm&I@!&ONqOap`JKIlX;dcT{i9KdnRHY)*-BeMvn%g-E&uR&REuvS74vxOq1V zF!NUJHPwRwL&j2J0S_cS1Y9bQNUYW#E>wBdb=WSAQfqcD`mh{5Mx67S;JNCizKOTN z{wqWGT+Oz&)U5QZf(!;xsWO)(8(gY)+W+l$6(^fAuRO&WoKE72rBOi|LB-Ba5gQBt z#jK?EOU&j@-S2IRZ{@VNK5L=!N}KuXG@zF{nWYfbO2bjOlWrZwLaTl-m)heV1It+W zlWN}&invB}LS*v{q@h7J?TH5yXYh~`eXMRG4S$Kq8Y4EPqKvU-S|})-RZEX&+Ow!F zJoTMes8@4a>zxqPx-qF(S_CTkB-2rg%)lDu1DS zGk8$82=PNkacY9}BmsW+j#-QuOSdGOgMG1R-OSE^?hW;ps~o}Hbry~<@BNPKc2DFM z(#kHS`tce?`DonZV1T(nz403BS=~LG7zB zD11L1zIB=;Q7EYTN4BtUw@o{H4;{{~22W{4r|(a-3TIF79XatF%d%3Xa`Ic`YQoET zo!*P~S%s@vTZfNCTz{hSOHvN+=fXJx**+; zr3`4USzdi#a2(0dp4;dw`FG2<>asQtH9})AqC={TfL$bwZ#*$zfTaD~>~E{dGO^|Z z$=z;fGD6l#;olfK+{92ZS()n=9J+iz zMt?|p3>HG>oZnN=@|HeWO#BIWtB1}T;k+o{=n7??L(*%5l>5dWepLpv5KT01Q(P$O z&@LKZ*Mzshio8mc6^{zgnJ zVYb0Jl6i8EiSyS5=G@aB_ymW^ZuZ%$C#FVC*ti!eHjseI`ZLBawNOKI1oZhJj&e^m zIjgPS`N!wGY)&*ZLlV!qn{*t4EZuk(MTiMNc#{-V6 z-xg{w#oHg=xQ|Ps76*W76{xt?7(1X1TDA$vJX43XU`t(ty`qdytGkSitp7E9Ux9By z0RBcf^?NcDflYbdTMRq~Dn>8iCx@E&>WZ_leauPKfHJw8p|*5;MdC4cK6G~Ul^A2W zgnY1qCzIyZ;E8$BF@^h!l<*52%77><57Z;uDU}Vi) zJP(!lUSN^cAIFDSo0jQ8m|Z4z^cD(2(N0_}wdz_s5`!T2H9UROL>PG#vZezXA8_5G zuc}^Lx9^o%|A0Vn$-YTf^{1URW+Pt2|DwKP6;PQPro_aT$c1!$1i;|ZNk`x487pXcY6>FF)t6;C9xxftAzMF? zYX{}p+Pda>Gs6t)A7szI2LDHH{8xBuPmYBS%0zKcR_0m+Y9VLTG6sIjtEFiD9++II$b-0yg7Vu(-sq9$**5!w7tnb~Sm8cl%RKay~C_W@~-sa!&Rn(ixJ zbJ{2`aRPoe)?eyINOT{(0>csEU_+Qc1)S%9u_A-^D=O|kPdZw+p=XACf9Vw9yth4m z(@EPi=}vx2PF1`j=abF%YlA@ap|jqg!v9XNQ2IjP7C{ex=Ff_}p zZvw9L;|H&K{DIFDua!jlG&a@ATOsq@Kx4cHpMYXX<{KY}RsQrL$%FkG5o-aCi z$h(@D8*NR-UKN-(15%@UX1VgPP0)zf;T+4%aJ9m7fO!O5E4owUk;^w}%$bi85=N?+ zvSXEL?`Vw&Nj#qBi7JT>FdX7ySbH=JRayeI)EQZK*NT#zrJXUIT?{I2Lw|bbp3b8Y z;^2bIf&Y(1O~HlvD&R@JiLr{jg z+JVpw?`t=DqW=LZ{|awS>(gA|ftfMn!q%}`i77<+Abs2=>KSG3|C*U*GK1D8C4Zgx z6TvySP7Z&jkP2(IlU?bMlf8Cbi~qL;-q8&Q;%5|96FY2tjH#bnFPB`m%ohXCR-aCq z(n@v5G`L<;mg}$vJe!Qxc;Kf^)J>uTAkyN&P1MTv*^VmF5|;RWyaN-bu-bEH9vEE&`^+#DIkp?`rZgb&Pe7^~YWB{@{1@82S4 z;{`Ih7J~80!ixO5QHgc1{n`ocKyiqYZ+Z+~IjO(io+GAkj|3{ee^$N__w>O^ib3%| zY+~tbC*0XtsoPNXcfVnnZSS76kn=N$RHvwnnvmQFA$&b0JW%cW$uy;rSNBke&$z|I zaz`^~dO%&9zd!j4O8UDN&OKL~qZd~iZy;uYOW~JC7T4063J2Bov)Y#mkHB&#b_7+OGDw;kPV{e+{Wgq15!txdIl*L7yM481cwF~H zFWO!R3-1v+ppMH{VjzFGkk0usO41D{*SNObElRQC%gUjzV^Dez55*YZZyKIVUJBW1 zaughUz1+)DhdIuwlWsq)<{dCW6|vYH4*c1c%-kmn_B=4^;`4YcpG_C>{Ej|FZpT#R z*9*+L@C$xw;mZeevhEF(Bi0iY(U+5e$ZN&p(=zxNM3Jai=#kA~I$_SWEMzW%1Th$^ zKI>yTpY&i4j<6~VH8=L}KMRb&Zz_nGnzPsq@~8~6)dwoe2ho&AU0i`RGAtW~>rLg7p>6lUrCMxw(X>9g-Kq$i!Qpsv)% zOcd!n0_ZSeYV*Ho3b+VR&l9azhE1>~Q=u)!Oyk$nae+9%q5DtEXr6V#Gn?mE@{|s! z_j`Mf!c+1)AHT?vrE!*uog{DTSc+ocWU_@?xsYYm4rO-yz(y(Bi&NocvsE0D5aRy6 z=98#ASWY*|aoM%vSf!x>uwD0kLu@a9Ixhbaihr{}7tSuvv7#fV^fUV$k`;~Y5o?O~ z4S)PfC@I8U>M?SViO8ZL&iQ_VJ1E5?D{=_QRi?sho~b*%%2$m7*eCzigm{G9oh;&M zm9gP=i4sBaV>O@1DKSTcJhL> z`=O~S)`7*=vftenFV^pMN$(vWk{W#Sg1hpHocM(dudtsJbi~z#~(DyR~Jz>{y3&AuFO$b>NCRou?1-+ zihY}tcWK{ByB7lhiOM{mk&Q?!TGJBXRNljp=|FF;v{E%&_t1RLlm1H34f0txvg*7F z-Nqp#9jKS2kW@e%kKg%x#O1f~<<}B#Xs2v)_PT({9i}xz1>*TiZR?wUnHtK!f=yR;w&^c3l zHini;A^#jAQ9VJ{)sFI%j`Apcjj`p4Bypfva;gX3&eRIH+kjkUA@T$@QBQWxgge@! z9M2Bb*(xY2r*e-LFZ;4_x+X@a9^_NXKj~mY%&LZJNzFy32X6SZf>04&?O{Ksr*`&)zN^>XB z@rG&sS}ovUlma1~3)suD`tJk{l}xw^_RM->tIGm8P6NHejRf1(K;(9TF{rZ%xbd6s zw8W#%5SzzKV!4)qE|wnd^BOeReQC3ZK=xw8k0=@Kn8johDK~8$#YVEl?C+}+e@3#eD50gg95c^ z-y2T3t#7)~AN6vnS9hs|7VRHz3t0bM7;ccEsAu7Qzh*Y~v zj)#=~ag!SfJRQuskeggZN+CUaKeU4wcgbG@7I3(9oT@au??#T6Q;Zc302%ol*+IdpJZpAO|AWfuzX|7!Y&HG4XZ zp}NuIq+`yPL44xT?LK?0Fe4(Up7hjD+@(4k6YoR{@W}7XX3N#>lprK`&Q{jRALM-^ zpdRjW*w6U4Q;6Fe)nSZmd5|kFXD0fif;h2rv*2{>7pUtETGqEda?%-j5+{kGmrpyF z;pNga*K+s$5B3WRwlZFUp~#KHiRW7q&&5v!VO}xZUWCSVD{cS>1<8GPz`) zg}PWXJQHXwMxiY0J3T@GCQv`ktMLuum+0%tJzk~Pgf*nr-K_|I%1(1ecHs*}ZJwqH zywy)7Sa^`of|oHou@Oq~UCHNAiFS6}@t0(y%5Aac-s=#&oLQR$8;wR_csWu$J4c1J zl6^7#lZ1G$PE$LuMgN=e`b@BNLWxkXFrA#G+6(Gn`DZD?o4KZ_&=*xQ$~qgt@aG!f zRvZZ&g*8`sXqShx$ zYwWI#=e2X#aQ2&270*SaDOoM~ryK`^=Wi1{)J&331yoL6lFB#P0{%bLYK2K1Q$(iW zp9Ho`h)dz0CyD&0)crrU%gi@yB>o=Ua0n_W^QqWvaR>&Rz%`|)1P)3mX@NfT(_ z*o|6NjXEVfc?qY|Ks+>n_QM^>T_!3ak(R`ns1sIh6#|*nhb0{Vvnq%3J8m-RiH8qU z452>JaMtn~);!py&RSk$abU8i0bFv{@|u%{!+j~?RG>I#l&-b?Q3CuY@Y%gXLX6OV zSD+@#{qacWIAOWI`1*k}(x2V-#Xeu5#zLsW7vL0miQXqMtL?FojsRb`jx6yJ`+$Z2 zBlA!-I`VtF;h6+lpTc)a4SG{8`VA+eO^>+yH=Y%K@)3>%N)5!V9ccFspj#SFSpfZ~ODJ5llIX)#^u4CjZIm_v%EPKCAaf&= zc4~1SrE99kRW;!_>;M)zmi8+S$(eWli&(Fn`>3UC;c^wnLgz8J27TP(O*@G|3^y@VILU9S#Xc5&4Hs94kp0v%Tnl1p=Q^Pj&uZw zm-6Ue?ZW!iT$oJrr%yuKM*OuK-#r8P-#!;{O#`|6HzRL76`mf%Db0hCqx7)~23mS1 zWM9Xu%oE%k9yXX@FFBPIDAeXKdi*Dv$;<$88F1GLZ1y=IJfv0?lnRrN=m^X5sni&i zhy?z6ppA&=VYRVTxyf=BPc+p5UZ208|aJEO2at*$9HdqF~soXS`@0SlDCoIXHsQy8QB$W@0joKffEDBU4D zH*q4G&VrU$)2S!0>Bkw`nJOGzErH_Zze4C)%A_SmGcY9ZLff4^iG%+4jA6>)fMDyI zhu2LS_nJpKM+q&JZVTS?ql>W>!bTcCl7W7*H$LkU&v6-T0{ewQ%&-ZOQ4BppV7&iDoGa^KrvLc5)dCXY1+>?< z5&A(t<=?scqNyd}iaXwvS?wE$c8S112=i3^D-u!)_6PTmo$Gg-DGZS|JTk_dS0IzHVk@Hb4$b_`e=y6 zl2Pmf3OC^3h7Y(34mm~YD1_p0kkG<{KyIWM&CiAbYP&a~V(FF3D z4BGFLIM>9EeN8p#mfRK(^kH1}Jduq)s#d;*;8)H-#=?86D+paOaLJ!=uBm~mrW|^n z0_ZIu#DS{AsmP#bAhanmZuKD?fgLf?(#ELYW0mJIqlL*8h%qusfVYlxP|vvoRIMtz zsOQ{)Nps?B9_-2tMJ_^#I78JWS4g1_TdQ0F&jY&;8fULNOk!yAu?N<5o_X;ik91y^ zP(+qZTexG_r~7Ys?ylXKW%j7m$*_})68N_n*pZPxNKZ)SzrT+5hj+sMt7rx0EDPi2 zK0uKDc|C*gZbjwHW0yFnNeU0|#y%@NV#Jz=o9G|iiS@mi6WbnpG}e%H5cl6%O?eQWEqjai(w^gkw(eX}MdwgMUs}R9!U%n$ z?arRuL8No>VMymCfXDu^&Lf?dC8U}wY|+sB#uQq50&cB>=p#Xri*jzL^x@|8yyT=0 z#Ay51&O^I`s{ha4d&k*TmHYqiwRSmm=A7y2JrvVshOP*R{_gc6Dpn9hQLq6~Gz!93 zMMSxvq9{sJFUmy_y(*$|uQa8%Ff%DYAV3n*rkB&t*?X_``(vL;W-`5n31+=s=QYVG zyR5bL^Lgs$f&5Glp3edr9TBAOm`(RP?jIW)z(l}PXy3JV$;{!uXbH^EzJ~YXCHps1 z&CwXw?!Z3vIm(ZH6J?vuAb9RFlskx-sx{rm{}Fk6J!*N$(7-4_x95k_CU6&Z5__y- zba9!%tl(GyBV&vSM07w=n30>*_6Pf6_bdhR=7*X$4ELq8fdHc;&fK44ut2Vsj(C89 zH9TU3xK0>&vY%`1)Kw;uHxH9U@ZD)ACJ!RT38;FgO9 zop?~RJ!B5;p0s9f z`*EB-goQ)pBk_6o4bVJb$pHX5!YHr>#pVI4qc9j+jc|cy`~5(0B?4;*D<}Qr-`3rE z5Om(a<8Q2U%(UQ@%UhUxbs4e8L+A-4ig~39vs03rJv7ycEWqI(pUF$NHV@lCOnA_J zWD@I%oG)w@cq@XWKWLJ^=vjn0g~(${a=+h-ds=L0%gPd%m%oOtjiZk#ow~S#08D|{ zkj6Y`6OsQ)5x@Q&#Q*wUoSAKyM$Wg|r5*CW)ET zM4m4lv)fDA9tbgJZ<#hV*~N*;As^j;;}a*&STSecH;XZx_w{+}lxcR|-9yM(WfsJP z_|!Ok4PZkkG1SA@0Q3MHbK0t23I3rW69^=CO-qN+L8zGI3C&1HTbeBwwNdq(C>8fa z(AM}QXrS4`Df3WaHK;^0Qj){YnaQUA*)?*^M??C^0^+&MUbmH}$)8?EqO6C^H5(D; z6m17rk^kE^^oJ^kv^eCw2}G+zol)ht$)2K}E*|N@{QPDje|IVS?Wsh6auUXp7}_1C zi>D#*HusSD*nP;`Mh7^1M#l&Z)wIB!*G=SwC}z*tT5Su@C;l9>drm`sRtC5H0BiOp z^jU*gIg5Z}`=|=bDj$i5rWxoATB{>nT7=@IeLol8pwu}McyRsg?GC_Gcdg@?_pN$6 zg84(nbKqOYyl2()laU8uVv?2mgpp8&Uq`X^qISye4paTx(s8-4%Ksc8Rhu8^e-~gT zC5N6jgXizrIbw_C-r>}ExG#0lS2q@pB7f-&5<7R0`|E2{vLn>?H2F6V;i{G(UddyA zzZLJ2xsac1qBs2HfJb_;&v=o@CYy@Ceu(hT-in9?e6Sh81?M%jlQ{c6jC+pu`worv z60@T#=GBJ6nb$?>qvd0=K7^9EF&8sojcZ;qOB3UcC%rC1i*rw$u_Aop%s2J5a?YTC zLcIqpokmyPIh>p|bK?K@eK3lt(*tx+it(IdKCp^o-oHvBxDkmMBA)ZNr~bU|<)`jm zH|>`3Am~gs=yV&IUYDA1VcSJ**e@H*y}ArN2H?@ArtE%Mg9GZ1hj12X0vbvvV8_2O8XXf&84z^nRfFPu(KWCq1{CBM>YZCTs0m)7Bew z5GE$u(vjVwPh?j(f|ieTldp7G^2O>=TO}%_ajIS15^o>v77qQ)3|{>2<}t6Ha0Tf@ zGuTfJ;#ToA*iKTP1X#VFSq!$L|5cWfqo+Xl?PzZtE^VSy!Gutv|)?Ny}+v>Sw8jES0_!E%P+P$cnSC~pk)x5E6u!kgud+!G_sgb z&{s}BLb3DbQSVbqH|QcjBz68kkmWNz64n&?i)&7lkI4IADk(BUJ|TORo^Rp_};U-%R|U zAHb-qDz?!Y!wF1D{)UZYn_ffyvJO4owDPRyU)$*2M-&!y5!n>Q9A*8E3MkCf__I}X zz$JZH&w*4hdg4jd%jZ`<8lUG|K7(F)S>+?~nbU!tptsGz6A!dzo_L`3PT;!#%b9t54q_XZ@*)WB(# zjv!H=qxIe0EWMx_Ga-kZeQiM1?WLp-FZe$9-lT!g%;4plTX8DgaSI8zT9HY1Flf$` z1{Ig2uc{>R#V3YuH$6%%HT~@-^l`EN$1=e9MJogYs1H<*zgEZ;;AzAo-I!l`mFOP| z#J+nXv0uIu*gtSr>(&WqYm`y|b^1W3-QtvfM zef62~?+^iMcLq1&p-V--9VgaikpGuOeQ`FVy>T6zf~L5L>f%W|L|@iH=T&F zD28(L#)}F|@V^5ja0$rMiP@d8!%lb1*47Q%OLfZrsjIShTp94i1C^y_9+aN=D&g#(GB(%63=hRe;>xF3j% zqs@3fnY-7@kpi*X!CJio??;OuGe+&&6p&HK+gh+c`3li&8RhqWi17E01y7*e34nwt zNUwf`LY0H~e}_&AQ-e-==_4ss$jHyWJkEN>p;+-*3w9p(ekXb!1?kc8F(^1E9Jd}Rl*w;oRX!S@mT+;Tq?O;1o#8iM3U?!!B| z1o4@LlSd7dR)}%e+zOn9T|^s7F%#yHb0xIEsmfy{C&=L72|uz&<@bhB0SyL}J{%&u zxWFM7%wX$PZ4|1#N!37ARFiePkRvU>qsU!WL(kota2{=j(H4&iaGq+%s|)T;lQzKm z;&!|*&O=zENIjN-E#Q?5#zn6Zy0M$GPaI9`o_ArLFvou^CmM4Spj}1sga3#AL=Aj! z_T&MM0J;j}vvl?%3hu&gN*^yrI793y1#X#x)j9FTa9)W+ZhrdptKCroOodmK!dcpZ zJFnY!9TxFLc!I=Hd4#78;f+}N<^u1W&a$G{;sMkX541J{cNzsA6`FQ>dDt{vu9tlJ zsE^nF8o}J5=x&hmBgdbz@PLq!2isLoKI(KBJ;ee-G2(a825kLW3v+)|h1F%yergIM zZLsjNDz;tOPHvt%q1Fh4o;C={6&Xr5=kOMe(DK;TWN)8`_>X5O|KVFP4vmkP2__6d z{&%mSelXv^NlRc|u?u}j481A}c{Q|E6Od3)h^G=5f9fO~q_ z_72~DC&Bo0H?#=Uxiv!rj^StN$@@AnFL;^g(+2S$zMbgL-;S}e9PLhGyg>?7Ylh^f z9za}mC>#-+8n*4$Jlb|Ato?g)dI&U|gkBjUz9Y5Y%xx0pN829RC5fqLq3#8nu!}pd z8|RQVR7KiPoEYTX!h_Ud3ZVr;V@OAg#-CVP`A9r6odIXxanyUNc;;_yce+9ScMV}n z2ivvq{%6n_jsZx1_RO!F{(RIYYY&)vJP10IJ)w%%jI=T4nUz_=jte?*0xr3Q4py6i zvZf}gD?CB^@I2-}(xa|l(P%O^&m!^Bheo`&+^=3ny|)Y;h1i-${<0hIl6jEu1_v8J z-m)9(oXtdg;*|f-dkB61IAm4GkJ(J>0twW%B#DpRi@13OdVXkXdiF@r-42LJIJOcL zmUI!`7{y2qbWZekAe|Jqm=fe?XYfj$sYxo(fEK7&9%pd}&XRUiX@1Z9L++^s8mE+A zOHT^7$gDiVRtNs=K$0KN+}-9+lfn1hu-+oVWfvfI=@5wnuK-^Lc;=R-1LhtNy4NOq zIJ(nJNxy&n7?oU^5hRYzqADT&V3=9g$JzavZhDT-`gJ{%Ic&(3^dK_x(4kRi`2xI| zlJu43$W#A8={+Y8+R;-Og8biJL*2Ci(OJOy@K)U4E$dI>sez~gyYk2zc4D90S5amNwp_-ItZrcxSYMn;IK zkxUp3ydC({fhI=Q-`@V*5$7%wNHeSlzq1^gh7oXuEiO*ut z4ixa~fC~7OIvM=73#sBO2V{${?&9Bc@%LFEvwn5sh!Sn(b#<&?-FOgm_SZOZ#+wK< z2RcPAhn5;Kj{M#HY=`PU$JlgdGr_GU)wh*W^XpRDPEXSPjts_Rfscf)Ba&3Sn!{OP z56%oVKnn)<$PlUX9E>kLL*$yH23QGRPoBaG2})sobPL`shxv~|Z;UH!z`7LjmfZwG zC4@e*3iJ5ch@k1GJbP0F0;a@yXeXJUG$3xPLzh}p-<7np0HM(Y_eN=iMDxgKj@VOW zB#!IaiO8`ejBX)E7S(RdAzz)xZV8T9D>UrzBs%1v$}^~V4sCixi$;w4TC$5Y zZVW_W?{AEZEJd)RPXXmnqoneYcmzlv2yV6`KUd4z8=E-tv$a~p55YUv{=BKJ zDCoZdtYL3dPxP_$L?4fq*ypo8Pd2*vR~13aE53T)b5>qg=M+IGUj(T{@o!HNORiqO zy79S#md<`04>dmzP&hhwXz@WEyRdQM9-;tdr^JaXwqM*uaH~nx9VJx$DN5^^Ns>qA zkOeU@C0#@Ms65qoCva-3L5)&aIU48GQhHu)L;mU|LZ3RMpT(2@^0RoCRAQdD4ey*e z=n`XZozJrgj62#1#7YT$`7IbnRv|QKPx*i|W%j(px%V~F|Fs_DH}yVo=l*DeohZO$ zlI$1jckCCd2)q_1KW}fZ9;Ygg*=^%R+(|Lsgc4*A>&EJ=9#`uGzrLn`SCvLZ3t$ur zSjSq#Dj@YH)xXb?03$6bMz3B`)Be`(SEsxDIO6lQti7R$BR^mJQ8X71Gbb0Wy|L+` zmDkl(0XO4k>E-rafj)o7`fwTSRTcMjSM~)jQN)lGa6a(-Xcy$*nB*bzLXCT74ahDi z5PI1L>ATztRUX?f?qd6wx`{s+X32Rq*t;x0Gitm_w1V6c7uk>jJx1-=(Kr`Yk$CtO z3je#KU-4*RM>ocONth8qzs2tyEFSB@{M1WC9}~o{Jc;PdZ^x*u09T>CDXwKRC55|Q zC4I|!jNcxGHpIm1dPXHH1*#`I`QAG%C@k%uWNpk(9_Y1nDhrrNds5wnUce(iKQ($n zP~B^hIk<~DaF%wUVtHQy8wX>8P>`LgaZ8FZt3Jn&8Cf|BE2nq-`?Lp~^J{tbh9-_U zulB8oVaYsyxc0`TpRT;FZZSTi!8?kUhnSLWyf4Yl-j(jnW#0hQtzX^vyU}jGgP=1N zppz5LYMe!Zq5#PwGX%F-{qzc%6F5~K+rQk!w#z!H{!Iyoesm^QyMZ2OU7#0HWTOe> zu5k!{N0a;2JbG?u!fo=iHQnbsP)FN{O)hH99K6pR-dcR@GthxaP`UdY4j3`~d(XE19gw;+WV z9^HDW$}G;(cHD&>sIW6JPB=iDkUm`P^%$ytie0o1A?8Tq*y%1ap8Z)9M_f?53duu5 z5_t;lSbKfbnw8hpeFj(y)QrQ5nXD1Uk0Bkmes$vxV8mF?LHF8J%DR-?rA=my+pV$C zVb<*>bpFS{_UghFxN(o|U+u!|l2re;gy`A;J1*@cy(*7P$WiM&vLNVM-ouRb1#%pR#?KTz-jVZ)R@~I29;=c(B9W)$=`s?>b|REO79^93I=*2=_Rs{8#`1x&9VO9* zhnkVXE6w@!HN8KYDByXJnXhnS+AkXr{f{d&$h-)s;cIpF?1sum;!A*+r(;~_h%0NM znWgyc3&apsU^v70SS9dFZdv5P_yyPhG!S$;f$JGw|prtbvpp%syVgfM(WorVj znnU~2i^i=RSL{5mn=My$5WgqN;?LC(e$mE_snKbe8geUKcr1Y)Xa5`xWNx2L_o)w{ zHl+#9E+_VhBZ=R2DuGiMAVQ`OX8V!TOPG@MXa9k_NWfQ??0>-NwQ|hKOClI-;=S1k z>`s%=s}XMTxmZqFJDPojgx`kKSr@G3HU0cWyKYeMQ!-M>z)59nwC z!V&f;tsM;pe&8uVvI=kC_I5v;j#0=Zg#Bcrs|GTmYiQraJx0C zo;#V94r*I^e4^1ZkUL!hSGA!68o96p)sn;c=MLN_TTop&q-l?yK4%gHBvO$4+&}S- z4Z~*_Oij_}XhvHeY&|K-WW(LBv!ILUx)?HJpaKe+8>jO^YP8g7)Bh`!KxRzL9t(R{ zc(2l6=)Ltd@vLuhOm>HH1(}5kH>UgD?7p!jQ4sbRcE($#lZdE4zm~_ZZ=(Lf+L=h2 z5L6EU8~?F+!d)nSr~}*wEW>Zxu)l`}g1{X`ciQu#Nsa!O2c7ygwfl34+RUV!&=Pl@ zlqU4DJ?gp(;Xt9rWy^Ov*nUwLGk+Rq>A5p7yNqG!^}UE98%bbn9_3yZfFY2b5I%1Q zq0jH4aC(f?uV-Pbs-Wcd_YnH@k+{$GkU0H5y54s;g+FXYcN7Z%4N3nZlgYJkQfJ(Y z`d|f|J@@qk96+}_<74L@>o670qE5>1ufmNx$ebK`{rZH3g(r|X1AAwL@TM50PgN0r zqMF!a)x@5yr1Y68!kglF5f>Hm&_ZKwk0aZoJ_t;~Eh-bz`&v0-pPC*4MqZ31H!ypq z{)<(cI_>1wT^3zfOT*8asQ+^9EF@dBqDAx8K`o0o5FMTOOXZ7Xw<)ch1RkLU0fMTXVPwE;$tAoPiC=n{kM*DLWB`1C6x zp>Q{LAWZ{Z87B0(BM5!|2y{;#wL3}XC+jKvZ7bHwazdBXVI5wB((a_y>Bl*==K_OoS`& zqKZOIfx@gj>E$Vmv`I-*6nmFNZcdu~+_c}v#sujKg!b^_Ijo(fn9bGbXaRRl584=c zuZyq^o<`@LVecoqK;cF-Vx&WQqvr4yh8?)~`SdTZ1#Wu1Wm3bnP1Jv-c0Ta(kTO`X z)14zUl272*&Ac8%6hY>#>sL2!o+#M-OMp)OMYVI#{2QA8+OJx!rpxLw$<1@dEl8Xy zhmwW>EqQ?+kEc%g;IsW}UD&%#YJOQtv?0K&KW)Q_d&r#F15)XF2l0(v5*&+WuJ+$MAN47~Zqp7Q|ckU(!up?m9nwC{EiB{oKB1<@-`f^RCk?FpRcTFL(8 zLA+;MvHoKop^IuUB2g3$xMK%uVOn$@aXa$2b?8OmsdZ_Mb_o+MLhe7{^JXWpUa>K{ zZGzh(SnUC1)TnWaf$PgdeqWGKw*Mz|80wy-xd(=ycxnovXIwrH;3?B zYoD=xbz^EG?zDdy(5b(;_B&_-4c~A2>g#a&gxNVU&!un#Mu$Y^B;GhJre0rrVW!K@ z3wj7{GnsRB8Ad|#+BZ5V%>I<;MG!Is#=;oJqBy~KAA-&laGu;n_D9d-z0iiRB=)-(Vt-%}0voLg z!xwQ1&^ec$xBL-t_mSwDz_b7y0NtEJhxfz92;Vd|cb6b@2F~09PL(3ND2)nxxG@)P z_Mby#E6k)x^tlMZm%?DX6l$_0j_&rqJH(VL+e0G|1p{q+Xj9?E@?>Mp7(GGEwg~2H zalEQDUS-O!BkSW5)1F2~14Pd`f$ZIlI4?E(?$$p0B(p@Jf&=%L4?_KYdD0o3do4D5 z(L7-oyNU`?=j*W_>Mp6H@jn}>|61+Iz&-du`GHoeh38d^9D+e+!Jh+BB=pl$!^*0Q zfOGNs)s5G}=%{V}B|)d|(mEQiY^3gzy4k?5wAMduyt?Vn^%vFB@V)&`hL^RwCN{Og z6=V*}6Kx96eL{9(Y}49LLCw!~*>XiEfn5gkF0aI`Q0)Fp7nwH|$dsoDZ^+^vW`iX$ zpUe>WaXTt1N#8mfRZ`TshPn%$c@HfW`KO{K2aQ8v9t!=H!zVgT2xB)u11MR7?KT6>1V5uS1k zPZtcKHMSYc8zL~7&9-E5e%`fyb>ri`U^AJ3^M(PPx^L9ccts<1m)4yE`~bm<#_u+H zwHL3V;p*3ceO1wFb{i8uOya04!B=f~n=ZN+Ca%K>2MSdlFaNj=BQ02Zel@8h^5kps zl&*Kd6a>%Tg}cNeb>mFG@KiH$2vcj+iXb}cA;Q*J=BgKokns?q&(#t7d_6)6oEKWi z{-A->+7_%+=Meblp%`;Y5G5Ag<}MN+yC3uE6HwkX>#;0AcRJ{Rnz9oZodINXjKbVJ zEuY%ui>G~C4GBL{!0fPyHbn{U43M9hCAp#YK z11U8GLfVm7oir?In09Y1k7|nEmEW(j>Faegey5STOY6=CZW(fF130RJjMiG96$)3n zDrb2*Zz!##K=-2`(Lm1a2uTr8K_iwE!kFl0lfZi5ZR=MzI>4lZ%^M1I8n0-i?(20A z0Do=#PUD+;-*38l-Rp8aQtQ;DfX>lb7G70~_;_;i#g+#usCn_1Ef{IZ;;&X>UAF^$ zK^ciZ&Dpy%#vsqVRY634f-du-C8U+cTv|oRP5%yBBRoa!zAdCKcocFjx+hQIsS{uK ze1V~?KGNRgXLboNIzt#cOUW+D(sS1Ce&Ep$Y#c$^{S^du**MiXGD{O=m+ZZ!@pfEr zD)PvTg>Vg@ymKh!25@T9I5lZx*23OehKWR`4fZ&Wl*V2@8>1{j@{Y$y9X51*nHa3# zRDp1?bb$Q68ju~0*C9kOQa!sbAJ~4+{%ZVABXwV|yAHTusPDL;f}4+Ilvl__htgpN z-%J9f3o_%jg-scB14cZ(dPGG403ZNKL_t(H&dW4`o7b;y{PO;olLHoXYA>s!>GDSE zzFAib`~}Th8?R{GIxQ|v%d||133qZtfp9f4Cs9+OH489Pg2m@mqrxr%N&cKTjEC`G zgI;3e_2e*TMJHW|YttZb%2ERFUP}5a|0Mm_=V-m`kJLO+jaX5NaoJMzl2WwmzW#1D z0VF-NJxMao&={>zjNMVPi?bxoY)0+VjzUX~kuxcMri9?jVVtTQxp@h)hq!)1z$DFy zbR~ruIgIY2i)}R9IOLE!ycOY?1hWdGGYqze3Kx8otlg5GUu+}xaD>E>S*ov&k-EBK z?5WHe++{Z2+HTC{)l<_CNBiv}dN#g*H_xH_q%vr_{*KFy_t@GKb_yozRLKbM`P*XhS0$Nl8Y z%nelRhhP+v1rb1?(Fiokj+WI6AtL~0Al%ajaKP^&v%i$$5(FDH%p2-E*-)o;t^898jQB zdu1I>mo|bRR(pBfpU^ze`0d6uwU^aRn`=CA*5R1D?4)oV2B>CZ66?IM0pkdi9{lq_3_{I?l!LOIj~ z(4O8uEe#}om(-GRuD<};9mH%dAwSch^Ym8SQr8C?4S0g!_8{RGB3PXUPIZn{T^ric zh~9>AQ`m0WsVMgDQF3g4I$cx(q(%okynu@+Scr^;nYIYW%gM}_xVySgo#}mejm4nz zB=REM`(Ha6TP3870vfGFY4x0a+Zjx0HGl0Dbu@jWk=k$99f#)eVfKeEgfktka4h^x zu>w9gDD6|e_onRhn(Z!VSMTX_qg{=5>Fsr+b#Lz*4H{1i3MylQ+U%&@Pj-DZ-#VS- z_yGkvO_w%O`<=R#XdVVmY`Uy*UG2B)X!>U3w7JHIcD(?QKh8Pa7d{j5un0&m&old$ za+=RdjH@YJ-w}GrX3<3zbiF;v%Rk+Pk&?)qz-}>7VTBh|?D|3%i+<8c`bRZmR*{wV zaJOa^&gPgnk6UW9V|%Pu1D;Ge51`ILVfgcP_Xlaw~Al)-|2U=^!Hy zEKBFRb^i~|ClQo2eWOtW(+Y6wZu#((7 zhnKJ0g(wJ&)ZRTB+H8|q;vlnWl1*muKv^Ok0gfQ?mMn?mvuLw}z^*OK_+pIcx-jNv7h-&B0bYp#))W9x zDi392n7WLOwJnZQ?$UBb3p%L51DP}^Sr;X|DS}gzBfYeT>|$@P=I@F9zqdU>erASf zQyJdjZDRx-Z(yubgEkaFGla4oq-P>aO0lGkv!l%~(iy^yC$l1Ag-VtQX~gMoiHyYpH_pPmKy6y( zBQ3|ivI>^0sbb+pkgh@_82>^`V;Qa528Qa zgm^CHL!}`m{8UIkt7vp?v_t@VQ#C3dq4o4u+D~gkXhH1ZI5oeSN##A|xTRUT-quWN zc^BGNlit2yJi{w>e0|y*!({1ROGga)p{WDdI)s)AZMuk33w!Y_j7)fNccIcSGc-pU zW_ka46@<%bb`RoQo>WbL)m6S*f7O51#cQvudkw)UgR(^Xud|xI-uV97O9zGm7F<)# z)-|24Y+cj&N#KLPUy81?$&}9y@KxY13$7_Yrti5AS~>$4c0TYBn*VINr17TOE9*EA zhRn+CNd2aXYW+r5lBoCNI^8E{Mh1c+&(_SFN{Kxjr1|VF(kpVvj2x89N){wW(jYhA zK{&+#wXNum?WW`}<>cQR8GTZL01S=J7ZAqeJuj*|N5}0Ck^DlwpXHUG?czpUgvaQp zf{I15T7X-oXgxhi%b7`nTXqut@8>Cdp^|V(74m&E;nW&*xY(O$jI9|Y5|YCQ;AA3z z(Og2I#-;1MZFn({$oeRuS3-ayKQl|>xCF{pds|#gBUMY8ib7Q$3I>EmZw~8Bei*m2 zAmWwNZS3-0Z$kSKj}im&YQS20O9SW#fNb*%epBde~e zI}^B73x?W(t!PeOcS+-O08Lj8^vrBs)7kgmt-w_at|`A6cspZ8Enm?d9W8Ec<|GVm{I-0)L$bm3~BPJ(!ry)1Tq4NGx zy5Er*I!08qY|8ErGvnu_biXad%RkzUk(9{H&;Ss6F+hHfgSPy_(c-n!dUl%F70vLj zMPtHERb!$%vWV))Bw0BYnM)s{<((}9sZsKR&i_afdooP-@tH9{lEM*wvFr?wjt_XW zMYm(O?56bIO+O`$pEq~iW65P-qsBW zN}r5lw;AMTXGkyW#EUuzSMF(DF)jDEC&wHJ!f)e!t+F@>7A+fW!7a>7!Bs#a=0b1`@y)e4^2_;M_j_v5h0l$sGB!Q0mLJQ4ZYsvnHyT=mi zezifV%IUxYd`hFB6o zTSd3~V9UEZJ3w)eSsP<_32qS5%d*Ifr2PJJ@-clzO81WJ zq{ycq)GbEy4`A*P_fkOf!*v%mUb5=yI@Vo0cDc2W_48NYuM4gzuLV91)UubmZLkzc z2j~EH7r|u%@buO-on6ym-%LBuS@EMfiQ*OnCn1=*?kkN+4#=U~?GA%{&BTipRY2pG zyBJA{SF%_7YYBFX!Mv-=kr~ZvU-RQIR>$br5R|0}ZnbGUHR-$FL_g4^`<*$eF5H1Q z?GSWebQ-r>8AP{b;qb|@a!gX^JxIqV5(5CI@7(0(6|lMtoU%zO#`LqIATLN9lP7U( z9u?{)_}W&gz8xj)#6TIiWe!HdAhg9M zeOM2jZ|~V-$@Buw0X3vXgoVd)TT)#M~oZRh5CR z?!&_-K)AxvhIRoW6*IODa{)aQx!sjNsuL*A0d7JJ8E@%C^OkjAZQKNm3vh-3q9&ke z!8PSke1?O!;g@oE2Ob1o+`6VyP1kKRZ9r$`wRIq|@pwoJ9N@6^YZ|j0phLhG zv%3g76MeSxg3goD*lh;c5{0%jMoKd4hB%Q%i=AI+$Eozj?20iH(l4E;@CGCp^o|{$ zZ)fiHHDtaLA65Fdw>*H_Jqbxdh9GzQbL>2FGj5q0^4^4kmeaeb_}?hI&+48Uca#R1 zkrb+2c6_-T;dNuAnu-4|OxZtU1Q%Cgequ4YHUd>a=yDKw3+tsQGHap&3b#B*ZcZ9E zmfw@EJzZUAW0{xq;R!-7g+~WE0(92#?|;ZcD#BhF84`Qn44VFLTn&LiWW9?;fGi;G zXsl}pE9a%A=v{xGfPAVz^G75n=%FwE4^nYv(^nb`Q#tKh*L0@v<32wF3?RF8O=tc< z**4}h+Q8K)9s|}9M+qpZgkm3!`2ZBQp2)#ZjhwSvsy4&KjpAwODzsxd~i+SEcD^=!(gte*%gLB^%$ z`iDqdm>u!n+_+2G{ZX3F>Y3^_-NP{9MKx`wrD*>^3TsC*k%u=?eq#l}KpCcEA=6=0 z+$FKR1Fxij3VOvj%`{`fp5SoGazs<*IJ#$4u|J)6hV2|HJV`WNMQ7W1sy=y#x^I_ly1Vg2IWq@f{tmB`Sug+I<48)<3kLgvs01QqV=DvO3z0Wdd(RUv(aFK%LBjRrShQ-+)*;ln%bKEhWyUO*uB$6Yb1j;) zhWYwh;KS>`*tlioPwH6zg+>mJX$m?kuCHhPc@3=iY5j7vUWed^>sL2^b+Q`5n% z)K>hT5rkGKDZub4O0?w{{q^lpuZ0F75XEOonMFDi$sWdF&DqKJ2Fp;6a zYB4EPjL?olLw=Tn^YBiL7vp$K&0)W=&F-gKFzXx|nfm z1&O1w69VFKDi{b4%udO|Z`9EFt{&o#+Z5*ZU}S8}o&bSerHF!o8*^~u1^;hJ0d1+h z+WdiN0cpt3PGh$Pe0G8n?m;^q`=&Ve0**`tiprKI;*^oIdJx+1vju~`m95P|*`^IC z4ac+tgJ~Q$HAU|l6StTvVdYQj-+|V@M-U&vf^&iYT)(>Uo4s!w1e|FOIvdVwV8!+I z$D(;c3-PTD=QmsqydeOm_%J5ZEAuEJX?uU?kb&^AxWh^s!dT7b!~^C6tabw((Ebh> z;c&tgZ2xvQi?3}XbHl9R>vojJ%VZgMeUd3jeeW?^KhiTM@X$c;HEYmXr2VqoCd|L8 zie2ZllCO3s|NBe?0u^vk)h=#Ls>l^)U?hXstr27{j!}c zy-m@(9vh=FTngNv1!oT92Hb?^JsU1)*nAK|#wE&LCrjtX`gbCD9KmH9&TqK9?w56M zsEHLyuEga4Q85ZTq7yj z`Poh??~aeIVt$0-#63bU*%McSl_2~=ki>D>QCkMW6*OOv#J;MEgZ6(32C721@cgLD);`LvXIh3GKlfmo?jl9NM zqx&@alPP=9L=i)ogxr!nluDu(bOw=Fb~Yr17JUmL+kqd}rcN7P4*k5oS02q@aZ~-@ z5d0QN^$=jQ7O35DUc==Z&TGg6Jiof(Ac9P1&{_VA`rd_p7lJ<_xM9QR8omaw;lelI z;%PjY6R5DF^WRd`+*yXUCnhL_2f>%@3DapBX@S*h;04F#i&6nadtEE`-%lyuBsL9$4W=C*z7K#>o+-chM z@JjPIb9*Q(?!cYb1tl5mPJ`&i7$s{fDSf7z@a7n1x4oy3R2zEy?La4C6lP|TDSPDm z)f%16`(04e_K@6dS|}og3ifD4mPFVRE%(JcML1UqDHZM`)4tmjy{j-%rkYaND}G*o z9)fj9P8kAh(g?ne=9mqiZ&=5{abSSX@?X}o@!STM|Dyf`4S&^e`-aanoZqWyyg^67 z$O%x;eL@Q9NCMj@<{A^KNLb!8fn^gA*lts(@{swl9Y;8Vj`yaqztuc6p@;@O$3kr% zLpG-ncw4$@ZFq{zDtFxVE53^@#q8@V_K#j+Y8HQO25qNyq4yECPL+cfmIK}&rNZJ@ z`7434JiKTgXI6sz(srEr9eD91RuZDmmlAubijuXJgkOwdb_RVR-j`@{e;GTLhYG8a zi(IuP{g)=hZV9e2%oJ#XZV6Ibdn{<8=74*$TpP;?Av)c1{9MPYnxc1&NI|vy7xgQI z!Q&c!rXi;L7@&O&(Wels+VGi%?_#1jI3{K6mon(qyLYqvm-R;=c>>9UXg<*Tm))xM zFT3Bc6T2`pBdVhMOI;_Y5S}1&NP)T6RnmEKa{NVs8bYrGD9m+ms>YX0paYutgAo$P zW^pRVehe)kH$O+&ra113!F~9~4wq1(6mv!8sE#RwBz4|>y!PIg(SeE0yHn{=_2(EJ z?@1!2u#uUTF!RA zL4vQuuy=(q6Bfdi=&*;feR(OSFgZae0YYH!ir~d^!`_DZd=PbiC&nQ$L|I_Sj5h<5 zoYjLP{klh;_kpc%acLwQ$8v*UiJYEo{je!|*Q3LN&41Mgs^2^FCImMkm_0=7CWYXf zjpsIeq4h6*Q=d1ota@WwI=9p>0KGs$zsKNdBrhX)@5WCzxc>rktAr!=s7+3}N9+3& z)cmn*LbIN#&0;rO;};GELGV?ZYlf$~1j#XreFJgkCa9t;h~qjwCeXXBV(q!&7t-MQccd4!U^d zSqk%d$RE~4SU4GneiriWr zB#y~o@3OGk&2c~Q>1A00+ibtKXB@-ql4x^+vR%X0E87VCyxVVpw(qUax6nINAmxb1 z(HV!HYagNgL+OciS?vRg$yHfq-CQ;`ySvyxZqAP?X?ySR{E4}F1&khh|HNAQ_=L3O z;l;B!vwFxc>ZGv1PfiH5TSPa;i2t*O(r2m(Y>Q$hY=0fBi6qZXaO%dh|D_hw z!xR0p!vyR)w~HCKmya8CoN^C)x5>B;ApKSb*~JB9R!&I3v{=1j9`ftT)6QQ4Nv_`&8)@| zYM^uA5G zg94@Uh!HN*+uBX%-A|A_u`ub?_$?pnq_iP8sXJWRin%|jAiF4wQ|XR^o(Fo~oWSS~ zO^5xs#{$uYLWLcinF$JuJ8%|u;#K!xWi-)^F=CHbQTkXlkxem-guT~t87VnIgIiX> zY7h4Zoc1tQOLS<9&yslSJIH*e0o|F~M_CaByb}N5#@;#|p#`QHBydv~qTK~SNb6#; zyCAsiw)zW!7l5<1@WWaAyj(5#lh!QU`0<9TH-5r*`ENY?U>fv+Yw1}03dxa3Zhr1# z4LAI&O{|eK92m%LC_F*uDJdc^gs|Jj?&p$@#IwO{AN$gYjKpj=$s95{B)BT1NjC4q zem1|ajfWd@hhcyBo3o`Zf0&jJv<=&2ZoDHm-=XF=Wn)eYA8y1SiC}g@;)wLDm09Vh2i-hF@1xy$sK?M21vvZ|XTj2p7C!9W6-@fREJh}bnF(W^OwJ5&Jw^G``*0pO5wtWw6Lsq_lo`Y^%>aC2j~Ez_mxA`}W$=~? z>mzq9+l%DeNZKa=n-YRMfR)d_ea|x+zfyChoe!CJ?zIiyxaKMZ|Aj`Ox%t_5E{IIE zF%tEnZb>;qY|&>*X{AGcbA_h+Q}o@Oosm*1FL#I>vdO)K=_^zTsmG(_t|}wT^QQo{ zq3Pb-LGpnHob8bz*M~}gV&WDbnZNiUz33n;d)KB7+-qAlRhJ!&xtU{VK zf6zwv9qGU&Is*{XrY3(y3A18A=px+;LZd=Hgnd-Z33%juiBYhyG8UoJ^#Pe_!o#a` zaGT1QM;n6J&}@d?*EshcMIFx*dha@LA?zn`=|$TT`$dz;H;Mt+ED;p$kT{#AK(KjY zFy(&%|NQLRh7*~d{q>qF?V<*q4d1>7z(#X_bx+>8|E+rtFVumxf_R2E(HKidkbX^; z<^R~iz_vUpI(=nUTIG;>A~8cxiYB%3K5l;PfA7*xT-=o5srJrgbb6pOv-k-VEq#<*C zj<#Xv6fS{1001BWNkl=l|CFfq-|K>da-$Brd zVBh|??D_bHZ(g&22UdW>olMCnQ`7N|e%kJ8nh~Fx+u$PeVn(UBW?mvRxGiVlv~6lm z{8lHCyK+M-O0}D)=laLEsdRstzE3_#ep~sh0?wctuW)&phKFObaniCPq362J^!WX9(2M9EHDpg7EPuQcA*|Vbs-O(*Iym zx>*eMrWz+J?P&zd_P=G%>-WE<1~``_=xq4THSa+3OI6?L%>et~vT)5;g^$o2pG;8& zDW)!!r5?#W(J51KhyKnJsF*+f*%M&(m<(KB1XrAmhb6bAjQ!zmL@BV?RHMY(-#_N` zTKL#6IQ_xwx#=CFApM#w4fiEx&gZ7V?yzY7R+8R3`sY+bq(Ta931r2%1T~1pNJk0p zZ^i0JpoOOA^_}yVI3a+FkNUG`v0o5KPg1yDFvyNGPTVGoB#^@dRG8cg`A?`7wob^i(B7W2YsiS@yr1 z=y`p5?)NGozp;cU*q6-u)>2`nqlBJo!RkmbD)_-pc0H>FTomvvsf`R>S*!_nazEjHzagkd1 zIAS_SK3~xF_I{f0t)Euyj_?KLr4F%Yrk}xQGfgSino zb>w%mkZOVyA1I{^FNSj!4AsRPCF>2^uWT~kJd zG>N^@G4$=@D)?rX_>O)gr<5n$v)ME190ok|6DID@eq zPmte|rMzrJ+-o)o6ICjo$~J@Ef3X>OkAdIF*qDtOfKu%HKFz=D5WC0yL&TSB+Wb-n zo%Q!^Vf}quWR+q91li|axBF|gAr0h1ycVHJPxr(pOM;GH@2CEeDdD8UW3-V zQuMz(J9{?p@#et-r_I60hb}%PQL+d<-;8yv4m>&9jL}eBU!brtH~UuM8Zf}wEa~~I z&A0Iid^W1B81N`BL0N(3r z!#OOUk2KhhuF`cjJLYB^7_SV2l3$%Zse$o!E!iCE|+QjL1^_&%pE5Esf*%P@i z*$KuQ562|*LNoS}hM-y8IQQ)}xa6)GoeD0?a{4hH4V7(@o`18+{E>-{R6*#>1OW@8 zKT} zGJ^s+1-WZV2qB3ax2NQ}DlMx_T~w+B(PzR)=iF&J71H#qI*IP7pz}p~()%f{chBEs zXecjoN&O@moSw(K=ZI$U|7j$Mz@P@lQG@PNVh(AgT!eEj+ekwCb$MFvuF(JH@6i35{pS?)#$V~0^e^QIbsJRLMi+T%OVfN$5?R#b zH=n%>KV@nvEk2Y@FfTCRks4XFFguddYCEmMiu9{{#yuDr1!KZ>feD4z8x(FePz`}~ zIkMJgaNVLH_B}=Hejl09LDIljEc@V&j%P|WMYBLG9R%;J`dUi|Zr}aMbr006oN>lz zK)Pba?i3Z$biE}*!$Zjl-9bV_X?cbC-ie!)X$jG1!=&GkJ=f0-0tRj=Q10&`_H2a6 zQ5&nz3<^RG278#C)7HwlYl^gezF~|d6FFv6_i%*X*Yuy&lyYrqN-HZE{oxC1nO01! zWA)evn~+6o>I^#x{jcnuFfl_qa+Fnr0+kfx-)zwJWt-ev40Q60n2jWe*;F9*1E1FS zIwZdCAqsl9CTHx3ez&G%7Ko*@?!hge1j5xt^&G%~+jrMSbF8IPGV%smxHAf%3k3r= z6lwZFg77Ab%3^n%cE~}$mbzcW$!sr<>q8eBqA%E-eosGU|2Zg36d)^t#I6W!U#X+8 zzC!-W0^#EZ;bT$kZVRI%ag#o7tB2d-Q(o-gw0kI9qaq3wR;cjkK=pjNx7; zO^?3@#31Ns@LL4MR~Z!EBoT$GYt0{V+#Sq-%RzL9BJpJpZB|`tlQ+n{3pl;K?Fx2u zK3&r_m%MvT^0pD1`6IPqoKP~dI7nABGi@fzf@62~u>7OVoP2)|dK`tIZB6{iD9|^- zi8G+CmxXiCm0Uw&ZYna z;N`pTtqtQuo0~22>0Y;TytIwwdK zJ{$V2`k9G6VHW*+1Kn>MVEJ|#nIxYGVfC8Woi;|^KmcyNM|ru6)9O)L;o#MKXhWk-9kk;%s#t%;ulwj??5eReaI#%4 zH2xeEzJ}h{W?AvSTCuxL+{V$VS6V<}T^XYw@oaw#AS8bpqvPHE^A9*OP%_D#VOqXf zNA}txFMQ@SepDg6phdTI1XhonTA5eDK#W8&2})|Ppt9JdywnNYEk;1EV&n~sk_>+4 zB&nZ@wHQ6P&3+6-KeZj*=Gsk!#vjFT7oP(TIsw9yfg7zq5&(vnVH;{+P}rEKxVA9%ew7AWqE{zjMFJf+!Plbz zX5^Z&pV!2{?qTn%zQ=Hn4gv zth7nwg(z0Pf$#&ONF!&E{6&91wm?5&ga*v{#|x z%&OgbRgM5ZtSOfT06NcKx0}l!-Le?4Ml9?{YC|~b&UeLJo0JJ~T0Am06-Yi2Cwpyv zR4k*gwoL5VDCK4DsNzpql9ZP_81vBzS_B9eJshIt8!42nIQlnTXekgQz+mM2!^dq3 zSDc${R^eBHX+&DKSMTH1`;@AMhT7C<1L}7qN$if`M}1np)qt1uDQqfHURJ@Y^M_+a zXAyw>q>qfS=_Fd};8A8t1>rTh4BXHkjPIc3(h^0lOQJ7}LPb?G z)Xo4K0WuqaP5f>TqZf3T0C46eckk$YrpB+fVBBkx-#X(Iw6ivZlOGf3BO^*y1bw$> zS^c3!lrAsf)(vM4c?m`QsW9o+Wk)I9x`$)ruPO)iIdk}aZE7M%ZQ8$7hab`$|I;4) za9|k-e_|I>#CeC1RqNM$uQ* z2Q8x&;Ha_50fxXhrHI|9h~4W4DgQD6oO#($@X4B9SwNtp1#cUA6$PXA^Vjr_%bXzq(uST}^1)yS zS6?#gL=&MwNsRs|W_JwXRMW8MGUO^K*z}tq^J@;yOIx9?N>DnO95C3aQwCOzDERPV z0r`9mvei_z!A!RKpV5D*X_bX!=?Ipc@k*vPd{b-@L-&V{*|{a3t*>|M6!|ME3Q=2xh-X6Q6S4RyU)lm8?Vkodgl>zBsBaeMf~Y71K0P0)T4On{DepJITKx_ z$sZaD6(~&=RutCf$zPen959I-4b%8Q3WT7vv_fHH2`}ZLZ9OYDoFDaZniR5PqQWx> zQ4E63KqLU0k~RIp&Itfec%Vbzt`-zuZBV*ipc+Dmie{)aha7gFp)?}nB3{VBu>zv# zff-Ot2t@FC^A9=?0ngX8%EAJj)-(4_ZTKda9i971H#c4Jh5QxyKPfLQlh_-l@rO;6 zm-=L1QY3#x8D;69&)GB+K#iP1$GiJz`)UIx-rs{zL43gKsDh4whWq1my(K%nc#;8T zM$-J9B#}clo$tty+fqUnC9*g>(1`DiP*_{xyflxgf_c+D4VXF2zzx0QT4>tP=#Yn5 zlBfxS`9cXqS)f9S!nz{)D+-8;AohHemhaS~O+j%@iNc2B=yT~d6dq;iEslys1oQ8^>+Sp;A#jujBk=MX20 zU(Q;3c(n^oaO?mR0%7JAtl@1Y5TH#Pw>yX?XC3kg^{Khg( z52YBmseteWsh`B?_>FLm(nMuZf#Sx}gf2lXHBL)~=z%Et&4p=!{-A5Lu&zjcQvsm`(dVNyf43g#NDAx9 ziB6>r!frY&huDSuq1^XSSA&3g*4MMN)c|LFr~0q{4e3 zOM`S3_;1-WfSa$8Cy_J)b?iD2Z!TrHn; z)zYcSLINEv37xTtqP5|hhEE{#bY^>a^AAGDLvM0g9fT)Pwj#SNM|N8dD`V2|qZn;> zrzl+Rl6hI4;@S$bEGNtk6Rx1=%>%6dP&@f6OZZWR)oG$FuzC$DOWh&1f-&=GYeYrR z{^dF%&xPpzl>s{5l?h5J=A++@)L6X+POEoL`{!s=6MZ2}%eNcJU)_gS=T55hg%)^q z4&g&d@|*L_^hiGF8ZE9VQe0C+c!JQW5DgC|FtZlrWfcmWN)(q@kly&NRIlF0j|POB zdOX%?sgVO=tgd(fHiPc9*#J!$ytR_z%LA*%Z>(A&esGO6w1gqR(a=#qpU9%}Wt^DC zzcOHZ7?rW6M_cJ)@HL^yT~i`=Wr^6nFv&d;j6P#5bH?=K&vta~E7!Eig0pnS)(x-O zyS3rqRlE9X!#IUYq#*x3@nqsnJ$LjVD{_}9*CqCGXm6m8r6FOzl`HsvOz|y8hI)awF>WDoXqVM(`9q;T% znR@22rOA}P0Z0|3*`A|rWh$hoe>g>QXOw~Kdr%=Cp{Hg-@Z%m4mE{3d+3`&e zS{ds$KjM$sq{0iT;!DfQ6jzrp3nt;iVHW*o3O_0sxVA)La|yR0=oUJdwdO2#DJ}Jg zJ|D)5D6C$Cx}U^2c4zNU@L!uC9ccJroYW&RGA}D|HfVRcQEn>ethoXf}tdYkfOM%MB(xhW?o{S4pH}L0{LKy z$`XhCrecuID51EfOmcS$w>6JY5>d3Uy5q>4J;HRDJ^+des3f@SB!$-+RIZZvEy3;; zYDCh+P^?CxT@RHn;`I%nisc}AK#1Wo@HrCB1WXW`!iEaPwGOf8Ld186vC?KxOEmd2 z7EQBssHR0080Z|_vWqoOZ7q(oIBu_j&NQu^vhnYUCla@1wr3`F`3Og#EJbmBk^B{T ztbUW&^HCZfXu@q)q+gk(w8{yxt`u~>v!AuU-%ep;iRk_?(S6|{RapkQBlTE>manJC z+*07k-*uxcbymP;P*OjSQeIX$`)MWuWKq(7R}*f1nfx{RSy?QVwldL!QL@{z^ExI% z34{}nvX+;ZDXlFc%LbtnAsQY^VB{={tI8BMlu(9&EL&KolgM0XX546l?kxlSc0u7y z2F2?o{?g$4Q2`KDy%i(C8g#+M?e9nB3TVe?sG3ZiowXtSz>3RnDpS}{CVb2$`SU1N zk1UqKBh}zE}3ehFok@C==;O{FoxYIZy8D z99Ex2!;hnc|FeP8GLQ7@GL)9P9RH(UmVKfLGh>mzvW&Jhsh>t^|Id1QUz_F7$2$XG zy5g*X&7dS7i;iKIo_CQDIv%3+?goliWpL}A*}2Fx_zez`gDG-b&+fPgN1~;sysS)V zMUdcNciA-TNCd9c=bMIHYty!B%HX#_;mszc8zt_FDoeyjpb;bgL?c{{KA4A&GL=Lg zJ=nX*ICt^4!Q$fba);7* z6?oxOr}3k@+D_oyJZI#fP4BDD9yOK<^^zk`2 zN;hz)N>5^+uxDh|$Q*df1chHVDBmD)SBs!W5d;YVBP|*YTKGt95Z8@_oj9tyh;P?X zS(8J`7=EdMQz_s(mFj&6gp>%xS+jUXPbidEIFy$;*c}#$T@fNL*yzyUq>38V)t=_-27ib#!`s)2#KXGWou0O5~{4R|A3=t`FazfUP109X|$>5Tni)+sHlsX zF>zX*b2CncCiPf~#ID3xN}16&2Oh`*xT^%^nTC)EcdQe7AzE8V+h4T1?ca1-=1BWr%_h=@rnItz)8-K08z=T$i0JbnvM)LJ?U02MlrJk! znCd+TWI(urC0}Smg&p!&<>rqGT7%P8CUPV~c}W@Rp2Y-+YT;_b4;l#{4hI&A80S6J zSd6z=;9Mohzuv%ID^c;Fo`#W@>tHfuC~&FSFKD7a@QFOAFbWWUpNY6KiWm3rl0GV- zg7oa61B^fj6EkFDhU2698fi3Wg;omXdnnhzb&7c90&Y2vQ_7({H@JKcmmnk&)%X6_q-EEqJ}@(K>o>su7`F>@w|R$?E5}f?x@7e4M}g)kEuceXTZ} zQ_IaQSF9~BD?i=yhMv%T##fS$rHDTlrL>|<^o1~;?;fD%b=jbx@f@wB#J(`rF@dva z9xVn5X1_uE7h5P@K7iX?nRi#Aa3#^_>gaw;_t}ei2`~x{MBT(9I zkbkRzyR2%_c;f(UwO0*37+FpH>pqbmD2#N~`ZI>#7x|MbkxLS&s7IyEK}R%xcn%LD z0t*o|T5Ggcpf%afqx2tmo={I{ek|Lt>dV|z`fphgoxqoYL%la;yc+l{5YPcw{rpxF z$N^_A*$U8f=<;3p+K^5y+uJrh*7f%8mwKuBiG65O(|UI+enOGHCC%b5ETX)mh`U5` zd{#6UGo71mZtFsb))1!5t zXnM5nl{HPW06=H;3tKs~cGsu1Ag4t@oiXBi=c+?nYYSl-@^I#<2f~NLFPJ%VUOumW zM?J;$MYN$YN(P11MeL3Ue%z(fl3~NIEyWrzhO?Z`3XlpkY9^KDlS=!SnhAFb^4IjC zt+SjB;R`D5CBlaz^LGD%;uN%evxV562*QENwUWL+H#z+yn~r;Ia&MBj%Yzo$gNBW+ zQnqOmR0@n!n&js^7QMlt{Z#?bm@lef%VsL#1xwL?TN=Mqrsw{jjQ{>BO^(?wu+k!+ zFPbf(gaRv>pzW5M5at}#w*Wt(`qAUwMJw$KU0s>Ql_vr z&6*Fk5jz+PGQQ4&7$r$*O=XVmG>uV^Ect9JDpH}a@!XMy`Y8{q*PN&11Wo9;Ma#YI z_-jJ+e8S@7FGBQu(xPyOf!BTp8EAF?=n!Cm^`a*6RiE}(JG8&qA@L<2^N=34e#G?G zM*1~9Xglce>F0{{e1FFj0|7<>thB%!s8Z&@%!*Y3Ga9As<{L4i5wxE9pejq3{fH_| z@+}Hz0N&m7Xx+axJzDqbrbp`Cpy`Q0$RAGavILIy;cBfD-60!a0BvsY918IQ%cIJCaaA@vy#^Hh~!b0$DD z0?5*@>OqCos5$YndD0I(j*wG-pl}4{Kw$kC`Dv!#kN7Sl6ryeWjf5NOhx_tOcQ`Fw z@FTiB{*w*0lB)nczzcxGuye8|7qHCU{uR8oI@xE+N)*ok>ubY1zU=7S2he>pSKJ$W zA^M)uiqfnVb;AP<^xrxV@O~K#r7H_9=)1X}_OG;2zATS)3^F%#v-sZ|$Q-iicxV5- zb@tSzCiz5!!us6oGRp)ce-Wqdr*X13_MnY(&w3&NKj~nfvhgmTW`c*Vf=yExu5LiL zg@gVwgB>c=8DB7J%)maRNqx#A{J0vOI55XUf$#;HTl(-5<3ESf*~7r&Pm#L*YP9Q5 z>p5kq>Oz&EVj4A(dOwr*PD+}udkN_$pQ3cSbJ_)`Dx&(aw1*?C5r^YG;91~df-G7G zP`x*0YBV_u0dx+p*mZE#v8}&_;B({rdfloQw>}SS0Q|$tYV|wgVn#`RBK}nTJ%iNv zGgdCHAk<+qm<6W{jWuB6GzBTkDy+y}njkND06D-N}B_+uRy`MC#r zveyBeFW>bat6to?6~S+f^Om&)3+5$2S8b@r%0v0R2ezNye6N+Z?(pio z8M~&;j7j#o9MzHuRK!P&Y`~@d1-YH`*ei$?^(>D|J{kQ=a$_j zD*~%?hVc*qqAXeTg&G@^7 z2S!F94bT?D&D#Max7EZy~!+HjAfdmZtq#O~xB z{kP7nEs?e~$zLQ%zpj5+NlLIX#+cJ%`u08=?{6S`UC&Sm)@d)H`hC{?ZaYUm(oLn^ zov_R1R1!XE;k39j0vx-`qV29GikA=Iwv{LEoO!OqP$F2P!ER3QIm^I8%%-X(Jr+VnD zfy*VS^XB>iD^G0Y$kJV`Jh62rVp0OokD&S6BTILAD^G3Z$l{vIZF}2#gl9!CIdJN? zPF*&W%rfanTJLV<^m{soW-)v;MC5Ro{u?r5X1VG9CcLIRZry159qAe*b~SSJ!@ZO) zpIxhUO%=Oy_~rD?6W=)o|}-)dmsWj$v<9eRq>Is$Z5qEjZ`*Ya@C%f-D;3t{KiM4V?^;*d3$ymFck{RhG1Wy_JFM zy2k|S1%l)+n&^0Mmj0V(mVu@XXuqqD(((fSG+3JJb|gvcjgY;*_nZ{0j=SOwfvPic zUlPZAX#yRV<618hTc=;8?u|*xzu8Lh&LtE+ zx{Sj6+wiWALCgfRN~6Jubty&A$jlHRB%;ql?CM8;_cZd$N8z4h)PGje@PAVXFR<{= zTc+KJ=kC8XJvw$W7mKOlkbdZKl;h5R9`p>~A2o>l$(0zJ>w~yi@QXb)tx$8XP2b|_ zc_~Mlf5FO*ZOy><5L`ROpPT^x0?jv%wC}7e)QQ;Mx?xRasrO{h8+u|>x!96BllVzR ze$(hvsX1WMbWa1FZ|j+XQOa}q@o>aMvMzIZ6@h1%YMK*eI2yaygwLFZfHxU&DuAbh? z_cg|87x`iZ^KgmC!{94L_Qo6niF725_cdZ4x4B@-o|PbTOB$!WGOr-6wZ?8p(RkbS z2yPt>0j@dSP>bTh95VA ztWa4rL7Y}<%)StjV=0dOeK$_KH(`Q7!$UE`&l_Z~9qX1!?1|IxK!X0;x~JWRc?`f* z)4`FTqXxRpKsDR=>mqm?BKXY~($zuWf4VEZtdMCBdD_9+SH##`KzJG*4lEtvLv(*V zJ#Xm6>a}S8PBX$47tTV_ki9NLc}3~$bcEF!ySbi*Td$iDTeNf~_Nmb9wTdZm|L4Un z=aHUOJB~b2pe8lYnXRno+7<)uL2&ytRm~TH{}08%qis9YLYa(PQdhpRa7E#P^sCbo zroBp6lKN>K>D&7PANt7OIfAw?wsQJ6Iwn2+8YP3aueFld-Z|;}geOS;yqOn2(o13e z_?c}>|Fx0)>O5}Ch+wc5G~e5R-6P0t?VElIuO1075*;(}7u)z7qPQC)=!A(-dW0Kh zij^&bdl3a6G2mgoP{Q0 zjf-hbWcgz1uD|-+fsO{z6z;TcS@dTVoUh!Q{L2Ni_iLbYw!o)*+e!pqBPbZ1N<5$w z_-Ej2N1JzcEQASp+0spWyMC?fNRdWx${lvj-JiCp~Ic22$f^rR8(nm$Y|WZKYNzAv-9tp9Mp4rKpUpUJMJksS$Ny}f zDpwikkc5at)fuRj5xjK~{3SLzB*2tamMuN;^Hf0!Sp|@ak0@%4(-q7o3m7ky5JiQo z=pYUzL_is&K)42?Vj#-`qiA9jO+?ASD9gb0s5RPP1m~C-2PDO~3VX_}H4D>EXhCI3 znamCSAXN}o8vG_bf)!z&z)1T(iH&PWY}p9YC?1s+iQO?b(2H1#DU=d7AwMb|ctw(L9tT)U!Y+YJc*7Py&-!?7l?1o#B-u@$}Bb^-qv_%@mo zN1J!L04vhlING@L(wUHc;~!$r#=bGIZD5QgqfJftSeX7>2PSljjr2-QsJxUQzpg<1 z=>)Q1qGFS@Rx@Ja7me{gn^DqP#WRuVPZ_i0UKjDh%bsd-~{V*F%Fcm4!D>nf*vzQ zMj$*B=_dnV@dS7>(DklF_|a+ zd>qK#;eL!7_|z<&xdTz}w(Efp0KW_*XK>fMfgQm8z#cRMN1JvI`FB?IZR2Re#Ro($ zTebpOPSp7!|GCb0ced#>PQ$V+N$g3Ixp{o+L>rnV|GJ2i?>ZGIt|?~T?zCyxQAcje z)G5r`(!}@HQCTiH{wKX?QzJaM>>nFQzbZpwcbtYFCmGnDMkO`6-okIOQ0*3~CAf66 zg-Xi6%5bU_Gn0T_z{OQn><-A1#yk$8eG2Otg?&I{9`!JKH9{I_S+$IW9tM$_a+_&^ z+gc|7(mta5l28_u)@H`HXr|g(lcE0vmX4m_e$8}<#NNh<`{5`tWO)fCKxniXH1$&< zfB63+0T8LEAN<==L$6~hl%<2)7CK;A5TLbB-Ak_`x@Os=b7qtbtZsWQTfnz&Tl_td zvh&sNFbHb|^0$^ytzlHN1*SlF3LHIkuzO@} zOf{|}ieMj6n1?m?enn`H#@?$i@}MFCuh}R|U_Lg35;#p23fHBFs^=3wX`-}d059R3 zzXc&R(F1kZr(;9b?3_haEt8?20Z?IR{73*ue!@f98b7Mg(j)n%Etu=;14~nAl+;x} zMHL|mCRXnpczz7wgx<93tJ?EJXRMAg@R571J725;PYrbDABg(4T?PCB0kc8NEI;N{ z6^I@sph7)&`F6(ndk-+ztuu5w$ZINI&Kbk*;FH4V$)l7gMDIz z2S%sHI<7Gf1;7&7>0=(MzRx;GPGBYQ>m72}rAO@wBX1IatdW81I?vl~(WavAr)>!5 zJm+hB8v9pQW3QSBF`gP5P51%a#vQdYP9s>^;KCQ~FIAOf(^W&j+b0%oVi=mhJS#@^=> zdP-wHuMj1WK4`_vyJOCaRu_164uxyeL&5oBRi_C*n?yQ-;_89(LfvELZQ@Th%-qFy zR=`;gtp_0mL`_7@L^MZ`jbUU%7?KvUDGV_anX(~lR1-a_YjW_?qd!+Ji61bpYu$;S z@Ig)Bi}zZ0{;;OHYoIg#094q<(O4CL`nSb_l?Yw|yaw1v&?kMak_R%t06~MOBfv4> zMc`!hcUi5;0eKvX$69xK=i>Qqm+P1JU+cWk_lmToO-<8xo9KV}0Dj!BDrNzO47Q;m z0x+=!sh`y|aB~)H1EMB6ZXjYN!~-DFAqjT%{iXy{1lEMEHh>$X?4L@x4w7XWfiqN_ z!QaaPkbN2>t+9@RwO?UBr!kMK;CFeAC#CLg6WmAYp%(I+ z`talKxxH5bk%LLXC*#v%t2jSnShaKqfkXh7L|76XHjz;i5it-c8_^U-Hb)RGVPq-< zwnRisFeT=u`aSaUx+4Vnje{H$dK`=AyZ2gmexs(oYoK%P04cMrwF*2p0Jj1wfo33l z7DmX`0VrjwAT{zDd_7ma3RIg-5wy~+R4py1x{>@5V?MHBu^FgtY=V}%QQsDR<43)J z&Rv_W(@{a>NSxB_z&7AI1S`&1sONZ-&2d(A5G)_A zi*MBI8kae?8W515^Mi+P*-6Ws*74 zAw~A4UbH=pd=sgOK3R{lJj%;+=j<7UFG>Ea_0rg=lS|i*&V6m;{o)SyV__gw^=>p& z0cnsR@a}u9I|pj2yaqZK1{h_xtsv-Ny1r@|4PMDh|LI50vKWq&h-zwWMM2g@WIY(D z{>=I`eJ4q&Ese;!h`a)&t93DAsG>?JLEVnFivwIH0vt<`yRkP&6`qOJ@n9?YjeV$? zdk*GJ6FLzmayYpV*6K4mI`?g^spLyv%uDsbmS?wdEV=V2a1?l8d3Ku^;l>IfXd_6^ zUP@4eI(RJx+JMFj=2&1bTr43Rq2NJ5LCHtteJFZR zs-`k?Mq+@}R2)V0XCX?LSE^ku&nQrpn(*n^#S1tDaj5)D`%qCeqvsI5pm=45_*3-^ zytHfTTBteSsKD-tEEHYz)0#T2fzCxO$C5kG{I>?&>Qw~#f#*g6Rc_m$zj!dV5&_~> zbH0JV$6SXXRkfC)1U~2Rh`+O|z&02rAMDC9sKG}P@hgIuk5|1fXT((jDmuhK>ND=| zFj;b?IDz)Gnogi{3%w`!4SP2@lXFYMyfJEH@;BVB1?99vfe|H)mQBmP_)M$W`f zxMMP=1cLC9#KpTXG!(8)<0rjY0jJws!ELP&J(QxfGJDoR$H-a>#3I-GYU;QKItxyY zC3gB%Kq^*2h+~PFr%f-OV=A1Q1ujsOuc8Z@de zX+t3kGO*Lc%(a#91pP0|(C}!A>@{OMkQ!MF;asFzP(%K@KD-8Z*6hr}7nC++N&Tpm z@{$7D_Rr3}N{!tSL1=*%3xaUH*2iFhh^P(0g)KK-wj2mYgm0ZZ{o5T4Lj{==%x36h z2&=~+zpgNA7nrgGrUD(VP+2rg+NljqY=0f0Q_+iZEDKxvaa-o0|BTQW8JpPdda^I+ zIy<{aYT{2dV)lm?!ZPmzwP8o+vt6|vf9Z>?4Z(#ij~+k9qsI@FWLdl=^|L7g${JKy zVHD<;tS22o|MosYC*ot64eZW~Fvg%Ee@$k700%$|{5lsuFnQUM)$Hhe_GI{2=-%kTN&3(m0g2{(N&5Ca;`DUvE`kbezFlT=LN zoVS1wzO=?DA z9XQb#q{Zzn^-^~bKDJEohw{N`V0&R=2#o%7^c=}}UwWyx23St<>w(=I6;&HzpjnMN zX>&)gAL!5#5Gv{(J_~t8X%;0i!g-nGsBM*$CxqIe~A#Xhyq(So@ zfilG$e_G!Tl#VmHdM5_X+m0}E@oKhNy-55cr^O-wlXtYx=*l8}=z(Re%A!{~V!?(|GH9+)tW!^A)wrh$ZaW0O4N(bd--x$C-Q zb>rM~xC}Hd2}%QQyKy^vHCY}#6a1E^OAK?0n z&GGz*qHB9kvF)(g{`3*i<>A<)@rgu|6l+P#6UnEYbrHW_~obiYf6bHQKTc|S4dBm8xXq{I-yc1D@-7zqF4Rt%ytzEG{+8@KXU zdn_smy^gpia0%t*qp)HC|G}LL`5@ehEiD+XVyPJ7_&L~+41j}yfDUVux3MO#jreaa zE`Q7McfLh#(Bt?pg47yJbtvN98j*i$_A)HdWBXwbHIqq~{m(hQeBrdVh2O`DsVIR( z*M)`-*yq293J<;}Jsmjhe;Q6H!iN&@cs%R2mPz)L4UxYV0^tf$EE8YlGuhayZHyzW z-|I_1*kQa817MG_vH3~YDpuzRvD;X2z-<4!T+R|(RaccQ@E7Q?F1s=a4(&S{CM+E4 zZV%1TE2~Fl7MiCwBR{y*|0Wtaoh1CeI!c{88NPcQb-qqA3t(N3y7SAdp#m|?Gyk8D z&H)gAXyG?P=q zB&0c#o>AEiMCCPsMe#G}a0gVh-kk~v5 zhqd5#1ak6cX<|*GTGn`~yE&Kgrb8H_cq%S+2K;6adXW@iuGZhZY;PP^P{W!Lvs7T) zE=!^A<@cx*p*ShWpF+URLuJ@3=g}Zzg&E(DhBm*HJOf-gv)MVc_+0qUY1Sp}z@EsC zxOFfO7~lO}cbdC`3E8YB=~Q|`lB#p}|G4Ue5B{v&X!l?=m?iJ->B2w2tJ$Jqt`bi6 zyL}ptKarXj>@%&OsMIn^Yw78Gg{krg&%>RoqGunJ@KI=LDzZxKi-p#EuVLJy)o7Jy=MQNpiUx!P@VLRMRBIEH<$n2IZGOf3mUwH}$B0;U#az+dDd>08gZA+DNfCd4o409s2y=eNUF|09o~LFo`mE0VlZ= zUqqFBrZ@NQ0Y$labvPJc@09oEc$R_)vt^UhKaXT;L(J#@t^2kY%<2#kl34DCUk@kC z7gl9z&(7zaJ=OfdR~oa;w!=gUgxB*D?8^fDz~Ao~*ckyV$^AlcUI))epB}J>2*@)< zQoFNmW-{IUU2>&!2aR_X&Wmsf;_u1crbX@jJ_yRLlEEWp!-yy(k>jD02b$A`P>} zAi2(eI67dXm@gWg`*DKd8%A9&*I{q*j+B>K z7}*8@Sf@-3K{g8;6)c(Bj#2>%gQxv6TFb|xk$!AQ{KPn+1LF|RvY&BK6aox0sPUwO zr9&sDm;rrZ$kGiBhvYExGrEWfld57uh3IprB}+3gG;Qp)VUk&sTzl|n!E)WjESPM3 zq~^_~X8b3ACbm8uIH*~3&)~#cGL;4~zR9)sIjsM}Ei~IUp-%5jpPah>!;jL(URsln zc$idLy!3DBeFzub>7SU&?dAO2nhf0KSoT?+gds~JCTU7t{~x7PH>RXkPO2jGIpdHB8wP^!TizNXnavBvpBooud(y4LI#faQqTiT4Gbge$)3 zE4G@TSwKzjpi{+5^-mBX4+_Br`!+OR7_$Q1CwLSdbNQbCImrmhMBUz6e`Ma zY(g|)`qk#yvfs0JJXm=}!|Zw=)d80$gFcPcL_gV&yU+R~c|*8&m>IThB6sHMT++Ep zCqF(P46+l!>6%`L%dAeYnz`v)z05+idMSr)cIJQKQ><(r*oLxn_hKdW{Ao{`l;E9L zTtWgs9>!`oUi{8muL(dWM+9#_DH^r}p)Q(l-U zg!6f#Gt4bcwY%?FE_%4+>wNZGm$!F$)Muq1C53gquC4H<4=j*zCf;^WHML7~JEFty zcjt%rX^6b@pWI2d{?6>a^2Cay+y>^vmJq?!Rt{s=rnlTeJ8s z{dDw6p*Te%Od>=`M27v$pLw#v_FZ?^u^~}ea2xLTgw1vy3 zE*dC8BH07Ym%|hS$)t!;2!W``u)ZVbA>;_Vi>GokoZv!D_2fZ9PG?F{FQ9!^1u;X= z#PQv6CwpSaqum)jZ$v-J_!zO0-rl}0^QP}yWDY1Yz4UzS*rCG--~1uQ)4(8*d%2iN zB6aEOGdK?uEvB=(M7wF@{S`IFn?|=L(DaUl4#!TwETx2}TEcaLTEv8vQT013t`!^V zc-xKUtVnm)?%Vy+I1AUkBDSZ8^OX9Q=+S7J9Nf=ncXvW>;ZWkmA>r@qNTy)GP+trY zwfgC91M^__d1z(S^M6Z9a4DP|rHCJftMC7N)v0}%vMVnUWiAa8xF@A8bl*Jp#;H&` z&;CqKy>EEy>zX){E-U3BoS43}+#(J(+@;izb#%#D3qJ9NUOSs#46# zf7yRZ(d3T~yI@UG_B#*B`&0Z`zxx2`zh;dYg)cKYbga(~Wehj$NMA1RMFcD^yOXaO z#P4fE8gp21~^2qCMzQ#ZNJu`DkpwW;>w~*~l3g+21<7n~zzPm$0^0|6f;QF?jXC zCx?W7Cih}y-3+~|5#s)UR{pk+YN+Rb$FDnV&o5a-)EKM(qpWSvcV;S(QFGsk9{NTI zAT9cYt&PY4ga_hb{zNHU(r1$ZP2#?P3|$Z5+G*5BvlGaOM4%FQq&UR0Xh67Kydg>> z>=IRGhtmS6)N>jW3gH=kmy<2Hh`ZQ6TNzmgD0|E?Y2j=Zqv>4j$#mmegbJ3-OTu9? z@^ckb?xQgWINVH`pJMy^W;mO0w`^OF<^4LE7MU Date: Wed, 9 Nov 2016 22:25:39 +0100 Subject: [PATCH 18/33] document new command line switch -mscrt=libname --- dcompiler.dd | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dcompiler.dd b/dcompiler.dd index 97d6bfc365..14d898bc6d 100644 --- a/dcompiler.dd +++ b/dcompiler.dd @@ -649,6 +649,17 @@ dmd -cov -unittest myprog.d generate a $(TT .map) file ) + $(WINDOWS + $(SWITCH $(SWNAME -mscrt)=$(I libname), + if building MS-COFF object files with -m64 or -m32mscoff, embed a reference to + the given C runtime library $(I libname) into the object file containing `main`, + `DllMain` or `WinMain` for automatic linking. The default is $(TT libcmt) + (release version with static linkage), the other usual alternatives are + $(TT libcmtd), $(TT msvcrt) and $(TT msvcrtd). + If $(I libname) is empty, no C runtime library is automatically linked in. + ) + ) + $(SWITCH $(SWNAME -noboundscheck), turns off all array bounds checking, even for safe functions. $(RED Deprecated (use $(TT $(SWLINK -boundscheck)=off) instead).) From eca221cd65c945c057ebc6c29b1eb6fbef8ecb81 Mon Sep 17 00:00:00 2001 From: anonymous Date: Sun, 20 Nov 2016 19:45:03 +0100 Subject: [PATCH 19/33] put auto-highlights in tags Makes them visually consistent with other code (monospaced font). Carries more meaning that can be picked up by screen readers and such. --- css/style.css | 10 ++++++++++ dlang.org.ddoc | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index a9c4c0b8d8..5cd1a26904 100644 --- a/css/style.css +++ b/css/style.css @@ -1217,6 +1217,16 @@ These classes come from prettify.js: .cm-s-eclipse span.cm-link {color: #219;} +.ddoc_keyword +{ + font-weight: bold; +} + +.ddoc_param +{ + font-style: italic; +} + /* Focal symbol that is being documented */ .d_psymbol, .ddoc_psymbol { diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 6be8fee5f3..94e3f18018 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -123,7 +123,9 @@ DDOC_PARAM_ID = $0 DDOC_PARAM_DESC = $0 DDOC_PARAMS = $(DDOCKEYVAL Parameters, $0
) DDOC_BLANKLINE = -DDOC_PSYMBOL = $(ADEF $0)$(SPANC ddoc_psymbol, $0) +DDOC_KEYWORD = $(TC code, ddoc_keyword, $0) +DDOC_PARAM = $(TC code, ddoc_param, $0) +DDOC_PSYMBOL = $(ADEF $0)$(TC code, ddoc_psymbol, $0) DDOC_ANCHOR = $(ADEF .$1)$(DIVCID quickindex, quickindex.$1, ) DDOC_DECL = $(TC dt, d_decl, $(DIV, $0)) DDOC_UNDEFINED_MACRO = $(DDOC_COMMENT UNDEFINED MACRO: "$1") From 6230e592c983ae742ac5ebae8db060748eb08fb8 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Sat, 5 Nov 2016 11:11:13 +0100 Subject: [PATCH 20/33] name mangling: bring documentation closer to actual implementation --- spec/abi.dd | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/spec/abi.dd b/spec/abi.dd index 66d6bfc687..8ff19120d2 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -206,6 +206,7 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GNAME MangledName): $(B _D) $(GLINK QualifiedName) $(GLINK Type) $(B _D) $(GLINK QualifiedName) $(B M) $(GLINK Type) + $(B _D) $(GLINK QualifiedName) $(B Z) $(GREEN // Internal) $(GNAME QualifiedName): $(GLINK SymbolName) @@ -214,6 +215,7 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GNAME SymbolName): $(GLINK LName) $(GLINK TemplateInstanceName) + $(B 0) $(GREEN // anonymous symbols) ) $(P The $(B M) means that the symbol is a function that requires @@ -225,7 +227,11 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GRAMMAR $(GNAME TemplateInstanceName): - $(GLINK Number) $(B __T) $(GLINK LName) $(GLINK TemplateArgs) $(B Z) + $(GLINK Number) $(GLINK TemplateID) $(GLINK LName) $(GLINK TemplateArgs) $(B Z) + + $(GNAME TemplateID): + $(B __T) + $(B __U) $(GREEN // for symbols declared inside template constraint) $(GNAME TemplateArgs): $(GLINK TemplateArg) @@ -238,11 +244,11 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GNAME TemplateArgX): $(B T) $(GLINK Type) $(B V) $(GLINK Type) $(GLINK Value) - $(B S) $(GLINK LName) + $(B S) $(GLINK SymbolName) + $(B S) $(GLINK MangledName) $(GNAME Value): $(B n) - $(GLINK Number) $(B i) $(GLINK Number) $(B N) $(GLINK Number) $(B e) $(GLINK HexFloat) @@ -391,6 +397,8 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(GLINK TypeUint) $(GLINK TypeLong) $(GLINK TypeUlong) + $(GLINK TypeCent) + $(GLINK TypeUcent) $(GLINK TypeFloat) $(GLINK TypeDouble) $(GLINK TypeReal) @@ -407,9 +415,8 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(GLINK TypeNull) $(GLINK TypeTuple) $(GLINK TypeVector) - $(GLINK Internal) - $(GNAME TypeModifiers) + $(GNAME TypeModifiers): $(GLINK Const) $(GLINK Wild) $(GLINK Wild) $(GLINK Const) @@ -447,7 +454,7 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(B Nh) $(GLINK Type) $(GNAME TypeFunction): - $(GLINK CallConvention) $(GLINK FuncAttrs) $(GLINK Parameters) $(GLINK ParamClose) $(GLINK Type) + $(GLINK CallConvention) $(GLINK FuncAttrs)$(OPT) $(GLINK Parameters) $(GLINK ParamClose) $(GLINK Type) $(GNAME CallConvention): $(B F) $(GREEN // D) @@ -455,6 +462,7 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(B W) $(GREEN // Windows) $(B V) $(GREEN // Pascal) $(B R) $(GREEN // C++) + $(B Y) $(GREEN // Objective-C) $(GNAME FuncAttrs): $(GLINK FuncAttr) @@ -563,6 +571,12 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(GNAME TypeUlong): $(B m) + $(GNAME TypeCent): + $(B zi) + + $(GNAME TypeUcent): + $(B zk) + $(GNAME TypeFloat): $(B f) @@ -607,9 +621,6 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(GNAME TypeTuple): $(B B) $(GLINK Number) $(GLINK Parameters) - - $(GNAME Internal): - $(B Z) ) $(H3 $(LNAME2 function_calling_conventions, Function Calling Conventions)) From 1d025edc6f9b135d16435c06dca7575b5c0e86ad Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Fri, 2 Dec 2016 20:58:34 -0800 Subject: [PATCH 21/33] document -mavx switch --- dcompiler.dd | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dcompiler.dd b/dcompiler.dd index 14d898bc6d..b788a704b2 100644 --- a/dcompiler.dd +++ b/dcompiler.dd @@ -649,6 +649,13 @@ dmd -cov -unittest myprog.d generate a $(TT .map) file ) + $(SWITCH $(SWNAME -mavx), + generate $(LINK2 https://en.wikipedia.org/wiki/Advanced_Vector_Extensions, AVX) + instructions instead of $(LINK2 https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions, SSE) + instructions for vector and floating point operations. + Not available for 32 bit memory models other than OSX32. + ) + $(WINDOWS $(SWITCH $(SWNAME -mscrt)=$(I libname), if building MS-COFF object files with -m64 or -m32mscoff, embed a reference to From da2ab86f768c53f69114819dc24e762a56db0b57 Mon Sep 17 00:00:00 2001 From: anonymous Date: Wed, 7 Dec 2016 18:58:12 +0100 Subject: [PATCH 22/33] remove definitions of XREF macros --- dlang.org.ddoc | 7 ------- latex.ddoc | 4 ---- std-ddox.ddoc | 4 ---- std.ddoc | 2 -- std_consolidated.ddoc | 2 -- 5 files changed, 19 deletions(-) diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 94e3f18018..1d54a73e5c 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -154,7 +154,6 @@ FOOTER = $(DIVCID smallprint, copyright, $(COPYRIGHT) | Page generated by $(LINK2 $(ROOT_DIR)spec/ddoc.html, Ddoc) on $(GEN_DATETIME)) FOOTNOTE=$(SPANC footnote, $0) FULL_TITLE=$(TITLE) - D Programming Language -FULL_XREF=$(XREF $1, $2) _= GEN_DATETIME=$(DATETIME) @@ -481,12 +480,6 @@ _= WHITE=$(SPANC white, $0) _= -XREF=$(XREF2 $1, $2, $(D std.$1.$2)) -XREF2=$(SPANC libref, $(AHTTPS dlang.org/phobos/std_$1.html#$2, $(TAIL $+))) -XREF_PACK=$(XREF_PACK_NAMED $1, $2, $3, $(D std.$1.$2.$3)) -XREF_PACK_NAMED=$(SPANC libref, $(AHTTPS dlang.org/phobos/std_$1_$2.html#$3, $4)) -_= - YELLOW=$(SPANC yellow, $0) YES=$(CHECKMARK) _= diff --git a/latex.ddoc b/latex.ddoc index 3b4a90c234..52d1dfffae 100644 --- a/latex.ddoc +++ b/latex.ddoc @@ -356,10 +356,6 @@ _= WHITE={\color{white}$0} _= -XREF=\href{phobos/std_$1.html#$2}{$(D std.$1.$2)} -XREF_PACK_NAMED=\href{phobos/std_$1_$2.html#$3}{$4} -_= - YELLOW={\color{yellow}$0} YES=$(CHECKMARK) _= diff --git a/std-ddox.ddoc b/std-ddox.ddoc index 3732f65d26..a2e3230bb1 100644 --- a/std-ddox.ddoc +++ b/std-ddox.ddoc @@ -1,8 +1,4 @@ D = $0 -XREF = $(D std.$1.$2) -XREF_PACK = $(D std.$1.$2.$3) -CXREF = $(D core.$1.$2) -ECXREF = $(D etc.$1.$2) LREF = $(D $1) ROOT_DIR=/ _= diff --git a/std.ddoc b/std.ddoc index 405590a7d2..362a2729ed 100644 --- a/std.ddoc +++ b/std.ddoc @@ -11,8 +11,6 @@ $(SCRIPT jQuery(document).ready(listanchors);) LAYOUT_TITLE=$(H1 $(D $(TITLE))) _= -CXREF = $(D core.$1.$2) -ECXREF = $(D etc.c.$1.$2) LREF = $(D $1) _= diff --git a/std_consolidated.ddoc b/std_consolidated.ddoc index ec3292ac33..317dc774ce 100644 --- a/std_consolidated.ddoc +++ b/std_consolidated.ddoc @@ -55,8 +55,6 @@ _= DDOC_PSYMBOL = $0 DDOC_DECL =
$0
-XREF = $(D std.$1.$2) -CXREF = $(D core.$1.$2) LREF = $(D $1) BUGZILLA = $(LINK2 https://issues.dlang.org/show_bug.cgi?id=$0, Bugzilla $0) PRE =
$0
From 3e07111725f09d142c51286a5c5258ed74bdc66c Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Sun, 11 Dec 2016 15:29:47 +0100 Subject: [PATCH 23/33] detab --- dcompiler.dd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dcompiler.dd b/dcompiler.dd index b788a704b2..d88a597635 100644 --- a/dcompiler.dd +++ b/dcompiler.dd @@ -650,10 +650,10 @@ dmd -cov -unittest myprog.d ) $(SWITCH $(SWNAME -mavx), - generate $(LINK2 https://en.wikipedia.org/wiki/Advanced_Vector_Extensions, AVX) - instructions instead of $(LINK2 https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions, SSE) - instructions for vector and floating point operations. - Not available for 32 bit memory models other than OSX32. + generate $(LINK2 https://en.wikipedia.org/wiki/Advanced_Vector_Extensions, AVX) + instructions instead of $(LINK2 https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions, SSE) + instructions for vector and floating point operations. + Not available for 32 bit memory models other than OSX32. ) $(WINDOWS From d2317c3b37d35f4e7c32fc1c887f85cc1d4d6871 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Wed, 14 Dec 2016 19:55:33 -0800 Subject: [PATCH 24/33] change -mavx switch to -mcpu --- dcompiler.dd | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/dcompiler.dd b/dcompiler.dd index d88a597635..2d97fb22e7 100644 --- a/dcompiler.dd +++ b/dcompiler.dd @@ -649,24 +649,33 @@ dmd -cov -unittest myprog.d generate a $(TT .map) file ) - $(SWITCH $(SWNAME -mavx), + $(SWITCH $(SWNAME -mcpu)=[$(B ?)|$(B baseline)|$(B avx)|$(B native)], + Set the target architecture for code generation, + where: + $(DL + $(DT ?)$(DD list alternatives) + $(DT baseline)$(DD the minimum architecture for the target platform (default)) + $(DT avx)$(DD generate $(LINK2 https://en.wikipedia.org/wiki/Advanced_Vector_Extensions, AVX) instructions instead of $(LINK2 https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions, SSE) instructions for vector and floating point operations. Not available for 32 bit memory models other than OSX32. + ) + $(DT native)$(DD use the architecture the compiler is running on) + ) ) $(WINDOWS $(SWITCH $(SWNAME -mscrt)=$(I libname), if building MS-COFF object files with -m64 or -m32mscoff, embed a reference to the given C runtime library $(I libname) into the object file containing `main`, - `DllMain` or `WinMain` for automatic linking. The default is $(TT libcmt) - (release version with static linkage), the other usual alternatives are + `DllMain` or `WinMain` for automatic linking. The default is $(TT libcmt) + (release version with static linkage), the other usual alternatives are $(TT libcmtd), $(TT msvcrt) and $(TT msvcrtd). If $(I libname) is empty, no C runtime library is automatically linked in. ) ) - + $(SWITCH $(SWNAME -noboundscheck), turns off all array bounds checking, even for safe functions. $(RED Deprecated (use $(TT $(SWLINK -boundscheck)=off) instead).) @@ -1194,4 +1203,4 @@ Macros: DMC=$(LINK2 http://www.digitalmars.com/ctg/sc.html, dmc) LIB=$(LINK2 http://www.digitalmars.com/ctg/lib.html, lib) OPTLINK=$(LINK2 http://www.digitalmars.com/ctg/optlink.html, link.exe) - SUBNAV=$(SUBNAV_CLI_REFERENCE) + SUBNAV=$(SUBNAV_CLI_REFERENCE) From 856e901e24965ae178c1dc57fcbf5579c0bf9a87 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Dec 2016 08:16:36 +0100 Subject: [PATCH 25/33] remove article view from scholarship page --- dlangupb-scholarship.dd | 2 -- 1 file changed, 2 deletions(-) diff --git a/dlangupb-scholarship.dd b/dlangupb-scholarship.dd index 19744aa887..220603f1dd 100644 --- a/dlangupb-scholarship.dd +++ b/dlangupb-scholarship.dd @@ -75,5 +75,3 @@ you. Feel free to direct any related questions to foundation@dlang.org.) Macros: TITLE=The DLang UPB Languages and Systems Research Scholarship - WIKI=DLangUPBScholarship - SUBNAV=$(SUBNAV_ARTICLES) From 00dae969b0704a8227b351974352731d09ec8e09 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 13 May 2016 14:07:59 +0300 Subject: [PATCH 26/33] clean messing with the string prototype --- js/run.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/run.js b/js/run.js index d7bb3f9a47..7d0e233d1b 100644 --- a/js/run.js +++ b/js/run.js @@ -254,7 +254,7 @@ var MD5 = function (string) { return temp.toLowerCase(); } -String.prototype.nl2br = function() +var nl2br = function() { return this.replace(/\n/g, "
"); } @@ -301,7 +301,7 @@ function parseOutput(data, o, oTitle) { oTitle.text("Compilation output ("+cstatus+": "+cerr+")"); if ($.browser.msie) - o.html(cout.nl2br()); + o.html(nl2br(cout)); else o.text(cout); @@ -323,7 +323,7 @@ function parseOutput(data, o, oTitle) } if ($.browser.msie) - o.html(output.nl2br()); + o.html(nl2br(cout)); else o.text(output); } From 5eff226f849c448b97b41bb3edbaf689860c288b Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 13 May 2016 15:08:36 +0300 Subject: [PATCH 27/33] edit library examples directly on dlang.org --- css/style.css | 5 + dlang.org.ddoc | 2 +- js/run.js | 318 +++++++++++++++++++++---------------- js/run_examples.js | 96 +++++++++++ posix.mak | 2 +- std_navbar-prerelease.ddoc | 1 + 6 files changed, 286 insertions(+), 138 deletions(-) create mode 100644 js/run_examples.js diff --git a/css/style.css b/css/style.css index 5cd1a26904..183b28c034 100644 --- a/css/style.css +++ b/css/style.css @@ -2113,3 +2113,8 @@ dt.d_decl:hover .decl_anchor { text-decoration: none; color: #333; } + +/* Style for the example run buttons on the Phobos library documentation */ +.d_example_buttons { + text-align: right; +} diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 1d54a73e5c..22609edaac 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -108,7 +108,7 @@ DDOC_BUGS = $(DDOCKEYVAL Bugs, $0) DDOC_COPYRIGHT = $(DDOCKEYVAL Copyright, $0) DDOC_DATE = $(DDOCKEYVAL Date, $0) DDOC_DEPRECATED = $(DDOCKEYVAL Deprecated, $0) -DDOC_EXAMPLES = $(DDOCKEYVAL Examples, $0) +DDOC_EXAMPLES = $(DDOCKEYVAL Examples, $0) DDOC_HISTORY = $(DDOCKEYVAL History, $0) DDOC_LICENSE = $(DDOCKEYVAL License, $0) DDOC_RETURNS = $(DDOCKEYVAL Returns, $0) diff --git a/js/run.js b/js/run.js index 7d0e233d1b..1acc6bfbc8 100644 --- a/js/run.js +++ b/js/run.js @@ -45,7 +45,7 @@ mainPage["yourMd5Sum"] = ["standard input is has 0 position", "standard args has Save, reload website and see if standard input and/or standard arguments are displayed in your example form. TL;DR -All examples are replaced with custom form by default. You need to do additional work only if you wan't +All examples are replaced with custom form by default. You need to do additional work only if you wan't your example to have deafault standard input or default standard arguments. */ @@ -54,11 +54,11 @@ your example to have deafault standard input or default standard arguments. Taken from http://www.webtoolkit.info/javascript-md5.html */ var MD5 = function (string) { - + function RotateLeft(lValue, iShiftBits) { return (lValue<>>(32-iShiftBits)); } - + function AddUnsigned(lX,lY) { var lX4,lY4,lX8,lY8,lResult; lX8 = (lX & 0x80000000); @@ -79,32 +79,32 @@ var MD5 = function (string) { return (lResult ^ lX8 ^ lY8); } } - + function F(x,y,z) { return (x & y) | ((~x) & z); } function G(x,y,z) { return (x & z) | (y & (~z)); } function H(x,y,z) { return (x ^ y ^ z); } function I(x,y,z) { return (y ^ (x | (~z))); } - + function FF(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; - + function GG(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; - + function HH(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; - + function II(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; - + function ConvertToWordArray(string) { var lWordCount; var lMessageLength = string.length; @@ -127,7 +127,7 @@ var MD5 = function (string) { lWordArray[lNumberOfWords-1] = lMessageLength>>>29; return lWordArray; }; - + function WordToHex(lValue) { var WordToHexValue="",WordToHexValue_temp="",lByte,lCount; for (lCount = 0;lCount<=3;lCount++) { @@ -137,15 +137,15 @@ var MD5 = function (string) { } return WordToHexValue; }; - + function Utf8Encode(string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; - + for (var n = 0; n < string.length; n++) { - + var c = string.charCodeAt(n); - + if (c < 128) { utftext += String.fromCharCode(c); } @@ -158,25 +158,25 @@ var MD5 = function (string) { utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } - + } - + return utftext; }; - + var x=Array(); var k,AA,BB,CC,DD,a,b,c,d; var S11=7, S12=12, S13=17, S14=22; var S21=5, S22=9 , S23=14, S24=20; var S31=4, S32=11, S33=16, S34=23; var S41=6, S42=10, S43=15, S44=21; - + string = Utf8Encode(string); - + x = ConvertToWordArray(string); - + a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; - + for (k=0;k"); } @@ -282,7 +282,7 @@ function parseOutput(data, o, oTitle) { if (typeof data.compilation == "undefined") { - o.text("Temporarily unavaible"); + o.text("Temporarily unavailable"); return; } @@ -296,6 +296,7 @@ function parseOutput(data, o, oTitle) var rstatus = parseInt(safeVar(data, "runtime.status")); var cerr = safeVar(data, "compilation.err"); var rerr = safeVar(data, "runtime.err"); + var defaultOutput = data.defaultOutput || '-- No output --'; if (cstatus != 0) { @@ -304,7 +305,7 @@ function parseOutput(data, o, oTitle) o.html(nl2br(cout)); else o.text(cout); - + return; } else @@ -312,10 +313,10 @@ function parseOutput(data, o, oTitle) oTitle.text("Application output");// (compile "+ctime+"ms, run "+rtime+"ms)"); if ( cout != "") output = 'Compilation output: \n' + cout + "\n"; - - output += (stdout == "" && stderr == "" ? '-- No output --' : stdout); - if (stderr != "") + output += (stdout == "" && stderr == "" ? defaultOutput : stdout); + + if (stderr != "") output += stderr; if (rstatus != 0) @@ -328,12 +329,12 @@ function parseOutput(data, o, oTitle) o.text(output); } -$(document).ready(function() +$(document).ready(function() { setUpExamples(); var currentPage = $(location).attr('pathname'); - + if ($('body')[0].id != "Home") return; @@ -358,7 +359,7 @@ $(document).ready(function() stdin = elements[0]; if (elements[1] != null) - args = elements[1]; + args = elements[1]; } currentExample.replaceWith( @@ -377,78 +378,111 @@ $(document).ready(function() + '' ); }); - + $('textarea[class=d_code]').each(function(index) { - var thisObj = $(this); + var parent = $(this).parent(); + var outputDiv = parent.children("div.d_code_output"); + setupTextarea(this, {parent: parent, outputDiv: outputDiv, + stdin: true, args: true}); + }); +}); - var parent = thisObj.parent(); - parent.css("display", "block"); - var orgSrc = parent.parent().children("div.d_code").children("pre.d_code"); +function setupTextarea(el, opts) +{ + opts = opts || {}; + // set default opts + opts = jQuery.extend({}, { + stdin: false, + args: false, + transformOutput: function(out) { return out } + }, opts); + + if (!!opts.parent) + var parent = opts.parent; + else + console.error("parent node node not found"); + + if (!!opts.outputDiv) + var outputDiv = opts.outputDiv; + else + console.error("outputDiv node not found"); + + var thisObj = $(el); + parent.css("display", "block"); + var orgSrc = parent.parent().children("div.d_code").children("pre.d_code"); - var prepareForMain = function() + var prepareForMain = function() + { + var src = $.browser.msie && $.browser.version < 9.0 ? orgSrc[0].innerText : orgSrc.text(); + var arr = src.split("\n"); + var str = ""; + for ( i = 0; i < arr.length; i++) { - var src = $.browser.msie && $.browser.version < 9.0 ? orgSrc[0].innerText : orgSrc.text(); - var arr = src.split("\n"); - var str = ""; - for ( i = 0; i < arr.length; i++) - { - str += arr[i]+"\n"; - } - if ($.browser.msie && $.browser.version < 9.0) - str = str.substr(0, str.length - 1); - else - str = str.substr(0, str.length - 2); - - return str; - }; - - var editor = CodeMirror.fromTextArea(thisObj[0], { - lineNumbers: true, - tabSize: 4, - indentUnit: 4, - indentWithTabs: true, - mode: "text/x-d", - lineWrapping: true, - theme: "eclipse", - readOnly: false, - matchBrackets: true - }); + str += arr[i]+"\n"; + } + if ($.browser.msie && $.browser.version < 9.0) + str = str.substr(0, str.length - 1); + else + str = str.substr(0, str.length - 2); - editor.setValue(prepareForMain()); + return str; + }; - var height = function(diff) { - var par = code != null ? code : parent.parent().children("div.d_code"); - return (parseInt(par.css('height')) - diff) + 'px'; - }; + var editor = CodeMirror.fromTextArea(thisObj[0], { + lineNumbers: true, + tabSize: 4, + indentUnit: 4, + indentWithTabs: true, + mode: "text/x-d", + lineWrapping: true, + theme: "eclipse", + readOnly: false, + matchBrackets: true + }); - var runBtn = parent.children("input.runButton"); - var editBtn = parent.children("input.editButton"); - var inputBtn = parent.children("input.inputButton"); - var resetBtn = parent.children("input.resetButton"); - var argsBtn = parent.children("input.argsButton"); - var stdinDiv = parent.children("div.d_code_stdin"); - var argsDiv = parent.children("div.d_code_args"); - var outputDiv = parent.children("div.d_code_output"); + editor.setValue(prepareForMain()); - var code = $(editor.getWrapperElement()); - code.css('display', 'none'); + var height = function(diff) { + var par = code != null ? code : parent.parent().children("div.d_code"); + return (parseInt(par.css('height')) - diff) + 'px'; + }; - var output = outputDiv.children("textarea.d_code_output"); - var outputTitle = outputDiv.children("span.d_code_title"); - var stdin = stdinDiv.children("textarea.d_code_stdin"); + var runBtn = parent.children("input.runButton"); + var editBtn = parent.children("input.editButton"); + var resetBtn = parent.children("input.resetButton"); + + var code = $(editor.getWrapperElement()); + code.css('display', 'none'); + + var output = outputDiv.children("textarea.d_code_output"); + var outputTitle = outputDiv.children("span.d_code_title"); + if (opts.args) { + var argsBtn = parent.children("input.argsButton"); + var argsDiv = parent.children("div.d_code_args"); var args = argsDiv.children("textarea.d_code_args"); var orgArgs = args.val(); + } + if (opts.stdin) { + var inputBtn = parent.children("input.inputButton"); + var stdinDiv = parent.children("div.d_code_stdin"); + var stdin = stdinDiv.children("textarea.d_code_stdin"); var orgStdin = stdin.val(); + } - var hideAllWindows = function() - { + var hideAllWindows = function() + { + if (opts.stdin) { stdinDiv.css('display', 'none'); + } + if (opts.args) { argsDiv.css('display', 'none'); - outputDiv.css('display', 'none'); - parent.parent().children("div.d_code").css('display', 'none'); - code.css('display', 'none'); - }; + } + outputDiv.css('display', 'none'); + parent.parent().children("div.d_code").css('display', 'none'); + code.css('display', 'none'); + }; + if (opts.args) { argsBtn.click(function(){ resetBtn.css('display', 'inline-block'); args.css('height', height(31)); @@ -456,7 +490,9 @@ $(document).ready(function() argsDiv.css('display', 'block'); args.focus(); }); + } + if (opts.stdin) { inputBtn.click(function(){ resetBtn.css('display', 'inline-block'); stdin.css('height', height(31)); @@ -464,60 +500,70 @@ $(document).ready(function() stdinDiv.css('display', 'block'); stdin.focus(); }); - editBtn.click(function(){ - resetBtn.css('display', 'inline-block'); - hideAllWindows(); - code.css('display', 'block'); - editor.refresh(); - editor.focus(); - }); - resetBtn.click(function(){ - resetBtn.css('display', 'none'); - editor.setValue(prepareForMain()); + } + + editBtn.click(function(){ + resetBtn.css('display', 'inline-block'); + hideAllWindows(); + code.css('display', 'block'); + editor.refresh(); + editor.focus(); + }); + resetBtn.click(function(){ + resetBtn.css('display', 'none'); + editor.setValue(prepareForMain()); + if (opts.args) { args.val(orgArgs); + } + if (opts.stdin) { stdin.val(orgStdin); - hideAllWindows(); - parent.parent().children("div.d_code").css('display', 'block'); - }); - runBtn.click(function(){ - resetBtn.css('display', 'inline-block'); - $(this).attr("disabled", true); - hideAllWindows(); - output.css('height', height(31)); - outputDiv.css('display', 'block'); - outputTitle.text("Application output"); - output.html("Running..."); - output.focus(); - - $.ajax({ - type: 'POST', - url: "//dpaste.dzfl.pl/request/", - dataType: "json", - data: - { - 'code' : editor.getValue(), - 'stdin' : stdin.val(), - 'args': args.val() - }, - success: function(data) - { - parseOutput(data, output, outputTitle); - runBtn.attr("disabled", false); - }, - error: function(jqXHR, textStatus, errorThrown ) + } + hideAllWindows(); + parent.parent().children("div.d_code").css('display', 'block'); + }); + runBtn.click(function(){ + resetBtn.css('display', 'inline-block'); + $(this).attr("disabled", true); + hideAllWindows(); + output.css('height', height(31)); + outputDiv.css('display', 'block'); + outputTitle.text("Application output"); + output.html("Running..."); + output.focus(); + + var data = { + 'code' : opts.transformOutput(editor.getValue()), + } + if (opts.stdin) { + data.stdin = stdin.val(); + } + if (opts.args) { + data.args = args.val(); + } + $.ajax({ + type: 'POST', + url: "//dpaste.dzfl.pl/request/", + dataType: "json", + data: data, + success: function(data) + { + parseOutput(data, output, outputTitle); + runBtn.attr("disabled", false); + }, + error: function(jqXHR, textStatus, errorThrown ) + { + output.html("Temporarily unavailable"); + if (typeof console != "undefined") { - output.html("Temporarily unavailable"); - if (typeof console != "undefined") - { - console.log(textStatus + ": " + errorThrown); - } - - runBtn.attr("disabled", false); + console.log(textStatus + ": " + errorThrown); } - }); + + runBtn.attr("disabled", false); + } }); }); -}); +}; + function setUpExamples() { diff --git a/js/run_examples.js b/js/run_examples.js new file mode 100644 index 0000000000..13b0e71667 --- /dev/null +++ b/js/run_examples.js @@ -0,0 +1,96 @@ +/** + * Run all unittest examples + * + * Copyright 2016 by D Language Foundation + * + * License: http://boost.org/LICENSE_1_0.txt, Boost License 1.0 + */ + +// turns asserts into writeln +function reformatExample(code) { + return code.replace(/(assert<\/span>\((.*)==(.*)\);)+/g, function(match, text, left, right) { + return "writeln(" + left.trim() + "); " + + "// " + right.trim() + ""; + }); +} + +// wraps a unittest into a runnable script +function wrapIntoMain(code) { + var currentPackage = $('body')[0].id; + var codeOut = ""; + + // dynamically wrap into main if needed + if (code.indexOf("void main") >= 0) { + codeOut = "import " + currentPackage + "; "; + codeOut += code; + } + else { + var codeOut = "void main(){ "; + codeOut += "import " + currentPackage + "; "; + // writing to the stdout is probably often used + codeOut += "import std.stdio: write, writeln, writef, writefln; "; + codeOut += code; + codeOut += "\n}"; + } + return codeOut; +} + +$(document).ready(function() +{ + if ($('body')[0].id == "Home") + return; + + // only for std at the moment + if (!$('body').hasClass("std")) + return; + + // only enable for pre-release version + if (location.pathname.indexOf("prerelease") < 0) + return; + + // ignore not yet compatible modules + // copied from Phobos posix.mak + var ignoredModulesList = "allocator/allocator_list.d,allocator/building_blocks/allocator_list.d,allocator/building_blocks/free_list.d,allocator/building_blocks/quantizer,allocator/building_blocks/quantizer,allocator/building_blocks/stats_collector.d,base64.d,bitmanip.d,concurrency.d,conv.d,csv.d,datetime.d,digest/hmac.d,digest/sha.d,file.d,index.d,isemail.d,logger/core.d,logger/nulllogger.d,math.d,ndslice/selection.d,ndslice/slice.d,numeric.d,stdio.d,traits.d,typecons.d,uni.d,utf.d,uuid.d".split(",") + var currentModulePath = $('body')[0].id.replace('.', '/') + '.d'; + if (ignoredModulesList.filter(function(x) { currentModulePath.indexOf(x) >= 0 }).length > 0) { + return; + } + + $('pre[class~=d_code]').each(function(index) + { + var currentExample = $(this); + var orig = currentExample.html(); + + orig = reformatExample(orig); + + // check whether it is from a ddoced unittest + // manual created tests most likely can't be run without modifications + if (!$(this).parent().parent().prev().hasClass("dlang_runnable")) + return; + + currentExample.replaceWith( + '
' + + '
' + + '' + + '' + + '' + + '
' + + '
' + + '
'+orig+'
' + + '
' + + '
' + + '' + + '
Application output
' + + '
' + + '
' + ); + }); + + $('textarea[class=d_code]').each(function(index) { + var parent = $(this).parent(); + var btnParent = parent.parent().children(".d_example_buttons"); + var outputDiv = parent.children("div.d_code_output"); + setupTextarea(this, {parent: btnParent, outputDiv: outputDiv, + stdin: false, args: false, transformOutput: wrapIntoMain}); + }); +}); diff --git a/posix.mak b/posix.mak index 588a34d3e9..4ad246fadb 100644 --- a/posix.mak +++ b/posix.mak @@ -135,7 +135,7 @@ IMAGES=favicon.ico $(ORGS_USING_D) $(addprefix images/, \ JAVASCRIPT=$(addsuffix .js, $(addprefix js/, \ codemirror-compressed dlang ddox listanchors platform-downloads run \ - run-main-website show_contributors jquery-1.7.2.min)) + run_examples run-main-website show_contributors jquery-1.7.2.min)) STYLES=$(addsuffix .css, $(addprefix css/, \ style print codemirror ddox)) diff --git a/std_navbar-prerelease.ddoc b/std_navbar-prerelease.ddoc index 9fcc2a8c32..46a0d8d250 100644 --- a/std_navbar-prerelease.ddoc +++ b/std_navbar-prerelease.ddoc @@ -12,3 +12,4 @@ $(SUBNAV_TEMPLATE $(UL $(MODULE_MENU)) ) _= +$(SCRIPTLOAD $(STATIC js/run_examples.js)) From c1d18f4b3bf0748860bb521e3a091b172d1e421d Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Dec 2016 23:53:17 +0100 Subject: [PATCH 28/33] always use SSL for dpaste --- js/run.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/run.js b/js/run.js index 1acc6bfbc8..9a56cb9ebe 100644 --- a/js/run.js +++ b/js/run.js @@ -542,7 +542,7 @@ function setupTextarea(el, opts) } $.ajax({ type: 'POST', - url: "//dpaste.dzfl.pl/request/", + url: "https://dpaste.dzfl.pl/request/", dataType: "json", data: data, success: function(data) From eb50b9e16471b801eb2e7c7bb2642381a1d19d87 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Dec 2016 08:17:02 +0100 Subject: [PATCH 29/33] add donate page --- dlang.org.ddoc | 2 ++ donate.dd | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ foundation.dd | 50 ++++++++++++++++----------- index.dd | 2 +- posix.mak | 2 +- win32.mak | 5 ++- 6 files changed, 130 insertions(+), 23 deletions(-) create mode 100644 donate.dd diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 1d54a73e5c..e168eb2790 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -232,6 +232,8 @@ $(SUBMENU_MANUAL $(SUBMENU_LINK https://wiki.dlang.org, Wiki) $(SUBMENU_LINK_DIVIDER https://github.com/dlang, GitHub) $(SUBMENU_LINK $(ROOT_DIR)bugstats.php, Issues) + $(SUBMENU_LINK_DIVIDER $(ROOT_DIR)foundation.html, Foundation) + $(SUBMENU_LINK $(ROOT_DIR)donate.html, Donate) ) NAVIGATION_DOCUMENTATION= $(SUBMENU_MANUAL diff --git a/donate.dd b/donate.dd new file mode 100644 index 0000000000..c15a18afb1 --- /dev/null +++ b/donate.dd @@ -0,0 +1,92 @@ +Ddoc + +$(D_S $(TITLE), + +$(H4 The D Language Foundation is a + $(HTTPS en.wikipedia.org/wiki/501(c)_organization, 501(c) non-profit public charity) + devoted to advancing open source technology related to the D programming language. +) + +The D Language Foundation: + +$(COMMENT keep this list in sync with foundation.dd) +$(UL + $(LI holds and defends the copyright and other intellectual property rights for the D programming language.) + $(LI provides resources for furthering the development and adoption of the D programming language.) + $(LI awards $(LINK2 http://dlang.org/blog/2016/12/05/the-d-language-foundations-scholarship-program, scholarships) + to highly skilled students.) + $(LI organizes the yearly $(HTTP dconf.org, DConf), the international annual conference of D Language developers and users.) + $(LI pays for hardware costs + (e.g. this website, $(LINK2 http://dlang.org/download.html, dmd downloads), + the $(LINK2 https://tour.dlang.org, D tour) and more)) + $(LI is an accepted + $(HTTPS summerofcode.withgoogle.com/organizations/5078256051027968/, + Google Summer of Code organization) and hosted four projects during + the summer of 2016. + ) +) + +$(H3 How can I donate?) + +We welcome contributions from both organizations and individuals. Your help is highly appreciated. + +$(DONATE_ITEM Donate through PayPal, paypal, + + Click the PayPal button to make a donation to the D Language Foundation via PayPal: + $(BR) $(BR) + +
+ + + + +
+) + +$(DONATE_ITEM Donate by credit card, credit-card, + Please use the PayPal button above to donate by credit card. You don't need a PayPal account to use the donation button. +) + +$(DONATE_ITEM Electronic wire transfers or bank check, money, + Wire transfer information will be announced soon. In the meantime please use PayPal or $(LINK2 mailto:foundation@dlang.org, contact the D Language Foundation). +) + +$(H3 If I donate financially, where do my donations go?) + +$(P The D Languages Foundation awards $(LINK2 http://dlang.org/blog/2016/12/05/the-d-language-foundations-scholarship-program, scholarships) to highly skilled students. +Each $(DOLLAR)5 you donate contributes to approximately one hour of work by a talented graduate student, and +these hours add quickly toward important projects that further the state of the art in the D +programming language.) + +$(P If you have a specific target or project that you wish to directly support, please $(LINK2 mailto:foundation@dlang.org, contact the D Language Foundation).) + +$(P By the Foundation bylaws, its officers (Walter Bright, Andrei Alexandrescu and Ali Çehreli) + cannot get income from the Foundation, which preempts a variety of conflicts of interest.) + +$(H3 The D Language Foundation is a non-profit organization) + +$(P For US taxpayers, contributions to the D Language Foundation are tax-deductible. +The D Language Foundation is a $(HTTPS en.wikipedia.org/wiki/501(c)_organization, 501(c) non-profit public charity) registered in the state of Washington, USA. +You should consult your tax adviser for rules as they apply to your situation.) + +$(P Donations to the D Language Foundation are currently not tax-deductible in most other countries as they require an organisation to be incorporated in that country and the D Language Foundation does currently not have the resources to do so.) + +$(P If you have a question about donations, please write to the D Language Foundation at $(LINK2 mailto:foundation@dlang.org, foundation@dlang.org).) + +) + +Macros: + TITLE=Contribute to the D Language Foundation + NOSPAM_FOUNDATION=$1 + FA_ICON= + REMOVE_FIRST=$+ + DONATE_ITEM= + EXTRA_HEADERS=$(T style, + .donate-item { + padding-left: 30px; + } + .donate-item div { + padding-left: 30px; + } + ) + _= diff --git a/foundation.dd b/foundation.dd index 1a4f865d76..d7a39abcd7 100644 --- a/foundation.dd +++ b/foundation.dd @@ -2,9 +2,11 @@ Ddoc $(D_S $(TITLE), -$(H4 The D Language Foundation is an organization devoted to advancing - open source technology related to the D programming language. +$(H4 The D Language Foundation is a + $(HTTPS en.wikipedia.org/wiki/501(c)_organization, 501(c) non-profit public charity) + devoted to advancing open source technology related to the D programming language. ) + $(H3 History) $(P The D programming language was started by Walter Bright, as a 'better C++' @@ -15,18 +17,23 @@ future development of the D programming language.) $(H3 Current projects) -The D foundation +The D Language Foundation: +$(COMMENT keep this list in sync with donate.dd) $(UL - - $(LI is providing the various resources for the D community - (e.g. this website, dmd downloads, the D tour and more)) + $(LI holds and defends the copyright and other intellectual property rights for the D programming language.) + $(LI provides resources for furthering the development and adoption of the D programming language.) + $(LI awards $(LINK2 http://dlang.org/blog/2016/12/05/the-d-language-foundations-scholarship-program, scholarships) + to highly skilled students.) + $(LI organizes the yearly $(HTTP dconf.org, DConf), the international annual conference of D Language developers and users.) + $(LI pays for hardware costs + (e.g. this website, $(LINK2 http://dlang.org/download.html, dmd downloads), + the $(LINK2 https://tour.dlang.org, D tour) and more)) $(LI is an accepted $(HTTPS summerofcode.withgoogle.com/organizations/5078256051027968/, - Google Summer of Code organization) and hosts four projects during + Google Summer of Code organization) and hosted four projects during the summer of 2016. ) - $(LI is organizing the yearly $(HTTP dconf.org, D conference)) ) $(H3 Committee) @@ -39,29 +46,32 @@ $(UL $(LI $(HTTP acehreli.org, Ali Çehreli), Secretary) ) -$(H3 Becoming a member) +$(H3 How can I contribute?) -Individual and corporate membership packages will be announced in the future. +$(P There are many ways to help the D programming language to grow further and + $(LINK2 https://wiki.dlang.org/Get_involved, get involved).) -$(H3 Sponsoring D) +$(P If you don't have the time to work on the source code, +you can also $(LINK2 $(ROOT_DIR)donate.html, donate) to the D Language Foundation.) -$(P If you want to help the D Language to advance further and have resources - that you can spend, don't hesitate to contact - $(HTTPS erdani.com/index.php/contact, Andrei) and - $(HTTP www.walterbright.com, Walter). - $(BR) - Your help is highly appreciated! -) +$(H3 The D Language Foundation is a non-profit organization) -$(P We are pleased to announce that the D Language Foundation is now a 501(c)(3) tax exempt organization, and as such, - donations may be tax-deductible) +The D Language Foundation has been recognized as a public charity under section 501(c)(3) of the Internal Revenue Code. $(H3 Official contacts) $(P The D Language Foundation has been incorporated with the state of Washington, USA. The employer ID is 47-5352856.) +$(P If you want to get in touch with the D Language Foundation, please feel free to write to $(LINK2 mailto:foundation@dlang.org, foundation@dlang.org).) + ) Macros: TITLE=The D Language Foundation + EXTRA_HEADERS=$(T style, + .dlang-address { + padding-left: 30px; + } + ) + _= diff --git a/index.dd b/index.dd index 85ca8b3fe2..a904ffcedd 100644 --- a/index.dd +++ b/index.dd @@ -123,7 +123,7 @@ $(DIVC boxes, Browse the $(LINK2 https://wiki.dlang.org/, wiki) where among other things you can find the $(LINK2 https://wiki.dlang.org/Vision/2016H2, high-level vision) - of the D foundation. + of the $(LINK2 $(ROOT_DIR)foundation.html, D foundation). ) ) $(TOUR book, Documentation, diff --git a/posix.mak b/posix.mak index 588a34d3e9..06e5b010a4 100644 --- a/posix.mak +++ b/posix.mak @@ -164,7 +164,7 @@ CHANGELOG_FILES=$(basename $(subst _pre.dd,.dd,$(wildcard changelog/*.dd))) PAGES_ROOT=$(SPEC_ROOT) 404 acknowledgements areas-of-d-usage \ articles ascii-table bugstats.php builtin \ $(CHANGELOG_FILES) code_coverage community comparison concepts \ - const-faq cpptod ctarguments ctod \ + const-faq cpptod ctarguments ctod donate \ D1toD2 d-array-article d-floating-point deprecate dlangupb-scholarship dll-linux dmd \ dmd-freebsd dmd-linux dmd-osx dmd-windows documentation download dstyle \ exception-safe faq forum-template foundation gpg_keys glossary \ diff --git a/win32.mak b/win32.mak index 6a413bae73..b8ddafb15b 100644 --- a/win32.mak +++ b/win32.mak @@ -49,7 +49,7 @@ SRC= $(SPECSRC) 404.dd cpptod.dd ctod.dd pretod.dd cppcontracts.dd index.dd over D1toD2.dd intro-to-datetime.dd simd.dd deprecate.dd download.dd \ dll-linux.dd bugstats.php.dd \ ctarguments.dd articles.dd community.dd documentation.dd menu.dd \ - resources.dd search.dd dlangupb-scholarship.dd + resources.dd search.dd dlangupb-scholarship.dd donate SPECSRC=spec\spec.dd spec\intro.dd spec\lex.dd \ spec\grammar.dd spec\module.dd spec\declaration.dd \ @@ -142,6 +142,7 @@ TARGETS= $(SPECTARGETS) cpptod.html ctod.html pretod.html cppcontracts.html 404. d-array-article.html dll-linux.html bugstats.php.html \ gpg_keys.html forum-template.html ctarguments.html articles.html \ community.html documentation.html menu.html resources.html search.html \ + donate.html \ # exclude list MOD_EXCLUDES_RELEASE=--ex=gc. --ex=rt. --ex=core.internal. --ex=core.stdc.config --ex=core.sys. \ @@ -373,6 +374,8 @@ ctarguments.html : $(DDOC) ctarguments.dd ctod.html : $(DDOC) ctod.dd +donate: $(DDOC) donate.dd + D1toD2.html : $(DDOC) D1toD2.dd d-floating-point.html : $(DDOC) d-floating-point.dd From 39087f37527c0b90c4fe5a58ffe43217d54417cd Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 19 Dec 2016 04:35:56 +0100 Subject: [PATCH 30/33] Add a message about the donation page on the frontpage --- index.dd | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/index.dd b/index.dd index a904ffcedd..a75a365fd6 100644 --- a/index.dd +++ b/index.dd @@ -84,9 +84,12 @@ $(DIVID news, $(DIVC boxes, $(DIVC row, $(TOUR newspaper-o, News, - $(P $(LINK2 http://dconf.org/2016/index.html, DConf 2016) was a - $(LINK2 https://vimeo.com/167235872, big and bright week) - - we are looking forward to seeing you next year. + $(P $(LINK2 http://dconf.org/2017/index.html, DConf 2017): + Call for Submissions is open. $(BR) + The $(LINK2 $(ROOT_DIR)foundation.html, D Language Foundation) + has been accepted as a 501(c) non-profit public charity + and thus can handle + $(LINK2 $(ROOT_DIR)donate.html, donations). ) $(P Stay updated with $(LINK2 http://arsdnet.net/this-week-in-d, From 46c28fb08d59e46890dd2a4a929da164f64d1d3b Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 19 Dec 2016 06:23:24 +0100 Subject: [PATCH 31/33] Inject run_examples for prerelease pages through EXTRA_FOOTERS --- dlang.org.ddoc | 2 ++ std_navbar-prerelease.ddoc | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 22609edaac..54d14203d7 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -93,6 +93,7 @@ $(DIVC container, ) ) $(COMMON_SCRIPTS) +$(EXTRA_FOOTERS) $(LAYOUT_SUFFIX) @@ -147,6 +148,7 @@ $(TR 32 bit64 bit) _= EXTRA_HEADERS= EXTRA_JS= +EXTRA_FOOTERS= _= FAVICON=$(STATIC favicon.ico) diff --git a/std_navbar-prerelease.ddoc b/std_navbar-prerelease.ddoc index 46a0d8d250..897ea9f956 100644 --- a/std_navbar-prerelease.ddoc +++ b/std_navbar-prerelease.ddoc @@ -12,4 +12,4 @@ $(SUBNAV_TEMPLATE $(UL $(MODULE_MENU)) ) _= -$(SCRIPTLOAD $(STATIC js/run_examples.js)) +EXTRA_FOOTERS=$(SCRIPTLOAD $(STATIC js/run_examples.js)) From 55463fccc3f07ffe69e060a855eb02210a68df0a Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Tue, 20 Dec 2016 08:00:23 +0100 Subject: [PATCH 32/33] Improve runnable examples - Put outputbox below the example - Don't hide code during compilation - Use "auto" width for the output box - Use "All tests passed" as default output text --- js/run.js | 8 ++++++-- js/run_examples.js | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/js/run.js b/js/run.js index 9a56cb9ebe..cd0ecc6278 100644 --- a/js/run.js +++ b/js/run.js @@ -478,7 +478,10 @@ function setupTextarea(el, opts) argsDiv.css('display', 'none'); } outputDiv.css('display', 'none'); - parent.parent().children("div.d_code").css('display', 'none'); + if (!opts.keepCode) + { + parent.parent().children("div.d_code").css('display', 'none'); + } code.css('display', 'none'); }; @@ -525,7 +528,7 @@ function setupTextarea(el, opts) resetBtn.css('display', 'inline-block'); $(this).attr("disabled", true); hideAllWindows(); - output.css('height', height(31)); + output.css('height', opts.outputHeight || height(31)); outputDiv.css('display', 'block'); outputTitle.text("Application output"); output.html("Running..."); @@ -547,6 +550,7 @@ function setupTextarea(el, opts) data: data, success: function(data) { + data.defaultOutput = opts.defaultOutput; parseOutput(data, output, outputTitle); runBtn.attr("disabled", false); }, diff --git a/js/run_examples.js b/js/run_examples.js index 13b0e71667..28804beb93 100644 --- a/js/run_examples.js +++ b/js/run_examples.js @@ -80,8 +80,8 @@ $(document).ready(function() + '
' + '
' + '' - + '
Application output
' + '
' + + '
Application output
' + '
' ); }); @@ -89,8 +89,16 @@ $(document).ready(function() $('textarea[class=d_code]').each(function(index) { var parent = $(this).parent(); var btnParent = parent.parent().children(".d_example_buttons"); - var outputDiv = parent.children("div.d_code_output"); - setupTextarea(this, {parent: btnParent, outputDiv: outputDiv, - stdin: false, args: false, transformOutput: wrapIntoMain}); + var outputDiv = parent.parent().children(".d_code_output"); + setupTextarea(this, { + parent: btnParent, + outputDiv: outputDiv, + stdin: false, + args: false, + transformOutput: wrapIntoMain, + defaultOutput: "All tests passed", + keepCode: true, + outputHeight: "auto" + }); }); }); From 98322d26d58b02bf5c6447d3c752e1dbe51a5382 Mon Sep 17 00:00:00 2001 From: Steven Schveighoffer Date: Fri, 23 Dec 2016 09:56:05 -0500 Subject: [PATCH 33/33] Add documentation for "deprecate" cycle handling --- spec/module.dd | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/module.dd b/spec/module.dd index e0a0444dba..5e1a628ccb 100644 --- a/spec/module.dd +++ b/spec/module.dd @@ -549,7 +549,12 @@ $(H3 $(LNAME2 override_cycle_abort, Overriding Cycle Detection Abort)) ) $(OL - $(LI `abort` The default behavior.) + $(LI `deprecate` The default behavior. This functions just like abort, + but will use the pre-2.072 algorithm to determine if the cycle was + undetected. If so, the old algorithm is used, but a deprecation + message is printed. After 2.073, the abort option will be the default.) + $(LI `abort` The normal behavior as described in the previous section. + After 2.073, this will be the default behavior.) $(LI `print` Print all cycles detected, but do not abort execution. Order of static construction is implementation defined, and not guaranteed to be valid.)