From 8affa1f512462ee1a2acc7595a95731424e10a9e Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Sat, 5 Jun 2021 12:40:24 +0200 Subject: [PATCH] Built doxygen --- docs/DataType_8h.html | 2 +- docs/DataType_8h_source.html | 2 +- ...lnupp_8vcxproj_8FileListAbsolute_8txt.html | 2 +- docs/FloatValue_8cpp.html | 2 +- docs/FloatValue_8cpp_source.html | 2 +- docs/FloatValue_8h.html | 2 +- docs/FloatValue_8h_source.html | 2 +- docs/HazelnuppException_8h.html | 2 +- docs/HazelnuppException_8h_source.html | 2 +- docs/Hazelnupp_8cpp.html | 48 +- docs/Hazelnupp_8cpp__incl.map | 45 +- docs/Hazelnupp_8cpp__incl.md5 | 2 +- docs/Hazelnupp_8cpp__incl.png | Bin 95344 -> 101700 bytes docs/Hazelnupp_8cpp_source.html | 1174 +++++++++-------- docs/Hazelnupp_8h.html | 2 +- docs/Hazelnupp_8h_source.html | 235 ++-- docs/IntValue_8cpp.html | 2 +- docs/IntValue_8cpp_source.html | 2 +- docs/IntValue_8h.html | 2 +- docs/IntValue_8h_source.html | 2 +- docs/ListValue_8cpp.html | 2 +- docs/ListValue_8cpp_source.html | 2 +- docs/ListValue_8h.html | 2 +- docs/ListValue_8h_source.html | 2 +- docs/ParamConstraint_8h.html | 2 +- docs/ParamConstraint_8h_source.html | 121 +- docs/Parameter_8cpp.html | 2 +- docs/Parameter_8cpp_source.html | 2 +- docs/Parameter_8h.html | 2 +- docs/Parameter_8h_source.html | 2 +- docs/Placeholders_8h.html | 127 ++ docs/Placeholders_8h__dep__incl.map | 4 + docs/Placeholders_8h__dep__incl.md5 | 1 + docs/Placeholders_8h__dep__incl.png | Bin 0 -> 3759 bytes docs/Placeholders_8h__incl.map | 4 + docs/Placeholders_8h__incl.md5 | 1 + docs/Placeholders_8h__incl.png | Bin 0 -> 3371 bytes docs/Placeholders_8h_source.html | 102 ++ ...lnupp_8vcxproj_8FileListAbsolute_8txt.html | 2 +- docs/StringTools_8cpp.html | 2 +- docs/StringTools_8cpp_source.html | 2 +- docs/StringTools_8h.html | 2 +- docs/StringTools_8h_source.html | 2 +- docs/StringValue_8cpp.html | 2 +- docs/StringValue_8cpp_source.html | 2 +- docs/StringValue_8h.html | 2 +- docs/StringValue_8h_source.html | 2 +- docs/Value_8cpp.html | 2 +- docs/Value_8cpp_source.html | 2 +- docs/Value_8h.html | 2 +- docs/Value_8h_source.html | 2 +- docs/VoidValue_8cpp.html | 2 +- docs/VoidValue_8cpp_source.html | 13 +- docs/VoidValue_8h.html | 2 +- docs/VoidValue_8h_source.html | 10 +- docs/annotated.html | 2 +- docs/classHazelnp_1_1FloatValue-members.html | 2 +- docs/classHazelnp_1_1FloatValue.html | 2 +- docs/classHazelnp_1_1Hazelnupp-members.html | 45 +- docs/classHazelnp_1_1Hazelnupp.html | 797 ++++++----- ...1HazelnuppConstraintException-members.html | 2 +- ...zelnp_1_1HazelnuppConstraintException.html | 2 +- ...zelnuppConstraintMissingValue-members.html | 2 +- ...np_1_1HazelnuppConstraintMissingValue.html | 2 +- ...elnuppConstraintTypeMissmatch-members.html | 2 +- ...p_1_1HazelnuppConstraintTypeMissmatch.html | 2 +- ...Hazelnp_1_1HazelnuppException-members.html | 2 +- docs/classHazelnp_1_1HazelnuppException.html | 2 +- ...1HazelnuppInvalidKeyException-members.html | 2 +- ...zelnp_1_1HazelnuppInvalidKeyException.html | 2 +- ...pValueNotConvertibleException-members.html | 2 +- ...HazelnuppValueNotConvertibleException.html | 2 +- docs/classHazelnp_1_1IntValue-members.html | 2 +- docs/classHazelnp_1_1IntValue.html | 2 +- docs/classHazelnp_1_1ListValue-members.html | 2 +- docs/classHazelnp_1_1ListValue.html | 2 +- docs/classHazelnp_1_1Parameter-members.html | 2 +- docs/classHazelnp_1_1Parameter.html | 2 +- docs/classHazelnp_1_1StringTools-members.html | 2 +- docs/classHazelnp_1_1StringTools.html | 2 +- docs/classHazelnp_1_1StringValue-members.html | 2 +- docs/classHazelnp_1_1StringValue.html | 2 +- docs/classHazelnp_1_1Value-members.html | 2 +- docs/classHazelnp_1_1Value.html | 2 +- docs/classHazelnp_1_1VoidValue-members.html | 2 +- docs/classHazelnp_1_1VoidValue.html | 17 +- docs/classes.html | 2 +- .../dir_0202e1e26df2e040f4dc3d434eecf04c.html | 4 +- .../dir_0cc5f59b28c403d42cc56800132eb975.html | 2 +- .../dir_1148ebc2b25b55095aebf6f4cbb6efca.html | 2 +- .../dir_a8cffda729361e9d9637effa362fcea9.html | 2 +- docs/files.html | 19 +- docs/functions.html | 33 +- docs/functions_func.html | 37 +- docs/functions_rela.html | 5 +- docs/functions_vars.html | 5 +- docs/globals.html | 2 +- docs/globals_func.html | 2 +- docs/graph_legend.html | 2 +- docs/hierarchy.html | 2 +- docs/index.html | 36 +- docs/index_8md.html | 2 +- docs/inherits.html | 2 +- docs/main_8cpp.html | 28 +- docs/main_8cpp_source.html | 30 +- docs/menudata.js | 1 + docs/namespaceHazelnp.html | 8 +- docs/namespaceHazelnp_1_1Placeholders.html | 125 ++ docs/namespacemembers.html | 5 +- docs/namespacemembers_enum.html | 2 +- docs/namespacemembers_func.html | 2 +- docs/namespacemembers_vars.html | 86 ++ docs/namespaces.html | 7 +- docs/search/all_1.js | 13 +- docs/search/all_10.js | 4 +- docs/search/all_11.js | 16 +- docs/search/all_2.js | 10 +- docs/search/all_3.js | 8 +- docs/search/all_4.js | 34 +- docs/search/all_5.js | 32 +- docs/search/all_6.js | 12 +- docs/search/all_7.js | 2 +- docs/search/all_8.js | 8 +- docs/search/all_9.js | 6 +- docs/search/all_a.js | 16 +- docs/search/all_b.js | 15 +- docs/search/all_c.js | 12 +- docs/search/all_d.js | 22 +- docs/search/all_e.js | 6 +- docs/search/all_f.js | 14 +- docs/search/classes_0.js | 2 +- docs/search/classes_1.js | 14 +- docs/search/classes_2.js | 2 +- docs/search/classes_3.js | 2 +- docs/search/classes_4.js | 4 +- docs/search/classes_5.js | 4 +- docs/search/classes_6.js | 4 +- docs/search/enums_0.js | 2 +- docs/search/enumvalues_0.js | 2 +- docs/search/enumvalues_1.js | 2 +- docs/search/enumvalues_2.js | 2 +- docs/search/enumvalues_3.js | 2 +- docs/search/enumvalues_4.js | 2 +- docs/search/files_0.js | 2 +- docs/search/files_1.js | 4 +- docs/search/files_2.js | 8 +- docs/search/files_3.js | 6 +- docs/search/files_4.js | 4 +- docs/search/files_5.js | 2 +- docs/search/files_6.js | 7 +- docs/search/files_7.js | 8 +- docs/search/files_8.js | 8 +- docs/search/functions_0.js | 2 +- docs/search/functions_1.js | 11 +- docs/search/functions_10.js | 2 +- docs/search/functions_11.js | 16 +- docs/search/functions_2.js | 4 +- docs/search/functions_3.js | 2 +- docs/search/functions_4.js | 33 +- docs/search/functions_5.js | 19 +- docs/search/functions_6.js | 4 +- docs/search/functions_7.js | 2 +- docs/search/functions_8.js | 2 +- docs/search/functions_9.js | 2 +- docs/search/functions_a.js | 14 +- docs/search/functions_b.js | 8 +- docs/search/functions_c.js | 10 +- docs/search/functions_d.js | 10 +- docs/search/functions_e.js | 4 +- docs/search/functions_f.js | 4 +- docs/search/namespaces_0.js | 3 +- docs/search/pages_0.js | 2 +- docs/search/related_0.js | 2 +- docs/search/related_1.html | 30 + docs/search/related_1.js | 4 + docs/search/searchdata.js | 4 +- docs/search/variables_0.js | 2 +- docs/search/variables_1.js | 2 +- docs/search/variables_2.js | 2 +- docs/search/variables_3.js | 2 +- docs/search/variables_4.js | 2 +- docs/search/variables_5.js | 2 +- docs/search/variables_6.js | 2 +- ...uctHazelnp_1_1ParamConstraint-members.html | 10 +- docs/structHazelnp_1_1ParamConstraint.html | 170 ++- ...azelnp_1_1ParamConstraint__coll__graph.map | 6 +- ...azelnp_1_1ParamConstraint__coll__graph.md5 | 2 +- ...azelnp_1_1ParamConstraint__coll__graph.png | Bin 14185 -> 10874 bytes 188 files changed, 2392 insertions(+), 1658 deletions(-) create mode 100644 docs/Placeholders_8h.html create mode 100644 docs/Placeholders_8h__dep__incl.map create mode 100644 docs/Placeholders_8h__dep__incl.md5 create mode 100644 docs/Placeholders_8h__dep__incl.png create mode 100644 docs/Placeholders_8h__incl.map create mode 100644 docs/Placeholders_8h__incl.md5 create mode 100644 docs/Placeholders_8h__incl.png create mode 100644 docs/Placeholders_8h_source.html create mode 100644 docs/namespaceHazelnp_1_1Placeholders.html create mode 100644 docs/namespacemembers_vars.html create mode 100644 docs/search/related_1.html create mode 100644 docs/search/related_1.js diff --git a/docs/DataType_8h.html b/docs/DataType_8h.html index 3ee0795..50e8603 100644 --- a/docs/DataType_8h.html +++ b/docs/DataType_8h.html @@ -148,7 +148,7 @@ Functions diff --git a/docs/DataType_8h_source.html b/docs/DataType_8h_source.html index e1dde81..23f683e 100644 --- a/docs/DataType_8h_source.html +++ b/docs/DataType_8h_source.html @@ -128,7 +128,7 @@ $(function() {
static std::string DataTypeToString(DATA_TYPE type)
Definition: DataType.h:17
diff --git a/docs/Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html b/docs/Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html index 2d73da6..b9698de 100644 --- a/docs/Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html +++ b/docs/Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html @@ -77,7 +77,7 @@ $(function() { diff --git a/docs/FloatValue_8cpp.html b/docs/FloatValue_8cpp.html index 23ebd96..62aa079 100644 --- a/docs/FloatValue_8cpp.html +++ b/docs/FloatValue_8cpp.html @@ -103,7 +103,7 @@ Include dependency graph for FloatValue.cpp: diff --git a/docs/FloatValue_8cpp_source.html b/docs/FloatValue_8cpp_source.html index cd7d7a6..bdcd0f4 100644 --- a/docs/FloatValue_8cpp_source.html +++ b/docs/FloatValue_8cpp_source.html @@ -173,7 +173,7 @@ $(function() {
int GetInt32() const override
Will return the data as an int.
Definition: FloatValue.cpp:49
diff --git a/docs/FloatValue_8h.html b/docs/FloatValue_8h.html index 156cbe1..0fcd7df 100644 --- a/docs/FloatValue_8h.html +++ b/docs/FloatValue_8h.html @@ -123,7 +123,7 @@ Namespaces diff --git a/docs/FloatValue_8h_source.html b/docs/FloatValue_8h_source.html index 0dcbf03..064c70d 100644 --- a/docs/FloatValue_8h_source.html +++ b/docs/FloatValue_8h_source.html @@ -142,7 +142,7 @@ $(function() {
int GetInt32() const override
Will return the data as an int.
Definition: FloatValue.cpp:49
diff --git a/docs/HazelnuppException_8h.html b/docs/HazelnuppException_8h.html index 4d139b9..7eccce3 100644 --- a/docs/HazelnuppException_8h.html +++ b/docs/HazelnuppException_8h.html @@ -137,7 +137,7 @@ Namespaces diff --git a/docs/HazelnuppException_8h_source.html b/docs/HazelnuppException_8h_source.html index 45a7433..04cfe17 100644 --- a/docs/HazelnuppException_8h_source.html +++ b/docs/HazelnuppException_8h_source.html @@ -170,7 +170,7 @@ $(function() {
HazelnuppInvalidKeyException()
diff --git a/docs/Hazelnupp_8cpp.html b/docs/Hazelnupp_8cpp.html index 366914f..d5c9e71 100644 --- a/docs/Hazelnupp_8cpp.html +++ b/docs/Hazelnupp_8cpp.html @@ -85,6 +85,7 @@ $(function() { #include "StringValue.h"
#include "ListValue.h"
#include "HazelnuppException.h"
+#include "Placeholders.h"
#include "StringTools.h"
#include <iostream>
#include <cstdlib>
@@ -93,28 +94,29 @@ Include dependency graph for Hazelnupp.cpp:
- - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
@@ -122,7 +124,7 @@ Include dependency graph for Hazelnupp.cpp: diff --git a/docs/Hazelnupp_8cpp__incl.map b/docs/Hazelnupp_8cpp__incl.map index 9aca4e3..a20df59 100644 --- a/docs/Hazelnupp_8cpp__incl.map +++ b/docs/Hazelnupp_8cpp__incl.map @@ -1,24 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Hazelnupp_8cpp__incl.md5 b/docs/Hazelnupp_8cpp__incl.md5 index 4fe7749..69ae8ae 100644 --- a/docs/Hazelnupp_8cpp__incl.md5 +++ b/docs/Hazelnupp_8cpp__incl.md5 @@ -1 +1 @@ -c20f31e793f546287eb4f919b1cf5f58 \ No newline at end of file +2a942c4e9db5d3068ee66edfb624813a \ No newline at end of file diff --git a/docs/Hazelnupp_8cpp__incl.png b/docs/Hazelnupp_8cpp__incl.png index 1371170efb3adcba26b0539f0aa95cd3ba374edf..a7d1cee370bb659dd47c0f5cd178f2d48192edf8 100644 GIT binary patch literal 101700 zcmZVm2RPU5`#+A8z4zXGBt(%tLnS0DBq6f*%qUy3l922q$=-YKP4?c|glzuj%l-cR zj_+~&kGq5J7cZXA^Lbt8`B+yWYAT9&*wolaNJw}Ol;qWskkFWskdPBF(czW;wCxc1 zgl_amQ6A|E@n1?!W;7BKBhmwT84b6uo6~RfCl3#$cC{NXyj2@7=wGJ_>v?2mlu%e( zPZu8wOiz8STd(fXD^W=t%AHvk%JfbwdtQ^HD{QurQL3w}J25Ec+DJ$2z~b*88F{u7 zL6A&<)h`x_w0h#UMD!8Ko#UOffyipLyGrH|mMkWdKjHsAP~G=b<$L>o{|B!N>^&iT z@c({;GpRiB|MLz7I<%<&@7+xPkxy1P*3b~|Z$7h{Djyhn#Mo>sdA2F2%J&ZOs)_8v zK<+r=4OAc67GJLa&I%3<-9J#rq!P3!p&lL{PVtGrLR^jlhUWF}G0~wBwvm7GBq}pj zrag{}m$%iiPhxfL)%7JR>)c`ac>TBkJ_xLH2DAP@SMxy>oB8^u{qF|S!+n(y*RG6t zH1me9_H_NGDqmCffS3IB*TqBr`|AIGVEd1B#_J!hy}8%M(3W6ZE3$O{W~YYY>bOm+ z)mz43DO2i#>*vp(eqC7K3aXco*gIgMo5{RWX9*pi&oSLv!?-s2AwWX1Sd5$wH)5Z?{n$-DK<8}pnxbOB*bmE0V66oxzFor|2aNVMn*=Q zl#isFIQ_KZYI%e{RhYv0VV=)@b8{|Sbd>k+-`mZ49Wn9q+coEfUKi?v#Lw%Rx5v5f zwNMoJTzPL!mJ#$xU5WqO9QR}JK1N33ciq(k=Xi8?)rJvul@$;}PV=KXf|`nc;E zcMLWZ-fba-Bl63a_x=59`mWQ?HZt2v&nf;}J-8M<>~Q_xT*ufUuR8}0qj&$Fc(Ssx zemHd|y59ADDgSK>W7+Isqm7XqHzCnsjI&!xzy3oa5K9^P1~HBG6_G~&5# zdqydt(nkdG)gIrNpPy$bOoCrsR&QNSZXh(}C{gozAT6}Ay11AWhl02I+ug^dXYDac ztiDb2(u#^0#3Up^&-?!W$`Hq&&;x4)6ASBIax%lu?Cia9vt;|&n=uc?PnM$Hj^~4d zG?1`SZ}8|AVA!w$eq5DP`F@6pRBAgLuE^l^N$<)R4QIFW zW?o832^nn9v6?r+;j|(G%%k`J>n9Q1*WE{eU7nd}yY|e+YPyn4LPCNtv_+@T1PeL` z5)vC5+n>$N=Au5yjepLY;r*(TC#;vS-{zs^1Zid8_wW$4soD}cJ~??l;(_=X)dz!* z#`0gH5EBz4R@&lHN3>0HkA*y*hHOlLOA~5*hx5O`1R(hlkP^Jt}_K%yt)tyFpG0UmS zXQ_WS=SLu3gX$39*hp^J`6&~ICvt7@2V4btdHx$H7y2p~Ow7!bQBmFY^74_BC-2^Q zW8xmb7Q1)snG|G8gxEO2M=2v#h^z2j+qx^4vpwH> zJG7<@uQh3@ou2+BqNl&}hp?S4D4-$eS} zJ;**j4E{kFshODsTG@0+b55f3PNEH~7#<7Xi5Ki$s^|j(79L%S`Za8ls}(jZ&(*8v z3Cm;*rq>#DpndhI!BR+nHMT=TO#C)Kzy8wjBOX77ilPEK9`>F1#rAeW`TJ;1eSNDB zcdiF}B$1p9D->@58GaQMD6-2Lmgqa#)F9m+|MwP$(j{rS(|$?xM~1f<>nR2XQiH?s zWps3qZrnI0Bqx8nyDJ?mPxNP_=pRO`!s|QeIy^2;&WCB)*%VAn?}EedWDHZJeElwn z$jSZV;?({)DZp17O&#lB7uV1K5o_zjiXXdiLp|T?Oc=g7K#lTUc{zV`OMna~uA*Ax zl}H`$ojXXWsmQ?*b>|z~8%462f)2K#f1KF2AEOtIzps_N=^C$}EB82zRx~l>?Bdm| znq8d)%GR=q_4S6U*ZdJE@zlXbraLmAgHEbbV5c%y^6@X;X?6LRo- zY#Fsksq>2yOw3(5Wo1rT*&8XN3H`&bQ0L@rZ5epTZ>FWoF_J1sbK<&+$TQx(i+)4q z-go5(Xm(qaGmidl7!1k$p8Jnm^6N6;$6eHAzJy=QMCi{VBt**m1l7nWZn3;vt-0C1 zVf1KFPTaKA1l7MWxJ&nqZC<=3!_Kx4z6ccbb&0}{VTsqT)heC~#pUtUNqsW$eXw#5 zm54|NuF$38LyfpUj$jscG-7|Q%3eQg2ck_E3{kN+jM2_=ux`@RX&frx*6``*rY{=O z@zMR_&!{DngT}_xnp*>zB$Kc%Ona4OoSgX2&plt3i5V7*rH&?~sQqD#HfM^lus?Uh z;UT9vk{F{nMMn1C-QT~jp}`N;=%2P;Pu_d2Xq!h>Q)7yXdMwNOUi#rfTnb)%e46Nw zX}mgXOHTN+><`=J&F*N;2QkpEs%$tZaFTj#yXt2O9@bT)_{pb9KfrRVHL!I!liW}qc}+;(+f6)wiY!je`}LXuB=L?F@qL(qake_z*M~7Mpv;yYLBN0? zgu))}+}?dpN{Rt9U>>l;Cc#}6LIwsbSXo$DQB#K)=%-=rUX6=;`7fK$mzI~q+K={& zXACf8W!YaOWDTvMMhHv#(Pa;Z)Jk&5%DKzg$h}A=F)bn?B4Rm<)6&#@x!Rjp{?#X9 zoG~Kjt!dN4@9*QWw#I~S>+AivxbUjLmKznu)t{9P4#rfFm1S*gthRN@?l4))`+3J+ zGj@7fd7163U}L#E)wP{R@2z{1anl2r)@5l!st-SYyyNcv^M?@D8#6aIDr`FX@?`{w zs-V5*0P+3sj73E&2L=Z4;+1jYl{Z{;Qw@c@UgA+47rZp~^hA|sUP&2>?;rUtqo+qP zF>&YOC5vNadU^uREkECLA}Xp6_0m$iZpsOFt3=SwIL2mYDWD=s${*y7j7UFzOoJZE z#6)}pc?etdbE~CW%fjCI+ztbQ&lM>u>bLqnRiv2po%~5>?em(83lc)|QbGxdHp7DA zh`KYk~F zymD@XCNw`kz)rL$U*}W4E-Yz&j7-PZ0W%rYJw6eMDjcF>cz-tUNN4?)$=QAfQz}D! zR*Fw6s8_`_^Udfg``fHSQp`qJhcc}1H>FIoZ?TjQttPx$d(8VCd#Hps#`>1o&DQ4? zS}FLs#U_5wf7T*eka)y3B_3J${H=voEqf0_!3zGLEt(z)N|z ztvV7TuE*rtAa8N;>;Azs1xH5?UA?>d$FBu$55KRi_4E%wW8!RQ5T_^cTtD>UPso{~ zHa3!-&K2Ye5i#u}!ES213{NnGCl=0NEA!w1-NT2hoP4p3YfeTJ#jK>{?+Z*qC>>W# z>u0b2W)9Md3Ihv}5^P^e1P;6MG&`e81|aLVgQ3K?mq+Odtyiy^T$c=lr3 z=lEb~v3%u=XZ3DlSggdGeiCJNoS)fZYI-*np$`*>+!!9F`?J1|h9s|m&Lk>|D=GO_ z*IF8e9$dC^;+J4wU#ITGgm5&RLP8pv^?5yqlWx-ly?Y(KUo^R$ZDL{*6Sv7G=jY$? zYQ}62$K*CFD`~1l-1Td~%_*fwOhkWOQgea9QaoW`W1O4Ii&9w`_t>*|Vuop+O)rd| ztVP2>;r?y1&whQzy#&y)I2)U4@|a^_8B^I_v&DsyUs__KqH!*!S;g5`I-%kCw@d`S z|BUjo?^xV}=V_1p0`?7JIYy8Wr!2uIYgn$4e#M5xI7fMT$%{}%|NwR9#$lGa}snO)*RB9tp{ngMI@QlR{ zCs0^jhIQl5fP&S`IoEFs3Hmpix>N3E^X0jyLu(&?WIvT=ev+1}^6u|n7Y%LKl(N|P zK5Eh>4EhL+=#CqiBuWq8x1OI+>Ett#?616HW?|`VDl>G#O?uT~6SwT4%Rc1LXNgoE zUx-2$gW||DKD4(NMZ)}+Ciir(#LL_6{)(NW)VtJ}*xapszrL!e$D!A)^uzUXrZ+AV zg9h3^Gc)YdZ^uwp;w+QeZ?7rY&~T}w60YDNKmweFK!dXI<)WQfN#RRlIlrG$CK^ZD zA}+G*LzP}vh_-Md9;d9u`y1&kbRgc>$|~V94i0xHMA_NyKYtQKSK$V8_tmS%P(H)i zS_@86AizO}18G*d>$ln1Oq+A_Dl1WZF82*KC!EpI(ALJPPpEkec<2jue0W*tzqjEO=D3+IR~cjfGhx#_kOPkQZF zRCIK{fH<04@xO+Lyc7~NRuNo%Y6k$=B<&h~wEq}f`|#R&*v`6VvkmUa+M4>{@ODgq zx3{E{Qm{PCM)jxhC}+&Ec*uRiW&MX9ti<1Se`ehGtE|M=;puKAg!zhzX(-z?V}P^i zvT|N8?ei_OjZwrsb#C-G1w$IFwyTsp;^G+9|J z6t5!`g%VJx9}_G&meT&Bc9e)SxopRCCC&v9i)gO_d2a^hH!_Jnw76L3TSg0`gam$8)@`Lnp#e&FyjNBpo50Ns4-0(y zq-3|7f~pvPr+y9f?_c8S74gECf0eScpUy@2O!-Y$^)U+z(-TM(6K{<4(8g?tCJ*2; zBd>U0wn^d7FUQs?z@jd-t)nV3%M9;ycE6cD91ho0dr^8Lh+s55R|Oeb+@?cS@}-0OrCQ)$ZtfUe-IHh&{u03H?2A0XO%kT z6`M3F|0`B7wyR?B@;nX>d3mF=ynOev|05Rf;zHx;P2Tuj0d{t$-$`Ony2wW|2s9Xp zGq~~iwfUO-qfqpmoZPlVpaA->p6KgS!dgs;kT8`~Naa6IyD8jlN<&TkDN^avkDQqF z+9VN|#7RnMF$@e0amuD+Tiu6(Fz}~yV`4Vjnyc>7s%U6Ee4;h-VX-Ztz{dv<7rkim zYg?o2ZDtll;m99(+6!UA|K{tiBmy?AnCQLT$a1S}0^7L56vTo}N=nRkj~A2Y`$e>5PT;tBeyZ~8*GR;~X^h18rCG5R zWg9DmDH4=VPk&8Wbu~EhK6jBtNu#qs=NoVvAb^w)359T?rLQ z&?m3rS&!!3(qbov)O4+`P4$h%CPe@=+7H_4ix^&5;1snOEpk&^S}sG6PAODJuc)TM z44_^DEJh<#TDeX+<>% zU}eC%*D2@6fsw)U{EOex(x2PU9_b~Z+t!{)fb>OKScvMj6g5nb$N0>cOuo=%OVp1e zc?wHP>IGs_m;akEH+HC*>3vTESOkZKmEz0d*@}kic!t)5!&=z2ka8k?iC>O39OU!$&SO2`t0~2)~(c|s%>w;|K z%_zgjfr{vBW&mD_d4Ez~G=x;5OAz+GtnT^L+`kgI;ft8hFM~sImVfdF$bSE;4s^iE ziW1d#7pov17<^>GH5XN8CJ)8y=}ClUqkrb~Jn=?Ji35yFWJ+%>ma_sKp2}aH45eNP z@zXz~?+1`(s+PfHZJf9BZIkmEjv`UvaMb1eFlX@F3@RE=71XVays*fkcxuCx{sU+! zY&6HM5$L<9XeY+KU+>uTE*6_VFs8nIkfB?Bd1`QeHrob`An0tTj#_w%f6`Jmy#SvX zSvqICVI=2;(P}S=PMHmRsdW`mK|!jq%f;e51!HM*a})qrV^w9?(9;J7nA$su|CL#Z z4gCHc5{S-5i_ZbP34Z9RmIxPlDDSUjQsR-{nWEI^3Z=1VDa&lkbRY~6);}$ z6?pgUVaDppvr6>%hZ(h3#qY9-(ceM`zh=cB{t$4*(=}nZ5SaOO^!EJ|I*mO!O7=UD$?4TJ@6%bZBf1_>_chLzQ26I z|0*&R_#T^T$>G+f%lF2pzSSmEW8siJIS&sWAgaL zhHVY%_0)=ZZ$j*R6h*o~Jh^S%^A7})oWS41G3a&P>DeZ(-bH5ZA_2q#i>%;PmkK4W zsrcb<=kl%66VfkuesnkM(Ki(%gy69;^YIadlD}dR6vX$GWC#o6-o}d?(ZWMAm5cpK z8>JU|^g9bHI3#t>m9>B-4$nVE*{&mrBi7Z?wjOzPhHA<=*Ir%y)2PG?H*7H)jZDEx zv_?O@*5@~M-p%iMOarI>`4e3zj_anS@3@s?!hX3)$XGg!YWwoE+eXgC@otkk zJjD414DE%_dMnTOcIsd6nGj+jfga&=zUb<9wsjFFCQLV3Hv8ejhkFsfURC$6eYj^Q zjev`rvoCNm)Pq1nAthTjI$ZbU(ff>3HT`ZvSA>gf=VMnxjn*od86X^3cO-lO5fi9~dLUS_^Mupd#OU|c_GOR<>e zBM}Tpamukz;C#~zr>6F9{}3#;r4DlOe`EN?r53w?(zEURB)Wdct}ze)b~3!W)ZLua z4ue@VztN@mGLig1l%waX3|x2)l9HaRYy;;HRM$6((m)n@$TswM z8VD~mZO}#{A66k0lRRPjWCm*Lx6RF*tn3PivH)5JfGsO4OG-?_5*10fcGxGAls5cN zHe=l$hZiF}{;f{Vwv4uR-sI?QN1i6o1KyS2GnHfcS1e5!ete7xoZEdXK^0_)aW#bh zW&omfde#HH5czk3=w$2bq#*C4rOKd%28`dobNeQs_ZC04$f_-9`>zp** z#AFpA?PkPyk%aK-o+pU2d$Dz!ZL^nJzLA7JQ(mq_+m)7U<>p66pBae_lM-gU$|xtx zd_sTmAYbkV>G2yY6lTWW%>`CAR+dM7_D|FJ>XI4;!O|+n%jM22M6+x*8i>p*xWmoH6MKF6E%tVTwHl|B4WNcrTdTL@la?!zv(Bb$VxjTYnko-MQptC5 z@^!cVtP9|pV=;Jo*y$bH70F^Gt0;d+tB1CyK!vd31OoL@6jxFo0@jV-`$ro!#uAP=iB z^L;p0w@Kk#bI9lYUiYt3QbQXP^T0LFw`|$mj;2v|kB(X-j!5TY>+~I-(eSu`6h@2s z1$5AArW&O!{O)|X82Mrc$EeCgVsM`Pi{zNe&6TPh?o{_onLqXL=itr|naERFT)+HIp7kFZ0rn3n!tqmp!3J&sjRMn^iIXmcof)nKce zQ7z8XV~(=q!C(79>~g*9K_;%)5JJH3?95AFoOg%mbur z7#+o^I~^9dCZ~xxt6?&%NcR#|HmBTg^hutfF*Eyui6WeuueQ1NDooF%3gy+Sp0T3L z8*lz;q?Kr*fKHaJwY>Pn^83rZh0Rd>vqKLOpxqUn4?_H@<_E?*x|2TyW4hpQv=}k{ z-H+x}{wJ`BE|#0HSqvB@QM<$DbfGdnd_!f9iprPB2gNZ>Af6|(EB>KYg+2yY0CaS^ z08ysQVM8mV2b@tObUM`ei>)If{ks`Tr0-xeva-s{GGZQ83U7j~O>?~;wd>cM(rRjO zN=p7-CZ@&D6=Xd?yO!x+1h>fMR^Gn(sJ+L5HfMw(q32zts0f0@&o|*An36#Jh;>qW z9v?$U$Uxj}7NY%CGviYy(6$vn1?L=RR~hUAvmw$m_CS z3@h53a+H$Q&l9J-*|2Ww{k&9|9WhEZamm119e5{>lqU0m$vCd_0&HWDaG{;33T>5MCLqkH1v+~UK#b|1}+~ln9 zEMAF+p|?;(o1ZjcAj}C6J@wVNhzn9*-2>Fs_Iy~9$zPuf;ma>EuN{785=+w3>P#6H zkQ;ig_cK#fmAZ(+Nj-}^Q>A2Xciw|mY~;gt_7c4emgGJ^02Agz9}DbWk^^UN{q-#C zfcJuRXxzL$ilzH&8_Yylt9eQLZjuV=Xbe7{q_))s1kl1=rwS+u#O+E(wX6)dZ3&p4 zy*bi)+4VUwe|!@PY{ zgBSdKayRCo1Za0<>zz27WrH@G;0OgGv=XW%BU8KOrRJkLC1Y;7{e6cqEip9&bSQcjHv7tvaPZrsNQR9SPm)c&D`&_-j`plQ?OYvfA zj!f*kDl6Q`the5~=T*IP$9tyW;pkMkphF4X`T8CZ;b8C`l<|S1wYIjs&*A8}sOZ#m zN8r>-2t$M06ou{|Xgz3IpG0hIcNT>n=6vA&0F}ryyJv~bxkx)PqvE$-@ zS5}4n`1J`yvB1uU5W5f!EY@6IX=MR={WO!E5k4^wj8)(4>2>Devu(S)xO>l|80%q1 zu9TgLZ(Dyq($Z2hxVbzaZcwlEK2Ekv#jUtUA-sBIBskDB*j1L^fMTxe|x>IHX528 zYEPK%zhWa1f0&_*^cL2}`8g{>6aeg8QNav!v9*{jt7zyg3C9=vB_$Mm`cEkZQCRZh z{R3c509qg=UonJkjnH}m!lS=#d~HL)SO>ET1kaZ<;-?&1tWZ=us1 zr2tnFp4NEVMqfpKqoEm>@!8^SSWPF+wzU-md3Ch}f~Mc*hP7>db$I?B6teROeL6qi zj|LgRUx%l$(phjfo#A;vw{pXe7j-ITPB!d$^ezd=pdB?|LLG*>%_+VO~fvU{1 z&TZ;j7i2M&m;cUqbJ>z5tc51a`zSCQBO~iIir87@nMFh@uZ&m3Q~9U-$^r=mo?S1G z$WIUHI=eDB`D_*4D@e_Hi|vPLHbc{4PL)$U0OiKGQWAzLU?-KYuUiqV*x?&8SX|=t zLk3%R{ML3u-`P@sa8fv~em7p}CiOrT?#LRJfF(o(xDx@jU6YVi z;K;WeHHXd_Cn-TiBh=jxi04R1B~ogu1G>n#ojM4&rCRu*EkY)jtYX?CVtQ`(9r;3B z2i88QaUSTSCBIP{$EulW_S&9H8FY4}`#DEL)g(cmOG6KowX7l)_~z8t&W4Bwy1G;4 zo4*+S-6#{mXxacbb|)pSL{W+UPtuCHn+}RJiz4+) z{)2aIiw$c|kW^xll)Mp2VP?E%bQ>FcuuYtnZKmyY@!V2J$X)0p5b3)jq$J<3CY>>$`r28|dXtdzb|cn@IN(#cp!EV{MXK79@3g@5 zEJsz^dW8F$8Uy0#C#_6(&mXu9m7RJlN1jA)&Tdc%sd%v`$f3Y!{fAn>emW42ODvK9tMh-&qq9tOjR?5 zA8IjE&EJQpDta8hso&BrX-jg!<3{u4FT-=vcfA1c4DNd}hHXbPxV4PYw{vC$o(YSJ zqPrNyb`+~|JLix0*3i6ph+Q=Q1O}OW8s--!<#tv@s9Ce+UEyr|6=g9BaV@QfAdub% zbM?EbYGZdiS9_nTthYC_fWU(IscP86VLwC}35 z`r}2nFWV>Y>i|h3fd04A+anFo=BAc1T@l{L)-OYA&9z>`ZYRrmPxNlKO_T`czv`j} zP21hWoc?Z}>nRSRK*jN-nfDrhWqE_zNNBC>~xnL>mV{chaKPd1fC{Yi(-pT_M2 zd|avYj~Dm2xZd9=ATlZwtSTsKSdzAzYT0V-?frSMzb_+ugG2*=vz@*PEe7sDg4bW! z4$+&debuveZ1YTYf2k%~1c2yjnU@4R9GVIXAK$>@RSFzCUbNlWv^85#0 z2TpHGJ2;Sj=Iyx;b%0IA!fmms*BEm2B+J8YlTvVX?`+4CG1ip@k`G0ukAI0otTv%X z0_E~sU&sITTnr^b%6lu$D*raUax-kW#tiF8m&GQ62*c%0@#^!xtynaLZ*IbF8yrN3 ztx4p0W{u|Sd!Fxo!DBVXZ}!_|n*IUB7peG2!j6Dw=*52lx?jvw(5Smq_67I&yoR1z(gO%ZUVVG;S|%Xj?ozw&jgAmE^;6X(|wTJ%JRQ$e5HXe;OL}fYu3}8)x`aBLz$6p@tGRx%nk6YpFCk|c~ABfa(|Zm&KACzvCEq57K9zA z^Fh>BQ5!28HS9ot$+IOA&XqKTtv z8Fpu>P}pP}I?B_MRZvF|c6{`-Tz+veC2&$^aq;%1G7}?v(M0`8iOKaX5AcD2kt4;W ze6&6>UDc=z>;Pq&zV@y^A!6>ZbUH_WE-W(#Y4=XaB%n|F6HYTW9&$-dd4lZI~rGJJlJiDSQ!v(Mg*etYx$L8(Jwb@hesK5)w@ zZ6`CrzK!*DI-wLR%MDq@pwE-}Y~0-bIBY|MMp0j=Cw)Z2UHll(@G)pKEc9=5z7vVb zm3gJ3W9ajmc7vR;C?@wnI5=_u(M^}$gCL~_m;Bd(3+#A>R~e+x9|5IYYz=qow*i#P z`!cX(ckhY8OgO+YyIn&%7(MSmy8tl&a3+5|&yOFGvUz4VGRSTsh#PKqeDtnN$PXl)DtHX?X4xgwbY??zVRYxZ#g!Th;S|xj|SVWjV?4Y@z%k? zphAFpmLm>Fe8e(;g0=o3O;0lGs&UB#1VSXfO~2X2l?P3)xsAXYH17ND-K1(=N1Rks zr#-by1A~Lt0EYg|w0W-7^QRM=$r1v_RlK&k*A^I#@V)?T%E(;8Y*~_RyB}IeM7QNN z{318Oe{)(7Ekiv5l1SZOV&11P`hf9%?@cKk_$N5zCNB@y#eeBU1uZSTR^>}{8=Dh} zSYFp86*@nHGs4l21|Pfzc@Y92ftm z?RTJ4`r`^sS#?&5nl7>lVH&S8;Nx>WeQF#T&y}*;{6v7*QO;b5jfnyg18Em25PKF2 z;0w$cv%b4>lKH=vZNe6EK z{R7brLBsr|A0L#Kra!@D|50rAt77Sb{q__tDyrLTUri=t0p|LAWt~WrM-hf%s3Ta2JasYXFCk?4?-;zjURuo>)C{L2x6 z;~Q_?_q6r0f#~Di^RA{ssF|R}{x3cv;y9?LR*xDnQ%!^LhCp$gpOe7~M`%(;i>8OS zbUy{;^0FZCDZD1D7RjKM+ud|H+9&(uNv?KamdR#$ulrP89Xh(-xOJ~FjNquKh9raU zqgh!|izTDAP21CE_QRT7kdu$msSxNJ>Y^THcLaSU%VW1&@Tvje2tqokK3+h_wy#!l zETZ-~n`H9*+wtW1c-MaDv15Vx(BOkv8UCsB4lr1Ff7m5Tb@+dhh3==k&(Yyd6-HiM z>XMcbfW0n&`2vrLUp3#-WB>FB1gPFo-98AUmu$tJpf|^30i#~irqozCY*0}9U|L}0=?k*!D zX)|6lRBq8WXSj2*dOuG%wY;2s)=N781Qf_(g3{IWkxfLW@(uCC zo_q^U$&tL|kmat-eyOYIIQ1;KXU`mcvc2yD`+`s$LYjfm0`D~&totFETq%lndE6#3 zR&&PV;JCQgFL$#5Dh1hI*%U^H`k5L{x4#{U00P`r;t&6mVVHSATlG8`cyfNR6O^L9 zR$$uWbiS_L^}2PHv8gBdlM*Q;OOqTgO|(A0oe=Lp!_&^;h=QmFXP`Bg=}qUX={Ht! z%AYUQK4L|Uw`EmSkRX)KcPb#}2ne7mshTw!vnz+od58wIn;4}revEw3T(YpypXvc> zH6|WjJ!ncgh4LQ|TkcED`e9Ye-Md+P)2^DwmuK7{MWG^r9fP9%LW1o6eGw3c5%DHK z7YNT9E9^T3NO^{UIRTRSP2_TLfk7LDKkQhCl9Tg)-r|>iH!KJnxGjcx9q;(4GKuL0 z2Qe4~Y~&^&(?@KVMajy169ZI?z;<<4HK<^6K>l2qnTxA)sEe5wa!R$Am9(}shbSQH zL$Cq|WK{?7eIE7UtxCgMdQC&CE-+k)ZDVF00Br@Zj8E!yvkl9MlSNlMA z^SjaTPjPv9)F!Lac~}m6^FfMg>dZ2L4ZIK1v+X9W_oF_OZ>%NAwCeoN85ESgc{2kj zKzrAtrE7Cg=GF;CR?cHT;n{QgWKRd&`1l)BuCopR(rNR2E-528gJ}(5dI{NHl7bo) zAzp}mG*$G0yR}*kUcKD8@~#JF(B4BfPf^F&+!}^<=jjnMkZ^D}rx8>L4f0e-5I|;J zS_+<8QB_I&@)qndg1oOEIKaNUBkY=1@hl9q`8#*4F7g3={3=4bsq93qZE4<0PO{2aPjFMJ!Ji}EyN5en4sDB57~1>NT5kg zZI8g_L93bZ|NWa1F?v8s<@fPs*RBBA*ceXt>iADO%b%^g2myQk-z0@0;JlyBaq>W! zxo>7np$kHa38trwBYi9n5eu{LinsxGmPY94i`h`0t24^ML8HBTl$&-E{Ls~GdN8;a%X=^79#Wr4SEGUV^5H3f8HB?k zsUMN9NMpaLLjru2kc8y@$-ZELp$t1rTUnLx*Hh<$;J!3K8$kHv|9QU)KeN>fEHvr0 zayk`VN+Zwop^G&IZR}m1VHAL3Jvg+u8=c(UbgQg8{pZ^U&CXLuG_`H5fkq8COnZ%= zJmD>|Gx!er*!eQw*HbN!%o}n92%`q< zCxm$3laQCXZpz0NZN4}224iJO zB!Z7dwB%4A)><^|ZdH=B@m(2$iVzcW#Hx#XFY!fD5s;g!FMx?(1su^uh9oTE` zVe-FR$a;F~cs<(zLN90_A3*e}1=PBR_hjyf&fAVdmOkK1C)T+OHv!q(Yus!;q|T!& zKO7Mao+BSVL+@$nN$Dh9yziga85cOMZ4K~^mxBVjCSgwvZjZz z960uxs)bAr&l71qycm#<2%qtgJ2;wW4JUlK19W1~2-JOmJ9dKGpryeHi6GFY?P)5< zw(!By^Utf}Z5w?N3n^}xocN#(w5<=H01I;-W7N#vYN^_xua~;Cr!*}hqY);bySk{$ zfM|x>oK|FktRsD%zGe(A;KlO8k(1R6@vzpnWwX4kFRnZYK~gJUO?q`a-bX&@C58@0 zr-a+Z;f`U6Xkg70D5`arhY!X7wy)nd7(Y(YSl?ZWPB!jKdWeu8#IMdHxTgLZ0sp(Y zJi1-I*D48a=#)d3_>|9;!_Q_a6d)QxDNvYy+NHO*zFJ{61V%%|OF91I+cBN>J4~^C z&NEDU6&uun$lbFQ{{Bk5aVCBb3v^IH0fo%w!qY5|{{9qsIls;=9rlgDp$@C07OgVV z|KdX~Li_e^_cY6*A0dc`L9>l3r1)Aj-_TvlRQLrt{xLWA^Z(2KeyDo4vuP?=<&xNv z`#cjoO1m<1aBN}bEq;A52|mlD?M|E2l{+Pz!$E*wL^UAKYl3TwOm)-G2O|&y4o>Fy zjZJ>yHNWiTEWOLWu@}davkwW07b2>5cpIO)-lB8u6I^`u z=n)4w@080-pNP{RVL4L;Vpq6~hNr4t_zVn^r8YIlqtAsaR?R)CW())`Px_kNRuhdN zLIMa~7DmYM9fKB>zyzsh&!>^$fRACy`!GBX^GjALF2C%9vG<*jx%r@g^LE}f48cTt z$-@(P^Y=OrdqVdmBy%-$H#viWFnD;ji-27k98}R;F6O3o1Jcc~7rK*^Lm;E3mHSnc zHyag^pQf{Hbe+|l_qh@afXGC%5fMW2hbCOn^M*DYj>eSDoFX%Ls=Wuj_}VQmHzw-& zyhjZDL7d)J-qiE?A6G+A4O!U-zqUOZ9vlpD-nje#imaRXTnNX=T{AH&v*-{kM*l{;+?<3J)sIm? zJDFl!QnMa}A%X@QF|VyOWSF0%6h&jTLufxLo~liA_0_A}F&^>p_P={>qmQiyHB@;N zY34$h3;LcjRz!ThfS8_=tr3F!Q(1yf`BilIy&p!rNCa_+QDb-c1|%s!U`7xS*dmbQ zvY%g!@DV>t`{@qu)r@;4B?95VX%V}fnlAgZEu23DpDD)c>c|PC&askwE){j^yhqr4 zYW}~N6(?_QfX2`JcKK4Kee_p#C^NFWJFS(@K7o*`Pw2r%!ooX zZombAIDqb-`ryaNnLfdvxi1OMKctBv^|rse&LLUa8IzMlYoqnYE<#mBMI7~phbKD@ zqI9oRIEtzcXKIGWfSdp$L_sp`R%%6HbAYG-;pbLY7w2OP=z$VSyx}f@PyVur+ zgj6;oN|0CUv5!`VxVh$#ch53mitnCmJJPTA_0g6=VZVc;w2^lu2;wq;QP)~H-~w6# zJYQ@$9Q5MCf@-_EDAK#F+Fw1ZX>+`7Rjd^olG9<0pOr0hVNTQb#c%iYPeIfj2SrMw7$>Ye{9+lWe1 zVY$VQ<3i4MCfFYM5^=6z>y^s^{nW~1>t^FNqk`0eC$MfyD`P}#tTgPcXF!M2ceZpX zC4_?C;c)UrVE!kD0?$reOLJQROoHf*kk%37b1*|hr}`cZ5z%7Va=VS|9B|0Xv)Sn5 zl?3d#9xX)Zp~NzCal$h5#b333u+{yi&uweSXEWkd$tBvU8elmu5b>UtPIKyr9lZe3AcHNZ)VrF|R z8q@NFdOJLMHn*|ihj<`D*4$}rHeUxe&fw6YCb0TQN!uMZe{j!Bfor5QlmZ+3$mx9 z1G|JH8`uRpch*Ojt-q>pm=xOF5fY$T%C|mtc1E#21}c4#`VFd&MHm_oC&1>d?2|`B zquJj5O;}J78vzyxA%oGdq@jBO7=f>Qx_(5X|i(S5052DwwZ5Mf9YE zeK*K89e9wS`to-tv~|0~`FgH9nbw~U4-V!7X=db~CmM|r5+i{pc6R`` z&^>^FyUirY6{u03)qgt`&X+h=XZOD9$MvirPz2&=F`4>PV_3#zh9kd7Rrx~oQ2{iJ z8cc@zTx{^Gs~Z6ju(aPQ8EU<_(uhv{e|^uGCw{A{g=C*7zFe5`$3;c&vkKde_C*l* z`1pt)^kYv1hv5!PTg!XZ3|gbVlJmpf+Intx?<>TOoU?n4Bc7@o&25M|ATNKul{^o9 zXl_Jr)p&o!GAp2(;Y@s9G`kcGM5yfBGX)W=griSfSS$wpMkNzbi8W{lPz1uUoa~L7 z?-lAmZXDwOBO?eH4#Y1V3_^&P@)&&W35ZyA zGMgIb8M3XpO3P6y*qc`Y)7$lqeHWBcmwTElRB%BQ=)Ip4--KQ z-`djUj1h&9(98Kop4{m#vdaa=0?+KaZrQ?CDRm5t{55Cj^Yz{yk2UIifRiZ8_s3_q zjwnx$cb^zsifjJ;kOE0idY|*B2y&5pZX%iF_0NM^m0zXZMECrp@6Fy`o8oO_1%V`Q z4+(OfcEkY0d;~?Z5}i-XccbjSsUOF z&|(*MxZ}~^<#)r+fUQYP%slOl&L_mf&^u9*hfw>EPfzV^sb?VyXU*t_?}yR}XKa4| zcB(g|eBHpHZ=M(%>o)GQ0|{@P+H*2cff`o#;h#;=MquHgD+2AepwIBW8+Z+opu>xK zW3o>VB|b){L$U)Op-e#^A~A|B1wi1kBN^H!DHe{%=)hq)Xg|hHfg;-a+MKaSQG$XqPlNd6o$hN zRhUWzu?~rlo*uK{9{tnr&FPtK{xJRV&+2d>)iZ;ULk`E+zTw!sKb^fwYD6LM zYp>z>TQ)!CFU>!9p;M zCL>Th5UDh1M{t7680<4J$S~kWSp=fjHpgA2-t1t&q3`3NWE+GHrD(Wp!a6+CX}?o* zCF@nQ{uTLKc4VaV?-84Hsd{?YYQU$q^Jk7v#jZ(38!)o&@3#)Ai7_l_0-z#9<5D62_8Irzv*qnWNR78ky6mr z-K5O@qAagXtmfiE&2QG*AHN|^PasauNFJK+yn%;ca42O~Ms|3dU0n!29RBo=nxXNZ zb7B_gG;4mV-EFi%tS%n%(N(gQy$7lhE&F{}h(y|6{Vke0gqTDK);kD|yG;bc&`PKw zxeanr`j6l&5B*Xe*T&)wkwg`Qxr5L(5Jz0#d^r@id_HjeD!E21BAe@K@!n;nHEUt4 z^`<3mSc#gy0;havyXg360Y@w4ICGR2)g&o#p>67BA)oPVOo8o_AKMajQm5vvjKdnM zyt4p@_EO$dt!{mVK9tmV!F$Kn;MUV16rN`eNH1n{bo635`179zu6!abR8jx<{(dNP zoTxJfcECbH)0->v)!x+KKT_$?+#i4Z^exSGCkB=RawHN2b38anzmc+$VWXYwC#V&g zAaiSS%Vw#gaXqgjWP3#Z&0#ssh)nnH!S?eTn%Uv^KeF;Z|H2ynL};w)NFZG?h?pYw zZA1i1QqqWnBJrS7#z$y5s82I(IGAKQcIWY()&?1$uG)~?2`zGDeDcI~@IYTq&P#(E ziy*?|1O4h;o+FWjZrfT^7$@YTuC9HhTUi`vCx0)33+%~QAA~$S{QT`(EGt`$e3s{9^+C%|ouiyF1xo7bl?LN2 zEdl-g{XCtC&c)`nd7dY_NW1I9D)G@K^vB8o-NVQp~jS8&c#9v&Wk!80e7 zvu62Modp#RZ2v#D-ZG%7F4_V$K|u*Y>F(|>C8Q-)8l@2g=>}1e?rv$2lJ1c1PATaI z>4rDYckg|F-uw3j=bXLwT5HZR#~5?&Dk(fntH^KPMy7^4+a*)Qyb;U%B!fMvJDSDV z&^2%`lB?~y^~^LwS9%+=T%EQxOvG|jtq#}Z zzkCUTU~%7ix$DK|Sd{JdpU*#E`x|$1>ox>s8TUgMiA!>ojgaYVtwx;3IIKZT4A6UL ztBjr0m)nDBjyiQRq|D5|r>B$)3r~FgRrZfR-m#pev_9I<-e2Z`U3yeV_OKJ5GyA!T zNrQR!#aAdHzIhyz=;}*~m`Az-i2&QtHzcQjf2oEu zx8Gfzt4vI&E>+AWNbF)W9q%4D#`E|F5IAi3_m2+C62Ht*rPlQi2smWr=$7_7xzPhMUosx>Nme4L`q=rVr-6 z-Gfm~iDKRbS&W=2m7j?5xqg0&j%KpAf8CL&d4W%IvLi%8yM~*RLgRS6#q^lqjlqtV z0wH02|B#oRo}SK7O7orB1_gtI6&RR-Eqh`XL929!ho^#3iYDD#H09mSG{*GwwBrf0 zXEe*A(;0ivYX98+f`nGry@5&j1cF!vEYy%2gO4BcpRTsH>tM#R@f7mMaG6C-V-Drn zZ?k{%MmOGDkjhk;YhCFzj%91sHe2~RX5Z?+3ULq1!om($#2riIn)j=)+ZHZ+%XPdz z=7YG+MZ24S^P7!yFg{3$KD;ok${J6pzLszF=TimsAE~1EZTy~g)9CBHn99f!vYQvR zjq?jZLhAhZC7qILca{orhx}~qpnlsU^!=5ms2-VbHCz~Us`mfgc*ssgU(-jnOjYde z9iV1OVPa*%?_!pwps3y$W~10xLIWq4D|Byq7^kNVt9Kk6PtCAe0YcrlVdV^ zatjL!B|F3J|N2GyDnmwsR=EW?a)Yb9JaWk=|5%(%c>rHpn!YcwrhUGdhu8U#nnq!E zzS)~nCYo9N>U?=`zc|BcQ6?r1znh4wyQS5QlyU1(cNEdW#;CVy;Wg3i+r*_GH94j% z%q{2K{c<;5QJ!}7{wZ@SHF{6-0^{C`iU>NDn1KQJd&nfl3oT4rQx13{B5&dDX&pGp z9zS|?xHi~~Bq=HD>Q*t3KefwgX5?9DDZqA<6;)hONblGCc|lc%Rb8sHA-1d&&@ZFynAvL|tW} zGn_`N-ZhqxPrP$mwnYb%^G}^izsh$_65daN6B7>D%n8U0xz=(C6KI-Kei4l7iaRmt zJD|P7CDZVp;_mG|EVcO9IbD^6hmUrpJ6(Hr@9nr#1Z`;Y-@mgO+J{f?y}&3<7ENg! z9>#ZZL3MTIUf8J*Io>v7doQZFClUW0VujedcQk^6dH;@e6c*ct*T(yUJnzDY25hb` zqz~rw^z>S)?c8z{Qy#3WWLmdl*8hOaet8_v0XLyikbu|fZ+3k-v+=yAp2;Kt5}a}0 zG&qXyULFp!GcvmVDnB;d7}>t%=u)vTKxWyOd=n_)U%jwyntvqGq2F#XShlH*&z;Z{ z#bk`f`h#w@Po5OONI4D}AVV+jc2S`HNX^C$N4vk3cKDFs4@NaJt;yU zDgNvz347#?`IgJ8#Omf86$f9x>eecoK{y}JJ?~JD6li~k zxnH43kLeXNWCrCl+1_Aft3DC1*LwH+%M~K`I3INt+nPFTZRd8C7aPO(@H^;;?o9Kk zm37JL<6IRL7dLfxqq4BDRHZ$Db@`ufTcD;Ur1dARnzd2LYdTH(b2c4}P`n_k1ioX(vCu|ps1k+#M5!pZ6*!o@bP z`M<1KsQzq@&df%=af^_ykS%xLZ2jSi@W-JkhKF{zHTeM5Uyonqo1BysIp-l|Ab~=L zLUJVhr8ko%66P~*3}o+JLk7`$k7TLw0$ImB@}M6-be6hl`oDF4{8O4D8_lfi+SAt; zbo(xn>j75~iAd6lzon76LWeLK8rmZ~cFNxVLhTxEhBtXqXBE7&e^$*_zePqqZMZ%+ zJ4SxO`5ml3?(P=m69dUp70E;Cot#n3LOwE7oka3dY04QW#m;t?&luO5+5)qRO5)o* z?~X48Q5oE|+P+En`t>dV*b)(!lbuL`KgQc^Qo1hMrvP$A^Soo@Kv1gw32cg>_i(h}j;;)vjKB zNXnwyHe6js)g5&u4iL~bR6!M_4{nSMUkCmBH{TOq5$uaq0a=63sOM7_WS6S6ho(zQ24^=; ztrdUgi!f+tWHVpcVIFv(@Eia8`x}85c5uItu00r}Q0}k}qqN!_!x9x!U^nVBpXhkWL;kPqGQ2f66R)J1p&se?~0J+CZ8m@)I5*?677j_#^&CGOHdM5qT z(x{Y_^dCOjN`EFH_4z(3`9%GdAnG&Q6bNj^MpmCb{rEKB1Y^=jk}q9h0Gyh-x>B99 zU6P=aXnPP58wW@8^mIajcFq1mtAE7mwM#*OH#*6}+L}*J4&Ae7&&(%&k!era*xHJx zDE`RGl8j|H{C9LD5mrB|pDFJ9B-!TjUkyQY+?=N?Ir=?Mx z?99m8HE7k?2U5$&z5DP%CPO9?&alGI{_&?#QBeT|JUjjunPT2(3Bqo1J2N$DinPCq zi=VV>dS}>cIc)!l{J;`+NZdTqCwqF#r*CT78N;UktElMr$VfySmzniaN2r31NLhP> zc!Ek!ckFNo&>a(1HnhIJGI3n-ed*FuQc_Z30&yWPy-;abj7s3-rlwj9ru&izIOsr3 zA?46+IQBRM{^z}g#dW8amB`g0mc6|_ZDePzPBY)kY_FeR;M%Q^R9rWo7yY zC&%zY+2xV2WuZr|+fDw}1=XL^$>`auXSleKE(}@O*nYRQfqk;?maYgh+~eu#=|H8G z{{B*D^Pe)a2B*u0QTy`JQiHXDl!=Ln5CI1Z0M$Nzeob?8$xoR#SohUm8OMW;h(%sMCqhQgkPe|E(sR2bz$huCQ9}W2e{q=Rt-l3M<=uiEkqSz)M z%*{$iHYCVBJ+X_@sw2F8i5G#(-5z>>8;zi3Y@Sf-=|A{4&(Ib$BbCVCfQfCJFyBnX zYh!c=i-sT2$lD!9Iy92{zLA_MJe~rsK>XKX0%*?8&W=t_MFyQ=5y@1Pl)tQ(W#AI; ze~ynQDAa9OnXa-);J5RG>5TjiJC~#5whj(7#(fFXwNByrnicLt%R)?3F!hokj50JP zrlT#8KphGPv$4F+e>X)CY^E!%z9NP=&NV13cSTy++rK($b{PHnS}u`4QZkr$Fhdpx zzBl26m0Yyz$GJT1nkbF34@ItL)|AoAfy1 z7{sO30dgIT1^qoUlNiOMxev25IYp8toov0lB-qN$@p>w)^3{tLSkcfp_}uu9SkUer z4HX;Op%EXpLEzTW>0Y04p(@mA?Iw~9@h#B35TSpQhx_~Y@59aUV3;8I>%%BL3{dQY zy*L1Ufj?|k`x5wUzHd)ez&{av82u?BE-oH-(mG!3mLqgbWokN?<#4mnWUTw)VjG5O zJ|YoLfMJ|TA|8EkVJdw$BSGE8hTSoOPV9v`bx=&9%?VzcnhJP(d9j&|F%kPlE>bH#KVy5^Gz1%Fv=XAI_IGL6Na-S|7e;COoJG;2Zy1Z!h$9Y29+R~C=ZSgPK!9eP zEan2p9{T(HtIG9NzMD$!8z$4U{pIA^@63d|0kyj$63+d@E4}fujW{;}BqG2)qFokWtSegWmk zEoC>u?G5D$!sQNB(qV1EBrLD96<>6P(*&1V&ecaG&(%06+)0PLfji<0^M-L4fUB*G_1F1|Z`r;%R>zVy`tHq{I)^QSEC~2mn^q)S)r#~=KaBdp`rhqqHWF~ykt@)u@(BuRYi#^H zlp&iX*x-7$e+z~PdmL-9v9ZO(#Jn>)K4CotQX#|11v+a|M)K6dA#6dq!4-6bkj;j7 z-Y`>TgZvq?VAiACL*wH#+}u$$4!iD0C)cra6BD?f9d>68X}^|B@780sYhFAe7Ca5t zVG5&Ef|II{6dtu$ZQM`%G7!Hth)94|nbIi^r7Gw>4CEELI1xE;-`wlzOY@hBV(fr2 zM(x)RRDhI?ZAN~$8@cbH>=rjzqJ{EBDw}yXYl-P4HJ=+6rm9tm(L0oZjK@hE<9tM|XSm$`_xEoEg}`ozvbZ@F zW0CyojbS^3vHi>k%kI%ISmcIzd6C>Z1%PpMqprZTWeZI%@0?9z>T z|1>9iw6QuAWNDyf!13pSV+uGs3bt^>`x2PWOe8HWJ>B3TvRuVuIVi|z_U0%|C^=ZvZ>h{T`5QP-o1Mv5r;=k%>jXdB4?ymtL3th^j=9x z#QjM^7kMdbOG^=BGZg8eNwd)+#I1W{Os0GVFnF+ecsTqq0kh?bmZhO-|MS*CcA6A+?{1`I^N2kF8apF&c$T}1j#ezttJ@p zY&xh%y$Um*TQh#R!HHI(kMskS1;DB!kbnpJAJn__p%Mb_#~S7i_q(&?UyzrX>zW0- zMa&-8g)lN*^mcaoYS-9XEwnt0<23z}pUj23@*Opj$t1ZF?tkUNskY=-&_qer=Wm9;I`!y{NKkl#DW+WxP;< zirpI9(=+kkVQHpv2Km}LU47l{+fqq)tq<1}H^!4&pmK-7pMN_-q14dGbt@bUr`ct7 zvFBZEuK*CIXWf353K3EzTaoNfg=KJA85gANyI~E#i^|F}JZ`Q9T~9**5g*!sUsvv9Yl0>8;Pv(Ks-F zy!&50*7ciG6D4M?%75zmQiPT>`}vE`yR$-sL`3Sp-ratT&w0A!Fl_y3n4!#OCCv*J z#~Khmu)@s&cpN?e7A7b8Ywa3_s0?jOT(3Xhr}2b6XTs zSP_isdQle=T3*5}`#BkA=&Ip{W?A7!!f z@GJxK=<9>qI+`2)@Zoy*ulHy`N2+$uH^u#J_2;FQ|MT)IQurkB`{C4OtAAfu{;4Po ztgk)c^VR3j}vnpuO2mw3-Y4mbJ+e8i$=}>Gk|$B`K)~K%ry;7#snX7Gh@! zV4lMIH}Kyfn`CHJS@ZJqLqv||v@8T^00uw9t$9La0njEx2c>!G|GWUO(Q}NFVIn*n z&@{)r1^Afz@#X8>H%e93h8m?Np0TlbcahQ3H7hIt^HVU@yp-||rI0MPS$zdZT!lIr z*{asAw<5?)O$`^FSg^6Rb=jXG%jlTxa*XfpK<-->S65f%XSfsfZWlDoarH-)AzX3X zWq<$v9)!)kxLrq#6YVrzpD2x0kE&kaxOe&O+hKEiyYJ`ELbhwaKDP(!0s!nFuXfx{ zhC%Aaxt|NwioU=MQlp+27;a2UO-;>dF&zUJw6L)eR~%=lsE9G=aU;|l&yxim7f{>a z3kcNwze}yK{&5bqQ+diV5TA=&x8AkXWbn)7*#Q;?MkA;M9f<-?Bl;RasOj#P97FbF z_PQ=ChD-nDUCrX+-t3T;x5fMv+{Z#nN)^1;OGw`6bAN$1qs2z4zp1}>v>Dz0r~uFaY!10HHJ%BTppFm_ty3B4em$cwiK2%STX^A?L6hAprGLS z{xsQ_T5Od25QZzOsyd18f418ko8Q@CcE&cmE$=>;Gv!2&3=`_Vqmu+>Wf^}b?nha; zIKv$56zhyuZqk`S z!fbG5R!uutX;2 z4%-Il17G1n1%UJ5NQPhtW9{a2q9{Pnd@29=I+xSs_|gAz%@S%8c$ZfKifP|t`sJ`x zf2w}_IQ5;?`OvxAURx%Zm>Z_{o0TQ&NCFFqG2%rl{vr1C^d1^ve<$!I{wmAw zh+!k(wc9{L6#cgAqI1`V2$FQbDitH=KGYW7*H>>5>fObO?)*&6y`QfcUcfi~swk8> z+E^es-m+dBuyen%!{V_N{ykI2-0WS^*uxk+U348@Wpjd%GyuB^t3Q;7?^I-gEP0_2 zj5-O&Su{^`Joso+fzADr8gBhtaxwuo_tWJd>U7UsGa^PN*`cg{dO|{@Cm4TU_&=M2 z6EwgU=eqrN)%**o0g;l=h+;5tozcNciTSK+)WK>R8#i~lQku-^d3hSha%`^L@risk z=pc29OU$$l79lm<%!)D8KfT#3eA|;)6O0gA3_8C6wFygcFCU=XC%gQw`5&nerL8v_ zs_9()Gc4*-Di3!yKZ%*w+3)&}x5ZAEqgiWfqd49@S9uv^PPTG|4Ilnih~Xvm_zA&9 z5R+yf^ta#zku*pEr)N4@%-{T-E9-r;AAZHDFL$Ng=EHF6kNV>U{+uR?N!wH2?@ZN| zchq8yfP{{TT}JTy){_5oIYt&1U13x+56~N0)&@6CrycS2+xh1=G$eOSns}CaOnu;K z0WWB{)S>t)xxTx}OIxD-7Gl{>?g?eQBm1uM6sN*Px8mne}GQHY!8--4@ zB6bG&&7jE0$Z0lqMpDwxptzb(zHzO+4HSjp=}DvvDCU3cgsCXkFi9+>W@|}KE6dg8 zmq#0V^Os2=tu^H4~lQMI+TkCp9wKU9UYFl&=m$9k1y4B9^lv!Z=R9!Q zgJx2l4n8b(ya$~ppG?x_dAyKg2(p+MomjG2Q&w@B&{G^7Z%5OFXU^9EeJ5`>TWz-w?2;U&M&TaHj z-Pq;XMJ$^>%xw%#Q7dv?zrHHaj)sx|>v)?W$6nWOruGavIr=g1o&BK127wAwOWSO5 zM@NBiI`koA#L?Vfj`vMQJw0->U7k}fRokU3DLPk-x)$ghY zqKxUxALSj|FQg`Xdt5)|UM1Cv)!5sZ&bc!K{fp}xH4%U(pI6vqkga+Ws^ZazHhf=NQ?s$N|7}Lz`xry*e8o?U9_;naTUW0Yg+=Mx zh!V(X>EJx!G~@mX6(B;JFrVS4Y?kO4FIvT}N7|qpVM$o^; zcsqU;Kv)$7HDWj7^hMIQ!b@8o0H@Q`Y051bJR2bp21%8)<0UqE$z*T5!rGud-p4=p zQVR=78O=#I$4?;2qd-LbY_qxpZ|fmlZ2Oq5U86xL$cw~N!B1Q2#JD12KJm#9Y$6;6 zK6TSdrQbtCVW}ZBnWm=c4piHbR#=Kqz;{9FUk;))D9L>*@{Bag=3oV8glsj9<$vYS z`h00JmiGyy>9whG=H^1BT1R)7l|st;i3LvcwSrTzUsBQ+@I@@FuC`U#G(f-3?Z$qQ z!W5%k-LvhA-s!pvxs`~xT*!KPIy3QJs5QTARwc|oX8qD{zh9;QFbA+c6B<&qaBC~4>ExDlFd zT5rt?1$0IFcM&mY!X5x0iMPKjksnS!ivwYPD1~=DfSwq{22;suUFuKvhcswVIUe^T z7QkLht<%LsE@s$mD7+^AyfGL` z|LEw%1nN8eFnB)GrF1}c(G8*SzHPJWteh(D{vA!bdwWU&PpCRWqru}oBoVR_U*b@8 zIj}30ZP0Rat03^ua8?Z#v9KsM*{HZ)YS`JqiM~EZ>|Nx7A_Hj$QL&3nEzBojZ@cQj z4Rm$E6Dr{M22-qrs~hAhlVR!*l&3wDrKTaYq8lNb<0Nb*imbhH@~gm(FscoB)wxLi zT{4I@mH0xZQVzs{JHOreE`#aDCcHk$2pOR~R@>2VkZB*&YH*T#MdE@H8HAvgzEDsI zX4Z}x`ZaH`(mU1O9c^VTIl>D>WmA7Y3~JEPs@lf^L_h(a3_X0uqx7t-cRje0Mtxh2 zOT!K`%W_w-FF82VZ2Wrw{%F{ARf*ASYO*Uh_@FhW zOjjKQTwlcxHF#iIuZ;9YKBAJ=>r1FB18K)0ABdnFo#c|o*flc#( zqVA5AC^x`!cp20d6-f6Wk8^mqugY!SK2rcQ*1PVg5=NbArr|y&5F%}NEt>)^1;JAD;Qf_Ojp?TFFbv={*g5x^#hz<#(f>Z4I6(@mt3hA27jBERIYSs|{i z8!xe1G|g0Sz_Jm}rE@r`2A|1iVj=e|l`M(NYnR}gX_fyF3#aEAX6$`oSE+@HIqu=q zR=G#;=B5&3UJy3?$IO|qh8WF$t{VJ~7qbIOh?)W|ftR&q=FbVj@zYWa1OMWol5hlT>Vy>F0idZj$h~aNwWhzCFoQp)o_;B`yE?eG18fwD--O zi0Wdl;qJvT6%OgqQAq(`y6R6*UC87{vq(BLc1yv%t)QrcQN*3+kl;!q=hwBt?h~8k4 z2vg4QHu!^Tz6YE-wp6XE3#cD17nkSo!e`;?~J9CNytkUkW^bIotVK@ zM8jx~0sbvWf*}&%-1?7<<&0_h{dGK6aMJ7QLej|T_I{dteBY;o75&;eO~ZA2U}+D| zj|70A4bPbBv{>$no!{N!!U4d>7fTH{T+tBl9hRszuXpLm8-;Plk{^ZqN`} zGE+Xw=5Hex+7?T zl9SWxj(VY*L!Q|`@RE&<1@XMUKc+!k2epDdpgaVRX*_lGDn}Io#I~o#`}XgP_4Mrj z-JbFDLZv7z=6OBe#^Lx&$m7x~;!hck&ldxHc-x$o_9jdxIj7~oJ?PlC5Ib4RFq6EzHCpi{DXUhi;EKQ8+#&FGTIH+1d}Oyw9L#l z*fQ94<7ES1kv(uoPqxmmbm!~|`4+xrWpN=POxVB}s1ta$7)+t2e#UOxr!!kOeEEJ|y%z{g|7UiF%Q7rb zeaJ4hsXTlvMCZUbPZALDNUge5pf~<)8f1N-{Iz$a5F|xNj<_N9T|ND|`Sq%p7yr!@Fscs)0+Aq|LiUu5OzHAep9>y+2a$vsB<2n1 zmT-YB9}P(d3;$2>m-{w=nLETiu8!z4ZdJLQNT{QRgiI4yLvE_99z&2Elg08vLiZv4 z@2@7KLsB;>H&$ih~N}v?D2i|6QQQr4A`5!unWb-8?8=%=)bAhl=PcKO72)^tgSi45@HNS(k z3tn)i0?CsaGy^7}64G9Lm47s|OZV=hu4Gy*c3Ddfet3OpLV-+^-yDyM0LqpTD!F%U+o|md!Q+0Wkb=(^rI|+8}?%6sDT>eAJ%S(F@ z>u*6GhUZRNh06!KkKe91^=;wPtqH3a|FeYul6^%D@bh&&P(3##7~<@bsGM-6+=P8t9yz z^~&~3`CU)>As$-U~Y z8*yJNPrN!TV|Xk{7TYbG+9jtuetreP>7Av>SMd14_(EpzlZi|{yFEZ{HlFkY{J~&k zWrq8q`EFz^lA+w1t&}2{Sp5}`V|s18(04lY+YN{tl?o^!V&2ys(6T)M5w?u}xqB(p zN*2?Oa>>H>){^g=zLir_(Ln*8HLYZj0u-Wk@lvDb;Ng~OcK}|^r%(S@VUHkg$JrT0 zP$-|zwj&-&qlFdj-s#Lx~pojcNJ zfe-8iV6s=k!zviK6TX@9xdUaJPuQZf5RfcXoNOOe_!-&TLgBuJ))}xbB~6Fg{@Gis zF!^K4kI0odD%uZGHmFwCF42Jx4p7cXHSFGi5b>}x*T_HR^CV2&^o05b_DWz#Nc{rg zxZ(}tb7o!lm=|B;K<4BvV|jju5d5>i1%s(HXIe=a)XEh1E0h32yq^cnVc-=Kmy*&& zcn84|UR0Jyj$&pCg;r;Z*es%%1Gom;?P^t;HwJItLZ3@d{CF&s6T?M|}#vl+lu$KpVl_>|xx34!dvJx8y~y4vWuq!ZHQQ3Bfq(JfH# zTD26Eiq$f(wY9fzNXX25P-(r)!fiqL99Tf8_tPOX>?LE9f@h_rNMC;)PG4KwOY3%7 z1c?r0oG;*pZ~++R3Jvq)+|zp|9DhVL)_-rKAYUM%zQf1jqCY&ZnDe8vwI#dPL)VMVA`n;z|RdX9t$< zAu_Vkw+ICBZ!%7ankcnbxa^*tn01Vw>3!Nxp+R~Lm4p|{mFqhSmWrtQx3=Z9F_!v!;1 z7PGG85E2Zap6H6y!DfshKo6Fvb;P9k-^Id$#X<%JfKi9A^YSdwba(~1YH=+c`U!A( zS#cHm!Oa-C2d4zawPLieI5_)9=8K5% zd-RX@i*Bjc9N&ZFrqG{Mj;{{1OlR0#)dH;u@cniWE&C&YJDA&XIgEhl8IehQ8R_GL z>jmIiPzZ+uN_}vphX_PzfZ-5cbs%ZKjo;;s?mIE103>B}ANp1FS8%{Wu>s=#AOOEw zk7U~axt~*NxSs~-)Kafx{i0sNzp!LL=RlYUMxaOpVqP2Ia=)oV1`;Doq``N(sI)7H z2q#-5>k-1iEjfsnDrqq0>+9rOazGd%^OS)55XYwd159;Tx?=!VJ~qgxi2~!Rr+ZMp z<>ah9B_*pOg*G8|=M#&(a{p{R{EfxkIZp(^0spaTG5e{?aKh-r*|@l(1ZF*oKa66^$p@NFm1ja! zcn#Jee*4meXx%2qD~%rCQ%jIWCK^1j4ZE;2KTbVI*o`TD%^W^JC&0h`V#B%mP=rmI zCQBVb5mxdJ=5h)|vRJn5FN+}5M8M}AME?nT${7b<9TbulVEg=lQ0N?X+pOCM`QUgg zwv${<7B3TedJ@G7jH@hKN{x|WZeKsDpTB*hgqEkle9f;BCpG*80_9xb zwmdzz2p90vUNVx)faYKTu_v|srB6UDJ)9!t zLLK!xcLjV?+=m6VYUO5cHlLx~ZB{)I; zt2m@-;QtKd8zgR1xhO zX81-#s;!qYMh#U+u1_%=<&83j2Huy)1E9ngHAw4y zB)rZe@G>yT{pI1LJ4=$?(Il|fNT3gc!XbjwY~~y}j;rJycxS9W%6LV-<^v~^3Untb zZa*e?1>uweIzqe~8(-yVjD`c<1soqXEPE%BtnnkliGU!Yd|XyiACVhZ(*IqyfLG7R zfoTVb^yKbcH(-#%hV-R7G{PvM)PDh1@pkB-t8?*QTsCCzYn=QGi9%emp>eD{Y+A{- zuRSGh!RV%;3Q81WV*g*ImqAc@bwqYc?MO8>xDuvnHMm>f9vU1B({FEM2T9Hg)$CO$ zvk)Bre#lB|LlPX$V%NjK@Hic=aRFU}*ozEmtUSMe*CB+cyU0i!7FxLA<=#=lPXSRM z{7~}?%JG9~V(TNOn1h2Xz{Oxe(GA4)5Tc<(r`9K2AP52msjDarYUu3j=Gj3%F65)s z=eODNSOi*HYFkF_gb`8XZ)2u841oei83-B1go2KNVAK0gW~JqqJoLHTW!85796xmj z;dSVaz7g+B_zvgmnv6|JT5*7FWAwoA@>HIeU&Hz^+a3qXDKz1i;1S4CFNv5|8p;RN z^AW+y^LKxB{zC+WWtm_Agn}P|UOK6Y+jZgk0k@+rWOR=7Vh`Zqy^>~8=N0%mzuDJqvEvG#;eom)@uQ4iVhWi`%kQ&~EiYbwus*avJoANCBPlNoYiafD@==BCo59E+WE%V4r~j zho8U%Vh0?PBKpwuyE*0w3^!CW_&_ly11T2@5Td(mTl zn-ylu+1e~CeI=iWuefoEY|$(?RDK~Js9_Jmf`Oj$cd^71z%RyAuAQ6vQZt&L7=dBU z*BBi*z3=#8z@$R6#y6k$!)-1iiDfr=WPIg;Ye%SxOR4 zQv>5PA0nC&pg$BMT^XpfLnX!(FN4vZ)+r*SiLxJ9UQ&@VV9+0piCKDgZp%}(Xi^3p zSzzq{2gd$7=jDky7h1c`s7T;c9)R5b_jj&({Uz&azhrn!_R`2eh0aPZQ-qlpO(9H69gQRUnS-(2ZhnS47TtE z$O0tx^;QwEfPm0ne^=e;ZJ|WYed9D(X+;HS6DFfMRZ*B?dx?4i;e?DH)Yg=WyR(Ce zu!Bakv^LSJBOm}Msc}g{Z++YtVOw>)B3o}ve-7>8#)GL+04d17BN?Z}^CS-x&d~#_ z(#FzI`g>SKz+!;2^ZVm01g3Ly69R1W{kt~^bY8R18R!dub zmbIbfo5CIW#Wv8{(vAU;h=PQftyP5!*Xm229smWX`5)Ww;N22*{1?Xk(fu7z+cJ?) z#zO#g0*{dlWDSy+D49coT#?7kQ^0gEhnxglxGh%~{RsOlh?Q9`4g}CdPU9e626Qk0 z!MkQ-gfyg$VrkwR-E@MNPtsm`r7GwA+p}sKEeo0sE$xFdZaO=i{9#n)m#Y(cewF=0 zyzsHvX^0cAl8Fn$DM)~{=hqN1-1% z(mPuU%H#shyBFf1l~ruJ-&61P*_oHX#snaYBdQ}re>dI2uu%ZmmePU;D`dUY+2nXQ z%W`e%1Re1g?Ll!hKQpEQ!-%&B`Ge`E(>S;l*4=XM^&`AuBy@BJAipUs-WVPhVVqe) zU{U?K^c{F;7wAKfo-EeOwzp?xm(j`5der-BCQY&sF2WmjH|U+LY@K8dl=-1C*>b}N z@Z>>RcyA`)b^Gp@?AN*2$Y=r7tiQr53vR?zM?ONc1+exa9Yj>aPR<$!K)Hj1R$5e4 zxvR?N>YQS>{)*Iw|7c}#QL4dR9?0C7U%xm2SxEs;ivZQ{#XJy>nQ-c1wd%unG8fCT z5S$iPdi$rcnxerM8bv0y1-&Y$AeV(eYNP;H@!^rm4ZD2GK=Wvs1veGw0nsLQWY9>A zAtz_eYUt-bt;9J71BCXDX1Zz|d?BwEEBMiYwA})QJ6Izqc`I=cJv=7aEczP1K`=o= zniEC>ku#;RaMaSH4A>1;&Ji3Tauo#i#BZzSAgK}jB}j0TR5`*7m(V2%f=)PH z;>tg;r~$e12p_u#s&qJ_MPTN@gjAFyM8IaX@C+KF zhglSIm5qNA7ha08H2h?M3>BI56R2Dbrz->D%D`@i@IWJiHn`LEb_BRmva-P5*8i4- zhjk!JUy=b5P@-GPJz%(j-(UbL8^ISq;WbDc~B59j%sdaA;1| zJ_Em6b<6aNQ4**{2WY1NQTCL$xh?@ImYFufP7ES!89m9?ijh*T*aYG8R=j8#Et0%}*PhUI?Sz7wGYNM@_ zPq~^vVDo0@K=1^*O)Qp{BgyGM@aMdsl(;yaX>*uMyr-zbVBa2OwlFSEj#5;#hs*j7 zD^o$_^YM26r$r>`=Q0azf#Qgd@m6BZq)15^X58{dn`w>bp~83|PU5C(SEiVni6q`j zd%9as;D-quzW8ihWXEBdv_a*pX9l6!Dvr7CQ%JBEg@f6$`b z@q9p|Al#ND#IuGL&Bn;|7#wt~(816ADuFcPo<{DEA3-FEy)TuXo6wrpOJIC6r`0A` zCdGI^mM6u_8}sh^^0uvavl@%;ir&?E$x%|65_U*fSg>{twcd1P5~qZutKZkJ(qD&5 z)EWOyS$a2i_)rEd2L|}$6&5Rhwpz4@m#Cw+2VJeE9m)G<3OFA^Y3Glb+;IO6nf-1( z*j;46z7^cqC?CUVicUx*Z*_J41XN_tk$}j79F^d~4FAL-IrX=1jrHg1>D0;@aT%YX z($ha4M@^$ev9h9Dcxlp-1+SdV)5Jj`At7!HobpOf=dtx}F)=SkX=--EAgIBhrmlub zau8u!M{_)6m9W7SGlh$Ghm>-;q|+ z?7nw*=Qgeyck}VDD8GLFTR|l7YhB$#@Q!-b)+$$v=?S{HU~NtD;CXo&lE}v?#O|XO zm-sIc;@RY@?cw$G*zS$KRU%1Dm8GqC-z>Nhx%95&H3s$wCft8qD)|G^NxIkMVg3DW zWBEleke<|0aG8#r#Zu(T_I`hoA*UJ*N_Ol@bV7pnXs$vBAG_$2^75BQ!UBG&FtF>v zFSX>IAju9S?=+ceqXy&ApL160%7Vw+@n7t>8Q0MyO%p_Ja3C9@hdwx}S46o-ZeaLy zVWKGZbUn+;WNIuSlQwp9Z;^9pH5z7r;8cr+KJ@UwX=!8roS29?v2|YI4U3zDH7On! zM|ip4js3uj9GF9IE#&lf!3Yj;8S;2!q(#|J;?$iI+k+|7^{_Y=p4>GZT(T6q}6J7NyJ0Y@iu z>R<|TtqY1JdGbJfqTvQTLGVoN6)bjf8CTxHS>zL(g-n4Lv%3|HfYJ zXL2dz>KO7@s8Bb2L{P z>zTCOx}NvHPb6^azsL<*c#VvxViHbQ^~s465!oHCFUskw-g`kS05`WY<$xMYoT1nJ z9aHi3>o{H6f_q=$*2B1l3q=a-|3rCt3G3974wqv0UX&fHs;a>Z9qJ=x)0de><37Gl z(9?8qdOVea%PGYd=SKTQv*HwHnDB^`&(n~QKfEWpHEDC#ayFuajepr{xy$DCf??I9 z~u$^(a;kaL&b!SZ}QP|e{DMLQsG*Fc<+;yTH05T*Q3 z`zq%-Y13?7#ivVN(A=HA}8olm%%-Xwa^MWlX|#95-oxYvq!#JcX2I5e+%M75@67}YSO zB(qy+Vq({QMOggqz<|m5qf9M~{nq(kO6rr%_*6nC}d?Jv}SS62Pv?&L=qAEL2I!$zgWC6&v|l zYGap6<@sj@a65Tt$m;()H07U}XMOeN4Oz8qk$0lDd>ZYu+!eC9c7{I17@l2Lu*xu1 z;Ks^{i9Hs%{0C9tiePXMeGSb!goCA!d%-B`jwgoLciR*`*tQXg%9P~MOc#%hjGW=^ zrJr{caT&ik7X(>q@5sv+4Re?Cz-hX_`Ee%9e^R zAcCr?t=+vsTB0~yw}$kbHHU{hcu6i|3QCqtbZL% zVnHkaca36&E=VD4e>z8M3HvUrxcMHGCD#Ij!yo8RS23MH}Y!}gGeqXuR^U< z{Z`kM))lVue?B3j%D5*jP33r2{2(VMBfH?4XX{UCsp?AH1%HQB*O(jUp@mKLnbzb^N~@q}jIJu2A0sq3!ROegM}8d_(4 z0_Dbobm7tX12^V^{QMgd5)#c_w=fDQDRLs-RFf5G=6P*T58p6pRJuZy;^f2ue}*JW zo1ucrJye(P++}4-3bq@ndU{1K3o5qpD&xk+w4lXx&}L!agVgrkNwAh-*o4mJOhHss zl$9Scv$!A6tn-8YS-#u@t@VnsG8zU3ll-cxxF!EAOm+1*xj|Y99}*_Txa23EL)~`N z9iMJtkg&YeGQ(e%hsa{ z*s?`_W8u@mm>MUYhbyu#&W}@0TfKj@0qqqJ1(Qha!sbD4HdN-kxw{-%x&o--)~I;B zXf$!80|Ru04S#ZJ8mrPX-RWQK=pgsRFU6*(XZ$>LPkdrC5bHP-eD<5i`q)`>_Uqmx zZIqmvy86oQu8KDWiuB!^AAh}Pt2Xy16t(b=`@a-o!;vY zE8qRIy%OR$>Gx|`xIJGH|Mu+HtUfl;Zn@r@J?rbjweN+sGtZ++9Clwcw6|k}s>-rE zYVCuYD=FWnn*{QkXEkg%@V>z6Z9}Ur^z{f?%ww zu1>nRC?2XVLo^IUsM|fa8B&xV?Ps?7ow+_c<%J;^8ezr7Hx^ddQl?MkGd1w(itayn zfO>H7)HA$*z~|UmmWWsfO34KK`)c5r$bb<_|~RY*L>|D^|_Ge~9P**OBJiLX&5>ECCnz z0tOv_=K^m`4R5v(q7}DU&|l*~k8Uqd`!@tKEDP?f|CG-65Xwc2uo?dxan zJpCoHgBSYC=g)Q^^q&~n?Rk59E85r;4NcdS*dimdt7`6BKm|W5)?s zx8B1&iqEohbbG7=ZEt3v8;j!tf1f|W3UvLltdlvb-5kwE=7m5Uwqtz8A-Y!ph2-5N~d#Q;LaQE9m|)sw6jB#m6b(7 zMP1n(4tVtU8K^{-+Fry~Z-M^`20nh8idx=_V@mKHSXzG6*4CCT;!&d4C_6y>M?nQaFoMZt!YBsNrr}rDfCy;EV0Ls%szIl@mnoH5l9}P$d zHpM&T0^%M2=xqXpfHe5>Y)dbK-d;+gNGruXiR`PlzYajhE&rnGI*+?@7bZpJW$@%8@Z*rc8%kVsK=sDCA-r;#{4&9K~UX|J! z%}e{**l$0|IUvahW``6%&*o0gwv@ruqkt=J-kM)PfS8Vs4q+DH?&0AW9d6OKHEQ0~ z-5qtn8==3P&0^K2%J(%i_!jaJMJkmbcw&#OE17ox z@A=gusb7UW+}**@@eZe9E$ka17-%Ga|2`75OgA0U0vmMoM5gstGy?g)42|3){+&+Pi$$f45n%`E|)`;7& z6?3Go4=K8vXsIkEH5HWMBDMAP!GVD{f`Wq+GBf}72eg0w{5k&0ze@h`V{Xao3y<`S zjE-;LXoy+W?n_Gto*rqw(7^p}zFu!nW?M}NrfXa@BJTJg=)n`uMO|1yLV|u`P%Zi- zCnqnDw0`#FP}!AY1&plvh(*pb8zH zJE1ZusdMpH@rV;qj$4Dirp~WlsbTrHLBjfYsg3K2+Jue8>(C~To6uGvSXA_C{&C{z z&)mP@yYLcBW*XkTTlxMy7O~HeV1t%J{y#Q7eP3-zw#oIQpwoaq&Rze9ms9>He~%ue zXJyTl%ZoxS06dmu*xu}g^vIyo8hkOkhq z591f}^s5rYA9TKEnFl8W-*Pen{1FLh3gPlE+gM*`h zjMMPG*TJ_8BCJr{tFMB`=gI};c?P) zR8A=R6#$;^f(_7W-iv)hhiy}?etxjfnF6PX^29_Ur->rv&wW(myEgsk2JYV?(80qqhi5p+ zYB1H%!1FrV{ldyMIeYfLZnUoMk(%szKm&=!Ni*2d#{-l2HXk9`voAJA4(c zOI}>YijStIe#?3suchV=T3cJQo0*w$FfatpgQbS;etzOd z$KOqypvxDISt+xzxAoR+m_NNTbiK#;9Pb;|r$T#)f6QMy1S4TWL?9sZr;WSEYwZedGHOBr~x{@SBgm8&+YFBuu7QjvQ+-=KVP5)_1tg_M$zAl>@x zSHU9gUkG7)7o70Et?K8d7Cw&q8i)Q{3*gNT+ZckK78)9wo{^DJaCXO6_rIH~ zxghuDDggQ+Prbmt2KJt|W}c*rn{VFVOXlLTNF^k%D;g<((~H07*VPC=B_yr>{{GdO zYp@`KEe^K;+RXLJ*3{V57b;0#TV**q5%+j^Pg6N>3Z0Z3Gr6XZHASo%7ft=K3Rlrx3G~fiJZSLPnM#u{ozGMbz5l{7hgZj>xrS1UbxBDT6*>QXkK}c#-z)xrc2r?y zl9HIN<{&VAJ|X{ixDqNU?=_XB5{(1ecTe;O^fpVp1B)qzwQ`nWIc9lnIDX=`jv{Hz zpn;p3E?2TiiBMBfDS%)l<)b-a{G*UfMf7Am;Nn-}+lFk_Rv(t+X(h zz-a|DtD^Zv7uB8JU7a)@bFyo3LBSN{`-nI6kTdb&ZAq^*oC$k00`_?P z{QS&+bEJ~9vmsh66*RJkR8(+8MMozjCQhs`#qUVIAr!Icdxf@?mYa(wl!fc->-%eT zzQK{nAJ<`VOHR^vQ>(FjE+qw7Ew=?-RCIT?*$W4<`UQp?NZ_G`MHY>E=gu848o|G< zk^Qo%sY$N4GknWQITZ?Dq}T0XVQ38v4X>-J%(m>`o%?#kF(^ZH5S4{{=lRuzAR=c6 zHfA9o>GX7qtzQtW>|>q{sGLkpK8}dyWM_ZAUdnz^Q)f%{wS+m-edtCaZ7=aPELkt^c6zSs#84|qMpXFV941ScFgt2bbYp5$PYri5Lyn;fDpK(}vkadF?^`FnjW9UYz4lNV z&%^cQG;>y2P0io~x6e-Wc*&`$Q2zY*^Y`zhQ^RN1rVH6?rF@Arvh;LYiFDpki5U7q z0oOUGK-oGtl=b_WBOxt=V|mG{|_Q z6lgEw=}QYewt5sPR7~vbSY>2n+|CYd!90;nUS1yT3va{XkG1-GBfSI%oLtEl^94K= z^iGo{xDZo$!3Pd}a?rpP=@hWsUaKp(=^#7@f39?`Y;2$k3kxF&YO2XI5<;6POssJ` zIWTixY&lE%3a)&;a9L;@8b$!W$@#Fw@PaCBup7FKpeiT#^UNC=II#{ACC`vCh*N0PG~%YZizVzEUX~dFLHU4y~jLg63u_nS8Ale0X0fRLIDtgpitccDgsqY8$IB#1}u| zHm|qCotT__0;WIE%7OuLw7cGZ^z$I}#3O7PpIu#u0EYr?M~}g|#dvk^bLmLk+tVvG z0u%vWR>F)dlc0hE_j_W4TdE!BZ>p;JT;}h-F>j~S(9l?RZvw4`@bSUIoig7)_;Wx@yS~6s3XY)FY-3kc}y@7O(Chk-MpwTI0`LD9GIsFr{r^LJGYb|do z#M9vdJ2aFhMc);Md%k`=U1J^(d8Q#yefREtSUkt4x%cwv_jv|3HVlZb;F?Xws*#Q1 z<>gg=IWoY;!GQ&Fb9=UqNnBjq!o?*PtaFfF?R)&4{U>SDGBAjfTki_*hrStaPE(4A zmq-T9T?tAaaiN=>Op!ft`C)M$?%&44M@Pfz>-|JKgr8oy43$>%!TogGV7Aop=OTU`}NqYoq~TxjI*mlP#sG@cK*Y!n12l zmx3bwJjoXp78Wl7AW~3KS^eG|2AgO$Pft&zSLbYw5DmGIU}vr?EGpkMK!BI*LAb%e zhYkZMFIf{4Y9O1s3*@5-$jDd^VrVHTBk^cOE#N4?PL%_9FhGseX5LkrIo7sEml?M( zx_b*K4$F=@f^Gbc=kTAMy0N@@gJaxKJ#X{S)3f2OOj0H60IU7kIyN@8*FZlf9Bp;4 zUrNsbbd-~qxBMJI=ovo2cyhpExjp9c?Bdh}IPVEsjd~KY)WU#kj0RU%7%ouK=PCLV zyz}_n*OmB*l%yMaMj@_sj6Z=WNf!%cqRa+o$dibOh{oQ#n$MvqD#d>MC`QI@8c}E6 zE96W2_M)Y$>x5C@H`ho`7SEB_q`Xn}o*Luuxv5k;?$6(k;$7RcFLu_WUcWQPFM1Mp znGS>z(#y&_0(3FNDB9%K3UVby>kv%4I%V>J^Mjp*14{@{j!Ro5{x>i z#RzghF3}t&i)6dll4?gr0vk+qCn6%1A4hvKdIs2*_VyE}S(q{knw<~qHl*|Ob0$$yDsWGQ-4T|TM=#_u zFXwFt|MJFUsa?SJB`TQEs)92DGcdoxZAj9*rcO@kN%zFWtTUM$X(8tAs<&2M3P3Pw z?kbGU$`bVRdp6tno#J0LJK#PIHcN1N=k;ZCuWIydV0VP z31h($k|^YNOpF=N*8KO#=n*7Z`!#J`9IXqr`O90$_nn+18{U1fv?`GGW~&NnZI$5C zy{4D)=R9!{`m#TFgF@0zj80N5thDqdkWE$DSy{M1S1tdpAJ4zpy0C%S-5cTowj_Tn zh9de33cMl7E)v5Dx)s5?=B9Up*HvzPZzeQd=sS{(%r{W2X##PC(WI>0f4h(YGjw@l z0|hQ%7{!rupq0sWr;^~kYddsddPDJ3+WVdyHdKu7>m~(2B=75`BY6=sk2N9j0 zEPVgsm)FE);?YlMg zTu=F!Ynohycs4w;k8HmlDM2hLMo=;$`rgwsV!yAVLU(%M{NycQIeI^T zA$Rwv8&m2+qGBeum_O5wjF7=5wtV#UFO_Pe5RfPzJhoU6+en%Krzc&mC<+UkG2sF` zgBV4+fh4KKuC#b#t+FQ0>f$u_biaNC!DPC_ElU~|HDGCLdmlJQ1|ho`^0w7sLElWFxJl5NFfBYnblud8RKci(8yHJ@@C!dHNGz6&@+B4}|rgn{t1KMxj`UY9vh%1!?* zD=&w+;_QC^NEUixlnjk15lrwlp5j4oQ3)$Pvh<|7n}N$*as~Y5 z-HLsR-^+MBJX*=Bw!qd{CnD^Y69uKC_1J3-5JyzYMfO4V3Zeix*a3fb=0o5MOHNE; ze?FPo-1J%g#ktE&{e3@XW#5_IKZ4Z-GQ7{wMrZr>Al0I7>UD`-R0YSzqt6if9865C z;p@ZNbxuz!Iqf~LTlcv|T~bow8GfHYPJoY-aPB90TS+GHeVv`1MQ^#~PbM`nE$UwG zOqw~&`9E($D%C7qnG;YXAwLO$D$%!ZI4hfWD2j?^k)=Oo=jR7F6>Jyi<7ic76ci{S z;*Aw;U}15936%NR1XfQvpNoZS4O1Zo%Vd42yXPZ)UEK$#R0(_2IUT>ZYG4k%AK=Y# zGDWCt5t5R!y#H=%m&(M-irL@KLLoj&*VdLA%l-SKaN;b55Q1B z40_DCqhDcC4vcUkBc*5U2|s%N;>C*(AI3a}S(3j3Q;vv4xe|jRSy^5=Hf!g)WoH-8 zHa0DxT817=Z)$2#;pqH)w&|4^>+&^IRyT=hW=T4C>$pVJSBO^F)eZ(eal;NM7NaRo z+{EEP7wGKh;4nsuEKM*Bvzy^PqyJb`w)cbyoa8Mn#zIx0>}qPc z*88(&ZXSEMSNWYvgL}7XYjtL&0#au@D-%0plx>kH4Q|KYl!YdU>M!^N**4r%2%akd?0YT~kv8 z^>(q9C-Ra!H6)~@-UL)s5sR%~2RQs>6yR{@S5zPqCv8fEXd4)WL&lk0$Y^{AespN) z{i;o2e!ftN#sWHCcx+LTDF%vHQY@T#4BR6UNdDdVlN{CiOA>pVT16nRLNA4=-=!CC zPy7#1GGGn&DN#ex**ACx%IKkr)#wl+aIMuCCqCWBc3n!Hq(xf;_p+Pu_JIo@YhZxg zctg+XzVi+Ht@}_akAV7wX$wXC?CdkZT%q#OaRqRvfmjBiTH@r)6ebEiO)D*xfZOKT z-@CL6%_2gMM!LFY`%Cn3+uP`fyvU%M+2Z`T&S5Dx*QSww*^NY)@N82Zb8|!@WO-SG zLgX#fNBXj%@}IzT0O9qq{rF%}-%i z>{6{w|7)_DmP9h{8H$w^Neujxj<4@+LFtKVWxZBs*<}P30UBV4Wn@GdZhaz!>Ccai z8~N8DNL%K|hvVyJW=FgsC7UK)_$UUXv@FFvHvuwkoX>xD{EL|E1l;a9>*-_d;1$v( zM05^iB#cey^!CI?8Pu!JKVDe1?v5e`b0_k(-jmJ(d1>{($N@*Y?M#YN)7s)9BKS0T z)TyaObC|>%n`BAhmLX~+q$x~-g67$7Z`6fg;0Gjv97vEqv+jRax3IUzadoBZi8~^i zalR`sDgW>xd$Xre6Ub;t7|De6rmNb17| z@0yvt&P>t^>OwcSTRHb4PlXP!JRZhb{o*TF%lCXx+tYW_k3?r3d| zg48$Uhi$(Vw&zYrZ}0pj7?P{nM>B#kw0qrs?7>f;UQefRvaxk-3}SxpWWNEHA>9=Z zZZB`z1;0chhhr7c@YLkdWL+Wd-Mdpim!+eo6i&-3>+772c>n%cu{`+J_4CLKBn$}{ z7;Y&8e^XKl)Q2B7a-wZ)JOEw8TtR|J)HXX13a! zHoQ1#&v)~vfBfgNzyCP~?)Ulq?}UGR&Kqga(2PC9rTe6zVrpb04~x^WWj{l?k)EoL z6jkuat`dsoOe~qa&|TlXlw-3^A4a^c(4Lx^q$+X@Tw8P#?sOZiWjk2!e0+?{^juFoCVD~?w-c6&3%^wp1BA^lU!oEsV9XD@mDOsk>k>(E=5$(;ZVa@Otc~S=++JKD zBGkp>i(=6-c)YNL-!PEXZ<%^_b3kWwk%V;YPK z3!?(*&kkNNEQu)~#a~C1iJUzV!QE1GyD7dj4-BJTP=M|*Ky?LmoGB=O99jn=7Zznz;%}{c1&xOEdCG3 zeyslfxd}SK&c8>NL|jS9dLFTif{Yn3ZiGWmPp@n2RdSX^;z?5M56%3|-}MOzzsNxU zhxGb?;XmCcd-lRbuIBb-m6eFs4Q^kMs!`a3+QiN4UC+;zT+i@MB|(8oHiYIV=oUp3 zA5=)(o;KdMvJzUbAfiFJ(1<*BsREa-!MoiiDY8v`9ij zu?yjeBW(v|9Af2-5tqFC2Il%YiS?n4>rf8$t#{$LmHL-)koUqQlIqV)c7VM;>xy7* zvU9%KK~`0ezJ#Rzhp-uiAZ5q90UhEFW%cK}eC;oAP{uiSG!y zKf>dKDiKYg;!S7B(Vbmlm5Flm7u%}TLaSA~93LC)T9YtzHgN%_83osZ((>Fc{Qi(QTPuECA18TDT zQo#V(JT|D~K2)#Izsrw^R+V;kMuzEU*a);ySBD4sEd(M3$7^2yBCt_DhWR5#kG}#m zC8U+O2~wNxFx)M-OHq20#+a~_2YbqX0cCbhPbs;+R#y;N^u(Bt=Lh40hE-7&hl_+eBOsHZ+~5~15C$DOmy$Yw*}D@C)ZKOn$eW9(Dd|UX362ta_DBwvn!pU_RNIr zfipGOzuK?Ox`R+}T0E{+1TdzruiyQlxdM=S$f|`N?1tP7^ZI((3gFNA%bE`C*WJF~YjsMEk(^R;(B_rfrvv ztbt55c&nf_w;S3dzIPEWuV$fEo-82mBE+ufh`(u^gN#_zv&o z1DV}3uN@Z|X~f1|jf4b=Pv^h@63{8lPrb^LoY&oB`*708sCYl&N?kpZub%NPF@{q< zGz|7kpiyUwF#tY>mewxq83UY^?XEI8=I}1Cn45+s5z_qpqCqp&82TlUqnm@MTDZJC)C6-P@PET|TU;q**Stb(b{;%xmE zYum*{n)sIs3~TEgAGktud}3U_a<5%q{qW3bPBi-{%C_H!2hXs*_h{wn(x&M)V_@d^ zON5eIlb#OJSRB|N2<0dgB$|3<$VHn)OFwP>TMJ-EPTt=2#t0pu15}9F=9qDL58S-q z@qSYvmx+}nL}XgAoXfS&jPn7LUPIg4ESW}xz#jhKnA^PMusc6g-QO|+k!r^%dFO1 zkf3U5TLuoMJUn?U(>5@`L1|8WYK`C+E}MV0`ozwy+F1Me+MLMorwr|?)x4gcYQ5}6G}??9362md*d)cP&D%!)BwsEsAE1Bg1IbLhzu6& z-5_9uK$Msn7)aI=^Q$wC)&P90Tn|wTF(u#J$w*I+RZUxc0{JYorZH9Dp``hS2~mSx zZtW)Iu{08YUmoznoVh?;YK2d|y_Bk{a)svYv9rxb9_8MW`gad=Ghgh_%0mAL1t=jx zhj!UjChP4p4C_|!!Dj6Ixk7iknbqOG6Jr8*;Lo3}(D4W@IC<|K^gMtAep7`@y32qv ze%ID^C^z%c|G&bg5I_H-3>(P}q(4XR5IH^FXbUWYi;2g?%b>uPmib%oCP5+my0Q{T zdaPn#w-M?3djF!sWEka!XZmZq`xtXG5I7<>Ex)~IAtt5;8aohz#VbgF)$$I)Uz|T? z5dAA%>B7i}3v4rhu1_(Pm#;F;$P8+(U|i@wgwWaV_=r6fG{|FNPROLt$ERNRAyKoj zC+~oAPAbJBIjj_d@L1_&3kkc50L3w|1zPn~A-sX&rFQnVq*iB#Ye1z0Lay87T;GI+ zJqR==Dhx;cFAB{FD705!kHNMqXllwYTSBa++k9D9=aAAMJgF?2{U7b=r>(82J(Zl~ zWbDA#kKc|%PLQ9UyQ&=rMyKqHordNhT9c#Aj^ej0WDqK zZa7b;7r*J;U7UVRY8t=@HEUqlxKmK9oSf(=pLDrJ-DL#v^+g{0l!#Ze&hN9iva&Kn z?n*(hj72w!k9dD>yev#>#)LrUKqd>q#WZHZGdc(-2?+rf3(Z=g=@|u_Au{7qTPp5x zhzlh%JRwpE`s-j&by#Q2zEv}bbqPql@O$HX88~A^aJka&t5*7(_3M`AE}#Co2jvS} zLlf%GnfJ7ik&M5070ZZ2o0`@SudipJlhn)ppV;fQ^#8$L6&jU?RD?~|y$^s8imA8X zg2Y-KRv->Kjo^r&Ah6cyuT}s_uf8R*B2v}w^8#=m*G?(KvfkdxHO|%~Czb7JrC}A^<~2(V&(E^hM}f zfcCH~aDg8{oX}frVGmT2>zGLNLq|AG{Ie85nt6Io0ex=XAhf7Oc6`hVCLA}jgv~#X z<^kK&+TBY*gCu!;TmWpa zAAs#B-b~GJFfez3BE}ePre0s6!unExy(MsA2zdwB!Z>wOVq*BaN2AMA<-LHzyLsBx zN^ChipfpjUc})uKKpl_-6}=saigJSFq@yEHZP@N@1xMi29?J|X^-`Y9@YdEXc6RdO z;uIvO5&YEDzyGRaJbENdBxjAdo-fZ`5!J81e<914{aA0Gx7vd%>3{B0q9ZY-hmw&2 z!ZuaajSo_YrC5)LU4a*l3r#+N&g4C|j>F?ejW4dw^C%?0B^|gKhXTN`vuWvm_vmO3 zac5XBe~Qyl?RoAay1d-+5w@j%-?;mK!dJCAQ#@5WnOwnXPLHT-`}ND0spg`;7dYQsv*%cmT$I=SNa8} z)X6ACh(V>9fgs}NRvwTy)>d?@z4Sa?Jv{^<1ForNPJ4udjr~I0FTG$aQt7oF%F0{Y zj_t|t@FoxZt{HC$aP9%zo^mjjSuE6~{eb1w-{JFUa*^4$8;q%(lqhtgG8KD|t8Z&g z0B!o@;>;ckT0K8Sk>+)LmJ6Rw7jkKS2}&rq+oW{z4)e0J(LFpQ92}K-nw0y@f&Sar z_yPg$sRRJIuwE`Fk^FZ+tS#pCeFw)L!@rjBiTq02PbIb zbO5-7q>z^5Bditg(pwWJfPfDn5`k$n(aem+2$YuhVj9(?(e$%@o);^VFbPtYS$p;R z&SX4zjlb;c69egZ5P&<7+F{`A-_q^^-89hVuhYF4sVDv;=)#(u)7SZNo3WVkBUDtf zMZ$qTjOA(jnK18@b?0^|MV3%bZ@#SecJter$EgWX8Z{}G3!Ugj)VE6naznE9XXQo+KWJCeQh*Dme-CcS1$RF zh)dy%e}&6ShVLVDQT!|)n~ftNx>>LFcz}TO)8=p?A=Pd{irzrF%L6tzU3N%mFq8gudj4}0!^*XFk?J+H4GBf8J4p^$hJ z{VDVr6@%743MghEkWnGiNzzWh8k(NQ_*a!l+R{?w@#35EJ55j4+Pzq0|6N|1k4pRf z#}hghC=t4bWeb%x*D+66rZIT8P`^aO0P=b;qf)t!A-KpXxWGB)_T;FiP1b_O32YoVA z{QOu@qtQV0!x5ka^NA8VI#s~b@!K?F$FJZ#z}TG|Kw)bt$n!@8cEDG?a|iW9fD|TJ zKbrf|}i*A3wq%Q-y9Od|X^XfDD}<QbU*!8Jz*ihhQ1MQMkYqv zqJM*`60QFiP?b_Hnu<^zHy-BO^_%S9RPH2^92Q5Vy+#%Rf5S?!jIT$uNey#K#Bt(B5~gh;=4h?5~K}~?7mggTF&@X}eWOmolUL;%; zkeJD(qB&{|SLY;xT>O5MMn6c)K7SVf49*=P5IPa9dyoN!?h{==zPd7As0SFw+0c04 zX~46iU0hJqLej-K`JLD7zw=qz#>SYhH}BOoOrif1Ck?-{DNM^Ts#wz75ri;<{bL7Y zmL?A_|G*Uw-Eme|7gqo`|D0aXI5s|$ciG$5D1_J%!fkU zei#%cthdLwSDCRooDl*5$edzh8A{aVqQ6vzFCTwTo2^~p1hb19!ot+B2ve1J%KK)W zNr%$M@%{a|(?tY`{;Qe@I9T4>!K-CS@FUA&UZRAT6TM>yYXYM0?(A^s=c+s&;^S)C z=}=^4U7B3l*`c-=6O8@?A#onG9q`xD;RYtA?>W)Y{};R(|F#?p(42N^3E z>JkH~GDaIW)cPzT7}8A3;Y>>`Uv(W;$kbm$2J4=S7yx4|$KD2`yuZ+*<6Q)P_%J2f z-6YS51zZ7Xg&k!Qry(y=Z=3`|hsNueC=9AM9dIijzH1E9oBeNd*rcRifaN^PYfkj8 zg@kf;jz@!tIkO}Yrl!kdQ@DDbQMZL@&1sd6%Y`v0ej*cm5U#1^GC z%t{dpWksNAq3_g{G_nsUcesgg3KdU4(^(AQA04m|D0U(PdbaG79On=hYBak%QH2P_HN5t4Xu8x1Q=7T8iAxbNrgbx@&hY#g( z7)FZ)v@oPvRUOTVa0holIRQG+WBo7ZnSc{*Yx@q3i4?R6QbpAxJ^vAYHKqes2Y9~o zqqm?JLd~{%_L~!=n70Tbw15mA$@#u}nWd3^Dgf^0K$fFM#!Ecc=&vp-LsTwmZB;p; zqY@;f&q9ABo`EsK=8#Cpc%iSw0Lhu)Pi2(>`K^(GFZqoXDlgx>VT8s;L`gQrT}|~4 zlDsz9mViK*Em!FKTGvegi*%#NF7xT^>&cg45ppCdDvLMD9QAee{@{TY010LwS3sZR zOJLt2UhUu{-D2L{v|Heynl^1Y#X)cx(8G;&U7H-)_&8P`TH-(#iwd{WGau1gz&_3W;!(No5W3qelzV zM(78DhDLE@RlctBE_HY%Y_gq;ch=ehv~&`18H6!MPkuj_a#eqPAaUdHo3Cc>7R@gf zt(+Y1H86B}_qep^bC1-ubJ?qH9`==vPAisEKS>x`57G>YvC?={g}84w$)W?J$;pKr z6SsO|-y7C%iu3ay^4X8vg3~Csnnrt@*`~AGRv7FRK9}n*TB!$lZ7)aL4u)CI-`!~z zS#v*A(ipj_cxWBPJD2|I6=vY;{loj3nzWFTc2-YqL@KJPUSbK@77fQx_JWs4mhpRQ zUW#YO`{*DXjbh*ka%ef)yZ+P_KK|jU3;RO;T}tk>cZ_P(|!me#y(^aHyAN~#m{B)TKmxu zr;lQ3sfPp9rG7P{K28D0K$iiCuB8=a00 z-O_%BYT4zxE{=)ud*(w2 zsuIzQ3)bkPFgAgDq`A3Jhe-wgG`oNt=L;W9FFidhBI0^j9V8?ws)1`(@}m#|YIQZ^ z&Q2LkJNqu^p{}2nV-CIn-kO=r44CB;jaA&xn9e*ooQ6l=7QMdi3_KhNr)>21rny3j zIR&FMoblj@4vy#Or1IwKXD+siujJ)8a8OHa6OUq+Qx(o!oQZL92Ae!Lj_)a25Ku zZ$7U-q(`IU7l0R=2`D@at@czz#k{5Ay`C;z2QBY5)7RVM!`#=y%tBeK>KLsVObq((S0qlrT4ISH?xM3(+1J=%v1aPeyuX;>8=0zdvv?O zrP5^U-o0!Zzv~ybE-vl$&(8r6evYG^aXVa>1yeb|80^Adt~Aw&&pB945LH(F~FzmhnK+scmSY znwc3UVu9LT2=lpQwtl{QeT%AhK!qN50rZbp=MX2D>+0Ebjn^^J(2808wliq)ql~8( zUR;@fCw%Yez9bx_gNcrOi7N7PQBkLRUIWw&3_PH65&?U7Jl_)^Ofe2AUov#5 zb}=My(YbhXa!{c#ilS#=@cHLT&XY5DlnpRS#}yp)r0p;c#fZu}*UJF(gwr{|;jBM@2Uwaj;U; z(u#FXOx)1d|H~^dN$8uXKhfXMx3cRLty@a>;GA;9{R|i_z$r^@67p10(Tmx}cI0tmE&$iFW)4fh`NY3Ti1a>OU4^3bzBh~xmTuV=rEOq+-TJ+?Lr zJ?v$TR{>4)SDOb!e|?`8Z4)3O5_S2~Z#HM;hDQ5MK=kgYuSgsFD(BG`NB0 zN{os^PUSqqgH!+M&(1MCNQoG;42rX}8X?Vv%=-CdbG40vf+V{8x+*<<&^rwp+-RrTtr8mHU6vIT>QY- z&US+Fy}e1d`R+aYsZmIM_h`>P5c+;^i8Q%a8N*@Rc)O2J-!_#Vf-;cm`TlWLWUfS| zxn%3p@A7~I9;ScbVqXDw_-c#kH-X?c!r$3>6;x=g2#NzU4yn<->C3oia`TR*09F@e zB_yaW1UEgu+?7qeP2K)bhL*G&5FG~`b)@_E1}7$T=;6(Si+ts)XUuYia6cLv?=pyr zzMJq0fe2Hmm}EN_;`z3AOjb>eW5F^4aE)Q>Um9nZ;R^8pqJrXz3M5@4e`&ZTmh@g9sK}# zBJRi2+0C|Ha_H!|zph!jtEy_!s7DG4Hx7<NzjSEJ|b$$IEa< z9fd?ok?{&Wj--Zt~t6m`+;wNNx}Pi1%e1)5VIJ@ z&QxO+ot4!+&u|8vjt(Ah_{2nj7)ttXIdk)yPo6lE(pmFUj(vI1wc0J~7zM^EL9d?b z8Tf!onq?WO%6+|w`}+A{ z)JKcq;}0px>y>ZrJl{}3iKG1(pUU+B<~@pi_~6<7@`nC{>8H5Z=hR5Al5}x+YP!-T zd0V=F>Jv$vvRQF^o#{zDc7HNA&wY&B zr6Xh0`rYC9=Fk_3iqt9h73iNjuP*t2YXP2I`!mPUWEj`5^niMRNvgeQfSFlqx{pOr z5Pbg7Kr2#?>z}8fUTEtna$PZSb;B2@i&SF{KE!f=zrhi|U9~e_}qkN46Wr85s|BrSXVFM5##Y z>8XSo#pOxa2mRxOg%TEK+-W;`d2Z4<`+)_7I6zKu8*=Wb{S_jgpRb^}H->d`Ade*$ zQ$NQULnWVTOFS{yDTBYWbJjP&K`@P$Y6r=X;uAjn!BpHrv1GgMJ|%2-_o12|1re~p zM1|_qYY~397G*N~WNAs*`i&5KysvA(>9vGSFgxn{zEgnnweU* zLpV9l)j1_L!VYrJ)bZo#si%$IropqAZmR-SawZxH(W;)zbht~z#V@pUI%U-_KT_a) znmG}tp_!LeR`#(IXz@D(Om*HhSudQ*?M1ZH)?_M~m{i|hF_X@yCdA5YgGKz&$7i>; zVTzoU8XHRm(i1Q77k_1|XooQSH&@27p#n*Ml{L7LMCBQxcL(C%FYD&1+l*^#lQ2>6 z1(a2lpg3{jn;=wW^1iGV=b?09tk<5xBn2S?T4UR=!meJZ{jnfM=+}l6a7B4T(i{nv zfybOfIO-NvwTZBG425MZXmysC$E2Ooo)OtXm`BKDNXR|%%ld$KN3tbv1I-ld<`%cv^bt!;x6 zqJRiUcY}m<2`Jr2i*!h*lqen2jUXW?(%mQ^-3UmRbR*J8!#CHn$NS?OWB=GgA6bj* zzV4alJSGnjktGc?^F0WE@Pn)^q;Elsg&IJpLCHE-DRBwTZae-T9!Y?&xaI2ycn;0v zZ*Tvx?i6M(VItu_dGgkHB*%%DU4(;)351!H6%}_M_2*m?NU4HD>3|MJc248S#YxXc zfqj@zpEia67;Cy~qNlSo>A8$lHYDZ>r_Lk4p1%*3QvlzFVZoR3u?pss4YHf^VeJVb zppFYnK$Zx0^G`|1Ec4EV9H6M^$SMkPCYpr=M&%!6<$FQ?iB;;#iZNdD14&&S*7F{J zfjgWFf8TmY8_?2R=lb>YSM~2jm~hn3MuQdUY5Xe8RvNtwU{;c7XEq!qgCnoPlx;|$ zv5|da-iQ0v?TnVbKF}_PNW(#(CiTfkO5S?=k0)0+O@4IjA?Ir|{-do|Ah?~-)VaVp zb;ySmHa9^NrFg*l)2OnUC>VCbM7!PCIIwr@+L^0D3>B=qC%ZCB1E20gK9tY19GA%i zi7E^Q;DX*J-A8lP>CcZlcd)&&k)T4lrIR|C-r?8sx!HuX#k{iYU9Cm+Oycq( z>fXL!(8rHe)}+57^oHCRQUdg+Fxd0}5CljRDpdQ1bl~M$+m@+>-1(ZXuMDc$o!1;+ z<2>xhAN?T2&aU~fon7U>LoO^Vc1$!)<*NgrO`f)`-OLv6*42YJKZwVF3&3vjC&)+< zNsyI~+p$@=IH7eqToZ=WvHsb*VWtx%=F6v4O!e%WfFJ4X-WPYN&U-82H0PWCo}xGj3)$l8K+wZHcVpbsq^ zGD97rb$-6SS8}Tsb_9~wI`|+xH}I(_LVM*gtRy3YrC&$%1*`_-hat+JFiCg=qT6~< z<9l%WB0{pVSP^-7c{zb{+8zNPM{f`Fr8@?1uDJGAULHQYi^v*^d_qEQfuV9faG}3= zU5rOsiyl>PY-kMslzji~`*Cw9-hE_W);%+UV3fuhLNG18~ zb$Nwk;Ii;mRfQQF$07@UpI*K?kV18Gdc}`{iT3$(b3lPLGkB*jIh_Gv^2{qM)&>Ro z6He5^^*D$bT>w%3;Zd(F&-|*su;_#XuL(SufVQ3vcugQT`&?Frj|8p}1zuyg=J@Pi z_&BXF9u;b7y3rBxlBT-C`V9)_bs?U!a!I+wfy2yyTOUMGZlT%QHT@zFYpT5; z061S>07%eURu3GvCtd0!tYV<#4I5hfzP)po`jIje8ebHh3uma3PSiXpa9>(_Sl`)j z^yC>Lz-ZG);U+d!mH#mnT2_E58)Hy!+~v{g3!!S7Jhlq8v~6^r2uPZN*IK zDH`e7^bGMxSSGYT`a zpqe198sd0!a<###RP;UkwYfQx3uCXN0bjl_0AC?fI08*hWv~lu;A8iafOZCIjmswWZ5~D&fN_HOC-00Nj<8k0AU&N$vNC zzz+Z6)br;t0R;s#klyg{B!H=e>2x}zIL;hUa#ORh5t0j&XuOSzGJnP!35J34*|R~| zK1RQ?MsP2Dtnvk>=jBI(byLq&+smVT)D|4RojU^qG}dsSRtpI9bJ zQKHsf8aJ6NI#do-N>xptRt;AaFYY~5g+RCkmNrWmKXhenP1^mAqzDmF)l;=N7xw3igRruWq zIT~9bX@fS}$$U!MO@GzOA+w~kmflMPh;}?Zg&@`>Q{A61NkyyBb_6wcO zHV7ACG6&KGC~G6RyNiKOfu8-XDkw~)Is7nyTnFk5YCg`=8bDqFYAjcMMhq4jT1xj% z)~CkC%m#X58}p*g&s-+0eYYC%g%2qQeW zkCRt)WvtrFE1~os2xSsZZ_oPxDzK!&c@9EX2ir-U_h4k7;}`sWPC?$^ax$MGrKd+C z>a8g8_N^$=Q{^ZO2?;jHN1CDFrL6qP*uLa8H@6)GG2@f_Lj1LN@EFL%fy^u}u`cI= zi;HApI$~s9pj7t_7lpdKmo%Q9(LzCq7y}9*Zhui>J$#tz*OVFpPDEsYb3_#?D-H`- zNh7Hxyr0Q--}_d70&V?FWLrBWr;C5@V0gt6CbsasPZw{20c!@sYj+0*Wx@gj6p{J?LGH(#_ zxu!R0I1N!qB8XqDf-iwW{k2^!7Ercx042#2zz!O3yP#C>=u<9}gr_ zw2i6CqQ-R~rCUV>;snb?n|v;^jr^_0?puLEm&&HSe6aZ%d;p~wU!${|vNHAW-`G?l zBKOw^QWiewE6v;hE<3|Ba50{>oLM1hSS2emz5$Y&b#hiwZL)MEU#Mw@yapJNr;% z0hBYJL1P4vzh6d@@ZJSpNy)+YX8~x&K!P-h%CkE9J3|1Vu+uXO(gv@3WIw;ka?kI0 z@9*zo-oDMY7$?A&iYoX$jGKJQ*8GQ%g*Ls22<39;Ul}lDa0y!`UkJs;Anlzwqshy^ zQL7wP#m`!Oa&vj+3_z5-(=c(TrS-nLninu&VVRkk3}Q9K#cayyPo_4mAicn!o0~Hc zW2a7ql5K2ktcp8P_4yI=ZN!3!;cVqGKG*n%Fii(5f-qfNU4d5~3WCE$;3&1O|2a=C z*?pnE)La+j=%N|!^^)q5a+K~gY8PVwv)Ou}liB$}7% zo(O~8dTjSn4BY!`;3)>fa6EvVf(A3hV6uUJ64rU!?L*-m66D33&PdW=Vs7(0H~q`| zmf?|z2vv#3Fr~PpBnr|o8V-*8D(O%1Uz1u`SUe`ee4MNZEKxX0tcP`#YinyJa9oeM zxdU=?7~m9Orq%7ihm4G9sc?dp_I4DumsP%%mE59U=NiU0@Q{FI>RVSQR8&;tcy;c& z=nSw#SlD$7@qlu3gPGNHsJOW+r%w)7`v`$QBcZQPPA=rq{M~t-<%yy06a9L(pwdzf zG;Fdvyu7?9XlP3lhCV^b$;4o1j2s-I5m2vF?&8fWSrS1(2C!8DHWSw^v-OmKm(OE_ z3R1({V~i*1PRo~})Ks|Wry@RL3%RBn*~>fHWSrZFUH4%Sn5Og2nC93Pj)nszWTA&`!~e)xm} zybgOz%Ic(Hc&J=ZNeRj5*aw&zuoannrq&@CxMRRf8v>#z0=&B16^;J|o$7U0jU$?9!l~O`~XUJ+w?Z84()RQQ( zP7`i;Zs=m(OSq}|KwRWpPij%R<43QOr-(pr9aB zsMZI=Kg;~~%_N}fJc3>`f75wqX9pV#3#+}ea|s^4tNktYnQuB7?+Q~ohqhwM!@)43 zsm=pcF0C#hwRCn?)^n(_1CuB-icC=L@1K+HDT(j( z_3H44fD{A9=g`p5hZ+T0+0RJN!ML_|LBTh>q(oUtQWEhG_3K=|!1bs06b0Vst*7)1 z3~J@&{%7QK+lZxD9Rb(89&f6NFvHLr&qiOs)AG7rp5CsLctEVJ zt=&5|R&7u!2WU>XVR>*sYVe)>{QNY+3E1-d{ry>LZ{A{l&FeKy2ggfGh%&(ia>WY!wI^gw{3zQcO(D^UXIvC51{%epyrLa)Heg0E)HV@Nsj4hR>qh zc8UvVK`^Vm3G3IJ3NHo6{&~|SLn21NO5_jIUW}y-mLZ2D#^EhhZa-k&VDfw2F5FplRU{ffpz~dWnaJ2i_b~7j32jMOAztdRs>h zb$8!+LUBJs%!fdf01uDWb4M3=*if0vdmbUi&R#ONpWvRsw!XCFUkDYZv%_`p=udC1 zub>9{!sc?=d`Ax*Xj8_=Th7%Ein2iJP!A050{+flM2LisA2?BJxD2Mh_0?2$q_HO8 zBMTgdE{{JBPdX_L>o;BBXHXOf1h8f+^Z+$9@HepYRVym*#ipmvvnH8qyQY`^Szr8f zXe1#jQH?UtSJE zMzT=w7BqnR1FH*RA1b_10daA0FQe`3?W3-*E@1bL$LYc9J#b@Xj*H@$qef!1hno`H#a_r(*hqp(z=sT*e5_!ye$6wm-Cx<8O?dBvrsnCU}CA*#Lge;tq-b& zAvg2g(JbnW;P(wVe2}GhdwYX=0#*m>g#sWLpMU^%;MBrS4k@@FKT44sHD}K1H4C+1 z(^4L1{v`hHkAh|SKk!08yn72+w8qANCwi8S{@LMrU;JerFLLrrNuilt3{g^3!$pwh zL4;%W>J>F3BYH44xj4|U0f~cZBzlYlac?u?CqUK#K`S+|{0j;ST*C~fk9KC!OuMF`y+U^PF5MrRk9jXob{Jyf zP5CZXr=ZISY|i$sXiDfy`qf1m&rjF6J^~^t7ziW_i*@-KemA{%NvIXJ#?kxj?Gp#; z*FS+nA+4;Tp;iB!MRy<4e^^g+2kYz!&kC>WBJf+mD8t;XJH&zf2txkmCI)!=#qFhY zgWI0PHHRk<-+>P8A;2g#XMWT%&%M)+Qs6OUVR1uIKw7uMF$kYbXON{?N6 zBU6vzrJDKQOT~*OrD-cnKt_fMTRw&(6+0o!hP@ZYm#6zCVs0;AQkUu_d1PojQcUy~4pBi7dWe|x=CdaY?uow$v7L{D zaliTf6**SWPl&rSVMz}hN=n4;Yn)5UI6pROCiwlm@)q=8U4m~Toi0aDeB@r|X>BF= z0?p;RHYBT} zV0q~G$ueq8(5b|n(`8j*+`Zch$qpP@Fw9qw0?pYsI2e7__`h-(j+`W}2?(|+VURsy ztZ-0nwYIZAGBT2xh6Yzv?KouqNOv*L(&Rx+mzX~qwqhQSqLQf0)E5E#g$G6w7 zFrYU?Xq*uD6^f@lJyW=q4YBZpfnRn2*$FNuEtjAmU|ifma`Sv+Gamxg%8`m!3Xt2; zz-A8&42($-bHNsh4QvQQ{Vm_GY+(CZicZ%$L;~)}`08Bjv5Tb)%pv|F$5q8LT~35) zqNi`(H2h@vaL2cQT;l0d9_3Hdw>&%q5e*0ZdM(R|l81|JGZ)*uji0K+D`o6I#Xc@OXXkU%{@Q_&Y9DyF9eNU=kNL zipu~ji1$7AUrBdaNnUt>w0uWCW&$t}Xf-bH4Ex=z38@;VUB3KoarKPeF z!x!D%-RMYQ{8iOjrAiI#5VcA0{g5rANJ;ULJ4mp?lZV0x&@62kPlL7P{!a^_hv6T? z#=>&MKy&7atW_$CP<&w$5Bt>!AWqId1{1Di$ZQNX`Tus!JV5lhyN}eAt;`__1IcN7 zS8m%+#bCgsaH?x-2Ub@7Uvp(DnVvuUj;@AH!QK?9TnHbL=+ccd5tw* zY)ebaQbd5IIT(|0cmyWPoeGn6W0BDCWPzDCan;yJLXM?u(FZUwFWbrU;LQOYfv6}W z?0$&?br_;#jO5#e2g9g;=CfxpLc*4)ShpS8+x3E3sL_)RtETp*IS&KZnTWi*fPrAT0-}fTT$I z6f1}UUq*e3R}c9+Q)<+S`L4?9tAYaN5>?MK^MAidigoG1?Cfj@aj?eo=Z}L53a~0F z*q>2-ZrZ5j85z}RIX^aqx`LH}u)E)nAM~@-59Xne31`*{89I?zqs(897$d~ehB(g1 z9*w}XG;DbV(s})~9u1`Ud`t=s1(euOXk_ml)(1d%WxCQ`GTAswE-!!3y1u&d5jvR| zc=3rK7-8~!BG!Zg+!ByCf=Cn{EIwaQC)FVz_(m>%_Mhxyq{NoC6_ z{!GZ1=8bbpx8QpCCC?I>KKq{$*N50dw~C>Qge3mJFnMh=3qxe7q4<#eNPm9}9$x+D zY6lNcQA<@{rYO40^1gO;%@#(P3C`g*?6TN+;zJr6P85!EkZi+cvNYJw_a`#lsp?O*5C~m*wwf83Z*joh7b?C`s zrm%tw;-cj6sI}&iL#okHe5Zfgwt&s}MIJYr%DF5s*QnH4tlJ0R;HT~a?ffvb+xB;6 z7b@hyIgb^9MiY_P+ z4S@`}jnHW^?K4!VGRZbo#L&T9GwVOOFwS4P-E|@cu=Ucf^Zm(uW^l2-v%2yx1NL z6x+CIUka3)ApoY70S!H*fIpM3IDM`cg!r#LZm#cjMw~rd?mTYpj5M|RJ>IpBkHlli zED{_a0MjLl@L9I=J5eAT9eW4c*l_~4X+yi;$}9f#&s~287d=hn5ACsn)@JA83an2m zc68tM1IVxv;&@@c5FIdB(0?Qa+Kr;S04^=quk>_p(A;!E{eZMyX{|mWTmp=cxOl76VyglOn=>5@?|rMAHfaxGr;%%% z{kBg~Y5ocHz~kV+GDj~5z)9oa?4f-5vIs94qVAic{1;-`mm}mP)E%ACVo1;#v7Mrs zQxix}M~6yjbRldrk^E#N1lwX^EIxR$c9#z-COL|m!Dol$TdqoQ8qHH4_o2{>LnKf? zzVZsN-%oYECqjR`9dx-M0|<^J?ULIjM09RZL}Y0ykRg@gv>G<1qcdCjNlXd4^QZ2z zYHUm!f{E-{?PrIFLzTILPy{pVf&SI{fEX2(5kgcBJR;mL(0hh!Ar9RpK%ht0*h%pV z+r#)ONUCWmp1hFyBPATo*qkmhQEoHgDj?_zA@)uceJ1FHmX?Nb9)37*!0N4#T!lt9 z5|XPcz465E0fQj95E00lsiiKL6cIp!A}#fSRZF1f#+Giun3^j?Qmf7SUCM3X}bu9vW)U z+R*2xFOUA#V}QoJ>*jhLR^3%W=`JW~!Wd#t91k z1Iw81Ij^U8rt*ir_%Tfk5r$RhSHADxrB3%2?`38R+zg~EHbY?5J;+fwUznTAzC8`8 z+^IuFg=Rok5`>$u)hjXpoiY5tuDfB$gdL%e`}NBa1nU$91!0a(o42&JXBY$>48HB% z4JY{YV4yWNiwhm=_|k(6$d$fO27W3hM?ov&)&T$%<5%>;$MVpf1f(}Y3cfoRY9eSL zhjITlnk{HpnGtI4KF(J`dAKo8rwBdb87W&p5r{)j^KHQJG=v4_ph4}q_fOOhhEAaE z8RU1nCutfEP!g-(IwU1OkEt2b`?bOQ&8Pd`0**$w@9)><2(#uxD)&Y}z!t!p6Xhly zj*!7N4u1`XDC!iv9^w!?Ad10xIK~4JHSlBF6PUeVxJomE)Z)>Bj#u^f*Q;2GtQdjm z=|b#=*A$R{;{MtH13d%`k#{ND^5#wgf)C^3ISf1{pEjE&BP&0%O{1=1pzy!475IG6FPQitRY&G_- z@zbjr@D>5y4F=4z_sSiT+!0ak39mZFW~oP-?Ou z?3=0i{sp9TtokH@4Gkv$sq)LRhT(3(CM_MiQZU1D^wYQiImbjrrANGte+esH7G9r$ zER_z7`UA2jxjhyb)>ipO|F)kAI4Vj{qZ(Dx=1s*1mp z`4EePL)c}yey{H%aoeL%7y0^$}p5|fVAgT=pIw?M#0^Vks^`s4(CPWSF9 zfF=tKrZ>s|jPok-pT*%)c%QA_MQG=}uUN~x>V=bk9F&$Ku3a{?K8b+Jg^UDx7nlmi zA5UjBoU=3jGGW^Z1u@^QXj2^A0~mmpLDW1qeklV+vg7l!za1$^2(B-P0U|(Is$eUk z?!U*npgQfr%-$!OjW0XJKc zv@{|9&GIZwbp|Trh4EtdkD^xsYlD;#FapSHNts#nK<5LbEOq8?t} zlt*zP_~nTC3-Db;Prls-8w%p4)SZ~Df$z?X5c2V-iHhK1WB-M6!c(0t*iG}nT+=1J zZ`E||XFPDn(O{DIS*`t&oOq%z;3)w)d~0Xk5ETz^h`rYHcnh!b=9(2e=U&@=T23bu zhh)pGA&nY4SY(<+3wx2S9M*SGj5E0y-rx4~#U0OJb%;<;%;N!GA#CdoS2Q!b3)cq5 zMaYPW&&tX4G$_d%Yn!MevaBMNy8D&V#Xg;4okd*e!?ivl?oKqQVLsDIF5*L^`|J?4V1PLYfJhaVr`*p~_K;9e z2tpiMn&35@3U;jnM?en4+1ZfY`hX3TC;W0%CP3}>0wEzyCG8-a^yr>6qK0?qdSi9$9@ zfK8G1+pJ5#c@0CW_%2|EZsIqjEtVLfQ0R~vAeJ@l+L73uTN8L~_VTNFPB`rYogKJ| zFUl4$f!+i3C~cdSc!4 zgq=8?;0h6>vFdQ)JFf}wq-M8A!e&GU5XS~&D>M}z+Pr>!_eOvE$`F0`|4&_F%WP^v z?+zO(P(3`(ZI%-g4;*(5=n%#WqAw=qa!waZMo@%4g|c7OK*3k0yEfx#GEbZFw&%q# zKucs9E|mg-I$T1*fiw?TBc@Jm+`@a%m_|!muRJP9*9i;#lDMwSb=3?e9TgDrxe*crNsgs~nn05Mwnaf!lMZ zhiA7~UmlT`=y}}sxk(1%2wU+!R9y&@M1GBGbZ(ARl2qM?5nq@9gF)Iyuw@*j-aTF? z<`@ckK|vkzWI{ZsAOhuo>qDj-RmQ385uY|WsR5UJ@nEN7D*kP&WOjLZ;)^(`2M;jr zU|@8?a&FMK|JOko8zX>oqRV`CKZ669Y<`Gn22ty<{>A$gLb-|3r2aTh5MRTHCirAV z2IVSRa@$vvN1I(BneX(w9iL)$10bdcF#5Q+F|=jg6eg91A^Ukdjmvt}0H#%`1m2X$ z_L_wVgE-#{xdwpcQItNg-Q#b$+h5tTDb{lG3^+R+j<^t86Y!h}cbP7B6Cx3u6O$5r zd<0<%WX{~b8@^-0G>A*^NRiUjDIsaSP?b*r!FETN!Q$C#YiElhvn@2i9t~M>|iG^ zFTp3tEs35*%x3^aN)>i(;ksSbRIy&%M3G}js{NydLL?!3L%TzhNE^6ksL}+drm{i8 zEUvAsgtDv50}274O-1U~&MlwrZxTIj4g))607)QX+Nw238>X4TdDG5;^WmL%J>S#xYEBOostVX4ew9u_n#S7-cZN=kK5X-)Lx>r3~b7U#k*= zjoaK11t!RD(8K8)?TaL(Ah^PL5bF#26sX+4#+L#l7Y+)lNLRV(2&b7WdYwc;Gu+*S zgD}U<;Uyt@+{%i(W$+l`N1HA@ePlbgeb?0V?bexG{pZi?FztjtG^E=udJPiMMVQKg z@TJKs6*hO=LVDF#-&gOJ#NSh1VXgV60+!*K=>0fHg9sXEa3r9Sb9CFe1@QzF6hfDa z$L=Nd0Z)w?MAo74j25y#lTa#XI7*42;7!7)BHCW>-UD?ge^BmqMr^Y4Rx5_4C?&tf zhaW>z$bVT43UO+PwzW&ytr90JUFfKgKZCd&CdgwG5`tiGKdcG`{}T|kSig&auG`FP zrESmwm-rBDp&8CqM_vk;R|cqN2Q)Sc!3jT;m&b;Y7DW6^#laDL8=ax0#|r)Oa>wZU zvc)BM)OKp}BMn6S5I1v;VWns0`7|-Tfg$f)IXzGVj+c;!evzm}jFRxO-_KzJ#`YpC zrxv4P>}ubc%_@3k>UFw@3dP8(-$sRnkG@!_I3I26l(bV>|}gJGcW($UboEQ2;FgP*KV*0Ov#2PYOfi zF2QupP=#6q)ju5ZB5MyAX~5RrAewfMU9H6s1MWMIL#3IR7kTBbra-*b@=2Hy670i^ z%#S5-1^=x^KspN{6-*_ga%l(8fuBucXX^x$@$vB@4n)}PC-XisTQ4DK?#6*A1`jR3 zFI(XgbjPBg3qeg!PngPI&sR{W?`-@kI~svP_%kjxRGNYMp9(U|yk~qIA5^$tp+4Z! z4ufpu^gJC}_k)fr-5M|eoF$ya;=1vRgq>X387Ln> zupzEo;QIL8KPp7l9!{9i@!`>YJSjB^4C4mEe+PpruV@~~ss1OiMey*hE`C7wgAv|i zXl2kEIW!T2ikl_Dor!%7Se&}2#}lbg)0cTMX%biV;0w%jA~M-o<579g2}5}nF>ius zTR|QNfg?zaVX{vmiCr3c4~W;opy@i|&&2#KL~;@o>C~IL0{MXK1yO3ME@GZCBwD2n zN=CmLMUrC~m0R`Ohe5+ToVIc{qY(i)N-N8(w z9lnxhsl$tD_IYK7n5v%lK8!tM_y}EOD0>WjucS5~{1*&kEo8!ck!knA@R=dyKah(* z*^TG)I8X)Ga(XeCFy+7_#SA7pDr#nNV-guete=I`%&j0;20ILNcQlZ`Om{{mIqofx zZ^Pu+R~dI0Q4-oe76}%+@eJsS)`rB4j71zg+ltxl>;J4nb=P3;?3UP7Iy)z zN2P^@f~PY+IOuwJF)GL`VJHtdydw~1mZ8?y+VaIKyD2;^P26~5=Ky=|<}yAIIy7Z3 z6hY#AH_0^#Ugnyyhkf(fpx$LreiG5%u84v*K#jqH5er0)g@ym{)QA}#xP9h7%epp( zX6fCm#8k~Ue*Hx}E3HyDf}ZQ);R8gm==2n`J&t}p)GQ-T9v2r5?~wpRK4D;scsK82 z*V#yF(bLjWB5Fv7>rOCGOU9tMq2w-$D7()85|E~DjE**TPB(LhaK{#3XeGF_`dq#J)b6$u0R?|cO95~u)PU#U_chw6Blih@t-R`$iDEv(Lj@EynGQz@MX_iCzZ ztBadl{}!4MZljVKaoFg*)3#+YkwTSvCWVa5+;e$t)YDtQ<43nAy8b3A(CjrgMl!$q zTz#!z)Ag3}SV2d=TK2abiC#5URz(bK?Dexl_m3$A<1PaE6-F(Fu(Jn-cw8P~V8Gr6 znQZxv7eCHGV5(pHyN{Uf>(z*|S_gP& ze<|frnDKAecduX9C@DtZ8qU{lO~*%5{Ad|F=Hf7DK)=?XBhN_V;pcevfu%z|?GD!6 zyI-|S#{z?878g06DB-1vPsjGXdht@LdAQ=1pC2_;pen3Jq@cqm)%Je1ys}WG-fb-t zt%e{pDoV;w%@x;<9-AQGRkC{&Jjo^RxkDAY+u{-Rc+h%&;sQKNXG^gch z6MOsC?%0{~ikH39)!0iffYJLoK$1qSt-@l$^z1-Xqd+6UYUJO-pNqtstJ2CB2FW3E z@zcwjXP7cw{bV9ST0AS=PuJGyp)jz1e!MP}9HLjX!K9FsZglNQT2#!&L#|wruYp_d z{*KFL{8?tENzW%?VK!Z@2XfsmYs-f(ZR${Eq&i+-o{GSJRza`n;55NX(^r}Sg3fj7 z^)*&?1JB1Nw2jQQP`E2;FzllZ=dNC%?*d&Mmx2PdUEh|QpI?<@myi3Act@C2lTP8z zSmFK2$s+MDF_k_yvSIi=srIEZvcjF69>k&zs1m_^+JkXqe728*?yj~>Py2gck*GDi zS=-tu3}3>H6>Ib~h@;C<+;47eO^6~d%zb7yEkTMGgOd~(p&L0IJn+fJnuov+O#j2{ za~n*^ptF=xg9HSRbM)(rQa?XLdG-sI4dCO4d?(kiX#`t_V{ zvQbJ!B`RD&>}BnBJOCh*MS=bp^C*o+Ro(E zn94cw%cZq`!pna%1`Q3Dn`4FS@eI`#^Np!LQ(R+^Z?ksDc?-SWTi}HsLJ|oLBuedx zKHx~icXtz!@Gx~{O8o%k(fiJ%tkwS1cp=wb&#?xU$B*fr{p~qir-a-=2gpjJRb_RY zQQyB~cpMNtHvfqYkKbaV-_0Lc3VIxdPs2s9Va8@Kihg_CTk*z;14|}FP%cigBTW6H=qyVc-bAT^ml2$#?TlN{`ry3k7x4$MJ{iVD z*x`l@{CY7ge|fNTdLF+YDlgV#L?;Iq%hX&eq4z_0f$$sc61@n2RM*4fyH2}jLtovU zTz~uwx);r?SwQ7=K02~FSk4|t7pj)sdE?0SXC#-2m2Lf3jUDgWK(%t)9bSo4I3*x7 zny>b%v+9^Aoa_+S`%CEBNP0)tU$}Z-jRmCeDnNK|sLHJiopSUL$t;4mhYTq1E?hxW z@8|l5EKj?%C`V%WrO)*l;Un$zrG=JrEGw@6(*me!6l#f&ESh0JSs51dV*PFsQ?NnX z4%Mmu$I5NKZ8}}0j7d7KH?l|vvvf>aMW>{MN!$rcs?ehp0zt@X=}s*e5b4P2fq5U5 zQ|q3hz2(cRfPCGP``8p@QpGQ`N3PDqCB&RzHzK^c-yIh@rKLS!(K4FIyYVm9V?TB7 zo$N2e>J+Uw4nt)!GFFcRx)7P@Ima7sq}_R+TT6-VUHlzquL-hqECTK_A0AoZ04C7% z;@>0B^P}V%yFz0N?F@K~7AeWD(|~MAdA-U|?)r!7W!35Vi#WYXb8<6C-}M> z45qFq8{ZM`FJ#X(_!M84HF9y<){R7(awd{moHiO4TOBIgG zy6yd;Vn$;Uv%1h@&o}p!02%+0h+enW0MH1_k}{8og=?^|u_GIGCls>dEGO(aJHl3h z6^l$vX1C_P6v%&dUcBBCAh@X&%-48P2G1Is@}GFN+EAUVCKyc1@glVx`+q<Wb$zSwMPv+ET}1A?b2EBTHWrzcf3c9Ge}1;h#}( zDZsVQR7`H2oF311-+j9>SX$o$e@8?l-k)+~dUG8+TJouG<>%r0uI03gD7X2G#Ra3} z&Ijh0`m#^O^(210>QgQ=lXHk1s~GQ)q%r zKD2L7p*y*Wwsps{B|rZ1NucNaeXT>AiqgVFf#h!E_){ zeRZ@ko`StzKak9fN)PjQ3 zWP^uMitX-l*BvPH2f)39OhCHat3s{^vSg)L1(?`sb%*FTA{C*ay_ z@OoL~P}D1|b%I}Zw&h~zD?gmD%=70&I1?I--g53>APY1VVz@18D820$yI@MJ14v*~ z4QDiSbESFDzua+iJ1(y-PG!K-s;GnU+F$u2xFv=+Y?}T31E1c>mKqFfPjUt_DE%C! zZaw;NqQf?ANzdDz7MR7 zr(a@*vinpfXZW+^Km62Tx3yLQnQ2%bc+ zeapz9;NkjANL}m=wH&U*d)vjOjxI7mE`|>7zQC2keGjE@f_nnqo()>O!-#fUTd+gN zP&vj(uCA3(S}CAP`~awpDCt{|v-XVUf66nw=}J|F;^I&kr2ng zt=k+g)=Io0l`jrJci=YbCb+yJ%>LF8U3o|hRmGpl-0@Z3Yc=c)RP=Htoe^HPzu)*t zg}=3O5&W0Lr9gwbB>(njhEL#!M=B=ZiKZ&+|LA!j!^!=WrK53;5ctdh^p?Ai3bVUc zU;o>sWLADL94b$*n%&F8plll)AVI4Xe7hNPJ0d>YdjP^YXu5G7auL8loEE)8)bfru zx%x<}V)}1CKD&aPsefKx^TS0`o&>BLU-s$slb?BJiqP|pK}Db&T0xWL%PftJ4&V%k z9u<;6K`RNDUagUgi(AmCHT78l9|!|m{82@!D#o4umtA0xEI$EzM#wRD+sN|cZHS#A z-+(ARPw)Gwwvt<56``2Ia9dlv?G*kCow4?o7PTTwxg6-_?p^F&c$_-ghf%;R1S1J= ziqg$>WU@fHzL3<(vI{3N#%GO!kB?g-XX{0Ds<$kJT=GgbV@A2uX}IPf03sH7E1Z)9 zJ4bRT85mG`5WZGCkpV28HH26Zq_yE&V@i%r<++Z=su5!8O+JtR&Iqg4+7rVIowS-L zW}X1XzB@yV@R8P}l@NXu**-Kv`;Y!igd}sbm)p3zw)By%3d-wvVi? zma1dDO5^GIgvZ$M-NlLp4ei{j@v6uS=8hsLetcq7Sz~+Lc&9F^mpbzB$;2m$l0E_u{Rnxfy7vcQXG%cnp%{SKt;> z_=@xXdsi!1!N?h(?4pB=8YI6Tiu7lqGrU={H)EyykT-(gLv!J-a`M;hH5bCJ=-dp{Y!YNdU{LB*LNTGwk@hl!bO z+%^UIeH67sO3uuo8LIO-#acUt11vQ?9oyAl!B82rKxCazsmT0lYBgO&Gd@mGWv8q3 z^Z89H@KHYs3`MpCq;lE4WGp_NQG5hRDn?wq(~XakhQ_vbU;Q%Phleag76o3PnIUTE z2#-bt%Z5H4u@D@-{Z|zJN#CnH@S2o>{Yh^ut-<`I=tVj(poU9kO|**26f`};jJAS35@Iy=DQvm=oWKwIS@AJ*owfwxslS?S|KC&;jfAiIcXbpQ4Jo*8uGl40Y@ z*0*R%T6hm1fmJq!oa$(&_>5*^+63G%;!=(kUYNYnlz_t%LIh40gJY15h(YdH7)u02 zKi`11w{`BdMvJW!Bw{^2U@`{=EMS!%8I0nXZ2U3@a%%u)DmkyioH3-=?W=w2JxMD3 z%Dq)EgvX8#%ROH8o##2cJLd@jDD~3LPH4vbI~ENl|Hw$xA8*I9jaq(_L}&@yO}&Oq zcTb?5A*i0~HtHfkOylk0ep#_|D!IDcm_-WLB}mA%{C#SNt?T0nm4WozaE+E+WVn zP=ic{gv)u?00|=7(Sqzxcz3v*X}Ho0|Ga`UO=-FF;fu!K$`Q%nEVw?(N}At_qbs)_ zV+IYd;_lqBjciYzgvo!%DSPWWk5V0(F6I-Qo=!9S zXX%s3MU3~=IKrc`z8qEfs$CTj(1u8I0iDjMU1AH0;soT|Bo?QyTYmi-94!^Q2eB7M zok*buE-2@-q{8KeT!(X*d95!yW2pOKA1FJbL^gXRl%77w$;X!^5xfPlu99ogVUf}C z)(9dkhSEj|@n$LJZf$*B_y^yL>4W^i`rwC!e_;BEd98(mu_JS& zBjbpPxAX!zMnC3A0@^ThK^bs8-Aiwv!hMe%^v%`38+IzXceMCS6 znA{zTHy1&)7?y8k4F3D`oBbk@)A!$qS$@0|K3wW}7ez+=$UHr(Jdy3@avi0P4)(0B zPV*XydPg*ObfhbP^0p<|>Pw;wiPZG2R9}bvCFQk-GV24pIuL)F%5}T%iUL^#b-YM0 zys^>$i$tmw9r78y#X2|Z3&+54!rbRomZEU6K`;uoeh=&7Bs$B@PCc?C=iXcc#$s;9 zwG2G{Z{AmeEFZ$giwjM_P*$3Mkkme)L)5|qow2!1r7g(FQ!RzaivO)bevCZ_%g$E7 z$Q~W7;B%xK>c8WH%X@avX+ms_i|}D!Ab_q&)6%lI^LU^sIUyk`*?kx(F2{;P3*n#InW>U{_^q(m%vbNMz z|5OF=uK|vxZ?89p@u2?P-s~6oUtTDlNCnR(qI6dmhGF&waaG@u@QpT3a})oCn0dO^ zy|ud=$Nj|Eq-NtjjOH!_tXr>Xr*E~d@pt_RZnm0KjqP0%Q_VaLCqqW``%%}6^fK{` z@1WpLpPg$kXTlQR(FG3{}ubF|xJI+x%6n ztQZjoQsX7?WA_LtOl@stGenP}a+zSoArF+3wq9#uB(7vkh_AVlB^4vWID#*xD*qtL zVBn&~<38I?!ESlee%RVJS+#jlhbuE{0`VKs}@mSZZ1FN zIXGL-VKri|TCwwPds3i4^HJ=;gI5h4+KH}zUxuF@+BFKMhli>{Q7KZ?Ys-d89uag& z(a~^&Bz7=@?0Y2m@Q+;Cv{6w?RXLr}IZwRFWOJ1jEGGuY7#Veyg1^R>=pSY)B&}}6 zr+)l6xjT0v^GCYTi}Za^$8LLP0n>9T!gnW8pY;T35ed-l96RLov6_YF=BL|LPy<3( zIp9$OJD(ap0cxwIn&i3=o^cublfsMm|EPM)sGzznY8XX95J{1ekQC__1W`abq@|@q zkdP824Z6ESknRwXMmnUsK^mmHzjdDbzGHmvk9+SJ&*g!0&fa_Nx#pT{O`!0^Wdkrj z0d&G5?u}U;$mhPFa(D|1YjO7X#IFh+m_(r-@h~(QpAK{T-`Eq&sng_)#sQKr+8uya z8g-X~w}}qZOnL<3uo(w@3x!FN69N=e0O4Lo=wUv7jW3W)y=`vBvp^_UKsuo2B5Y`Q zIsnAczkh23S&ApJJWu_66_skw3&kYdua2=o*z~Z?1|K#d18nNf)U84W%WKq|8hW-E(}Dq=#F2%8!&R;pQVDjr;K zSTt4MwBu_fQv6Bx1i1_cfE8pTVq+WplsCg7De5VWB-d5r7_tu^(i{@! z#+5)MHMFnZi04a|V2vgq*gJ3@tp1o@xaMKZqo`P%@Z<;=2S?%Zw9_A0WrSaW>^KtHH11W1aq{5)1lnt>fYHz>y?j0~X5$PTtV&|nl&StQuA&Z3`N;GJ^ z!v&tfe#8>~yCagTV_znsjzK^m3f>h#fWSN{X2|NBTdW(r(+UPoimv7wd2jv%W`XX( zqI09Or%1O4#>T7i&HG!^o^;2FNlEvm5dIn3%g!j{?zlnre-~3D3?u$e%qNdu98l8J zGM)T&y}SF6WcUXw&pj3aFidD2B4WLg(bM~#rI=qL)-?lw7>lCX7h(b!*|FKjru<@^ z(7MLX!B{_5T4#3P{0P|m4KZrY@GASx;0L0--&JyeboTdrF|ysdS7GX;U%9;^LfJoD7U;wT3fz#`%D&?BN}RIY1ep&zvg56MMV$0hVz4j ze^g&?PDR7DfN!##=3k^&wbbcH$iV-x-}{lOA511>8ZYM?sU)=kH!38@f=krEu+EkG z+DpLifK%AW4jgC6wA>re|YwpPUjJD_sU9Ln!y#m)Niv0w3~{zA^fwFKR>b z+J3xaF(9xnE0L|j;dagnBX@qU4Y``mOluE3z_@}#s0e}0DhweLrPHNrs-M(y$h)Kh znQ%SU?89p%3SsOfz{Ujy(Y^rz8FKMCz^=FUmxz>5P!baQ`*)Iv2fR&DJ+tUb{m!g+ z$=BC6Q~NqbsEWeX%w95kUDj-8kUHWNu_C2t$EpWVJxwC~Dy?91)p4*DY3)u5L z`JmlAX>`FE3Nw$rGruprXC%Pm_89yeh#|kSslo^9QIpd1YqBZ*NSvK^{fR$%z&z z-OyOH1;)7fQ-!^8EFj{ce?xA$Q|4pM*8ln7aT`GlF zWbULZHAC800qqTdr8_v)9S8hqrR>&zV6m~)6^40o#s;wJn1PpMPxkl+J3Hnwvy0%P zEt+GseCi7A40-Y4JPpnl6HndFDZZjv0FnG4x)WhOzBr`-OLVwV)ed{$BcvbqSRUcFze>R=3~eqQNKw9kI&>EkV2k- zV1v22cHqa_I6M}Rfa(0!J>$R>9Je`?j1B!$Hqs^CL zZ4ao+^wPl{*sNW%*4dk))jOgNQn4AzP4m25YMSq>eTIZvGv2nd^;xnL&$(&@T}j1C z-`uVh=xdLX1CxC8%3w`_ zg@v_028L9*YKhP*reL?J9j@nQ`rH%qh0*~jHzV9cK#$t&uS{8OipI)%mD=jrchTtJ z5)yWf7C#xQyUIA_S^N_lSmki_k}X>;n^sULd2SA`d|!Z9?L|2Kn^#&|P@F0=N~SfR zb_oTL4{dGt^Aj&}O#AwZ;gUh1VX5iBGsrTd_rKmqyh}_R_U+JU@=A{YVkdl7q#6+p zg|d#_#lW%xyBB62UT#bEpS6Hjqo7P4iHVPY4Lq9Vlvya32`}hYLG$jUwY^72@mnd1Z?tzU-q5JY-}s5>+5~#GICL@8(p)%;~%?>uE)1xKp0DxAu@p3 z9e}dVM|L69Ckn98G5_0BCu;onj}+7=7PL|Zz2E4uNC$~U8}DbkxsES2dcVJapLctE zj*QoQB{`4eY@D8*-9xj??P`tdL3sNwYr_^C9;!jr_2EQNvewM7yhwZ5M#5Kc=etCC z_h>zm1YZmF`SS&|P)#d+6Z}w1hb(0=T2Ircz2V^bbNyEuEX{3gAv#rFv{?iUv=-2% z1-BySZ&d@>j&)blH_^St8K;w!vQu?yG@wv&Y^{4m`? zZFlF(%gp?ymaha^1*WHn{7mf~V)kzwEiGP*K|1jeHtFSTOj?6-^;n8KU>7NV*W`E; zV2KrniV7VF%l3kfxFNH)^wFJ=z6U|SHEceRR2Ix{Q3e1j3Z#wQx*C&erxb&{-8|5# zAGR*(SoFj*@JL7kzc!*-&Kx4aT;mXi7T)_`?yy!c1&hj{a9uH*c6WiJ9;p-`rUCQ( zNR3%~u0bzaq?Zuf?~K=nW$yF;_5A$#DKBps2KFUlqJ^&=Ffb4v{y+48+C>sU!dNgj z5qpD+!kCjJQ(ms=Pu?vsp{bB7rtrLeeLq{rYu zxS>%5y4J*LEbBFl?FA{Y^elK0MhmSnX@KJau$k#pvCe}4Va+H_oAtXqxiXB(NttWo zoQC=9EB(eAsZ6p|mdqdjHaS9%+1B4Or~=aaiW%LblfnnP1%1FKgLxWZi=AgkaxCW^ zIhQ1ek!rhaJeZ^Ecd&luzevc4OHM8mPQT}P!bzOIJ5v}c7mt>fqdN)34w9#n2USp+ zBMAA5#`C84TSmKplxFc?DVqsc-y*J={v5^Y*s-K&^6qcyC^Uu|=K)>OSF)H4j~KV&Y3*}1k)xFU z*c&If`)=uPsF`v40sCYP1K9OPi&&7#_sO1fZ-uQKEczU5SAbutP@eHz?A&O2Mtzf2 z$LUL8SI!Lv?$+R7g(3405Kh3ck1v!DTCm|q#0~Gi(Lr7ZbI?|Aq|r+Ki75^~SnqM? z!yqZ&_!Vnksn*F@0cPGk`>W2^2G4%O2F+AZ=r?*LH4e=zfGtGRmFOgG+@~Un@}c%$d+TvBYv|B1H)G`Bmu^p-8tH< zf#GAMaJGH%Plh@xfg1%qk?FysJL)4c=cnsOGCpmKoS-6+i5l&%sd|AXLBs&e8eHQH z$Cs0J?zCm^;%yFc*kH@6&rn=lz-5H)g<}<(x{Pt_*e7yG>B|=p0y&d>Rrdd@1rTx5 zVB#!&57%o1BZb|{OL9n*;X2_V@5i}~;rmUqY-W(ll@OC(SC^|jS=g2@@3au^XqY1o z6`FD|)!?_Oz>1VU-E>r9jphLI2klNroIN)zjuOqDDk+f?a*ic}0*pbOfkj^FiBxc` zlJ4-^u5~keQmTFzm*O=i{**XHy1O*hmB0_BODPk8_d%9ZZhz}PPc$_(-O=_ZlsWk` z4*%vJ(C%!Op%0>Aw(m7WN8|3^Y1EV83%J7N7Zdb4OL1e6SS@yh$MWKh)z#6R>@FGs zKP0K7&C+brGo7L&r5XGF%7)(Lyl3Y7%ZJ-XIP#?y#J}WA-pF3C& z{#AuD&_161WohAm!kCwt@+1cqu$mChvOs_6a_j|V1t2Q#K8gfA=yj;rz>$JzsFeQW z`{%(7IU<6K8fm%*;Zi_LB*FrL9V(Pd!yY}#|O^!OBBA;%R!xo*B6OcoZ z@Q;8a`}HfWdha5h?}6QFNx-*nMPlJ0xaDbAYeOd5wdX3!CNElAa$-0P*}(8;u%dfZ z3Sbul6pLs7jd_0(1KO(;q|o1b_|@Op*X;=PcyZ*4Kt13Bhq!3#s&U~n0EqEX z%g=dPY4_mH3#gWU(*j)=6<}T@Ek9U`)IWFRtFBIXRnZ^xNVTLJi4d~io*K9?eX*OH(mLK7vN7h9dp0frXQr8dQK)K4KF@)3ta0Q^k3@zS)|_`+Gx1k^n?( zO6izNIV#Vg%$`~+L@(|O^qu`iJ5)ZvLy`YFs_19;Xopq?D74DF1h{UqD1B8z3aX#_ z`e&5xSFbl`a3psxcX)gg6N2Wqu0DI-cFuTPVXKK$f}zg&@)4bQpjmqD1+Y3Qbp9SYOu-g2|KUuutz4z{#p@B)m08?^cIf)B|BIAdj}ZYV;c z`{5t!hb;>FxG7N7(|(l{!!#ooP|1ALr34JJ^x2_2$hCtIlJ@{V`^O-nFZxsbrk~aU zVXJezm^2iBf2oM&F9ip%fAwt-75va&18cs$?}GLT5`4p!AHRoxTKcWqdwGcU=0@Lk z*g9p1^H6!X0BHM}mr}M!wo0+(RE2E3&yBZZC7hd^jVl8tcVN8WQhWHbd}*=MlbY6U z%P!$k9@S_4$q%H$U`8Dah!2%(D%){dX94VE68iZF6eG!bI+RwLS{{v+TN&lN5x6ZP z4R;MY7t^llfcNp@l-`H!X&`t&mGf-Ux^Z$+3`yUg%l|YtlrqF&h))%9D#{ z2x#7_y)Rsc)5P~l`QhER#VmDkl!flZM1Zc!KlAWFJ5k@1MgF9Eo1Qc6@aBzCgg3A^{e^m>)3t#L($jx|poiKtFogP0R~j9E zlOGocDSY+=GcioPlaf%m#f}#mKl6HU_&)d2F{vdOZB8~qF(h2KW(_1TVu}2=;sXy* ztdnD7x!92E8W4V6Meg4O0|+NiZ|PxRVM)Do-tGJT4C?K2c6NDAA01o_6OP4<+rw@u9S8{lTMG2V^DtUa z5@u@i8`>;)cee)Pfut3NZgv6twzjZR9>EeHj6tww_%?>4y={A&_&#|syW_S3x8;3@ zVtQUR&##U8Ko9?E3kC5~8nXr&1qBQZ(5~-civao+YHO&5^V-B@%MEQ089Z+si$5P6@XG4APN}nH3KtrO(qC2>x<&pnx&(XTW^z50?rC6dLij87-y;al96B zmJ^4EhfC1C&giE7_AU2F!Oiz4yG-X7q8dftNKSU?>ej1&Lgk!OT)cAPKnM566g7Tm zg99QM!lU`Qb8JlogpE->icG%3kF?1DBVK`|CBN8UuN{1#NWi%Kb4p4|hUi?g|7&fX zLJoVg-E}%oNRR%+w*Gjhe&YQmHBtD=V|)AU?ot>0=rt%UHud(-=E{%4P*R1F&r!1U zhWjghz_AGH{7k<07n3jq}L6)f0e|} zbe9tg>+e%GU=Xy*3yO`}!ziW2;^GxdntY-(YDcRfRDx3I#pQX$Xoan0T+;j7B2NB# z)8u;YoKF>3mx%&sr2rzr{+ok3IFmYS)WUML#l#E8k2N>`Mv=D z8N3h|CxDf04_|Hz&qT4Qcp4hY;c|Kx`R!RcPv!->0mAvG%Uo@I0SX|l(YprHtB*Nq zRf5ikNj^Sr{fK%bYF%b(9ii{2qcfUqfJZ+<5y~n5uLdLYB=4gIX=^hK^29(1B#Rz+ zPkYtj(-T=<&IgmHLA^*lG;zHB;0q2V^+RRxa_QK#qvKb&H|FY^`pxI6pzPW(*J${v za{qDNRc$iV5#HOZMbf=#g~E3fX!wBW0O8F*y8j_B7Y8@@px@`Op`l1vfO6EyS5q3A zhw7WH3LTXW3e)R#PzlBnR##dZDO3oi5bD49=;lEy6}y%SJ{n)Z{37ji$7(mN$fu#ev%Cu?#OGuHD2@l!G^Hf|I>+3;{!Rv!P?h2Os) zE+`16=Z__8@{ju|pFS;I9k=HPmVGH$xH9Km)>2z&;C=oQeWQr*j>yip`^VJ=FJ^8S z{uKPU+n1+tpkk#!)E^lZvQ$mAy1tc(LK zoxXlD2}eWZeg1s{yW_hz9@uUlx_N>$d3QE=pdn4gme$&fQua(w!90F*%TFPynqO3KEeBn_JJp}f}Y-Ukjk%4R?ve; z;yBa)eShO3Y<;-V-@uK;Z7CQG9o$CGeu!v7D?}@3*x<1iM)aN(eXtM?^+3L!haJQ} z5x=2)Ew8#Oik==}zS$AIsp3*CQ4k@(V_7cPkU)_OrXG;7zwM>}uyr_SC;27BbTCU1 z73Tg1wjiY_9y23tR16DHawwnfTc_yOl$ejQqoAU?BCnv?3L9Ybm1@Z*Q*>uYr}6Pg zjmca?E)zwJxKe&N3~@Nz*!36OzI)P0loFaji3ZT5Et-ODg@A9Pz#-6E0t<8#-| z$J3J$Qr1iW(ulAkKOfN`^N_1mhQOmp<>_}$%&tkgD7l>Imo1ysSrPAyNvu&2T{{Nv$21y-Fn zXcW01<||-PQ{!Rh;1E+#c;Yqo_xPd=s`mzlrGA7=@|=(&B0O7mc*tL_5PqK{MX2CX zze}{nTtzCAGj8j$-q<|E!fp&*aV*fyqy{tUn3a=e4M_pt8z>7gY}WtuC73EqR2SeBOxZHlDg{NEC%;Ly;_$%t#a0`WErB# z+6{$lrJIn=M#D1VB4VqiTk4RWH&%b-ZCi}BLaU-miv(Q4KX#;7*sL!xb{_!Y9zeCU)uMiA zHQtC7tUw*e*f54FQXDqJ7>u$;MuCcpixZQP8CqE>yx*=X6^dff^2*L;gb6xe7aIm+ zwXgT)sEX1{(#h5H(&tzNUXH_ebwlm=NTuoXCPmRt0?dhk#jpSW&*jf;iU_N6OXjJk0RpnXf*pFaRE_hrWU?UvmYUFaa_MG zdXj`hQ(kUE!HsHlYZx4m0Lpp7M+0Dj(D@KF61Kr8V ziBwk{PdLoCWRnV`6>>R#**`K8&8q#23gD15m;yw#1XC8enZumnv_LXG`cd73wV`zC z7k-jNY`PH!hK6)fVQH|DrC|VWxQnZ6dPoQ^lzpw0;J4DHE5**jME2tTu6Vw5SV1Wm zCN5Ld1q0({l9G~?U~2us>@3w{d$7%Db_oMwL*e@!3~hjMR|HBsgxKF3GZQ8=PF7(~velbYRWhh(SRu4hVGRupv|x#_ z3KR3!X27Uf-fZG${^|1CP_7Jo`Dpp%r!1Zx9+G=YUEy$pgGCdSR9M*6rF%sU^vOws zBSd6FV`I8T=^H87^I_7F=XIIz2vXTX2}4;s@juLlvQ>oCqJLHDhWQau(p>DcLaz_? zEe#RrAU>D`sdV^nEM2SIGTZ8GqkJZ9sVhF$U4E@Msw*^9@9&U7ct>T7V=o0-i7N-S%FQ9JT}tU2=F+ zi)pMYRy1C6F3jnb0+p*wpCSHP)mf-(XxNUfX2AD;XBXyMU$*rC1f}K9w{A&6y-guU z#nkVI{d)Rc^1JrU#fA=a$^#hvQ1D4xSy{jt9uSd6!-m<7ktnM$Abo9ObGnAUx>>axuDaL5_{^jFL@oG_D0?QjBC^@>Rsnx-y>scr7&7k zn3NQjn3xDFxDQc3`}OZH{jjP-bzlQg$^CJ6;l@OkN_N=7-@jowM|BWi`eA1LpfEZ* zy3D72NEXHPdZNMS8|&6F6(Ng&W~JS#lpkfT49xGLB4pwfkK4qnk0PN*kgzXB~d`ex43di}EhNlzBqbSnK=o7$4cSEmoGp7d9=!bX;!;OM-mDO z!SGRYt(epc5>6dp4Ew*);;$G4^sn{xpTqog2#fMz6D%4fX{T2ZX;49h_jhfH0n_sf zM4E$LPMDMIcDl*{d21kKUjSY}y3P5U_cjr0-en!kFXy*i0%4vuhNV9=-tIi@B?JQv zl)H~qZb?o*Ju4g(M0-72qz{tWZ8(>cQ&W8d13>l5V{9sC$i^1Bf!@QoWctdAgOgL~ zN*E?Oqmb-gPS1JwGwzFi*e?^g>{=HZvur_Sq}wt za2^+1#}PLgS1+7TrQ7MHefXD=Z5;thZ8Kl7w2)0W(ja+2Y_?do{k)O)d<12ekqP=$*n?)d~dLfklnsFJ%JO5>yjFsih+B1jNMeS9%}7 zfNe22E`u1JX|-BltP-e{4Lt{$|J%y#Bsk9+;G<&P2{ZzJt#XkNRnm_{*7Zl_`cKTQ-)H+j25yuF-q%^x)n3#RUn!4J}*|-vLu5Jhle&lZ@?! zb^`EUdHE<3vZ5USw?r(OciGqq#n2M~EH!m>__SZJj(xs%1OxaJgq)*_irDY5YPUhAz6#46wk2E-M49PW$s*3b>>swvLBc#{D~AEe zTcAE+Tl&NQCr@Jv8tjWR8u4yCz_6)EsC7Ln0VfHF_M&hYhw5b3s>*<%0OPVy7}Y;N zKQAgNdF$Os!D4TUX#Gg5Pg)CVr8%?_K!y?xn7za%ogBJ-GGC@l#$hwb(elc}Eguj) zIHMz-{-&A%kXkOV-EA)c?m}{@UCABz8I>iLXPpX$=gvYeP#iXkTm-X52r9a`Qh~O9 zrM(u6RG$WZ_A`8`&?gR-FrhvhEL)rXiA*}9SWvi4`#oGvb`irIAXbCH(#z7)a-o}? z?^7~-H}{JJB7U0%$=>X(x}WA_(2Pt7u$mn1zW{LRhLs2va{d6sWEXtNqO!8)-rf+H zqnHz&WULCi4A6Thg961k-0shwp#W&efcHjeA2+#jwQ{o)b^y143T^q)H(i6B2ek_; zD{UaaV^qr{1~>qN1sc~DC46hH#>K*DtE+XDYMhqVVpyc`krvOB-8yTVlIGtjp&6nu zRy+3o{riud51Anp!f#;sy%lz9X%CZoHOtI?m=1Vx8h3!q;7%ORJ2aQGA9Lemh)|;R7hPz@MKVWTXVb zf!(!|u-ShZ4u~)_uUaz{p#F_oM}p8VLyHquf=i`9oBz25@!VOzvwOP{Cm21vK=>5n zGZNUaeg@5c#lYFabrm`5z+*P}8X)E9*qG_V%EF3@ioQ}41tpuu&X?!pcS!#%&Hh$| zdac04m(FKlv>X=W6xup$rJ$R!`xnC>MUDA|wIio>8Su*HOq~LtYOaM7NYN3w!^b^r zq4s64eNOmfA4};Pms=ZtMZ_tYCikK96X=u}1)#+{@f z4sQe1YYeCd;m>D)suMgnbu**;fh+~?5S{SRUH$PNLePB0?)<@F|9~(KTMic=O3rX4 z(L&4zqa>Yyxim7+y+I}l9g72Y4^4q_=dhfV2SJOkzrT>hgxUaP&oFv?t--Su+D^e* zdYbElIT;#`<)apj|8f#k*y+8PQBj02ghLRNc5sXc?h874gFK}B)3rbj_Fe@iR85%J z&_YZ?!U?T!po25&igUZmnjkTtkI~=&x{z?#+|WJcRTwvDL=XHubUAxK0&OY~L3xkh zyV3D>euCg?V-(BRxBX3sqUQ@$8X1f+fa$KE03-F47#kxE8IW=DkViqDM0Kkjbnah< zp>o6i`kA4*#d@*z{KqJkvv>%8$m2U5*%gN=q);GfHXrR39vDg| z;0%Tl=wj~fXNMbDezdMrwHwilq(eRh9Jo%|C3OW97CL*(TMNCybQ_=5dE&(QFBsLlRBRrKswuVxFHHbcj&*} zU@Dy+hP2{!#dVpS?h8Tp1HepEtox&{Ow`+v&;Nxg>dkEd5Noi*r4Ro$OaYL9inJ&6 zlyf@Sz0>@e7a&VNVCU1Gk;z~(oM)+0XxXsPPN5BbEhfvgv8l?xs8;--g`^E?en4rM z2}G!1+_?yV8ZNYTz<9#OY!yaZ?n$so`1I?>0$9?&w-M<6E@4$vlG7eUE(#LVZ>zoV z^?{8+{cDr@jSCdY?VuQiLgfwM!(qtWy6KoriahJs&*JQ^zVGv(u?0MO^Zrv830PE- zC~LSvRCDgqXz@-}-Gk)r`POtd@IZ}S7BP|{m_R2 zo}}Zj`_IyHB$l)JE6DarTq<-*2(S!_B5Xh&4TOD0=T8fB^M2#1xO*hoRP5}0>Bizr z(f?NqAnp0BD-t&>93{wC(clelEKJ%M$W@=h@_A%&18SP^F3>Cd-j+=KzrzeIe7&8b7(&%udKX+UVn|!C1!=B8~w$G_RvK8HC7`O%je}2qXT#sx@Fr)O#s3kUS1g! zhh;iWLBXIBxC9-mr|kS(BOkQJLG3mk9`d!-46gH;IHdnt11WT!(Bp(fSsMuje9+13 z0AZ4ZTv;ecacO<{HuQNULEEFmz}$I=R{8l#?{D8yldGBOMDG_Gn^q`w=w7bq8aE?! z?p{-TrtAh*HV;PY3-2C~s_WgkR#>@*W)?wl-};ND&E>vL@KA;?V{)L2WEJs#eEq zV}fRTKtT}~bBNvfCnaEnJMZ2Zsz!@Lw=ucTb6R^XIXR{K{P@9zwWoJhS6{$9<@%0D z!z!`NjjSx$Jk0|FQZl;Z<9Q9Ri2Rl#lS)yLlS4rx?&7mL;JSTzHlV80t?ay-p7{1{ z2sE*$=dh-$#>UctJq?%BK|i=Jv;7`aQ5d4b!xJiASz$Jxq4*rm@B&QhfA966&yAUQ z!(cz

!w!hGMe&q**GYyqxV%k01THLEX@(+*_E;6U9vOxv1zt@9^+T`;YEfm6do~ zwa&MkkHih(%N@50zp4L|_l}t>b8|H_Id!{*?9BRff2PvBeChYstDqPDUh|RaE!mY3 z5|tlIiIMLEEA?;s0zV+oUR4Jlug@@C(&+I=B@e4wes6GyI6f7aZ6=b?Z}9l6W56o_ z&s9c=7CQJ{yDljhh7tyUmzdW#NcE?axehMGMe;%eE9WOFc^aiSWn~61WDM&b^R1Wm zQiG!HiV?C%TwC>iKszSKK8A>2N2r9{Um5PSA1Jg4(Sbfj?EaC5Q?f>D$E z)!Fs^gEE!>9*L1L`}gHVAN2U*`}yUte=v8?)8@ZdTZ^5;8VEsA00W+gCNg4hw(csh z$zeuEL?@AWzSSAhdlV1=^fNX_#>I)dZ2wmLH%{n@K_IyO8=dR5VWUuF*1WG+MGUto zP3@`KgA94{v^ATgwz zd#v|^V!6;8>z`>2EegTX+U4m~QPR;3y{d5%jA9`JBP4s(=odnN)`pzlU%J3lk74`l zZ~r#R-Jy|n?D5B49@XgGm+FOY^yeB_wvQZ|ep>WAmyyX@3-j^040*-e-1mLw_;6xR zQi}0YW+pj&e&}KQ`eY+s2=;fH6Bf1aCcdxD&U~=?_Fj*5Nc+OAI|tA;LBsL>TYiqr zyXVxQP@9)@+3&-6r9m>6e3jrEN;9RRbMJu4*tiU;S*Z6|NQ3Ox>2u-8^XfO4Z135w zM09;%)$0a-y$N>n7_Og|I#_aYULj(G{K#?BsY)$+H$pf#!Utj+92jWbv^WBfvj2)$ z4F4h+)&)6h}HhF7QY~4K*5J=-5pn5Lc8lu@OtF z_YUQ1_NHCk2~sUjw(g5)XxxcnqYPBn#aObjFmvFHy+7aT?x$OWRb<&uRM%A3|sZSq-vWA&IW&*RILOJQ<;cmN|Prjj+H#e3yeE z4VRNejmH9-v)_Xoeu?>w>)6@d%TTz&fAT@lI|LU8VxuIby9>TVFg+FLE{ke(|G&0S z$LjOlV8_F;6d0)3!mAf9F1#>{qg0tsJ(kykAR&=ud&|8?(Vh|I(^quEoweMmorc>qJBJe~xVMN! z@I%d}v~Jq0^zum3at2Ut!T5yhU=?)RT^xCoczs-{{fL}gviJLMuODs&KbQT(0&_e; zmi*iCP{aN48biuA}nJrbmmOJzR@}S0k7id*y&+zMb$3w*uXVJf z(P$MPX|kIWCPYYPUBT_-!gsI=J z6c#%%`K+FLyPwY!Umlk4K(wfqe)k|XDZ927qwbu#;rCZ-WZ{yM?m-yy__%jIw_#DZ zwu@NX#T(*E4SFru+@z+lf)R|w34)AYWa%X&eb5^kyk76Wb%?ZU%!fb~M2Ih`Ntq5IX(^(+-eB0qVQKc8FJZP4gN z;CM8Z?KtNd`Y7Mi$LU^$_UF-2Eo5(l1%s&Q*Bgyq{4~twl9^*$aqvh^XlS8g8)=o5 z*Cc|P3}#t=A_xC79DMsvfBxYAo1y%g>>eblt9uhRD7*a{ z70^t#SXraUH9I#ZjE`5ohXd}o_VlUi_ELN}hs!Tp@8M@t17UO%p-H*{w#&mJ%B8m4 z1)-8gDQc3fjw@7j9`pS|praJ)FcfF1lJr}G+0Q`2O_VD{DT#m@D< za;rjYaxDNBi4NFEw1;NLLS^ob2dSIc-@f6u1~dF!>2qvqU9NAFMDG!t_l)K8uJ7sj zoJ)!9rh(VEQfbsjhwlVFFyplbHGfY_%ixbl;J20Z_M|T^E-x}2(D3lite=`9WvhLR ziM&r7sk>>G&-Sl25%atza%c4k_tc4r?ep)XFuu*95M` z$_D-VH318R2fMB@@kv=%V!5bjjlQYr=qAtPFU3z?@jY|BDen+`vAg&k!J=8YrP+6c zYForHz#o|y5XI;Z)7qTQ-}|fav$L;*0CG;~8+I7kcuULot2_u-z?|c ztSnJSN6a8fg{BHyzHccHntbqBkr=--FC@_QlNh47n7hYwT15t$&^F{Q2lq{Aj~VIf zrF#DC69K&}u@43TT0=|AFP&Be8Kwqxy~Jj~9=%oN7?-Cb#SrO}b$+fECkiq)lo-#< z*MF{~rmB}Rwuh_q_tXW8%jHQaOlZp#ZHbUHdR2Rlp712vkNioJ=*ti-?*JLGDRnou zn@}5VfNRgkuj9+lpJ-pcqJwYbb1?d${PBbMDIjpgk>3!p2;P}T%>L6@{Np|2R`q#Y zlS5F*B3@LAk1zKF*%PkP8}YoJ$Tmfu4Dj+-1bz1PnU`~9pMk^WZA{EZ05R7e-7aoy zR4#hk$J^9;MSkxd+Qw5|~wZDMbUIq0ON&GXsK4lqrQ+T4|#b{a|u?lcZX^G*u zKrWG%pbZ=gi#w{(k_bFdL5?Ke5!=jDH$lASX4Rr{KGFBvC>~x;`fa%0AI3&F7?!bX zPuKY1T;I{rVF6>(yE0J$pUUjdy8omVYz*fs1yEdIOgmeV-eaRE2qT?#-eRYww*32V zjA!Giny4s26!Qr-1_nQ<1zx~#h0Li|+SE-tmi$|=|7TbFZa@&nQdSlUAej$Bw%h&H z7Gngr46?BM(5`)fXj-7x(+F24`QhzO*lM6Wc~pD0iSOs1`~SnI76RDzlvl^C90>4~ zi5>>?rn<&f$|r{eH*QwUO*v%#Tz`CUAouFWTc!d%wtC188YU)cby{gsH&e2u{2>0n zUsJ(%yEqVl-wWrKO*U@97Xa++{6KUd!Utqcz*RVS2f)Pil<=C9Kb41C4F$bJb5M?zto7GI4EL~PyGBjrNQK{%j1RcF>-+q8X7Fs z)u7lqFS={kdT3Q{4L2;i`(-)IJOu+mC~H_wSsKEYQCCy*w_UcR5){0-+>@D_k%3oG zpawWn1Qy8AX*|193}RR6hi2GW@eqpY3+r_2s;VAq2umN%H;&Q&a5hkRn>jp56YLjb6bi;+5D;i?LaO4eLAamXvZRC7N(;6F)* zVVaiF9632_Fh8vPA#+~SbWP{n+PItZPkhA@JFA=EgC!uJEH7^U&*H5q1`-`-XRpOP zwx)7A;#IVdMb0L<7o1H#HN6>+wzl}kw)7+>-D%%`{lWx)P-6c6JHLOUvYV;Y@nV?T z*miC!^`s&Vos0FpUwiFB9M#~zJy;wz@WQcWbBozzV$m_D;6e}ejV(T&7!S+ver#c#^VG2{xusNi#1q~4Xmi1xYd$7-(2Gc|mM9x4i80jY{3a!x4sD>?$PI{ZtD;MK^#k ztAw-+%Z*)Kn0w3UVAXRAlDUbMM_IX2ax7w!ZFM_^?p@#w`NmDk|!H4ejmM=UW(~-=CfEi^#06l1;-2MDu`UBK3&GDY&9tzCp=Qs508d-wk=eBygF71Zs9jQm!u*o z|1k1%B*|`JvA$95%Y(F2W z@b=JzgqdoOCyb1RA8~Tw#g{F(Rg-$yCB z#Cl&z9#YacTry`eNCKd)bdgdRj*33M8_0`1k{X1LRP+eQQ`d%MAseHC1N7pBDm%|m zs4%K^)IW}Qk@d|#|54y+cXwjjHHJ)Bnvx1P^bm7b9(eX3;v#FBR-C3qyUpF5+i zsCf^0)0Fs6kIGGx4px?zZ^?CK>hV8Af*Sz`JfWJg$;@*x51V^!aIL-6ViHe&`sNmv zO80dV{{9W$s0rAK0I0+u@CE`SLQJ|w#XU&I^#;o;IT_U?!cN(y;(AI-GRPyqRzdA& z=S-O!r^y3}=c@8VPgV3Kj~h)Jea>gMcp6m4H$ zIWB>1?#DtSTU%5t@-+{5L|{sa+Od%IgbV<;n0p7@3Q!VUnsP1e4~bU4#=`Od4QJE; z6N(8ISq2t8W#*2YrY0Vs2Pg^_w{_Qo@Q(?(-VV)$AuN2TA9^VPC?AJaTe7j)-%3Pb z>*)0sq;3)5nbIDH7i^yd36Ax;8c9olwKot8H?CjfwZMb{v_zpH+egAe^PKcc_wF%| zf+6B5w1O^w%g^7*?3NJAp}8j$8WQp~SG^RMJkb-rO;)xdTJW`N-B7}Up}bY~eSO+P z>3|LJ?B4;b%90}_Qhy+DsgzVWTsMZt6G%<-8u)M>Li%Tmi;rvopM{|CDp92^P6T$!9h8>cQ!2$|~nEeC$ z({T%g1_O;Ji5XDire<~%0>M@Nw^$^I7r85Tg zS%E0#u}kmZcW<*qsY6p7tOz{3>#%8Prj}aelWT*T{p-F~R-%AmX6tai4AtG7IUoS4 zw;N#OX*+?Q3kRi0%J_iZL%g!vkTR0-Vd9dz-i8AtmMRDt*mE77JM!}PfGv9V`rA5X zZ4@r-uh2CJh}4lCow@aqOeCNZ<;8-;8V%(!e{AE3I=_GO$jIDh*D3%pkh%VC!oWkY z44f(;WZ*FCLME`?tMNX~NlNOY<9r}0c(kHX)nC=#z_@YUe5#T-oc`larvfH*P7d3p z=wLx{DilD2n*P}1kc~ZfkW9@}h707)+L{@1FF~FY2+#sKeJ84h^Z;S0IpL{}ys$l(X{*;peM9 z>J`HALgHBOOEO*ELwNgNRev^*T zOF|ZrRao`yN!uqV=a;*g85w9YGN=Fs&n|R2W z{n^V)0J#gWDO_Dnzgf-b=CDS?CGV4j`&E(}YIXP|VyW7YK8gdeWMF8Ol9zXHe4KQ9 z|Hs$hU?H?SO5HF9hy(50zglvNqyT@S0qaF+G?dr9-<~3w8Zc0-b84ZKZodK!)^VPt zJlm@cx{{$n@w#IRj4qR=ke;O_|M`XRapNB7bzrC_Uwj=K%A$E2!a0bGx1-853=Q6h z;pxOlcIEX3yoR2YOF+ZOh=YMq0qgzT08AxkSW!{H^1X3lg5v4Zj^wSRq@TTgb7a!U zg6NPVFJZ&UC4*ebke*s^X!7L|KLn> zGd=4xs$=waT$pC{k%)7^LaAZVWbKFau`-;v)Mn_&uIfa{0s6r}u1ZHo5s&VI@3) z=@k?-r;28(qLvU#6Q%9&glx~nl^lt%a5XtPj@nq&fB10r0mgcsp#kw8BE5(sw6r$l zpt<403g5!&>J;@%7SnSLGD>tkmmPEeGeXRpNKUMwk&g4nt2+4^Reg@??^jhH{u=7y z;Y}3+d6S*(*(DtQBDH#{x3B&g8C;W%0|NyoCZ+N5kvTF5fsu;c04S_7y`e!`yDBOW z!61~$sDS$6-N6+7i?=rmq?#Z&XOm2~fiMAZ_a-EJ>|6t_Mf%|KA_3XEg4s*rmp_g)AIpPjHqa6<19f!kTLYiA9}LRWmz%i33=zh&PxEhf>J*|P7DBHZmy3E z744z$={|?D^$@a=(xj0!kbv(7AzI9(+J=%7UIV@WM1-!nG$2eNCEVR(3WDZoaGP^<_H}kr+`Ff(D~G%Q3j*yZWT-X#4iBIHPKN)TK;B0y5))-*<#^T1G8>;3>i*nU4ARN&LJgkvPOvy-gBn zp}1GfFPxn4EGHj|X=*-DQo;<0)AWHv2<4NnF9k#)ulRVL$*FuuHBlWL-tmS#KsHe; zvWZrn0>XvO*mV}iD7-Af93}El1zL|-VP5DNjm^=5R(N4jH7v zv}0!^2i%^0ip15ZdnThoK@kzx|0LJlgwhbKijSWY+2LXEw1Va3xs~;%_M;y^JZ|CW zp)xS|qX&WTjiNL93gy{Yn>Y+d`P=mQRfWxcaQhoy)btTR%~lDjuC_r)>3BZ>&{z#W zoVe1hC1A%S`JpZPU#l|gU^JUpbSUtVTq{AGfHFx07=kR}6f(*cKNVc{H1 zwe~_{V!rnGlcID8p)cCp92~k?1m=v<(JbP@o8EAH?Qc#AkpzNmaX!4cC2l8 zFr5L%=>f$LuMpfL35q()DZKMt8O-6r>e?FG=t+3%T~OE)>0*P9tk z0u1TnMuZjg5x5V*|NpD%%EO^t`|!{tH6(Q-y<(=n!mfv#U_wRYwI%r1x zhYpJ0TXVjF0UsDgvyhOjNJn4RgTBDNz~@7F1z2w^_^OFdUGyji<2E144-!epV+YOD zJ~J^*Hvble7mWJ9zRkxz1G?@tOKS2mMX_ z?kx}!zJK-M`s2rs3$57Le>2N^!VRdMlK#w6*lb0-6csmKOt1|HjJ-?05)_$DD zMvMSLAEfr9-jw$rjCoT=h>}EY_W|Rfarxl9mBa=Ix*u!?Tn^pbVtkN3rEYI$hjp+N zrYa&YPa{0Md*ca?xP|4U-i<1BS8w1UlsazipQYR_1+&(%|_C#E4t$S z_vdf1OH`;w>*=|B`eSvm9^kvDTQ6)*ymW~#)O7WISwQ))-tXRBE)$eJj>fOedlXcv zeeI)-x3BNXzC=$7`2VL(P3IeL#-PhNc0}%TgX-ZCwIx^&#ol`n(NO_2ASizskG;wc z95_IhlA@!UManE%51F_mgW;`Tp{6pVlWWD}hx0se!0g_Um$cWNMvQOAm;wp$bSz$% zN?wE%SYFB6gKD6FM=3IAvff<5B>v7A)bt!I@KAo;m7Z;_Fj!yN6&IJ$LtuzB7b#-= zt#V6B1m3(+W1Y9ywsWTvz#Q8>Ypcct`6ebdWAue|b?Jf3u9}`6A|C}2ADl033x(KY z=9rw1QMC!_#nn%-+FmNaX{WPa4GWpNZo_cghWkM5WNK=<2FlXW$kVIP!`>_%_x^jo(tgS*mQlXYVhhL?@Lud8cASNUkW zl1VVp;OS}_8U!nu>5rccO?9=mn#gnXHQqdVXma)SxgR(aYH9!p0gNBkWJDIw?k2h-WwW6Y`y79@066o~>fkaG<_Vt>Px%$pq4eNZtq5=Q+7fCm7Y8JTY7n(iXb80tyATdMxpE%Bb z_tIP~rpD!xAsVn={`o5z0W%OXKyZBMI8MH&$>E$Y#~mDk$B)*{j8*6sPlPx*QCG-* zK=qbja`M^tJzZqvO$fUMm6heNHi$N2_z}t2wzLr$x@Zdz39jg*pM*rf#m0TcqgRPgW1B zt~O?~+1N(y0*b9a2Fm;$ZLep3$*HE3%mYtQVT0{dP2toLc*p%?%j0!c~2fI|?~ zr74X00Qa+T>0xztnsd3T#`*a&PN!Y=b+JZ97Af4i<3l@qxW`OZJ@v|a92qX9qQcm? zsU<2VX8lUJm+51=TCEXZ19#_d~%hlfG-b@-2VZxxa^Sh0BV;@6c--P5N}Lz5uy>gsB6 z!sF|yzF?4RB2WAJ6h=lyrf0`rDQuYn*dNN9nX0L&Ss<(HQ;T{gobpW$GYLiM#$yyo zrlzKHZr*$XMZEmXtDyq~7dacqe{!tq9PFLDyP#5nYR!G7(mS3WgX$U(pbU*JN|hyI=Szz=^@r--RCz=NUtMt zK&P{_x`HFaW!J7Rw72f=?j|s(FfWixJ%e%Bgp((CXO%%NEhMY+F`>S|>HdF!>s5HhWVBEcEjeJP2y{_Y3r&gFjO)YKdzX1=*Y z+NhVJqyS`r&DKmvXXe%M+S)E?9I*hjtSCuOt4`kT%DL;ye=Q?QRg#YKQ`>#(s%B;d zRF|I{x@W6$N!z$xCLll?k88GV+X7;>NDsp<3(Cm}17|Y9XW*#KtgR`;S1a6Wo^O{z zZbKwaVPRi;x)2xH3&h3iD<=~ciN(+k-3C6ywQ#)d=P!*L zu9uW7#}A_7w#P1$Zfz}IeB|4~jyqC{V!@#z#zGM(DTcshBdJZAtLHtfr!XRtRU^w# z7#0cCM8zsYP+VO6Xm`0NRNOfI)rj;vN?5>+{&wy9^>Ih$HlsV0%qezJk(ia0)fIyv zO;oNfBsFunM+Z~Syr`v#fKKVJjoBkAF{#sjCsWYPt+C?2yx_txlV-yTw|Sc{YA75= zZE4{d#IQK}s%mNvy0n>>^XWmWP~%vOS_>pkbFW|Ru(A>$5wU7QeGc>zz?liX#O&-6 z(&JpqaR6u+^EO z8eMkkgIx8zoBi9*a&N;BL3m@BzdqvUed-St%glEv@yGKNF=_t3I6cU8|M`l2l8Cnc zxjG3n=%35;)WGu)LAL!TM}D2TU)=)o_FL}^%spfZ2$f?RH0swemFj)Dq4Wf@>xdebrH$~bVdw) zqwA}a4@D>gUvBExrADCPwe$qhJ$U7c7v5%2?1L|ZPVfKkZw6%A?zI2we?-0uy(#iP z|17f^{Qvpa&gNM(I(VthPPdJM%E;(w!yQ9>12XTkq14FOSY!AL;JU^T99o zk0fp)9=OxT6qWkFPYy5aBzNQg$6wq13$!X1;m4LAbIbGBg#CT*?M#?!|Mw!upcga# z``7*26t6S0i}Shb?c+1}HiNN39Y*iZN=8fVVM5N^R5S932c=)mRgzLbe7k+j*BAek zX|gXaEp2%c|6MnpK;iLoq`&V+GR5;qBT3AakO~(~CJn!G+8*oY&`|S&ZDe9%h}BfZ z;d#9G#S-m~2z1Q^$)qveI~8*r5ls+$gdb%6uBnYl8beBt%J5 z6H`}LSL|rqFkaY!2}!T_6Tiz!f=Ogj5;l?|Ym9oW6MMty3Z;vSiyq>;#N7q%5Mr>h zu@O*Fg(}c`5@TRsY_2v=Pu-vs6{RdS=|>G}O`BRHtW>f|PEI~qOOJ?5PR1!v4GF*^ zTTBb0c^eYa9jQz9ckR_>NdDa=o}&6A3a`sUwTnMP&s~0J#M%B?Q@Ysi=0x%t9#+0M z+bG%`@;sgi8Xs4$INK~AdnN1XDekm6?(2DeM1SudcE9Ac*gewjyG1)|gXu2wzG%B6 zYP$Nre`dHGj;L{-UwKkXc-;0rX{G(!Pm31 zQ+Y)V@AvoZE$14j-H$eFXF?^IP+>tCK7qNAfX zy(3~qJv=%(a{3q>TQXw$h7#w(DK9gV$;iaS5Z(?t9$rvT5Lzs|mNAhn?ua7+;^c(# z4=+A~uaVN#OW~rsyRCRrb=DiB1p=J3qE6Vl9(%Xotku-k-uSGGW#Hu{;j}&dj#|{I zX>5!PX<&RD-3KH3>_hjj;P>w-cAw17&ThVj=S1>(mPPqzjQIBL@txNhFNCuzS65aH z)`xR!9UKhjo>eMcR~}0+#&zFUR2=yB-<_8Ix2yu?w6rK+d7Zw#*s}3%4JGHDUtfRk zhlW?Om58LMq~xon>q)}dc)`=s(lS04BFA7WL`5a?2Hiu#`$6B*=B6c)9L_MN8BV=h zqnPvdv~;~VoH>V;p6V~WPs^sV1*0CIlum>O2BM;%q2altq}6aBRw1%DP*WQNv4wZu zh)~}n#hRX(Sy)>OK3MHHyuP~JoFc)zg(xerz3)VqtnDZ_Z>;nshipw%$}&YuXAPx& z{fdG(VA!awD#^@DOsKHAzN&cvGHFeH$)e}={R^!@O6uyteSOb7PJhKg&BP1Z%2mbu>Cn%gyX}-VpDQXzp)gN&ystx&l9K4F|MRe+ ztbf}G&mB1i0s))Z&^TQ$@~y2c{E#;FZ+bW2N1`Eh_Vma(IPku5S-6!LQEJWNc{E|N zH(`>x@H;D29#)uvk+E366;((?aDbaY4zQNh;fbFS_-{o=<|5-0P>VwZo0*4EcsS^}`FG<|~h zYY-J7(@q%v>(QtS;;0$*XhGBc_~`B{kG=cuv~7g~R+IjsJ9R`MWSk9)m5m2|qPF(- zEtyXf1JC1~9N8-eP3sEphmbCGb2fgTEVn2+bNJiWvC(q>HtcrazGvdfxzEbV9X}To z5ET?qn_6t>>2`>jq%7NWR#gw`U0Os%NBfzixVF!BAm#-+{SwOGrr*h8$oFaR=a>5y z7HFE9Wv15FCY+TOPEt9RCbE^IqtCLHsRw?C3Z(kAE;LO|;YdhW?;bh%1qJa!y%XGC zyOr_b{c6$3YO1&O4&&cvinR0pdwwDbnoz7XSz;(yVl>Mtc=Ra`M3{UmtVX_M1mt*Z zgmo;n^!HOYG|=oGItE2Vh{DUw&o|wQ=s=F^_HDZv-%ENsjLDQw$JA;>reHfzbLQQO zG5ZrH-t$ur&)S6@Z~d0ast@l>U^WE@yAaOKZtw2f`^Ckv)zv4gzIugt$a2?u#m*r3 z1+Sizv}R|8INjK^XOI2hIjbMd%%EnEBrCG;)u#+A=F|)ffA!Talz$nGii5*?8=EOH z;&9(!`{LlV5DN9J)cm_$+s2g7VHiVy+!)Iytxd~C$|{^br%4BV_|WdPy8GviZ)z%k zor7Od5n4;@<^0kTuCA{0$*F5o$Lit~jmIvYsTp}xVsNBVpr1+}105-|RK~iIR?{zg z91d+$Bi*sVw2k8^8k#wOJ9OLkkkj)aJllb`l?l>e4Z z{~f4Z_*T0xP$o^Mfk3Ot7A3wKrqIREh zm4<9pV4wgWe|dVE^lPFzVNp>!u7O0Hj<N8xt8EZuP};t0k%{+%ZMlo6(Jp%v#(QI2)Ij;?1kI*uUbQ zBl;tOJfb^C+BNHONpq;dQ{GC*CxJu5Cy=YCTO=dvhxzm=9Qv)za|ai&Kd*G1O6c(w}()ADVb8$z)>+{Cf=vW6E8141=G}|44%LD{B)To`RtAu3k z?7w}m?0BDcY$9i;)G7gEJDIF`)9XYN2_C=s1%A`T!>lC zu0G1M`P=S2{@n~FK0%AYfdLo`B~)vZ179YJ2RDXdq>B&ik%8lKFk-F;`rp`NRpCFK1As8 z{mg`}&2w{xJ$RvNtT94PoALD#+@@~gLrj~SJ>(_*X6xiwor!wn0bP7Nx}~ZXzIkjW z$}7?A= z?vr)m5ENvtsurdf8aElBO&=mpd*S$PtHRtdu9xabc?}Vd2HUgLLSNX0$04Nh=@Tms zf2IBX~p9RY);GA3CBnpVsoAF)qP)lM8czgdQNPb4ipi`e7a zYdC3<{j+<<9PZEKNsIX{M(3M+k&h(WU+=kW+rGhm8~u_iDe3L}+HIesqv!$i=Q;R)0t9v;_t%4TiDLjIg2RMUQqjX4SUay+s+@5$z zPf}CE@wv8^iuCdI(T}wG9d9x!>PvmTTs-+cu|R981GzyJ7L$CGSIeRUm&&*C|U8Z@Mm zQx|4tw3Cx6oT}eWpT|zm+!SMI5J=(y@c@iHa)L*%MZf-3eUMR*ooDgewNJaS$i}cT zNpt7V*-2IN#6*-8o|Vm*blw)Uwc-SVvD*DsH|FY{ZrI;pW0Cjd*h~-Z@GP&YF>)4B zoSu%DnwtkjMHFjSUu3uUu-7lUZuM@2>X5i$RuCv?>x$u*jG z->Wjv|cW>)>ZUZpCnSdjM|Uq z$nteV{FVWv#7A>>Uym3u~v4B<5}nWd_jm z^AqOeC_Q-i&Oan%iC;&}EQbmWciHfGo9fM*HQS-5FN@s{pJ;nuE=vbhP*aOoPF2wA zdV8V*k?^=UEMk){W9_u8n9s>-_}=Vy>av;~R&_XPCcE!Sg6Y_AX|;y5bY}K2yG96emqULPsd>)B@5pL)P8?UVw-MXm=JDgME;mJAFms9g8Lx#>a1} ztQJ#ZO@X3*LiO(n<%70RUe2CfU?r`i6Vm&urbbo$`mvpZLttekTT(K$ezE%JA?`$+ z+8U0E^1ai-O-rGu;Dilg!o}7;XH3lfh85euP+WM0&fbEzatyMsUh%(wZ}d(59y;E! z?4uuTT+i;2;&yrD9UWO;tV)`|0Y!c%_dYut2@VyO^Qp6uiC4^rj_2*FF6nW zye}<~3md)m`BQhy)$ftk?Y7W+>~~?*9gd3RYee&WP1R+H0{n`m>*+|r6ixm(_70u6 zIL^UJ8}4~eaYI_N97BLia~a+-&Q|7gyvD_y1=FvCZ_{)V z)sBExRB*p_Pep?Soev&Iobf86%xC@%5`*-D0_2gA-s~JRdB^gSv0uhz<=i8YY zZ>Xs;-?@Xr$jwchlM@v$$m!IXSC&sdG^U&C+pO2}Gh>XDXKOAs$Rt(Vr%H&xX}gY$ zp5BjkUQ+v&_oXOE3X)5`f@20VH5#&4r~IF+fhwW8AE(GjOH(s2Tuj(H+>xb&?a#=t zPn<8T)4mbX_LH+LQGng@37T@;Pj{x2!)E*dnO@b^E+Z?hg!rZ(HO(WMo@13UN16gd z;Y`Q@uAV0A{QPE$x^ts8^zw6d=y8|_F#XK#AheU(zY+`+;wO-hJW^KSFJ4GItk&%9 z!C%~~LcqspB0S^LTh!EUi4!(AeVJusJqZX6C|d#oPU-J_H|envzUwzMJRIKABC@=q z$|zWg84&Pd?NDAo?%~td#vOO>2HP5F z3u|%nMHu4DeEquTEGt^9j#8}dUnMjcoN9Lm8gf~Md77f>_@k9s-`QW9X6ND9u#d8e zk;mC*&Rzwmlq>vv+2iEds-s-}-Q6+C^yBWO1&3Yz{Y1F9#4CuyLV+l}PN7W2Y$er9 zDJv_iM~{E8utld=RFJCoRqA4%} zR@P5+Q4gZx)WW8x%|FI;O{86qa&d5TzZq{OuqdBy_RDHsvisYgjGtnz^poihtrldP zwygBl(#2Wq7J1J&_C6*L4B`KJzM-q8cd!!B>ZapXPoNO-O8Xl<@xEOLHE)q=bGz-J zX^qm0pL#@-D#|Q+0$TIGexVkto4&LXRJIy643HlR1K0|q4Z3Uba~|@86753c)_-Us zuzY;Q;cm+rRI;LFkN`YWylK>G@odu3=GP6tQo{4W(~uiCaoW@SrM)R^$! z-)B-*W>I`qDE0a^U}WRKsE`mwXj^(b34?=aCMIpJuGPh@ovkewbfj1WWXu$TTZ+q* zi1xj$El%0~>z4|^Qvcdo-o+)q$WIg_r33VYfbv?sQZh50s3bf{Yn@j=mnnyT|E~Bo zD{J9s$^`pi_a9&6Q_#RJp?kaR)YlS_t_Y%J(MZ%fyvt@)lgRa=B%OhYB( zdy070H|L#yvXztLd6`jv|2C^SUHPu`^5NH!b=xbCOP@6A)Sb6gRZSSwlZUU9+06^? z)vAYe+^dRwq&0zNeWtpgL8hUuOGdFSx@}TlUheqE-;sLLvJSZ6vi(YlOtUh#fS|<$ zsSy%%7j?1YZ=^+H{E=fQvZH(pBlFbr@5#FjoyGU(3t?8a1pLDM zC*eO|+*-EhhjUk@jhmE21sgrSu&B*}2K+@yNk&fYgr1>=HY)0dc>kpt26AzlVz#@c zN*;aG10_X8G{0sP0CXJo51xj}$;fmD&tM29vUmPqRgjm*4X66&ZC)OuYJPlp?M_OF zzyCaaHEwcWu-dCrR9f#OVOA|oPG;!j{bHrGcoHt+Del%2!8$t`x$E22CfnKZBV%#= zmK`6Wg};pUNfhvX%RW*KAQ-*=q57S>;p>D zm7saOR3)P2aQ|5cl!8i~ow$*8j^VLNV1XT8p^m5b=bR=RIEV7ZpcuUoojXz~v%a2k zWaLLmtn#hC)S`|6tgy)L5v2Hm-ezC4^g$4fZsMZhzpKM1Vw8LH28n^;CO-M^h+uSY z|Df~1dqO;P>4Tv^eq^SsSFt9EsNBjaBY~#>y#wvIEH{vjoxPpIH$*0_9Zt>3#R1ju zNcp!B`#jaVcxHL(aB68>=3m0oEz(}A2fgmj#F<#7`3C_bBE%~wDFyqQ*^2Th_RPQi z_`$R}o9yR#zW;gf%|bh6*8Hsds=<}VUUuOV-rG;Ib6-qaM#Mb$3fjf)u5J5rm$X2d z&XZ7|n^8Bg`LK2tUtr-Fm8d%T4oG$1b5mOk2t0e%sXDM?oSC5tP&UUh2w1_(m!h@A zUvu8&SZ{7ORAI~vMwz?}BO_i$PK%5HrU8X09#_Bc`{BqgKwQ za)^tG>qLGe9v#a4q1-i*SMt+{hf%clCONtA$(1|C^o-6ok5j&B=Q)ojDO5tsW5*+E zS;baUUf;i?@6Ng((}{V!sVsZdx6pdaWjP8vUrP|HsJ>#7V?-C4+nl$q|8vRSmagcS z;85%)@#CJhWarG#2Uvd;Z?lxKv3^Jc+~@3U0$PCO$|TO%e)L}Zr2JHE%qYdOiW=MC z>}+p?&CVd!lkOce~+BLG2bU8-MPRL9^priDC~|b**UZ$Wtl7jx{N>} zzY&D&)E*HOg!SdiO)f`sbOXbH;IP-MOENO;*Os(AZ`>;LR(`3ZSE-|xPP_#~>l7tx zZhj~88BVc#%uC?oaDFJD9RchKsCFkZ@UP-ew=HmSJbt>@>2 z_b?ZnqLdz>AMC4R_yxUmuJpx`Ml&z4GXDvrvNR#eWJX(5@o|CUhK&?b>J=`i4*Gu` z7i@ZvT-w@rh)G7$zkS2KfBz5&mA;=4QaveO6$4XX&i8mRVf=*!uiy|Ye?V{joW7yb zsD2n^9DLvOwVj-9fzoIDW?6rKna;^+db+w8M7YXhyBl04682w%ll7VKT?`J_iJ`~i zSlrc8i6O)j`-b(xjO}VKLbTY!_2)O8IPr@!3ykf?Yr}gQAACTPz;VK(Dc7XNr55qi zseLwoaf(`@avCoBVPRdwiOt*HhOZ*fX|-=89f-#O4Cjx=Uaydo`_QYkXRJvhdP?Bm{M1YHI2y(~RQ$gd_zuER2PPU*eaU$WN>SKZ&s3IL0#Jb$AR)Pk;XYwn z8OsAw^ySM1kjH?N6RF@fnLBs<6}4Ea&4H$3Vy*+IaL--N{X9fY56dyhm#M>l_pZHi z#heCP-qE&rKt%;^Pcmi5pFe!lZ-$2T@uC~98_=JN6{Eqrk5?biz^uUAIGlL=?AhJz z>Q&^g8Ex}^c-z$c*Qj?0|KZ`Wx1E=gNJ?^1FE$Vnu+l^-RyW#7#~}}pu__f8kZeS? zvZA)Noo8Tu1c>8lG6hej?2kdYEZ!0lXGceN*zN%3A1Lt00ss&tJ8bwa41B|Q`uYv% zScWNDy11C1)F0nNO@~Gv7MANppTa+G*iz?o)U1Gp#&PpzelzvZBTB+W%A|jEak-22V_f&(V6#|m&jJ!D7SWG)aiTdMl>N1D?o)72wt*9qNTt>K~jz+|B*bC#aJyug-w(DOct%N?5SVs zw0#BVv_nYPG9x+k_}`x{@`rEc^$tcEki$-$uA%*Y%pAw8KG7mr_SXt74K>Ve3XS#?Q`D7 zBI)F3x}6(SCIt>tolU^6rUa%2KFb)UQ{doOA(}OZnl#hPwCd_)oV_aTXV34Z2+A>V zqTF(2WC_msVaVYw%kt;TBQcrIDj7H|MlI{x0-vkY14~UdY!~H(;aGqA#J6^-71goC zAT*Bl@L?JPNbh*s)WP)Vp2A(lQ$)pV+tvne_%15_7hBI(vVvStQbX>`4sEErY5%45~FONh4H9rW3 z@2+^*zhPWYLr0sYxd80Oca@t66kthpy2V?awm2aaaO_vN5gYT z`=eBq2K~z|=6t1^I#R?F7nXS4@{03s?4Z$J1n%44dhvpx*lg%6K|u}G)BH3YC}5zm zM?3?PWsjj=rI6UkDa_pJ2aS)Yi6+ZS;LA?e@JLv)IWBbF?Vc zsxr3j%q=sc9C(P}Tpbac+OwqC(e9i)i{{Dlofg2w?#I^T;A8`v*3kHMvfH|J@;mDQ z1en%9oYG>uC92)i!Xt?k9Wy>1mVeC3aw^z3)tU^7|6pyI;^toBl=+UjRo7^~J909< zn)x+pl5@8G<4;5HFMIx}Ld$}lXdogLuYGcN;jN<~-a7a5^xrc2X~fLWRS_NY!JQYt zr`!VUsNn1}NJ!w1=?G#BWd+d#A(c@Zj$HVcF(gdbLEiwEE756Wc=!QKp3vXYOQYu1 zerV5IEd>m_2s1UUuRMx%`VU+2+FUk^#qlvuU9K|tz9I1s`Cteg=*hG2tZa2UztxoLVJkkbzzP!k6VzsTGG^v=mC2-7Zc z-kPBtH^Qm6cQR$YmUMWS@AzJ!sr*x%p-Hp5#BRWI@CXR5(D5oIjuqtm=dugmQ-}2! zV?l|Ft2q1Rv^czG+eVl&Fm)sGb^ZNM5Pj+94V6MdnLyOPD|0`K_Y1(2(^GyS$6U;; z=VO1$B5d7m3S$AGN8mV8_D}x84hE5t_%ixbp4|dw{2zcK5Sqx# zY&@*ShJ!ExZ5sah-a%{fg+Zvy8S)4j&ssXM^hu3{uFYHTom zqIxGBB|yf{abq?B1fr`;El}L8b{KI!!3)jQK8I`x5wP`zK+46v4oQxtI@cqdKm~+0 zr(MNmYud3|3w_IoX!2cK3xSOSbDRlRJfIJXZ)XUe2&5ay_(;d4N^)^g?viy^M#dvM z;D8nO9ySMXFxiw@L6L=}a&hS{5b*IS5x(I#PfXlQqzHWb*9goTYTnzcxxC7IvRTgQjoO8OczQ4}zj1A}Edf!{woYym-mT4J$R%MJM|#{kOcnKDDSQ2Z%o~Qg7Ty zK@4L9g9rVABiVMml>?K;@t}A!D!iWur89;tYiYZ7m4Tjqe6|A_iH|S)o9jUqocQmQ zHu-H^mHpq2qvXXiN~kwR>qFo@Z%$P@_OSPJCG-fnmEETGd_yHH923uT_qJBWz3=Zy zhRmKc?+lnbg03{nRF;=-`4*u0U#>2dIKUyGDwLV$*&!Mr6IR00rc&A0{vF-y_XvO0 z^nT=Q_dOue__x@i z;r(*MR0r3a%hOG0rRSYKGJ(0;UD<-X#}Qu`$nOx6@9*c@!BCx?6q#RH@&D)LTX)u_ zc$~c1*`4h!?{=L7sesL^U?3&#v{p|j zSjwXR@@IsS;^BcW+6~&Z!Py_%+*eexV1iRna&i>1u*an5KbhqeTBn>nYjwy92~e@iOmw4k~S%~4^~6CO`i2s6tOU!ERFo2sKh7s)Tq2vok5|i;JKu$F#pc9ag zbPdc{`J^-AfdW)t(Gf`Z&p+7Do-L)%cr$R{eu5CGUXzrU_q1THxbnUcVMJo$Td)7d z0E&^4(hWFfQlP8{IFEIj@};Mx;eftrR1$I{g?}Krdju3^r2eV%pVH=vk$6;8rl|Dv zhPM!1RG%>}FDgbQd~@^B^0M;h%uI4<@E#3pq4Gp!n$+4l$&s<7VL)rSZC>5We1efF zx!xJclhBi$ZMtrz^4Ej_Gyt_UICv9UDL)&gzP{Iy#C9;(?I%L^U(umzmg00dnjnk; zOJ~p;IFar~qhV}JPU9s64sRh;#4NYY9{;B|j=$~ZJZaNEf5xqKwvo5rAIB@rziyv% z-%(2v*9rprP3&S9r)sa=#cjX@9fx=_SyU~e?-@eUvr?p;0!57&^J%J8X|K4$&Zmjq ztiC>6OLa1Ga-VD#Z#j8XIuT7DA0*9qE@F;Ksjr#x7-1{NCipKXdFj*f5X(THu4oz= z{n9r-AJfQ0?Q@ML1~3^p1{)+&urc(CZ9yn`e?Nptzxl1uox1^H=a_eSN<>872ssy~ zBvU*82W3Fn!U2X?2NQ`Hy2{fk$tQWaAID2qi5o8Vi8ZxExty)`P5Q%1Z+d>Ek51GIsGPgHC3*RV2Bu`yPJ`=%=g-qWo5rit5=Vg{ z$oBFxOo_TWbC5d!H;HVQqwbrK^N&%v9KOp+?>!{Ug0@d0%vL7UKjz!K;>PwCmCMn z00T$8%9aoYYv?Vk@6g36j|aPizWfy_6Ep(%g%$r(LlTl3hc?Hlzy!#;fdb#l(`fJj*bo(-fyHBg8#xP{EKx z4s^o6peJsL;2mx1q?pu@O$Q)bQ}YLj14@SVk(6YXY_>Bc@4>Jo(Y)guF8y36yXIyI zfjJ@zEeG{@T2RL}FJka{t`LBnybOXINfJ6koRLH!_u-8PJsR-^IXu4C_ztted^_b* zvFYF);ATpX3CIcmMH*nDPypKk;3mUl;pc};wzt=8c{?ta6xsXwUHwcY5HrvhciYIA z(+1z@_a)s%Xx=M{L>)bhi_FhHE-eH}24!Wj0VPRMs?0YKgQ|1c@2VGivvv>6Cp3_X z#$iRCr71359(%W%q`qz)j0!s6NsU185^J)iP-Eb;r6v}G)A_(>??a9PST*HzZxXpQ z-fq}S%m9kluitx(IIE~Uy(Cptmld@rS9=l~*)mP<#6IF|P>dhVbn96a?k$->Ohkn| z{t46By@C`NB0X;@HtaRz0YSjSr({D3LI%fa0kp`fT2aG=mWS$fE|}JJ+%ydhe-!wt zoj`mP54oQ^j#&+`=EQ>x0osR$J5zA-lx&?c^_Rgux;R-9HZoeKgI9*$SG7^7p@6zzcyhJdQL- zXT8qJU>+hgNj&j4;=nOs;>c`JPLhz0rsd>NBaPpe7#-jc7Jhp*d%NSTPh+FrN)<-R zM9*{>&=w&5p1C`6!QrH#320y2G3#g10XTqxoLy*~Vs8F1yU;rD$>&-E!9fCH7WN+dj~h`e$5SZ) zAS=Bg)DD#|9ZE^@#Qz8b;mOVz35P}qNkn{!(`A%dHw)^~{D;NIQGrhtf^glBl3GM} zF5bqHva1#*g)^t9zwPWqa;FXZvqm}j@XiYsVhW^7+1lSjt;`;`4(0T4c7FVbA1HK= zQPa_3gFvqj79kuU_yyh}^YVDe0+2coRR!i3--E7NQ;UPdA$}abf=`Gb??kU0%LzNe zW9G+nA4ewZAOeJ6(r+P}2RwBEWDCNn*_yqt97st>oEw+7rX zHxAzCqg$CA9O2@W#>n{OUCJ)^@86L$?Kv9`%t}ek49lzaaK}J#Pr0wt9)trfRo_1~~f%eVpSB zm!kJ{KKWG6YAUdErFTx*T!%JZUuxC;`Ds;keYK}MXeyw!yHy!*;(fit!pcfqwGikc zc6CAs5{mIodej{BssH%279=X#Q~^aqPj^nupBz&2o)?ysyweFE5WPbf5@30ruYT{# zR)1@gDW5FU#*Bakj&dR-nOgL?ZXngw&w!mXH^fTmvu1kZ%a{1oGCBWHGQes)H$KMx z*c*DjYJ1^A{wz87?JFC9^?NOdRnhakU239$h}}%tVA;(}(b(IwE^KWD#;}>_L1YH= zS0@SYUrYj_h}TmpAdAiKRYCoN8f{>}G9yia0>1d1$IIa75?$ZHZ~9LXM8NU^<$>Rp zmS&mD$pSXOpG8jZwAj(X9~3_?AyNW_M#i1iL=I@Q$8|l*^|804EJKvR;FpIke+Jv) z`PqKVDln=^0dIQv(C?|Kno^n%WVhntD8Cz|JuRmWQ;d&?14jXpN4}-Z>kL8?5=>=f zt`XgK5zUsU)!!MuaemJfm!4b{h@KIZIRtxDRfR!Q+=a!XkIMsB*B5v%mv_VM5V8)? z)ZVrkNUN&eLa53+jhw)&+7XLt-23F7CLeitxR|^5KSrTzYXb-+1hmH90-(bG(Hal$ z*$02m*HBU>=YR08;sJsq-u0yoJ@^so)%GF+)=7RjFJ(79>*%AP&Vy*qsNfZ0MsupL zgxUW;Tw3#;rO@o@Y1X>SBhHh(4hJar??cb$-u^{B_v~W;ae^aA%T=~?po33F_8^T~ z|M#K1vYKEi7Hj-#lK0XoGi`0ReiG*C|E#pCI3|qpUBTDPGd7#0Chz^b7F-m)o&81a z#fEoCyw|M@HL^1TGBh5)l~!g9jYO zR){#wc2E-5YiW{kro5#V9ersl3c1+j`2>@rrDn9E4u^hr%3V*;QX@a|NwkheGqdfj zB+fB1XAxqNJ!^USe8!)gw`I%o9uG=B9$!q%KW@fTIv0(-|Kr8VoLyVJEmgmlT~w($ z!+)qe^A8XQ|8{v2q|9}Wdp&sI)~1j<-~8VG9;Wi=>*K&EkY*qeCc4o_k*liAGBA;Y zCRNa5^yUjRBJNyhM37(G15?WOk16-ZA5P$~>R)+qLyBRkW`oJM-?{ko_Qqx|h(>-L zOY;>|#t0j9kj}|o10YUJ%v13ZI~9cX0zL>8RaI~V-nN+vjx^{BAXjX9PIGr@vd8^L zGFV^tCt>^0{;S^v(vT5iC6p5rB*Q;N+sYl3|((&Rx)GXpqE9>V}%6);mrIejrL{){{|*`DyH)4;iFqCjJl^2ijSJv1MR@ zGW<*d3A>HxTyg(|!#E6h$b->%;id zp2t+vPE*)bwL?-WKXu*R1rhrU&km`P<<+szd5`g)KPLn30P6jRf)D8mw~N96`9fCh zGOaPch5r>ULqw2nA>D0d$^?Hk>NRJVhWknJAAY!yymjcCtp4eDQvQg8xcTEk_l zd<4)rq8KA28_=k5Z6Qap*Y7?1ddCpA7ExkXXU?5nIo~f%4aAP8dEl5%o~s+(2IBM| zmI*Non8*SSTc&#izw?}>jI6rv{bT0;VgeUw9;%OkK=0+mUD6O1BpT!7WH)7%f82BF z6UT9y>Sa|V<}yr#Z}F~jK<}!ml0x|MrgS`a5Nr1_ufVD~LNcXQaE_P`Y$l*#;ttE1 zdR-q-fIJ|3CBcCV4Yl<6qr~(najMvIg3ogD4Rx;z!{zX31sy0)gzvCjT}Qy$ZnmtT zLr5?xF&ImxsQm*7Lg|!`f*_Q&J9i+p-0_J&XZ)MK0Hmw7JnQr!JGVQikl=FqtF`Lt ztZTg3P`rF70$K9P1s7p2R?dpxJdS(THd>I{Vrkqk2Q0TELNX*f`wEXLOd%oRHLR$O zk~&LUm|*)-zjp&U21fId1SvWF=%a(#G#xuTao`T18PfCc_!N{peuCXxW~R><7y2h% z)wv|bsh+LYt^Z{R!l13rA8{W3AbdeVsgj+qT#}}9Kj3Ce%%e`DCnL#+?u?L(q3rh1 z&Bu~s`OK{L7HF3|d30CkP?p6m6r$bo0|LMk^U%T(baQX9# z+&?&y5d?GYu>TQIWb0Zh)T_fH94Co|&L2JZTJwso$nM|gnRYQ0tFWqlJzbs?-Tb@0 zcbei~zTW36TMOwPOpQ(-zE9SF!$j8ScK{j~@w7JkhJeB)K>R+8q(pkqCBL2aX+BB$ zDA%FEYa>R4+9AcVT&fcJz@49VSt7ot zD}lpnB7e0_w+PW4r){x7Jjn|jgxmmR5!_HI6;`68e}$n3cYda1;Hp5710vH18=>&i z2f~N!LTX@m$6yc7_x!E$urV z9C=_=!F{qUu0(c3QYk8lN`Hqjir(qM<)5EJb3t8ixRXj3?S&!hYXZK~x1rygtp>&O zS*d*x9Bk}3J-|Wijmz2ZMCR!&DO8B8SygnbKp|4`xurowJ>T~^yuS^{%XYr zt@IX$IshPbbb1*4eOuB%#xv{b<*NO#^K?hp8TcCmo!ys1F?;WdpzU7VoA=3iIp*4FN$VU zSM2maBDGv6Mq^De4A?Yen7*VZNS+mJ<=WYOp|5Uum-$WcJr1Rl4BQ^+GHOwvy}Thf z!&g3c4vglTjV=vXuNdVuSPm=S5iwH1xg?hfDVw^rnV&Vb3wJIKQk|Qp5^3(;wgGXn z*l9}?N}en6{95=o7!muw9-bUG4sF?robx8KpCHcS<>8Lvi=V+Nc^~$s9l8-_u_qtT z4{$5{l5+0Dlo6weyS$#7{1N|wP}s8Z`ST=}j-CVp zQ>?i=TzRzmbj!MNX5a1)iR-+N0HklBginsNFd9xXk-%PPnwTJf=&Jz~rFsqD!h0HS z$n5RGjWPcS$v(sYqH$f8|C-gGmcV4_ubS7oQRE#2fD;A$YO~)KY8Nc7|8I6~u1T8g z9hDcjz96o{2{M6^1HS;ns(+ITov9T>MuPM2b>f>7+ud^y;*WyXjpF3s(c(eU-$~-K z)68O{$uPpx7g*=+xM2ufoqOzEc{4s#9AfP1wMRN@hwV37h4bEN-XBW@^aq*6y>`ku z$dk9kvSSs$?q;ZAe8Q1uW2&a8*ug;n8jV0faaR|CEKe+;T|tDL{VUF<@e2X2(dOrQ z>o+Cp_aeI{6~QuuWZRE!5*9YY6bn8bByh2voy>yE!+>x|-`OuY_}!(5KpOf?(d7$( z-1p|LN#}bKM8J-l&rBplq+o1k9PQM!e;W&Eee?FFfz0T2izy#SA2v<($9);3!Q9Ib zwBP$PbdE^qLO2Xb$YodmYsP)uqosWB{QtAtTWIoWqBV$?rXz%t=55=}L;(rhAiw95 z^|X=~wzxsK$-b{_T6zVaw*}&u#fu6WxAbbVv1B8>@@7-Mg&F4^`A3hw)W0VBc^#vxecevc0_$q7~kqx+2rX!rekN^+`;Uow+=%vC% zGsuO&MPht#aZ8m1IKnaBO-~0NUnxM^V|pf;>5tRqY`1KFvpHN7F}Kh{(w;uEn4zI2 zW0vvo7$CX4&<%l|aa_TshilK|s6aSQuFe^p4sx@yuww5ey#3W3{mpjaYu=TiHbWGU zo>K~wzF`EDf&lmrg7aUG3zKEinjdpgw?q0F6_V5wmZ(kBzMlJCiMwm*f+af^)EvFa z9V+x7aREu$45irE{IBU;#A!ASWXxqDK=x!gn&@)H;sz+%l_s%NXd9y$haE5 zbgSM}h1NIAi82hbwdgc`oUQy3#nEo5>j92`{@MI6LvibtBka)iYu%N-DoDnwH+l(N zt$JH$%>5=Bj!~Z0&?;V9ycv|Az6!TA+QI8P3Po3!A2Fzh=+5V_a^W97$RFjDl@U-p z6+}Xi?`WoXTxKuu0b3er83*l4)5EMDA2<1CI%tHrc94zZj1JAU6JLpi?_?$MCL;9> zYuN&K84+2o)BQU=shka&x`F17%y1i1a=elgZ=dY$t^Z~L%*+M>v8X_v$`<|k^T6mf zgJuXB>@9`_L54w(YkcT3=WK9hH}n%fT3>w#V1F zH8d17mI}*L?8XcGs}gpPt1B8I_amG6JqWQ?`YgCrlUsmaU&w*rpmu5q9k zZbWo!9gFrg`{sOc-x1IKvQf~`fOCDZ8i5FNg8|rj&|lO91Q3CR(7;NE9QUO1)V~VV zS%4D=GSDtgHcKrpesQAd^L?_Ci1S0n10e)4$UxCQVA{NPTxPInn+d>rLZ=M<8jFlV zNvFVn&@>Q0N^x-yc6nE{-}o;ywF94htIA8P>go|tw0*mO%||I%H~HbclH81OH=K}4 zGl!fNNQHoj!4z&q%^kJn7f^Lk@vc=-<^y4V3~oC%|FTE0cCoXyFbKVq2NqcxKrlYi z0@1<%HJ+Sp@B%3IPfR4Tt}$Z;8O*CUEor2vF?PO-`MAa4#w)kq0*LS)3Ntg~ua*FL zxFh@uEO)M34#?L(9G#r}pP5LxROvp?GiL$oGz#G?2T_A?_BE?9;^&LgyLoRp7WIy| z(cpM|B@mu6eF17%_LY(Zej_?{lL!S(y89Gzh7YDj~@K3YW)Vb()H{QbK5>qejC z<{NQX;0o@ZZCG$QFoki_T|#mm0Q*F5#%N^rzn(lEo(Td#kkY9mFFt-3;!X;h>}EH> z3b=Kok0>Ze#9)S^b%AvR`~Uj2J>Vj*IZ6cu8c1JSlKxZ|>_KEbO^O{iRyUC+aB;;z zky`+q{O;yu9wIcT_5jowh-gp=MMl6BYg({Hw089hOA70H$H_?XFGC|49dp-L>=IW( zLSbn>5O~dw@=w*=?;FNd@cxhp@wFWYszByi=C7v<(zHAAaH`fmf-T0~i32Aq}b^e@@z z2_RR_Ng#V)Zag|Weu$d!H@E!ADO?jQuYdqYQ*(pZls_|?pW<)71>^YnS3$MrPDD$KjfZD!)@f1X8Imj-AzdVRbe7+9 z%nXSL#JBi+Af0O>dI}u~Pe#VE`qx)tRKhP%z$k(f0h$Y{b%X1AWZYhg@XHYJNEATZ zh3G9sckCcjLGc|>6A&puNL=}0x*!>kc5f6FHG?}zvoaLbeG2!?roFE_*0u$-D+~vUHR1omJuf;NI{{T|||*T-ceL-Hpo}S^wtlj63VPN(NC$ARPd@Bn^Mw$^BAG z3{8-;v8OH3hDO>X3l~q)1DVD}kKW3Zx%G!07rltv6dh|jC`(Uj7h3V=d=zM^_uiAG z5ZvUN!OX}A6E7&S2d~1M)6Vm?Z4@6>DcdN_sY}ApB=|$Y)2Ih# z^~rOzo`;m_o;AnQ+n$oNco9K0-L8&(;;UZU=U%adTu+2=XQKT2^?Geim&(pg;q*fc zdjxG(^Q;8Y>FNF5gG65f#+p*3jOFNA0NkVdrv~NyEbU`>N_b! z^FG06Mx1Ut&xJp2Gax3pU;8+Y5Q65~OAel*67X>Z9VM@q6qP>)Wj#;b=kbbG8u7|3 z5=B3atE*#>yD#3}742-hrOBhLOsr?{lXfT*=YG*EbFnGwhY!gGEQKQc(24+xa>MDD zsdvwSPn0-dq0R~6)P1zDO6Eh#F46MCTmV9^QBivsW@fbTDIy`$(?v0~ec!(e#W)bh zeza9mRSl;U{BZgq`W3SzD+|m07e7scLqb5Tq9P(OfT`gbNM*iR=N+fUN{IWnx10C1v zQ1*s~b`o-+{*_>mbz6Ud=0j-}71Z3^-n6fGZr#n8Ra6!5|HANe^11oy#)j4s=v!3T zd2Dch5MyBhPwCaG^9LVoZq+SyTz{{2IOcx+NN{{2OsYG!Y|%niSxxMGwU}FA8y4f{ zpY8gZ(baP&kDE6O>F+EHkaAFkdtDk0WIf-J@0}S|u1w7VqmxyFPrLEzW=F)FjNEra zE^I%$r89aKQwjOdwY~!k4oR6tL%cp&J!tg5=Tm z_LiIEw5sNhwp!;@Q1CE*|4xmBFXZH@k)O^8a&l<*_6#NL?e|?rMGq+5lKC3e8!$*w zPfy!y9kAL1u<#ZZ4baKriuryQ`3#MWWE^NCjbuq3hvk}MZB7eQJFJ8@ed5p3Gg`i7 zvGM*DLxJXCUD;P-$9h~b7h6K?1460$HgVz9T4@$)DyF8{pB+r@!eXVvmolp<87cSQ zA2Pp4Y-K1!ylDP4I=i8+UANdh{PQQz@-Gs4mNkso`lXgJXA$_EiYwj4_g`y{tliJ} zN?-MN|B7Aej+1e5YyWJhaLdKDykmD^hJsLuMbS4rk`=z00TwizsydvEvxM7Jkr}RA zl1DS)_`H3Kt;_Q@YZVRw=cC8fRkr#Ve0<90-uPx8?%Zt~Oq0z+W#@g4PI+}DN`0_O zEAQn+a1(jea5$UBQh`D4j+vR`_leRzbgWvxFv@;Lu?u=_oiNiFv7anZ#Re@X?5r&W zzDlsx8)LK$=Q?fW;m917UlddiR(c0ALU_)OwvcdeUccFyMV+b1VYvH?;Ox)ur)|PC zkDv7TeEoWYCmY%JT?lmc^SMXc*x%dQ1}gq9y52e}%dP7gN9hLXF6kB&6cA}px&LtdEWOM-ygs4jB&;|^nrp5(*Dhv! zdu$!KJ3IYEMuxJP?C;KW%*UC47%XS$yJ9|HLbBxS7e?~y7MyxbtP6t0Jk2xR?5_>k z4C}i?DvoKpd!I4geMvY~p7CuWh@gdl@-0>Gr%=;{W@U&~x3siSE13uxhu}n(mJWo( ztI=&wk%Zz>{f5oRYdgV*Di!K#B0_7`y5391XbHda_9uP*`U)-1=kNfeVx9$=o~M=T zQ(CC-EZWmN9>)<_eV6-x6wci`YF2;cq-SK{C@I~CMSmidwIuAaIa2GSM~Bq?`*-K? zSCxD}JzS0f!gw`x^^m;0CPFyUIwdR_&&XbJJ-p5g-Fh$?xvp~Z~6Hni%3XGp}wdq7@BF14$_;E zUVrs!#bj$Nl3aM7jLVQZEP?wKA!#M~__yMKz`)0x9W`H71dPpokRhWvw;wE@NdD_Q z+MN}F-n-Y?e#VK&xPMFx9v-#u09(Hn35+X3K|?#-{-@A3Shfa%+KrEYGNw@HJpr*G z9ei2MFHE9cTW>C#?u^(-f8y!E!1)sE=jS2+^lhkGR%P?F$eoUkSGICY*%ByMdi0xT z9^9H*TFvPaDM5zgzgB1l1~Dex zaYls1&O|>fVw-oSx4?|2xV~v!ny|Ifdz$#bju(dAgd(GxOUdS1eS0et%_bT2%yQi> zifS!VyZ9v`)fSpqLn`e3pb`HJ6MKWk`r9!v=Mz6zY2UupC!qM3xT70H@Hnf|qiw*4 z>HgyBRv_%mJcv^8h{hIfNFgDH)!rBPL9-dwbgdVe^DJ7oWVgxZ>XydW^9-rbF=1y* zp6ndv=Rf(ahVJ%#dHADeS~iw8x+9Wo{G7V#^=xas$I)4(SSy~HnOSvp^~k?#7>Cpe zBZWA9bIo|qu&^S^+#TuRG0mm~X;9F4g9 zj^nMu^x|2HH*2&3IV*ea2aL%(mf7LyHZ8GH(a})b`<#(cQT4i((@p6=xtd!2b8~;y zr*N~H;6$+VVByq52K5mmaYV#Z#9qykwezoV>4?bdikV!VszA&%x@!|$>f7`4XK3^< z!*Z)EzjS)f?w+S*2_18Dw5%$r?T}_0FT9`Mus6%d^kt5;>gIzm1cyJ zLBu5M^6#}(Rilv6zdg}$BN7#DP0tx6bad=>*iICajoxJ7>uvv(;ACP?=XdCYCKvlV zG$25*&;uSiqo@ej$5@}!3&@ZXa&qV}O$+qx4`2`x8VLzWUO_=C^b6?3eTwS$n(8jh z&COfE6oG|>H83(Ft*fisP-$UmdK;$C@PpcUcZPyW=ru|k-{>_iOjNqrrRpm$7jzK* z(j%z~)3d&$qzvY3utFOf@jLA2>hm3&M18NR%{rs}0|IWp{k!hJzP?Vm#~V>zUJkv` zB#zVf6&3e)=Ncj>e^|gcq9=f>V;YbO$%i(PDJT@AWqCRh`5Pu;q)~L0)~sH>d>P%K zxap}p=A3fNx(UtF$_j=+Xp!@qq7V}k^MU!s0QOzoTFJ&qfnbGAP)rP3W@duvC!76At|%u5RYylBik$y8Ozndg+@9upjcIRh zUv587%dJ=5eEIJP(8ceq*)FpCDbJ3@XzzQQ7eCdKGDv&uJ(a#C`vP*Gpu)q4|0ZgW z8PRa{V(q3GjZOH;-FA!Gey0o%{;<%mT=ot%A?JGW_BO!Q#r;JORrPmfB6r%`+xhJ0 zM7QUgnhxEVnVDgrTHf~HODn7J{xtFBmO%9CH*0w68XEktR@Q05Jv~@MLqqNdOW+n2 zzj@)dRBOvCDoTyhmR?>?{8c$c^2rmV7&`H}g(k<o&p2;0?}|=Av!ek;k=%$mFY4>A|d%` zI{BTTx|%vPIvVfy7st$xbPC1Rk5roR0pH^94^ls!yPJ+|1fH z`3zlIx&1{hqXS#ADSSbK43m={eVx&3pLt%)e4c9%Bj+u_SRMX)yV7j5ds^h(#z4zQ z1$p<*A9jGy1&+m1hKGltk%qZCR;-WH#@7d9^T=gnWOCEf{S*`wOpy3W3>ymSZNL*e^ytuuf@g08V+4~KJ~J(vGK*yiWN9{UR|78)HgJ6 z`d*(MFd_RXJbPAX!h78fW&wU7p^|a4vmAyJA|@uL&dJG|!?mfC;dF_>M5$0bXzXS> zY@`0GzR_@UA{8+2)0Wj34h)a>Zgr(@MMg?oSXg*8Ki}OQc1v}o$z^Ly>!R8>?dv@F z*%LS5G`|1*`6nNa#@9E8^K0&QYcG|?{p@3nYMfTwYTh1icAQ;YjBlLy+CUGn#W<)J2DUvrp$`B7XbyZC(XsL1!`Ix04{-_2Jbw9Vx3=!nx-$ot&c9ICyF zJwM<4z3ak~q9QJq$B!F-pO$PG6zm=3^;(Si8if|r@{E4PRZH1C5jaj~Qfe*K*(-Cl z;zPqXj2-^EXS&jZS?%q~oxpQnHj?z$WQGgy#Uv$BvM46{ zL4LTENA4tS)`=r%KS!OPpC1<&=T}?%cIB$hbq5PcUPCJ_o(P>q?yx!&^u&+)n3Vy(H-3Jv=O$EO?j@f=6>c>%Hle zDk~>v_U~||8WQ_dxfQZs!<+BVKJkcOUiQ~l%);qMk?624=`C|uv;>@sZe~U|Q*#sn z5#Mj1VxeogaEkTm)2AP+cy&vWAUU=8-9qLw?@NSb^tqy3T3Qk>5B0Czi##{{dY%6b zR&dwIq?&XryYgzR=8XllxDPdCgtmp2Kz@tg)S_NzrDJP5(D7cm*>bwva!O_AZ$_648@-;d?ZA(;batZIjDM3cH)rYT?Ooj3iv0e4 zleHotKK|dX(puW|?npinvv`(lp0y3YX~s4-k)@@45cPi?p4JPq+SHGt4vr5)OxhkSuKpt4p5Slz z&d18k+~QiV_c6h#%(#UxFORLcw>M%(c=X=Adjap>-N{u>!FuuH#ovu#^d}uvNKA4u zL7*$XCm;}?l!V2~${Ix_gl9K>E!>p`Y(`gp@S1zMdNL z`;#B$zZ|y4xX;ed#}Z!vMhL~DX$8=@zxs=c%c!yburh{5#B`}WJn_B_DP)%Y<1L+; zMsF%esBAnuXh?m@Lb2M5Oa7I1(@TR{a^ixF>k~hin3<`TyDk_7|MH$)Ob>DtXG>U% zsLa=UAj1oVbwO_n@xBSxeDV9|dBFzd{;#!9uJtZov8*sAz#?(4+eZyG%_-n#&J6T z(YGW#920;*V0*i?*Yza@5g!A;ss7-Q^622_N^9!gv2riOe~hg*83Xcy^zlgzBJvy+L zpVpnwa^t!G$9-f)z{bvfGGu`-DvrBOGAX;f+yH^L2eX9I3ks0re;hYJ~u z8j?_Kwi+fXY#!w*QnY`v3keEp?&*2DuB~Pr!NtXeq}fNqV7cznDiYv414EKa9hW^W z54uPurZ!EX#2>Ly4uT3CKu+7x(7PSBqQRk|faGKb$u1SP00%-xgM*goZ-c#Il>y7;xXO2OpPwRQC=B_$dT zqNIvSENlO~CJ=L|zD4we*3X}(EpAao1JfrBW1!1i3Q=>FX=d(Xzd?egAd1d75#NK| zwyGs+h9Iw_!xhiIG+%O{+ZOli(KR%zJ8RA0 z5NUvz8rvFy!HJ*iBdFF;L;# z_})g$Ius-)S;sIUAx)rXTPJnh4!iY9A5UkzEK$TQTNNiGEXpgYv{VEGBN3gM`C;WU z0nEku4-I^F!%$2mq%85n{O^gf^f<))>){;~RiG#uy?+o89iedQq(b^gF0=lKX=~>) z86zv7a(~6fpWcEgXdka)0n_M1f)gS2C0Tt#*8a*f2J?Q}TXJ&VY;4`7G{tIO|I~xD z3R{h>@^Rt2+jcPog@wTm;?gDXgPM7JR)mO%70+1Y4uf8}upGuBCMv3x?SyfNfCV*7*TqK;wA(+4 zk+x$0v||Y)cEeONXq|&Bc4s_-kGJ}luCJ;R@4X^W{-W!LN26CpQ#dH*l^D?$TGGXhI1X z{|pVk;dj}5je>p?4)mbu+V2hEoPzeFp=Ur%{g;rgiMm+tXUmAQ2>eA=Rn?51EM_O020rhK=Nykg%I+iis7q;k2rwKZS|gK-aP z3aDL7L?A?5xU}*;QHuxZuC!YM{~8;=go($dPYkAZRwj$S2KKqC3@g5B4gocm{G0rEhyx3pkGIhF=N zUG&bKRI^@E>?qpV_dAw<=<;63qu@48{e-mTese9>UnNDk`|~}ktsH^;QWIicx@{=E zl0IzQlbvT!P2X}q;etLwa%*odWy9NwS0a=uB*etEc+2aESSl`5&d+Jv2p5k@I;cwCZA?_n{XrTw&=NuzCHsVa4eVMTlI zC+>`NRUE60PVOP!OSZsP$)B?9*WPCX)ZyX946Hh6RvWeAMvi5|wBp*b=DE~8J?->N z8fci|=VY6}b)@I#V?KM<`&L|A)lrxlVmht1wp84^chLySnw=fHEyN`-N>QM4Ib6`h znhY!8uQTwC_u@Vj`TD1M#nSEk0X9ZnUR69h3ymrdia@cXZW=b-O~w6JG?nwG{1WiL?Mh|>*| z`$0aQf}x;r@JQ^WEz}FK^`%0;EzZ{U4~&n4RfUP)%U#HSU5uA)X(_dJR*d-7D+Ajp zK@t|0tH~H?`7Bip{eT9~9X`iQhgclOpwifECL-Q8JFT=6Cfz+(l+Wlx_vIXDb-UH*HEh|$f>$)(??0wJli{C-Ui$w*qP6KQ?R zhVik_!w0WL(LFDa$jL2XWWw!&f|2D<5Kr>4TkO>c{SW^g=^&syaEyz?UrU6&-||Ce zElkr94+*+~83hG?58ud^(#Wir+k6FZtzz3nuLYnJEYoWyw%fQK9_$9SfAG-Jy*Ym0 z|Ni~Ele?#!>B+XZv2l7h1SgK)gxZi=n)`Y2rly)&`}gjANx^lzI_H4o{UCg4M*O+1 zB@<&S2}EDMdxxE$1x`0FbrlpG6O*hNgxwi<40Ho%#ip9um~f;*Z2i7kpdh+ciS<^h zs&OH(M`CDx$eEg={rw9AcHQ422x&?A_fN#uW?IJXz`clOZFO54VXxPNcui6?nYKBuaGZSF)>OKl2 zvrgFEGT(*Kky2C1pkplgM&ckWDTxuDCZqmKZWl2MWWZ*BPIB=%GAE~@un4ENzZgdUSuE&+4$F#vYIpnCVt0>c;U} zT6|ktm)u^yS{c3Y(A4}>=A6&JJ9~k;HLfE2@{bv)Xjl*x9s33i{yQO>d-r}VESdxi zf2BD%hxx-%lM%3I(>F>G&r}d@9vnQP;Ch1Sx?nu(ogZxUeg+)}YKYMheT)QJ3W|Nw z?q^b5`VW*}Vt=Sd6naDIJabJqt**rJpHi++D=RPdw@NG)*Yjc_MFZOm)hK3)y_BAv z?TIP$@WP@DIQ|wI6ScS;Ti=O_ss}EB5NbC(Oia#&4J%9%5|7HPgZB1ty|5@}nb)sx zLHb`jKPJO{n`-{+E-IL@!tSh4^p{$z!Li+_L~w%( zXC&VTxD4d!GJsYD{!%1phoEjj%gCq#Dp`A``r!6-)$~GleA-~mk9*UDx@#*W{=ngy z%~Utq$`R@T4|p3XJ7-Xm&=w2d7elOpTVCl3R9Xqf8|r2pPmh|RlWX#NH*~gc8Co3g z%igRx3)(Bc|3!3N=Xr|T_v^~|RRub?eh=fLDctL8R~J3$jQrsNRUk5-@i|+PO-yY2 zgA5=r?U}kdH7V&-Sga8Ye;0Xav4(&FMMWnIQx(~=inHbN&z`lmwV_!27G7NLy1l+- zADCuDeVo7w2khGav0eP0sLvNP4Nw3>qxb`Rpu_RzQ(axlA2iSCp&iY@v1uNq*6Pc-?GLQ{VUa%=PCKXPc# zP+fXKM;^c(9Ubm~JRxvk zhxW-x5kda!;IX{CJM?6IJ9CvZ7`VBAx^iW-t!U#|RaDLe5;DD|zc)nE@HSkVKd6+K zo11KRmw}IOA_TB3)aHxZ&so>kElX*l@55Z7Z{K7AZHKO}vzC^gHK=Ku)7;C(zI}TY ziUn3!7C>D1h|PZHsK=E3`YpWN#f9`(*dgiZ>EzIJ15u;@+hM372t72@i5zh>_`kTE z?f(KE`LUN*5lrm#gMeB}qm&M|e0=q>L|$J%xguoDu-@;ff! zb^laYUXsy?q8N_ck(bJhWMtqWmIf8IgYUtKf6DAFQSYQdw*L7M z#Bqdm)2-K~OMZ~j1-gHRE(=och?q!~SLyEv#um)} zxUb{m1KDmVy|9k(tMY6|XS4>#{OLyISGxQ{P6p8##4q;C-@u!x|2$;bFZNQN?91bw zFd|k`dVwRN&Y0tX25&!k(yxd$*t8Dn?#?+ouRt;DbRU{Q+}&Uhsc6l-M0xboxsYfG~yH!3^R}Lc6NFr%1JNpEXeO3Zl%BOZuh@nKO>i1D$tM!B_&*y`re`XE)}BNskmlH?yWGA}{9 z0*O?@dQ%QDNGPui6>YA)K#SGHG&9(4n#&4LkhaEg8I_tkMiOG{R}~S{X1^F9su}%E z$b&+~+Y`9S;uB5?0go@NKEUJPIJA|s`7TV2hhX3fwVl8jAPDI!;8*f5Di_OADAAy3 zHZjSFzPcbPHIu_p{&GeHD5gCK^NPw&M9DulmlD9yZQc_3A_I>*WW0|9s;Wq)Dz#pU zP$G(6jS-ip-5;UwIGyJ;=_6Nx9KF~_AqOW^!|_|pH$$b?9~PehE(=eqNk8q1DZb?w zQYCngr^>XkW~EnZaoaX*-ZxDG!XpYkxQ&ln6q*AGBK}+O{)cUj+ZbeikuRh?5Q;G&Q?Z0l8(G=f+(e!)`$<~1}NSY zgxwwRaM|yQx}EM)B_?0Az|+ABGyOMV0RI{e3LG^c zg>Xcqt**v_NbBH)C8@0ZSf!FR?|%}@e=vY{kZEU>H{(M&I(U%5C#a7YH1&Fd;c!Mp zH-K$EX5CVV>xH%A`=)UXC>BgjQ;o;CHpRL^zP-?bO6`{`P6i~LP<9R1<&zy93_L>& z0Rg?}M6%bjPyPM<$=<#HK|orWxSGr)dV2X!1d&Q1bAz5q*u|PZAdqZ`@vi6t(6*tV z{qD+n77p)%J|eQ$y|VcFN@M{t$l3YSLeIxF^2e7#)WQzItPQ6qAIr<{ii#>aoR>4H ztIvVpsaV+KyCc~);_e`nTO{j2eJLU(#>S;^A<&?M8(k;@Ujf3ME=$S=N<&IP0dKkU z_?1Y6{N|L_M=a-PdVYQ)7M5w4(jB(%V1Yw36%5G(de88As1U+Ipa9d#Uy}>w5dld_ z0Oe|MohJt1Eg0zoGx1%8J;yL%b#3K{C_sfIA>Yji%^J!#tC#+nnd+%_k#IRtt0a}q zx1xaPUj()j4tTP%bJZ@K!4}iR(y&1YX?8-wi7FPhy>PHesU-l){bx(X$pT-@0ABq7 zrQ}u<^GYf}TGD{Bg@xCJHc>iZ$XGTG2<=*p$D1Z;~B`rQ?an#gY^4p*~r&CGT!F0?$f91I}+z)%nDP%L}|zt@>Lq>bBj zbT;jsJc0T7q|<}a?-I1-K&jH+7Mh><;1?YT?L=o&L68A8YtXY#Gl*grJwiIGIR zF92mlF7z86AXnSQa10cd=%G?Z5pkWL0J4cU39oOyZqL_ngOPf~2(CFe_<=WJ*Y`&6 zX(mBuLePh`_Imm$^fRSJE{!WPluGY*UBd@HU@;!Q|n8XhUXV<<$B>leSt3tqN3# zR@&p=NThyPWrUrJIQ>C`D^oy3z=w!yyaTc)cJf<)eu^OE4(;vLCIj>?pps$G)YZKW zk6>wYgC*Yd%)#|RJE(yWtSBa?bt`6sVZ#VGdq9KdmMFAG&`%n3CIpmYSgczp5bFrp z0YH?OFTIv}D^dOH>jhys%IxR4+B=vfjeM!DFOQi2yT8z~#$FI1awF)2WPtKQpi@9? zYW(@}(CsHVIOsQi{Wx)ljj>oNR2vR@y2-cWKWk*6B%G2^i;x4iC@WS=`5g8uqP7?} z>Tmt|6Dbt$S8yidvGU#MLO{S!FTr@jU;D?=A;rZ!uV?jeq3i}o_?;$JGea)+0R)RM z&(pb9;6`4(x_sU)0jfAdLv2J!Z`gG0_dgMqJY=!=1l2!W!52|riM=iN4-TdSRqUF6 z{0GR1R*IVGHl}k87g5iDT!Y!fw|PL72u>TQDXu1Bm^FWYslms@v+W{$gil-FQSI31elCb?ViJic4RLwzMn{;Ce-Xby0tMOP zA|aZTl+sLf872IU|5VPj`7(QRI~<`YJo==4sXQHYf&&0%SVTYz;-0qoz z0s`0|0vbE}Bm!gIMz%k^kDLr?ANDpO*&5!%hwM>wd)Tl&KYWT*wwHv1twcq#p5%v5 zcgXLyE5W7ffTHmguQTV_E;)au$aGoI5a>%C_U5P*Qyzuwu%SFT-L;ELO#JDJ;}4}I zrqR5m?VKoyfW>vYD|N;@=tX#5`0a(1S0Vr>7o+sT zsH1FcPZ$L>oL5)jKG7j(HGk#ij?Txy8H*2~Mhsb42nJaj4ix{edCFT`cVS*SUR$Wf zElmPT>w-m4wCjB?Mg!{0_~OJ8_-;%QkQ(MO5maZVnv1F@ioPK6)z`eFt@;%n65xt`rJXCo_N;7Uda#ApV&EvPgwEn?Nml$I7Y(di(zV zEf1hTM!a;3{zss?3xr;Gd`%4nj2QIS1+-yvl)nk(jlma@S~r~zh-HgAH0M`SuglQg z<`c+TEDp$o_7HHix#6jW4(ETxiVSH&NH{w+`fFtWt~~3A8~ezqf`~e-%3R~Ys?8zylNFHmc6myf}OE+b-`Qo(j@S| z7=wUZn9ld=80-9e+5uqXeZz^trW(~d!%%UxCo2Ju%iFGBi=YsDPR2o;Kt zkK@4TY?#K^UDM@Gb_CsljcxbVI~)mgp$M#sips28zRp%Xnju-lv5AzOap*JN?@l{f@%~}GO5UnBYk_WFuVg@j9>M?DSV^g3(@Pt}IDAp-eV;W_fZ>OfjaY)k z4J(C?KeBOYMlf_P#(1UYJrrnN5MwhkC8hKf+CVLV(8!8kl~Xh}4nhIiQLJAG1O>j8 zl|tn*VFC{M03qCBN&yF+9_p>a=YLjm%6xCQU`PP1ex*TBV4IrPm0qhgi;uwlQAx!p zDvL!6P%;W0PmFa~1JEw$6AYG_C+_TA(79e?v@bM!7b)rIk5E7LkKt#|HdHxCcL zi+J+~9h$y)9v&3J!YEkn)&+0hiXq4uXd1F8?svf3oQ!GL0q+f>qX78N{fGq}4bAZX zfK5hdM|<reXs%3nDR8w^K)9A1{A-Z~dQ@yhagxFS|=XKNADl)%|o=!08RP!|AS# zUYyhub~gDe?~4TY!@DWanV)PB!5bX(ZJYNc1%}|4>lYSoIHQrIG{KR*j!M^8%`B{>d)?C*%q)gfXED&A=o(V-dYX zKu+k!;6qyl@xovmsee^|&Bj@%D+6(#js551(VC>Y$8(dv>xKx$>_disRe&zCvV$U_ zk@uY@c<@4#J;G@l~O5TosO3$I)-u$IDMGR zhfXe9EudYTghWG=#JJdWwj9d|-FfGf-8z#%iq+qCQ{z%}X>8jw6fhAb2kvdgopwah zjM|_0zQX8pb9KkyMOW+SsQlfvM`FI$w-R{qb53f*?!iNg-*`RWx&lu}wWk{mZa7Pj zAjhV}I0nFTS?kR%Yy19w-Vi9YR{OPByd*)YrN z^S<10F*ngz(Zd&Cg)Ca>^z>*B7Fwt(&GuhF#Y)O0d>fj<9KS~qZStp2dkPxF1phwh zj6RYn)czh8?UJ=bZ50R2`s%t+M27+@R%p~A!fKxII0lO{H4=Z>RHOugsQn`Bhac|V z`|~G3gJ&T^+Ln`JP`QkR1ojt1s{p`ADP$3Y7b==Q8SGCRx#_`%6^cpZg-D77ZSk1C zim9RmPkxOv;-L?WX@3Q|MfRYY|E@S(!rhfABX@ArA6j5*Jlk|b3elW_afu%Qxe2tv zE$8YfuoZp^X&uLLa&yahc*qRyLXw1W2G-GZCz!tA^^t~Z>7}`ksR-7*L(K|;rt0ZA z+&}zoDiZVLnZnP`08}~X@6^z}=44}o310q)?GHfpS}6M?*44h?l^-^@ zE4EiFy|*M`Xu9gF3BGq^ij27UYH_pB5k5jS1gtC?|vYyqQ$Q`RTS?wgv; z8e2{zcVz!bo?1hIS0t)(T?YF{H~mXbMO!B6*^K$e2Tu{oZe z8AlQH{T>g3rrh5T{aD2e;AX@boyW-MKU_Gl=j8-A`OX{ajDL?C_BV#dt@qylKPpPs zl((Mo=VhhjQB&rI{6chnUj^&OfoCA)9qWSfLjGCrE0N!B;OkkQ;P;%Vj>pm0_XU|q zyX)OXBBEvEx%zmZl`+9^XaZD)nwswqn#g@!*pcuU`q4(D4#Le)!JH*V5HND&JvpTl z^>~M8zsClP3q)0!g^DOJF>qrM8N?h=Uj&_ug}?bv?Bz zYFW>t&^ z4d_w^O^sNUm9=qk>A6HDQFQYqo%kKFB;-QM)sKlq9#K9~QUYss+AEPBd}n7thr>Un zcbQ+cOufa2P&^US9swc}MwZ;A$P@UO);1=^yPhNw@A5SYZ@xb<_!2mnETgP`9fI@CQK$o z-TlCB9sADV%^e~Ee(&?gupCI_+w*CDQBe_#M-UEBfMrz?w+kt;7X%dKxHV=CjE$6@ z-n-caM(CDPf*M$hRHCD!BfX>qioC_QzOTm=Z$l3qT3+~$u7m2Y?0fhmYG-FXbSC82O`pv*=gdherK(G&DmBz_OUL?}dxmIKe;To(^sVKEdr5ui}+~wnjq}v?F8)5?X)% z40)#Eg0ktxC%;El^ZE0K-+we2_oup(zKgGgG${3a@)Y}RSa`UEni@3MhX%AIa=>>4 zn*`ny@UZSI{QSrWWdxAvl%z(H4W7%6H`mh~I^MN5KNOX>dg1=%X|^t*l%J?S;uojp@(MOKe1hO>P4vFp&@ye7&Y?o-Mbn5qo-hMqY=r~ zP{F*Fo1c#cPzeY%K0C{pW%9g_Q~8PMGH8zTl;T2w7fYtEH5;zLQ|Aw690!sz0p5;NN#k95W?0f=LK|@2nCr(^s;rJcT637{N zO9*b=5}JrnFNWqRH_2qnU8pyZ9s^2d?T!?&z1tb(WgU>MFL= z6%=5V{-8pGh|k7OIHM&g0!^@i0U7tBRpjj*^zpDSYm_{%5fUIRT&HLXgmfGmie1ezX$ zx`ZGqA;WzJn*8vfAl(&o6Ic?(&-dhCl6sX@(Sd^r3vv!kW!4Bnr6(722@+vL1eB~$ zd`M5p#Z``|H6W>xi;Q7g^v_v{-1!&l>{6Ereqtn&NL8g&(YO`qAOaIs%HkB+Qr8`d zdfzmo8qY8OX27hi0mAg0wA(DaT1$HzZC{c{rx~i6r$Zw^k zd?-+&zb(`giWM zx_&|18puF)b^#4;ix9V-pj>~do#W9eHaW$yiHLF*lohuTgx<#RmMb;bU&2Q;2a{R1 zhH`L3y>$6+=tJB5Yip^?%k`kP(zcvb$7+@XHzURA?g0;S$+sUMc>WZcnaP+c)|59{ z#zZS2QN@8>Gmiy&pLd`gWd@E_;uBBtV42yoyuvEkugb;r%*QuMncKE=ygY~p1pQ;G zXceCUD|v`SBq@neZcg@P@F!l>H!j1q1^pMtnKD_>*JVZ2&fB^zJ|zNt13^H#Ch*|O zhT?IXm`O!agMaOEFEaDDZY39r?@bCq(vsA=L>Cbmc>uD_O0$uld1@(TzP`5=72htm zh2|ch;_=QKVKCHpm|Tytios38;A^v8Arv+>9a2?K!s8Lbmyuy-<9K@O6Q{d9TRo*7 zeNjp1STT28nlDvHN6BQ&VOnBxGLxX-haGaS3iDr9m;WrVK+iG(f6(yun3hTIb<18; zzh8d7b_%VTiHZMvR+U5H&&Kg_mZ;3koF6{aOR1^di-<7HtiR-(f3xp|F%Cbmf9*YN zd4^pZ7Dn9OUN4#az{zsnkk)RhJJU|zBQO7Fh75N8RGOa(s2c|1UIut;r3S2jRzhzf zHG0+jc6xX7t#NNWA)!eMQatR9jylz7OE9w|EZbltCKr@X*%7|Y1Q-{a3=PqwOBPCQ z8&Xf+k-yC#B0>c=#8)D+DK)j7Ek8GIChCr=6HjjN7fRSYBfYtweJ6SquFjyZj=|0` z#q4>qvNX3f^=;)H*N ^jPw<%wS>$wWrCXPoE}_eLlKqtMXyIKdQLa*SGf1{jWQp zz}lD7zRCHuqie6uOrxd~=g?LXpHw4^fQ6DYy#Xx-Zw0US2?@Pv-y1E zRamN+$bk0k8H29pP7=SUtgR`9-Qy<3+yPr9?e!9bEKA$kvLG3+4;Tu{4GBg+G~(6e zBh{}myp#B5HdpD#{;CoS7ni}oUX$zkNY)!iex|y6tTqMnOSZbiDPf z7j@dsp`948YPljP-?nGinfaI$gu4C((_>tloRDxK|J|JpFZ=m0^8iKcA#0DO7CI7A zswm<1pn-;lIEY`dpm+#PB;VjH<_SbUrN25NG$8uef+F2AkkNqh_~E$j)D#npnht?L zIzWS^)84LIS|t?nK~rD%d5uo2mx7lFi`_&zs*n&i3R* zS+v)$Nx?YAbh1;Y;3ga;;C=2eQ&&Zp@<>5a|APEWO5g@wI6X#yG5Nc6_>6_Tyzb=# zvlgWR60%Q=hb!`lNd@s^kKtEK7XzM&wdhwzEl7^Pg(nQ)kc)+kb$DHFTzB%~= zna9X5T&pnGw4c_u$Z#hZykxa)j2Hp*ba8{2KcxQMpPe`dxOYtcnTw`z7)LEvA3rR3aSrI7*nhFka}wPFZzoJ zMgRdy)YAb>$)yl_jPv{gJfu)522j`Rs#31Z)bN4TDv9t)|J^c=1ObWwE*(#xcCj9` zicg(Ghm0>yd4oP^QrS){D7mpk<>WrVxOIyPrhnWu?`L5yfp>!vd&l|U-~jyJQZV5F zJahkX2Z1VJbT5`hgmiaz_xLv}_^Bb1*JEJ5S^M2Fl=IBS+aA0|x)s(WDhX1TieL}p zA}#DpOGqG{PdHsZkr`{)-QN;8G;j$WP5~Ur?*&G3Vu~8!W@bs{i<(c zr<6`J%omgr7$tlCvtUR9t42p#DE23pQUZaPf{YtTu(~FGkkSHvzJZ{hrRpIHw4L3yFA zO?rojsLZ4dt-Gg3^6677m`u`DtY3u$gDXPZPqr!g`ugCiI6jkB6r}m{zhLM@XHiMT zVP|J|_w>Bcw9d)P3!C@3z=c^$aR~{X;7&Z4_r1|-N`osi?Ck8IEo%k?kxQ$pN_O?1 zz?!|Na}5p+m5X+#p`qc2Um8XI@Xn)0j}UiD5D^8!tyw3#v-)el8o|vAE_0o$o47QLt=1skpm_yW_jvI4=V{>Znf%6|U(@FF|{-UHY3?t~7YV{bGx(3eZ5oQOR)TjJH0|Hq=AO*1#T$9k1<*^Q93#`w(G?_o@(piW zR7FO|%U=DJEGOo3naIJ;{%=D7<{@Ovz&!E#2i7BO1>n|)QixpZ`Evy|Vwq?<@l<%D z1qYv@yirw270m!BlHcHYst${k1>Ij6HRAhl<5$nXKwQu7-?^|6*};>Gg><|z%o>r& zwizpaoep-6f;Am&ZCRI{spGG@z-i{g>9TJ2yY=DIC!OOh@lNo^OU*WTR-NB~?S&YL zgO@iplPv;VgIO>_Lk5O9sQvr*Zv?!jZ1CR^zs$$ar$8?E#XZ>=?|c3`N0dqBR4^V-5A zsD;=c#4>6yJVaAbQ86$#f3K=wuWtN5+pYN9H)U?!QokP9Lf}f3i$=&I zJ*payHKs+kl5-nhjlCMlQ_}?7W*&I+)PsYAKYad70naG&{P}Y=kj~_S8#

?5%2J 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 5 #include "StringValue.h"

6 #include "ListValue.h"
7 #include "HazelnuppException.h"
-
8 #include "StringTools.h"
-
9 #include <iostream>
-
10 #include <cstdlib>
-
11 
-
12 using namespace Hazelnp;
-
13 
- -
15 {
-
16  return;
-
17 }
-
18 
-
19 Hazelnupp::Hazelnupp(const int argc, const char* const* argv)
-
20 {
-
21  Parse(argc, argv);
-
22  return;
-
23 }
-
24 
- -
26 {
-
27  for (auto& it : parameters)
-
28  delete it.second;
-
29 
-
30  parameters.clear();
-
31 
-
32  return;
-
33 }
-
34 
-
35 void Hazelnupp::Parse(const int argc, const char* const* argv)
-
36 {
-
37  try
-
38  {
-
39  // Populate raw arguments
-
40  PopulateRawArgs(argc, argv);
-
41 
-
42  // Expand abbreviations
-
43  ExpandAbbreviations();
-
44 
-
45  executableName = std::string(rawArgs[0]);
-
46 
-
47  std::size_t i = 1;
-
48  while (i < rawArgs.size())
-
49  {
-
50  if ((rawArgs[i].length() > 2) && (rawArgs[i].substr(0, 2) == "--"))
-
51  {
-
52  Parameter* param = nullptr;
-
53  i = ParseNextParameter(i, param);
-
54 
-
55  parameters.insert(std::pair<std::string, Parameter*>(param->Key(), param));
-
56  }
-
57  else
-
58  i++;
-
59  }
-
60 
-
61  // Apply constraints such as default values, and required parameters.
-
62  // Types have already been enforced.
-
63  // Dont apply constraints when we are just printind the param docs
-
64  if ((!catchHelp) || (!HasParam("--help")))
-
65  ApplyConstraints();
-
66  }
-
67  catch (const HazelnuppConstraintTypeMissmatch& hctm)
-
68  {
-
69  if (crashOnFail)
-
70  {
-
71  std::cout << GenerateDocumentation() << std::endl;
-
72  std::cerr << "Fatal error: Command-line parameter value-type mismatch at \"" << hctm.What() << "\"!";
-
73  quick_exit(-1009);
-
74  }
-
75  else
-
76  throw hctm; // yeet
-
77  }
-
78  catch (const HazelnuppConstraintMissingValue& hctm)
-
79  {
-
80  if (crashOnFail)
-
81  {
-
82  std::cout << GenerateDocumentation() << std::endl;
-
83  std::cerr << "Fatal error: Missing required command-line parameter \"" << hctm.What() << "\"!";
-
84  quick_exit(-1010);
-
85  }
-
86  else
-
87  throw hctm; // yeet
-
88  }
-
89 
-
90  // Catch --help parameter
-
91  if ((catchHelp) && (HasParam("--help")))
-
92  {
-
93  std::cout << GenerateDocumentation() << std::endl;
-
94  quick_exit(0);
-
95  }
-
96 
-
97  return;
-
98 }
-
99 
-
100 std::size_t Hazelnupp::ParseNextParameter(const std::size_t parIndex, Parameter*& out_Par)
-
101 {
-
102  std::size_t i = parIndex;
-
103  const std::string key = rawArgs[parIndex];
-
104  std::vector<std::string> values;
-
105 
-
106  // Get values
-
107  for (i++; i < rawArgs.size(); i++)
-
108  // If not another parameter
-
109  if ((rawArgs[i].length() < 2) || (rawArgs[i].substr(0, 2) != "--"))
-
110  values.emplace_back(rawArgs[i]);
-
111  else
-
112  {
-
113  break;
-
114  }
-
115 
-
116  // Fetch constraint info
-
117  const ParamConstraint* pcn = GetConstraintForKey(key);
-
118 
-
119  Value* parsedVal = ParseValue(values, pcn);
-
120  if (parsedVal != nullptr)
-
121  {
-
122  out_Par = new Parameter(key, parsedVal);
-
123 
-
124  delete parsedVal;
-
125  parsedVal = nullptr;
-
126  }
-
127  else
-
128  throw std::runtime_error("Unable to parse parameter!");
-
129 
-
130  return i;
-
131 }
-
132 
-
133 void Hazelnupp::PopulateRawArgs(const int argc, const char* const* argv)
-
134 {
-
135  rawArgs.clear();
-
136  rawArgs.reserve(argc);
-
137 
-
138  for (int i = 0; i < argc; i++)
-
139  rawArgs.emplace_back(std::string(argv[i]));
-
140 
-
141  return;
-
142 }
-
143 
-
144 void Hazelnupp::ExpandAbbreviations()
-
145 {
-
146  // Abort if no abbreviations
-
147  if (abbreviations.size() == 0)
-
148  return;
-
149 
-
150  for (std::string& arg : rawArgs)
-
151  {
-
152  // Is arg registered as an abbreviation?
-
153  auto abbr = abbreviations.find(arg);
-
154  if (abbr != abbreviations.end())
-
155  {
-
156  // Yes: replace arg with the long form
-
157  arg = abbr->second;
-
158  }
-
159  }
-
160 
-
161  return;
-
162 }
-
163 
-
164 bool Hazelnupp::HasParam(const std::string& key) const
-
165 {
-
166  return parameters.find(key) != parameters.end();
-
167 }
-
168 
-
169 Value* Hazelnupp::ParseValue(const std::vector<std::string>& values, const ParamConstraint* constraint)
-
170 {
-
171  // Constraint values
-
172  const bool constrainType = (constraint != nullptr) && (constraint->constrainType);
-
173 
-
174  // Void-type
-
175  if (values.size() == 0)
-
176  {
-
177  // Is a list forced via a constraint? If yes, return an empty list
-
178  if ((constrainType) &&
-
179  (constraint->wantedType == DATA_TYPE::LIST))
-
180  return new ListValue();
-
181 
-
182  return new VoidValue;
-
183  }
-
184 
-
185  // Force void type by constraint
-
186  if ((constrainType) &&
-
187  (constraint->wantedType == DATA_TYPE::VOID))
-
188  {
+
8 #include "Placeholders.h"
+
9 #include "StringTools.h"
+
10 #include <iostream>
+
11 #include <cstdlib>
+
12 
+
13 using namespace Hazelnp;
+
14 
+ +
16 {
+
17  return;
+
18 }
+
19 
+
20 Hazelnupp::Hazelnupp(const int argc, const char* const* argv)
+
21 {
+
22  Parse(argc, argv);
+
23  return;
+
24 }
+
25 
+ +
27 {
+
28  for (auto& it : parameters)
+
29  delete it.second;
+
30 
+
31  parameters.clear();
+
32 
+
33  return;
+
34 }
+
35 
+
36 void Hazelnupp::Parse(const int argc, const char* const* argv)
+
37 {
+
38  try
+
39  {
+
40  // Populate raw arguments
+
41  PopulateRawArgs(argc, argv);
+
42 
+
43  // Expand abbreviations
+
44  ExpandAbbreviations();
+
45 
+
46  executableName = std::string(rawArgs[0]);
+
47 
+
48  std::size_t i = 1;
+
49  while (i < rawArgs.size())
+
50  {
+
51  if ((rawArgs[i].length() > 2) && (rawArgs[i].substr(0, 2) == "--"))
+
52  {
+
53  Parameter* param = nullptr;
+
54  i = ParseNextParameter(i, param);
+
55 
+
56  parameters.insert(std::pair<std::string, Parameter*>(param->Key(), param));
+
57  }
+
58  else
+
59  i++;
+
60  }
+
61 
+
62  // Apply constraints such as default values, and required parameters.
+
63  // Types have already been enforced.
+
64  // Dont apply constraints when we are just printind the param docs
+
65  if ((!catchHelp) || (!HasParam("--help")))
+
66  ApplyConstraints();
+
67  }
+
68  catch (const HazelnuppConstraintTypeMissmatch& hctm)
+
69  {
+
70  if (crashOnFail)
+
71  {
+
72  std::cout << GenerateDocumentation() << std::endl;
+
73  std::cerr << "Fatal error: Command-line parameter value-type mismatch at \"" << hctm.What() << "\"!";
+
74  quick_exit(-1009);
+
75  }
+
76  else
+
77  throw hctm; // yeet
+
78  }
+
79  catch (const HazelnuppConstraintMissingValue& hctm)
+
80  {
+
81  if (crashOnFail)
+
82  {
+
83  std::cout << GenerateDocumentation() << std::endl;
+
84  std::cerr << "Fatal error: Missing required command-line parameter \"" << hctm.What() << "\"!";
+
85  quick_exit(-1010);
+
86  }
+
87  else
+
88  throw hctm; // yeet
+
89  }
+
90 
+
91  // Catch --help parameter
+
92  if ((catchHelp) && (HasParam("--help")))
+
93  {
+
94  std::cout << GenerateDocumentation() << std::endl;
+
95  quick_exit(0);
+
96  }
+
97 
+
98  return;
+
99 }
+
100 
+
101 std::size_t Hazelnupp::ParseNextParameter(const std::size_t parIndex, Parameter*& out_Par)
+
102 {
+
103  std::size_t i = parIndex;
+
104  const std::string key = rawArgs[parIndex];
+
105  std::vector<std::string> values;
+
106 
+
107  // Get values
+
108  for (i++; i < rawArgs.size(); i++)
+
109  // If not another parameter
+
110  if ((rawArgs[i].length() < 2) || (rawArgs[i].substr(0, 2) != "--"))
+
111  values.emplace_back(rawArgs[i]);
+
112  else
+
113  {
+
114  break;
+
115  }
+
116 
+
117  // Fetch constraint info
+
118  const ParamConstraint* pcn = GetConstraintForKey(key);
+
119 
+
120  Value* parsedVal = ParseValue(values, pcn);
+
121  if (parsedVal != nullptr)
+
122  {
+
123  out_Par = new Parameter(key, parsedVal);
+
124 
+
125  delete parsedVal;
+
126  parsedVal = nullptr;
+
127  }
+
128  else
+
129  throw std::runtime_error("Unable to parse parameter!");
+
130 
+
131  return i;
+
132 }
+
133 
+
134 void Hazelnupp::PopulateRawArgs(const int argc, const char* const* argv)
+
135 {
+
136  rawArgs.clear();
+
137  rawArgs.reserve(argc);
+
138 
+
139  for (int i = 0; i < argc; i++)
+
140  rawArgs.emplace_back(std::string(argv[i]));
+
141 
+
142  return;
+
143 }
+
144 
+
145 void Hazelnupp::ExpandAbbreviations()
+
146 {
+
147  // Abort if no abbreviations
+
148  if (parameterAbreviations.size() == 0)
+
149  return;
+
150 
+
151  for (std::string& arg : rawArgs)
+
152  {
+
153  // Is arg registered as an abbreviation?
+
154  auto abbr = parameterAbreviations.find(arg);
+
155  if (abbr != parameterAbreviations.end())
+
156  {
+
157  // Yes: replace arg with the long form
+
158  arg = abbr->second;
+
159  }
+
160  }
+
161 
+
162  return;
+
163 }
+
164 
+
165 bool Hazelnupp::HasParam(const std::string& key) const
+
166 {
+
167  return parameters.find(key) != parameters.end();
+
168 }
+
169 
+
170 Value* Hazelnupp::ParseValue(const std::vector<std::string>& values, const ParamConstraint* constraint)
+
171 {
+
172  // Constraint values
+
173  const bool constrainType = (constraint != nullptr) && (constraint->constrainType);
+
174 
+
175  // Void-type
+
176  if (values.size() == 0)
+
177  {
+
178  // Is a list forced via a constraint? If yes, return an empty list
+
179  if ((constrainType) &&
+
180  (constraint->wantedType == DATA_TYPE::LIST))
+
181  return new ListValue();
+
182 
+
183  // Is a string forced via a constraint? If yes, return an empty string
+
184  if ((constrainType) &&
+
185  (constraint->wantedType == DATA_TYPE::STRING))
+
186  return new StringValue("");
+
187 
+
188  // Else, just return the void type
189  return new VoidValue;
190  }
191 
-
192  // List-type
-
193  else if (values.size() > 1)
-
194  {
-
195  // Should the type be something other than list?
-
196  if ((constrainType) &&
-
197  (constraint->wantedType != DATA_TYPE::LIST))
-
198  {
-
199  throw HazelnuppConstraintTypeMissmatch(values[0] + " " + values[1]);
-
200  }
-
201 
-
202  ListValue* newList = new ListValue();
-
203  for (const std::string& val : values)
-
204  {
-
205  Value* tmp = ParseValue({ val });
-
206  newList->AddValue(tmp);
-
207  delete tmp;
-
208  }
-
209  return newList;
-
210  }
-
211 
-
212  // Now we're only dealing with a single value
-
213  const std::string& val = values[0];
-
214 
-
215  // String
-
216  if (!StringTools::IsNumeric(val, true))
-
217  {
-
218  // Is the type not supposed to be a string?
-
219  // void and list are already sorted out
-
220  if ((constrainType) &&
-
221  (constraint->wantedType != DATA_TYPE::STRING))
-
222  {
-
223  // We can only force a list-value from here
-
224  if (constraint->wantedType == DATA_TYPE::LIST)
-
225  {
-
226  ListValue* list = new ListValue();
-
227  Value* tmp = ParseValue({ val });
-
228  list->AddValue(tmp);
-
229  delete tmp;
-
230  tmp = nullptr;
-
231  return list;
-
232  }
-
233  // Else it not possible to convert to a numeric
-
234  else
- -
236  }
-
237 
-
238  return new StringValue(val);
-
239  }
-
240 
-
241  // In this case we have a numeric value.
-
242  // We should still produce a string if requested
-
243  if ((constrainType) &&
-
244  (constraint->wantedType == DATA_TYPE::STRING))
+
192  // Force void type by constraint
+
193  if ((constrainType) &&
+
194  (constraint->wantedType == DATA_TYPE::VOID))
+
195  {
+
196  return new VoidValue;
+
197  }
+
198 
+
199  // List-type
+
200  else if (values.size() > 1)
+
201  {
+
202  // Should the type be something other than list?
+
203  if ((constrainType) &&
+
204  (constraint->wantedType != DATA_TYPE::LIST))
+
205  {
+
206  throw HazelnuppConstraintTypeMissmatch(values[0] + " " + values[1]);
+
207  }
+
208 
+
209  ListValue* newList = new ListValue();
+
210  for (const std::string& val : values)
+
211  {
+
212  Value* tmp = ParseValue({ val });
+
213  newList->AddValue(tmp);
+
214  delete tmp;
+
215  }
+
216  return newList;
+
217  }
+
218 
+
219  // Now we're only dealing with a single value
+
220  const std::string& val = values[0];
+
221 
+
222  // String
+
223  if (!StringTools::IsNumeric(val, true))
+
224  {
+
225  // Is the type not supposed to be a string?
+
226  // void and list are already sorted out
+
227  if ((constrainType) &&
+
228  (constraint->wantedType != DATA_TYPE::STRING))
+
229  {
+
230  // We can only force a list-value from here
+
231  if (constraint->wantedType == DATA_TYPE::LIST)
+
232  {
+
233  ListValue* list = new ListValue();
+
234  Value* tmp = ParseValue({ val });
+
235  list->AddValue(tmp);
+
236  delete tmp;
+
237  tmp = nullptr;
+
238  return list;
+
239  }
+
240  // Else it not possible to convert to a numeric
+
241  else
+ +
243  }
+
244 
245  return new StringValue(val);
-
246 
-
247  // Numeric
-
248  bool isInt;
-
249  long double num;
-
250 
-
251  if (StringTools::ParseNumber(val, isInt, num))
-
252  {
-
253  // Is the type constrained?
-
254  // (only int and float left)
-
255  if (constrainType)
-
256  {
-
257  // Must it be an integer?
-
258  if (constraint->wantedType == DATA_TYPE::INT)
-
259  return new IntValue((long long int)num);
-
260  // Must it be a floating point?
-
261  else if (constraint->wantedType == DATA_TYPE::FLOAT)
-
262  return new FloatValue(num);
-
263  // Else it must be a List
-
264  else
-
265  {
-
266  ListValue* list = new ListValue();
-
267  Value* tmp = ParseValue({ val });
-
268  list->AddValue(tmp);
-
269  delete tmp;
-
270  tmp = nullptr;
-
271  return list;
-
272  }
-
273  }
-
274  // Type is not constrained
-
275  else
-
276  {
-
277  // Integer
-
278  if (isInt)
-
279  return new IntValue((long long int)num);
-
280 
-
281  // Double
-
282  return new FloatValue(num);
-
283  }
-
284  }
-
285 
-
286  // Failed
-
287  return nullptr;
-
288 }
-
289 
- -
291 {
-
292  return crashOnFail;
-
293 }
-
294 
-
295 void Hazelnupp::SetCatchHelp(bool catchHelp)
-
296 {
-
297  this->catchHelp = catchHelp;
-
298  return;
-
299 }
-
300 
- -
302 {
-
303  return catchHelp;
-
304 }
-
305 
-
306 void Hazelnupp::SetBriefDescription(const std::string& description)
-
307 {
-
308  briefDescription = description;
-
309  return;
-
310 }
-
311 
-
312 const std::string& Hazelnupp::GetBriefDescription()
-
313 {
-
314  return briefDescription;
-
315 }
-
316 
-
317 void Hazelnp::Hazelnupp::RegisterDescription(const std::string& parameter, const std::string& description)
-
318 {
-
319  parameterDescriptions[parameter] = description;
-
320  return;
-
321 }
-
322 
-
323 const std::string Hazelnp::Hazelnupp::GetDescription(const std::string& parameter) const
-
324 {
-
325  // Do we already have a description for this parameter?
-
326  const auto par = parameterDescriptions.find(parameter);
-
327  if (par == parameterDescriptions.end())
-
328  // No? Then return ""
-
329  return "";
-
330 
-
331  // We do? Then return it
-
332  return par->second;
-
333 }
-
334 
-
335 void Hazelnp::Hazelnupp::ClearDescription(const std::string& parameter)
-
336 {
-
337  // This will just do nothing if the entry does not exist
-
338  parameterDescriptions.erase(parameter);
-
339  return;
-
340 }
-
341 
- -
343 {
-
344  std::stringstream ss;
+
246  }
+
247 
+
248  // In this case we have a numeric value.
+
249  // We should still produce a string if requested
+
250  if ((constrainType) &&
+
251  (constraint->wantedType == DATA_TYPE::STRING))
+
252  return new StringValue(val);
+
253 
+
254  // Numeric
+
255  bool isInt;
+
256  long double num;
+
257 
+
258  if (StringTools::ParseNumber(val, isInt, num))
+
259  {
+
260  // Is the type constrained?
+
261  // (only int and float left)
+
262  if (constrainType)
+
263  {
+
264  // Must it be an integer?
+
265  if (constraint->wantedType == DATA_TYPE::INT)
+
266  return new IntValue((long long int)num);
+
267  // Must it be a floating point?
+
268  else if (constraint->wantedType == DATA_TYPE::FLOAT)
+
269  return new FloatValue(num);
+
270  // Else it must be a List
+
271  else
+
272  {
+
273  ListValue* list = new ListValue();
+
274  Value* tmp = ParseValue({ val });
+
275  list->AddValue(tmp);
+
276  delete tmp;
+
277  tmp = nullptr;
+
278  return list;
+
279  }
+
280  }
+
281  // Type is not constrained
+
282  else
+
283  {
+
284  // Integer
+
285  if (isInt)
+
286  return new IntValue((long long int)num);
+
287 
+
288  // Double
+
289  return new FloatValue(num);
+
290  }
+
291  }
+
292 
+
293  // Failed
+
294  return nullptr;
+
295 }
+
296 
+ +
298 {
+
299  return crashOnFail;
+
300 }
+
301 
+
302 void Hazelnupp::SetCatchHelp(bool catchHelp)
+
303 {
+
304  this->catchHelp = catchHelp;
+
305  return;
+
306 }
+
307 
+ +
309 {
+
310  return catchHelp;
+
311 }
+
312 
+
313 void Hazelnupp::SetBriefDescription(const std::string& description)
+
314 {
+
315  briefDescription = description;
+
316  return;
+
317 }
+
318 
+
319 const std::string& Hazelnupp::GetBriefDescription()
+
320 {
+
321  return briefDescription;
+
322 }
+
323 
+
324 void Hazelnp::Hazelnupp::RegisterDescription(const std::string& parameter, const std::string& description)
+
325 {
+
326  parameterDescriptions[parameter] = description;
+
327  return;
+
328 }
+
329 
+
330 const std::string& Hazelnp::Hazelnupp::GetDescription(const std::string& parameter) const
+
331 {
+
332  // Do we already have a description for this parameter?
+
333  if (!HasDescription(parameter))
+
334  // No? Then return ""
+ +
336 
+
337  // We do? Then return it
+
338  return parameterDescriptions.find(parameter)->second;
+
339 }
+
340 
+
341 bool Hazelnupp::HasDescription(const std::string& parameter) const
+
342 {
+
343  return parameterDescriptions.find(parameter) != parameterDescriptions.end();
+
344 }
345 
-
346  // Add brief, if available
-
347  if (briefDescription.length() > 0)
-
348  ss << briefDescription << std::endl;
-
349 
-
350  // Collect parameter information
-
351  struct ParamDocEntry
-
352  {
-
353  std::string abbreviation;
-
354  std::string description;
-
355  std::string type;
-
356  bool required = false;
-
357  bool typeIsForced = false;
-
358  std::string defaultVal;
-
359  };
-
360  std::unordered_map<std::string, ParamDocEntry> paramInfos;
-
361 
-
362  // Collect descriptions
-
363  for (const auto& it : parameterDescriptions)
-
364  {
-
365  // Do we already have that param in the paramInfo set?
-
366  if (paramInfos.find(it.first) == paramInfos.end())
-
367  // No? Create it.
-
368  paramInfos[it.first] = ParamDocEntry();
-
369 
-
370  paramInfos[it.first].description = it.second;
-
371  }
-
372 
-
373  // Collect abbreviations
-
374  // first value is abbreviation, second is long form
-
375  for (const auto& it : abbreviations)
-
376  {
-
377  // Do we already have that param in the paramInfo set?
-
378  if (paramInfos.find(it.second) == paramInfos.end())
-
379  // No? Create it.
-
380  paramInfos[it.second] = ParamDocEntry();
-
381 
-
382  paramInfos[it.second].abbreviation = it.first;
-
383  }
-
384 
-
385  // Collect constraints
-
386  for (const auto& it : constraints)
-
387  {
-
388  // Do we already have that param in the paramInfo set?
-
389  if (paramInfos.find(it.first) == paramInfos.end())
-
390  // No? Create it.
-
391  paramInfos[it.first] = ParamDocEntry();
-
392 
-
393  ParamDocEntry& cached = paramInfos[it.first];
-
394  cached.required = it.second.required;
-
395  cached.typeIsForced = it.second.constrainType;
-
396  cached.type = DataTypeToString(it.second.wantedType);
-
397 
-
398  std::stringstream defaultValueSs;
-
399  for (const std::string& s : it.second.defaultValue)
-
400  {
-
401  defaultValueSs << '\'' << s << '\'';
-
402 
-
403  // Add a space if we are not at the last entry
-
404  if ((void*)&s != (void*)&it.second.defaultValue.back())
-
405  defaultValueSs << " ";
-
406  }
-
407  cached.defaultVal = defaultValueSs.str();
-
408  }
+
346 void Hazelnupp::ClearDescription(const std::string& parameter)
+
347 {
+
348  // This will just do nothing if the entry does not exist
+
349  parameterDescriptions.erase(parameter);
+
350  return;
+
351 }
+
352 
+ +
354 {
+
355  parameterDescriptions.clear();
+
356  return;
+
357 }
+
358 
+ +
360 {
+
361  std::stringstream ss;
+
362 
+
363  // Add brief, if available
+
364  if (briefDescription.length() > 0)
+
365  ss << briefDescription << std::endl;
+
366 
+
367  // Collect parameter information
+
368  struct ParamDocEntry
+
369  {
+
370  std::string abbreviation;
+
371  std::string description;
+
372  std::string type;
+
373  bool required = false;
+
374  bool typeIsForced = false;
+
375  std::string defaultVal;
+
376  };
+
377  std::unordered_map<std::string, ParamDocEntry> paramInfos;
+
378 
+
379  // Collect descriptions
+
380  for (const auto& it : parameterDescriptions)
+
381  {
+
382  // Do we already have that param in the paramInfo set?
+
383  if (paramInfos.find(it.first) == paramInfos.end())
+
384  // No? Create it.
+
385  paramInfos[it.first] = ParamDocEntry();
+
386 
+
387  paramInfos[it.first].description = it.second;
+
388  }
+
389 
+
390  // Collect abbreviations
+
391  // first value is abbreviation, second is long form
+
392  for (const auto& it : parameterAbreviations)
+
393  {
+
394  // Do we already have that param in the paramInfo set?
+
395  if (paramInfos.find(it.second) == paramInfos.end())
+
396  // No? Create it.
+
397  paramInfos[it.second] = ParamDocEntry();
+
398 
+
399  paramInfos[it.second].abbreviation = it.first;
+
400  }
+
401 
+
402  // Collect constraints
+
403  for (const auto& it : parameterConstraints)
+
404  {
+
405  // Do we already have that param in the paramInfo set?
+
406  if (paramInfos.find(it.first) == paramInfos.end())
+
407  // No? Create it.
+
408  paramInfos[it.first] = ParamDocEntry();
409 
-
410  // Now generate the documentatino body
-
411  if (paramInfos.size() > 0)
-
412  {
-
413  ss << std::endl
-
414  << "==== AVAILABLE PARAMETERS ===="
-
415  << std::endl << std::endl;
-
416 
-
417  for (const auto& it : paramInfos)
-
418  {
-
419  const ParamDocEntry& pde = it.second;
-
420 
-
421  // Put name
-
422  ss << it.first << " ";
-
423 
-
424  // Put abbreviation
-
425  if (pde.abbreviation.length() > 0)
-
426  ss << pde.abbreviation << " ";
-
427 
-
428  // Put type
-
429  if (pde.typeIsForced)
-
430  ss << pde.type << " ";
-
431 
-
432  // Put default value
-
433  if (pde.defaultVal.length() > 0)
-
434  ss << "default=[" << pde.defaultVal << "] ";
-
435 
-
436  // Put required tag, but only if no default value
-
437  if ((pde.required) && (pde.defaultVal.length() == 0))
-
438  ss << "[[REQUIRED]] ";
-
439 
-
440  // Put brief description
-
441  if (pde.description.length() > 0)
-
442  ss << pde.description;
-
443 
-
444  ss << std::endl << std::endl;
-
445  }
-
446  }
-
447 
-
448  return ss.str();
-
449 }
-
450 
-
451 void Hazelnupp::ApplyConstraints()
-
452 {
-
453  // Enforce required parameters / default values
-
454  for (const auto& pc : constraints)
-
455  // Parameter in question is not supplied
-
456  if (!HasParam(pc.second.key))
-
457  {
-
458  // Do we have a default value?
-
459  if (pc.second.defaultValue.size() > 0)
-
460  {
-
461  // Then create it now, by its default value
-
462 
-
463  Value* tmp = ParseValue(pc.second.defaultValue, &pc.second);
-
464  parameters.insert(std::pair<std::string, Parameter*>(
-
465  pc.second.key,
-
466  new Parameter(pc.second.key, tmp)
-
467  ));
-
468 
-
469  delete tmp;
-
470  tmp = nullptr;
-
471  }
-
472  // So we do not have a default value...
-
473  else
-
474  {
-
475  // Is it important to have the missing parameter?
-
476  if (pc.second.required)
-
477  // Throw an error message then
-
478  throw HazelnuppConstraintMissingValue(pc.second.key);
-
479  }
-
480  }
-
481 
-
482  return;
-
483 }
-
484 
-
485 const std::string& Hazelnupp::GetExecutableName() const
-
486 {
-
487  return executableName;
-
488 }
-
489 
-
490 const Value& Hazelnupp::operator[](const std::string& key) const
-
491 {
-
492  // Throw exception if param is unknown
-
493  if (!HasParam(key))
- -
495 
-
496  return *parameters.find(key)->second->GetValue();
-
497 }
+
410  ParamDocEntry& cached = paramInfos[it.first];
+
411  cached.required = it.second.required;
+
412  cached.typeIsForced = it.second.constrainType;
+
413  cached.type = DataTypeToString(it.second.wantedType);
+
414 
+
415  std::stringstream defaultValueSs;
+
416  for (const std::string& s : it.second.defaultValue)
+
417  {
+
418  defaultValueSs << '\'' << s << '\'';
+
419 
+
420  // Add a space if we are not at the last entry
+
421  if ((void*)&s != (void*)&it.second.defaultValue.back())
+
422  defaultValueSs << " ";
+
423  }
+
424  cached.defaultVal = defaultValueSs.str();
+
425  }
+
426 
+
427  // Now generate the documentatino body
+
428  if (paramInfos.size() > 0)
+
429  {
+
430  ss << std::endl
+
431  << "==== AVAILABLE PARAMETERS ===="
+
432  << std::endl << std::endl;
+
433 
+
434  for (const auto& it : paramInfos)
+
435  {
+
436  const ParamDocEntry& pde = it.second;
+
437 
+
438  // Put name
+
439  ss << it.first << " ";
+
440 
+
441  // Put abbreviation
+
442  if (pde.abbreviation.length() > 0)
+
443  ss << pde.abbreviation << " ";
+
444 
+
445  // Put type
+
446  if (pde.typeIsForced)
+
447  ss << pde.type << " ";
+
448 
+
449  // Put default value
+
450  if (pde.defaultVal.length() > 0)
+
451  ss << "default=[" << pde.defaultVal << "] ";
+
452 
+
453  // Put required tag, but only if no default value
+
454  if ((pde.required) && (pde.defaultVal.length() == 0))
+
455  ss << "[[REQUIRED]] ";
+
456 
+
457  // Put brief description
+
458  if (pde.description.length() > 0)
+
459  ss << pde.description;
+
460 
+
461  ss << std::endl << std::endl;
+
462  }
+
463  }
+
464 
+
465  return ss.str();
+
466 }
+
467 
+
468 void Hazelnupp::ApplyConstraints()
+
469 {
+
470  // Enforce required parameters / default values
+
471  for (const auto& pc : parameterConstraints)
+
472  // Parameter in question is not supplied
+
473  if (!HasParam(pc.second.key))
+
474  {
+
475  // Do we have a default value?
+
476  if (pc.second.defaultValue.size() > 0)
+
477  {
+
478  // Then create it now, by its default value
+
479 
+
480  Value* tmp = ParseValue(pc.second.defaultValue, &pc.second);
+
481  parameters.insert(std::pair<std::string, Parameter*>(
+
482  pc.second.key,
+
483  new Parameter(pc.second.key, tmp)
+
484  ));
+
485 
+
486  delete tmp;
+
487  tmp = nullptr;
+
488  }
+
489  // So we do not have a default value...
+
490  else
+
491  {
+
492  // Is it important to have the missing parameter?
+
493  if (pc.second.required)
+
494  // Throw an error message then
+
495  throw HazelnuppConstraintMissingValue(pc.second.key);
+
496  }
+
497  }
498 
-
499 void Hazelnupp::RegisterAbbreviation(const std::string& abbrev, const std::string& target)
-
500 {
-
501  abbreviations.insert(std::pair<std::string, std::string>(abbrev, target));
-
502  return;
-
503 }
-
504 
-
505 const std::string& Hazelnupp::GetAbbreviation(const std::string& abbrev) const
-
506 {
-
507  return abbreviations.find(abbrev)->second;
-
508 }
-
509 
-
510 bool Hazelnupp::HasAbbreviation(const std::string& abbrev) const
-
511 {
-
512  return abbreviations.find(abbrev) != abbreviations.end();
-
513 }
-
514 
- -
516 {
-
517  abbreviations.clear();
-
518  return;
-
519 }
-
520 
-
521 void Hazelnupp::RegisterConstraints(const std::vector<ParamConstraint>& constraints)
-
522 {
-
523  for (const ParamConstraint& pc : constraints)
-
524  {
-
525  // Does this constraint already exist?
-
526  const auto constraint = this->constraints.find(pc.key);
-
527  // If yes, replace it.
-
528  if (constraint != this->constraints.end())
-
529  constraint->second = pc;
-
530 
-
531  // Else, create a new pair
-
532  else
-
533  this->constraints.insert(std::pair<std::string, ParamConstraint>(
-
534  pc.key,
-
535  pc
-
536  ));
-
537  }
-
538 
-
539  return;
-
540 }
-
541 
- -
543 {
-
544  constraints.clear();
-
545  return;
-
546 }
-
547 
-
548 void Hazelnupp::SetCrashOnFail(bool crashOnFail)
-
549 {
-
550  this->crashOnFail = crashOnFail;
-
551  return;
-
552 }
-
553 
-
554 const ParamConstraint* Hazelnupp::GetConstraintForKey(const std::string& key) const
-
555 {
-
556  const auto constraint = constraints.find(key);
+
499  return;
+
500 }
+
501 
+
502 ParamConstraint Hazelnupp::GetConstraint(const std::string& parameter) const
+
503 {
+
504  return parameterConstraints.find(parameter)->second;
+
505 }
+
506 
+
507 void Hazelnupp::ClearConstraint(const std::string& parameter)
+
508 {
+
509  parameterConstraints.erase(parameter);
+
510  return;
+
511 }
+
512 
+
513 const std::string& Hazelnupp::GetExecutableName() const
+
514 {
+
515  return executableName;
+
516 }
+
517 
+
518 const Value& Hazelnupp::operator[](const std::string& key) const
+
519 {
+
520  // Throw exception if param is unknown
+
521  if (!HasParam(key))
+ +
523 
+
524  return *parameters.find(key)->second->GetValue();
+
525 }
+
526 
+
527 void Hazelnupp::RegisterAbbreviation(const std::string& abbrev, const std::string& target)
+
528 {
+
529  parameterAbreviations.insert(std::pair<std::string, std::string>(abbrev, target));
+
530  return;
+
531 }
+
532 
+
533 const std::string& Hazelnupp::GetAbbreviation(const std::string& abbrev) const
+
534 {
+
535  if (!HasAbbreviation(abbrev))
+ +
537 
+
538  return parameterAbreviations.find(abbrev)->second;
+
539 }
+
540 
+
541 bool Hazelnupp::HasAbbreviation(const std::string& abbrev) const
+
542 {
+
543  return parameterAbreviations.find(abbrev) != parameterAbreviations.end();
+
544 }
+
545 
+
546 void Hazelnupp::ClearAbbreviation(const std::string& abbrevation)
+
547 {
+
548  parameterAbreviations.erase(abbrevation);
+
549  return;
+
550 }
+
551 
+ +
553 {
+
554  parameterAbreviations.clear();
+
555  return;
+
556 }
557 
-
558  if (constraint == constraints.end())
-
559  return nullptr;
-
560 
-
561  return &constraint->second;
-
562 }
+
558 void Hazelnupp::RegisterConstraint(const std::string& key, const ParamConstraint& constraint)
+
559 {
+
560  // Magic syntax, wooo
+
561  (parameterConstraints[key] = constraint).key = key;
+
562  return;
+
563 }
+
564 
+ +
566 {
+
567  parameterConstraints.clear();
+
568  return;
+
569 }
+
570 
+
571 void Hazelnupp::SetCrashOnFail(bool crashOnFail)
+
572 {
+
573  this->crashOnFail = crashOnFail;
+
574  return;
+
575 }
+
576 
+
577 const ParamConstraint* Hazelnupp::GetConstraintForKey(const std::string& key) const
+
578 {
+
579  const auto constraint = parameterConstraints.find(key);
+
580 
+
581  if (constraint == parameterConstraints.end())
+
582  return nullptr;
+
583 
+
584  return &constraint->second;
+
585 }
Specializations for integer values (uses long long int)
Definition: IntValue.h:8
static bool IsNumeric(const std::string &str, const bool allowDecimalPoint=false)
Will return true if the given string consists only of digits (including signage)
Definition: StringTools.cpp:56
static bool ParseNumber(const std::string &str, bool &out_isInt, long double &out_number)
Will convert the number in str to a number.
Definition: StringTools.cpp:82
-
const std::string & GetBriefDescription()
Returns the brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:312
-
void ClearConstraints()
Will delete all constraints.
Definition: Hazelnupp.cpp:542
+
const std::string & GetBriefDescription()
Returns the brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:319
+
void ClearConstraints()
Will delete all constraints.
Definition: Hazelnupp.cpp:565
Gets thrown when an non-existent key gets dereferenced.
-
const std::string & GetExecutableName() const
Will return argv[0], the name of the executable.
Definition: Hazelnupp.cpp:485
-
std::string GenerateDocumentation() const
Will generate a text-based documentation suited to show the user, for example on –help.
Definition: Hazelnupp.cpp:342
- -
const Value & operator[](const std::string &key) const
Will return the value given a key.
Definition: Hazelnupp.cpp:490
+
const std::string & GetExecutableName() const
Will return argv[0], the name of the executable.
Definition: Hazelnupp.cpp:513
+
std::string GenerateDocumentation() const
Will generate a text-based documentation suited to show the user, for example on –help.
Definition: Hazelnupp.cpp:359
+
ParamConstraint GetConstraint(const std::string &parameter) const
Will return the constraint information for a specific parameter.
Definition: Hazelnupp.cpp:502
+ +
const Value & operator[](const std::string &key) const
Will return the value given a key.
Definition: Hazelnupp.cpp:518
const std::string & What() const
Will return an error message.
- -
void ClearAbbreviations()
Will delete all abbreviations.
Definition: Hazelnupp.cpp:515
+ + +
void ClearAbbreviations()
Will delete all abbreviations.
Definition: Hazelnupp.cpp:552
Specializations for floating point values (uses long double)
Definition: FloatValue.h:9
-
void SetBriefDescription(const std::string &description)
Sets a brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:306
+
void SetBriefDescription(const std::string &description)
Sets a brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:313
Abstract class for values.
Definition: Value.h:10
-
bool GetCrashOnFail() const
Gets whether the application crashes on an exception whilst parsing, and prints to stderr.
Definition: Hazelnupp.cpp:290
-
void SetCatchHelp(bool catchHelp)
Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter docume...
Definition: Hazelnupp.cpp:295
-
bool GetCatchHelp() const
Retruns whether the Hazelnupp should automatically catch the –help parameter, print the parameter doc...
Definition: Hazelnupp.cpp:301
+
bool GetCrashOnFail() const
Gets whether the application crashes on an exception whilst parsing, and prints to stderr.
Definition: Hazelnupp.cpp:297
+
bool HasDescription(const std::string &parameter) const
Returns whether or not a given parameter has a registered description.
Definition: Hazelnupp.cpp:341
+
void SetCatchHelp(bool catchHelp)
Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter docume...
Definition: Hazelnupp.cpp:302
+
bool GetCatchHelp() const
Retruns whether the Hazelnupp should automatically catch the –help parameter, print the parameter doc...
Definition: Hazelnupp.cpp:308
-
DATA_TYPE wantedType
Constrain the parameter to this value. Requires constrainType to be set to true.
+
DATA_TYPE wantedType
Constrain the parameter to this value. Requires constrainType to be set to true.
-
bool HasParam(const std::string &key) const
Will check wether a parameter exists given a key, or not.
Definition: Hazelnupp.cpp:164
-
void Parse(const int argc, const char *const *argv)
Will parse command line arguments.
Definition: Hazelnupp.cpp:35
+
static const std::string g_emptyString
The only purpose of this is to provide the ability to return an empty string as an error for std::str...
Definition: Placeholders.h:9
+
bool HasParam(const std::string &key) const
Will check wether a parameter exists given a key, or not.
Definition: Hazelnupp.cpp:165
+
void Parse(const int argc, const char *const *argv)
Will parse command line arguments.
Definition: Hazelnupp.cpp:36
-
bool constrainType
Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...
+
bool constrainType
Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...
+
void ClearDescription(const std::string &parameter)
Will delete the description of a parameter if it exists.
Definition: Hazelnupp.cpp:346
const std::string & Key() const
Will return the key of this parameter.
Definition: Parameter.cpp:21
Gets thrown when a parameter constrained to be required is not provided, and has no default value set...
-
void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
Will register an abbreviation (like -f for –force)
Definition: Hazelnupp.cpp:499
+
void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
Will register an abbreviation (like -f for –force)
Definition: Hazelnupp.cpp:527
Gets thrown when a parameter is of a type that does not match the required type, and is not convertib...
-
void RegisterConstraints(const std::vector< ParamConstraint > &constraints)
Will register parameter constraints.
Definition: Hazelnupp.cpp:521
-
const std::string & GetAbbreviation(const std::string &abbrev) const
Will return the long form of an abbreviation (like –force for -f)
Definition: Hazelnupp.cpp:505
+
const std::string & GetAbbreviation(const std::string &abbrev) const
Will return the long form of an abbreviation (like –force for -f) Returns "" if no match is found.
Definition: Hazelnupp.cpp:533
+
void ClearDescriptions()
Will delete all parameter descriptions.
Definition: Hazelnupp.cpp:353
void AddValue(const Value *value)
Will add this value to the list.
Definition: ListValue.cpp:33
+
void RegisterConstraint(const std::string &key, const ParamConstraint &constraint)
Will register a constraint for a parameter.
Definition: Hazelnupp.cpp:558
Specializations for void values.
Definition: VoidValue.h:8
+
const std::string & GetDescription(const std::string &parameter) const
Will return a short description for a parameter, if it exists.
Definition: Hazelnupp.cpp:330
-
void ClearDescription(const std::string &parameter)
Will delete the description of a parameter if it exists.
Definition: Hazelnupp.cpp:335
+
void ClearConstraint(const std::string &parameter)
Will the constraint of a specific parameter.
Definition: Hazelnupp.cpp:507
-
bool HasAbbreviation(const std::string &abbrev) const
Will check wether or not an abbreviation is registered.
Definition: Hazelnupp.cpp:510
+
bool HasAbbreviation(const std::string &abbrev) const
Will check wether or not an abbreviation is registered.
Definition: Hazelnupp.cpp:541
-
void SetCrashOnFail(bool crashOnFail)
Sets whether to crash the application, and print to stderr, when an exception is raised whilst parsin...
Definition: Hazelnupp.cpp:548
-
void RegisterDescription(const std::string &parameter, const std::string &description)
Willl register a short description for a parameter.
Definition: Hazelnupp.cpp:317
-
const std::string GetDescription(const std::string &parameter) const
Will return a short description for a parameter, if it exists.
Definition: Hazelnupp.cpp:323
+
void SetCrashOnFail(bool crashOnFail)
Sets whether to crash the application, and print to stderr, when an exception is raised whilst parsin...
Definition: Hazelnupp.cpp:571
+
void RegisterDescription(const std::string &parameter, const std::string &description)
Willl register a short description for a parameter.
Definition: Hazelnupp.cpp:324
static std::string DataTypeToString(DATA_TYPE type)
Definition: DataType.h:17
+
void ClearAbbreviation(const std::string &abbrevation)
Will delete the abbreviation for a given parameter.
Definition: Hazelnupp.cpp:546
Specializations for list values (uses std::vector<Value*>)
Definition: ListValue.h:9
Specializations for string values (uses std::string)
Definition: StringValue.h:9
diff --git a/docs/Hazelnupp_8h.html b/docs/Hazelnupp_8h.html index d3ce462..d693442 100644 --- a/docs/Hazelnupp_8h.html +++ b/docs/Hazelnupp_8h.html @@ -128,7 +128,7 @@ Namespaces diff --git a/docs/Hazelnupp_8h_source.html b/docs/Hazelnupp_8h_source.html index e2d6dad..02404b0 100644 --- a/docs/Hazelnupp_8h_source.html +++ b/docs/Hazelnupp_8h_source.html @@ -112,131 +112,156 @@ $(function() {
32  //! Will register an abbreviation (like -f for --force)
33  void RegisterAbbreviation(const std::string& abbrev, const std::string& target);
34 
-
35  //! Will return the long form of an abbreviation (like --force for -f)
-
36  const std::string& GetAbbreviation(const std::string& abbrev) const;
-
37 
-
38  //! Will check wether or not an abbreviation is registered
-
39  bool HasAbbreviation(const std::string& abbrev) const;
-
40 
-
41  //! Will delete all abbreviations
-
42  void ClearAbbreviations();
-
43 
-
44  //! Will register parameter constraints
-
45  void RegisterConstraints(const std::vector<ParamConstraint>& constraints);
-
46 
-
47  //! Will delete all constraints
-
48  void ClearConstraints();
-
49 
-
50  //! Sets whether to crash the application, and print to stderr, when an exception is
-
51  //! raised whilst parsing, or not.
-
52  void SetCrashOnFail(bool crashOnFail);
+
35  //! Will return the long form of an abbreviation (like --force for -f)
+
36  //! Returns "" if no match is found
+
37  const std::string& GetAbbreviation(const std::string& abbrev) const;
+
38 
+
39  //! Will check wether or not an abbreviation is registered
+
40  bool HasAbbreviation(const std::string& abbrev) const;
+
41 
+
42  //! Will delete the abbreviation for a given parameter.
+
43  //! IMPORTANT: This parameter is the abbreviation! Not the long form!
+
44  void ClearAbbreviation(const std::string& abbrevation);
+
45 
+
46  //! Will delete all abbreviations
+
47  void ClearAbbreviations();
+
48 
+
49  //! Will register a constraint for a parameter.
+
50  //! IMPORTANT: Any parameter can only have ONE constraint. Applying a new one will overwrite the old one!
+
51  //! Construct the ParamConstraint struct yourself to combine Require and TypeSafety! You can also use the ParamConstraint constructor!
+
52  void RegisterConstraint(const std::string& key, const ParamConstraint& constraint);
53 
-
54  //! Gets whether the application crashes on an exception whilst parsing, and prints to stderr.
-
55  bool GetCrashOnFail() const;
+
54  //! Will return the constraint information for a specific parameter
+
55  ParamConstraint GetConstraint(const std::string& parameter) const;
56 
-
57  //! Sets whether the Hazelnupp should automatically catch the --help parameter, print the parameter documentation to stdout, and exit or not.
-
58  void SetCatchHelp(bool catchHelp);
+
57  //! Will the constraint of a specific parameter
+
58  void ClearConstraint(const std::string& parameter);
59 
-
60  //! Retruns whether the Hazelnupp should automatically catch the --help parameter, print the parameter documentation to stdout, and exit or not.
-
61  bool GetCatchHelp() const;
+
60  //! Will delete all constraints
+
61  void ClearConstraints();
62 
-
63  //! Sets a brief description of the application to be automatically added to the documentation.
-
64  void SetBriefDescription(const std::string& description);
-
65 
-
66  //! Returns the brief description of the application to be automatically added to the documentation.
-
67  const std::string& GetBriefDescription();
-
68 
-
69  //! Willl register a short description for a parameter.
-
70  //! Will overwrite existing descriptions for that parameter.
-
71  void RegisterDescription(const std::string& parameter, const std::string& description);
+
63  //! Sets whether to crash the application, and print to stderr, when an exception is
+
64  //! raised whilst parsing, or not.
+
65  void SetCrashOnFail(bool crashOnFail);
+
66 
+
67  //! Gets whether the application crashes on an exception whilst parsing, and prints to stderr.
+
68  bool GetCrashOnFail() const;
+
69 
+
70  //! Sets whether the Hazelnupp should automatically catch the --help parameter, print the parameter documentation to stdout, and exit or not.
+
71  void SetCatchHelp(bool catchHelp);
72 
-
73  //! Will return a short description for a parameter, if it exists.
-
74  //! Empty string if it does not exist.
-
75  const std::string GetDescription(const std::string& parameter) const;
-
76 
-
77  //! Will delete the description of a parameter if it exists.
-
78  void ClearDescription(const std::string& parameter);
-
79 
-
80  //! Will generate a text-based documentation suited to show the user, for example on --help.
-
81  std::string GenerateDocumentation() const;
-
82 
-
83  private:
-
84  //! Will translate the c-like args to an std::vector
-
85  void PopulateRawArgs(const int argc, const char* const* argv);
-
86 
-
87  //! Will replace all args matching an abbreviation with their long form (like -f for --force)
-
88  void ExpandAbbreviations();
+
73  //! Retruns whether the Hazelnupp should automatically catch the --help parameter, print the parameter documentation to stdout, and exit or not.
+
74  bool GetCatchHelp() const;
+
75 
+
76  //! Sets a brief description of the application to be automatically added to the documentation.
+
77  void SetBriefDescription(const std::string& description);
+
78 
+
79  //! Returns the brief description of the application to be automatically added to the documentation.
+
80  const std::string& GetBriefDescription();
+
81 
+
82  //! Willl register a short description for a parameter.
+
83  //! Will overwrite existing descriptions for that parameter.
+
84  void RegisterDescription(const std::string& parameter, const std::string& description);
+
85 
+
86  //! Will return a short description for a parameter, if it exists.
+
87  //! Empty string if it does not exist.
+
88  const std::string& GetDescription(const std::string& parameter) const;
89 
-
90  //! Will parse the next parameter. Returns the index of the next parameter.
-
91  std::size_t ParseNextParameter(const std::size_t parIndex, Parameter*& out_Par);
+
90  //! Returns whether or not a given parameter has a registered description
+
91  bool HasDescription(const std::string& parameter) const;
92 
-
93  //! Will convert a vector of string-values to an actual Value
-
94  Value* ParseValue(const std::vector<std::string>& values, const ParamConstraint* constraint = nullptr);
+
93  //! Will delete the description of a parameter if it exists.
+
94  void ClearDescription(const std::string& parameter);
95 
-
96  //! Will apply the loaded constraints on the loaded values, exluding types.
-
97  void ApplyConstraints();
+
96  //! Will delete all parameter descriptions
+
97  void ClearDescriptions();
98 
-
99  //! Will return a pointer to a paramConstraint given a key. If there is no, it returns nullptr
-
100  const ParamConstraint* GetConstraintForKey(const std::string& key) const;
+
99  //! Will generate a text-based documentation suited to show the user, for example on --help.
+
100  std::string GenerateDocumentation() const;
101 
-
102  std::string executableName; //! The path of the executable. Always argv[0]
-
103  std::unordered_map<std::string, Parameter*> parameters;
-
104 
-
105  //! These are abbreviations. Like, -f for --force.
-
106  std::unordered_map<std::string, std::string> abbreviations;
-
107 
-
108  //! Parameter constraints, mapped to keys
-
109  std::unordered_map<std::string, ParamConstraint> constraints;
-
110 
-
111  //! Raw argv
-
112  std::vector<std::string> rawArgs;
-
113 
-
114  //! Short descriptions for parameters
-
115  std::unordered_map<std::string, std::string> parameterDescriptions;
-
116 
-
117  //! A brief description of the application to be added to the generated documentation. Optional.
-
118  std::string briefDescription;
-
119 
-
120  //! If set to true, Hazelnupp will automatically catch the --help parameter, print the parameter documentation to stdout and exit.
-
121  bool catchHelp = true;
-
122 
-
123  //! If set to true, Hazelnupp will crash the application with output to stderr when an exception is thrown whilst parsing.
-
124  bool crashOnFail = true;
-
125  };
-
126 }
+
102  private:
+
103  //! Will translate the c-like args to an std::vector
+
104  void PopulateRawArgs(const int argc, const char* const* argv);
+
105 
+
106  //! Will replace all args matching an abbreviation with their long form (like -f for --force)
+
107  void ExpandAbbreviations();
+
108 
+
109  //! Will parse the next parameter. Returns the index of the next parameter.
+
110  std::size_t ParseNextParameter(const std::size_t parIndex, Parameter*& out_Par);
+
111 
+
112  //! Will convert a vector of string-values to an actual Value
+
113  Value* ParseValue(const std::vector<std::string>& values, const ParamConstraint* constraint = nullptr);
+
114 
+
115  //! Will apply the loaded constraints on the loaded values, exluding types.
+
116  void ApplyConstraints();
+
117 
+
118  //! Will return a pointer to a paramConstraint given a key. If there is no, it returns nullptr
+
119  const ParamConstraint* GetConstraintForKey(const std::string& key) const;
+
120 
+
121  std::string executableName; //! The path of the executable. Always argv[0]
+
122  std::unordered_map<std::string, Parameter*> parameters;
+
123 
+
124  //! These are abbreviations. Like, -f for --force.
+
125  std::unordered_map<std::string, std::string> parameterAbreviations;
+
126 
+
127  //! Parameter constraints, mapped to keys
+
128  std::unordered_map<std::string, ParamConstraint> parameterConstraints;
+
129 
+
130  //! Raw argv
+
131  std::vector<std::string> rawArgs;
+
132 
+
133  //! Short descriptions for parameters
+
134  //! First member is the abbreviation
+
135  std::unordered_map<std::string, std::string> parameterDescriptions;
+
136 
+
137  //! A brief description of the application to be added to the generated documentation. Optional.
+
138  std::string briefDescription;
+
139 
+
140  //! If set to true, Hazelnupp will automatically catch the --help parameter, print the parameter documentation to stdout and exit.
+
141  bool catchHelp = true;
+
142 
+
143  //! If set to true, Hazelnupp will crash the application with output to stderr when an exception is thrown whilst parsing.
+
144  bool crashOnFail = true;
+
145  };
+
146 }
-
const std::string & GetBriefDescription()
Returns the brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:312
-
void ClearConstraints()
Will delete all constraints.
Definition: Hazelnupp.cpp:542
-
const std::string & GetExecutableName() const
Will return argv[0], the name of the executable.
Definition: Hazelnupp.cpp:485
-
std::string GenerateDocumentation() const
Will generate a text-based documentation suited to show the user, for example on –help.
Definition: Hazelnupp.cpp:342
- -
const Value & operator[](const std::string &key) const
Will return the value given a key.
Definition: Hazelnupp.cpp:490
+
const std::string & GetBriefDescription()
Returns the brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:319
+
void ClearConstraints()
Will delete all constraints.
Definition: Hazelnupp.cpp:565
+
const std::string & GetExecutableName() const
Will return argv[0], the name of the executable.
Definition: Hazelnupp.cpp:513
+
std::string GenerateDocumentation() const
Will generate a text-based documentation suited to show the user, for example on –help.
Definition: Hazelnupp.cpp:359
+
ParamConstraint GetConstraint(const std::string &parameter) const
Will return the constraint information for a specific parameter.
Definition: Hazelnupp.cpp:502
+ +
const Value & operator[](const std::string &key) const
Will return the value given a key.
Definition: Hazelnupp.cpp:518
The main class to interface with.
Definition: Hazelnupp.h:11
- -
void ClearAbbreviations()
Will delete all abbreviations.
Definition: Hazelnupp.cpp:515
-
void SetBriefDescription(const std::string &description)
Sets a brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:306
+ +
void ClearAbbreviations()
Will delete all abbreviations.
Definition: Hazelnupp.cpp:552
+
void SetBriefDescription(const std::string &description)
Sets a brief description of the application to be automatically added to the documentation.
Definition: Hazelnupp.cpp:313
Abstract class for values.
Definition: Value.h:10
-
bool GetCrashOnFail() const
Gets whether the application crashes on an exception whilst parsing, and prints to stderr.
Definition: Hazelnupp.cpp:290
-
void SetCatchHelp(bool catchHelp)
Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter docume...
Definition: Hazelnupp.cpp:295
-
bool GetCatchHelp() const
Retruns whether the Hazelnupp should automatically catch the –help parameter, print the parameter doc...
Definition: Hazelnupp.cpp:301
+
bool GetCrashOnFail() const
Gets whether the application crashes on an exception whilst parsing, and prints to stderr.
Definition: Hazelnupp.cpp:297
+
bool HasDescription(const std::string &parameter) const
Returns whether or not a given parameter has a registered description.
Definition: Hazelnupp.cpp:341
+
void SetCatchHelp(bool catchHelp)
Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter docume...
Definition: Hazelnupp.cpp:302
+
bool GetCatchHelp() const
Retruns whether the Hazelnupp should automatically catch the –help parameter, print the parameter doc...
Definition: Hazelnupp.cpp:308
-
bool HasParam(const std::string &key) const
Will check wether a parameter exists given a key, or not.
Definition: Hazelnupp.cpp:164
-
void Parse(const int argc, const char *const *argv)
Will parse command line arguments.
Definition: Hazelnupp.cpp:35
-
void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
Will register an abbreviation (like -f for –force)
Definition: Hazelnupp.cpp:499
-
void RegisterConstraints(const std::vector< ParamConstraint > &constraints)
Will register parameter constraints.
Definition: Hazelnupp.cpp:521
-
const std::string & GetAbbreviation(const std::string &abbrev) const
Will return the long form of an abbreviation (like –force for -f)
Definition: Hazelnupp.cpp:505
+
bool HasParam(const std::string &key) const
Will check wether a parameter exists given a key, or not.
Definition: Hazelnupp.cpp:165
+
void Parse(const int argc, const char *const *argv)
Will parse command line arguments.
Definition: Hazelnupp.cpp:36
+
void ClearDescription(const std::string &parameter)
Will delete the description of a parameter if it exists.
Definition: Hazelnupp.cpp:346
+
void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
Will register an abbreviation (like -f for –force)
Definition: Hazelnupp.cpp:527
+
const std::string & GetAbbreviation(const std::string &abbrev) const
Will return the long form of an abbreviation (like –force for -f) Returns "" if no match is found.
Definition: Hazelnupp.cpp:533
+
void ClearDescriptions()
Will delete all parameter descriptions.
Definition: Hazelnupp.cpp:353
-
void ClearDescription(const std::string &parameter)
Will delete the description of a parameter if it exists.
Definition: Hazelnupp.cpp:335
-
bool HasAbbreviation(const std::string &abbrev) const
Will check wether or not an abbreviation is registered.
Definition: Hazelnupp.cpp:510
-
void SetCrashOnFail(bool crashOnFail)
Sets whether to crash the application, and print to stderr, when an exception is raised whilst parsin...
Definition: Hazelnupp.cpp:548
-
void RegisterDescription(const std::string &parameter, const std::string &description)
Willl register a short description for a parameter.
Definition: Hazelnupp.cpp:317
-
const std::string GetDescription(const std::string &parameter) const
Will return a short description for a parameter, if it exists.
Definition: Hazelnupp.cpp:323
+
void RegisterConstraint(const std::string &key, const ParamConstraint &constraint)
Will register a constraint for a parameter.
Definition: Hazelnupp.cpp:558
+
const std::string & GetDescription(const std::string &parameter) const
Will return a short description for a parameter, if it exists.
Definition: Hazelnupp.cpp:330
+
void ClearConstraint(const std::string &parameter)
Will the constraint of a specific parameter.
Definition: Hazelnupp.cpp:507
+
bool HasAbbreviation(const std::string &abbrev) const
Will check wether or not an abbreviation is registered.
Definition: Hazelnupp.cpp:541
+
void SetCrashOnFail(bool crashOnFail)
Sets whether to crash the application, and print to stderr, when an exception is raised whilst parsin...
Definition: Hazelnupp.cpp:571
+
void RegisterDescription(const std::string &parameter, const std::string &description)
Willl register a short description for a parameter.
Definition: Hazelnupp.cpp:324
+
void ClearAbbreviation(const std::string &abbrevation)
Will delete the abbreviation for a given parameter.
Definition: Hazelnupp.cpp:546
diff --git a/docs/IntValue_8cpp.html b/docs/IntValue_8cpp.html index 0fa339f..314f35c 100644 --- a/docs/IntValue_8cpp.html +++ b/docs/IntValue_8cpp.html @@ -103,7 +103,7 @@ Include dependency graph for IntValue.cpp: diff --git a/docs/IntValue_8cpp_source.html b/docs/IntValue_8cpp_source.html index 6f5705b..b3e9743 100644 --- a/docs/IntValue_8cpp_source.html +++ b/docs/IntValue_8cpp_source.html @@ -173,7 +173,7 @@ $(function() {
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/IntValue_8h.html b/docs/IntValue_8h.html index a9d4996..d90c08f 100644 --- a/docs/IntValue_8h.html +++ b/docs/IntValue_8h.html @@ -123,7 +123,7 @@ Namespaces diff --git a/docs/IntValue_8h_source.html b/docs/IntValue_8h_source.html index b857d1e..e4cbb70 100644 --- a/docs/IntValue_8h_source.html +++ b/docs/IntValue_8h_source.html @@ -142,7 +142,7 @@ $(function() { diff --git a/docs/ListValue_8cpp.html b/docs/ListValue_8cpp.html index 915d318..58abd54 100644 --- a/docs/ListValue_8cpp.html +++ b/docs/ListValue_8cpp.html @@ -103,7 +103,7 @@ Include dependency graph for ListValue.cpp: diff --git a/docs/ListValue_8cpp_source.html b/docs/ListValue_8cpp_source.html index f3ad09c..d8a51fc 100644 --- a/docs/ListValue_8cpp_source.html +++ b/docs/ListValue_8cpp_source.html @@ -199,7 +199,7 @@ $(function() {
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/ListValue_8h.html b/docs/ListValue_8h.html index 0efbddc..4f1f563 100644 --- a/docs/ListValue_8h.html +++ b/docs/ListValue_8h.html @@ -123,7 +123,7 @@ Namespaces diff --git a/docs/ListValue_8h_source.html b/docs/ListValue_8h_source.html index 5873c71..27b8daa 100644 --- a/docs/ListValue_8h_source.html +++ b/docs/ListValue_8h_source.html @@ -145,7 +145,7 @@ $(function() { diff --git a/docs/ParamConstraint_8h.html b/docs/ParamConstraint_8h.html index f0be4e4..33068c5 100644 --- a/docs/ParamConstraint_8h.html +++ b/docs/ParamConstraint_8h.html @@ -122,7 +122,7 @@ Namespaces diff --git a/docs/ParamConstraint_8h_source.html b/docs/ParamConstraint_8h_source.html index bca5c9f..346f8e0 100644 --- a/docs/ParamConstraint_8h_source.html +++ b/docs/ParamConstraint_8h_source.html @@ -93,77 +93,78 @@ $(function() {
13 
14  //! Constructs a require constraint.
15  //! Think of the default value like of a list ofparameters. Like {"--width", "800"}
-
16  static ParamConstraint Require(const std::string& key, const std::vector<std::string>& defaultValue = {}, bool required = true)
+
16  static ParamConstraint Require(const std::vector<std::string>& defaultValue = {}, bool required = true)
17  {
18  ParamConstraint pc;
-
19  pc.key = key;
- -
21  pc.required = required;
-
22 
-
23  return pc;
-
24  }
-
25 
-
26  //! Constructs a type-safety constraint
-
27  static ParamConstraint TypeSafety(const std::string& key, DATA_TYPE wantedType, bool constrainType = true)
-
28  {
-
29  ParamConstraint pc;
-
30  pc.key = key;
- - -
33 
-
34  return pc;
-
35  }
-
36 
-
37  //! Whole constructor
-
38  ParamConstraint(const std::string& key, bool constrainType, DATA_TYPE wantedType, const std::vector<std::string>& defaultValue, bool required)
-
39  :
-
40  key{ key },
- - - - -
45  {
-
46  return;
-
47  }
-
48 
-
49  //! The key of the parameter to constrain
-
50  std::string key;
-
51 
-
52  //! Should this parameter be forced to be of a certain type?
-
53  //! Remember to set `constrainTo` to the wanted type
-
54  bool constrainType = false;
-
55 
-
56  //! Constrain the parameter to this value. Requires `constrainType` to be set to true.
- -
58 
-
59  //! The default value for this parameter.
-
60  //! Gets applied if this parameter was not given.
-
61  //! Think of this like a list of parameters. Like {"--width", "800"}
-
62  std::vector<std::string> defaultValue;
-
63 
-
64  //! If set to true, and no default value set,
-
65  //! an error will be produced if this parameter is not supplied by the user.
-
66  bool required = false;
-
67  };
-
68 }
+ +
20  pc.required = required;
+
21 
+
22  return pc;
+
23  }
+
24 
+
25  //! Constructs a type-safety constraint
+ +
27  {
+
28  ParamConstraint pc;
+ + +
31 
+
32  return pc;
+
33  }
+
34 
+
35  //! Whole constructor
+
36  ParamConstraint(bool constrainType, DATA_TYPE wantedType, const std::vector<std::string>& defaultValue, bool required)
+
37  :
+ + + + +
42  {
+
43  return;
+
44  }
+
45 
+
46  //! Should this parameter be forced to be of a certain type?
+
47  //! Remember to set `constrainTo` to the wanted type
+
48  bool constrainType = false;
+
49 
+
50  //! Constrain the parameter to this value. Requires `constrainType` to be set to true.
+ +
52 
+
53  //! The default value for this parameter.
+
54  //! Gets applied if this parameter was not given.
+
55  //! Think of this like a list of parameters. Like {"--width", "800"}
+
56  std::vector<std::string> defaultValue;
+
57 
+
58  //! If set to true, and no default value set,
+
59  //! an error will be produced if this parameter is not supplied by the user.
+
60  bool required = false;
+
61 
+
62  private:
+
63  //! The parameter this constraint is for.
+
64  //! This value is automatically set by Hazelnupp.
+
65  std::string key;
+
66 
+
67  friend class Hazelnupp;
+
68  };
+
69 }
+
ParamConstraint(bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)
Whole constructor.
+
The main class to interface with.
Definition: Hazelnupp.h:11
-
DATA_TYPE wantedType
Constrain the parameter to this value. Requires constrainType to be set to true.
+
DATA_TYPE wantedType
Constrain the parameter to this value. Requires constrainType to be set to true.
-
bool constrainType
Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...
+
bool constrainType
Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...
ParamConstraint()=default
Empty constructor.
-
std::string key
The key of the parameter to constrain.
-
bool required
If set to true, and no default value set, an error will be produced if this parameter is not supplied...
-
static ParamConstraint Require(const std::string &key, const std::vector< std::string > &defaultValue={}, bool required=true)
Constructs a require constraint.
-
ParamConstraint(const std::string &key, bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)
Whole constructor.
-
static ParamConstraint TypeSafety(const std::string &key, DATA_TYPE wantedType, bool constrainType=true)
Constructs a type-safety constraint.
+
bool required
If set to true, and no default value set, an error will be produced if this parameter is not supplied...
DATA_TYPE
The different data types a paramater can be.
Definition: DataType.h:8
-
std::vector< std::string > defaultValue
The default value for this parameter.
+
std::vector< std::string > defaultValue
The default value for this parameter.
+
static ParamConstraint Require(const std::vector< std::string > &defaultValue={}, bool required=true)
Constructs a require constraint.
+
static ParamConstraint TypeSafety(DATA_TYPE wantedType, bool constrainType=true)
Constructs a type-safety constraint.
diff --git a/docs/Parameter_8cpp.html b/docs/Parameter_8cpp.html index 629124a..f04b173 100644 --- a/docs/Parameter_8cpp.html +++ b/docs/Parameter_8cpp.html @@ -98,7 +98,7 @@ Include dependency graph for Parameter.cpp: diff --git a/docs/Parameter_8cpp_source.html b/docs/Parameter_8cpp_source.html index 04e5028..dac49ab 100644 --- a/docs/Parameter_8cpp_source.html +++ b/docs/Parameter_8cpp_source.html @@ -116,7 +116,7 @@ $(function() { diff --git a/docs/Parameter_8h.html b/docs/Parameter_8h.html index 84dd6e5..42aa3e9 100644 --- a/docs/Parameter_8h.html +++ b/docs/Parameter_8h.html @@ -125,7 +125,7 @@ Namespaces diff --git a/docs/Parameter_8h_source.html b/docs/Parameter_8h_source.html index 7c45ddf..cf178ab 100644 --- a/docs/Parameter_8h_source.html +++ b/docs/Parameter_8h_source.html @@ -119,7 +119,7 @@ $(function() { diff --git a/docs/Placeholders_8h.html b/docs/Placeholders_8h.html new file mode 100644 index 0000000..3b85e48 --- /dev/null +++ b/docs/Placeholders_8h.html @@ -0,0 +1,127 @@ + + + + + + + +Leonetienne/Hazelnupp: Hazelnupp/Placeholders.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Leonetienne/Hazelnupp +
+
Simple, easy to use, command line parameter interface
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Placeholders.h File Reference
+
+
+
#include <string>
+
+Include dependency graph for Placeholders.h:
+
+
+ + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 Hazelnp
 
 Hazelnp::Placeholders
 
+ + + + +

+Variables

static const std::string Hazelnp::Placeholders::g_emptyString
 The only purpose of this is to provide the ability to return an empty string as an error for std::string& methods. More...
 
+
+ + + + diff --git a/docs/Placeholders_8h__dep__incl.map b/docs/Placeholders_8h__dep__incl.map new file mode 100644 index 0000000..7af3b7c --- /dev/null +++ b/docs/Placeholders_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/Placeholders_8h__dep__incl.md5 b/docs/Placeholders_8h__dep__incl.md5 new file mode 100644 index 0000000..6a40e2f --- /dev/null +++ b/docs/Placeholders_8h__dep__incl.md5 @@ -0,0 +1 @@ +678075b6de5c70f209cd65d758fbf7ee \ No newline at end of file diff --git a/docs/Placeholders_8h__dep__incl.png b/docs/Placeholders_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..884bd55cc7682b9028ce6e9b16b0a453efe7a9d2 GIT binary patch literal 3759 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 C?OIX* literal 0 HcmV?d00001 diff --git a/docs/Placeholders_8h__incl.map b/docs/Placeholders_8h__incl.map new file mode 100644 index 0000000..3e94310 --- /dev/null +++ b/docs/Placeholders_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/Placeholders_8h__incl.md5 b/docs/Placeholders_8h__incl.md5 new file mode 100644 index 0000000..58a6a99 --- /dev/null +++ b/docs/Placeholders_8h__incl.md5 @@ -0,0 +1 @@ +e5b4d2e9e3fff41bcea0a3f60f76dcda \ No newline at end of file diff --git a/docs/Placeholders_8h__incl.png b/docs/Placeholders_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..29ee41be93e2b2682de1747ef8ab41be4928e25c GIT binary patch literal 3371 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 + + + + + + +Leonetienne/Hazelnupp: Hazelnupp/Placeholders.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Leonetienne/Hazelnupp +
+
Simple, easy to use, command line parameter interface
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Placeholders.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include <string>
+
3 
+
4 namespace Hazelnp
+
5 {
+
6  namespace Placeholders
+
7  {
+
8  //! The only purpose of this is to provide the ability to return an empty string as an error for std::string& methods.
+
9  static const std::string g_emptyString;
+
10  }
+
11 }
+
+ +
static const std::string g_emptyString
The only purpose of this is to provide the ability to return an empty string as an error for std::str...
Definition: Placeholders.h:9
+ + + + diff --git a/docs/Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html b/docs/Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html index 257421b..605b83b 100644 --- a/docs/Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html +++ b/docs/Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html @@ -77,7 +77,7 @@ $(function() { diff --git a/docs/StringTools_8cpp.html b/docs/StringTools_8cpp.html index 0900cdf..487b632 100644 --- a/docs/StringTools_8cpp.html +++ b/docs/StringTools_8cpp.html @@ -97,7 +97,7 @@ Include dependency graph for StringTools.cpp: diff --git a/docs/StringTools_8cpp_source.html b/docs/StringTools_8cpp_source.html index d8bc82a..382851d 100644 --- a/docs/StringTools_8cpp_source.html +++ b/docs/StringTools_8cpp_source.html @@ -275,7 +275,7 @@ $(function() {
static std::string ToLower(const std::string &str)
Will make a string all lower-case.
diff --git a/docs/StringTools_8h.html b/docs/StringTools_8h.html index c2360b1..ea1d3d5 100644 --- a/docs/StringTools_8h.html +++ b/docs/StringTools_8h.html @@ -124,7 +124,7 @@ Namespaces diff --git a/docs/StringTools_8h_source.html b/docs/StringTools_8h_source.html index 44c5819..35eefb9 100644 --- a/docs/StringTools_8h_source.html +++ b/docs/StringTools_8h_source.html @@ -129,7 +129,7 @@ $(function() {
static std::string ToLower(const std::string &str)
Will make a string all lower-case.
diff --git a/docs/StringValue_8cpp.html b/docs/StringValue_8cpp.html index f442d41..22b218f 100644 --- a/docs/StringValue_8cpp.html +++ b/docs/StringValue_8cpp.html @@ -103,7 +103,7 @@ Include dependency graph for StringValue.cpp: diff --git a/docs/StringValue_8cpp_source.html b/docs/StringValue_8cpp_source.html index f34587c..1ad6a28 100644 --- a/docs/StringValue_8cpp_source.html +++ b/docs/StringValue_8cpp_source.html @@ -165,7 +165,7 @@ $(function() {
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/StringValue_8h.html b/docs/StringValue_8h.html index 0855911..fc39fae 100644 --- a/docs/StringValue_8h.html +++ b/docs/StringValue_8h.html @@ -123,7 +123,7 @@ Namespaces diff --git a/docs/StringValue_8h_source.html b/docs/StringValue_8h_source.html index 26f8ef5..4c06814 100644 --- a/docs/StringValue_8h_source.html +++ b/docs/StringValue_8h_source.html @@ -141,7 +141,7 @@ $(function() { diff --git a/docs/Value_8cpp.html b/docs/Value_8cpp.html index d9aaafb..5d2747e 100644 --- a/docs/Value_8cpp.html +++ b/docs/Value_8cpp.html @@ -97,7 +97,7 @@ Include dependency graph for Value.cpp: diff --git a/docs/Value_8cpp_source.html b/docs/Value_8cpp_source.html index 322d3f0..26a1802 100644 --- a/docs/Value_8cpp_source.html +++ b/docs/Value_8cpp_source.html @@ -102,7 +102,7 @@ $(function() { diff --git a/docs/Value_8h.html b/docs/Value_8h.html index 4cdd6ef..7971b8a 100644 --- a/docs/Value_8h.html +++ b/docs/Value_8h.html @@ -137,7 +137,7 @@ Namespaces diff --git a/docs/Value_8h_source.html b/docs/Value_8h_source.html index b74397a..aec4333 100644 --- a/docs/Value_8h_source.html +++ b/docs/Value_8h_source.html @@ -148,7 +148,7 @@ $(function() {
virtual long double GetFloat64() const =0
Will attempt to return the floating-point data (long double)
diff --git a/docs/VoidValue_8cpp.html b/docs/VoidValue_8cpp.html index b12744e..64e73e1 100644 --- a/docs/VoidValue_8cpp.html +++ b/docs/VoidValue_8cpp.html @@ -101,7 +101,7 @@ Include dependency graph for VoidValue.cpp: diff --git a/docs/VoidValue_8cpp_source.html b/docs/VoidValue_8cpp_source.html index a5ce89d..3baafc5 100644 --- a/docs/VoidValue_8cpp_source.html +++ b/docs/VoidValue_8cpp_source.html @@ -124,13 +124,14 @@ $(function() {
44 
45 std::string VoidValue::GetString() const
46 {
- +
47  return "";
48 }
49 
50 const std::vector<Value*>& VoidValue::GetList() const
51 {
- -
53 }
+
52  static const std::vector<Value*> empty;
+
53  return empty;
+
54 }
@@ -139,18 +140,18 @@ $(function() {
std::string GetAsOsString() const override
Will return a string suitable for an std::ostream;.
Definition: VoidValue.cpp:18
Abstract class for values.
Definition: Value.h:10
-
const std::vector< Value * > & GetList() const
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:50
+
const std::vector< Value * > & GetList() const
Returns an empty list.
Definition: VoidValue.cpp:50
int GetInt32() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:30
Value * Deepcopy() const override
Will return a deeopopy of this object.
Definition: VoidValue.cpp:13
-
std::string GetString() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:45
+
std::string GetString() const override
Returns an empty string.
Definition: VoidValue.cpp:45
DATA_TYPE
The different data types a paramater can be.
Definition: DataType.h:8
double GetFloat32() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:40
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/VoidValue_8h.html b/docs/VoidValue_8h.html index 5532ca1..e897569 100644 --- a/docs/VoidValue_8h.html +++ b/docs/VoidValue_8h.html @@ -122,7 +122,7 @@ Namespaces diff --git a/docs/VoidValue_8h_source.html b/docs/VoidValue_8h_source.html index 0a97261..0524c9f 100644 --- a/docs/VoidValue_8h_source.html +++ b/docs/VoidValue_8h_source.html @@ -107,10 +107,10 @@ $(function() {
27  //! Throws HazelnuppValueNotConvertibleException
28  double GetFloat32() const override;
29 
-
30  //! Throws HazelnuppValueNotConvertibleException
+
30  //! Returns an empty string
31  std::string GetString() const override;
32 
-
33  //! Throws HazelnuppValueNotConvertibleException
+
33  //! Returns an empty list
34  const std::vector<Value*>& GetList() const;
35  };
36 }
@@ -121,17 +121,17 @@ $(function() {
long double GetFloat64() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:35
std::string GetAsOsString() const override
Will return a string suitable for an std::ostream;.
Definition: VoidValue.cpp:18
Abstract class for values.
Definition: Value.h:10
-
const std::vector< Value * > & GetList() const
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:50
+
const std::vector< Value * > & GetList() const
Returns an empty list.
Definition: VoidValue.cpp:50
int GetInt32() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:30
Value * Deepcopy() const override
Will return a deeopopy of this object.
Definition: VoidValue.cpp:13
Specializations for void values.
Definition: VoidValue.h:8
-
std::string GetString() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:45
+
std::string GetString() const override
Returns an empty string.
Definition: VoidValue.cpp:45
double GetFloat32() const override
Throws HazelnuppValueNotConvertibleException.
Definition: VoidValue.cpp:40
diff --git a/docs/annotated.html b/docs/annotated.html index eae2984..c95c390 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -98,7 +98,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1FloatValue-members.html b/docs/classHazelnp_1_1FloatValue-members.html index 7cb7cfd..1381af9 100644 --- a/docs/classHazelnp_1_1FloatValue-members.html +++ b/docs/classHazelnp_1_1FloatValue-members.html @@ -101,7 +101,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1FloatValue.html b/docs/classHazelnp_1_1FloatValue.html index 6594f0a..96e1535 100644 --- a/docs/classHazelnp_1_1FloatValue.html +++ b/docs/classHazelnp_1_1FloatValue.html @@ -574,7 +574,7 @@ Additional Inherited Members
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/classHazelnp_1_1Hazelnupp-members.html b/docs/classHazelnp_1_1Hazelnupp-members.html index edc28ab..53ffd6b 100644 --- a/docs/classHazelnp_1_1Hazelnupp-members.html +++ b/docs/classHazelnp_1_1Hazelnupp-members.html @@ -81,33 +81,38 @@ $(function() {

This is the complete list of members for Hazelnp::Hazelnupp, including all inherited members.

- + + + - - - - - + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + +
ClearAbbreviations()Hazelnp::Hazelnupp
ClearAbbreviation(const std::string &abbrevation)Hazelnp::Hazelnupp
ClearAbbreviations()Hazelnp::Hazelnupp
ClearConstraint(const std::string &parameter)Hazelnp::Hazelnupp
ClearConstraints()Hazelnp::Hazelnupp
ClearDescription(const std::string &parameter)Hazelnp::Hazelnupp
GenerateDocumentation() constHazelnp::Hazelnupp
GetAbbreviation(const std::string &abbrev) constHazelnp::Hazelnupp
GetBriefDescription()Hazelnp::Hazelnupp
GetCatchHelp() constHazelnp::Hazelnupp
ClearDescription(const std::string &parameter)Hazelnp::Hazelnupp
ClearDescriptions()Hazelnp::Hazelnupp
GenerateDocumentation() constHazelnp::Hazelnupp
GetAbbreviation(const std::string &abbrev) constHazelnp::Hazelnupp
GetBriefDescription()Hazelnp::Hazelnupp
GetCatchHelp() constHazelnp::Hazelnupp
GetConstraint(const std::string &parameter) constHazelnp::Hazelnupp
GetCrashOnFail() constHazelnp::Hazelnupp
GetDescription(const std::string &parameter) constHazelnp::Hazelnupp
GetDescription(const std::string &parameter) constHazelnp::Hazelnupp
GetExecutableName() constHazelnp::Hazelnupp
HasAbbreviation(const std::string &abbrev) constHazelnp::Hazelnupp
HasParam(const std::string &key) constHazelnp::Hazelnupp
Hazelnupp()Hazelnp::Hazelnupp
Hazelnupp(const int argc, const char *const *argv)Hazelnp::Hazelnupp
operator[](const std::string &key) constHazelnp::Hazelnupp
Parse(const int argc, const char *const *argv)Hazelnp::Hazelnupp
RegisterAbbreviation(const std::string &abbrev, const std::string &target)Hazelnp::Hazelnupp
RegisterConstraints(const std::vector< ParamConstraint > &constraints)Hazelnp::Hazelnupp
RegisterDescription(const std::string &parameter, const std::string &description)Hazelnp::Hazelnupp
SetBriefDescription(const std::string &description)Hazelnp::Hazelnupp
SetCatchHelp(bool catchHelp)Hazelnp::Hazelnupp
SetCrashOnFail(bool crashOnFail)Hazelnp::Hazelnupp
~Hazelnupp()Hazelnp::Hazelnupp
HasDescription(const std::string &parameter) constHazelnp::Hazelnupp
HasParam(const std::string &key) constHazelnp::Hazelnupp
Hazelnupp()Hazelnp::Hazelnupp
Hazelnupp(const int argc, const char *const *argv)Hazelnp::Hazelnupp
operator[](const std::string &key) constHazelnp::Hazelnupp
Parse(const int argc, const char *const *argv)Hazelnp::Hazelnupp
RegisterAbbreviation(const std::string &abbrev, const std::string &target)Hazelnp::Hazelnupp
RegisterConstraint(const std::string &key, const ParamConstraint &constraint)Hazelnp::Hazelnupp
RegisterDescription(const std::string &parameter, const std::string &description)Hazelnp::Hazelnupp
SetBriefDescription(const std::string &description)Hazelnp::Hazelnupp
SetCatchHelp(bool catchHelp)Hazelnp::Hazelnupp
SetCrashOnFail(bool crashOnFail)Hazelnp::Hazelnupp
~Hazelnupp()Hazelnp::Hazelnupp
diff --git a/docs/classHazelnp_1_1Hazelnupp.html b/docs/classHazelnp_1_1Hazelnupp.html index dd0b41f..fffe5ba 100644 --- a/docs/classHazelnp_1_1Hazelnupp.html +++ b/docs/classHazelnp_1_1Hazelnupp.html @@ -111,17 +111,27 @@ Public Member Functions  Will register an abbreviation (like -f for –force) More...
  const std::string & GetAbbreviation (const std::string &abbrev) const - Will return the long form of an abbreviation (like –force for -f) More...
+ Will return the long form of an abbreviation (like –force for -f)
+ Returns "" if no match is found. More...
  bool HasAbbreviation (const std::string &abbrev) const  Will check wether or not an abbreviation is registered. More...
  +void ClearAbbreviation (const std::string &abbrevation) + Will delete the abbreviation for a given parameter. More...
+  void ClearAbbreviations ()  Will delete all abbreviations. More...
  -void RegisterConstraints (const std::vector< ParamConstraint > &constraints) - Will register parameter constraints. More...
-  +void RegisterConstraint (const std::string &key, const ParamConstraint &constraint) + Will register a constraint for a parameter. More...
+  +ParamConstraint GetConstraint (const std::string &parameter) const + Will return the constraint information for a specific parameter. More...
+  +void ClearConstraint (const std::string &parameter) + Will the constraint of a specific parameter. More...
+  void ClearConstraints ()  Will delete all constraints. More...
  @@ -146,12 +156,18 @@ Public Member Functions void RegisterDescription (const std::string &parameter, const std::string &description)  Willl register a short description for a parameter. More...
  -const std::string GetDescription (const std::string &parameter) const - Will return a short description for a parameter, if it exists. More...
-  -void ClearDescription (const std::string &parameter) - Will delete the description of a parameter if it exists. More...
-  +const std::string & GetDescription (const std::string &parameter) const + Will return a short description for a parameter, if it exists. More...
+  +bool HasDescription (const std::string &parameter) const + Returns whether or not a given parameter has a registered description. More...
+  +void ClearDescription (const std::string &parameter) + Will delete the description of a parameter if it exists. More...
+  +void ClearDescriptions () + Will delete all parameter descriptions. More...
+  std::string GenerateDocumentation () const  Will generate a text-based documentation suited to show the user, for example on –help. More...
  @@ -176,10 +192,10 @@ Public Member Functions
-

Definition at line 14 of file Hazelnupp.cpp.

-
15 {
-
16  return;
-
17 }
+

Definition at line 15 of file Hazelnupp.cpp.

+
16 {
+
17  return;
+
18 }
@@ -209,11 +225,11 @@ Public Member Functions
-

Definition at line 19 of file Hazelnupp.cpp.

-
20 {
-
21  Parse(argc, argv);
-
22  return;
-
23 }
+

Definition at line 20 of file Hazelnupp.cpp.

+
21 {
+
22  Parse(argc, argv);
+
23  return;
+
24 }
@@ -232,19 +248,47 @@ Public Member Functions
-

Definition at line 25 of file Hazelnupp.cpp.

-
26 {
-
27  for (auto& it : parameters)
-
28  delete it.second;
-
29 
-
30  parameters.clear();
-
31 
-
32  return;
-
33 }
+

Definition at line 26 of file Hazelnupp.cpp.

+
27 {
+
28  for (auto& it : parameters)
+
29  delete it.second;
+
30 
+
31  parameters.clear();
+
32 
+
33  return;
+
34 }

Member Function Documentation

+ +

◆ ClearAbbreviation()

+ +
+
+ + + + + + + + +
void Hazelnupp::ClearAbbreviation (const std::string & abbrevation)
+
+ +

Will delete the abbreviation for a given parameter.

+


+ IMPORTANT: This parameter is the abbreviation! Not the long form!

+ +

Definition at line 546 of file Hazelnupp.cpp.

+
547 {
+
548  parameterAbreviations.erase(abbrevation);
+
549  return;
+
550 }
+
+
+

◆ ClearAbbreviations()

@@ -262,11 +306,37 @@ Public Member Functions

Will delete all abbreviations.

-

Definition at line 515 of file Hazelnupp.cpp.

-
516 {
-
517  abbreviations.clear();
-
518  return;
-
519 }
+

Definition at line 552 of file Hazelnupp.cpp.

+
553 {
+
554  parameterAbreviations.clear();
+
555  return;
+
556 }
+
+
+ + +

◆ ClearConstraint()

+ +
+
+ + + + + + + + +
void Hazelnupp::ClearConstraint (const std::string & parameter)
+
+ +

Will the constraint of a specific parameter.

+ +

Definition at line 507 of file Hazelnupp.cpp.

+
508 {
+
509  parameterConstraints.erase(parameter);
+
510  return;
+
511 }
@@ -287,22 +357,22 @@ Public Member Functions

Will delete all constraints.

-

Definition at line 542 of file Hazelnupp.cpp.

-
543 {
-
544  constraints.clear();
-
545  return;
-
546 }
+

Definition at line 565 of file Hazelnupp.cpp.

+
566 {
+
567  parameterConstraints.clear();
+
568  return;
+
569 }
- -

◆ ClearDescription()

+ +

◆ ClearDescription()

- + @@ -313,12 +383,37 @@ Public Member Functions

Will delete the description of a parameter if it exists.

-

Definition at line 335 of file Hazelnupp.cpp.

-
336 {
-
337  // This will just do nothing if the entry does not exist
-
338  parameterDescriptions.erase(parameter);
-
339  return;
-
340 }
+

Definition at line 346 of file Hazelnupp.cpp.

+
347 {
+
348  // This will just do nothing if the entry does not exist
+
349  parameterDescriptions.erase(parameter);
+
350  return;
+
351 }
+
+
+ + +

◆ ClearDescriptions()

+ +
+
+
void Hazelnp::Hazelnupp::ClearDescription void Hazelnupp::ClearDescription ( const std::string &  parameter)
+ + + + + + +
void Hazelnp::Hazelnupp::ClearDescriptions ()
+
+ +

Will delete all parameter descriptions.

+ +

Definition at line 353 of file Hazelnupp.cpp.

+
354 {
+
355  parameterDescriptions.clear();
+
356  return;
+
357 }
@@ -339,114 +434,114 @@ Public Member Functions

Will generate a text-based documentation suited to show the user, for example on –help.

-

Definition at line 342 of file Hazelnupp.cpp.

-
343 {
-
344  std::stringstream ss;
-
345 
-
346  // Add brief, if available
-
347  if (briefDescription.length() > 0)
-
348  ss << briefDescription << std::endl;
-
349 
-
350  // Collect parameter information
-
351  struct ParamDocEntry
-
352  {
-
353  std::string abbreviation;
-
354  std::string description;
-
355  std::string type;
-
356  bool required = false;
-
357  bool typeIsForced = false;
-
358  std::string defaultVal;
-
359  };
-
360  std::unordered_map<std::string, ParamDocEntry> paramInfos;
-
361 
-
362  // Collect descriptions
-
363  for (const auto& it : parameterDescriptions)
-
364  {
-
365  // Do we already have that param in the paramInfo set?
-
366  if (paramInfos.find(it.first) == paramInfos.end())
-
367  // No? Create it.
-
368  paramInfos[it.first] = ParamDocEntry();
-
369 
-
370  paramInfos[it.first].description = it.second;
-
371  }
-
372 
-
373  // Collect abbreviations
-
374  // first value is abbreviation, second is long form
-
375  for (const auto& it : abbreviations)
-
376  {
-
377  // Do we already have that param in the paramInfo set?
-
378  if (paramInfos.find(it.second) == paramInfos.end())
-
379  // No? Create it.
-
380  paramInfos[it.second] = ParamDocEntry();
-
381 
-
382  paramInfos[it.second].abbreviation = it.first;
-
383  }
-
384 
-
385  // Collect constraints
-
386  for (const auto& it : constraints)
-
387  {
-
388  // Do we already have that param in the paramInfo set?
-
389  if (paramInfos.find(it.first) == paramInfos.end())
-
390  // No? Create it.
-
391  paramInfos[it.first] = ParamDocEntry();
-
392 
-
393  ParamDocEntry& cached = paramInfos[it.first];
-
394  cached.required = it.second.required;
-
395  cached.typeIsForced = it.second.constrainType;
-
396  cached.type = DataTypeToString(it.second.wantedType);
-
397 
-
398  std::stringstream defaultValueSs;
-
399  for (const std::string& s : it.second.defaultValue)
-
400  {
-
401  defaultValueSs << '\'' << s << '\'';
-
402 
-
403  // Add a space if we are not at the last entry
-
404  if ((void*)&s != (void*)&it.second.defaultValue.back())
-
405  defaultValueSs << " ";
-
406  }
-
407  cached.defaultVal = defaultValueSs.str();
-
408  }
+

Definition at line 359 of file Hazelnupp.cpp.

+
360 {
+
361  std::stringstream ss;
+
362 
+
363  // Add brief, if available
+
364  if (briefDescription.length() > 0)
+
365  ss << briefDescription << std::endl;
+
366 
+
367  // Collect parameter information
+
368  struct ParamDocEntry
+
369  {
+
370  std::string abbreviation;
+
371  std::string description;
+
372  std::string type;
+
373  bool required = false;
+
374  bool typeIsForced = false;
+
375  std::string defaultVal;
+
376  };
+
377  std::unordered_map<std::string, ParamDocEntry> paramInfos;
+
378 
+
379  // Collect descriptions
+
380  for (const auto& it : parameterDescriptions)
+
381  {
+
382  // Do we already have that param in the paramInfo set?
+
383  if (paramInfos.find(it.first) == paramInfos.end())
+
384  // No? Create it.
+
385  paramInfos[it.first] = ParamDocEntry();
+
386 
+
387  paramInfos[it.first].description = it.second;
+
388  }
+
389 
+
390  // Collect abbreviations
+
391  // first value is abbreviation, second is long form
+
392  for (const auto& it : parameterAbreviations)
+
393  {
+
394  // Do we already have that param in the paramInfo set?
+
395  if (paramInfos.find(it.second) == paramInfos.end())
+
396  // No? Create it.
+
397  paramInfos[it.second] = ParamDocEntry();
+
398 
+
399  paramInfos[it.second].abbreviation = it.first;
+
400  }
+
401 
+
402  // Collect constraints
+
403  for (const auto& it : parameterConstraints)
+
404  {
+
405  // Do we already have that param in the paramInfo set?
+
406  if (paramInfos.find(it.first) == paramInfos.end())
+
407  // No? Create it.
+
408  paramInfos[it.first] = ParamDocEntry();
409 
-
410  // Now generate the documentatino body
-
411  if (paramInfos.size() > 0)
-
412  {
-
413  ss << std::endl
-
414  << "==== AVAILABLE PARAMETERS ===="
-
415  << std::endl << std::endl;
-
416 
-
417  for (const auto& it : paramInfos)
-
418  {
-
419  const ParamDocEntry& pde = it.second;
-
420 
-
421  // Put name
-
422  ss << it.first << " ";
-
423 
-
424  // Put abbreviation
-
425  if (pde.abbreviation.length() > 0)
-
426  ss << pde.abbreviation << " ";
-
427 
-
428  // Put type
-
429  if (pde.typeIsForced)
-
430  ss << pde.type << " ";
-
431 
-
432  // Put default value
-
433  if (pde.defaultVal.length() > 0)
-
434  ss << "default=[" << pde.defaultVal << "] ";
-
435 
-
436  // Put required tag, but only if no default value
-
437  if ((pde.required) && (pde.defaultVal.length() == 0))
-
438  ss << "[[REQUIRED]] ";
-
439 
-
440  // Put brief description
-
441  if (pde.description.length() > 0)
-
442  ss << pde.description;
-
443 
-
444  ss << std::endl << std::endl;
-
445  }
-
446  }
-
447 
-
448  return ss.str();
-
449 }
+
410  ParamDocEntry& cached = paramInfos[it.first];
+
411  cached.required = it.second.required;
+
412  cached.typeIsForced = it.second.constrainType;
+
413  cached.type = DataTypeToString(it.second.wantedType);
+
414 
+
415  std::stringstream defaultValueSs;
+
416  for (const std::string& s : it.second.defaultValue)
+
417  {
+
418  defaultValueSs << '\'' << s << '\'';
+
419 
+
420  // Add a space if we are not at the last entry
+
421  if ((void*)&s != (void*)&it.second.defaultValue.back())
+
422  defaultValueSs << " ";
+
423  }
+
424  cached.defaultVal = defaultValueSs.str();
+
425  }
+
426 
+
427  // Now generate the documentatino body
+
428  if (paramInfos.size() > 0)
+
429  {
+
430  ss << std::endl
+
431  << "==== AVAILABLE PARAMETERS ===="
+
432  << std::endl << std::endl;
+
433 
+
434  for (const auto& it : paramInfos)
+
435  {
+
436  const ParamDocEntry& pde = it.second;
+
437 
+
438  // Put name
+
439  ss << it.first << " ";
+
440 
+
441  // Put abbreviation
+
442  if (pde.abbreviation.length() > 0)
+
443  ss << pde.abbreviation << " ";
+
444 
+
445  // Put type
+
446  if (pde.typeIsForced)
+
447  ss << pde.type << " ";
+
448 
+
449  // Put default value
+
450  if (pde.defaultVal.length() > 0)
+
451  ss << "default=[" << pde.defaultVal << "] ";
+
452 
+
453  // Put required tag, but only if no default value
+
454  if ((pde.required) && (pde.defaultVal.length() == 0))
+
455  ss << "[[REQUIRED]] ";
+
456 
+
457  // Put brief description
+
458  if (pde.description.length() > 0)
+
459  ss << pde.description;
+
460 
+
461  ss << std::endl << std::endl;
+
462  }
+
463  }
+
464 
+
465  return ss.str();
+
466 }
@@ -466,12 +561,16 @@ Public Member Functions
-

Will return the long form of an abbreviation (like –force for -f)

+

Will return the long form of an abbreviation (like –force for -f)
+ Returns "" if no match is found.

-

Definition at line 505 of file Hazelnupp.cpp.

-
506 {
-
507  return abbreviations.find(abbrev)->second;
-
508 }
+

Definition at line 533 of file Hazelnupp.cpp.

+
534 {
+
535  if (!HasAbbreviation(abbrev))
+ +
537 
+
538  return parameterAbreviations.find(abbrev)->second;
+
539 }
@@ -492,10 +591,10 @@ Public Member Functions

Returns the brief description of the application to be automatically added to the documentation.

-

Definition at line 312 of file Hazelnupp.cpp.

-
313 {
-
314  return briefDescription;
-
315 }
+

Definition at line 319 of file Hazelnupp.cpp.

+
320 {
+
321  return briefDescription;
+
322 }
@@ -516,10 +615,35 @@ Public Member Functions

Retruns whether the Hazelnupp should automatically catch the –help parameter, print the parameter documentation to stdout, and exit or not.

-

Definition at line 301 of file Hazelnupp.cpp.

-
302 {
-
303  return catchHelp;
-
304 }
+

Definition at line 308 of file Hazelnupp.cpp.

+
309 {
+
310  return catchHelp;
+
311 }
+
+
+ + +

◆ GetConstraint()

+ +
+
+ + + + + + + + +
ParamConstraint Hazelnupp::GetConstraint (const std::string & parameter) const
+
+ +

Will return the constraint information for a specific parameter.

+ +

Definition at line 502 of file Hazelnupp.cpp.

+
503 {
+
504  return parameterConstraints.find(parameter)->second;
+
505 }
@@ -540,21 +664,21 @@ Public Member Functions

Gets whether the application crashes on an exception whilst parsing, and prints to stderr.

-

Definition at line 290 of file Hazelnupp.cpp.

-
291 {
-
292  return crashOnFail;
-
293 }
+

Definition at line 297 of file Hazelnupp.cpp.

+
298 {
+
299  return crashOnFail;
+
300 }
- -

◆ GetDescription()

+ +

◆ GetDescription()

- + @@ -567,17 +691,16 @@ Public Member Functions


Empty string if it does not exist.

-

Definition at line 323 of file Hazelnupp.cpp.

-
324 {
-
325  // Do we already have a description for this parameter?
-
326  const auto par = parameterDescriptions.find(parameter);
-
327  if (par == parameterDescriptions.end())
-
328  // No? Then return ""
-
329  return "";
-
330 
-
331  // We do? Then return it
-
332  return par->second;
-
333 }
+

Definition at line 330 of file Hazelnupp.cpp.

+
331 {
+
332  // Do we already have a description for this parameter?
+
333  if (!HasDescription(parameter))
+
334  // No? Then return ""
+ +
336 
+
337  // We do? Then return it
+
338  return parameterDescriptions.find(parameter)->second;
+
339 }
@@ -598,10 +721,10 @@ Public Member Functions

Will return argv[0], the name of the executable.

-

Definition at line 485 of file Hazelnupp.cpp.

-
486 {
-
487  return executableName;
-
488 }
+

Definition at line 513 of file Hazelnupp.cpp.

+
514 {
+
515  return executableName;
+
516 }
@@ -623,10 +746,35 @@ Public Member Functions

Will check wether or not an abbreviation is registered.

-

Definition at line 510 of file Hazelnupp.cpp.

-
511 {
-
512  return abbreviations.find(abbrev) != abbreviations.end();
-
513 }
+

Definition at line 541 of file Hazelnupp.cpp.

+
542 {
+
543  return parameterAbreviations.find(abbrev) != parameterAbreviations.end();
+
544 }
+
+
+ + +

◆ HasDescription()

+ +
+
+
const std::string Hazelnp::Hazelnupp::GetDescription const std::string & Hazelnp::Hazelnupp::GetDescription ( const std::string &  parameter)
+ + + + + + + +
bool Hazelnupp::HasDescription (const std::string & parameter) const
+
+ +

Returns whether or not a given parameter has a registered description.

+ +

Definition at line 341 of file Hazelnupp.cpp.

+
342 {
+
343  return parameterDescriptions.find(parameter) != parameterDescriptions.end();
+
344 }
@@ -648,10 +796,10 @@ Public Member Functions

Will check wether a parameter exists given a key, or not.

-

Definition at line 164 of file Hazelnupp.cpp.

-
165 {
-
166  return parameters.find(key) != parameters.end();
-
167 }
+

Definition at line 165 of file Hazelnupp.cpp.

+
166 {
+
167  return parameters.find(key) != parameters.end();
+
168 }
@@ -673,14 +821,14 @@ Public Member Functions

Will return the value given a key.

-

Definition at line 490 of file Hazelnupp.cpp.

-
491 {
-
492  // Throw exception if param is unknown
-
493  if (!HasParam(key))
- -
495 
-
496  return *parameters.find(key)->second->GetValue();
-
497 }
+

Definition at line 518 of file Hazelnupp.cpp.

+
519 {
+
520  // Throw exception if param is unknown
+
521  if (!HasParam(key))
+ +
523 
+
524  return *parameters.find(key)->second->GetValue();
+
525 }
@@ -712,70 +860,70 @@ Public Member Functions

Will parse command line arguments.

-

Definition at line 35 of file Hazelnupp.cpp.

-
36 {
-
37  try
-
38  {
-
39  // Populate raw arguments
-
40  PopulateRawArgs(argc, argv);
-
41 
-
42  // Expand abbreviations
-
43  ExpandAbbreviations();
-
44 
-
45  executableName = std::string(rawArgs[0]);
-
46 
-
47  std::size_t i = 1;
-
48  while (i < rawArgs.size())
-
49  {
-
50  if ((rawArgs[i].length() > 2) && (rawArgs[i].substr(0, 2) == "--"))
-
51  {
-
52  Parameter* param = nullptr;
-
53  i = ParseNextParameter(i, param);
-
54 
-
55  parameters.insert(std::pair<std::string, Parameter*>(param->Key(), param));
-
56  }
-
57  else
-
58  i++;
-
59  }
-
60 
-
61  // Apply constraints such as default values, and required parameters.
-
62  // Types have already been enforced.
-
63  // Dont apply constraints when we are just printind the param docs
-
64  if ((!catchHelp) || (!HasParam("--help")))
-
65  ApplyConstraints();
-
66  }
-
67  catch (const HazelnuppConstraintTypeMissmatch& hctm)
-
68  {
-
69  if (crashOnFail)
-
70  {
-
71  std::cout << GenerateDocumentation() << std::endl;
-
72  std::cerr << "Fatal error: Command-line parameter value-type mismatch at \"" << hctm.What() << "\"!";
-
73  quick_exit(-1009);
-
74  }
-
75  else
-
76  throw hctm; // yeet
-
77  }
-
78  catch (const HazelnuppConstraintMissingValue& hctm)
-
79  {
-
80  if (crashOnFail)
-
81  {
-
82  std::cout << GenerateDocumentation() << std::endl;
-
83  std::cerr << "Fatal error: Missing required command-line parameter \"" << hctm.What() << "\"!";
-
84  quick_exit(-1010);
-
85  }
-
86  else
-
87  throw hctm; // yeet
-
88  }
-
89 
-
90  // Catch --help parameter
-
91  if ((catchHelp) && (HasParam("--help")))
-
92  {
-
93  std::cout << GenerateDocumentation() << std::endl;
-
94  quick_exit(0);
-
95  }
-
96 
-
97  return;
-
98 }
+

Definition at line 36 of file Hazelnupp.cpp.

+
37 {
+
38  try
+
39  {
+
40  // Populate raw arguments
+
41  PopulateRawArgs(argc, argv);
+
42 
+
43  // Expand abbreviations
+
44  ExpandAbbreviations();
+
45 
+
46  executableName = std::string(rawArgs[0]);
+
47 
+
48  std::size_t i = 1;
+
49  while (i < rawArgs.size())
+
50  {
+
51  if ((rawArgs[i].length() > 2) && (rawArgs[i].substr(0, 2) == "--"))
+
52  {
+
53  Parameter* param = nullptr;
+
54  i = ParseNextParameter(i, param);
+
55 
+
56  parameters.insert(std::pair<std::string, Parameter*>(param->Key(), param));
+
57  }
+
58  else
+
59  i++;
+
60  }
+
61 
+
62  // Apply constraints such as default values, and required parameters.
+
63  // Types have already been enforced.
+
64  // Dont apply constraints when we are just printind the param docs
+
65  if ((!catchHelp) || (!HasParam("--help")))
+
66  ApplyConstraints();
+
67  }
+
68  catch (const HazelnuppConstraintTypeMissmatch& hctm)
+
69  {
+
70  if (crashOnFail)
+
71  {
+
72  std::cout << GenerateDocumentation() << std::endl;
+
73  std::cerr << "Fatal error: Command-line parameter value-type mismatch at \"" << hctm.What() << "\"!";
+
74  quick_exit(-1009);
+
75  }
+
76  else
+
77  throw hctm; // yeet
+
78  }
+
79  catch (const HazelnuppConstraintMissingValue& hctm)
+
80  {
+
81  if (crashOnFail)
+
82  {
+
83  std::cout << GenerateDocumentation() << std::endl;
+
84  std::cerr << "Fatal error: Missing required command-line parameter \"" << hctm.What() << "\"!";
+
85  quick_exit(-1010);
+
86  }
+
87  else
+
88  throw hctm; // yeet
+
89  }
+
90 
+
91  // Catch --help parameter
+
92  if ((catchHelp) && (HasParam("--help")))
+
93  {
+
94  std::cout << GenerateDocumentation() << std::endl;
+
95  quick_exit(0);
+
96  }
+
97 
+
98  return;
+
99 }
@@ -807,52 +955,49 @@ Public Member Functions

Will register an abbreviation (like -f for –force)

-

Definition at line 499 of file Hazelnupp.cpp.

-
500 {
-
501  abbreviations.insert(std::pair<std::string, std::string>(abbrev, target));
-
502  return;
-
503 }
+

Definition at line 527 of file Hazelnupp.cpp.

+
528 {
+
529  parameterAbreviations.insert(std::pair<std::string, std::string>(abbrev, target));
+
530  return;
+
531 }
- -

◆ RegisterConstraints()

+ +

◆ RegisterConstraint()

- + - - + + + + + + + + + + + +
void Hazelnupp::RegisterConstraints void Hazelnupp::RegisterConstraint (const std::vector< ParamConstraint > & constraints)const std::string & key,
const ParamConstraintconstraint 
)
-

Will register parameter constraints.

+

Will register a constraint for a parameter.

+

IMPORTANT: Any parameter can only have ONE constraint. Applying a new one will overwrite the old one! Construct the ParamConstraint struct yourself to combine Require and TypeSafety! You can also use the ParamConstraint constructor!

-

Definition at line 521 of file Hazelnupp.cpp.

-
522 {
-
523  for (const ParamConstraint& pc : constraints)
-
524  {
-
525  // Does this constraint already exist?
-
526  const auto constraint = this->constraints.find(pc.key);
-
527  // If yes, replace it.
-
528  if (constraint != this->constraints.end())
-
529  constraint->second = pc;
-
530 
-
531  // Else, create a new pair
-
532  else
-
533  this->constraints.insert(std::pair<std::string, ParamConstraint>(
-
534  pc.key,
-
535  pc
-
536  ));
-
537  }
-
538 
-
539  return;
-
540 }
+

Definition at line 558 of file Hazelnupp.cpp.

+
559 {
+
560  // Magic syntax, wooo
+
561  (parameterConstraints[key] = constraint).key = key;
+
562  return;
+
563 }
@@ -886,11 +1031,11 @@ Public Member Functions


Will overwrite existing descriptions for that parameter.

-

Definition at line 317 of file Hazelnupp.cpp.

-
318 {
-
319  parameterDescriptions[parameter] = description;
-
320  return;
-
321 }
+

Definition at line 324 of file Hazelnupp.cpp.

+
325 {
+
326  parameterDescriptions[parameter] = description;
+
327  return;
+
328 }
@@ -912,11 +1057,11 @@ Public Member Functions

Sets a brief description of the application to be automatically added to the documentation.

-

Definition at line 306 of file Hazelnupp.cpp.

-
307 {
-
308  briefDescription = description;
-
309  return;
-
310 }
+

Definition at line 313 of file Hazelnupp.cpp.

+
314 {
+
315  briefDescription = description;
+
316  return;
+
317 }
@@ -938,11 +1083,11 @@ Public Member Functions

Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter documentation to stdout, and exit or not.

-

Definition at line 295 of file Hazelnupp.cpp.

-
296 {
-
297  this->catchHelp = catchHelp;
-
298  return;
-
299 }
+

Definition at line 302 of file Hazelnupp.cpp.

+
303 {
+
304  this->catchHelp = catchHelp;
+
305  return;
+
306 }
@@ -964,11 +1109,11 @@ Public Member Functions

Sets whether to crash the application, and print to stderr, when an exception is raised whilst parsing, or not.

-

Definition at line 548 of file Hazelnupp.cpp.

-
549 {
-
550  this->crashOnFail = crashOnFail;
-
551  return;
-
552 }
+

Definition at line 571 of file Hazelnupp.cpp.

+
572 {
+
573  this->crashOnFail = crashOnFail;
+
574  return;
+
575 }
@@ -978,19 +1123,21 @@ Public Member Functions
Gets thrown when an non-existent key gets dereferenced.
-
std::string GenerateDocumentation() const
Will generate a text-based documentation suited to show the user, for example on –help.
Definition: Hazelnupp.cpp:342
+
std::string GenerateDocumentation() const
Will generate a text-based documentation suited to show the user, for example on –help.
Definition: Hazelnupp.cpp:359
const std::string & What() const
Will return an error message.
+
bool HasDescription(const std::string &parameter) const
Returns whether or not a given parameter has a registered description.
Definition: Hazelnupp.cpp:341
- -
bool HasParam(const std::string &key) const
Will check wether a parameter exists given a key, or not.
Definition: Hazelnupp.cpp:164
-
void Parse(const int argc, const char *const *argv)
Will parse command line arguments.
Definition: Hazelnupp.cpp:35
+
static const std::string g_emptyString
The only purpose of this is to provide the ability to return an empty string as an error for std::str...
Definition: Placeholders.h:9
+
bool HasParam(const std::string &key) const
Will check wether a parameter exists given a key, or not.
Definition: Hazelnupp.cpp:165
+
void Parse(const int argc, const char *const *argv)
Will parse command line arguments.
Definition: Hazelnupp.cpp:36
const std::string & Key() const
Will return the key of this parameter.
Definition: Parameter.cpp:21
Gets thrown when a parameter constrained to be required is not provided, and has no default value set...
Gets thrown when a parameter is of a type that does not match the required type, and is not convertib...
+
bool HasAbbreviation(const std::string &abbrev) const
Will check wether or not an abbreviation is registered.
Definition: Hazelnupp.cpp:541
static std::string DataTypeToString(DATA_TYPE type)
Definition: DataType.h:17
diff --git a/docs/classHazelnp_1_1HazelnuppConstraintException-members.html b/docs/classHazelnp_1_1HazelnuppConstraintException-members.html index e54a052..d1bf3fd 100644 --- a/docs/classHazelnp_1_1HazelnuppConstraintException-members.html +++ b/docs/classHazelnp_1_1HazelnuppConstraintException-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1HazelnuppConstraintException.html b/docs/classHazelnp_1_1HazelnuppConstraintException.html index 6b6deb3..6af550f 100644 --- a/docs/classHazelnp_1_1HazelnuppConstraintException.html +++ b/docs/classHazelnp_1_1HazelnuppConstraintException.html @@ -201,7 +201,7 @@ Additional Inherited Members diff --git a/docs/classHazelnp_1_1HazelnuppConstraintMissingValue-members.html b/docs/classHazelnp_1_1HazelnuppConstraintMissingValue-members.html index 6e54ca0..7763ade 100644 --- a/docs/classHazelnp_1_1HazelnuppConstraintMissingValue-members.html +++ b/docs/classHazelnp_1_1HazelnuppConstraintMissingValue-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1HazelnuppConstraintMissingValue.html b/docs/classHazelnp_1_1HazelnuppConstraintMissingValue.html index e74cc68..c95d5a3 100644 --- a/docs/classHazelnp_1_1HazelnuppConstraintMissingValue.html +++ b/docs/classHazelnp_1_1HazelnuppConstraintMissingValue.html @@ -206,7 +206,7 @@ Additional Inherited Members diff --git a/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch-members.html b/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch-members.html index 8bfecaa..ddec7ba 100644 --- a/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch-members.html +++ b/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html b/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html index e50a21e..a316914 100644 --- a/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html +++ b/docs/classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html @@ -206,7 +206,7 @@ Additional Inherited Members diff --git a/docs/classHazelnp_1_1HazelnuppException-members.html b/docs/classHazelnp_1_1HazelnuppException-members.html index 07caab6..271037a 100644 --- a/docs/classHazelnp_1_1HazelnuppException-members.html +++ b/docs/classHazelnp_1_1HazelnuppException-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1HazelnuppException.html b/docs/classHazelnp_1_1HazelnuppException.html index 0f28990..7c2a367 100644 --- a/docs/classHazelnp_1_1HazelnuppException.html +++ b/docs/classHazelnp_1_1HazelnuppException.html @@ -255,7 +255,7 @@ Protected Attributes diff --git a/docs/classHazelnp_1_1HazelnuppInvalidKeyException-members.html b/docs/classHazelnp_1_1HazelnuppInvalidKeyException-members.html index 247995a..7437f3a 100644 --- a/docs/classHazelnp_1_1HazelnuppInvalidKeyException-members.html +++ b/docs/classHazelnp_1_1HazelnuppInvalidKeyException-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1HazelnuppInvalidKeyException.html b/docs/classHazelnp_1_1HazelnuppInvalidKeyException.html index 2347d7b..89d8798 100644 --- a/docs/classHazelnp_1_1HazelnuppInvalidKeyException.html +++ b/docs/classHazelnp_1_1HazelnuppInvalidKeyException.html @@ -199,7 +199,7 @@ Additional Inherited Members diff --git a/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException-members.html b/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException-members.html index c3eca2f..0de3d04 100644 --- a/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException-members.html +++ b/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException.html b/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException.html index 7e21bbc..05fafde 100644 --- a/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException.html +++ b/docs/classHazelnp_1_1HazelnuppValueNotConvertibleException.html @@ -199,7 +199,7 @@ Additional Inherited Members diff --git a/docs/classHazelnp_1_1IntValue-members.html b/docs/classHazelnp_1_1IntValue-members.html index 6a13752..b0e5b1b 100644 --- a/docs/classHazelnp_1_1IntValue-members.html +++ b/docs/classHazelnp_1_1IntValue-members.html @@ -101,7 +101,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1IntValue.html b/docs/classHazelnp_1_1IntValue.html index cce11bc..d45570a 100644 --- a/docs/classHazelnp_1_1IntValue.html +++ b/docs/classHazelnp_1_1IntValue.html @@ -574,7 +574,7 @@ Additional Inherited Members
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/classHazelnp_1_1ListValue-members.html b/docs/classHazelnp_1_1ListValue-members.html index cd3bead..6fe680e 100644 --- a/docs/classHazelnp_1_1ListValue-members.html +++ b/docs/classHazelnp_1_1ListValue-members.html @@ -101,7 +101,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1ListValue.html b/docs/classHazelnp_1_1ListValue.html index 23fdb23..51f381b 100644 --- a/docs/classHazelnp_1_1ListValue.html +++ b/docs/classHazelnp_1_1ListValue.html @@ -601,7 +601,7 @@ Additional Inherited Members
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/classHazelnp_1_1Parameter-members.html b/docs/classHazelnp_1_1Parameter-members.html index a621dba..cd05e8c 100644 --- a/docs/classHazelnp_1_1Parameter-members.html +++ b/docs/classHazelnp_1_1Parameter-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1Parameter.html b/docs/classHazelnp_1_1Parameter.html index 1e77744..7ef6cba 100644 --- a/docs/classHazelnp_1_1Parameter.html +++ b/docs/classHazelnp_1_1Parameter.html @@ -275,7 +275,7 @@ Friends
virtual Value * Deepcopy() const =0
Will return a deeopopy of this object.
diff --git a/docs/classHazelnp_1_1StringTools-members.html b/docs/classHazelnp_1_1StringTools-members.html index ed424a1..211ad88 100644 --- a/docs/classHazelnp_1_1StringTools-members.html +++ b/docs/classHazelnp_1_1StringTools-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1StringTools.html b/docs/classHazelnp_1_1StringTools.html index 7a68886..da0f5f0 100644 --- a/docs/classHazelnp_1_1StringTools.html +++ b/docs/classHazelnp_1_1StringTools.html @@ -626,7 +626,7 @@ Static Public Member Functions
static std::vector< std::string > SplitString(const std::string &str, const char delimiter)
Will split a string by a delimiter char. The delimiter will be excluded!
diff --git a/docs/classHazelnp_1_1StringValue-members.html b/docs/classHazelnp_1_1StringValue-members.html index 755fd88..b109294 100644 --- a/docs/classHazelnp_1_1StringValue-members.html +++ b/docs/classHazelnp_1_1StringValue-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1StringValue.html b/docs/classHazelnp_1_1StringValue.html index 6729cfd..6146273 100644 --- a/docs/classHazelnp_1_1StringValue.html +++ b/docs/classHazelnp_1_1StringValue.html @@ -547,7 +547,7 @@ Additional Inherited Members
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/classHazelnp_1_1Value-members.html b/docs/classHazelnp_1_1Value-members.html index af32bb8..2c98758 100644 --- a/docs/classHazelnp_1_1Value-members.html +++ b/docs/classHazelnp_1_1Value-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1Value.html b/docs/classHazelnp_1_1Value.html index 385924e..dded20d 100644 --- a/docs/classHazelnp_1_1Value.html +++ b/docs/classHazelnp_1_1Value.html @@ -548,7 +548,7 @@ Friends
DATA_TYPE type
Definition: Value.h:48
diff --git a/docs/classHazelnp_1_1VoidValue-members.html b/docs/classHazelnp_1_1VoidValue-members.html index 5884973..f82bafc 100644 --- a/docs/classHazelnp_1_1VoidValue-members.html +++ b/docs/classHazelnp_1_1VoidValue-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/docs/classHazelnp_1_1VoidValue.html b/docs/classHazelnp_1_1VoidValue.html index 1e28001..984c9d4 100644 --- a/docs/classHazelnp_1_1VoidValue.html +++ b/docs/classHazelnp_1_1VoidValue.html @@ -130,10 +130,10 @@ Public Member Functions  Throws HazelnuppValueNotConvertibleException. More...
  std::string GetString () const override - Throws HazelnuppValueNotConvertibleException. More...
+ Returns an empty string. More...
  const std::vector< Value * > & GetList () const - Throws HazelnuppValueNotConvertibleException. More...
+ Returns an empty list. More...
  - Public Member Functions inherited from Hazelnp::Value virtual ~Value () @@ -437,14 +437,15 @@ Additional Inherited Members
-

Throws HazelnuppValueNotConvertibleException.

+

Returns an empty list.

Implements Hazelnp::Value.

Definition at line 50 of file VoidValue.cpp.

51 {
- -
53 }
+
52  static const std::vector<Value*> empty;
+
53  return empty;
+
54 }
@@ -471,13 +472,13 @@ Additional Inherited Members
-

Throws HazelnuppValueNotConvertibleException.

+

Returns an empty string.

Implements Hazelnp::Value.

Definition at line 45 of file VoidValue.cpp.

46 {
- +
47  return "";
48 }
@@ -493,7 +494,7 @@ Additional Inherited Members
Gets thrown when an attempt is made to retrieve the wrong data type from a value, when the value not ...
diff --git a/docs/classes.html b/docs/classes.html index 13ba6d2..96ec295 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -119,7 +119,7 @@ $(function() { diff --git a/docs/dir_0202e1e26df2e040f4dc3d434eecf04c.html b/docs/dir_0202e1e26df2e040f4dc3d434eecf04c.html index d3225f3..e7ddd04 100644 --- a/docs/dir_0202e1e26df2e040f4dc3d434eecf04c.html +++ b/docs/dir_0202e1e26df2e040f4dc3d434eecf04c.html @@ -116,6 +116,8 @@ Files   file  Parameter.h [code]   +file  Placeholders.h [code] +  file  StringTools.cpp [code]   file  StringTools.h [code] @@ -136,7 +138,7 @@ Files diff --git a/docs/dir_0cc5f59b28c403d42cc56800132eb975.html b/docs/dir_0cc5f59b28c403d42cc56800132eb975.html index ec16b92..194e9ed 100644 --- a/docs/dir_0cc5f59b28c403d42cc56800132eb975.html +++ b/docs/dir_0cc5f59b28c403d42cc56800132eb975.html @@ -81,7 +81,7 @@ $(function() { diff --git a/docs/dir_1148ebc2b25b55095aebf6f4cbb6efca.html b/docs/dir_1148ebc2b25b55095aebf6f4cbb6efca.html index 6e5d654..524a636 100644 --- a/docs/dir_1148ebc2b25b55095aebf6f4cbb6efca.html +++ b/docs/dir_1148ebc2b25b55095aebf6f4cbb6efca.html @@ -81,7 +81,7 @@ $(function() { diff --git a/docs/dir_a8cffda729361e9d9637effa362fcea9.html b/docs/dir_a8cffda729361e9d9637effa362fcea9.html index d93335d..50f88fe 100644 --- a/docs/dir_a8cffda729361e9d9637effa362fcea9.html +++ b/docs/dir_a8cffda729361e9d9637effa362fcea9.html @@ -81,7 +81,7 @@ $(function() { diff --git a/docs/files.html b/docs/files.html index cf3a3e9..9cc6767 100644 --- a/docs/files.html +++ b/docs/files.html @@ -94,20 +94,21 @@ $(function() {  ParamConstraint.h  Parameter.cpp  Parameter.h - StringTools.cpp - StringTools.h - StringValue.cpp - StringValue.h - Value.cpp - Value.h - VoidValue.cpp - VoidValue.h + Placeholders.h + StringTools.cpp + StringTools.h + StringValue.cpp + StringValue.h + Value.cpp + Value.h + VoidValue.cpp + VoidValue.h diff --git a/docs/functions.html b/docs/functions.html index ee24d78..2d99782 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -80,14 +80,23 @@ $(function() {

- c -

@@ -395,7 +410,7 @@ $(function() { diff --git a/docs/functions_rela.html b/docs/functions_rela.html index dc7c638..db9aeeb 100644 --- a/docs/functions_rela.html +++ b/docs/functions_rela.html @@ -71,6 +71,9 @@ $(function() {
 
diff --git a/docs/functions_vars.html b/docs/functions_vars.html index b3af741..220bf37 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -77,9 +77,6 @@ $(function() {
  • defaultValue : Hazelnp::ParamConstraint
  • -
  • key -: Hazelnp::ParamConstraint -
  • message : Hazelnp::HazelnuppException
  • @@ -96,7 +93,7 @@ $(function() { diff --git a/docs/globals.html b/docs/globals.html index 68cb048..90f4501 100644 --- a/docs/globals.html +++ b/docs/globals.html @@ -78,7 +78,7 @@ $(function() { diff --git a/docs/globals_func.html b/docs/globals_func.html index d4bada6..f6eaa80 100644 --- a/docs/globals_func.html +++ b/docs/globals_func.html @@ -78,7 +78,7 @@ $(function() { diff --git a/docs/graph_legend.html b/docs/graph_legend.html index d8c8b79..67b257a 100644 --- a/docs/graph_legend.html +++ b/docs/graph_legend.html @@ -137,7 +137,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 7c49994..187d41e 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -100,7 +100,7 @@ This inheritance list is sorted roughly, but not completely, alphabetically: diff --git a/docs/index.html b/docs/index.html index af05d04..51b4312 100644 --- a/docs/index.html +++ b/docs/index.html @@ -131,7 +131,7 @@ What's the concept?
    # String
    $ a.out --foo peter
    -
    # List (any type above works)
    +
    # List (any type above works, except void)
    $ a.out --foo peter jake jeff billy
    # List, mixed types
    @@ -237,10 +237,8 @@ Requiring data
    Hazelnupp args;
    // Register constraints
    - -
    ParamConstraint::Require("--this-is-required"), // This missing throws an exception
    -
    ParamConstraint::Require("--also-required-but-defaulted", {"122"}), // This will default to 122
    -
    });
    +
    args.RegisterConstraint("--this-is-required", ParamConstraint::Require()); // This missing throws an exception
    +
    args.RegisterConstraint("--also-required-but-defaulted", ParamConstraint::Require({"122"})); // This will default to 122
    // Parse
    args.Parse(argc, argv);
    @@ -258,10 +256,11 @@ Type safety
  • float ->[int, string, list, void]
  • string -> [list, void]
  • list -> [void]
  • -
  • void -> [list]
  • +
  • void -> [list, string]
  • The conversions *->list just create a list with a single entry (except for void->list which produces an empty list).
    - The *->void conversions just drop their value.

    + The *->void conversions just drop their value.
    + void->string just produces an empty string.

    Minimal working example:

    #include "Hazelnupp.h"
    using namespace Hazelnp;
    @@ -270,9 +269,7 @@ Type safety
    Hazelnupp args;
    // Register constraints
    - - -
    });
    +
    // Parse
    args.Parse(argc, argv);
    @@ -282,13 +279,12 @@ Type safety

    If --this-must-be-int would be passed as a float, it would be converted to int. If it was passed, for example, as a string, it would throw an exception.


    Note that you can also combine these two constraint-types by populating the struct yourself:

    ParamConstraint pc;
    -
    pc.key = "--my-key";
    pc.constrainType = true;
    pc.wantedType = DATA_TYPE::STRING;
    pc.defaultValue = {}; // no default value
    pc.required = true;
    - +
    args.RegisterConstraints("--my-key", pc);

    What doesn't work is inserting multiple constraints for one key. It will just discard the oldest one. But that's okay because one can describe all possible constraints for a single key in one struct.

    @@ -381,18 +377,18 @@ LICENSE

    Gets thrown when an non-existent key gets dereferenced.
    The main class to interface with.
    Definition: Hazelnupp.h:11
    int main(int argc, char **argv)
    Definition: main.cpp:7
    -
    void SetCatchHelp(bool catchHelp)
    Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter docume...
    Definition: Hazelnupp.cpp:295
    -
    bool HasParam(const std::string &key) const
    Will check wether a parameter exists given a key, or not.
    Definition: Hazelnupp.cpp:164
    -
    void Parse(const int argc, const char *const *argv)
    Will parse command line arguments.
    Definition: Hazelnupp.cpp:35
    -
    void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
    Will register an abbreviation (like -f for –force)
    Definition: Hazelnupp.cpp:499
    -
    void RegisterConstraints(const std::vector< ParamConstraint > &constraints)
    Will register parameter constraints.
    Definition: Hazelnupp.cpp:521
    +
    void SetCatchHelp(bool catchHelp)
    Sets whether the Hazelnupp should automatically catch the –help parameter, print the parameter docume...
    Definition: Hazelnupp.cpp:302
    +
    bool HasParam(const std::string &key) const
    Will check wether a parameter exists given a key, or not.
    Definition: Hazelnupp.cpp:165
    +
    void Parse(const int argc, const char *const *argv)
    Will parse command line arguments.
    Definition: Hazelnupp.cpp:36
    +
    void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
    Will register an abbreviation (like -f for –force)
    Definition: Hazelnupp.cpp:527
    -
    static ParamConstraint Require(const std::string &key, const std::vector< std::string > &defaultValue={}, bool required=true)
    Constructs a require constraint.
    +
    void RegisterConstraint(const std::string &key, const ParamConstraint &constraint)
    Will register a constraint for a parameter.
    Definition: Hazelnupp.cpp:558
    -
    static ParamConstraint TypeSafety(const std::string &key, DATA_TYPE wantedType, bool constrainType=true)
    Constructs a type-safety constraint.
    +
    static ParamConstraint Require(const std::vector< std::string > &defaultValue={}, bool required=true)
    Constructs a require constraint.
    +
    static ParamConstraint TypeSafety(DATA_TYPE wantedType, bool constrainType=true)
    Constructs a type-safety constraint.
    diff --git a/docs/index_8md.html b/docs/index_8md.html index 01dffaf..97d0816 100644 --- a/docs/index_8md.html +++ b/docs/index_8md.html @@ -77,7 +77,7 @@ $(function() { diff --git a/docs/inherits.html b/docs/inherits.html index 0101145..252d712 100644 --- a/docs/inherits.html +++ b/docs/inherits.html @@ -122,7 +122,7 @@ $(function() { diff --git a/docs/main_8cpp.html b/docs/main_8cpp.html index 6e3af50..5dc698d 100644 --- a/docs/main_8cpp.html +++ b/docs/main_8cpp.html @@ -153,30 +153,28 @@ Functions
    20  nupp.RegisterAbbreviation("-w", "--width");
    21  nupp.RegisterAbbreviation("-h", "--height");
    22 
    -
    23  nupp.RegisterConstraints({
    -
    24  ParamConstraint::TypeSafety("--width", DATA_TYPE::FLOAT),
    -
    25  ParamConstraint("--name", true, DATA_TYPE::LIST, {"peter", "hannes"}, true),
    -
    26  ParamConstraint("--fruit", true, DATA_TYPE::STRING, {}, true)
    -
    27  });
    +
    23  nupp.RegisterConstraint("--width", ParamConstraint::TypeSafety(DATA_TYPE::FLOAT));
    +
    24  nupp.RegisterConstraint("--name", ParamConstraint(true, DATA_TYPE::LIST, {"peter", "hannes"}, true));
    +
    25  nupp.RegisterConstraint("--fruit", ParamConstraint(true, DATA_TYPE::STRING, {}, true));
    +
    26 
    +
    27  nupp.Parse(argc, argv);
    28 
    -
    29  nupp.Parse(argc, argv);
    -
    30 
    -
    31  return 0;
    -
    32 }
    +
    29  return 0;
    +
    30 }
    The main class to interface with.
    Definition: Hazelnupp.h:11
    -
    void SetBriefDescription(const std::string &description)
    Sets a brief description of the application to be automatically added to the documentation.
    Definition: Hazelnupp.cpp:306
    +
    void SetBriefDescription(const std::string &description)
    Sets a brief description of the application to be automatically added to the documentation.
    Definition: Hazelnupp.cpp:313
    -
    void Parse(const int argc, const char *const *argv)
    Will parse command line arguments.
    Definition: Hazelnupp.cpp:35
    -
    void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
    Will register an abbreviation (like -f for –force)
    Definition: Hazelnupp.cpp:499
    -
    void RegisterConstraints(const std::vector< ParamConstraint > &constraints)
    Will register parameter constraints.
    Definition: Hazelnupp.cpp:521
    -
    void RegisterDescription(const std::string &parameter, const std::string &description)
    Willl register a short description for a parameter.
    Definition: Hazelnupp.cpp:317
    +
    void Parse(const int argc, const char *const *argv)
    Will parse command line arguments.
    Definition: Hazelnupp.cpp:36
    +
    void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
    Will register an abbreviation (like -f for –force)
    Definition: Hazelnupp.cpp:527
    +
    void RegisterConstraint(const std::string &key, const ParamConstraint &constraint)
    Will register a constraint for a parameter.
    Definition: Hazelnupp.cpp:558
    +
    void RegisterDescription(const std::string &parameter, const std::string &description)
    Willl register a short description for a parameter.
    Definition: Hazelnupp.cpp:324
    diff --git a/docs/main_8cpp_source.html b/docs/main_8cpp_source.html index efe1e06..aaddd68 100644 --- a/docs/main_8cpp_source.html +++ b/docs/main_8cpp_source.html @@ -100,35 +100,33 @@ $(function() {
    20  nupp.RegisterAbbreviation("-w", "--width");
    21  nupp.RegisterAbbreviation("-h", "--height");
    22 
    -
    23  nupp.RegisterConstraints({
    - -
    25  ParamConstraint("--name", true, DATA_TYPE::LIST, {"peter", "hannes"}, true),
    -
    26  ParamConstraint("--fruit", true, DATA_TYPE::STRING, {}, true)
    -
    27  });
    + +
    24  nupp.RegisterConstraint("--name", ParamConstraint(true, DATA_TYPE::LIST, {"peter", "hannes"}, true));
    +
    25  nupp.RegisterConstraint("--fruit", ParamConstraint(true, DATA_TYPE::STRING, {}, true));
    +
    26 
    +
    27  nupp.Parse(argc, argv);
    28 
    -
    29  nupp.Parse(argc, argv);
    -
    30 
    -
    31  return 0;
    -
    32 }
    +
    29  return 0;
    +
    30 }
    The main class to interface with.
    Definition: Hazelnupp.h:11
    int main(int argc, char **argv)
    Definition: main.cpp:7
    -
    void SetBriefDescription(const std::string &description)
    Sets a brief description of the application to be automatically added to the documentation.
    Definition: Hazelnupp.cpp:306
    +
    void SetBriefDescription(const std::string &description)
    Sets a brief description of the application to be automatically added to the documentation.
    Definition: Hazelnupp.cpp:313
    -
    void Parse(const int argc, const char *const *argv)
    Will parse command line arguments.
    Definition: Hazelnupp.cpp:35
    -
    void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
    Will register an abbreviation (like -f for –force)
    Definition: Hazelnupp.cpp:499
    -
    void RegisterConstraints(const std::vector< ParamConstraint > &constraints)
    Will register parameter constraints.
    Definition: Hazelnupp.cpp:521
    +
    void Parse(const int argc, const char *const *argv)
    Will parse command line arguments.
    Definition: Hazelnupp.cpp:36
    +
    void RegisterAbbreviation(const std::string &abbrev, const std::string &target)
    Will register an abbreviation (like -f for –force)
    Definition: Hazelnupp.cpp:527
    +
    void RegisterConstraint(const std::string &key, const ParamConstraint &constraint)
    Will register a constraint for a parameter.
    Definition: Hazelnupp.cpp:558
    -
    static ParamConstraint TypeSafety(const std::string &key, DATA_TYPE wantedType, bool constrainType=true)
    Constructs a type-safety constraint.
    -
    void RegisterDescription(const std::string &parameter, const std::string &description)
    Willl register a short description for a parameter.
    Definition: Hazelnupp.cpp:317
    +
    void RegisterDescription(const std::string &parameter, const std::string &description)
    Willl register a short description for a parameter.
    Definition: Hazelnupp.cpp:324
    +
    static ParamConstraint TypeSafety(DATA_TYPE wantedType, bool constrainType=true)
    Constructs a type-safety constraint.
    diff --git a/docs/menudata.js b/docs/menudata.js index 6a8cdda..ada9f43 100644 --- a/docs/menudata.js +++ b/docs/menudata.js @@ -27,6 +27,7 @@ var menudata={children:[ {text:"Namespace Members",url:"namespacemembers.html",children:[ {text:"All",url:"namespacemembers.html"}, {text:"Functions",url:"namespacemembers_func.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}, {text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, diff --git a/docs/namespaceHazelnp.html b/docs/namespaceHazelnp.html index 22bce8d..79e52f1 100644 --- a/docs/namespaceHazelnp.html +++ b/docs/namespaceHazelnp.html @@ -71,6 +71,7 @@ $(function() {
    @@ -79,6 +80,11 @@ $(function() {
    + + + +

    +Namespaces

     Placeholders
     
    @@ -246,7 +252,7 @@ Functions diff --git a/docs/namespaceHazelnp_1_1Placeholders.html b/docs/namespaceHazelnp_1_1Placeholders.html new file mode 100644 index 0000000..e7841e5 --- /dev/null +++ b/docs/namespaceHazelnp_1_1Placeholders.html @@ -0,0 +1,125 @@ + + + + + + + +Leonetienne/Hazelnupp: Hazelnp::Placeholders Namespace Reference + + + + + + + + + + + +
    +
    +

    Classes

    class  FloatValue
    + + + + + + +
    +
    Leonetienne/Hazelnupp +
    +
    Simple, easy to use, command line parameter interface
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + + +
    + +
    +
    Hazelnp::Placeholders Namespace Reference
    +
    +
    + + + + + +

    +Variables

    static const std::string g_emptyString
     The only purpose of this is to provide the ability to return an empty string as an error for std::string& methods. More...
     
    +

    Variable Documentation

    + +

    ◆ g_emptyString

    + +
    +
    + + + + + +
    + + + + +
    const std::string Hazelnp::Placeholders::g_emptyString
    +
    +static
    +
    + +

    The only purpose of this is to provide the ability to return an empty string as an error for std::string& methods.

    + +

    Definition at line 9 of file Placeholders.h.

    + +
    +
    +
    + + + + diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html index 58df336..be756d2 100644 --- a/docs/namespacemembers.html +++ b/docs/namespacemembers.html @@ -77,11 +77,14 @@ $(function() {
  • DataTypeToString() : Hazelnp
  • +
  • g_emptyString +: Hazelnp::Placeholders +
  • diff --git a/docs/namespacemembers_enum.html b/docs/namespacemembers_enum.html index 1e9bdee..1787215 100644 --- a/docs/namespacemembers_enum.html +++ b/docs/namespacemembers_enum.html @@ -78,7 +78,7 @@ $(function() { diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html index 706380f..8a98dd2 100644 --- a/docs/namespacemembers_func.html +++ b/docs/namespacemembers_func.html @@ -78,7 +78,7 @@ $(function() { diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html new file mode 100644 index 0000000..611336e --- /dev/null +++ b/docs/namespacemembers_vars.html @@ -0,0 +1,86 @@ + + + + + + + +Leonetienne/Hazelnupp: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Leonetienne/Hazelnupp +
    +
    Simple, easy to use, command line parameter interface
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html index 1cbfb5a..ace137b 100644 --- a/docs/namespaces.html +++ b/docs/namespaces.html @@ -75,14 +75,15 @@ $(function() {
    Here is a list of all namespaces with brief descriptions:
    - - +
    [detail level 12]
     NHazelnp
    + +
     NHazelnp
     NPlaceholders
    diff --git a/docs/search/all_1.js b/docs/search/all_1.js index d260778..89a686d 100644 --- a/docs/search/all_1.js +++ b/docs/search/all_1.js @@ -1,8 +1,11 @@ var searchData= [ - ['clearabbreviations_1',['ClearAbbreviations',['../classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d',1,'Hazelnp::Hazelnupp']]], - ['clearconstraints_2',['ClearConstraints',['../classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809',1,'Hazelnp::Hazelnupp']]], - ['cleardescription_3',['ClearDescription',['../classHazelnp_1_1Hazelnupp.html#a8490e0b10feee0b815c043e7cad454cb',1,'Hazelnp::Hazelnupp']]], - ['constraintype_4',['constrainType',['../structHazelnp_1_1ParamConstraint.html#a88a4a4c215723259c71853992d09acac',1,'Hazelnp::ParamConstraint']]], - ['contains_5',['Contains',['../classHazelnp_1_1StringTools.html#aec1abd8b22146c7a9ebeb6a94d6af5ee',1,'Hazelnp::StringTools']]] + ['clearabbreviation_1',['ClearAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a05d1decbb08d1f9368bc9a0d3dfd6398',1,'Hazelnp::Hazelnupp']]], + ['clearabbreviations_2',['ClearAbbreviations',['../classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d',1,'Hazelnp::Hazelnupp']]], + ['clearconstraint_3',['ClearConstraint',['../classHazelnp_1_1Hazelnupp.html#a63d6bdfc0d6255b5d663f3a786077eb4',1,'Hazelnp::Hazelnupp']]], + ['clearconstraints_4',['ClearConstraints',['../classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809',1,'Hazelnp::Hazelnupp']]], + ['cleardescription_5',['ClearDescription',['../classHazelnp_1_1Hazelnupp.html#a26eaac65949072b659531444d32c4cbf',1,'Hazelnp::Hazelnupp']]], + ['cleardescriptions_6',['ClearDescriptions',['../classHazelnp_1_1Hazelnupp.html#ae266cfb3526b9223fc05beb01646fb42',1,'Hazelnp::Hazelnupp']]], + ['constraintype_7',['constrainType',['../structHazelnp_1_1ParamConstraint.html#a88a4a4c215723259c71853992d09acac',1,'Hazelnp::ParamConstraint']]], + ['contains_8',['Contains',['../classHazelnp_1_1StringTools.html#aec1abd8b22146c7a9ebeb6a94d6af5ee',1,'Hazelnp::StringTools']]] ]; diff --git a/docs/search/all_10.js b/docs/search/all_10.js index cd9b2ad..537d221 100644 --- a/docs/search/all_10.js +++ b/docs/search/all_10.js @@ -1,5 +1,5 @@ var searchData= [ - ['wantedtype_102',['wantedType',['../structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329',1,'Hazelnp::ParamConstraint']]], - ['what_103',['What',['../classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e',1,'Hazelnp::HazelnuppException']]] + ['wantedtype_110',['wantedType',['../structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329',1,'Hazelnp::ParamConstraint']]], + ['what_111',['What',['../classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e',1,'Hazelnp::HazelnuppException']]] ]; diff --git a/docs/search/all_11.js b/docs/search/all_11.js index 8116c4f..4d2a55c 100644 --- a/docs/search/all_11.js +++ b/docs/search/all_11.js @@ -1,11 +1,11 @@ var searchData= [ - ['_7efloatvalue_104',['~FloatValue',['../classHazelnp_1_1FloatValue.html#a02e61e453c3e8e32d4d527799c11fd4a',1,'Hazelnp::FloatValue']]], - ['_7ehazelnupp_105',['~Hazelnupp',['../classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be',1,'Hazelnp::Hazelnupp']]], - ['_7eintvalue_106',['~IntValue',['../classHazelnp_1_1IntValue.html#af69f25847b0666f9d6c1bb1fed18d917',1,'Hazelnp::IntValue']]], - ['_7elistvalue_107',['~ListValue',['../classHazelnp_1_1ListValue.html#a91f1450f299d46b3301774a6b4eb6c18',1,'Hazelnp::ListValue']]], - ['_7eparameter_108',['~Parameter',['../classHazelnp_1_1Parameter.html#a6e2ade42a712f1d3675653329266e42d',1,'Hazelnp::Parameter']]], - ['_7estringvalue_109',['~StringValue',['../classHazelnp_1_1StringValue.html#a5176062e2110d121466a6855fdc65d6d',1,'Hazelnp::StringValue']]], - ['_7evalue_110',['~Value',['../classHazelnp_1_1Value.html#a977dea61ee5b00b6c6d77ad6ad2c8d4c',1,'Hazelnp::Value']]], - ['_7evoidvalue_111',['~VoidValue',['../classHazelnp_1_1VoidValue.html#a6024b40919c3a6acea92be0439be2db0',1,'Hazelnp::VoidValue']]] + ['_7efloatvalue_112',['~FloatValue',['../classHazelnp_1_1FloatValue.html#a02e61e453c3e8e32d4d527799c11fd4a',1,'Hazelnp::FloatValue']]], + ['_7ehazelnupp_113',['~Hazelnupp',['../classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be',1,'Hazelnp::Hazelnupp']]], + ['_7eintvalue_114',['~IntValue',['../classHazelnp_1_1IntValue.html#af69f25847b0666f9d6c1bb1fed18d917',1,'Hazelnp::IntValue']]], + ['_7elistvalue_115',['~ListValue',['../classHazelnp_1_1ListValue.html#a91f1450f299d46b3301774a6b4eb6c18',1,'Hazelnp::ListValue']]], + ['_7eparameter_116',['~Parameter',['../classHazelnp_1_1Parameter.html#a6e2ade42a712f1d3675653329266e42d',1,'Hazelnp::Parameter']]], + ['_7estringvalue_117',['~StringValue',['../classHazelnp_1_1StringValue.html#a5176062e2110d121466a6855fdc65d6d',1,'Hazelnp::StringValue']]], + ['_7evalue_118',['~Value',['../classHazelnp_1_1Value.html#a977dea61ee5b00b6c6d77ad6ad2c8d4c',1,'Hazelnp::Value']]], + ['_7evoidvalue_119',['~VoidValue',['../classHazelnp_1_1VoidValue.html#a6024b40919c3a6acea92be0439be2db0',1,'Hazelnp::VoidValue']]] ]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js index a76e9da..aedf262 100644 --- a/docs/search/all_2.js +++ b/docs/search/all_2.js @@ -1,8 +1,8 @@ var searchData= [ - ['data_5ftype_6',['DATA_TYPE',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803f',1,'Hazelnp']]], - ['datatype_2eh_7',['DataType.h',['../DataType_8h.html',1,'']]], - ['datatypetostring_8',['DataTypeToString',['../namespaceHazelnp.html#a7fb1e5ad9e2ecb6c0025beb19f11621b',1,'Hazelnp']]], - ['deepcopy_9',['Deepcopy',['../classHazelnp_1_1FloatValue.html#ab071916339a0d5a266d821ebbc8f12b0',1,'Hazelnp::FloatValue::Deepcopy()'],['../classHazelnp_1_1IntValue.html#aa599004242b27f8f3e246b88742b034e',1,'Hazelnp::IntValue::Deepcopy()'],['../classHazelnp_1_1ListValue.html#a51c89ff315026b03d908345c6f58169d',1,'Hazelnp::ListValue::Deepcopy()'],['../classHazelnp_1_1StringValue.html#a1952487a786fb53cb0b9aefdb3367268',1,'Hazelnp::StringValue::Deepcopy()'],['../classHazelnp_1_1Value.html#aec9bc16f1630734c79bc69e916622dc6',1,'Hazelnp::Value::Deepcopy()'],['../classHazelnp_1_1VoidValue.html#ac36e85add840057659ec24484548165f',1,'Hazelnp::VoidValue::Deepcopy()']]], - ['defaultvalue_10',['defaultValue',['../structHazelnp_1_1ParamConstraint.html#a1d3a627b3a23fe0db3a368e51dbcd5a7',1,'Hazelnp::ParamConstraint']]] + ['data_5ftype_9',['DATA_TYPE',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803f',1,'Hazelnp']]], + ['datatype_2eh_10',['DataType.h',['../DataType_8h.html',1,'']]], + ['datatypetostring_11',['DataTypeToString',['../namespaceHazelnp.html#a7fb1e5ad9e2ecb6c0025beb19f11621b',1,'Hazelnp']]], + ['deepcopy_12',['Deepcopy',['../classHazelnp_1_1FloatValue.html#ab071916339a0d5a266d821ebbc8f12b0',1,'Hazelnp::FloatValue::Deepcopy()'],['../classHazelnp_1_1IntValue.html#aa599004242b27f8f3e246b88742b034e',1,'Hazelnp::IntValue::Deepcopy()'],['../classHazelnp_1_1ListValue.html#a51c89ff315026b03d908345c6f58169d',1,'Hazelnp::ListValue::Deepcopy()'],['../classHazelnp_1_1StringValue.html#a1952487a786fb53cb0b9aefdb3367268',1,'Hazelnp::StringValue::Deepcopy()'],['../classHazelnp_1_1Value.html#aec9bc16f1630734c79bc69e916622dc6',1,'Hazelnp::Value::Deepcopy()'],['../classHazelnp_1_1VoidValue.html#ac36e85add840057659ec24484548165f',1,'Hazelnp::VoidValue::Deepcopy()']]], + ['defaultvalue_13',['defaultValue',['../structHazelnp_1_1ParamConstraint.html#a1d3a627b3a23fe0db3a368e51dbcd5a7',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/all_3.js b/docs/search/all_3.js index 34c5e25..a137006 100644 --- a/docs/search/all_3.js +++ b/docs/search/all_3.js @@ -1,7 +1,7 @@ var searchData= [ - ['float_11',['FLOAT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6',1,'Hazelnp']]], - ['floatvalue_12',['FloatValue',['../classHazelnp_1_1FloatValue.html',1,'Hazelnp::FloatValue'],['../classHazelnp_1_1FloatValue.html#a6bb35564e3331a3feb57b08caad0df44',1,'Hazelnp::FloatValue::FloatValue()']]], - ['floatvalue_2ecpp_13',['FloatValue.cpp',['../FloatValue_8cpp.html',1,'']]], - ['floatvalue_2eh_14',['FloatValue.h',['../FloatValue_8h.html',1,'']]] + ['float_14',['FLOAT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6',1,'Hazelnp']]], + ['floatvalue_15',['FloatValue',['../classHazelnp_1_1FloatValue.html',1,'Hazelnp::FloatValue'],['../classHazelnp_1_1FloatValue.html#a6bb35564e3331a3feb57b08caad0df44',1,'Hazelnp::FloatValue::FloatValue()']]], + ['floatvalue_2ecpp_16',['FloatValue.cpp',['../FloatValue_8cpp.html',1,'']]], + ['floatvalue_2eh_17',['FloatValue.h',['../FloatValue_8h.html',1,'']]] ]; diff --git a/docs/search/all_4.js b/docs/search/all_4.js index ed270ed..5ffab74 100644 --- a/docs/search/all_4.js +++ b/docs/search/all_4.js @@ -1,19 +1,21 @@ var searchData= [ - ['generatedocumentation_15',['GenerateDocumentation',['../classHazelnp_1_1Hazelnupp.html#a7b1bf5e700d8a0d8e90c5750e54749de',1,'Hazelnp::Hazelnupp']]], - ['getabbreviation_16',['GetAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5',1,'Hazelnp::Hazelnupp']]], - ['getasosstring_17',['GetAsOsString',['../classHazelnp_1_1FloatValue.html#a6c9a4b70a7618252f56d9062c483531c',1,'Hazelnp::FloatValue::GetAsOsString()'],['../classHazelnp_1_1IntValue.html#a7d7dbda9a051084600d3eabdac96ee45',1,'Hazelnp::IntValue::GetAsOsString()'],['../classHazelnp_1_1ListValue.html#a5b1f8af329e48c5469fee16634b7889c',1,'Hazelnp::ListValue::GetAsOsString()'],['../classHazelnp_1_1StringValue.html#a71869ee46b88a3cbb9571f481f0c216d',1,'Hazelnp::StringValue::GetAsOsString()'],['../classHazelnp_1_1Value.html#ae1fdc694ed1c2b3080ad3929efda0a0e',1,'Hazelnp::Value::GetAsOsString()'],['../classHazelnp_1_1VoidValue.html#a44b1917d9ba41ee91e2131432e01ec90',1,'Hazelnp::VoidValue::GetAsOsString()']]], - ['getbriefdescription_18',['GetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a1d32c3047a8c58650476d1ae7e9fb582',1,'Hazelnp::Hazelnupp']]], - ['getcatchhelp_19',['GetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a05a3d112bcc00cdeade76f3643ba9e94',1,'Hazelnp::Hazelnupp']]], - ['getcrashonfail_20',['GetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7',1,'Hazelnp::Hazelnupp']]], - ['getdatatype_21',['GetDataType',['../classHazelnp_1_1Value.html#adbb80bf6d455a316e6e5103353429993',1,'Hazelnp::Value']]], - ['getdescription_22',['GetDescription',['../classHazelnp_1_1Hazelnupp.html#a6637dc4b78871d7ecba1f2e1c8c28fb0',1,'Hazelnp::Hazelnupp']]], - ['getexecutablename_23',['GetExecutableName',['../classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469',1,'Hazelnp::Hazelnupp']]], - ['getfloat32_24',['GetFloat32',['../classHazelnp_1_1FloatValue.html#a1653ab3f4fa1700cf1b618ac6552ea81',1,'Hazelnp::FloatValue::GetFloat32()'],['../classHazelnp_1_1IntValue.html#ad0734e4cf67bac0bcc58251a4b3e56c4',1,'Hazelnp::IntValue::GetFloat32()'],['../classHazelnp_1_1ListValue.html#a637fec02ed7f7325554e494fc7cd4e86',1,'Hazelnp::ListValue::GetFloat32()'],['../classHazelnp_1_1StringValue.html#a31fc4d2517a7454c1e9f329df2f14be7',1,'Hazelnp::StringValue::GetFloat32()'],['../classHazelnp_1_1Value.html#a64eeb2943ccea6e16ce4e6f53a6e9b6d',1,'Hazelnp::Value::GetFloat32()'],['../classHazelnp_1_1VoidValue.html#a6d39d2983e54e1a407c66e303273aa48',1,'Hazelnp::VoidValue::GetFloat32()']]], - ['getfloat64_25',['GetFloat64',['../classHazelnp_1_1FloatValue.html#add33b370ef691ccb2f0957d0fe4ef6f9',1,'Hazelnp::FloatValue::GetFloat64()'],['../classHazelnp_1_1IntValue.html#a5ceb2030e8a2a665953fdd4f1715e6a5',1,'Hazelnp::IntValue::GetFloat64()'],['../classHazelnp_1_1ListValue.html#a571178db1c9d23f6c685ea8898dbb60e',1,'Hazelnp::ListValue::GetFloat64()'],['../classHazelnp_1_1StringValue.html#a74bedb828c901a4895062f62303b9653',1,'Hazelnp::StringValue::GetFloat64()'],['../classHazelnp_1_1Value.html#af645b9d78970d102360be37fc18e9e8a',1,'Hazelnp::Value::GetFloat64()'],['../classHazelnp_1_1VoidValue.html#a18b6f0d697c5f9286372a05927e4759c',1,'Hazelnp::VoidValue::GetFloat64()']]], - ['getint32_26',['GetInt32',['../classHazelnp_1_1FloatValue.html#a565741e80cd99a4d2af861ddc3c2dc99',1,'Hazelnp::FloatValue::GetInt32()'],['../classHazelnp_1_1IntValue.html#a163f21536fa49491aa0ae03c8091344a',1,'Hazelnp::IntValue::GetInt32()'],['../classHazelnp_1_1ListValue.html#a565c2b86fcfb3a13de29e59d95a358e7',1,'Hazelnp::ListValue::GetInt32()'],['../classHazelnp_1_1StringValue.html#ac8b53a7792ff1ed048722e2e404f3e6b',1,'Hazelnp::StringValue::GetInt32()'],['../classHazelnp_1_1Value.html#a2cb73333bdeca657dfbf6c8b2e50a5ef',1,'Hazelnp::Value::GetInt32()'],['../classHazelnp_1_1VoidValue.html#a5b7f50c390ef8f3636ba211a72a78065',1,'Hazelnp::VoidValue::GetInt32()']]], - ['getint64_27',['GetInt64',['../classHazelnp_1_1FloatValue.html#a762520d504d4564c48cf3bbefbb0f183',1,'Hazelnp::FloatValue::GetInt64()'],['../classHazelnp_1_1IntValue.html#ae0643023dfd56eafe2e3da5a4ba13080',1,'Hazelnp::IntValue::GetInt64()'],['../classHazelnp_1_1ListValue.html#a9a7a1161ddeb3e56eaafee5f10f75995',1,'Hazelnp::ListValue::GetInt64()'],['../classHazelnp_1_1StringValue.html#aabdc7d681945403d24df6a8fe27948af',1,'Hazelnp::StringValue::GetInt64()'],['../classHazelnp_1_1Value.html#a92d75905211e964cb900bdc868ed12a7',1,'Hazelnp::Value::GetInt64()'],['../classHazelnp_1_1VoidValue.html#a3806945596866f3630dc5426a6b55e58',1,'Hazelnp::VoidValue::GetInt64()']]], - ['getlist_28',['GetList',['../classHazelnp_1_1FloatValue.html#a60b2698f28f1aacac0b67b6453c89fd1',1,'Hazelnp::FloatValue::GetList()'],['../classHazelnp_1_1IntValue.html#acc74ba6070a516a4bcad10bb113d6fa2',1,'Hazelnp::IntValue::GetList()'],['../classHazelnp_1_1ListValue.html#ad578d9088c0375cd9b9c6658e5d9ba1f',1,'Hazelnp::ListValue::GetList()'],['../classHazelnp_1_1StringValue.html#a2b2810350b5eb7e58062ad095320aa69',1,'Hazelnp::StringValue::GetList()'],['../classHazelnp_1_1Value.html#a358092f951e817cd2a878225b5b1c869',1,'Hazelnp::Value::GetList()'],['../classHazelnp_1_1VoidValue.html#aba53ae37d415959b583f33f3e381be16',1,'Hazelnp::VoidValue::GetList()']]], - ['getstring_29',['GetString',['../classHazelnp_1_1FloatValue.html#afd5d078683f410cb9d450c61f12f250d',1,'Hazelnp::FloatValue::GetString()'],['../classHazelnp_1_1IntValue.html#a3631e3b16f010889e942c0c0f72d403c',1,'Hazelnp::IntValue::GetString()'],['../classHazelnp_1_1ListValue.html#aeaf80c07236045a77d72349ebcfc3b89',1,'Hazelnp::ListValue::GetString()'],['../classHazelnp_1_1StringValue.html#a7ed55493cfd25274f8571c1ea45f93e5',1,'Hazelnp::StringValue::GetString()'],['../classHazelnp_1_1Value.html#a1446705c062026f03866d0f452c39501',1,'Hazelnp::Value::GetString()'],['../classHazelnp_1_1VoidValue.html#a5af0c47a873b84226df47a90e63b2acd',1,'Hazelnp::VoidValue::GetString()']]], - ['getvalue_30',['GetValue',['../classHazelnp_1_1FloatValue.html#a2ad79d8bfe75e45120d1fce132a89b8f',1,'Hazelnp::FloatValue::GetValue()'],['../classHazelnp_1_1IntValue.html#a89967cafbdeb21362336067b772808c7',1,'Hazelnp::IntValue::GetValue()'],['../classHazelnp_1_1ListValue.html#a7907ae7433e4011157f1b31dd5339702',1,'Hazelnp::ListValue::GetValue()'],['../classHazelnp_1_1Parameter.html#a4ab8ba022bde4a0175e5ceb8e3a598af',1,'Hazelnp::Parameter::GetValue()'],['../classHazelnp_1_1StringValue.html#a521a573887a3f31718f74e71ff01e86e',1,'Hazelnp::StringValue::GetValue()']]] + ['g_5femptystring_18',['g_emptyString',['../namespaceHazelnp_1_1Placeholders.html#a90536f0cd5261b18da736e954c6b8b79',1,'Hazelnp::Placeholders']]], + ['generatedocumentation_19',['GenerateDocumentation',['../classHazelnp_1_1Hazelnupp.html#a7b1bf5e700d8a0d8e90c5750e54749de',1,'Hazelnp::Hazelnupp']]], + ['getabbreviation_20',['GetAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5',1,'Hazelnp::Hazelnupp']]], + ['getasosstring_21',['GetAsOsString',['../classHazelnp_1_1FloatValue.html#a6c9a4b70a7618252f56d9062c483531c',1,'Hazelnp::FloatValue::GetAsOsString()'],['../classHazelnp_1_1IntValue.html#a7d7dbda9a051084600d3eabdac96ee45',1,'Hazelnp::IntValue::GetAsOsString()'],['../classHazelnp_1_1ListValue.html#a5b1f8af329e48c5469fee16634b7889c',1,'Hazelnp::ListValue::GetAsOsString()'],['../classHazelnp_1_1StringValue.html#a71869ee46b88a3cbb9571f481f0c216d',1,'Hazelnp::StringValue::GetAsOsString()'],['../classHazelnp_1_1Value.html#ae1fdc694ed1c2b3080ad3929efda0a0e',1,'Hazelnp::Value::GetAsOsString()'],['../classHazelnp_1_1VoidValue.html#a44b1917d9ba41ee91e2131432e01ec90',1,'Hazelnp::VoidValue::GetAsOsString()']]], + ['getbriefdescription_22',['GetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a1d32c3047a8c58650476d1ae7e9fb582',1,'Hazelnp::Hazelnupp']]], + ['getcatchhelp_23',['GetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a05a3d112bcc00cdeade76f3643ba9e94',1,'Hazelnp::Hazelnupp']]], + ['getconstraint_24',['GetConstraint',['../classHazelnp_1_1Hazelnupp.html#acaec2780d800113ffc2d72a6b865955c',1,'Hazelnp::Hazelnupp']]], + ['getcrashonfail_25',['GetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7',1,'Hazelnp::Hazelnupp']]], + ['getdatatype_26',['GetDataType',['../classHazelnp_1_1Value.html#adbb80bf6d455a316e6e5103353429993',1,'Hazelnp::Value']]], + ['getdescription_27',['GetDescription',['../classHazelnp_1_1Hazelnupp.html#a300e55438cb0983b02347fdc3653e32c',1,'Hazelnp::Hazelnupp']]], + ['getexecutablename_28',['GetExecutableName',['../classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469',1,'Hazelnp::Hazelnupp']]], + ['getfloat32_29',['GetFloat32',['../classHazelnp_1_1FloatValue.html#a1653ab3f4fa1700cf1b618ac6552ea81',1,'Hazelnp::FloatValue::GetFloat32()'],['../classHazelnp_1_1IntValue.html#ad0734e4cf67bac0bcc58251a4b3e56c4',1,'Hazelnp::IntValue::GetFloat32()'],['../classHazelnp_1_1ListValue.html#a637fec02ed7f7325554e494fc7cd4e86',1,'Hazelnp::ListValue::GetFloat32()'],['../classHazelnp_1_1StringValue.html#a31fc4d2517a7454c1e9f329df2f14be7',1,'Hazelnp::StringValue::GetFloat32()'],['../classHazelnp_1_1Value.html#a64eeb2943ccea6e16ce4e6f53a6e9b6d',1,'Hazelnp::Value::GetFloat32()'],['../classHazelnp_1_1VoidValue.html#a6d39d2983e54e1a407c66e303273aa48',1,'Hazelnp::VoidValue::GetFloat32()']]], + ['getfloat64_30',['GetFloat64',['../classHazelnp_1_1FloatValue.html#add33b370ef691ccb2f0957d0fe4ef6f9',1,'Hazelnp::FloatValue::GetFloat64()'],['../classHazelnp_1_1IntValue.html#a5ceb2030e8a2a665953fdd4f1715e6a5',1,'Hazelnp::IntValue::GetFloat64()'],['../classHazelnp_1_1ListValue.html#a571178db1c9d23f6c685ea8898dbb60e',1,'Hazelnp::ListValue::GetFloat64()'],['../classHazelnp_1_1StringValue.html#a74bedb828c901a4895062f62303b9653',1,'Hazelnp::StringValue::GetFloat64()'],['../classHazelnp_1_1Value.html#af645b9d78970d102360be37fc18e9e8a',1,'Hazelnp::Value::GetFloat64()'],['../classHazelnp_1_1VoidValue.html#a18b6f0d697c5f9286372a05927e4759c',1,'Hazelnp::VoidValue::GetFloat64()']]], + ['getint32_31',['GetInt32',['../classHazelnp_1_1FloatValue.html#a565741e80cd99a4d2af861ddc3c2dc99',1,'Hazelnp::FloatValue::GetInt32()'],['../classHazelnp_1_1IntValue.html#a163f21536fa49491aa0ae03c8091344a',1,'Hazelnp::IntValue::GetInt32()'],['../classHazelnp_1_1ListValue.html#a565c2b86fcfb3a13de29e59d95a358e7',1,'Hazelnp::ListValue::GetInt32()'],['../classHazelnp_1_1StringValue.html#ac8b53a7792ff1ed048722e2e404f3e6b',1,'Hazelnp::StringValue::GetInt32()'],['../classHazelnp_1_1Value.html#a2cb73333bdeca657dfbf6c8b2e50a5ef',1,'Hazelnp::Value::GetInt32()'],['../classHazelnp_1_1VoidValue.html#a5b7f50c390ef8f3636ba211a72a78065',1,'Hazelnp::VoidValue::GetInt32()']]], + ['getint64_32',['GetInt64',['../classHazelnp_1_1FloatValue.html#a762520d504d4564c48cf3bbefbb0f183',1,'Hazelnp::FloatValue::GetInt64()'],['../classHazelnp_1_1IntValue.html#ae0643023dfd56eafe2e3da5a4ba13080',1,'Hazelnp::IntValue::GetInt64()'],['../classHazelnp_1_1ListValue.html#a9a7a1161ddeb3e56eaafee5f10f75995',1,'Hazelnp::ListValue::GetInt64()'],['../classHazelnp_1_1StringValue.html#aabdc7d681945403d24df6a8fe27948af',1,'Hazelnp::StringValue::GetInt64()'],['../classHazelnp_1_1Value.html#a92d75905211e964cb900bdc868ed12a7',1,'Hazelnp::Value::GetInt64()'],['../classHazelnp_1_1VoidValue.html#a3806945596866f3630dc5426a6b55e58',1,'Hazelnp::VoidValue::GetInt64()']]], + ['getlist_33',['GetList',['../classHazelnp_1_1FloatValue.html#a60b2698f28f1aacac0b67b6453c89fd1',1,'Hazelnp::FloatValue::GetList()'],['../classHazelnp_1_1IntValue.html#acc74ba6070a516a4bcad10bb113d6fa2',1,'Hazelnp::IntValue::GetList()'],['../classHazelnp_1_1ListValue.html#ad578d9088c0375cd9b9c6658e5d9ba1f',1,'Hazelnp::ListValue::GetList()'],['../classHazelnp_1_1StringValue.html#a2b2810350b5eb7e58062ad095320aa69',1,'Hazelnp::StringValue::GetList()'],['../classHazelnp_1_1Value.html#a358092f951e817cd2a878225b5b1c869',1,'Hazelnp::Value::GetList()'],['../classHazelnp_1_1VoidValue.html#aba53ae37d415959b583f33f3e381be16',1,'Hazelnp::VoidValue::GetList()']]], + ['getstring_34',['GetString',['../classHazelnp_1_1FloatValue.html#afd5d078683f410cb9d450c61f12f250d',1,'Hazelnp::FloatValue::GetString()'],['../classHazelnp_1_1IntValue.html#a3631e3b16f010889e942c0c0f72d403c',1,'Hazelnp::IntValue::GetString()'],['../classHazelnp_1_1ListValue.html#aeaf80c07236045a77d72349ebcfc3b89',1,'Hazelnp::ListValue::GetString()'],['../classHazelnp_1_1StringValue.html#a7ed55493cfd25274f8571c1ea45f93e5',1,'Hazelnp::StringValue::GetString()'],['../classHazelnp_1_1Value.html#a1446705c062026f03866d0f452c39501',1,'Hazelnp::Value::GetString()'],['../classHazelnp_1_1VoidValue.html#a5af0c47a873b84226df47a90e63b2acd',1,'Hazelnp::VoidValue::GetString()']]], + ['getvalue_35',['GetValue',['../classHazelnp_1_1FloatValue.html#a2ad79d8bfe75e45120d1fce132a89b8f',1,'Hazelnp::FloatValue::GetValue()'],['../classHazelnp_1_1IntValue.html#a89967cafbdeb21362336067b772808c7',1,'Hazelnp::IntValue::GetValue()'],['../classHazelnp_1_1ListValue.html#a7907ae7433e4011157f1b31dd5339702',1,'Hazelnp::ListValue::GetValue()'],['../classHazelnp_1_1Parameter.html#a4ab8ba022bde4a0175e5ceb8e3a598af',1,'Hazelnp::Parameter::GetValue()'],['../classHazelnp_1_1StringValue.html#a521a573887a3f31718f74e71ff01e86e',1,'Hazelnp::StringValue::GetValue()']]] ]; diff --git a/docs/search/all_5.js b/docs/search/all_5.js index b10b99f..6eac203 100644 --- a/docs/search/all_5.js +++ b/docs/search/all_5.js @@ -1,18 +1,20 @@ var searchData= [ - ['hasabbreviation_31',['HasAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200',1,'Hazelnp::Hazelnupp']]], - ['hasparam_32',['HasParam',['../classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040',1,'Hazelnp::Hazelnupp']]], - ['hazelnp_33',['Hazelnp',['../namespaceHazelnp.html',1,'']]], - ['hazelnupp_34',['Hazelnupp',['../classHazelnp_1_1Hazelnupp.html',1,'Hazelnp::Hazelnupp'],['../classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d',1,'Hazelnp::Hazelnupp::Hazelnupp()'],['../classHazelnp_1_1Hazelnupp.html#a6d14c60f03b571f5f794c3549e75e435',1,'Hazelnp::Hazelnupp::Hazelnupp(const int argc, const char *const *argv)']]], - ['hazelnupp_2ecpp_35',['Hazelnupp.cpp',['../Hazelnupp_8cpp.html',1,'']]], - ['hazelnupp_2eh_36',['Hazelnupp.h',['../Hazelnupp_8h.html',1,'']]], - ['hazelnupp_2evcxproj_2efilelistabsolute_2etxt_37',['Hazelnupp.vcxproj.FileListAbsolute.txt',['../Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)']]], - ['hazelnuppconstraintexception_38',['HazelnuppConstraintException',['../classHazelnp_1_1HazelnuppConstraintException.html',1,'Hazelnp::HazelnuppConstraintException'],['../classHazelnp_1_1HazelnuppConstraintException.html#a4d08002a96bf9b3da3c6e931a51960e9',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException()'],['../classHazelnp_1_1HazelnuppConstraintException.html#a944f0e6a384e032a762c5892964e1cc0',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException(const std::string &msg)']]], - ['hazelnuppconstraintmissingvalue_39',['HazelnuppConstraintMissingValue',['../classHazelnp_1_1HazelnuppConstraintMissingValue.html',1,'Hazelnp::HazelnuppConstraintMissingValue'],['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#aad4a7b5573790ddfbe1a453aef71eb10',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue()'],['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#a20563650ba1ee63f23ddb973677dbdda',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue(const std::string &msg)']]], - ['hazelnuppconstrainttypemissmatch_40',['HazelnuppConstraintTypeMissmatch',['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html',1,'Hazelnp::HazelnuppConstraintTypeMissmatch'],['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#ab7c9e9afd9d3286e563a7656785242e8',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch()'],['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#a603d91c9af39e53b54e5aa288266cfe4',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch(const std::string &msg)']]], - ['hazelnuppexception_41',['HazelnuppException',['../classHazelnp_1_1HazelnuppException.html',1,'Hazelnp::HazelnuppException'],['../classHazelnp_1_1HazelnuppException.html#a0b21fd5d4f22e5e677b74eb0acd7c6ff',1,'Hazelnp::HazelnuppException::HazelnuppException()'],['../classHazelnp_1_1HazelnuppException.html#a816f823fe2ebd35076049e33b9f3c05c',1,'Hazelnp::HazelnuppException::HazelnuppException(const std::string &msg)']]], - ['hazelnuppexception_2eh_42',['HazelnuppException.h',['../HazelnuppException_8h.html',1,'']]], - ['hazelnuppinvalidkeyexception_43',['HazelnuppInvalidKeyException',['../classHazelnp_1_1HazelnuppInvalidKeyException.html',1,'Hazelnp::HazelnuppInvalidKeyException'],['../classHazelnp_1_1HazelnuppInvalidKeyException.html#ab23be8f7cb84129fa85ed1e7a0b280a0',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException()'],['../classHazelnp_1_1HazelnuppInvalidKeyException.html#a18a08dc4efe80a378216460db5769891',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException(const std::string &msg)']]], - ['hazelnuppvaluenotconvertibleexception_44',['HazelnuppValueNotConvertibleException',['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html',1,'Hazelnp::HazelnuppValueNotConvertibleException'],['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a0babee1bb5cec9fdd4abfd86995561f4',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException()'],['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a7ba376cd7fc7edcb934ee0257d4867f2',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException(const std::string &msg)']]], - ['hazelnupp_45',['Hazelnupp',['../index.html',1,'']]] + ['hasabbreviation_36',['HasAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200',1,'Hazelnp::Hazelnupp']]], + ['hasdescription_37',['HasDescription',['../classHazelnp_1_1Hazelnupp.html#aabab94412ff5eecf95b97a4e21eb9cf6',1,'Hazelnp::Hazelnupp']]], + ['hasparam_38',['HasParam',['../classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040',1,'Hazelnp::Hazelnupp']]], + ['hazelnp_39',['Hazelnp',['../namespaceHazelnp.html',1,'']]], + ['hazelnupp_40',['Hazelnupp',['../classHazelnp_1_1Hazelnupp.html',1,'Hazelnp::Hazelnupp'],['../structHazelnp_1_1ParamConstraint.html#a0356cbb5056c61cac4a065a59002cb76',1,'Hazelnp::ParamConstraint::Hazelnupp()'],['../classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d',1,'Hazelnp::Hazelnupp::Hazelnupp()'],['../classHazelnp_1_1Hazelnupp.html#a6d14c60f03b571f5f794c3549e75e435',1,'Hazelnp::Hazelnupp::Hazelnupp(const int argc, const char *const *argv)']]], + ['hazelnupp_2ecpp_41',['Hazelnupp.cpp',['../Hazelnupp_8cpp.html',1,'']]], + ['hazelnupp_2eh_42',['Hazelnupp.h',['../Hazelnupp_8h.html',1,'']]], + ['hazelnupp_2evcxproj_2efilelistabsolute_2etxt_43',['Hazelnupp.vcxproj.FileListAbsolute.txt',['../Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)']]], + ['hazelnuppconstraintexception_44',['HazelnuppConstraintException',['../classHazelnp_1_1HazelnuppConstraintException.html',1,'Hazelnp::HazelnuppConstraintException'],['../classHazelnp_1_1HazelnuppConstraintException.html#a4d08002a96bf9b3da3c6e931a51960e9',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException()'],['../classHazelnp_1_1HazelnuppConstraintException.html#a944f0e6a384e032a762c5892964e1cc0',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException(const std::string &msg)']]], + ['hazelnuppconstraintmissingvalue_45',['HazelnuppConstraintMissingValue',['../classHazelnp_1_1HazelnuppConstraintMissingValue.html',1,'Hazelnp::HazelnuppConstraintMissingValue'],['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#aad4a7b5573790ddfbe1a453aef71eb10',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue()'],['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#a20563650ba1ee63f23ddb973677dbdda',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue(const std::string &msg)']]], + ['hazelnuppconstrainttypemissmatch_46',['HazelnuppConstraintTypeMissmatch',['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html',1,'Hazelnp::HazelnuppConstraintTypeMissmatch'],['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#ab7c9e9afd9d3286e563a7656785242e8',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch()'],['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#a603d91c9af39e53b54e5aa288266cfe4',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch(const std::string &msg)']]], + ['hazelnuppexception_47',['HazelnuppException',['../classHazelnp_1_1HazelnuppException.html',1,'Hazelnp::HazelnuppException'],['../classHazelnp_1_1HazelnuppException.html#a0b21fd5d4f22e5e677b74eb0acd7c6ff',1,'Hazelnp::HazelnuppException::HazelnuppException()'],['../classHazelnp_1_1HazelnuppException.html#a816f823fe2ebd35076049e33b9f3c05c',1,'Hazelnp::HazelnuppException::HazelnuppException(const std::string &msg)']]], + ['hazelnuppexception_2eh_48',['HazelnuppException.h',['../HazelnuppException_8h.html',1,'']]], + ['hazelnuppinvalidkeyexception_49',['HazelnuppInvalidKeyException',['../classHazelnp_1_1HazelnuppInvalidKeyException.html',1,'Hazelnp::HazelnuppInvalidKeyException'],['../classHazelnp_1_1HazelnuppInvalidKeyException.html#ab23be8f7cb84129fa85ed1e7a0b280a0',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException()'],['../classHazelnp_1_1HazelnuppInvalidKeyException.html#a18a08dc4efe80a378216460db5769891',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException(const std::string &msg)']]], + ['hazelnuppvaluenotconvertibleexception_50',['HazelnuppValueNotConvertibleException',['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html',1,'Hazelnp::HazelnuppValueNotConvertibleException'],['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a0babee1bb5cec9fdd4abfd86995561f4',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException()'],['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a7ba376cd7fc7edcb934ee0257d4867f2',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException(const std::string &msg)']]], + ['hazelnupp_51',['Hazelnupp',['../index.html',1,'']]], + ['placeholders_52',['Placeholders',['../namespaceHazelnp_1_1Placeholders.html',1,'Hazelnp']]] ]; diff --git a/docs/search/all_6.js b/docs/search/all_6.js index 989f9a8..bfad21f 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -1,9 +1,9 @@ var searchData= [ - ['index_2emd_46',['index.md',['../index_8md.html',1,'']]], - ['int_47',['INT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92',1,'Hazelnp']]], - ['intvalue_48',['IntValue',['../classHazelnp_1_1IntValue.html',1,'Hazelnp::IntValue'],['../classHazelnp_1_1IntValue.html#ac1174f807ce2c085f5a24baed4e3c1ba',1,'Hazelnp::IntValue::IntValue()']]], - ['intvalue_2ecpp_49',['IntValue.cpp',['../IntValue_8cpp.html',1,'']]], - ['intvalue_2eh_50',['IntValue.h',['../IntValue_8h.html',1,'']]], - ['isnumeric_51',['IsNumeric',['../classHazelnp_1_1StringTools.html#a6cd093feaca2d978c23774cf87d86e68',1,'Hazelnp::StringTools']]] + ['index_2emd_53',['index.md',['../index_8md.html',1,'']]], + ['int_54',['INT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92',1,'Hazelnp']]], + ['intvalue_55',['IntValue',['../classHazelnp_1_1IntValue.html',1,'Hazelnp::IntValue'],['../classHazelnp_1_1IntValue.html#ac1174f807ce2c085f5a24baed4e3c1ba',1,'Hazelnp::IntValue::IntValue()']]], + ['intvalue_2ecpp_56',['IntValue.cpp',['../IntValue_8cpp.html',1,'']]], + ['intvalue_2eh_57',['IntValue.h',['../IntValue_8h.html',1,'']]], + ['isnumeric_58',['IsNumeric',['../classHazelnp_1_1StringTools.html#a6cd093feaca2d978c23774cf87d86e68',1,'Hazelnp::StringTools']]] ]; diff --git a/docs/search/all_7.js b/docs/search/all_7.js index a753f3f..4c642df 100644 --- a/docs/search/all_7.js +++ b/docs/search/all_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['key_52',['Key',['../classHazelnp_1_1Parameter.html#a7acd68ce06eec06ab286b1a062f9c8d6',1,'Hazelnp::Parameter::Key()'],['../structHazelnp_1_1ParamConstraint.html#aac148076c5e0ab91c666f3343c30bd15',1,'Hazelnp::ParamConstraint::key()']]] + ['key_59',['Key',['../classHazelnp_1_1Parameter.html#a7acd68ce06eec06ab286b1a062f9c8d6',1,'Hazelnp::Parameter']]] ]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js index 892e1b1..83b938e 100644 --- a/docs/search/all_8.js +++ b/docs/search/all_8.js @@ -1,7 +1,7 @@ var searchData= [ - ['list_53',['LIST',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a',1,'Hazelnp']]], - ['listvalue_54',['ListValue',['../classHazelnp_1_1ListValue.html',1,'Hazelnp::ListValue'],['../classHazelnp_1_1ListValue.html#a6082aaa506b31496720a168da8ab2708',1,'Hazelnp::ListValue::ListValue()']]], - ['listvalue_2ecpp_55',['ListValue.cpp',['../ListValue_8cpp.html',1,'']]], - ['listvalue_2eh_56',['ListValue.h',['../ListValue_8h.html',1,'']]] + ['list_60',['LIST',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a',1,'Hazelnp']]], + ['listvalue_61',['ListValue',['../classHazelnp_1_1ListValue.html',1,'Hazelnp::ListValue'],['../classHazelnp_1_1ListValue.html#a6082aaa506b31496720a168da8ab2708',1,'Hazelnp::ListValue::ListValue()']]], + ['listvalue_2ecpp_62',['ListValue.cpp',['../ListValue_8cpp.html',1,'']]], + ['listvalue_2eh_63',['ListValue.h',['../ListValue_8h.html',1,'']]] ]; diff --git a/docs/search/all_9.js b/docs/search/all_9.js index 9bc30d9..1076d2c 100644 --- a/docs/search/all_9.js +++ b/docs/search/all_9.js @@ -1,6 +1,6 @@ var searchData= [ - ['main_57',['main',['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main.cpp']]], - ['main_2ecpp_58',['main.cpp',['../main_8cpp.html',1,'']]], - ['message_59',['message',['../classHazelnp_1_1HazelnuppException.html#aa905cabcd12f542dfc67638732737e88',1,'Hazelnp::HazelnuppException']]] + ['main_64',['main',['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main.cpp']]], + ['main_2ecpp_65',['main.cpp',['../main_8cpp.html',1,'']]], + ['message_66',['message',['../classHazelnp_1_1HazelnuppException.html#aa905cabcd12f542dfc67638732737e88',1,'Hazelnp::HazelnuppException']]] ]; diff --git a/docs/search/all_a.js b/docs/search/all_a.js index 4418db1..641856e 100644 --- a/docs/search/all_a.js +++ b/docs/search/all_a.js @@ -1,11 +1,11 @@ var searchData= [ - ['operator_20double_60',['operator double',['../classHazelnp_1_1FloatValue.html#ae02de376bbb2b76e0f9d16b1fc4de06d',1,'Hazelnp::FloatValue']]], - ['operator_20int_61',['operator int',['../classHazelnp_1_1IntValue.html#ab30a38c8f58cefd7cbf365c4aeae79bd',1,'Hazelnp::IntValue']]], - ['operator_20long_20double_62',['operator long double',['../classHazelnp_1_1FloatValue.html#ad0d4c589190fbab7e6c4d8fcc130ac1b',1,'Hazelnp::FloatValue']]], - ['operator_20long_20long_20int_63',['operator long long int',['../classHazelnp_1_1IntValue.html#a45b283dae9904ad0643035d3ee5883eb',1,'Hazelnp::IntValue']]], - ['operator_3c_3c_64',['operator<<',['../classHazelnp_1_1Parameter.html#a11b3529badcbf99b46262772472495c7',1,'Hazelnp::Parameter::operator<<()'],['../classHazelnp_1_1Value.html#ad29db86c4a2dec5bc8d0006031b07211',1,'Hazelnp::Value::operator<<()']]], - ['operator_5b_5d_65',['operator[]',['../classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5',1,'Hazelnp::Hazelnupp']]], - ['string_66',['string',['../classHazelnp_1_1StringValue.html#a23449775f14f828d29b115de040a696b',1,'Hazelnp::StringValue']]], - ['vector_3c_20value_20_2a_20_3e_67',['vector< Value * >',['../classHazelnp_1_1ListValue.html#a5d92ff2b9a1fa92fbc303ac4d07765d0',1,'Hazelnp::ListValue']]] + ['operator_20double_67',['operator double',['../classHazelnp_1_1FloatValue.html#ae02de376bbb2b76e0f9d16b1fc4de06d',1,'Hazelnp::FloatValue']]], + ['operator_20int_68',['operator int',['../classHazelnp_1_1IntValue.html#ab30a38c8f58cefd7cbf365c4aeae79bd',1,'Hazelnp::IntValue']]], + ['operator_20long_20double_69',['operator long double',['../classHazelnp_1_1FloatValue.html#ad0d4c589190fbab7e6c4d8fcc130ac1b',1,'Hazelnp::FloatValue']]], + ['operator_20long_20long_20int_70',['operator long long int',['../classHazelnp_1_1IntValue.html#a45b283dae9904ad0643035d3ee5883eb',1,'Hazelnp::IntValue']]], + ['operator_3c_3c_71',['operator<<',['../classHazelnp_1_1Parameter.html#a11b3529badcbf99b46262772472495c7',1,'Hazelnp::Parameter::operator<<()'],['../classHazelnp_1_1Value.html#ad29db86c4a2dec5bc8d0006031b07211',1,'Hazelnp::Value::operator<<()']]], + ['operator_5b_5d_72',['operator[]',['../classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5',1,'Hazelnp::Hazelnupp']]], + ['string_73',['string',['../classHazelnp_1_1StringValue.html#a23449775f14f828d29b115de040a696b',1,'Hazelnp::StringValue']]], + ['vector_3c_20value_20_2a_20_3e_74',['vector< Value * >',['../classHazelnp_1_1ListValue.html#a5d92ff2b9a1fa92fbc303ac4d07765d0',1,'Hazelnp::ListValue']]] ]; diff --git a/docs/search/all_b.js b/docs/search/all_b.js index eeaa01a..a7a0687 100644 --- a/docs/search/all_b.js +++ b/docs/search/all_b.js @@ -1,10 +1,11 @@ var searchData= [ - ['paramconstraint_68',['ParamConstraint',['../structHazelnp_1_1ParamConstraint.html',1,'Hazelnp::ParamConstraint'],['../structHazelnp_1_1ParamConstraint.html#afa9e1b4378c9fa1b4a7b5b792c062cbe',1,'Hazelnp::ParamConstraint::ParamConstraint()=default'],['../structHazelnp_1_1ParamConstraint.html#ab2a897c3044ae2d1a05952a804a3675b',1,'Hazelnp::ParamConstraint::ParamConstraint(const std::string &key, bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)']]], - ['paramconstraint_2eh_69',['ParamConstraint.h',['../ParamConstraint_8h.html',1,'']]], - ['parameter_70',['Parameter',['../classHazelnp_1_1Parameter.html',1,'Hazelnp::Parameter'],['../classHazelnp_1_1Parameter.html#a0c9faefc26cc9d8c886ef71e39e2f90c',1,'Hazelnp::Parameter::Parameter()']]], - ['parameter_2ecpp_71',['Parameter.cpp',['../Parameter_8cpp.html',1,'']]], - ['parameter_2eh_72',['Parameter.h',['../Parameter_8h.html',1,'']]], - ['parse_73',['Parse',['../classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b',1,'Hazelnp::Hazelnupp']]], - ['parsenumber_74',['ParseNumber',['../classHazelnp_1_1StringTools.html#ab661223da5bbbb75039e168409466c82',1,'Hazelnp::StringTools']]] + ['paramconstraint_75',['ParamConstraint',['../structHazelnp_1_1ParamConstraint.html',1,'Hazelnp::ParamConstraint'],['../structHazelnp_1_1ParamConstraint.html#afa9e1b4378c9fa1b4a7b5b792c062cbe',1,'Hazelnp::ParamConstraint::ParamConstraint()=default'],['../structHazelnp_1_1ParamConstraint.html#aed7cb14a27277bf57b7f2d53065a2406',1,'Hazelnp::ParamConstraint::ParamConstraint(bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)']]], + ['paramconstraint_2eh_76',['ParamConstraint.h',['../ParamConstraint_8h.html',1,'']]], + ['parameter_77',['Parameter',['../classHazelnp_1_1Parameter.html',1,'Hazelnp::Parameter'],['../classHazelnp_1_1Parameter.html#a0c9faefc26cc9d8c886ef71e39e2f90c',1,'Hazelnp::Parameter::Parameter()']]], + ['parameter_2ecpp_78',['Parameter.cpp',['../Parameter_8cpp.html',1,'']]], + ['parameter_2eh_79',['Parameter.h',['../Parameter_8h.html',1,'']]], + ['parse_80',['Parse',['../classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b',1,'Hazelnp::Hazelnupp']]], + ['parsenumber_81',['ParseNumber',['../classHazelnp_1_1StringTools.html#ab661223da5bbbb75039e168409466c82',1,'Hazelnp::StringTools']]], + ['placeholders_2eh_82',['Placeholders.h',['../Placeholders_8h.html',1,'']]] ]; diff --git a/docs/search/all_c.js b/docs/search/all_c.js index ddcce2a..e4b9363 100644 --- a/docs/search/all_c.js +++ b/docs/search/all_c.js @@ -1,9 +1,9 @@ var searchData= [ - ['registerabbreviation_75',['RegisterAbbreviation',['../classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124',1,'Hazelnp::Hazelnupp']]], - ['registerconstraints_76',['RegisterConstraints',['../classHazelnp_1_1Hazelnupp.html#a8a3331836b9ea1f920e77f6d332019d5',1,'Hazelnp::Hazelnupp']]], - ['registerdescription_77',['RegisterDescription',['../classHazelnp_1_1Hazelnupp.html#a17883db87e97caad4a0f114f9f850f5e',1,'Hazelnp::Hazelnupp']]], - ['replace_78',['Replace',['../classHazelnp_1_1StringTools.html#a0ca14c1d67833a61955a693f3e40d8b5',1,'Hazelnp::StringTools::Replace(const std::string &str, const char find, const std::string &subst)'],['../classHazelnp_1_1StringTools.html#a1658832ddf1611f83c5848e391d32806',1,'Hazelnp::StringTools::Replace(const std::string &str, const std::string &find, const std::string &subst)']]], - ['require_79',['Require',['../structHazelnp_1_1ParamConstraint.html#afbcc75c428381ab3a292d3f55945eb32',1,'Hazelnp::ParamConstraint']]], - ['required_80',['required',['../structHazelnp_1_1ParamConstraint.html#a8ccf3ebecc2d9d0105e181814af2943c',1,'Hazelnp::ParamConstraint']]] + ['registerabbreviation_83',['RegisterAbbreviation',['../classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124',1,'Hazelnp::Hazelnupp']]], + ['registerconstraint_84',['RegisterConstraint',['../classHazelnp_1_1Hazelnupp.html#add731b65fb0741e4fb0b8fc8a601a11d',1,'Hazelnp::Hazelnupp']]], + ['registerdescription_85',['RegisterDescription',['../classHazelnp_1_1Hazelnupp.html#a17883db87e97caad4a0f114f9f850f5e',1,'Hazelnp::Hazelnupp']]], + ['replace_86',['Replace',['../classHazelnp_1_1StringTools.html#a0ca14c1d67833a61955a693f3e40d8b5',1,'Hazelnp::StringTools::Replace(const std::string &str, const char find, const std::string &subst)'],['../classHazelnp_1_1StringTools.html#a1658832ddf1611f83c5848e391d32806',1,'Hazelnp::StringTools::Replace(const std::string &str, const std::string &find, const std::string &subst)']]], + ['require_87',['Require',['../structHazelnp_1_1ParamConstraint.html#a926e12fcb2fd0d031452c4bcc950bd6c',1,'Hazelnp::ParamConstraint']]], + ['required_88',['required',['../structHazelnp_1_1ParamConstraint.html#a8ccf3ebecc2d9d0105e181814af2943c',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/all_d.js b/docs/search/all_d.js index 0f083eb..21d22db 100644 --- a/docs/search/all_d.js +++ b/docs/search/all_d.js @@ -1,14 +1,14 @@ var searchData= [ - ['setbriefdescription_81',['SetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a037f84b32c7a2420c387dd46445291ac',1,'Hazelnp::Hazelnupp']]], - ['setcatchhelp_82',['SetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a60e0a51cd92014a87e44322158e45872',1,'Hazelnp::Hazelnupp']]], - ['setcrashonfail_83',['SetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e',1,'Hazelnp::Hazelnupp']]], - ['splitstring_84',['SplitString',['../classHazelnp_1_1StringTools.html#a7cd6606ef06170fab363024e457f1f16',1,'Hazelnp::StringTools::SplitString(const std::string &str, const char delimiter)'],['../classHazelnp_1_1StringTools.html#afe626a56fa486afcb0e4c01d3c1ccb35',1,'Hazelnp::StringTools::SplitString(const std::string &str, const std::string &delimiter)']]], - ['string_85',['STRING',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949',1,'Hazelnp']]], - ['stringtools_86',['StringTools',['../classHazelnp_1_1StringTools.html',1,'Hazelnp']]], - ['stringtools_2ecpp_87',['StringTools.cpp',['../StringTools_8cpp.html',1,'']]], - ['stringtools_2eh_88',['StringTools.h',['../StringTools_8h.html',1,'']]], - ['stringvalue_89',['StringValue',['../classHazelnp_1_1StringValue.html',1,'Hazelnp::StringValue'],['../classHazelnp_1_1StringValue.html#a24dad2deec92b51bf60a11400cc8c204',1,'Hazelnp::StringValue::StringValue()']]], - ['stringvalue_2ecpp_90',['StringValue.cpp',['../StringValue_8cpp.html',1,'']]], - ['stringvalue_2eh_91',['StringValue.h',['../StringValue_8h.html',1,'']]] + ['setbriefdescription_89',['SetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a037f84b32c7a2420c387dd46445291ac',1,'Hazelnp::Hazelnupp']]], + ['setcatchhelp_90',['SetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a60e0a51cd92014a87e44322158e45872',1,'Hazelnp::Hazelnupp']]], + ['setcrashonfail_91',['SetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e',1,'Hazelnp::Hazelnupp']]], + ['splitstring_92',['SplitString',['../classHazelnp_1_1StringTools.html#a7cd6606ef06170fab363024e457f1f16',1,'Hazelnp::StringTools::SplitString(const std::string &str, const char delimiter)'],['../classHazelnp_1_1StringTools.html#afe626a56fa486afcb0e4c01d3c1ccb35',1,'Hazelnp::StringTools::SplitString(const std::string &str, const std::string &delimiter)']]], + ['string_93',['STRING',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949',1,'Hazelnp']]], + ['stringtools_94',['StringTools',['../classHazelnp_1_1StringTools.html',1,'Hazelnp']]], + ['stringtools_2ecpp_95',['StringTools.cpp',['../StringTools_8cpp.html',1,'']]], + ['stringtools_2eh_96',['StringTools.h',['../StringTools_8h.html',1,'']]], + ['stringvalue_97',['StringValue',['../classHazelnp_1_1StringValue.html',1,'Hazelnp::StringValue'],['../classHazelnp_1_1StringValue.html#a24dad2deec92b51bf60a11400cc8c204',1,'Hazelnp::StringValue::StringValue()']]], + ['stringvalue_2ecpp_98',['StringValue.cpp',['../StringValue_8cpp.html',1,'']]], + ['stringvalue_2eh_99',['StringValue.h',['../StringValue_8h.html',1,'']]] ]; diff --git a/docs/search/all_e.js b/docs/search/all_e.js index d9fe519..244d5d3 100644 --- a/docs/search/all_e.js +++ b/docs/search/all_e.js @@ -1,6 +1,6 @@ var searchData= [ - ['tolower_92',['ToLower',['../classHazelnp_1_1StringTools.html#a67edf755685f59b51f7416d9e4f6e2bd',1,'Hazelnp::StringTools']]], - ['type_93',['type',['../classHazelnp_1_1Value.html#ae5760a30c237095db595c466372e3c23',1,'Hazelnp::Value']]], - ['typesafety_94',['TypeSafety',['../structHazelnp_1_1ParamConstraint.html#ab85210bb37bbace962ff08fcccdafaf2',1,'Hazelnp::ParamConstraint']]] + ['tolower_100',['ToLower',['../classHazelnp_1_1StringTools.html#a67edf755685f59b51f7416d9e4f6e2bd',1,'Hazelnp::StringTools']]], + ['type_101',['type',['../classHazelnp_1_1Value.html#ae5760a30c237095db595c466372e3c23',1,'Hazelnp::Value']]], + ['typesafety_102',['TypeSafety',['../structHazelnp_1_1ParamConstraint.html#a15a860c63388ea3164e3d7b35b352e9a',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/all_f.js b/docs/search/all_f.js index 8233a3c..5977308 100644 --- a/docs/search/all_f.js +++ b/docs/search/all_f.js @@ -1,10 +1,10 @@ var searchData= [ - ['value_95',['Value',['../classHazelnp_1_1Value.html',1,'Hazelnp::Value'],['../classHazelnp_1_1Value.html#a8455d65bb2d939e850d6772dfbf8bfec',1,'Hazelnp::Value::Value()']]], - ['value_2ecpp_96',['Value.cpp',['../Value_8cpp.html',1,'']]], - ['value_2eh_97',['Value.h',['../Value_8h.html',1,'']]], - ['void_98',['VOID',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb',1,'Hazelnp']]], - ['voidvalue_99',['VoidValue',['../classHazelnp_1_1VoidValue.html',1,'Hazelnp::VoidValue'],['../classHazelnp_1_1VoidValue.html#a75abf334b7f55cd149d2bb1962f2d8f1',1,'Hazelnp::VoidValue::VoidValue()']]], - ['voidvalue_2ecpp_100',['VoidValue.cpp',['../VoidValue_8cpp.html',1,'']]], - ['voidvalue_2eh_101',['VoidValue.h',['../VoidValue_8h.html',1,'']]] + ['value_103',['Value',['../classHazelnp_1_1Value.html',1,'Hazelnp::Value'],['../classHazelnp_1_1Value.html#a8455d65bb2d939e850d6772dfbf8bfec',1,'Hazelnp::Value::Value()']]], + ['value_2ecpp_104',['Value.cpp',['../Value_8cpp.html',1,'']]], + ['value_2eh_105',['Value.h',['../Value_8h.html',1,'']]], + ['void_106',['VOID',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb',1,'Hazelnp']]], + ['voidvalue_107',['VoidValue',['../classHazelnp_1_1VoidValue.html',1,'Hazelnp::VoidValue'],['../classHazelnp_1_1VoidValue.html#a75abf334b7f55cd149d2bb1962f2d8f1',1,'Hazelnp::VoidValue::VoidValue()']]], + ['voidvalue_2ecpp_108',['VoidValue.cpp',['../VoidValue_8cpp.html',1,'']]], + ['voidvalue_2eh_109',['VoidValue.h',['../VoidValue_8h.html',1,'']]] ]; diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js index 473bf09..37a7664 100644 --- a/docs/search/classes_0.js +++ b/docs/search/classes_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['floatvalue_112',['FloatValue',['../classHazelnp_1_1FloatValue.html',1,'Hazelnp']]] + ['floatvalue_120',['FloatValue',['../classHazelnp_1_1FloatValue.html',1,'Hazelnp']]] ]; diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js index 442954b..1f46043 100644 --- a/docs/search/classes_1.js +++ b/docs/search/classes_1.js @@ -1,10 +1,10 @@ var searchData= [ - ['hazelnupp_113',['Hazelnupp',['../classHazelnp_1_1Hazelnupp.html',1,'Hazelnp']]], - ['hazelnuppconstraintexception_114',['HazelnuppConstraintException',['../classHazelnp_1_1HazelnuppConstraintException.html',1,'Hazelnp']]], - ['hazelnuppconstraintmissingvalue_115',['HazelnuppConstraintMissingValue',['../classHazelnp_1_1HazelnuppConstraintMissingValue.html',1,'Hazelnp']]], - ['hazelnuppconstrainttypemissmatch_116',['HazelnuppConstraintTypeMissmatch',['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html',1,'Hazelnp']]], - ['hazelnuppexception_117',['HazelnuppException',['../classHazelnp_1_1HazelnuppException.html',1,'Hazelnp']]], - ['hazelnuppinvalidkeyexception_118',['HazelnuppInvalidKeyException',['../classHazelnp_1_1HazelnuppInvalidKeyException.html',1,'Hazelnp']]], - ['hazelnuppvaluenotconvertibleexception_119',['HazelnuppValueNotConvertibleException',['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html',1,'Hazelnp']]] + ['hazelnupp_121',['Hazelnupp',['../classHazelnp_1_1Hazelnupp.html',1,'Hazelnp']]], + ['hazelnuppconstraintexception_122',['HazelnuppConstraintException',['../classHazelnp_1_1HazelnuppConstraintException.html',1,'Hazelnp']]], + ['hazelnuppconstraintmissingvalue_123',['HazelnuppConstraintMissingValue',['../classHazelnp_1_1HazelnuppConstraintMissingValue.html',1,'Hazelnp']]], + ['hazelnuppconstrainttypemissmatch_124',['HazelnuppConstraintTypeMissmatch',['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html',1,'Hazelnp']]], + ['hazelnuppexception_125',['HazelnuppException',['../classHazelnp_1_1HazelnuppException.html',1,'Hazelnp']]], + ['hazelnuppinvalidkeyexception_126',['HazelnuppInvalidKeyException',['../classHazelnp_1_1HazelnuppInvalidKeyException.html',1,'Hazelnp']]], + ['hazelnuppvaluenotconvertibleexception_127',['HazelnuppValueNotConvertibleException',['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html',1,'Hazelnp']]] ]; diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js index 953171f..87f0550 100644 --- a/docs/search/classes_2.js +++ b/docs/search/classes_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['intvalue_120',['IntValue',['../classHazelnp_1_1IntValue.html',1,'Hazelnp']]] + ['intvalue_128',['IntValue',['../classHazelnp_1_1IntValue.html',1,'Hazelnp']]] ]; diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js index 2ba2b6f..55f65e6 100644 --- a/docs/search/classes_3.js +++ b/docs/search/classes_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['listvalue_121',['ListValue',['../classHazelnp_1_1ListValue.html',1,'Hazelnp']]] + ['listvalue_129',['ListValue',['../classHazelnp_1_1ListValue.html',1,'Hazelnp']]] ]; diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js index 11bc47c..3925399 100644 --- a/docs/search/classes_4.js +++ b/docs/search/classes_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['paramconstraint_122',['ParamConstraint',['../structHazelnp_1_1ParamConstraint.html',1,'Hazelnp']]], - ['parameter_123',['Parameter',['../classHazelnp_1_1Parameter.html',1,'Hazelnp']]] + ['paramconstraint_130',['ParamConstraint',['../structHazelnp_1_1ParamConstraint.html',1,'Hazelnp']]], + ['parameter_131',['Parameter',['../classHazelnp_1_1Parameter.html',1,'Hazelnp']]] ]; diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js index 5a5cb24..6cd311e 100644 --- a/docs/search/classes_5.js +++ b/docs/search/classes_5.js @@ -1,5 +1,5 @@ var searchData= [ - ['stringtools_124',['StringTools',['../classHazelnp_1_1StringTools.html',1,'Hazelnp']]], - ['stringvalue_125',['StringValue',['../classHazelnp_1_1StringValue.html',1,'Hazelnp']]] + ['stringtools_132',['StringTools',['../classHazelnp_1_1StringTools.html',1,'Hazelnp']]], + ['stringvalue_133',['StringValue',['../classHazelnp_1_1StringValue.html',1,'Hazelnp']]] ]; diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js index b263242..8822def 100644 --- a/docs/search/classes_6.js +++ b/docs/search/classes_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['value_126',['Value',['../classHazelnp_1_1Value.html',1,'Hazelnp']]], - ['voidvalue_127',['VoidValue',['../classHazelnp_1_1VoidValue.html',1,'Hazelnp']]] + ['value_134',['Value',['../classHazelnp_1_1Value.html',1,'Hazelnp']]], + ['voidvalue_135',['VoidValue',['../classHazelnp_1_1VoidValue.html',1,'Hazelnp']]] ]; diff --git a/docs/search/enums_0.js b/docs/search/enums_0.js index 11faafd..e3f90f8 100644 --- a/docs/search/enums_0.js +++ b/docs/search/enums_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['data_5ftype_232',['DATA_TYPE',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803f',1,'Hazelnp']]] + ['data_5ftype_247',['DATA_TYPE',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803f',1,'Hazelnp']]] ]; diff --git a/docs/search/enumvalues_0.js b/docs/search/enumvalues_0.js index 6f3a295..e6820a0 100644 --- a/docs/search/enumvalues_0.js +++ b/docs/search/enumvalues_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['float_233',['FLOAT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6',1,'Hazelnp']]] + ['float_248',['FLOAT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6',1,'Hazelnp']]] ]; diff --git a/docs/search/enumvalues_1.js b/docs/search/enumvalues_1.js index b78572e..15ba4d6 100644 --- a/docs/search/enumvalues_1.js +++ b/docs/search/enumvalues_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['int_234',['INT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92',1,'Hazelnp']]] + ['int_249',['INT',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92',1,'Hazelnp']]] ]; diff --git a/docs/search/enumvalues_2.js b/docs/search/enumvalues_2.js index 476318b..23107b6 100644 --- a/docs/search/enumvalues_2.js +++ b/docs/search/enumvalues_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['list_235',['LIST',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a',1,'Hazelnp']]] + ['list_250',['LIST',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a',1,'Hazelnp']]] ]; diff --git a/docs/search/enumvalues_3.js b/docs/search/enumvalues_3.js index 36d50c8..633f62a 100644 --- a/docs/search/enumvalues_3.js +++ b/docs/search/enumvalues_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['string_236',['STRING',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949',1,'Hazelnp']]] + ['string_251',['STRING',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949',1,'Hazelnp']]] ]; diff --git a/docs/search/enumvalues_4.js b/docs/search/enumvalues_4.js index 2c69384..02400b8 100644 --- a/docs/search/enumvalues_4.js +++ b/docs/search/enumvalues_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['void_237',['VOID',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb',1,'Hazelnp']]] + ['void_252',['VOID',['../namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb',1,'Hazelnp']]] ]; diff --git a/docs/search/files_0.js b/docs/search/files_0.js index 96447d3..c762755 100644 --- a/docs/search/files_0.js +++ b/docs/search/files_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['datatype_2eh_129',['DataType.h',['../DataType_8h.html',1,'']]] + ['datatype_2eh_138',['DataType.h',['../DataType_8h.html',1,'']]] ]; diff --git a/docs/search/files_1.js b/docs/search/files_1.js index 7235f2f..2c4871f 100644 --- a/docs/search/files_1.js +++ b/docs/search/files_1.js @@ -1,5 +1,5 @@ var searchData= [ - ['floatvalue_2ecpp_130',['FloatValue.cpp',['../FloatValue_8cpp.html',1,'']]], - ['floatvalue_2eh_131',['FloatValue.h',['../FloatValue_8h.html',1,'']]] + ['floatvalue_2ecpp_139',['FloatValue.cpp',['../FloatValue_8cpp.html',1,'']]], + ['floatvalue_2eh_140',['FloatValue.h',['../FloatValue_8h.html',1,'']]] ]; diff --git a/docs/search/files_2.js b/docs/search/files_2.js index 5f612a9..2f6e29a 100644 --- a/docs/search/files_2.js +++ b/docs/search/files_2.js @@ -1,7 +1,7 @@ var searchData= [ - ['hazelnupp_2ecpp_132',['Hazelnupp.cpp',['../Hazelnupp_8cpp.html',1,'']]], - ['hazelnupp_2eh_133',['Hazelnupp.h',['../Hazelnupp_8h.html',1,'']]], - ['hazelnupp_2evcxproj_2efilelistabsolute_2etxt_134',['Hazelnupp.vcxproj.FileListAbsolute.txt',['../Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)']]], - ['hazelnuppexception_2eh_135',['HazelnuppException.h',['../HazelnuppException_8h.html',1,'']]] + ['hazelnupp_2ecpp_141',['Hazelnupp.cpp',['../Hazelnupp_8cpp.html',1,'']]], + ['hazelnupp_2eh_142',['Hazelnupp.h',['../Hazelnupp_8h.html',1,'']]], + ['hazelnupp_2evcxproj_2efilelistabsolute_2etxt_143',['Hazelnupp.vcxproj.FileListAbsolute.txt',['../Debug_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../Release_2Hazelnupp_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)']]], + ['hazelnuppexception_2eh_144',['HazelnuppException.h',['../HazelnuppException_8h.html',1,'']]] ]; diff --git a/docs/search/files_3.js b/docs/search/files_3.js index be20f98..bfd6c4c 100644 --- a/docs/search/files_3.js +++ b/docs/search/files_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['index_2emd_136',['index.md',['../index_8md.html',1,'']]], - ['intvalue_2ecpp_137',['IntValue.cpp',['../IntValue_8cpp.html',1,'']]], - ['intvalue_2eh_138',['IntValue.h',['../IntValue_8h.html',1,'']]] + ['index_2emd_145',['index.md',['../index_8md.html',1,'']]], + ['intvalue_2ecpp_146',['IntValue.cpp',['../IntValue_8cpp.html',1,'']]], + ['intvalue_2eh_147',['IntValue.h',['../IntValue_8h.html',1,'']]] ]; diff --git a/docs/search/files_4.js b/docs/search/files_4.js index 943dd96..4e124a5 100644 --- a/docs/search/files_4.js +++ b/docs/search/files_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['listvalue_2ecpp_139',['ListValue.cpp',['../ListValue_8cpp.html',1,'']]], - ['listvalue_2eh_140',['ListValue.h',['../ListValue_8h.html',1,'']]] + ['listvalue_2ecpp_148',['ListValue.cpp',['../ListValue_8cpp.html',1,'']]], + ['listvalue_2eh_149',['ListValue.h',['../ListValue_8h.html',1,'']]] ]; diff --git a/docs/search/files_5.js b/docs/search/files_5.js index 1fcb5fe..08d0d37 100644 --- a/docs/search/files_5.js +++ b/docs/search/files_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['main_2ecpp_141',['main.cpp',['../main_8cpp.html',1,'']]] + ['main_2ecpp_150',['main.cpp',['../main_8cpp.html',1,'']]] ]; diff --git a/docs/search/files_6.js b/docs/search/files_6.js index d041cb9..1224dfd 100644 --- a/docs/search/files_6.js +++ b/docs/search/files_6.js @@ -1,6 +1,7 @@ var searchData= [ - ['paramconstraint_2eh_142',['ParamConstraint.h',['../ParamConstraint_8h.html',1,'']]], - ['parameter_2ecpp_143',['Parameter.cpp',['../Parameter_8cpp.html',1,'']]], - ['parameter_2eh_144',['Parameter.h',['../Parameter_8h.html',1,'']]] + ['paramconstraint_2eh_151',['ParamConstraint.h',['../ParamConstraint_8h.html',1,'']]], + ['parameter_2ecpp_152',['Parameter.cpp',['../Parameter_8cpp.html',1,'']]], + ['parameter_2eh_153',['Parameter.h',['../Parameter_8h.html',1,'']]], + ['placeholders_2eh_154',['Placeholders.h',['../Placeholders_8h.html',1,'']]] ]; diff --git a/docs/search/files_7.js b/docs/search/files_7.js index 13f983e..4629d05 100644 --- a/docs/search/files_7.js +++ b/docs/search/files_7.js @@ -1,7 +1,7 @@ var searchData= [ - ['stringtools_2ecpp_145',['StringTools.cpp',['../StringTools_8cpp.html',1,'']]], - ['stringtools_2eh_146',['StringTools.h',['../StringTools_8h.html',1,'']]], - ['stringvalue_2ecpp_147',['StringValue.cpp',['../StringValue_8cpp.html',1,'']]], - ['stringvalue_2eh_148',['StringValue.h',['../StringValue_8h.html',1,'']]] + ['stringtools_2ecpp_155',['StringTools.cpp',['../StringTools_8cpp.html',1,'']]], + ['stringtools_2eh_156',['StringTools.h',['../StringTools_8h.html',1,'']]], + ['stringvalue_2ecpp_157',['StringValue.cpp',['../StringValue_8cpp.html',1,'']]], + ['stringvalue_2eh_158',['StringValue.h',['../StringValue_8h.html',1,'']]] ]; diff --git a/docs/search/files_8.js b/docs/search/files_8.js index a839339..13f5587 100644 --- a/docs/search/files_8.js +++ b/docs/search/files_8.js @@ -1,7 +1,7 @@ var searchData= [ - ['value_2ecpp_149',['Value.cpp',['../Value_8cpp.html',1,'']]], - ['value_2eh_150',['Value.h',['../Value_8h.html',1,'']]], - ['voidvalue_2ecpp_151',['VoidValue.cpp',['../VoidValue_8cpp.html',1,'']]], - ['voidvalue_2eh_152',['VoidValue.h',['../VoidValue_8h.html',1,'']]] + ['value_2ecpp_159',['Value.cpp',['../Value_8cpp.html',1,'']]], + ['value_2eh_160',['Value.h',['../Value_8h.html',1,'']]], + ['voidvalue_2ecpp_161',['VoidValue.cpp',['../VoidValue_8cpp.html',1,'']]], + ['voidvalue_2eh_162',['VoidValue.h',['../VoidValue_8h.html',1,'']]] ]; diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js index 2c77d26..c3f0370 100644 --- a/docs/search/functions_0.js +++ b/docs/search/functions_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['addvalue_153',['AddValue',['../classHazelnp_1_1ListValue.html#af8787d266aa353d3f96e2c76cce76c41',1,'Hazelnp::ListValue']]] + ['addvalue_163',['AddValue',['../classHazelnp_1_1ListValue.html#af8787d266aa353d3f96e2c76cce76c41',1,'Hazelnp::ListValue']]] ]; diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js index 31ada86..26a2a00 100644 --- a/docs/search/functions_1.js +++ b/docs/search/functions_1.js @@ -1,7 +1,10 @@ var searchData= [ - ['clearabbreviations_154',['ClearAbbreviations',['../classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d',1,'Hazelnp::Hazelnupp']]], - ['clearconstraints_155',['ClearConstraints',['../classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809',1,'Hazelnp::Hazelnupp']]], - ['cleardescription_156',['ClearDescription',['../classHazelnp_1_1Hazelnupp.html#a8490e0b10feee0b815c043e7cad454cb',1,'Hazelnp::Hazelnupp']]], - ['contains_157',['Contains',['../classHazelnp_1_1StringTools.html#aec1abd8b22146c7a9ebeb6a94d6af5ee',1,'Hazelnp::StringTools']]] + ['clearabbreviation_164',['ClearAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a05d1decbb08d1f9368bc9a0d3dfd6398',1,'Hazelnp::Hazelnupp']]], + ['clearabbreviations_165',['ClearAbbreviations',['../classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d',1,'Hazelnp::Hazelnupp']]], + ['clearconstraint_166',['ClearConstraint',['../classHazelnp_1_1Hazelnupp.html#a63d6bdfc0d6255b5d663f3a786077eb4',1,'Hazelnp::Hazelnupp']]], + ['clearconstraints_167',['ClearConstraints',['../classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809',1,'Hazelnp::Hazelnupp']]], + ['cleardescription_168',['ClearDescription',['../classHazelnp_1_1Hazelnupp.html#a26eaac65949072b659531444d32c4cbf',1,'Hazelnp::Hazelnupp']]], + ['cleardescriptions_169',['ClearDescriptions',['../classHazelnp_1_1Hazelnupp.html#ae266cfb3526b9223fc05beb01646fb42',1,'Hazelnp::Hazelnupp']]], + ['contains_170',['Contains',['../classHazelnp_1_1StringTools.html#aec1abd8b22146c7a9ebeb6a94d6af5ee',1,'Hazelnp::StringTools']]] ]; diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js index 18c24a1..7442b57 100644 --- a/docs/search/functions_10.js +++ b/docs/search/functions_10.js @@ -1,4 +1,4 @@ var searchData= [ - ['what_216',['What',['../classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e',1,'Hazelnp::HazelnuppException']]] + ['what_231',['What',['../classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e',1,'Hazelnp::HazelnuppException']]] ]; diff --git a/docs/search/functions_11.js b/docs/search/functions_11.js index 001a12e..3e0f3c3 100644 --- a/docs/search/functions_11.js +++ b/docs/search/functions_11.js @@ -1,11 +1,11 @@ var searchData= [ - ['_7efloatvalue_217',['~FloatValue',['../classHazelnp_1_1FloatValue.html#a02e61e453c3e8e32d4d527799c11fd4a',1,'Hazelnp::FloatValue']]], - ['_7ehazelnupp_218',['~Hazelnupp',['../classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be',1,'Hazelnp::Hazelnupp']]], - ['_7eintvalue_219',['~IntValue',['../classHazelnp_1_1IntValue.html#af69f25847b0666f9d6c1bb1fed18d917',1,'Hazelnp::IntValue']]], - ['_7elistvalue_220',['~ListValue',['../classHazelnp_1_1ListValue.html#a91f1450f299d46b3301774a6b4eb6c18',1,'Hazelnp::ListValue']]], - ['_7eparameter_221',['~Parameter',['../classHazelnp_1_1Parameter.html#a6e2ade42a712f1d3675653329266e42d',1,'Hazelnp::Parameter']]], - ['_7estringvalue_222',['~StringValue',['../classHazelnp_1_1StringValue.html#a5176062e2110d121466a6855fdc65d6d',1,'Hazelnp::StringValue']]], - ['_7evalue_223',['~Value',['../classHazelnp_1_1Value.html#a977dea61ee5b00b6c6d77ad6ad2c8d4c',1,'Hazelnp::Value']]], - ['_7evoidvalue_224',['~VoidValue',['../classHazelnp_1_1VoidValue.html#a6024b40919c3a6acea92be0439be2db0',1,'Hazelnp::VoidValue']]] + ['_7efloatvalue_232',['~FloatValue',['../classHazelnp_1_1FloatValue.html#a02e61e453c3e8e32d4d527799c11fd4a',1,'Hazelnp::FloatValue']]], + ['_7ehazelnupp_233',['~Hazelnupp',['../classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be',1,'Hazelnp::Hazelnupp']]], + ['_7eintvalue_234',['~IntValue',['../classHazelnp_1_1IntValue.html#af69f25847b0666f9d6c1bb1fed18d917',1,'Hazelnp::IntValue']]], + ['_7elistvalue_235',['~ListValue',['../classHazelnp_1_1ListValue.html#a91f1450f299d46b3301774a6b4eb6c18',1,'Hazelnp::ListValue']]], + ['_7eparameter_236',['~Parameter',['../classHazelnp_1_1Parameter.html#a6e2ade42a712f1d3675653329266e42d',1,'Hazelnp::Parameter']]], + ['_7estringvalue_237',['~StringValue',['../classHazelnp_1_1StringValue.html#a5176062e2110d121466a6855fdc65d6d',1,'Hazelnp::StringValue']]], + ['_7evalue_238',['~Value',['../classHazelnp_1_1Value.html#a977dea61ee5b00b6c6d77ad6ad2c8d4c',1,'Hazelnp::Value']]], + ['_7evoidvalue_239',['~VoidValue',['../classHazelnp_1_1VoidValue.html#a6024b40919c3a6acea92be0439be2db0',1,'Hazelnp::VoidValue']]] ]; diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js index 050bbda..abf5c3a 100644 --- a/docs/search/functions_2.js +++ b/docs/search/functions_2.js @@ -1,5 +1,5 @@ var searchData= [ - ['datatypetostring_158',['DataTypeToString',['../namespaceHazelnp.html#a7fb1e5ad9e2ecb6c0025beb19f11621b',1,'Hazelnp']]], - ['deepcopy_159',['Deepcopy',['../classHazelnp_1_1FloatValue.html#ab071916339a0d5a266d821ebbc8f12b0',1,'Hazelnp::FloatValue::Deepcopy()'],['../classHazelnp_1_1IntValue.html#aa599004242b27f8f3e246b88742b034e',1,'Hazelnp::IntValue::Deepcopy()'],['../classHazelnp_1_1ListValue.html#a51c89ff315026b03d908345c6f58169d',1,'Hazelnp::ListValue::Deepcopy()'],['../classHazelnp_1_1StringValue.html#a1952487a786fb53cb0b9aefdb3367268',1,'Hazelnp::StringValue::Deepcopy()'],['../classHazelnp_1_1Value.html#aec9bc16f1630734c79bc69e916622dc6',1,'Hazelnp::Value::Deepcopy()'],['../classHazelnp_1_1VoidValue.html#ac36e85add840057659ec24484548165f',1,'Hazelnp::VoidValue::Deepcopy()']]] + ['datatypetostring_171',['DataTypeToString',['../namespaceHazelnp.html#a7fb1e5ad9e2ecb6c0025beb19f11621b',1,'Hazelnp']]], + ['deepcopy_172',['Deepcopy',['../classHazelnp_1_1FloatValue.html#ab071916339a0d5a266d821ebbc8f12b0',1,'Hazelnp::FloatValue::Deepcopy()'],['../classHazelnp_1_1IntValue.html#aa599004242b27f8f3e246b88742b034e',1,'Hazelnp::IntValue::Deepcopy()'],['../classHazelnp_1_1ListValue.html#a51c89ff315026b03d908345c6f58169d',1,'Hazelnp::ListValue::Deepcopy()'],['../classHazelnp_1_1StringValue.html#a1952487a786fb53cb0b9aefdb3367268',1,'Hazelnp::StringValue::Deepcopy()'],['../classHazelnp_1_1Value.html#aec9bc16f1630734c79bc69e916622dc6',1,'Hazelnp::Value::Deepcopy()'],['../classHazelnp_1_1VoidValue.html#ac36e85add840057659ec24484548165f',1,'Hazelnp::VoidValue::Deepcopy()']]] ]; diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js index 1c752d8..a9c1686 100644 --- a/docs/search/functions_3.js +++ b/docs/search/functions_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['floatvalue_160',['FloatValue',['../classHazelnp_1_1FloatValue.html#a6bb35564e3331a3feb57b08caad0df44',1,'Hazelnp::FloatValue']]] + ['floatvalue_173',['FloatValue',['../classHazelnp_1_1FloatValue.html#a6bb35564e3331a3feb57b08caad0df44',1,'Hazelnp::FloatValue']]] ]; diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js index f9448a7..faf0450 100644 --- a/docs/search/functions_4.js +++ b/docs/search/functions_4.js @@ -1,19 +1,20 @@ var searchData= [ - ['generatedocumentation_161',['GenerateDocumentation',['../classHazelnp_1_1Hazelnupp.html#a7b1bf5e700d8a0d8e90c5750e54749de',1,'Hazelnp::Hazelnupp']]], - ['getabbreviation_162',['GetAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5',1,'Hazelnp::Hazelnupp']]], - ['getasosstring_163',['GetAsOsString',['../classHazelnp_1_1FloatValue.html#a6c9a4b70a7618252f56d9062c483531c',1,'Hazelnp::FloatValue::GetAsOsString()'],['../classHazelnp_1_1IntValue.html#a7d7dbda9a051084600d3eabdac96ee45',1,'Hazelnp::IntValue::GetAsOsString()'],['../classHazelnp_1_1ListValue.html#a5b1f8af329e48c5469fee16634b7889c',1,'Hazelnp::ListValue::GetAsOsString()'],['../classHazelnp_1_1StringValue.html#a71869ee46b88a3cbb9571f481f0c216d',1,'Hazelnp::StringValue::GetAsOsString()'],['../classHazelnp_1_1Value.html#ae1fdc694ed1c2b3080ad3929efda0a0e',1,'Hazelnp::Value::GetAsOsString()'],['../classHazelnp_1_1VoidValue.html#a44b1917d9ba41ee91e2131432e01ec90',1,'Hazelnp::VoidValue::GetAsOsString()']]], - ['getbriefdescription_164',['GetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a1d32c3047a8c58650476d1ae7e9fb582',1,'Hazelnp::Hazelnupp']]], - ['getcatchhelp_165',['GetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a05a3d112bcc00cdeade76f3643ba9e94',1,'Hazelnp::Hazelnupp']]], - ['getcrashonfail_166',['GetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7',1,'Hazelnp::Hazelnupp']]], - ['getdatatype_167',['GetDataType',['../classHazelnp_1_1Value.html#adbb80bf6d455a316e6e5103353429993',1,'Hazelnp::Value']]], - ['getdescription_168',['GetDescription',['../classHazelnp_1_1Hazelnupp.html#a6637dc4b78871d7ecba1f2e1c8c28fb0',1,'Hazelnp::Hazelnupp']]], - ['getexecutablename_169',['GetExecutableName',['../classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469',1,'Hazelnp::Hazelnupp']]], - ['getfloat32_170',['GetFloat32',['../classHazelnp_1_1FloatValue.html#a1653ab3f4fa1700cf1b618ac6552ea81',1,'Hazelnp::FloatValue::GetFloat32()'],['../classHazelnp_1_1IntValue.html#ad0734e4cf67bac0bcc58251a4b3e56c4',1,'Hazelnp::IntValue::GetFloat32()'],['../classHazelnp_1_1ListValue.html#a637fec02ed7f7325554e494fc7cd4e86',1,'Hazelnp::ListValue::GetFloat32()'],['../classHazelnp_1_1StringValue.html#a31fc4d2517a7454c1e9f329df2f14be7',1,'Hazelnp::StringValue::GetFloat32()'],['../classHazelnp_1_1Value.html#a64eeb2943ccea6e16ce4e6f53a6e9b6d',1,'Hazelnp::Value::GetFloat32()'],['../classHazelnp_1_1VoidValue.html#a6d39d2983e54e1a407c66e303273aa48',1,'Hazelnp::VoidValue::GetFloat32()']]], - ['getfloat64_171',['GetFloat64',['../classHazelnp_1_1FloatValue.html#add33b370ef691ccb2f0957d0fe4ef6f9',1,'Hazelnp::FloatValue::GetFloat64()'],['../classHazelnp_1_1IntValue.html#a5ceb2030e8a2a665953fdd4f1715e6a5',1,'Hazelnp::IntValue::GetFloat64()'],['../classHazelnp_1_1ListValue.html#a571178db1c9d23f6c685ea8898dbb60e',1,'Hazelnp::ListValue::GetFloat64()'],['../classHazelnp_1_1StringValue.html#a74bedb828c901a4895062f62303b9653',1,'Hazelnp::StringValue::GetFloat64()'],['../classHazelnp_1_1Value.html#af645b9d78970d102360be37fc18e9e8a',1,'Hazelnp::Value::GetFloat64()'],['../classHazelnp_1_1VoidValue.html#a18b6f0d697c5f9286372a05927e4759c',1,'Hazelnp::VoidValue::GetFloat64()']]], - ['getint32_172',['GetInt32',['../classHazelnp_1_1FloatValue.html#a565741e80cd99a4d2af861ddc3c2dc99',1,'Hazelnp::FloatValue::GetInt32()'],['../classHazelnp_1_1IntValue.html#a163f21536fa49491aa0ae03c8091344a',1,'Hazelnp::IntValue::GetInt32()'],['../classHazelnp_1_1ListValue.html#a565c2b86fcfb3a13de29e59d95a358e7',1,'Hazelnp::ListValue::GetInt32()'],['../classHazelnp_1_1StringValue.html#ac8b53a7792ff1ed048722e2e404f3e6b',1,'Hazelnp::StringValue::GetInt32()'],['../classHazelnp_1_1Value.html#a2cb73333bdeca657dfbf6c8b2e50a5ef',1,'Hazelnp::Value::GetInt32()'],['../classHazelnp_1_1VoidValue.html#a5b7f50c390ef8f3636ba211a72a78065',1,'Hazelnp::VoidValue::GetInt32()']]], - ['getint64_173',['GetInt64',['../classHazelnp_1_1FloatValue.html#a762520d504d4564c48cf3bbefbb0f183',1,'Hazelnp::FloatValue::GetInt64()'],['../classHazelnp_1_1IntValue.html#ae0643023dfd56eafe2e3da5a4ba13080',1,'Hazelnp::IntValue::GetInt64()'],['../classHazelnp_1_1ListValue.html#a9a7a1161ddeb3e56eaafee5f10f75995',1,'Hazelnp::ListValue::GetInt64()'],['../classHazelnp_1_1StringValue.html#aabdc7d681945403d24df6a8fe27948af',1,'Hazelnp::StringValue::GetInt64()'],['../classHazelnp_1_1Value.html#a92d75905211e964cb900bdc868ed12a7',1,'Hazelnp::Value::GetInt64()'],['../classHazelnp_1_1VoidValue.html#a3806945596866f3630dc5426a6b55e58',1,'Hazelnp::VoidValue::GetInt64()']]], - ['getlist_174',['GetList',['../classHazelnp_1_1FloatValue.html#a60b2698f28f1aacac0b67b6453c89fd1',1,'Hazelnp::FloatValue::GetList()'],['../classHazelnp_1_1IntValue.html#acc74ba6070a516a4bcad10bb113d6fa2',1,'Hazelnp::IntValue::GetList()'],['../classHazelnp_1_1ListValue.html#ad578d9088c0375cd9b9c6658e5d9ba1f',1,'Hazelnp::ListValue::GetList()'],['../classHazelnp_1_1StringValue.html#a2b2810350b5eb7e58062ad095320aa69',1,'Hazelnp::StringValue::GetList()'],['../classHazelnp_1_1Value.html#a358092f951e817cd2a878225b5b1c869',1,'Hazelnp::Value::GetList()'],['../classHazelnp_1_1VoidValue.html#aba53ae37d415959b583f33f3e381be16',1,'Hazelnp::VoidValue::GetList()']]], - ['getstring_175',['GetString',['../classHazelnp_1_1FloatValue.html#afd5d078683f410cb9d450c61f12f250d',1,'Hazelnp::FloatValue::GetString()'],['../classHazelnp_1_1IntValue.html#a3631e3b16f010889e942c0c0f72d403c',1,'Hazelnp::IntValue::GetString()'],['../classHazelnp_1_1ListValue.html#aeaf80c07236045a77d72349ebcfc3b89',1,'Hazelnp::ListValue::GetString()'],['../classHazelnp_1_1StringValue.html#a7ed55493cfd25274f8571c1ea45f93e5',1,'Hazelnp::StringValue::GetString()'],['../classHazelnp_1_1Value.html#a1446705c062026f03866d0f452c39501',1,'Hazelnp::Value::GetString()'],['../classHazelnp_1_1VoidValue.html#a5af0c47a873b84226df47a90e63b2acd',1,'Hazelnp::VoidValue::GetString()']]], - ['getvalue_176',['GetValue',['../classHazelnp_1_1FloatValue.html#a2ad79d8bfe75e45120d1fce132a89b8f',1,'Hazelnp::FloatValue::GetValue()'],['../classHazelnp_1_1IntValue.html#a89967cafbdeb21362336067b772808c7',1,'Hazelnp::IntValue::GetValue()'],['../classHazelnp_1_1ListValue.html#a7907ae7433e4011157f1b31dd5339702',1,'Hazelnp::ListValue::GetValue()'],['../classHazelnp_1_1Parameter.html#a4ab8ba022bde4a0175e5ceb8e3a598af',1,'Hazelnp::Parameter::GetValue()'],['../classHazelnp_1_1StringValue.html#a521a573887a3f31718f74e71ff01e86e',1,'Hazelnp::StringValue::GetValue()']]] + ['generatedocumentation_174',['GenerateDocumentation',['../classHazelnp_1_1Hazelnupp.html#a7b1bf5e700d8a0d8e90c5750e54749de',1,'Hazelnp::Hazelnupp']]], + ['getabbreviation_175',['GetAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5',1,'Hazelnp::Hazelnupp']]], + ['getasosstring_176',['GetAsOsString',['../classHazelnp_1_1FloatValue.html#a6c9a4b70a7618252f56d9062c483531c',1,'Hazelnp::FloatValue::GetAsOsString()'],['../classHazelnp_1_1IntValue.html#a7d7dbda9a051084600d3eabdac96ee45',1,'Hazelnp::IntValue::GetAsOsString()'],['../classHazelnp_1_1ListValue.html#a5b1f8af329e48c5469fee16634b7889c',1,'Hazelnp::ListValue::GetAsOsString()'],['../classHazelnp_1_1StringValue.html#a71869ee46b88a3cbb9571f481f0c216d',1,'Hazelnp::StringValue::GetAsOsString()'],['../classHazelnp_1_1Value.html#ae1fdc694ed1c2b3080ad3929efda0a0e',1,'Hazelnp::Value::GetAsOsString()'],['../classHazelnp_1_1VoidValue.html#a44b1917d9ba41ee91e2131432e01ec90',1,'Hazelnp::VoidValue::GetAsOsString()']]], + ['getbriefdescription_177',['GetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a1d32c3047a8c58650476d1ae7e9fb582',1,'Hazelnp::Hazelnupp']]], + ['getcatchhelp_178',['GetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a05a3d112bcc00cdeade76f3643ba9e94',1,'Hazelnp::Hazelnupp']]], + ['getconstraint_179',['GetConstraint',['../classHazelnp_1_1Hazelnupp.html#acaec2780d800113ffc2d72a6b865955c',1,'Hazelnp::Hazelnupp']]], + ['getcrashonfail_180',['GetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7',1,'Hazelnp::Hazelnupp']]], + ['getdatatype_181',['GetDataType',['../classHazelnp_1_1Value.html#adbb80bf6d455a316e6e5103353429993',1,'Hazelnp::Value']]], + ['getdescription_182',['GetDescription',['../classHazelnp_1_1Hazelnupp.html#a300e55438cb0983b02347fdc3653e32c',1,'Hazelnp::Hazelnupp']]], + ['getexecutablename_183',['GetExecutableName',['../classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469',1,'Hazelnp::Hazelnupp']]], + ['getfloat32_184',['GetFloat32',['../classHazelnp_1_1FloatValue.html#a1653ab3f4fa1700cf1b618ac6552ea81',1,'Hazelnp::FloatValue::GetFloat32()'],['../classHazelnp_1_1IntValue.html#ad0734e4cf67bac0bcc58251a4b3e56c4',1,'Hazelnp::IntValue::GetFloat32()'],['../classHazelnp_1_1ListValue.html#a637fec02ed7f7325554e494fc7cd4e86',1,'Hazelnp::ListValue::GetFloat32()'],['../classHazelnp_1_1StringValue.html#a31fc4d2517a7454c1e9f329df2f14be7',1,'Hazelnp::StringValue::GetFloat32()'],['../classHazelnp_1_1Value.html#a64eeb2943ccea6e16ce4e6f53a6e9b6d',1,'Hazelnp::Value::GetFloat32()'],['../classHazelnp_1_1VoidValue.html#a6d39d2983e54e1a407c66e303273aa48',1,'Hazelnp::VoidValue::GetFloat32()']]], + ['getfloat64_185',['GetFloat64',['../classHazelnp_1_1FloatValue.html#add33b370ef691ccb2f0957d0fe4ef6f9',1,'Hazelnp::FloatValue::GetFloat64()'],['../classHazelnp_1_1IntValue.html#a5ceb2030e8a2a665953fdd4f1715e6a5',1,'Hazelnp::IntValue::GetFloat64()'],['../classHazelnp_1_1ListValue.html#a571178db1c9d23f6c685ea8898dbb60e',1,'Hazelnp::ListValue::GetFloat64()'],['../classHazelnp_1_1StringValue.html#a74bedb828c901a4895062f62303b9653',1,'Hazelnp::StringValue::GetFloat64()'],['../classHazelnp_1_1Value.html#af645b9d78970d102360be37fc18e9e8a',1,'Hazelnp::Value::GetFloat64()'],['../classHazelnp_1_1VoidValue.html#a18b6f0d697c5f9286372a05927e4759c',1,'Hazelnp::VoidValue::GetFloat64()']]], + ['getint32_186',['GetInt32',['../classHazelnp_1_1FloatValue.html#a565741e80cd99a4d2af861ddc3c2dc99',1,'Hazelnp::FloatValue::GetInt32()'],['../classHazelnp_1_1IntValue.html#a163f21536fa49491aa0ae03c8091344a',1,'Hazelnp::IntValue::GetInt32()'],['../classHazelnp_1_1ListValue.html#a565c2b86fcfb3a13de29e59d95a358e7',1,'Hazelnp::ListValue::GetInt32()'],['../classHazelnp_1_1StringValue.html#ac8b53a7792ff1ed048722e2e404f3e6b',1,'Hazelnp::StringValue::GetInt32()'],['../classHazelnp_1_1Value.html#a2cb73333bdeca657dfbf6c8b2e50a5ef',1,'Hazelnp::Value::GetInt32()'],['../classHazelnp_1_1VoidValue.html#a5b7f50c390ef8f3636ba211a72a78065',1,'Hazelnp::VoidValue::GetInt32()']]], + ['getint64_187',['GetInt64',['../classHazelnp_1_1FloatValue.html#a762520d504d4564c48cf3bbefbb0f183',1,'Hazelnp::FloatValue::GetInt64()'],['../classHazelnp_1_1IntValue.html#ae0643023dfd56eafe2e3da5a4ba13080',1,'Hazelnp::IntValue::GetInt64()'],['../classHazelnp_1_1ListValue.html#a9a7a1161ddeb3e56eaafee5f10f75995',1,'Hazelnp::ListValue::GetInt64()'],['../classHazelnp_1_1StringValue.html#aabdc7d681945403d24df6a8fe27948af',1,'Hazelnp::StringValue::GetInt64()'],['../classHazelnp_1_1Value.html#a92d75905211e964cb900bdc868ed12a7',1,'Hazelnp::Value::GetInt64()'],['../classHazelnp_1_1VoidValue.html#a3806945596866f3630dc5426a6b55e58',1,'Hazelnp::VoidValue::GetInt64()']]], + ['getlist_188',['GetList',['../classHazelnp_1_1FloatValue.html#a60b2698f28f1aacac0b67b6453c89fd1',1,'Hazelnp::FloatValue::GetList()'],['../classHazelnp_1_1IntValue.html#acc74ba6070a516a4bcad10bb113d6fa2',1,'Hazelnp::IntValue::GetList()'],['../classHazelnp_1_1ListValue.html#ad578d9088c0375cd9b9c6658e5d9ba1f',1,'Hazelnp::ListValue::GetList()'],['../classHazelnp_1_1StringValue.html#a2b2810350b5eb7e58062ad095320aa69',1,'Hazelnp::StringValue::GetList()'],['../classHazelnp_1_1Value.html#a358092f951e817cd2a878225b5b1c869',1,'Hazelnp::Value::GetList()'],['../classHazelnp_1_1VoidValue.html#aba53ae37d415959b583f33f3e381be16',1,'Hazelnp::VoidValue::GetList()']]], + ['getstring_189',['GetString',['../classHazelnp_1_1FloatValue.html#afd5d078683f410cb9d450c61f12f250d',1,'Hazelnp::FloatValue::GetString()'],['../classHazelnp_1_1IntValue.html#a3631e3b16f010889e942c0c0f72d403c',1,'Hazelnp::IntValue::GetString()'],['../classHazelnp_1_1ListValue.html#aeaf80c07236045a77d72349ebcfc3b89',1,'Hazelnp::ListValue::GetString()'],['../classHazelnp_1_1StringValue.html#a7ed55493cfd25274f8571c1ea45f93e5',1,'Hazelnp::StringValue::GetString()'],['../classHazelnp_1_1Value.html#a1446705c062026f03866d0f452c39501',1,'Hazelnp::Value::GetString()'],['../classHazelnp_1_1VoidValue.html#a5af0c47a873b84226df47a90e63b2acd',1,'Hazelnp::VoidValue::GetString()']]], + ['getvalue_190',['GetValue',['../classHazelnp_1_1FloatValue.html#a2ad79d8bfe75e45120d1fce132a89b8f',1,'Hazelnp::FloatValue::GetValue()'],['../classHazelnp_1_1IntValue.html#a89967cafbdeb21362336067b772808c7',1,'Hazelnp::IntValue::GetValue()'],['../classHazelnp_1_1ListValue.html#a7907ae7433e4011157f1b31dd5339702',1,'Hazelnp::ListValue::GetValue()'],['../classHazelnp_1_1Parameter.html#a4ab8ba022bde4a0175e5ceb8e3a598af',1,'Hazelnp::Parameter::GetValue()'],['../classHazelnp_1_1StringValue.html#a521a573887a3f31718f74e71ff01e86e',1,'Hazelnp::StringValue::GetValue()']]] ]; diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js index 4353f93..313817c 100644 --- a/docs/search/functions_5.js +++ b/docs/search/functions_5.js @@ -1,12 +1,13 @@ var searchData= [ - ['hasabbreviation_177',['HasAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200',1,'Hazelnp::Hazelnupp']]], - ['hasparam_178',['HasParam',['../classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040',1,'Hazelnp::Hazelnupp']]], - ['hazelnupp_179',['Hazelnupp',['../classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d',1,'Hazelnp::Hazelnupp::Hazelnupp()'],['../classHazelnp_1_1Hazelnupp.html#a6d14c60f03b571f5f794c3549e75e435',1,'Hazelnp::Hazelnupp::Hazelnupp(const int argc, const char *const *argv)']]], - ['hazelnuppconstraintexception_180',['HazelnuppConstraintException',['../classHazelnp_1_1HazelnuppConstraintException.html#a4d08002a96bf9b3da3c6e931a51960e9',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException()'],['../classHazelnp_1_1HazelnuppConstraintException.html#a944f0e6a384e032a762c5892964e1cc0',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException(const std::string &msg)']]], - ['hazelnuppconstraintmissingvalue_181',['HazelnuppConstraintMissingValue',['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#aad4a7b5573790ddfbe1a453aef71eb10',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue()'],['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#a20563650ba1ee63f23ddb973677dbdda',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue(const std::string &msg)']]], - ['hazelnuppconstrainttypemissmatch_182',['HazelnuppConstraintTypeMissmatch',['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#ab7c9e9afd9d3286e563a7656785242e8',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch()'],['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#a603d91c9af39e53b54e5aa288266cfe4',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch(const std::string &msg)']]], - ['hazelnuppexception_183',['HazelnuppException',['../classHazelnp_1_1HazelnuppException.html#a0b21fd5d4f22e5e677b74eb0acd7c6ff',1,'Hazelnp::HazelnuppException::HazelnuppException()'],['../classHazelnp_1_1HazelnuppException.html#a816f823fe2ebd35076049e33b9f3c05c',1,'Hazelnp::HazelnuppException::HazelnuppException(const std::string &msg)']]], - ['hazelnuppinvalidkeyexception_184',['HazelnuppInvalidKeyException',['../classHazelnp_1_1HazelnuppInvalidKeyException.html#ab23be8f7cb84129fa85ed1e7a0b280a0',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException()'],['../classHazelnp_1_1HazelnuppInvalidKeyException.html#a18a08dc4efe80a378216460db5769891',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException(const std::string &msg)']]], - ['hazelnuppvaluenotconvertibleexception_185',['HazelnuppValueNotConvertibleException',['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a0babee1bb5cec9fdd4abfd86995561f4',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException()'],['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a7ba376cd7fc7edcb934ee0257d4867f2',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException(const std::string &msg)']]] + ['hasabbreviation_191',['HasAbbreviation',['../classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200',1,'Hazelnp::Hazelnupp']]], + ['hasdescription_192',['HasDescription',['../classHazelnp_1_1Hazelnupp.html#aabab94412ff5eecf95b97a4e21eb9cf6',1,'Hazelnp::Hazelnupp']]], + ['hasparam_193',['HasParam',['../classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040',1,'Hazelnp::Hazelnupp']]], + ['hazelnupp_194',['Hazelnupp',['../classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d',1,'Hazelnp::Hazelnupp::Hazelnupp()'],['../classHazelnp_1_1Hazelnupp.html#a6d14c60f03b571f5f794c3549e75e435',1,'Hazelnp::Hazelnupp::Hazelnupp(const int argc, const char *const *argv)']]], + ['hazelnuppconstraintexception_195',['HazelnuppConstraintException',['../classHazelnp_1_1HazelnuppConstraintException.html#a4d08002a96bf9b3da3c6e931a51960e9',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException()'],['../classHazelnp_1_1HazelnuppConstraintException.html#a944f0e6a384e032a762c5892964e1cc0',1,'Hazelnp::HazelnuppConstraintException::HazelnuppConstraintException(const std::string &msg)']]], + ['hazelnuppconstraintmissingvalue_196',['HazelnuppConstraintMissingValue',['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#aad4a7b5573790ddfbe1a453aef71eb10',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue()'],['../classHazelnp_1_1HazelnuppConstraintMissingValue.html#a20563650ba1ee63f23ddb973677dbdda',1,'Hazelnp::HazelnuppConstraintMissingValue::HazelnuppConstraintMissingValue(const std::string &msg)']]], + ['hazelnuppconstrainttypemissmatch_197',['HazelnuppConstraintTypeMissmatch',['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#ab7c9e9afd9d3286e563a7656785242e8',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch()'],['../classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html#a603d91c9af39e53b54e5aa288266cfe4',1,'Hazelnp::HazelnuppConstraintTypeMissmatch::HazelnuppConstraintTypeMissmatch(const std::string &msg)']]], + ['hazelnuppexception_198',['HazelnuppException',['../classHazelnp_1_1HazelnuppException.html#a0b21fd5d4f22e5e677b74eb0acd7c6ff',1,'Hazelnp::HazelnuppException::HazelnuppException()'],['../classHazelnp_1_1HazelnuppException.html#a816f823fe2ebd35076049e33b9f3c05c',1,'Hazelnp::HazelnuppException::HazelnuppException(const std::string &msg)']]], + ['hazelnuppinvalidkeyexception_199',['HazelnuppInvalidKeyException',['../classHazelnp_1_1HazelnuppInvalidKeyException.html#ab23be8f7cb84129fa85ed1e7a0b280a0',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException()'],['../classHazelnp_1_1HazelnuppInvalidKeyException.html#a18a08dc4efe80a378216460db5769891',1,'Hazelnp::HazelnuppInvalidKeyException::HazelnuppInvalidKeyException(const std::string &msg)']]], + ['hazelnuppvaluenotconvertibleexception_200',['HazelnuppValueNotConvertibleException',['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a0babee1bb5cec9fdd4abfd86995561f4',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException()'],['../classHazelnp_1_1HazelnuppValueNotConvertibleException.html#a7ba376cd7fc7edcb934ee0257d4867f2',1,'Hazelnp::HazelnuppValueNotConvertibleException::HazelnuppValueNotConvertibleException(const std::string &msg)']]] ]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js index 9cabdf7..6144912 100644 --- a/docs/search/functions_6.js +++ b/docs/search/functions_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['intvalue_186',['IntValue',['../classHazelnp_1_1IntValue.html#ac1174f807ce2c085f5a24baed4e3c1ba',1,'Hazelnp::IntValue']]], - ['isnumeric_187',['IsNumeric',['../classHazelnp_1_1StringTools.html#a6cd093feaca2d978c23774cf87d86e68',1,'Hazelnp::StringTools']]] + ['intvalue_201',['IntValue',['../classHazelnp_1_1IntValue.html#ac1174f807ce2c085f5a24baed4e3c1ba',1,'Hazelnp::IntValue']]], + ['isnumeric_202',['IsNumeric',['../classHazelnp_1_1StringTools.html#a6cd093feaca2d978c23774cf87d86e68',1,'Hazelnp::StringTools']]] ]; diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js index a67d86e..85602d0 100644 --- a/docs/search/functions_7.js +++ b/docs/search/functions_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['key_188',['Key',['../classHazelnp_1_1Parameter.html#a7acd68ce06eec06ab286b1a062f9c8d6',1,'Hazelnp::Parameter']]] + ['key_203',['Key',['../classHazelnp_1_1Parameter.html#a7acd68ce06eec06ab286b1a062f9c8d6',1,'Hazelnp::Parameter']]] ]; diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js index 72a58c5..e13ee1f 100644 --- a/docs/search/functions_8.js +++ b/docs/search/functions_8.js @@ -1,4 +1,4 @@ var searchData= [ - ['listvalue_189',['ListValue',['../classHazelnp_1_1ListValue.html#a6082aaa506b31496720a168da8ab2708',1,'Hazelnp::ListValue']]] + ['listvalue_204',['ListValue',['../classHazelnp_1_1ListValue.html#a6082aaa506b31496720a168da8ab2708',1,'Hazelnp::ListValue']]] ]; diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js index e8aed3e..6aa0dc4 100644 --- a/docs/search/functions_9.js +++ b/docs/search/functions_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['main_190',['main',['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main.cpp']]] + ['main_205',['main',['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main.cpp']]] ]; diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js index 6718e6e..61a6ef3 100644 --- a/docs/search/functions_a.js +++ b/docs/search/functions_a.js @@ -1,10 +1,10 @@ var searchData= [ - ['operator_20double_191',['operator double',['../classHazelnp_1_1FloatValue.html#ae02de376bbb2b76e0f9d16b1fc4de06d',1,'Hazelnp::FloatValue']]], - ['operator_20int_192',['operator int',['../classHazelnp_1_1IntValue.html#ab30a38c8f58cefd7cbf365c4aeae79bd',1,'Hazelnp::IntValue']]], - ['operator_20long_20double_193',['operator long double',['../classHazelnp_1_1FloatValue.html#ad0d4c589190fbab7e6c4d8fcc130ac1b',1,'Hazelnp::FloatValue']]], - ['operator_20long_20long_20int_194',['operator long long int',['../classHazelnp_1_1IntValue.html#a45b283dae9904ad0643035d3ee5883eb',1,'Hazelnp::IntValue']]], - ['operator_5b_5d_195',['operator[]',['../classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5',1,'Hazelnp::Hazelnupp']]], - ['string_196',['string',['../classHazelnp_1_1StringValue.html#a23449775f14f828d29b115de040a696b',1,'Hazelnp::StringValue']]], - ['vector_3c_20value_20_2a_20_3e_197',['vector< Value * >',['../classHazelnp_1_1ListValue.html#a5d92ff2b9a1fa92fbc303ac4d07765d0',1,'Hazelnp::ListValue']]] + ['operator_20double_206',['operator double',['../classHazelnp_1_1FloatValue.html#ae02de376bbb2b76e0f9d16b1fc4de06d',1,'Hazelnp::FloatValue']]], + ['operator_20int_207',['operator int',['../classHazelnp_1_1IntValue.html#ab30a38c8f58cefd7cbf365c4aeae79bd',1,'Hazelnp::IntValue']]], + ['operator_20long_20double_208',['operator long double',['../classHazelnp_1_1FloatValue.html#ad0d4c589190fbab7e6c4d8fcc130ac1b',1,'Hazelnp::FloatValue']]], + ['operator_20long_20long_20int_209',['operator long long int',['../classHazelnp_1_1IntValue.html#a45b283dae9904ad0643035d3ee5883eb',1,'Hazelnp::IntValue']]], + ['operator_5b_5d_210',['operator[]',['../classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5',1,'Hazelnp::Hazelnupp']]], + ['string_211',['string',['../classHazelnp_1_1StringValue.html#a23449775f14f828d29b115de040a696b',1,'Hazelnp::StringValue']]], + ['vector_3c_20value_20_2a_20_3e_212',['vector< Value * >',['../classHazelnp_1_1ListValue.html#a5d92ff2b9a1fa92fbc303ac4d07765d0',1,'Hazelnp::ListValue']]] ]; diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js index fe6899a..801143d 100644 --- a/docs/search/functions_b.js +++ b/docs/search/functions_b.js @@ -1,7 +1,7 @@ var searchData= [ - ['paramconstraint_198',['ParamConstraint',['../structHazelnp_1_1ParamConstraint.html#afa9e1b4378c9fa1b4a7b5b792c062cbe',1,'Hazelnp::ParamConstraint::ParamConstraint()=default'],['../structHazelnp_1_1ParamConstraint.html#ab2a897c3044ae2d1a05952a804a3675b',1,'Hazelnp::ParamConstraint::ParamConstraint(const std::string &key, bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)']]], - ['parameter_199',['Parameter',['../classHazelnp_1_1Parameter.html#a0c9faefc26cc9d8c886ef71e39e2f90c',1,'Hazelnp::Parameter']]], - ['parse_200',['Parse',['../classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b',1,'Hazelnp::Hazelnupp']]], - ['parsenumber_201',['ParseNumber',['../classHazelnp_1_1StringTools.html#ab661223da5bbbb75039e168409466c82',1,'Hazelnp::StringTools']]] + ['paramconstraint_213',['ParamConstraint',['../structHazelnp_1_1ParamConstraint.html#afa9e1b4378c9fa1b4a7b5b792c062cbe',1,'Hazelnp::ParamConstraint::ParamConstraint()=default'],['../structHazelnp_1_1ParamConstraint.html#aed7cb14a27277bf57b7f2d53065a2406',1,'Hazelnp::ParamConstraint::ParamConstraint(bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)']]], + ['parameter_214',['Parameter',['../classHazelnp_1_1Parameter.html#a0c9faefc26cc9d8c886ef71e39e2f90c',1,'Hazelnp::Parameter']]], + ['parse_215',['Parse',['../classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b',1,'Hazelnp::Hazelnupp']]], + ['parsenumber_216',['ParseNumber',['../classHazelnp_1_1StringTools.html#ab661223da5bbbb75039e168409466c82',1,'Hazelnp::StringTools']]] ]; diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js index e42d11c..7b12d3a 100644 --- a/docs/search/functions_c.js +++ b/docs/search/functions_c.js @@ -1,8 +1,8 @@ var searchData= [ - ['registerabbreviation_202',['RegisterAbbreviation',['../classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124',1,'Hazelnp::Hazelnupp']]], - ['registerconstraints_203',['RegisterConstraints',['../classHazelnp_1_1Hazelnupp.html#a8a3331836b9ea1f920e77f6d332019d5',1,'Hazelnp::Hazelnupp']]], - ['registerdescription_204',['RegisterDescription',['../classHazelnp_1_1Hazelnupp.html#a17883db87e97caad4a0f114f9f850f5e',1,'Hazelnp::Hazelnupp']]], - ['replace_205',['Replace',['../classHazelnp_1_1StringTools.html#a0ca14c1d67833a61955a693f3e40d8b5',1,'Hazelnp::StringTools::Replace(const std::string &str, const char find, const std::string &subst)'],['../classHazelnp_1_1StringTools.html#a1658832ddf1611f83c5848e391d32806',1,'Hazelnp::StringTools::Replace(const std::string &str, const std::string &find, const std::string &subst)']]], - ['require_206',['Require',['../structHazelnp_1_1ParamConstraint.html#afbcc75c428381ab3a292d3f55945eb32',1,'Hazelnp::ParamConstraint']]] + ['registerabbreviation_217',['RegisterAbbreviation',['../classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124',1,'Hazelnp::Hazelnupp']]], + ['registerconstraint_218',['RegisterConstraint',['../classHazelnp_1_1Hazelnupp.html#add731b65fb0741e4fb0b8fc8a601a11d',1,'Hazelnp::Hazelnupp']]], + ['registerdescription_219',['RegisterDescription',['../classHazelnp_1_1Hazelnupp.html#a17883db87e97caad4a0f114f9f850f5e',1,'Hazelnp::Hazelnupp']]], + ['replace_220',['Replace',['../classHazelnp_1_1StringTools.html#a0ca14c1d67833a61955a693f3e40d8b5',1,'Hazelnp::StringTools::Replace(const std::string &str, const char find, const std::string &subst)'],['../classHazelnp_1_1StringTools.html#a1658832ddf1611f83c5848e391d32806',1,'Hazelnp::StringTools::Replace(const std::string &str, const std::string &find, const std::string &subst)']]], + ['require_221',['Require',['../structHazelnp_1_1ParamConstraint.html#a926e12fcb2fd0d031452c4bcc950bd6c',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js index 6467208..f70257c 100644 --- a/docs/search/functions_d.js +++ b/docs/search/functions_d.js @@ -1,8 +1,8 @@ var searchData= [ - ['setbriefdescription_207',['SetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a037f84b32c7a2420c387dd46445291ac',1,'Hazelnp::Hazelnupp']]], - ['setcatchhelp_208',['SetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a60e0a51cd92014a87e44322158e45872',1,'Hazelnp::Hazelnupp']]], - ['setcrashonfail_209',['SetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e',1,'Hazelnp::Hazelnupp']]], - ['splitstring_210',['SplitString',['../classHazelnp_1_1StringTools.html#a7cd6606ef06170fab363024e457f1f16',1,'Hazelnp::StringTools::SplitString(const std::string &str, const char delimiter)'],['../classHazelnp_1_1StringTools.html#afe626a56fa486afcb0e4c01d3c1ccb35',1,'Hazelnp::StringTools::SplitString(const std::string &str, const std::string &delimiter)']]], - ['stringvalue_211',['StringValue',['../classHazelnp_1_1StringValue.html#a24dad2deec92b51bf60a11400cc8c204',1,'Hazelnp::StringValue']]] + ['setbriefdescription_222',['SetBriefDescription',['../classHazelnp_1_1Hazelnupp.html#a037f84b32c7a2420c387dd46445291ac',1,'Hazelnp::Hazelnupp']]], + ['setcatchhelp_223',['SetCatchHelp',['../classHazelnp_1_1Hazelnupp.html#a60e0a51cd92014a87e44322158e45872',1,'Hazelnp::Hazelnupp']]], + ['setcrashonfail_224',['SetCrashOnFail',['../classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e',1,'Hazelnp::Hazelnupp']]], + ['splitstring_225',['SplitString',['../classHazelnp_1_1StringTools.html#a7cd6606ef06170fab363024e457f1f16',1,'Hazelnp::StringTools::SplitString(const std::string &str, const char delimiter)'],['../classHazelnp_1_1StringTools.html#afe626a56fa486afcb0e4c01d3c1ccb35',1,'Hazelnp::StringTools::SplitString(const std::string &str, const std::string &delimiter)']]], + ['stringvalue_226',['StringValue',['../classHazelnp_1_1StringValue.html#a24dad2deec92b51bf60a11400cc8c204',1,'Hazelnp::StringValue']]] ]; diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js index a550002..5cadd76 100644 --- a/docs/search/functions_e.js +++ b/docs/search/functions_e.js @@ -1,5 +1,5 @@ var searchData= [ - ['tolower_212',['ToLower',['../classHazelnp_1_1StringTools.html#a67edf755685f59b51f7416d9e4f6e2bd',1,'Hazelnp::StringTools']]], - ['typesafety_213',['TypeSafety',['../structHazelnp_1_1ParamConstraint.html#ab85210bb37bbace962ff08fcccdafaf2',1,'Hazelnp::ParamConstraint']]] + ['tolower_227',['ToLower',['../classHazelnp_1_1StringTools.html#a67edf755685f59b51f7416d9e4f6e2bd',1,'Hazelnp::StringTools']]], + ['typesafety_228',['TypeSafety',['../structHazelnp_1_1ParamConstraint.html#a15a860c63388ea3164e3d7b35b352e9a',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js index 76e8f5d..9ccadd6 100644 --- a/docs/search/functions_f.js +++ b/docs/search/functions_f.js @@ -1,5 +1,5 @@ var searchData= [ - ['value_214',['Value',['../classHazelnp_1_1Value.html#a8455d65bb2d939e850d6772dfbf8bfec',1,'Hazelnp::Value']]], - ['voidvalue_215',['VoidValue',['../classHazelnp_1_1VoidValue.html#a75abf334b7f55cd149d2bb1962f2d8f1',1,'Hazelnp::VoidValue']]] + ['value_229',['Value',['../classHazelnp_1_1Value.html#a8455d65bb2d939e850d6772dfbf8bfec',1,'Hazelnp::Value']]], + ['voidvalue_230',['VoidValue',['../classHazelnp_1_1VoidValue.html#a75abf334b7f55cd149d2bb1962f2d8f1',1,'Hazelnp::VoidValue']]] ]; diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js index 8c63bed..627e204 100644 --- a/docs/search/namespaces_0.js +++ b/docs/search/namespaces_0.js @@ -1,4 +1,5 @@ var searchData= [ - ['hazelnp_128',['Hazelnp',['../namespaceHazelnp.html',1,'']]] + ['hazelnp_136',['Hazelnp',['../namespaceHazelnp.html',1,'']]], + ['placeholders_137',['Placeholders',['../namespaceHazelnp_1_1Placeholders.html',1,'Hazelnp']]] ]; diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js index 3ac254d..f64124d 100644 --- a/docs/search/pages_0.js +++ b/docs/search/pages_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['hazelnupp_239',['Hazelnupp',['../index.html',1,'']]] + ['hazelnupp_255',['Hazelnupp',['../index.html',1,'']]] ]; diff --git a/docs/search/related_0.js b/docs/search/related_0.js index ff71cf8..5c1b6bb 100644 --- a/docs/search/related_0.js +++ b/docs/search/related_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['operator_3c_3c_238',['operator<<',['../classHazelnp_1_1Parameter.html#a11b3529badcbf99b46262772472495c7',1,'Hazelnp::Parameter::operator<<()'],['../classHazelnp_1_1Value.html#ad29db86c4a2dec5bc8d0006031b07211',1,'Hazelnp::Value::operator<<()']]] + ['hazelnupp_253',['Hazelnupp',['../structHazelnp_1_1ParamConstraint.html#a0356cbb5056c61cac4a065a59002cb76',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/related_1.html b/docs/search/related_1.html new file mode 100644 index 0000000..024707b --- /dev/null +++ b/docs/search/related_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/related_1.js b/docs/search/related_1.js new file mode 100644 index 0000000..f2e54e2 --- /dev/null +++ b/docs/search/related_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3c_3c_254',['operator<<',['../classHazelnp_1_1Parameter.html#a11b3529badcbf99b46262772472495c7',1,'Hazelnp::Parameter::operator<<()'],['../classHazelnp_1_1Value.html#ad29db86c4a2dec5bc8d0006031b07211',1,'Hazelnp::Value::operator<<()']]] +]; diff --git a/docs/search/searchdata.js b/docs/search/searchdata.js index ec500cc..ecfbb18 100644 --- a/docs/search/searchdata.js +++ b/docs/search/searchdata.js @@ -5,10 +5,10 @@ var indexSectionsWithContent = 2: "h", 3: "dfhilmpsv", 4: "acdfghiklmoprstvw~", - 5: "cdkmrtw", + 5: "cdgmrtw", 6: "d", 7: "filsv", - 8: "o", + 8: "ho", 9: "h" }; diff --git a/docs/search/variables_0.js b/docs/search/variables_0.js index 3bf7406..2e56d90 100644 --- a/docs/search/variables_0.js +++ b/docs/search/variables_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['constraintype_225',['constrainType',['../structHazelnp_1_1ParamConstraint.html#a88a4a4c215723259c71853992d09acac',1,'Hazelnp::ParamConstraint']]] + ['constraintype_240',['constrainType',['../structHazelnp_1_1ParamConstraint.html#a88a4a4c215723259c71853992d09acac',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/variables_1.js b/docs/search/variables_1.js index 23f9a70..6c4335f 100644 --- a/docs/search/variables_1.js +++ b/docs/search/variables_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['defaultvalue_226',['defaultValue',['../structHazelnp_1_1ParamConstraint.html#a1d3a627b3a23fe0db3a368e51dbcd5a7',1,'Hazelnp::ParamConstraint']]] + ['defaultvalue_241',['defaultValue',['../structHazelnp_1_1ParamConstraint.html#a1d3a627b3a23fe0db3a368e51dbcd5a7',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/variables_2.js b/docs/search/variables_2.js index 69c2d3e..249e109 100644 --- a/docs/search/variables_2.js +++ b/docs/search/variables_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['key_227',['key',['../structHazelnp_1_1ParamConstraint.html#aac148076c5e0ab91c666f3343c30bd15',1,'Hazelnp::ParamConstraint']]] + ['g_5femptystring_242',['g_emptyString',['../namespaceHazelnp_1_1Placeholders.html#a90536f0cd5261b18da736e954c6b8b79',1,'Hazelnp::Placeholders']]] ]; diff --git a/docs/search/variables_3.js b/docs/search/variables_3.js index 708f5a9..ccafb54 100644 --- a/docs/search/variables_3.js +++ b/docs/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['message_228',['message',['../classHazelnp_1_1HazelnuppException.html#aa905cabcd12f542dfc67638732737e88',1,'Hazelnp::HazelnuppException']]] + ['message_243',['message',['../classHazelnp_1_1HazelnuppException.html#aa905cabcd12f542dfc67638732737e88',1,'Hazelnp::HazelnuppException']]] ]; diff --git a/docs/search/variables_4.js b/docs/search/variables_4.js index f4e7a60..ba73dec 100644 --- a/docs/search/variables_4.js +++ b/docs/search/variables_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['required_229',['required',['../structHazelnp_1_1ParamConstraint.html#a8ccf3ebecc2d9d0105e181814af2943c',1,'Hazelnp::ParamConstraint']]] + ['required_244',['required',['../structHazelnp_1_1ParamConstraint.html#a8ccf3ebecc2d9d0105e181814af2943c',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/search/variables_5.js b/docs/search/variables_5.js index a474125..2b0b4e5 100644 --- a/docs/search/variables_5.js +++ b/docs/search/variables_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['type_230',['type',['../classHazelnp_1_1Value.html#ae5760a30c237095db595c466372e3c23',1,'Hazelnp::Value']]] + ['type_245',['type',['../classHazelnp_1_1Value.html#ae5760a30c237095db595c466372e3c23',1,'Hazelnp::Value']]] ]; diff --git a/docs/search/variables_6.js b/docs/search/variables_6.js index ee87f1e..0446eee 100644 --- a/docs/search/variables_6.js +++ b/docs/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['wantedtype_231',['wantedType',['../structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329',1,'Hazelnp::ParamConstraint']]] + ['wantedtype_246',['wantedType',['../structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329',1,'Hazelnp::ParamConstraint']]] ]; diff --git a/docs/structHazelnp_1_1ParamConstraint-members.html b/docs/structHazelnp_1_1ParamConstraint-members.html index 3d8cdc0..2ab2a66 100644 --- a/docs/structHazelnp_1_1ParamConstraint-members.html +++ b/docs/structHazelnp_1_1ParamConstraint-members.html @@ -83,17 +83,17 @@ $(function() { - + - - + + - +
    constrainTypeHazelnp::ParamConstraint
    defaultValueHazelnp::ParamConstraint
    keyHazelnp::ParamConstraint
    Hazelnupp classHazelnp::ParamConstraintfriend
    ParamConstraint()=defaultHazelnp::ParamConstraint
    ParamConstraint(const std::string &key, bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)Hazelnp::ParamConstraintinline
    Require(const std::string &key, const std::vector< std::string > &defaultValue={}, bool required=true)Hazelnp::ParamConstraintinlinestatic
    ParamConstraint(bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required)Hazelnp::ParamConstraintinline
    Require(const std::vector< std::string > &defaultValue={}, bool required=true)Hazelnp::ParamConstraintinlinestatic
    requiredHazelnp::ParamConstraint
    TypeSafety(const std::string &key, DATA_TYPE wantedType, bool constrainType=true)Hazelnp::ParamConstraintinlinestatic
    TypeSafety(DATA_TYPE wantedType, bool constrainType=true)Hazelnp::ParamConstraintinlinestatic
    wantedTypeHazelnp::ParamConstraint
    diff --git a/docs/structHazelnp_1_1ParamConstraint.html b/docs/structHazelnp_1_1ParamConstraint.html index b30dd0f..b233932 100644 --- a/docs/structHazelnp_1_1ParamConstraint.html +++ b/docs/structHazelnp_1_1ParamConstraint.html @@ -78,6 +78,7 @@ $(function() { Public Member Functions | Static Public Member Functions | Public Attributes | +Friends | List of all members
    Hazelnp::ParamConstraint Struct Reference
    @@ -91,8 +92,8 @@ Collaboration diagram for Hazelnp::ParamConstraint:
    Collaboration graph
    + -
    [legend]
    @@ -102,24 +103,21 @@ Public Member Functions  ParamConstraint ()=default  Empty constructor. More...
      - ParamConstraint (const std::string &key, bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required) - Whole constructor. More...
    -  + ParamConstraint (bool constrainType, DATA_TYPE wantedType, const std::vector< std::string > &defaultValue, bool required) + Whole constructor. More...
    +  - - - - - - + + + + + +

    Static Public Member Functions

    static ParamConstraint Require (const std::string &key, const std::vector< std::string > &defaultValue={}, bool required=true)
     Constructs a require constraint. More...
     
    static ParamConstraint TypeSafety (const std::string &key, DATA_TYPE wantedType, bool constrainType=true)
     Constructs a type-safety constraint. More...
     
    static ParamConstraint Require (const std::vector< std::string > &defaultValue={}, bool required=true)
     Constructs a require constraint. More...
     
    static ParamConstraint TypeSafety (DATA_TYPE wantedType, bool constrainType=true)
     Constructs a type-safety constraint. More...
     
    - - - @@ -133,6 +131,11 @@ Public Attributes +

    Public Attributes

    std::string key
     The key of the parameter to constrain. More...
     
    bool constrainType = false
     Should this parameter be forced to be of a certain type?
    Remember to set constrainTo to the wanted type. More...
    bool required = false
     If set to true, and no default value set, an error will be produced if this parameter is not supplied by the user. More...
     
    + + +

    +Friends

    class Hazelnupp
     

    Detailed Description

    @@ -165,8 +168,8 @@ Public Attributes
    - -

    ◆ ParamConstraint() [2/2]

    + +

    ◆ ParamConstraint() [2/2]

    @@ -177,12 +180,6 @@ Public Attributes Hazelnp::ParamConstraint::ParamConstraint ( - const std::string &  - key, - - - - bool  constrainType, @@ -219,22 +216,21 @@ Public Attributes

    Whole constructor.

    -

    Definition at line 38 of file ParamConstraint.h.

    -
    39  :
    -
    40  key{ key },
    - - - - -
    45  {
    -
    46  return;
    -
    47  }
    +

    Definition at line 36 of file ParamConstraint.h.

    +
    37  :
    + + + + +
    42  {
    +
    43  return;
    +
    44  }

    Member Function Documentation

    - -

    ◆ Require()

    + +

    ◆ Require()

    @@ -245,12 +241,6 @@ Public Attributes static ParamConstraint Hazelnp::ParamConstraint::Require ( - const std::string &  - key, - - - - const std::vector< std::string > &  defaultValue = {}, @@ -278,20 +268,19 @@ Public Attributes Think of the default value like of a list ofparameters. Like {"--width", "800"}

    Definition at line 16 of file ParamConstraint.h.

    -
    16  {}, bool required = true)
    +
    16  {}, bool required = true)
    17  {
    18  ParamConstraint pc;
    -
    19  pc.key = key;
    -
    20  pc.defaultValue = defaultValue;
    -
    21  pc.required = required;
    -
    22 
    -
    23  return pc;
    -
    24  }
    +
    19  pc.defaultValue = defaultValue;
    +
    20  pc.required = required;
    +
    21 
    +
    22  return pc;
    +
    23  }
    - -

    ◆ TypeSafety()

    + +

    ◆ TypeSafety()

    @@ -302,12 +291,6 @@ Public Attributes static ParamConstraint Hazelnp::ParamConstraint::TypeSafety ( - const std::string &  - key, - - - - DATA_TYPE  wantedType, @@ -332,16 +315,40 @@ Public Attributes

    Constructs a type-safety constraint.

    -

    Definition at line 27 of file ParamConstraint.h.

    -
    28  {
    -
    29  ParamConstraint pc;
    -
    30  pc.key = key;
    -
    31  pc.constrainType = constrainType;
    -
    32  pc.wantedType = wantedType;
    -
    33 
    -
    34  return pc;
    -
    35  }
    +

    Definition at line 26 of file ParamConstraint.h.

    +
    27  {
    +
    28  ParamConstraint pc;
    +
    29  pc.constrainType = constrainType;
    +
    30  pc.wantedType = wantedType;
    +
    31 
    +
    32  return pc;
    +
    33  }
    +
    +
    +

    Friends And Related Function Documentation

    + +

    ◆ Hazelnupp

    + +
    +
    + + + + + +
    + + + + +
    friend class Hazelnupp
    +
    +friend
    +
    + +

    Definition at line 67 of file ParamConstraint.h.

    +

    Member Data Documentation

    @@ -360,7 +367,7 @@ Public Attributes

    Should this parameter be forced to be of a certain type?
    Remember to set constrainTo to the wanted type.

    -

    Definition at line 54 of file ParamConstraint.h.

    +

    Definition at line 48 of file ParamConstraint.h.

    @@ -381,25 +388,7 @@ Public Attributes Gets applied if this parameter was not given.
    Think of this like a list of parameters. Like {"--width", "800"}

    -

    Definition at line 62 of file ParamConstraint.h.

    - -
    - - -

    ◆ key

    - -
    -
    - - - - -
    std::string Hazelnp::ParamConstraint::key
    -
    - -

    The key of the parameter to constrain.

    - -

    Definition at line 50 of file ParamConstraint.h.

    +

    Definition at line 56 of file ParamConstraint.h.

    @@ -417,7 +406,7 @@ Public Attributes

    If set to true, and no default value set, an error will be produced if this parameter is not supplied by the user.

    -

    Definition at line 66 of file ParamConstraint.h.

    +

    Definition at line 60 of file ParamConstraint.h.

    @@ -435,7 +424,7 @@ Public Attributes

    Constrain the parameter to this value. Requires constrainType to be set to true.

    -

    Definition at line 57 of file ParamConstraint.h.

    +

    Definition at line 51 of file ParamConstraint.h.

    @@ -443,15 +432,14 @@ Public Attributes
  • Hazelnupp/ParamConstraint.h
  • -
    DATA_TYPE wantedType
    Constrain the parameter to this value. Requires constrainType to be set to true.
    -
    bool constrainType
    Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...
    +
    DATA_TYPE wantedType
    Constrain the parameter to this value. Requires constrainType to be set to true.
    +
    bool constrainType
    Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...
    ParamConstraint()=default
    Empty constructor.
    -
    std::string key
    The key of the parameter to constrain.
    -
    bool required
    If set to true, and no default value set, an error will be produced if this parameter is not supplied...
    -
    std::vector< std::string > defaultValue
    The default value for this parameter.
    +
    bool required
    If set to true, and no default value set, an error will be produced if this parameter is not supplied...
    +
    std::vector< std::string > defaultValue
    The default value for this parameter.
    diff --git a/docs/structHazelnp_1_1ParamConstraint__coll__graph.map b/docs/structHazelnp_1_1ParamConstraint__coll__graph.map index 6241153..a80797d 100644 --- a/docs/structHazelnp_1_1ParamConstraint__coll__graph.map +++ b/docs/structHazelnp_1_1ParamConstraint__coll__graph.map @@ -1,6 +1,6 @@ - - - + + + diff --git a/docs/structHazelnp_1_1ParamConstraint__coll__graph.md5 b/docs/structHazelnp_1_1ParamConstraint__coll__graph.md5 index 3a48dee..68bbe9f 100644 --- a/docs/structHazelnp_1_1ParamConstraint__coll__graph.md5 +++ b/docs/structHazelnp_1_1ParamConstraint__coll__graph.md5 @@ -1 +1 @@ -a2a1e59b85b4bb3c2fb535eaca80bfec \ No newline at end of file +f955d2f831670f6c2a655e2a102ff0d6 \ No newline at end of file diff --git a/docs/structHazelnp_1_1ParamConstraint__coll__graph.png b/docs/structHazelnp_1_1ParamConstraint__coll__graph.png index f4b7873149be9f213baf717bc7823d8b5ad4ec32..a6fdeb909bbd0a960e694e5b4e08ea1da2b8d0d7 100644 GIT binary patch literal 10874 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 Ok(E@GC=z?<_kRFnn%r&x literal 14185 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 PbBMcl)Z{B<&BOjboVv8*