.editorconfig000066400000000000000000000006401516101623200135300ustar00rootroot00000000000000# EditorConfig helps developers define and maintain consistent # coding styles between different editors and IDEs # editorconfig.org root = true [*] # Change these settings to your own preference indent_style = space indent_size = 4 # We recommend you to keep these unchanged end_of_line = lf charset = utf-8 trim_trailing_whitespace = false insert_final_newline = true [*.md] trim_trailing_whitespace = false .github/000077500000000000000000000000001516101623200124135ustar00rootroot00000000000000.github/workflows/000077500000000000000000000000001516101623200144505ustar00rootroot00000000000000.github/workflows/build.yml000066400000000000000000000016761516101623200163040ustar00rootroot00000000000000# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions name: build on: schedule: - cron: '0 0 1 * *' push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: ['lts/*'] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - run: npm i -g grunt-cli - run: npm install - run: grunt .gitignore000066400000000000000000000003451516101623200130450ustar00rootroot00000000000000/build /dist /node_modules /*.log /*.iws .idea/workspace.xml .idea/tasks.xml .idea/profiles_settings.xml .idea/inspectionProfiles/Project_Default.xml .idea/inspectionProfiles/profiles_settings.xml node_modules/.yarn-integrity .idea/000077500000000000000000000000001516101623200120335ustar00rootroot00000000000000.idea/codeStyleSettings.xml000066400000000000000000000004251516101623200162320ustar00rootroot00000000000000 .idea/misc.xml000066400000000000000000000002561516101623200135130ustar00rootroot00000000000000 .idea/modules.xml000066400000000000000000000004121516101623200142220ustar00rootroot00000000000000 .idea/onenote.iml000066400000000000000000000005201516101623200142020ustar00rootroot00000000000000 .idea/php.xml000066400000000000000000000003301516101623200133400ustar00rootroot00000000000000 .idea/vcs.xml000066400000000000000000000002471516101623200133530ustar00rootroot00000000000000 .ncurc.json000066400000000000000000000000321516101623200131310ustar00rootroot00000000000000{ "reject": [ ] } .npmignore000066400000000000000000000002611516101623200130510ustar00rootroot00000000000000/.idea /artifacts /build /test /node_modules /*.iml /*.ipr /*.iws /.travis.yml /.scrutinizer.yml /Gruntfile.js /*.lock *.log /corifeus-boot.json /dist /secure /.github /.github .travis.yml000066400000000000000000000020231516101623200131610ustar00rootroot00000000000000language: node_js sudo: required cache: npm: false node_js: - lts/* env: matrix: - CXX=g++-4.8 global: secure: xR8HDjpnnX/O6ekhbRehaK8LOf0eWkn1IKzxI/OjJHKP1c7QpT3sCmNiewDrnZXHDhXK0o8+ixVB0k6K8tBOoqb3mFtXLMczCx7EhgqUgmp+J42PpSffS81knMzN7COJXWfkbxnwCcsah348/8TkWUx4WDn7iSC7XfBGZXoftpoOwcySRZ2yucmai6cNdOtao9oV9MliufHdOdZ5lOaDArZWu10Mmm4aiHRHuJbcmCsOEusO3TOjPC5D4gKh2Qt6RvV/syVju50vvbYdcKyD6xKsIaX5wGzZNzZmIjq+TjbAXYkMk5cfYXsnUiSnlZSWPF/DSOuM+CON5eQQgucQHQQCqVBeiRWICRth+2xfrEkqze3/wtx24wi4xPK+G+DHO2ur1lJGXqgjWeg/07v40lPRM3p2MIcz6Lh5wK/ZOWdttnOyplMlB4J7CHpPK9HaC/MxMDtsWoUlJzyzpKyRaUxPAMpkRznUmDwxGlJNEKmvVI46tCqSHpCatZIX0CeL2ptwSRDWadllrwvlcRgvZLkQjExF/SCgFgwO/9TV93MK/KJrM1iRsJ7qluUSvrmRVO9APf5iXqKqU21ZCDXGaS4HoS0cGxgDO2n6e4Xo1lK3xlosncoiuTkCJcn+eMqnqBn9lK/H9mFtPLnF+/yDJ5ID4S4pqbaUWCarR3YhCE8= addons: apt: sources: - ubuntu-toolchain-r-test packages: - dbus - gcc-4.8 - g++-4.8 - libglib2.0-dev before_script: - npm install -g node-gyp - npm install -g grunt-cli npm - npm install -g p3x-onenote Gruntfile.js000066400000000000000000000005131516101623200133470ustar00rootroot00000000000000module.exports = (grunt) => { const builder = require(`corifeus-builder`); const loader = new builder.loader(grunt); loader.js({ replacer: { type: 'p3x', npmio: true, nodejsinfo: false, }, }); grunt.registerTask('default', builder.config.task.build.js); } LICENSE000066400000000000000000000022601516101623200120600ustar00rootroot00000000000000 @license p3x-onenote v2022.4.127 📚 P3X OneNote Linux https://corifeus.com/onenote Copyright (c) 2022 Patrik Laszlo / P3X / Corifeus and contributors. MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. README.md000066400000000000000000000241661516101623200123430ustar00rootroot00000000000000[//]: #@corifeus-header [![NPM](https://nodei.co/npm/p3x-onenote.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/p3x-onenote/) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://paypal.me/patrikx3) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Corifeus @ Facebook](https://img.shields.io/badge/Facebook-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Build Status](https://github.com/patrikx3/onenote/workflows/build/badge.svg)](https://github.com/patrikx3/onenote/actions?query=workflow%3Abuild) [![Uptime Robot ratio (30 days)](https://img.shields.io/uptimerobot/ratio/m780749701-41bcade28c1ea8154eda7cca.svg)](https://stats.uptimerobot.com/9ggnzcWrw) # 📚 P3X OneNote Linux v2022.4.127 **Bugs are evident™ - MATRIX️** # Description [//]: #@corifeus-header:end A Linux compatible version of OneNote ![Screenshot 1](https://cdn.corifeus.com/git/onenote/artifacts/screenshot/screenshot-2021.png) # Main Features P3X OneNote Linux is, actually, an independent browser window for the online OneNote. You can use this program without having to clutter your browser. The main functions are: * that is independent from any browser, as it works in it's own process * it provides a tray, that allows you to close your browser while it keeps running in the tray * the data is cached and is faster than always opening a new window * it allows you to sign in with the corporate or the personal login * when there is a new update, it auto updates itself (Only in the `AppImage` version.) * the program allows to use other Microsoft online applications, but the dedicated purpose is to use OneNote ## Verbose feature info * Dark mode is enabled (but it is a hack, not supported by Microsoft, so quirky) * To show the menu, click ALT * Desktop menu * You can use the `--minimized` argument to start the app with minimized window * You can zoom the window * Icon * There is a bottom bar * It shows the current location * When you click on this bar, the location URL is copied into the clipboard * There is a new button on the Edit menu * Copy this location to the clipboard * This is the same function that is on the bottom bar when you click on it * Restart button (empty your cache, you can login again if there is an error) * Remember last notebook (as much Online Onenote allows ...) * Menu > Settings * Close to the tray * If checked, will minimize to the tray instead of quit * If un-checked, default quit close button behaviour (quit the app) * You are able to set a proxy in the settings menu. * There is now a menu called `Corporate home` * Given, I do not have a `Corporate` login, I cannot debug it at all. * If something is not working, the only way is to provide your login and I could probably fix it. Otherwise, I see nothing. * The OneNote language is controlled by Microsoft, and we try to work with Online OneNote, but we are getting a hard time, but the Electron UI is now able to use any language. * You can translate any language @ * https://github.com/patrikx3/onenote/tree/master/src/translation * Allows using multiple instances (with some quirks, as the config will not be synchronized using multiple instances at once, so it can provide wrong results - to make it to work, configure with 1 instance, exit, then use multiple instances). * Multiple instances is not recommended (it was requested and provided). # Downloadable installer ## Snap [![LINK](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/p3x-onenote#cory-non-external) ## AppImage https://github.com/patrikx3/onenote/releases #### To integrate into the menu Execute: ```bash sudo add-apt-repository ppa:appimagelauncher-team/stable sudo apt-get update sudo apt-get install appimagelauncher ``` #### After downloading the ```AppImage```, make it an executable. ```bash mkdir -p $HOME/opt mv ~/Downloads/p3x-onenote-a.b.c-x86_64.AppImage $HOME/opt/ chmod +x $HOME/opt/p3x-onenote-a.b.c-x86_64.AppImage # Then you can run it $HOME/opt/p3x-onenote-a.b.c-x86_64.AppImage & ``` The app can be found on [ElectronJs Apps](https://electronjs.org/apps/p3x-onenote) [Change log](change-log.md) ## If you are a NodeJs Ninja [You want to install via NPM...](artifacts/npm.md) # Issues #### Corporate login The corporate login is unstable, either it works or not. Only the personal account that I can provide some minimal support. #### Suspend/Sleep/Wake up I recognized, that after suspend/sleep and then wake up, the app is not saving the pages anymore. For now, the solution is, that after wake up, restart the app. #### Not working on SNAP on some versions Usually, on stable distros are working with SNAP, but usually non stable Linux distros could not work. Please, try using the `AppImage`, that is usually better than SNAP. #### Error in auto-updater: Redirect was cancelled Sometimes, you get an `AppImage` error for update, just download the latest release and replace the `AppImage` from here: https://github.com/patrikx3/onenote/releases #### Rasberry and ARM is experimental I have no ARM computer to test it out, I could build `AppImage` on ARM, but I have no idea if has an error, it crashes or it works. #### Online OneNote Change language Although the main page's language can be changed, it reverts back when an actual page is accessed. This is being investigated. https://github.com/patrikx3/onenote/issues/14 #### Electron problem 🐞 Since Electron v3, the tray left click is executing as the right click, Electron bug. https://github.com/patrikx3/onenote/issues/38 #### Fedora https://github.com/patrikx3/onenote/issues/3#issuecomment-312711801 # Development For file names do not use camelCase, but use kebab-case. Folder should be named as kebab-case as well. As you can see, all code filenames are using it like that, please do not change that. Please apply the `.editorconfig` settings in your IDE. If you try to build the app with AppImage, you have to change from `electron` `dependencies` to `devDependencies`, this is because it is created to be able to run this app from `NPM` instead of an `AppImage`. For generating `rpm` on `Ubuntu` distro, you can use: ```bash sudo apt-get install rpm ``` # URL links [P3X OneNote Linux playground](https://www.patrikx3.com/en/front/playground/13/p3x-linux-onenote#PG13) [Corifeus P3X OneNote Linux](https://corifeus.com/onenote/) [AlternativeTo OneNote Linux](https://alternativeto.net/software/p3x-onenote/) [NPM P3X OneNote](https://www.npmjs.com/package/p3x-onenote) [Snap Store](https://snapcraft.io/p3x-onenote) [Github.IO Page](https://patrikx3.github.io/onenote/) [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2022.4.127 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end _config.yml000066400000000000000000000000351516101623200132000ustar00rootroot00000000000000theme: jekyll-theme-midnight artifacts/000077500000000000000000000000001516101623200130335ustar00rootroot00000000000000artifacts/arm.md000066400000000000000000000033341516101623200141370ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end ```bash sudo apt-get install qemu-user qemu-user-static qemu-user-binfmt sudo apt-get remove --purge qemu-user qemu-user-static qemu-user-binfmt ``` [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2022.4.127 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end artifacts/flavor.md000066400000000000000000000033021516101623200146440ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end https://github.com/anujdatar/onenote-desktop/blob/master/package.json https://github.com/peterforgacs/electron-onenote [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2022.4.127 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:endartifacts/new-language.md000066400000000000000000000033201516101623200157250ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end # New translation * `onenote/src/electron/app.js` * `onenote/src/electron/window/onenote/load.js` * `translation/en-US.js/menu.language` [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2022.4.127 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end artifacts/npm.md000066400000000000000000000036711516101623200141560ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end # NPM install If you know what you are doing and you are a Ninja, here you go: ```bash sudo npm install -g p3x-onenote --unsafe-perm=true --allow-root p3x-onenote & ``` ## Warning This installation is not supported at all. ### Note 🤔 Though, I am using it, but some distros are different and I only use Linux Mint and still, I can't support this way. 🤗 [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2022.4.127 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end artifacts/onenote-icon-2018/000077500000000000000000000000001516101623200160205ustar00rootroot00000000000000artifacts/onenote-icon-2018/256x256.png000066400000000000000000000143671516101623200175020ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYs B(xtIME  %aXfIDATx{x;M rB(4d6$K>mkUjzϑ =jkjO{jj)zKnrQQP ${HRN6<>$ygf;w}wFX "߀Q" 5)Eʊ2P8f|.&L y2rKr7+ {\[_j ̖T@@@JB1V0Y !42o0M+9y3(,)\2J /m/ !) @1cũ^ӕ4%f~H=z3ϣ@1 P( jRa~)I<2' N ݐӥw-N]ybʲ2㆜=&K9M^@"P5!AROP!1bEh΀Q"$LT< & !5A"ǀqN n~E*&d%B31!4H} Ӥaxk;KGR*>f)z>~@1oũ 7_7%R`W{:EI.ϰ\4&)s vO "ٺtn<1/4HskPD^Ӥ^H.yr'@, A4E@ހB\`'@,H[: %oBt<);QL@htRy@-b'Rr:]~UMb!e S D1+=MS&MݯfH30M{ҙn'(/-%͎| US B#%4mVs;Df@z+.^v=?h% 6kp?M2B Nq;jH|* 7uqOU@W:]49N;04@.D邦W=H'-% xħウɃtj= 4`K&fkQ*fJH*=:3`~<0:@ղ J,{?ŝ0]q)nW^xD@ȇ)A"ϊ3@~vӽ@\ ,37xSP8_s)uk75]8lRKOyr$MUTcY | ξ7%/j y*yi Cӗ#ʥ%h E <\t)σ4PwEK2I#pm * q.»~Le ܋!)3yW/!oߟz ?0@4h 8w`~6\@ A2dDڸt 531>)Sɷ^c`7ЬaH#"ud*2g"spx=,1bARze mLIGژ4ICrf C X+uh}~!7R㑐kqC|8|>xxM"qX"%7oC%"1-!>zݛ3w.0ƹ($";gz'mωyB]܅!Ny EDZƄLL=k|2i7>@#w5hDmp/eiIf*#tA6rN0%$rbxx1DN 8HwȉU̺<z?)Zy:QT3 3& .=bCmr±ȟ 3PLRw찣ǞwvL4>|}45l spS:{ZF xߐ)]0E!{U]/xmmZS JM 3s[Qge:=C",KG&V[]L3fc?6ňP,Iv?jl3]<oߙBS*`LI,9ZQpW 9Eb_#t?'ɽ03Y]RgB( .a ^'@ȇEwxm[xT=bfG{kE:2yP(X2w5ξ~< 0!plZ]+M.>%.x;L4|} 26wyۮ[ hSGs]j+wbKY{؍%kw&;":Otb(vVm(;/ntdn;ە2"Kǡg`RљqL\,l[zc>~ ]]as{09<)*%e&GG Qh?ކڥƦsoI;nTGM|z~P* J?{ESbpou/'8*Z`+[,=kd2{EoL-qS+Yo ~xSJHMI`>|Kmi,^8@Z iJKmt>ߡ=Q񱥶ic0<9u/OoCJkߛ8obU:+R$Kˋ9ZkW5{*e8ѧ?m{1fj;'ރkg)ѪY^D ^o5{1쪶jvVu(S`kX]z"?=d~pH DsۏIӳYHbնWry7Ea9`Kn gNsYHbؕ[~^7 I ;һtT>)= ^6$]mZ-ۗ\3 ,$1쨫5/T[nŌgd .jVU"[{*P iF485h}36;&wn[V1RG4MKwn~aDHv؊-bP-abV_n! &,$1쨹 O8X]3 z[#0eTvtda|>-cp+1liݓo!t?=粐:ٴO˘u})|> xjm}($)mۧeL,&E L k-w{ܘxq_cR1,+6;.w|L§U8 Fi}oP uJL-fh:n6^i} Pya_&@>Z>9ԧed`6Ť[aW}gy9p0E@NyE ;30,xmho2FMˆI0ͱfipJT9hxf.}ZVYLRuMP\_aٜ4MAV~ęD6w嫱g u "j9|U;uh:heTݯ1/ן;0z_V"p@:ّR<pm Tf9@2wo rP?Iz8H41ا}0]6ho  ~&Mkjko@/y @6y՞@_%Q?q<@t/ n5G^BW{W.H6Kj7nCE\{k;*^n 47c]8pb _[!YJVaz=[oZ@cxWYow Ě)Qt t=6P+cE~s:w س^\!!L- DLֻk6h %)~ڗ-RwuNyq_tprKRoJh!Q(| !@kʲ2uOӔASRդ@!<0 OpU+>x\[nJ bXdKyO Ès@o057`j`8\$~2M-%b%AƠ(R31I$DHY!T.hwFߦQȗP5R3!zddqr?ȓ*J<ȨfH3O$e0(7A`_AF))03#Л@$gX.&&!I pf+R|F"K3 @*/-OC4E@3{`0beYqCd)4("R5`0bwCBfNO(KEr`ĸ i~R=Pg,NMP, #6dRėdd!B)4k&#1&4 JLFAF1 P( jR.!g_fX5]!&!AF1bؒ%BZw((2@  2v~{2 #1(4 d #d4L/4 LF1(44%fdd0(ƅ7Bvdd0aVuiwZAFb4PM _f0Af|=M ya0ȡ!@0|ӃL3e׭LIENDB`artifacts/onenote-icon-2018/onenote-icon.svg000066400000000000000000000027561516101623200211500ustar00rootroot00000000000000artifacts/onenote-icon-2019/000077500000000000000000000000001516101623200160215ustar00rootroot00000000000000artifacts/onenote-icon-2019/1024x1024.png000066400000000000000000000512771516101623200176300ustar00rootroot00000000000000PNG  IHDRH۱PLTEGpL`y"{!b{)s%sLr%$n%[c6'q)V+jdxaG_`X^b_db\dw2Kdu!zox}qc pr"tync{|v}m~l#bj{|sfzgi~ bk bj$a"|svyxhmk`]aed[i`Yb_cZ_޾^rqpWμ]vtR~lI_ݹ[aV˄$N%]ٰW̹\׺\؃#`d"OUƮVɩTÉDhKPFMEYѧS²X΃$CH@QATĥR?fUǚL|=UȏGJTśMS×KQB~>En6z=q8t:f3wv;j4{y;}>b1r`/n].kONх%SѲ_Ûڊ6~ϡaă*~&oɄ4FSr*BDgj(<\+ULtRNS3 /  &-1$,"';)96*@=ECHA5l`?r@%vcуfiO"IDATx`оol ] Gط A ÓN޺$.эM62 jC}ԏ*c~͆ 72@ d@//5խ@tU_6Do2%sBŋ8"pc^g4R8CI fN s#@ikT#ڹ @JFu`s%)eL d.;Ʋn PK`hPgؿ$@:Xd!ž.Z|$@=oehPs@@8-WWTx[@Ej$LMjCTx9<РK\1-xu=7M<>(1ep<°!4CJ$*p{(W@ \G? @Uw J @Pg@:pLj#G  4EH7u z i ؖ@{`$cC~@ۣ} `tR>Rؖ*G!SF%$&0=0j|t,$TP "0@$ E"`( CHDP ٩cA[{a<"'R@H)x EO <"'R@H)x EO <"'R@H)x EO <"'R@H)x;uh@@QA IM OSP`JL@ )(0E%"SP`JL@ )(0E%"(Y@mY(`J" )(H`J"(ס$F5@8`J_8Pw$(9[yP{qC%vDq|͢'H  R"ӕ1)YTd2_ILNrNC}sC рC`$"'ުmKHx, <^|(G``[P(p!@TF0O|WU6@FP&H 8@(dmf "Z#'*>( ͊j8 #'b6pc ]CWXc@tD0OL$aE<0ݨЂ,; L@A8N:L㲏eZ֯'JM/jr0a77&ewz"` @ q59WǪ?+ ð~MKT$K.H @k? mw6PH @.S??կ^:%B;H hsGtXGV^j#Yy CG_π=]|< XP埪sgz `p-(ū3+$Y;7XE/c 4! )Q|WU^3@/r?@wK;% u=`V3@ⲿS~Akw[`~4GGZg@KdP>|? VWD; '[ ›I{GgJ $8 .;U} Xe((@_FZ B@\?5=l둓n:E_pٺKo|hԭ &x"= bP_h}/ Ra'h[np7Gl~ T } P Nv_(kO5<~X2 ZKO6[}wmK"I*3Op(Ev2V@h8 `g/nP__kc㣾 ٜ:Jx5jT 8 Y?n?[s߮s28 .'h~~s@3@gWu_]ob;}h@"P#T$gtj&o̕L".0k?l@"@π o=F `5(@??b[[M.n: +}ǃČ @I~W.>{#^A uA tzO:`g ?:X7lmXr Y?O>o?;pYplP)ihy#F'~km.2YAeFҿ+Op0^@W@@@V쏛C #/ZNػ&(^ 9"AxRP"(.HIbZūTE`ѣcfM&?|?lҺUGku; f``T/0z ՟f&-Uv&@oѯBͽPP@ ^M/\蛻 0cD~OW?q7`h~ @Dr/#>7~-`T ȏ՟F1<1kt >x X0A@KgC9WV_Q$ Lc/Xoc0?a#Yo>Ku\*X@lwr췀OB B`;?Og{ gb(4?ϵ/o R0韼ӿ) fF1}@D_Q?xXr&?L@4<ߡ7Կ>k W[0v ` t;o_?\1+H@nz?qI O_SFs@"@WA@ӿoC /ȝc 4@ rO3 _+4]]D~_`?oZ> _6#69`UX>H!L˿',+Ag?^&}X q.1}[["' TpZ;ӿ 7ph=鎗~0[,( g2 >=WSS~˿GDX]2/<YMmz ݓJ2 ^ _>>3U\JWc-kNS_ s>T9RS!5XnX@3&!_m ?Sϸ _=t u\(n?axIp P߯{,kX|Sdc[=@5xo?5X6Wil@_ٰ]P_@F[׿:">Lxy¯/Y?3Ԩ 2'֟zge0S)il{[,X)Wk,/ Q?~cn\X6gP@a=: g[O)x?^$Cdz|g*ט h5[`$p+(m)@;?p(ԿC1ALױ@[KdlʪO\gy a`?J{L//QVeX 1 Gh!Pr1 @`4@t#P~t>i*66?{ЌF[lO/Ua8(aVdT8 \| 0jeQ zc~?`.PO1@?`+k2Ϩ?@?S`q)>.cJ?c1@2GHAԩeLPo e= ׿!7Y P8^mP~ ?^g@DZyw&Scy_x p0NWedpdV0""TXT o mIu+1j99sf`w̰=@I /c%I f$MYض?GgPMW?c:?KMH @rt,[-2M[1:`"`{߳@A[#(=1O˿@3bO}lq_1HNc`PԿ)З} @J˿m_=RoeohEBr,sP8;_Ȳ{?~D@Z?300[""<_`(xppMxVH@. @9AyHD@,^co @Ev@ p.;["./ Ha``-?V }q(oPNxQ{[#'8=Z)^g ?z ?,˿@3B@П"][A\7dHǕ@?EAS?Y/UA!=1)bO}BȲ[4#: y߃O,#  ?Bm' k?qW?YL@忡,L9:'d?Xh!h4`-z@Pgq$["%8c }8 fd  @q[whFBLx8 l,*WyY?4 `bǏGDմ @ߣC7dY7 7k$^-f<8A)0["%Y nH:o6??/{c$)GBr, ~ ՟"<˿@3i?mjGA"\˿@3X"R <SohF^8:$ӿ@/?U z'@<# >Ak0/ygPd Vڈ0F}Eh:]PhNp[ JL:ipg{9pu7i0`xqD=-:0`i_lxp/_oЊ)hԿA< @/BF;CY fDg`_  ahP$>/\⡦?,hЉJ3J ;f7i[-ZX?# qϿ@-}9Īh -ֿ@1]#]|?xhP$_;V0!HO~ P[oЎd +@?Z#!PAFP`\x,ǿ@3@ kKt?pkP71j( (i{Zt"-\ѿcb @+@ѿ.7s\ rDRҮ~9_?  /(EN_տoPK |1H#(s ^cѨ@/B@+?|WVb/d~ǿ@3"@^h?7,>E@w @gcEQ t;<8GN"J z ? +ޟQ?Ahzep ?,,?\](@7 DcCM&H,*ޟ9D R ; _r?x }O Zd !S%3?{w9,_<``  oЌ$ZpXdZ% oO?/]@%? 8?g9?-:d x?DhEVZ-zP/WG f %1r[4#% < chFH(cox c]-4G<Lȏ|x[>G@ }0>p7- p,ǿ@3Bpvo?YC} ?;DdA ,_>@)Q4_iY"/n @ON>d~iHug9-߼+P->QH1PL3Xq" ! ^"KE]:b?xAatmR3-vǮ^=u/yH u4#@A)c?K@_>'0LOPdSA!oE=ci2A6?_&} : @\/(lgHaDO"G/Pio61?O\R!"\Ϸ(Oci2S/)?U@'3ODŅpFoêo"K ..8GQZD_otZ])8/@_h|@tV)x0h8FOT 4?*DOS|ϿDu_Wc@d dof%8? 8N`OGw <.`1}14jn)8@v']o)8G;cǟشShbO(8@u(#/ $ (>|W @3]^6(x@_"(;&(8?@<@Dƽp!?a?"ck(2|<`y_ S)x$s?&K&ci)vO?(8Q&W6w@O|[=O#i>{ODƥ ?;ƎWW3?zg4}[ $`4v7U~ODŗ0Ö'xm?@`p?c?"FORq"\7BzOǁ yUu?u @?wKP(\m@\< @!_+Y)ǿ?;) |o( WP? GOf(¾Q"ԹH9pb"BN "֟j!P"3Әx{n;kqI8 =58@ G1?ſ%p!}=Ջ 4% _{?ϣ9ǿ osߣ3(XO%^@`wGA%R Q_@v7<ۿw$44%f(`!?ӣ/Hf.oҽ_ @0C};ĿՓ(A@׽?ѓ8?ŏ dVoD[Xx=U+K { P?oۿ 4 ;_"] <صA]5-'#)Pk%^kߣo% =3(9/!ێ Č/_nW@q5bK@ {;?-6J"+3!ۿ ?ݣߛl"3!SqyۿACݎgE#xk/h~?+c 08_~ۿ {_  ~8ǿq{v&,"knj ƿ=."| `C@A5|w:/kOO8|Q`Gvw;o!5('n `O%@p'|[S{* J$Hp?n }A5~f)2 ,3xJ@D{DoF@@l8v^H@,{b/ uI 跡~K >l< PK `]~yۡoN@.C=0'0 _fʼn s cA\*+D7t#J% FEbf$$!$`JV**vOWUQwnSܺ|0Z ?__˿IO>}N lgf .- Zߐ~-gd\6T*g|/Q\?Gr $ak\s?w+%-/]gsXHٛt ybZgk3@50>@ Ζ?ߏ~ՔO?&0} |.*g-"˿4i7d^T`R %u៭IՓ"@7|7P9[+!{R545S8~4 @Z/.s/& M]~<6l#w꯴_D^!~JOOPY+"*Iߖ@616+b[kV{[3[b('b @< к${@b]9~)B8K2 HOLXKN" @fO[7rWzB?gu GH/]`(BϔVJ@# 0O3@6TJ RmS+  56UU?t('@i#shFP. -?/HG / koϹW)?? KGlOH__To~o#@eb\`(Zb xnB-Gѯd2#_в``UBb^ Sq[@DGjLdдM48%??  @o-v rvXiPOO71  a`eH)h0 ( a[i>_hOb0tBX% -j /UUr ϥ*;G `p acշ(O@3{`\\3@D 0 -?=qG z l,O)vPK4x(6Sbw\ԥkU    ewB.T}`Mcll C ?藣??;X gb0f~vl ?Dbm$B  F;̈́jh58.\H$}W@v_ydoezEHf^.o_w  j_x/Hfti_+߯^5? ,L>S_?r` x\>?sHEq_  I3z?ƻd7;BaU?ۿ^.Tq4'|'~ow_? @2F/Aq\տ~.Xx_ /? GOߎ~=ʟ @ ZW|~Տ;c^2 Ayf @ R)'|__<diyw+/dS]C>7~gHf^ _6?2v4TO?w$3O+um?HnVhm^_? lEO~6 @2pbDN?OTkGO_ @Vim:$3 >?[z??2V4'}'~zHek:~2dz^WzO?O R6W=~_o/){W~?HvK)z~$;WkGO 2n~? @2pp$~NT~.HU? @2ptn?O?nS? @2p~C3i:o3 Av'H[?/ @ewgHnΏW =N@l0/1TnW* >re ܹ } ` `~`}! ! C @@@4k@@@?@dnv0 +EBZBqB  t1Hk`òK%]5{!|@CG(PE p:FS~`boi ,@'AC&nO]9X+ồ2wO\_lr+|`bt@4 6pCO6 M .sh36z.pKC0Xۅ2 ݞyx l>buݝ$x8x{#50?M\H`8|T>J|#񈵍 @PFZK[ck+W<#$?[^"z.P2wP3o G|/x-YיdYP3WLM~0i%7F#VTMjԴ C5x,FLFLqMUJt:iEm.a$tS5 tX*q]&XhG @x)X8߿3Mh(dElUIpR v]vMw26{;Іqe / 0+{Zns9G >&q< o}~Ru4="K |PR<P]n-$vj(@P?NQ=CmMwK / P`% NYn+G0R j ,%!0K 7λPj^rBN? sp G @__}pD7΀uy]7~ ( p+% :I?>5n8(!b+0J0 ip& m,_Y*$ rB?Np 7P$ /hCP P-py/y^ !P `(CBZfĚ+@WC@@ 68~b_x4Sp@ȉͿp<"_@9 qM^WtP(0__No/4ƕ?0vI~#W\0\X4OakS * !!E& l3>ܻ d„ȄT?? `3\G @UIP2B'DQ$Gk صd7a( .% #:2I$|{u) xڡ MxG?!@gLlə IDATxu\ww%nT$DQlPygg؅JKw-P~cwgf7p@!#+hv+hv+hv+hv+hv+hv+莕J;Fl I3 /x8qerk#$.,:q!6Ch>q5{"p8 Jxp^oe 6LdP-_F=3! +c| Y]yWFR漫%hʬq~sc),P6p#hZR"JFG|Ж ?Ի4F\ TJT,%lkXJ rBdv-j:fHofr/:P!.+śNU𪬡gLkSuceKi:5Dz^tF(3X wVFg . $J?7QYa7ŵ623#\CHLRV•OJ,ִ >߬5ٿ0~JVhs=yUtL 򪀱fӕeB.[R,H 8F 7 >'DAVzz|BFbz :XJdTf7 CkA~$J0@CZrH%,B* 鉄{~D.󣜞@atc&`OҮDNO?I5Q˒uqw)#k&~㪾hXQb2XSfVfbYּ7 k6%`wвo |Y>|78=^OR>bX)[1 # CK\=ZSP k G,Ҥ E{=,QwtdXA+jB8+j*͠:o2#&J1 P_ƹנ73?P}x578+>mc*L?R&Br} *˵4XLWwVDq`nk|M1MɀV4dB6m+g?5x|'`_/BDWnk()Opbd:EOXPx{B Kw#g\_v}Qies "4r<yk޲ Bw%5F-So|q 5yxT|g"%Wt2u6%^K#H: 1OcT߉a*bOw% u  UVLtf>CuQcfݣGoa:o44$(G-iYu!cLQUhmK ,S37 +Dž{tBHX}-{!)s:=&r_R%ϊF`1ղa1A%; =NX {SƬ5Ϗ^#"'0qHM!C־1ߞ41.N"/[uc;)rM5^!ӱ:VΛ ,vFpczs(@T41\3_0̐0,&k~3ZܣrR1y;yYң|<keIum566|/u`|D#7yWlN9Wdux&m ?b3㉊wYU\#(b)neuE&70-[V3QtN 3ZYA%Z2|ēcN P~+6&&_ZzϞ |7Ik e6+nkb]ucѻ|ڂ]BAR"!z2\1|y\;Vda^51*Z\T1K<:<ni{=屴͸вf*YԡN+ ^dtDjP/NgN̜tIfp8ƨ 4^x#,H%wO弫oުh_l~7p&H<+c܋#e{ /Kf{X^b?sZ&"+eEU8n /OS"Ͽj~}&s/!b5x:fYI ')qJIZv2qB#ܳȮ:;թ UW!/kWUuvUoohB}Y0'oKlkbYEgOƒ7k'Myƒ|QmM;$JT%W=SS@;GaeTwt/Pڶ[Z2U"Ig =Z.#UIof5%=*@Cb^^gGL*c\($il\_=BJ=q’O73)h˜*?!T\5mJW.gUU9 N]oiQMA&5}W=Be \(- B=AI1kDQ EV`)f6]%A~]gmd9o6TȋRhY!i>}jJ#B_8/3-[}+ 76K伫rzX2es mًX)z-ѿ޴.2*7j\u8o}y&lj cKk M{Q@lZivk>kcM&+h<)L|͘,ĸ[!$-P H~%8F !d:Ma 3-`OrQ/uqÂٝh{iͅo L@4e0R|NDz3SHoAs%3q[kC]Dd8yyĴ;>)Nq\/{/>x܄?M̦;QXĕDžfӕ-gS"+ՆK*ݧ:qtlH}9Kd 5AFD>)I &|clf/t`*sB"rUڣe+BPk#4NޠcCгƓ4K8w4-&AV΍5FIH{yJdD^7̤ۡ4Ib &(^tckf<*JqҊ+L2鬚|Msq6aL1}MpG5]q W缩-ZI.1%7r 4o/,ˤJ 51z^'Y7R|"\5FJ_m{t\hS<(i=ɉ*lٿ/k]5v?v3|Q-LY=^#࿃$;s ֒*OgܗQskDEhmk1^Sj2Ɠ\T|-$'/rT%]ndd F+S`X@_'Ik /nsrLpңGJc#BIx6U9 ۓxV(LQvzqrk##A~ȉt;)chօ,5ryo@H<ᦸ^>PͱotDž!q;|G,t QZK@{c2YYBBX/ZKYpgh g,E7ɧ)zkE?BHTUBcٞoٛrIA%kbq8o.|Ǵvc;"?AD^!tVN9DžXz(n鋮vr&$÷kfHildLG>^pr%%Iu.ǴW&s8DxP{~{8]sEՕ|Rk/L+CH]SzT:f1?-]e>+}~8BHFGXyyotVCyK=Bw ]Gk -Y&^R0gi3i9Q,պ8bTE̱E-77]5eTPu^W{'!XRch9vɞ^>b&BtriZ]o>B(?0FA"|x;2IX"δ,F 7lV*}>3F!'2"eckt0R_oP+=LoabgRԃ$BYfq: wL :>#'D;g{Ft4j1%>_{mMLN!Fr,NgMlvxyobkk#5 ,1%2JDi9MP896J3@!6pS|q[ֿq?k=4bq͜K49*sF - 5br%d ZMkiZ0wȿrzi:CO*nEI5dOm=-v*,3!i>6qZwX3ι0ړƯ:QFcS>"ӕ߰[$ x7^AIuOﺮ:isMa*1)lv֏9>>v]FE"yo-I<²}YsAoa6~:bmM ?!$BV!yK s"?:%y}8,7,%ϰX./z>uhhe=;4'5!\LK vX4!K2XOv&9sWr%RB. Cn@O{Vgҹ|*j#Sj؁ےm p5?[Ĥ}f+r}y!E_Lg*g zzO?CsR oamMH}VlT׺+-jZ(܇9}R?!x~p` LfYK{)y1|Y2rf\Pu^#IF[xs%9>ctbЄ&&* hl6Ep+:{>vAabMmzpY ²XRqۍ7EP? J8jy{Ed2Ίk/ ]=ˆ,~! ro|hmd?? {'Ɍ9G8ڄá) \5TOTjjLӃwei\WTh9[tjlv4^^l_eGGG,^LYy=̈\_Lig;/L"fuqљT2iח}Z?{CT-tIuAߤ`u>ȐPomd Z{݆%w~S6 e>ty>0ә#5me\|*gl0q UO:P$ $a UA~QRjlv IxσFp3O[>+Ureu2qOǴ̐RJ9fjK%5nv;pA|=q.J5=ޖ8yYt9}Qh]%5uN ո;?5[rǖO@)/t`_0h MGJiJY?nBt&Z2*6Kh5 7R$Y_WiA]IӘ~) Tb) !=OWֿ-樥͒U>c4qZOp˛&~v?|+E"]d D>bB#y ˳=TWuYOq~-bDƓ>tef*8K*.%t0ݝQ_,Ҳ! Vh7S۰ 0l6J{^<~1σslחFwA%jƞNP7Lm"~,?<8FV,͘W5mUMsy=tN|ZO^cUB}'6|Yze^fc=†G51Ltldx}ޛb6ح/k )͉Wn/]=2ƠDUzN}sG}cImOhe%m4BwfXr9B> IDAT7shݧtm/^(!?pɧYuyq uZy u?fLmɧeC;ڢ[K"0q².yLda*2"ν46^ԛԧYm!u1(Zv. d_q$_]IS͜][3~{y+sNu/ )U2_/Blm+ZT#Dv\G ޳T΍8=,z#uK#ښ{ьޟ3_p]tcPX tF.Ԥմ&`M٫(iXhcU]rQ?DQ}ѝ@bsVW'yIi%mM i-aO[93OYSbD]8BhDwbeD|F"DR_d8U1nŶY׏W>WXPْWOq_~a]qӕ_}4{XOILՆ̐2>!"BHwÙm̲$m3b1ٻ'c >=zzwwF}haN?LTQWu#+Ԟۖ0a"Ƿ42^X]S 2mEOoO4T4S*>~/Mfn{'+v!,|2ݱr0!0dƺ]X;|yfɳBhuB`zH|;F:&bj iA.LV ?5zvՎ̦+[Q/JBof&Icblj\/Bմ1+CwlӞGE鏓wZoʙO8ㄕ 5ſpʁaypXYik6L`\|4-=2!G w$O>8ހHW@JAJAJAJAJAJA:1|/] @;ȕ\ @;߻֡ߐH$U55"yJyjbbCHɧP4:/>8֟)QommrJAJv}Kݸq#ݻw͓ߢߘXF&,-ݧKKKu\wu}?J~[0.qqεuu={z^ W޽]>ݻwk*sڵk uzp;ckk;gΜW~P!/_rV[XX׾gUl=moo.}>uhM%$<}R7m~:ԡ0h4ZZZZZZPCKR:>v%k׭e/k7o,*"_ɓ>lذa奥U^^~ׯ_]to6uDX/ƌ)|ddd1 gUQQqݻva%3<<,-,vkKOB;s g``PQ^^YU5s 7 d2yCC- ͿfC6(`+ * #i6.-GJ8<Oڈ$Ҙ1ck,--=2"LSWWwqv!H˗/ɂ:Z""ded'MH訦}6ep00fn>JJiMM-O$O6 ֿUV555 `%M||xxs%jjj .vM`!!CWΟ?_]]}vU ૝>}ڵk!"Dokuu~~~'mm&)Iɼ+WTTT]|GYY۷֯D"5IQYUM!ݷOEY!7k$$$߿O$TGcD/^ڳwY0;7;%9e䈑ao-[]ǻ. =_,#?=]ݧO۷@_ ݻ.]5Djkksttܳg_~mըQ6Xxq\B99c"+##edYvԨ5k-Y!t oooPhW޼uk.؟'ny555H;vlWWh;]`~,-,_ѧݿwfz(^kCH4402#7jnn{^tLLee%B#jj[6oZn=]>8ҞwY>R_zLP_=feZ4ƇWeBҟ 9xA'!>~߾}7$$d͖͛l`0wXaRrk׬^z݊_Wdeeݺ>pp=zh[[ZZZhh T*u(ի޹sc!Jnѣ{z8p#6o'k=~A/֭]C-Zp კ(a?|k++F{;'O<}/,,!ɑBKK 98ao_<5Jguu˗O<1;vl۶ !FR+**B1vvuM缼nO0au cNSS`H @ p^4 )**f].w[Y#}<}ڡL]aI+W,Q7u`psѻ/kF9Dsڒ 3Kyhea- y/{)ViW'3]J,y+8!D|q 5cUnWH+ĚctY{s:)̛7ӳHQIbûb޽}ZrBh%7nHH:FQQkcoA/BH$PLMLgfzx#n݊"L&BFegg:uH"IKKO2׎!k+kMM t̽$%%EP:AQ())~ yV3Se˖r:a`ʕEEErrr˖-}vEyESs˗}q͏ލJOO߶}ׅ/YzU#?gϞ89?oB(++x6ZmuFޡx-pmb0^Iw|\E6n8mCN:BoleiM'..z6^WNNy~]O>|3׮g귽n!N<(As h444'89oؾOss<ϟ;K ,<?lذ$F+++^#SR,-BBBGu󦦖'Ȩ ;zDGGW.\-Wynu󞞩bIJJ:ׯ)+` !v ߼q}_{cc|< &遡͛N>:㼽kKRl)Ia 4nhZyv˒7ѥԵ.{>NU -+nB)WδI5T|x_BK=}m]SDIOe8Μ)j>e˖sz2)1 !8ښb"MJ"EEDc: kĈ9<ȘK/Ҭ../_t HHHx7 rrr~D77CCC'%%5wΜ.: H& &͙;kXz`qiZ݅i5 vڛ|q:#\gԞRUAF[(r%ΛR yGP}y3VYD_g,/(F|BĐѷrEI%ulVzmjbΞ=cnnAR Lƹ^z2?={D"͟9UՊ i鵵5>>>s Zutttdr/&&~K/!.ԩp\\=Ņd&%% 33 O/(PQV c/4РОœ\\yy(rYYٚ6 ???Fa>`v7%240tsr+MYׁOs# qho_̘Yl)֟]u=d&.-\[H$AD?=nmE>+F\q>;q\jj׭]WP/**:wzo;{^]BhO<ۨH5U˗ h_D۲yKm]9sB';t萋 //-;ݻwwa_aa}C۷w7yͺkJ_ zx? xɕ< xݘ}E&siliiyADTJXXXB\<&6#'m׹g&BhM_i욵ƹ8766 %Ĺ3kiiR222D"557c46v1\LMLL_F 練D?Gy? RN?ʲr:D"SgMfe!QGW_Otsr)F۹kMKKٵs q|jBlΘ&>+v! GH ƪ6d謹Ho~fHi:B_YNPDYMqvׯEDDJKjkkgt/YWGJ}nMaÆݻwҢɞ  32r)"AArIIP!%$$Ξ;lGyرctW[ZZbiaOOO=wD$.Y!χ Ƌꁠ`II p(Q]իW7n --Cpݻ>pí<]<2$[|)}}=}}wnus0fΜΝd2QK<}I dPXxxw~9Qb7i)QU,&ܣ`BQsdD^貎dCޫcTxY6RAnW>;i/.Xp5kױX,Y z;_֑ IDAT͇ aSݿdVҥKOTLLMMUk3fIK}o=1z_ӧ:C":򝁡QrhW.u9H|5&YZZ4 `_{:[jjJ }^|vǏc+!GOӴ&}rلE u,MtsݷoV2p ?Ӵte%JC>8ϏL&Ϛr%t^ v|p:J55CE&x\c tz^u7*jD""ȕ>8 Wr% Wr% Wr% W?3:?8q|{^*O WЎg9?wvCߣmC+(7o<3!2r%,x0:hPOeKo9|x5o\I@@ :Qzl[:eܹs* ~dddW|H`ƍ7oM[I57B6"W͡#/D|ŧ:_(]t/_|vKCCǏLLL:oB`ҒAJ>;׹|q syCӣ $BeeeyyyEEÉDb?n7_^t!fj8Cc u9sB/;yK&:1P7o.\Νr-//?rOx$l?6 4钲SdrNNoKqvr"9Iv(x=cmz|[^MogZfff=THNN\ɏpp6k~gwdm>ѐ+`[Kp eeeeeeFmŅB6o^_dqAH8;8;9r$eKlݺ !$$$o?ȹNcBmذa07K99.\{~~\sPP#Bp=RWWOII.++DϧAHHHZZF]]}c.9r$'7!9EPPddDJJʯpqvnhh}vrJ2Bh.KCvwCKKXTT/p…… q ^xCd2!5h[122}%MM͊A#((x#GlhhwQVV%޿udNy~4bþ_5oUVVaz22x!=_f׏qrʡt];wy^޵s^^^ ^^^l6ϝP?~H[GEE+**vWGK[;#= 999gϞR̞tYc?oo۷ \];i}־UJQTdP]{^)Y}wBم,ٵW*4SM5s"5s?3Ιs>oHHÒ%!s5~DG;-4nnnvffPuu߃UAAAo2 $ost]. ֭ЎOİX,G_VZ%+++PLJȒ۷^b;MΝ;&VT0J={%%'3!OCu$*j(QTT\v.NJJf<۷Wߞ%BS5Ugдqޯ ={VSS.>zKJڹ+1)`^7UXX1ӧ>d]|yrf?ܱcE=wRR?'fkτ۷o׿%(Bhi)PWS#֕۱c=l54t-yh%''Ϟ8_竩}1;;)O jlmxq2oL,(<|i~ ּS~~~AaAL Uݻv͞x->~z||li͛7-td0vv9bjj*pWod5\.'0oZ~zS\II%pJ?:IRuΜ? FX'Jh]#nڝ?s%z϶O)(PAh\ ]Ej8l E mKJNvuu@rgϞݧOǏKKKgd+(*7o֯_A-! SZi~ãUT2eĉ 44T@?P(o=ܳw &LH&)vlD; vsp?ylݧO Frss_O?77فsmהk)***~6g\===9997&}#docijjoӔ-̍{4{jh&W#3tuuW\F"MSXPGFmos~;g`xupqv3G [ZspI,_O.Nk #z>>TƟ#___㖗<~ypJ3/0Mp>: #ִ^ 99/<]\\D;'!ɱ]o#@)s}pY񐢐5d(eq$@Ɵ=KJJ,**$ҾZp ޽{]¬Sjhh())OE?޺‚'O[N},X0Do>}~7֕+hQy9TSoi-fEKϼ<7MJNL\_={VpFSG<uHԑ }-ى?!:1Ѣ!%Vڲ^w@f-ێ%ܺohhVRjjꔩSxEjTWW?u~̵_v9svtѢE 9]\\—W0PTT4oՋ0s澽{%K睚.KKK?|۱7! HO8+DDYIA5˴GN4ʪ{'O`6!C^~ՌPw33?!س^,+4tIaa}nrSs2fğD_s1-Zt;"`gAaA=򻴴+g͎9!8ؔD A5bوS'O εf0FjJb3=== t…YVEyE!yKez 9Rl`dٽk!YYEEΟ;wCIIvvDI2"$]2a„ &4oP<ݱB$]OJ d@6\#u%7צE_+~%b"JSǻm۶CCzz-~lvuk/!(!vY[[[t..M/\pY2V\ѼȲ*pVshɲ*tIhyٳ gOJJӂH k:tqK&NXN郭AqI_])y 7-GU/0 $5 (J߇V"˭xV  'J޼|~&SVVvԩC 1СCf|Bx{_:6Y >d2t9sLw9xsTUT=x:MK;9RX\\1=BSdzX5Xee3) 1cGC.m;w~[n޲eV`SCm#e]i7lS&kG"n}4en*U?ўw\6mx֭5+W>clذ5_+*\~|smR}EM,"1c|Kvڄ8߸zIbNl7o`0a$|dY\ LUGUg`*=3Eԡsk:gź`$OL~wQK~x-|6w}Q/%\IQ%J|W_NXzK$J?X,{tpHM}V!oƍ5)4TYY9,,lΜ9#"V\e憎oիWk!7 L^5Cʞa#cؓ&(lF%J *ƒ䄄ė/_˗_}x?;v֭{C{%}fٻeIV5q6uaҸv*BK+J+Qөs߃^$ՕJ{&ˋU"ַ常֍ŋN^^މmw|W._&G{Aݺy߬VVRή%W"ojW\QWWXwر;wlQ۶o2eqQE`֓\SS{m6o䕫V_8(ؼe lYE@ь ?O7nlϞ=7Q"BIIB ;vv6m̟/t Ț52~ys}ݚ*뛓d2m[9͉D$!P"E!ӕ;z}C=t[W:b:{|7/(|ix{o}sUw77-->_:t(**|.a04MFFFSKʪתUFYw[W\ӧ޽{KHcmlֽ'޺=-rEa*3krՆN({ٵhNMN@uuL=}Yrwn;;dg=v,Դ[5v$Kz~X@"4-+ET0!Au%"0Sbr7y YbӧOijh88:ֻS՟?fX!Kqi>_Z޽w{ر'Oe}||(o|0N#`Ndz@miʤC/H;>g^^7Wg2 :u0UjFMlRΐ(M,~_E~c"㊪_8%%' \|Qy+;Z7/?IEEO>|Z[K˓dРC ^ޞ-yo۾mر\.cǎAAAp/,4Fu7_+e;U> )w*_=P^ &-Y;~ͫWi`hhjնȭ—u}1gϝʊŋ)))YqI|s"m3Q"//_PP`u q3(((oۅHz IDAT%nno[}GG{2핹ٗ=w-\"~~S(ׯmokgn~H45,-,&LЪfeeo"bhBp|2_/,(ֲk ,֗՜E;t$k׶lټ{.~Ƚog~w(hVg޿hfu )^2hqOVwRfþ̖/_27J(3"DIBݳgϋ^/ VѓBHD_W%NFFFeeEϞl6ٳϞ=[1P[ ŰNC>Ĵ[)Ek*~uI֓GЊ <+Al2j(Q"[WTΦyAKRO6皚ZDIYeә wRr.p!윜'KPME^5SSUgBAȢITkJ Ǐmmmi4ZJ^nȏ"**+I`E !00pϞ=fϪߜ &J,J0QX˖^ZZ(UUUI)(!:6Hp_ | +22gK>J>J61Uj 4BHMW"H?#~,l9yFPU-1o+WLLJ=]%e,0\8G@=9L}$䩓+Wz,Yҷo_BhB```6)#IĹ 'J%xzmYV,D .!QHS3096Du?^GƵSߢ~[S!}!]ir+WlJCb8r/EMUX[܀YwQPPؽkhڈt qCұ|F;F#\I>}D'~$GKth6oώ?}j0%h"t}ta=;H:P5SLUI{$U[.$kI"Pш?>C@} =zbZuGPS°I!@!B!jC0WB!B!i-ׯt?/|B!B5JZEْ!B!B́spB!B! 1pB!B`] B!B!+A!B!s%!B!B_P 6pxǸ\.rϟ?K2dP;GO-B#JJJ !B!!H$BPT*P(%JC03$9BGtCD!BdHRT2,(!6DJJ aB-H< B!\ B! %_P(t QB$;B7+8B!H$)Х DpBH*h{n B!BHRB]b VB{H< B!$5/NH$ 1"B?z-B# !B!r%ҥBC=H".B!a] B!B- ީM/2BCsU}w8~MLͯ[F$/B!BJ+GF B}Ixh9:\G֫kcU5~X!BN*B y J(ZPPEﻯ_Br*gq[hl"B!BZ$wEwmj.|˼nu%kt紫y̶څB!P"~%+1ъʴ@JJk׮˖-sκ]reժU/_7o^HHh]UUw^sss?~1cD{NܻG߈|ϕ`B!P">X ***Lhff&鈾HII6mÇmll򲲲D~˗忤F0JB!Bm .QTEE#F;v֭[̕p\26hcc]vڵ~z H$Qÿu%!B6gTo񅆚@NNmjj*񨚚ڡCwޝ⢫۵k@nnq UWW@ddifΜ9hР~|Ν;wﮣQTTHH={LHH?0m4MMMMMMuuu99/^ݻ̺tB\'GFFN4iڴi}~H,Y$,, ݻׯ_?==QF}H͔ lOA z6B!B5Ju%Ul.]}v.3uR(xiFF9r#?|pnjs1~u-[ .\dll}XhwСäIo߾zꆢrpp9s݌3ˆL:D<гg3g߿ƍÇ?~<\~ӧ~~~7o477?~dd͛z())ݻw|߿O~~~aa!eǎ;wڵÇFFFԈ r{^S\t?27n=z?1d2gϞ~iiix̙3JJJ͔DM qgƏrcbb&MD3&\.W@gϐł#=p2J_m%B!B}Mu%H >--^z%$$ݒUWW7:::33s:::>|HťKRRRh4A:tСC>D"͘1cĕEFٷo_Kزe{_gffv+WDDDٳ׬Y#[鉕P"~~py?)@n.ځqD񳍄bG!BV+AgkkqWQQqź\zF__֖lٲf._|ƌ J^^FUWW?~`N<`0JKKckkK"㓒f#G_IMMMOOo+&LhѢHFqȑgϞ@^^ޝ;wM9.j:~D\Y\טsq 2u_c;*=`] B!B}]ɲ.uE6vm)YYӧO+++&&&fĉ򞞞FRΝ ޼yɓg͚N8ѷo_ qꥬhѢ+((899=zfuԉ&*** ??Ɔc׮]My|w``M6m0aBIIIǎ)EM$(*ӄ %G!B!Ԧ/K{*)**"6/(B"+ooׯ_Ŷ՛(iHs[ B!BJ0$VWW/]tΜ9(J`] B!B-~%+== vk&&J,~%/^tuuUUU޽{pp`dqZjlC+y Z5uTUUնn#B!$f_JS!ĥK077C(c?пxl#DjÇܹs oniiY[[&;;;""۷/źrJ݇*++oݺUZZJt5.^heemB!JB֮J222/_ݻwoذ˙cƌx ,,,33qttvZ݇M>{{F!Bg ~%!Ըvݯ$..\RZZ?h``pA###pΝZ&Н;wՍ>ƍB!º뺒֖t _3d۷oۻ =zuKKKqB!PJB֮@\\\Cl߾D"@߾}I$Dos皙)**;vLh'/֭ڵKOOJ:884tD6DxѣGpuGkjjݻ&8爈33+VTWW nse۷o[ZZRT}}QFIKKYf76B!BmWsp~+8JB"QEhDq5Ɉ#~w_~JJJ<ػweˈ܊>uttFill\PPWTT4o}?yٳgSL/T^^ޭ[7~;p999}3#K.ݳgϧOH$ O>#6m7ox/^|QN=zŋ-[&üy9D*++|3~B!Wvݯ#{{ϝ;ӧOM|iWVRR4iRAA555MI;˽y&hVB]]]?}'J@^^~ٲe)*4{lxÅ333D B!j_ BHu۷,--wann^Z3MD+x&IJJ6pUUÇ... r0xQSV70XtiݟUjjjKB!+A[{+xC*++# q8dT0`~"99hVB511?zm6xf  2d&FB!PDnIA4ޯFEEE~_U[[{С .ld}[Ž^ -222}ZϞ=DEEX,7nOh555IOOf߿y۷:t)22R0B! 4N#08\5J P<>Z"Unbb"8Q{TohvdȐ!}MNNՓ'OׯBr[+vZ``;wJw]\\ Y,ӃF9uT]]]ii邂b&^dɂ N8tҾ}&$$uE!B6ԑX“L&x噑O8'QD1#H<.?x<qn! m#ԚYdIii'Oz|]Ս:u/d29>>˗ ,z?cƌ&%%5agg={]r;A!BH_-xO<oB)//ٳg悉]773g$$$TWWTUU----cǎU`8g!BGdTeI5$]?2,xx@QbBB;CꎴM#f̘Q\\ԩ|dddZJ$7YXX=Ꚛz1KKK@ZZ`̚5ؽ{ے"B!B]jNo&/uOp#bQW"0BjDTwt}="辡SN3g /..yfnnܹsǏ߬O>ݺu[reuư7oK,tss;wݻwn:`BP]]%"""..nѢEuo߾1cƄz*22SN=QYY9w܈QFu%///** BCC[B!r%eo-]n;? RcJW]+uVLLLtt/\ܿxxxnF"Ν;7k֬M6x3gÇ|g͚bc```mm-++Ʀv!C}NOOۻ;wNLL\|իMLL͛7k֬N: F"''GPC%hhhܼys۶mt:SNC 300WB!đWW9\ף~%&zd-ŋĨup,Unjj*8Q{upTUU%"B!BgE-֕ BJy@ЮJB!B?z(6ޯ<{F&H". @`%IąB!BJHkߐ[$S!ĥW/nj:DۿG$B!B`] j֕Vu%!B JP+A!BeXWu%`] B!B-j|۵kWBB !AAAÇo7C߾}/_ܡCITu!Ih͛#͛k'YYY;wla0Hl#5:8=tI֒!BHbɕj]IvvԩSǍw YY٬|SNرc+Yf툭7\Wht}m^^:PO#!BJBCC}}}zիWvE\M5rneeռ=7ϻw^󈡮L&d Tj=FCju%!BXddddffNLDNӯ\wލ7~ѣG>}uֶ_F!up>|0bĈܓ'O\֭[p#F}?8<1~̙-[>}:77w…>>>?nQ :8!BLu%tttttttrr///"Wbݹ\ӧTܹs_~$iԨQ$JR(7o@׮]:ɓ'544ƌs.h"YYY%%ӧ[:99@x<^xxܹs555SSSlDrrrp8>|<9s̢E޽w^DRu%ǎqvv33h }\ºB!P[&~%;v|=%N#F+++ikkXTTDP444h4 b2ܡCBٽ{u۷p{+V˵ ߹qCZZ5>>Ǐ666c%urss^C]t%no۶mqbWR>fݻ'MLLwJKKq޺!j!WB!jĺN^T}||H$?A 濼zhVV[[guuu`:::QVVV qqqۡCAGX,Vuu5$;X۶m6l&O~:֥FRo޼)+++ի,Ybnn޻wx$D KGG';;Ç"':88F:8!BXh 69s`TUU6lؕ+W޾}ۿRÆ `2l6{ǎJTVV>|уFq8z~bfׯeddlll"##lvQQʪٳ^^^r.]:o<~1էO.^񪪪4srri4Ö-[jjj8Ν;wX,MWZodۖI_oLL͛7իW:uvvvo߾%f6}ɓIVZ.\6dȐֈ+A!Beb+ggg={]F{tСwˤ͛7>Bج^Zho\.wÆ AAAZZZ_[7nܧOƌrvl2Xrexx}NFu =<<D"ֱٳ7otuu333uuuΝ;ϟ?x***#G:uTNNNh4.ܸq`tUUU___ii؂cll{wnnnpՄOO^z=|bzjذa|_`¿p>}4}uY[[kjj?~Ȉdnڴk׮mRRRn޼'+++"9a(++l(++WTT`?rrrEEE T*%hdee>pD"yyyx2UUU333ϭ|ٳ3KIIR`aaq"FB!8+A ºJo] ݺu533ՕF%$$ <8==}ʔ)@mm-y;D077Ą+))۷btRQQqi[[[]]]߿077$vUYYyȑ2߿֭[?nddDyzEPdee;tPZZrrr^zՋd;vĉxN277'H!$&&@lDjG&''?{F3JL 911K..~))) iӦIKK*ڧOѣG߻wu=!B +A֕Ittw襤LLLbbb޿z!Td2(rBkx͟?ٳgvvv&>t萿@]]sϟ?/"~dro>"~XSNm Bcccڀ={+O)++#nteee"(???"Od2l6QZB |/_LKK "HVVVׯ777:!HD Di N'f@MMMRRRFW_Iq~MNPCѣGrrrk֬!xbKK7R(SSSr Ɍ"dgg7a„Ǐ߸qCNNnʔ)MYYYlٲJR(___YYYKt rĉUVh4]#ԻO "TC"T=J4%~xD!jHt:]~w_=/aTs.\r J`M\TmCKY|5R"hjB|~t 4qW8f͚ uuu>{yĿ`B!i 50D_",mI֕VJڑgϞuܙH͛7$B!^u% }|[&Laϣo\nNN~ºB!P[&\W"x["-苷91<$I|JP `] B!B-E'x1pCiq$+-jvB!B'\W@gÚ?Ȯl V-ZV[o*VZ[mrݰVڪu[ōֽE(("( !$Tk|?OfNfμ!zzٷ}||>}jiixbPܮ]p+#F9;;ڵi ZzuHH_PPPUUӾ{n///[[۾}^vi<}U9~_VVV-//O۷ooccs#""zڵ:0-'ONmݺ>S8lmmܤt/_񱲲p˖-666C-++#TOOO+6tѣ...NNN={y󦹹yYY_u_511QvO?~|ܹi'O۷\.'#Glܸ166h޼yBp„ /--oU94H''ݻ/?lӦMzzzvvv=FEE]r%&&gϞ555>$" /(Ns )..>{ ѣG\rÇ_rENw…" ͛74ȕi:WDDl``0cƌL;;Lwu?~P ?~<'aÆݾ}~ŋr8ݻ9sp;wQ.]T94+yLMM,Y,HїYUVnnṉgΜٲeǍ9up]駟?^"$''; }A]])nhh0xtRLLLݻgee|`3MJbbbܹaÆ'OxB%%%C ۷ nعzj׮]CCCGX,}ܜyѺuj"suuXZZyfooox 04+_jjjnܸqر+V/7;;cǎ::#/1c {?...tccci˖-%%%nnn!io&&&@.OޥKEݿ_n@«CL'N\t)%%%%%?􌏏W <<<:tI˗_zu׮]͜6''G@Dzrڵkǎѣ7p@\DWWuܸqW^%E_n۶m.߯YFzL@@K}??[n?> '[[s}wǏoȓ'O޼y3===...$$DUBL'OvᘘTUU=yD f BJؘΜ9S\\y'NbŊlD>lذ/^\pA" BU~JD"skݻ'F7rS__aPXUU/͛geeկ_˗kNAcCnz~~~-"E_cΝ;goo߽{\| FQTTDD,5 <ۛ;;:taԨQ˗/OOO 433 ]\^r%fJɥ$IH?kVDtauǎU.h%"M[ 0u1%},i98z%Т Wl[Dc@KJ͐++5A P PJ͐++5A P PJ͐++5Aج\I_w"JOȕ WlhdDȕ+5Aج\6~݈kg[0J@M+6nH$,3H$eX,&ՙ?jFВ3AEu[OXkF]Dre:X-p timȕ Wl&+}#:9hB`Wʕ׬Mtimȕ Wl&+ćiUU5u$XDiJ J@M+6k4Wr$Ģ?8<6ŒM0M[Wpti:h݃l~mJh.x)Kr-ڨ HngDD$s 땀``3Eȕr%cVL IDAT6ȕ)+A+A P PJ͐++5A P PJ͐++5A P PJ4+pj5X$;;{ĉ/^$"ssҿaPPÇUR:̟?fݺu.7"`3J@)J޽;`N:n߾ͻe7oeggGDDk"-@،q,-+M[,SN1c_|l|EbXGGtQmmm^^ޫR5wQ84Y,Jlncc3tв2"JMM\n]@@?왝=d}FDD̜9>$ŋ %wa Yݣ=׭[fii)o4+sNFFFDDw/_cee%A% W\aee5k,~gƠ5k}Dtҥ=zٍ5"##o̙󎏏ρƌ2:"Olmm;&{"Pܮ]pDgϞq]xyŋU2u`WWWٞ {ss!C344ɓ' ݺu0a|ܠ$whZ*sM:t`oovZ Figg֭b+6spx<ޅ ,,,6o4fgg;88$&&>~999)))vJMM-))?~Z?>i`4777&dѣG\rÇ_r}YD|/%%%SN2wcǎ/۷`ћ7owvv^hCll짟~zGΝ;7++K$fff^~k֬![ܿk׮gihh{nzz8iҤ߿lԩ7o477/++믕UrԩK޿ 'OLNNvpp?>M4iӦMkӿCRûvJLLy OF,2`…ƍDX:+qttԩӤI^۽{?qpp]lsӁH$ڽ{u]]]񪪪tuu=<<`/ J :88 <8==]%Hmfee[PP0nܸ={tҥi!!!fff<zљ5k֩Sح[7"rrrzyxK.\f7S]3G5eee%-R"幹~vؑʲd=z$a4a„gϞ@*3;FFu'v֭SN/^e&N);j\.7//O ?ٳgZ>rɓ7oLOO ifOSSS3/Zn]]]ͼ~9s;n̤=3Gmۖ䔕=}YdҤIcǎUg~{h WһwoDWYeaaQ__/]FꫯʊTؕtj*<!!/766 x>}kժUvvvm۶e ۷o_nM>>>>>9/^8881??O>MUXٳ홣 bccmfkkˤ'^r%ǎ[rsd"Ν;m۶uss/'vmddԽ{:ܾ}v9uԁyxxHVv ƴi>cKKO>yBǴiӌkֈݻw[[[[[[_zÇ+V066={lz`9 k gr\"zme|>\rx'N|l?ʎ9r3Ν;}S4^IȀRiiiM~ݸqy=ydfM"5kIʺ߲e˖-[(''3KmV./]e%z%aÆ5]ӧ̷F,"266޶mlʰW^?_qB²|ݻ]]]?.8}ӧ7Lo5} 6lذAY%LJ=M6Mn3f03;SNNNNT柌ts ooc/IM<|P$5%$??m۶FFF̦SUU42&]&3Ý71);C__yallt%V^WSScمu͙9n"200 yw9¬Lsrr駟E_>((X Hw|]v%%%W]Qaaa>,--8qbFFFel༺jHQFᩩѣGI:\ [ii鯿* kkk/_ަMΝ;k$5J"""Ǝ+cKKKEDC eOf]Ç4͜B[8pɓr)kkO*[i/{Ξ=,fLR {%KFsggg0۷>(DGرᄈٲe˞={T"Uz%###cccxEUUUcǎ0`;nKX4@,X]v:uȈ$+p8?cvv"=z333/_ά5G}cǎK.=<***77WQv e,-----+**UW333[x'OΟ?W_Vg=z4Xo3KYXX>yDv׮]H$܊1c^zСgϞmٲ%''g̘1{---}W_}ѣ ebbccckjjܤIVQxKs%otɁ2++j˿M7\I3wKRͬآ ǒ\gnnܐ\8qbSN]lq\===Àhʔ)?4iRqqsڶm~~~KHO~ekk}fee5=A\\\xx-[\\\֮]+ ?o>OJY.\pQQQnݒNttt>Ӈkn^^^|?wwx33/^߿̙:::ݻwOJJ˭(<-ZrJ===???#u؆,0YxH"!$?64#]:v쨭rA$/s)+RPP?͏.ek ,(,,lЀi0WjJ$y54os m>~LPv,( GGPwsӦ56WJ@MԲ^.54P|zZ""‚?&A/^PvTP@DDϞ efR6DDOPΔFDDKׯQa!C. Z:9L:M땀J@T^ YC\.54UVCZQm-ѣGP9Q^q8djJDDCm[!kkbLp'Uiڴyt쬬PFs%}ۛ^~L>WْJ69\6m^uFz|hW_&hĤѦEM+F5ttl@m݃3=!W WjJT\mL̨˼ .[0WjJT=86-zukS#h +5Qz%(W^' n. PJs%emq@ې+5Ar%u 5]hr%&ȕJWWn-ͻyCD,&H"XL"@`Fs%׫+'?LH$$لL69\6m^u{HѥktweDDii6ꂷ±$עJ~QI8K 땀``3mȕ!Wj\ J+A P PJ͐++5A P PJ͐++5A P PJʹ+ϟ2eqǎW\SJh&W积ߪU+77+Wj"922r̙rs]bVgCLӹׯ}׮]߽{7.XKcӧO?{۹sJ6CLӹ)SL6/h׮i޽ ՞TEcjժG቉X,VyA[+6h$---===""B] XZZ޻w###.۷ot i,W2zhkk뀀#GDݻw[N__uСs>r:|1bXM8qŊ$>>>==}ذa{?xD"IIIa&f``3WBDAAAcWaÆ(-{{{++>I,HEEE=z};v8&&f֭?~|A+6TVVJ7:ukeeX 6spC͜^ƞgm6sp4xh98e`!WjJ͐++5A P PJ͕tomB\ PJ͕%B\ r%fJȴg bC`3D"dl1\"0b5QyIvj-i?3d[Q%m@$+QKt{Mچ\ r%fײ>*O h>ТW̕Tg>Bqcƒ%"Kt7rRRD_X. Pc+ϕoސ~_H(D"pHXDX"+h."Ժ$2) nd#mUo1s8D~ti:h݃#fNݖii6ꂷD-ڨ HnDJDnɰ^ +6iڄ\ 0+5AL\ r%@`3J@)J@M+6CB`3J@)J@M+6CB`3J@)J@M+6t#GT[dd̙3U{jx]ɕ憇M6M ߹st5jtܹs 9$J4+:tロuΝqƩsP9 J)SzxI\ƌ3^7ׯK7srrԞ={aȕi4WYYYnlllkk;zhv*\I^^Ǎ׺ukKKaÆ1ҹD"ݭW^7nDDT__޵kTG! r%f͕8;;K$6 °0ggvڅ7=֭[=<O>n"w><**o߾ߗܹCD7otwwa&555#:O>SL)//oŋz=a„7r%f͕㏳f d޽믿&&&rȑ;v={6--ڵkD4gΜgϚB\ _f_=sL˗߿w^"zʕ+\2f̘k2innnՋvZϞ={l޸qԔ\/]djjo>͛nݺW~WoA!J4#FiӦ{111Dd``0cƌL;;; ~XhM֭Lr)"r=ګW/fgϞgΜqqq122":.[__ĉԤH$.]x<:Zȕi4Wbjjzȑŋs88 &={arK$u%**bbb&LG9j(V4+122_6mDD[ne4iW_}խ[͛7_3fL۶myW{zz b%>}thhy׮]!"Xvڢ"33ٳg[YYg+6TVVJ7j}H"D$RKDر͒DDŭ\KAAf0Xȏ.[_G -o<Z <L ƞ- +6CB`3J@)J@M+6CB`3J@)J@M+6CB`Fs%=} x PJ͕p5++5Aجqd@m=}9L .[2J@M+6nH$ H`XLD¼盶ѩsکi-ڨ z qĒF-ڨ HnD6)\0-vYFxm!"J3$/iYmϕȾQ~aDt[ՁV!Wjp,ɵh."JO[VHKmz%& +ϕ\(Y}UHH""$b@`Fs%3J>ȟ8" -+WApti:h݃h*5DI4WҴEu[OXkF]Drs%3JH-+5z%f:+"J@m+6S8W\ !Wj\ r%r%&ȕ!WJ!Wj\ r%r%&ȕ!WJ!Wj\ r%r%&ȕi!WrҥbȑiiiСC,>|Xٱs522=ԩSە4˕dggO8ŋxyiiP CLӹQFeeeݻwwywӕ"##ϟsh&Wrt)%%po-r%f\E) KD"ѬY)S0-s)))Y`A||>}Ʊc$&&yyyt0G,7myL:uƌ_|ٯ_7XNnrD^ui4Wٳɓ'6N>ٳՇ xd +W𰲲5kl'?KAA|U>sP(VQQј1c\\\ϟ_WWSKKŋQAAȑ#oݺED555~cTa% JܹuֹYZZ2(#Fsvv޵kgϞիwrr2Әkmm=nܸ7,T`3Wdttt ˗_x_-)):u=%%eܹǎozرc-,,m&(|}}333_~5k͛eee_X,2dHAA… Ǎ'nZ__s]ݿA땤ʵڵ+55dDǏϝ;Jv;wL6m޼yD?~7~ϟRA^ Fs%BP%mXDm6+++OOO`ܸq{ҥc###WZiKrr@ 7o377_lYttQ׮]khhp8"(++9;;';i WRWWg``дUUUzxxQnǏWTT*ݺuѡC @DAAA~~~oX*r%f͕899eeeD"|"R UZZ*NOlڴwiX//ХKʞEXRR"wT^^^VVK%%%=>}Y[4+qpplϪUG<ի]v b=5;vСs?V^^^ǎ;aBȕi4W<(w 2D__uLT,,,ꫯ"##?ҥKܹlHo+++={ֿ==UV-Y?[I޽{K$7}kҤIcǎ%˗_zu׮]rQO.XҥKˢEF33r>=zRA+6hDOO/22?)//߸q}V^MD;w?|Ν;G͚5R(0&&&Glz, ŋKTE"ƍBaEEҥKPLLL޽i1bDtt43Ex7,T`3J(44tϞ=[noڷo,_< &|󍩩gϜ9#mwvv>|g}vܹfN=uT;;;浞^\\{ݿ3fQXX͛ bccmfkk뛝MDiii;w߿KqF";v={{{{{77իWUTT 6f;v 5k̞={РA/^tsszΜ9} h۶-ثW9s{<}߼TPJ8 ;$I"y!&ZCdxC/^;wǣBBBT-%"bVk)((Px?͏. -WQs%rZn}۷,4_vVUJR8ZQ++ izxhfh^ r%r%&ȕ!WJ!Wj\ r%r%&ȕ!WJ!Wj\ Yl` Wj\ Yu!"J\ r%fJww>0+O'[#6\ \ȕ WlƕݐH$: (H`XLD9ћک/xmF]S8ZQ\D/N& Bzh46J@M+6ϕȾW|DD4DsՁV!Wj\ +J>|}Mچ\ r%f .DGG?)/'"X,!b/Rȕ Wlhŋ35.ZZ*s)۴E{[L! G=8hDI 4WҴEu[OXkF]Drs%?2-+5z%fJ PJ͚{?.PJ͐++5A P PJ͐++5A P PJ͐++5Ar%Ϟ=SxISQQQ'N566xkU \K~~~Mw077/--m{N:+Ar%3gΔ`駟zYWWw0SN)))۷o766տtm\ӧ]?~|֭*4`7ʕlܸ155Uv䧟~={2u3f|vvv~K8qɓ tcgD,X@$̙3###\OD999 4h Yf9;;GGGK?Ν;]]]S WiӦ:ۯ]iȰ|; Figg-"Olmm; !Wl133;}7>ٳg?~\D ʵD __ׯ߾}{͚5[III+W~M/^|ʕݻKBrrrtuu^z});{qq Ν;GD .Ȉ?~NNۍ7A̕{ڮ , ={,\ё.[L,$,,lٲe׮]khhp8"(++9;;|jcc3w6m!က`9B &n_bŸqׯK/wܹ⟮_J̕?~<~u;dk׮=y_5~x!o>~'H֜?611i޼U*iӦ"?4o|X3yxxxxxhH_gҺ9R2^u;9J˗/O0AwSJJ;ѠA)S ! 2|N:]remڴС۷?OR̝;788^ߦMֱcǦM;vޮ]VZ]pAW +ׯߦMf̘aoo;n8OOOuj.XrU*ՙ3g\]]ׯ ;v?hooo>9wi>>>NNN!!!B1ϝ;ϓ'O{=777gg~_Z@q7lذVZZJ244ڵkqqqΝϤMO✜ڷo?k֬'Ol2**Jڵk?SDDěo٠Acǎ}''O.={|'N >}>>l`~РAȰ6mZff˗3eʔ͝ujcǎիW9rNiѢE^-[hѢ˗+VѣGFFFHHfk׮MKK &33ǏԩSgZ[SSSSSS7nʕ+\RM|%L5k궟>}:77wfffvvv:z;:: !:uԤIƍ !/]$ХK!o;l0!Dǎ/_\TTTJo񆗗{ϟ-GT_~^^^!!!*VItt̙3F+;wƍ 8aÆлwo7nXYY]zUkQlll.]࠻UP >\Pcffr_~ӳ_QAq77k׮T5ԠA{ZZlcc#-ԬYV#-}饗̄jW*lgg'-XYY=~R?f\u좰ݽ[%cǎBTVZ !ԩo穩zEկ_%??_sJ;vÇ7n\XXhjjuII=Ν;~~~?|1U.tռ6XuEEE~!C4۝4HJJrss3 [YBBn8::FFFvM133sΝ]v?~|I>x`ԩ/^trr~֬"{wE33u޽[p}b177?)S>{K>˨KZ-ƨ |%/ҥK'M7dgggee>|8...((HTFFFfffΙ3ت_hDaccsƍ|SSݻϜ93//066V BU}J۷… ܹ#8{+WSN}w-[,MLLT* t#fZEXZZmٲSl?Kffmf4?T|%L!_YյaÆ ,077777ߵkױc[nݾ}1cT 0 :t޽7~Ɋ+ܹS~}oo;vh=RVGզM@77ӧO'Nx?!DppSԝ;::N8M6;w[VoVڵz-=Sb9|ƍ]]]㏏>_ڋJșBzӪZ?R$^ݻBwW"UH"UQbQxN?.$D``2͕@ TJș+LfTCW@ȕDJ'J\ \ 9+Ļ U rV\IA͸Tȕ@OȕJZtUwz5 P( \ \ 93\Ѽ\Q(*JEsz3Wo^HdN= y͑bGPU=8Z7v`DJ'JYr%1ZU(ȕ@Oȕ̕a<@OȕUz{p=!W@ȕD rF%b<@OȕJΕ\}bvc!W=!W@*3W8>++ g++ BRhO>:D)TJzEXnn;W{%j^ kOHNE"WPvŎ%cBTd{~zXca WDSB @OU{phzȕ@OȕJ{U rF%"W=!W@ȕDJ'JșLs%ǏWׯ_ԓ +qvv˞>}I&Bxi` ꫯ[Nݾjժ;99M6͐$443vB33(777}ڪ@ѣey޽KLLܽ{G}ty!/lٲ_~… ؼy>.ȕ3Jtz> R+IOOaw~_FF:uJvڈggg;;qmݺU+Jً+B٥ !BCC,XЧOl!DDDDTTɓ'˗/7w}wzCovuu>}J%v/^ܹsg__^5v~߾}Fý{lmm͛_xQt;;;jHHHllt;vl޼MnܸѵkW''mN0!""B]ܹsϝ;wȑ@'''??ӧOK>|qРA3\Sȕ&Wi޽7n355]fMI3&55gϞ=s̤I XcU`\IJJʅ Ο?o޽[}ǡX7npss;t͛#"">+V####$$.^ح[7!ݻw֭+שSedޱcv9iҤׯT>}ѻvR蘚ڸqkצO\PƍVVVW^Blٲ%44CBPu%::z̙NNNVVV#F"-/r%TsErEDm)#C ~ǥٱcGJӱcGCTVTd<^kժ%-;99p9;;>Hڵ˖lٲO?ݱcGfͤuu666>u떗ҲzEկ_Ez֭[՟4111<<|رBJժUơuseTw/dDG嬬,uP(/bҤIaaa˖-KIIIMM]|5ZYYyxx۷Ok>v'Nر㯿ٳg֭6o\TTo߾]|B!=b.gϞ111-Cҷo߅ JgϞrJ߆|0_ 9o$$$;߿aÆݻw,XЬY_oʕ++*0L81<<_`ANM 6<}t׮]|ɓ'iF.IppSy[FYڵB;[& ѴrYfo믿nݺ=444**q?֭[,Y"5լYS7GGlj'iӦs}'NإK}RQڴi6}hFr%L0B?lZ-wޕdP_Bx}l=xxHNN֜J7n|3|-ZHT7)}tHՖ|s%0:c ۾}ǏJ={ׯ_?cWdJ aރS޽B4jhƮ8x9{^/Jj>(믿6p%TXj1F] ߃3{pP rVJ,yvh= =8ރ@ʟ+eZȕ@Oȕ Jty}*aJ'JYeJP0'JY߃*==8\ Jx+ gJP"\ 9#W1'JY%J>4΢rK++ g+IɎ`DJ'JșBPT-'d;IsOTBVu S6 yPFZ7G]ƫ@uԽ_z5/r7^R RڪZa`5+v,i."2O(4c0 +0_ 9+|%I'DzF|%+ g{*\ \ 9{pȕTiJ'J\ \ 9#W++ g2͕?~2{3L$ igg!?]Ʊcz/R&M7oڵ;p@OW͑+ g+j^.+n{<׾}ڷo/*vhѢ_ݻ/tuuB,^wٲeIKBIKZ-ƨ mr`JLLLLMMMMM+rcҲK.8?ٱctDQf?^^^yA)ȕ3WrΝ;;;;7l֭[Bŋ7l~ƌB(i'OI'NhժUzwbB5_InniӼ]]]CBBBHHS֭&M/^ܹsg__^ѣG#GtuuYpb…}_ԭ[߾}{k׮-Kׯo֬s۶mO:%5٭XG^^^ћ6mܹsƍ-[ƍ񉉉War&\ĉ铚z}ݺuiiiaaa%<`˗'%%yzzΜ9S+[=8ӦMyf\\͛7URӧk׮o^n?Í7:y戈KѳfR(oV˖-/mn 2DؠAk׮)/^+$$СCeȕ3J⋴ ._\ѼyݻgϞׯ_/[n}7YYY*J+x@ W@+9p@~~4MMM[n-M$ѬYH5HGgƍ"55]ܪ(󕘙 8psСz֭[߼yɓB۷oo۶,֪USN3g,((HMMnvڨQ;u1nܸΝ;'$$L4=2d޼y7n(**ڳgŋẉͻw>s̼؜|\ 93\WRi|8 !88X4mtɒ%aaaxYc{Fd\8pYfΝ[pҥK՛̙sٳg߹sGRYZZzTr%{%3PH.-O|%\T1=ʕ+G~葋˔)SBBB4vԩSNƪњ̵eTwJP*+7nܸq] W@Qރt[ԫnȕTm5+v,i."9#WR++ gϕx{ݦ WR++ gzMG&ի)o0* gϕr`DJ'JYr%fJ rVT1 rVc<@Ox9#W1'J=!W@ȕD rVɹ+X̮a,J'JYeJ'Wz}0"r%r%TsErEPT*GR(J)T+ x͑bGP=uD^͋a ]IH \>>VSjjj_ySNL6mر7ox֭>|VcvgϞejѢEk֬)eEIˡ/^,GAjh^( JRRG+pppptt_|!* 6o߾>|XU*U5_,ZLLLͽ|||u6bĈz=o?ehѢ.]3&%%ϟx>֭[/YDZ 5559rd޽ygΜo iK!7olڴi)YZZvEZz~+AHx+|xxxxvZjuiÇ;::4(??_cv7n|aJzdɒ3f̚5vRJ4iKFON6յB}.\PQPP/;W*v8q{aeeu !Dhh ~Hwhٸqr[ԩS;vtqqiܸ Fqد_M6͘1>++ؒ4i"pvvNHHСCN/dܸq>>>yȕ3W"pppС֭[5k֌9R];"##oߞ2y޽{߿>XbE=222BBBvرz#G?ԩS+9s\rEZݹsɓ''OJ_~姟~ڿ*Pk׮ŝ;w>B333))AgLKKBM6۷ T*Br͚5uHKKڵk۶m.]z}uvvv҂ǏOJ~\EEE/_nܸ3e\|0}t?\ݨ!>|njj{;99I &]o߾ffffW^:G{.i䨭[+o>VVVIIIZU6Bgj-X鹹M6Jݶm۽{JYVȕf[WsJ ň#qMҬ jRR٭[7L'ET+J܄&L;wnu/}.]{!DuԮ][ݕΝ; 7oן۹sgBB¿֭[w5,,Ah -[[n~~~FF ==]+|嗽{4i/>¢[n_|,yyyAAA%Tȑk\ɓ'OL`33͛p~iJ={4338p㳳 ̙ӡCk׮]/իٳN`qܹwFl2;)V#g/cMܺu4ȥKVZfccsƍZH977ܼ{3g+,,)KUFGz!D:uz9$,,l=zpss[bŞ={փ---O:5jԨ6mM>kc]ڵ{۵kwQ%v:v옻{֭۷o?f!g}6~N: 6j񮮮;wvuuU&L8p@vN\JU'NҥKpp}JJˁO>t萔㏓K.?111{-td={V̙eC;w5kVpp o.ݐSNӦM5jf͚1cL:zƌ۶m;s);vy___''h)TGN)oO޳jib WR++ g++ BRhoٱ~իos0@i)vt:]GaZȕ@Oȕ Jty}*aJ'JYeJP0'JY߃*==8\ Jx+ gJP"\ 9#W1'JY%J>4΢rK++ g+IɎ`DJ'JșBPT-'d;IsOTBVu S6 yPFZ7G]ƫ@uԽ_z5/r7^R RڪZa`5+v,i."2O(4c0 +0_ 9+|%I'DzF|%+ g{*\ \ 9{pȕTiJ'J\ \ 9#W++ g2͕\zwvvvz̮QfɕiF1--r_]zzf>f̘J?JA1Wo\~4hPua\ɕ+WO͖׬YR:={90炄\ 9cڵkYYYcǎvvv0`3)***ŕJ*WՅ+ V* 6o߾R:&͛\+ gr̕xzzm޼YĉZW^~߿/oҤܹs'L0l0ξO7nOLL)44> J+*2Xd۷o葴ۨQ#i5"""**JZ>ydPPx Ϙ1CcooooooccS~#G:99>}Z&L )((2"W@+y7l0nܸ>}\vMjLNN0`˓<==gΜ):::FDD !ըQ_״i233/_gϞ)S$$$HGٳ7n"J:tuViu͚5#G,}ݺuiiiaaaBK.edd4jhʕk׮MKK |nHTT?ܼyqիW/Z~...RHGM2ɩҺ9R2^uҫy1l\Z=lmm/]0vkPoѢEk~~YBBe)G$=*@P1"::zǏdii$++K>tA-Zhqqq#FX|SNx񢓓k֬>|x-tU (v,i.B;wnŊ999111999}ٸqfTiCƍ?Si ssݻϜ93//0666''Ҫ 6_dȐ!111~~~͚5;x`AAPxׯnɓ'BytE!??_PHGIV^o_tG1_ 9|%;vqqqYfͮ]ԩӴi%K9;;[Th0`o*XΝ;ޱciGXDQN^z9R 6 ޽Ԙٽ{w''S^ҥKK.ݺu?^~'iӦsu7ߜ:ujϞ=SRR*#)4jBC!EZ޽-䴅J%TJR U(R RXBy$Їgdi<e'G,s% JP}+ gr2aJP}0_ 9#W++ gJP"r%r%7vJ6r%r%9#WR++ gϕx{ݦ WR++ g++ BRhiѳIGjJv+[/ yPFZ7G]ƫ@uW<ڿ++ gʕ*aJ'JYeJP0'JY߃*==8\ Jx+ gJP"\ 9#W1'JY%JOwa,J'JYeJ%Wz}0"r%r%TsErEPT*L>w$^J^JTZnn;W{%j^ kHxdJ*T \++M:;;dkVhiiciNZR7~u7խ[W}ÇBc !T*tϮ矛7o>}tjEHxWKŰs%kݼy^^{5''IIIB++GI%͛/5jj;ʭO>vT?YOvbC%B/]!ptt,KN$??Ĉ˗/}KZ-ƨ |%NNNSN(**8p֭[=*tҪU}]!Df~G!wܩ>ƍAAAiii[l)**z30!BCCO8q1!>d4HJu…իW2Dѷo߅ ޹sGq+WytR:+ gDm̘1֭oO5ׇn\=RI*uizCxL:G.^u J~ӫy1(GpVJIsږ^D/2^WɹDʸlno0^ +6kx%gfIp`WlA=C`r%r%'ȕ!W:!Wz\ r%r%'ȕ1W2jԨUV\O>dyyy͜gNJJJZ6˕N2E(ZZZzzz.[Uf׊3|Ak׮1cka`ȕ1W2xSN޼yyz̙P.vZWWZ(467o===~j={_j>݉'Nf{I!Wl\ɠAΝ;'ˉH*}IKKczP"1bik-j\ɔ)SNpBgggkk~-\eRTMdnn>lذfsTTT^Rȕ1WeaaIDΝׯ4rʀHg5QQQ|ѣ[C(j $===BatttQQ\.+(( :ܼy{MD~Zk_ m+zjNNٳK$;;ׯ3OtQffҥK\h1e#y˗/3)))qqq#FHJJ׿5~xue|#Gvvvvvv:tz*mڴ˫K. ,P*k׮?x𠝝Ç̙3}qqq;vlYY:޺uK(=z`36J(,,9ydXXXhhӧܹs={m4pE?QRRҶmێ=_=x𠮮r/^֭[\\ KMM%cǎ S*~嗒?k׮yxx5*{aڵkҤIm1988yzz_JrԨQÇDϟ0aBsλᄏnݺ1cƜt܆/#Jؘ+!A1#'O ͭP'o}"wܙ,YRܶm---\%K._, t̙ͤ3y|Cq8k׮Q^Zqٯ r%\.y\UUNDqqq=zرcѺvFFF\.WJOOdFFF "//oΝcƌaB+QQQ}%"gg砠 &k׮ &?~&&fҤI꾞W r%f,͕ |ST*եKNT*8d޽6l;rH+#A-//OTŅ RRRV򜜜3 njrJ;̐ B"=:!!ҥKDTTTy'Çfz B،"ƍ@ |2XT~_ts%AvܙֵkիWoܸP(Q/HSkT*M233߾;''۷oQppg}6jԨΝ;Jlll~~رcH.O6BM͑#G>裐 WW 0w 377ܹszzz޽WZ5qD''zu=y<^RR҉'/_\ QeesDČШD,3f$Tv!"麷 *l"H=.LǎcF{mu1>Jѣo w]xlA< r%f +y OOlذs_\]]MkRW_9;;ƍv222fΜS``iN0T78 R)GA*%~Ӟ4=78ЎiIf*J@'JCجfJ7ÎW+6kydf;r%r%'ȕ8Pnߐ+=A  J͐++=A،@-ܹs8;;/ZH]bmmmoo7QEE3P(pႮ>|x)|M$00G&K͛x3uԩiG<_u$33G_Ul+6coõ/2 {!?_t{Ξ=믫'-++;tPn݆ vȑFs:tYJKK^YjӦM2V_.Zۛy:gΜ0VA،"211p8D\T>|\_TTIKK 8K.ݷoߥK4 ~\xd2cccǏܺukIIɶmۈhΜ9G.**:~z)7nLKK۵k}J+b /^p8?\R{z/Zkcȕ7W2l0fy1%Grcƌ 2669sCh֭-rttر)SB";to21K,9qDVVktA"p\}%}pE622޻w/?~Ek{ذa_|GDDprssR5ovM8ܜ~+W?󺺺7iߐ+6coȑ#RT*\)qvvfܹsgvvvvvvJ`ԩLY>|LgIB7f?j@aaa]]>ג2WBD}Qyy9k+&Nk۷oge|ݻw߰a?>}z8]HSÑ;2bu+ӊC،>>>JcccDqzz8&FFF|ٲeQQQ?xմe8Κ5k.\(J;LJ=yddd Js'Nl޼yL?bŊ4[.`?߿j]C،=ztBB3EQQѩSh̘1+Wd.V/_|MfbR)KKK׬Yӷo_ccݻw߿|ՔRӧ׬YcUd6ΕQhhh>}v<պhܸq_~;tkK(%%snnnuuu̬lsu݊ߏi~!Wl2Jzjժ':99EFFG}`SSSf˗ DdeexbGGǞ={$&&lnnީS(w96Ε0V\)HZw47رc&Lxd?1믿&]vxxxxxx;V#F̛7/""޽{ZQs,_%66V.ʦhǐ+63|z4*xPJA*)lODAXЃgH*-ôWo`X/eچAr%*@FۏWWl\ \ r%fȕNȕ Wl\UPnߐ+=AجoB}C`Jl I͞&ڠ+=A،DrHT6-ќ*oh/̼>s8=>8fȕNh'ȕ!W:= Wl\ z\ Y+JLӝMӝ[`(ȕ Wl֚EVr%'ȕq4h^)ʦ% ^]*X#&R(H 3/R{<:G.^u J~ӫy18$_uNu%Z$BEDy|ZRC E+1ּREsJ@O0^ WRy^J+=x%f/tJ7J@O+6{ WҾ!Wz\ r%r%'ȕ!W:!Wz\ {s%SL ˖-k%3 Wz\ Ks%7o߿{zzzaaO?k\ r%1A IDATf'+FFFJiI5jL2u 0Oׯ_V]<fj9uvccի999gn'\Gu9>>ڵk'M4͛!!!{.3geرeeeD7tP''ݻ߹s~ Wz\ +v횇Y?d2__윜'O=z)?vزe.^8`>,--7Xv-DqmذK.-"9s=VVVW㕀``36J\.󸪪ݝ̦O.nݺr-f;88ѠA|||(,,D8f̘ cc3g:t8NnnT*uuunȕ Wl\[^^3Ņ RRRJJJxoի뙗!fff33Gѝ;wongggggPYYT*ݻoذޮ Wz\ s%\.7!!իW{yy]zuǎ>>>͜}|||NNN;wѼ\122R*MK*7ĔȔsi9uv{4bbB`˕4QtO@`̕@;z\ Y l\۷;~„6r%'ȕ5+W-m]504J@O+6k0J:uΝ;JTT*JejjjJa4_s0WJŴF%QӧOoǩ##E˫ =}pgΝǏ/ZQ x%'جA_X,V?~|W+=x%fO6r%'ȕ=>8ڸBȕ Wl\ \ r%fȕNȕ Wl\ \ r%fȕNȕ Wl\ \ r%f/+zIS^^%<w}ٲeͿ"_91 J@O+6{\ٳg̘y}J^uኊĄ3gNXXX3'&'NL:CSȕ WlB5kdffjv޽{֬Y<O׫LLL|~>}='RUAAAO[JJJ***?=4\ r%f/+ԩÇ%LGɾ}lB(**jŊǏ'Pgggoo8***))yi&//.],X^˖-򲷷9sڵk>>rݻWVVfaaѥKgȕ Wl W"b1󸙹Cn666̃ݻ;w|) NODJO>%%%J) ӦMرc/_ޱcfV\ r%f r%]Տ+y^666:JqM/uyaaaΝ5tppHLL,-----}ClmmKKKu-t999[xqJ;\ r%f J}רyч]v8q_߿{3fʕ'˗/߼y4&&f̙r… Ddmm]PPP($ٳg˭}}}=zk}p@Op`QTNNN*JP(Jߊ܊6Pn~ D"''k3up8DG)^zmܸ֯_cF*2eJ>}V^ݹs_~111&&&k>4_G7ȕ@imKJ Q/""JDJ|B&=#֯[߿+BBB~ѯ2D\6*DiRc[a+ ƹY{ִΝ;L r%'ȕ5+Q f:~26kn M۷ \@`122ٳ5=^wx>8'Y\\.W( B.+ʺzC JJkllLDθ0~ Wz\ 3+Q񂃃ۼz`Hȕ Wl WQVV4W@U\ r%f Jzu֭FB4WҴֶĆnPtw޹rʵkjkk RT(666]'i^2?hZbKQex%fff} ̕dk׮ݽ{0Cx%'L}pԏ˫ܹsm]A0WzJʹGX^.;n8"*--m!Wz\ Yr%%mW504J' 6k\~ކ [E0J@O+6k\IYfq Jy شDszq(eWJ$uJR)HaCmSohQe&9[I*%)HE}p@Op`Wrt#+Ჹx%'ج<8sW3K\IJ@O0^  J^>8ȕoȕ Wl\ \ r%fȕNȕ WlfTYY\1lT" RWh{Oo*hm]4!8O~\hC LIaa!֮F%B@zJ^hh@O0^ r% r%fȕNh'ȕ!W:= Wl\ z\ r% r%fȕNh'ȕ!W:= Wl\ z\ r% r%fȕNh'ȕq4h^)ʦ%-[ncdZWWd)J7^l"2~|57U1T{yf%Y;uxc[iguhm]4WbXO9D3>u.>hkk˥?O9`"2G|gd5|e=0&o`[|r _箧AhmKJ Q/"6WFR-׍o7)lkE:a&O+161L:{_OKCx%fϕtr1W}GjuQ|pR_mxDt-މM+,F-iYi|ip>ח{$BKGgg$rW?w7{< rܯ_7^>o'̕3![iSV_+WgoW?["y$W?Jξ#Dto$ ߑc0J +u;p?O;)(K8=r ώ$4OY}ncy Ĭ t}`hk/.3|n/yՇ1'܅5gD7W^m?/D|w|]Η2|Ž~a.鵒ȕ+W۾s]˗D{ vr6st7|G W-}SI"J߼!{9yYcOk]V)Uwp:@EQu6e~e5Tٺul (Dd5kRԘsUMD|]{_'{YڙQq]n7,!Wl,Gb_ YڙY5i県n*wrBTwz梫#RLL-###3Kz2S3GfΫɀa}fVꒌ[n -2%߫{]]L=[g{gJvjf%>8fʕ4 626z=9Yޮ/8[h–_^T31ē˔5$_B~ vPYۃfGI]EWnig:="[rJ%iY "ztlfݠ!WlfJoTKȫKdť"DnͲp?)ʩ 3Dz 9 NV-L%5ڇRT /uW$2Lyt}{kVygJ2q{ BNS|ReLypoV?Q q~uT>8| {)ͻ߇mx#,S"zclIӤ2go~|בu[GOS=ψE~}uGMۍV aX}B`3q`=OMSU:wy53%(kudJ2jT`3J'tiT"===)p۷$iS;==D"6V Imee] 78MsMKZ(y鰼=T%ϗ**DqlCy'S{\]F%ۃJ:t.Ϥs Ae~`-K{bB{=}phx=``3J@'J͐+@O+6CtB{=A  `3J@'J͐+@O+6CtB{=AhcϞ@F>{84ޝ 4De9?\M*.7tZ=@`y=xLq=}J֘צ9K:}H){}H6]&2*8s^ mm*KI / vмKohBDN4rEC_Ǩc\ߙ:D%֞l=;#% 4+3KK++]:=!\2|EQEg [(4<~x:|NrBEuQ=KE_mj׾h{q_ xq u~/qVZWY [4z"}gM*8N YY|`3{&cҋxybωieH<}6EǕ|o9jG&q+,J;ul˙)q[InNy,~Ғ--<"9HVx?<ȓSwO/j!߿=q%yiDvB5wO_ܦbƏ?7tKMq#kIȨ8k~Um ES)uϞxε.Z/kQ{ŕ2H?"%"0k:$uqVyYԴՋ۫W.~\=9{hz.Gn#ɹ;i|b~dph/ * eHfO\7n|by79imC {x {Ϸt# & zRQ{-Uu4}ߩWCġ]vWۘqG8aIǵ |1;OF4v%]tEs-)tkr6&qF[['XmEHk>ٻ?/j?mя8cޅTu}6یҶs@H1Y((w,.825vz-r>5VsmG*0c7HQ~iW##>pvXMZQ(vkF?˄[J0$*Wv꒾~Ha#n8ۢ"vcG )f_*4Vd|qp s{DONάJ /JHfTޥYz}&'OI&"E?%ҺﺐQKŹEpnZ;E0(nl[  .xLӨ:uYRMLg|$7/ˢ+UDD`$6f[r=fʥJ̅9ؔe굶ʉHt{ˀKdbI剈r);I*R# B="VPMDOʙ{Xl¨+}>_|g3MkjV)˦o IDATDwaeɔ~⋻4juݩ{|(ww0cC>[{cG7jxzm3&ʱKG^qSL^s}]\9:`Ϡ!1[hd$华`ClL=<]mZۄw >LKkC'6_$5| `01?&hJԌ)!#3c7V8wzZR=ǬbȠeg\&4=ܳ/n+r˥('6trL{&{[',_f_5yGo{$a:5\Im]4A,jŏZH]F/T4;y[ŐmA 6,~HZڤ7{Dee#BM(* frLUNDx$KRW5VR8rs[VlA:J"׊J'g^j׶6Rk̦145_*=omsm3$-2CE'%9` O8rC-䱢ƙ<wz #wgyF]q4s~dLMKޒDE 8ĩfy valV MD˘|,E\n |nĆ'C1;[d<\AR=daIS>P>U/ .z -'{TqiN#7lv\8E~)Bs~^j] oio?Oc-uw_ex &59>ؙH+%W6Pdžyg H͗ FWeDˉ/yomoSm pe1CݝݍWJmzF7=(j4yqӿV0`g%)WR|WɏF-Ǩ jrM]=uO9>MkHۑJ&1Õ͹K[fK. WՉ+B"X}?nʊ_=$⺯$Ÿkn^q]ϐ{_ؘzJm vST*,ނ 1ݢEDD>l9 ?JgAD$*:3#|WM;\[3bd>|;fY$FHKlm,IҎrE1=nHu:by rK'_˳eD$q DD\Q3ܾ{"DssPy򥟦)'|[rlvzZ,C%JnlS%?l2" mŇ_C$4B5Y'k&ؽe/" 4܂/]}qևr-Hëryv^,.49yɷ3]?N,K:z[X$w'Tʙp:9 &9bͦ{/_`覭uM~sG3O5w & vPR%&"~wl\窏`9d̑jDJƥj)6"4/uj9siwqɂ+4sZO 6REK'KݣWx{uS祟:/xǕycͯeқdK+ܧoj7f w|<ysGL\=.DR7C%C&"Yݕ$-o5+k[*CI,,c9Qze7EBW=[ykTv*;$eHƇ#8t.v|ajY=:D)e@V>=e{ޤт>v[oη _EI\vyŽ8sי{?L>/#j\GR" #" _mܡޜ]"!c87[JI#H;|iyo?g gWKYQҥr2'mAx}7 5'8uZ,چGz{֜.犵I.EBZ躎g_Aqeo͵$xP#.)Fm,u_\J9I∕v#*2RMYOU6y'%1o{YD_zsv8c r*Wɢ-85)R4z=te<=uS= eۆ|8UD\G.ӡ.H#j/@͟C<_kMN v|q)Ϥsā wj:isq/X#j( MWn?4ͫWHö!?Ps/>x1QO<0efUr5|iлS*>Y0jt,Ӯ_.ߣ;f4GzJetejV~>ʉi,#؟! .8^RZKk/&:y\D8F7JWF$GkR⼅k zp嬏mD7g (b~@ϑx"kk[LfU755}os 1nKtE iRuhpBQ4Dx\d(I1.2m H(qcy-rј0V3䟼]"jnT"ʖϒ RR3LUMyw8qS~sOL/Æ;PJ͕}]ήԌM8x|{ \y1tm}׃,H8$xRM`5f9D9ө\u=K}O>7]2v#w6@*i2vInA7gEE|4lzcfÄ1p@[8@Rq`h4Sq~zsCPF֯̄"7~`ѫ ٵ0sy_w\uRFT4a%(G CNwjN* . M-E2QDe`+@c 14Q4 25Ko/P4mRx8~Rhj&*c-cFRk&;KQx/U|g:3\V˿󪮲cS=ܙ q)a&,9) W qw#{;:Hg4I=5mr+.joqJYyKXݶ鹙ͤ!#w\okd~6po~#YTΊdG-$'Q uq™lׄatw|1=}$ް;lZp9 SL\Z6vz`Hr ui2y /8!#\1]DP8{=VGrCyu;o/ξf q%i}gD?qOQ{ZH^ydک)^GiDKLA*4 DS I륔37۸| =UoVk2ڠ &SĤ֒v>l֨Ћ[ )U]3 >;?|PQo}J&L !a?tͯ߆ @alt<ږ;\d{s;"Y@-mbEGeVhlڷ|VYkA?w|EV7lÄz".&DN+'6 R\)_U{?ײ\]?Qԗj75- CNZ R{3E󣜃>2/  t<06>Asg 9+ŽI4)eI7 Lݾ߭ӼZm"}Ry]cf@ +kЫf}$Mi ,(TxU)8lA{2^>޻{Wޝ Cڋ)#qҌ:O;@QQCI][ͱ.mv2C͋o4imyG)2eqBK 8"Q6 hlep{XaY5pHȲjQEX]O&yZT ~`=|n41yʮw[V!pBW.EÕ)W?eo%e/+dHw+j*WOX6+IKgzfVr!ʶiv]S搊<*?&"c/r{*(D\pDoK䡀1d(e 4cL藭F&Am@R[C\*5|SQXk<\XO;I#]$M3sȿLTf60n| DƁ%H(n1$sI6*h ߷ۣyutwGVhT4Bkݽ^E๊lCZpA^CVUoVEɷ*wo-,t"9b`EyUL_U{\aRB DȍvP6{ZYhC:٫nVC]5zRuk'W RQЪ-Y,S!p!u!qa La\іgƇ')w('*pM,$X^@nն)iI2NQsm;1rK20HWD,1X-]w,)@ E`r#o5W 궗M(*SC;k3YWܰ4:'D5}2o;n͉Ry6՝㝚fW RE,ߐ*ntީ7:ɮ$OQ% `q_&PoX\ZCƛS9_cwMskcEujs=OrQXg4I?CLeȑLtSO Ik2RtS+ DEo|Ȫ=ɤd^w$63mOm@4ŽSV&ykwf`6sk_ym ۪H,[٤Q~Kzm0BswI )SX F-WaZ G 7@m,Lڮ ,| 4/9e7 n6VnCPFqm0#Q*55G\)$7YujLUb"f k>',%]2<7G/(e"%nPoP\&F3ˎ 1q4LChDv0 Oe`t{c[4Rv(DRq93 ISW)NQ.I%m r-!CG,;[Z՗ק0<>6~r/,Q!/hxmyEflmw~4v.D3{ m"mu )|u85|hWo 0c魰.y /&瓒gW3 dŎD";E/Ͼ`CṆxƕ&%vL_TR3;%; '%6O_ HIJQ ɪu{w4+.xg@x$ˌxEN ǟ<o:byJqnZ]r}@S|,ady^(Afʃ e6^ c$' !p6.A^<>Ħ\oNIhp) Y2F!8CSr+s%C9sq$# I,I9i (ƋgֵY209bw(.oW#U{Dfzw"#Qv5Vf*C@]QlʋS׭uē7Hx"o2hV-꘽E8)896`A'z0޷b<>cY-/go%=Ǣ2}'IBD;=Q Q= W>mɿco_.Qռw]:i,WWQ"5VӍ[KnC49.'8!}H.\ sBEVn_=-!T2FGeFwHxD}bz{XTT#TmVnm{ܩI2jX $ o?4촴 zw2؜KЬ&hA- h! cǾYo;jpBQǨD7ν۳uoT!QD?H?3Nr v tF@7gHcH sB?^$P0f8zI$Pe(sng:!38b@tIx#9 = NsDa.D[!%&%,o\l m#X70FLpHusm<ɇ?'jab"*4e_;7: Y唱A&pzZBY0f^X(X`V]ryqeZ0Gmpv*9uT)sbĦx!ɻiX'hVEq Cgd&\A)sd~/Iڛ{WK)h,o3C׏ΰr6ZxL +4kETrLqI ^N%fw tyZ{H/OOF3̸)EA_ؕ +c8 Hj8sVLYt$ܡo6KvW0p(ܮ͋&Mɑrd>`]Uy-1 Qsᲆ.Z$&DGg9y{Av hgoPeNr]^y H%N.ܖ˪KgU 2b8q۲E:ðQoSN6wkRdHI`@K:di/.'N!U )h g[=W%5-Wԫ>MY 2Wu|oM銢gߴ/@<+nz Qoi/z!?O $~ڠBw^:e];%;X&Fz,Ċ*8Hry ޭ8 QAPx) 5vt.>PO̙qɥq?24iD 9BڛcRqN.X23bEf64 B Cm@,u{n ѥ4&p~|g D7_i)*yp4u'=lzc,76oWJ #&7~X~P 0v^r7%ji+Q\PxlWP0r8 ]qi7ZQࣼ'Hs=ZW\hQK^̯eH X3,]Q!8$q7?tPffkz ,d3Ӽ8w!8 exȞwq]^:?i14S_?>8{*-!5 #~O9 J N8ASd3/^z)Sg_{S# {>|zy[~&.9iwr)aɣmsplD(䫷me;7CȀ&uژxU#N` IYql\=ݔ7_I0 f'<//V'-w{:eH4kN87~F'~(ꄭ_P/O+巫ʽMN\ysl95ƺ; RMZ!Jԍvg/x^k?pm9s* ƝHB,gMT{.'AKMcFw3V~{8Cġxm/!uT/6>M$r4M;}J R% V)lT<&ّ wZg`Ѡ|6KsHR(*׭Y9ɨު4>c^W2`lw)n8q}m4]3M| NsJiR4"58qi9Iy~}G L惘ʫ^h-.53>=bnɞU@*G;O'~﷟شƀ-bsܬ2JHX擷|o-6>Y~HBS}ZS6V$~F(j{·Rk; j=ضC`\`aP1ݐWv01/r,u),Y=07ez}ȂE!QݖΦ(xgw0EQV:5IOv]?lw]BpNaGhf*vtشn% DY^EE#.?:DV# ~# @(]ޅC-P9$zل7?r4$ d[ 6XB H%K|{]m }'Fxm{> =9ՃXB9nbSDQ*9ۛBS E"v )]kn"@&e3椊qZ<l@\]^œ&ebGzfiO?~J\wIRlS2,1V/WI`fui$wg@zF5ګq&E JueӍ@ܰ_n^>Qw70ҹ7ĺ""Дڑl[!#G! ޯwiBg]M{UA3޿$~=3x/7,-fO vDAD>Os߼bHrp.8(ˈOݝX>VB4wUʲnTNZ~S>hNٱr;&xoWDZg^ԽBDu4JH_]E ^|c$ٿ[ps\9K=r!^ꖳ,ig-6߾a,|9uEkG_=@5P ө= HsSߜx<{s\\[?wu9̘hGMѨD|pCIHsߙO"vDAD JomwvSc󕐱203nrX~\ŎKAl USKGpQ3j%q@*;mDkIENDB`artifacts/screenshot/screenshot-2021.png000066400000000000000000003262031516101623200204630ustar00rootroot00000000000000PNG  IHDR}csBITOtEXtSoftwaregnome-screenshot> IDATxy\T? sfePaADFE\SK35M+_L+-_]{\*\[djVbn`"" zf1 9s|98s>H!4t$C 81_o?V؉qb$^v؟>aLܨS: +a߯)tՖ-owz6Fg ZYD Cda:͊$^f<7rqUd?q .xJEpxkD1).ّ.IzfێB#nEiU;Vmu?w]_0fә/`[џu2"݈NT1biIsu$zvA h6MDĪj5UW+v}7h .Sq'12""-'E$Fߜ7W %Ύ$}]o14 jM8zUcv_W1.!+sĒHLx{~ފ̸_< _->{ӮKu1=DM!?jQj:?GFmzNU[:vV ߴj=KI '0꼔6o>!g(fiOU7vlzNND^M񕺊H{yc-ۙڽjݑVU2i%m/(S{zy"R8ÃݻN1v7xQyqν͆!ED|$N^Z񄿇3_RS7'U=z76mJsJ4]-ܮ*GCDFnXkͱvrJB&IC-znXo ,.ciYs#?*ԗN_X4* KklfMZ?-KiOX"I[wBM=Onl)6ӆb.g=G>\Fki ZUtߘu}xSN4ܴlvz>GDW—aȩ_oIGo{{oǭXdɪ,g?ʤi@6M 5Z~/o߸[='Ɏ۴nTtċKVmJwu? \9MpHh4ZQu[ euyvv={KOUW'w,4M듑GKr$S^^|=FLO,˲,Kr`m}TiU[x1K1:yDXZY]zRs$)ju0.^R*K֫am;iTr&ԗN}ƍߨ.tod_F7TjΏ~)؅("l6,VkXk%Ƴ b˞wgG/y#rEΥ ZlmX^>~I:ZJD7~k&iKIe"Ed0ȫڥNsuQVklRPg'Ao;VTEֳ^_mfm C6QS[۲%EDR%LY4nQTQDLpdę*j|R&Ɖaq }P`S[bE/Xk)KĬkUurre(ҭ̔cUĈ=z]jz*En)g?ՎaY+Dظd6#6:6bvFn2O'"KU+FLݽF}vGݾnUDD6_#:{Ek#w< i{GD"fEM~@ynlCwCӸۚ)Z ,D8gVUNLX*}gc~nrݵgҊ C]씁=P>7=XTӸ ,_};cSu.XlGrUϦWͬ[L,˂1KC躭;ыHZA.5xPe}oeQVT鳶.^w↓Nڴ=EsDRd\툪D:2i4b[njeC/ Ck5i7MRzwKl7DDvKKV}9Z|MKVgغDE+"gGkpv$~x""bD6~J#o%{?얚۰ NY7(Pʦ77!YUJ#qn:ԍi ˪H$clJgR(lT/W^z`6ȟv)}SR]b)CFV.=:p3OHجM~j_}Nj"k$F]-!3yߧNm8?vhݐ..E3Xb|.3wT5;gOi YEJ=΍zZ\9kMI]N.޾^&/"g> 'ɤ.T@Klllq5z֮^'uh6%X?vveG?о_mdut3Q@,"UY~1)b(=&.ţ=nl>Eo/->ݖG]>.ODgЊbV)Y;#*E1~zS_Y`QK;)nGn]'JIl)%ot*E[R=Ɵҷ8tF茉ۣ2gD#"UYe[/=нXHd'1=B"U 1[D$flߴ{тǼ̨ _]GF""՜7eW]i%[c<~>U yBNoXk%jE1;﵈T-z9bک|^>hrhm/N3,THsέB~hΌRMD'iW62뚯1KZ?9vT3)o$m_kZRo*eY~+\̨݆wE{} < N```g{FTטEKmZe.;'Us෷,`7-ݜl.}m g&52:?M:3]ۃ]50:D[BjH@@@:! /{c?!4t$C   hH@@@:d&FU%/WPAvQg^ʫtRՋoe: ;._l6ѝRJjM{ @1yddzP^YӫX6>}Eg``W7PQQa4B >1ЕU̲ڛk yr;>!DE'P/h C-ԽyfUƤ}_QE>cVr(LY!2Ņn^f.c\VjUzdSZ*#V]7T+*wJ{)h XYґv~se#gIzlFMam[cr %=7`ǔp>1!-n3SB(oǰ٭Ȥ ;9#^ؐz;[V{U9cJxM+ M?tt Z9pLٕOZb[*Y SXQKM}\=3scg:{MY;hILN4{+'~A>cz7kQ mDϋx} x9<^K1a~;ΎYL@tdς/fg>dVPjGk3#4[dd*- AY7P. \j>KebmHMDU*/g$?LSϊ\}[<{3}P*/2vn୊5P+d^*%@pL7_ѾC*9O6D&"sEyzrrv!Go0q6z Ǩ6ZME׻vըjk+ݺ::|C߀\h2UoJ+f kR5jv> dzzLv9bpcڜD:0vGf4LNq҅!T]15C 11W3LD͔fvTU_b@÷&T3Jk$Rk2]#jt9%"g}+*_d"38\I7..qv5nU^[]QPp_|ò4Vc_F :t,wMDҚ%A"9UDڊo>N,ψР ao4̓|KS+ŠR[Vɼ&+@LyBTjJf}cMfLHkvsX^>2XSû*:\D5&1: C\ːBsZer_={j%+Yp߄Y5Dn dQ~̪1t'7BWSjTrJ\TaKo|N5#/^S>#=x>5{BDBp}U0.=gTM0J&td~]""ܠioH%Q$D]csc&DʎyDt O&\S~'!Yc1 ߴgLl9r}" 8q@#"ebU:vyjr>~jM0`S8l6+5r9*KMxTx6UAgwA>Ԙ%:q}í Mɪ9+ 7n<a wpVU>LxkcЬAAƂج}Aa+hg\ޓ scJO' IDATYÏ];<ID<ֵv5i,/dpLs?$b[K7s/a<2v6q[&aƟM![G쾄ZC8>x_B S޺cygܲ?ˌ&WȔ "":r)|+_WIӾ23WD<®`>k&&0WQՆ^}^;6pޣd?u_$<_1Kд{$IDf9lS4]9 ކ'>ث]$Ho=[[&*=EMG:ɛf`&!Y]lB,ogOa;G:w{؄%/ߚq>ه~a5xmp)x49Jq̗kg٘eD6t߄Y QЖ9k1ӯ'bEn 두ՔU.MUŶV掅=d/^ 1M]הgHbg\#oգ 5|kkCC+UqsHFV 45c!qjk+tffXߡKD<.K ^ICӛGZ+Kݫhyuc[] Dl'wX"c{YR'ɩ`. Y'U cX%\8\ܨgFÙjνx"n^ꅫZ w,dL[*ZU@pseg|o^9U%kJ_9dHelYW#ݴJx=+G[JB8(nS٩LDMKDUGoOPz940ξ)*dW+l#/=3zWwkn, ^Q ՞nº0򲊈TpRK]"((r]I:"p[nۀuEI€Y]tѠ:d(,r/gnBQֽPt5m %WI84O<=G;|UzcQ}k=hyzcq xMt 2$6&+YLDI76)i&"Zp7g{k D$9>Ud"]mņR#OI`H ED:e5Ya]y 6;ME9X"Xpt4? ˠ kHܻ f!vp.}lfGFث#j5jósњ0 FdFiФˊ:&KC@d(t jtkЕ!2j,´!*Ue,P($"LHD?;B$誏GhYse;vKS~dUC=9J5~a uоKNr*XW]/Pj3e_m}iWl|⽕+{ "{EMU G*"_ u /)*<|6"2*>;6@]޴ 짲'iX""OdZiu%PcICg45{!DWחVϽHtN[C%`/fp}.ݝË ZzX7 XLfΑBGF~M9޹el[gn2!]!J2߿?ikجx,#uoX<(td~oمViyb N/Ѓ$B Mc-=Z`ZHN|!T-o˔{g69M熄MҚVW[C,P94wTUՖGNVU b5WènfX6}@dȐtsߔB״CՕi6ZWU shXr ub}fy(¾z.!3gĒ{J*diIF[SxW츣M~ktBWO.%BL0Je"*K&ţ?>x!t0uKtF:q?ԃC$dl1wj8*oݑl"Q0Jr.ck86B.$(B",+Б0dYo(! ['IWPg2p!"iT}UtYdY.AN(r |~O_HG߃έѲ}o]MR od)g~:$7ge׬#S,RZܒ[7h6y0΃%'""5s>Ϥ6Yrm2eav<"YT]ōש)MM#!"ٵ:eIo%fuĸDdr1u]\kj#o]Ŷ``'9\ډ»Z}P1m&n>AGM;50 W/]pLd6f޶DΜeW(.izt>jĀS jkuRW6'oNDd:,̯ϚϷfL!-9S*8罥7>5WGDZ eA6 iqQ̴OƠV%|ҕs̿:-:hu!Og#?V~+ۮvqkP7S&; 5ꂯ4PWr@mL^UKDmUگb?&D}]?PH[}›ǟt[w!(}uf믈nup^9r(sc3|~.qvLggL\9nb,oG\_WhKϯW-AAABӧoY :/lHz:[q-_f`e:Бyd6vF[[>[;ݴueL lLtL9Ç x F5ԯԆ :u3_gooϲ&lõU]K̘zbtF:7'gW69VoН97sH/>o:'!LD|9#7ofH@[%5dJO f|oo^拓 :;sLF#:fBI(ή)g"GTUUmݏ'88:9;88vD)*ϛ=x2/eJۚr~W2+:Od0"jFBnc,B͆OJ_p]hʆ{m;0ke{ryn+tNcn܍F`#tѫ.WUUUi\qyjrm(/A,pfk׾$]S8iF$8!(GXRVڣ{k&PUK4J-)J6<NP%%ŧNn$F[Q,p-׈)8*8 L7QݽשYQb֪aޠ7PFFNs+711Ν;&)J ˲]^d?4Lx!_lJ|y"݅3FUUհAؚ&3)***fCƎսښ3a4_ ӽ>dFg'[Vk0|h0pXLFC@nk'|֬]˭RQ8p2..ᒫ׮ŕWwVHvnnHH=lg2fXaa O?wvP+v̙|hƌgΜ錸7^o.֨6UQQͮ]Kx}]*P552qg(xUв͙=}ٹʇFz|՗oƁ;>`O?tGސɓ' \^~utE6eY²'>"ze~_Trr]TT>c!1T<"d^匄Le m* TGUK Zٯ[[xKcqǷWYIIɓ'WɓO>BD۶m|ܺ==_599{≞>>mkjj9P(z0a<Ǜl6s8۷xjx<ǧO/Y?ټ7eʔԯ`2~W=k_,IJJxÆ ##GvjtQ߿t==-Kvuyꩧi޽{wҹy}y2EyfMH$ЈLΑ7;{O`3'xwMϐnΝIJKKkԩS[l)//G %$Z|^ߺu_ݧO4Mnnݺ}玲;w|}}KJKm۶{o//\>2g#?ްq {ڵvwkUVV֛acˆJzO73 'd1Ǥ\Hx3{#~}?׭[W^^ygww " |:֬] H8qĉ'vggBeaacΞ=[ ,_\\\jkk'LpQ''sҤIG&O!g>UC߽ >䓁DhѢ^=VXID>`2ގ|~[n_Ź˲eo5J[Æ]tkŊ׽?OzsgҖ`ht5kV0~~.^H:[o=BQ} ?_gիtv n΋=cZm2bwVTBG&`47b睷]{ˉO}-gƺ*t5㎻:4-5uڵkĉcF3͏3v6pBZq޽[njO,o߾qƕݹ3{'z"?ϓ͛ws?=ztE۷o|Wz"z'2^tM_>mظiM+Vl(Q?hswBرEx.wDkW޾)K}6Z>4ttllEϟO;vg E%ИyjhFMDGz~g(p@Ν?7}zH#4omh4;;f?h4m*2 %"?JNQYiI=t~-|I6D"ѰaR.8c#YSl:sIǙ;G@6T{mU~c㉈'#hkw~DjMk}?}Dw8u/\{n[ пK]voT*";h4%">oYȵ@ "׬ht:]yofkkakA IDATVOsmgkVkhƍ6n4iҜ9s{h X^=P[v=+ɉ-w_/ã;eY&''{tyRxΝ;fsJR?ɤI6l7O< ÇUէOzcrrCHHHY;Hyj+vם;DT\\1޼,8Ѷ]%ZV ŽtRTXt "**,ҥoDݾb{iN?wZpg/(xK-y7~QYYٿ~?? ϟ{'lr*ٳ_l|fԆ'$ʼv7ѭ[9>?tttҨキr??(WáׯkZwwzjD~L0[^M& 癙z_},a|ft Ț}䠻L<Y.\GYVm=uzʕO.ěI{ /W̒L^F;=P!:1MR2vi_O|0Ι$~S~6^v";<;u۩GhmE={zQJJʬYe+]vu7ޔH$ڵk.]{Igg--cL`Gcǎ5xsro~ꩺ,=|^?fLgsO>\]]]>g̨/bkpw櫬/Ə EK̐ń_p++kϞݖVVfUWWo޴ׇ o211y?%OJj>i}ĉ55okik9ysH]…w9qSq3sOJJ}.҈mƍ?'˗lllL323g~;jKOM--۷ofy<8q&O>ٸaàAio^n1c W^5p94{%KI͹{O>O߾Oڳġ /++Kr޽?iij.^򽪪i;G.[RC_//ʕ5}ZA-^($ Z_²vݥkou"m<)Qw2pB?Ğu擨 IOɽ_|2wa"J?.n""M?_*"^Vݔ>=g=+2Ieu˚*5s111w%$y&&F%%%};ۈ??߂M,믿￿7-?aBEEkn‹/R~ŋ{Vֵۏ?XUUˌ̌{WKS3??uN&:߿gih蚵k*aΝD%-Y>}zy'''"1b=檪~[ӫAcxǑ<غSN6669jiИO\NKKNNzUUUUbbb|~%qOOژ?[RRr:'xm[\~nq_kΎ= LM#TTTLMM>xМ#dq;eeeYZZ)Gӧ%&5 jFMGSN#4xpU:>,|:GqU"zՕ+WFQrrҗhabbxj]]wKD1έ[Dt;ADdnnnjڧӧZZִ}7h "bij7g:KFOIIkn_{ۏPVVڵd*++ۏ7ȸq@=zs3uuAƍ=e}^*] zk89[o[n"}+}OwWɼX5'!|!&Nt$pP.SNDJsgU ]2h}jfZܼW_'S&Oʹa;v$$$\rw˗/?~»w#"iӦ)+):wa}}o%DƏ?f{)44p{)STTT{kXX3?`Eqʔ)߇t{A*** cccw^q:F8$ IW:NgI;ewшvn<\}v:.nU#5wttܼys``1 ~*G[[L|'CC+Wv0AҎCں`̘1L&?BJmœs7m`iiٷ_?wdff,Z*).}djIwuQLҹR QUUsTVV޼0euu[jjj UbZMKUs"9XXXhh`$ 9}:' ݺv5K(VVVpEWWWJs t-, Pn"իWٷnIDW\=s&^[K{/^<~] %n]˗ʵQ\\M!ummmqc%uKs55ƺ?Qee? Aƍr/ʧd]H=(,DldgDwW$"/z+([eV_Y\<Gt5$tI'ޱ}G==?C|y믿ʤV@e55:ğ\6uڴ5g`SWWN:#361IK{LDŶc޽38c^"_8^j6RrWFy=RVz3>hyC֟CA":,4ȗ\=tP z\))ˬҥg$ >NN"ZZͿfz#3L>3fZUR4[4 _hJJJo.d~vzϙ3x3sұcJKK5G::T8={zDVU>tذK8uի裏zۮN Rf۷޽{oЮZ򯿲+++[Θ1c/_llŴ<[plA07M%|s nߘg6JVtPuBzG1BpeC5 <8k&N lgϞ3СC|M#'kf ]X{nK] hx qnW^UWW73|uF;{86lK@Fat3=zTyfc_)vmܸ+W]VmaaaeeZڵYfӷ .\8abbb^W| {W0!ioJT8`<A0[UUU)\={ѼysN2E___$$&nݺE򣺺zͦ\\]뿍-ʝΜ9WTğ;wN3h>fzN]ms7'7ϙÑasss(##OԼ@v&tuF[OۣQTԴhKK+.7Onb;0.{O[5շގ=z>6=dZ-Nufnn.׿sN#5Wٳ'}g -}^Q{#''''''5-urȠ]]ù8}^{"bXk׮߰ahE.g N ͗sw׮={ Ç'".Њ߲VgqqLLL233||>@}գkQ" uHHLLKK tqv v n:h )++KOO0`@޽_ۯ_'O߿RBDNN b~~A''G9T SV["caa)ډX>}=*sܙDeVq Mccq$N׮[b)h{,ܺuK@@@{N:oqǎ r/r-8u_׳cÁk%u|=XΟ?cGG?dny&Fy{Li->RpBB|իvS`BcbbH|@ PdMTMk;:=sZSص:t9)Mbͺ%*:qb*U]ۀo@[tIWʹ֫nNZc+:7'Mϒ◱%Ё R"V?Y'-:7`^ߎzYYYM0A_$0477w6OhH9 5;v8;˳,YzptL)zzzyÆRLSS=Ovj7*jCw4~P=SNgj~={ tvČũgJX "*?P{)ܮ?~Ӧ -EŋV~D$JZ̉4;==Lq&"^_svHu7|8@7'}&"i {ao_o1w&s\ckIsn7U YmmQT8hyĕr;N{3\]l\budh<}V}3g:r]&8Q_;v+7_jZ38"] ]/4mKD DD$G\}}?J>L$|FD/ 3U Z$cUgj;vx{{{{7;s؄Tj1-_>dȐV/m~3o߮3}37iM p/rő M0A;dTOsK]qvjXvz٥|>?--'''7CbNxN!ϪUdC!]&"C?Keu8:::rKذ0!if7+ADDT1k,q< bjZUN]ɠ򜜻EEEVVVO:)-uԖ(L?8^eֽ~ϫdZ\+;_{Yg._|m7+++l E544ܺe/oߞuEjxݟn:-P\]d7sO}˚=,O巎t̨t}恻N,twskRAAɷ2Wv︁Byӱm{M k#WWUWWTT n TWWd&ƺG}}}wKwc)O,9ck j8fX+,,z;Դ=$k$šթSjo#(1..1ѭ]wr)>$=nX(heQ8}ck+li3E++&%r&&&T IDAT?"Ç]N fddf̼c1Cf}It5~[/_N:nDZz"VC 8MI9A DKnJJʑN: O.O?zy}~ӧ/|YMDsUYg1H 2dJJ٩"DD$ Ū)))G7|S !|qqQnJ @}ËsqpRVZ2555dV\233g~;s3<C;|WҘTj2#f/n~SED KInw+ ޕMDgɻ))%%ީM-8mVUf_BmݲŬɋ'R[ԟ]\ݻ[Ntƃ^\^kL5o^wv&6~ƑL{y֑yvQ4*&oND魨CիΝQ3g5`@୬,H^ k; KKKܼi|ꞓkbhE,&Srqe?*zT*Ie׹YkiU3Ʈ}nD_MiqT8;s܋.(%w^{!tTfV}7P>~)>DOeNկ>ZZ$ ~$Goj=WF| L0!t{Bb]Q/پ}PX~{κ_A۷N1{eˉ:Τ Ff RSٓ| Bݣ D ^ E.:B^a174W^xfGEEXbʕl6ŋDI~խsԦ. Kw"Qqav!CGza  "-slte4x5""RU%A!P`c56hpr=VgrʦӮޕ4ڠuuDD G簯8#ry5;&YJ`M>2ŌEDSw'da];qכּ1t#zcpw*))G;5zRmK]QQ |$YPPi,($゜5@wv'"́_L<}6]4CDc}׶ 8v+ y%U8D111q***.Zt (&=*4"~+$edժ9y?|`sg1?k͉zRe?}^s85jkkg۶E̛㎝-199w=*;w:Uۏ6VgT2hoooo GCL<$v\BDKF趓zF꒜_i h+ONeG,Vȵ2{(6jT}.Y>CDllp;~0x-u݌#-΅y>*mz溅G[Y$uqE@Y5$<|ɗY6Wv)))zeuu5͛YE)10zyNgu - O.flJDT\X(0pysѡ ÷`opKݺ坿ܦj!srR%"bt Kޜz*KJx9\T+fْŒ@d@eddک6}:˺W" ^䖓u-:ujuNb8c8\.9RGYM[k/{8TfP3wUdrSVӖd*[7EN311 3jaa)NGj̭O Rɠ}}hn, :ۨ=j[`UψHQ]8$B h9/r׬3>30@>ݻٴisk?ٍ}&WLu:xXOɶvKGۆsuq)L =>92hu;T~^fV[BJJ⫪ 3L}~;S}._3Li,Ԉ'سD WRXBT$YSVn;EhRS{];uRbttkpYqE=o?S"@F[{@7L|B--wnlֿsË'ɋ3gn1ʪƮG N'O&_w|/9ƒ %ѿ8mW鳘 SWא\73Hvozzz7of9ל@ oOܹY>\&>SKg1)>q/r?no_wQV羬6\Uj㢰+R"zM`=7B ]Np8V̜9 ILD n'w~[wEZ+~7CRj2.+Ԗ->X鳘_4"'nnnpᖖDo|ְ„}2 D$K:Pȶ0%b0I΋r_qdD,F3#e3Q޵<‚Z%jl~9u w0#Ge3_<V]^=_;hiLD$"bi(kb_|&xv%4d_,l,t*jRފϻwR`NNuX 7Ñ %e:  .KM8^;|<[DD$<|l -Ji/(zrhihg@wF)ņE"`-qM&qm8Ӻ͕uPL* Cħө}6CY4L?!--m՛6nO*lZQQ!Es}LM233YRSY~D-ީ!ΠpH|0m00;6 گՖ^;Դ[yzaNdsq `octRfإz@׶~tC%Nũ?Id3͛7w=*Zx>^IFO˪s̈̊/:j4Gf\PSeЖK% UKPh Rw-?_` YgD 2,,, ֜AqϨzmo'nDIJs-MO`鲝_P]+NW͖ꅚJE 5/zKKKnÈ=ktdž Ha`39doZ"|gel?9x=Y+yB@Gl#sV ;t,&^P i.[5`̜6`ykp٥k8VG5<93L$4G.ii3U?z ysss,- v=<=LMM(''G]]}`}}}O'|3"PcΝ-kw\go?䉓,FNMDLS "zԽm>[\n#DTrɽ:y=Y7" . OҴ}j>kH7Enݴv6iPjZ_8{I @D͝1#ڇ8ǃWwLv.ZG>7seGYfx;jhݗ` cUj h. W2 ߃Y4N 9 ^V9@楖18"c$.GQ؝Y$G=+KKoooY99w.ZTQQADiii..gխg {[/RWW3fp{Y;ٷϞ=#|>ˤ>K3ihL4N]?\e5mN`"(8̶{Gg?|2xg]w Ֆ-U&?Rt!1$$&VVVN0^2ݧ¶_wYe)NWʥ~LYMR5geO VI#@"*Th`cc"Q^Rxx} 2SN78c8׬^lϝ_WY~ڡa~@di}NWWp~fu$._ƐiZK65@t5:_f7{>79Md!>តś?ڹ=zIzk<]&zw#kwL8Hf;#auűDg{)T4|v=Fu`ZNTbE^I{ldG^e?W:QLh̙;wvַ W]]33sLRH@#}JՆy8ntÛMFyj)o$ܴv`:wgRt;Lsݾ f}9ߋ6y&i\sVE]cDŃؙ.7QDG"+Te2_>+7QWpݒdD>g3g֎]\]ۇsͩ34[sN VSvjrO$R'%K}N:oHLD>Rnj_9o-:uǔ"nf1ݺggc#5EWa|V*QQEY?w T$q-ZMRG|^7 34h6h5F;36=:n4ϔzy_Dw{ՠY^}N O0O~SQU"zk/uyyQ$N{k! *h^-XcksnF6ʹ5s\Y.%@qu333?;.??8hh###}=yJ :33S>T4ZpJئ .Å;@F,--Ç,--%鳥e@og)dd τZ:6Sɳ,@$ @&@L(}rW]ijj*=W)(*:{MoDJԩS&F*ԉH:ZUU*=\U`( Q#F鵇(+uRzs)iH@W1TRUTh%RVRR""ٗn*;(c***xhf*YYYYE,;u*=שS'<rK[%%%qL3iVtS @+(TQRRj?s@@+o{= f5rrsϜ=GDB 4ӧO(Π={V{W^׮]W\6X 2dC:ӦN33'zЇ>+<|:?*^>HV&@W 5\qqɁ֯[OJJ-\+V/kPQTMD%d0Tz9{KtWSrţOrD=~K|G^&SQcikRLՏf_ ?%bGz,qn!2*B=B"KTB3d4{KŤZCsioǕIw ݻMv#(=vwlw>vuU[ AϐDm琵laۧQf(O'(}:G4s{Iy4.,I9Ԡ9AAbsd2Hqp #V>D5+{Op3>ti 30b1X 4ctgXz}zQFSuhȱX=Ƅ&CY4s;bgg:I=iFD!ZݢKH:#->Q1OC#2>c]ScOFv|H3bgl t#]5Jyj:FdST?A(kXZo'z CKUS$t8-YLD kH.?|y?BSk4O]QM,nS[eB&xog规x.%b2DfoYf"۵g]``M|)tf Ɔ;3S¼=CӅDDL؈a"O2⧄"{os3 c|šqo0-ʏQvlslp/mī=Œa35)M;k%(hrZ+t{@(-xk#RDdl&O܃|l焸%F'^k4=|{Tw[m!J3ݢ~]xg&1Crٲ]OyXi lK>w$O+gӹҞ)?Ęgnz4lJdz)irqvagKg [w-gl}z+'"&黇qw qBw9Z$."^tv++3lʱک(#>GKf} %$" p&L-sw 4=mҞlH?؅ClY?3ۯаȥ¢"!ѝ-- V;=C|܇GT]$"q2S_O_TTjiikiPHTqpЏXZ!)ȿ}{|"Ҷ.;E5.Zٱ!S׈OV(L^B[~Z`$"c=XZwH]gMDL-m&1Db(LDDޚZ,MejLǩnDgytQ?=At)꣏,Dž4݃=5[ėM7^OB(f8\ Go{wQ,DL=+[+}& fĞ 2ٌmD”wն -HXH?=$$zZOfz |>^cw3Cb#3o0G:ZmPA`x#cfj75iQљR"gό{k1^WO{DHAQW#_gRzMl[n?L6ݷpݷS \gvSrɓI{A d4CCx Kp4(qLDQFt'1:1gOH|QJ0󈼒/6bv'J ޝxRt20M.HX}iϚcL"~~ȯKf3{Ҙaj~γ IDATw6{zJ4aw]/;!!1!!O1Rge[t,<Ɋ!Jݓ/O\9=2nEV>SѥKBKIVy^e6v3ZiԬvs7B !$vӅ=t ;we8G"+n4ܧ/jDȘeDS:}~Rqn!Lg-lma5K3\GϰdfD73ů  㖚98nj|"QO<צvYٖ#9>{&6ٜǼGr^]ow[**Zy[5Ռ)[ˑa bOm^̞&"}xˋ3ف̼Q(-yL|i>gw%SGXܪʗˎمCKKa43S޽+JeAC˕̼8HѵnEW~W;z_ 2 HE9y`ugGw:_U~*r^PG;hݓIh1y*yhh~+k&-@j7xEd"_tԷ_sQ痊5h7d@@+ >JO}Ɉ :̥^ohkbFn;jg˱$Vem,Q7S즫CGGGns}\<Qt*mv| h"2hV==\pCCV'v2TxF̺.l[h|!Sm4~ʕoN72{y6N*B(JMP(, vƳ^?BJҸ\]_j=~[ʣ.G9{?x1**j]6n&ގ]2+j?g u PKV΍IɚmuxFZ3WnKzW~\WTG5CsrFr= mhozJ\0jg""1I=ˎ|dэqB׍QV.vefxG\/0MF o`4@;#߽݀=osC]]fa7a)'ODDdњJKK>$On.Z5.Ƒo>p+]ߊxId6| A&oJnDtmowg6g 4@{mZ''ŭtW3lrff@m V^گ=B of[;95kE3u._/ e\t$8 !ݟn~5Nێn%L5/4mĦ G5Q_g{'A o 7J+8~kJo_g}GZx5`kB_xy9Yk3IȻ|B+ߩݘvێnm7sWu~fuV@#L}&d6 `I&ILmz{jݳkG6]ظxy7o;Ԏ ?% <}1)(1--sn=]@h޽{*K]dZPK=))~/Rtcv EWKSKU@G"(/St ?@ 2d4D< a]1>IDTt!m~KۡC]I+J] O EdU&*Gѵ@S:R-*.B:IﭾHtG.#Ղ.#ЁH'NHLvַ....SM۲e ϗʑBt?1jr@?3kO'yHvS/$o}Iٙ@ tB50ر aקZͺ$jdF txx֭[LMng{fɹCBS_޺~*|f\2YM8xީdu-д=6@'@GDn޴9$$ _8;Ϝ9& -m˲[y`1zrg-*e!Ir*K"eņLāɧOHxA QC ɧ#>|7uu}/8p>ZshO7U~rƬȉo_~OG88pp`d \- ćNO9͈J{\x$쇻gG>wpsg;R8EaoT`afaai1-4ODċtgsGn9{O_hBD㆚gַ7ucc-Y3^*;:{J`Oo<#I-;++,k|ĄBJSd|[{rٻS /H$p;cMNwro话B <؋A?S "_՝OL헔oz]:O.2_irNӟ+y~?;;w#c!+B!{CA[hj/k Ut6wNW22ݡ:_npj]cp!evk.nN] 3r P~(((T1F_χ>H|;?x}ڞq>-9{}} CKG_f]v"_5y?ۺ WD wzbo?>{gD?zOϧD돶{?zbyC7<o}!DU#:JRw7j[xr׳ To>ɑ]plg)0JO3YW%JY:vnokr~YZr/r'kv:3>:kU0$a-ˇvD;C]9RC,x121q:Aty=%w+W\.]Q?)E2۪+z/t-"hc?:JOm(ŏMK fbcSDW]ǏZC$mR>Z-'/;Mq _er٨& VeV ^>Q0a1E~;~W -Nris)/`Q??Ѧ6|H":u'HTLTkۭN_63=#_RlӪ/z<}i}#.ZU}i_˪h"H̚Vtؚ9Dz5DDLΘc.Z;G7gGO2?zp ..+\ADF;g >iR–"gNr|Ww9԰Y}x0iD's9"beiq<ۭI.ِxhkN,(do[ ,1 M+cLv j>؏2bq""_WQoۥ g={vdN|v9ڽ'ĉ/~jK 2=?IΘ:{Gbdzѫ?W;{GJO! ={ʮtY l;CW ÞS]Q}gK׸={T_:S=?LBJxb|BX={~h(thѰG>w:gz&,ѻ+;wGпRS:2)~D2k}# "Ҽ?_dl(*콻?p_Ck##QQQSmTTEDLQGd{(:l^}GǓ"VHT1 ɨ΍Ѭiu?8DDc#׾7u1RPKu."P*Ϗ阇<}&"bS13 Fg^D@DD7D;ԙ1DB@E*j:[ +,YGBJ:k%EPrReJKcRZFD'LCD44%hLB4zDK+2i9ѕƣCыĥ酥"F/qyhY~&2xq-Um͊9j"riJHDDGOMLLL0 lIam;ܔN4{Yn8؟g|l<C}~eƮ5ֈI1D]oa_9Q"չ1~XoO/Ɏ7e(6i=1}Eȿ]$JR&GcF>?|kSNrr7/T=/&_=fA""ˏ~X(FFFƈhu~vLrJw7Y:iŚ??f|Ϗ}2s3HnP?qsL0 D8"MM1qڨ_Kg4+ ~ߖ\ruP)ދ+8·&'&&hBDRz(<69d*EBDc"KCCsGψ$RʔS-x(2{,6hY汘/)i}wy{8Nʔxw;/'d*‰"A8pp9Cܢ4L;G] 42u'mʿ9ԝ0ͦXcZKW(>9%!>{ehYRzJ|׷[&+->kٻwΰEk{,K1yd?>vG bʕon8S];d{oǯ/G("&iWHlL^16?[?]BD+hFnPwbgNZֆ"SfR:ZDr{b\\殚m兊c}҂뮜]"E54R0<IZF) ?)hHT^0DDa\d:NaI/mƪL~fzwO7èr&/Ňf<ĦmNwWg$=rWS'p12!+k)Ӆˤ;kz2yaK>̷%aA?Ɗ ‰/>MQIds?!Y9|jC/$DvSp M<0ɭG{mg&[fM>Vjt?M U`g awǝ9r?}mƇ?rlͽ Guus~zq30oZc4?h`W^mx?pO?DGNĬ5{W{n.6:37<I<x.GəNlhqO]>dz緀̊֞O?Hb/NZ׮(8Es/#WuAȉ) ED)KttŕO"QxLB4*2$1 aދ㲤p㒟=FfrҗU2+X*?!2^¨2%r=8OD_NH◆/](2WYq$4tuI#oGx3󬖭LX"+6hIgWz+^wX9ռP;Y]xRJq[EͦH,'— .2jjՖy$ 'LzZD:{sR${>ܸ2P>.ܑt_$,6]DKD,@}V#Gŋ 7'%%Y7iԾwȠ_˙.PfO_vsFhvϕ/[q OLbr""$tv=?,Qm?i{<<2,YM)M3^s9(lƠpY,{OG1lQ޳\¾%UmI|JBBDѲr2]|& H2SidJVJK dj:zZk{{g*ˈ(2ecgG]46)~T4#s '߸ecpmEŨ˺@_:uD$!}KQdKwu~6g:tE*$K/|h{q $'SrKgDDa9;^JظEc2E(ڢXզp DK=G Y IDAT~HedxgH}FэtTDr?+0#,vZٜZϩ ǃ_.^|kQء0=Z Km_ =!X3%_$m @+}&9{uX7II.F)W'߿;/ V%pk b|?^ShTզ`[p4| EhXM7%@ :`Q EhX@ou=*`!@ v 0`0+?q+`k[ 7z%Q)L.؅Ja"E_v]grzE(_m5nYYċ<B.ȧR%۝Oϝ=wtNHt[y]böz'ulk_\pwו7״}Sc[z-fs)Wٗ!q᲋6DDRY2 ۭI.ِx.2\;`?d{Pn^4Ⱦ+y [;ҒĢ %"bܒ')N;}D.qDH8mw'("b$.`|CnȶtWϞ}Z!:DD\[=ȒSHQPPUXe5 dc𽢮U!])}M}DL\3,Z`HgKUM{Hj"ab٩ 8qw@C쾳W&>c[۬\UǙO=tdpt&cwO }q,I+=V"6l+q/Et"KSSXā1:1& S0,FSҽ}v{>ȗD Lm =:p֦鳝#XL yAde2&Win}t\6'"[;Of0偛 2Y-l7W "MaA$ dVHDb_K\(X[ݝ)II"dIEb3ղHD|ǻ־Yj]ygj D\~~t= e+RSO&*2drO+ l5M L̆#T#iAeP,[,K+hʞdW2+r֭bs;9[QlM֦LikMuG(妝.WrTaW$55#*_̩s*3Vfl(d %ۯ7;ou==_t1+DE~=qr[3.n?2; |lsqC 4,`a4<`Wp4%%|R]/{!:쏂]K(OU b&FPMDcJCgWkJ7PH$%B_4%Bg`Q EhX`Q EhX@K[f?F]),,﷣`J﷣?Fǃ]^(<~3@W]W(DK Bhĭ]|+b(۾y 6zhx)j΍__ˈyOzLz4؅8г9ie֗|DDԽ-1kgӛ?*5ww@DD}rYgbou%?溸g:ܖxΜGs:}Uj;<75Y\;?cUrZj,=$ސjڴUigLUiw{CxSe3/N'Z+vwDD nŁΏNwUСVoѝYO[rM",l[dO/=^H{Kvz;g?(k9*Mq5.=wy0d'CoݶݚXoŹ*3dT;g|ⰽ[YгJ۽=2"b36Q_01\vH*Kf"4[dElۺN1#"V]=ܦ>uvCDl.P-'ݼfVWMw8 gDD\Ai.ci=fD( 3wC%,ܧ| vH ѰWΞ|!"1ZN>qs?ϱ0ri\ â\rDIV|]v}ޒ8uɾ һaA&\qC}owlmVYlHhɗs)?5fa3D4=Sf6#f؂{n.J Lű"ch"ae}L4Kԇ- ~Y0/Ld"?$_E;E"OjX^qmej ΆӁ]rZ="nmS?'&CXuA@{K>|!+1}B!X["; ࡂZsoEL4d%Jź Yӊ}5í%[M'sudi*%ف~W6Ϯ v6d2D";dM[U*+ t*Ol/LJԜ,Rsnδ&V%+gGJ4USSRsʖ}3ѹgR70$,pko<Ĭmܸ-ߴ>Bg7 ŎG>d K] 珫7耾Sbwejr'"NTg,0}ԩiDgjEM]y`{NunbD# m^oO>@ eT٣xR̈́ f\3`6#_kBiG˂]@XM7U]0KuϱcTqfq%@PR]h&Zڴ6f>i԰KHoC/g);O 6-1EQXVWoK̺ p?sG_f\Vlf6JmJb5yJ!"rYl}M "a1HE"OFgH5mU- m3rfV(6e|Ϣf2zlRYtd6'n۸Z/jX7F#47cseqa5;˧ZɥJ)HLg-R|c*ÓJoиZ}b,6՚[ B8&6n vǨtR[cDӦgpyz]%byyr Vñ7نn֫8c劶f3i :9C(ueJ#fvp:%J5Kr#8lR!6 Ϸx92]cceee|6 S\W iteylfucmTeJc RꪵRk:Ŵc ١WqDiuZfqW\kJb5y5Q:F _'kt10#aE 2<g/@b8,LeZ,OkpuEp_ ȋu*Wc)ifLvmƲV.y5_dTf+n5y߬th{iYgpMLD$ȥ1= le4y% f<{-jvϲRly%UF0W=*M32sxVףU mF/ >Qgt,5x[Sf]),,c{/`JcD  HBE(NPK ڏgJ4D$:I{$6ZHj3uVʕDDK%QђŸ-צ\ӹгNnKL,h*\WU~?$CvapOk΍ G=G*aBޚ !"FYrI}K}oĭ?7Թ3Yؽ-1kggׯZW3ike9uLⓅjoDiGNڪd٪&M>RHBxZ[0&'""4IBywԎGr|$t'V%V-|sSeɲu%o;Ocg~V/٬,Wߋh>v[O\vƓ,DZDXTn5:a)f![pԧ jzHO;J+'zMMv@ADě*+M.xq>ZC "ޒ|I煾/.4e޾o)^wsn[$lfYi=+@ٽ,+or'kv:3*ikjgX].]QZ8|x\HB# $WP&"d3DpLe2FU0D(K$~`8hjml\Ll$ZÝBqޞ} ҨoїQZ(e}]c=Uw >IչNHEuEtD^3"[-sZ8"b nOpqDvC 8""bs"FSfLt4+ SPdX8.ftj+)M 4HZUuIǮ"ɨWi//>) 2'n:Q*nݛPҽ}v{>ȗN][]qa{UmBC@3{j2E;ZHD"xsse#1%Ēyk{C[MnNGü 2KD|w+@$+ȍ7zD"vaƶ""&N&Kp@wW`*4mmeYbҲ܊5C0 02)C$z[< H<+%*KMnDOZkc%Qp˪Nn0ycqq湸?lQy  }Xgenp_qZWP %^kgLpDKG6V)e*.qۈ4)4W,6:o"u*4o1h0\kyY1\Fe$L`M1JѨW1DDcFm.eՊfb75k9Wՙ""Q*0RfDcq5x8KYq1l*VX~ zw7A%jCsuKe47'US]ќq)R6Tjk9r<18m۴h\r,'Uj=DLjcX:,m<զWqs-8*)Dz<`ቈppHivRa,͖@챴yZ fޥ1c6(Y"#JÌT)}8r왈26 x喲fDSIRjMcV!~"" G"dE3, qMXNhdD1eFV:3e4ZVfYͣM ex+UR|@,{m e[jkq:G!b42l 2k3 HDFC֥aȶwX}$ v 0 # ,w:J)˕z˴t_)r6@>sGU<=&&h圪!1 ;=qDf<ϋc4 2 1̌ZEeYFV{s>U,(f1-z6;<ǘwtXUlmy5|>g(vT1oR˥Dz`My_eR)Lͣ<\),m6ޡWqq澁f-]{+-hWqVeik 6Ad8!ͮ eVj74e7lm@pWڪ.A}C-.S F4VyD"yyRElhiʴRx\.h.N6:,z7{^a@[3iÐJZ*bյ*G\T,R\;agqXv4y7̽`GV2HF+kn+6tĭw54wonA_]ʖ;+ݽ;c}Ce1"s-vIIw\'lSn_ͳo7Bh;4^/Ħ9oijVԅRNS:qLw^#v{JpBcj!""6v{W%" ӓeeyc_>=+U*5-gnco-N{lV[uBxÓvW]\4G/tjJ'""1?1a[y}"W;rfkީ۩u%C7F;l:.DFlG3]?sc(ڬ6[H٫Q}U&^>b}hﴱ<:?xt0[\pڀ+CiZeqƇc֫IsV{߽^Ƹ5?08-6;h؏llΈus<>=8-O81kO_ky6k1 DD۾P4<%O7""8aYm~6ND]ag+ph5s""ں:U-~D~fiCT""nV4` {gv{nxsD%?yd]'G&5""dHך])|{I#sS]i ?Ӂ9%/hqCBdbGsjUAqgHoY+дILy}ZUyutePho\ y#!krIƶĜ[8 n?֨"olB-zBԪVOՄX#wA߻M#"Y={rqI\Hk`Ņ=S@^Oظs#{W]QqQ[kR50fۆ]qO o^lfOHqyg&m3dD77KshkU.r|+VFDM]W]ݧ.?8m}p#4Y8s}{ag}hlʽ'j8odM UWoHQԤpz'kbuz{sAw^npRriI6r5%̛.삵MNDN  >:l~a`Է ݽf=rgvW+bI0UeD297I5Dk:..gIc̩yAd&Z-sH9MF߫d:y̔-J:51/deRY괗'NjH\]L[ն Hx:7&'}O.٩fΔ-m*ux(;Q_(f\le۸3eID"?=/\-[t괖'ʒdurjBy6oYRY,FDtUJ*4p"!VȜ..7yZWOԧ>Vޝl8v-]2̐Fа}>`օ㣫ODc#V[elvvV`s|{wavȒ?~`c$o=HV!(ݗaftCΈl,=SS3-#h˷'&}f盻=rif,^Y78h'b'F p505ޭlOWn+u|[HǴeʹ ;2H!C)71@ 0Md~Kf;[)}AFQē "7 Q_(-H =Μߟ摜)\D1J'r9)kRy^@\*|A7#ғJy{5Wݡ.R>,Uw㾤 "3;ˎ}\ь"UHYb92Ji\ScşYwrZԓApEu+7d|ш[a\uG^ʤ ;"B:D 5sEuR$"ɂ#kqG0riKŃNMQ* |sNY Ko-ґpɝ6#v2t]mT* $CD$sa_ !W:Ki+Po&4.=욽@A4Y)T$"I_й~ =*9Q|oBO% pSoNyrRdS填)cqhBd.&_$1"z&gB2zq&֎% XN G|I๴_;~_/qARHMTN?4S-WTuuEUHzI5ƸH j7i8x*YH6ފ4Maj#Zb[^K)%G?S-dsk/DkBr_56x,`P-RL2՜3iit9_ 0̇֌sn4t^"]O#54w9HH0ZXTMazXY/i8gj0e0LH%+et9c7""Tcshkڿ=ǣB"iAZWţiCH GR&qDd!9^tA,ģI >Чc-3HƐ$\4) AdbxATFDLQ8#UwT4^RH,;l^%JHL$"ĥd$a>La#JUr>yh"ͿۿYl Ͳ.3'"bX*( wT͈89Ah*5nq-Vc餏:[控RwJD:fD} ;ꍋ`o- 1ƙS8Ń`2W.9阓s۷s޽os'Uts_"fI,'֝8/BTP!ST:G럫닲๷na}_YsN= KީoY1?뮯ms۷o hxn!vh`G vh{;lgw{=@w{ ;C|X~lnf/qJv{"h{`C{^ ݞl^ k?`R {h"[^<ǺLö/Y_|:p|jK /-=ycr#>煆^xWbzxꙘiWqЕKQe7qY"*?v^m̞h9|b|TƎ Cl|p\p2왎Vfkyw,_.؎Ǭm-6Ɋ$"K}GmVz 0sZWَ-6[+gf ""k9zf#Vۙ<+4[_Z({-GLq㭇m:{1?Rp7-߄(ڬ6[HKV+g8trqx >tZ\|2贔Gfvʞ[s]A90s[y`7KC@_5q}\ȩE>s|ڐݜ L[7K#E"1sv=WY\ܚهTncj lXSf' wڑ4~RҘu{2e!'"fk-f ""ں:U"&UɫeS򶁩X(}ffV}lTBDLs*K7A,y l^|igDL|;f IDATg@FjKƪᥪ`;תxJ4㼞Hh4m3ZUPShMM&` Q^ ,1s#[9t`Ӂ203yZ%U,wկK%xccU&h 9dyUa%khX=!]Gs1]. hYQBqe݈;3=]ڎsĉ5]83W{Ĉhm-\., "HɭfO]pں];nX&dc od Y;{DfqTWߨ}ǧku& go/B)m=c?!S-6(7n`|k}#*:UwkRX jR8 $jVЖvǧx繡پWgũWOMP*Q©Z Ouu˓EA$S> vvr{! \Y˓SeID:9`xD HA\]թdeRYRy2jESx:7&"(}OVo!u:YD,-z?H$Ū2"Yț$mNg%7[osY*sID,N$ܝx&/̧>&f}ؒtxAˑi>06FDP֗;^hcDkA>!aTԹu^nHyBKm%ֶ~{j-wb;1mrND˺0`_ݗaftCjin>6FC(~,ߞhٚ^ol(i'Tz~*X7 ;14llGi`uahq䇚g,]%vboZ WS v%OKWDI,C }go%ʹ_Qù aM f 'K C\QId% 98/vTO ɐc{ BdFc^3y.1`":TEFN2|'<kYO_fjym9YEOebHQ\pZ! % /FO))D!PZy*+H#p,4;1%CIi$9wR7\HC ,3\LMb& 4sQ0z)|/E:nNS/2sd8b BdPcDz M[844 ADC{XfuSuh+G^ֆnvx^|v}?X\_ejՏnVn-ft3V(f̫jPRDdG8UH|<.#Q"G?UBn1Uj/sGAs|H 98WݑT}L*ASOrL=.23'#+ SDR [^n ^!%k$/9>uv"Nų:lao3˚IlbpIቇU{2 J~X^雺ݟ=''OcG*O(.=Cõ µT+=3jO.Mw> Z̞66f]aDLw;3cm "^fkFZ8{#+N9 "k9?~dZmG( "2';Xz`ǤY<}FyYA25[mNΛDDb@[Z^<6Zg /w?5 ~_go~wc>?}w?'"Z!{}?wfC)i_W9잽@ˠ t*nSdlR܍ W<7^׉Q9_8M\l@g4d9{sy ޱǶ\mo-|T:ܨ,.߶Μ6#YVُ>ӄd?Y?}١?ΟS[s?#6/oj?_K6 ZWDD_~UJ?9:?} <9Y8^̾پy~%Sm2FM8o\Y9 Q#"blukW^50ȉDMfKfƇOKSt//7PCܹso㷎<'xߝ{^=v^&D\)Dj,Ocw{,h6O+NLk!>^W5Ao/ ^i!nMs|fiOvՁzr7_xΞ?ydDvvOkޥW.U޴tX7[hvsW>k\}hwk3]8[FDDzܩqƙ.VJe)rk NWSap/D.s()Z,r1z덫tgtZ'b?Y($C-;ϡ*_~IUw4L I &aCU4o$$06L KDP]0ϕRa2WZC&Ɉ)|ٓjO`Oz&~1sC\_~ꉕ߼Ս].\X7ӫo{STWu_v:s9x"/g7_d{&"_䉈+?WV~ue!}ZU3t?f/pF29\+sa_Ĉ䌜F; M?%}`:EEޤLVdDDX8΢%WD$%WId(uHSm%m$*^L|K5SL&yiAmC(TJR42zV$BXeab#^| h=q(uJ g4v*\Y[+s4"!1G(39X[$vr"wJ]7d!!_$T bfLatIX_VqB216iV#,8QBD/tH֔sHHF }$:C* SJ)YJ͘߿ui1{8S˄EAKf*9%d}cE[IZ81y#icW1.$Rͦi 4)91&\GB1Ʉ?\F#>VɌϹ}9b(8gj0ǝolR9ITꍥQ#Ú^ 4U5uݤzeK->r\Qݡ҆) MaAI`pMSd!gL:)%c@ hs"Ks3s"HDRO"镧SS*gk*7]{\<6d$a>Լ>f ID,dr:q)RxIHid" Dj<ws)6:|38#!mL 㪿Lַظ9cvp,J"i?߷oWW}j(np:#N1I]J"RT^sGHcNF2W+o{Cu3f;KK}1(R4Go%I#N/'ߛM14s3ܳ."}wv{/ _nwj۳oݞO67}6*`G vh`G vgv{Oݞ%wv{ P ;4#@@ ;4#@@ ;4#@ؓtY ?/N6-Y_UN1.y^h`]xrZnج|Ç2g^>>qoo9Sdx>4z2peM;wjwoLv.^vs(#;::[}Yr޼'On؃rQ{mC5Yi {2&vanif+gDb@[Z^<6Z&2Br-}xcYwf٬m&Cg+mm;Ȝ8p|bS4ѓG/>x^/+!ˋZ^>3k<{3̠1F}8d7zx"is70ņo-X ,V@3xzk:w.r}GN^nȹS? ʣcr {kq[z}rf. mqb\?%vO+{03Gx`x^R|YDB_%GɇП|iD΍u>,t1jPHgM]}휈HlN"?3TԮ>llΈusZ.4(MTz\syhȰöV_8wRkwHq{Cs7'īى!H~ݡvF$ ͝.;d́3+=q}agg=]*#bmU瀔RnCÆxRO}3Uw(?0wv3,=xh3;U18|f&s(1C) σ=@ܛ߫w鎦l:ڗ̍#2HDDBԈ76Hq?&+;=Y%Uƕ}gt_=g1zP+gsr,Yi~v "-|+ӽEDB=˜ 9F:+ӟXMo,r*k9xȭ :7>RxЭr8|~ S(J/S1xLDD2WZ!pN&LSN_;ѐN#ؓdTmyADd^2OGZjNM̯>RY괗'NjH\]""Մ$3ǻ*K"bJ]AsImm,LVH3gO,߿Z6ʣ/w ח)Vk#ռlwYh;5)̬T$I}nBl[tU9;pc(Ĕ.dޙ%3wMn /I! QLDdKB(7 S8©UҡHKi$9wR7\HCL!J w.ʻV&[>x('.̜vI7aWϥgheOк-==[S0 ɋ\/I]5߳:6>+#vFWzfoݮtbERj}iTmzn/9_n߼u{孾/6Ja+Jjv^*T7_{BE~Qd6|$zRa+87BecR(m}kŒ<=c_LDO-n>zcJ6PMODJ:NW|d,Y d+q I9W䓱NW\sI%_~ǔ.,{p8zﶳ;=ܳctz|ci3ߞ끷ouBVn}WDlZBsK6vn+xk:3kkFͶչ뫮{G>E'|!HĪ7ZT2'^>J1*ŊD"'ӹ\DlRLMDB*R f6V$K-9WĔ2рe+ǟM)[Z[v8]2рv0)%ՍwgZDPR{b˺R4qKZ Dj. lNJʶb:yެ-yX6 hWYvj!H%wݢTp*Ug=V D3[W%¶njaUUgbKk& [)ZL2G3SWEDY\Kb&-z*Dl`j2K+u=+zZ!1fë_h4Yoc5㭼jƾFWջG̎GUmsrVs U\1"b?:*vfbT&L,Y0joX_+v,3hbT%Ef2u8'@XUu]]ugK}nkpc?<߽^7co_OM{]/rG,Y~{=ujtww?xΨok{߻_Sc Dh*Rxb LtT2CWTډe'JDh@ĩmvPl6jk^%_h:L3!RvЕ\ 3Q[©tT[ Cfp^+U`$U;H|H*keG"~q]WDQ] y'j+H4+H&bilԝf–p,mWM8y][I,t~&_R -%\ n$=L2(v*-NT5A-"Bܽdە8 kyb=zenT06bի+v$l?*q+Z0~/Rj$;yTrh0'ui\X^O7tٹ纮e[+oy}TvꏄjdR FJATybIÁ(MDlX*FjIDxk|nLVKVz;#Z(HYSj1T TOEO]O3k특QU)d&boPJy;gD+sn%'7Zh!kD0V{.DO|@b}7F;;G+D``W|@_ة糳ז;|n'FBχ[6=׶x+9_/u>k8t`qdr}/>~ڛxoFWwx>y(tlbmXoKgoS垷.Bt$tKB!ш*B5<0td6oyT4FsZV>$yFm`rglG2S T욡]w;qѰU)Z VNX,$ 6J'3,TkZeG`"jR!c(N-[Lڏ\c)J|Db뿡,˲zP&lV aTeS[*Č#yӭ\7QDDe3{ԲaѶvZ)d:5 ZJb3٘s4kotz?3}­p~ҭ[[_>\:tˁ7zRK۷>MDDGO{ h㛷ߋ $RIsHXϟZ*ɂĶxxʲm% UOwPhؤgN8ftxB F+ Ƣ::.2˔&' :Vث֔hX2'ZD Gə녳Yk<-V(fÉ&ڋdS烌k巵[ʗDe&Kt@jɒM?Z1a[[H,N31-3rWHHLÙ 1~ۖ;YڵP Uk頥é\Dt$O[Ř?V' 3-:6O|VJYd%g{~h'].=*gO6?*y҅> :/'s;w8 xb# 3_{KDtᮕkrթW<>v1]:{_<|sbU, >?S]ZqOtww#j#T4+S';};{X^ګ/uv:;^<9L0JMb&-@4S2"^!fV4\ID{`j&>,""ń2рf*N~2T~?l\߶(""my*y34b:JTa`7xLVۗ™|6[v0<"NDDG23Ɉqu &~DӉ85>P|@7}ѱ={Rokrq_ƻP}odmQ~T+Y[Z޼ۯL,y]^l__l|J_nxvjnoϹ":u7ѭ\Z)ovY}#~[|WO,~nL,2טʤ% Fca4R`±zH3Y'Qtkžgޝ̚d1n1fbvs0S?>j٠B21cL51K8ŤMqr҉e~%c~-""ʎDakgn)-YD^*o'!{hW;ݧWn=R X""k3{|$wyO[R&ޡF1GzJ.'>8L=:ܳ=RNhx['޾nDz@5t:"ؼ IDATV"{WiX LU)*d+R*:r/.MGL$ڲ|L&b@"tKŚ+*6 hp2eNd"X;U&ӥHf2?{LɟJGwu8BLg~I7JwղHǬOy_GDDDZ[In=GU;/]׬N95`|7}JDTjD5#C"!z{W*"a6c[vcDOTEDD*{ړc""WБ oÖʘGygH|ϐVt-*2/orXΖҁѼ9l2 Ju{[LEjc]t!D)#;uuBކ1"ٸV"JD@}r+S'ϼwe[|>Vw-"7Ծ{xW7v-TgEw5v㧦!K[zcLD[|H+q\ӁG(Z+qE}/ U[IƆZZHX"N!ItxzӑlXqKDL)IB* oZpb ݝ?{nDԮOLo ou WW=1e7%mrzQ -yjo3kkYZX~Bݲ'ìL?1ƴv,17'bXX\Ϲ:h{m|qOzvП?+3EϭK>*H1*H,ȑ{3dfL-?cZkϩTqѠOf+gb6*\>P;4 ޾6]?g?_エvߍ^:skx!-=_]轿7Nvhwcs>4?9瓻Fz7/?W}ܰw۞X2 X^Ύ7/MO꣝=>)Sk`u=RG#CG/{_4,ӡ;}ݯϿ~uwwޡM{M)u@ AK)mSfvM7E/SmӵL>u4ԅeGgjb%rDlm'+qN^Qݏc󂶶Z)eٖV"|&__[oi*""VJhRH,_ )dfVW`s{ࡇ'O]??zU)'~EVu6os~{&~O&*t.2k E~w4-R =|\YO$|B[?<5:qIzG}S)x^!@SЂo |-@ 44)MA h h@S@ 44)MA h h@S@  ZJ@zytA+x_Ry4|5L.[HΈTR~ɹ""d^k-%̄hlDDϝ${f| gܨa[+@,[17L5 Z*wHϋBNM̭nGds;'\?vl 'BiIDDR&9S|L俬(JǕ?OU=v8Ux#f*XжywK֖NkEX6 -LɩĂV0w;q'ݍ+Qܱu1Wd:l)m''#RW<"R5 Z+-,+V0"|:-;JEZH*LdՍ[fq+- >?5w.PgGK+6/v:^:7m'BowN xsg+W'd`V;}]]wEDc/yydKC=nfNή#_АV!wr&L;95|JNl%Ʉ])v2R tүDT Ԋ%GDDToz&ТѰ"٨ĊDVs;1Eh,׈ۉJ^$Iv%̦0'SGCv,K<:b."J)wV-_O,Չ_\_2M nq憏O{JDdu\}K'z~wWɞw>>*/?H>~jZ./[bǎ n^;DL*Zw}+˿}2sC}'N^4/>|$>9{!GKN)[DDuR^)(~캮WFK]Fu[I[}1= _66W$}/7hXDDT@(_WzjXwEV]Ӷ}bd^%Q֖/3VtN>wyހbW_tNRʫUw6Xb.^۶v5jM_Uy{Öl [RBݪŘ wwխZ='kDD1`q߫=Z{o’tޜ[kmoXk1W:wk܅CsmЅAk91Gk3GznX±)dfFDJΉJ+qUww: dj<)3EK&GSi%a[ʎD.u U 2A%"RJ---wWZZt Hefݵw3<3:H-hiiy޽[Ң3BP3"#|*l=YMDh`/}m'g睁a[ի{M’;0`ys7D ][ܧKKF|""]F={<4e&.e-o^?@oξ^,/^)ȃ{×}Y876pi(tXIw͟l:fڽ:٭W;gX\<.D{..:WR2$sN9X%*eW3g3UѼh:u>>0@g$uvB1/44 F;EwivJԉ^C}~k|xl[{P|Toltz:pwt}0n礩S=5!"DeA=׎h%}O6?+??ѓOO?x;RkP"ોmW"bV[x}|~}IW}? xܹ h+d_гNh2F{o{槧G{"|=}+嗻I"Bz¥G:>peVoBo|=pwtWyMA h h@S@ 44)MA h h@S@ 44)MA h h@S@ Hw ]^7"+:}-Y]>wZ_깞ck;.x '[S>++?g_<*"箯=!Dы݉3""67< ^zRwY[8wj++77Wfe w7?z_345\ĥ߽-"<}jW oh@DΘ\9go_m'+G~F\Ν<>PD̻g|#eOD\??5w.PgGK+fy#]}rYZ2)'u 2]6""+g;^8{7Ss^}UY868y|ju?EۊQ+ӧB'rށa\_w;[L,y⭜[v[7ڙ/N,[剱/,_h61zoߎZo7޽"E lu_oew+i:2+Cq[ǻ]ŞKka66ejb֍(*_-Soph}qqu|S^`{ޝ=_$Kk[YxsJԺUYit1Z}=[$hԧL_U"+2ufjuЯWꈈ e#"^wY"߼4A}npxneomen:8ѵe#"F/:Xn Y}?8~uxyI4_bɃqu7V<Otv4R"/]ysivԖ"77uvmc ΐ̝ = }]=kKo5te~Н/ydyu~jKkcή܅k[<$h}7F;;GG oO?x5??ѓOO?x;O d)~>߹s 44)MA h h@S@ 44)MA h h@S@ 44)MA h h@S@ 44 g`v^M=rSv4 uw][9kvA v}cڎDxu~ajW_a ѯpCu>l^_TP拳&:x,"fe䡮];,8"2qwwwԳ FDgB뻏=<Gzr Ѐ}պxKmC>.x[7?ywmqUݮ4ѭ;Nik^?0?rc|vhzejO< Ѐ(utx]<~zXmR_wuSW޽uǫjxϾyTQ[D Vt|fo> 4IuLJe,Η{9l ]Y|wsL^:P<.w.6RexT#GB'WU{ϼQ6m"KWnzAݍtЅ~񍋾ܚ3mfG:5;_~gw/mn|&LC c}S㧏QS;|;οyݹzqq͔ǎuOפwx>y(tlbmXoKg[Eu_h>3L oO?xПGO d>*4~O I|N@  IDAT44)MA h h@S@ 44)MA h hs5&bj8PH[!QӒch}jUKXO t-8Nl"Ng ޷#QW%mpAqz ٢Y]>\>ow@"h!@D$B 4H @"h!@?wy%4ۘn^2%.n_RzGD~D*}8cNKŒiG Dž Q^WWXԾgeSA׶VlxWi]wM}eQEţLT5#"8,ZY9jAK{eckor`>%]切 t -M+[f^YuZW6m齭}w^Y>ple q7 7:vtEUe2Ѿdڔ(^[<Ǝi+WŲ.t+rss?wPv=AAz7A7|cڮnv҈LҪ[{DT]{ީ}>- kż]LQ *Lәŋ^}PqWDDϙs1 U-ohsmy*"R.Ԏ(^vm̊yչ;(:]]G]>\P>ƟNYyO{tATټUkǖAڕȍLǎ:GH7!F[}mN:|-_UK}FU\ d 뮝]hu[:IY>o²d\X];K/>1wX&ѱrYSjC6+3*,->*j&7=Ӷ|vݲLnX#"2mͯ}G/]Z?}kCMoZd&"c]sKWW:QPY]ay}k&""ݲn5(s뵃_`͡M&@CDbM[XU=(zLu^P]WU$.iWQRRZry˯;ȝ4.PURT`ww ccn[w]ٻe~Ҷ[&kf^cwtӽSO;޳E#8-uVW@Ûʴ_rĜw3]]٩]fcyU-hZ&3nb<:|!tWiίYP;]S:xޝۑ xGԠչpvW^,ucs ҫgW̘]=O[[kjVv5sYu۴hvuVUfn9'֦k֮زr u13Æb?1\^K4L9gؘn^&vmuADĈV^7|AʎˣuR[^W[/W@áj^=M wPlުQ9bn' 5^YrsmIu58ӱ# F~iGt,nQٺ+#"U+k]쁙ő_U7_qq4&U {.NULloLuZ3[]SѾba}same*6kMѴʷq9!ޮtzC;Ӈ =޳{wWAoнSO;޳0!$E 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$B 4H @"h!@D$"xOw8Sf) oˀS{ ~}zA0ݻ6-ݻ>,@"h!@D$B 4H @"h!@D|hM{]}>sGl_?#/<)Sm淝Clnֺ{fN:SO׻wcν99jMsfaSWV{'_ʎϭ'cfO}i/[ٛU<=CϿb)?_3ޟ?O1`/>_ՙ/""-w=C펝\onV9;t};3wCsqҩF_jDCuu̗N{OYEu}Y#np>W@at򐓲wwm{ݠKw_^瞾?S?MOzX[7N/wGt?|M#KxxU~~_=y3ZDM8Ĝ~ߺWu~W=8v|=W[3_x_Z ߋG]tkva~}>ෞwrcDDt'_Y9XMr,7)n{Fl~nW/gᆪ IDATcoD]}A5~ǝg#+":Wz6k|խgW/ 86>z3-E3w=="bkwf/90"NĈ~uI+ؑ7Ζ^xss.̉zBڴnSDDvΘ/S 8sx>b ^^|ZDG&ڮE# {Z>̩OC OĽ÷wvnB+'F]qiērй?_Dċ{3>u3}o[t7S'Ȏ~{_Kbfߑk@Gw8vݗ3 m*~)'E%""?SOyfݟ8-a[g6 V6^o;1aPM#?i|%"⤲S6޷53z}=W/xWKΗ#"^u+T:!?yaOĞ~{qBa2*v3""oC{8xk#켲q;vSu>ؽ7bs-zJ񠢲~[z;"[ڹ!_v]pyy~pR=ru~C xi[DD扟lsZvsYC|nϴ]ݺs|覡~7-a̗K]Ÿg:oc_D,ܮ]7~m'GDΙ~o?/Y#a'E7In7"N*6;9qOM y嗿'3a}.|:b3\rSi{㩵;f\C6;sj+4wE;o=t9g>^y5s+647Ss˧pǫG5#eRa5)qSo/=9æ|ٿ|}_NZ./gEӇ kGDD^a-+_έx#gloq[~{wWzvϋ!ww tg\˗qo~Oc(wQ|wwr5Nޞ_4?m `ٻ?Ewmyp'N]wחV'd ͛9ScEc)~-*[qgNj ۶k׮/ymK*:餓^b h޶}Je3gZC9kȪ)yȐ#?CƏߵk'nj9> Q]Uz7YD$B 4oG>v!%Æb?1#Wޘ3d !@8= vڷe ?0o_-i3OӿƌP|>oYK4e{zLxɝN*zd}ctǾ7~"x=Fg1rʔK''Y} ÿ{q >`}>e\WC˻#YN+/{=좫Mw}n_{ɰohؐ)?8oT?lZ؊[wf"gbDDDd^Ķ_o}D| cܰ~;^?8L_ݽt/9ol^;'s&6]<_}ؔ5,l/k#ℑ7L9g'Wn>ź#g>9fd>X6?稻o{}:a#DDWݞ;8:{M0ygu۞/|f[l_z'OyEEэaagEvΘ^49w@]|m' =tL1;.iݵFO1Ǘ}ї^=~j눁y4OَW$>L_o>>k7O׶tf(Ock;&pVa͏J:uG)7߿䩷}adymAf+zGz?xf67:Oۼrc\|=:E WW؁^ywp疟o>[{%9'> #op~w/_a9/7=1zyc2}t'^fe2- }ŷҍy珐yޡ{zuYç|_<6oǸuV㉐3~YY]8~T+}}m^g75-#Kxa#']r|wzN.#rպqB޴1^='k>{7Wu̶=b?;gLWCΐ]>n??#"bK=g =7 }٩rϝ}OojJ뛼yn߁Gu7[10oO?s#boW=' 8-uK/Ljg줈G39 -oG?4N>DDDw޺ƮCv?+>?{{NU7pDdMkʪMF\qU}Ǎ'mї`̘ X|]CwN3o8ọkF;lxNqvGDd}zt:Ч=r#u rcȤ~OSk;~xkGޟhs .aſ\88¤Ri|ށCnj޸헯Fľ=ݟ2F>͗ha[N+t Î}y3N97}{C#oOΛ5s_", ٤\fmhg {3ectZ[F>e;VϫQ>qKKrId4d,z1\\!YAl7zs__?o(wF1`NY7vPX0\.(4{QU{RpPZR@L^t~@ Kf>`clRytvL\.)F6Z<Qq75t[$HFHnۋȓ^LK b[MDb[=.:b.5啒6˰uĎޕ'xIH]58䤖bt3ӉGIiKUxKMEoVOQcYx Y~Mlw?ƽULչ2JӦ`2\NCWߖ*mxuv~Wj/k6~5[2R,mȈ6Mʳ4gRN^0پ!2%*gF>qeeԜ18E$V].\ -Z!GצKNJ̟w]h)?xJBzb$GRZy]=j^i͌O\c_DZK2?к e5m kkI;k'!8UzTaq(l™rFVgc@TgXăV6"3CRo.cYܮ»CZ;r&#Q9qfs3X ^ˌ^4 -#V,m tP4h0du0,h0?6vь։BBO+\7t ֔-nrf:B֔C** v=ԿXKgmǞeئe_>_xtiB1<7rG[o׻cVvp83C $bczxhÅynwDZ~[C[ 6v%> [C̝cQ';332s7Hz%LgYqI ȂD21hAda{Tʣw0A^"xwT4$Ut:C%|>J{Z]rP2aۇ7"ջ'8 yo 8TM&=-c'jI81fe_ˡ`Sy{^.~~!FW3v<.z4?}(ocy(wq|K[KxO\9I*1fA^#vJ#u(B:$D,4):ڭ"nlʉǶH#6GH [27Ko2V-n10Io$AUMGy(. SS;.$3)%)=O(X ~ہQ]1:|vw3="c8sX5p!L ef1;HBGT\y]ӻ_@ѭd\)9Qѩc弁V;8tO36<$`+kOMk2$!Uupt;$r`*m`R*8xMGX(&rAEΡOuzXJBxB]P8_?^/Ք3̻wόf۔eFwrY( 84Ւ7`N@)#D\vFRcN9]ZY4T_G{Rq8fl:XDk'}2_ӈMpPe6C Z?ZFM1ٸ`ͅ_}Y^l۩5J/+oƸªuo4e`}cyXs8JJkh3ezY^)VCJܼlSB0'U?*$>ըa3xYZWY@vg=麾LNjI8fy-sT sWkʇS\[p`jl > H>tj\ԃֹ<9v曳ZXy_+-.uuK ސE@;$A\nvH,}lňfD3(? YȊVƋeV,?QR|T]PX^_(3ݾF {Z;Tz)|> SBxjaZ]/dΙY?A}أ#6I~= ,n}EcB˓/~d` ,nn@DBMOMxc…0RX RE B|Kϰ|fX̻Eff|+KAP@P.`v<w< Y芾TLInILG`]mE/F=5gM 'pL$.%8>m?c/Z fEWޑ 6@ylU I.džqś͊I3f<.̶UWsgUzREI7iTѰ-_(8ͩ +ۂG\= %?Kxb/ŰQKfVd6SIKi~y9l`JƭS{ǃo/`3;?E]FM8> qZYx=Gkesm;o~$V)x Ek Ix,^Xk-:diœKwSIeWiv<1]!t _^W:Z1f󅞟U  'T&N5ex^yM^,fҎ0Ozr`{ IDATf 8S721Loϰ[3Ǽ KeX[њҼ~2M< y[/9Sj q͈/l;bu]+x5e\4aCCw"jt\O^C_)9Zv(Z(u=9>J8&]VT [`Tͱ)8)arNEGod0roڽ0J 'X= b^)>.MX* qu7ſb/aʥ m`BNOSyja]OnR=s^`gl,BT5r")(&.EIw]ȏx 9qq7'=C;,v(<:^3ς%X#BqqU՛XDwXDG~%D=1hvLZ!`3ьF$~I,o{e^Ayh4wq@LR&}~87\70fuF43lҖyͥiFF#s:h׬1 VeqL'&u)<# Kiiш|П#-.Z;~b|$6]=t)H)  NcIlIZ`C봻!v QӌbyXJŅ=rj-C3HPvRбqwLLJj4-qG +51/Ṃ8ǥAGȹ→ӦI8.caqrZ<  ̜^M% wd^\6Dusl6Sis&!uޓ%9^JLeߖ6}rW*w(r_F[Ay%6RW"_<XViӠuhGLTN!tl<:ٷii TO|z{UO}UV4«@?Á!p G qsb&&UtnyFM Qx7N+zzZ9K1<5\?Z;b &$/$G:Z|sRf0LPFKx# nX fRQ%\sH1`SM 'Vr4Aʖy:BXF:$T٧ҁմNҙ"d?aNG"hDJ.נ0yxfL2O3qX/Lxןwbk6| eTH븽K⣥s]&3c'/&->tHoX;DSϊ:`z՗S~ZVcǶ=w}$퀑T>x#\nO |5tYt0ց>歚L[mE}ވDZ knTƷ,' jOiAce0 )w4\zѥX~~UD"˭'ʴlfD?]]ۭƲi+"Vvs;}{"[_9/ƻ)E0{_5@fMH;ìrvշ-xm< Q?$/HFRy֞aMf*ê;ϊݣ)N*5]]`h}lfS)zNsb'U*ޔN smX9EMm)׆cndrXՊ^:d9˻֤#iXQV3ŦlEPN OӔD\;7g܊~mv9ܡ`7/m,ӚO^ӡDiXr(8)5SH Mȟ^f}=Ӧ` F EQqur L @_&ͤ3A BYYV8\Q)D#G6u9/SZp hC .5xz8ÒXeMS._ 察(_Gzc EKGG_֜]Uꁕds(*ɫjz{pvfv"d"yC'4 Rh4Dģay^#;YozQO&Jjk^[WJJ yQ~/_a&c_UrڤXyB]׺WGcۙ?j!/6q}P&.G>⤜ePɭb ΪT.~&Ģẑy3yAXN'HG#zw_@P'T_5RJ1D Rǂ9 l,ҲjJu>;o蒭v6 6{S}X(^PiNFڑޓKfLF{nf#>G1;8ޓ'?޽<PI<=&X8QxpvyI݀X.ݖPg3JKYG/ll+ζ?jʮ}r׭/!Q UӴK400fQH:%Zjig;mZ=^]/n@\]ִXjg řkyb2zd&FSut$d>hlB{=vu`z c9U(2]|)Z5`g [{$B2~8$KhxMV ?7(g.c# 1\|{\ QOUvrnu| s3\(>}Mz^Ty vvGT4ɏ3 +E[|D;7~-"/hή=WW)ʦf IG,I7" `f'++Mbؘ,[=q6+Mn|& P#MG]SjklB @(v Tҡ+RyN6D_`gH;OXܢHbCRl8.{jQngvóGG^oy'؟,.'!< {G,N.x{KܡՓ$'6I:7ifh]7-)1#]ύt$Ow qr8} xD<0󓛬v1 #8~~ sjfIÍ44ot7Z6 c8s?Cf(MyKiŪ#κgmçtqpڙcKHi>$ĔT4_~-P|D+EB@1ۈvbCrf@C";=l>N+*?qޥ*,҂.oVJX;a8X8,_etx-FKa:SNWyYl&p/g+]HIUCЪ/b=GդD+92e%);%q+,Vj"8J%xշ;1|` |cVf?n]=b0ﲒϐ3 8W9 <Ǽ}{PЖ{EuSZtڣ&,<Íܷ#wy_=C@H%RY*wcz(\Ӡy ۡQQNk1 LFg v \F`g\B%39un`x&5ѻ NRy$t( ϪK"ҋ]~6'_axRvubRr[3◙vٜx!$q0aw@Cx(SӉY}ɔ&slqq!i~YA*N!ؠqM?ӷ 6Kiy<@Qq(˘ɴܜUYZgM,(;Dgl)5hpҾX. +rB% :Zecx<. WێEn;)!VLo*GgI4= ٚCSVRxpDPUj~4t>*oleI#WGMk :rv PF4ݴ;3&.'`r@ Xr< 2ܙER ْUD1AXL;uh.˸cEaNd +"=7skVv[2['&$8".ʸXCf'I" )V55`aoQ@b"T%!8عʃH;va9E_Q2wNcb&JsP^TVR6gy?[3=Vw6a?]vJgt=Np0.r@ָ:},❫yrf8$א@\N )_;yjt?Kgp&$[UݏqacF̣̺;pC.[8P~Q zIDATT~JW zNxGD0DGMwYw[{Wv~Fx W0 nq7+n(9NGݖ+vסjclopS&w]y٩k>p`~<^v<УcfĉgOёoN_2,VVw&c︟l)./u_e\cy|Ox5c4oKg_JƗo?p>`P 6qX98}5W&]{7o_⃈lo@M W ? sX ]") gsߩPIyOānUGsyuHZDKN͇^>Uw!+I"wO@U#76%ѽ`:S-Wvz~ygTk՝>ݱwuʻD!C?U [~Hdu*O Q:UEmȶm;} !jS>ga/ 'HBj @ ߖ-oJB >3o'd78g>#ψAM@)5".`T<.;.<^sbD GvW1{qXOH*NFf.}F38"EwdF1<7z[tۋ'(Fo8IdH玛4}x&'?ŋq=iծ;ʥ XG"gUIё[-/E_y׶Q3'c]*H"{tjR=c4fkϯ%Tݳ: 3@ GS8CMcI;?tKٍx㱇j28k$X>G0."Gpg٤ @fC''oUCŏLJu{<:`ґzoA&Uހv\owڭ-wE8N-5qd$ -H ~f}{Dl]ͤN+:,Vå= 2=g뼾;'t6Y\TBâ̂ij5rn-$sB0C7׭ѿhV@76 CR #8[q~߱(Q+U#S88]L`ݿWZ @ @8pgYF3scv xw~JFg l8 @ @ @?.ܾwNpJ]FOOZQGwC{=x@:@ @ @"p @ @ @3YIENDB`bin/000077500000000000000000000000001516101623200116235ustar00rootroot00000000000000bin/p3x-onenote.js000077500000000000000000000025331516101623200143460ustar00rootroot00000000000000#!/usr/bin/env node //const os = require('os'); //const process = require('process'); //const cores = os.cpus().length < 4 ? 4 : os.cpus().length; //process.env.UV_THREADPOOL_SIZE = cores; //console.debug(`P3X sets UV_THREADPOOL_SIZE to ${cores} thread pool`) if (!require('fs').existsSync(`${__dirname}/../node_modules`)) { require('child_process').execSync(`cd ${__dirname}/.. && npm install --only=prod`, { stdio: 'inherit' }); } const utils = require('corifeus-utils'); const path = require('path'); const mz = require('mz'); const start = async() => { try { const desktopEntry = `${process.env.HOME}/.local/share/applications/p3x-onenote-cli.desktop`; const exists = await utils.fs.ensureFile(desktopEntry, `[Desktop Entry] Version=1.0 Type=Application Name=P3X Onenote Icon=${path.resolve(__dirname + '/../src/electron/images/128x128.png')} Exec=${__filename} Comment=https://www.patrikx3.com Categories=Office; Terminal=false `) if (!exists) { await mz.fs.chmod(desktopEntry , '0755'); await utils.childProcess.exec('gtk-update-icon-cache || true'); } await utils.childProcess.exec(`${__dirname}/../node_modules/.bin/electron ${path.resolve(__dirname + '/../')} ${process.argv.join(' ')}`, true); } catch (e) { console.error(e); throw e; } } start(); change-log.md000066400000000000000000000231761516101623200134120ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end ## Change log ### v2022.4.127 Released on 05/31/2022 * CHORE: Update Electron ### v2022.4.114 Released on 02/21/2022 * FEATURE: Simplified-Chinese Translation. ### v2022.4.112 Released on 02/05/2022 * CHORE: Upgraded to latest versions ### v2022.4.104 Released on 01/05/2022 * CHORE: Update deps. ### v2021.10.167 Released on 10/28/2021 * BUGFIX: Enhance boot speed - 1 second faster (but it is still very slow, because the Electron webview issues) ### v2021.10.165 Released on 10/28/2021 * BUGFIX: https://github.com/patrikx3/onenote/issues/157 ### v2021.10.158 Released on 10/26/2021 * FEATURE: Changed the `change-log.md` file name. ### v2021.10.155 Released on 10/21/2021 * FEATURE: Optimized boot speed. ### v2021.10.133 - 9/30/2021 * FEATURE: Added `--minimized` argument. ### v2021.10.130 * BUGFIX: Fix Electron 14 error. ### v2021.10.111 * BUGFIX: Replace `configstore` to `electron-store` ### v2021.10.109 * FEATURE: In the link popup external buttons moved from center to the right. ### v2021.10.108 * BUGFIX: https://github.com/patrikx3/onenote/issues/152 ### v2021.10.106 * BUGFIX: https://github.com/patrikx3/onenote/issues/152 ### v2021.10.104 * CHORE: Update deps. ### v2021.4.192 * CHORE: Update deps. ### v2021.4.190 * FEATURE: Enable zoom in the bottom toolbar. ### v2021.4.187 * FEATURE: Updated German translation. ### v2021.4.185 * BUGFIX: Proxy got baaaad. Fix is done. ### v2021.4.175 * FEATURE: The bookmarks are sorted by alphabetically. ### v2021.4.173 * FEATURE: Enhanced dark mode by keeping the original colors (a bit shift, but not invert like before). ### v2021.4.171 * FEATURE: Added Italian translation. ### v2021.4.169 * FEATURE: Enable dark mode (with quirks) using invert all colors. Not perfect, but it works and is bettter for you eyes. ### v2021.4.166 * FEATURE: Added Dutch translation. ### v2021.4.162 * BUILD: Add Ubuntu 32 bit AppImage version ### v2021.4.156 * BUGFIX: Fixed the latest Electron v12 version (it was crashing) ### v2021.4.154 * BUGFIX: Electron v12 is crashing when clicking on a link (build with Electron v11, works) ### v2021.4.152 * FEATURE: Corporate login fix. ### v2021.4.147 * FEATURE: The menu is by default will show the menu, but in the settings, you can hide it and only show with ALT. ### v2021.4.144 * FEATURE: Add `rpm` package format. ### v2021.4.140 * FEATURE: Add `deb` package format. ### v2021.4.136 * BUGFIX: The tray is more stable, but it is a hack, not perfect. ### v2021.4.132 * BUGFIX: The tray is more stable, but it is a hack, not perfect. ### v2021.4.122 * BUGFIX: The tray is more stable, but it is a hack, not perfect. ### v2021.4.113 * BUGFIX: The tray is more stable, but it is a hack, not perfect. ### v2021.4.103 * CHORE: Update deps ### v2021.4.101 * BUGFIX: Proxy settings was not loading on runing, only during setting the proxy (https://github.com/patrikx3/onenote/issues/128) ### v2020.10.189 * BUGFIX: The bookmarks editor title was wrong, showing adding. ### v2020.10.187 * FEATURE: Add bookmarks menu. ### v2020.10.179 * BUILD: Removed 32 bit version in Linux. ### v2020.10.178 * BUGFIX: Fix button order by using Material Design Specs. ### v2020.10.164 * BUGFIX: Build problem. ### v2020.10.159 * BUGFIX: French build fix. ### v2020.10.157 * FEATURE: Added French language. ### v2020.10.155 * BUILD: Fix newer build from `electron-builder`. ### v2020.10.132 * CHORE: Updated deps. ### v2020.10.123 * BUGFIX: Adds new translations for portuguese (https://github.com/patrikx3/onenote/pull/114) ### v2020.10.111 * BUGFIX: About blank fix (not full solution) ### v2020.10.109 * FEATURE: Back/forward button ### v2020.10.107 * FEATURE: Back/forward button ### v2020.10.105 * FEATURE: Tuned bottom toolbar ### v2020.10.103 * FEATURE: Since menu is not always showing, on the bottom toolbar is always showing a donate button. ### v2020.10.101 * FEATURE: GUI align layout on confirm popup (reverse button order) * FEATURE: The menu is initial hidden, you can enable by clicking ALT. ### v2020.4.200 * FEATURE: disable all AngularJs/AngularJs Material animations. ### v2020.4.197 * BUGFIX: Remove Fontawesome and jQuery, as we are not using. ### v2020.4.185 * CORE: update deps ### v2020.4.167 * BUGFIX: Minor translation fix, based on [Github Pull 100](https://github.com/patrikx3/onenote/pull/100) ### v2020.4.157 * FEATURE: Takes care of [Github Issue #97](https://github.com/patrikx3/onenote/issues/97) - Option to Disable Internal / External Popup ### v2020.4.154 * FEATURE: Added ARM version. ### v2020.4.131 * CHORE: Update NPM packages. ### v2020.4.119 * BUG: The set proxy menu was not working. ### v2020.4.115 * FEATURE: Added Spanish translation. ### v2020.4.109 * CHORE: Upgrade to Electron v8. ### v2020.4.100 * FEAT: Ability to hide the main menu (in tray mode only). ### v2019.10.318 * FEAT: Portuguese locale in the GUI enhance. ### v2019.10.317 * FEAT: Portuguese locale in the GUI. ### v2019.10.301 * Bugfix: configstore error ### v2019.10.211 * CHORE: Upgraded Electron v4 to v6 finally and using just 1 icon 🙌 ### v2019.10.202 * Bugfix: Build error. ### v2019.10.230 * Bugfix: Electron v6 was generating twice icons so I reverted to v4.2.8 ### v2019.10.127 * CHORE: Upgraded Electron v4 to v6. ### v2019.10.117 * BUGFIX: DISABLE_WAYLAND fix * https://github.com/patrikx3/onenote/issues/70 * https://github.com/patrikx3/onenote/pull/71 ### v2019.4.122 * BUGFIX: configstore v5 is not working with SNAP, had to revert to configstore v4 * https://github.com/patrikx3/onenote/issues/68 ### v2019.4.115 * BUGFIX: The cursor sometimes hidden * https://github.com/patrikx3/onenote/issues/67 ### v2019.4.114 * BUGFIX: Since the `Language` menu shift from the `Check updates` `Help` to `View`. ### v2019.4.108 * CHORE: Revert to Electron v4, as showing 2 icons with the hack. ### v2019.4.104 * CHORE: Upgraded to Electron v5 * BUGFIX: Electron was not working sandbox, I worked it out with a script in `src/build/after-pack.js` ### v2019.4.101 * BUGFIX: Minor translation issue. ### v2019.4.42 * BUGFIX: Revert Electron to v4.2.1 as there is an SUID permission, https://github.com/patrikx3/onenote/issues/63 ### v2019.4.39 * FEATURE: New `OneNote 2019` icon * FEATURE: German translation, able to try to guess `Online Onenote` language, but not always working ... ### v2019.4.33 FEATURE: Added in the `Action` menu to go to any URL. ### v2019.4.32 FEATURE: The link chooser was missing the cancel button. ### v2019.4.31 CHORE: Updated all dependencies. ### v2019.4.26 FEATURE: the Electron GUI color (you can check in the `Set Proxy` theme) is switched form blue to purple ### v2019.4.24 FEATURE: Allows using multiple instances (with some quirks, as the config will not be synchronized, so it can provide wrong settings) ### v2019.4.21 FEATURE: Reverted added emoji in the title (notebook) ### v2019.4.19 FEATURE: Added emoji in the title (notebook) ### v2019.4.17 FEATURE: The settings tray menu is a checkbox now (it was a button and different labels). ### v2019.4.12 BUGFIX: the tray was giving a "tray was already destroyed" error ### v2019.4.8 FEATURE: for all links in P3X OneNote is left for the user to decide how the links are handled - as internal or external ### v2019.4.7 * BUGFIX: the tray was showing all the time, now, it only shown if the close button behavior is happening by minimize to the tray ### v2019.02.17 * BUGFIX: Added info, that not every case can be handled. * BUGFIX: On the sidebar on notebooks it was opening a new window, it is quite hacky, but is supposed to be working. ### v2019.02.16 * BUGFIX: On the sidebar on notebooks it was opening a new window, it is quite hacky, but is supposed to be working. ### v2019.02.04 * BUGFIX: Donation button was Hungarian, now is supposed to be automatically by browser locale. ### v2019.02.02 * FEATURE: Disable/enable main timer on window blur/focus * CHORE: upgrade to Electron 4.0.4 ### v2019.01.24 * CHORE: upgrade to Electron 4.0.2 ### v2019.01.18 * BUGFIX: it was saving the window position and size, but it is not correct, because the user could change 2 monitors to 1 monitor and could save incorrect positions, so I disabled this option [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2022.4.127 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end onenote.iml000066400000000000000000000007131516101623200132260ustar00rootroot00000000000000 package.json000066400000000000000000000071371516101623200133510ustar00rootroot00000000000000{ "name": "p3x-onenote", "version": "2022.4.127", "description": "📚 P3X OneNote Linux", "main": "src/electron/app.js", "corifeus": { "description-snap": "P3X OneNote Linux", "description-npm": "📚 P3X OneNote Linux", "snap": true, "prefix": "p3x-", "publish": true, "type": "p3x", "code": "Linux", "nodejs": "v16.15.0", "reponame": "onenote", "build": true, "opencollective": false, "install-appimage-launcher": "sudo add-apt-repository ppa:appimagelauncher-team/stable && sudo apt install -y appimagelauncher" }, "bin": { "p3x-onenote": "bin/p3x-onenote.js" }, "scripts": { "run": "electron --no-sandbox .", "test": "grunt", "build": "electron-builder --x64 build/dist", "build-test": "electron-builder build/dist -p always", "postinstall-save": "opencollective postinstall", "start": "node ./node_modules/.bin/electron ./src/electron/app.js", "publish-electron": "rm -rf dist && mkdir -p ./dist/__appImage-x64 && mkdir -p ./dist/__appImage-ia32 && electron-builder -p onTagOrDraft --linux --x64", "publish-electron-arm": "rm -rf dist && mkdir -p ./dist/__appImage-armv7l && mkdir -p ./dist/__appImage-arm64 && electron-builder --armv7l --arm64 --linux --publish=always", "publish-electron-dep": "rm -rf dist && electron-builder --linux deb --publish=always", "publish-electron-rpm": "rm -rf dist && electron-builder --linux rpm --publish=always", "publish-electron-arm-test": "rm -rf dist && mkdir -p ./dist/__appImage-armv7l && mkdir -p ./dist/__appImage-arm64 && electron-builder --armv7l --arm64 --linux", "publish-electron-snap": "rm -rf dist && mkdir -p ./dist/__snap-amd64 && electron-builder --linux snap -p never", "publish-electron-yml": "node ./node_modules/corifeus-builder/src/utils/appimage/post-build.js" }, "repository": { "type": "git", "url": "git+https://github.com/patrikx3/onenote.git" }, "keywords": [ "onenote", "linux" ], "author": "Patrik Laszlo ", "license": "MIT", "bugs": { "url": "https://github.com/patrikx3/onenote/issues" }, "homepage": "https://corifeus.com/onenote", "dependencies": { "@electron/remote": "^2.0.8", "@fontsource/roboto": "^4.5.7", "@fortawesome/fontawesome-free": "^6.1.1", "angular": "^1.8.2", "angular-animate": "^1.8.2", "angular-aria": "^1.8.2", "angular-material": "^1.2.4", "angular-messages": "^1.8.3", "corifeus-utils": "^2022.4.114", "electron-store": "^8.0.1", "electron-updater": "^5.0.1", "semver": "^7.3.7" }, "devDependencies": { "corifeus-builder": "^2022.4.115", "electron-builder": "^23.0.3" }, "engines": { "node": ">=12.13.0" }, "build": { "afterAllArtifactBuild": "./node_modules/corifeus-builder/src/utils/appimage/after-all-artifact-build.js", "publish": [ { "provider": "github", "owner": "patrikx3", "repo": "onenote" } ], "appId": "p3x.onenote", "copyright": "MIT", "productName": "P3X OneNote", "linux": { "category": "Office", "icon": "./src/electron/images/", "target": [ "AppImage" ] }, "snap": { "environment": { "DISABLE_WAYLAND": 1 } } } }scripts/000077500000000000000000000000001516101623200125425ustar00rootroot00000000000000scripts/start-local.cmd000066400000000000000000000000601516101623200154500ustar00rootroot00000000000000.\node_modules\.bin\electron.cmd --no-sandbox . scripts/start-local.sh000077500000000000000000000002011516101623200153170ustar00rootroot00000000000000#!/usr/bin/env bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ./node_modules/.bin/electron --no-sandbox $DIR/.. $@ src/000077500000000000000000000000001516101623200116425ustar00rootroot00000000000000src/electron/000077500000000000000000000000001516101623200134555ustar00rootroot00000000000000src/electron/app.js000066400000000000000000000104421516101623200145740ustar00rootroot00000000000000const pkg = require('../../package.json'); const Store = require('electron-store'); const conf = new Store(); const {app} = require('electron'); app.allowRendererProcessReuse = true let translationKey = conf.get('lang') if (translationKey === undefined) { translationKey = 'en-US' conf.set('lang', translationKey) } let darkThemeInvert = conf.get('darkThemeInvert') if (darkThemeInvert === undefined) { darkThemeInvert = false conf.set('darkThemeInvert', darkThemeInvert) } const path = require('path') const langTranslations = { 'en-US': require('../translation/en-US'), 'de-DE': require('../translation/de-DE'), 'pt-BR': require('../translation/pt-BR'), 'es-ES': require('../translation/es-ES'), 'fr-FR': require('../translation/fr-FR'), 'nl-NL': require('../translation/nl-NL'), 'it-IT': require('../translation/it-IT'), 'zh-CN': require('../translation/zh-CN'), } const translation = langTranslations[translationKey] global.p3x = { onenote: { pkg: pkg, darkThemeInvert: darkThemeInvert, lang: translation, translationKey: translationKey, translations: undefined, title: translation.title, conf: conf, disableHide: true, allowMultiple: false, optionToDisableInternalExternalPopup: false, optionToHideMenu: false, iconFile: path.resolve(`${__dirname}/images/128x128.png`), tray: undefined, window: { onenote: undefined, }, action: undefined, menus: undefined, mainMenu: undefined, setVisible: undefined, bookmarksEditMode: false, createWindow: { onenote: undefined, }, isVisible: () => { return global.p3x.onenote.window.onenote.isVisible() && global.p3x.onenote.window.onenote.isFocused() } } } global.p3x.onenote.translations = langTranslations // configuration global.p3x.onenote.disableHide = conf.get('disable-hide') if (global.p3x.onenote.disableHide === undefined) { conf.set('disable-hide', true) global.p3x.onenote.disableHide = true; } // optionToHideMenu global.p3x.onenote.optionToHideMenu = conf.get('option-to-hide-menu') if (global.p3x.onenote.optionToHideMenu === undefined) { conf.set('option-to-hide-menu', false) global.p3x.onenote.optionToHideMenu = false; } // configuration global.p3x.onenote.optionToDisableInternalExternalPopup = conf.get('option-to-disable-internal-external-popup') if (global.p3x.onenote.optionToDisableInternalExternalPopup === undefined) { conf.set('option-to-disable-internal-external-popup', false) global.p3x.onenote.optionToDisableInternalExternalPopup = false; } // configuration global.p3x.onenote.allowMultiple = conf.get('allow-multiple') if (global.p3x.onenote.allowMultiple === undefined) { conf.set('allow-multiple', false) global.p3x.onenote.allowMultiple = false; } // loading global.p3x.onenote.action = require('./main/action'); global.p3x.onenote.menus = require('./main/menus'); global.p3x.onenote.mainMenu = require('./main/create/menu') global.p3x.onenote.mainTray = require('./main/create/tray') global.p3x.onenote.setVisible = require('./main/set-visible') global.p3x.onenote.createWindow.onenote = require('./main/create/window/onenote') if (global.p3x.onenote.allowMultiple === false) { const semver = require('semver') if (semver.gt(process.versions.electron === undefined ? '4.0.0' : process.versions.electron, '3.0.0')) { const gotTheLock = app.requestSingleInstanceLock() app.on('second-instance', (event, commandLine, workingDirectory) => { // Someone tried to run a second instance, we should focus our window. global.p3x.onenote.setVisible(true); //global.p3x.onenote.window.onenote.webContents.reload(); }) if (!gotTheLock) { app.quit() return } } else { const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => { global.p3x.onenote.setVisible(true); //global.p3x.onenote.window.onenote.webContents.reload(); }) if (isSecondInstance) { return app.quit() } } } // app and ipc main events and configuration require('./main/ipc-main') require('./main/app-events') src/electron/images/000077500000000000000000000000001516101623200147225ustar00rootroot00000000000000src/electron/images/128x128.png000066400000000000000000000171551516101623200163760ustar00rootroot00000000000000PNG  IHDR6zTXtRaw profile type exifxڵW#rD1 6 v-@NT{}b4r&\Xo{xϿ%8o<}|ڐϛr_nh0hϞ>H뼋wCu]RK~joM?DXi& ޯ=Aw\L4| 0ǧ`Ǒl'vl)8Kx!js=]E(kgT8 _8WUlL;l5\ul㢛n0|z?|8JȾ.?rP g Lϱo= Wy:n2]O^f&r#4dQFm&01eYfm9@WZ*viλkWkxJOqh)$ Wϩl$E 2ot1\i^#To^)|Ɯ.Mok zbp>sHd5yM.UqխsOn!w5iϡqďV4O3D$#pk՟: ,I̠G曇_V|po>9ˣad9&d#mU-2VdV&~/ Lm%}I@Е[rSB}Ï=a# ]k@?~3$rurPa W7@6=j OL tQC{2kBXl`R.ݢj}O7:dnTkBS('öt6#@ᶘ< !y!%SFU2'aDՠ)-?Œy;%4A+,?0K}\<-vh0u1 . }~+$ZYܱ]NJ=w> (f"V=D O‡JBm:fII~J|ns*Igy05!iui_ޮP롲[cL"VF8IHxl+Ρ~!Aw21`*n BYw=Zj.+bG !E: >InDZѿ\6qj׶xTӢ#D;Pa4b5Aea_/2j] .׹?vAuXntx9xlI蜒C d]OH(Y,1L jҖ|")i6vHKܞ(phi;*}m |\(h Ӕ(s_.֢1>ŕHfwHd >tڪQQð~*Lhijk)d4u)q&ɐfߦXև<'aS%Ѡ(Iư\NH]# JT0@˔}b q3!~mJ;tE# gCb>>wkRE ľKV(jЏJ+;P&2f>/MvR"hAݩۏF<\0s;ƌ"zҕ6p(( ~ q 0)%p&E TQIkE$#S"&.DADcbLeW2fϚώ5(p,yv$1("@ɨƊC Zlfg GRjZ"i,-$n]jX|Vs Im^u(u".T`ITD9 UJ^KNR%p(1QGiLMn0DkHnh~@t]3zo8ή5ډuP&㪹qP]J y:G!0"xp c rRVR?Df|{sm}]%c~F,\o'躙)ˆH!k38P+d -畺U$zE[(5')Į CP65R:RhS=U*+'9GhAcbG@FES,RH$"l')%v!ĭ#P4JÉ$BΜ? ]=qޙ87fy ltXsZAP Y*ɼ-"(!7G eT DD%y`VAVFD/̤Yו[ġ(Q0$^YhDU.۹Aȩ}D3]rf3Lֻ@F"Lҩ@cFCOD[:({ -G`߶td֚j c݋|3?*L־]EXB=7S~c#MwUvaBZBb>| Sua QXXx"!\լ2":!7q$Q@ƪZ"\h5]81sٙ r/j(VQxx~]Scʛqu6%?|vjFlUhtpV-\NNq5`2RZL2un\Z6{ZP.܍d˘lrb)v[~80ͨO]WA LoP5-Dѝ85qܑF ^2S2O6滼1ߤ.oM{)m2&_%iTM]|I@W}8U:kYOl:ڦ$̢ݣ*۞4~}-. Rg'rKuS1Q)>eS&(?(wߋVY?Q;$iFagFlXxJty ">I,ȢSS֪b9A(L(G.StsHx1.!ovd6@L: HYT8e~E reImJޅP(+;]jKMԄ>:~#Kmg:\*l/=$RdVN9]:Iů- }DڣB<; }#ZH~&03k3cWb c7rߤ0J\֧ZvQ L-#rzPFѶ:yD-Ŏp!j$2 8A-dqK8- <o]'pUdyn Z՛2={X?X_+A[N+$S U*LЫz7&&`L$R g@UomQSiV`R7;:ʯoW J7*˶o(2{O@g섍ҳR&iD2DjRYv(%V eaBYrX̖zv)a{Ӽxl׭+JW_mz]' [>mtrme-]\*?5tu@@E.qERr nzzgigN  P@N~{sgZWq)[zگ~0rֈV U#USyMno3G6g_gHtUE2s/R$t7ڨT>vb^ƺ쬻'sjEn6z=q8t:f3wv;j4{y;}>b1r`/n].kONх%SѲ_Ûڊ6~ϡaă*~&oɄ4FSr*BDgj(<\إaatRNS@fbKGDH pHYs  tIME 3,IDATxOU0jxqBZ˥e\h Bn-*Dn/ -)%@>_-"Rx3sYm:B撒bŊ+VXW$6G7m~3K?[%` X{y=yB„@ v]"K ;99911֧(7>sBa߻ŒHvp $ G'qO=[QYYYNNNKKMi``|]>7j9-5_]}&(5b`ď>Jbeܔ 4Wx$wA q&__7B㙂 + ^`/|1Zp$ G5ޛ}ߘbߕ*7B=hNjnw,-\L=_i>|17cIC *R}_fwY]U; gC|SUZ/.Ȋͧ ?r.hSxy@n)Y1nV AuWbS P|60O="t h7]&+׫N8ݺK62eS2J@(RDUk .&%ҙO귶 NЙOXe~.nӥuJf"st.(*"M O=* vӥ^/x%6]QYu ?&=u<j̏hݥ |0y GU'`*]8>w@ λT,d1جCPN6 .iD`ϡw*@}2_ NgxݍA+++;'@uzA h.*n[6T_ %젱Oز*n|wm*&Ю9nS~٧M)*pp7;h)ܺKaLW\yULv.Fo[>z8Qq@ST=PNOT=pmv-L=tC U]~>R}Q7Swݣ&VQ A[=`o]&`DR_toa|oܬ-,~N qꋛOo$|P$!j#`zRO؄@{z*`fR\Ɨ_<7`Y_~񇧫ӳT݃o<}ɥe)waW@B[<[y|yj!q.|m!0o/, /RϋB\3̓)[02P)0eE[ :&GwA 2RZO( ƍ#IRSڞ_p@؍vK7, ?^H^N@3&C};jdԘx' ]>A4ߊ+VXSmh\IENDB`src/electron/images/256x256.png000066400000000000000000000077041516101623200164010ustar00rootroot00000000000000PNG  IHDRkXTPLTE`y"{!b{)s%sLr%$n%[c6'q)V+jdxaG_`X^b_db\dw2Kdu!zox}qc pr"tync{|v}m~l#bj{|sfzgi~ bk bj$a"|svyxhmk`]aed[i`Yb_cZ_޾^rqpWμ]vtR~lI_ݹ[aV˄$N%]ٰW̹\׺\؃#`d"OUƮVɩTÉDhKPFMEYѧS²X΃$CH@QATĥR?fUǚL|=UȏGJTśMS×KQB~>En6z=q8t:f3wv;j4{y;}>b1r`/n].kONх%SѲ_Ûڊ6~ϡaă*~&oɄ4FSr*BDgj(<\ZtRNS@fbKGDH pHYs  tIME | @IDATxSU_L3?uTDb!!!yH"VʋQW^T MF'$IӦәNw=gw˽|p{}ݽB( BP( BP( BP( B\+ [6@ @x#43&C @ @ @ Qdц>G |^}L&#@'P @7uUUUQ AJ OHuΟCLoz:~g7 XQ#_!`?{VO&aR+ھtmwjcgi 9 5UTQ)#"/~RLE"w23+ޏ!}$0$$pmH@)y/Eדy_֫$Koh0W176T6t$>  ,4 HW~b?'gl ^oYai00ILBU39C,SzO~f<룛F`k_57KBWtF'&hI`\ϴ0;t䀱x 7Oi?HM>'E7i[좓@I (IozeoZ7  5Oc3Ctl W\bO4?0LgA lkO||X|T+Ih_rAR%?SK> >$?Wg9Z/#eS `R AL~g K~)ZXs@DY o2 nVqS~b˖n@= ZyvfS86E=I/pe?51k @y+0~gH߾ %'2h9Х!}Zri'9rpXK^#U_r <ݨ{Oss_rp[g`ᒓ@3 r!p0+5k= @|7"(+t07v7 Y-dO#@ r˧V~v%D @~A46$= *?46=RBs_P@z3@z#J~f^lwȣr@ݽ&`[O@g_ 9M *~cֽ<aVb4E-_\ r?@m`_i =ɵP$?*ͺ@+P%?h`&?2L<aOE!hQ_w8U7g!paaE?(~pCk_b_yأ{?@ߕ}Ib ?< @BSS`ߥ{?@K_>P)I~ ' ,}_VZ_p ^ upk0^*$?@[3yX/naJ*w`^i3 $D. M/%LQJ~C#sS @^݈.pBAֽuFFWfg<%Ov@g YR>HA/=/ }ʲ4zw>z|1x^΍>o[bo[!qF.GY<}PEU2`X) n5j?J_ZX$PM_MS@|Z%2S3Cd S Y}dFF.u,O3 _oڂ͕L--+c1c LWs^ѥ!xݠەVL MN :]7o]N[ˮ5K:";YOwV|.î5338xPI2=ĿM`ȃzy⾡ e;R`ҋjP}tM^< @{U3uP=M5}x>!jn&WtVwfdjjjoo$SO1F'! ^@7uvU%~BRjO>%}L̾_P]Lى`7eH>^S81OĕIu@xQ~0~6rB? `FЯ@~PBi NY P( BP( BP( BP(jCo&޺IENDB`src/electron/lib/000077500000000000000000000000001516101623200142235ustar00rootroot00000000000000src/electron/lib/natural-compare-document.js000066400000000000000000000014511516101623200214700ustar00rootroot00000000000000module.exports = ({ byProperty }) => { return (a, b) => { if (byProperty !== undefined) { a = a[byProperty] b = b[byProperty] } const regexTemplate = /(\d+)|(\D+)/g; const ax = [], bx = []; a.replace(regexTemplate, function (_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) }); b.replace(regexTemplate, function (_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) }); while (ax.length && bx.length) { const an = ax.shift(); const bn = bx.shift(); const nn = (parseFloat(an[0]) - parseFloat(bn[0])) || an[1].localeCompare(bn[1]); if (nn) { return nn; } } return ax.length - bx.length; } } src/electron/lib/remove-cookies.js000066400000000000000000000025061516101623200175130ustar00rootroot00000000000000const remote = require('@electron/remote') const removeCookies = async(webview) => { //let session = webview.getWebContents().session; let session = remote.webContents.fromId(webview.getWebContentsId()).session try { const cookies = await session.cookies.get({}); for (var i = cookies.length - 1; i >= 0; i--) { const cookie = cookies[i]; let domain = cookie.domain; if (domain.startsWith('.')) { domain = domain.substring(1); } const url = "http" + (cookie.secure ? "s" : "") + "://" + domain + cookie.path; console.info(` cookie.domain: ${cookie.domain} cookie.hostOnly: ${cookie.hostOnly} cookie.httpOnly: ${cookie.httpOnly} cookie.name: ${cookie.name} cookie.path: ${cookie.path} cookie.secure: ${cookie.secure} cookie.session: ${cookie.session} cookie.value: ${cookie.value} url: ${url} `); try { await session.cookies.remove(url, name) console.log('cookie delete : ', cookie.name); } catch(error) { alert(error.message); console.error(error); } } webview.reload(); } catch(error) { alert(error.message); console.error(error); } } module.exports = removeCookies; src/electron/main/000077500000000000000000000000001516101623200144015ustar00rootroot00000000000000src/electron/main/action.js000066400000000000000000000027231516101623200162200ustar00rootroot00000000000000const {shell, app} = require('electron') const action = { setProxy: require('./actions/set-proxy'), restart: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'restart' }) }, home: () => { global.p3x.onenote.window.onenote.show(); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'home' }) }, corporate: () => { global.p3x.onenote.window.onenote.show(); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'corporate' }) }, toggleVisible: () => { if (global.p3x.onenote.window.onenote === undefined) { return; } global.p3x.onenote.setVisible(!global.p3x.onenote.isVisible()); }, quit: function () { app.isQuiting = true; app.quit(); }, github: () => { shell.openExternal('https://github.com/patrikx3/onenote') }, patrik: () => { shell.openExternal('https://patrikx3.com') }, p3x: () => { shell.openExternal('https://github.com/patrikx3') }, corifeus: () => { shell.openExternal('https://corifeus.com') }, npm: () => { shell.openExternal('https://www.npmjs.com/~patrikx3') }, download: () => { shell.openExternal('https://github.com/patrikx3/onenote/releases') }, } module.exports = action; src/electron/main/actions/000077500000000000000000000000001516101623200160415ustar00rootroot00000000000000src/electron/main/actions/relaunch.js000066400000000000000000000010211516101623200201720ustar00rootroot00000000000000module.exports = () => { let { args, app } = require('electron') //console.log('args', args, 'process.env.APPIMAGE', process.env.APPIMAGE) //console.trace() if (process.env.APPIMAGE) { if (args === undefined) { args = [] } const options = {args}; options.execPath = process.env.APPIMAGE; options.args.unshift('--appimage-extract-and-run'); app.relaunch(options); app.exit(0); } else { app.relaunch(); app.exit(0); } } src/electron/main/actions/set-proxy.js000066400000000000000000000002151516101623200203470ustar00rootroot00000000000000const setProxy = () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-set-proxy') } module.exports = setProxy;src/electron/main/app-events.js000066400000000000000000000012201516101623200170140ustar00rootroot00000000000000const {app} = require('electron') app.on('ready', global.p3x.onenote.createWindow.onenote); app.on('window-all-closed', function () { // if (process.platform !== 'darwin') { app.quit(); // } }); app.on('activate', function () { if (global.p3x.onenote.window.onenote === null) { global.p3x.onenote.createWindow.onenote(); } }); //FIXME: webview new-window changed app.on('web-contents-created', function (webContentsCreatedEvent, contents) { if (contents.getType() === 'webview') { contents.on('new-window', function (newWindowEvent, url) { newWindowEvent.preventDefault(); }); } }); src/electron/main/create/000077500000000000000000000000001516101623200156445ustar00rootroot00000000000000src/electron/main/create/menu.js000066400000000000000000000340051516101623200171500ustar00rootroot00000000000000const {dialog, Menu, shell} = require('electron') const menus = require('../menus'); const action = require('../action'); const mainTray = require('./tray') function mainMenu() { const copyLocation = { label: global.p3x.onenote.lang.label.copyLocation, click: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'get-location' }) } } const minimizationBehaviorLabel = !global.p3x.onenote.disableHide ? global.p3x.onenote.lang.label.disableHide.no : global.p3x.onenote.lang.label.disableHide.yes const languageCheckbox = []; for (let trans of Object.keys(global.p3x.onenote.lang.menu.language.translations)) { const transLabel = global.p3x.onenote.lang.menu.language.translations[trans] const transMenu = ((trans) => { return { label: transLabel, type: 'radio', checked: global.p3x.onenote.conf.get('lang') === trans, click: () => { global.p3x.onenote.conf.set('lang', trans) global.p3x.onenote.lang = global.p3x.onenote.translations[trans] mainMenu() mainTray() global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-language', { translation: trans, }) } } })(trans) languageCheckbox.push(transMenu) } const bookmarksMenu = [ { label: global.p3x.onenote.lang.bookmarks.add, click: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-bookmark-add', { edit: false, }) } }, ] const bookmarks = global.p3x.onenote.conf.get('bookmarks') || [] if (bookmarks.length > 0) { bookmarksMenu.push({ label: global.p3x.onenote.lang.bookmarks.edit, type: 'checkbox', checked: global.p3x.onenote.bookmarksEditMode, click: () => { global.p3x.onenote.bookmarksEditMode = !global.p3x.onenote.bookmarksEditMode } }) bookmarksMenu.push({ type: 'separator' }) } const naturalCompareDocument = require('../../lib/natural-compare-document') let bookmarksSort = bookmarks.sort(naturalCompareDocument({ byProperty: 'title' })) for(let bookmarkIndex in bookmarksSort) { const bookmark = bookmarksSort[bookmarkIndex] const thisBookmarkIndex = bookmarkIndex bookmarksMenu.push({ label: bookmark.title, click: () => { if (global.p3x.onenote.bookmarksEditMode !== true) { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-bookmark-open', bookmark) } else { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-bookmark-add', { edit: true, index: thisBookmarkIndex, model: bookmark, }) } } }) } const template = [ { label: global.p3x.onenote.title, submenu: menus.default(), }, { label: global.p3x.onenote.lang.bookmarks.title, submenu: bookmarksMenu }, { label: p3x.onenote.lang.menu.action, submenu: [ copyLocation, { label: global.p3x.onenote.lang.label.openUrl, click: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-open-url') } } ] }, { label: global.p3x.onenote.lang.label.settings, submenu: [ { label: global.p3x.onenote.lang.label.hideMenu, type: 'checkbox', checked: global.p3x.onenote.optionToHideMenu, click: () => { try { global.p3x.onenote.optionToHideMenu = !global.p3x.onenote.optionToHideMenu global.p3x.onenote.conf.set('option-to-hide-menu', global.p3x.onenote.optionToHideMenu,); if (!global.p3x.onenote.optionToHideMenu) { global.p3x.onenote.window.onenote.setAutoHideMenuBar(false) global.p3x.onenote.window.onenote.setMenuBarVisibility(true) } else { const message = ` ${global.p3x.onenote.lang.label.optionToHideMenuState.yes} ${global.p3x.onenote.lang.restart} ${global.p3x.onenote.lang.slow} ` dialog.showMessageBox( global.p3x.onenote.window.onenote, { type: 'info', // title: global.p3x.onenote.lang.dialog.minimizationBehavior.title, message: message, buttons: [global.p3x.onenote.lang.button.ok] }).then(() => { require('../actions/relaunch')() }).catch(e => console.error(e)) } } catch(e) { console.error(e) } } }, { label: global.p3x.onenote.lang.label.disableHide.checkbox, type: 'checkbox', checked: !global.p3x.onenote.disableHide, click: () => { try { global.p3x.onenote.disableHide = !global.p3x.onenote.disableHide; global.p3x.onenote.conf.set('disable-hide', global.p3x.onenote.disableHide); let message = global.p3x.onenote.disableHide ? global.p3x.onenote.lang.label.disableHide.message.yes : global.p3x.onenote.lang.label.disableHide.message.no if (global.p3x.onenote.disableHide === true && global.p3x.onenote.tray !== undefined) { message += ` ${global.p3x.onenote.lang.restart} ${global.p3x.onenote.lang.slow} ` } dialog.showMessageBox( global.p3x.onenote.window.onenote, { type: 'info', title: global.p3x.onenote.lang.dialog.minimizationBehavior.title, message: message, buttons: [global.p3x.onenote.lang.button.ok] }).then(() => { console.log('reloading tray settings') mainMenu() mainTray({ allowQuit: true }) }) } catch(e) { console.error(e) } } }, { label: global.p3x.onenote.lang.label.allowMultiple.checkbox, type: 'checkbox', checked: global.p3x.onenote.allowMultiple, click: () => { global.p3x.onenote.allowMultiple = !global.p3x.onenote.allowMultiple; global.p3x.onenote.conf.set('allow-multiple', global.p3x.onenote.allowMultiple); const message = global.p3x.onenote.allowMultiple ? global.p3x.onenote.lang.label.allowMultiple.message.yes : global.p3x.onenote.lang.label.allowMultiple.message.no dialog.showMessageBox(global.p3x.onenote.window.onenote, { type: 'info', title: global.p3x.onenote.lang.dialog.info, message: message, buttons: [global.p3x.onenote.lang.button.ok] }) mainMenu() mainTray() } }, { label: global.p3x.onenote.lang.label.optionToDisableInternalExternalPopup, type: 'checkbox', checked: global.p3x.onenote.optionToDisableInternalExternalPopup, click: () => { global.p3x.onenote.optionToDisableInternalExternalPopup = !global.p3x.onenote.optionToDisableInternalExternalPopup; global.p3x.onenote.conf.set('option-to-disable-internal-external-popup', global.p3x.onenote.optionToDisableInternalExternalPopup); mainMenu() mainTray() } }, { label: global.p3x.onenote.lang.label.setProxy, click: action.setProxy, }, { label: global.p3x.onenote.lang.label.darkThemeInvert.title, type: 'checkbox', checked: global.p3x.onenote.darkThemeInvert, click: () => { global.p3x.onenote.darkThemeInvert = !global.p3x.onenote.darkThemeInvert global.p3x.onenote.conf.set('darkThemeInvert', global.p3x.onenote.darkThemeInvert) global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'dark-theme-invert', darkThemeInvert: global.p3x.onenote.darkThemeInvert, }) }, } ], }, { label: global.p3x.onenote.lang.menu.language.label, submenu: languageCheckbox, }, { label: global.p3x.onenote.lang.label.edit, submenu: [ copyLocation, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.edit.undo, role: 'undo' }, { label: p3x.onenote.lang.menu.role.edit.redo, role: 'redo' }, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.edit.cut, role: 'cut' }, { label: p3x.onenote.lang.menu.role.edit.copy, role: 'copy' }, { label: p3x.onenote.lang.menu.role.edit.paste, role: 'paste' }, { label: p3x.onenote.lang.menu.role.edit.pasteandmatchstyle, role: 'pasteandmatchstyle' }, { label: p3x.onenote.lang.menu.role.edit.delete, role: 'delete' }, { label: p3x.onenote.lang.menu.role.edit.selectall, role: 'selectall' } ] }, { label: global.p3x.onenote.lang.label.view, submenu: [ { label: p3x.onenote.lang.menu.role.view.reload, role: 'reload' }, { label: p3x.onenote.lang.menu.role.view.forcereload, role: 'forcereload' }, { label: p3x.onenote.lang.menu.role.view.toggledevtools, role: 'toggledevtools' }, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.view.resetzoom, role: 'resetzoom' }, { label: p3x.onenote.lang.menu.role.view.zoomin, role: 'zoomin' }, { label: p3x.onenote.lang.menu.role.view.zoomout, role: 'zoomout' }, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.view.togglefullscreen, role: 'togglefullscreen' } ] }, { label: global.p3x.onenote.lang.menu.help.title, role: 'help', submenu: [ { label: global.p3x.onenote.lang.label.download, click: action.download }, { label: 'GitHub', click: action.github }, { label: global.p3x.onenote.lang.label.developer, click: action.patrik }, { label: 'P3X', click: action.p3x }, { label: 'Corifeus', click: action.corifeus }, { label: 'NPM', click: action.npm }, ] }, { label: global.p3x.onenote.lang.label.donate, click: () => { shell.openExternal('https://paypal.me/patrikx3') } }, ] if (process.env.APPIMAGE !== undefined) { template[7].submenu.push({type: 'separator'}) template[7].submenu.push({ label: global.p3x.onenote.lang.menu.help.checkUpdates, click: () => { const {autoUpdater} = require("electron-updater"); autoUpdater.checkForUpdatesAndNotify(); } }, ) } const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) } module.exports = mainMenu; src/electron/main/create/tray.js000066400000000000000000000026071516101623200171660ustar00rootroot00000000000000const {app, Menu, Tray } = require('electron') const menus = require('../menus'); const action = require('../action'); const destroyTray = () => { if (global.p3x.onenote.tray !== undefined) { global.p3x.onenote.tray.destroy() global.p3x.onenote.tray = undefined } } function mainTray(opts) { if (opts === undefined) { opts = { allowQuit: false } } // app.whenReady().then(() => { //destroyTray(); if (!global.p3x.onenote.disableHide) { if (global.p3x.onenote.tray === undefined ) { global.p3x.onenote.tray = new Tray(global.p3x.onenote.iconFile) const click = () => { console.info('tray on click is executed - if not shown in console. this click is not executed.') action.toggleVisible() } global.p3x.onenote.tray.on('click', click) } global.p3x.onenote.tray.setToolTip(`${global.p3x.onenote.title} v${global.p3x.onenote.pkg.version}`) const menu = menus.default() const contextMenu = Menu.buildFromTemplate(menu) global.p3x.onenote.tray.setContextMenu(contextMenu) } else if (global.p3x.onenote.tray !== undefined && opts.allowQuit === true) { require('../actions/relaunch')() } // }) } module.exports = mainTray; src/electron/main/create/window/000077500000000000000000000000001516101623200171535ustar00rootroot00000000000000src/electron/main/create/window/onenote.js000066400000000000000000000135111516101623200211610ustar00rootroot00000000000000const {BrowserWindow, app} = require('electron'); function createWindow() { const remoteMain = require("@electron/remote/main") remoteMain.initialize() global.p3x.onenote.window.onenote = new BrowserWindow({ icon: global.p3x.onenote.iconFile, title: `${global.p3x.onenote.title} v${global.p3x.onenote.pkg.version}`, backgroundColor: 'black', autoHideMenuBar: global.p3x.onenote.optionToHideMenu, webPreferences: { nativeWindowOpen: true, worldSafeExecuteJavaScript: true, nodeIntegration: true, nodeIntegrationInSubFrames: true, contextIsolation: false, webviewTag: true, } }); global.p3x.onenote.window.onenote.loadURL(`file://${__dirname}/../../../window/onenote/index.html`); remoteMain.enable(global.p3x.onenote.window.onenote.webContents) if (process.env.NODE_ENV === 'debug') { global.p3x.onenote.window.onenote.openDevTools() } global.p3x.onenote.setVisible(process.argv.includes('--minimized') ? false : true); global.p3x.onenote.window.onenote.on('minimize', function (event) { //event.preventDefault() //global.p3x.onenote.setVisible(false, true); }); global.p3x.onenote.window.onenote.on('close', function (event) { if (!app.isQuiting) { if (!global.p3x.onenote.disableHide) { event.preventDefault() global.p3x.onenote.setVisible(false); } } return false; }); global.p3x.onenote.window.onenote.on('focus', () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'focus' }) }) global.p3x.onenote.window.onenote.on('focus', function () { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-window-state', { action: 'focus' }) global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() }); global.p3x.onenote.window.onenote.on('blur', function () { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-window-state', { action: 'blur' }) global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() }); global.p3x.onenote.window.onenote.on('hide', function () { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-window-state', { action: 'blur' }) }); if (!process.argv.includes('--minimized')) { //const windowBounds = global.p3x.onenote.conf.get('window-bounds'); const maximized = global.p3x.onenote.conf.get('maximized'); if (maximized === true) { global.p3x.onenote.window.onenote.maximize() } } /* else if (windowBounds !== null && windowBounds !== undefined) { global.p3x.onenote.window.onenote.setBounds(windowBounds); } global.p3x.onenote.window.onenote.on('close', () => { if (global.p3x.onenote.conf.get('maximized') !== true) { global.p3x.onenote.conf.set('window-bounds', global.p3x.onenote.window.onenote.getBounds()) } }) */ global.p3x.onenote.window.onenote.on('maximize', () => { global.p3x.onenote.conf.set('maximized', true) }) global.p3x.onenote.window.onenote.on('unmaximize', () => { global.p3x.onenote.conf.set('maximized', false) /* const windowBounds = global.p3x.onenote.conf.get('window-bounds'); if (windowBounds !== null && windowBounds !== undefined) { global.p3x.onenote.window.onenote.setBounds(windowBounds); } */ }) const {autoUpdater} = require("electron-updater"); autoUpdater.on('checking-for-update', () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: global.p3x.onenote.lang.updater["checking-for-update"] }) }) autoUpdater.on('update-available', (info) => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: global.p3x.onenote.lang.updater["update-available"] }) }) let firstCheck = true autoUpdater.on('update-not-available', (info) => { if (firstCheck) { firstCheck = false return } global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: global.p3x.onenote.lang.updater["update-not-available"] }) }) autoUpdater.on('error', (error) => { console.error(error) global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', error: error, message: global.p3x.onenote.lang.updater["error"]({ errorMessage: error.message.split('\n')[0] }) }) }) /* autoUpdater.on('download-progress', (progressObj) => { /* let log_message = "Download speed: " + progressObj.bytesPerSecond; log_message = log_message + ' - Downloaded ' + progressObj.percent + '%'; log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')'; */ /* global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: p3x.onenote.lang.updater["download-progress"]({ progressObj: progressObj, }) }) }) */ autoUpdater.on('update-downloaded', (info) => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: p3x.onenote.lang.updater["update-downloaded"], }) }); autoUpdater.checkForUpdatesAndNotify(); } module.exports = createWindow; src/electron/main/ipc-main.js000066400000000000000000000025111516101623200164330ustar00rootroot00000000000000const {ipcMain} = require('electron') ipcMain.on('did-finish-load', function () { const toWebview = global.p3x.onenote.conf.get('webview-onenote'); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-onload-user', toWebview); }); ipcMain.on('p3x-onenote-save', function (event, data) { global.p3x.onenote.conf.set('webview-onenote', data); //global.p3x.onenote.conf.set('window-bounds', global.p3x.onenote.window.onenote.getBounds()); }) ipcMain.on('p3x-onenote-action-bookmark-result', function (event, data) { //console.log('p3x-onenote-action-bookmark-result', data) const bookmarksOriginal = global.p3x.onenote.conf.get('bookmarks') || [] const naturalCompareDocument = require('../lib/natural-compare-document') const sort = naturalCompareDocument({ byProperty: 'title' }) let bookmarks = bookmarksOriginal.sort(sort) if (data.opts.edit !== true) { bookmarks.push(data.model) } else { if (data.delete === true) { bookmarks.splice(data.opts.index, 1); } else { bookmarks[data.opts.index] = data.model } } global.p3x.onenote.conf.set('bookmarks', bookmarks.sort(sort)) global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() }) ipcMain.on('p3x-debug', (event, data) => { console.log(data) }) src/electron/main/menus.js000066400000000000000000000022431516101623200160670ustar00rootroot00000000000000const action = require('./action') const menus = { default: () => { let visible = false; if (global.p3x.onenote.window.onenote !== undefined) { visible = global.p3x.onenote.isVisible() ? true : false; } let menus = [ { label: global.p3x.onenote.lang.label.personalHome, click: action.home }, { label: global.p3x.onenote.lang.label.corporateHome, click: action.corporate }, { label: global.p3x.onenote.lang.label.clearCache, click: action.restart }, { type: 'separator' }, { label: global.p3x.onenote.lang.label.quit, click: action.quit } ] if (!global.p3x.onenote.disableHide) { const hideMenu = { label: visible ? global.p3x.onenote.lang.label.hide : global.p3x.onenote.lang.label.show, click: action.toggleVisible } menus.splice(3, 0, hideMenu); } return menus; } } module.exports = menus; src/electron/main/set-visible.js000066400000000000000000000020351516101623200171650ustar00rootroot00000000000000function setVisible(visible = true, force = false) { if (visible === null) { visible = true; } /* else { mainWindow.webContents.send('p3x-onenote-action', { action: 'focus-save' }) } */ if (global.p3x.onenote.window.onenote !== undefined) { if (visible || (global.p3x.onenote.window.onenote.isMinimized() && !force)) { visible = true; global.p3x.onenote.window.onenote.show(); } else { global.p3x.onenote.window.onenote.minimize() if (!global.p3x.onenote.disableHide) { global.p3x.onenote.window.onenote.hide(); } } } global.p3x.onenote.conf.set('visible', visible); global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() if (visible || force) { global.p3x.onenote.window.onenote.focus(); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'focus' }) } } module.exports = setVisible;src/electron/window/000077500000000000000000000000001516101623200147645ustar00rootroot00000000000000src/electron/window/onenote/000077500000000000000000000000001516101623200164335ustar00rootroot00000000000000src/electron/window/onenote/action/000077500000000000000000000000001516101623200177105ustar00rootroot00000000000000src/electron/window/onenote/action/load-proxy.js000066400000000000000000000007731516101623200223530ustar00rootroot00000000000000const remote = require('@electron/remote') const loadProxy = async () => { //console.log('load proxy'); await p3x.onenote.wait.domReady() const webview = global.p3x.onenote.webview; // const session = webview.getWebContents().session; const session = remote.webContents.fromId(webview.getWebContentsId()).session const proxy = global.p3x.onenote.data.proxy.trim(); await session.setProxy({ proxyRules: proxy }) webview.reload(); } module.exports = loadProxy; src/electron/window/onenote/action/multi-action/000077500000000000000000000000001516101623200223155ustar00rootroot00000000000000src/electron/window/onenote/action/multi-action/get-location.js000066400000000000000000000010431516101623200252360ustar00rootroot00000000000000let text module.exports = () => { var copy = function (e) { e.preventDefault(); if (e.clipboardData) { e.clipboardData.setData('text/plain', text); } else if (window.clipboardData) { window.clipboardData.setData('Text', text); } } text = global.p3x.onenote.webview.src window.addEventListener('copy', copy); document.execCommand('copy'); window.removeEventListener('copy', copy); global.p3x.onenote.toast.action(global.p3x.onenote.lang.label.copyLocationCopied) }src/electron/window/onenote/action/multi-action/toast.js000066400000000000000000000002001516101623200237750ustar00rootroot00000000000000const toast = (data) => { global.p3x.onenote.toast.action({ message: data.message }) } module.exports = toastsrc/electron/window/onenote/action/multi-actions.js000066400000000000000000000043171516101623200230430ustar00rootroot00000000000000const remote = require('@electron/remote') const multiActions = (data) => { const webview = global.p3x.onenote.webview; switch (data.action) { /* case 'focus-save': //console.log('focus-save') webview.getWebContents().executeJavaScript(`window.p3xOnenoteActiveElement = document.activeElement; window.p3xIframe = document.getElementById('sdx_ow_iframe'); window.p3xIframeDoc = window.p3xIframe.contentDocument || window.p3xIframe.contentWindow.document; console.log(window.p3xIframeDoc.activeElement);`) break; */ case 'focus': // webview.openDevTools(); if (webview !== undefined) { webview.focus() /* webview.getWebContents().executeJavaScript(`var a = 'foo'; Promise.resolve(a);`).then(result => { console.log(result) }).catch(e => console.error(e)) */ //webview.getWebContents().executeJavaScript(`console.log(window.p3xOnenoteActiveElement)`) //document.activeElement } break; case 'restart': //const session = webview.getWebContents().session; const session = remote.webContents.fromId(webview.getWebContentsId()).session session.clearStorageData().then(() => { webview.reload() }) break; case 'home': webview.src = global.p3x.onenote.url.notebooks break; case 'corporate': webview.src = 'https://www.onenote.com/notebooks?auth=2' break; case 'get-location': require('./multi-action/get-location')() break; case 'toast': require('./multi-action/toast')(data) break; case 'dark-theme-invert': document.body.classList.remove('p3x-dark-mode-invert-quirks') if (data.darkThemeInvert === true) { document.body.classList.add('p3x-dark-mode-invert-quirks') } // alert(`darkThemeInvert: ${data.darkThemeInvert}`) break; } } module.exports = multiActions; src/electron/window/onenote/action/set-proxy.js000066400000000000000000000016211516101623200222200ustar00rootroot00000000000000const {ipcRenderer} = require('electron'); module.exports = async (data) => { let valueProxy = ''; let cancelled = false; try { valueProxy = await global.p3x.onenote.prompt.setProxy(); valueProxy = valueProxy === undefined ? '' : valueProxy.trim(); } catch (e) { if (e !== undefined) { console.error(e); } else { cancelled = true; } } finally { if (!cancelled) { global.p3x.onenote.data.proxy = valueProxy; if (valueProxy === '') { global.p3x.onenote.toast.setProxy.clear() } else { global.p3x.onenote.toast.setProxy.set(valueProxy) } //console.log('set-proxy', global.p3x.onenote.data.proxy) ipcRenderer.send('p3x-onenote-save', global.p3x.onenote.data); require('./load-proxy')() } } } src/electron/window/onenote/angular.js000066400000000000000000000063521516101623200204300ustar00rootroot00000000000000//const remote = require("@electron/remote"); //const {shell} = require("electron"); const execAsync = async () => { const {shell} = require('electron'); //const remote = require('@electron/remote') require('angular/angular'); require('angular-aria'); require('angular-animate'); require('angular-messages'); require('angular-material'); global.p3x.onenote.ng = angular.module('p3x-onenote', [ 'ngMaterial', 'ngMessages' ]); require('./angular/prompt'); require('./angular/toast'); let zoom = p3x.onenote.conf.get('zoom') if (zoom === undefined) { zoom = 1.0 } if (zoom !== 1.0) { global.p3x.onenote.webview.setZoomFactor(zoom); } /* win.webContents .setVisualZoomLevelLimits(1, 5) .then(console.log("Zoom Levels Have been Set between 100% and 500%")) .catch((err) => console.error(err)); */ global.p3x.onenote.ng.config(($mdAriaProvider, $mdThemingProvider) => { $mdAriaProvider.disableWarnings(); $mdThemingProvider.theme('default').primaryPalette('purple').accentPalette('blue')//.warnPalette('amber'); }) global.p3x.onenote.ng.run((p3xOnenotePrompt, p3xOnenoteToast, $rootScope, $animate, $mdMedia) => { $animate.enabled(false) global.p3x.onenote.prompt = p3xOnenotePrompt; global.p3x.onenote.toast = p3xOnenoteToast; global.p3x.onenote.root = $rootScope $rootScope.$mdMedia = $mdMedia p3x.onenote.toast.action(p3x.onenote.lang.slow) $rootScope.p3x = { onenote: { go: (action) => { global.p3x.onenote.webview[action === 'back' ? 'goBack' : 'goForward']() }, canGo: (action) => { if (action === 'back') { return global.p3x.onenote.webview && global.p3x.onenote.webview.canGoBack() } return global.p3x.onenote.webview && global.p3x.onenote.webview.canGoForward() }, lang: global.p3x.onenote.lang, location: undefined, copyLocation: require('./action/multi-action/get-location'), donate: () => { shell.openExternal('https://paypal.me/patrikx3') }, zoom: (zoom) => { const currentZoom = global.p3x.onenote.webview.getZoomFactor(); let value if (zoom >= 0) { value = currentZoom + 0.1; } else { value = currentZoom - 0.1; } if (value >= 0.75 && value <= 5.0) { global.p3x.onenote.webview.setZoomFactor(value) p3x.onenote.conf.set('zoom', value) } }, get zoomFactor() { return (global.p3x.onenote.webview.getZoomFactor() * 100).toFixed(0) } } } }) angular.element(document).ready(() => { const bootstrapElement = document.getElementById('p3x-onenote-bootstrap'); angular.bootstrap(bootstrapElement, ['p3x-onenote']); }) } execAsync() src/electron/window/onenote/angular/000077500000000000000000000000001516101623200200645ustar00rootroot00000000000000src/electron/window/onenote/angular/prompt/000077500000000000000000000000001516101623200214055ustar00rootroot00000000000000src/electron/window/onenote/angular/prompt/index.js000066400000000000000000000202411516101623200230510ustar00rootroot00000000000000global.p3x.onenote.ng.factory('p3xOnenotePrompt', ($mdDialog) => { return new function () { this.setProxy = () => { const confirm = $mdDialog.prompt() .title(p3x.onenote.lang.label.setProxy) .textContent(p3x.onenote.lang.dialog.setProxy.info) .placeholder(p3x.onenote.lang.dialog.setProxy.placeholder) .ariaLabel(p3x.onenote.lang.dialog.setProxy.placeholder) .initialValue(global.p3x.onenote.data.proxy) //.targetEvent(ev) //.required(true) .cancel(p3x.onenote.lang.button.cancel) .ok(p3x.onenote.lang.button.save) return $mdDialog.show(confirm) } this.goToUrl = () => { const confirm = $mdDialog.prompt() .title(p3x.onenote.lang.label.openUrl) .textContent(p3x.onenote.lang.dialog.openUrl.info) .placeholder(p3x.onenote.lang.dialog.openUrl.placeholder) .ariaLabel(p3x.onenote.lang.dialog.openUrl.placeholder) //.initialValue(global.p3x.onenote.data.proxy) //.targetEvent(ev) //.required(true) .cancel(p3x.onenote.lang.button.cancel) .ok(p3x.onenote.lang.button.go) return $mdDialog.show(confirm) } this.configureLanguge = (opts) => { return $mdDialog.show({ template: `

${p3x.onenote.lang.menu.language.dialog.label}

${p3x.onenote.lang.menu.language.dialog.personal} ${p3x.onenote.lang.menu.language.dialog.corporate} ${p3x.onenote.lang.button.cancel}
`, controller: function ($mdDialog, $scope) { $scope.exit = (answer) => { $mdDialog.hide(answer); } $scope.cancel = $mdDialog.cancel } }); } this.redirect = (opts) => { return $mdDialog.show({ template: `

${p3x.onenote.lang.label.promptRedirectUrlTitle}

${p3x.onenote.lang.dialog.redirect.url({url: opts.url})}
${p3x.onenote.lang.button.cancel} ${p3x.onenote.lang.dialog.redirect.urlInternal} ${p3x.onenote.lang.dialog.redirect.urlExternal}
`, controller: function ($mdDialog, $scope) { $scope.exit = (answer) => { $mdDialog.hide(answer); } $scope.cancel = $mdDialog.cancel } }); } this.bookmarks = (opts) => { let deleteButton = '' let title if (opts.edit === true) { deleteButton = ` ${p3x.onenote.lang.button.delete} ` title = p3x.onenote.lang.bookmarks.edit } else { title = p3x.onenote.lang.bookmarks.add } return $mdDialog.show({ template: `

${title}

${p3x.onenote.lang.validation.required}
${p3x.onenote.lang.validation.required}
${p3x.onenote.lang.validation.url}
${p3x.onenote.lang.button.cancel} ${deleteButton} ${p3x.onenote.lang.button.save}
`, controller: function ($mdDialog, $scope) { $scope.model = { title: undefined, url: undefined, } if (opts.model) { $scope.model = opts.model } $scope.submit = () => { if ($scope.urlForm.$valid) { $mdDialog.hide({ opts: opts, model: $scope.model, }); } } $scope.delete = () => { $mdDialog.hide({ delete: true, opts: opts, model: $scope.model, }); } $scope.exit = (answer) => { $mdDialog.hide(answer); } $scope.cancel = $mdDialog.cancel } }); } } }) src/electron/window/onenote/angular/toast/000077500000000000000000000000001516101623200212165ustar00rootroot00000000000000src/electron/window/onenote/angular/toast/index.js000066400000000000000000000017321516101623200226660ustar00rootroot00000000000000global.p3x.onenote.ng.factory('p3xOnenoteToast', ($mdToast) => { const toast = (options) => { if (typeof options === 'string') { options = { message: options, } } const template = '' + options.message + '' $mdToast.show({ controller: function ($scope, $mdToast) { $scope.closeToast = function() { $mdToast.hide(); }; }, template: template, hideDelay: 5000, position: 'bottom right' }); } return new function () { this.action = toast; this.setProxy = new function () { this.clear = () => toast(p3x.onenote.lang.dialog.setProxy.clear) this.set = (value) => toast(p3x.onenote.lang.dialog.setProxy.set(value)) } } }) src/electron/window/onenote/event/000077500000000000000000000000001516101623200175545ustar00rootroot00000000000000src/electron/window/onenote/event/handler.js000066400000000000000000000120441516101623200215300ustar00rootroot00000000000000const electron = require('electron'); const shell = electron.shell; const ipc = electron.ipcRenderer; const handler = (options) => { const {webview} = options; /* webview.addEventListener('did-stop-loading', function(event) { // webview.insertCSS(window.cssData); }); */ // const allowedUrlRegex = /^((https?:\/\/((onedrive\.live\.com\/((redir\?resid\=)|((redir|edit).aspx\?)))|((www\.)?onenote\.com)|(login\.)|(g\.live\.))|(about\:blank)))/i // const allowedUrlRegex2 = /^https?:\/\/d\.docs\.live\.net\/([a-z0-9]{16})\//i //const disalledUrl = /^((https?:\/\/))/i let windowInterval const generateInterval = () => { windowInterval = setInterval(() => { //console.log(webview.src, global.p3x.onenote.root.p3x.onenote.location) /* ipc.send('p3x-debug', { 'new-window': webview.src, allowed: allowedUrlRegex.test(webview.src) }) */ /* if (!allowedUrlRegex.test(webview.src)) { p3x.onenote.ui.overlay.show({ message: p3x.onenote.lang.label.disallowedContent }) } else { p3x.onenote.ui.overlay.hide() } */ if (global.p3x.onenote.root && global.p3x.onenote.root.p3x.onenote.location !== webview.src) { p3x.onenote.wait.angular(() => { global.p3x.onenote.root.p3x.onenote.location = webview.src global.p3x.onenote.data.url = webview.src global.p3x.onenote.root.$digest() ipc.send('p3x-onenote-save', global.p3x.onenote.data); }) } }, p3x.onenote.wrongUrlTimeout) } generateInterval() ipc.on('p3x-onenote-window-state', function (event, data) { clearInterval(windowInterval) if (data.action === 'focus') { generateInterval() } }) /* webview.addEventListener('did-stop-loading', function(event) { // webview.insertCSS(p3x.onenote.hackCss); }); webview.addEventListener('will-navigate', function(event, url) { ipc.send('p3x-debug', { 'will-navigate': event, url: url, }); }); webview.addEventListener('will-redirect', function(event, url) { ipc.send('p3x-debug', { 'will-redirect': event, url: url, }); }); */ webview.addEventListener('did-navigate', function (event, url) { /* ipc.send('p3x-debug', { 'did-navigate': event, url: url, }); */ global.p3x.onenote.data.url = webview.src; ipc.send('p3x-onenote-save', global.p3x.onenote.data); p3x.onenote.wait.angular(() => { global.p3x.onenote.root.p3x.onenote.location = webview.src global.p3x.onenote.root.$digest() }) }); webview.addEventListener("dom-ready", event => { //TODO Remove this once https://github.com/electron/electron/issues/14474 is fixed webview.blur(); webview.focus(); p3x.onenote.domReady = true if (process.env.NODE_ENV === 'debug') { webview.openDevTools() } require('../angular') }); webview.addEventListener('new-window', function (event) { event.preventDefault() //p3x.onenote.toast.action(p3x.onenote.lang.label.unknownLink) if (event.url.trim().startsWith('about:blank')) { //webview.src = event.url; return } if (global.p3x.onenote.conf.get('option-to-disable-internal-external-popup') === true) { webview.src = event.url } else { global.p3x.onenote.prompt.redirect({url: event.url}).then((answer) => { if (answer === 'internal') { webview.src = event.url; } else { shell.openExternal(event.url) } }) } //; /* ipc.send('p3x-debug', { 'new-window': event.url, allowed: allowedUrlRegex.test(event.url) }) */ //console.log(event.url) /* if (allowedUrlRegex2.test(event.url)) { // https://onedrive.live.com/redir?resid=3B992A1F2BEDFFA7%21955&page=Edit const urlParts = event.url.match(allowedUrlRegex2) /* ipc.send('p3x-debug', { urlParts: urlParts }) */ /* p3x.onenote.toast.action(p3x.onenote.lang.redirecting) webview.src = `https://onedrive.live.com/redir?resid=${urlParts[1]}%21955&page=Edit`; } else */ /* if (allowedUrlRegex.test(event.url) || allowedUrlRegex2.test(event.url)) { p3x.onenote.toast.action(p3x.onenote.lang.redirecting) webview.src = event.url; } else { shell.openExternal(event.url); } */ }); } module.exports = handler src/electron/window/onenote/index.html000066400000000000000000000067011516101623200204340ustar00rootroot00000000000000
{{ $root.p3x.onenote.zoomFactor }}%
 
src/electron/window/onenote/ipc/000077500000000000000000000000001516101623200172065ustar00rootroot00000000000000src/electron/window/onenote/ipc/handler.js000066400000000000000000000064661516101623200211750ustar00rootroot00000000000000const {ipcRenderer} = require('electron'); const setProxy = require('../action/set-proxy'); const multiActions = require('../action/multi-actions'); const handler = (options) => { const {webview} = options; ipcRenderer.on('p3x-onenote-onload-user', function (event, data) { if (data !== null && data !== undefined) { global.p3x.onenote.data = data; } //console.log('p3x-onenote-onload-user', data) if (typeof (global.p3x.onenote.data) === 'object' && global.p3x.onenote.data.hasOwnProperty('url') && !global.p3x.onenote.data.url.startsWith('about:blank')) { webview.src = global.p3x.onenote.data.url; } else { webview.src = 'https://www.onenote.com/notebooks' } if (global.p3x.onenote.data.proxy.trim() !== '') { require('../action/load-proxy')(); } }) ipcRenderer.on('p3x-onenote-action', function (event, data) { multiActions(data); }) ipcRenderer.on('p3x-onenote-action-set-proxy', (event, data) => { setProxy(data); }) ipcRenderer.on('p3x-onenote-language', async (event, data) => { global.p3x.onenote.lang = global.p3x.onenote.translations[data.translation] global.p3x.onenote.toast.action(global.p3x.onenote.lang.menu.language.alert) global.p3x.onenote.root.p3x.onenote.lang = global.p3x.onenote.lang let type = ''; let cancelled = false; try { type = await global.p3x.onenote.prompt.configureLanguge(data); type = type === undefined ? '' : type.trim(); } catch (e) { if (e !== undefined) { console.error(e); } else { cancelled = true; } } finally { if (!cancelled) { if (type === 'corporate') { global.p3x.onenote.webview.src = 'https://www.onenote.com/notebooks?auth=2&omkt=' + data.translation } else { global.p3x.onenote.webview.src = 'https://www.onenote.com/notebooks?omkt=' + data.translation } } } }) ipcRenderer.on('p3x-onenote-action-open-url', async (event, data) => { let url = ''; let cancelled = false; try { url = await global.p3x.onenote.prompt.goToUrl(); url = url === undefined ? '' : url.trim(); if (!url.startsWith('http')) { url = 'https://' + url } } catch (e) { if (e !== undefined) { console.error(e); } else { cancelled = true; } } finally { if (!cancelled) { global.p3x.onenote.webview.src = url } } }) ipcRenderer.on('p3x-onenote-action-bookmark-open', (event, data) => { global.p3x.onenote.webview.src = data.url }) ipcRenderer.on('p3x-onenote-action-bookmark-add', async (event, data) => { try { const result = await global.p3x.onenote.prompt.bookmarks(data); ipcRenderer.send('p3x-onenote-action-bookmark-result', result); } catch (e) { if (e !== undefined) { alert(e.message) console.error(e); } } }) } module.exports = handler src/electron/window/onenote/load.js000066400000000000000000000066571516101623200177260ustar00rootroot00000000000000const {ipcRenderer} = require('electron'); /* const fs = require('fs') fs.readFile(__dirname + '/hack.css', 'utf-8', function(err, data) { if (err) { ipc.send('p3x-debug', { 'messsage': 'hack.css is not working', error: err, }); } p3x.onenote.hackCss = data; }); */ const Store = require('electron-store'); const conf = new Store(); let translationKey = conf.get('lang') const langTranslations = { 'en-US': require('../../../translation/en-US'), 'de-DE': require('../../../translation/de-DE'), 'pt-BR': require('../../../translation/pt-BR'), 'es-ES': require('../../../translation/es-ES'), 'fr-FR': require('../../../translation/fr-FR'), 'nl-NL': require('../../../translation/nl-NL'), 'it-IT': require('../../../translation/it-IT'), 'zh-CN': require('../../../translation/zh-CN'), } if (!translationKey) { translationKey = 'en-US' } const translation = langTranslations[translationKey] global.p3x = { onenote: { conf: conf, domReady: false, url: { /* https://www.onenote.com/notebooks?omkt=en-US https://www.onenote.com/notebooks?omkt=de-DE https://www.onenote.com/notebooks?omkt=hu-HU */ notebooks: 'https://www.onenote.com/notebooks', }, ui: {}, hackCss: undefined, ng: undefined, webview: undefined, pkg: require('../../../../package'), translations: langTranslations, lang: translation, data: { url: 'about:blank', proxy: '', }, prompt: undefined, toast: undefined, root: undefined, wrongUrlTimeout: 1000, wrongUrlMaxAllowed: 5, wait: { angular: (cb) => { let timeout const exec = () => { if (global.p3x.onenote.root === undefined) { clearTimeout(timeout) timeout = setTimeout(exec, 250) } else { cb() } } exec() }, domReady: async () => { return new Promise(resolve => { let timeout const exec = () => { if (p3x.onenote.domReady !== true) { clearTimeout(timeout) timeout = setTimeout(exec, 250) } else { resolve() } } exec() }) } } } } document.title = `${global.p3x.onenote.lang.title} v${global.p3x.onenote.pkg.version}`; window.p3xOneNoteOnLoad = function () { if (conf.get('darkThemeInvert') === true) { document.body.classList.add('p3x-dark-mode-invert-quirks') } const webview = document.getElementById("p3x-onenote-webview"); global.p3x.onenote.webview = webview; webview.focus() /* global.p3x.onenote.webview.addEventListener("dom-ready", function () { //require('./core/overlay') require('./angular') }) */ const ipcHandler = require('./ipc/handler'); ipcHandler({ webview: webview, }) const eventHandler = require('./event/handler'); eventHandler({ webview: webview, }) ipcRenderer.send('did-finish-load'); } src/electron/window/onenote/style.css000066400000000000000000000024001516101623200203010ustar00rootroot00000000000000:root { --p3x-onenote-navbar-bg: #7719aa; --p3x-onenote-navbar-color: white; --p3x-onenote-bottom-bar-height: 20px; --p3x-onenote-bottom-bar-font-size: 12px; } body.p3x-dark-mode-invert-quirks { filter: invert(1) hue-rotate(180deg); } body { background-color: white; padding: 0; margin: 0; overflow: hidden; } /* md-dialog md-dialog-actions { display: block !important; } md-dialog md-dialog-actions button { float: right !important; } */ body * { transition: none !important; } #p3x-onenote-bottom-bar { cursor: pointer; position: fixed; bottom: 0px; left: 0px; width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; height: var(--p3x-onenote-bottom-bar-height); font-size: var(--p3x-onenote-bottom-bar-font-size); font-family: Roboto; line-height: var(--p3x-onenote-bottom-bar-height); background-color: var(--p3x-onenote-navbar-bg); color: var(--p3x-onenote-navbar-color); } #p3x-onenote-webview { position: fixed; top: 0px; left: 0px; overflow: hidden; width: 100%; height: calc(100% - var(--p3x-onenote-bottom-bar-height)); } .md-toast-content { z-index: 110; } .p3x-onenote-toast-default .md-toast-content { } src/translation/000077500000000000000000000000001516101623200142005ustar00rootroot00000000000000src/translation/de-DE.js000066400000000000000000000136211516101623200154170ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Bitte warten Sie, die Anwendung wird neu gestartet.', label: { darkThemeInvert: { title: 'Aktivieren Sie den Dunkelmodus mit Macken (mit invertieren)' }, hideMenu: 'Hauptmenü ausblenden (mit ALT anzeigen)', optionToHideMenuState: { yes: 'Nach dem Neustart wird das Menü ausgeblendet und auf ALT angezeigt.', }, donate: 'Spenden', allowMultiple: { checkbox: 'Mehrere App-Instanzen erlauben (mit ein paar Tricks)', message: { yes: 'Nutzung mehrerer Instanzen aktiv (mit ein paar Tricks).', no: 'Nutzung mehrerer Instanzen deaktiviert (ohne Tricks).' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Schließen-Knopf Einstellung', message: { yes: 'Schließen-Knopf beendet die Anwendung.', no: 'Schließen-Knopf minimiert die Anwendung.', } }, optionToDisableInternalExternalPopup: 'Deaktivere Popup beim öffnen externener Links (alle Links intern öffnen)', settings: 'Einstellungen', setProxy: 'Proxy-Einstellungen', openUrl: 'URL öffnen', promptRedirectUrlTitle: 'Weiter zu URL', edit: 'Bearbeiten', view: 'Anzeigen', download: 'Download', developer: 'Patrik Laszlo', personalHome: 'Persönlich', corporateHome: 'Business', clearCache: 'Abmelden und Cache leeren', quit: 'Beenden', show: 'Maximieren', hide: 'Minimieren', copyLocation: 'Speicherort in Zwischenablage kopieren', copyLocationCopied: 'Speicherort in Zwischenablage kopiert.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home' back: 'Zurück', forward: 'Weiter', }, dialog: { info: 'Info', openUrl: { info: 'Sie können zu jeder gewünschten URL gelangen', placeholder: 'Eine gültige URL', }, minimizationBehavior: { title: 'Minimiere Einstellungen', }, setProxy: { placeholder: 'Proxy-Einstellungen', info: 'Zum deaktiveren alles löschen.', clear: 'Der Proxy ist deaktiviert.', set: (value) => { return `Proxyserver-Adresse ist ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Extern', urlInternal: 'Intern', } }, button: { yes: 'Ja', no: 'Nein', ok: 'OK', cancel: 'Abbrechen', save: 'Speichern', clear: 'Neu', go: 'Los', delete: 'Löschen', }, menu: { action: 'Bearbeiten', role: { edit: { undo: 'Rückgängig', redo: 'Wiederherstellen', cut: 'Ausschneiden', copy: 'Kopieren', paste: 'Einfügen', pasteandmatchstyle: 'Einfügen und Formattierung beibehalten', delete: 'Löschen', selectall: 'Alles auswählen', }, view: { reload: 'Neu laden', forcereload: 'Neu laden erzwingen', toggledevtools: 'Entwicklereinstellungen aktivieren/deaktivieren', resetzoom: 'Normale Größe', zoomin: 'Vergrößern', zoomout: 'Verkleinern', togglefullscreen: 'Vollbild', } }, help: { title: 'Hilfe', checkUpdates: 'Auf Updates prüfen' }, language: { label: 'Sprache / Language', alert: 'Sprache auf Deutsch eingestellt.', dialog: { label: 'Versuchen Sie, die Online OneNote-Sprache zu konfigurieren?', corporate: 'Business', personal: 'Persönlich', }, translations: { 'en-US': 'Englisch / English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Portugisisch / Português', 'es-ES': 'Spanisch / Spanish', 'fr-FR': 'Französisch / French', 'nl-NL': 'Niederländisch / Dutch', 'it-IT': 'Italiänisch / Italian', 'zh-CN': '简体中文 / Simplified Chinese', }, }, }, redirecting: 'Einen Moment, es wird zu einem neuen Notzibuch umgeleitet. Dies kann eine Weile dauern...', slow: 'Einen Moment, das Laden von OneNote kann eine Weile dauern...', updater: { 'checking-for-update': 'Prüfen auf neue Updates ...', 'update-available': 'Aktuellste Version wird geladen ...', 'update-not-available': 'Version ist aktuell.', error: (opts) => { return `Error in auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Heruntergeladen ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Aktuellste Version heruntergeladen. Neustarten um den Updatevorgang abzuschließen.' }, bookmarks: { title: 'Lesezeichen', add: 'Lesezeichen hinzufügen', edit: 'Lesezeichen bearbeiten', form: { title: 'Titel', url: 'URL' } }, validation: { required: 'Erforderlich', url: 'Ungültige URL', }, }; module.exports = translation; src/translation/en-US.js000066400000000000000000000130011516101623200154600ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Please hang on, the application is restarting.', label: { darkThemeInvert: { title: 'Enable dark mode with quirks (using invert)' }, hideMenu: 'Hide main menu (show with ALT)', optionToHideMenuState: { yes: 'After restart, it will hide the menu and show on ALT.', }, donate: 'Donate', allowMultiple: { checkbox: 'Allow multiple instances (with some quirks)', message: { yes: 'Now you can use multiple instance with some quirks.', no: 'Now, it allows only one instance, no quirks' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Close to the tray', message: { yes: 'The close button really closes the app.', no: 'The close button, instead of quitting, it minimizes the app to the tray.', } }, optionToDisableInternalExternalPopup: 'Disable Internal / External Popup (all link internal)', settings: 'Settings', setProxy: 'Set proxy', openUrl: 'Open an URL', promptRedirectUrlTitle: 'Redirect to url', edit: 'Edit', view: 'View', download: 'Download', developer: 'Patrik Laszlo', personalHome: 'Personal home', corporateHome: 'Corporate home', clearCache: 'First sign off, then click this menu option to clear the cache', quit: 'Quit', show: 'Show', hide: 'Hide', copyLocation: 'Copy this location to the clipboard', copyLocationCopied: 'The location is copied to the clipboard.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: 'Back', forward: 'Forward', }, dialog: { info: 'Info', openUrl: { info: 'You can go to any URL you wish', placeholder: 'a valid URL', }, minimizationBehavior: { title: 'Minimization behavior', }, setProxy: { placeholder: 'Proxy setting', info: 'To clear the proxy, use an empty string.', clear: 'The proxy is turned off.', set: (value) => { return `The proxy is set as ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'External', urlInternal: 'Internal', } }, button: { yes: 'Yes', no: 'No', ok: 'OK', cancel: 'Cancel', save: 'Save', clear: 'Clear', go: 'Go', delete: 'Delete', }, menu: { action: 'Action', role: { edit: { undo: 'Undo', redo: 'Redo', cut: 'Cut', copy: 'Copy', paste: 'Paste', pasteandmatchstyle: 'Paste and match style', delete: 'Delete', selectall: 'Select all', }, view: { reload: 'Reload', forcereload: 'Force reload', toggledevtools: 'Toggle development tools', resetzoom: 'Reset Zoom', zoomin: 'Zoom In', zoomout: 'Zoom out', togglefullscreen: 'Toggle full screen', } }, help: { title: 'Help', checkUpdates: 'Check updates' }, language: { label: 'Language', alert: 'Language set to english.', dialog: { label: 'Try to configure Online OneNote language?', corporate: 'Corporate', personal: 'Personal', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: 'Hang on, redirecting to a new notebook. It takes some time...', slow: 'Hang on, loading OneNote takes some time...', updater: { 'checking-for-update': 'Checking for update ...', 'update-available': 'Downloading latest release ...', 'update-not-available': 'No new update.', error: (opts) => { return `Error in auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Downloaded ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Update downloaded. You may restart the app to update.' }, bookmarks: { title: 'Bookmarks', add: 'Add bookmark', edit: 'Edit bookmarks', form: { title: 'Title', url: 'URL' } }, validation: { required: 'Required', url: 'Invalid url', }, }; module.exports = translation; src/translation/es-ES.js000066400000000000000000000137271516101623200154640ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Espere, la aplicación se está reiniciando.', label: { darkThemeInvert: { title: 'Habilite el modo oscuro con peculiaridades (usando invertir)' }, hideMenu: 'Ocultar el menú principal (mostrar con ALT)', optionToHideMenuState: { yes: 'Después de reiniciar, ocultará el menú y se mostrará en ALT.', }, donate: 'Donar', allowMultiple: { checkbox: 'Permitir múltiples instancias (podría haber algún comportamiento extraño)', message: { yes: 'Puedes usar múltiples instancias, con algún comportamiento extraño.', no: 'Una sola instancia permitida, sin comportamientos extraños.', } }, disableHide: { //yes: 'Configurar el cierre de manera que la aplicación se minimice a la barra de tareas', //no: 'Configurar el botónn de cierre de manera que se quite la aplicación', checkbox: 'Minimizar a la barra de tareas', message: { yes: 'El botón de cierre cerrará directamente la aplicación.', no: 'El botón de cierre, en vez de cerrar la aplicación, la minimizará a la barra de tareas.', } }, optionToDisableInternalExternalPopup: 'Deaktivieren Sie das interne / externe Popup (Toda enlace interna)', settings: 'Configuración', setProxy: 'Configuración del proxy', openUrl: 'Abrir URL', promptRedirectUrlTitle: 'Redireccionar a la URL', edit: 'Editar', view: 'Ver', download: 'Bajar', developer: 'Patrik Laszlo', personalHome: 'Home Personal', corporateHome: 'Home Corporativo', clearCache: 'Salga primero y después haga click en esta opción del menú para borrar la caché.', quit: 'Quitar', show: 'Mostrar', hide: 'Esconder', copyLocation: 'Copiar esta dirección al portapapeles', copyLocationCopied: 'Dirección copiada al portapapeles.', //disallowedContent: '¡Contenido no permitido!.Si no funciona, espere. Se reseteará al home por defecto. (Máx 5 segundos).', //unknownLink: 'Espere, cambiará mientras carga el destino. Si esto no es una página de OneNote, haga clic en el menú dentro de P3X OneNote home' back: 'Espalda', forward: 'Adelante', }, dialog: { info: 'Info', openUrl: { info: 'Puede ir a cualquier URL que desee.', placeholder: 'Inserte una URL válida', }, minimizationBehavior: { title: 'Comportamiento al minimizar', }, setProxy: { placeholder: 'Configuración del proxy', info: 'Para limpiar el proxy, introduzca una cadena vacía.', clear: 'Proxy apagado.', set: (value) => { return `Proxy configurado como ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Externa', urlInternal: 'Interna', } }, button: { yes: 'Si', no: 'No', ok: 'OK', cancel: 'Cancelar', save: 'Salvar', clear: 'Limpiar', go: 'Ir', delete: 'Eliminar', }, menu: { action: 'Acción', role: { edit: { undo: 'Deshacer', redo: 'Rehacer', cut: 'Cortar', copy: 'Copiar', paste: 'Pegar', pasteandmatchstyle: 'Pegar con el mismo estilo', delete: 'Borrar', selectall: 'Seleccionar todo', }, view: { reload: 'Recargar', forcereload: 'Fozar recarga', toggledevtools: 'Conmutar herramientas de desarrollo', resetzoom: 'Resetear Zoom', zoomin: 'Aumentar zoom', zoomout: 'Disminuir zoom', togglefullscreen: 'Cambiar a pantalla completa', } }, help: { title: 'Ayuda', checkUpdates: 'Revisar actualizaciones' }, language: { label: 'Lenguaje / Language', alert: 'Idioma configurado para español.', dialog: { label: '¿Configurar el lenguaje en la herramienta en línea de Onenote?', corporate: 'Corporativo', personal: 'Personal', }, translations: { 'en-US': 'Inglés / English', 'de-DE': 'Alemán / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: 'Espere... redireccionando a una nueva libreta. Tardará un poco...', slow: 'Espere, cargar OneNote tarda un poco...', updater: { 'checking-for-update': 'Buscando actualizaciones...', 'update-available': 'Bajando la última release ...', 'update-not-available': 'No existen nuevas actualizaciones.', error: (opts) => { return `Error en el auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Bajado ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Actualización bajada. Reinicie la aplicación para actualizar.' }, bookmarks: { title: 'Marcadores', add: 'Añadir marcador', edit: 'Editar marcadores', form: { title: 'Título', url: 'URL' } }, validation: { required: 'Necesaria', url: 'URL invalida', }, }; module.exports = translation; src/translation/fr-FR.js000066400000000000000000000140521516101623200154540ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Veuillez patienter, l\'application redémarre.', label: { darkThemeInvert: { title: 'Activer le mode sombre avec des bizarreries (en utilisant l\'inversion)' }, hideMenu: 'Masquer le menu principal (afficher avec ALT)', optionToHideMenuState: { yes: 'Après le redémarrage, il masquera le menu et s\'affichera sur ALT.', }, donate: 'Faire un don', allowMultiple: { checkbox: 'Autoriser plusieurs instances (avec quelques bizarreries)', message: { yes: 'Vous pouvez maintenant utiliser plusieurs instances avec quelques bizarreries.', no: 'Une seule instance est possible, pas de bizarreries.' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Fermeture dans la barre des tâches', message: { yes: 'Le bouton de fermeture quitte l\'application.', no: 'Le bouton de fermeture réduit l\'application dans la barre des tâches.', } }, optionToDisableInternalExternalPopup: 'Désactiver les popups interne et externe', settings: 'Paramètres', setProxy: 'Sélection du proxy', openUrl: 'Ouvrir une URL', promptRedirectUrlTitle: 'Redirige vers l\'URL', edit: 'Edition', view: 'Affichage', download: 'Télécharger', developer: 'Patrik Laszlo', personalHome: 'Compte personnel', corporateHome: 'Compte professionnel', clearCache: 'Premièrement déconnectez-vous, puis sélectionnez cette option pour nettoyer le cache', quit: 'Quitter', show: 'Afficher', hide: 'Cacher', copyLocation: 'Copier cette emplacement', copyLocationCopied: 'Cette emplacement a été copié dans le presse-papier.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: 'Reculer', forward: 'Avancer', }, dialog: { info: 'Info', openUrl: { info: 'Il est possible d\'aller sur n\'importe quelle URL', placeholder: 'Une URL valide', }, minimizationBehavior: { title: 'Comportement pour le bouton de fermeture', }, setProxy: { placeholder: 'Paramètre du proxy', info: 'Pour supprimer le proxy, utilisez un champ vide.', clear: 'Le proxy est désactivé', set: (value) => { return `Le paramètre du proxy est : ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Externe', urlInternal: 'Interne', } }, button: { yes: 'Oui', no: 'Non', ok: 'OK', cancel: 'Annuler', save: 'Sauvegarder', clear: 'Nettoyer', go: 'Aller à', delete: 'Supprimer', }, menu: { action: 'Action', role: { edit: { undo: 'Annuler', redo: 'Rétablir', cut: 'Couper', copy: 'Copier', paste: 'Coller', pasteandmatchstyle: 'Coller en gardant le style d\'origine', delete: 'Supprimer', selectall: 'Tout sélectionner', }, view: { reload: 'Actualiser', forcereload: 'Forcer l\'actualisation', toggledevtools: 'Afficher les outils de développement', resetzoom: 'Réintialiser le zoom', zoomin: 'Zoomer', zoomout: 'Dézoomer', togglefullscreen: 'Activer le mode plein écran', } }, help: { title: 'Aide', checkUpdates: 'Rechercher des mises à jour' }, language: { label: 'Langue / Language', alert: 'Langue paramétrée à Français.', dialog: { label: 'Essayer de configurer la langue de OneNote en ligne ?', corporate: 'Entreprise', personal: 'Personnel', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: 'Veuillez patienter, redirection en cours ...', slow: 'Veuillez patienter, le chargement de OneNote peut être lent ...', updater: { 'checking-for-update': 'Recherche de mise à jour ...', 'update-available': 'Téléchargement des dernière mises à jour ...', 'update-not-available': 'Pas de nouvelles mise à jour.', error: (opts) => { return `Erreur dans la mise à jour automatique : ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Téléchargé ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Mise à jour terminée. Vous devez rédemarrer l\'application pour finir la mise à jour.' }, bookmarks: { title: 'Favoris', add: 'Ajouter un marque-page', edit: 'Modifier les favoris', form: { title: 'Titre', url: 'URL' } }, validation: { required: 'Obligatoire', url: 'URL invalide', }, }; module.exports = translation; src/translation/it-IT.js000066400000000000000000000135721516101623200154740ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Attendi, l\'applicazione si sta riavviando.', label: { darkThemeInvert: { title: 'Abilita la modalità oscura con stranezze (usando invert)' }, hideMenu: 'Nascondi menu principale (mostra con ALT)', optionToHideMenuState: { yes: 'Dopo il riavvio, nasconderà il menu principale e verrà mostrato con il tasto ALT.', }, donate: 'Dona', allowMultiple: { checkbox: 'Consenti più istanze (con alcune stranezze)', message: { yes: 'Ora puoi utilizzare più istanze con alcune stranezze.', no: 'Ora, consente solo un\'istanza, senza stranezze' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Chiudi nell\'area di notifica', message: { yes: 'Il pulsante chiudi chiude veramente l\'app.', no: 'Il pulsante chiudi, invece di chiudere l\'app, la minimizza nell\'area di notifica.', } }, optionToDisableInternalExternalPopup: 'Disabilita popup interni/esterni (tutti i link interni)', settings: 'Impostazioni', setProxy: 'Imposta proxy', openUrl: 'Apri un URL', promptRedirectUrlTitle: 'Redirigi all\'url', edit: 'Modifica', view: 'Mostra', download: 'Download', developer: 'Patrik Laszlo', personalHome: 'Home Personale', corporateHome: 'Home Aziendale', clearCache: 'Per prima cosa esci, e quindi fai clic su questa opzione del menu per pulire la cache', quit: 'Esci', show: 'Mostra', hide: 'Nascondi', copyLocation: 'Copia questa posizione nella clipboard', copyLocationCopied: 'La posizione è stata copiata nella clipboard.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: 'Indietro', forward: 'Inoltra', }, dialog: { info: 'Info', openUrl: { info: 'Tu puoi andare in qualsiasi URL vuoi', placeholder: 'un URL valido', }, minimizationBehavior: { title: 'Comportamento minimizzazione', }, setProxy: { placeholder: 'Impostazioni Proxy', info: 'Per pulire il proxy, usa una stringa vuota.', clear: 'Il proxy è spento.', set: (value) => { return `Il proxy è impostato come ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Esterno', urlInternal: 'Interno', } }, button: { yes: 'Si', no: 'No', ok: 'OK', cancel: 'Annulla', save: 'Salva', clear: 'Pulisci', go: 'Vai', delete: 'Elimina', }, menu: { action: 'Azione', role: { edit: { undo: 'Annulla', redo: 'Ripeti', cut: 'Taglia', copy: 'Copia', paste: 'Incolla', pasteandmatchstyle: 'Copia e corrispondi stile', delete: 'Elimina', selectall: 'Seleziona tutto', }, view: { reload: 'Ricarica', forcereload: 'Forza ricarica', toggledevtools: 'Attiva/Disattiva strumenti di sviluppo', resetzoom: 'Reimposta Zoom', zoomin: 'Zoom In', zoomout: 'Zoom out', togglefullscreen: 'Attiva/Disattiva Schermo intero', } }, help: { title: 'Aiuto', checkUpdates: 'Controlla aggiornamenti' }, language: { label: 'Lingua / Language', alert: 'Lingua impostata su inglese.', dialog: { label: 'Provi a configurare la lingua di OneNote online?', corporate: 'Aziendale', personal: 'Personale', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: 'Attendi, ti sto reindirizzando ad un nuovo blocco appunti. Potrebbe richiedere un pò di tempo...', slow: 'Attendi, il caricamento di OneNote richiede un pò di tempo...', updater: { 'checking-for-update': 'Controllo aggiornamenti ...', 'update-available': 'Scaricamento ultima versione ...', 'update-not-available': 'Nessun nuovo aggiornamento.', error: (opts) => { return `Errore aggiornamento automatico: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Scaricato ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Aggiornamento scaricato. Potresti riavviare l\'app per aggiornare.' }, bookmarks: { title: 'Segnalibri', add: 'Aggiungi segnalibro', edit: 'Modifica segnalibro', form: { title: 'Titolo', url: 'URL' } }, validation: { required: 'Richiesto', url: 'Url non valido', }, }; module.exports = translation; src/translation/nl-NL.js000066400000000000000000000137201516101623200154610ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Even wachten, de applicatie start opnieuw op.', label: { darkThemeInvert: { title: 'Schakel de donkere modus in met eigenaardigheden (met behulp van omkeren)' }, hideMenu: 'Verberg hoofd menu (maak zichtbaar met ALT)', optionToHideMenuState: { yes: 'Het hoofdmenu is verborgen na een herstart en wordt weer zichtbaar bij het indrukken van ALT.', }, donate: 'Donatie', allowMultiple: { checkbox: 'Sta meerdere vensters toe (met een aantal eigenaardigheden)', message: { yes: 'Nu kunt u meerdere vensters gebruiken (met eigenaardigheden).', no: 'Nu is alleen maar een venster mogelijk (zonder eigenaardigheden)' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Minimaliseren naar taakbalk', message: { yes: 'Om de applicatie te sluiten moet u de afsluiten knop gebruiken.', no: 'De afsluit knop zal het venster minimaliseren naar de taakbalk, ipv af te sluiten.', } }, optionToDisableInternalExternalPopup: 'Schakel Interne / Externe popup uit (alle links intern)', settings: 'Instellingen', setProxy: 'Set proxy', openUrl: 'Open een URL', promptRedirectUrlTitle: 'Doorverwijzen naar url', edit: 'Bewerken', view: 'Bekijken', download: 'Download', developer: 'Patrik Laszlo', personalHome: 'Persoonlijke begin pagina', corporateHome: 'Zakelijke begin pagina', clearCache: 'Meld u eerst af en klik vervolgens op deze menuoptie om de cache te wissen', quit: 'Afsluiten', show: 'Verschijnen', hide: 'Verbergen', copyLocation: 'Kopieer deze locatie naar het clipboard', copyLocationCopied: 'De locatie is naar het clipboard gekopieerd.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: 'Terug', forward: 'Vooruit', }, dialog: { info: 'Info', openUrl: { info: 'U kunt elke gewensten URL invullen', placeholder: 'een geldige URL', }, minimizationBehavior: { title: 'Minimalisatiegedrag', }, setProxy: { placeholder: 'Proxy instellingen', info: 'Door niets in te vullen kunt u de proxy instellingen wissen.', clear: 'De proxy is uitgeschakeld.', set: (value) => { return `De proxy is ingesteld naar ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Extern', urlInternal: 'Intern', } }, button: { yes: 'Ja', no: 'Nee', ok: 'OK', cancel: 'Afbreken', save: 'Opslaan', clear: 'Wissen', go: 'Gaan', delete: 'Verwijderen', }, menu: { action: 'Acties', role: { edit: { undo: 'Ongedaan maken', redo: 'Herhalen', cut: 'Knippen', copy: 'Kopieren', paste: 'Plakken', pasteandmatchstyle: 'Plak en match stijl', delete: 'Verwijderen', selectall: 'Alles selecteren', }, view: { reload: 'Herladen', forcereload: 'Geforceerd herladen', toggledevtools: 'Toggle ontwikkelings gereedschappen', resetzoom: 'Reset zoom', zoomin: 'Zoom In', zoomout: 'Zoom out', togglefullscreen: 'Schakel volledig scherm', } }, help: { title: 'Help', checkUpdates: 'Controleer op updates' }, language: { label: 'Taal / Language', alert: 'Taal ingesteld naar Nederlands.', dialog: { label: 'Probeert u de Online OneNote taal te configureren?', corporate: 'Zakelijk', personal: 'Persoonlijk', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: 'Even geduld, doorverwijzen naar een nieuwe notebook. Dit kan even duren...', slow: 'Even geduld, het laden van OneNote duurt even...', updater: { 'checking-for-update': 'Controleren op update ...', 'update-available': 'Nieuwste release downloaden ...', 'update-not-available': 'Geen nieuwe update.', error: (opts) => { return `Fout in auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return opts.progressObj.percent + '%' + ' gedownload' }, 'update-downloaded': 'Update gedownload. U kunt de applicatie opnieuw opstarten om de update door te voeren.' }, bookmarks: { title: 'Bookmarks', add: 'Bookmark toevoegen', edit: 'Bookmarks bewerken', form: { title: 'Titel', url: 'URL' } }, validation: { required: 'Nodig', url: 'Ongeldige url', }, }; module.exports = translation; src/translation/pt-BR.js000066400000000000000000000136331516101623200154700ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: 'Aguarde, o aplicativo está reiniciando.', label: { darkThemeInvert: { title: 'Ative o modo escuro com peculiaridades (usando inverter)' }, hideMenu: 'Esconder o menu principal (mostrar com ALT)', optionToHideMenuState: { yes: 'Após reiniciar, ele irá ocultar o menu e mostrar no ALT.', }, donate: 'Doar', allowMultiple: { checkbox: 'Permitir múltiplas instâncias (com algumas pecularidades)', message: { yes: 'Agora você pode utilizar múltiplas instâncias com algumas peculiaridades.', no: 'Agora, é permitido somente uma instância, sem peculiaridades' } }, disableHide: { yes: 'Defina o comportamento do botão Fechar que irá minimizar para a bandeja em vez de sair', no: 'Defina o comportamento do botão Fechar para realmente sair da aplicação', checkbox: 'Fechar bandeja', message: { yes: 'O botão de fechar realmente fecha o app.', no: 'O botão de fechar, ao invés de sair, minimiza o app na bandeja.', } }, optionToDisableInternalExternalPopup: 'Desativar pop-up interno / externo (todos link interno)', settings: 'Configurações', setProxy: 'Definir um proxy', openUrl: 'Abrir uma URL', promptRedirectUrlTitle: 'Redirecionar para URL', edit: 'Editar', view: 'Ver', download: 'Baixar', developer: 'Patrik Laszlo', personalHome: 'Página pessoal', corporateHome: 'Negócios', clearCache: 'Primeiro saia, depois clique nessa opção para limpar o cache', quit: 'Sair', show: 'Mostrar', hide: 'Esconder', copyLocation: 'Copiar para área de transferência', copyLocationCopied: 'A localização foi copiada para a área de transferência.', disallowedContent: 'Conteúdo desabilitado! Se não estiver funcionando, espere, ele será redefinido para o padrão. (Máximo de 5 segundos).', unknownLink: 'Espere um pouco, pode mudar durante o carregamento para o destino. Se esta não for uma página do OneNote, sinta-se livre para clicar na página inicial do P3X no menu', back: 'Voltar', forward: 'Prosseguir', }, dialog: { info: 'Informações', openUrl: { info: 'Você pode ir para qualquer URL que deseja', placeholder: 'uma URL válida', }, minimizationBehavior: { title: 'Comportamento de minimização', }, setProxy: { placeholder: 'Configurações de proxy', info: 'Para limpar o proxy, deixe em branco.', clear: 'O proxy é desligado.', set: (value) => { return `O proxy é definido como ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Externo', urlInternal: 'Interno', } }, button: { yes: 'Sim', no: 'Não', ok: 'OK', cancel: 'Cancelar', save: 'Salvar', clear: 'Limpar', go: 'Ir', delete: 'Excluir', }, menu: { action: 'Ação', role: { edit: { undo: 'Desfazer', redo: 'Refazer', cut: 'Cortar', copy: 'Copiar', paste: 'Colar', pasteandmatchstyle: 'Colar com o mesmo estilo', delete: 'Deletar', selectall: 'Selecionar tudo', }, view: { reload: 'Recarregar', forcereload: 'Forçar recarregamento', toggledevtools: 'Alternar ferramentas de desenvolvimento', resetzoom: 'Resetar zoom', zoomin: 'Aumentar zoom', zoomout: 'Diminuir zoom', togglefullscreen: 'Tela cheia', } }, help: { title: 'Ajuda', checkUpdates: 'Verificar atualizações' }, language: { label: 'Idioma / Language', alert: 'Idioma definido para português.', dialog: { label: 'Tentar configurar idioma do OneNote Online?', corporate: 'Corporativo', personal: 'Pessoal', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: 'Aguarde, redirecionando para um novo caderno. Isso leva algum tempo...', slow: 'Aguarde, o carregamento do OneNote leva algum tempo...', updater: { 'checking-for-update': 'Verificando atualizações ...', 'update-available': 'Baixando última atualização ...', 'update-not-available': 'Nenhuma atualização.', error: (opts) => { return `Erro no atualizador: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Baixado ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Atualização baixada. Você precisa reiniciar o app para fazer efeito.' }, bookmarks: { title: 'Favoritas', add: 'Adicionar favorito', edit: 'Editar favoritos', form: { title: 'Título', url: 'URL' } }, validation: { required: 'Requeridas', url: 'URL inválida', }, }; module.exports = translation; src/translation/zh-CN.js000066400000000000000000000130301516101623200154520ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', restart: '请稍等,应用程序正在重启', label: { darkThemeInvert: { title: '开启实验性暗黑模式 (使用反色)' }, hideMenu: '隐藏菜单栏(按下Alt键显示)', optionToHideMenuState: { yes: '重启后,菜单栏将被隐藏并可以通过Alt键显示', }, donate: '捐赠', allowMultiple: { checkbox: '允许多个应用实例(实验性)', message: { yes: '现在,您可以同时打开多个应用实例', no: '现在,只允许打开一个应用实例' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: '关闭至托盘', message: { yes: '按下关闭按钮会真正关闭这个应用', no: '按下关闭按钮不会退出而是最小化应用至托盘', } }, optionToDisableInternalExternalPopup: '禁用内部 / 外部弹出窗口 (所有内部链接)', settings: '设置', setProxy: '代理设置', openUrl: '访问一个URL', promptRedirectUrlTitle: '重定向至url', edit: '编辑', view: '查看', download: '下载', developer: 'Patrik Laszlo', personalHome: '个人主页', corporateHome: '公司主页', clearCache: '请先退出登陆,再按下此按钮来清除缓存', quit: '退出', show: '显示', hide: '隐藏', copyLocation: '复制页面地址至剪贴板', copyLocationCopied: '页面地址已经被复制到剪贴板', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: '后退', forward: '前进', }, dialog: { info: '信息', openUrl: { info: '你可以访问任何URL', placeholder: '一个有效的URL', }, minimizationBehavior: { title: '最小化表现', }, setProxy: { placeholder: '代理设置', info: '若要清空代理,请使用空白字符串', clear: '代理已经被关闭', set: (value) => { return `代理已被设为 ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: '外部', urlInternal: '内部', } }, button: { yes: '是', no: '否', ok: '好的', cancel: '取消', save: '保存', clear: '清除', go: '前往', delete: '删除', }, menu: { action: '行为', role: { edit: { undo: '撤销', redo: '恢复', cut: '剪切', copy: '复制', paste: '粘贴', pasteandmatchstyle: '粘贴并匹配格式', delete: '删除', selectall: '全选', }, view: { reload: '重新加载', forcereload: '强制重新加载', toggledevtools: '开发者工具', resetzoom: '重置缩放', zoomin: '放大文字', zoomout: '缩小文字', togglefullscreen: '全屏', } }, help: { title: '帮助', checkUpdates: '检查更新' }, language: { label: '语言 / Language', alert: '语言设置为中文', dialog: { label: '尝试改变在线OneNote的语言配置?', corporate: '公司', personal: '个人', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', 'nl-NL': 'Nederlands / Dutch', 'it-IT': 'Italiano / Italian', 'zh-CN': '简体中文 / Simplified Chinese', } }, }, redirecting: '请稍等,正在重定向至新笔记本,这会花费一些时间', slow: '请稍等,加载OneNote需要花费一些时间', updater: { 'checking-for-update': '正在检查更新 ...', 'update-available': '正在下载最近的发行版 ...', 'update-not-available': '没有新的更新.', error: (opts) => { return `自动更新器错误: ${opts.errorMessage}` }, 'download-progress': (opts) => { return '已下载 ' + opts.progressObj.percent + '%' }, 'update-downloaded': '更新已下载,重启应用以更新' }, bookmarks: { title: '书签', add: '添加书签', edit: '编辑书签', form: { title: '标题', url: 'URL' } }, validation: { required: 'Required', url: '无效的url', }, }; module.exports = translation;