From 05458a30de7a381329ad3b7552bd9f2cdc1e3b4a Mon Sep 17 00:00:00 2001 From: John Andrews Date: Mon, 15 Apr 2024 19:22:02 +1200 Subject: [PATCH] FF-1404 - Add new flow element Matches --- BasicNodes/Functions/Function.cs | 20 +++- BasicNodes/Functions/Matches.cs | 81 ++++++++++++++ BasicNodes/Helpers/GeneralHelper.cs | 17 +++ BasicNodes/Helpers/MathHelper.cs | 166 ++++++++++++++++++++++++++++ BasicNodes/Tests/MatchesTests.cs | 92 +++++++++++++++ BasicNodes/i18n/en.json | 9 ++ FileFlows.Plugin.dll | Bin 134144 -> 134656 bytes FileFlows.Plugin.pdb | Bin 32564 -> 32676 bytes 8 files changed, 381 insertions(+), 4 deletions(-) create mode 100644 BasicNodes/Functions/Matches.cs create mode 100644 BasicNodes/Helpers/GeneralHelper.cs create mode 100644 BasicNodes/Helpers/MathHelper.cs create mode 100644 BasicNodes/Tests/MatchesTests.cs diff --git a/BasicNodes/Functions/Function.cs b/BasicNodes/Functions/Function.cs index 89476355..d961928c 100644 --- a/BasicNodes/Functions/Function.cs +++ b/BasicNodes/Functions/Function.cs @@ -3,28 +3,40 @@ using FileFlows.Plugin; using FileFlows.Plugin.Attributes; using System.ComponentModel.DataAnnotations; - namespace FileFlows.BasicNodes.Functions; +/// +/// A flow element that executes custom code +/// public class Function : Node { + /// public override int Inputs => 1; + /// public override FlowElementType Type => FlowElementType.Logic; + /// public override string Icon => "fas fa-code"; + /// public override bool FailureNode => true; - + /// public override string HelpUrl => "https://fileflows.com/docs/plugins/basic-nodes/function"; + /// + /// Gets or sets the number of outputs + /// [DefaultValue(1)] [NumberInt(1)] public new int Outputs { get; set; } + /// + /// Gets or sets the code to execute + /// [Required] [DefaultValue("// Custom javascript code that you can run against the flow file.\n// Flow contains helper functions for the Flow.\n// Variables contain variables available to this node from previous nodes.\n// Logger lets you log messages to the flow output.\n\n// return 0 to complete the flow.\n// return -1 to signal an error in the flow\n// return 1+ to select which output node will be processed next\n\nif(Variables.file.Size === 0)\n\treturn -1;\n\nreturn 1;")] [Code(2)] public string Code { get; set; } - - delegate void LogDelegate(params object[] values); + + /// public override int Execute(NodeParameters args) { if (string.IsNullOrEmpty(Code)) diff --git a/BasicNodes/Functions/Matches.cs b/BasicNodes/Functions/Matches.cs new file mode 100644 index 00000000..3f38c239 --- /dev/null +++ b/BasicNodes/Functions/Matches.cs @@ -0,0 +1,81 @@ +using FileFlows.Plugin; +using FileFlows.Plugin.Attributes; +using System.ComponentModel.DataAnnotations; +using System.Text.RegularExpressions; +using FileFlows.BasicNodes.Helpers; + +namespace FileFlows.BasicNodes.Functions; + +/// +/// A flow element that matches different conditions +/// +public class Matches : Node +{ + /// + public override int Inputs => 1; + /// + public override FlowElementType Type => FlowElementType.Logic; + /// + public override string Icon => "fas fa-equals"; + /// + public override bool FailureNode => true; + /// + public override string HelpUrl => "https://fileflows.com/docs/plugins/basic-nodes/matches"; + + /// + /// Gets or sets replacements to replace + /// + [KeyValue(1, showVariables: true, allowDuplicates: true)] + [Required] + public List> MatchConditions { get; set; } + + /// + public override int Execute(NodeParameters args) + { + if (MatchConditions?.Any() != true) + { + args.FailureReason = "No matches defined"; + args.Logger.ELog(args.FailureReason); + return -1; + } + + int output = 0; + foreach (var match in MatchConditions) + { + output++; + try + { + var value = args.ReplaceVariables(match.Key, stripMissing: true); + if (GeneralHelper.IsRegex(match.Value)) + { + if (Regex.IsMatch(value, match.Value, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)) + { + args.Logger?.ILog($"Match found '{match.Value}' = {value}"); + return output; + } + } + + if (match.Value == value) + { + args.Logger?.ILog($"Match found '{match.Value}' = {value}"); + return output; + } + + if (MathHelper.IsMathOperation(match.Value)) + { + if (MathHelper.IsTrue(value, match.Value)) + { + args.Logger?.ILog($"Match found '{match.Value}' = {value}"); + return output; + } + } + } + catch (Exception) + { + } + } + + args.Logger?.ILog("No matches found"); + return MatchConditions.Count + 1; + } +} diff --git a/BasicNodes/Helpers/GeneralHelper.cs b/BasicNodes/Helpers/GeneralHelper.cs new file mode 100644 index 00000000..3576c144 --- /dev/null +++ b/BasicNodes/Helpers/GeneralHelper.cs @@ -0,0 +1,17 @@ +namespace FileFlows.BasicNodes.Helpers; + +/// +/// General helper +/// +public class GeneralHelper +{ + /// + /// Checks if the input string represents a regular expression. + /// + /// The input string to check. + /// True if the input is a regular expression, otherwise false. + public static bool IsRegex(string input) + { + return new[] { "?", "|", "^", "$", "*" }.Any(ch => input.Contains(ch)); + } +} \ No newline at end of file diff --git a/BasicNodes/Helpers/MathHelper.cs b/BasicNodes/Helpers/MathHelper.cs new file mode 100644 index 00000000..88e00ba5 --- /dev/null +++ b/BasicNodes/Helpers/MathHelper.cs @@ -0,0 +1,166 @@ +using System.Globalization; + +namespace FileFlows.BasicNodes.Helpers; + +/// +/// Helper for math operations +/// +public class MathHelper +{ + /// + /// Checks if the comparison string represents a mathematical operation. + /// + /// The comparison string to check. + /// True if the comparison is a mathematical operation, otherwise false. + public static bool IsMathOperation(string comparison) + { + // Check if the comparison string starts with <=, <, >, >=, ==, or = + return new[] { "<=", "<", ">", ">=", "==", "=" }.Any(comparison.StartsWith); + } + + + /// + /// Tests if a math operation is true + /// + /// The value to apply the operation to. + /// The operation string representing the mathematical operation. + /// True if the mathematical operation is successful, otherwise false. + public static bool IsTrue(string value, string operation) + { + // This is a basic example; you may need to handle different operators + switch (operation[..2]) + { + case "<=": + return Convert.ToDouble(value) <= Convert.ToDouble(AdjustComparisonValue(operation[2..].Trim())); + case ">=": + return Convert.ToDouble(value) >= Convert.ToDouble(AdjustComparisonValue(operation[2..].Trim())); + case "==": + return Math.Abs(Convert.ToDouble(value) - Convert.ToDouble(AdjustComparisonValue(operation[2..].Trim()))) < 0.05f; + case "!=": + case "<>": + return Math.Abs(Convert.ToDouble(value) - Convert.ToDouble(AdjustComparisonValue(operation[2..].Trim()))) > 0.05f; + } + + switch (operation[..1]) + { + case "<": + return Convert.ToDouble(value) < Convert.ToDouble(AdjustComparisonValue(operation[1..].Trim())); + case ">": + return Convert.ToDouble(value) > Convert.ToDouble(AdjustComparisonValue(operation[1..].Trim())); + case "=": + return Math.Abs(Convert.ToDouble(value) - Convert.ToDouble(AdjustComparisonValue(operation[1..].Trim()))) < 0.05f; + } + + return false; + } + + /// + /// Adjusts the comparison string by handling common mistakes in units and converting them into full numbers. + /// + /// The original comparison string to be adjusted. + /// The adjusted comparison string with corrected units or the original comparison if no adjustments are made. + private static string AdjustComparisonValue(string comparisonValue) + { + if (string.IsNullOrWhiteSpace(comparisonValue)) + return string.Empty; + + string adjustedComparison = comparisonValue.ToLower().Trim(); + + // Handle common mistakes in units + if (adjustedComparison.EndsWith("mbps")) + { + // Make an educated guess for Mbps to kbps conversion + return adjustedComparison[..^4] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000_000) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("kbps")) + { + // Make an educated guess for kbps to bps conversion + return adjustedComparison[..^4] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("kb")) + { + return adjustedComparison[..^2] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000 ) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("mb")) + { + return adjustedComparison[..^2] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000_000 ) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("gb")) + { + return adjustedComparison[..^2] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000_000_000 ) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("tb")) + { + return adjustedComparison[..^2] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000_000_000_000) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + + if (adjustedComparison.EndsWith("kib")) + { + return adjustedComparison[..^3] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_024 ) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("mib")) + { + return adjustedComparison[..^3] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_048_576 ) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("gib")) + { + return adjustedComparison[..^3] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_099_511_627_776 ) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + if (adjustedComparison.EndsWith("tib")) + { + return adjustedComparison[..^3] switch + { + { } value when double.TryParse(value, out var numericValue) => (numericValue * 1_000_000_000_000) + .ToString(CultureInfo.InvariantCulture), + _ => comparisonValue + }; + } + return comparisonValue; + } + +} \ No newline at end of file diff --git a/BasicNodes/Tests/MatchesTests.cs b/BasicNodes/Tests/MatchesTests.cs new file mode 100644 index 00000000..3a29fb95 --- /dev/null +++ b/BasicNodes/Tests/MatchesTests.cs @@ -0,0 +1,92 @@ +#if(DEBUG) + +using FileFlows.BasicNodes.Functions; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace BasicNodes.Tests; + +[TestClass] +public class MatchesTests +{ + [TestMethod] + public void Matches_Math() + { + var logger = new TestLogger(); + Matches ele = new (); + ele.MatchConditions = new() + { + new("{file.Size}", "<=100KB"), + new("{file.Size}", ">100KB"), + new("{file.Size}", ">10MB"), + }; + var args = new FileFlows.Plugin.NodeParameters(null, logger, + false, string.Empty, new LocalFileService()); + args.Variables["file.Size"] = 120_000; // 120KB + + var result = ele.Execute(args); + var log = logger.ToString(); + Assert.AreEqual(2, result); + } + + [TestMethod] + public void Matches_String() + { + var logger = new TestLogger(); + Matches ele = new (); + ele.MatchConditions = new() + { + new("{file.Name}", "triggerthis"), + new("{file.Name}", "DontTriggerThis"), + new("{file.Name}", "TriggerThis"), + }; + var args = new FileFlows.Plugin.NodeParameters(null, logger, + false, string.Empty, new LocalFileService()); + args.Variables["file.Name"] = "TriggerThis"; + + var result = ele.Execute(args); + var log = logger.ToString(); + Assert.AreEqual(3, result); + } + [TestMethod] + public void Matches_NoMatch() + { + var logger = new TestLogger(); + Matches ele = new (); + ele.MatchConditions = new() + { + new("{file.Name}", "triggerthis"), + new("{file.Name}", "DontTriggerThis"), + new("{file.Name}", "TriggerThis"), + }; + var args = new FileFlows.Plugin.NodeParameters(null, logger, + false, string.Empty, new LocalFileService()); + args.Variables["file.Name"] = "Nothing"; + + var result = ele.Execute(args); + var log = logger.ToString(); + Assert.AreEqual(4, result); + } + + [TestMethod] + public void Matches_Regex() + { + var logger = new TestLogger(); + Matches ele = new (); + ele.MatchConditions = new() + { + new("{file.Name}", "triggerthis"), + new("{file.Name}", ".*batman.*"), + new("{file.Name}", "TriggerThis"), + }; + var args = new FileFlows.Plugin.NodeParameters(null, logger, + false, string.Empty, new LocalFileService()); + args.Variables["file.Name"] = "Superman vs Batman (2017)"; + + var result = ele.Execute(args); + var log = logger.ToString(); + Assert.AreEqual(2, result); + } +} + + +#endif \ No newline at end of file diff --git a/BasicNodes/i18n/en.json b/BasicNodes/i18n/en.json index 79cf6904..355651e0 100644 --- a/BasicNodes/i18n/en.json +++ b/BasicNodes/i18n/en.json @@ -212,6 +212,15 @@ "Message": "Message" } }, + "Matches": { + "Description": "Compares a set of values and matches conditions to see which output should be called", + "Fields": { + "MatchConditions": "", + "MatchConditionsKey": "Value", + "MatchConditionsValue": "Expression", + "MatchConditions-Help": "The matches to test which output should be called." + } + }, "MoveFile": { "Description": "Moves a file to the destination folder", "Outputs": { diff --git a/FileFlows.Plugin.dll b/FileFlows.Plugin.dll index fa793002134daea462bd444df5a8a1f4ff7cfe33..4c7b184f1ecc2002e89fd773631108dab4383ba2 100644 GIT binary patch delta 49858 zcmb`w51fs4`v3pF&pC7EKWAo`!C+?095ZA7nHhhY5R)WpB_UZ!V@Q%FXDT#Jw+Ts- zbYc>Pkc6y|gpedjtz=bFtgN*qOKWAV{I1vgdf(?dTf3jne)jj(qxZb7>-~OS*Y$qi z_qp%;-1nI?lb(y3v>@u~$6KY9m+e>P-%-^nJ=SWgl-EW7v-7E}*{|Nxpi`Dh^@XFG zOKo@0&Pa;8!=>WLzCY8Y1_U!)`N6?fcFeOL0@KOu4L)JzSy90^tZXYT_?6YFX%$7l zzZ>X(mx@r&9aZYfYb|BfTM@2~!JAwK_G^~%`U93y_f;*?G8S@~mW?5oYuO%hrIuYF zSCD+kpHj_uceofI1j+a)NXBa+8J`Ntc$4baY#nk2e9XT9$^3Fi=667Xf63p}$4b6#qLUN*11N9YXC_`Yz2vaLebHhv(W}Pr6gvoPp z9-C&=!a$|)@hbFyba~OYM79_8HTD0NqITB!@1Xu~l z0d_(1iloIDYM(%d1Ue?rB?s~c+-}JlYxrpR^i1tQDl|{E0FtwoLz=8{hUyif0z(8E zD^Q&S`2*7-&0OORKMOuy-}#V8YWo8#p*ia|NRzdJp>_*()}j1?R8I)%2Wg;&1{w?> zry38*^P4Tu5(8oTr}+%EQmD;BeJs>*L(%^CEu@)Xg5l4?$62!@LRp7E^8BhHO{s|* zqWRar$<%bA>V;YxMkSe4n*=&6&}D(ryppPsfwJM_Ozk0QRcx9{IW!m8-=X}0A&_Q* zjZJ_G_&C5qNM6<>kj$TjG!slV&_#jbBSTOIFZej?5J=8C z7Lv2pK{7ub((rV6(=lhk$NVx#<~Ktw=i}dDXj8Uxd^;}G4??-4Ke8m^@MK; z&wns9*E$B01K5yeg3j@7nx^#p*9vq*pcXL#rI`)jhmTjKFC=HGg|s=Y=(5U2{0p_vZk56p>Gb|`C>2{2y*tdjuSB*1YA@GYdN+Hd%?@Nv}%aU@OE zkX*nxNKktX>fD?d@(z%AJg^!_`0=*#6RtNG2c0rn~Z4AE`KIV_a+o7yyBtT>X@|qROGgL$P zm}&vZrRG8MvUYJGf1n4X$(nEY-taL$5R&;}HZ%vQfizhQ3^iG(WkT%|=yDiTXrPFO zp;QeaIaMkoXUc=*OmXrQJ*g!>D$K znlIE=fsQ~jblHLYfrte1no`>vJ{CUCngXdywF8;Z9H1+tskMWldJ5GqLF& zG*FE|GXz>F&?X0>>yI7Krq-)WfZgzMt%o3aS-*wkQX3|cG^LgqC{fyKd=|ll-kK;-47pUJqF2H&qH$7$Rv^|)gNdGY52~Xr};OA zlLMqda)4Y&4p0th=Gw(%?IqA4fkp~c<3RqvWJr_s8pBVAkCNj0YXvlC-3`fEk3*WQ zT@CfEp$NJtP;8?RlmTg=ZU)MQkLTA3k~8&SNMC;p3!};nHA<)&p=L0JwOs5#GyzC6 z!D|h_20qTZ4U)6&gEaGlT*=oT-$I)J-A#bA@Ns}kkQ^YQF-Z=P0cqxXoikVX7-|p6 zP`NG_WmYNb%o$)Qw3Ax*05O{$UbaVi^l-OhtpoW3Q%Ty+1b=M;%s@W}cma|FtbybS?uSHHf8cXSvp{_e z|22HfpMhll3Z&U>nvyhC-&k$#zvRNnR2d{weIc2uawvabJfz9m*JQ1QkNH`U%rAjt zejB98dXt7?yn)?Ko$DWO;E;oP11BBK8@TLX-ate%ih#7Mdu2+|Zd&`=%W<5~5FJCG#hL5R>Au7-(Jp|2yG*E?s>fvK(F(lWwQlMQ9MAsktpv?q_n*ayk;{azM zIY4{{NiH=P(qyePP%(TA4TfaM7HD}GG=d>JutunzLLC(9bQm?#q&hE9YO7GHUXWbh zG)Pn5od%i(AJ;eEfoT3Kh1%*+^v(^^tjZ`8;QxAZarnCozZWsNfX^XmfpGnG5}M17 z$RugX9&M<2_?SwC)_+8+aNis_HwCv9iHY_ZJ+}J zU4pck%56=WsgaOog7+J0EPR}5IwV621=<=0Jz$_+0__**Yk@A4ypk=Eu z&^&>*3A7)Qp%Y=y!v;E?<6QsI#lBGFcBtrFnP9D<65!*Vp$jCh$~Z_)HPeCU4kM(Q z-y?>f43)<&I<>xbNo-A<$!cFk1sSCy@6CnWb_6KAd%4<=mCk0-asEn z6fLLr{^Sb1Elq#g2~3X^F_vdi4@q%x{jm?)EF+|u%4`8I3RqCYAaSE1nVSY_xMzf$ z1ve*LE8Jn>F4$pUP{1n!rnL>j*Fy5V_1;M|pv%+)~}Zkce? z;pUp>2)D4koc}h5fiDZVQ@}$4ehbM7qdQ1K`oNa6gC)St3DY3C&|*mD%9*3{AMKg1 z2-r)&fdWvdyV9-6s}6R8sX~0xZeu5P&j*yfZGK8!2#)w38X1{t;Dd( z$jvp!Lvqb6Ai3sFkf@nH)B|Zkye=Vnk=r&ghF}QC7z4>MY)CWjbplRH?$*u|+~$hMPk)?M#wG6nB>MUvIe0ytfM2A8rOm2{;jwbI)`*dbbT}a=$Gh=EKb) zmO*mvHIU}>XM3Pc?rj48mmhpf-!38cOYXyx`-IMo*QOn~5|*1j=Ia~}BfEr(PJra1 zQz3cYrI5VlogmG;-;ogIaPzzeLUM@FkQ~D9g7Y88m=+der^J{kG3H1N?d2HS%OPF} z3-PXmSRx@dNr;1x=Kkv$XpV6K(oAKS#JCK%*?q1d$x|tXmYgFUqf>43l8TGT!A#@e;^?ux`jgcAvr{UND6`D?<{Duc6$Y^7jU(JI}J$O z35TQiL69c*hZ5okxVikya*~{T5G0pB--b51_X)TJZU)y1xKqHxVcbW;9T)Bg;oR4T z5+*?MuGSRNdH?sZ#7Kjmb9aa2qQ^jT(Mupr&A$_FrEmv?yCj^yyKwsrhxPwYUZ+mc z;V;uqBzFNqbIn~Kx#m8QT=PgLw?8lz(rl{(bpO}c*Q(*?7*ioRMm;3QSP98%w+_<8 z_*6n{f}2C^hU5_1%OMUrA?RgFzqO#8=l@3pJR_iW9mQaxVN9VuE0=^*N1_2L+fuA{`Kk&717le!N5lWZ`X%c=eTq)dKXn7Bt zG*{YJz{)W23jxOnI1!S$X~HcF;|>eATDV=peXTiu|98;=={I4nr^se?zmyn}aC6Z~ zkeoXWl2^AAq?zmy;kpagUpVd6oE@liK>D2$NR#_3i7`%M%$68yAUXF=NR#_(;r0r5 zM7T4;xqHg_FSe)TJ}NPOe!s%3x!foCH@7Q}Nr(hQ=A}!6PZGlqKToy{l8f#G$wd!^G`UX+H&VE2;p&82=y3Gl1k$Xt{bz}>8h*~b z3zBmmfaKg~A$dQ!2x($`D$`}hbhp-_z#7syIu^iGY-8pdP z^KWYe+$!K+0Z)a2KS;u}!X^AVl&}<%6OMv33I8fw72GHk&;JAr3b;HBJTKrH2c!=J z3wKhuq&|}HZ^EU*%`1}&$t%;b56*vFY5y?rf`CH=94nv=$=qUxqtC%YnyvDqgjfSN z=iUs-x%WVt_kTyA%_?0K@PvTp1+;DisE^i3ki18vLYmxvmk=3nbM9hD&Rq_vL)d`| zXp{SrfTIN*FW{UI7+4#|{X@7-!tEALd%5O=Vccc9|K?o&9TD)9faf6@Eb1$T{v-)I z!p$@63du9<3CW!H@*)j}*DTT%9fGevhDnSu5@Wo?m zry$J|Kyr+Pek9Ejc!g^Uw^;&6<_aL0>lMaD3TO8daIAnc1YGWb{=gbYvvyGuV*}ir zdoLvCJ_gCTFGHG|qlJsOS?+(Pkv3o%B!iWZykKJ>P3{!W|UuhcK?8aF>Kj7!WEn8`6CKy(=`YQcp;;N8b1U%z_^eLNxCZRu&0%>Yak`OK6=9-Hjxn}L< zn#%{`{AY@8Bw#NA2Mag`lEJBvhHEU`OyL#_r@hQ=a5$Par=?XYmV(gR{2PMWS zNRAPGi{z$n5pWJ*32^gdTR`$;b0L}Q;c)&yA4t7kwm-dz#OMz{$Ebtk80#Q8#(79H z@20|C7A}5Jh|^x?TEGj=AMit(ZPko^|HP?34}Q+wQDXFfgj9wXd%;id{V z&*A8Ib|6je<~jtQ|CYngxi>)aymvry?qiT9cMHjVO1KNcMcf+V(jX1jQn+lmbv`># z3e5?-3OFPTOcSs&1P0~^w^z6mVO+X!r-i#LT>M~p{+c&fD$NkE6mDLb-jG~qB_yxR zj4-a1a6#cV3U@@fhQHDI`1xz5fd9j>iWB~uLsgc9NI__>xho{sJQ9*ayui8f%Cpn` z0xlD9qkww^Jnew~zRTQ1!0FfNxl{rvS~0nZAUa9b#0F{DY@MiQ36&4u=a;Ot>oHw3j&>UfayDoq+%0Z%*oyN!Tw=rni?6 z(BQg29Jq_L2kur`dlO1P=E zfV%{|EMV_DBw?9={o&?>qait=4ao@?hjCX6w?eoLkmmXKE&-1?AU$A$G%vkQ660IA zIrl|K&K+4nl5_hZvAX_10i+4hSwfV;jSzJG*AJRwR6%l#<&Yd>4WxTNpgr{NE6~33DI%5O@5Bi14B4QM@Wv*Ut$aii_ukLRKU$4#zS(5*^nG! zH6+TQU8b9G8#Kq)A3FuqZUzrJApNonq^ZALVjR~o^g>^f5J{Dx+!>H2H+}DxbFGyN zx2~D4KcKnjE&>h;1G@`2ECdGXg*zx*+6YN_op9N3^CGo}YqT>rO_Tz~vX z9RvG$DkSe~nUE&L4H6<3ZnFfC9KtS#Hv1Z+*;u^<93tR20cQ!fGK~9`aO;HIE!<(@ z&XRP#|K%dwrs&=h;|kndbo8AhxoGX>nv>u)HUC<;RJfV*3s(fmTrb1v`yYJ->?dHg zfb#_0YCyc2ZWL~pa3_U}9u-QM25AbVZ&Y($33fL8Txl63&#Ibl;sPUwf^gymsef8lxw zH_&jn{-_YJHVhmf;8X!u8<4m|!kuwAdO<>(MH(m}F2l_=$Bquw+|-8VqB}xjmHdIO zkS4}05~By)9HSp3&wD5&hnNV-A?hGah(Qu!8r&Qr2x-oL3!yp2W=M{)6Vk-ERbuRc zn`0b=PGmjVfn&VPPr2FoBhcR8fV{TqqV6K>932g$kDL2`)Q zkS6yK;XW4b2jLRN;QYs6$1wulCSX^%Ibj7PC!7q)+}bd1sBoKv`&hUW!o}W$d^rEn zEBST-li=rsnUI{Y6p|D6(;#!hgc~f}7~yQ;mW6S5I2^72Y5}(j__2WJ9nc@R3~9DX zg%g9mV{mM!=BAKbv-Wb$Mev%fGF-ThW99mzr-1z-8LSEeD+L@6H!so#;jRdma<3#D zA>1#14~efo=ogWkg#YIEkVZ<3G=%2dy&!qA)sS5C*09`n3b#wR!y(QNoDndhiei{m z8YN&n+?+54k`rn#C(Lj-e;^mqY@oX&M3IE(A|d)#$@NEt#26hGW3I2h>0Yf>yJ9PO^hmu zF%52x@d6~r&|Z$Q4qh|w`-Iyp++N`hLo#OtnA6uE;{=R`pA)7*a>7zb2KyNhN3DQx zgN3UVZlQ3WhjG=y*~bJtE19t&v}=>g#$ zAh&b^sL6DsA0Z5aOPA<-McCB!Wh1>X`Tz?!011AZ1SisW)YA+|e z;&A>zo43$;l@KU zH#@}9^Oq?C&J%E%fExwe7Xtn1Q-wPy+;QQ~3l}>l);1vOjYeHZ(q*>jkgsXv@6TSe+3AYM&K8%~CIllh8EMV-zA+QA`S6T{* zg#JJ$NHf`|CHH?B!cLzpG0G8|>mLZo^^b()GHM{XjLDFujAtaobhtUhGDx!okR0M5 zq*=OP*ylfv2zXJzq}mWz0Li)ALz>*rO72c@bMC>AoO?VZ=bjE}a?fE-U;oV(aG8MH z1pGV&1;@9i6qzD9g=IVgfulT6mAUMW?Koj4AOl5V~+#+1N$LO?nM&g5ZoN& zBqZm)2+6r)>qzpNCqbGJizURr`u=>n{`gPRf(}$Vr-Nc+RM3j!)tQW z4=4A>!W|Rt2T0~3r)Z8pf3QlxhVb)b(;#`W+RI=OgE$p-gfum;mJnSeL>~z;6p}+! zL!xGXz^;KdFBO)DV{eX}I5po&R#-=Y*Xg zIbk0GD;$u%cm&eayjF5o!ObCNKyrv>kX-YANR#_@=JfgRa{*5XsJ#sS;DGe&*pMdo zI>~K4MsCg>56QWkLUM=#NM7^ykS2t^USf2DpJVib5pnoUjbiBz#l2a>L>L z*GIr10zTk?^bQfyOm>sRm<+d>EF|aFUe3KlLaYo6@s@;GYfFsH5@Q!6$M_nO*Zd@; zDPyz5_%FXeJADg6n9u*8MrfYOMM$1X#N#Bnj0{M#j9VplF5Jv@f@H3ba8(XRU$zEm z%75Dlf%o6=bBw8w9AhRV=hj}6dz%CL1IvWlAlxqDjzJo3yKtw3yZE@A|Dvad5@tXe zaEE}oaC4z$kX&dl;YNpX?+7ujnj?qu>9ohc=sKm&AAhZjP}Ql4IJ&-FXKW=31 zkr*Gt&oRD+y$_ z>jX^yP`J&)?G^5za3>v(zMu`#)Vwe3{C6IHE;?lsw0o4Fan z%@b~2827Poo0-$+znuc^6;OM5p^w9BivFF%IK?rrIWI|w$frUzr$U;V_Y0Q^H`imb`h@OxX0_VR$&}Jh;ng#p4fVBeF8<4oQ!W|Cd4heT$ zxYNREFXy{tJ0QK;eVTHcqCb-u(QtFojUjp7en^f{2Fdd-hcqERmk>SS<`8`$Im94H z^Zu_2+RXb40mlnCS-@G4oO`9i(E|cVll!oQ*aSD{{uq*TpMXRNI{#U-Npti^(dsnd@;G5mpPl6$4(-Y2=whUNZ7xQoxo9gXN?;PzR&CYQ` zVswI=*Q+NauUCIa4p9ZkA;v?R5P#Gm`1+$3evUB%l4Hz=bANzNS)$+@-HkiL)z(iHuz#Mmq`_CRuoLy%nac}V1@k4!+C5Z_4%_Z)IB!S#nfkO|E( z${{(%P)Jk%X#qzv2<`#lrVF+?s}4Db69AhM;nfG6X8!Oy+;id|=(BbH=j}2|= zKQA#>!_B!jLUQgMkevH4q{;m^;f@Q}@VOAz6Oy@FNW)zq&iR{RQ{m@?vjm(c;BpNH zubGh2n{KywV_Z3@O2y=xKg#A}*2RUoIGIaN%?T*l7O3A-yBmpIwe(#`9C-S&z?xZ%~mD0vrvnSZ_iGpB*C(?trJ<%vq531Q69RI|%F<O+2tj3=M!zL z-Rr)8VqatPlA8u4n67dwz=MwmKeh3!9$VhYvMSv7Oh<^c?7!X+uyiL3!+UQ zO=CfD{f6RT#D&X znbV90VsCI)(cM=#gYUkPZvU){ZiajP1)kQ8@*;AuGyj66JJ$d60J_tv2PEgk8aRP!8zaqSoS=fmvIN#dR9aPZ!Z>DKPxtc|Hx z>z%#8-6+rN&G`panG>YHP2Jj6gB`o7k1iWSa_%9wwyUlqCk=Q%_|3+mW*C;Ui9Cr` z!2hbcFNd}}X&1c)3f|02LN{q@Q*thIuwdnznca0rdX3WB>CTi!Ie9c43X2y}L7Xe4 zmcHD}bL25vc}f+El9R6)ID#KOk=81_i^h7ta<~3U8ThM`I8+(4XzMiAUJEMV33woujnZPt=d52s+5JzzCT#_R%#n~A8AShs%VL5-g*?RoHxmn zoD`9Fe}X3=;`t=%I1sFU%Wv%u&U-79+O2Q3iNsKZ`TnhBTVwQU^X9arSOuxS%#6;e z2+oX3w*60o(OKoygE1LBgXF3edLAK1N>!vYqL_!IRK5E1A@o9_xrQ;Tv}1p8{pQ{Y zx@s&*VDnOSALioQ(wJt~dP^H>`)#?=IuKm6CBFyo$e+Bly}Z>il(Q<%N$jawP4VKt zYM&J8dKgbt44wwfKmgsrL9>q6p%ZlI;EgN_p3^gq#t{7q7ni%U+3 z%AupEx0b#h%;Rc0GhL}vf3mCQ(_mn0>&Sy}QppRqHnR=}-`d*3#%|+Eh^_s-PNNz(FxH>F$pnOKc#o| zP=U$R6_*f~|6t0@Oj8YjmvWjY6};u`WK%VoWTFNMoZ~Jn1RX)+ zTAMCZRC_-)e4J>++q+RMR`#nV-sGaBQCwO+9dLCew^Jowx*F-1e`F)`TK|NG$9?5b zYUoP)NpDjQ&&Lkl76}b=n$rq?mHuyr1go~+pM)L9ozs%W(czr#0edHX7W~`xc2PKJ z(`)I=V95^u2pF#DTKbwYT1xPA0{U ztl33uHfk%DeW;Jr-V9Qs-ivF`&H8< z52m22(CHIAIa!!lQkXkf_D)OdaPZc5+ICsrPpM4Gm3}k*-;Q+u`varz9YrrqrMl7a zG>488nFIT)yNWGEhgy}{b6_tzqo@gFj|lF1r>K}_qIS`S+l#%JbZh!~EB$OoMiKoa zQ~R6IPui{2k3s)Vzr8vgeyUidG<%z_nvzn{Ueg?{r)g(8^?j9t-rY^lweTu`^FS-F zdb}ChHoEPp+gnrNxv?qQ-8xQ}j4SD0b*T{T$2w+VQ^dTS3QxmKw2Pa(ZRfw6*}6N#?Y&iG4z$zXkW`hdxciQtKQQk zt}Vitr_!#ZC#r7>;NO+yF7c|XER=p1wTbGxHt@e_ft{+`1ihl4Wj~nTKrL#Cj7dpX z(i_<7`mFErV$=o;YfzSedOxMmZVT0U)n5yc?7JptZ*GqErj}RIlT}pG%~@Xc8=@Mh z(Ip7?c_tSB1Dc;#b!dx`*QY_h+e*jOYcpK0lfMx>kC&pgGcp!Zjs07pE!KltQ(a#5 zL>AgdX*)GjowA!|HdBl9n`U~|#(elcrj=-^rhAUjK5?!U%|lIT^&S14=4W-=CAs}UUiG(h zv|$)hvMLe@oX#hboQ zv}G5PImz;=`*TKTbW!cdT1>C6;r`JX^va>v3&PCRL))oH>ZL2%))-l)EuY%o3f9%C z0rmORv;aeyF+rF3EMLn(T zue720#;Y^naJ>t3BQHD?!DFnp?etC#Y+kma#Z_Lc0H@|0SjQgq*E zZP2$sHPKdL>*RtiYLUv&Rts${QDxftr1hf(Pt!}Vlda9m#=J&b$=TdluB|hs?>cR5 z)7DaTgH=bHB9}&XQA<^C-S>Ud_HEXyO)=4CN*1kZZXy~+8V19Zc;&Q-Jrou>RD|q*L`oP zdTsql_ia|sYwIap%w{!TTeEb`Ep$M_BzEYLThv0bY@cePhi*}ebmvH8EwDNk??bf(mQA~#q6Pg(Z3_$fncAU;_M^88Yt%*SgVu)fVlkhG;+4IxYpeeJiy4w5Pn}#V99E^OBdy|8h$kKcb7!{@sN(H398q z?Kxiv{k9(JZv^e~qiwA{nXRDDCZhdobF}xQqrFCt?4#S|S@1L~Mtc|c`k+tepnWCr zC7XWubh7?#xH{_YH7%fnnP|slqdlL3HnA<*Hyghcn#b)WFO%m=I@*;UwC7XME=zkk zG-i4BtK^AmiMCl5+DAzjt4lerMbYJ|ioKdP!lLN)Q5kAc)Qi+!)nGogHw6do?Nsu7 zgZH8=^*D{mP$#?_N$-sRfZAXj+AT4kQ2TYv7u4Pm4c#I>_|D$K^o)k7(UzLs@C~=6 zro|w^PqEOW8=&pfFzEZR(Ed8Um$L$&t?JMX*R9-z~ItgCw?>SYQS89$8Rqy`^EC8#EG zZ@3fGWASK5Q|-m7u1&Y-Vihc?r1og*vD8LqkE8Lg={VSmmfEP>4|M78YkzoebTroc z)%XXA>T_*8mg1ABmk3)Pi}f%7CAQQbbvva2R_K#x^xhE(Kab%+?*}`6lsSA~TsK`}epu%cddN6!2xulgwk z?e|$v=?KNty7GcsK5Az>9iQlqLsWVj>&xhy(&-qY=BnN4yQxtA_g=(=mM5d>5T*aU z7jZ9HbTlzmEm;vEtC}ot$a*3D4LY}vNQYx~lOMBBM@Oj}=4#7UgA>n^`InLThn)|odB@Zn4eMIK6SORn&-M=e5%}7 zvop|lgRw??!1XrPDEd-3pSnp~k41INg0+JCtlOH$Qj}H3s&1YTlc3%*Rv_J;?oCuX z7}T>*RD0Nps-sF1)qZ0=)hHzoebkqv{$Q+Q)R&~bHP*PK0jiPu!B~$b`N;Z* zu@+EYW96BL^{tCql|*N&#wuQ$k44>;kQS4y8XN1Oge0I| zWvqrd?PF5adSkW9xtgr4#+qN$EvC8JWvrKrdXV*zv2M>CpjxQk8|%JIA6Z`;>w21Q zOIw{ZX5WO~F)h_!j5V;p6_ciZG}efM0c2UvW7!^y!hVsiqK(xicK}(5#!~6G$7HBx z#!5~f71K&(8Y@42Tui3QGgi0shhnmn-OiYwrQ9ClSDlUZZOW*a)~biG2IftP$yR-g zH6d?iOpdz6SW6P>V{+B)#@e2+D5i}XWvqPvt1)@1%2+-9Z^h)R3C3!Zd3#KOnq(XE zy3A2zPB+$#t#6MhRI`mWwDqW%BK5qn?xDW6>Lp{>x?xx>5G_B zwZ&NdoBTPZoqE?;Bbr=@X|MJ@PhVt*CGAxb5!*o>G@ZAUG$iXQCroLD)lvP?Sffj) zdOE5z#!5>YpsrFEj8&B8BTLQanA7|fR+)-2*0cVpo-&nStPO<~*43)%d_{NEDE-dD zsh+D(hd(W4o)%#yT2&;9w6Qj*8c-whMSY@=}5y9BgJk>FX1FgZhne zF7Vw<)(E!f05l}FmumNd2FNOkxl!H6mU^?row0q@QDdEHc_iW{<$6(%RHw=6r?QOo zD1BJ^X4TnPO&a-Bf0ebAM;@`0EHyxNHs)=GQ^~r^SRW;gi5;lgz05G1QVADgXc72;*?48O(_n$HT7|r@l zm1C@r66eK^Qa2gv?Zg-9`#K)Ry9OG0RbId|Mm=q;Cli*&j#W#IwITD>*ebP|Eq!{b zRy&O~jMlDNeQ2z%!F7jH^BzhbpdL^sjBj$XkF4*t^`5$scD4uA74BLGQDvC>NE7J?ea zmOeAqs8Oa5rPZh^W1+MfHNjXY?O`>^SV@KScJN^}-I%DYR?Rk6G?iAXo;Masdqllt zER^<$T4}8GwiWcgcAc^E+D`S@YKyT@_9XSLu~7CT^*dvYE#6|s)~Tr9V!0oSnpC_c z_EFW%SnrTESxqq3CuB`gtF<**%`Nt+scO5iPLTDOI>00KT1-=iL)OmNY3i?R>3x5? z>bzFxQ_X!J#0Gs|v}^Hb^O4rm>b7-UMr9GK$;KKVtoS0;K9{|TK1jD-`{t^(1>eR7 z)plb&m;SfdIqC>oQE5fr#@4Gpg)9{}Px;n!!bL4(G1gK~dfW?Y zg0a>Xw2pgG{Z?CZRX;noAa0@h?HdR)TfLTeqid<^v{47u^IfjGvlaDd^IPZ^NN;03 z**t=7j|?!@WxAMqMcrnsxWuWRSJX(hbd(ipthVMxz3J-~w?f@-tX)342bm9t4W)-# z`rmu;>$7{uiS=G~-!SW{+(B{r06}Bli|>i3(tTvuk;(`;tY|^tqi*<23Lhi3h*2U4|0{!p3h=wII;`W5B z_tU1*%@3#V)0S_??F(6}gNMG%?RhS{LVc=zZuOqEIB{z1??cvt!~=1khpcB3kH&qa zrtsQF&2M~@byPiRtX09DM{*mEC*L2`YsNP{XdlV7U#271H|lrBw?4y1*5}5;5$}XL zW-J^-PpCf|E4}dmx(RsBSOs*-{iC{Mteet4Q74uAO_cUn)R45@5hqogvA!=Ep#G#9 z8S5W*iI2<{Z0ddMl%5c_Lv{1-<4!5R8EVn{ls~HiW5p!+$m(FMZOMO)`&M0JtdEi} zlGW2#E81L%`%d*W*6VFN@!zRijg?VoyJAkOJB(RYIDo9tZ0TaYSL3ubH|nrICjNUh z!B}Vf4ak~gti1e~_%mvnv98T;K-Mf{#pd5_{YA|+R%-s!p1-I?Y^hO&Np}2MbwZo7 zqc#-A#Q&hq8tcgtSW54fbJef1o00Wby<5&z7yOy==T#%U>rr2RX8hmP4SJ88t0tE0 zR#((eW8IZhKzFq#8Y`|*hj_R3oUyhv+D-R9tnZ9DwRE?NwC25o^`EOg$=I!;tX0N( zC*wo9Z|vF0eZOu@?_aGOjMc8RuZpv>^e#SEl_XyiA8-9=tn`HI<9$~AZgBkGHoe*qjfIiP z)|9Z3O{^!wMmDkD3>(?hvakL?(x+P2X^VrVT9b^0pv|ot_sYnY)-BrNn*c4X8QNm5 zrS+V#z@=I1!?+9!F|c!Ef@JB-b}})vm9<3=ovT`B501~WI_o0?r|?@rZB5a;rQe#b zEv!X^@>|Q;ih7q$p{=de#@bJ((AL%)#=`A_Z0l`f;ch{;wfjT!wqY)H=2#z_&ZX3u zV|`|<=jfcBYaKP#N;+rfTBq2e^moL!v6A#b3&q?OUuaz$vhIs7vBrh03Gp4Qxgl#( z{MFX>eR}=?ACJGr`ZIS%eMPgl);edbb2N)4~Z{v#|R&%TG1!j_)>^;Vj( zF#GGR9AjbjJ*~FJ!t8rmWn|I(AB*Zum-jbV<)(8`%2dw{*00#2(w>g*WsNd@)AQ@& ze{EG6Yfk=RvL=K^u8Qwtwfop9ZC!j{YjDWg6yMK!G-Pd$A7K3!maS*;e*CT0@lfaf z_@P$n@0>7)<14LOL)IVT@3vkES?A&d);~hlmG~NKz%DM zkR8+AnYS@^w$)i%_G3|>uzIxo18;d zwXvG`Z?WcDHO6Y?k5F^1DQr>9!Upx$^QI4*cb@eUTXqz-?>uXz=?vsnSkGJQj5Q^9 zs^@uYi?PmA-+b#`V@0=_>X~otV~bL>Z?M4nK4eAEGm9U?ti_h=0MEW#(Exg85o0X7 zSCNm*BxCNPi=rh~ssHt*|P> ztXHjj!mO3nc($UxvS~3^S@?(swhY!{mGyXN=+fBL*1V8)#>~Md?cse&KDh zlGut`NAH&2vQmw;t)-8wEMq-ReVeU(V+E;iv(?^MzseXum;Y85V-BQ?k1f{q#(KvZ zptf2!8f!1zB;0BZGFCg+0QI&t%vfDqKCWsjCCqEogN=eWQ#VFrM6pj zVV1q!dQzK{)t9PwgY8y#`rwLlb9aZ;S6i5`MbDiEX=^gQ*SWdD4r^Fg-#gY_rtgfJ z?tRBv`A>c8O`pfI)I0hN;MOnu3iS>>WTbz5Y3HMdS&p?Jad3lOA?umM5e?qAmL5Vc z7qiD&rLD>I^sK_#V{J25k~OBm9_v$W9kc#Up8(loHToLdF{@8wo~pa@e%bnbmbx+ z7@s^z%R={0&7}EmX$wWDRXz+thoyS!Z5G~+Cd^WRrS6#_CUa*i`2RpLUG!|n z=X2BZ9C!-apdD2VwxT8ZZFNlnTx%L(XW<0TP+iUrbs*hr4f1fB`x_zXsA7x>Px-I4 zTOH4*k6)>iB^dw9m9~HB`hVs5L6^ua*43rxH^oB}i`Je4b_=+Sq4jsP9xi&=1^-JP zXcXjDuhEBo_#e;1(LeWx&(ftSc<9qAq|x&9uzoJJG}p$q!ItpQhVc0!luz#g-2D^P z>;4yu_ODmSDX4cEw(j$pi0q*$i62vP_9~2_UV8oMf82qcC47+S48#7pm#LpeK;mAs zWBw<8oAzP7YoM-hKq|#TJ(uDncC@Pq{>~q9xW3JGe(J(62I3PL{us zrki2^dNG~t^zVB4`1tR7f9dBPkY8D>XXqEX&Bk857HNB6KWIZQ#Ryfd56Sg9M*DvF*?FhEWMe&FT{Av z&!t%Z|MSrP_rC?YO}`?3xuon#ZifiaZuNR|tl!&hQR08-xBsue|2m$_^6Ij<^nW)2 zlt}ykPgJ#ARq8#Q;TMxJCxM-#Iy}x?=~zOu{JF=YhWroy2=&CzdxK}rq|l>!6DRoX znaoH>*Zd_rtf%HL1^;BV4;xo%$10q*E%lH-zwj(L&N00ULI3khDw5{w%#p{3x3~Fm zeDb!#%FNBhR&AjpbDUp9b6&-q@@9HryVXgm$fJ7dLw-0G4*&C3Ldx*X5I)i=$XRq= zGN-k}hlbDNm-;3BGU7J;7$#>cmp)dx6?!eDk5XzV?GcvxwLT^cO}Ty|?UT3^$S*4MIisM72Em88z62yPl1-XRTULx`aMuhI^f5 zu7fRBQah;SZ*}_y-I;qMZ8LpnktS)Y3XNsJP@`R6B<`j`Z_te~dMZP2fXZA)3qMrj zTqVgL5`f#I8P;pLU(im=WtC-|Q(0{w6(<+SBPbSoAIqRnVg>3eiaIFFb4AroPFJaE(xX+K!|_{uXPj5$f;771mkn z>J*Ds;-~y9S2=BnTvwT^r>~Q1hfX=pH6g3qHO}=xcDbt``LCniu{0T!exqx)>klP^ z>75@+yobuV+jYO1PddS}$3#5hTC0ZZS$^JPrfa`zPm4LOc{GT2LswqW>lA2y-WF;P zQt!jG$TwJ1bo(T=$6Tjq(_D0&bxlZ&aG!GdTU>N4w%$p%)U)d4l-BNN)#6R zjhjAw=pH~HWc{w_ZYmM+sZg6{u)@03cz}CpXu0lkuL|iW-0SrRyw>Y=TCYFmwVpoa z^#=Lzz-YbRd>3`Ncl93dp>8Lt`FV%j{ag{b=iQe3o9xSOdKcH$?Kx$g%8&F!yT3_~ z_awLI(fI=^YI$F zzBP8Pe)JeW!+M!E&0<$o$z;;kw!O!*Siit>-RH6c(3umc{U+1)SA|@(-d%qKmDh1ln)i_&iRo8_yRPyZ-E& zOuOFLw3j`_lx!unU(%EPV(W7c+EG~p)NI%AHak4M+}D>5rp@h5L)b^PbV}*Gqo#jC0`*_Birm5BO_-qX=yKrqt#YWk!s4eV1`n z#6)*~#xK{q52;;H zdVt!_bcD#Y+UOQ9yj<%>dLT~8vQI_SQRE{Lv)yR%vP64r%B6?|S6Y$Fn?PeCRD#QX zJ|mipKc_XO7K6T_mtUFpJN@$ePQUQJ(R2Dn O&OZ`=Q#;N<-RCxR8o$If>&64!Tz4PZWmf3jYJpC_f;LbE_Kb+r6!eq_?a9X2S3ae7 zfquztQp?gWQL@894MYuahaUy3|B(eUwYp>UIaUiRvKv)72Q&!Iw@S?>iTnMISlnOz)?v)v@So zRjGy~6l#AVed4ULVWCP@_fVUuW>A}_o~5=_eL`&~^(Sh(tMk*HFx z>9ZuX5+3+7wa(N!%QHhA^yTWdyY_e2{_DtNAN2L2AIE%^x}#EejL@FZ8kns8leK?} z_D|RTMIIErRO=Pmzg>HF>hU}E_?`5Gt$o6~ddwc(9@S%x>oLbM#*Y3*cc=)2^F*N1 zXx*l3Pi6$>lo^3JWs(1wFIV?=)4knwZ+G2$o$l=w5mev#dXaV~+@Z%*>M@mi%m~en zrZypAlJ2#qXxAcbY}f5h4eZpwySn!q-72px(Tft(wa)bF;=H;z?eC`j*LhLIb>yKU zv}c6&jL@Db)Fvb>(d?3L8eXbh+sW10w_O8AwLYq~iq!i@q~5yp%Aj3RdvZy44(|ME zlhrv`d!+@n^RE<9yZ1`2-PyM&8r0%wl)G5#?YiATo@2fpS|8QzF+Jv()+z>+6$8rB zI$gIJWc(7Ky$%k`LYt?$rng>Fa3P*pehCTXKi53198k!}}j&tk2&>vl&BR%-|O z-3dFi=csOvktbo!W{ajoUr^BAI#{1!Sv{@J^`kAiTI^g;zbG;?zO(O+2B>&a16sTK z2$!|4W6OlPL_KxgE=`=FS|;q!`j~FN(H@Jwo%LK~hHkUy`{Y{IpK)2kC~RLhCFxsV z@1~S}>-V{>7V#Z?b;%e#CAnI4sJ}o1><+$eDR7nR_PP}6@ZF(xg>FZrAnhcr>vX$F zw~KYVRFB`T^$y*>t35}xKBn7mv_~~T7E8CDCdiVmb!3MAQU9*Ty4JRuVyDQ^ZI*7k z(MK4s_0?&;v?)qCru8?}cJQfY*wL(Jpgh!4&}MoywC6hQsnEJkw~L$UHPr1fYI75; zRGm?`S;_Q+mPi}hQxWK0cJ>|?ND!dt-bVPpVxX}_#JIAc9L!v z>2|wryA{KKhi)h7c9Cwk>-MN_N0i_!F{uP27wJ}&LZ|EY4&6>Ft^Y96YS+ITeYY;f z)9obPF4C>)FoqW34&5%ImR>U*=BqkiI{odY4!-TwcBapbt^<1&MlRBN=~b9przmS= zlGw9Z*h?U|xg)ZU*7cABQf7a%1kZkE25^mXZP zQF|r@`r*8t)V`bWA+^2z2dTXw6Mnm*HGb6Tc4*QG(swoaE49BVu^LkCrKr6$4QZb9 zL+>s`yPyQ^csJUn8E7BVD-@+iCh7IaDF#&$5le9%Pf4Kmn}TN4c6FoB{<VeHwY%V^XPWa9%f^xzmjwpG0n@ zr$ayYJxDipfA0H^?$`a?w~6kc|J-*o-HZBX-{HunnZ`#qHqF0JB9G}u5dU0EQ6n?Z z8K%C8{Jy?nl2zKQ1~(E_W9v_Jr&6f`^K*?AEULdP$*SJCKgoJ6F0TJwRpW1|2#l^6 ze$UAI*%?-&`bp_l)A)PtsTzOX1NYrCy0YSa_HUe*ZjEl9Giv1h!@?Q5TK}boV%GoI z*&5Owqs#v(7LWhAuOfWR#+$lW7os=z>S<-K^bPMkvd@LjI&=^2{NvmCJ%_)vand=f zeS_r4bdMF)z~$nfQLcz|7ug$jx^`GO!-tntbSS%OM2D+Jv~O2&Rpp2gl@+D!D%*~1 zduPXXWo<{cFB{&jVt7Tx##Js?JFDb3U;c)E2e{8oSf*do|L@eevGZ zRgFjFWM9*#k|H?&YP0IsdR)z1RaqPNd0gdIy)VLb*Tx23S1Whl;cB=lQ5AGnDWkK> z2>OY(y=q6ktLQD*2>P#*bSZf%Ra-TZ{=ZXoB&$qY?dd0dj-5sfr~fPJ?P%9@*VFAb NCd9bTShL$k{(l)E>3#qJ delta 49388 zcmcJ&51fr<8vlPk=bSn7pEEON24l<_3vB zN+%{s2uYIsOOlYV7Heg#Bw?k}KPy>D^1D9wbwB4i+wOk9yZd{6?Q8G(T-WowKi75N z&vTx0<~e6h<6n#!|9s3dPc?h|ns(nS^Y55y=8w0EmGZch@^bR;&1SrIbG?PlT&gz` z*SgeZ_l)e6ggad-f#OfHU8-Lw+tn&G(8`Vb*+rnA(w@-MR)OUWy=CQEaiLGGW{nP# z1O9cV|GQL_y8D zkpfL{pg?d6q?v1?;in_V>pKS$MeRUv88lbj1Zk?)Gt>^D&Nx&cnBfUSeIN}~-#`PA z<5FWFd44klT4*2~|16)OmI<{%sJ%j+Fch7CUqhM+CK>(=a$GexDqM9CB+qX&q-ix- zLp1+tB$=8bRGm;OBd8QpYP~>*1-c|qmRCwOFiis6bwh3* z&wn5^_c{WS4Qxm=LFalmSyOucD+M|tP-dJ!S>^x)kmFV94at>iAZ;$SG=lOQYNb${ zgxU$o&|wD(1W!Pk31%Dq6mnek0wh;Wj1TkKByF=o`A8dsX2zg3a%@lz$p$*h4fI6T zEKrVt`U+GjP!%LY(;O%eoEfj|aMk9NZ-%vHkF*Hq}xdLr;pg?dNq^a7{@Vk&>{z#%7u6kMwqU%xCtWbfW>LbTg zCM3670LjZ*?m&THS4dN}mEn6L$9#WC<_Fu*Y)}npsumh*qEL&4+9uGY2&l+FQT4;6 z>O*p=3`nk20Lhi?tk#Aq6{?3&gM}LBP=VkCNHf7=!%s$zCm4d{s`DVZ>IO(NzY+s& zwT0R*)K;NRI21kQLYk^=jKLY?xN3@zBv)+@$yJ9znyRG+szQz-dxB6p%~U9YYHO%D zLTwc22qZ(794HWsN}{Z3wVmPPk>jfAkh)bnm;=oQ9U)DxR~V|BP<_HwaF9TwBcS#M zsupOfK=TAz??CkWV+*wD^-5!~13B*XAS5sA*O1(5{bZ7+)iML6BgasCNQMSLGE^G@ zUB!?coF>#dKIQ{V_O#sxZ_rp{j+N$`saefdkP5Ak73j z8GZ$FTy+y9SKR|?<_EdN*2m>*Xk*aX7@R?l4K6~mK~yS9HpqrFbM4~H6*-35K{8Y! z(BKHDD?xhx!-QHURBT$f)a{U_)ODuRP~^Cj4audZ3bZ-`>Smw~0`1Ze&;PJcXB{dK zya;JlrMoe((!*8rA-QUQNM4m0kfzlh2AVC-1P!7-4gYHw4u207-ZLo&Y*lKD-L zrs|Cvit`3{G;&`5c!LKW%p3f|!Mwps4(1I;H6{m?^`=kjrj!*(3&vCG<*KE~(d(l= zrk51#$h`z0xt9`1?xh=~>BYXuP`!m3DAW+4CPq+w4K!7tr2_2~=!*!bpMg#bbh)v- z{;Ho5Zm>0^X|TVc+9Sua>IuoS8Z6Mn2~KY`{7v_hbLb_6xRP=|y%Csb;aaDVL} z(O)1~4rxw?TMXYBIc~KtB)2*ok`KUSNapS7(8ge(F_?)Q8!UljgY}SXa2V1o(5(hK zAy8Ci7z#i#Q~_zAK?dq!Bgv%(2sK2gha;%l3{@l0G=b&`w9VE@QACIW{;A$p(qp zB)QdmNKmd6I1tT$nNS-Yihgs0G^;Yq82q3xwBSUqEx)Q8^?{ z+rtf&h#XTHki4wxk5)kHJiX=BU5Rx05DAc?N>H%Gfp1hVglsCB6q39{i zq39XSp}fJPkXROZ?m9^+dhW8#lUJ3Q!ME6xd$|b7y~GAc@?z&gni)K3pw`GS)B%#A zZUPO7fJPZ;goaQ*5F97eG@%wdR3Nw<(j3>IF<6ZpSKS23RdtqI-R1D~wnK-&b`C(u!WE|KK>U)10uhKkA!m+A<~ zr6xjhf6F0Fe`7R6C&OBY@&>m!ls9IEB$t}zKy-%@(#-F1 z!_PsE`DOW-KO1ZigFTJ`P0+bPctEI=kPMv@D7qzOaV+T9Y)G!^A5U+6n!>3_bKzc) zu%PSz1ZeJj9wZ-6{{#V-2)Mxk13{f-Zm+`yf(Ic@?I*H;p;{`~PwW3 z9!DTe?cWJ^Qn+u0J0~2n&h_6v-2v%po>*imdV?8|sOSwALZYHK*cB2Ly}@3PXj-1y z`%)_WYpMSk$C%zy#J)U}I!N-x>yJIqW*H&PRAvZxLBPV+3=%gSlDWx{hI>}H=}2?I zmBJks?z|lVh6KDUU{-OsU`I$UI1thld``GZq`BY(;T8+G-r?xJE2M3X_e}BFfjoQc zhvegZ1d?l?ghcH?@LNb@F-t7YBFz?2B_!D*9g-~yAYozCHKImkGEd0(?Qhy~3RnE~`y=hJzr@0h%M+5Ttp64?~*Q zUy}u#-)d++ zLYpA@2pxtr{l6sO2?wM*z{16shPhlw!_5<}HPSrqa!9V%yHuY49(KS$um;l1d%k!~ z6p!iRu@I7bUJ1$b)@P5gSRfYb#bTGXu=QztL_E%j#|22^@v?YaMw+J*+m<9xMQ6E< z6lA%L3`k?KP%N^M))w^pzj&;KWRC-oW*HX=cq9x4GuqJ}Tzd#4a}yv9w^+C-NOR9K zg`3w-p8qyPfUgL+RltJ+ehtY5W3P~c^noqs1WQ7i3uZxbqa~2cRWL`-e{^QPDqs%* z`wLhpU=4$sTPj?waO;HoRycQiY4o))X9xesm$Uw5VUJ)uta-8-kUZG}NS@8dxg{wxr&38ZOyrFd9nl;)lj zA-U&FNbb1~cK+vB%^HkFDY{O+03bht9Hx&a%ba2#XKIVxd^9 z7mEXs=KkwxX!bY{X{NGGJT4(^PM>Q?@>EJ8xs9HXu%Ktt?ZWj%+MGSY>8x3TY6qmx z2|$|KJH%s(cq|YPon?>pVzDK{;`d^)LoD`-#R-zO>EGQ^`lnBJJ7+;W(%k<9NS^mm zNUnX};R34#Fg5Z2st zIVAVo3zB;t>eLPdM?#uowV&?)I_KJG8}=)^Zx%40Z$8Pbs-N1Qz5x_CZwtT7pa|tG}rD3$+ZVUvPCtdIcx_V zj-LM}3OHB5wE`ZD06%iTK=7z==Y>n`8ZKA>X$l?^t`uo*w4$p`nmg?+;E)LLV*y79 zI1ZAz$-*s;;0_D7T)1t*9o3wzUm#v^K>ACV>&V%x?kD0AjWjo%0?DZ0DjuW6V}^LFfaKa+Ax-V0!tE07h;XNcb9a;HzxZxa z`($xM;Jk}x2wRb^s?W2(FaRJgS|4HGj?qMzw zlDS5Z%(WvKzW@2TfaL;K3OG@~b&#gu7s724?yzv@g-h>YxIi!qlIDuPKk4)g&Qs01mWg69KCS@Y1Y~PN<5Y$&$YKfa_#+)T>A_ppC=a} zjmOtwaT#g0sQ(+1Y>@?N)*O;8$|0TSzi-5&GxF@wACf(WL9)jbNV5dr3O7Tz1;Xhp zb1Ngb?+l0Mzx4uc6>t|MgF4GipG4No`?S>lS}e|sg}Z0iA`6l&av_by-y)v>3X$h| zcYx%1_kiR!21ByPFi7KZM%oyOG+Wq^Y%vXzEtWuhnpkbp}fz;gnwa6tMnuy9`pm(oiL{$02XqAS_=Gq$|x%N&-^ZVZsXtPQe z1UxC=IRUL30P3rC3M8Kq8IY#-PhydcG}kVH1Uv`HVC&w}=r2;RJ<>eGj*vXVZjj9BEHBbP zWX&R7))uy2$HC$;LOjNZM=d0KOoKEY$_lq1LYmuH2+3`%gyc51LbAm!NVc&3mU!$# zo;^-Lvd1|{_K3cbq&ZeD;p!vJTn;32<&ezvcep_Cc1Y8{o1TB1ATkCK%ZOFwoU4Q8naGH2*6^{eraSD<>VsDn(^eqC;1uO|^o@^#0 zPc|QtxvmZu2=;>1>tzT04aK7`^6W7Il08;Kvd1|{Gw(*iT@o&FK$z26<}#557YGI* z&9Q1se}CfiUw}NRl6xKs$rf|DHXeDlKOo>@0oMt*Q^0Q>Fc3TkX-=gU zVsQ~^t{p!pTss4jYnMRsBcY6>^Y=ggT=D3LUD%@+B=A6t2UtK0`1ODHxlL3E`c>J%IoYrD-(X@}(AKABu z`!9p!{s%#t{)+`1f;7*2qHqg^+ZVx=2zN-hlfs?11x&m{3bqk26=^P*56KH%4#|xU zh~P?v8!TLva5~GJjjU~E*jB**@GmFzg*)O8C;jcjVzSg;BDJ?da_ys#D2>m5T_NBX z0-hD{l7Lx*4M<#j;c}7YMd}I3i!>6F3)Vz%R|;2a3%E_dO9J-1Qwo*|*cWLoI2@7- z+K^muK?HY|a7%?-3u)f}-X`D?2c$QcAk9OsgLr(6G}pcW$+e>^NpkG~Bvv;NEQB-` zSBpg{(y*Y{e|@0YqY9EemO!${3P|HoE*@)<<~H_2vc*|Qw#dJWBwLg~8jEYhqWxVq z<=LYvc43e9knGV{JO)L0bQF(Dq}gH&BwNgYWQ*mHXoF6fYlT~@Ia{yNRsnUI!2=FR zf9wKj`mYd=6WT*tToj9xA>rEDkfwGg;qsBzJ=5zCXl}Y(zyT3pX8{L?!C;+m2ZYPI zTMBj&E*EKDq;`;8ujAeF`eR@O*j2#rA6C%kMRUVo_zx=r@`n}l1}t_ki*%h>R7&ky zsl61^-2Y$i)TSbk#-p2f>_D3P{~D6}PaLW}aGqyC^0}4+X)L;nMLyDI2_V_Ru7Eb@ z8l*W`Jp>#i;3xs73%4wS`;Bm`h1((AVd2h@biV)P0@9}Gp5k#CX>L099+KR&&T`Kw z$eNz77cK*7<^saChGedX;q?8FUIO+JaI}E41>9&rJeqD0Zkupl2p2mnTrdmLG)mv7 z=KR)S=OWLYmO=6idkQ$*0RzENkYOAke;pL? zlz>t93V4%%iAZz7Mvz=E0LcX_BDlW7^$@PV;qdySQox!Bu%Cdn0xmZoaR-Gv?Qryf zgfxrPUo0*m%{|8t5BJ>2hUTW*Lt>Qz!H$r|<7V;biZpxlf#iAL4#^hdAlYI9q_G$v z7L$=?ix8xF{+kEQ9vdLpV=JWbxJ5j6BF!ELAi0g>kZf@Y(j4!B!bRN|=F%a-(eqyb zn!z$iu3Z6XYTqgz-H_(m6CkXN5}|f#*L4+m8_NHUT>#%>^qV zx!^=d=2k{7s(IR^{`FF~54Qt5cmcMOgU_uL4Qd)8U*xizxpsN5x7`;qec zqnm(zAsMWS0EY-T25DZTwZdH%F8u*1c(-u>^mj;D|3Hxb5XmX{Z~hKxsCZ<-nrruf zX@} zKAoqjSfqIg3L$w3dP8#U!H}l*{lX0sZnkiTgtN~_fFlLGEMVfOaKQ{nE?5AGg7o*( zkY>#v5Q{RT&3OXJJr9Iri*Y2K*B=v*HXc>tF&Sz0m^hGsudJ&pl~(9%@giW1UFhZ`?!E-1ayxM7tDg> zh0cXEi}a9q6e7(%cYx%cdqQ&0BO%QqJuKYAly+W!OctFBhpGKv zS&T6j`tt{{=Ki-qa{v1vx&Ln=c?r%znl{Et8yAsgi~0|dWQ%M_wrCG&mSCK49c|

@DCR0Y^GuAowt(sr{&UR3pt6Qz5zb97wLc0n*g27H%ujHiLTwJS^aO2c+L^AWiMZ z#3SlqO0z{0q?tD)*KP-CYS#!??r`+{S0mtR0WU{@j|&+6NVs4jBo`b2$ps&VGzD$p zYJ^)L+`32P^~e4QaJ+zr1^iY(o#ld;9WD@z9z(UwB25sBM5K9<8bNZ;I%__E5J1{A z{e*yp0+tJ?vs}Ap1UFH*zQPR^ZVV)IGr}Cb|1wFy*#a&WaGijA!eGE(E8GF$P6&5S zxcIR$!6$`F87r?p+G7`9n!%9V>Ffw_vVaSa<|W-JT=cjwmjP*3^eN$TkY=s|()|7R zFaak=fKvpVF5qkp>SvyX!flG+o)&J0a0i4t5$5cm^{8|@Rlr!J%}E2vE7Ka%9D9eO zzo~*W=iP6`Vj$9NQ4Pr!vmx1H=cCT&AL+?tnt=NRyewczbr>8CX;$}l!c`;91?NI? z!HvS5i{Pef&erRANx=BW!eAyOcUlUGf`MQMNHf`Ir1t-4Vf$x@M+L08|NfBN|4>M7 zqZ*Rim@fq<^#7uOvkgd(gr&l* z7j9PsH&;0Nq`$LX$A#N(3wYWA=^hHCY5FDcxP&yXdG>gc+;eA0?s*8L>6!L(etQ^! zv^iG7Erv9o|Jdn(f#5z!Q+vL697LKuzJTP~7a+NI`~;G`<|&ZIg7$OT_*dVbPp?1z zuV0|=e_1>l!J6ABgyc5LAi0g6klaRJNYe&wblMn*G+T_GfE8trY2vZi@u17{A_12R zxDk@Mox&Y1BIJHk9&9%=#n&&_F6QsHSEJ$+*UlA}DX$Jd4a_uR??Tz3F zcM2X9?u2ls!<-$ApJ)owZ2(Bq^sD002x+dJ3(2+HL2}Q1Ax+Oqg&QPXm2kDf&70^v z|ItST z3wK&Lt2WGKLmKYQi08k2 z*<%nSdyIo*j|q^*W35(k$af zshy8Ba~&X=>m^*3!_k+mL7Mj8b1d-tH}dRJ3&|eSAi1{An%bKjFc4fU+*;wb33nXQ zaGQlYCESIl~RK?Jz{@Ll0A|jO&fm@i*%&fA{UY^+C#F% z07zZ}+rLY|!2;F@I9tHg0{V9gw?VjF!W|Iq3x}gGXoEC8?}>Q+JBK_soj#2uH(d_N zO+O52j@uulb`8?ZO%-moaH}J@y~1r^PCx%`6>yh;I?D@v0$J1apTy%7d*EHPiu5eKAC z9YLDO{#iV}Mw*+x49PvGOee_)C?As7s|32{YAhU z0qYD%+)CjNM{oy)J0aY+!s#s6yJ$Ng{j&QE)izCkBp$IybJMAiJnsM`dz3-)yelA$ z#UZiihBRCBhGdHYkmmQlDrhtBj|Chf;6wqZLvrn94o7bgK$_Zz#bQ0uTzfAh*FFge z3wr*uW{~FoV2C`v{98Vo@#@J;b7~{w1G1hBzK{J^WO_ z5dzK-a6Ke*ha$M6!W|dxtZ-4!hPfO_=l$M+c;Ny}Cj2di8~5iz-OA7z1f6KGznueln~=?jS1I->4knC|gr0M@#0f#aO?qT7k2)7`D`%bu}!fg@GJ}Tga2=KIk)-2sA z3f70@Ms=1O%|zBT`ZwVM!rd-h2$H#jB*TAye@4Kg0)8u?&N6rrSzcXt9Z9pg--`wP zmo=P|Bm5uMpf7qymMxtBum+z0!vAFrx}cmDk62jq36>AZ^X>-89z!9`ynhgGq;O+| zs}*jZ!_i$I8`|`LPCS+)&9&D-a_udUT>CJjsr`51P6${3`7qZFlDQg4!<{G2`EQ2R zBF_b<3piWAB^nG}Gd8^^-DdK}x$-iUifd*5qiil_UEHXPi@Ef~0xn&zrPo!}gov8W z^dHK7yo?6#FW%Qf^T%ddFNNM4+uT~D$5&RzjGOJvpl^}#1PaqzJidj*FJ8LA;~jkk z(Sh;ruYT8F?~SEfH{Lj}t7hx!$DbT;#nab4c|3*5WVv#6>{B0EMRa?GwtH&mJDfbU z8+|2{$Lp@yfge#d^vy^fSM@zKwsNJn^j7Z()qlFs+D2nm=(eXDMC;wEw}r+$-6;k8 zwz}Hot%g%xEBa3ayF!=V&T>;?^>c>MNs}0?u(9@#tPeQ-+ZAcz( zHO90OOpb0oct=yAxV&h>T2khn)tzU4ZDr8+$?$s77t+vrZNh%D^?Ds#-J|ZV%zD?k zvg*0>=zV3c%aiv+=&Lmup*PlK6*YBLzePmLW-fP)7EidcvcmgK#_myhQ}CmnCvR%# zrnPxp>HFw-e=Rz>8hO~(oi~H_Ye|KY!v-^vp&IlBbj)bc!qqhN;M#`hscCrE=R+sg zmNca=j^iD*Aaa9~fCweO)y>XpM)M+5{+UwjQp@Nsx$)0kMK`OxuIkOSYhGj83rE*o zMR$?^IZ5v-cmsu=77Yrb@^D)I6GgZF|K$#$4R2+X{;C4qE7tp_6~r5#WI8;kp4PHx zG~Lzoj^7gMxvpdgeG891B|g?aQ)}qkd~hmoIxmG!1w?s2MNU#>6nhnJuofzn%~wx=^wOc5C={>&DnE zZ#`v_tzh6a^t9(lYkDdSwE@+9tSS{ z0H~rr`H#cn45_M>6r|@hz=J^1>cpr$Ub>d))xpDy=KaUeSL?HE`g$zSFR4E2BidDs z2Ve~q^SDMYCccKg1IwelWf$C3KfS|bk5aS~k~NdCla^Jl>WKrbT8mXw7FJcqv~uRK zN9CnbD`j+!(uA??@kWGIy-iKgBJBi(_SxExu^{+$gS_Tq(!KG_Xb*) zKfl|GMr&i5t@~I`J0^bGE+yLa7>-^#eVmMzN$b?n_tD0h(cwf=bX8Ym9->TI;-@OM z>?5jRCX^^ssVA#M$H?pdk`DQ;DKReIGbtvIF2>#(AAO;j$JJ<>pH8VjnydQ5&?_5T zG~16PA8@c~zqnFjlVV#vL{yTt-5>gHW9D@@?OaLmHS}#{)GhgWlH*-@>2z8gc|!Mu z4Jq-i$MEx)RJw>|xKaag{A>`Pmu9T`yw^aV7gb!#N=ZmcX!S_?v>ekDx_LRTA=y?n zBqSvCF|RSY zu&Ytz7hO6fE-9|;eSKPEajG(Chq6_O|LNeERi}+{zdlUS)lUH~!J&GD6vNTglf&7E zk>&GnRSfOc>MGhNG-6X(2b=?ud*VTj?VoCdj&4eg1`n@`n;Pq@K{XoC zCk$V58r0~c-k=7P{iLYJB2qpf4BE4a~Ixwh5mGQtG?1e$mH} zyWndLuY6Mdye70i=q=(8A3RrQl3)=QX7r>8XNli+jiaCDd|D+Za4G(Btgm z&^=oMcO!7c)*QwUeztJy*Ixxk=(MA?zy>;~`0-0BT?Q?EYJsBX;vDjhuHH&P-s5xv zM_1#;Qq>P66Ovtd1F+g{XnW}NmJ(}gDEs~NcGw}W4Q=2D?5B-VJeY&-LYGhSYW3;Nlgeinr)wx&eYlKLSuaBILG>8B0! z&#MkLdYoQM?Qe|nmkf*_H2gU?MZJ`Vt&%7%~Id2y<-Yogn$-cLhnV%C_JUiF;??Q&t9 zpvT@iYc~wy=GL->j?x)NEbvIo+7OEw= z^zKyqm^&I=IPda}L&{cXO1y zjmBo`?q{`U(dBDfVd-8ZYp;4spGy0w_x9F?=2(@ZdLLId zwvM&R=s-LX_?gyAsXyRcr&k#CKRU0g((<#*!qIviC7Nx|>c}plaJ=PHZS(T8%T-&7 z7SJQASs*`KQRLD#H|t&7s%YA()K=P7uF7=eQ!|<&x=PifZ9dg43DMOmMMpbZA?m0C z+ND8jG;_b2tG7Mt!?r4$LKM6z8wG=Ev5t=9bM%^urPf*!xRSQLrop6^0LPf9nT{S) zYxTAtb!(H?*v1K_$9t&-6%KedEKE9~Z^|qpx*!H4osG|=9_qQrn^HsKv zj_7EiD$~)kEk0`X3_S!p*gD*3!fSN&7ZX+JXoZQo=*ZU5BGuiRK!@TKMdfOd>Z!NA z(P(P^8nr~-sG~b6YGf@@eRMP^1KXCV!8&@WA)?pSU6zeGz0(-GzOIJojq|n53U!~3 zl#bq{(+qo#p*`2Am8x1t50GgiYo&TjM-S^gSE~s+I;;0wqbBL7M3-Mf*8;e7G0~G2 z-M#Xu-|BAGscCxSVptZ)~h-l z_12#6s26lJLGSsFnnRK8Qy-a)FY1i}4Zfr1T5f7BNEga-^$uOh+;k$|PD@^{HmhZp zJKLv*(o4W{wS|7I!nW)5wyo+-9lfEWZEBU}qKC|i)=F(te^6`mw&(S>Kd846*>w6T zTF~8ULxkyH)JDB)9}l*Dq&8b#@As}bF*lE2SNsx-{ zOvbpT3C31_jKAnT6B|Ge)B8VI44ubY>q9Tk!+3A<%QpSEN0;gAM(VuYT$KskHwR-$ zF2=R#81L0>jZJ+yJdZUcuTXxIALB9)#C?FGp4URdf*M$F7OVR`X+CqVdPXIW+o0Q+9PoxwYQ*7)w1x`(&$=-gTrWh7Rt^ zbR9_u{e4%F|9HKOSWES(|CZZQljC6YOFVRbJ&YIYg}Ur6ik_EPLOXR2joY1>(lYHW zw{sA7r){TZqC-n}XW9pSWwG>pQ*squ-edJRI2U%d7vtOXUkb3)YxS-rpWoM;LtV74 z|9{#V)a7}f*pealw=X7Hy} zOnhULSKZlaWN7%FUUmarc&~2jt(aHHXh*_eqV^~LAtp&ROnA$kq^?WEm`_cYsDt^} z#+Im4t%lGzzr{!zceWTs`#+$4u{# zmc(Nv80b+xYMGIvG;;5@@mg~t3b=dL#ruBA18#($N%LTz%{^q=Prs!5a?*>W(A ze@@5Rw`hiuGcWs~A4{Plrk?O%#QJ%aKW|QqSG|{x@r~xc(+(vx-qJGk^B>#V&V~>5 zhJ(~@OY4)^8~yY^SF_Y){|;)D|80-DvgsGGbRE(Ewnr6FL=Slrl~WWIj!G$_y8&j~ z?f$pu3HWY5!Wj+U&iytvMs=U1BU?2}K11OfI-I2%YtpD3`w6&8KeE z(UURfa}X`%ZB~;e@#ONliAtL!#U-hCOw`72Pw^(JEez_}C##(t#Z*wI$!ed8ZfKAm zm#jWE(KOnYqW)^41+*?Mzp4Vi4s2Zw=&9*_b zt)Y6{Y)hkUjntE7TT9wzH&S!V#+HGWagEhN6SWJprs#DO?agf$m!Z~}=&!j~QMA!S zXNsPHj3)2bgu)(cp+Cu4A4_*JZlzRK%IQL>3PXWbE(ts0x?FImIlnyDNUeUmjRE=LuZ zNckU)Yp(3JCVW2qj<|rj+CJAf) zPnsXsQVlcFH_cy*D^OJ?iVnOJ*Gi2w(O1pxh$~d%Z4-KOhEX`hMD<$S5m%&Um?*Qw zu(;Oh1rxQRZN=(k6P44p61B`kaVfjv+NjkgYLxPET&a53L@5owifgMrFj4b{=i}O` zJulD~(qT#Gl|;o~p$?dhub0%P=u;D|Xj5smSD%|`Q=3{(dv)4GN1OIjSE}I`t#Wm}NgnXmddgLQ6SZqtXMnOS(ZhR;8jmdRMFQ(|6iCPw372jE1 zGSL;GwFkQTa8wUfAyQ^DG@;2X16y41cU4RC~_fT!;YJj5F zaW|+3IZ|UY?}_iNj+tmh(<4zgD%VSTPqmz)KB~EiI?;!oZ&FvA=p(uS^;OLm@t$+- z6if9}SDSEEVJ$`Xn&@{aBjWq3wy*H6H?$ZPKR`WWqCqXj#^0jeHBsM`T6L@X^Ag_k zc*^7S?QcH1yG#dDweef(4%OU5&GP%j-Jw1(QBr>U+W5ihBNOH|I1+W2YD@Qr0DhBm zBx;Cy(L@`mwY$~tO;j2hcre5MHa`@9kMhtxW9+|xW_^#!GtuvoXU7jyH=5}2KPMVpR_1`q*`R6hjU(wuTmR0(oavL)m9T_(J3)n?KV-z(Ak3- z1y`l@QxB_?Cf7O5N6~jW+OF!+$@Yl4%-b5S3YC47VdDw!5f!}xootWAv)Ch$^ly9O zJCRY;j3SG+#pyktjQOBG_DnX>pX&Q4$}rKO!hZBib&iRK7t-%~s+EauC|*Z@{@B(; zgY9C!8mr1pIJNj@Yngtucp8BNz zAL2tde%v;*QjgH@Ft54(qh3p6?RXnWLCaO>U<96g^FJeUm7D7YN#Sdtze#Z4nV(&d_^R#sx2D!ckPu{JRqLg#ujEp1cR_1bxVK z_)+251iiXC`X+rsf?g#Z9c(f+K`)YyZciVZu$~nDZI4<-+&dglbbrpwgbm?nC+)d0 z993n`OL#9Fwe-B25PJKQhTZdrO+J!ezdhyts@^cU9-&P~^6h)*%JrH0lgT}l?W5?BiEza`sg9cn*U*#dD-#`~ zZJ(>}P4q2o`&?Z#kuU2*^@Vc3jnQ5SlYf2kUn=q8&U=3lBz4)wWp zN>2#Kp|r_&38z%R?7GF*Pkp5dP4ow!kD@C~WT*X*@U^u+k7iAEJX`<50?Iy}gDWqG^ z<4m+W<%&eN^}LB5Yp{cEbXeb*@NkE^D7-i*Sw zgjD+d)#`4dr`z;a308A`iqBHtr(TnoX#HrSW4`MWeOBTQaQwS%lGRX0v(%q6dnG2> zR+Hb$#$>Cxj<%~in%1ghYpjXNi~1&}SoiA34cnwz59)~bOtnUv2z#bklOpzPX#F-~ z&xY395qmbW?5qAD-kj6QHRzRY%MYb+x`SaEX8w($OS+S_Z5+I>K5+serYZ zqnO5}{pc;X=2?5q#=B`_p7oK5zN6>t zeCwErtm0ZvzIBQtDt~8UOABv?^6|YlvB>Hajvh>GV~q+&V-v5iW`(2iiC0;h_vra! z7EdK!V|~RNW7^UzI$7VFs5{M~lXWo+E{gALCH~PV7^S*e=^W|VUuR{R2(!P=$}9wBj)^9kX)}Bf1VGT3ejuzAgH9DDbNpR#)Cg^KDY^S!+Nzic-&6cNuVQT28&0)_o>gmX=4+XcK+Z{AO#G zRc)fbHjkpW1SWAro<;TQtQX8S9NyX1%N*G;IKH#3W#L`h)qBC(7>=UUi`I^aXs)%7 zqnKGm{pbyXLnfM6o@LgfX3uz= zPQB&U6DGu|x7?Z<-Ze_SVa+t#uxu-=xh6u171k@^J=@iL(|S7`MbTRz??*(dt=$pP z8tY&)1`t(5==N|1wD?>;8%(2nR(a}WumE||} z?2T4I#K!lmwr1mLHO2d$HRd0-jW^pomZj(;AN0?yAHJ302(Qq5^u`fy+iu;K+^61_ zaCB4hZS_8|9z2Mx+{`xH8mq&J^j1}+wauDpq7-XLy=~Tf9UZrBEV0x!>)59Nk6Vdp zttk3VNBr!t-TFyKY`WcY9mSp#>2rto*V}G2(Gk1su=*XtHg?f}$A=JaUZ114vMsus z{?DV&XQ>uh$hS!T*W+(f@p+G3tbwCgx+@SPVA1De}*?LZ+$#&J`~3 zCAH<8Pa!|ABr;s3Z3B32w2PgTQ!=u=Xtye(0v=VaP5=L%F>;vb_)GAwb&nF{dBnoH zRIg-Y_}t#v9GOriGLgDdA@cq_^mp#SvAM@pO@>`=QA&0Ha)cX4ELzp2#!*qoHEz92K(z({LeDC*!pt&pTm3t@8_IXqvrY^L8dWCG-iGy(J|52uiz9#;9rNig{{iXV$q93C{ zy?_n$rRo21-d6vv0C#$uZi{>W*E6uf4tSvE=rf$zJJK*EVVx^1GS1~FK-UsF5|Jrn zJZey6K9v2p^k}mW>D2mOweVNlQ$u6_Rxfg&P|TTRdJ{f^qD;eo%J_f9G_~UuE;jTb z2>l$xQ(>3(`V4~p$4A$Wh>1q-kHzB-oRPOij_mv@osVv{gbLFQ>1cg<=Q5EaWB+(W zaKVUN^T_6!1hDm=oA_tX$cF65fc201F~eiz^-7+Zs0>{O-1@p?DZV0Q(yCZ0L0&pjP!E;At9h?_``VHckyodsYo};Z9`( zomr{AZ?lj-zJ>dfWv-c-%VXgX z@%B%d>x!b?YLx5y)ZGN&mS(nfb^gb6a&lW2{NJnQsxmp*YNf{ps@ij{)j&N?HxDXZ zC|~KqP1t;^DgA1kZ&hSr{Hf$-tF4+zA9`r3@MZ!{jPg{AZUoO(bLq1f_HftdsrOm4 zRWaT0L=z8KGhD|Dd#l-cT;RG~IMG__I_jT7*x45J7NElW5K~;-^e?oGU381<)x9|{ zQA7SVE9ldLKPJCTdXYbw#^wI*^jjI4=%?D#CoUSO+@dqqZE8_&l|>Ok>0{RWBo*b<}k|DuT^tb1s#ZdSD7o?*TJ<#mmKA~vU!DTlccHC? zG#j*jgKLKC$~FUC^eZ5>ct5pupX(uYhIEoOBIB>`wba^>+Rwcxyju6VU&r}hNvFxZ zIZwOS=ucp+(F?Ukjie8Ttx@f~Z&4m^@~qLv?}E1bK%W7-^*BzQX?f7y$F(i*oZE6Q z%Dv=1ZY^x>_MEahwu<(|x)=EqJxT6PP3T=|SC8Tbo(k6&IeGM(G@n(wi|k?a%Ndrv z!d2X+iwB+FKwX!n?a*gF9wc5m>Xoh~g_Tyebx%4y@LbzUCX#->_5Gd&{Lpf*$_+y2 zjHPi=j_t{J=Qg1`ckWBLf9LL-i*Zs(Ep6>wTxl(^DsrFpl)2xjPrs2@xVNW1LmQUU z+n5Wi{XRNx-S`Ymz8mieE^vM2nn7eOxAV7n zdbnStV~>aKD;^xs-JU+~E883)eSP+qo`KZjX-}oQxagc`xI3oJFP>2@+;p}_(FU9W zziHJV3dg zRO{rClv(5-OIugfe>@7!O(fm1_;JdA*7{~^f_c1*ESed0T-DE8K;x491yLn7?YfkL zA6hMl%C{bC@;;5La(B=emA;$C@7wIB@#joh59=#E;(?cM)uT7DsaWo*C|Dnfn&HNX zhb2Z=`o*Xu*TY3FZxZbjMSl)>Yj!N@*RoP+#6F+V!>`Qyjk59Z`$j+TKGSphOwXx= zFiZWQGo#e@{7P>heRBPvw~nLppvF6nj%BfXoHa6Qinr2rj?RoS>nA#Jco5F^;(*Tg zu2)&D7kl&FH_$saG!`H6{;VC!T(kAHa=Y!vk;Yrm`EI-ko9|vor_54)TD_>tFQo%i zNoPh%)VE}M%7bx9D$bSXXnavWX`-2G&lx>^!Gd zdCEy&NmIqv+oPN7t*vNluS%_!n~sc{zeA7^#aI&t;73+F7`rB-_DVv^N1@3+x@H9{5n{PY35@1vX3hXUIA z0yG|v%~eBG-=rd)FQU(c4XR(HGSuBP=BSA@7O3CSSgQU&V+VDN#?I+(o?W$PU#;nqT1~}9>(nHzLwdtPU2KugY}IXjptajVi*5^T<&bXc%h9^C&Ue;& zh}J{2Ua0j#tv6c}sn%AVIi|I8*+{uv+SCP8zYCchoypOe&RTcY`cA!dh|UbrnTc9Y zGJ1Y$ zFiGd9==^*Sx?ZI9Qk~zdGh6lkTlM~1={>N*q!08yJN0->?{h-$b3*U)na-;yxOt+e zQQH@bA3ncMEXbIKp`aCsi*3Nos7rnJdR7id1>p}XW?@qnX5WUY3 zz0cj69Zq9x(s;dflFrQ6db1wwts2;>fe-ZN&-AFgx<{{WPU{@6ZqBQl)A?(4zKa)4 zbfFA2p)+^u%-uROiN@HZg_>Qc*+n|DnKEsCn~OAXOb5rbR?+$diPlG#9vO5>>P$ZA zwxOYy*IR98W?7jumRqf99BJhbYwMdI3u-|u+FhXaW<749%pu&<%H5{ISPLivj{ zqSi4z9;Zxf-R%}8P)C1d(azdax7D(`Q55f@mx68U+PSQuiEVv%)&n%Y9<5c~5|_2Q zeOl6lWIa5P?veX{k~oW7_nt!{?f8ceol+*G7nU73eUcB`X5 zPtHs%@=Zv?-jmWstD?Hu9;=&Og>P&RDPSxELWp%QfH^Sy?>2riv`6{$t zpvOgx^xU;RuE)=4r1yFnjdTcO7;I$zls>;ye7pfNjXi{5%%kIgf{ zR?v7nc5_??EIvT0uH0+oM7Q z)#IIdRBd#=P2G(#R+|5qj#MdfoAr21kE*TSt8Lw*F;?3Se+8!JzhaIW z=bKNOjuri9j_9OpzZ$hk(*x#8=;l|VXDikk8Xa3gAHrAVbt7Y~f%c=S9lgJC1%34D zN_vm6T#ct+sayF+*Hda;lQA^DpH@wyYB-+8T$nivT95bYu`KWcWj@cH zM`PF4i)d_{1Gbx{_OwDtF8p!UQqms(DjHX$Lx0$E1C5iCKA=HG3tZH-2GpLI>LiP~6XLp{>DZUo8_37LK z8k6!{)5wS5!PK^-D?Au`X??~G{jzS3+dZS#AS(+8@l)N_VIP`%Htj0fvv13eG=>VF zqCap|s{>sqc(DNEnu6{$W)?wzUxIN+DKI`6@71SdR56;nUgsmXW~3uu(&~DmS`}bb zHm2Q7`&1 z(e#hrdA2NkLB?!)K>b^FLE^)%h} z{m0!ui+-c-LW)&tb*L+BV5PfG71dqWz#6@7T?6aQgt{lQt;XxNWLv|V)ZKQC)o0zw zYpfq)*B$I`1PMy&JwV704PFUs$-V(LZvJv7F+)(vvG zwpe*(SC-t>wyfQdwnK-O-QBKTaoNz~yM|WYePz2V+FViG{;r|LrS03a8`8dXT^En5 zt(BH>W6B0)^}3PnJ*w;J|HaK*s@PNayC_$h_c79sdFoz^ay9cU*w%2wfe&u#zBoAK z20PI5!MabPTpin(?C*z~EZk}{n=e{kKDpyM-^Gu2k%RN^B(#44S5oc@)rS6GtlH~r fu_`6iMzifzX`LPKn&SGg&AOxn*J*1;arFNOJA1Zl diff --git a/FileFlows.Plugin.pdb b/FileFlows.Plugin.pdb index e1f43fd77595594a01f8ac0910c5e056165aa047..aca62b357cf455dd2c431257077375eff9103198 100644 GIT binary patch delta 3592 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 VH&5JV#RuvZtZ6eT*iwgf`X46H3R3_8