From ce19d6a62cff8f3234999885e81ecc37db92c7b9 Mon Sep 17 00:00:00 2001 From: "Arthur K." Date: Sat, 15 Mar 2025 13:52:06 +0300 Subject: [PATCH] --- .config/clangd/config.yaml | 2 +- .config/nvim/.luarc.json | 41 ++++++++++++++++++++++++ .config/nvim/lazy-lock.json | 2 ++ .config/nvim/lua/config/options.lua | 2 +- .config/nvim/lua/lsp/init.lua | 22 +++---------- .config/nvim/lua/lsp/jdtls.lua | 4 ++- .config/nvim/lua/lsp/lua_ls.lua | 18 ++++++----- .config/nvim/lua/lsp/yamlls.lua | 9 ++++++ .config/nvim/lua/plugins/init.lua | 3 ++ .config/nvim/lua/plugins/peekaboo.lua | 6 ---- .config/nvim/lua/plugins/treesitter.lua | 6 +++- .config/nvim/lua/plugins/ufo.lua | 30 +++++++++++++++++ .config/zsh/.zlogin | 9 +++--- .config/zsh/.zshrc | 19 +++++++---- .fonts/EngraversGothic-Bold.ttf | Bin 0 -> 102108 bytes .local/bin/scripts/adbp | 2 +- .local/bin/scripts/gor | 2 +- .local/bin/scripts/my.itmo | 30 ++++++++++------- .local/bin/scripts/vpn | 30 ++++++++--------- .local/bin/scripts/vpnd | 33 +++++++++++++++---- .local/bin/scripts/wg-quick | 7 ---- .local/bin/source/src_venv | 9 +++--- .local/bin/statusbar/sb-vpn | 18 +++++++++-- .ssh/config | 4 +++ 24 files changed, 212 insertions(+), 96 deletions(-) create mode 100644 .config/nvim/.luarc.json create mode 100644 .config/nvim/lua/lsp/yamlls.lua delete mode 100644 .config/nvim/lua/plugins/peekaboo.lua create mode 100644 .config/nvim/lua/plugins/ufo.lua create mode 100644 .fonts/EngraversGothic-Bold.ttf delete mode 100755 .local/bin/scripts/wg-quick diff --git a/.config/clangd/config.yaml b/.config/clangd/config.yaml index 56ef0d8..b928d58 100644 --- a/.config/clangd/config.yaml +++ b/.config/clangd/config.yaml @@ -1,7 +1,7 @@ If: PathMatch: '.*\.(c|h)' CompileFlags: - Add: [ -std=c99 ] + Add: [ -xc, -std=c99 ] --- If: diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json new file mode 100644 index 0000000..0059061 --- /dev/null +++ b/.config/nvim/.luarc.json @@ -0,0 +1,41 @@ +{ + "workspace.library": [ + "/home/wzray/.local/share/nvim/lazy/neodev.nvim/types/stable", + "/usr/share/nvim/runtime/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-surround/lua", + "/home/wzray/.local/share/nvim/lazy/telescope-fzf-native.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-tree.lua/lua", + "/home/wzray/.local/share/nvim/lazy/cmp-nvim-lsp/lua", + "/home/wzray/.local/share/nvim/lazy/cmp-buffer/lua", + "/home/wzray/.local/share/nvim/lazy/lspkind.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/lualine.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-web-devicons/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-treesitter-textobjects/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-treesitter-context/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-treesitter/lua", + "/home/wzray/.local/share/nvim/lazy/indent-blankline.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-notify/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-colorizer.lua/lua", + "/home/wzray/.local/share/nvim/lazy/mason.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/lazy.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/LuaSnip/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-lastplace/lua", + "/home/wzray/.local/share/nvim/lazy/telescope.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/Navigator.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/trouble.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/bufferline.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/Comment.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-lspconfig/lua", + "/home/wzray/.local/share/nvim/lazy/neodev.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/onedark.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/plenary.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/fidget.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-autopairs/lua", + "/home/wzray/.local/share/nvim/lazy/todo-comments.nvim/lua", + "/home/wzray/.local/share/nvim/lazy/nvim-cmp/lua", + "/home/wzray/.local/share/nvim/lazy/telescope-emoji.nvim/lua", + "/usr/share/nvim/runtime", + "/home/wzray/.dotfiles/.config/nvim/lua", + "${3rd}/luv/library" + ] +} \ No newline at end of file diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index 11d9aa9..e8a7bb2 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -33,6 +33,8 @@ "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, "trouble.nvim": { "branch": "main", "commit": "46cf952fc115f4c2b98d4e208ed1e2dce08c9bf6" }, + "vim-bbcode": { "branch": "master", "commit": "6fb28c6deae5844ee2bf0b97ef2fea04bd3d4eac" }, + "vim-caddyfile": { "branch": "master", "commit": "24fe0720551883e407cb70ae1d7c03f162d1d5a0" }, "vim-fugitive": { "branch": "master", "commit": "320b18fba2a4f2fe3c8225c778c687e0d2620384" }, "vim-peekaboo": { "branch": "master", "commit": "cc4469c204099c73dd7534531fa8ba271f704831" }, "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" } diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua index 24ec558..23e133f 100644 --- a/.config/nvim/lua/config/options.lua +++ b/.config/nvim/lua/config/options.lua @@ -9,7 +9,7 @@ vim.wo.relativenumber = true vim.o.mouse = 'a' -- Indentation -vim.o.tabstop = 8 +vim.o.tabstop = 4 vim.o.expandtab = true vim.o.shiftwidth = 4 vim.o.autoindent = true diff --git a/.config/nvim/lua/lsp/init.lua b/.config/nvim/lua/lsp/init.lua index 3311ae1..acb1f1a 100644 --- a/.config/nvim/lua/lsp/init.lua +++ b/.config/nvim/lua/lsp/init.lua @@ -1,5 +1,6 @@ local servers = { bashls = {}, + cmake = {}, clangd = {}, eslint = {}, gopls = {}, @@ -8,9 +9,12 @@ local servers = { kotlin_language_server = {}, lua_ls = require('lsp.lua_ls'), pyright = {}, + ruby_lsp = {}, rust_analyzer = {}, ts_ls = {}, - ruby_lsp = {}, + yamlls = require('lsp.yamlls'), + jsonls = {}, + svls = {} } vim.lsp.set_log_level("debug") @@ -44,22 +48,6 @@ end local capabilities = require('cmp_nvim_lsp').default_capabilities() local lspconfig = require('lspconfig') -for server_name, config in pairs(servers) do - lspconfig[server_name].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { - [server_name] = config ~= {} and { - settings = { - [server_name] = { - config - } - } - } or {} - }, - }) -end - for server_name, config in pairs(servers) do lspconfig[server_name].setup(vim.tbl_deep_extend('keep', { capabilities = capabilities, diff --git a/.config/nvim/lua/lsp/jdtls.lua b/.config/nvim/lua/lsp/jdtls.lua index a60981a..c31ab31 100644 --- a/.config/nvim/lua/lsp/jdtls.lua +++ b/.config/nvim/lua/lsp/jdtls.lua @@ -1,3 +1,5 @@ return { - root_dir = vim.fs.dirname(vim.fs.find({'gradlew', '.git', 'mvnw'}, { upward = true })[1]), + settings = { + root_dir = vim.fs.dirname(vim.fs.find({'gradlew', '.git', 'mvnw'}, { upward = true })[1]), + } } diff --git a/.config/nvim/lua/lsp/lua_ls.lua b/.config/nvim/lua/lsp/lua_ls.lua index 4540403..e62bd5a 100644 --- a/.config/nvim/lua/lsp/lua_ls.lua +++ b/.config/nvim/lua/lsp/lua_ls.lua @@ -1,11 +1,13 @@ return { - Lua = { - workspace = { - checkThirdParty = true, - library = { - vim.env.VIMRUNTIME - } + settings = { + Lua = { + workspace = { + checkThirdParty = true, + library = { + vim.env.VIMRUNTIME + } + }, + telemetry = { enable = false }, }, - telemetry = { enable = false }, - }, + } } diff --git a/.config/nvim/lua/lsp/yamlls.lua b/.config/nvim/lua/lsp/yamlls.lua new file mode 100644 index 0000000..cc9d6f7 --- /dev/null +++ b/.config/nvim/lua/lsp/yamlls.lua @@ -0,0 +1,9 @@ +return { + settings = { + redhat = { + telemetry = { + enabled = false + } + } + } +} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua index 5461c0c..0f785bc 100644 --- a/.config/nvim/lua/plugins/init.lua +++ b/.config/nvim/lua/plugins/init.lua @@ -1,7 +1,9 @@ return { + 'isobit/vim-caddyfile', 'rcarriga/nvim-notify', 'stefandtw/quickfix-reflector.vim', 'tpope/vim-fugitive', + 'junegunn/vim-peekaboo', 'tpope/vim-sleuth', 'vim-scripts/iptables', { 'akinsho/bufferline.nvim', opts = {}, dependencies = { 'navarasu/onedark.nvim' } }, @@ -12,4 +14,5 @@ return { { 'norcalli/nvim-colorizer.lua', opts={ '*' }, dependencies = { 'navarasu/onedark.nvim' } }, -- { 'wakatime/vim-wakatime', event = 'VeryLazy' }, { 'williamboman/mason.nvim', opts = {} }, + 'Winseven4lyf/vim-bbcode', } diff --git a/.config/nvim/lua/plugins/peekaboo.lua b/.config/nvim/lua/plugins/peekaboo.lua deleted file mode 100644 index edef215..0000000 --- a/.config/nvim/lua/plugins/peekaboo.lua +++ /dev/null @@ -1,6 +0,0 @@ -return { - 'junegunn/vim-peekaboo', - config = function () - vim.g.peekaboo_window = 'enew' - end -} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua index 08714c8..40e8e6b 100644 --- a/.config/nvim/lua/plugins/treesitter.lua +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -7,12 +7,16 @@ return { build = ':TSUpdate', config = function() vim.defer_fn(function() - -- - @diagnostic disable-next-line: missing-fields + --- @diagnostic disable-next-line: missing-fields require('nvim-treesitter.configs').setup({ auto_install = true, highlight = { enable = true }, indent = { enable = true }, }) + + require('treesitter-context').setup { + max_lines = 6 + } end, 0) end } diff --git a/.config/nvim/lua/plugins/ufo.lua b/.config/nvim/lua/plugins/ufo.lua new file mode 100644 index 0000000..8ab9530 --- /dev/null +++ b/.config/nvim/lua/plugins/ufo.lua @@ -0,0 +1,30 @@ +return { + -- 'kevinhwang91/nvim-ufo', + -- dependencies = { + -- 'kevinhwang91/promise-async' + -- }, + -- config = function() + -- vim.defer_fn(function() + -- vim.o.foldcolumn = '0' + -- vim.o.foldlevel = 99 + -- vim.o.foldlevelstart = 99 + -- vim.o.foldenable = true + -- + -- vim.keymap.set('n', 'zR', require('ufo').openAllFolds) + -- vim.keymap.set('n', 'zM', require('ufo').closeAllFolds) + -- + -- local capabilities = vim.lsp.protocol.make_client_capabilities() + -- capabilities.textDocument.foldingRange = { + -- dynamicRegistration = false, + -- lineFoldingOnly = true + -- } + -- local language_servers = vim.lsp.get_clients() + -- for _, ls in ipairs(language_servers) do + -- require('lspconfig')[ls].setup({ + -- capabilities = capabilities + -- }) + -- end + -- require('ufo').setup() + -- end, 0) + -- end +} diff --git a/.config/zsh/.zlogin b/.config/zsh/.zlogin index e42033a..5022d02 100644 --- a/.config/zsh/.zlogin +++ b/.config/zsh/.zlogin @@ -1,11 +1,12 @@ -[ -f "~/.config/.fix-tty" ] || return +[ -f "$HOME/.config/.fix-tty" ] || return + process_id="$$" ( - if [ "$(inxi -aG | grep -c 'Monitor')" -eq 1 ]; then - setfont Uni3-Terminus32x16.psf.gz + if [ "$(inxi -aG | grep -c 'Monitor')" = "1" ]; then + setfont ter-v32n stty -F /proc/$process_id/fd/0 rows 65 cols 195 else - setfont Uni3-Terminus16.psf.gz + setfont ter-v16n stty -F /proc/$process_id/fd/0 rows 90 cols 320 fi >/dev/null 2>&1 & ) diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index 3117b53..9ffd71c 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -32,6 +32,7 @@ bindkey "^[[1;3C" forward-word bindkey "^[[1;5C" forward-word bindkey "^[[1;3D" backward-word bindkey "^[[1;5D" backward-word +bindkey "^[[3~" delete-char bindkey "^[n" backward-word bindkey "^[m" forward-word @@ -88,10 +89,13 @@ alias d="diff --color -u " alias rgf="rg --files | rg " alias 7z="7zz" # for whatever reason 7z provides 7zz binary in debian alias wt="watch --color -d -cn 0.1 " -alias cal="ncal -b" -alias .e="source .env" +alias .e="set -a && source .env && set +a" alias vimu="vim -u /dev/null" -alias reswap="sudo swapoff /swapfile && sudo swapon /swapfile" +alias reswap="sudo bash -c 'echo Working...; swapoff /swapfile && sudo swapon /swapfile'" +alias make="make -j$(nproc)" +alias py="python3" +alias neofetch="fastfetch" +alias open="xdg-open" # function aliases bl() { brightnessctl set "$1"% > /dev/null; } @@ -107,12 +111,15 @@ compdef '_files -g "*.md"' md # git aliases gl() { git log --decorate "$@" | bat }; compdef '_git; _git-log' gl gus() { git branch --set-upstream-to="${1:?}/${2:?}" "${2:?}"}; compdef '_git; _git-push' gus +gpo() { git push --set-upstream origin ${1:-$(git rev-parse --abbrev-ref HEAD)}} alias ga="git add" alias gb="git branch" alias gc="git commit" -alias gca="git commit --amend --no-edit" +alias gca="git commit --allow-empty-message --amend --no-edit" alias gck="git checkout" alias gcl="git clone" +alias gcls="git clone --depth=1" +alias gcm="git commit --allow-empty-message -m ''" alias gcn="git clean" alias gcp="git cherry-pick" alias gd="git diff" @@ -122,7 +129,6 @@ alias gi="git init" alias gla="gl --all" alias gm="git merge" alias gp="git push" -alias gpo="git push origin" alias gpu="git pull" alias gr="git restore" alias grj="git rebase" @@ -134,9 +140,10 @@ alias grt="git reset" alias gs="git status" alias gsc="git switch -c" alias gsh="git show" -alias gsp="git stash pop" alias gsj="git stash" +alias gsp="git stash pop" alias gt="git tag" +alias gus="git fetch --unshallow" # docker aliases alias dc="docker compose" diff --git a/.fonts/EngraversGothic-Bold.ttf b/.fonts/EngraversGothic-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c399bb331ae7c5005353fcb266ee5cb7b94fe213 GIT binary patch literal 102108 zcmd442Vh&(^*{dZlWf_NZCQI-)|NcvCChuS*zvaG#BrP*#{&pigpdRXqd*~ywiLn& zBVm*V2#~gH!fY7@TEb`v1Sq>SPzYhg(*JYslWfU$((wKF_xt{wNY9q;yZ794&${QF zdmcwPj+1j+IT5$IscBC8x;Jjf=E!CH@TqxLLt~RtrFxCyJ}JcCD`$0e_R1Q{ZsEA^ zw{qOCYi9NK)&1?cyUxJ(*K=Iz2c5mS1(z;eThDQ1Bib)ne#+9-m)&{cA308D=D4{2 z;ic&>@wTC!PqvyEaeLga@bOm?igU$HvC|*S)_(1Z@xI54v z9p5=}%KD8DEbdj}?>9LvvEk%XmoMFY@GURKUe9sjU8gMFxSGF-yA$8{qrG+2(o=>m z{|a*cc;XXFQPm2!>bZ@9ML?=G&9`-W@c2`Aw*@%g*>{0^>; z@58kp-{;|XdM(DafJ-DdgkItUTrv43^bUV5`sG3&liNaj$lIYeNjjHJVI~$XU-Srf zGkGI)7`RwU{t)_r=eY`A%;_*rEqR|SCr@+b7|+aSa5da}Tm^Z6OCo>7^|$yufbYNI zYWaN5OoF)2gZol(-+nHI{33LOPe;2)LSOKep|8p9q4&t{(BH}S(C6e6t_5T4$F-UN zgllE^2kwENlksZft2iyLrf{1!K8ah;U%=%OW9R_c0tz$%|G+)_>`QJ9spk}IO@58} zUc#l4gWL|@8hV$PV7=z!`>(h&FpmexI;__gPAB>uw}-vfaLK@Z3d1|a{gjtT6MBxV z1=fMCMdZbO6M7kIQIG3C@%k6PF7(aBI?y$Ue%-;H%@1=nx)#wdx)yZJMB9KX;C-eS ze<<{Kx)y95=vstd+HwWa|4r$b($Y*?W zuLWFZaZ2Fm3*hKO-VFRj@EV3|V%+dLFr1+slU;|nQSuzu2YjrA$bJ<3e&?jhfyEtPSUE|y{pdZlu% z1ixoOMyNvH^E){um2LbWzRTsZL@8X0C_1tVUe#hCYbLy`UTJAm`)WfNY{PeQoGn zXi}jKh2a_CO@Y7XVm>PLIS=@!u*8MlAuoi!AfE$Im&al7dd=l>Fs>80 zZ^ry<#2w%fswe4->KVL5*9b4r;VFz3sV@B(zkkfGL(mINcr^m1i$(WwYsKet$=pMb z2M=*NZgYt0Q$1c@(Mq&|UJxyU4*d==w&K3Gai#j1>bGxzvu`;K*@|_7o{8vNrgQJ& zN=PMe4?4%|Ip~K*rY9(0gz0{QFTfL&HyG_wx~DWs@j~g3(pVIIF}zZFj&-JVL~#c^ zeNSm&8XZLB0F}G9hTfXs@y($}nY@U|-3X3nGrL63yU_0lR|FiG_`=ZJ;0YeTr}1;R zLeRZ|U&-(z*dEPTi#1#czIR8~fa0Ic5qgr!0IFZ9{-=BoU9yJZ;xM<8oXc(F?+bm) z|C}oq&Ev`=wi4B?%of0!;xpK)>}BR)&*9e&{6&8=b7B#-uO5Nr91jccETSSFl11`K zF=-}4WF0w+Tuy#TULkLjk9iZH!58!M`A7Ia@^6cXNF~yU+@cFbSBickdPKBOoFwiP z4~iFymy1sm|3bV|e2@5H@f+fU;(v<25r1#lVbxfTR*ThcbzAeSW!47kZtEYcFWYoB zyUlIq?eTWGU1`_YjdqJY%ie5XVjprn@A?R4Ps-tShtEEI{^4g1KX>@g-~8~+(Id4- z9y#*Vkr$5q<;eac2ade+BM*C=gS~hY(UMG(LkdYLX(Jrc1=e=R*pXJ}2 z0eT`%5qFChiI<7jimwpgBEDPvkoXnx0rC6dL*nlMeX3P&HCwF=`cek{@2wBov{BG2 zVxV8apyv+9A6|0!ti$IVe){mA4!`)#H-NtM$U}hsxg#%yp(mkG=pUgcL;FIHg&qk# z6nZf9`_SIdp3qI99ie5RxuK4bC8P|+1wRO$8$2U88f*#%f`vin_|xMLjPE-7@c3op z9pmleZR4%uE#u|mwsFO{pA%EgG~oNJov%E_Yb~v@U4R{AH4tI^#`vx5IA5=A<5&(yOVE8 zzBzeW@{;65NySM;vL9sU%C^W(mz^eCCp%eolB7kTDB9ouwVyVw za7NAqeof;nTskP-#@RUs=j2?RoAY4*lfh+jSzI=>R1TNR<#GAgH~G0jF2EIW#as!j zvNA}A3a*l?;;OkCu9mBVb=-g*OA|MXYvx+G*<35v#~!&Gm4-+#Ifto6F7P z`nmbs0Jne}0e2zybJ!uj;4v{z*RPXY;MlWoMB0$%oi4p3iOL z&f_lSF6J)huHb&bUB>;Iy9zVBlDnR}fxC|T7pW$Vkh-;`j?{CTNE2xwHTYf|{+9<# zZs49J@uUiJ=VY>t+({n8=%0}w_QyGV1;34do&QSY6^)5DiCz)w#buB)>%|v|uNS`` z*A+JwcU#`PU%b1!?HZt zplrA7G1>dF!$~Pg?xeD$wxlbPb|k%%oP>YwEE{vDA&JdsF|K`iVlXa4Y&1YZccjK2SC*FH`PO{#E&%szSA1b%*MC zwNqWA9#n5p?@>RkepCIW#;B>$Y}MSMc|~(n+oU~TyF+_Gm!K=utw{q8ZoUmU2pok=_7Nh z*=!y(kC?A8?=!!j#-|mg)ugRWyCvfA*p5AADw?*Vp9h@on=x?K|K*oRgEYDrZy9N4axyFUb9U?w5I)c^!Ed z-1?GZ+f|Cn&6#UiC`L+Ho{|^6d|NcU* zFsE=);nu>N3STUIzwl_l8(0xoANXb9j==Lp`l7s|B}E&HwiVr0^hnWxqC>^%;@QQ6 z#jA_=7Qa;dQ3+pSEGa5kQgTJf10`RUW|z(_T~&Hz=}V>Wl>ShbT2@fDsqC_{hsyq1 z_EA}|TwPvLKD&H%`EBJ7l)qS!TH&pzsaR66vEs^#M=Cz6Os#CLJhyUp<$#eP;9jskldw%Urwfkzn zs;gd#v0DR<&HwvZv*h*-5jTXP-a&+S$LK{rv1B ztzE54T35H8)%tAfcWrrXTib4F`>5@Qc6Gb8J*T~{{igPpI;>)OTifc66@oyr}bz&Nn-M=rVVebj|HLt807LOWi5mUEN!|AL{;l_mQ5|p0b`f zJs0;p-z)7c>s{Nst9MWDmveIF49*#uvt!QdeR+Ks_wDN2H#c=||J-ZmzBu>LJomi* zd7I`v->>e^>tES_NB;x!Q|8Z|zij@h`J3kNn7@1eWAopi|K)&qKsit_&^0hPFfwrN zz)kGmfq~BkjzA;9z9UaUA&H=8xMG{aCQ{fGWn^n`YXZ3LU?A@V<+XSe6s5|$;bO?DJIoCf1IvRb&uNzUWG!5)wGuTuEg zKj(bQ06C9XgYVK8>)Vb2_V63fE*%g_{KbBU#4mA39L4Na>@RlU<)>dr{G`z|X!_z3 z^RLsds#{S%*topme8*PvC25z}EU#Wry}arYGSuGQKKKZJ2HOYs?)}~GFouY$3th?= z@*U8Q+0cDloW>Dwdy2I>yt@O1#YM#dzecN*xIK8s#3b>efWt0{*Qj+`zfMzBTvX_B zlT(+hpI_M8u`<)Me|GX-z2W&P-S)%kx&Y=K4s-U~-C1D@z>v8L!aP$brx}E;;nINX;h$zY1vcbm(oa zh+^4apjEr=fJ0kQR2Uce#U1A$er4qQuP$D&ps{Je1w}4riHrQqL@%!3?iED7{8Ztq z=LWY84sN^5W4C%dHFtSzRF0-6d2-Mp7`+83v`}%hdqoU zk4@*$6&35^B|37(7Mm$uZ}L_AHn;thB}IX3ciA;$bJc-;22-6nee{A~$jq?awT3x? zS%rc2+JH}U-?I1g&OW1cBi4h!Cwm@uCZi3GQigNBKojgcU+7cr2kgBRph~QWus#@- zt;P?PRW4t)yQ-o{uQeGnYm2L!mn?0mEUhTd%V};41kiUH?*B}t=YN` zROT5?T76MPl{?$#($!`L0&UGXdF2(Ql`Tt`G*{#PZtm~oYTzOTfa)Y3iKp08tOI=% z>quEmdueG~^+H?!-2Qa3q`h=bcTuN)zIE}Ebn4?KuvC=%DZHNUtz4inN5GF8{Tgyz z|EsU||Mk;1-ss1Fv>OWj8oRKqbdD6p@GSiW6v+7V%;|Dtl2nzdGbnY1Cz-P{d1bQB zo|-CGXJpP}7D!B!JLJn;85zXabUz|Q2vcHke(uEstLROl}NI?1EK zTW$&NeEGKJL)|?qlCRrz#`V`7Cf;T3ZOfLm!5_~N0!x^zhwlUZ+pxYwI>sx;zo7jS z*ohqPNB_kfmqCQ(ttLgqRT8>Tl^W3Xh^nQzrAI8k6O5dY&v*>GS9LbJJ5~$wbV@#l=e!;|$3% zt;*BmPP4f(+loALTf9n~9G@sjh|^g36u_5(`F8-me2!B^K@uh)$_|X03Ixi^A_0H+ zR|@;Zfr3DN+uCx!&y#AXt>3h=t-P$Zz+ZZW*KSGca=0p$I?$YEH_VyQ-rRg1WEo!aNl9^-F%C}e@I_@- zUQeaV?aF8f__N82?Ij+2QBie%TT@|UU+bxByXFNSF0#3GMvqr-LbxkTTkA1j#GPyo zVhh-a{48P)-pgyr?vhg-ZJg8OMZ8nDip@Us&B768>BGll;@I zG33X$V+293Kgt9;Yu@~roIJSL-KpwD46d1Tux3bpYvqgp|-lxBP0?3|jKoY{GH zv(jE!;_~}lC6)aKWx7q1mZq_#D-BO-Q&gH1r7}gMg5aTR?gp%Fz^4T}H?BH@wc-h2 z!(g(%2_(pb!UBX9WtNQGqRw1jO5aHv${I_X&$)13Q)|!9XIBTv8g+JFd$~Kq>TWIa zXIHmtQ{;AAd2v?3yw>8zc`d6pb@XVI#8Q^-)ElxKdNai=g@?%&atdS%J69(8!r}!|PXr-@xlnOK1)$dG$jK^9(m6e9ozq5z zpv9Q(uw`Y=BM;dsY!0)@iS<4W9?b>tC&z=n11?Q6(VRv;3jUg$L`eNdOK!h?3C3K_ zUCf_CeudSic22;iapAR^j0Z(z{Nn!pd;6*Aj_r$R;sQPr;1>jq4y z2w$o<8-1O&)Ko*-=KO`DJsY>JIN6ucJiMm4#_hH`>oex37kcz>>%|FTk-d0cPhr&@ z*U2R-YMT%g{ty$a0x$ExG_?zL9@vA#Pe^LhrR!?{UA>-&JF&6eaM>s4oyRN34^ca> z5%)CW9x3+U9;{A8&O}M+EZ$>ddR7uaiS3@3{R*8*ll8_^4!K&b)F(VOMjR*k?Ab1@ z+LyN|`0!G>(rr&sE|n&yo01Zj`s_v3F1gE@Jxr5w5rIN^l$w?9 z=yf44&aqck_MJVut-XCqUs;iRzR~U~n4MGL&uT8o&U~i2F2md2cE*_P(F$ zr=YvjpJj!4OxK*wu@-YofH#OE4h7T6ZV~+j97M9uJhOM+K-b3~pSk@ia#!$y{Cm}DXiVr>haHo?<9z9KZWm1XsA%95V~qP z#FN8U62HI!;9CWGN~F~koa^@2Y1C?d)TC*wGFW(J@E)tHQWuCbV0Vz7-cV7f(`b#A z@HR1=@l9d)L=py{%P&!pXCGZKI?9DEdG8An-~J%4eCw@egL}g`{v7S&=z7o$e^a|ZzOc~0_nBAP0^8)%Zh8|(CDB;7zUc`?*$AtW(>yl0!o(O*l zj2urCX{$6|y*b}Et1Z`;;eE-q$`Jqa&epE>Pr5sOnG0(QRPOAuuKetR{Ep_Fta&}f zU9D$q?r3jsJ$r6LZ5Vz(gWnhfKk-lk3(E^^e15ynm8#IDWIjNYo3@XVyk1|H#hh~% z38X44wiIcw_vM#)r7sKW)tUMx)-DlvO#xp0z-qJ@NRPHWVob4Is>%gJNv9=0l;q|V zmgeiN7ESG}rFs79n)Q9nO}RC`Kw({()txD?>NweFEh!!Atgj@0o|m4gOqQGUGD&=V zVrFK2XJMhim@(g_)u=QshcZ4PJ|V~IpOu$uP-7495?}(fR4Y;vaX>2)(ddgjfz;?F zcMS~z{$lXRINE4vn~0$VQlk4}sxcH~JW#ax%s|eVNnhJ&ri^jpGGA^WcYrJn-dUzm zYYf$33QEVJcR(XL^aWjQgW~`+OiXn@uD|1s({R@{WSF-35N&>kHrN!~95Ny_LrXrf zdHuTPyT(RO?KpLGgv<}#j(hGW?ZLgYcM|$IOn;DRHjl)i68Uw-evyh?b@leGZ@zy1 zl~#n)@+i$-mrpF#*aKDLm zpQ0V`R19%Rt;#!yH<&=0g9z;p4FOe*PqXn3;X~U|)11ns>?ap4eYS~=h*1N71ak!X_#OM6 z*h19ZL`}9m{y4D*fnpLm9LgsD2>p!8JPFn`iF~nt{(RiOl>C`A@@LS`Rp6@6etzaK z`Sb4G=$j9HfE!;WyTA$1wW_eLRrytK`3C0a?8#a4M$MZfWzn7m3&^hEAbO}k`-5aB zT5Awzm|4#fPuN18(6hU)H7CiH()6n?)g;Q26E&BNj5nlvJ!wi+hN~_3?c#)Ftxg(0 zAd$%xlDGk#xunRPY&5xQY!(d1>0oz#g?Rai>DU{4y=6r$TN+C%S~j&6=i7Vrmh^&F zx7Fot&T*M{l$M)~v&t9rRn1P*XO)?gQ@oDcLc2pH2ReX-S`7FJ@In1C(6O3m9SdWR z@B;&t6*WaqKRvuB3`rtxj>H${7TgjWae~OMRCzl5Q{=^fci0oQa zJ3@ydHCUBav^D|8n_#6Svzy+FfYdZ9h6=tbgZybo=M4yJvkNqTk9*D z>Nj>52kbqTbZ2&hCp*j2)SkcOqYDcR*4nZ~%d4x?Oc~{t6uHe+TxL(t)OAt#Yw-4| z0Dp{*J@>8Q;kSnGxrglf#Va~)Pb2GA+pPJ}j9=N{0eIh6{vD)0O77`Xpq^ds;$<1JXODsu8K zi-(6F*!JYUCvtyDc3yYg&XCZa;(ssTkBjKk@?oL`?LNMI^84>2^OJaJhY%PFa@Coe zmv>z8%Z~SMzx_S3>(y5ybENb@`=k0)XiY7Sa}O>nIJoTNkIAl2KA|mnj;@ggYa~U4 zj^id>CZdQNC7vv}psTCCvGdARmtFeKWtWkzmcpWz*@42~zs_E~WXqO)XW>5N@nO7g zFdoyVQC4h>KHc?zUYeYoto!{4@z(k5E_eHbBi|>=RGP$uMQ&RecFxz)zI36#@~MDH zNjdcx`gFozjVM%c=1FO0wI(~Wq9w!O@V-{D!D3E3t-hwb=}1$B%``XQlBV13C608j zrKkXIjb?9rRmGyg%9f^zfx3J+02mMPiA+Ys>QvPfo%);K=wvC$3FbTgId;wnF*Um! z7M*P!@{kfJ#RMO|=_az%=_o5s*GcXMTDTO@)cu$b{J1BiQ(@D&!&;RYq~vCw+ifdI zR~hu8qO1XDZjpaMQ$@Km*Oif9=+UIbYZPiv;cT;K<$|KpOtQ9JFH1_4DKruiCrU8d zs++w|wMIKno2*DoHpC~(Mfge3nEZ7ebmvY&NAPwX)((0AvYhGFqr*3nTSBsUUUyCy&maGpFV9vCgihuFf$M z7yOaz`X_$qJ@4V|8Qc@rr^V10;5Qvy`;clxWa14fbaQMBrs2s+mT>`s`fI#Rr4!>9kOcHW)-hkU> zG*qb76$YcrJ&@;c%afCcHZ9k0(2}HNMdqUZ4A0nDl~&uO)mNM};?3xn%d8shk`Aj| zoanT4F41bNGH3z9?S~%CN8S+53U(7-UJwP@Er`HD(o3(6al8& zB(MxDomK!A-T=UwMVgISDhiOnpPQyNs7EiE9-Ydex-!pZ%d?-9ur`5Dvllv@g_j1eV8I@qI~nnn48&Kg$TwjA$*>VC#8reX zu!qJ`X!s!B6Tlm#b+UC)Prko2uYFN=cBZj6NvG7OYZRJZL%!=uhfb$4IIq4cskCg~ zit+;KrcGj_A+uC1mx* zPnIQ0la+E_!|O#-Ns`18sJ2-=B~GW+QA7EcN6y?UWINx^>{m`T>4fx8{(7Imr@563Ji=Z=E*0bAoFq zvT+582p)1lYra#Syk0Pud1rHw|n*4uAc6W)7JKMk#$9ROM9|h?(E*4k|KMd zFHM8ETQy0YkJgp*`zxy|D+V@nc6RlA(B0G1)#GgOdCE$>dDSkbNo8}Yu^)$he}H=c z87R+U=CSturN+WC+pu-v)&A{dasGzVQj!w<3aw zS1%<_yq!OM)+uL?wRQ}jxe6DGR~rAif&VSJjoMxCvIcAleooNLm*22we(+oR{mgMI zaTFenkRZUMix~;w4Fopc*h>grfGi@JK(d>OyjUEQE2_Kd?#t2ZR0?&|Tcb&diHS+l zkzWY--7*cmmyV7SxnAdTs1)MWx5i15q!Mu_L+!xaEiss7^IL=5owJbx4xOOF-f9g= zA@9taN9WFS3i5MOfLu`t-7_e|vVqD@$OEv+<7HlNnJ01MoW6?kK7L6?na5Lhci+Z7 z{3+bO8riR>Aoo`UYGQtBk!CW22!HioSqxFv-%mW(T+@&Lz-KY{0vX~t>g!ZNpB6G^ zi}5%km=?hz^Ga(j`Fn6bZ!zbWSrU>J3T>JtQ{`;zYjC>t+T5~?L^)A4iyV^jbh9j3 zB2Gw@A~GgVDn`^a%b`|ClM)k>VCB%YOy!;;>o7L*2%=oy6JFIwoNRL8VghA-ZhLxm z-t2UbUX!SR$D}&DD9vYbcrqLYy-9C@9+1n`sYbiWOs*|eOXYgK*Q%B#sZIVgbE-yH zs!2*tlqyvT@nv!GGI>J06s9>rPVAq_S>Zh{vIf4Iv;0i#aT&a!cSDV^M|UwRm@*<% zb$Ay=JqA&J@M_{0F%KB|N@PlRyH$33zTcus${Rj=*eO+MbBiqwt!rgjf>b7*KQGB` z6IoSCO|tF_e)0V|Mz2O^bu7Cx_@!OV>@TLHKjZ&ESC#o$U=!vLL^=HMx7^>|+1)n( z5B{`E}Yf56v~XwXASoZ_bI8OTw6RTnsys)_5!E#8HWMF$!MUe2yM>@ z72#Z(k7iN0uwk8yYZ~bVvDuiGD3hmX67{|cr7o+$ zV3x!sHi_d2BBm*+$cCUNz#asxNs(s`+AoIoc(D5gk{5i1j!oso9%R+Nh&f{P;>nSi z0x6Dyg?hFgap=-a2B+O*G3q__xs~4hxqSs5kN>D#Wi!D+s5M!Xs#mO@#$s=No~NYP zMZF`~$3P~nnUG0=VoyM)(S)6?=&SaNUkVUx%c@;aMJ9$Vl>Z{;f z62A+;>)<|7G4_HPiZH5m<;w9Z<}{v8?%c4oXa7Iy^IvPJAO*pfUW1#dw5qE9?wuWg zLB#sI5dBd-3fqt3fp#SV@0|ea?U|Flirjg!1so_!Ps`2D=EGlM)hMO1_#`Rh4CY94M-~I70_1eoAm8wR!i{kf zq`6RO!_Yy~OL`{wQKh zGNp`Ep#A0_Kqs^~tjv{T@~YDY!EL=alo#>IB?MR{4@P;U${eSHj^ ziN2m@b3%SmbYFfZ2(d|K3e~|vgRt<}&L(z*7i*K1={Z`xB2^6^9$%ZPvE(FKRK`T5 z6!{fVGkDr(%1(%nm!-rP8J!975-FcZ#UUpSzg;#bQASo)>GG zO=7Ka1{*Cr9?s>^wbU?a9JQJe7fqo%oYkhDGT0kxlS!>gOG{f)U%#XwYJwk{HEOfj zo3^WgeghlpIV_k1q%5NGaY7CA01a49M%c)T+_g6!Xj_NO8)fjZr=KQs$z9K|;AJ@A zMiBe3vN&QTBo*ZV$rM43y)J~SU|mLX*QltE-r&$>D?*IXTH`O}y=I5e(u9DCTI(>B zNR#CI`MEjis#Tj(N4K8}oIN}?J_COq##h@F`yz@>W3OzC+#Gw~1xkLy=f4SsI7Ks+tU%@{OpDL`^$tb1h zxWXtB!o2YKawsam$R8Tr@Nml!ld=oD$_|Zm ztl8MpZuAXzoO)(wyTJ!}A;e@4L6?E6XO7C|5>RezWcD;Be`ku$<}m}|g!=VR3Xbh} z3zN??_e<$Gx?l6L;T4RT*sjYX@_WYKC+Jzg$CJQ^6B5j)@u zF~kEUJwq(pKb?din}t~NA<#n--F-O%ESl`1=n6-agYN@T;jnTZllyf*4$YZ}7wiSd z(LkXjoX^4lC99r%d{+4jV`EQsEnYx6*O!+6Z3C}dG-q}Li#5Ss7M;Z6AfuS|iDVZ{ zjfBMgPj32&;gfg%&jnjdKP@uD;WQU%*a)!gtOnTPI*^pP2L5pDAqO z@SN{wura$h8oKFraTH8PV{PI|7*#f7P+=VruoCh+%wVueBt*$rlsOt6dx zD@rSx&ulG<&KGFSqWJ=Ti)lv7c%G!HVqkh20b=5C>ybAZt-%FPX^pyKf$i|;GuX=@ zwTTRY=P98HSpt;GruRpx;hLp(g3w?4iQBUiV+8*eBk&@_&E)EajC&q1+|7JzlCU)i z`>1+k4z-AA#Gkw**t1ok5V6Fx!@R0TG;~7Yb`%ex_t1`G?PBfO>Jf3+gb`Xt?Af=` zp1^1SAMM%dk!`W_V*UJOy5Od<@x$bAWE?ve_?TP>TG0(~Bns;(whP`<8qAq=r%@MH zfevjw60%BbHD~8p;5P^q*{#>v^F6Ape6PjlHkY|QvujT6FRUyN>}@1geYXF%+LUCK z-eys&4Z6=A(k5BF-(k}g6n37`Snka3X!d2~7ueHeMRcueK|6c-PVj6ur5)t$0A=`` zWQK$QRH(-FEzEyXUsfc=4Wj7!Cbl~(=rgq-x$438H-fIwMXeq_`H*i1>f(? zV;xVrO-X@JA78>v1CL)YgQT0l4V7~OZpKmtcvo}T$o~$(woInkiOva+Jk0}V+3SL~ z-B#w!FsFHgk03SN;_<>=pY1Kn$Vf9^+24PO@Ed}gBGAkyyoWr=Y(HdFR101c*nX0* z?MI5;LQDc7^GJM5a@(yM{j3ZpNxW5KXz@6M!?UW(nzvTw**3OUm(Dt~%5S>paimY@ z`8GT*@z?^{!B6K@-(A+K_70Q{%<E+S&TEyaBfU{lfYK04h_$pHH_5BeYzJOhyXZ&Eywyzi93P_;3b$D{8cv?XB4HAB|#BuW;! z?PV1%_aO8Y);T;*JJwl+=pM7`An=O)u9>G6&UOgi6*DOz`5}AiG-&@HV&SUzJDL7P zNM+I=mq=(TW=xiQunUo<&5OWfRb$B4sN0bJqeMG73Agq=syG00EMPPV>-H$At zNf-#*hSM01U+_7_!t=NGgbe$Y_KbvfkxJ2{lt;n#M0c9Okk;);lF6{6ny^2*BK8NV zWwsIW`$Kx3=CR|%85>zd!!eYCSjGg49TyeDa|It7kvCmt#c76AqdLVU)pV!1)3sSS zbzj!3BO(kQIlfz|DadxGS?Q4g=$N-cdX^u<#)!hs3?uyosgAyTb5_4z z^Jeros+>u*MUCOjG&ljdkoSKGek51eGKmWCPWQ?&5q$jY|1t37u}=VyJF#_utYf*5 zj0c(o9;g<0U=ki!oB#PFLd1h`e2{R2je3=j2Nl!N)8Pusj0m1y2A;4(I{~<;j25Kw z@j=^R@_I_#?&E-Vzo*FKF`22HoPcitw8-#A>JZGL@>9Uuw}9`&@CM25@c943L5_3F z`-Xdm`i>18pE#GAOcQXOI{{Zs9)(NrRo0>o51s&&;0v%*rh&pHVlbdmT-s-81K=(+3x=qi}`&%Xdz+-yrtnUb3z6D-DFwu~QiEsib z9|{B*K?)0AC&0NLXi6_>5TbiNQw?U&kJem&6|zRHH6Q zk|<7I9PSNtRwqt<0okgG#P2s6Ka;SGJvBJCTc@W=+p;bZ2|rvs?X3_+RNQR#}qDn35`2 zSX^#%aOH*hX=$|;gW>G_G&!>KONwoFmYpAwi8L0(criLdKcdlv!*II=Hi(>w-_$#vX>OXF;kyW(f14L!i5(EH5kKn?Sqjkq05$+2;QsYe%@ake<5-wepZl zNh4@8$lRJSo6?|4amlpQ%G6}=yl(tcJq}=nMXfi}WTmi?(D&$TC(b<_yRV{=H0@+x zx(o)3#vIjGI!s@>o~4KtKE}U{dBUkfA)92*rm@1Xl3_D$pX4>j`(vNI;5nRcV5WnPrw9ZDSNJi`JLU=A89E1g*5e)cb2O+%c8t>=k)dJ_eXI%# z>uF~{GQ*ui_k>L0GnH1v3PqErD&uAn5>ZDjgYQg}36qB}Kb%1X(7m)NeAa}H9K5Z^n5 zcsZ4;)SlSOc(zlp`S%L61KgkwdVUl(fY8T`kkU>+nhGNuAQn796vBQ&zrq=sRm)1u)O&9sUX-u+YiW$==rn1zeNC&LlBFS_qsdj5Xus!^E# zFtu+6^A9t09f6tRnB_Rob(-`XQ9y5r7=l=@kHRb(Su?T=x{$7!1U8^I_z`5sVK9sh zYX)xj2P6TSCXWnTjZL%p!V5=lypdGC*tV+e&0T}13|>EkWrtkg$a9dV)7tlRc8+Y? zMC6zFR{HKgbJogPi7GqEOMNH$R?r>943TW; zrm1o3VQ8w@U^#h;>8yyqHE?|2F6}bbxBDG>oaQ?vpV3YuFh0Rx#PUvuahm%lHtfG| zs`(lVJD(qAvPNt|4Nq;>9%gUUGFvMW_mAXY(0KN=EC(tNb(C&nAqYM+yJ1afTl?Cn zXhSxJK*!V$)i8M}jMshY04!DdIMIh_1SiGpE zd6Bqo$?4Z!clxp#?8qK}@=4Mc9yR#ej3S(YFUpFPOaSk}HzTTLX8lA&*IJF-9o=SijkFHad6P5*hBEw;ypmUhNnbuP?VSIYt-$-*vjx+v@ z3i?<8eLR(qXNE48s|C3s;vhFB&Kt(UH1)*cj4;i73^DlKG>~RIm^c$i;4@*JzGZj< zH5>;|MDXMs3p4)=OQM-qE84e%^`d)hwq7K%#}?`k96}uey7xMfu>ZuFN#TGoiyr)x zY6Q1Y+WILK33_%z_pq~_jNax7^cLQeO~POHKZ8G)2pJ|nWeVqo?b4q#i?GQ$eJ-S$ z#VKe_2rH`z0gGVfmH1CdpFgEuMA?F zIoz8OS31+tUY_to6mPawH)dJlW=epaCr(L951;u>OW?&(Cw?J{!*xEs1%Ley>C+Q- z9zG`+;RbrEx2H0&?92S*4({=)Om}$JpoDN|)E+mf{FN&V!;RDt)564bj zW1Ye^Prk+J4H|I^pU#fpo)td{hLIYsfpVDPOE}ZbN9^A=mH*v+_Oi4#}f8= zqhl4mh{R(%VgLE*IN|eu0h9y@pItya_P8PP*g&cL_#yHc0;juYh>-&>0p2?S*D-Sk zJ=Bzp&5H|C*ZNG!aJ9@totST6dcRTgrTxZE>r0rZGr(R>dyT;Q1o{LuM&od@`V7Ni zl*@Gr+@2{`>dce4XNs*_!Q$K0R%J1EQcDvmpvxKVaE^e+y%8lk21F5iFX})+EHY1z zNuHV+q*r6|s6b}|O!rT~R38l!>_EDnG>RHUX;D~;SkSS6JRdfoX9fXTp)dg{jSFMb zoH+p>O<_G&j93G$4de@ti_;3z!nZi_j^zQ}D})33;AdJh$Y;v+$|gNy3acbZxfVr) z_@v~CGC~V{=46L_!dI4&p*IkruFxKhHeD8}EJS@^dR9vz^LTKuuxvE@ffP+XTU0<< zldhGaobRwsU0<$e1s7&H^)lmRSlOFtH1I+Nh60sBp(;4S=pvl^N%KJ_@&ttJ&zbWC zBKe?OWAX&TnW59OOZm{7nAfLRV|E@tQh|utV^LLzK7_T!DiP7tQpDUp$2~VPJ8Gd| zN3k`F^!2iEMs=dEi9kS9kKYRp4c2Mtq|b4pZ|dJ?eUmy=fS|HffHN#xC;ArjT2#m1 z2?CaNe0ew~8HShYBcab40bcB-zUH&AS2NP{_9|OAL5sNpqIFXs&K6cqI&zyN-&DG69avK(IZfWkEz5bkrI}(d2nUrJZ}#0_62<0DTwik zuuBkpzXHx$#sUJW1XuS?hAXuH5P5K7{@iKpt4I7{-9=sAyf56IQv-(y*pD(C7M}nP z)#QQ{pDiENytVB(3)Z)(wzR75w9QRb#-pQ z8EuuKs$5ix-%NI=un(HiQ~8t1v`zC>{iI#ecvg&mGU78!fzM2+iPLg|^O~9qKJ&zW zQmLF9rfrpfQth1a%VMS$cGkgW!`y^Abu_LJsZ=+U$5<#|7yM)z9ART_eAP@NP}y|^ zV+b{SFh-dkekC(&QsYpH*7Y^sYKB?0ouP?+{tN8n&fpDv8x()k7tkF6p&!2Et!v?E`h{eg* zxJU+EG2P$@`Fy07MN`eLMr51N;OZwx)1!$c;XD)EN${MuSIDpVPG-j*cW*T3xVxca z9E9NUe6&9!?nLV!B1WtV+r+O$yvV48NbOyY;Ms|P4n57<;XH4#|4+=3C47gc2>pPk z`5c=@&OSjJ`LFd8GI7s_UZph4o^>!a&NU65SU+W0#u9E7>P&n@rq-GG%?x!WqU$nK z3K!uyZ74;VdI3qkef)M>l6gb$iy>?a*qXu`K)s|icEU3NbBUG^3TN2UdISE*8D^{C zXMpERLt3-bJy{u7WMp~LvtL-1YtO4`CR}q(c6!mOTjSF+OKM=KxoS!>)8lU)R3$l! z<`301H`fi#^E(x)LC{eGo?hDpp8~Ce5h=I>drjm}!Incc6dSeWgncO)7ny86jX~ml zs%d3olGAL=swD3!tG)C|0ZDy5$!cx3+4wX{J2olim=-;%R3?k#=w6V<*F^k-;1>;Y z29Hreh(w(%-YZ!94++(Tg1aV)EmurU4IY0wEZ8Yeh+w;+f++Rz6T#q}v_UB@SxPgl z-0C2r3s3WBEm~aaH#xkSYJffaKSpe8O1(hXd;f1Nqq5o3s>F*bFCs>2Z|QF5J-4 z-rTZzVMDH`Tkp;+t@mam9yln@%xo#kvhQueLA<8+3$`}5WSR48T{@#By>O_`=`uoy z&@ulXuALjME3E+~FpHhml}4HfgmU+^C^xoC8GiUO6HG`fTB?c{{{8RmI5Pld&#%a zraPQ5-_2_jPM1QlldKDl6VWYQ7K6dk=J$J~%Zg)-krx(eXb0xEdl zFnZtM{bQ&wJbvh$bKtb;rF%iZP=&Uvu2)p{er&e>WOjaJ-qpA#5j#TRoCL$4h($dM zXsIApsnvG(UozENY+7F%B~J%$-5w}y()$YX=LPo-Db#f;IdKjRigmi|mexE(+rl#O zf1~z3XbsOGW%bhqDRvJeSXg?|`6h%e;uqujyQnY&T9lDEDlP+lR5ymQ*>TbssS3{T z?|iuKkAxGiuQ;kO)V?)26P>Dk-fhw|UbnbL+Y*RcR8HNNOu6&CB*y`K#-? zmRHu7q^q=LH5(VSRd&pGt2IhZrdg3XoS0;krY4iPWJRi_*QL|Bb7wbe<;Jw^dAR`- zq!^`3;6lvk29E`%BuS~0To?SRd6Xo#jFSG~9iYlPNIxqoFXUK=!5@syChv&JETEH` z?7}mZN22@WABf=;0iK^wXP@zk67a)nu|cX~{mG5D-m>mc=a*D!2~Uuq^Q1A`|4F_5 z6MH5B&va=$*7#Vp_VbQgYhRc*9Sc^hjqZl=)HZVSS7WHx$}~2x|KF^~FX(~fQ&|FGZBOY^`*y*>%)}+U?8RYw7$WQuk0;$cAMqm7^lMli`2C zXEPfO5^CbnDCMLWIzrHP4jq%P)JKgYd*yhRlb}8jupw!k*=n_3l{0&^ElaIeYqH|| zM*I5neR;VHJ4ZVg+a3VZEelX>+Pmb2l*e> zriTu=i0>5S4!8_<6-p^m9dPmJ;9#(4>@6@__ghe~Py&oMkuJ+>)MKwmYlLDx;d-2O zO61egi%!e;j2es$r;Wbp&+NT;b*WxQ-L-hSE5|=0jFUkh5fT2!KQn&*(CsU3haFEJ z1wdcII4z-zM0T{7!{(i6Ex^|@bUXeH4vypGRpcfLByQxHz8=ASG+!k8Y@Pz>j)*T1 zbKr-^%nFptG(CEG!#s<-5Qf0}mo87y*qk_G=6-^j0i8M7tl++2gVSdPNTGjW!Ni{U zo9vW5`r_`r9)(t=%-DMg?KeMXLGa^Ia>E$4U+hW+?2DX=UZ0Q3fQTFr8-2gs<4Lu>-QB>7`ET^`*NA1ll@5peA4<1O& zi1lf=w`^EgTe7OjWin;D%ZCcnqx{(yv^Tl!z0MI>)OpNjq%+loisnIu&1ja%a`BX;m`Sg zw!fpjd;OW6ZS9Stz#OF!9u?_u4ikUKX^hc@vtnWqeG!_XFRcg|JzA+cU@CP-uR*YZzU&NEmqp6aLy5XI%elYo#Tr-;W&9r53MQy z!$Gu9pb~|$J1Y&~5=@-1eY5K(lQvmu2!2b>2!64*w#k*z8T{ei9&M&H;p;`^O_gP? z42=E1^Q;4!$GRKv$AQn-&g_<9)IO{U?jyTaP<(tJ+D<-a_<&7=V#g?`5HV>SJ8$T? zHTZ|V+U+&h)b=gj8~oSEA4y~I;XhIur2W2$`(Rr}+cOhxzp#G~^G0kQ1D%5!<*;XH za*~c&F#+n)VwMd#^_QD=?Aoy2yF6q4hFv>0{c1UpTz}j6BkrrNaz8SD+jZB`@#s0l zmk@i%3)6g<3Zov!+THIRYuk14_<+5ahMjGE2mzb)TC7N|TCXLGOs0?V5bOvjk*QcntH0 zPs|S!2G$vb&iTzNUTe)%2zaAxmd4XJtbd{U1tJOJ z0S1xh6VzZ{L1A5O0g3R00{T3I>yGg}14;+9E(ho!Y9FQ`XHI**1IuS*&ks1xGYwb@ zT$u`c9cw1<2F4KnX`l+mIfbA~;6)hfrZQD3%X_&SkB?QA%$KVK=o zlMy|^)9N|?)bMz)fg|P!f9m)vBU?tcQ0Ab6G3u(pc-4UKk7y6u1*T5Kq+<8+r}p=a z|2ceD7|8H_Jk6lz3veH`GgxKau<3{;2x}6^5I^Cr)yrr-^XMf_x2>o zG%9K0;^yj-3@>S1jCqT=%20@3g>ysn*&ZfAJ5BZ&*?bF6?7H<@gG`z%L!Yyp4p&B7 zh#MhGN6@WQqfJa$?6lWZIlY+V0vhq9a;p+^d!4}wDw>&GPyu1P5rE2!+iz_WdL6#E zM@D;0oahnVAP#<*dIG0YYF7N^f5cWrX{e8Git z^wm{;n`V_&%-*oLp+?#@GD2F-_Ht)_qS1nZPE6FP)rW79Skg->ZJyx5 zYbjkv>hUx}wrZ#kI$Fku&+K^) z2OhMoH(*_oLtpYvK##tWPds7435f}@zOa9vwAp8MX7v{2Dosv2@WgA$9vD88Y`cSq z^Bn$aXO?`9RGO?$lS*zQ&4Ys!ex9qs;@^Y##}vQtt*}6TM?GPJ6>=%_3se10Wh`PjytT6jinbxr;H-tvI0N1x^hf(l|9|`0FZ6kwA?`jFbA!}SO+?*9kTR=-WCp?5(T=P|hgiRGe?JYmjaN1Tc}iv=3Yg0GmY$ee417?h=tAAO;w_3Ahsvl}<-xwaZIn!EY$N!4?r|S>K>&TDg3xG=#NCkDju}JdzK#o2ZyI zY`?M9#Y7^rSR%bIb~>sd5)t*-b>)?mS1vHELTA zl*}&54^2=yjs^-NwFf^2Pp}%d(Psi#MURQ6P#pk&OrH8<)!~?*82JlbuzLVSMDx3* z*pz2YSOS3Mw8LyPj*^0Tw}y9wnbc zj;2lO9XCp3M5{>ZT+uk5r+QLroKTZ}eIsWu>QJlHi<_$|K^R?gnw#gKUlDA$ui@XO zXLS_poJ%BoX(HcC#E6et=P-XRAvH<%+}g%m3o6q;p5V!Cs?Bv=wV|VP$7h`#ogJjS zz?zwDx+>q9?Q@Xz9i1Cb-_hCeWoHM5!dQ@H%+94_!8V!5Hk&fm)|>5qr`43GP^Ki}@Llkl@2ibg=@M~DA~vVO z^Pi~BJVqa+`qkB2>$D0-jmm-tCTLRRQV_(Ed-4^Ig!$r>6evCBPb6>iXHmPH?KQDX z@Sqp06x@j?|Ao;S-gfhn=r-7q>IMX5u$=8Jsn3e~V_{!K?H#TDa2Y4^to8 zh<2}`9ep+y+R=)ftacL-O?xI4tpvmT+Sno@B0!}Xdvdc7Tx}Yq(W6nlw)V_XUb!E^ zqZ`(gYqf7u*wO!M=pUL%h1;kwiMmm7iy%yf4XT-|MzRTe*m1n3Oz}2#%jk$&1mKV!BO)H?v6>hopcyYSD+w?|3W=?p4JfiFVw#j ze32r=Qe@QA8EsKci>6G3rmmYxCE-}rlsHPHPEHs4hHj7TJJ#e;#=X8b9Bu4y&um@fI6PsiNp6FFL={JlRVmM0j2tO^z~B_epz%@pCY;u&f) zMffg`f&0YceY|yQRtn~1gsuM<;4=@B4>FVau%iu$u-SG@f8NaVF`l58Z^8f9-kShc zRa}q%GdCf7$odkJK=KmELN=0@kOc$+Ne~Pui^`_fK*CNELx5`4x>a$hTd7*>_E!2JsaYJmOB2+82h*DhZ_gmiYbLQUn^0I(p_4{qVe_nF#+-24?XU?2Cb7rPX zQNEeZPe0P57;p}z|E*B=6ftY#1Lh@VeabDq+01{kG$mj{(=t2mS)y}bebi7pY^MfM z*34XDlz;CL&Q>J;#aopjYsKHW9-o=fEa)T8wOm*vnt*vfxmjiz308GEpt zt9mHe*O9XWj-m=6+$#?+eRt*Ihm^(hdSD-uQsF&T0`(utehsqAdxeun)HR0`&kvPL z5!zd_9hp66L^qi|t1EdNT7u8&nNgoj&^_c+W>_4XAlYZuX9jd|zV7SHQjahU!Z$t~ zYKQTS4=V}d9}_kSQ*ji;!w6;fZ3C#YP$YjwT>g}LZGZl>Z|+hyCmTb0mczu)m{ss? z;`isO*ZBSU?AEY-S?*=`Q(ylq`@RXTkpKN) zcy(lwUiIF+;#f}$)P^5?uS>FBmE*lhv(kp7-+PSm+VkbPva8*pGy!JLymxu}H@(lK zA6(QWM~9eL??qDUqiWEHpJ8~r=)Q7fC+^-f*8@@Ui-|(-*;?DHru^W~y5#B*igVq| z*5Jqq*q;XHGd?d<^Qg6Nv1h_JI$ojMJ`2G~RYQu)t4rB%%r*Mh#*(s8H61678#|=e zwfYC+j==K~Ei)Q8Eh9EQIwq}OWN1i8cz%BE3FYM}sVuWkawWL32gZklg@hHm%Z@D> zl7i{^q0aR@ zuo~e5D^K(y3GCqK({VY|WE%%$MWjYW#3rDeNytdH@&@GR1jR)srzR#QCcB5`qs^vF z&E#)4^&d+dtOqHU6P|s#&Wi_RL?`x-iS3^nmy{8!EBoi?=>8Q6iE*yHk^;0UCcO6- zYPUKM{$gzNeO3^*Moc0|j*%?%AC!?Yj|}L9=;XA7#JsGsLbOlNA7#)NnldmS(n~4i zDCHgnOOK{tsD}q6#<`PzKcLGa<;*T{%9-RESX|^z@BTv4rQG^QRyw#NT}{dTIk)w^ zVtUx^m3DVcsawLjvU@r`6DD2nFZ7SVmq}N)Xz7;7k*7QF>yxFP$9kXCcc4!aJ*wE# zIa*Mi+kE!f&1dVu2Y;rQoPO!0r%RpIJATpmh)zlT`uxjbSUPv^+5F^Ew{qp|3maFi zY`kzb;Vx5~nd|%~vbmyHF-I1%{cYB$88d2t%`?xPG2`5sP<=Z#J2jm8DYoN`#*_Vi zGyQjNxnl5+x7kLI|mAj({RSfF-PY=l%k-;mh5F_KIAwlQCWzk<% z_+rg5OMbAD>EpY}kwYMvud?$x$oIO_hW)^0vu4$gopo_V_Mob4>#u3zWd9R8ikK$- zy8Z27vV0uW=dx2yx$Kk;r(AK$DOX&Xo8`{Ut+^{V)18-BllQj%uYZ2&d@ye|oLWB? z#d|$C;|yZ8@a}4P0**DlnfG&ZTc(9uvXUSQe zDwMLE-lFeb5=}izJ@!N9okiOoLVeJTWKjhcP%;5n>6>ZvAE_70f)N)BfN5)@i?gDS zA5=c_q@}gPW2fZ}Y{)B&D;sxq{iwpc`n1fPlF>Oi(KB`a?k*mD+_;ir&-Brwr+encB&Mgu zVhlLG?%$7r(!vJ$f2u{aA^gmtF;>T&aBAEuF4)$eZr*nNs|t~ zdhopkH9B?S4HGBo5$vj+os-so^$8u5Cbv&I__-Jvp`l)<>%{=L^GxR`YAV-A>^|-( zHVXk|={(Tcv2Au3t+Q*!<_Ak)JpGQHURyiAZ)ik#aKgM>4}DzrO-V_)Ij(*SRtJYg zhKKvka-P=hm~6rMGQG-r(YhBpqc!UQs~NjxXS%GPOrBg{`GeCc51w-D0^LuqTD5%n zD&6mrOAh|^t+(D9J(@UV{&Tl}8Tqw{dUFgleA6rJJm@R2&p<<-lSK(MFzfTmjP(8) zB}D^r2KJwuFu1s5c*X4Dr=4DQOhe_Y^8CSxMY(n9`%{wg2Dy@4Y5BRX*p=g>hF6@v zYFuGX!SN?mP~91QYSIz@g`UTHPqO+zKj`rL2oDpR;F~^NsGs_kHT|D!t>68#*7ld| zJxOz>t(;PoJTyVN-ppiIXr?Q9(#WzBo9~+XRkIzYjhwD_2qta5{{Xlkd za(Y5mX>fXSQg&WaKX<~(x&4ZZ@{c>VxTtt&lVEcYuQR-cfp^A=;9zjP3TaFipA;%J@!t-y?wH7nb0(_ zwj?AiJ}tVeysY2JCl?*#8J$++%=r0r$?>kV*w+_i#w74El7V)7ro2o{V^$TKYf}lFS1vu3oP~~sAdCut zTZ&a{Wt$EeGJVLc8wUR6;FsLo{PaLQeERa`(`QUyv10lRX@A}~;lYe%8IeF)eO!8I zwkuk@mg)BorUF0Li+(+6>omQncI)Xs|M}^p*%?Moa|SPch8F3e;#ji?vWOrO^upRV zB*4MDC+(2^+^g`}0?h|W@5_qZWaip}1_tTO(*1$@) zR7N9^IUrB>-E6v?w9$F~H){pEpa0#p8FBn~pZt`}boa2#{QUUBxTNfa$jBIWs*aS? zzl(~~`iF*vj13L$6B5=pCR7gp=Eu5bYYgj}Ka&0!ERyqN?W}8d_LauZ?C)qj>TKPt zo`<(ExG-nScb5fwtZVIcOIX%GTMev%e#O+h-M`7P1I`*~t8=@4sq;&$(Yhrl56Y5J zgXtH=ZrFb?aJMzk-Om4I{jych`sHUuA7koH+N|Mbq1_Ht{+jj6y`NY5U97S8o%hn~ zxz)j<`|0<#m zNi$IKE~y4Nx@X@$p{f_nv&7O(&wR+kRk5F@45^Opsf*^xx02-G0W#v(I8kmRKUohG z#@3&>;aR?pzMCC|t)?JDhgfxRP|kKcl!ipgYwv%MLRy1FGWsJiyA?3rY z8n8l59kaH=tR46WK9nQc_H1XK$JaL>V)Z~JdHC8D1VR{xT}2>U7)hN6(~dp^2V#Rw zn>zGL0%L>I+iHR(B-P7`0v$;Tc757(EayNo*6lL)*{OwN=;fPylLGoF{8VQx_sh19 zY4LG$mih?(nCw(urlt+@=~hGRGTG}Gup^TBYlQNE*=s38z+CmGWIbSlniBx|`Q~aJ zJESi8CAfcnR(6B(nGZ@xpFR7TcH0Y>86uQz{XWYCF&6M!?Yug3E@zU{uQ^k$>-@@M ziK*wT3TMj6x&`WVGvzn>@j#8O-x7MC$%v!u9(*tLWb9=LW82FzgLYW$ASLSEYWCpY zi1|<&z%34bjm;}*9a+2kddt^0Nc%9>uliO8=f(z>^u-1iLGYVd!J20GHI}e{6to`J z8Wvoe(+BiM(ieMJ+T5WnVujuGW)&MxI=xuN>M|){u(6rpOibcWK;j=LCA2jRuEb!| z%)~Y}C}7_N)3$H6En*M8ZX3v+>DwXsJ(`?;)i#XHvdv@^E@rKA5oszbKe2P!iM3rL<_RI4KFlTmXx9-#^M~FO_nQex+5bR0{{UG^=8v#D^6v)M zQ>qHs8ScX_o6MLE;<|2xNU{9;&&ghhry6|M?iPG&@9!w@?~(JFW5JH?aM-r@5qF=vrsb;?@x7ja>UZdBvL^5!y)=uod1NSWr+?@8CY+S0D|8!e!cBysH(v594M#c%thCM72) zrTic_E!~|GHE(|SaZ{@!uLvp4EUC^b?=!w3Y}n-du-TC%c_SKz6zStniSC=66dAto zCsv%RCMHVi@83;FdJOuOe}FHyu_iOvLNG%~WbkB@damF_CPqSXhjNis>3Y&>Q%bRq zns{1aVSeh=sO0#58Ll|j)RfZfRRfcgT`7aEzb>kJ*tDkMo`|!~3QkSQuTG4K4BizK z-#5LqA~SXNI}!Z{lnm|E zD(6iY>!}=>J+z{*EG5bM#Z}>YWOH+K|Jd5%VHt_}lTxXtq};yIypuH0`&&)uty#G$ zbJ9aiGRAt<(Xb5E?Q{S1RR24g&b;L2TP``P>5l$S{b|d%%yAe0`qvlZ5Qq0|Xe$R? z(ZhbDJuGwnwLL76Fh$>Y1o~^n+DE3p<^)f4_NT)GWuH}LOA81KwgQ`h`p|OyyMwpi ze(;W0?wZp)c}i3CFV8yjreA)l^JY(+FnjidiH0Z9&e$J+fN0eQ%Wi6r&nV7^85!!= zFf#At)7tjcF}iObLq(ZZ_`wlY@Q{Leg)C(W4+;+s3AWPvBfY9rPIoWWb}<>Lcr=HJ4*FQiH=N4$eofiATv9ELPc&&W=KMC zbVzt;SRYrq)t9>W*}F3bZuB0G$lx#lBRGgo)ESPMai`DhE;QtHf1~#k-FW6uv%W7Vv`imZaPTVq<5?3Q zdE<>A{pd$C^)UxuovY(T)|2&ipI8;pL>6Un`EZIR6XBzqURSoBdbQ-(wvnSp)U=;o zU!7l(H>C2IF#~f73r0*HJ%Zg_?w{l;DW5vMa@c@=15Zv*OiE49FHTJ^);Udf9+~T5 zKcF;Z4MwXD#fNrD)9w)i_f(O=tTm!y(kUmE_Y z?IX43io2zpo;X)mAF)yFgVFAfQqW8}oA#WVEg`3B}rZw(DL0 zCC8OgT=TPQYl>4`Ipqbz&-&5ug56Vc(^3b{JZWHRT5jYO>2ZmvSEeS$>4NzFStZ96 z*VGgrSCZ8~K5Il(c3D|=)rjdS@fn$}0Rvo_8SyC_lKLjN`o_oibtNz;l{(KMuM@y$ zx>(6{>K{z)*_gDuB&p5rO8aAmr4Jrbal(+Iz9%hOKCHfa-1(PG8{07D(&I)A)n_CY zmP{O;GuWNeP*GMmYGP8~n5@j7u^K;k&%!ni~Ks= zlh8SKu=g!`(r$Y@+Q)PVeml?=-e7ETT=?o#Fa(&>J=n!`r5DQ?!Am3gsCV)~7xA}C z&zVO)r2VnqA>ZU|v0nE(6kpwlTIQL;HD(G$JK3v5FM>zKp zdP2xU&ONIf!%Cg|C^ahVMdvxSS|=RQ&uhiT_NN}U@v-nqv%H9Xw8k5ggc$2j-#DnGnI)v8wJ%+6HpY5^8y^Hm4A zzZ>viQD4GJfkN&lsYbpxsuS_o#*VaZcIatQa}M!s0&z6Kq1~L>wwOP6K-^2sQ?pu1 zEbVGJSMjN8TiecTUodZehx=}~r=(>j;%vD^4w z>TYjd+T6apxrsRH$;Iy}W?^-Br& zb;Wddma2P!-F7igcF?oH6j5rr*wnSGpm4K>!dGy&K|;HE*G`yb^L;smDRxjbBmhl< zuy&qppF@;78B8x|ZE<^wOG-+HyT?jN-E&*p-DBIEn}@rXFDeEFLkt3VJC~OP>RGzL zDlF=yY<681*+rW~bv9F5LS904&16Vu!439X&2_%{(i_oBm^t|Kp~WtcgtWu>C_>&y zV`#$v5k#M>t74SIJ8U_g$N-o1C7>yRrC@ z)Wxr$(XFO|M)BJSqMPtza~es{ZgOt?{?NqOV!}zzg)vA)NF|&>xMmYdXkCb7nUg!a z6jHS|3z3RjYRWbbUyYPW;%YK)?R-lPZMM+rFrPMXDsO$hePkr1v~e$tsVjauanSQy z6MiL^_7}mP#I(Z1F&Aw5NUJkN!FCI+RLHH98@LJ6jBg*0_vNpa+zMueCT#rr*r$(# zeI=Me_<7(;(ig0CjZdDWrUXBNY_uaG46du&n+`eFr zds?yk*v4f|XVR;*xM8;L<{x%6w=@y?y!O_P=A~yWYc7U&wY!%Q9Z57c(Svj>Sh}EP zp1ZN7$=$SIDRH0ahJClvy|m3g)4Z1UyI9)OQeS>d4*X9|t*!J!WN&ff3Y@vpl1;$b zjV+6o78_3OUeRp2L`kNW?s4&A@+M+Iqvo_W zHIEow_k-GTM9{PA>B^A4UViwx7&;qckGPz!8QI_bypv@eM9-f!nRgmrG7sH{v0Nzf zWjH#JNNne#nV*Y6c8+6qBZ1jbIZr$pJxL1shcxC}1~6{Upp|8!`xuB`Ae%8lE;IRq z(M}W~%N0@WL*U+}q+N#YcPM(rO6-)XA&ueeH8FxcSVpND&^`vF*MYFHaN%+EE5~6O zHbG5P$5RoL)MPb9O+{8biBsIBG5a(_%~Z40Da?zUMs=O88nvbFKwkcd`klH?{S~?Y zN_Dxq8L9J59i%SP!RkWwGj%|HqJFBbS1WZNwNw3F-JVEje z9CbD1^AhB+QEgJMsLkqSwMBgZUwlKos$NqMz_IqLYt%NiRlNzx?N$5KrD`GEX%YR_ zV)*23aMv>+EFnATxR*ozf20363%>Xxb&fh)J*NIY^<#CeI!~RiK2#s6Cv=Do)nPhZ zMOneN=jdFWrw8kN^_DKsg}O)=>mj;Cmue5wZsiz~Rj5BJRwd{vU9E@d;rbXoLXXs= zbPbmHW7MzJZ*;A$)Af3+K30#@?WF^YnbZKrhsb^kTh4x9C>& z2i6YkP=7-2u}l4tRS|9M|JSaU>JGh3FIT_REA$WbnffgKBYn0$N1v;Itk2Wu>kIUS z`Xc=keX+houf&G!GJUzeLjP1>sjt#k>udD2`e%BT{<*$RU$1Y_ztA@_i*=K}nZ3(y z)wi(|+wJ-eeWzZn@6v1ZT79>^NB@d_2=CMP>j(6&^>6fpoHFx}epo-EAJvcP$Mq9f zwLhtU$DVpm>8JI2y+J>tpJgZ7=k*KhtMnrCk1wGCc$qx_U*U9z*YxZ94ZW3J6SnEM z*oW|sdb{4C|D@m6JK3#q7nZbtX7$H=`Y-x@PGJA5{y_gt?`5CEeflH)F?&({T_4b& zu;0*U`g8q-{!;%#f2IFR|F`}pd*692#UYLsmPx_tLG@d!k9tHss-9I3sfX2b>H@Vv zU7~)ao>#wDPpK!_Upv$a!*=lsb%VN5{X%_gMX1&4T6L3Jqpnh`)X&x9R-_eWMRQtE zj1?>AUbFr%k@JL;*q^o^`*@~WX|hwZ#c`I*%w<|x?2kXl%0}y+Yvpm~K|beJ6WFt>df) zG;kBGfbLKR+bVSVY--gu9X(Z~9CflhaoyLxkrlpG;m(CBZchW_cmh>a){lOxd z{kNg@PWsKZ8&Ypa)oh%|V>@#YIj{3R;#hwK5%c`FQOD9VE@`xL88t89A#z-2*vR>v z_rc?4H?{}Q=Mp;J$?XEi9q;68f$av5Cz;6OI)g?o?7WX^2uLexQNTmUgvL3`I+{Zk z8z*W)z^ACi0S_S)>|!rAPVfX03tr46fFMyV0S_U^+u>V`6MBMEh*sMT zIl->-R^vpUFn?LgyvFurOBOdS>xga*dt3BKa z`4Dur`Bqk1=D0&`*HaPR$jG#Lar1&k`%QJZ?T)r%DJ?1Sl$rRr8(QkW^Z4&Nzn1&o z4fWp5`D@aL++AELq^qQW1d!XKj2pQ}oLUMl^0 zsr2Wi(jRlBKjun*%$5F_EB!H7`D3o~m$%BFMwLH}Dt{VP{xqumX;k^ssPd;#JmquxcuNaX)sf9^~DwO{HlN2#9dUZ~E^-g^CPJH!FeDzLz^-g^CPJH!FIqGe0SYGesx8BKby%T@E6aQG7 zAD54H@;}x|Z>*EvSSP))PI_aV_{W;~OY5sme4dh06Ax}_#M}k*mZ7LXb}tbAzRP-# zyL@P`k(3|8cUAAct9yOzDeLuhMej*gmh|eovb@*VRlWPJ>OJo2-g8oY2;aRUwz_wm zRF-zhpiLu{h6Kl!R~nKYTVCbRN|hlmo((DE8d4rxUh8uWN%QQ`P_08lwGPeH)(IaRXmVds zW~W+FW>aoOnN7JBWp*wq%52K5D6>mhQD&F2qTFs773FqmD{RIzw!&sixK8+5yYv-K z=_+cSbZVV+YMpp(0c~uB&Cqb2cx?v8vlCxkeem%oO_*TSP6=AFtTY^PZ*lX|r3*?U z=bza&zqw_}f|g~>_sCCU&uf`k$0(jo17vSY&fo&V_+wWHG!@$DC@gip{y=HQsDESV zxmPnc%@}n*_kXt{m1gvqp)AIR8|&N;Jv zu_{4>+Jcrx{K@&-GUw^jMEUekhx-<*tcfQ~;EeJqCrmUal^-GwiQAr0wz_M%8XFgP zsF8C}?5eSI<}7Jb6Xr53P$w>4Ft1U~T--Wmv6|i5-qfPzx3w%=qS}@&Yg?+8cgX$O z2W%HF);+H2ZWB4ZeGkKD#N1)LInr?tYl`nGb{KA=IeBsI$xpsbmdicVXFLLet0!I15l`nGb{E}?GaOI0! zJHPZZU%2u`uAN^}%onbFk!$CdRP%)^U*y{PCCz-{$``qIe(7(%aOI0!JHN1hJGth{ z7rAzRNjG1(@G7L0}Exq-p@fnKd6NDv0OKOD~#0_{u$bTAN~8^j8=O;8h6pIf5}<0|4o~qv1n{>&~rzi-|mZE zJ06{O5^W_FU3R*5>n!xwIYxI~fYy2l8tZahftGsM;q=WuZL@CFhtV^4)hl<=D*p<- z?*r(3e~Z5NQFOiQ(DOcpj`tb#yDy;IeF?qpE9i9JK%e`T{$nrP&PDGx2#si-m4BG} z%4B}ySmrhw%&f*V<^UdKKH&}Z7qthB{hhgpFVsKOf1%w^gL_n?>%PWltkI?VCGAl2R zL4FH1GkFPer}xpz+IL^b9X*hoC1+gojb|-iB#tC{$sGE*3g)fEmrGoH+3pv(=bHD) z;_}{hzrdBAEtWi-=X}RC-^G>hl5d$?lpZ#Zna1wYLH9XFdJ#Bjp~bE~%pZ&+ZWE3- zWjuGEdGN_7B6nzs-K5n$PM>^%%s_5>;kV393O`SfJupaTxQZ}oCmh1JSZVg|+hXR_ zO$w~{=jw2CVwV<7Z+k?c*hlOzp`^zUSsvL`WOZgx#dj%peR)%1&;FUOGOx&-B46ap z$R8o|$gJfu?s`Z&Awb zZry9WALI_28MG>BOK@25nBcRGoRjL@M*=hV zHRjqgB$5~*<+@z1gcRA#kjMSM?y9CHRjqgq_nwOkyi=Hm5^KsDObx}Ys|H0NF-T8 z%5}M12`RFzBjK9+8guO#5=obka$PQ0LW=C`NWkX4#$0=bL=q;XT$jt0kRls960*6k zG1s0Uk(3E3*X430q{z;W1a0nX%(Z7oBxyp*b-7##DYCUAVVnCJbL|-td7F@OT`pHb z21wxMzQ$Z@;auNb8aLdN@$lJFL4*v3cTXX1;eVpzI1&4gKpjVx(Q%ZRF}3I+Y>k0W zt6@LUdW{|<*61-Xu;M zMxcS{!}X|C=-8zEn@NRw_>)2rdXcrudf)mmC^aZA$P+X_=*plwgB}Um8niPwHaI`H zF1S7Thr!nd-y6IwBr3Q)BtE2HNP0+l$Y~+xghyIVUedqUL1Kv)M-)YMcop$Hfl?BUG(g}xAom=eb{$D zDRlnbOIr8Zf23sog0D3xT}Eo=kCe_X8m$DzZ2bz=M=t{=h)wu#ob|Qv_lzwq5gl9(e^Xkr(?wVhr6M zb)FBxBBE~T0*O&;!vvgCh21Y0?7PzklsP`~ViN*ikr&529kVIsud& z=MT9T=RTIVaB$S%lk<_Dh~pYqHaQ(0^6VJwC{Yb%j_T+JB|HNot|@#os*&04qaPuU1d|{gH>(AuJgqK-%0ddh?e3# z@7-uRs~PbQ$Kr368mT8KkDjK+U=^04S8#v6%I1W?QC1c!uyXMiq~g5W^=|K_guMyA zmWbVAs&^xr)F|&t72`dQ@5@yJZxau$Q!a0aO7f0m1%5WGxF@r!v`VEO+@;cR`+Ez} zxF&eF5l0n1H{f#%KDXd=3vu3nuMPOx4yUwz?7_z#eC*-t?X*ux+r{aSNvyt0^{zwe zwEeAhV%kAWJNR-HG41f@^(IDMG2Y9_=XIpMg)kY!a<3ESLX&!m_c_AtAlw#{19XaA z@+h(1#Mj+$`9yD_lY2XF{m8L=jbyLW-B?(rsEKHim#F1>7npn3y9LZ`)qB-6eZbph z4OG*uLFzQ>;(&KOu@#y6a8Va2yxG9_FuuFZmneF#I5mS9XQ?>8K44`dn@3Q8Rn(t{ zbQ1U)$JctkuA|O8g!d4BGCuS99!m|zc^_7TC>Ocrl(@GTF(#-w@AK+7@H&y2Jkh&f zO(V`3SbWYT-dWtALby{&p%wQ6!d?hm1pEZJ7`Oyj30z5>R{>W8*8sPBzf^Y+_nq{Z zs~JJwMIEi--CEu~MO^EF4TO6JihLILIleuQ`vTwJCO_{0yMcFszY^cyfDc&*hW=SI z64r@85|E;*bsCTl#TEj^Kq>wxn`V82-mV(h=CMJ)4eSJVsZ6~acn|o1J@B%;TdaZJ z=fRT4Iz}~EBY=^>B=RRU^MJYTFxTDCqtq&`hA$6;<%M9mfqICBqN<^siP+iB@V)@% z>X@UMjIYV~s>RnxQmA5lR*COpu&lk6C9VBb1oJKtI*uoMxNdP-X>q~0K0*Ay|t8h474XuI`KW=w3|`XRSq>#gx2PO_et*Ky!Wy8pEgas z6jOsGKp8O6`zT?@V_!U&c0L));(W%}Y2fZnbtmp>@P8NX8mRxb$cYbmKU0qYj{=VY z&!D?`j_>=a^C0hMx(^_lpKKKarH<0?0`Ec5A9!zvZ!}nLW+<|}dnxmyv8wLtd)MOCfpL?(nd!j!9Q-CxepFXb;C7VD%3DkA#lfSpv6nBxEmpE7sv7F3#;QJp z>p5x?oOvqz`b0yI4b*}MJk?R6JW7*JY4Rvd9;Hd71bLJo4~nP;Z`t6j4!l)anNYZJ zatn&wOZqk5!6$LFtK}%732=A+T_W}L!K+2a*ex%M4RHb(>xs8L$<8(joUY!b5 z0aE5reB_uiP6Su8=#{dl5$c=pGGZ>Gz9-UGO8u+{4+Ydw25+_!<4F8hk>10k_a*+b zSp^aUreonuad573Vy*^F>7MZtch8(Cg#nW zm^o`=?yQM&Nc$QO#~4o=8&4Y>Pa7Lg8ygSD7|;5W6m0QR)V;ucfL|sd>@$3S7WX;a z=W$=aeG@-#0e=K`0DmIyJAqxmpJ`ulDjF`s*1@H!p5PN&A3sPXY&s{!0j2e;F~?R0QE9eFa28ZGjE1ecLLo1{hy z!7;KXHGBeXOtAC`?q|Rkz<<%V2n|ZR3dVN|@r!g=$Qw5_A~jJ-m}+1c_&x?&I6P)g zWwx=&U3{VXdg3xS*k#v3O%-R-^P8r8m3p!9vc@`fauQq>&|Si^7{iE!d>^wFlf2t_O3^cLTWDWr z04tEf44ZichY1s3qW#k-qW zKBpWx`fSoU*SkZX$Gh{r7wVtjUJP6UT*~_^2y>$*{v5cDoLsL$^e=F4 z^sdu4@$Odq-{yT--%j7Z8vl3kycW2R@b`N+>Ib=h!n;d92|UNU=XrhscO&ixUXd}k zTYbHI(7MK1N#6Ude(>l1)OR|PZ7%y`OCJ>l--t7%Go?~t)Jh&T;-VxjO5!4xt;FC0 z`+0=ojBkmT-sU8O&F%C^Mbt|LK4Sr9nKZuXOGVOl8B9+BU-aJw+q1lzsrxL(k}f@; zcZ>Meg4@dbHsB0oigw!9@e7YgFm*N!elY{g z%mPm3z7Z*H4!vg+e&(wasY?$nEDOr~6s*=#2BFXt%8)|cdh|K)ne%Zk1TKQ_T!O!q z#B(|BmB2OR^jiF^0>jq>Hxlk9l@3*YiUyznYUF%%;Bmq{fxmUQPvWj84;zT{8T>y> zyqoZ|8Q226LVjKY-T>YtKii0RJLTR1ybbIG4tVbce+{(!Ebx~C{dt%H7-gk!(prC> z(^We3=&^FWAHfH!tr5UTU=sMur~TeU`<3y~dZf%M+Uk0zO-g%QPbuG`9qywYZl{!6 zDdl$B;T}r3N8iBxFMu0?n}FM(uiL#|+TRY^-$!~4u$J)m;NDNppYZ;f_V;Jg_N3kY zfiSjwF7ohNE4e?mtu$w8Ko*1rWQ?qB7R|4#g|7v8Am&^9Og z+a~glX_wL_r9Dbply+$I4i6aJ0!Fve2Ft0x1lnK%?Jpm!J_`TXO8eVF`zr*)4;vnG zHs8z$JF(C!1?qXKf%2ikal<(aJivUX^Z>xRrD5DQ_t7H?SIC%Ro)lqIX3gvzZ<$kJv3ET?YMwr`i?*gQq-c8thaPQ~+gSZa?j{%R9=O@U^I@~95*ORwR z_}L6>0bU{QR|)$X?(4X3;BLizld^0h4}Tzz?(*L*TG?*Cze_Lm9_|6}LfUgV{80Lm z1ln>Tz0s$%=Y3WxCoQCLKLE&K^qPx?tGnDtF9kg^ZZ+6FL+I4Bj0CWjVOoW7qXTGd zBzCw0e0>V_GYuX+AFz9w6w{jo_98;rvV-@3A}5aiH{it4hvmezw4nyt&~W;8G;8zCD%w~B{aOlb#pdoeLfiM@-|nv(oc^i-n$LIosuZM*Sfq?t zq>NZ-d^a?{2m0=+D}0w8Kxjw$DAw9L{I&|ZZh+?|K*vJEU3G>s!plaINTC;%x=VqB zClJd6?|^S z6`XFteUM4Q8UyP1yJq86X8IcB_>P&ybxcQ_)NG$D$?O z`<0c!JI(??J{7Igb;twPArD+8oyvm^bDiejY1sZZeC4b8m+twlp$iQt?orOJd#8lV!7!=Xe9 z_s}=+zJK8q8mUKBHzP$uV-ZZX<%js?kqrN z5$E&V%6%KqPJ5EE)j7O7pL@aB6Wl)uyu$a_fHwdcUu`Fi9l+bbPT+v|PGpMD;kzF4 z_&IqTM%y1o+aE^TAI7{HBR?>=lhn7Fl+S?M$VgvCah;>J(Ude6ZMi*8jHMjdIRlA6 z5>Nq1EFw?Lz_sf@#)+}e>=#DHu*Zsf;197*KeW@N;u|Zj$6r_6?{;#qopLmQa~UrR z&h7D{$m{fiMv`%nGTI96=i|2GNN*~6D80SMbT!Y@9P|4A0RI>l1_wL?HJJ!lha-J6-qxJ9w_~VjGClhy$K0y4bS#? zWD8*upzs2uvA?T6wC+!lfyG<+qzg~8Vno@XCN~~F%GUm=H7+Oy`3EF17E|CBesy=t>h%0oWOI?(cR7W z$C)9p$G>Bo@ox&_-wejSQI7n)-I1TSJM!~(_=Ros0&^&eS(0PjC0Ky$_BqukKbqada*^;CMsjbC5cOyGTu4P3^8SH7278>E%B(6#Xji zg`>QVD_mtO?lwl|Ld~h@;H#;Vk<^J;5{#lwPKA<3p|gmDkBQErfciMq;rXM`R|s`y zP$!e&2~+jC)cE<-#f5~wi1#begk>GtKc$YnqMA{VzcM>{-Y2i9`#SC$xLa|z@$CcYAq{uTfX25YA?yJ^2~Y^qsBmw? zi^}Qo8{t?j@Co78=Tk!P1MMWLWbm`WNIW*5E2OM@^-qZZV&EF2?(31lZ=_82I3WU_ z_o%ch*UQseS3WZv!23RM{*itbKQHp##=G0WyW8MhW{#q~U(oZ2lXn&-y}`vmSf+$V9@<8K2H*u!rp%^kqo zz)s+R_YT_BaA;-^ZE6_xl|#Aq(w3^=Bvo*dDmY0M8ueIuGSS^mLhiA1EV7fxeZx%o zWejZRSY#-X{Upb=Qi(v=Te{Np}9Pt_r4L(_0Y?$yn7Jvk7_ud`d#KR4tVR# zNG2Egv6?bUKg~G6^wUrtm~LbqLNt@}c`vEheKqt94YxzPohhc6@vJY^mC(Xf$of~4 zD|;-P2%yn(F|2?E0}k$FJc3Rs6h$`#SC$xLa{| z!I|tChvUFi1i0E_#-%boO9j%s`|UBQ>7(DlX2aG-xhP#6rE>YDF`H}397h~Ehzpd! zh&fIqF!DMDYzvNrgZl7dkNH!mf8-Ns18@i#lZ)myP=_I$Ot=^vjMzlR+^!f?975K* zh`fosW%JeEWv*xOWAni-vKN%mq*AHRcl@QD!M&7N_+V$LWz6yp?Kh6P6uy{3FBe5G zC;9Ic6ZBZ0`mg~#zGHZ()^{M?P9nWW!Hvx2JqmvAbJ7#JT<9kS`VsB6=wa`Jem?iEfA zP27O{3*eW)&BS#p@!Zb+YT~&IcMbZMwYYZ^&po&g^8F#)#{jAMC&-i3{*$;*6JF}@ zdHieyULoJF67DtJ*Kyy#-HI#oCVwFOE_&MCre)nt&;2B=i}5Rz6YISXE)xx1?xnSf zo^>mF)~~DqMqjcQJc_P$yE+C8KIUNXF)%3eb19~M+t~XU>^%ndn41G@=kTqw^|`^^ z9)Fv+Ti*__C0gpQ%m`x@Ek!VNGyZPD6`rsfYF$I_MI&vuz7#N!0tQmRKnfU;xlCIV zBJ+H<_Ib0Teco)e&)bN17g(^R<*k%lq~*z!+@AYGLr=-~7(OE!<_zw0ypK`h9Y#|7 z*X7X*Xa#{Xsq_%N$)z{r@9SjKr}6Wz%BRUl9X=Tq>(xWZsmyE}>0p)$HxdF?S$-+u zB3huC0fg!<|&( z&Ftf4_`4jwAl3js<^7drr28eJFRXzI@35}^*^06&t1p-x6wiZ$Ne(v95|~idH{QN*slwK?&@iiH)GFmJN?8H zxS~^fn)&Nzflc(QSbEcwu}dblEm*^eohLaR$lUR%(2CfDFT}ETD^@U7`0!v=wjN8` zkJJ<_ZB7JE#=7zXzF!Dj1pEZJ7`Oyj3EWDU+X-_Aa3`=DxC>YVtOf2Su7`-{Vc-$q zQQ$G)319=^pTW56LqX z$fN9Ke6QqP70)BMpM)Ge4bF*8Cgbr0r2Z|?{8iBT7TwA_PEkkde;9hc47yzhy$YR* zU4U4o2(3NIC@aCtgg;K0C-A!t_etDMeBTUg0baq+Yrq>w^HI% z#ct|hHz`$I zUJW0601mPRZQ&XEEL!GO_`8~S*O1>;-aF_YA3!>&r(djxr#(PF_yAJC1N4IrAO$=? zKllJz(KBd`GOnnH&plw~=~HoYyjRoLiFM;3?AxV8R70AQlw+gq@iYt?nj0Ce{#g&OHmkloz`E4XQ9vR3l z$lXZloPB6j9T?9vwg{rz6v@`7+e|dlnyvN!Cc4c;Z0;+Otos3}KoxKR3;W?_jfL37 zqdzs8=}Kzo80_6fsM9FZbnHxH)XBgptZHBl1|zM7lsW>d!0GA^;7(vQa2K!!SPMLb z-}S&V+&>4rfELQO)QQpYlsbXbZA+aPG{$17L(ZU-RDe_4^3xFa3Z8W z?bl^Jh^>d|bxjB(v97l4Wz_FD2dh z>U%o%J)QcVPJK^5to8KW#I*rGVmZ)p_^!rGRrw19pEBd*09pTr_#bJ zkrM~g%E!~nyUu=|L)afPv+0`!y^zve1P}9#$}iy?D}l_c=w;krPI_11$_%M3F_**h zb|LwUMDqEJv1f#tHNB2|(d^uS`wKv3P=ARVIE!lAM($#i^%*0q&*+WH8DV{fOxQWI z%GwH~p3mU_d+DLJ(L?Q}huVhZlY!(@&a9XV>1T(3%<&>&H{s_c+|9Tz<8Hxy1suGJ z|JQI|$9)5LEABS(`v>CRPF?H(-UfC8Vx=#$idg9*DRs`~Mlm9bVKy;VRa(B8-6U+F zMSGCKw^X#tY0U7-Oz!|(neEL%18r-a^Q{rg$c+TVhHN}kvK1;pUPfkU6+1GpI0c%+ z>YJMVn3|P2)k11AhngHoEf!LXgX!0?IigfzAK}wHuJryLtzI1u;^YqxqvXXz~UtRAEXspm8Y7pmvkRcVNNL6_=M^@=Xj zW$IP-0I625vGe~3^(Ol(O;Ov}%l{(9$bud9BiT{ya?T+5Df{U6HM{7$*hT-BI+-1b zZq})07yUH$(7!_uFuUldn_cvoM`H*5EVGx=Aa+xFSm&~%(xasPID07#W;dl5NcBbb zQL1DorMEa^K=#G2H~Zort9P+4{&@Dq{|l!Le8}JN?6j1uPmn$6^(@(gUY{y^(CZ(t z2Ys$?WZ#>SdY(1Onxq#hJ@~KGf>M*QwSPkG*IDcve^$^#LED4p_wj@ThvbCZ6uLdE zE$p7KKZTzg5ga))^0w&W=u`SW$O_k_xDVrRPpC=Ql9-q{+tuW{KWSC+waIrT@9g*2 zlQ~ z9hX)yC_Z~-_Q9N*ob9=7iHT_ycDUR}ayRGh%-cNp#%^m|zun5#BVS`Wk(PaQb>@+- z&iwkdlt|8d>h|ISLaqifOrm9=R9*Vc|5`6{WStD?Ty zs;K`&%lm)-HBjHpTA!n9VE&!fz#LuC@;|Y*@aT$`Z@!}C=z5j!W4+4%%~cacMw9WM zw#MP#dv(Ln^$K6NUg79!fTLFYN3HnTN8uY<@yi|+pJAu)8TJXxIk68}U&FWURSkRj zvX?J=yRRO=r&uv}UGI8y9e{5gz<-v7{ePald=zt@5m*emnDdOl!e+0rHE!j;jr&)C z*MK*m(O4h{OOFuf{3AOAu2?3wVwskMMb*E*?R^L(6dOpas({ykH?X3J#ror@ExoKe z>D7YVSVVt6w)9dT`=}4G)b_8jqCWOPWnyc-5?Bq0jW_n)Vw3%U!v6lK<^561`**QZ zJ`&4&X%Pvu2w6ERHvb8<2-yuL;iyeMcB22&Hu=K2_QSdM!@2g;lkBG_*$?O1f7Dw4 zsI~t8inabxtNWu?_eZVn{}Zk5gRwu~8@OljQ9FF({G)dG1F=!oSa`;<>p?2Ju$HJY zV~;G^tzK0`0n%k`P&#NhMwMaIJQQhf#1 zt=C}Rx=Q~X3)dU4Z@m!<*PHY$#=3R2zDut$R;~9KtJdG>2RRY+S-nmF0Xx-q^?TT< zerUy8309ierdsKo0m`ZrYoIlVbMO`#Yg9RH@pPRYREJc`N)7CTkFG{=tD~zCj;=;H zx*FlTT8*GNc{mr#cPo34@SOg!?i<;;s){!YIS*+!8p_jHWfkMy&u&}a|Bn-LSpO78 zLfHVTslMkVBjBj=i(~zgBDE~znpfY$Mb1n(jUGr&uIOjd<4hBta=wSO>?l3NZvR~0 zTN;58#{@on@AvuWYF3a+1G^Y?{uZ)c_xt(fdpEFGoMIJDws(v79Pc_bt5vGjyOZ@i zG3+?sW(fgVC`t5W0KiU3H>rzirk2$Pt z&HVP6|JslqBy{^1VenZC%Q-Gb`t$WZb{}!1p}&QH z`dj%mNXujA2l-8*_my9?xqinNC%x}D)h0 zgIn-Dr>p1>gr{YYZlT!$z$uLPe&O6_gE5>RgqP-F!T~ z;E3Wqgy(MMJA|+A=(Y3%<%W;>dV_M_2oI&q-@{Khr${aKPoy;{$fRG-c!?i7wtd$> zyL^R2D{`*~{^{oGqu1{`HN_fxp%=TSbz(oFJ`rwoME(Oxz^Sd@|Bq8*dn8iN81$R{ zGLW1+)OtN~T_LTg0csGc==~Qc55if#1zrlhe>YsaffNf>gLeulcz00FtzOPu z=q37Z^D5BCyDt!r^5#4K2|xV)e!_`TZ0=|76Q3%RS@oQ>&*Um;a7Zj8Wp1mj8t&B%yS`A6>Da?+g5spY-@=e_Q0(lb2?6e#ue zmBZalpN+QTBSSU2slQK+4;iKWt3Qt#4W&%wZwfTifWA*L+DXCAw=RH6PHIiGi(P)?;d}a-^m?=alZT!ucB4o3D?8HPNbg(J!er`i zvh)sc?@ypq`Azn2_tTnB;yTjUd-$g%>}CX@;4%K6Pu};Z_HB8WKgP}*e|p{OPki*! z8+~ni@cyhb?%wV=-!q?fx0CTBJcbf^=pBsgV@l1w_q~Ps7v8Z64Q*{O=@h`Vs~Od~ zs7LwPS9{DRqjmX-B>k`c^66PdBHLAwmW+^nv{4n%-qm+E3i}@&Um4sOUSiXWuWX$- z>xGUwKYqJA@aF4}qR=Dyeo^M8YkJds9}nerwxL7$Fw*kJd>u>+_&Yt0GrvG93`0`4 z9{~dOW&Nxm+IPzofeXa$7NdqiL^XHV$p_lJs6f}yIPNXN2wk*=F zPktV6BsIH6Q#d=imyxV@En$x6=luko#-q#~a2Bj!0?E%mqC#p~$D2=pPmd_lBlDbh zNbg$3SYtScXb|vCf12IRg7C~dB0FL#6#}Ldlp*{&9El|otzR_jc>40p{_k8ne{uBw zQpcRwi%q(X>11Zfq_^_Geetbhw7_LH9S(G!N=b;2YirVIvac{Pm#}@@JVc zgi{9jld=f)$)Bxn=e!{QAE!Q22K%owNhyQxPs+lnvF6WBsoi)JO143EgbM_VF9Jct z83@5(DG-b#3a$k2KH!!*NTwG0^?)$^`XHPf`9RW$0M|Z<1nYqiMI8vpFPbuR2dURg zKM1xYH&TPj#N!L=duKiz@{)&@j+_kQ`wd}dyi&MN5ihcV9KI@6$_(aCe()vpvo!_< za0~HS?7UTk7RWcfs>j&>4CPIQ*_o4_h;ik|Ub;XTqu$}{(^<{ld-6^CM9#$ks?GNb zo`>Sc_v7>(ZYv4VRkF&(m&7UjuoRH-kw6~l3JfNU%naMTZWVcxlY?z2A~qlRzAM_K z(6xP)d21Cg|6v}#gG)Af6aBg1&&C(KHj`Vyjg+tx2j4C+$^AEJomfK|P85%Oh>-v- z#wVjlUZMeMmqMd9H{r(ogr6wGQ-n{YI-DrjP^jYtCj=1Qln$f;zMt@&{yg-j#fH*8 zGNI>4p2N&shR@fbTz#kyym$IB?tFa3$6W?c3i(TN{uHgbpZ`zF;^Qj9b0zPAf3Xgi zk&^g+QU>3jlqJ*o3&TSg>4*41T5=%xVh|o22#H`R5E!4z7?m7%f-h`uZZdfFK|gX7 z2r1y&2NqZlgdplbKz^x|qB}^vM)^T%UUDQgC>%A^AJ+HId^pTS`oT^eiSQeFBQz|W z$oI=KEk>Sfj%0`Mn4VM_Zq><+l;c;pQW<}u-_3(t$bFgNWo5LuGWbIUZLolAAx~nr zD1PNCekD{XuJ9vysw8BYc~fAXdFB7v;q1pU@;$_W{ag+gk-egXTiHKp?>-nr`aUQo z4|ZB+15sM0P2IxnyNu4vb0>A1$0NSj*!37p3pbMA5XvkimJ<4KV1Kc%-&|%J1yRF!^ufX%L#dfU+D|b#3kUZeI72yoLo~c{1g)cvy|9ziIAqEc zbv)XR0Z5rM!S^Z5o((qpyB3(8T?@_5uC-=o*YWDN?Cg3H`;oqiZR+d%wX3b_UA0vG zg})2c9`<*=$n5WWvDx4C680@kQ!ClWb%=V%?9}?a*{N0bOs!TM%}%YG%}%W^W8*rD zy<1P!r?PA75A^BkEj?Q|sXt=xI#2ycFVc(D+q#9FmUrrQ-L5#vSg%lj#sc<7>Ro+~ zK2N=`FVL5$zv;{L&q?)qPB!>&WAz$jc6056-RnI%lzm(u)Dik2_Hm6e`?&UHAJ=Df zjDDWKG`&%8)%~%D-Nw$Yf8a0Q?B-fvc5^LaH`iTy2zIjX>Js*Gjn<`Bj1{ZP#9~$t lwOm$)t~5Kijxjs9)>9{@4&S^pS2&q^CFRPQw!7!W{|A4mvFQK+ literal 0 HcmV?d00001 diff --git a/.local/bin/scripts/adbp b/.local/bin/scripts/adbp index d9cc324..3995418 100755 --- a/.local/bin/scripts/adbp +++ b/.local/bin/scripts/adbp @@ -11,6 +11,6 @@ else exit 1 fi -ssh -p 8022 u0_a343@"$phone_ip" 'su -c setprop service.adb.tcp.port 5555 && su -c stop adbd && su -c start adbd' +ssh -p 8022 u0_a230@"$phone_ip" 'su -c setprop service.adb.tcp.port 5555 && su -c stop adbd && su -c start adbd' sleep 0.1 adb connect "$phone_ip" diff --git a/.local/bin/scripts/gor b/.local/bin/scripts/gor index 9335992..25432c7 100755 --- a/.local/bin/scripts/gor +++ b/.local/bin/scripts/gor @@ -3,7 +3,7 @@ url="$(git remote get-url "${1:-origin}")" if [[ "$url" =~ ^https?:\/\/ ]]; then - echo "$url" + xdg-open "$url" elif [[ "$url" =~ ^[a-zA-Z0-9_-]+@([a-zA-Z0-9_.-]+):(.*) ]]; then url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" url="${url%.git}" diff --git a/.local/bin/scripts/my.itmo b/.local/bin/scripts/my.itmo index b800565..bed5108 100755 --- a/.local/bin/scripts/my.itmo +++ b/.local/bin/scripts/my.itmo @@ -46,8 +46,6 @@ def run_until_successful(fn: Callable[..., T], *args, **kwargs) -> T: return fn(*args, **kwargs) except Exception: pass - else: - break # no it's not >( # pyright: ignore def send_message(chat_id: int, text: str, token: str): @@ -180,14 +178,22 @@ class Api: self._first_auth() - def get_status_list(self): + def _make_request(self, method: Literal["GET", "POST"], endpoint: str): self._ensure_authorized() - r = run_until_successful(self._session.get, 'https://my.itmo.ru/api/requests/my', timeout=2) + r = run_until_successful(self._session.request, method, f'https://my.itmo.ru/api/{endpoint}', timeout=2) + + if r.status_code == 403: + self._first_auth() # do full reauth if 403 after self._ensure_authorized() + r = run_until_successful(self._session.request, method, f'https://my.itmo.ru/api/{endpoint}', timeout=2) if r.status_code != 200 or r.json()['error_code'] != 0: raise ApiException(r.status_code, r.text) - return [StatusObject.from_dict(obj) for obj in r.json()['result']] + return r.json() + + + def get_status_list(self): + return [StatusObject.from_dict(obj) for obj in self._make_request('GET', 'requests/my')['result']] def to_dict(self) -> Any: @@ -305,13 +311,13 @@ def main(): print('\n'.join(map(format_status, message))) file.write(' '.join(map(format_status, message))) - # update_filter = LastUpdateFilter(ignore_now=True) - # for message in listen_for_messages(api, filter_func=update_filter): - # formatted_messages = list(map(format_message, message)) - # print('\n---\n'.join(formatted_messages)) - # for message in formatted_messages: - # send_message(owner_id, message, bot_token) - # update_filter.update() + update_filter = LastUpdateFilter(ignore_now=True) + for message in listen_for_messages(api, filter_func=update_filter): + formatted_messages = list(map(format_message, message)) + print('\n---\n'.join(formatted_messages)) + for message in formatted_messages: + send_message(owner_id, message, bot_token) + update_filter.update() if __name__ == "__main__": diff --git a/.local/bin/scripts/vpn b/.local/bin/scripts/vpn index a7fdf8b..455bdab 100755 --- a/.local/bin/scripts/vpn +++ b/.local/bin/scripts/vpn @@ -1,17 +1,18 @@ #!/bin/bash -IFNAME="wg_lva" +PIPE="/var/run/vpnd.sock" +send_cmd() { + [ -p $PIPE ] && echo "$@" > $PIPE && \ + cat < $PIPE +} + +IFNAME="rix" while [ "$#" -gt 0 ]; do case "$1" in - 'd'|'-d'|'--dpi') DPI="_d" - ;; - 'm'|'msk') IFNAME='wg_msk' - ;; - '-v'|'--verbose') VERBOSE=1 - ;; - *) echo "Wrong argument!"; exit 1 - ;; + 'm'|'msk') IFNAME='msk';; + '-v'|'--verbose') VERBOSE=1;; + *) echo "Wrong argument!"; exit 1;; esac shift done @@ -22,18 +23,17 @@ else set -x fi -UP_NAME="$(ip link show | grep 'wg' | cut -d ' ' -f 2 | sed 's/://')" +UP_NAME="$(send_cmd status)" -IFNAME="${IFNAME}${DPI}" if [ -n "${UP_NAME}" ]; then if [ "${UP_NAME}" != "${IFNAME}" ]; then - wg-quick down "${UP_NAME}" - wg-quick up "${IFNAME}" + send_cmd down + send_cmd up "$IFNAME" else - wg-quick down "${UP_NAME}" + send_cmd down fi else - wg-quick up "${IFNAME}" + send_cmd up "$IFNAME" fi pkill -36 dwmblocks diff --git a/.local/bin/scripts/vpnd b/.local/bin/scripts/vpnd index b2da33d..7845a78 100755 --- a/.local/bin/scripts/vpnd +++ b/.local/bin/scripts/vpnd @@ -2,6 +2,7 @@ # shellcheck disable=SC2034 die() { + [ -n "$oc_pid" ] && kill -s TERM $oc_pid echo "exitting..." rm -f $PIPE exit 0 @@ -11,6 +12,7 @@ trap 'die' SIGTERM SIGQUIT SIGINT PIPE="/var/run/vpnd.sock" oc_pid= +up_name= [ -p $PIPE ] && exit 1 [ "$(id -u)" != "0" ] && exit 1 @@ -21,7 +23,7 @@ for config in /etc/openconnect/config_*; do CONFIGS+=("${config#config_}") done -COMMANDS=("up" "down") +COMMANDS=("up" "down" "status") in_arr() { declare -n arr="$2" @@ -37,12 +39,22 @@ down() { kill -s TERM $oc_pid wait $oc_pid oc_pid= + up_name= } up() { [ -n "$oc_pid" ] && down openconnect --config "/etc/openconnect/config_$1" & oc_pid="$!" + up_name="$1" +} + +status() { + # if [ -z "$up_name" ]; then + # echo "DOWN" > $PIPE + # else + # fi + echo "$up_name" > $PIPE } main() { @@ -50,18 +62,25 @@ main() { while :; do read -r cmd ifname < $PIPE - - if ! in_arr "$ifname" "CONFIGS"; then - echo "ERROR: Invalid interface $ifname" > $PIPE - elif ! in_arr "$cmd" "COMMANDS"; then + if ! in_arr "$cmd" "COMMANDS"; then echo "ERROR: Invalid command $cmd" > $PIPE else case "$cmd" in - "up") up "$ifname" > $PIPE ;; - "down") down > $PIPE ;; + "up") + if ! in_arr "$ifname" "CONFIGS"; then + echo "ERROR: Invalid interface $ifname" > $PIPE + else + up "$ifname" + echo "$ifname" > $PIPE + fi + ;; + "down") down; echo "down" > $PIPE;; + "status") status;; esac + fi done } +echo "Running..." main diff --git a/.local/bin/scripts/wg-quick b/.local/bin/scripts/wg-quick deleted file mode 100755 index fd3fb9c..0000000 --- a/.local/bin/scripts/wg-quick +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -PIPE="/var/run/vpnd.sock" - -[ -p $PIPE ] && -echo "$@" > $PIPE && -cat < $PIPE diff --git a/.local/bin/source/src_venv b/.local/bin/source/src_venv index 1a4ec80..2191ddf 100644 --- a/.local/bin/source/src_venv +++ b/.local/bin/source/src_venv @@ -25,14 +25,13 @@ remove() { } +# shellcheck disable=SC1091 create_or_activate() { - # shellcheck disable=SC1091 - if [ -d "${VENV_FOLDER}" ]; then - source "${VENV_FOLDER}/bin/activate" - else + if [ ! -d "${VENV_FOLDER}" ]; then python3 -m venv "${VENV_FOLDER}" - source "${VENV_FOLDER}/bin/activate" fi + + source "${VENV_FOLDER}/bin/activate" } diff --git a/.local/bin/statusbar/sb-vpn b/.local/bin/statusbar/sb-vpn index 4e19481..442b058 100755 --- a/.local/bin/statusbar/sb-vpn +++ b/.local/bin/statusbar/sb-vpn @@ -1,7 +1,19 @@ #!/bin/bash -IFNAME="$(ip link show | grep 'wg_' | cut -d ' ' -f 2 | sed 's/://' | sed 's/wg_//' | tr '[:lower:]' '[:upper:]' | sed 's/_D/ (dpi)/')" -if [ -n "${IFNAME}" ]; then - echo "󰦝 ${IFNAME}" +PIPE="/var/run/vpnd.sock" +send_cmd() { + [ -p $PIPE ] && echo "$@" > $PIPE && \ + cat < $PIPE +} + +IFNAME="$(send_cmd status)" + +case "$IFNAME" in + "msk") IFNAME="Moscow";; + "rix") IFNAME="Riga";; +esac + +if [ -n "$IFNAME" ]; then + echo "󰦝 $IFNAME" fi diff --git a/.ssh/config b/.ssh/config index dd5ed71..1f9b98c 100644 --- a/.ssh/config +++ b/.ssh/config @@ -6,6 +6,10 @@ Host *.zvray.ru *.wzray.com *.vpn.wzray.ru User root Port 8022 +Host docker + User root + Hostname 10.161.192.10 + Host 192.168.1.1 10.161.0.1 10.162.0.1 openwrt User root UserKnownHostsFile /dev/null