From fa54cb67f3517dbb269d8b931f82ede5ab792261 Mon Sep 17 00:00:00 2001 From: Stephan van Rooij <1292510+svrooij@users.noreply.github.com> Date: Wed, 1 May 2024 15:17:55 +0200 Subject: [PATCH] Improved documentation with badges (#57) --- README.md | 52 ++++----- src/Svrooij.WinTuner.CmdLets/README.md | 19 +-- .../Commands/GenerateIndexCommand.cs | 108 ++++++++++++++++-- static/img/wintuner-mascotte-two_100.png | Bin 0 -> 51005 bytes 4 files changed, 136 insertions(+), 43 deletions(-) create mode 100644 static/img/wintuner-mascotte-two_100.png diff --git a/README.md b/README.md index 097f22d..6a3b94a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,13 @@ # WinTuner +[![Documentation badge](https://img.shields.io/badge/Show_Documentation-darkblue?style=for-the-badge)](https://wintuner.app/) +[![PowerShell gallery version][badge_powershell]][link_powershell] +[![Nuget version][badge_nuget]][link_nuget] +[![License][badge_license]][link_license] [![GitHub issues](https://img.shields.io/github/issues/svrooij/wingetintune?style=for-the-badge)](https://github.com/svrooij/WingetIntune/issues) [![Github sponsors](https://img.shields.io/github/sponsors/svrooij?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/svrooij) -[Documentation](https://wintuner.app/) +[![WinTuner Mascot](https://wintuner.app/img/wintuner-mascotte-two_100.png)](https://wintuner.app/) Take any app from WinGet and upload it to Intune in minutes. This app is available as [PowerShell module](#wintuner-powershell-module) and as a [CLI](#wintuner-cli), both run mostly thee same code. @@ -19,6 +23,9 @@ Take any app from WinGet and upload it to Intune in minutes. This app is availab ## WinTuner PowerShell Module +[![PowerShell gallery version][badge_powershell]][link_powershell] +[![PowerShell gallery downloads][badge_powershell_downloads]][link_powershell] + This is the PowerShell version of the WinTuner application, requiring PowerShell `7.4` (net8.0). Available in the [PowerShell Gallery](https://www.powershellgallery.com/packages/WinTuner/). Documentation can be found [here](https://wintuner.app/docs/category/wintuner-powershell). ```PowerShell @@ -29,7 +36,10 @@ As of April 2024, the main development focus will be on the PowerShell module, s ## WinTuner CLI -This application ~~is Windows only and~~ requires **Dotnet 8** to be installed on your computer. It's a [beta application](#beta-application), so please report any issues you find. +[![Nuget version][badge_nuget]][link_nuget] +[![Nuget downloads][badge_nuget_downloads]][link_nuget] + +This application requires **Dotnet 8** to be installed on your computer. It's a [beta application](#beta-application), so please report any issues you find. Some commands run the `winget` in the background and are thus Windows-only, make sure you have the [App Installer](https://www.microsoft.com/p/app-installer/9nblggh4nns1) installed on your computer if you want to use these commands. The `package` and `publish` commands are cross-platform, and should work on any platform that supports dotnet 8. These commands no longer use the WinGet executable, which also means any other sources than `winget` are no longer supported. @@ -37,40 +47,16 @@ The `msi` command is still windows only, as it uses the `Microsoft.Deployment.Wi Check out the [documentation](https://wintuner.app/docs/category/wintuner-cli) for more information. -### Installing - -This package can be downloaded as a dotnet tool. Make sure you have Dotnet 8 installed on your computer. -I'm working to get a code signing certificate, but for now you might have to configure an exception on your computer to run unsigned code. - -```Shell -# Install dotnet 8 sdk (or the way specific for your platform) -winget install --id Microsoft.DotNet.SDK.8 --source winget - -# Add the nuget feed, if that is not already done -dotnet nuget add source https://api.nuget.org/v3/index.json --name nuget.org - -# This command will install the tool -dotnet tool install --global Svrooij.Winget-Intune.Cli - -# or to update to the latest version -dotnet tool update --global SvRooij.Winget-Intune.Cli - -``` - ## Beta application This is a beta application, it's not yet ready for production use. I'm still working on it, and I'm looking for feedback. If you found a bug please create an [issue](https://github.com/svrooij/WingetIntune/issues/new/choose), if you have questions or want to share your feedback, check out the [discussions](https://github.com/svrooij/WingetIntune/discussions) page. -## Library (soon) - -I'm planning to release the actual intune specific code as a separate library, so you can use it in your own projects. This will be released as a separate package. - ## Contributing If you want to contribute to this project, please check out the [contributing](https://github.com/svrooij/WingetIntune/blob/main/CONTRIBUTING.md) page and the [Code of Conduct](https://github.com/svrooij/WingetIntune/blob/main/CODE_OF_CONDUCT.md). -## Usefull information +## Useful information - [WinTuner website](https://wintuner.app/) - [Blog articles on Intune](https://svrooij.io/tags/intune/) @@ -84,4 +70,14 @@ If you want to contribute to this project, please check out the [contributing](h [link_blog]: https://svrooij.io/ [link_linkedin]: https://www.linkedin.com/in/stephanvanrooij [link_mastodon]: https://dotnet.social/@svrooij -[link_twitter]: https://twitter.com/svrooij \ No newline at end of file +[link_twitter]: https://twitter.com/svrooij + +[badge_license]: https://img.shields.io/github/license/svrooij/WingetIntune?style=for-the-badge +[link_license]: https://github.com/svrooij/WingetIntune/blob/main/LICENSE.txt +[badge_powershell]: https://img.shields.io/powershellgallery/v/WinTuner?style=for-the-badge&logo=powershell&logoColor=white +[badge_powershell_downloads]: https://img.shields.io/powershellgallery/dt/WinTuner?style=for-the-badge&logo=powershell&logoColor=white +[link_powershell]: https://www.powershellgallery.com/packages/WinTuner/ + +[badge_nuget]: https://img.shields.io/nuget/v/Svrooij.Winget-Intune.Cli?style=for-the-badge&logo=nuget&logoColor=white +[badge_nuget_downloads]: https://img.shields.io/nuget/dt/Svrooij.Winget-Intune.Cli?style=for-the-badge&logo=nuget&logoColor=white +[link_nuget]: https://www.nuget.org/packages/Svrooij.Winget-Intune.Cli/ \ No newline at end of file diff --git a/src/Svrooij.WinTuner.CmdLets/README.md b/src/Svrooij.WinTuner.CmdLets/README.md index e3d47d7..643cc70 100644 --- a/src/Svrooij.WinTuner.CmdLets/README.md +++ b/src/Svrooij.WinTuner.CmdLets/README.md @@ -1,13 +1,16 @@ # WinTuner PowerShell module -## Refresh documentation +[![Documentation badge](https://img.shields.io/badge/Show_Documentation-darkblue?style=for-the-badge)](https://wintuner.app/) +[![PowerShell gallery version][badge_powershell]][link_powershell] +[![PowerShell gallery downloads][badge_powershell_downloads]][link_powershell] +[![License][badge_license]][link_license] -```PowerShell -New-MarkdownHelp -Module "Svrooij.WinTuner.CmdLets" -OutputFolder "..\..\..\docs" -WithModulePage -Force -``` +Source of WinTuner PowerShell module, available in the [PowerShell Gallery][link_powershell]. -## Create a package and deploy to Intune +Documentation can be found [here](https://wintuner.app/docs/category/wintuner-powershell). -```PowerShell -New-WtWingetPackage -PackageId Jandedobbeleer.ohmyposh -PackageFolder C:\tools\packages\ | Deploy-WtWin32App -Username admin@codingstephan.onmicrosoft.com -``` \ No newline at end of file +[badge_license]: https://img.shields.io/github/license/svrooij/WingetIntune?style=for-the-badge +[link_license]: https://github.com/svrooij/WingetIntune/blob/main/LICENSE.txt +[badge_powershell]: https://img.shields.io/powershellgallery/v/WinTuner?style=for-the-badge&logo=powershell&logoColor=white +[badge_powershell_downloads]: https://img.shields.io/powershellgallery/dt/WinTuner?style=for-the-badge&logo=powershell&logoColor=white +[link_powershell]: https://www.powershellgallery.com/packages/WinTuner/ diff --git a/src/WingetIntune.Cli/Commands/GenerateIndexCommand.cs b/src/WingetIntune.Cli/Commands/GenerateIndexCommand.cs index e8a9aae..19fd4b4 100644 --- a/src/WingetIntune.Cli/Commands/GenerateIndexCommand.cs +++ b/src/WingetIntune.Cli/Commands/GenerateIndexCommand.cs @@ -1,15 +1,11 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; using System.CommandLine; using System.CommandLine.Hosting; using System.CommandLine.Invocation; using System.CommandLine.NamingConventionBinder; -using System.Linq; using System.Text; using System.Text.Json; -using System.Threading.Tasks; using WingetIntune.Cli.Configuration; namespace WingetIntune.Commands; @@ -20,9 +16,19 @@ internal class GenerateIndexCommand : Command public GenerateIndexCommand() : base(name, description) { IsHidden = true; - AddOption(new Option(new string[] { "--output-path", "-o" }, "The path to the output file") { IsRequired = true }); - AddOption(new Option(new string[] { "--source-uri", "-s" }, () => new Uri(Winget.CommunityRepository.WingetRepository.DefaultIndexUri), "The source URI to use for the index.json file")); - AddOption(new Option(new string[] { "--timeout", "-t" }, () => 600000, "The timeout for the operation in milliseconds")); + AddOption(new Option(["--output-path", "-o"], "The path to the output file") { IsRequired = true }); + AddOption(new Option(["--source-uri", "-s"], () => new Uri(Winget.CommunityRepository.WingetRepository.DefaultIndexUri), "The source URI to use for the index.json file")); + AddOption(new Option(["--timeout", "-t"], () => 600000, "The timeout for the operation in milliseconds")); + AddOption(new Option(["--update-json"], "Create JSON file with only the updates") { IsHidden = true }); + AddOption(new Option(["--update-csv"], "Create CSV file with only the updates") { IsHidden = true }); + AddOption(new Option(["--update-github"], "Create GitHub Action step summary") { IsHidden = true }); + AddOption(new Option(["--update-uri"], () => + { + var uri = Environment.GetEnvironmentVariable("UPDATE_URI"); + return string.IsNullOrEmpty(uri) ? null : new Uri(uri); + }, "Post updates to this url") + { IsHidden = true }); + this.Handler = CommandHandler.Create(HandleCommand); } @@ -39,16 +45,104 @@ private async Task HandleCommand(GenerateIndexCommandOptions options, Invoc var repo = host.Services.GetRequiredService(); repo.UseRespository = true; var packages = await repo.RefreshPackages(false, combinedCancellation.Token); + if (File.Exists(options.OutputPath) && options.DetectChanges) + { + await HandleChanges(logger, options, packages, combinedCancellation.Token); + } var json = JsonSerializer.Serialize(packages); await File.WriteAllTextAsync(Path.GetFullPath(options.OutputPath), json, combinedCancellation.Token); logger.LogInformation("Generated index.json file at {outputPath}", options.OutputPath); return 0; } + private static async Task HandleChanges(ILogger logger, GenerateIndexCommandOptions options, IEnumerable packages, CancellationToken cancellationToken) + { + logger.LogInformation("Detecting changes from existing index.json file at {outputPath}", options.OutputPath); + var existingJson = await File.ReadAllTextAsync(Path.GetFullPath(options.OutputPath), cancellationToken); + var existingPackages = JsonSerializer.Deserialize>(existingJson); + if (existingPackages is not null) + { + var updates = packages + .Where(p => !existingPackages.Any(ep => ep.PackageId == p.PackageId && ep.Version == p.Version)) + .OrderBy(p => p.PackageId); + if (updates.Any()) + { + var lastWriteTime = File.GetLastWriteTimeUtc(Path.GetFullPath(options.OutputPath)); + logger.LogInformation("Detected {count} updates since {lastWriteTime:yyyy-MM-dd HH:mm} UTC", updates.Count(), lastWriteTime); + if (!string.IsNullOrEmpty(options.UpdateJson)) + { + var updatesJson = JsonSerializer.Serialize(updates); + await File.WriteAllTextAsync(Path.GetFullPath(options.UpdateJson), updatesJson, cancellationToken); + logger.LogInformation("Generated updates.json file at {outputPath}", options.UpdateJson); + } + + if (!string.IsNullOrEmpty(options.UpdateCsv)) + { + var csv = new StringBuilder(); + csv.AppendLine("\"PackageId\",\"Version\""); + foreach (var update in updates) + { + csv.AppendLine($"\"{update.PackageId}\",\"{update.Version}\""); + } + await File.WriteAllTextAsync(Path.GetFullPath(options.UpdateCsv), csv.ToString(), cancellationToken); + logger.LogInformation("Generated updates.csv file at {outputPath}", options.UpdateCsv); + } + + if (options.UpdateGithub == true) + { + // Write markdown table with update summary to environment variable GITHUB_STEP_SUMMARY + // get last file write date from the existing file + + var markdown = new StringBuilder(); + markdown.AppendLine($"Detected **{updates.Count()}** updates since `{lastWriteTime:yyyy-MM-dd HH:mm:ss} UTC`"); + markdown.AppendLine(""); + markdown.AppendLine("| PackageId | Version |"); + markdown.AppendLine("| --- | --- |"); + foreach (var update in updates) + { + markdown.AppendLine($"| {update.PackageId} | {update.Version} |"); + } + Environment.SetEnvironmentVariable("GITHUB_STEP_SUMMARY", markdown.ToString(), EnvironmentVariableTarget.Process); + logger.LogInformation("Generated GitHub Action step summary"); + } + + if (options.UpdateUri is not null && options.UpdateUri.IsAbsoluteUri) + { + await PostUpdatesToUri(logger, options.UpdateUri, updates, cancellationToken); + } + } + else + { + logger.LogInformation("No updates detected"); + } + } + } + + private static async Task PostUpdatesToUri(ILogger logger, Uri uri, IEnumerable updates, CancellationToken cancellationToken) + { + try + { + var json = JsonSerializer.Serialize(updates); + var content = new StringContent(json, Encoding.UTF8, "application/json"); + var client = new HttpClient(); + await client.PostAsync(uri, content, cancellationToken); + } + catch (Exception ex) + { + logger.LogError(ex, "Failed to post updates to {host}", uri.Host); + } + } + internal class GenerateIndexCommandOptions { public int Timeout { get; set; } public string OutputPath { get; set; } public Uri? SourceUri { get; set; } + public string? UpdateCsv { get; set; } + public string? UpdateJson { get; set; } + public bool? UpdateGithub { get; set; } + public Uri? UpdateUri { get; set; } + + internal bool DetectChanges => !string.IsNullOrEmpty(UpdateJson) || !string.IsNullOrEmpty(UpdateCsv) || UpdateUri?.IsAbsoluteUri == true || UpdateGithub == true; } } diff --git a/static/img/wintuner-mascotte-two_100.png b/static/img/wintuner-mascotte-two_100.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2485d4d2ceccb94bb98f548051e32310d11a70 GIT binary patch literal 51005 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

_@6h=x5kBF1 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‚r$KBJY{awHrB&e-H6_2cEj;x zE0&=Gb*z2HCnm9d^Z?o_HOzkR8K^m?4vFM2Ci}-}2vOwP6Uc1uhx63Mn7*h9GwUi) z?es9_kO4@4a=TFHz&JMF{Ve*%C$YNRgQI`@OZb8Y6AcdnK2}Zy#&9u-aO&_hG-g~U zy>rjvcKpFVB+47cl6M=p25V0RzxvaQCwW*yu{6onPjV614O%a0*= z)EqR`)>08;sI4p~M<>zJ*2fB)lt#DLn}?8pcn?rkLDR~^wqP19o>k)VdN_g=NQcS) z46aONfO0Q%(o%sHvpx`p<#wpp0%mEa#HdA{Q-Lzv0myIGCzdbpaL8&3w=WoL`j=@ zy@2HIVR&bU5NjPq;t$Qx15Bfr)MMH?tC-DAhsJSSR5cxC1sy%<3@QkGmEDeJQg1q^ zrkRzfsrDj3;8}re(B}TzX^bny#PJa2P=mVu^w-b( zFOS3cxt6#56XfI!vy$Gpg{SikOnaGPx^!5qYAsg2_D}#>W~S+Fy~wsq!u7<9`26U8 zTr)?*M;4Xgf<`aaR=H5;qop%5i83R}(rc`60w$xgcmfg`m@bhTJq@^DtwGPB% zQ4B^{JM8R1mVw$!oo~05kBuPC@^JidmbQ~tjlyZlM1*?S- zWDsPLIh0P}pv%N1b8GR%V*@zv;x#z>#5tI?pazu$!ysMB%!B54&CCtGwD6jrJbYJ4 zhleEp5Rm)6ddZ?soHp;?3b*6kv1IW|nB?5aL>i-$F>Fl)n3me<1uZ7>IhnTe4$B`7=W$kh9p!)fRx z-IlS>Awx$?Y#bh!n*}M*oERghL0oDlxMp0up*Tw+vlXm;m~N@d+IpFD@l{t|n7`&H ze|om0&VMMcNm);P{la&Xu7B>f+XE5uv{a!v)*fjB6Q&jSbPeNyJ{{X_O{}&_F@XRO zrd7{xf@8cN|HtgYhfki4+WI;$SyUFNuE(pX1{?pFUD%wXdXyn zYflP0Xr^tx047OGW{$N9tLDn}`>=7m981>BK#tt*FbsSr(ur?fxDeGmUaI*Zx!**B zR5Ce~M4`@woZSDjwGY@o2KUj8XxclBWwYwA+LysncNEWU+=1_PXviJE67JI%z%!>2 z+3pc6JbMkA96k*653}GbXHlwQ_uw!*!4UosZpXYx4{IT(!aznPGZjjy%p7g3kq``! zO+4qg=6v8`+5C^>ZvyhYf4juJ)L-~vxuIQ|XOWX(les0a0GT4lX0pssQWzhb#L&PP zI!4ntko91~8DNzgN1>q!A6wzX`Kw50PA`inIgw0f@N~@I1rV2&MUM4HH|rO_Esao) zDKo7!&q3%^zKgE!u*G z5NsE%gKc3WG{&vU3zr}?qXy9fBdDkdz)@~TSMwmVyfWPF9>)o(QJCTtqDt`)aTOUa zn;5W--j%nU;hcTi3eT)dy1Bz^%3lHU$FE(yrrKV(G2pVVj;4fHONEbWMGGj%Y%YP3 zIh$OTfjg5@H0Gc(Wkxkr9bgNQb&FH#HY&DQG-)iD=oJ>}&S=0>73ZSUwFI6*0=0!M zgbMwbmpXuk!T^WG^V;mnuUw4#E>ejMJ7L<qxa7#CyK}2=1N5I%?HC z=m$sPIDa8r%cmi;Zy06uEMxsHS(do>zu47KQ>yQ6)Sg$6Y+9IstDmD~ezIZ4rBU zSx#AV^qDLdruB~}Dx~x`>?YhUR-vL~(F8>)MehFKzyt)fPQYwJMKVf?fT$5DjoT$; zcx+i1^omJ)2peiI!;a9|u*m&R`cPc=F!Rmh%;^0%ZRj4j3u)4pgA^(3rYwNU5?bL> zW>R@baxq%Us^7atC|?7p+KcS7rxDTWXNBe5n=03nYjsZ(swryKRgKw3e<^2+79z z=vsIQdQ#=^Ubrx zS5~Zc7Ns(U$IuXd{^KX`A6pX$YX&l`rC6ZgBf$ZDaK4Y{TglW`>J2$gF>a`)J{FHz zY}~}proT3fi3wmkQHg%Cog1w7M z{pQX^*wz*XLmIOFe#!{Xq}bopuzqY}|^?o7*rt0W4U(5ZC?g-{A7)V6wIm zkA=h`p(q7}Xp73E-g!2zi_&Zj=+%BErN9A$cu0FHJ9IM=yCEg-8 z!fE`yMqQ|kQbtr@?Z!ek8Yy6KB#l(THW5$R-golHZ}_WJSdIU1rG~yJ2g*etLdAzvFf}J?phnN zkx&0xjtr0s&%50_xbw0^GK~aXIF(`NSX=nYJuoY0La&>L*$qBguou~E3cuYt6Pen% zSpJTq@sW}1QBfF0RqME~ z2gBonCt%>H6IP;SM=Q3zxDVqD!lM6ZQo|>&`7qA@KW}5zKg{Ea6^k-Ou@XyoIz=f( z9i%y&lb8Ji{6Pof2 zf+I9300CQmMYIiik(aA7i5O0O=gZ8JUP-uqTYp14HOw%TYW5&W2h%<`x z^o^i-Zwu3CKc>f?!;JK9dQt_cN3t}Io4=j9IY6!_$h_IDH$92X8}@*86YPc z7o@uqj4hR}vJn`cxS8V>GjAF0y6(nBQd;KDtCcGnYw^MH&5FQ*n>4V z;T;!X{?b*Lzj_TO2M=PQdzhAW5IY}x0&NEd(Ki@IGRu0$P3obw2mLPe_D|qfzgUm% z{R5;W0wK&m)Esi%feLaPP6Fd#23Z8e&TXQE*d)PVRuzvCki7JRnHez{?T=t$EP-{W zuBJB-5XJ(P1<7BDqHK14rcxCEq_j*lfzFm;Y)w1Q;*W zUF`(JPOg^6o(+O#xa2y#9Xgw2Vgg9*v}z!B?!rvN(g|>a&@cJq+ zf9)Jtse~#zHF@UC&0`1vlQDF*5rB<7xa-~y{OYbQ{Q990Jg_5+?IUhXXysU7??R0` zN5y++K=e}847eG`T#R*IzX#={XAc3&779PR;kS?W6g6__@-kH(jxaT4w#Pwn(5fgT z=gZPY<#7RTMIBT59K!J!CMW0#iI`#qnc9|V7Ex}{W1xa`MDs@Hj@@|d-VMmn$^-In z4mnw70pwb>@(wD{&ZWF4Kr4Nxf~)u^`yn$52EE6{42)QDKiP)_MZf}H;Eo&b#NLf< zu$2Xni009l2JU>x~m{F|&@Rxg;%~9d>9wz~Il1`;bBH<$~dHm7{kdOPYxwzdefN)8m5>pK1Vk3P6gXr!XhCBx<^uq*2O=YNguo4|95UI?mCUhd( z?6OW}I_OO@6)&&Ou(Qc~Ow_sLoZMGBB7i8+xSz|Qk_fKE8z;Tb$&NUP`iB26fZ z=cCs+>G5I|GA26cVaX8z;_&*aByb8pO?e6X0|(c`?%DX$fETS{hq}r*I?$)?e~PnW zmH8+!q#_uye5Hxy%l4@!qC~+C0wA6-MM0`&5dkws9`3^UgPXG*QOsQS0bBfImHTosfR#$ z=sjWt;+4unL=F=Xj_mM7B8JeDItblVK#@7Ytj&c^_lfAs%t3R01zs#1hdYO6V4`9H ztb7JqE}`lSQNCEzlvPauArvFq>{PNtmI{pG)V^#N-~|*Jy26D`fRT)AD)39tmHTRi zzQkMHToxPopBC*=F`&4V;?khS8&tfL%?SA63Iy1KaI(o#fbp{45g-&81lA+oLArAB z_f7$p;EVSPXXIb=s>k1#BLW2ZOia`wfmH#c8n?*IDyvs*cnIhpK)PobLtPdo=e-Z* zmwppjPbF!K-@gh7p(kmI#@NIg)V2~3Qy{79-r^w?1&V+p=jD2l-UI}upbWNNHn+-x zNJ$cinWoCyg8WpXpWdP9hfB9VK*g8A6)b~07%a9j`OKvPgy0Y;Uw~dBz|ea=MtDF2FzVJ^>1OI>4TkKAQ7@RZjw@6W*&9YuI7 zim}RLV4uDWdLdl|qohnxv<#-$N**EsTn(~BVG2Ciw|Ksy6zdJyCi^?Z3#h1K_9K+S z;44;4uyZocoK7iAmRIkIOKYsl?D0`r zGu>M$m&#U(=J7ePgtqB^!Bb;)wd6H368+SGnB@K-#e*rr4Pv6B)d<#jQJD85(9_ArjfvRF6B zw1Dfl4MEwTL*XFm6>~BI89kYezE2F>(wfD|mEyT?W08{hFI^ zr2@%JQ~hH&0HbA#6e8OkCNggcnc`P#|j8F*5Y7QD|*MPaG;2F^8EZxia&>{tZC^C zzAiSIXA(e)O{O}W2)HbiyTN$jMJ%)g6TW$fX+ezUy%8+ZYk$vPGr9l^$uZWyqc?g56 zBo4|;qM=IWrdl(Pe%n&l^4B6FU?PDqH7vqrQ zDk@d|D1PQYst58S4!o0nV0Q2f5z!X6#DnrIv{I>`~ zaamkfe^jE>Ar96B5>K3xaWM@RfFvCjKr{yZjm9Z>)^-#I^JOq|c{pvRid)6=zA^z` z>=RW~I+rYqeUR&pI#LMGW90gK@fy5*E0=dwmguVq7Ju~mE`E9*^Qo@8f7px1+x;f+Q2KXo!H2%4DoEX4TX>mB5XnmRC~g zSDKvX)t|*<#ER9vRD_~BX_7Vzg%KEOq9jSR-3|?2Gevq8AgEk9pBz;M<)Y$WId)NG zjayXmFm(~m!SmX!EYo=c!A;VXP#3aKUheid3^^h|^4aXT42ZoTJpoAv3o5ryWhr%@ z;_Wwcor75C-H%f%da%;niHV^kVo}+*f=c9IWbn!|sSxpsDP^!t#h0mVul`Ooia;c~ zkS0BmV~VBQnU2cxkSxn)WIQlbjo4m7{x=WWBjEkgHs?BZ_*QyrDX{X zOIlB_;MhxFsr}`?F=QhD`k-FO<&vtyqF4?`?nDgLR>AJBM4H)_3^A)2NLwx>Oed{A zi%do%C_Ih{hle)M6x^Vq-QV1nG z)Xfy~t@^H%;>-6rWvQ=UjtG$A&!yumNh~K86q=Ff+>M#D>e0_Cc3W;8c{ayvB#NXJ zM7!q%MCr*|^TVi5>_S18_kmIb46$fs+5Es(;Gh};cFeADs%!0XOUO`y08QkvZ!CkJ za0aP-@iHw{!M~yfD^a>AHKk>B7Nsa(egY0t-i{|=$v)y?(nQ(v&_Au5AV{60ZvRog zlkLTpXFrk>LFgGSi?tR3DSjt?kW-xK%o(~F ztq1$mcD0kpSTS^R=HC*$-PV!MZFc**)toDoz508 z5XoY8nFDKT3@oj5s8@7k?M}3Z3y5VU))f0tRH~?@sF)&1{7i+5a^==fd8cD>->H3y z>&4#`J%bLV){#Jz$1xNCjYRJ@^ydoLf(5uIeL8v*E=(VP7?-(k#Ui7NDWkJ^ z48ef_h)!MxrX*6kIQdPCgZ#nfLHv5#5OxhGA(h2#0oZuwuSzLyDaEaq_ zthRQOjdP{(iyn&Li8rZxo#o5JkRt+w{L1mL6Jl6m8C+&q46bx_;e+-&a8~yBI4O50 zE;4V%^u8ZsrS%Y+j4_xt7v#PMNjr;?K;iOo6N;IlE)kDI$Gkc(`WfYK-ad?-!wJ!w zx`CP+No zZDl=WvM{n0u)r~lwa#`da`(VtOW>)VG=8{k0{6Ctv2!GYt_UrRN_R0p%gxzx4PHW| znjfNyAK-m#z@pF6P;|9-}7EUa>?XB`Dh(Wi)jBBDMjw8TJ!cDT+y%6fqm z*^lX>MRkUZz|3Onj6JqWVGm&#p0Ol6rh%8S`pV#s~I z#W()&SUkQOJH5521J+{FkHe570>n(l$0Z9XS_#K3oh*Hpm$Rf8IOP$vctMAgMcMJQ zf;ek_2s6q(=#AxYPfHj-d2tx)+aqY1$YPKcqg(@#7ZHnhbTPx4NLy&|QfcV|X{LaX zVZrAR-e&NXM+PLfr3mR2DPzi0L`edO;3IJ%kI{SpJ4m4t53E!Kq4+)=mDqsU=tBdO zhlVmcssnO8zDTF?Vz%Pje#8T&#wZ>s+XRpjFa$z*ot#%d;Xdk(oQEMt1PHsCFLp$% zqG*jW_$gpipyOw`&K}8_*w7xv`nGZOMiQ9jcjBxC)i`}YEvkcFG>@e5n;oP0?xq23 z8(@TyXAx}#qF}>VI*0bj91b%5?Ta$IVNp`+cPK^^k5F_&hIr-GNF^}jyHX#d<@kf9 z)P9_txF44k?!_hgqd3*rhH6)aDL5&JaYJ4?C2>i{BX7bhQc>x+T#B+~%*x|roNV&G zNp(97aVUOI1CY6x!;m8aBr6YvvP0xc)e-5SvK|R?Vo^*>MKKZ_Lw*A%&8xt%Gs{r! zaiL>8g9r8vVq^Od!pSTa)%bDI@>;B$6;cDObQ# zfD~y^z))Ty<1)FORk#9(04U0m+NktfoxgRl?@sQUo**Y5h8z(fkyNg?hg6d!od_k! z+?2f8hdqB89O<-VH!}?a$h=W3keWbK$iP_(Ls&H}K#tb1y+4e*cMf0|mr{|-|5c58 zLYDu?W6{mbuJ#SY(K#MRli!Y7pPi+N(z?Q;XvLy_@d_$dTB$EZ3gbGJmlI&~EIb(t zgpyQ0#c-t03OIQTueem6!0)69C>DQPe2ZT3I~(^i=>F=08$lTuiR0P5!@1{n5C7r$ z_4ohPYs3#l#I%k`=J^_ruQW1e2kgl;Y9QmnpPC0 zwN8@4!mKgmeN*y2V9BI}GKS(A)cM?K3c8r>WKrR@;jx}1>4_CL6%ePloijIpN{=0V zu`KL_pxUqF__L4YIc>^{Q{+(^YEC5%YDPh@qoQS2SmtabOLHTOyKLuSpL4N# zB3Mzb?5L3C{_K+&h9oH;$=-@;bF}!N5yub?r_ebVN7q=Yw|~-nzBh))wvFPM{{EeZ z{Xc&>VnF^}rd7;!M%LAOtW(PjoKR_4OG93};Zt{x5FDOPO=#F8$lI7fY0Pv8OisgC z%0!GKm#1TAmb>BQ55$`)JthH3Q-K7PRFtHJo-r?oa^}r_q%KLFYyCE?JL71$S|vl)J1`E8Tik zg_~Iv0g_o_r6^W)MS#TC)r;G>O)m84ibg8jCf4^bR&jrWzetic&J;kH2=&KUI1-R* zpN4g39;N<2RPyRt5k*;YDE?EN5iVN3#I$1V!$yT0wjAy>&%hr0Qi79Gzag_Bo5>>) ziz7BXg2Yh2WsCK^v?lS){o4-=J+&>Cmxnd~>VGxy&yY77kXK2te4f)>TkEl%TjtK6 zR_?aXt#RuJGH}cF3!xBEm9UB2QZtsdk)8^e9?;Mkw-~Qf%))r4fOpIzWw|u;g-sQI zYPiq3Gme6bKr4Qi(-9DvGLhIJ*E@tN#o{I4OVKG_B3Yn^fZSo7iLK^BAU=uMReuB{S$9O`vxq-qSm2ZGQ4#>cN4&0~;sE zf~5|@~Gs2juD76fJ!stC7w$$lJA>nEsZz z3OJS?BF_{Sn9fRCEybwZupqB%&9GkTpGe@~a56j?0q_71|0(PljO3o#*PnZIYhU{o zp75U%jQ?5kzYvhWlv%-f-pHCJzwO)#FV3tqwE6W+g?;k=D^ih!1)0=6@yw&)lY%mz zK}K$@h!@Z`lE7d%-#IXu-qaOuGRE9L(IKwd4DKD%z=ibf-UPRLz2 zE1+dphMYO0%By4D$;%Lq<