From 13e5119db461e10b3053faa7ab1ebc226ee73737 Mon Sep 17 00:00:00 2001 From: John Andrews Date: Sun, 25 Aug 2024 15:14:04 +1200 Subject: [PATCH] unit tests --- BasicNodes/File/Renamer.cs | 2 +- BasicNodes/Tests/MoveTests.cs | 78 ++++++++--- BasicNodes/Tests/RenamerTests.cs | 230 +++++++++++++++---------------- FileFlows.Plugin.dll | Bin 152064 -> 152064 bytes FileFlows.Plugin.pdb | Bin 38096 -> 38148 bytes 5 files changed, 173 insertions(+), 137 deletions(-) diff --git a/BasicNodes/File/Renamer.cs b/BasicNodes/File/Renamer.cs index 22881ad7..bcaba8b3 100644 --- a/BasicNodes/File/Renamer.cs +++ b/BasicNodes/File/Renamer.cs @@ -63,7 +63,7 @@ public class Renamer : Node // remove empty [], (), {} newFile = newFile.Replace("()", "").Replace("{}", "").Replace("[]", ""); // remove double space that may have been introduced by empty [], () removals - while (newFile.IndexOf(" ") >= 0) + while (newFile.IndexOf(" ", StringComparison.Ordinal) >= 0) newFile = newFile.Replace(" ", " "); newFile = Regex.Replace(newFile, @"\s(\.[\w\d]+)$", "$1"); newFile = newFile.Replace(" \\", "\\"); diff --git a/BasicNodes/Tests/MoveTests.cs b/BasicNodes/Tests/MoveTests.cs index 9fa9c5e3..9f19fdd0 100644 --- a/BasicNodes/Tests/MoveTests.cs +++ b/BasicNodes/Tests/MoveTests.cs @@ -15,22 +15,32 @@ public class MoveTests : TestBase [TestMethod] public void MoveTests_Variable_Filename() { - var args = new NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", Logger, false, string.Empty, new LocalFileService()); - + string fileName = Guid.NewGuid().ToString(); + var tempFile = Path.Combine(Path.GetTempPath(),fileName+ ".mkv"); + System.IO.File.WriteAllText(tempFile, "this is a temp file "); + var args = new NodeParameters(tempFile, Logger, + false, string.Empty, new LocalFileService()); + args.InitFile(tempFile); + string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Name}"); - Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + Assert.AreEqual($"D:/test/{fileName}.mkv", dest); } [TestMethod] public void MoveTests_Variable_FilenameExt() { - var args = new NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", Logger, false, string.Empty, new LocalFileService()); - + string fileName = Guid.NewGuid().ToString(); + var tempFile = Path.Combine(Path.GetTempPath(),fileName+ ".mkv"); + System.IO.File.WriteAllText(tempFile, "this is a temp file "); + var args = new NodeParameters(tempFile, Logger, + false, string.Empty, new LocalFileService()); + args.InitFile(tempFile); + // ensure we dont double up the extension after FF-154 string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Name}{file.Extension}"); - Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + Assert.AreEqual($"D:/test/{fileName}.mkv", dest); } [TestMethod] @@ -51,50 +61,67 @@ public class MoveTests : TestBase [TestMethod] public void MoveTests_Variable_Ext() { - var args = new NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", Logger, false, string.Empty, new LocalFileService()); + string fileName = Guid.NewGuid().ToString(); + var tempFile = Path.Combine(Path.GetTempPath(),fileName+ ".mkv"); + System.IO.File.WriteAllText(tempFile, "this is a temp file "); + var args = new NodeParameters(tempFile, Logger, + false, string.Empty, new LocalFileService()); + args.InitFile(tempFile); // ensure we dont double up the extension after FF-154 string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Name}{ext}"); - Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + Assert.AreEqual($"D:/test/{fileName}.mkv", dest); } [TestMethod] public void MoveTests_Variable_Original_Filename() { - var args = new NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", Logger, false, string.Empty, new LocalFileService()); - + string fileName = Guid.NewGuid().ToString(); + var tempFile = Path.Combine(Path.GetTempPath(),fileName+ ".mkv"); + System.IO.File.WriteAllText(tempFile, "this is a temp file "); + var args = new NodeParameters(tempFile, Logger, + false, string.Empty, new LocalFileService()); + args.InitFile(tempFile); + string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Orig.FileName}"); - Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + Assert.AreEqual($@"D:/test/{fileName}.mkv", dest); } [TestMethod] public void MoveTests_Variable_Original_FilenameExt() { - var args = new NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", Logger, false, string.Empty, new LocalFileService()); - + string fileName = Guid.NewGuid().ToString(); + var tempFile = Path.Combine(Path.GetTempPath(),fileName+ ".mkv"); + System.IO.File.WriteAllText(tempFile, "this is a temp file "); + var args = new NodeParameters(tempFile, Logger, + false, string.Empty, new LocalFileService()); + args.InitFile(tempFile); // ensure we dont double up the extension after FF-154 string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Orig.FileName}{file.Orig.Extension}"); - Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + Assert.AreEqual($@"D:/test/{fileName}.mkv", dest); } [TestMethod] public void MoveTests_Variable_Original_NoExtension() { + string fileName = Guid.NewGuid().ToString(); + var tempFile = Path.Combine(Path.GetTempPath(),fileName+ ".mkv.mkv"); + System.IO.File.WriteAllText(tempFile, "this is a temp file "); + var args = new NodeParameters(tempFile, Logger, + false, string.Empty, new LocalFileService()); + args.InitFile(tempFile); - var args = new NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", Logger, false, string.Empty, new LocalFileService()); - // ensure we dont double up the extension after FF-154 string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Orig.FileNameNoExtension}"); - Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.mkv", dest); + Assert.AreEqual($@"D:/test/{fileName}.mkv", dest); } [TestMethod] public void MoveTests_MoveFolder() { - var args = new NodeParameters(@"\\tower\downloads\downloaded\tv\The.Walking.Dead.Dead.City.S01E04\some-file.mkv", Logger, false, string.Empty, new LocalFileService()); args.RelativeFile = @"The.Walking.Dead.Dead.City.S01E04\some-file.mkv"; @@ -110,11 +137,22 @@ public class MoveTests : TestBase [TestMethod] public void MoveTests_AdditionalFiles() { - var args = new NodeParameters(@"/home/john/Videos/move-me/dir/basic.mkv", Logger, false, string.Empty, new LocalFileService()); + var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempDir); + + var tempDir2 = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempDir2); + + var tempFilePrefix = Path.Combine(tempDir, Guid.NewGuid().ToString()); + var tempFile = tempFilePrefix + ".mkv"; + System.IO.File.WriteAllText(tempFile, "test file"); + var tempFileSrt = tempFilePrefix + ".srt"; + System.IO.File.WriteAllText(tempFileSrt, "srt file"); + var args = new NodeParameters(tempFile, Logger, false, string.Empty, new LocalFileService()); var ele = new MoveFile(); ele.AdditionalFiles = new[] { "*.srt" }; - ele.DestinationPath = "/home/john/Videos/converted"; + ele.DestinationPath = tempDir2; var result = ele.Execute(args); Assert.AreEqual(1, result); } diff --git a/BasicNodes/Tests/RenamerTests.cs b/BasicNodes/Tests/RenamerTests.cs index 810b703d..c7d1ce9a 100644 --- a/BasicNodes/Tests/RenamerTests.cs +++ b/BasicNodes/Tests/RenamerTests.cs @@ -1,160 +1,158 @@ #if(DEBUG) using System.IO; +using FileFlows.BasicNodes.File; +using Microsoft.VisualStudio.TestTools.UnitTesting; -namespace BasicNodes.Tests +namespace BasicNodes.Tests; + +[TestClass] +public class RenamerTests : TestBase { - using FileFlows.BasicNodes.File; - using Microsoft.VisualStudio.TestTools.UnitTesting; - - [TestClass] - public class RenamerTests + [TestMethod] + public void Renamer_Extension() { - [TestMethod] - public void Renamer_Extension() + + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", Logger, false, string.Empty, new LocalFileService()); + args.Variables = new Dictionary { - var logger = new TestLogger(); - var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", logger, false, string.Empty, null); - args.Variables = new Dictionary - { - { "movie.Title", "Ghostbusters" }, - { "movie.Year", 1984 }, - { "viResolution", "1080P" } - }; - args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); + { "movie.Title", "Ghostbusters" }, + { "movie.Year", 1984 }, + { "viResolution", "1080P" } + }; + args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); - Renamer node = new Renamer(); - node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}]{ext}"; - node.LogOnly = true; + Renamer node = new Renamer(); + node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}]{ext}"; + node.LogOnly = true; - var result = node.Execute(args); - Assert.AreEqual(1, result); + var result = node.Execute(args); + Assert.AreEqual(1, result); - string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters [1080P].mkv"; - Assert.IsTrue(logger.Contains($"Renaming file to: " + expectedShort)); - } - [TestMethod] - public void Renamer_Extension_DoubleDot() + string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters [1080P].mkv"; + Assert.IsTrue(Logger.Contains($"Renaming file to: " + expectedShort)); + } + [TestMethod] + public void Renamer_Extension_DoubleDot() + { + + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", Logger, false, string.Empty, new LocalFileService()); + args.Variables = new Dictionary { - var logger = new TestLogger(); - var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", logger, false, string.Empty, null); - args.Variables = new Dictionary - { - { "movie.Title", "Ghostbusters" }, - { "movie.Year", 1984 }, - { "viResolution", "1080P" } - }; - args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); + { "movie.Title", "Ghostbusters" }, + { "movie.Year", 1984 }, + { "viResolution", "1080P" } + }; + args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); - Renamer node = new Renamer(); - node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}].{ext}"; - node.LogOnly = true; + Renamer node = new Renamer(); + node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}].{ext}"; + node.LogOnly = true; - var result = node.Execute(args); - Assert.AreEqual(1, result); + var result = node.Execute(args); + Assert.AreEqual(1, result); - string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters [1080P].mkv"; - Assert.IsTrue(logger.Contains($"Renaming file to: " + expectedShort)); - } + string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters [1080P].mkv"; + Assert.IsTrue(Logger.Contains($"Renaming file to: " + expectedShort)); + } - [TestMethod] - public void Renamer_Empty_SquareBrackets() + [TestMethod] + public void Renamer_Empty_SquareBrackets() + { + + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", Logger, false, string.Empty, new LocalFileService()); + args.Variables = new Dictionary { - var logger = new TestLogger(); - var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", logger, false, string.Empty, null); - args.Variables = new Dictionary - { - { "movie.Title", "Ghostbusters" }, - { "movie.Year", 1984 } - }; - args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); + { "movie.Title", "Ghostbusters" }, + { "movie.Year", 1984 } + }; + args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); - Renamer node = new Renamer(); - node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}] {movie.Year}.{ext}"; - node.LogOnly = true; + Renamer node = new Renamer(); + node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}] {movie.Year}.{ext}"; + node.LogOnly = true; - var result = node.Execute(args); - Assert.AreEqual(1, result); + var result = node.Execute(args); + Assert.AreEqual(1, result); - string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters 1984.mkv"; - Assert.IsTrue(logger.Contains($"Renaming file to: " + expectedShort)); - } + string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters 1984.mkv"; + Assert.IsTrue(Logger.Contains($"Renaming file to: " + expectedShort)); + } - [TestMethod] - public void Renamer_Empty_RoundBrackets() + [TestMethod] + public void Renamer_Empty_RoundBrackets() + { + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", Logger, false, string.Empty, new LocalFileService()); + args.Variables = new Dictionary { - var logger = new TestLogger(); - var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", logger, false, string.Empty, null); - args.Variables = new Dictionary - { - { "movie.Title", "Ghostbusters" }, - { "viResolution", "1080p" } - }; - args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); + { "movie.Title", "Ghostbusters" }, + { "viResolution", "1080p" } + }; + args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); - Renamer node = new Renamer(); - node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} ({movie.Year}) {viResolution!}.{ext}"; - node.LogOnly = true; + Renamer node = new Renamer(); + node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} ({movie.Year}) {viResolution!}.{ext}"; + node.LogOnly = true; - var result = node.Execute(args); - Assert.AreEqual(1, result); + var result = node.Execute(args); + Assert.AreEqual(1, result); - string expectedShort = $@"c:\temp\Ghostbusters{Path.DirectorySeparatorChar}Ghostbusters 1080P.mkv"; - Assert.IsTrue(logger.Contains($"Renaming file to: " + expectedShort)); - } - [TestMethod] - public void Renamer_Empty_SquareBrackets_Extension() + string expectedShort = $@"c:\temp\Ghostbusters{Path.DirectorySeparatorChar}Ghostbusters 1080P.mkv"; + Assert.IsTrue(Logger.Contains($"Renaming file to: " + expectedShort)); + } + [TestMethod] + public void Renamer_Empty_SquareBrackets_Extension() + { + + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", Logger, false, string.Empty, new LocalFileService()); + args.Variables = new Dictionary { - var logger = new TestLogger(); - var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", logger, false, string.Empty, null); - args.Variables = new Dictionary - { - { "movie.Title", "Ghostbusters" }, - { "movie.Year", 1984 } - }; - args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); + { "movie.Title", "Ghostbusters" }, + { "movie.Year", 1984 } + }; + args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); - Renamer node = new Renamer(); - node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}].{ext}"; - node.LogOnly = true; + Renamer node = new Renamer(); + node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title} [{viResolution}].{ext}"; + node.LogOnly = true; - var result = node.Execute(args); - Assert.AreEqual(1, result); + var result = node.Execute(args); + Assert.AreEqual(1, result); - string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters.mkv"; - Assert.IsTrue(logger.Contains($"Renaming file to: " + expectedShort)); - } + string expectedShort = $@"c:\temp\Ghostbusters (1984){Path.DirectorySeparatorChar}Ghostbusters.mkv"; + Assert.IsTrue(Logger.Contains($"Renaming file to: " + expectedShort)); + } - [TestMethod] - public void Renamer_Colon() + [TestMethod] + public void Renamer_Colon() + { + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", Logger, false, string.Empty, new LocalFileService()); + args.Variables = new Dictionary { - var logger = new TestLogger(); - var args = new FileFlows.Plugin.NodeParameters(@"c:\test\testfile.mkv", logger, false, string.Empty, null); - args.Variables = new Dictionary - { - { "movie.Title", "Batman Unlimited: Mech vs Mutants" }, - { "movie.Year", 2016 } - }; - args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); + { "movie.Title", "Batman Unlimited: Mech vs Mutants" }, + { "movie.Year", 2016 }, + { "ext", "mkv" } + }; + args.SetWorkingFile($@"c:\temp\{Guid.NewGuid()}.mkv", dontDelete: true); - Renamer node = new Renamer(); - node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title}.{ext}"; - node.LogOnly = true; + Renamer node = new Renamer(); + node.Pattern = @"{movie.Title} ({movie.Year})\{movie.Title}.{ext}"; + node.LogOnly = true; - var result = node.Execute(args); - Assert.AreEqual(1, result); + var result = node.Execute(args); + Assert.AreEqual(1, result); - string expectedShort = $@"c:\temp\Batman Unlimited - Mech vs Mutants (2016){Path.DirectorySeparatorChar}Batman Unlimited - Mech vs Mutants.mkv"; - Assert.IsTrue(logger.Contains($"Renaming file to: " + expectedShort)); - } + string expectedShort = $@"c:\temp\Batman Unlimited - Mech vs Mutants (2016){Path.DirectorySeparatorChar}Batman Unlimited - Mech vs Mutants.mkv"; + Assert.IsTrue(Logger.Contains($"Renaming file to: " + expectedShort)); } } + #endif \ No newline at end of file diff --git a/FileFlows.Plugin.dll b/FileFlows.Plugin.dll index b8f493e50bd9bd02a8b89fe61eac3d865b8bc6c6..8baf0f80cd73ec07fe2c7154c51972132989221e 100644 GIT binary patch delta 23690 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 delta 23584 zcmcJXdt6lI_W#$j_grC^3k-KqhT$^Ebp!+y5Y$T3G&L>l2BMZ_QDd5BwINV5)3TkS zW(h)hEw6>9Cgi=WlclH3OgP%b)Kl8cO6#|twI4<*zvufsfBZPF-g|x4TF?F2d-mQl zo~kBuRg?MICw0HPGJ5rfr)!z{(oX=FDjBf4>g%PvO*cwqRnj!BdxfkF8^V1^%Smh9afc!^vYEG>;WD{lt8$3hN6=HN4)Ah$2)Ty<-`(`sR zc#6=Q7VI!q=AueW_a;3ag`U(D;R!LJ!4oTo@#1EODa>Ia+hHD6*+bo1yL5Dzj6Dc{ zY%YLK^321INS<_Lr5%ff1Ox|oZscv~kB`PYRMd|^X;OFeCi?a*g$Epgm8qEfbSCe4 ze{!E7x4L~sR~D##M!YnmYgAxm=3f%aU!?Mx>RU4+OtU(~=P1^7h~H;KxIWSZA4y`m zK^vrK>Ng6hug#270>v!+IidGU)I{g$>PWmYU7F{AnJyffXmtA3>MZ-~8vK`)uG1>b zyUHMsP)O}PD-7pziti~8@d_*QViP@r%V8b`v^we@48>ap|Zy1W}pLtHg!}0m+ z4ARF;owq1SdL7g^7RA}+v}oD%&_KSM#_(>b-!8gE2{LC7=3e=zyptuvXODQFg(f%ewzm)*sYWuG_Tig)B)~ z&l`}!yLm?8%B7hMl^f8JYLX0|ThWnZsN@OVGCZU4;JH<^H~MYtesq=zHZlMlsY9l0 zUY%UI36s)dwIjLH?UJUb=5#5no0Qg79sE*2_zQgGl>>OKxP=3jR|epW`*y08FNG?b z(Gh6$y@x5jc7(xqrelDUaAyQmzJV}SHY39-xA^Vw%B`L3H#^ze$li`jGFI-uL*-it zi^;Q-0)9`Bv9blPx>$FsYFy^&`YkrAwNv>vW@U6l>fmK5EK!}hEZtK2a>sCd z)6@;iCdJgCLmL#%vwtFK)_1EV^@-7Yu)_2x*|QgqkNXgoU}@4m-pYQpsy>vxt1hf} zF{W;*k5RH;!M#z4vBY#;k~3BB!MUgFuCE9qzJdQ^cmzg*eC0?p?Jc`5SQi`VIe=9K z>wM#Qxp&Ccr5k+=KkicXz6ZJYT`gl8W#Ep*bgS;qUUJHwJ8;X0faf6k0u5=gQd*Sc zzZ^Y=br?G>GECy@%TN9*D{Q>l3geYQTjFxQ#zJX}>=%5M{emwu3R-78`j<7t;4siq z|H;X(JhU#xyoWWWIc+-6`|5(m>sYyZyfH#s|7$y~e^9X8vHtd^7`9JMZ;DjJO1W45-&P76 zqJ_fCR4Oj8wtVFL`$7d=WgY%{rYUr)i3!loH6i~0tOIs6eX^8xZ^!N#9o97>auT0} z5Zt-G%q!D?yHN~s;1#DHck!JlaTnjmyPs)jx*o=?j^*uqhIjaO zsh_>fm)!J9rjh6JB`=VV;A2*I(9YtMrcNWuUs<%efMgH#Wz_qf_w@$LUdsv`qb+j zI){EqhH^nnDj4p2nT`>@W;#at_R%rQcSIexI`w}l9y1;f+e;+64C1ru}PsvXN{xPCk87@=qRLUS}CI zm*1=4ozQ*g<#RQOjuF0x=@{voPRA%;H65dUv-nZ|-7s9e<+bZ0{Z$v>)dl46j@ss^ z+g>Zy&PdreAB$*v3Ku?vpKh}6UkdL3LSh(HOFfFkV41L>eTfyxOR7Lh*Hl}Zju}l;0TCt1XS|o`*t*4ex(lofIBUn z!*cbeYpxV?1peoyEq`e`O6|KbwWIlUSL(TH^VX|3zw=5lN6_D!X9v~KH-?FMwr%pa zcH~O2tF~sp`mX5Qn(gnc-P~!O?cL< zrLH0w>AIXNP^WW$hdb>Z;w^O9;jb5R5T{V)`+$;3Ht469YGU=+34=^(A zs*$)Yy+W0%MjpV(tgA*^F!Ib*BlfMmLhG&?DcgF#YZ*rP=RhMJBYZ3980lL>$0*-A z_1mp?;kk43n^^KGcq?nSrTwQ?qW{}g+}ks7hK6nb zkG1ytZ)-iU{l-Cj#_{3js#AXRe_P?W9V3~dZr>5@riBC>cz(h9CwTB#JT(}6^ZgZq z=b-xQj%e)z9VA~PkA!Mjt2$?4@orenB|N%uhVd`IB&S<2#Dr@PQdo9dr?RboEgKBc zS2F+6Df0-oP4pqiJG1ny)XaA7qEFW-ychS2AcOD64ndFFKI3bc_?r6DTT4^@WztN+ z;9(5AtGiN`oRa4JQQfh#$i{DtBP-i+IO#!n=cJlj%H0F7I^!e*rfF{@Zs67Pw-FYD zNxOqttIln?K6EHGi+-&aw`;vP+v3K(VQ*Ef6S#x=k6oUmZfO0m#|-XrV9oS6^7s#U zCYY8`-QDn>X*Nc?x^K%}Z$-;U3G27~;(Rp}VvTTI7D-!eKz`CjJ7Dqdr^ z?y_%<8n7#lty5EX#aq{5#NUsP)LVD$?9+~}POoa1?EC(2p73>eU(a6>h0$vkJ0^8S zmnf#*w)PZ-}@5?v)K!|?&W zvMY`m--~VfW#3V$Cv8{Rr}(RqO_f<#Rj2yoPW8zqtv(s=jxFy>de)-aJ{Zk5tM`16 z!kX3RKe#i89%Q}PhQmRq3tvT#-XWL4yi_#VqWVmPeD_gr>7ZQa+67=UjlVf&^LN4J`k^nj67YYMZF zJ&HIp^Eu0OoN?rz62k2;vUf#u`}%I2HuB8DQU=38nb$MEC?&bKYK$S*8&k;^R$k=p~f$83KI`K)OLGRL|e z`KaY>NI^3mY$k@}Df9fL3nAHhRbZclS?E)3@E zW#k+g#QAFg=cPcNxy{VE+jt3U!0rSx_||Slo)6KMd1xFtI@;0mEHz(HIoy z0<+D5JYx;R)OFTqq$ z>kGFr9m`e(r>h&j2v>xSrGlvICxdwxFBf_-$6Lgim)`?h&&}X-|8q_+^ej#9jeLeU zt5-j?A0}$Ucp{3g$*b{kIu{J^a(e+yhchr8Yk1R?p>sf}DF{n3>%h@?Xf*J^A!2Ia zIYY;g?kFA@h&#{2`7zO)!fgZ5k;Uz%=z&;6aKJhIw0y|O`MsHQnDLz2@MXBdH_v_= zQl^Oy>=#oZdbHKJHXtAE?`=b{25oC;+raIZ9^im^xT+5D**Qnp)6ugI$zUyRQ3lx- z&fR2RPj-ArBGz+_X?S2q|06xa73`unWjOLc7Uwg1&UEs;T687#ZTBtc-<8JsI@#}$ zy^rkm#DN|jJuY+Js=Fo7MO|@GS6uMCgU@tU!0qUt5p)-JrCGi|K+z6fn4Xg!=!MVo z9z@=rH66Jus|u5Ph45M7=OBY?iHWogMv#Av%%h!i9;4m7&^`mp7TEdb8559$Wn-;; zKD1IxY5sMEi8<4!d|nx_DIK!v<4FbtlACdwItw8ipW&UY$)uhyN{&{5Ai%GrXvM0oewPwIiR$SufRc|Wys2ziV2X&|rvYpg#3&S9wyg}i30Ex1#+E>eLP)XdYl?3g<4 z^zad~1skTnz4}`cWQ)YQ()VQ2}4kEa5fnHLLn#YU!C2TRLWp)qJekm90)YlgA3w4QHZ}@142ER%(fa_b5Ko zG$Hg_)pa(7T~G&}jaDugqM^qNTEC*)iTFiZF{x@(hWmmc28N4RQpO-lEZi!TH)ANO zu|lo!-fZat6NP%qdpoMhLQU#9*3uOo6YBAv6Hv_*YI&-vet~@`wYXrJ@D+zvqFO1` zy~U-Lcvvsg!^M@TwhC3B=eD?^Rj74&Q&GJmRA9E-k^mnH6`4I1)iI$iC)HRI;iOO@ z$#WG;5}Xw>C3%r08GaC|D0#WX1DA#RIO$bO3h0+=ll4u~8s6(MgEJ`Ni3;FNR6P7F}73%BsZ!BIIAe5YO+0q?` z36+rK2+D@hLKP*2qpA?<{?r;v4%{o$lc{r2JtS0fW{o8m9u;bD=3Gk;1!f3&1cP}n zSEw&Bm=6nu+8^EpKc!z1>f`Xtpq{WosKK$NLA_v|PiU?5pn>qUP!%z&QJoj6YyRe-LGX)E zsrg$`NiS(_>U3_)4G=)8+7zjqiYi3JzLDLQ!4NHCKg&}UlnElpPwyd+CRB6s&Y&TX zt0~C9YHozVA~x8$KWHe76zUG=d#LUd%9r`ipkZ*AP}P~Ap?W~58#BKQ8V*y1D$hI{ zbj@(6)nvpx?@vKD!Ng@W3RFWaqhO_`;88cTj)sVOih(E5WV{u63YC;-QXe~?q8O}q z!ZVuB^mT>>)gqzNGDECoP%l(*W+bY$qV&QDJCsA=3c$aaaBBp9%D_!Ry_Nqlsw$xd zMZ{Sv;FeWd=Fgc))^V^|C|y>%VjT~Mg>*z@TknR$tF_c+5rx(XP`gG`mB|e5gGE9O z#nb*i$j5J!c=ILM*IDm}K|-C4Fc}|&m9J{CLun?X5A68W2hTi!U7G}jLN&VvTa|~P zR>&6&DolnZq2}j|uug`l>$HLaICqm_sZe?0w_2ybZlRLH%dAu3JA8WLO?1yar+Wl+ z_!|MP-V7aYeH0>uDoLAYeH=11W%@Kig(noq6Y?ZZ=@U>QRHfnhpc?2e)Wf*NYhb8Q zm!edtg;7H3qwT21klG9R2`bEhNm>lI14E_#?G55}UQxXH86ZvHpf-K)Q63ky%@5(; znL@o7Vn_9iP^0oy98#T7cjenr)eF_9aJqFCtQ2Z^VH(VW4MHh}Bk^8ft59=D-g^@vhB*%R=$4Jq`Me zv?3?{9u?{xRP$l8P?n-9>vM2cs2Ef#xHdsFwqFBng?4xza`1N{TxAy7VF6sXNgexR zf-=jx5Qb1-CQgfLt%JKseaZNlu^841wJKzmbunBbRSlyJORP&^H~xYEpc*n!ErqH4 z*Ft#vGGDjc`V#CRHPdv|b%NEy2STOvH*-?a?2@po3I3cE+o# z2M?)*a4D~^)Cf63?N7c*dKrdl%JfA+Uugy0=2z>itDu(DOn5foP3vk{A=DACTUrb6 z3w2mOSW;evvqE0VJIG#x1bov1un^DvL)LYWu$8O%5FWly+6?PR@p;0VYiQOKj&LNZ zokE>-=~3+$Dm&~L+X5d5)hBEoY=NViqFS~p&`xrp=@I9b)~)chP_vw8P<_`a72np- z-`=1bz2~i0)EMuNom6u6W$QM7W?{BuyQ290*mi%6-;ZslUqPX3uYPT|$+n{-sK3*vhvCcjX#>qmYy zrnu1hv0sfU@~D*;qm`ky6Mo-|3E9?mzf!QBfBDrw{b<`sziQWwwtYcL2EG9{!dF7= zWdY&WSx@_wK773GtY7^WHpzA#E^6y&+MD`_V*4I|R&S>1NGexmp$yVU_yHV3IV3%* zD4`Z%>_>bTrKP;$QJ51*9_ZFP^c-|V?RSb5etfHVam@iNXRZxGi*P@ z2%&8H7IqPC7s{=lVY>+9g*qMC!hV7Kh59XWhV2)4Sg7T?7WOMBLN)7V*nWj4g_?p- z9>2k}Le-|&;Wq^q3&}qxEQKB7Hgoq7{UT)K|IH5*IuRxWe2-%qPs!h+l zLaoi&h^nVh{6sadK0@&m)xZV{#c$$`Y`9STCf>+y6KZn4+hSs4g_@f`71e#3qS2e# zmfnenO3!Sd;1v=D~%IAsfC&(q~+A-q=<#iH3Np}q|N-WJ352=!FNC0kc^N~n^^ zC>GE1_W*ByA?!+tVs17SC0D7vqgVn=ou6s5CwV@v7kw-A1CTI}g;GhO`_!Zn^o$Y4KkrLxN*ipPe(_olzS`fYdt z#jgc~THY(fj_>w`>YX2J&-bf|1)26@zp6~@ZSUh(i$brr_w%bAxx?)P{A#OvjD4VA zy_q&fu@CXfS3@i9!~JTp`!V}1e$}&hfxXPH2A~?}R~KSd+VAlz#k11>fM3lB-EN=a zSL?caY}5RzrTad+@+iARGc(ilV!=pIn2tUdW|~$O=urg;H9K)6RIyN@)I>e1E<$a> za@8zJs8%dj%`%005z9Tn@`PHA<(^Ld`Y?M%E zoM%vt(G;COGuS;M#=AX(`Gi_oaKS!|ApUIvUYCwSsvzYR{kT(?+ zSZ1*og}M~=tNls#vQYYHz2iytno$2NIL2nPw}d(y#nt;lIZ~XC+3cS}bxrAt>V&4K z+fT8t{A#G>DRxoOB+TmeG0b82;Kwk3q}Uu^W__AX6Uq`(W}V08_*I7ES+>ZZnc;Yj z-Ex?htA;-DCgbyL8GX|7kH(>v1#CU3g|Mxt5f(BFer3g5_@aB6wT{&v)2>1AyF16R zm^FPyLF(xewwBahn3wP|EMah*$M(W41-%?Euq z*0YTw#xv{L>z~s#NUOAg?d_D>$lmXi+Q=>m#hY(pkDs{G(O1}$q_mE{!gdM8Ggq(= zv`p-Fsbdv;ukA{?HS7qgJ3HR_tziM}Jg8N(hJ_2ot69skNok{ajTLsve2qQSDRUjO z(``#Ne3xJ{ZeUaE?qw`d>E+nOswl7!wr5@Ec%1>=&uFh3-(dHVs-=m4gH0yI8`HxZ zOwp8SPHz>O*({+J^|qsWR;Z({$8=lRBBAgFrDY3i5Go}8F-5nPtrF4|@3d@X8-@BO zKK{JP-W2LIKK{JPc4-QmAMDu1&iU0y$4(Y=s$&B0aO`3O{c5~pAA7*B?svS)miW~a zhw=}$Ta%`jaTFi1gFT$WE{-ZJUdY6lW9(DbO(<{7JouDlYYN9(>o~@4^ea7l&TbW%^Lxy3 zoM06~z1U*`s)_#0dPf`ceAzKGD;)n~H~7`7j#EsT;+LBpU$G{?+U_{RKK83Uj_;U_ z?q&Jf|HJVU8{}7?Ixe%Ne)Xk8FMa1%-#e^Q|F1imXTcHDN>bHuqK9m8OCE)8iD#PL z&7E#dkg|mOG&cFA6edPo*cnG8Ku$djBx*?QVh z#R@e!ek9~ei9*ec*Q3f1YA8Nb7DzpWx(gpF3#8tf!p?YudrD=faQs^H#nQe0pdNZl zQ#z>3b0i#OWR={U%goc0uq!Nq44W4p-?1NuhqFhrv?U zPHKqMjg+E|{zfUEWIO9u#9*j2=q#_Mo$ZW@Lp7SzOj9Gi-5Ms15o%q69o4-;`7kzI znk3X?7#l7Wq0V^hsOD-)F~v(NjF1+HV5($C^^#EAFg8+pMX22v8!4?5 z>R|SC>&;TLP@iO{!Oc>Orf{D4S5^D}q&^^31ACw}_!eo_IX=Mo5nleK(kMwK$>)N> zDCq@KHGm5dJW6Wp6dNtAt$W?bvXvphx8sjN@#oF3m;DwtI=D>wwo_WU^s}hqH8{q~ zrGS6)+!`ok<-z4r94T$8%cZg(c}$z?a_N3j+K0~==@C*|x5h|Mkg9=nxMzIu7|}cr zZiEVdX9B_>3?AoK`tYg2cl#CZ=zY@CPLLpEzer_=H^7JCcRpdJqG*c($;cfWMWx3HWQQQPK{)wHqbk;y0zN&ClKK>U&9+MC@*AO*ct8p)xXcboi#)P4O8Q5Z3WES&fYoil29#ha z0Wyl+(gt`VJPqw3p1avZ;IFbK0)H_z5%^241jsJ9M|udVypKzdLP4(+*sas?ZnXOq z9b;z68H4ZWr0BdCrE+O=?s9DAc*thyw8Y=mE|wC~-;@?h_PQa+~E}q`7W~d>V7?=s91IA&-(4 ziA~5cvO{i)dPI(t+rws}eLDUTxs`Rne=D^XX2h(J*Ft9DbikjS zKAhAnA7bsY3Y%ef&&Sy`i8sJ|x>-8F?u$AoZ^tG#LMz0kwaL5vwxl~qzcDySOLLHZ zX>gE!X>bs8ycp$+<&t@ApJ9jYW~YeLU_tIs-8AWo?v=WfYvn5M!@6HsL9fSjOfuwE z>%8(1&n#VmeAJ~vxl~j*PggGOPg|}#OAVJxgL`g)U+^Nrcl{m3JF%kUA^Ym)N8?%^ zV-Kp)!9deL&hRU&bwYKG7YlA0>TJ z;L-npJuN`HPeDmtK@5w)lW3 ztL5>68f#!6S^@%^Ce?jggSb_jiFG?`yIuD4XyH%;bRO3>Bek za&+(Ckx6*=Ok++WKa-}he7vz&YU2>?K)96qzeo0`-QO`e!=V5 zdH9$98?@iVEoFh7u7l{gG4-m(XL3OLT zuuSDPQ!9%!aE^-NyYgD(W;&Bw;e7HvSPY6EM~*J8HKj3k))G?=;|;H+hI81PxEp!2 z)zpuogD5(P{0WR-e%4Zl*3uPWEp^BtUCcX%*G9Y$D|o;!4Zwu|>uWaQ82Tgaa0Ai_ z!;lehGcpElL&iZlG6BXTJ#a5F1wsQ%kcR&Z(*#*C8JSNt6jBW(R6{?ip+D6yh-$cz zYPbn&P)u+O6~2uMm%$@g#aK{~cS9|5BFsiU0P~O!fr^|8i;$1Pi^wWij;w_h$R}Yf z@@d$Bd=}n7K94^VGvRMQT98X&53(NKK{mlZkSpP^*`(k#^eBq;@HuiboJ4McuaVo~ z9I^#2Aa}#h$o+5$c@P+m_yaH?4?`gG6R;!OX#P&o=)b1XpQX`%N29+;(MuEs#%CA* zeL7MxF+RO^#wXv&_#{U#K8-Pqk13Av=}ll!$U@2~VSIu5Q5F5M3JK=3ga8RP5O)w; zk->0)@(U$ibBWX+Gxtb5^8hj!f3?H?Un>|e!C8s-=sSsbqUuA^(E<~*$S8O zrT~9+BX`BZOy*UD5=Y5NXiq@m(#X7?sWPwUQJIgdO6IlI%6v#q%6#8EEAu9wr_4o^ zxl~qoYCWYkQR+%em0%S%V1l*sc(h+7d%b)w+BfKUlS6fU1S52P(Nj*IapakR9xI&F z@qe0ro;*LICm8g4&H~~9;xwcQ9@9rDSkYV(^Yu|^H<0}@*;~opfwl?W(@(}K4w2^w zc~%*2z~+B3@cA$sIU|WF!~)^~q!n&AdN4W}?O@nr;+;NV;`#3(6`V{n52ToRAQ$a8 zxEGq8aS(``B>}$!zu-(nUJgu#3g{7*LH-N~fm0zF_+{idq#G>G3`m7gWHt;(_JRq> zzAyzj5NeRa$$u*{o9euV>Kv|+7)N3f5x-0*SCCyn(HgWbIBUpmB!45>yU5~Zt}b3NeVVlMy?8SRZ!|G*!SYZu+FL{8D924XZpukO z|D4biEFMF!C`aV03F}2}S#nryqIB$WuZ2 z6_h^~{rf^|$Wud}TJkg@4~Mp(|AMoHO6?|3n^EDeHgbW9`eouC*~GhLMqY5nk-vmk zMyw*%U}m$khBE8P(?V<`f|+VF(x32Fl2;AXX8pi8aJp%(>vKC%b{zh*bKUTS&ALcLm&w6}6GwPCQ9G zMTH@dcY+aRVjR&$bQ4R6rNq90ytXp3%ZU}lDq=OKVy-9AKx`ql5)TB@HGu4PB3P(- z3->d!u7 zab&yDUl-~kI|2Qd153y*C4VW|WyEr-p`7e0Vl{cH6%zHt1}fG-b`ynL$ZjROmFzZR zI}xnZIbs~qW#t`pkzGP8B~K~YWyEqTKc~vkzZI$QDyk?@jjny6)nwNb8_;t&w1Mmv zVk>dCm6nF=b|ToQE5taWi&#P|C6*D(iB-gETaALv*OO=MN|?(d6FxPIzcQaRudbDEyPx08?l`T;k*&0I7ZVkxnV{N-d<6B~%F zM2P35O5^$TR>$+Q_2g+FyM^plvfIdRS4e=H8gugkab&y5E_L&Y%8Av)24X9*jWXNG zE=k~JOA~m08QJAzSCL&!c0JiG#8&dOB`CaDI|)eSHcRCDAdYMo*`>&ThnA72JdrjI z+0|s%CN^TJdh#@or-ke`;wkb#64ji<%f^viLhP5M-T#xQBGwa|D7A&`HXO$3rExY9`=yg7gR?AyU)6VK(5airJ+;KPOx`49QNzR%Vi~cDSWi@1=+H(4FBKq` z5UYsw#1>*35xP?*v4mJgY$3L3o*cfZ%kp_<6|tV!LTn>~Qa}|EOEkMD_mmJ@h;2mZ zMVZ7BVi~c8*hZ`>;yLxixMHe@SVpWOwh-Hh(3|#uTyIJxmJy+Z8Y7kv%ZOFPdd*+T zbIOP<#5Q7FAF7R5MXV>5^?iZQL|-1QC${vZ>wg;w=toTwONeE}Dq=mcg}A$4BUaHy zcF8q-2hHCmN?2Uoq}89x}=% zm&sn&H-{}yW&{JAjpkghpN*W5JQuklem-(u^aA9znu{;_b#-kVWdA?l0`A#JF z3=HMbA`iD`XD>sJOW}4M)oJu{`$8J$1C&33sEe4ZpsOr`2kr}9g>+NE>wXRG3gSd! zZpKFRyzOm9?(4Y&xh0jCnnIb;lmD~;4RMZO@(wmQUVj^$8EQ8xA z1)Sd%agNY&KIh@Ara3F6%sLvFuaK9TZ@32QxhrO12!6MnnST?CSRL=Xm#9tn80RST z&&a$3IWBW7@@&RE$Ud15Ahl_)ql)H5^GY>a^J|kYcjNxoLpWc^=e)Ua3YLAQkT2YU zV(wA?r*L#HJ_0RiMf`Lu*1IQXUs}rpw5}`Sc}2BhJadk-3Zvt_Gms_Ovys}8eUmy5 z?NEtlt|0#5QqdD1#d(*a=Z8NcIe*u2enlHc8^`N3X(to;Zpi4(`+MBUxjk$#W@;0A zNAyc*|D4l^)SA>5bbdac(QO$k(LcBc=lC9Lxt+(EQoudm6)F6%pLX(wMBc|eWWPrC zu-@x2niabBFFCgq@J`H&-iiKCwY87pbKp*S2R(pV3eAo_f&5oG?~qpP;cT9Bi5Sw8H~$n({=GE$T8>taX3wU~O$j`+ zn)of9oS72$>?eMfJtd_1gM3zNEZxgKVgXW$R3uH2o|3+h&Pt{70C}jqOx`OWm4A{W zb*Z{yU4Px{y6*aL!&Al=jhl=kOckc*OiiY(rq4}h>K2sXFOogx%qad%J-#*f|9Q;s zy1DqX@0wnJ_dVX@@4g>$|L)V}|K0a{8v3sPOCtv7UlYCN+f)DQ^O#?a_^YpH-KXxy)^_$op{W7**I!?zL!!q^{ z!_Vv(9(NgsN=YnC0#TvV*%!&Qk+?a{=6@R z*GwH(F}ZnCA69ru@=mYIO_EZY|CJ;iW0Ksnd7DQ%XSRP>H*HF*qis;tuLlzn(|Sy5 z-qKyFWpb*~TGu;Aiju6R=21D)W+@=tXb!Hr99+#}>LT)_JL;zANn`c8IIODqM4mLx z<{9H1+dXGoMUR4tg7H1Zd2`FX1>W*8Ib(W^%^hEnQ;=1VKR&ldMUOGf6R(q=VY=F3 z;omMCAl+!Ujy(VH#?Q77*%|T3>|UpncGr~+kb1`nudTQ6^7OH@@6tt0$y?risr-HO z&H>Vc`XOV$i(hzkha4CO_<|n_kOeRvt#KI1#eci!MeW7o7|a=i{;}vCk6AhB&%*!m RQRSkammbrs43Vm({|9yj4@&?5 diff --git a/FileFlows.Plugin.pdb b/FileFlows.Plugin.pdb index 372a666221d32bda93b500cd654a3d3f669e1bfe..a3df081c7ed1f2108353ffcd48bd5f0c902e663a 100644 GIT binary patch delta 9471 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