From 4be99331077ac9299b2432ec2e64f2092c07894d Mon Sep 17 00:00:00 2001 From: CBPS Date: Tue, 7 Oct 2025 19:46:31 +0200 Subject: [PATCH 1/5] Add A README --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4094545 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# cbps-db + +Celeste Blue's Portal of Stuff Database. + +* Rebuilt PHP website: https://cbps-db.gt.tc +* Other HTML website (different): https://team-cbps.github.io/cbps-db + +Current archiving status: 100% done + From 88a758a15e1c46d474f3dd5ede670d4323a59571 Mon Sep 17 00:00:00 2001 From: CBPS Date: Wed, 8 Oct 2025 16:39:37 +0200 Subject: [PATCH 2/5] Upload .htaccess --- .htaccess | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .htaccess diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..8c1afb4 --- /dev/null +++ b/.htaccess @@ -0,0 +1,4 @@ + +Order Allow,Deny +Deny from All + From 5ae23522be76c6700bcfe187865dbd2457f47746 Mon Sep 17 00:00:00 2001 From: CBPS Date: Wed, 8 Oct 2025 16:40:11 +0200 Subject: [PATCH 3/5] Upload .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ebf897 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +git/secrets.py +git/push_latest.sh From 52eee5f4654b2c575dacb2d724588266687f9418 Mon Sep 17 00:00:00 2001 From: SSMG4 Date: Wed, 8 Oct 2025 17:05:23 +0200 Subject: [PATCH 4/5] Update Git URL --- common.php | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 common.php diff --git a/common.php b/common.php new file mode 100644 index 0000000..625a2eb --- /dev/null +++ b/common.php @@ -0,0 +1,78 @@ + ($csvTime + 600)) + { + $csvData = file_get_contents("https://raw.githubusercontent.com/git-username/git-repo/master/cbpsdb.csv"); + if(strcmp($http_response_header[0],"HTTP/1.1 200 OK" == 0)) + file_put_contents("cbpsdb.csv",$csvData); + } +} + + +function isAvalible(string $url) +{ + $headers = get_headers($url); + if((strstr($headers[0],"200 OK") !== False) || (strstr($headers[0],"302 Found") !== False)) + { + return true; + } + else + { + return false; + } +} + +function get_list(string $list){ + $listStr = str_replace("||",".-!-PIPE-!-.",$list); + $listContents = explode("|",$list); + for($i = 0; $i >= count($listContents); $i++) { + $listContents[$i] = str_replace(".-!-PIPE-!-.","|",$listContents[$i]); + } + return $listContents; +} + + +function get_readme(array $entry){ + if(isAvalible($entry[DOWNLOAD_README])) + { + return $entry[DOWNLOAD_README]; + } + else + { + $arr = get_list($entry[DOWNLOAD_README_MIRROR]); + foreach($arr as &$itm) + { + if(isAvalible($itm) == true) + { + return $itm; + } + } + } +} + +?> + From e2d9ef28048e26ddef23e2adce6ee6d302f92e9f Mon Sep 17 00:00:00 2001 From: SSMG4 Date: Thu, 9 Oct 2025 21:15:26 +0200 Subject: [PATCH 5/5] Add CbpsDB Source --- LICENSE | 24 + Proxy-Both.lst | 47 + README.md | 18 +- add_entry.php | 1101 ++++++ cbpsdb.csv | 657 ++++ check_exists.php | 15 + common.js | 18 + common.php | 156 +- create_pr.py | 109 + dbparser.php | 102 + edit_entry.php | 595 +++ favicon.ico | Bin 0 -> 102297 bytes getdownload.php | 17 + getimage.php | 12 + git/add_entry.php | 112 + git/create_pr.py | 105 + git/edit_entry.php | 88 + git/get_github_info.php | 9 + git/get_github_info.py | 145 + git/get_latest.sh | 10 + git/push_latest.sh | 13 + googlee8375b630003ae8b.html | 1 + header.php | 84 + img/BubbleOverlay.png | Bin 0 -> 14372 bytes img/add.png | Bin 0 -> 48502 bytes img/add_icon.png | Bin 0 -> 22077 bytes img/app.png | Bin 0 -> 43663 bytes img/app_default.png | Bin 0 -> 1458 bytes img/edit.png | Bin 0 -> 55945 bytes img/edit_icon.png | Bin 0 -> 39734 bytes img/logo.png | Bin 0 -> 102351 bytes img/plugin_boot.png | Bin 0 -> 58606 bytes img/plugin_default.png | Bin 0 -> 23470 bytes img/plugin_tai.png | Bin 0 -> 41192 bytes img/remove_icon.png | Bin 0 -> 30336 bytes index.php | 8 + lib/deflate.js | 2060 +++++++++++ lib/inflate.js | 2155 +++++++++++ lib/mime-types.js | 1002 +++++ lib/z-worker.js | 153 + lib/zip-ext.js | 259 ++ lib/zip-fs.js | 553 +++ lib/zip.js | 966 +++++ list_releases.php | 226 ++ plugins.php | 8 + proxy.php | 87 + referer-proxy.php | 114 + robots.txt | 6 + script-pako.js | 6818 +++++++++++++++++++++++++++++++++++ script-self.js | 235 ++ script-sfo.js | 130 + script-sha256.js | 518 +++ sitemap.xml | 5781 +++++++++++++++++++++++++++++ style.css | 507 +++ submit.php | 40 + vita_config.txt | 70 + 56 files changed, 25047 insertions(+), 87 deletions(-) create mode 100644 LICENSE create mode 100644 Proxy-Both.lst create mode 100644 add_entry.php create mode 100644 cbpsdb.csv create mode 100644 check_exists.php create mode 100644 common.js create mode 100644 create_pr.py create mode 100644 dbparser.php create mode 100644 edit_entry.php create mode 100644 favicon.ico create mode 100644 getdownload.php create mode 100644 getimage.php create mode 100644 git/add_entry.php create mode 100644 git/create_pr.py create mode 100644 git/edit_entry.php create mode 100644 git/get_github_info.php create mode 100644 git/get_github_info.py create mode 100644 git/get_latest.sh create mode 100644 git/push_latest.sh create mode 100644 googlee8375b630003ae8b.html create mode 100644 header.php create mode 100644 img/BubbleOverlay.png create mode 100644 img/add.png create mode 100644 img/add_icon.png create mode 100644 img/app.png create mode 100644 img/app_default.png create mode 100644 img/edit.png create mode 100644 img/edit_icon.png create mode 100644 img/logo.png create mode 100644 img/plugin_boot.png create mode 100644 img/plugin_default.png create mode 100644 img/plugin_tai.png create mode 100644 img/remove_icon.png create mode 100644 index.php create mode 100644 lib/deflate.js create mode 100644 lib/inflate.js create mode 100644 lib/mime-types.js create mode 100644 lib/z-worker.js create mode 100644 lib/zip-ext.js create mode 100644 lib/zip-fs.js create mode 100644 lib/zip.js create mode 100644 list_releases.php create mode 100644 plugins.php create mode 100644 proxy.php create mode 100644 referer-proxy.php create mode 100644 robots.txt create mode 100644 script-pako.js create mode 100644 script-self.js create mode 100644 script-sfo.js create mode 100644 script-sha256.js create mode 100644 sitemap.xml create mode 100644 style.css create mode 100644 submit.php create mode 100644 vita_config.txt diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f50ef62 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to diff --git a/Proxy-Both.lst b/Proxy-Both.lst new file mode 100644 index 0000000..d4b3c94 --- /dev/null +++ b/Proxy-Both.lst @@ -0,0 +1,47 @@ +51.158.98.121:8811 +88.199.21.76:80 +183.88.242.100:8080 +80.187.140.26:8080 +59.124.224.180:3128 +136.243.64.111:8888 +142.93.209.191:3128 +185.137.232.95:80 +139.99.90.98:8080 +45.63.9.143:8080 +45.76.137.71:8080 +149.248.55.19:8080 +149.28.231.128:8080 +149.28.36.90:8080 +157.245.104.241:3128 +159.65.149.110:3128 +187.130.75.77:3130 +165.22.211.212:3128 +45.76.160.140:8080 +163.43.108.114:8080 +198.98.51.240:8080 +167.71.61.177:3128 +5.189.188.95:3128 +117.121.213.52:3128 +51.210.44.27:8080 +51.158.119.88:8811 +176.119.159.77:5836 +52.187.123.226:3128 +52.163.229.106:3128 +157.245.104.234:3128 +51.158.119.88:8761 +51.195.136.205:8080 +51.195.137.2:8080 +68.183.81.253:3128 +177.130.140.80:8080 +207.148.124.145:8080 +52.62.25.181:3128 +80.187.140.26:8080 +202.150.147.74:8080 +207.246.121.187:8080 +200.10.65.90:999 +88.199.21.76:80 +77.87.152.223:8080 +201.91.82.155:3128 +209.141.46.133:8080 +95.179.198.147:8080 +94.228.29.152:8080 diff --git a/README.md b/README.md index 4094545..200b4f9 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# cbps-db - -Celeste Blue's Portal of Stuff Database. - -* Rebuilt PHP website: https://cbps-db.gt.tc -* Other HTML website (different): https://team-cbps.github.io/cbps-db - -Current archiving status: 100% done - +# cbps-db + +Celeste Blue's Portal of Stuff Database. + +* Rebuilt PHP website: https://cbps-db.gt.tc +* Other HTML website (different): https://team-cbps.github.io/cbps-db + +Current archiving status: 100% done + diff --git a/add_entry.php b/add_entry.php new file mode 100644 index 0000000..dcf5448 --- /dev/null +++ b/add_entry.php @@ -0,0 +1,1101 @@ + + + + + + + + + + + + + +
+
+ Add Entry
+ +
+

CBPSDB Code of Conduct:

+

CBPSDB encourages a welcoming environment that is inclusive to all homebrew. However, we take a stance against hate homebrew.

+

Hate homebrew includes:

+
+
    +
  • Homebrew containing malicious code.
  • +
  • Homebrew that contains information pertaining to personal information of one who does not wish that information to be released.
  • +
  • Homebrew that does not use the officially provided release binary that the developers provides, unless that binary is not proper format provided for CBPSD. On that occasion a mirror will be used.
  • +
  • Homebrew that has retail privilege (retail games or retail application) unless the intent of this subject has changed beyond recognition in that its original purpose has changed.
  • +
  • Homebrew that are illegal in the jurisdiction of the US, exclusive of the tools used to generate the homebrew.
  • +
  • Homebrew submission with the intent to take down CBPSDB.
  • +
+
+

We reserve the right to ban your IP if necessary.

+
+ +
+
+ +
+

Please enter the URI to download this softwares Src Code or a GIT Repository

+

If using Github, its what you get from the "Clone or Download" button

+

ex: https://github.com/TheOfficialFloW/VitaShell.git

+
+ + +
+ +
+ Waiting for input... +
+ + +
+ +
+

The following files where found from Git

+

Please select which one you are trying to add to CbpsDB below:

+ +
+ + + + +
+ +
+ Waiting for input... +
+ + +
+ +
+

Could not find the Release file automatically

+

Please enter the DIRECT DOWNLOAD URL to the Release Files below:

+ +
+ + +
+ +
+ +
+ Waiting for input... +
+
+ + +
+

Could not find the ID automatically

+

Please enter the TITLE ID off this application (or module_name if its a plugin) below:

+ +
+ + +
+ +
+ +
+ Waiting for input... +
+
+ +
+

Could not find the TITLE automatically

+

Please enter the TITLE shown on the PSVita LiveArea Screen below.

+

If its a plugin, enter the name of the plugin.

+ +
+ + +
+ +
+ +
+ Waiting for input... +
+
+ + +
+

Could not find the icon0.png file automatically

+

Please enter the DIRECT URL to the icon0.png file below:

+

icon0.png is the icon shown on the PSVita LiveArea Screen.

+
+ +
+ + +
+ +
+ +
+ No icon? +
+ +
+ Waiting for input... +
+
+ + +
+

Could not find where to install this plugin.

+

This is where it is placed inside taihen config.txt

+

Please add ALL the modules its suppost to run under

+ +
+ +

+ + + + +

+ + +
+ + + +
+ Waiting for input... +
+
+ +
+

Could not find where in BOOT_CONFIG.TXT to place this.

+

Please select what line it should go under,

+ +
+ +

+ + +
+ + +
+ Waiting for input... +
+
+ +
+

Could not find the readme file automatically

+

Please enter the DIRECT URL to the readme file below:

+ +
+ + +
+ +
+ + + +
+ Waiting for input... +
+
+ +
+

Downloading release files

+

This can take awhile depending on your internet speed, And the release files size.

+ +
+
+
+ +
+ Waiting for input... +
+ +
+ + +
+ +
+
+ +
+

Application

+ +

This software creates a bubble on the PSVita LiveArea Screen

+

Or is a launchable app that is independant of anything else.

+
+
+ +
+
+ +
+

Plugin

+ +

This is a module that is injected into another application

+

Or it loads into the PSVita's Kernel.

+
+
+
+ +
+
+
+ +
+

Tai Plugin

+ +

Goes under *KERNEL in u(x/r)0:/tai/config.txt

+

Runs right when taihen.skprx loads, can be skipped by holding L at boot.

+

This is the most common, if you dont know which to choose, this is probably the right one.

+
+
+ +
+
+ +
+

Boot Plugin

+ +

Plugin should be placed into ur0:/tai/boot_config.txt.

+

For when the plugin loads early in the boot process. before taihen or henkaku loads.

+
+
+
+ +
+

Its important to give proper crediting to developers

+

So enter the name of the developer who wrote this application

+

If there are multiple devs involved, write all there names seperated by '&'

+

Alternatively you can use a team name.

+

ex: Team OneLUA & TheHeroGac

+ +
+ + +
+ +
+ +
+ Waiting for input... +
+
+ + + + +
+
+ +

One last thing.. you arent a robot now.. are you?

+
+ + + + + + + + + + + +
+
+
+
+ + +
+ Waiting for input... +
+
+ +
+ + + + +
+
+ + + + \ No newline at end of file diff --git a/cbpsdb.csv b/cbpsdb.csv new file mode 100644 index 0000000..c458ef5 --- /dev/null +++ b/cbpsdb.csv @@ -0,0 +1,657 @@ +id,title,credits,download_icon0,download_icon0_mirror,download_url,download_url_mirror,download_readme,download_readme_mirror,download_src,download_src_mirror,time_added,config_type,options,type,depends,visible +MANIA0001,Sonic Mania,SonicMastr,https://files.cbps.xyz/archive/vpk/icon0/SonicMania/icon0.png,None,https://github.com/SonicMastr/Sonic-Mania-Vita/releases/download/1.0.2/SonicMania.vpk,None,https://raw.githubusercontent.com/SonicMastr/Sonic-Mania-Vita/master/README.md,None,https://github.com/SonicMastr/Sonic-Mania-Vita,None,1660776505,None,None,VPK,None,True +OHCL00001,Open Hydra Castle Labyrinth,JeffRuLz,https://raw.githubusercontent.com/JeffRuLz/OpenHCL/master/platform/vita/sce_sys/icon0.png,None,https://github.com/JeffRuLz/OpenHCL/releases/download/v2021.11.08/OpenHCL_Vita.vpk,None,https://raw.githubusercontent.com/JeffRuLz/OpenHCL/master/README.md,None,https://github.com/JeffRuLz/OpenHCL,None,1637236476,None,None,VPK,None,True +ISLD00000,A Super Small SHMUP,island-games,https://raw.githubusercontent.com/island-games/A-Super-Small-Shmup/main/sce_sys/icon0.png,None,https://github.com/island-games/A-Super-Small-Shmup/releases/download/v1.02/ASUPERSMALLSHMUP.vpk,None,https://raw.githubusercontent.com/island-games/A-Super-Small-Shmup/main/README.md,None,https://github.com/island-games/A-Super-Small-Shmup,None,1637236168,None,None,VPK,None,True +BARTENDER,Bartender,island-games,https://github.com/island-games/Bartender/raw/main/sce_sys/icon0.png,None,https://github.com/island-games/Bartender/releases/download/v1.0/Bartender.vpk,None,https://raw.githubusercontent.com/island-games/Bartender/main/README.md,None,https://github.com/island-games/Bartender/,None,1637236031,None,None,VPK,None,True +SQUIDGAME,Squid Game,AntHJ,https://raw.githubusercontent.com/AntHJ/Squid-Game/main/Game1.png,None,https://github.com/AntHJ/Squid-Game/releases/download/v1.0/Squid.Game.vpk,None,https://raw.githubusercontent.com/AntHJ/Squid-Game/main/README.md,None,https://github.com/AntHJ/Squid-Game,None,1637235889,None,None,VPK,None,True +DVLX00001,devilutionX,diasurgical,https://raw.githubusercontent.com/diasurgical/devilutionX/master/Packaging/vita/sce_sys/icon0.png,None,https://github.com/diasurgical/devilutionX/releases/download/1.4.1/devilutionx-vita.vpk,None,https://raw.githubusercontent.com/diasurgical/devilutionX/master/README.md,None,https://github.com/diasurgical/devilutionX/releases/tag/1.3.0,None,1635877024,None,None,VPK,None,True +BIZZ21467,ChinaIsSmall,devingDev,https://raw.githubusercontent.com/devingDev/ChinaIsSmall/main/icon0.png,None,https://github.com/devingDev/ChinaIsSmall/releases/download/release/cispsv.vpk,None,https://raw.githubusercontent.com/devingDev/ChinaIsSmall/main/README.md,None,https://github.com/devingDev/ChinaIsSmall/,None,1635214009,None,None,VPK,None,True +ROCK12345,RCVita,Vita Dev2,https://files.cbps.xyz/archive/vpk/icon0/RCVita%20Alpha%20%203/icon0.png,None,https://files.cbps.xyz/archive/vpk/RCVita%20Alpha%20%203.vpk,None,None,None,None,None,1634655894,None,None,VPK,None,True +CUPH22106,Cuphead,Vita Dev2,https://files.cbps.xyz/archive/vpk/icon0/cuphead/icon0.png,None,https://files.cbps.xyz/archive/vpk/Cuphead%201.1.0.vpk,None,None,None,None,None,1634649329,None,None,VPK,None,True +GAMIDEF00,Galactic Missile Defense,MDashK,https://files.cbps.xyz/archive/vpk/icon0/Galactic%20Missile%20Defense%20Vita/icon0.png,None,https://github.com/MDashK/Galactic-Missile-Defense-Vita/releases/download/v1.0.0/GAMIDEF00.VPK,None,https://raw.githubusercontent.com/MDashK/Galactic-Missile-Defense-Vita/main/README.md,None,https://github.com/MDashK/Galactic-Missile-Defense-Vita,None,1634581435,None,None,VPK,None,True +ELICRY001,Crystal PSM,EliCrystal2001,https://raw.githubusercontent.com/EliCrystal2001/CrystalPSM/main/CrystalPSM/sce_sys/icon0.png,None,https://github.com/EliCrystal2001/CrystalPSM/releases/download/v1/CrystalPSM.vpk,None,https://raw.githubusercontent.com/EliCrystal2001/CrystalPSM/main/README.md,None,https://github.com/EliCrystal2001/CrystalPSM,None,1634162423,None,None,VPK,None,True +HANF64519,Granny_psvita,BasHeemskerk,https://files.cbps.xyz/archive/vpk/icon0/granny/icon0.png,None,https://github.com/BasHeemskerk/Granny-Decompiled/releases/download/v1.2.0/Granny.vpk,None,https://raw.githubusercontent.com/BasHeemskerk/Granny-Decompiled/master/README.md,None,https://github.com/BasHeemskerk/Granny-Decompiled,None,1634161264,None,None,VPK,None,True +CSCC00001,Socal Credit Checker,itz-depression,https://raw.githubusercontent.com/itz-depression/china-socal-credit-checker/master/sce_sys/icon0.png,None,https://github.com/itz-depression/china-socal-credit-checker/releases/download/1/CSCC.vpk,None,https://raw.githubusercontent.com/itz-depression/china-socal-credit-checker/master/README.md,None,https://github.com/itz-depression/china-socal-credit-checker/releases/tag/1,None,1634161180,None,None,VPK,None,True +330d2873SDKL39690,SuDokuL,Mips96,https://raw.githubusercontent.com/Mips96/SuDokuL/main/SuDokuLVS2019/sce_sys/icon0.png,None,https://github.com/Mips96/SuDokuL/releases/download/v1.2/SuDokuL-v1.2-vita.zip,None,https://raw.githubusercontent.com/Mips96/SuDokuL/main/README.md,None,https://github.com/Mips96/SuDokuL/releases/tag/v1.11,None,1633963028,None,SDKL39690,DATA,None,True +CSDLICIUS,Cook Serve Delicious!,TheNewFlisker,https://files.cbps.xyz/archive/vpk/icon0/Cook%20Serve%20Delicious/icon0.png,None,https://files.cbps.xyz/archive/vpk/CSDLICIUS.VPK,None,None,None,None,None,1633890784,None,None,VPK,None,True +BHBB00001,Homebrew Browser,Ibrahim778,https://raw.githubusercontent.com/Ibrahim778/BetterHomebrewBrowser/master/sce_sys/icon0.png,None,https://github.com/Ibrahim778/BetterHomebrewBrowser/releases/download/V1.0/BetterHomebrewBrowser.vpk,None,https://raw.githubusercontent.com/Ibrahim778/BetterHomebrewBrowser/master/README.md,None,https://github.com/Ibrahim778/BetterHomebrewBrowser,None,1633789312,None,None,VPK,None,True +FF5000000,Final Fantasy V,frangarcj,https://raw.githubusercontent.com/frangarcj/ff5_vita/master/sce_sys/icon0.png,None,https://github.com/frangarcj/ff5_vita/releases/download/v1.0/FF5.vpk,None,https://raw.githubusercontent.com/frangarcj/ff5_vita/master/README.md,None,https://github.com/frangarcj/ff5_vita,None,1633722074,None,None,VPK,None,True +SONIC2SMS,Sonic 2 SMS Remake,MDashK,https://files.cbps.xyz/archive/vpk/icon0/sonic%20sms%202/icon0.png,None,https://files.cbps.xyz/archive/vpk/SONIC2SMS.VPK,None,None,None,None,None,1633488573,None,None,VPK,None,True +SONIC1SMS,Sonic 1 SMS Remake,MDashK,https://files.cbps.xyz/archive/vpk/icon0/sonic%201%20sms/icon0.png,None,https://files.cbps.xyz/archive/vpk/SONIC1SMS.VPK,None,None,None,None,None,1633488276,None,None,VPK,None,True +ABCD12345_1,Henrystickmin PS Vita Port,Foxzx and innersloth,https://files.cbps.xyz/archive/vpk/icon0/stickman/icon0.png,None,https://files.cbps.xyz/archive/vpk/The%20Henry%20Stickmin%20Collection%200.0.9.vpk,None,None,None,None,None,1633466210,None,None,VPK,None,True +SORR00001,SoRR,isage,https://raw.githubusercontent.com/isage/sorr-vita/master/sce_sys/icon0.png,None,https://github.com/isage/sorr-vita/releases/download/v1.3/sorr.vpk,None,https://raw.githubusercontent.com/isage/sorr-vita/master/README.md,None,https://github.com/isage/sorr-vita/,None,1633356327,None,None,VPK,None,True +6033543b,dunelegacy,Northfear,https://raw.githubusercontent.com/Northfear/dunelegacy-vita/master/vita/sce_sys/icon0.png,None,https://github.com/Northfear/dunelegacy-vita/releases/download/0.97.0-alpha-vita.1/dunelegacy_data.zip,None,https://raw.githubusercontent.com/Northfear/dunelegacy-vita/master/README.md,None,https://github.com/Northfear/dunelegacy-vita,None,1633022265,None,ux0:data/dunelegacy,DATA,None,False +DUNE00002,Dune Legacy,Northfear,https://raw.githubusercontent.com/Northfear/dunelegacy-vita/master/vita/sce_sys/icon0.png,None,https://github.com/Northfear/dunelegacy-vita/releases/download/0.97.0-alpha-vita.1/dunelegacy.vpk,None,https://raw.githubusercontent.com/Northfear/dunelegacy-vita/master/README.md,None,https://github.com/Northfear/dunelegacy-vita,None,1633022162,None,None,VPK,6033543b,True +JETSGLOOM,ZGloomVita,JetStreamSham,https://raw.githubusercontent.com/JetStreamSham/ZGloom-vita/master/sce_sys/icon0.png,None,https://github.com/JetStreamSham/ZGloom-vita/releases/download/v2.1.1/ZGloomVita.2.1.1.vpk,None,https://raw.githubusercontent.com/JetStreamSham/ZGloom-vita/master/README.md,None,https://github.com/JetStreamSham/ZGloom-vita,None,1632274180,None,None,VPK,None,True +SPACEPINB,Space Cadet Pinball,suicvne,https://raw.githubusercontent.com/suicvne/SpaceCadetPinball_Vita/master/resources/vita/sce_sys/icon0.png,None,https://github.com/suicvne/SpaceCadetPinball_Vita/releases/download/Release_1.1.1_VitaBuild_2/SpaceCadetPinballVita_VB2.vpk,None,https://raw.githubusercontent.com/suicvne/SpaceCadetPinball_Vita/master/README.md,None,https://github.com/suicvne/SpaceCadetPinball_Vita,None,1632100934,None,None,VPK,None,True +FF4000000,Final Fantasy IV,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/ff4_vita/ff4/sce_sys/icon0.png,None,https://github.com/Rinnegatamante/ff4_vita/releases/download/v.1.2/FF4.vpk,None,https://raw.githubusercontent.com/Rinnegatamante/ff4_vita/ff4/README.md,None,https://github.com/Rinnegatamante/ff4_vita,None,1632089913,None,None,VPK,None,True +FF3000000,Final Fantasy III,frangarcj,https://raw.githubusercontent.com/frangarcj/ff3_vita/master/sce_sys/icon0.png,None,https://github.com/frangarcj/ff3_vita/releases/download/v1.1/FF3.vpk,None,https://raw.githubusercontent.com/frangarcj/ff3_vita/master/README.md,None,https://github.com/frangarcj/ff3_vita,None,1632089786,None,None,VPK,None,True +CRAZYTAXI,Crazy Taxi Classic,TheOfficialFloW,https://raw.githubusercontent.com/TheOfficialFloW/crazytaxi_vita/master/sce_sys/icon0.png,None,https://github.com/TheOfficialFloW/crazytaxi_vita/releases/download/v1.2/CRAZYTAXI.vpk,None,https://raw.githubusercontent.com/TheOfficialFloW/crazytaxi_vita/master/README.md,None,https://github.com/TheOfficialFloW/crazytaxi_vita,None,1632089420,None,None,VPK,None,True +GISH00001,Gish,isage,https://raw.githubusercontent.com/isage/Gish-vita/master/sce_sys/icon0.png,None,https://github.com/isage/Gish-vita/releases/download/vita-1.2/Gish.vpk,None,https://raw.githubusercontent.com/isage/Gish-vita/master/README.md,None,https://github.com/isage/Gish-vita.git,None,1631891673,None,None,VPK,None,True +RNPYDEMON,Contract Demon ,SonicMastr,https://raw.githubusercontent.com/SonicMastr/Contract-Demon-Vita/main/sce_sys/icon0.png,None,https://github.com/SonicMastr/Contract-Demon-Vita/releases/download/v1.0/Contract.Demon-01.00.vpk,None,https://raw.githubusercontent.com/SonicMastr/Contract-Demon-Vita/main/README.md,None,https://github.com/SonicMastr/Contract-Demon-Vita.git,None,1631888053,None,None,VPK,None,True +RNPYDDLC1,Doki Doki Literature Club Vita,SonicMastr ,https://raw.githubusercontent.com/SonicMastr/Doki-Doki-Literature-Club-Vita/main/sce_sys/icon0.png,None,https://github.com/SonicMastr/Doki-Doki-Literature-Club-Vita/releases/download/v1.01/Doki.Doki.Literature.Club-01.01.vpk,None,https://raw.githubusercontent.com/SonicMastr/Doki-Doki-Literature-Club-Vita/main/README.md,None,https://github.com/SonicMastr/Doki-Doki-Literature-Club-Vita.git,None,1631887820,None,None,VPK,None,True +ab05de1d,vitaHexenII Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/Homebrews Data Files/vitaHexenII_data.zip,None,None,None,None,None,1620560500,None,ux0:/data,DATA,None,True +ARKSMEDIA,Media Center,Arkanite,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARKSMEDIA_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=364,None,None,None,None,None,1620408898,None,None,VPK,None,True +VITABROT1,Mandelbrot Explorer,Imroy,https://raw.githubusercontent.com/Imroy/VitaBrot/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITABROT1_icon0.png,https://github.com/Imroy/VitaBrot/releases/download/v0.1.2/VitaBrot.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITABROT1.vpk,https://raw.githubusercontent.com/Imroy/VitaBrot/master/README.mediawiki,None,https://github.com/Imroy/VitaBrot.git,None,1619775652,None,None,VPK,None,True +XYZZ00002,Moonlight,xyzz & d3m3vilurr & ShadowPrince,https://raw.githubusercontent.com/xyzz/vita-moonlight/vita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/XYZZ00002_icon0.png,https://github.com/xyzz/vita-moonlight/releases/download/0.9.1/moonlight.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XYZZ00002.vpk,https://raw.githubusercontent.com/xyzz/vita-moonlight/vita/README.md,None,https://github.com/xyzz/vita-moonlight.git,None,1619775410,None,None,VPK,None,True +ACTI00000,Vita Activator,ZombieWizzard,None,None,https://github.com/yhtez/vita-activator/releases/download/v1.1/vita-activator.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACTI00000.vpk,https://raw.githubusercontent.com/zth0/vita-activator/master/README.md,None,https://github.com/zth0/vita-activator.git,None,1619775369,None,None,VPK,None,True +ref00d,reF00D,dots-tb,None,None,https://github.com/dots-tb/reF00D/releases/download/1.1.1/reF00D.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ref00d.skprx,https://raw.githubusercontent.com/dots-tb/reF00D/master/README.md,None,https://github.com/dots-tb/reF00D.git,None,1619775236,TAI,*KERNEL,PLUGIN,c305f3f5,True +ESVPK0009,EasyVPK,Electric1447,https://raw.githubusercontent.com/Electric1447/EasyVPK/v1.0.0/sce_sys/icon0.png,None,https://github.com/Electric1447/EasyVPK/releases/download/v2.1.0/easyvpk.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ESVPK0009.vpk,https://raw.githubusercontent.com/Electric1447/EasyVPK/master/README.md,None,https://github.com/Electric1447/EasyVPK.git,None,1619775104,None,None,VPK,None,True +MEIR00002,VICEVita,ammeir,https://raw.githubusercontent.com/ammeir/vicevita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MEIR00002_icon0.png,https://github.com/ammeir/vicevita/releases/download/v1.2/vicevita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MEIR00002.vpk,https://raw.githubusercontent.com/ammeir/vicevita/master/README.md,None,https://github.com/ammeir/vicevita.git,None,1619775099,None,None,VPK,None,True +BGFTP0010,BGFTP,GrapheneCt,https://raw.githubusercontent.com/GrapheneCt/BGFTP/master/common_data/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BGFTP0010_icon0.png,https://github.com/GrapheneCt/BGFTP/releases/download/v3.23/BGFTP.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BGFTP0010.vpk,https://raw.githubusercontent.com/GrapheneCt/BGFTP/master/README.md,None,https://github.com/GrapheneCt/BGFTP.git,None,1619775092,None,None,VPK,None,True +VSDK00014,Vita Manager,Yowai-dev,https://github.com/inthecatsdreams/vita-manager/raw/master/sce_sys/icon0.png,None,https://github.com/inthecatsdreams/vita-manager/releases/download/2.2/VitaMANAGER.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VSDK00014.vpk,https://raw.githubusercontent.com/Yowai-dev/vita-manager/master/README.md,None,https://github.com/Yowai-dev/vita-manager.git,None,1619775082,None,None,VPK,None,True +VITAVOLUM,VitaVolume,inthecatsdreams,https://raw.githubusercontent.com/inthecatsdreams/vita-volume/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITAVOLUM_icon0.png,https://github.com/inthecatsdreams/vita-volume/releases/download/1.4.0/VitaVolume.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITAVOLUM.vpk,https://raw.githubusercontent.com/Yowai-dev/vita-volume/master/README.md,None,https://github.com/Yowai-dev/vita-volume.git,None,1619775076,None,None,VPK,None,True +CapUnlocker,CapUnlocker,GrapheneCt,None,None,https://github.com/GrapheneCt/CapUnlocker/releases/download/v1.4/CapUnlocker.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/CapUnlocker.skprx,https://raw.githubusercontent.com/GrapheneCt/CapUnlocker/master/README.md,None,https://github.com/GrapheneCt/CapUnlocker.git,None,1619775064,TAI,*KERNEL,PLUGIN,None,True +VITALBUM0,VITAlbum,joel16,https://raw.githubusercontent.com/joel16/VITAlbum/master/sce_sys/icon0.png,None,https://github.com/joel16/VITAlbum/releases/download/v1.40/VITAlbum.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITALBUM0.vpk,https://raw.githubusercontent.com/joel16/VITAlbum/master/README.md,None,https://github.com/joel16/VITAlbum.git,None,1619775042,None,None,VPK,None,True +Lightbar,VolLightbarCtrlWithDS4,CallmeBK,None,None,https://github.com/CallmeBK/VolLightbarCtrlWithDS4/releases/download/v1.3/VolLightbarCtrlWithDS4.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/Lightbar.skprx,https://raw.githubusercontent.com/CallmeBK/VolLightbarCtrlWithDS4/master/README.md,None,https://github.com/CallmeBK/VolLightbarCtrlWithDS4.git,None,1619775025,TAI,*KERNEL,PLUGIN,None,True +AUTOPLUG2,AutoPlugin II,Team ONElua & theheroGAC,https://raw.githubusercontent.com/ONElua/AutoPlugin2/master/AUTOPLUG2/sce_sys/icon0.png,None,https://github.com/ONElua/AutoPlugin2/releases/download/2.01/AutoPlugin2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AUTOPLUG2.vpk,https://raw.githubusercontent.com/ONElua/AutoPlugin2/master/README.md,None,https://github.com/ONElua/AutoPlugin2.git,None,1619775021,None,None,VPK,None,True +FHOMM0002,Free Heroes 2,Northfear,https://raw.githubusercontent.com/Northfear/fheroes2-vita/master/platforms/vita/sce_sys/icon0.png,None,https://github.com/Northfear/fheroes2-vita/releases/download/0.9.1-vita.2/fheroes2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FHOMM0002.vpk,https://raw.githubusercontent.com/Northfear/fheroes2-vita/master/README.md,None,https://github.com/Northfear/fheroes2-vita.git,None,1619775018,None,None,VPK,None,True +vmass,vmass,Princess-of-Sleeping,None,None,https://github.com/Princess-of-Sleeping/vmass/releases/download/v1.40/vmass.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/vmass.skprx,https://raw.githubusercontent.com/Princess-of-Sleeping/vmass/master/README.md,None,https://github.com/Princess-of-Sleeping/vmass.git,None,1619775016,TAI,*KERNEL,PLUGIN,None,True +NOBOR0001,Noboru,Creckeryop,https://raw.githubusercontent.com/Creckeryop/NOBORU/master/source/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NOBOR0001_icon0.png,https://github.com/Creckeryop/NOBORU/releases/download/0.91/Noboru.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NOBOR0001.vpk,https://raw.githubusercontent.com/Creckeryop/NOBORU/master/README.md,None,https://github.com/Creckeryop/NOBORU.git,None,1619775011,None,None,VPK,None,True +MARISAHIL,MARISA HighLow,GrapheneCt,https://raw.githubusercontent.com/GrapheneCt/MARISA-HighLow-PSV/master/sce_sys/icon0.png,None,https://github.com/GrapheneCt/MARISA-HighLow-PSV/releases/download/v2.2/MARISA-HighLow-PSV.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MARISAHIL.vpk,https://raw.githubusercontent.com/GrapheneCt/MARISA-HighLow-PSV/master/README.md,None,https://github.com/GrapheneCt/MARISA-HighLow-PSV.git,None,1619775006,None,None,VPK,None,True +ADRBUBMAN,Adrenaline Bubbles Manager,ONElua,https://raw.githubusercontent.com/ONElua/AdrenalineBubbleManager/master/AdrenalineBubbleManager/sce_sys/icon0.png,None,https://github.com/ONElua/AdrenalineBubbleManager/releases/download/6.16/AdrenalineBubbleManager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADRBUBMAN.vpk,https://raw.githubusercontent.com/ONElua/AdrenalineBubbleManager/master/README.md,None,https://github.com/ONElua/AdrenalineBubbleManager.git,None,1619775004,None,None,VPK,None,True +DEDALOX64,DaedalusX64,Original Daedalus X64 developers & Xerpi & Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/DaedalusX64-vitaGL/master/Source/sce_sys/icon0.png,None,https://github.com/Rinnegatamante/DaedalusX64-vitaGL/releases/download/Stable/DaedalusX64.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DEDALOX64.vpk,https://raw.githubusercontent.com/Rinnegatamante/DaedalusX64-vitaGL/master/README.md,None,https://github.com/Rinnegatamante/DaedalusX64-vitaGL.git,None,1619774986,None,None,VPK,None,True +GTASA0000,GTA: SA,TheOfficialFloW,https://raw.githubusercontent.com/TheOfficialFloW/gtasa_vita/v1.0/sce_sys/icon0.png,None,https://github.com/TheOfficialFloW/gtasa_vita/releases/download/v2.1/GTASA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GTASA0000.vpk,https://raw.githubusercontent.com/TheOfficialFloW/gtasa_vita/master/README.md,None,https://github.com/TheOfficialFloW/gtasa_vita.git,None,1619774981,None,None,VPK,None,True +PKGJ00000,PKGj,blastrock & mmozeiko,https://raw.githubusercontent.com/blastrock/pkgj/master/assets/sce_sys/icon0.png,None,https://github.com/blastrock/pkgj/releases/download/v0.55/pkgj.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PKGJ00000.vpk,https://raw.githubusercontent.com/blastrock/pkgj/master/README.md,None,https://github.com/blastrock/pkgj.git,None,1617590675,None,None,VPK,None,True +YOUT00000,YouTube,KuromeSan,https://raw.githubusercontent.com/KuromeSan/YoutubeApp/master/sce_sys/icon0.png,None,https://github.com/KuromeSan/YoutubeApp/releases/download/v0.1/YOUT00000.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/YOUT00000.vpk,https://raw.githubusercontent.com/KuromeSan/YoutubeApp/master/README.md,None,https://github.com/KuromeSan/YoutubeApp.git,None,1615557601,None,None,VPK,None,True +GEMRB0001,GemRB,Northfear,https://raw.githubusercontent.com/Northfear/gemrb-vita/master/sce_sys/icon0.png,None,https://github.com/Northfear/gemrb-vita/releases/download/v0.8.8-vita.7/gemrb.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GEMRB0001.vpk,https://raw.githubusercontent.com/Northfear/gemrb-vita/master/README.md,None,https://github.com/Northfear/gemrb-vita.git,None,1619775009,None,None,VPK,None,True +AKRK00005,Sharpscale Config Menu,cuevavirus,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AKRK00005.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AKRK00005.VPK,None,None,None,None,None,1614140551,None,None,VPK,None,True +AIOHBU365,Easy Downgrader/Updater for PS Vita,BaltazaR4,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AIOHBU365.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AIOHBU365.VPK,None,None,None,None,None,1610643947,None,None,VPK,None,True +ELEVENMPV_01,Eleven Music Player A,GrapheneCt & joel16,https://github.com/GrapheneCt/ElevenMPV-A/raw/master/sce_sys/icon0.png,None,https://github.com/GrapheneCt/ElevenMPV-A/releases/download/v7.10/ElevenMPV-A.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ELEVENMPV_01.vpk,https://raw.githubusercontent.com/GrapheneCt/ElevenMPV-A/master/README.md,None,https://github.com/GrapheneCt/ElevenMPV-A.git,None,1610239480,None,None,VPK,None,True +CDRR00000,Chip and Dale: Remastered,tijesef,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CDRR00000.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CDRR00000.VPK,None,None,None,None,None,1609638187,None,None,VPK,None,True +MODORU000,modoru 戻る,TheFloW,https://raw.githubusercontent.com/TheOfficialFloW/modoru/master/pkg/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MODORU000_icon0.png,https://github.com/TheOfficialFloW/modoru/releases/download/v2.3/modoru.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MODORU000.vpk,https://raw.githubusercontent.com/TheOfficialFloW/modoru/master/README.md,None,https://github.com/TheOfficialFloW/modoru.git,None,1606688123,None,None,VPK,None,True +MLCL00003,ensō_ex,SKGleba & Team Molecule,https://raw.githubusercontent.com/SKGleba/enso_ex/master/installer/res/icon.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MLCL00003_icon0.png,https://github.com/SKGleba/enso_ex/releases/download/v4.5.1/enso_ex.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00003.vpk,https://raw.githubusercontent.com/SKGleba/enso_ex/master/README.md,None,https://github.com/SKGleba/enso_ex.git,None,1606688121,None,None,VPK,None,True +PSPEMUCFW,Adrenaline,TheFloW,https://raw.githubusercontent.com/TheOfficialFloW/Adrenaline/master/bubble/pkg/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSPEMUCFW_icon0.png,https://github.com/TheOfficialFloW/Adrenaline/releases/download/v7/Adrenaline.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSPEMUCFW.vpk,https://raw.githubusercontent.com/TheOfficialFloW/Adrenaline/master/readme.md,None,https://github.com/TheOfficialFloW/Adrenaline.git,None,1606688090,None,None,VPK,None,True +MSWEEPER1,MSweep,Creckeryop,https://raw.githubusercontent.com/Creckeryop/MSweep/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MSWEEPER1_icon0.png,https://github.com/Creckeryop/MSweep/releases/download/v1.2.1/MSweep.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MSWEEPER1.vpk,https://raw.githubusercontent.com/Creckeryop/MSweep/master/README.md,None,https://github.com/Creckeryop/MSweep.git,None,1606688088,None,None,VPK,None,True +1MENUVITA,Onemenu for Psvita,ONElua,https://raw.githubusercontent.com/ONElua/ONEMenu-for-PSVita/master/ONEMenuVita/sce_sys/icon0.png,None,https://github.com/ONElua/ONEMenu-for-PSVita/releases/download/3.17/ONEMenuVita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/1MENUVITA.vpk,https://raw.githubusercontent.com/ONElua/ONEMenu-for-PSVita/master/README.md,None,https://github.com/ONElua/ONEMenu-for-PSVita.git,None,1606687981,None,None,VPK,None,True +HODEVITA1,hode,usineur,https://raw.githubusercontent.com/usineur/hode/master/3p/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HODEVITA1_icon0.png,https://github.com/usineur/hode/releases/download/0.2.9d/hode.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HODEVITA1.vpk,https://raw.githubusercontent.com/usineur/hode/master/README.txt,None,https://github.com/usineur/hode.git,None,1606687937,None,None,VPK,None,True +vita2d_sys,libvita2d_sys,GrapheneCt & xerpi,None,None,https://github.com/GrapheneCt/libvita2d_sys/releases/download/v1.46/libvita2d_sys.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/vita2d_sys.suprx,https://raw.githubusercontent.com/GrapheneCt/libvita2d_sys/master/README.md,None,https://github.com/GrapheneCt/libvita2d_sys.git,None,1606687531,TAI,*ALL,PLUGIN,None,True +ds4touch,ds4Touch,MERLev,None,None,https://github.com/MERLev/ds4Touch/releases/download/1.1.3/ds4touch.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ds4touch.skprx,https://raw.githubusercontent.com/MERLev/ds4Touch/master/README.md,None,https://github.com/MERLev/ds4Touch.git,None,1606687511,TAI,*KERNEL,PLUGIN,ds4touch_01,True +TrophyShotApp,TrophyShot,FMudanyali,None,None,https://github.com/FMudanyali/TrophyShot/releases/download/1.1.1.1/TrophyShot.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/TrophyShotApp.suprx,https://raw.githubusercontent.com/FMudanyali/TrophyShot/master/README.md,None,https://github.com/FMudanyali/TrophyShot.git,None,1606687499,TAI,*main,PLUGIN,TrophyShotMain,True +hcstudio,hcstudio,teakhanirons,None,None,https://github.com/teakhanirons/hcstudio/releases/download/1.0/hcstudio.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/hcstudio.skprx,https://raw.githubusercontent.com/teakhanirons/hcstudio/master/README.md,None,https://github.com/teakhanirons/hcstudio.git,None,1605110687,TAI,*KERNEL,PLUGIN,None,True +SMLA00001,Launcher,cy33hc,https://raw.githubusercontent.com/cy33hc/vita-launcher/master/sce_sys/icon0.png,None,https://github.com/cy33hc/vita-launcher/releases/download/latest/launcher.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SMLA00001.vpk,https://raw.githubusercontent.com/cy33hc/vita-launcher/master/README.md,None,https://github.com/cy33hc/vita-launcher.git,None,1603793997,None,None,VPK,None,True +ADRLANCHR,Adrenaline Launcher,cy33hc,https://raw.githubusercontent.com/cy33hc/vita-launcher/master/adr_launcher/sce_sys/icon0.png,None,https://github.com/cy33hc/vita-launcher/releases/download/latest/AdrenalineLauncher.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADRLANCHR.vpk,https://raw.githubusercontent.com/cy33hc/vita-launcher/master/README.md,None,https://github.com/cy33hc/vita-launcher.git,None,1603793784,None,None,VPK,None,True +BetterTrackPlug,BetterTrackPlug,FMudanyali,None,None,https://gitlab.com/FMudanyali/bettertrackplug/uploads/4db77d8582996fa92f8c748b2268242b/BetterTrackPlug.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/BetterTrackPlug.skprx,https://raw.githubusercontent.com/FMudanyali/BetterTrackPlug/master/README.md,None,https://github.com/FMudanyali/BetterTrackPlug.git,None,1601123313,TAI,*KERNEL,PLUGIN,None,True +TPLG00001_01,TrackPlug,FMudanyali,https://raw.githubusercontent.com/FMudanyali/BetterTrackPlug/master/app/sce_sys/icon0.png,None,https://gitlab.com/FMudanyali/bettertrackplug/uploads/2c804c27c232915952e551638a0240ab/BetterTrackPlug.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TPLG00001_01.vpk,https://raw.githubusercontent.com/FMudanyali/BetterTrackPlug/master/README.md,None,https://github.com/FMudanyali/BetterTrackPlug.git,None,1601123287,None,None,VPK,BetterTrackPlug,True +TrophyShotMain,TrophyShot,FMudanyali,None,None,https://gitlab.com/FMudanyali/trophyshot/uploads/b603396ff786d9b118aaeefc1a4e527e/trophyshot_shell.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/TrophyShotMain.suprx,https://raw.githubusercontent.com/FMudanyali/TrophyShot/master/README.md,None,https://github.com/FMudanyali/TrophyShot.git,None,1600595554,TAI,*main,PLUGIN,None,False +LCDSAT000,LCD Color Saturation,Electric1447,https://raw.githubusercontent.com/Electric1447/lcd-color-saturation/master/sce_sys/icon0.png,None,https://github.com/Electric1447/lcd-color-saturation/releases/download/v1.2.0/lcdsat.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LCDSAT000.vpk,https://raw.githubusercontent.com/Electric1447/lcd-color-saturation/master/README.md,None,https://github.com/Electric1447/lcd-color-saturation.git,None,1600197148,None,None,VPK,None,True +ds4touch_01,ds4Touch,MERLev,None,None,https://github.com/MERLev/ds4Touch/releases/download/1.1.3/ds4touch.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ds4touch_01.suprx,https://raw.githubusercontent.com/MERLev/ds4Touch/master/README.md,None,https://github.com/MERLev/ds4Touch.git,None,1600159185,TAI,*ALL,PLUGIN,None,False +RETROVITA,RetroArch,Libretro Team,https://raw.githubusercontent.com/libretro/retroarch/master/media/ico_src/icon128.png,None,https://buildbot.libretro.com/stable/1.9.0/playstation/vita/RetroArch.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RETROVITA.vpk,https://raw.githubusercontent.com/libretro/retroarch/master/README.md,None,https://github.com/libretro/retroarch.git,None,1599766237,None,None,VPK,None,True +TFCARDPL0,TF Card Plugin Tool,Yizhi gai & TheheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TFCARDPL0.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TFCARDPL0.VPK,None,https://raw.githubusercontent.com/theheroGAC/TF-Card-Plugin-Tool/master/README.md,None,https://github.com/theheroGAC/TF-Card-Plugin-Tool.git,None,1599471378,None,None,VPK,None,True +JJH000002,Snake,JJH47E,https://raw.githubusercontent.com/JJH47E/snake/master/psvita/sce_sys/icon0.png,None,https://github.com/JJH47E/snake/releases/download/0.9/Snake.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/JJH000002.vpk,None,None,https://github.com/JJH47E/snake.git,None,1599468788,None,None,VPK,None,True +SM6400001,Super Mario 64 PC,bythos14 & Nintendo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SM6400001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SM6400001.vpk,None,https://raw.githubusercontent.com/bythos14/sm64-vita/master/README.md,None,https://github.com/bythos14/sm64-vita.git,None,1598996481,None,None,VPK,None,True +MLCL00001,molecularShell fork,various & Team Molecule & TheFlow,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MLCL00001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00001.VPK,None,None,None,None,None,1598861463,None,None,VPK,None,True +FISHPOD01,Fishpod the Platformer,Team789er,https://github.com/Team789er/Fishpod-the-Platformer/releases/download/1.0.0/icon0.png,None,https://github.com/Team789er/Fishpod-the-Platformer/releases/download/1.0.0/fishpod.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FISHPOD01.vpk,https://raw.githubusercontent.com/Team789er/Fishpod-the-Platformer/master/README.md,None,https://github.com/Team789er/Fishpod-the-Platformer.git,None,1598857167,None,None,VPK,None,True +ABCD12345_06,Ronister Adventure Demo,Ronikgames,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_06_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345_06.vpk,None,None,None,None,None,1598810030,None,None,VPK,None,True +SKGYAMT01_01,YAMT installer,SKGleba,https://raw.githubusercontent.com/SKGleba/yamt-vita/master/res/icon0.png,None,https://github.com/SKGleba/yamt-vita/releases/download/v4.0/yamt.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGYAMT01_01.vpk,https://raw.githubusercontent.com/SKGleba/yamt-vita/master/README.md,None,https://github.com/SKGleba/yamt-vita.git,None,1598808985,None,None,VPK,None,True +CREEPER00,CreeperDiver,SilicaAndPina,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CREEPER00_icon0.png,None,https://bitbucket.org/SilicaAndPina/creeperdiver/downloads/creeperdiver-1.2-vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CREEPER00.vpk,https://bitbucket.org/SilicaAndPina/creeperdiver/raw/master/README.md,None,git clone https://bitbucket.org/SilicaAndPina/creeperdiver.git,None,1598560047,None,None,VPK,None,True +SHEPHARD0,ShepHard,SilicaAndPina & Butterscotch Shenanigans,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SHEPHARD0_icon0.png,None,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/ShepHard/Shephard.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHEPHARD0.vpk,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/README.md,None,None,None,1598558986,None,None,VPK,None,True +FREEWAY00,FREEWAY MUTANT,SilicaAndPina & Butterscotch Shenanigans,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FREEWAY00_icon0.png,None,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/FreewayMutant/FreeWayMutant.VPK,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FREEWAY00.vpk,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/README.md,None,None,None,1598558791,None,None,VPK,None,True +EXTREME00,Extreme Burger Defence,SilicaAndPina & Butterscotch Shenanigans,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/EXTREME00_icon0.png,None,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/ExtremeBurgerDefence/EXTREME%20BURGER%20DEFENCE.VPK,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EXTREME00.vpk,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/README.md,None,None,None,1598558688,None,None,VPK,None,True +HELLOGMSV,HELLO WORLD,SilicaAndPina,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HELLOGMSV_icon0.png,None,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/HelloWorld/HELLO%20WORLD.VPK,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HELLOGMSV.vpk,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/gm-shb.git,None,1598558210,None,None,VPK,None,True +STREETRAC,Street Racing,SilicaAndPina & Mark Overmars & Martin Bérubé & Sander Steenhuis & Jacob Habgood,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/STREETRAC_icon0.png,None,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/StreetRacingGMS/Street%20Racing.VPK,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/STREETRAC.vpk,https://bitbucket.org/SilicaAndPina/gm-shb/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/gm-shb.git,None,1598557855,None,None,VPK,None,True +PTVT44218,Vita Stacks,VitaHEX,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PTVT44218_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PTVT44218.vpk,None,None,None,None,None,1598556985,None,None,VPK,None,True +EMUINST00,PSP.Emulators.Installer,theheroGAC,https://raw.githubusercontent.com/theheroGAC/PSP-EMULATORS-INSTALLER/master/sce_sys/icon0.png,None,https://github.com/theheroGAC/PSP-EMULATORS-INSTALLER/releases/download/1.12/PSP.Emulators.Installer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EMUINST00.vpk,https://raw.githubusercontent.com/theheroGAC/PSP-EMULATORS-INSTALLER/master/README.md,None,https://github.com/theheroGAC/PSP-EMULATORS-INSTALLER.git,None,1598555974,None,None,VPK,None,True +HonRipper,HonRipper,GrapheneCt,None,None,https://github.com/GrapheneCt/HonRipper/releases/download/v1.0/HonRipper.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/HonRipper.suprx,https://raw.githubusercontent.com/GrapheneCt/HonRipper/master/README.md,None,https://github.com/GrapheneCt/HonRipper.git,None,1598555816,TAI,*PCSC80012,PLUGIN,None,True +ShellAudio,libShellAudio,GrapheneCt,None,None,https://github.com/GrapheneCt/libShellAudio/releases/download/v1.2/libShellAudio.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ShellAudio.suprx,https://raw.githubusercontent.com/GrapheneCt/libShellAudio/master/README.md,None,https://github.com/GrapheneCt/libShellAudio.git,None,1598555729,TAI,*ALL,PLUGIN,None,True +PKGENABLE,PKG Enabler,Freakler,https://raw.githubusercontent.com/Freakler/vita-PKGEnabler/master/livearea/icon0.png,None,https://github.com/Freakler/vita-PKGEnabler/releases/download/1.00/PKGEnabler_v100.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PKGENABLE.vpk,https://raw.githubusercontent.com/Freakler/vita-PKGEnabler/master/README.md,None,https://github.com/Freakler/vita-PKGEnabler.git,None,1598555624,None,None,VPK,None,True +MLCL00003_03,enso-dex,Team Molecule & SilicaAndPina,https://raw.githubusercontent.com/KuromeSan/enso-dex/master/installer/res/icon.png,None,https://github.com/KuromeSan/enso-dex/releases/download/V1.4/enso.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00003_03.vpk,https://raw.githubusercontent.com/KuromeSan/enso-dex/master/README.md,None,https://github.com/KuromeSan/enso-dex.git,None,1598332527,None,None,VPK,None,True +KRKR00001,Kirikiri for Playstation Vita,uyjulian,https://raw.githubusercontent.com/uyjulian/krkrv/master/sce_sys/icon0.png,None,https://github.com/uyjulian/krkrv/releases/download/v1.0.3/krkrv-v1.0.3.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/KRKR00001.vpk,https://raw.githubusercontent.com/uyjulian/krkrv/master/README.md,None,https://github.com/uyjulian/krkrv.git,None,1597656558,None,None,VPK,None,True +JJH000001,MemoryGame,jjh47e,https://raw.githubusercontent.com/JJH47E/MemoryGame/master/psvita/sce_sys/icon0.png,None,https://github.com/JJH47E/MemoryGame/releases/download/1.0/MemoryGame1.0.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/JJH000001.vpk,https://raw.githubusercontent.com/jjh47e/memorygame/master/README.md,None,https://github.com/jjh47e/memorygame.git,None,1597545825,None,None,VPK,None,True +BALD14030,Baldi's Basics Classic,hat,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BALD14030_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BALD14030.vpk,None,None,None,None,None,1597396358,None,None,VPK,None,True +PLUTO0013,Plutoboy,RossMeikleham,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PLUTO0013.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PLUTO0013.VPK,None,https://raw.githubusercontent.com/RossMeikleham/PlutoBoy/master/README.md,None,https://github.com/RossMeikleham/PlutoBoy.git,None,1596791723,None,None,VPK,None,True +SPLK00001,Spelunky Classic HD,nkrapivin,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SPLK00001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SPLK00001.VPK,None,None,None,None,None,1596791561,None,None,VPK,None,True +vitabatteryplus,VITABatteryPlus,Electric1447,None,None,https://github.com/Electric1447/VITABatteryPlus/releases/download/1.8/vitabatteryplus.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/vitabatteryplus.suprx,https://raw.githubusercontent.com/Electric1447/VITABatteryPlus/master/README.md,None,https://github.com/Electric1447/VITABatteryPlus.git,None,1596406005,TAI,*ALL,PLUGIN,None,True +WOTY00001,Wheel of the Year,SilicaAndPina,https://raw.githubusercontent.com/KuromeSan/WheelOfTheYearGM/master/vita_assets/icon0.png,None,https://github.com/KuromeSan/WheelOfTheYearGM/releases/download/v1.1/WOTY.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WOTY00001.vpk,https://raw.githubusercontent.com/KuromeSan/WheelOfTheYearGM/master/README.md,None,https://github.com/KuromeSan/WheelOfTheYearGM.git,None,1595600605,None,None,VPK,None,True +d30e5351,Alien vs Predator Gold Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/AvP.zip,None,None,None,None,None,1595431308,None,ux0:/data,DATA,None,False +AVPGOLD20,Alien vs Predator Gold,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/AvP-Gold-Vita/master/sce_sys/icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=569,https://dl.coolatoms.org/vitadb/avp.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AVPGOLD20.vpk,https://raw.githubusercontent.com/Rinnegatamante/AvP-Gold-Vita/master/README,None,https://github.com/Rinnegatamante/AvP-Gold-Vita.git,None,1595430900,None,None,VPK,d30e5351,True +SHARKF00D,ShaRKF00D,OsirizX,https://raw.githubusercontent.com/OsirizX/ShaRKF00D/master/pkg/sce_sys/icon0.png,None,https://github.com/OsirizX/ShaRKF00D/releases/download/1.3/ShaRKF00D.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHARKF00D.vpk,https://raw.githubusercontent.com/OsirizX/ShaRKF00D/master/README.md,None,https://github.com/OsirizX/ShaRKF00D.git,None,1595025704,None,None,VPK,None,True +YAKZEE000,Yakzee,dragaron,https://raw.githubusercontent.com/dragaron/Yakzee/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/YAKZEE000.PNG,https://github.com/dragaron/Yakzee/releases/download/v1.00/Yakzee.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/YAKZEE000.vpk,https://raw.githubusercontent.com/dragaron/Yakzee/master/README.md,None,https://github.com/dragaron/Yakzee.git,None,1594152904.74807,None,None,VPK,None,True +XEROX0000,Xerox,dragaron,https://raw.githubusercontent.com/dragaron/Xerox/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/XEROX0000.PNG,https://github.com/dragaron/Xerox/releases/download/v1.01/Xerox.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XEROX0000.vpk,https://raw.githubusercontent.com/dragaron/Xerox/master/README.md,None,https://github.com/dragaron/Xerox.git,None,1594152892.95862,None,None,VPK,None,True +GMSV00009,Temporary Space,xanderten50,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GMSV00009.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GMSV00009.VPK,None,None,None,None,None,1594152739.75206,None,None,VPK,None,True +SYNCSIMPL,SYNC SIMPLE,tijesef,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SYNCSIMPL.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SYNCSIMPL.VPK,None,None,None,None,None,1594152736.33644,None,None,VPK,None,True +FDCE22385,Super Mario Vita,FantaHourglass,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FDCE22385.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FDCE22385.VPK,None,None,None,None,None,1594152723.03084,None,None,VPK,None,True +LAPY30015,Super Console Wars,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY30015.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY30015.VPK,None,None,None,None,None,1594152700.72361,None,None,VPK,None,True +SUDORKU00,Sudorku,dragaron,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SUDORKU00.PNG,None,https://github.com/dragaron/Sudorku/releases/download/v1.01/Sudorku.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SUDORKU00.vpk,https://raw.githubusercontent.com/dragaron/Sudorku/master/README.md,None,https://github.com/dragaron/Sudorku.git,None,1594152686.3917,None,None,VPK,None,True +SPIDERCARD,SpiderVita,leestorm,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SPIDERCARD.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SPIDERCARD.VPK,None,None,None,None,None,1594152679.00935,None,None,VPK,None,True +POOL00001,POOL [of Doom!],nkrapivin,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/POOL00001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/POOL00001.VPK,None,None,None,None,None,1594152593.59908,None,None,VPK,None,True +NEDO12345,The Great Adventure of Nedokun,nedmapagmahal,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NEDO12345.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NEDO12345.VPK,None,None,None,None,None,1594152548.56015,None,None,VPK,None,True +ABCD10030,Global Game Jam 2017,Paulo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD10030.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD10030.VPK,None,None,None,None,None,1594152506.70711,None,None,VPK,None,True +MADN00000,Mensch ärgere Dich nicht,Dane64,https://raw.githubusercontent.com/Dane64/MaDn/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MADN00000.PNG,https://github.com/Dane64/MaDn/releases/download/1.0/MaDn.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MADN00000.vpk,https://raw.githubusercontent.com/Dane64/MaDn/master/README.md,None,https://github.com/Dane64/MaDn.git,None,1594152495.80658,None,None,VPK,None,True +SCXD00001,Henkaku Haven High School Rumble,dots_tb & coderx3,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SCXD00001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SCXD00001.VPK,None,None,None,None,None,1594152441.89924,None,None,VPK,None,True +HEXGEM001,HEXGEM,caghandemir,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HEXGEM001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HEXGEM001.VPK,None,None,None,None,None,1594152430.8995,None,None,VPK,None,True +DLTR00000,DELTARUNE: Chapter One,tijesef,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DLTR00000.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DLTR00000.VPK,None,None,None,None,None,1594152308.56297,None,None,VPK,None,True +CCCB00000,Cocaine Cowboy,tijesef,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CCCB00000.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CCCB00000.VPK,None,None,None,None,None,1594152278.61433,None,None,VPK,None,True +CHESSPS3D,Chess 3D,Team ONELua ,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CHESSPS3D.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CHESSPS3D.VPK,None,None,None,None,None,1594152263.17719,None,None,VPK,None,True +BVO000001,BreakVeetOut,InvalidExcepti0n,None,None,https://github.com/ddB0515/BreakVeetOut/releases/download/v0.3/BreakVeetOut_v0.3.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BVO000001.vpk,https://raw.githubusercontent.com/InvalidExcepti0n/BreakVeetOut/master/README.md,None,https://github.com/InvalidExcepti0n/BreakVeetOut.git,None,1594152249.6205,None,None,VPK,None,True +BLACKOUT0,Blackout,dragaron,https://raw.githubusercontent.com/dragaron/Blackout/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BLACKOUT0.PNG,https://github.com/dragaron/Blackout/releases/download/v1.01/Blackout.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BLACKOUT0.vpk,https://raw.githubusercontent.com/dragaron/Blackout/master/README.md,None,https://github.com/dragaron/Blackout.git,None,1594152239.04444,None,None,VPK,None,True +AOTLMC001,Caterpillars,Gremlin Software,https://raw.githubusercontent.com/softwaregremlin/Attack-of-the-Lettuce-Munching-Caterpillars/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AOTLMC001.PNG,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AOTLMC001.VPK,None,https://raw.githubusercontent.com/softwaregremlin/Attack-of-the-Lettuce-Munching-Caterpillars/master/README.md,None,https://github.com/softwaregremlin/Attack-of-the-Lettuce-Munching-Caterpillars.git,None,1594152219.56467,None,None,VPK,None,True +PSVITAEMU,PSVITA EMU INSTALLER,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSVITAEMU.PNG,None,https://github.com/theheroGAC/PSVITAEMUINSTALLER/releases/download/1.10/PSVITA.EMU.INSTALLER.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSVITAEMU.vpk,https://raw.githubusercontent.com/theheroGAC/PSVITAEMUINSTALLER/master/README.md,None,https://github.com/theheroGAC/PSVITAEMUINSTALLER.git,None,1594151837.28178,None,None,VPK,None,True +PSNES0001,pSNES,Cpasjuste,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSNES0001.VPK,None,None,None,None,None,1594151813.72727,None,None,VPK,None,True +PLAY00001,Play!-,xerpi,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PLAY00001.VPK,None,None,None,None,None,1594151810.63548,None,None,VPK,None,True +SKOG10001,CATSFC-libretro-vita,skogaby,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKOG10001.PNG,None,https://github.com/skogaby/CATSFC-libretro/releases/download/1.3.0/CATSFC-libretro-vita-1.3.0.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKOG10001.vpk,https://raw.githubusercontent.com/skogaby/CATSFC-libretro/master/README.md,None,https://github.com/skogaby/CATSFC-libretro.git,None,1594151791.61689,None,None,VPK,None,True +VPRW00002,VitaRW-min,rtlsdr_is_fun,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VPRW00002.VPK,None,None,None,None,None,1594151545.98455,None,None,VPK,None,True +REBDB0001,Rebuild_Database,theHeroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/REBDB0001.PNG,None,https://github.com/theheroGAC/rebuild_database/releases/download/1.02/Rebuild_Database.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/REBDB0001.vpk,https://raw.githubusercontent.com/theheroGAC/rebuild_database/master/README.md,None,https://github.com/theheroGAC/rebuild_database.git,None,1594151535.90794,None,None,VPK,None,True +DUMP0900D,Dump Partials,yifanlu,None,None,https://github.com/yifanlu/psvimgtools/releases/download/v0.1/dump_partials.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DUMP0900D.vpk,https://raw.githubusercontent.com/yifanlu/psvimgtools/master/README.md,None,https://github.com/yifanlu/psvimgtools.git,None,1594151511.35254,None,None,VPK,None,True +PSVVSHREC,PSV-VSH Recovery Menu,joel16,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSVVSHREC.VPK,None,None,None,None,None,1594151506.7929,None,None,VPK,None,True +YPID00001,PSV IDPS Dumper v0.7,Yoti,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/YPID00001.PNG,None,https://github.com/Yoti/psv_idpsdump/releases/download/v0.9/PSV_IDPS_Dumper_v0.9.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/YPID00001.vpk,https://raw.githubusercontent.com/Yoti/psv_idpsdump/master/README.md,None,https://github.com/Yoti/psv_idpsdump.git,None,1594151506.44903,None,None,VPK,None,True +ONELUA4R1,ONEluaVita4R1,Team ONElua,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ONELUA4R1.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ONELUA4R1.VPK,None,None,None,None,None,1594151500.92288,None,None,VPK,None,True +SKGM1NCG0,mincg,SKGleba,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKGM1NCG0.PNG,None,https://github.com/SKGleba/mincg/releases/download/v1.0/mincg.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGM1NCG0.vpk,https://raw.githubusercontent.com/SKGleba/mincg/master/README.md,None,https://github.com/SKGleba/mincg.git,None,1594151498.64805,None,None,VPK,None,True +QLINSTALL,QuickLaunch Installer,1upus,https://raw.githubusercontent.com/1upus/QuickLaunch_installer_for_PSVita/master/qlinstaller/sce_sys/icon0.png,None,https://github.com/1upus/QuickLaunch_installer_for_PSVita/releases/download/0.51/QuickLaunch_installer_for_PSVita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/QLINSTALL.vpk,https://raw.githubusercontent.com/1upus/QuickLaunch_installer_for_PSVita/master/README.md,None,https://github.com/1upus/QuickLaunch_installer_for_PSVita.git,None,1594149942,None,None,VPK,None,True +GAMESAND0,GamesandConsoles App,theheroGAC,https://raw.githubusercontent.com/theheroGAC/GamesAndConsoles-app/master/sce_sys/icon0.png,None,https://github.com/theheroGAC/GamesAndConsoles-app/releases/download/1.02/GamesandConsoles.App.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GAMESAND0.vpk,https://raw.githubusercontent.com/theheroGAC/GamesAndConsoles-app/master/README.md,None,https://github.com/theheroGAC/GamesAndConsoles-app.git,None,1594149840,None,None,VPK,None,True +ONELUAWLM,Wifi Level Meter,moody.b,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ONELUAWLM.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ONELUAWLM.VPK,None,None,None,None,None,1594149364.09415,None,None,VPK,None,True +VITATWEAK,VitaTweakBox,benmitnick,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITATWEAK.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITATWEAK.VPK,None,None,None,None,None,1594149360.60024,None,None,VPK,None,True +VITASVMGR,Save Manager Plus,Kylon,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITASVMGR.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITASVMGR.VPK,None,None,None,None,None,1594149306.59912,None,None,VPK,None,True +VHBB00002,Wiki Vita Homebrew Browser,Team ONElua,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VHBB00002.PNG,None,https://github.com/DevDavisNunez/vhbb/releases/download/0.831/WIki.VitaHBBrowser.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VHBB00002.vpk,https://raw.githubusercontent.com/DevDavisNunez/vhbb/master/README.md,None,https://github.com/DevDavisNunez/vhbb.git,None,1594149298.30405,None,None,VPK,None,True +SKGVKAIO1,VKAIO,SKGleba,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKGVKAIO1.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGVKAIO1.VPK,None,https://raw.githubusercontent.com/SKGleba/v-kaio/master/README.md,None,https://github.com/SKGleba/v-kaio.git,None,1594149282.42131,None,None,VPK,None,True +TTFTP0001,Two Touch FTP,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TTFTP0001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TTFTP0001.VPK,None,None,None,None,None,1594149277.06073,None,None,VPK,None,True +TPLG00001,TrackPlug,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TPLG00001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TPLG00001.VPK,None,None,None,https://github.com/Rinnegatamante/TrackPlug.git,None,1594149271.10893,None,None,VPK,None,True +HWCSOSAPP,S.O.S.,HWNJ/ChelseaFantasy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HWCSOSAPP.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HWCSOSAPP.VPK,None,None,None,None,None,1594149246.88935,None,None,VPK,None,True +RECOVERYR,Quick Recovery,CelesteBlue,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RECOVERYR.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RECOVERYR.VPK,None,None,None,None,None,1594149224.54538,None,None,VPK,None,True +TROPHYFIX,Trophies Fixer,Yoti,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TROPHYFIX.PNG,None,https://github.com/Yoti/psv_trophfix/releases/download/v1.1/trophies_fixer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TROPHYFIX.vpk,https://raw.githubusercontent.com/Yoti/psv_trophfix/master/README.md,None,https://github.com/Yoti/psv_trophfix.git,None,1594149221.11937,None,None,VPK,None,True +DISABLE3G,3G Disabler,KanadeEngel,https://raw.githubusercontent.com/KanadeEngel/PS-Vita/master/3G_Disable/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DISABLE3G.PNG,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DISABLE3G.VPK,None,None,None,https://github.com/KanadeEngel/PS-Vita.git,None,1594149197.25468,None,None,VPK,None,True +PLUGINBOX,Plugin Box,Team ONElua,https://raw.githubusercontent.com/DavisDev/PluginBox/master/src/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PLUGINBOX.PNG,https://github.com/DavisDev/PluginBox/releases/download/0.20/PluginBox.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PLUGINBOX.vpk,https://raw.githubusercontent.com/DavisDev/PluginBox/master/README.md,None,https://github.com/DavisDev/PluginBox.git,None,1594149193.47584,None,None,VPK,None,True +PKGJTXT00,PKGJTXT Injector,Sam,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PKGJTXT00.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PKGJTXT00.VPK,None,None,None,None,None,1594149188.7931,None,None,VPK,None,True +ONETRANSL,ONEtranslate,DavisDev,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ONETRANSL.PNG,None,https://github.com/DavisDev/ONEtranslate/releases/download/v1.0/ONEtranslate.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ONETRANSL.vpk,https://raw.githubusercontent.com/DavisDev/ONEtranslate/master/README.md,None,https://github.com/DavisDev/ONEtranslate.git,None,1594149172.14748,None,None,VPK,None,True +MPSVSECR0,MyPSVITASecret,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MPSVSECR0.PNG,None,https://github.com/theheroGAC/MyPSVITASecret/releases/download/1.0/MyPSVITASecret.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MPSVSECR0.vpk,https://raw.githubusercontent.com/theheroGAC/MyPSVITASecret/master/README.md,None,https://github.com/theheroGAC/MyPSVITASecret.git,None,1594149158.86927,None,None,VPK,None,True +MULTIDOWN,Multidownload Vita,Team ONElua,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MULTIDOWN.PNG,None,https://github.com/DavisDev/Multidownload-Vita/releases/download/1.00/Multidownload-Vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MULTIDOWN.vpk,https://raw.githubusercontent.com/DavisDev/Multidownload-Vita/master/README.md,None,https://github.com/DavisDev/Multidownload-Vita.git,None,1594149153.30504,None,None,VPK,None,True +AKRK00003,Monaural Config,cuevavirus,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AKRK00003.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AKRK00003.VPK,None,https://raw.githubusercontent.com/cuevavirus/monaural/master/README.md,None,https://github.com/cuevavirus/monaural.git,None,1594149147.13562,None,None,VPK,None,True +HMRC00001,HomeRecovery,Ninoh-FOX,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HMRC00001.PNG,None,https://github.com/Ninoh-FOX/HomeRecovery/releases/download/v1.03/HomeRecovery_ENG.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HMRC00001.vpk,https://raw.githubusercontent.com/Ninoh-FOX/HomeRecovery/master/README.md,None,https://github.com/Ninoh-FOX/HomeRecovery.git,None,1594149122.95033,None,None,VPK,None,True +ONELUAHSR,Home Screen Restore,moody.b,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ONELUAHSR.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ONELUAHSR.VPK,None,None,None,None,None,1594149116.70685,None,None,VPK,None,True +HYS000002,History Deleter,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HYS000002.PNG,None,https://github.com/theheroGAC/PS-Vita/releases/download/2.0/History_Deleter_reboot_v2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HYS000002.vpk,None,None,https://github.com/theheroGAC/PS-Vita.git,None,1594149115.99892,None,None,VPK,None,True +SKGHHBRWS,HentaiHaven,SKGleba,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKGHHBRWS.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGHHBRWS.VPK,None,https://raw.githubusercontent.com/SKGleba/HH-Vita/master/README.md,None,https://github.com/SKGleba/HH-Vita.git,None,1594149113.35206,None,None,VPK,None,True +GAMESD001,TF卡插件工具,Yizhi gai,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GAMESD001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GAMESD001.VPK,None,None,None,None,None,1594149104.10093,None,None,VPK,None,True +FTPSZILLA,FTPzilla Vita,DavisDev,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FTPSZILLA.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FTPSZILLA.VPK,None,None,None,None,None,1594149098.98733,None,None,VPK,None,True +FUCK44444,FuckU,caghandemir,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FUCK44444.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FUCK44444.VPK,None,None,None,None,None,1594149099.76984,None,None,VPK,None,True +XERP00002,FTPVita,xerpi,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XERP00002.VPK,None,None,None,None,None,1594149097.0789,None,None,VPK,None,True +DOWNLOAD0,File Downloader,Xa_904,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DOWNLOAD0.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DOWNLOAD0.VPK,None,None,None,None,None,1594149091.44249,None,None,VPK,None,True +FWUPDATER,Firmware Updater,TheOfficialFloW,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FWUPDATER.VPK,None,None,None,None,None,1594149091.9808,None,None,VPK,None,True +EASYDS3BT,Easy DS3,Team ONElua,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/EASYDS3BT.PNG,None,https://github.com/DavisDev/Easy-Ds3/releases/download/1.01/Easy-Ds3.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EASYDS3BT.vpk,https://raw.githubusercontent.com/DavisDev/Easy-Ds3/master/README.md,None,https://github.com/DavisDev/Easy-Ds3.git,None,1594149076.72342,None,None,VPK,None,True +DVDL00001,DVDLogo,caghandemir,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DVDL00001.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DVDL00001.VPK,None,None,None,None,None,1594149070.39149,None,None,VPK,None,True +CBSIC0000,CustomBootSplash Image Changer,Princess-of-Sleeping,None,None,https://github.com/Princess-of-Sleeping/CustomBootSplash-Image-Changer/releases/download/v1.1/CustomBootSplash_Image_Changer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CBSIC0000.vpk,https://raw.githubusercontent.com/Princess-of-Sleeping/CustomBootSplash-Image-Changer/master/README.md,None,https://github.com/Princess-of-Sleeping/CustomBootSplash-Image-Changer.git,None,1594149065.13564,None,None,VPK,None,True +CROSSCON0,Cross Connection,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CROSSCON0.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CROSSCON0.VPK,None,None,None,None,None,1594149057.75913,None,None,VPK,None,True +CBPSDIR00,CBPS DIRECT STORE,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CBPSDIR00.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CBPSDIR00.VPK,None,None,None,None,None,1594149052.49178,None,None,VPK,None,True +BITCOIN00,Bitcoin BY xXx_KevBigBoss98_xXx,xXx_KevBigBoss98_xXx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BITCOIN00.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BITCOIN00.VPK,None,None,None,None,None,1594149046.29689,None,None,VPK,None,True +ADRENUPD0,Adrenaline Updater,Sam,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ADRENUPD0.PNG,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADRENUPD0.VPK,None,None,None,None,None,1594149015.30183,None,None,VPK,None,True +ADRSTAMGR,Adrenaline States Manager,Team ONElua,https://raw.githubusercontent.com/DavisDev/AdrenalineStates/master/src/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ADRSTAMGR.PNG,https://github.com/DavisDev/AdrenalineStates/releases/download/1.20/AdrenalineStates.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADRSTAMGR.vpk,https://raw.githubusercontent.com/DavisDev/AdrenalineStates/master/README.md,None,https://github.com/DavisDev/AdrenalineStates.git,None,1594149014.37961,None,None,VPK,None,True +ACTMANGER,Account_Manager,Team ONElua,https://raw.githubusercontent.com/ONElua/AccountManager/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ACTMANGER.PNG,https://github.com/ONElua/AccountManager/releases/download/1.10/Account_Manager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACTMANGER.vpk,https://raw.githubusercontent.com/ONElua/AccountManager/master/README.md,None,https://github.com/ONElua/AccountManager.git,None,1594149005.87325,None,None,VPK,None,True +PATH00027,Bookr MOD Vita,pathway27,https://raw.githubusercontent.com/pathway27/bookr-mod-vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PATH00027_icon0.png,https://github.com/pathway27/bookr-mod-vita/releases/download/v0.4.0a/bookr-mod-vita-v0.4.0a.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PATH00027.vpk,https://raw.githubusercontent.com/pathway27/bookr-mod-vita/refactor/README.md,None,https://github.com/pathway27/bookr-mod-vita.git,None,1594137788,None,None,VPK,None,True +oclockvita,oclockvita,frangarcj,None,None,https://github.com/frangarcj/oclockvita/releases/download/1.2.1/oclockvita.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/oclockvita.suprx,https://raw.githubusercontent.com/frangarcj/oclockvita/master/README.md,None,https://github.com/frangarcj/oclockvita.git,None,1594137263,TAI,*ALL,PLUGIN,None,True +MEMEU4444,MEMEU,Deppressiety,https://raw.githubusercontent.com/itz-depression/MEMEU-vita/master/sce_sys/icon0.png,None,https://github.com/itz-depression/MEMEU-vita/releases/download/MEMEU-vita/MEMEU.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MEMEU4444.vpk,https://raw.githubusercontent.com/itz-depression/MEMEU-vita/master/README.md,None,https://github.com/itz-depression/MEMEU-vita.git,None,1594137260,None,None,VPK,None,True +SAVEMGR00,Save Manager,d3m3vilurr,https://raw.githubusercontent.com/d3m3vilurr/vita-savemgr/master/sce_sys/icon0.png,None,https://github.com/d3m3vilurr/vita-savemgr/releases/download/nightly/savemgr.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SAVEMGR00.vpk,https://raw.githubusercontent.com/d3m3vilurr/vita-savemgr/master/README.md,None,https://github.com/d3m3vilurr/vita-savemgr.git,None,1593061686,None,None,VPK,None,True +MLCL00005,usbmc,yifanlu,None,None,https://github.com/yifanlu/usbmc/releases/download/v6/usbmc_installer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00005.vpk,https://raw.githubusercontent.com/yifanlu/usbmc/master/README.md,None,https://github.com/yifanlu/usbmc.git,None,1592823791,None,None,VPK,None,True +VitaShellKernel,usbmc,yifanlu,None,None,https://github.com/yifanlu/usbmc/releases/download/v6/usbmc.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/VitaShellKernel.skprx,https://raw.githubusercontent.com/yifanlu/usbmc/master/README.md,None,https://github.com/yifanlu/usbmc.git,None,1592822973,TAI,*KERNEL,PLUGIN,None,True +BADA00001_01,Bad Apple Vita!!! System,GrapheneCt,https://github.com/GrapheneCt/badapplevita/raw/master/bin/sce_sys/icon0.png,None,https://github.com/GrapheneCt/badapplevita/releases/download/v1.0/badapple_VITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BADA00001_01.vpk,https://raw.githubusercontent.com/GrapheneCt/badapplevita/master/README.md,None,https://github.com/GrapheneCt/badapplevita.git,None,1592414572,None,None,VPK,None,True +SHAREDFBT,SharedFb-sample,GrapheneCt,None,None,https://github.com/GrapheneCt/SharedFb-PSV/releases/download/v1.0/SharedFb-sample.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHAREDFBT.vpk,https://raw.githubusercontent.com/GrapheneCt/SharedFb-PSV/master/README.md,None,https://github.com/GrapheneCt/SharedFb-PSV.git,None,1592411917,None,None,VPK,None,True +LowMemMode,LowMemMode,GrapheneCt,None,None,https://github.com/GrapheneCt/LowMemMode/releases/download/v1.2/LowMemMode.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/LowMemMode.suprx,https://raw.githubusercontent.com/GrapheneCt/LowMemMode/master/README.md,None,https://github.com/GrapheneCt/LowMemMode.git,None,1592411831,TAI,*main,PLUGIN,None,True +Quietshot,quietshot,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=101.0,attach=57",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/Quietshot.suprx,None,None,https://git.shotatoshounenwachigau.moe/vita/quietshot,None,1592411553,TAI,*main|*NPXS10095,PLUGIN,None,True +JAVSceShell,jav,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=46.0,attach=54",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/JAVSceShell.suprx,None,None,https://git.shotatoshounenwachigau.moe/vita/jav,None,1592411375,TAI,*main,PLUGIN,None,True +QuickPower,quick_power,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=78.0,attach=55",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/QuickPower.suprx,None,None,https://git.shotatoshounenwachigau.moe/vita/quickpower,None,1592411308,TAI,*main,PLUGIN,None,True +QuickVolume,quick_volume,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=66.0,attach=56",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/QuickVolume.suprx,None,None,https://git.shotatoshounenwachigau.moe/vita/quickvolume,None,1592411246,TAI,*main,PLUGIN,None,True +Staybright,StayBright,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=102.0,attach=14",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/Staybright.skprx,None,None,https://git.shotatoshounenwachigau.moe/vita/staybright,None,1592411176,TAI,*KERNEL,PLUGIN,None,True +PSOneScrotKernel,PSOneScrot,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=106.0,attach=21",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/PSOneScrotKernel.skprx,None,None,https://git.shotatoshounenwachigau.moe/vita/psonescrot,None,1592410712,TAI,*KERNEL,PLUGIN,None,True +NPSTHMFXR,NPS Themes Fixer,Yoti,https://raw.githubusercontent.com/Yoti/psv_npsthmfxr/master/nps_themes_fixer/sce_sys/icon0.png,None,https://github.com/Yoti/psv_npsthmfxr/releases/download/v1.0/nps_themes_fixer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NPSTHMFXR.vpk,https://raw.githubusercontent.com/Yoti/psv_npsthmfxr/master/README.md,None,https://github.com/Yoti/psv_npsthmfxr.git,None,1592409941,None,None,VPK,None,True +CoreUnlocker80000H,CoreUnlocker80000H,GrapheneCt,None,None,https://github.com/GrapheneCt/CapUnlocker/releases/download/v1.4/CapUnlocker.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/CoreUnlocker80000H.skprx,https://raw.githubusercontent.com/GrapheneCt/CoreUnlocker80000H/master/README.md,None,https://github.com/GrapheneCt/CoreUnlocker80000H.git,None,1592409662,TAI,*KERNEL,PLUGIN,None,True +MLCL00003_02,enso 3.65,Team Molecule & TheFloW,https://raw.githubusercontent.com/TheOfficialFloW/enso/master/installer/res/icon.png,None,https://github.com/TheOfficialFloW/enso/releases/download/v1.1/enso.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00003_02.vpk,https://raw.githubusercontent.com/TheOfficialFloW/enso/master/README.md,None,https://github.com/TheOfficialFloW/enso.git,None,1592408933,None,None,VPK,None,True +VDEC00001,French American Games Decrypter,CelesteBlue & dots-tb,None,None,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/FAGDec/build/FAGDec.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VDEC00001.vpk,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools.git,None,1592408738,None,None,VPK,None,True +FuckPSSE,FuckPSSE,SilicaAndPina & dots-tb,None,None,https://bitbucket.org/SilicaAndPina/fuckpsse/downloads/FuckPSSEv1.1.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/FuckPSSE.suprx,https://bitbucket.org/SilicaAndPina/fuckpsse/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/fuckpsse.git,None,1592408481,TAI,*ALL,PLUGIN,None,True +/PSMLogUSB,Princess Silly Mini Log USB,dots-tb,None,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools/raw/master/PSMLogUSB/build/PSMLogUSB.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/_PSMLogUSB.skprx,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools.git,None,1592408388,TAI,*KERNEL,PLUGIN,None,True +unity_debug,Unity Debug,dots-tb,None,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools/raw/master/unity_debug/release/unity_debug.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/unity_debug.suprx,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools.git,None,1592408363,TAI,None,PLUGIN,None,True +ioplus,ioPlus,dots-tb,None,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools/raw/master/ioPlus/ioPlus-0.1/release/ioplus.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ioplus.skprx,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools.git,None,1592408068,TAI,*KERNEL,PLUGIN,None,True +phys_dumper,physmem_dumper,xyzz,None,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools/raw/master/physmem-dumper/build/physmem_dumper.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/phys_dumper.skprx,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools.git,None,1592407864,TAI,*KERNEL,PLUGIN,None,True +NoASLR,noASLR,Princess of Sleeping,None,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools/raw/master/noASLR/release/noaslr.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/NoASLR.skprx,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-RE-tools/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-RE-tools.git,None,1592407693,TAI,*KERNEL,PLUGIN,None,True +APPMANP01,App Manager Plus,theheroGAC,https://raw.githubusercontent.com/theheroGAC/AppManager-Plus/master/AppManager-PLUS/sce_sys/icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/APPMANP01.vpk,None,https://raw.githubusercontent.com/theheroGAC/AppManager-Plus/master/README.md,None,https://github.com/theheroGAC/AppManager-Plus.git,None,1592406768,None,None,VPK,None,True +BACKUP000,Auto Backup License,theheroGAC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BACKUP000_icon0.png,None,https://github.com/theheroGAC/Auto-Backup-License/releases/download/1.20/Auto.Backup.License.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BACKUP000.vpk,https://raw.githubusercontent.com/theheroGAC/Auto-Backup-License/master/README.md,None,https://github.com/theheroGAC/Auto-Backup-License.git,None,1592406435,None,None,VPK,None,True +TUBEVITA0,Tubevita,theheroGAC,https://raw.githubusercontent.com/theheroGAC/TubeVita/master/sce_sys/icon0.png,None,https://github.com/theheroGAC/TubeVita/releases/download/1.07/Tubevita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TUBEVITA0.vpk,https://raw.githubusercontent.com/theheroGAC/TubeVita/master/README.md,None,https://github.com/theheroGAC/TubeVita.git,None,1592406082,None,None,VPK,None,True +VPKMIRROR,VPK Mirror,SMOKE & NamelessGhoul0,https://raw.githubusercontent.com/SMOKE5/VPKMirror/master/res/icon0.png,None,https://github.com/SMOKE5/VPKMirror/releases/download/v1.1/VPKMirror.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VPKMIRROR.vpk,https://raw.githubusercontent.com/SMOKE5/VPKMirror/master/README.md,None,https://github.com/SMOKE5/VPKMirror.git,None,1592391895,None,None,VPK,None,True +VPRO00001,VitaRO,SilicaAndPina & Major_Tom,None,None,https://bitbucket.org/SilicaAndPina/vitaro/downloads/VitaRO.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VPRO00001.vpk,https://bitbucket.org/SilicaAndPina/vitaro/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/vitaro.git,None,1592262781,None,None,VPK,None,True +qaSpoof,Qa Flag Spoof,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/qaspoofer/downloads/qaSpoof.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/qaSpoof.skprx,https://bitbucket.org/SilicaAndPina/qaspoofer/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/qaspoofer.git,None,1592262622,TAI,*KERNEL,PLUGIN,None,True +noPsLock,NoPSLock,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/nopslock/downloads/noPsLock.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/noPsLock.suprx,https://bitbucket.org/SilicaAndPina/nopslock/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/nopslock.git,None,1592262497,TAI,None,PLUGIN,None,True +iduSpoof,IduSpoof,SilicaAndPina & TheHeroGac,None,None,https://bitbucket.org/SilicaAndPina/iduspoof/downloads/iduSpoof.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/iduSpoof.suprx,https://bitbucket.org/SilicaAndPina/iduspoof/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/iduspoof.git,None,1592224935,TAI,None,PLUGIN,None,True +ROACTDATF,RoActDat,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/roactdat/downloads/RoActDat.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ROACTDATF.vpk,https://bitbucket.org/SilicaAndPina/roactdat/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/roactdat.git,None,1592224635,None,None,VPK,None,True +tmro,RoActDat,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/roactdat/downloads/RoActDat.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/tmro.skprx,https://bitbucket.org/SilicaAndPina/roactdat/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/roactdat.git,None,1592224484,TAI,*KERNEL,PLUGIN,None,True +c305f3f5,reF00D Data Files,dots-tb,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/c305f3f5_data.zip,None,None,None,None,None,1592224137,None,ur0:/tai,DATA,None,False +reSkype,ReSkype,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/reskype/downloads/reSkype.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/reSkype.suprx,https://bitbucket.org/SilicaAndPina/reskype/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/reskype.git,None,1592223959,TAI,*main,PLUGIN,None,True +videoDebug,VideoDebug,SilicaAndPina & AltCtrlGraphene,None,None,https://bitbucket.org/SilicaAndPina/videodebug/downloads/videoDebug.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/videoDebug.skprx,https://bitbucket.org/SilicaAndPina/videodebug/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/videodebug.git,None,1592223123,TAI,*KERNEL,PLUGIN,None,True +MakePsmGreatAgain,MakePsmGreatAgain,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/makepsmgreatagain/downloads/MakePsmGreatAgain-v1.5.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/MakePsmGreatAgain.suprx,https://bitbucket.org/SilicaAndPina/makepsmgreatagain/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/makepsmgreatagain.git,None,1592222985,TAI,*PCSI00007|*PCSI00009,PLUGIN,None,True +LAPY30016,NanoSpeed Gamer,Lappy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY30016_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY30016.vpk,None,None,None,None,None,1592125605,None,None,VPK,None,True +PS4LNKGUI,ps4linkcontrols-gui,keltar,https://raw.githubusercontent.com/keltar/ps4linkcontrols-gui/master/sce_sys/icon0.png,None,https://github.com/keltar/ps4linkcontrols-gui/releases/download/0.1/ps4linkcontrols-gui.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PS4LNKGUI.vpk,https://raw.githubusercontent.com/keltar/ps4linkcontrols-gui/master/README.md,None,https://github.com/keltar/ps4linkcontrols-gui.git,None,1592118937,None,None,VPK,None,True +ESPL00009,EasyPlugin,THEN00P,https://raw.githubusercontent.com/THEN00P/EasyPlugin/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ESPL00009_icon0.png,https://github.com/THEN00P/EasyPlugin/releases/download/1.1.1/easyplugin.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ESPL00009.vpk,https://raw.githubusercontent.com/THEN00P/EasyPlugin/master/README.md,None,https://github.com/THEN00P/EasyPlugin.git,None,1592025606,None,None,VPK,None,True +PLYMARS01,Terri-Fried,PolyMarsDev,https://raw.githubusercontent.com/PolyMarsDev/Terri-Fried/master/psvita/sce_sys/icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PLYMARS01.vpk,None,https://raw.githubusercontent.com/PolyMarsDev/Terri-Fried/master/README.md,None,https://github.com/PolyMarsDev/Terri-Fried.git,None,1592024993,None,None,VPK,None,True +AnalogsEnhancer,AnalogsEnhancer,Yoti & Rinnegatamante,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogsEnhancer.skprx,None,https://raw.githubusercontent.com/Yoti/AnalogsEnhancer/master/README.md,None,https://github.com/Yoti/AnalogsEnhancer.git,None,1591681075,TAI,*KERNEL,PLUGIN,None,True +AUTOVPK00,Auto Installer vpk,Team OneLUA & TheHeroGac,https://raw.githubusercontent.com/theheroGAC/Auto-Installer-vpk/master/sce_sys/icon0.png,None,https://github.com/theheroGAC/Auto-Installer-vpk/releases/download/1.26/Auto.Vpk.Installer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AUTOVPK00.vpk,https://raw.githubusercontent.com/theheroGAC/Auto-Installer-vpk/master/README.md,None,https://github.com/theheroGAC/Auto-Installer-vpk.git,None,1591678537,None,None,VPK,None,True +KOGRESMOU,Kogre's Mountain,crait,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/KOGRESMOU_icon0.png,None,http://crait.net/download.php?file=KogresMountain.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/KOGRESMOU.vpk,None,None,http://crait.net/download.php?file=KogresMountain.zip,None,1591669520,None,None,VPK,None,True +custom_boot_splash,Custom Boot Splash BMP,teakhanirons,None,None,https://github.com/teakhanirons/Vita-CustomBootSplashBMP/releases/download/2.0/custom_boot_splash.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/custom_boot_splash.skprx,None,None,https://github.com/teakhanirons/Vita-CustomBootSplashBMP.git,None,1591652100,TAI,*KERNEL,PLUGIN,None,True +plugin,Cpu Affinity Changer,GrapheneCt,None,None,https://github.com/GrapheneCt/Affinity-Changer/releases/download/v2.0/CpuAffinityChanger.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/plugin.skprx,https://raw.githubusercontent.com/GrapheneCt/Affinity-Changer/master/README.md,None,https://github.com/GrapheneCt/Affinity-Changer.git,None,1591652007,TAI,*KERNEL,PLUGIN,None,True +cidSpoof,cidSpoofer,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/cidspoofer/downloads/cidSpoof.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/cidSpoof.skprx,https://bitbucket.org/SilicaAndPina/cidspoofer/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/cidspoofer.git,None,1591651921,TAI,*KERNEL,PLUGIN,None,True +AnalogStickDisable_03,AnalogStickDisable Swap Left To Right,Hack-Usagi,None,None,https://github.com/Hack-Usagi/AnalogStickDisable/releases/download/Ver1.2/AnalogStickDisable_SwapLeftAndRight.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogStickDisable_03.skprx,https://raw.githubusercontent.com/Hack-Usagi/AnalogStickDisable/master/README.md,None,https://github.com/Hack-Usagi/AnalogStickDisable.git,None,1591651757,TAI,*KERNEL,PLUGIN,None,True +AnalogStickDisable_04,AnalogStickDisable Right To Left,Hack-Usagi,None,None,https://github.com/Hack-Usagi/AnalogStickDisable/releases/download/Ver1.2/AnalogStickDisable_RightToLeft.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogStickDisable_04.skprx,https://raw.githubusercontent.com/Hack-Usagi/AnalogStickDisable/master/README.md,None,https://github.com/Hack-Usagi/AnalogStickDisable.git,None,1591651696,TAI,*KERNEL,PLUGIN,None,True +AnalogStickDisable_05,AnalogStickDisable Right Only,Hack-Usagi,None,None,https://github.com/Hack-Usagi/AnalogStickDisable/releases/download/Ver1.2/AnalogStickDisable_RightOnly.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogStickDisable_05.skprx,https://raw.githubusercontent.com/Hack-Usagi/AnalogStickDisable/master/README.md,None,https://github.com/Hack-Usagi/AnalogStickDisable.git,None,1591651575,TAI,*KERNEL,PLUGIN,None,True +AnalogStickDisable_02,AnalogStickDisable Left To Right,Hack-Usagi,None,None,https://github.com/Hack-Usagi/AnalogStickDisable/releases/download/Ver1.2/AnalogStickDisable_LeftToRight.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogStickDisable_02.skprx,https://raw.githubusercontent.com/Hack-Usagi/AnalogStickDisable/master/README.md,None,https://github.com/Hack-Usagi/AnalogStickDisable.git,None,1591651536,TAI,*KERNEL,PLUGIN,None,True +AnalogStickDisable_01,AnalogStickDisable Left Only,Hack-Usagi,None,None,https://github.com/Hack-Usagi/AnalogStickDisable/releases/download/Ver1.2/AnalogStickDisable_LeftOnly.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogStickDisable_01.skprx,https://raw.githubusercontent.com/Hack-Usagi/AnalogStickDisable/master/README.md,None,https://github.com/Hack-Usagi/AnalogStickDisable.git,None,1591651493,TAI,*KERNEL,PLUGIN,None,True +AnalogStickDisable,AnalogStickDisable,Hack-Usagi,None,None,https://github.com/Hack-Usagi/AnalogStickDisable/releases/download/Ver1.2/AnalogStickDisable.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/AnalogStickDisable.skprx,https://raw.githubusercontent.com/Hack-Usagi/AnalogStickDisable/master/README.md,None,https://github.com/Hack-Usagi/AnalogStickDisable.git,None,1591651422,TAI,*KERNEL,PLUGIN,None,True +netcheck_bypass,netcheck_bypass,yifanlu,None,None,https://github.com/yifanlu/netcheck_bypass/releases/download/v0.1/netcheck_bypass.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/netcheck_bypass.suprx,https://raw.githubusercontent.com/yifanlu/netcheck_bypass/master/README.md,None,https://github.com/yifanlu/netcheck_bypass.git,None,1591649179,TAI,None,PLUGIN,None,True +noavls,NoAVLS,SilicaAndPina & dots-tb,None,None,https://bitbucket.org/SilicaAndPina/noavls/downloads/noavls.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/noavls.skprx,https://bitbucket.org/SilicaAndPina/noavls/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/noavls.git,None,1591562303,TAI,*KERNEL,PLUGIN,None,True +batteryPercent,VITABattery,joel16,None,None,https://github.com/joel16/VITABattery/releases/download/1.4/batteryPercent.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/batteryPercent.suprx,https://raw.githubusercontent.com/joel16/VITABattery/master/README.md,None,https://github.com/joel16/VITABattery.git,None,1591553790,TAI,*ALL,PLUGIN,None,True +MAFU-Input,MAFU-I,Rufis_,None,None,https://github.com/Rufis01/MAFU-I/releases/download/v2.0-Alpha.1/MAFUinput.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/MAFU-Input.skprx,https://raw.githubusercontent.com/Rufis01/MAFU-I/master/README.MD,None,https://github.com/Rufis01/MAFU-I.git,None,1591540218,TAI,*KERNEL,PLUGIN,None,True +WEED42069,Super Stoner 420,Rufis_,https://github.com/Rufis01/Super.Stoner.420/raw/master/sce_sys/icon0.png,None,https://github.com/Rufis01/Super.Stoner.420/releases/download/1.1/superstoner.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WEED42069.vpk,https://raw.githubusercontent.com/Rufis01/Super.Stoner.420/master/README.md,None,https://github.com/Rufis01/Super.Stoner.420.git,None,1591540121,None,None,VPK,None,True +BOMB00001,Bomberman,Rufis_,https://github.com/Rufis01/bomberman-sdl2/raw/master/sce_sys/icon0.png,None,https://github.com/Rufis01/bomberman-sdl2/releases/download/1.01/bomberman.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BOMB00001.vpk,https://raw.githubusercontent.com/Rufis01/bomberman-sdl2/master/README.md,None,https://github.com/Rufis01/bomberman-sdl2.git,None,1591540046,None,None,VPK,None,True +GMSV00013,Classic Car Crossing,Team789er,https://github.com/Team789er/Car-Crossing-PSVita/raw/master/icon0.png,None,https://github.com/Team789er/Car-Crossing-PSVita/releases/download/1.0.0/Classic.Car.Crossing.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GMSV00013.vpk,https://raw.githubusercontent.com/Team789er/Car-Crossing-PSVita/master/README.md,None,https://github.com/Team789er/Car-Crossing-PSVita.git,None,1591535432,None,None,VPK,None,True +MusicPremium,music_premium,cuevavirus,None,None,"https://forum.devchroma.nl/index.php?action=dlattach,topic=60.0,attach=58",https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/MusicPremium.skprx,None,None,https://git.shotatoshounenwachigau.moe/vita/musicpremium/,None,1591529495,TAI,*KERNEL,PLUGIN,None,True +bootsound,Vita-BootSound,teakhanirons,None,None,https://github.com/teakhanirons/Vita-BootSound/releases/download/1.0/bootsound.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/bootsound.suprx,None,None,https://github.com/teakhanirons/Vita-BootSound.git,None,1591507835,TAI,*main,PLUGIN,None,True +EmergencyMount,EmergencyMount,teakhanirons,None,None,https://github.com/teakhanirons/EmergencyMount/releases/download/1.0/EmergencyMount.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/EmergencyMount.skprx,None,None,https://github.com/teakhanirons/EmergencyMount.git,None,1591507720,TAI,*KERNEL,PLUGIN,None,True +CustomWarning,custom_warning,TheFloW,None,None,https://github.com/TheOfficialFloW/VitaTweaks/releases/download/CustomWarning/custom_warning.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/CustomWarning.suprx,https://raw.githubusercontent.com/TheOfficialFloW/VitaTweaks/master/README.md,None,https://github.com/TheOfficialFloW/VitaTweaks.git,None,1591494353,TAI,*main,PLUGIN,None,True +NoTrophyMsg,NoTrophyMsg,TheFloW,None,None,https://github.com/TheOfficialFloW/VitaTweaks/releases/download/NoTrophyMsg/notrophymsg.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/NoTrophyMsg.suprx,https://raw.githubusercontent.com/TheOfficialFloW/VitaTweaks/master/README.md,None,https://github.com/TheOfficialFloW/VitaTweaks.git,None,1591494293,TAI,*main,PLUGIN,None,True +ScoreHax,ScoreHax,SilicaAndPina,None,None,https://github.com/KuromeSan/ScoreHax/releases/download/v1.0/ScoreHax.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ScoreHax.suprx,https://raw.githubusercontent.com/KuromeSan/ScoreHax/master/README.md,None,https://github.com/KuromeSan/ScoreHax.git,None,1591461265,TAI,*ALL,PLUGIN,None,True +DownloadEnabler,DownloadEnabler,TheFloW,None,None,https://github.com/TheOfficialFloW/VitaTweaks/releases/download/DownloadEnabler/download_enabler.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/DownloadEnabler.suprx,https://raw.githubusercontent.com/TheOfficialFloW/VitaTweaks/master/README.md,None,https://github.com/TheOfficialFloW/VitaTweaks.git,None,1591419377,TAI,*main,PLUGIN,None,True +TropHax,TropHAX,SilicaServer,None,None,https://bitbucket.org/SilicaAndPina/trophax/downloads/trophax2.0.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/TropHax.suprx,https://bitbucket.org/SilicaAndPina/trophax/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/trophax.git,None,1591418900,TAI,*ALL,PLUGIN,None,True +NoLockScreen,NoLockScreen,TheFloW,None,None,https://github.com/TheOfficialFloW/VitaTweaks/releases/download/NoLockScreen/nolockscreen.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/NoLockScreen.suprx,https://raw.githubusercontent.com/TheOfficialFloW/VitaTweaks/master/README.md,None,https://github.com/TheOfficialFloW/VitaTweaks.git,None,1591418426,TAI,*main,PLUGIN,None,True +JULIUS001,julius,devnoname120 & Julius Team,https://raw.githubusercontent.com/bvschaik/julius/master/res/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/JULIUS001_icon0.png,https://github.com/bvschaik/julius/releases/download/v1.7.0/julius-1.7.0-vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/JULIUS001.vpk,https://raw.githubusercontent.com/bvschaik/julius/master/README.md,None,https://github.com/bvschaik/julius.git,None,1591311413,None,None,VPK,None,True +APWRFRESH,Easy Power Refresh,Team ONElua,https://raw.githubusercontent.com/ONElua/Easy-Power-Refresh/master/EasyPowerRefresh/sce_sys/icon0.png,None,https://github.com/ONElua/Easy-Power-Refresh/releases/download/2.01/Easy-Power-Refresh.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/APWRFRESH.vpk,https://raw.githubusercontent.com/ONElua/Easy-Power-Refresh/master/README.md,None,https://github.com/ONElua/Easy-Power-Refresh.git,None,1591227747,None,None,VPK,None,True +ds4vita,ds4vita,xerpi,None,None,https://github.com/xerpi/ds4vita/releases/download/hooks/ds4vita.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ds4vita.skprx,https://raw.githubusercontent.com/xerpi/ds4vita/master/README.md,None,https://github.com/xerpi/ds4vita.git,None,1591214312,TAI,*KERNEL,PLUGIN,None,True +vFlux,vFlux,Applelo,None,None,https://github.com/Applelo/vFlux/releases/download/0.5/vFlux.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/vFlux.suprx,https://raw.githubusercontent.com/Applelo/vFlux/master/README.md,None,https://github.com/Applelo/vFlux.git,None,1591214249,TAI,*ALL,PLUGIN,None,True +pngshot,pngshot,xyzz,None,None,https://github.com/xyzz/pngshot/releases/download/v1.3/pngshot.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/pngshot.suprx,https://raw.githubusercontent.com/xyzz/pngshot/master/README.md,None,https://github.com/xyzz/pngshot.git,None,1591214200,TAI,*main,PLUGIN,None,True +bmpshot,bmpshot,Princess-of-Sleeping,None,None,https://github.com/Princess-of-Sleeping/bmpshot/releases/download/1.3.1/bmpshot.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/bmpshot.suprx,https://raw.githubusercontent.com/Princess-of-Sleeping/bmpshot/master/README.md,None,https://github.com/Princess-of-Sleeping/bmpshot.git,None,1591214160,TAI,*main,PLUGIN,None,True +AKRK00001,LOLIcon Fast Switch,cuevavirus,https://raw.githubusercontent.com/cuevavirus/LOLIconFastSwitch/master/sce_sys/icon0.png,None,https://github.com/cuevavirus/LOLIconFastSwitch/releases/download/v1.0.0/LOLIconFastSwitch.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AKRK00001.vpk,https://raw.githubusercontent.com/cuevavirus/LOLIconFastSwitch/master/README.md,None,https://github.com/cuevavirus/LOLIconFastSwitch.git,None,1591213393,None,None,VPK,None,True +repatch,rePatch-reDux0,dots-tb & SilicaAndPina & CelesteBlue,None,None,https://github.com/dots-tb/rePatch-reDux0/releases/download/3.0/repatch.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/repatch.skprx,https://raw.githubusercontent.com/dots-tb/rePatch-reDux0/master/README.md,None,https://github.com/dots-tb/rePatch-reDux0.git,None,1591213260,TAI,*KERNEL,PLUGIN,None,True +LOLIcon_03,LOLIcon,dots-tb,None,None,https://github.com/dots-tb/LOLIcon/releases/download/1.0.1.1/LOLIcon.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/LOLIcon_03.skprx,https://raw.githubusercontent.com/dots-tb/LOLIcon/master/README.md,None,https://github.com/dots-tb/LOLIcon.git,None,1591213209,TAI,*KERNEL,PLUGIN,None,True +reScreeny,rescreeny,dots-tb,None,None,https://github.com/dots-tb/reScreeny/releases/download/1.2/reScreeny.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/reScreeny.suprx,https://raw.githubusercontent.com/dots-tb/rescreeny/master/README.md,None,https://github.com/dots-tb/rescreeny.git,None,1591213176,TAI,*NPXS10036,PLUGIN,None,True +SysidentUser,sysident,Princess of Sleeping,None,None,https://github.com/Princess-of-Sleeping/sysident/releases/download/v1.0/sysident.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/SysidentUser.suprx,https://raw.githubusercontent.com/cuevavirus/sysident/master/README.md,None,https://github.com/cuevavirus/sysident.git,None,1591213095,TAI,*NPXS10015|*NPXS10016,PLUGIN,None,True +LOLIcon_01,lolita500,teakhanirons,None,None,https://github.com/teakhanirons/lolita500/releases/download/1.0/lolita500.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/LOLIcon_01.skprx,https://raw.githubusercontent.com/teakhanirons/lolita500/master/README.md,None,https://github.com/teakhanirons/lolita500.git,None,1591134736,TAI,*KERNEL,PLUGIN,None,True +shellbat,vita-shellbat,nowrep,None,None,https://github.com/nowrep/vita-shellbat/releases/download/r10/shellbat.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/shellbat.suprx,https://raw.githubusercontent.com/nowrep/vita-shellbat/master/README.md,None,https://github.com/nowrep/vita-shellbat.git,None,1591133359,TAI,*main,PLUGIN,None,True +StorageMgrKernel,PSVita-StorageMgr,CelesteBlue-dev,None,None,https://github.com/CelesteBlue-dev/PSVita-StorageMgr/releases/download/v3.2/storagemgr.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/StorageMgrKernel.skprx,https://raw.githubusercontent.com/CelesteBlue-dev/PSVita-StorageMgr/master/README.md,None,https://github.com/CelesteBlue-dev/PSVita-StorageMgr.git,None,1591133332,TAI,*KERNEL,PLUGIN,None,True +noWhitelist,nopsmwhitelist,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/nopsmwhitelist/downloads/noPsmWhitelist.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/noWhitelist.skprx,https://bitbucket.org/SilicaAndPina/nopsmwhitelist/raw/657b4a4045ac0e1b000bb52a06d48d9067325e41/README.md,None,https://bitbucket.org/SilicaAndPina/nopsmwhitelist/downloads/noPsmWhitelist.skprx,None,1591133126,TAI,*KERNEL,PLUGIN,None,True +0syscall6,0syscall6,SKGleba,None,None,https://github.com/SKGleba/0syscall6/releases/download/v1.3/0syscall6.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/0syscall6.skprx,https://raw.githubusercontent.com/SKGleba/0syscall6/master/README.md,None,https://github.com/SKGleba/0syscall6.git,None,1591133025,TAI,*KERNEL,PLUGIN,None,True +NoPowerLimits,NoPowerLimitsVita,Electry,None,None,https://github.com/Electry/NoPowerLimitsVita/releases/download/v1.1/NoPowerLimits.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/NoPowerLimits.skprx,https://raw.githubusercontent.com/Electry/NoPowerLimitsVita/master/README.md,None,https://github.com/Electry/NoPowerLimitsVita.git,None,1591132984,TAI,*KERNEL,PLUGIN,None,True +VGi,VGi,Electry,None,None,https://github.com/Electry/VGi/releases/download/v0.7/VGi.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/VGi.suprx,https://raw.githubusercontent.com/Electry/VGi/master/README.md,None,https://github.com/Electry/VGi.git,None,1591132962,TAI,*ALL,PLUGIN,None,True +LOLIcon_02,DerInClocKS,teakhanirons,None,None,https://github.com/teakhanirons/DerInClocKS/releases/download/1.0/derinclocks.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/LOLIcon_02.skprx,None,None,https://github.com/teakhanirons/DerInClocKS.git,None,1591132722,TAI,*KERNEL,PLUGIN,None,True +LOLIcon,lolita444,teakhanirons,None,None,https://github.com/teakhanirons/lolita500/releases/download/0.5/lolita444.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/LOLIcon.skprx,https://raw.githubusercontent.com/teakhanirons/lolita500/master/README.md,None,https://github.com/teakhanirons/lolita500.git,None,1591132595,TAI,*KERNEL,PLUGIN,None,True +ftpeverywhere,ftpeverywhere,teakhanirons,None,None,https://github.com/teakhanirons/ftpeverywhere/releases/download/1.0/ftpeverywhere.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/ftpeverywhere.suprx,https://raw.githubusercontent.com/teakhanirons/ftpeverywhere/master/README.md,None,https://github.com/teakhanirons/ftpeverywhere.git,None,1591132472,TAI,*main,PLUGIN,None,True +udcd_uvc,vita-udcd-uvc,xerpi,None,None,https://github.com/xerpi/vita-udcd-uvc/releases/download/1.7/udcd_uvc.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/udcd_uvc.skprx,https://raw.githubusercontent.com/xerpi/vita-udcd-uvc/master/README.md,None,https://github.com/xerpi/vita-udcd-uvc.git,None,1590640022,TAI,*KERNEL,PLUGIN,None,True +SHORTCUTS,ShortCuts Enhancer,Team ONElua,https://raw.githubusercontent.com/ONElua/Shortcuts-Enhancer/master/SHORTCUTS/sce_sys/icon0.png,None,https://github.com/ONElua/Shortcuts-Enhancer/releases/download/2.00/Shortcuts-Enhancer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHORTCUTS.vpk,https://raw.githubusercontent.com/ONElua/Shortcuts-Enhancer/master/README.md,None,https://github.com/ONElua/Shortcuts-Enhancer.git,None,1590600956,None,None,VPK,None,True +ARKFAST00,ArkFast,Team ONElua,https://raw.githubusercontent.com/ONElua/ArkFast/master/sce_sys/icon0.png,None,https://github.com/ONElua/ArkFast/releases/download/2.30/ArkFast.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARKFAST00.vpk,https://raw.githubusercontent.com/ONElua/ArkFast/master/README.md,None,https://github.com/ONElua/ArkFast.git,None,1590600352,None,None,VPK,None,True +FreePSM,FreePSM,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/freepsm/downloads/FreePSM-v1.1.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/FreePSM.suprx,https://bitbucket.org/SilicaAndPina/freepsm/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/freepsm.git,None,1590599406,TAI,*ALL,PLUGIN,None,True +NoNpDrm_01,NoPsmDrm,frangarcj,None,None,https://github.com/frangarcj/NoPsmDrm/releases/download/v1.4/nopsmdrm.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/NoNpDrm_01.skprx,https://raw.githubusercontent.com/frangarcj/NoPsmDrm/master/README.md,None,https://github.com/frangarcj/NoPsmDrm.git,None,1590598578,TAI,*KERNEL,PLUGIN,None,True +NoNpDrm,NoNpDrm,TheOfficialFloW,None,None,https://github.com/TheOfficialFloW/NoNpDrm/releases/download/v1.2/nonpdrm.skprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/NoNpDrm.skprx,https://raw.githubusercontent.com/TheOfficialFloW/NoNpDrm/master/readme.md,None,https://github.com/TheOfficialFloW/NoNpDrm.git,None,1590597502,TAI,*KERNEL,PLUGIN,None,True +DolcePolce,DolcePolce,SilicaAndPina,None,None,https://github.com/KuromeSan/DolcePolce/releases/download/v1.0/DolcePolce.suprx,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/plugin/DolcePolce.suprx,https://raw.githubusercontent.com/KuromeSan/DolcePolce/master/README.md,None,https://github.com/KuromeSan/DolcePolce.git,None,1590595593,TAI,*main,PLUGIN,None,True +VITABREAK,VitOut,Dane64,https://raw.githubusercontent.com/Dane64/VitOut/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITABREAK_icon0.png,https://github.com/Dane64/VitOut/releases/download/2.0/VitOut.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITABREAK.vpk,https://raw.githubusercontent.com/Dane64/VitOut/master/README.md,None,https://github.com/Dane64/VitOut.git,None,1590576871,None,None,VPK,None,True +TIMEMACHI,Time Machine,BalisticksMain,https://raw.githubusercontent.com/BalisticksMain/TimeMachine/master/app/sce_sys/icon0.png,None,https://github.com/BalisticksMain/TimeMachine/releases/download/v1.0/TimeMachine.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TIMEMACHI.vpk,https://raw.githubusercontent.com/BalisticksMain/TimeMachine/master/README.md,None,https://github.com/BalisticksMain/TimeMachine.git,None,1589472340,None,None,VPK,None,True +BREWW0001,BreakVeetOut,dal3boy & Ruben_Wolfe,None,None,https://github.com/ddB0515/BreakVeetOut/releases/download/v0.3/BreakVeetOut_v0.3.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BREWW0001.vpk,https://raw.githubusercontent.com/ddB0515/BreakVeetOut/master/README.md,None,https://github.com/ddB0515/BreakVeetOut.git,None,1589337721,None,None,VPK,None,True +VCID00001,VitaCID,tomtomdu80,None,None,https://github.com/MajorTomSec/VitaCID/releases/download/1.0/VitaCID.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VCID00001.vpk,https://raw.githubusercontent.com/MajorTomSec/VitaCID/master/README.md,None,https://github.com/MajorTomSec/VitaCID.git,None,1589337681,None,None,VPK,None,True +PEND00000,AccountSwitcher,pendor,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PEND00000_icon0.png,None,https://github.com/elpendor/accountswitcher/releases/download/v2.4/AccountSwitcher.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PEND00000.vpk,https://raw.githubusercontent.com/elpendor/accountswitcher/master/README.md,None,https://github.com/elpendor/accountswitcher.git,None,1589337635,None,None,VPK,None,True +BSTONE012,bstone,01y,https://raw.githubusercontent.com/01y/bstone-vita/develop/src/vita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BSTONE012_icon0.png,https://github.com/01y/bstone-vita/releases/download/0.3-vita/bstone-0.3.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BSTONE012.vpk,https://raw.githubusercontent.com/01y/bstone-vita/develop/README.md,None,https://github.com/01y/bstone-vita.git,None,1589337615,None,None,VPK,d36180de,True +ZXGQ00004,GoHAN_Parallel,OneRice07,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZXGQ00004_icon0.png,None,https://github.com/OneRice07/GoHAN/releases/download/v2.10/GoHAN_Parallel_2.10.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZXGQ00004.vpk,https://raw.githubusercontent.com/OneRice07/GoHAN/master/README.md,None,https://github.com/OneRice07/GoHAN.git,None,1589337606,None,None,VPK,None,True +VPRW00001,VitaRW,tomtomdu80,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VPRW00001.vpk,None,https://raw.githubusercontent.com/MajorTomSec/VitaRW/master/README.md,None,https://github.com/MajorTomSec/VitaRW.git,None,1589337587,None,None,VPK,None,True +MYLEGNOOB,HappyLand,MyLegGuy,https://raw.githubusercontent.com/goodgamesipromise/HappyLand/master/Vpkcontents/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MYLEGNOOB_icon0.png,https://github.com/MyLegGuy/HappyLand/releases/download/v1.1/HappyLand-1.1.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MYLEGNOOB.vpk,https://raw.githubusercontent.com/MyLegGuy/HappyLand/master/README.txt,None,https://github.com/MyLegGuy/HappyLand.git,None,1589337568,None,None,VPK,None,True +SHDW00001,advremap,ShadowPrince,None,None,https://github.com/shdwp/advremap/releases/download/00.10/advremap.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHDW00001.vpk,https://raw.githubusercontent.com/shdwp/advremap/master/README.md,None,https://github.com/shdwp/advremap.git,None,1589337551,None,None,VPK,None,True +RCHT00001,rinCheat SE,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RCHT00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=46,https://dl.coolatoms.org/vitadb/rinCheatSE.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RCHT00001.vpk,https://raw.githubusercontent.com/Rinnegatamante/rinCheat/master/README.md,None,https://github.com/Rinnegatamante/rinCheat.git,None,1589337482,None,None,VPK,None,True +BERM00001,bermuda-vita,usineur,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BERM00001_icon0.png,None,https://github.com/usineur/bermuda/releases/download/1.4/bermuda-vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BERM00001.vpk,https://raw.githubusercontent.com/usineur/bermuda/master/README.TXT,None,https://github.com/usineur/bermuda.git,None,1589337439,None,None,VPK,None,True +SDLPAL001,sdlpal,usineur,https://raw.githubusercontent.com/usineur/sdlpal/ports/psp2/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SDLPAL001_icon0.png,https://github.com/usineur/sdlpal/releases/download/1.3/sdlpal.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SDLPAL001.vpk,https://raw.githubusercontent.com/usineur/sdlpal/ports/README.md,None,https://github.com/usineur/sdlpal.git,None,1589337420,None,None,VPK,595c20fd,True +TETR00001,tetromino,svennd,https://raw.githubusercontent.com/svennd/vita-tetromino/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TETR00001_icon0.png,https://github.com/svennd/vita-tetromino/releases/download/0.8/tetromino.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TETR00001.vpk,https://raw.githubusercontent.com/svennd/vita-tetromino/master/README.md,None,https://github.com/svennd/vita-tetromino.git,None,1589337417,None,None,VPK,None,True +OPENJAZZ1,OpenJazz,usineur,https://raw.githubusercontent.com/usineur/openjazz/vita/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OPENJAZZ1_icon0.png,https://github.com/usineur/openjazz/releases/download/1.1/OpenJazz.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OPENJAZZ1.vpk,https://raw.githubusercontent.com/usineur/openjazz/vita/README.md,None,https://github.com/usineur/openjazz.git,None,1589337407,None,None,VPK,28fb04cb,True +METHANE01,Methane,usineur,https://raw.githubusercontent.com/usineur/methane/vita/source/vita/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/METHANE01_icon0.png,https://github.com/usineur/methane/releases/download/1.1/Methane.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/METHANE01.vpk,https://raw.githubusercontent.com/usineur/methane/vita/README.md,None,https://github.com/usineur/methane.git,None,1589337404,None,None,VPK,23d4e6b0,True +HYDCASLAB,Hydra Castle Labyrinth,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/HCL-Vita/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HYDCASLAB_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=347,https://dl.coolatoms.org/vitadb/HCL.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HYDCASLAB.vpk,None,None,https://github.com/Rinnegatamante/HCL-Vita.git,None,1589337378,None,None,VPK,None,True +MIRROR000,mirrormagic,rsn8887,https://raw.githubusercontent.com/rsn8887/rocksndiamonds/master/psp2data/mirrormagic/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MIRROR000_icon0.png,https://github.com/rsn8887/rocksndiamonds/releases/download/1.15/mirrormagic_vita_1.12.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MIRROR000.vpk,https://raw.githubusercontent.com/rsn8887/rocksndiamonds/master/README.MD,None,https://github.com/rsn8887/rocksndiamonds.git,None,1589337311,None,None,VPK,c47969cf_00,True +ANGU00001,OpenTTD,angguss,https://raw.githubusercontent.com/angguss/OpenTTD/master/media/openttd.128.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ANGU00001_icon0.png,https://github.com/angguss/OpenTTD/releases/download/0.3-vita/openttd.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ANGU00001.vpk,https://raw.githubusercontent.com/angguss/OpenTTD/master/README.md,None,https://github.com/angguss/OpenTTD.git,None,1589337302,None,None,VPK,3e8db578,True +VOYAGERQ3,vitaVoyager,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaVoyager/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VOYAGERQ3_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=491,https://dl.coolatoms.org/vitadb/13/vitaVoyager.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VOYAGERQ3.vpk,https://raw.githubusercontent.com/Rinnegatamante/vitaVoyager/master/README.md,None,https://github.com/Rinnegatamante/vitaVoyager.git,None,1589337230,None,None,VPK,689a2463,True +SPOP00001,SDLPoP-Vita,usineur,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SPOP00001_icon0.png,None,https://github.com/usineur/SDLPoP/releases/download/vita-1.7/SDLPoP-Vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SPOP00001.vpk,https://raw.githubusercontent.com/usineur/SDLPoP/master/README.md,None,https://github.com/usineur/SDLPoP.git,None,1589337214,None,None,VPK,f784515d,True +MERITOUS1,meritous,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/meritous-vita/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MERITOUS1_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=411,https://dl.coolatoms.org/vitadb/meritous.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MERITOUS1.vpk,https://raw.githubusercontent.com/Rinnegatamante/meritous-vita/master/readme.txt,None,https://github.com/Rinnegatamante/meritous-vita.git,None,1589337205,None,None,VPK,2a3e5712,True +PFBA00001,pfba,cpasjuste,https://raw.githubusercontent.com/Cpasjuste/pemu/master/pfba/data/vita/romfs/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PFBA00001_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PFBA00001.vpk,None,https://raw.githubusercontent.com/Cpasjuste/pemu/master/README.md,None,https://github.com/Cpasjuste/pemu.git,None,1589337138,None,None,VPK,21bcaa01,True +MGBA00001,mGBA,endrift,https://raw.githubusercontent.com/mgba-emu/mgba/master/res/mgba-128.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MGBA00001_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MGBA00001.vpk,None,https://raw.githubusercontent.com/mgba-emu/mgba/master/README.md,None,https://github.com/mgba-emu/mgba.git,None,1589337123,None,None,VPK,None,True +RTCW00001,vitaRTCW,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaRTCW/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RTCW00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=459,https://dl.coolatoms.org/vitadb/13/vitaRTCW.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RTCW00001.vpk,https://raw.githubusercontent.com/Rinnegatamante/vitaRTCW/master/README.txt,None,https://github.com/Rinnegatamante/vitaRTCW.git,None,1589337111,None,None,VPK,a92fe139,True +LOLI00001,Lolicopocalypse,dots-tb & teakhanirons,https://raw.githubusercontent.com/teakhanirons/LolicopocalypseVita/master/sce_sys/icon0.png,None,https://github.com/teakhanirons/LolicopocalypseVita/releases/download/1.0/Lolicopocalypse.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LOLI00001.vpk,https://raw.githubusercontent.com/dots-tb/LolicopocalypseVita/master/README.md,None,https://github.com/dots-tb/LolicopocalypseVita.git,None,1589337096,None,None,VPK,None,True +CONNECT04,Connect Four,Dane64,https://raw.githubusercontent.com/Dane64/ConnectFour/master/sce_sys/icon0.png,None,https://github.com/Dane64/ConnectFour/releases/download/1.00/C4.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CONNECT04.vpk,https://raw.githubusercontent.com/Dane64/ConnectFour/master/README.md,None,https://github.com/Dane64/ConnectFour.git,None,1589050728,None,None,VPK,None,True +OSPX00001,OpenSupaplex,sergiou87,https://raw.githubusercontent.com/sergiou87/open-supaplex/master/vita/sce_sys/icon0.png,None,https://github.com/sergiou87/open-supaplex/releases/download/nightly/OpenSupaplex-vita-20210222-83f080.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OSPX00001.vpk,https://raw.githubusercontent.com/sergiou87/open-supaplex/master/README.md,None,https://github.com/sergiou87/open-supaplex.git,None,1589050695,None,None,VPK,None,True +SYSAPPS00,System Apps Disabler,SilicaAndPina,https://bitbucket.org/SilicaAndPina/systemappsdisabler/raw/master/src/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/systemappsdisabler/downloads/System.Apps.Disabler.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SYSAPPS00.vpk,https://bitbucket.org/SilicaAndPina/systemappsdisabler/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/systemappsdisabler.git,None,1589050309,None,None,VPK,None,True +ACCSWIT02,Advanced Account Switcher,SilicaAndPina,https://bitbucket.org/SilicaAndPina/advanced-account-switcher/raw/master/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/advanced-account-switcher/downloads/Advanced_Account_Switcher-1.2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACCSWIT02.vpk,https://bitbucket.org/SilicaAndPina/advanced-account-switcher/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/advanced-account-switcher.git,None,1589050162,None,None,VPK,None,True +FASTRESET,FastReset,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/fastreset/downloads/fastreset-2.0.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FASTRESET.vpk,https://bitbucket.org/SilicaAndPina/fastreset/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/fastreset.git,None,1589050021,None,None,VPK,None,True +SHOWMODE0,show-mode,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/show-mode/downloads/show-mode.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHOWMODE0.vpk,None,None,https://bitbucket.org/SilicaAndPina/show-mode.git,None,1589049821,None,None,VPK,None,True +PSTO00001,PlayStation®Store,SilicaAndPina,https://bitbucket.org/SilicaAndPina/enablepsstore/raw/master/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/enablepsstore/downloads/PStore.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSTO00001.vpk,https://bitbucket.org/SilicaAndPina/enablepsstore/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/enablepsstore.git,None,1589049720,None,None,VPK,None,True +PKGE00002,Change Package Installer,SilicaAndPina,https://bitbucket.org/SilicaAndPina/package-installer-enabler/raw/master/PKGChanger/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/package-installer-enabler/downloads/PKGChangerv0.4.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PKGE00002.vpk,https://bitbucket.org/SilicaAndPina/package-installer-enabler/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/package-installer-enabler,None,1589049158,None,None,VPK,None,True +PKGE00001,Enable Package Installer,SilicaAndPina,https://bitbucket.org/SilicaAndPina/package-installer-enabler/raw/master/PKGENABLER/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/package-installer-enabler/downloads/PKGENABLERv0.4.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PKGE00001.vpk,https://bitbucket.org/SilicaAndPina/package-installer-enabler/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/package-installer-enabler.git,None,1589048929,None,None,VPK,None,True +FWREINSTA,Firmware Reinstall,SilicaAndPina & CelesteBlue,https://bitbucket.org/SilicaAndPina/firmware-reinstall/raw/master/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/firmware-reinstall/downloads/FWReinstaller.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FWREINSTA.vpk,https://bitbucket.org/SilicaAndPina/firmware-reinstall/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/firmware-reinstall.git,None,1589048429,None,None,VPK,None,True +NNHR00001,xsystem35,nunuhara,https://raw.githubusercontent.com/nunuhara/xsystem35-vita/vita/vita/sce_sys/icon0.png,None,https://github.com/nunuhara/xsystem35-vita/releases/download/v00.02/xsystem35.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NNHR00001.vpk,https://raw.githubusercontent.com/nunuhara/xsystem35-vita/vita/README.md,None,https://github.com/nunuhara/xsystem35-vita.git,None,1589047915,None,None,VPK,None,True +PARENTAL0,Parental Control Bypass,SilicaAndPina,https://bitbucket.org/SilicaAndPina/parentalcontrolbypass/raw/master/src/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/parentalcontrolbypass/downloads/Parental_Control_Bypass.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PARENTAL0.vpk,https://bitbucket.org/SilicaAndPina/parentalcontrolbypass/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/parentalcontrolbypass.git,None,1589047893,None,None,VPK,None,True +FRDM00001,Halt Restart PSV,firedom,https://raw.githubusercontent.com/firedom/Reboot-PSV/master/sce_sys/icon0.png,None,https://github.com/firedom/Reboot-PSV/releases/download/0.01/Restart-Halt-vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRDM00001.vpk,https://raw.githubusercontent.com/firedom/Reboot-PSV/master/README.md,None,https://github.com/firedom/Reboot-PSV.git,None,1589046941,None,None,VPK,None,True +ANDRO0001,Andromeda Tests,DrakonPL,https://raw.githubusercontent.com/DrakonPL/Andromeda/master/Tests/Tests/Data/sce_sys/icon0.png,None,https://github.com/DrakonPL/Andromeda/releases/download/0.1/Androma_test.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ANDRO0001.vpk,https://raw.githubusercontent.com/DrakonPL/Andromeda/master/README.md,None,https://github.com/DrakonPL/Andromeda.git,None,1589046787,None,None,VPK,None,True +COVIDDATA,covid19-data,robDevs,None,None,https://github.com/robDevs/covid19-psvita-data/releases/download/v0.1/covid19-data.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/COVIDDATA.vpk,https://raw.githubusercontent.com/robDevs/covid19-psvita-data/master/README.md,None,https://github.com/robDevs/covid19-psvita-data.git,None,1589046572,None,None,VPK,None,True +VITAZORK1,Zork I: The Great Underground Empire,robDevs,https://github.com/robDevs/zork/raw/master/sce_sys/icon0.png,None,https://github.com/robDevs/zork/releases/download/psv1.0.2/zork.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITAZORK1.vpk,https://raw.githubusercontent.com/robDevs/zork/master/README.md,None,https://github.com/robDevs/zork.git,None,1589046392,None,None,VPK,None,True +REPOHUB01,RepoHub,robDevs,https://raw.githubusercontent.com/robDevs/RepoHub/master/sce_sys/icon0.png,None,https://github.com/robDevs/RepoHub/releases/download/v0.15/RepoHub.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/REPOHUB01.vpk,https://raw.githubusercontent.com/robDevs/RepoHub/master/README.md,None,https://github.com/robDevs/RepoHub.git,None,1589046007,None,None,VPK,None,True +NOSLEEP00,NoSleep,SilicaAndPina,None,None,https://bitbucket.org/SilicaAndPina/nosleep/downloads/NoSleep.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NOSLEEP00.vpk,None,None,https://bitbucket.org/SilicaAndPina/nosleep.git,None,1589044564,None,None,VPK,None,True +TROPTOOLS,TrophyDumper,SilicaAndPina & Princess Of Sleeping,https://bitbucket.org/SilicaAndPina/trophydumper/raw/master/app/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/trophydumper/downloads/TrophyDumper-1.1.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TROPTOOLS.vpk,https://bitbucket.org/SilicaAndPina/trophydumper/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/trophydumper.git,None,1589044099,None,None,VPK,None,True +HIWORLD00,Hello_World(),SilicaAndPina,https://bitbucket-assetroot.s3.amazonaws.com/c/photos/2019/Apr/21/2690987628-3-hello_world-logo_avatar.png,None,https://bitbucket.org/SilicaAndPina/hello_world/downloads/Hello_World.VPK,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HIWORLD00.vpk,https://bitbucket.org/SilicaAndPina/hello_world/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/hello_world.git,None,1589039596,None,None,VPK,None,True +ONETROPHY,Trophy Manager,Team ONElua,https://raw.githubusercontent.com/ONElua/TrophyManager/master/ONETROPHY/sce_sys/icon0.png,None,https://github.com/ONElua/TrophyManager/releases/download/1.02/TrophyManager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ONETROPHY.vpk,https://raw.githubusercontent.com/ONElua/TrophyManager/master/README.md,None,https://github.com/ONElua/TrophyManager.git,None,1589027963,None,None,VPK,None,True +SKGHFW100,HFW installer,SKGleba,None,None,https://github.com/SKGleba/psp2hfw/releases/download/v0.5/HFWI.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGHFW100.vpk,https://raw.githubusercontent.com/SKGleba/psp2hfw/master/README.md,None,https://github.com/SKGleba/psp2hfw.git,None,1588722551,None,None,VPK,None,True +SUBPEWDS0,SUBSCRIBE TO PEWDIEPIE,SilicaAndPina,https://bitbucket.org/SilicaAndPina/subscribetopewdiepie/raw/master/src/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/subscribetopewdiepie/downloads/SubscribeToPewdiepie.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SUBPEWDS0.vpk,https://bitbucket.org/SilicaAndPina/subscribetopewdiepie/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/subscribetopewdiepie.git,None,1588592223,None,None,VPK,None,True +ACCSWIT01,Simple Account Switcher,SilicaAndPina,https://bitbucket.org/SilicaAndPina/simpleaccountswitcher/raw/master/src/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/simpleaccountswitcher/downloads/SimpleAccountSwitcher-1.2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACCSWIT01.vpk,https://bitbucket.org/SilicaAndPina/simpleaccountswitcher/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/simpleaccountswitcher.git,None,1588540322,None,None,VPK,None,True +UPDATBLOC,UpdateBlocker,SilicaAndPina,https://bitbucket.org/SilicaAndPina/updateblocker/raw/master/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/updateblocker/downloads/UpdateBlocker-1.1.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/UPDATBLOC.vpk,https://bitbucket.org/SilicaAndPina/updateblocker/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/updateblocker.git,None,1588539841,None,None,VPK,None,True +HOLOCENE0,HOLOCENE,SilicaAndPina,https://bitbucket.org/SilicaAndPina/holocenesync/raw/master/app/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/holocenesync/downloads/HOLOCENE.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HOLOCENE0.vpk,https://bitbucket.org/SilicaAndPina/holocenesync/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/holocenesync.git,None,1588539185,None,None,VPK,None,True +LOVEU4444,LOVEU,Deppressiety,https://raw.githubusercontent.com/itz-depression/loveU-vita/master/sce_sys/icon0.png,None,https://github.com/itz-depression/loveU-vita/releases/download/2.0/LOVEU.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LOVEU4444.vpk,https://raw.githubusercontent.com/itz-depression/loveU-vita/master/README.md,None,https://github.com/itz-depression/loveU-vita.git,None,1588536803,None,None,VPK,None,True +TLTL00001,TailTale,dots-tb,https://raw.githubusercontent.com/dots-tb/tailtale-vita/master/vita/sce_sys/icon0.png,None,https://github.com/dots-tb/tailtale-vita/releases/download/1.0/TailTale.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TLTL00001.vpk,https://raw.githubusercontent.com/dots-tb/tailtale-vita/master/README.md,None,https://github.com/dots-tb/tailtale-vita.git,None,1588536677,None,None,VPK,None,True +VECT00001,vectoroids,dots-tb,https://raw.githubusercontent.com/dots-tb/Vectoroids-vita/master/src/sce_sys/icon0.png,None,https://github.com/dots-tb/Vectoroids-vita/releases/download/1.0/vectoroids.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VECT00001.vpk,https://raw.githubusercontent.com/dots-tb/Vectoroids-vita/master/README.md,None,https://github.com/dots-tb/Vectoroids-vita.git,None,1588536560,None,None,VPK,None,True +CEX2REX20,CEX 2 REX 2.0,SilicaAndPina & dots-tb,https://bitbucket.org/SilicaAndPina/cex-2-rex/raw/master/app/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/cex-2-rex/downloads/CEX2REX-2.0.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CEX2REX20.vpk,https://bitbucket.org/SilicaAndPina/cex-2-rex/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/cex-2-rex.git,None,1588536007,None,None,VPK,None,True +204800001,2048-PSP,dots-tb,https://raw.githubusercontent.com/dots-tb/psp2048/master/ICON0.PNG,None,https://github.com/dots-tb/psp2048/blob/master/2048-PSP.vpk?raw=true,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/204800001.vpk,https://raw.githubusercontent.com/dots-tb/psp2048/master/README.md,None,https://github.com/dots-tb/psp2048.git,None,1588531686,None,None,VPK,None,True +CBPSVCOOL,CoolBoardPlaysSounds,teakhanirons,https://raw.githubusercontent.com/teakhanirons/CoolBoardPlaysSounds/master/sce_sys/icon0.png,None,https://github.com/teakhanirons/CoolBoardPlaysSounds/releases/download/1.0/CBPS.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CBPSVCOOL.vpk,https://raw.githubusercontent.com/teakhanirons/CoolBoardPlaysSounds/master/README.md,None,https://github.com/teakhanirons/CoolBoardPlaysSounds.git,None,1588531552,None,None,VPK,None,True +ACTIVATE0,activate.vpk,SilicaAndPina,https://bitbucket.org/SilicaAndPina/activate.vpk/raw/master/app/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/activate.vpk/downloads/activate-v1.4.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACTIVATE0.vpk,https://bitbucket.org/SilicaAndPina/activate.vpk/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/activate.vpk.git,None,1588530551,None,None,VPK,None,True +TROPHAXSE,TrophaxSE,SilicaAndPina & AnalogMan,https://bitbucket.org/SilicaAndPina/trophaxse/raw/master/app/sce_sys/icon0.png,None,https://bitbucket.org/SilicaAndPina/trophaxse/downloads/TrophaxSEv1.5.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TROPHAXSE.vpk,https://bitbucket.org/SilicaAndPina/trophaxse/raw/master/README.md,None,https://bitbucket.org/SilicaAndPina/trophaxse.git,None,1588529888,None,None,VPK,None,True +AUTOPLUG0,Autoplugin,theheroGAC,https://raw.githubusercontent.com/theheroGAC/Autoplugin/master/sce_sys/icon0.png,None,https://github.com/theheroGAC/Autoplugin/releases/download/4.21/Autoplugin.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AUTOPLUG0.vpk,https://raw.githubusercontent.com/theheroGAC/Autoplugin/master/README.md,None,https://github.com/theheroGAC/Autoplugin.git,None,1588523526,None,None,VPK,None,True +RINNSIM44,RinnSim,itz-depression,https://raw.githubusercontent.com/itz-depression/RinnSimm/1.0/sce_sys/icon0.png,None,https://github.com/itz-depression/RinnSimm/releases/download/1.0/RinnSim.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RINNSIM44.vpk,None,None,https://github.com/itz-depression/RinnSimm.git,None,1588523043,None,None,VPK,None,True +28fb04cb,OpenJazz Data Files,usineur,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/28fb04cb_data.zip,None,None,None,None,None,1588432269,None,ux0:/data,DATA,None,False +69ec5ff,Chocolate Doom Data Files,fgsfds,None,None,https://github.com/fgsfdsfgs/chocolate-doom/releases/download/chocolate-doom-3.0.0-vita-3.1/data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/69ec5ff_data.zip,None,None,None,None,1588432183,None,ux0:,DATA,None,False +23d4e6b0,Methane Data Files,usineur,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/23d4e6b0_data.zip,None,None,None,None,None,1588432086,None,uz0:/data,DATA,None,False +33319e4b,DstroyVita Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/dstroydata.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/33319e4b_data.zip,None,None,None,None,1588432005,None,ux0:/data,DATA,None,False +f442191f,vitaWolfen Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/Homebrews Data Files/vitaWolfen.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/f442191f_data.zip,None,None,None,None,1588431881,None,ux0:/data,DATA,None,False +925a0e06,vitaXash3D Data Files,fgsfds,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/925a0e06_data.zip,None,None,None,None,None,1588431793,None,ux0:/data,DATA,None,False +29672496,enigma Data Files,rsn8887,None,None,https://github.com/rsn8887/Enigma/releases/download/1.16/data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/29672496_data.zip,None,None,None,None,1588431201,None,ux0:/data,DATA,None,False +c7b7e3ec,BasiliskII Data Files,meetpatty & rsn8887,None,None,https://github.com/rsn8887/basiliskii-vita/releases/download/0.33hgit-rsn8887/data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/c7b7e3ec_data.zip,None,None,None,None,1588431143,None,ux0:/data,DATA,None,False +a27883ff,Wiiero Data Files,Grzybojad,None,None,https://github.com/Grzybojad/wiiero-vita/releases/download/1.2/wiiero.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/a27883ff_data.zip,None,None,None,None,1588431015,None,ux0:/data/wiiero,DATA,None,False +77f8b1f7,Postal Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/postal.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/77f8b1f7_data.zip,None,None,None,None,1588430865,None,ux0:/data,DATA,None,False +bd3d35e,rocksndiamonds Data Files,rsn8887,None,None,https://github.com/rsn8887/rocksndiamonds/releases/download/1.15/rocksndiamonds_data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/bd3d35e_data.zip,None,None,None,None,1588430783,None,ux0:/data,DATA,None,False +c47969cf,mirrormagic Data Files,rsn8887,None,None,https://github.com/rsn8887/rocksndiamonds/releases/download/1.15/rocksndiamonds_data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/c47969cf_data.zip,None,None,None,None,1588430665,None,ux0:/data,DATA,None,False +f22dba1,SuperMarioWar Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/smw.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/f22dba1_data.zip,None,None,None,None,1588430462,None,ux0:/data,DATA,None,False +3e8db578,OpenTTD Data Files,angguss,None,None,https://github.com/angguss/OpenTTD/releases/download/0.3-vita/data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/3e8db578_data.zip,None,None,None,None,1588429843,None,ux0:/data,DATA,None,False +4ade44f3,NumptyPhysics Data Files,Rinnegatamante & meetpatty,None,None,https://dl.coolatoms.org/vitadb/NumptyPhysics.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/4ade44f3_data.zip,None,None,None,None,1588429727,None,ux0:/data,DATA,None,False +2a3e5712,meritous Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/meritous.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/2a3e5712_data.zip,None,None,None,None,1588428737,None,ux0:/data,DATA,None,False +d36180de,bstone Data Files,01y,None,None,https://github.com/01y/bstone-vita/releases/download/0.3-vita/data-sw.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/d36180de_data.zip,None,None,None,None,1588428477,None,ux0:,DATA,None,False +3d7c217a,EDuke32 Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/12/EDuke32.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/3d7c217a_data.zip,None,None,None,None,1588428304,None,ux0:/data,DATA,None,False +595c20fd,sdlpal Data Files,usineur,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/595c20fd_data.zip,None,None,None,None,None,1588427884,None,ux0:/data,DATA,None,False +f784515d,SDLPoP-Vita Data Files,usineur,None,None,https://github.com/usineur/SDLPoP/releases/download/vita-1.7/prince.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/f784515d_data.zip,None,None,None,None,1588427554,None,ux0:/data,DATA,None,False +ec02344b,NRedneck Data Files,Rinnegatamante,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/ec02344b_data.zip,None,None,None,None,None,1588427377,None,ux0:/data,DATA,None,False +689a2463,vitaVoyager Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitavoyager_data.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/689a2463_data.zip,None,None,None,None,1588426790,None,ux0:/data,DATA,None,False +85ff504d,vitaQuake Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/Homebrews Data Files/vitaQuake.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/85ff504d_data.zip,None,None,None,None,1588426370,None,ux0:/data,DATA,None,False +a92fe139,vitaRTCW Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/13/iortcw.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/a92fe139_data.zip,None,None,None,None,1588426143,None,ux0:/data,DATA,None,False +21bcaa01,pfba Data Files,cpasjuste,None,None,https://github.com/Cpasjuste/pemu/releases/download/v4.4/pfba-4.4_vita.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/21bcaa01_data.zip,None,None,None,None,1588425946,None,ux0:/data,DATA,None,False +7ac650de,psnes Data Files,cpasjuste,None,None,https://github.com/Cpasjuste/pemu/releases/download/v4.4/pfba-4.4_vita.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/7ac650de_data.zip,None,None,None,None,1588425923,None,ux0:/data,DATA,None,False +f3e3104d,vitaQuakeII Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/13/quake2.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/f3e3104d_data.zip,None,None,None,None,1588425844,None,ux0:/data,DATA,None,False +e5b0d0fd,DaedalusX64 Data Files,Rinnegatamante,None,None,https://dl.coolatoms.org/vitadb/DaedalusX64.zip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/data/e5b0d0fd_data.zip,None,None,None,None,1588425796,None,ux0:/data,DATA,None,False +HYPRPITCH,Hyper Princess Pitch,JeffRulz345,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HYPRPITCH_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HYPRPITCH.vpk,None,None,None,https://drive.google.com/open?id=1gvEHq100kXuMjFLvhMC5MylRO7wiRY6S,None,1588342019,None,None,VPK,None,True +BBRM12345,BitBot Runners,LuckTheGamers,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BBRM12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BBRM12345.vpk,None,None,None,None,None,1588342018,None,None,VPK,None,True +SCRATEBOX,Super Crate Box,JeffRulz345,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SCRATEBOX_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SCRATEBOX.vpk,None,None,None,https://drive.google.com/open?id=1u67SpFEYYLzzzw0QVuY_VVsNFS4dgbrP,None,1588342017,None,None,VPK,None,True +ABCD12345_02,Game 1,Anchitpatra,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_02_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345_02.vpk,None,None,None,None,None,1588342016,None,None,VPK,None,True +FNPT00001,Fingerprint,Freakler,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FNPT00001_icon0.png,None,https://github.com/Freakler/vita-Fingerprint/releases/download/0.02/fingerprint_v002.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FNPT00001.vpk,https://raw.githubusercontent.com/Freakler/vita-Fingerprint/master/README.md,None,https://github.com/Freakler/vita-Fingerprint.git,None,1588342015,None,None,VPK,None,True +SKG4V2SW1,switch avls mode,SKGleba,https://raw.githubusercontent.com/SKGleba/VITA-NoAutoAvls/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKG4V2SW1_icon0.png,https://github.com/SKGleba/VITA-NoAutoAvls/releases/download/v1.0/naavls.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKG4V2SW1.vpk,https://raw.githubusercontent.com/SKGleba/VITA-NoAutoAvls/master/README.md,None,https://github.com/SKGleba/VITA-NoAutoAvls.git,None,1588342014,None,None,VPK,None,True +GMSV00001,Asteroids: VH Beta,KimsoftStudio,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GMSV00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GMSV00001.vpk,None,None,None,None,None,1588342013,None,None,VPK,None,True +ABCD12345_01,Deadly Hallows,Anchitpatra,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_01_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345_01.vpk,None,None,None,None,None,1588342012,None,None,VPK,None,True +SKGTLSE12,iTLS-Enso,SKGleba,None,None,https://github.com/SKGleba/iTLS-Enso/releases/download/v3.2/iTLS-Enso.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGTLSE12.vpk,https://raw.githubusercontent.com/SKGleba/iTLS-Enso/master/README.md,None,https://github.com/SKGleba/iTLS-Enso.git,None,1588342011,None,None,VPK,None,True +VHBB00001,Vita Homebrew Browser,devnoname120,https://raw.githubusercontent.com/devnoname120/vhbb/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VHBB00001_icon0.png,https://github.com/devnoname120/vhbb/releases/download/0.92/VitaHBBrowser.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VHBB00001.vpk,https://raw.githubusercontent.com/devnoname120/vhbb/master/README.md,None,https://github.com/devnoname120/vhbb.git,None,1588342008,None,None,VPK,None,True +LAPY30014,Lapy's River Raid,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY30014_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY30014.vpk,None,None,None,None,None,1588342006,None,None,VPK,None,True +PSNE00001,psnes,cpasjuste,https://raw.githubusercontent.com/Cpasjuste/pemu/master/psnes/data/vita/romfs/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSNE00001_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSNE00001.vpk,None,https://raw.githubusercontent.com/Cpasjuste/pemu/master/README.md,None,https://github.com/Cpasjuste/pemu.git,None,1588342005,None,None,VPK,7ac650de,True +BLKY00001,RocketTanks,Spartanfox,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BLKY00001_icon0.png,None,https://www.dropbox.com/s/1pwu1vpwbobkdnx/RocketTank.vpk?dl=1,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BLKY00001.vpk,None,None,None,None,1588342002,None,None,VPK,None,True +RAND00001,Random Hentai,SonicMastr,https://raw.githubusercontent.com/SonicMastr/Random-Hentai/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RAND00001_icon0.png,https://github.com/SonicMastr/Random-Hentai/releases/download/2.1/Random_Hentai.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RAND00001.vpk,https://raw.githubusercontent.com/SonicMastr/Random-Hentai/master/README.md,None,https://github.com/SonicMastr/Random-Hentai.git,None,1588342001,None,None,VPK,None,True +HELL66645,To Pieces,lkclip,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HELL66645_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HELL66645.vpk,None,None,None,None,None,1588342000,None,None,VPK,None,True +MLCL00003_01,ensō,Team Molecule,https://raw.githubusercontent.com/henkaku/enso/master/installer/res/icon.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MLCL00003_01_icon0.png,https://github.com/henkaku/enso/releases/download/v1.1/enso.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00003_01.vpk,https://raw.githubusercontent.com/henkaku/enso/master/README.md,None,https://github.com/henkaku/enso.git,None,1588341998,None,None,VPK,None,True +EZSV00001,EasySwitchVita,Kirezar,https://raw.githubusercontent.com/Kirezar/EasySwitchVita/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/EZSV00001_icon0.png,https://github.com/Kirezar/EasySwitchVita/releases/download/1.0/EasySwitchVita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EZSV00001.vpk,https://raw.githubusercontent.com/Kirezar/EasySwitchVita/master/README.md,None,https://github.com/Kirezar/EasySwitchVita.git,None,1588341996,None,None,VPK,None,True +CTMANAGER,Custom Themes Manager,Red Squirrel,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CTMANAGER_icon0.png,None,https://bitbucket.org/Red_Squirrel/custom-themes-manager/downloads/CTManager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CTMANAGER.vpk,None,None,https://bitbucket.org/Red_Squirrel/custom-themes-manager/,None,1588341995,None,None,VPK,None,True +VFRS12346,VitaFighters,AngryDevs,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VFRS12346_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VFRS12346.vpk,None,None,None,None,None,1588341993,None,None,VPK,None,True +MODALVOLM,ModalVolumeControl,GrapheneCt,None,None,https://github.com/GrapheneCt/Volume-Control-Pack/releases/download/1.0/VolumeControl.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MODALVOLM.vpk,https://raw.githubusercontent.com/GrapheneCt/Volume-Control-Pack/master/README.md,None,https://github.com/GrapheneCt/Volume-Control-Pack.git,None,1588341992,None,None,VPK,None,True +BLTG49694,Vita Timer,Anchitpatra,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BLTG49694_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BLTG49694.vpk,None,None,None,None,None,1588341991,None,None,VPK,None,True +PCEXHUMED,vitaExhumed,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaExhumed/master/platform/PSVita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PCEXHUMED_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=533,https://dl.coolatoms.org/vitadb/vitaExhumed.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PCEXHUMED.vpk,https://raw.githubusercontent.com/Rinnegatamante/vitaExhumed/master/README.md,None,https://github.com/Rinnegatamante/vitaExhumed.git,None,1588341990,None,None,VPK,None,True +NREDNECK1,NRedneck,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/NRedneck-Vita/master/source/kenbuild/rsrc/build_icon.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NREDNECK1_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=436,https://dl.coolatoms.org/vitadb/13/NRedneck.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NREDNECK1.vpk,None,None,https://github.com/Rinnegatamante/NRedneck-Vita.git,None,1588341989,None,None,VPK,ec02344b,True +VITASHELL,VitaShell,TheFloW,https://raw.githubusercontent.com/TheOfficialFloW/VitaShell/master/release/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITASHELL_icon0.png,https://github.com/TheOfficialFloW/VitaShell/releases/download/v2.02/VitaShell.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITASHELL.vpk,https://raw.githubusercontent.com/TheOfficialFloW/VitaShell/master/README.md,None,https://github.com/TheOfficialFloW/VitaShell.git,None,1588341988,None,None,VPK,None,True +CPUAFFCTR,AffinityChanger,GrapheneCt,None,None,https://github.com/GrapheneCt/Affinity-Changer/releases/download/v1.1/AffinityChanger.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CPUAFFCTR.vpk,https://raw.githubusercontent.com/GrapheneCt/Affinity-Changer/master/README.md,None,https://github.com/GrapheneCt/Affinity-Changer.git,None,1588341987,None,None,VPK,None,True +ABCD12345,V-cube,Anchitpatra,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345.vpk,None,None,None,None,None,1588341986,None,None,VPK,None,True +QUAK00003,vitaQuakeIII,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaQuakeIII/master/build_rally/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/QUAK00003_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=375,http://dl.coolatoms.org/vitadb/13/vitaQuakeIII.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/QUAK00003.vpk,https://raw.githubusercontent.com/Rinnegatamante/vitaQuakeIII/master/README.md,None,https://github.com/Rinnegatamante/vitaQuakeIII.git,None,1588341984,None,None,VPK,None,True +VGCF00001,VitaGrafix Configurator,Kirezar,https://raw.githubusercontent.com/Kirezar/VitaGrafixConfigurator/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VGCF00001_icon0.png,https://github.com/Kirezar/VitaGrafixConfigurator/releases/download/v3.0/VitaGrafixConfigurator.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VGCF00001.vpk,https://raw.githubusercontent.com/Kirezar/VitaGrafixConfigurator/master/README.md,None,https://github.com/Kirezar/VitaGrafixConfigurator.git,None,1588341983,None,None,VPK,None,True +UAE4ALL00,uae4all2,rsn8887 & cpasjuste,https://raw.githubusercontent.com/rsn8887/uae4all2/master/psp2data/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/UAE4ALL00_icon0.png,https://github.com/rsn8887/uae4all2/releases/download/2.00/uae4all_2.00.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/UAE4ALL00.vpk,https://raw.githubusercontent.com/rsn8887/uae4all2/master/README.MD,None,https://github.com/rsn8887/uae4all2.git,None,1588341982,None,None,VPK,None,True +ENIGMA000,enigma,rsn8887,https://raw.githubusercontent.com/rsn8887/Enigma/master/psp2data/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ENIGMA000_icon0.png,https://github.com/rsn8887/Enigma/releases/download/1.16/enigma_1.11.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ENIGMA000.vpk,https://raw.githubusercontent.com/rsn8887/Enigma/master/README.MD,None,https://github.com/rsn8887/Enigma.git,None,1588341981,None,None,VPK,29672496,True +OPENBOR01,OpenBOR,cpasjuste & Plombo,https://raw.githubusercontent.com/cpasjuste/openbor/master/engine/resources/vita_icon.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OPENBOR01_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OPENBOR01.vpk,None,https://raw.githubusercontent.com/cpasjuste/openbor/master/README.md,None,https://github.com/cpasjuste/openbor.git,None,1588341980,None,None,VPK,None,True +RAED67053,Cubik adventure,LuckTheGamers,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RAED67053_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RAED67053.vpk,None,None,None,None,None,1588341979,None,None,VPK,None,True +ELEVENMPV,Eleven Music Player,joel16,https://raw.githubusercontent.com/joel16/ElevenMPV/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ELEVENMPV_icon0.png,https://github.com/joel16/ElevenMPV/releases/download/v2.10/ElevenMPV.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ELEVENMPV.vpk,https://raw.githubusercontent.com/joel16/ElevenMPV/master/README.md,None,https://github.com/joel16/ElevenMPV.git,None,1588341978,None,None,VPK,None,True +FRUITY001,FRUITY,Retroguru Team,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FRUITY001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRUITY001.vpk,None,None,None,None,None,1588341977,None,None,VPK,None,True +SOUL45638,FALLEN KNIGHTS,VitaHEX Games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SOUL45638_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SOUL45638.vpk,None,None,None,None,None,1588341976,None,None,VPK,None,True +BAKU88888,MyBakkuPakku,LazyOx199,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BAKU88888_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BAKU88888.vpk,None,None,None,None,None,1588341975,None,None,VPK,None,True +CHROMONO2,chro.mono 2,thp4,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CHROMONO2_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CHROMONO2.vpk,None,None,None,None,None,1588341974,None,None,VPK,None,True +SWOR57517,SwordJurney,JacobsPlayground,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SWOR57517_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SWOR57517.vpk,None,None,None,None,None,1588341973,None,None,VPK,None,True +91900001,Switch to PSTV,xCorra,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/091900001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/091900001.vpk,None,None,None,https://github.com/xCorra/SwitchtoPSTV.git,None,1588341972,None,None,VPK,None,True +GRZB00002,vitaSnake,Grzybojad,https://raw.githubusercontent.com/Grzybojad/vitaSnake/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GRZB00002_icon0.png,https://github.com/Grzybojad/vitaSnake/releases/download/v1.5/vitaSnake.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GRZB00002.vpk,https://raw.githubusercontent.com/Grzybojad/vitaSnake/master/README.md,None,https://github.com/Grzybojad/vitaSnake.git,None,1588341971,None,None,VPK,None,True +QUAK00001,vitaQuake,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaQuake/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/QUAK00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=10,https://dl.coolatoms.org/vitadb/13/vitaQuake.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/QUAK00001.vpk,https://raw.githubusercontent.com/Rinnegatamante/vitaQuake/master/README.md,None,https://github.com/Rinnegatamante/vitaQuake.git,None,1588341970,None,None,VPK,85ff504d,True +REGEDIT01,RegistryEditor,devnoname120,https://raw.githubusercontent.com/devnoname120/RegistryEditorMOD/master/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/REGEDIT01_icon0.png,https://github.com/devnoname120/RegistryEditorMOD/releases/download/1.3/RegistryEditor.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/REGEDIT01.vpk,https://raw.githubusercontent.com/devnoname120/RegistryEditorMOD/master/README.md,None,https://github.com/devnoname120/RegistryEditorMOD.git,None,1588341968,None,None,VPK,None,True +DOOM12345,DooM,gambikules,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DOOM12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DOOM12345.vpk,None,None,None,None,None,1588341967,None,None,VPK,None,True +SKGB4TF1X,batteryFixer,SKGleba,https://raw.githubusercontent.com/SKGleba/PSP2-batteryFixer/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKGB4TF1X_icon0.png,https://github.com/SKGleba/PSP2-batteryFixer/releases/download/v2.1/batteryFixer.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGB4TF1X.vpk,https://raw.githubusercontent.com/SKGleba/PSP2-batteryFixer/master/README.md,None,https://github.com/SKGleba/PSP2-batteryFixer.git,None,1588341966,None,None,VPK,None,True +MEIR00001,ZXVita,ammeir,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MEIR00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MEIR00001.vpk,None,None,None,None,None,1588341965,None,None,VPK,None,True +FLAPPY001,FlappyBird Classic,Creckeryop,https://raw.githubusercontent.com/Creckeryop/Flappy-Bird-Classic-vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FLAPPY001_icon0.png,https://github.com/Creckeryop/Flappy-Bird-Classic-vita/releases/download/v1.21/FBClassic.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FLAPPY001.vpk,https://raw.githubusercontent.com/Creckeryop/Flappy-Bird-Classic-vita/master/README.md,None,https://github.com/Creckeryop/Flappy-Bird-Classic-vita.git,None,1588341963,None,None,VPK,None,True +NABO12345,Naruto Boruto,gambikules,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NABO12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NABO12345.vpk,None,None,None,None,None,1588341962,None,None,VPK,None,True +DVDS42069,DVD Screensaver,Electric,https://raw.githubusercontent.com/Electric1447/Vita-DVD-Screensaver/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DVDS42069_icon0.png,https://github.com/Electric1447/Vita-DVD-Screensaver/releases/download/v1.0/dvd_screensaver.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DVDS42069.vpk,https://raw.githubusercontent.com/Electric1447/Vita-DVD-Screensaver/master/README.md,None,https://github.com/Electric1447/Vita-DVD-Screensaver.git,None,1588341961,None,None,VPK,None,True +LAPY00010,PS Scene Quiz,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY00010_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY00010.vpk,None,None,None,None,None,1588341959,None,None,VPK,None,True +HERMES001,HERMES,Retroguru Team,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HERMES001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HERMES001.vpk,None,None,None,None,None,1588341957,None,None,VPK,None,True +HXEN00001,vitaHexenII,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaHexenII/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HXEN00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=196,https://dl.coolatoms.org/vitadb/13/vitaHexenII.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HXEN00001.vpk,None,None,https://github.com/Rinnegatamante/vitaHexenII.git,None,1588341955,None,None,VPK,ab05de1d,True +JELY00001,Jelly Car,Drakon,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/JELY00001_icon0.png,None,https://github.com/DrakonPL/JellyCar/releases/download/1.1/JellyCarVita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/JELY00001.vpk,https://raw.githubusercontent.com/DrakonPL/JellyCar/master/README.md,None,https://github.com/DrakonPL/JellyCar.git,None,1588341953,None,None,VPK,None,True +FROV00001,GM:S,FrozenNoober,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FROV00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FROV00001.vpk,None,None,None,None,None,1588341952,None,None,VPK,None,True +ABYD12945,Rubik's Cube Solver,Anchitpatra,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABYD12945_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABYD12945.vpk,None,None,None,None,None,1588341951,None,None,VPK,None,True +BBFF12345,Kill'em All,RetroGamer74,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BBFF12345_icon0.png,None,http://dl.coolatoms.org/kill_em_all.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BBFF12345.vpk,https://raw.githubusercontent.com/RetroGamer74/Kill-em-All-PSVita/master/README.md,None,https://github.com/RetroGamer74/Kill-em-All-PSVita.git,None,1588341950,None,None,VPK,None,True +TPPG00001,Tricky Towers Endless Race,TushkaN,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TPPG00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TPPG00001.vpk,None,None,None,None,None,1588341949,None,None,VPK,None,True +CONSOLEID,ConsoleID,Freakler,https://raw.githubusercontent.com/Freakler/vita-ConsoleID/master/livearea/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CONSOLEID_icon0.png,https://github.com/Freakler/vita-ConsoleID/releases/download/1.00/ConsoleID_v100.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CONSOLEID.vpk,https://raw.githubusercontent.com/Freakler/vita-ConsoleID/master/README.md,None,https://github.com/Freakler/vita-ConsoleID.git,None,1588341948,None,None,VPK,None,True +LAPY00008,Duck Hunt Remake,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY00008_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY00008.vpk,None,None,None,None,None,1588341947,None,None,VPK,None,True +SKGCBSMGR,Custom Boot Splash Manager,SKGleba,None,None,https://github.com/SKGleba/CBS-Manager/releases/download/v3.1/cbs_manager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGCBSMGR.vpk,https://raw.githubusercontent.com/SKGleba/CBS-Manager/master/README.md,None,https://github.com/SKGleba/CBS-Manager.git,None,1588341946,None,None,VPK,None,True +BASILISK0,BasiliskII,meetpatty & rsn8887,https://raw.githubusercontent.com/rsn8887/basiliskii-vita/master/src/PSP2/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BASILISK0_icon0.png,https://github.com/rsn8887/basiliskii-vita/releases/download/0.33hgit-rsn8887/BasiliskII_Vita_v0.33h.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BASILISK0.vpk,https://raw.githubusercontent.com/rsn8887/basiliskii-vita/master/README.MD,None,https://github.com/rsn8887/basiliskii-vita.git,None,1588341945,None,None,VPK,c7b7e3ec,True +DRON57468,Drone_racer,JacobsPlayground,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DRON57468_icon0.png,None,https://files.fm/down.php?i=ze3mwfxd&n=DR0056.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DRON57468.vpk,None,None,None,None,1588341944,None,None,VPK,None,True +SKGYAMT01,YAMT -basic-,SKGleba,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGYAMT01.vpk,None,https://raw.githubusercontent.com/SKGleba/yamt-vita/master/README.md,None,https://github.com/SKGleba/yamt-vita.git,None,1588341943,None,None,VPK,None,True +LAPY00009,Wild Gunman Remake,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY00009_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY00009.vpk,None,None,None,None,None,1588341942,None,None,VPK,None,True +MARK00095,Resident Evil CODE: Vita,Markus95,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MARK00095_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MARK00095.vpk,None,None,None,None,None,1588341941,None,None,VPK,None,True +GMSV00001_01,Freeway Mutant,Loodanon,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GMSV00001_01_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GMSV00001_01.vpk,None,None,None,None,None,1588341939,None,None,VPK,None,True +VITALIERO,Wiiero,Grzybojad,https://raw.githubusercontent.com/Grzybojad/wiiero-vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITALIERO_icon0.png,https://github.com/Grzybojad/wiiero-vita/releases/download/1.2/wiiero.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITALIERO.vpk,https://raw.githubusercontent.com/Grzybojad/wiiero-vita/master/README.md,None,https://github.com/Grzybojad/wiiero-vita.git,None,1588341936,None,None,VPK,a27883ff,True +SPED85632,Speedrun Vita,FantaHourglass,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SPED85632_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SPED85632.vpk,None,None,None,None,None,1588341933,None,None,VPK,None,True +OSDB00001,GM:S,InquisitionImplied,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OSDB00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OSDB00001.vpk,None,None,None,None,None,1588341932,None,None,VPK,None,True +FIGH12345,UFE Demo,RetroGamer74,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FIGH12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FIGH12345.vpk,None,None,None,None,None,1588341931,None,None,VPK,None,True +NMDG54882,No More Dungeons!,VitaHEX Games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NMDG54882_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NMDG54882.vpk,None,None,None,None,None,1588341930,None,None,VPK,None,True +AGWN00000,A game without a name!,Borad Games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AGWN00000_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AGWN00000.vpk,None,None,None,https://drive.google.com/file/d/1r23ZFlm_0RnJdARX2FEJ9JbbsciDeAnM/view,None,1588341929,None,None,VPK,None,True +ABCD13370,DarkWlak,Paulo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD13370_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD13370.vpk,None,None,None,None,None,1588341928,None,None,VPK,None,True +POSTAL001,Postal,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/PostalVita/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/POSTAL001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=415,https://dl.coolatoms.org/vitadb/Postal.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/POSTAL001.vpk,None,None,https://github.com/Rinnegatamante/PostalVita.git,None,1588341927,None,None,VPK,77f8b1f7,True +PLMN00001,Plugins Manager,kylon,https://bitbucket.org/kylon/plugins-manager-vita/raw/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PLMN00001_icon0.png,https://bitbucket.org/kylon/plugins-manager-vita/downloads/plgmn.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PLMN00001.vpk,https://bitbucket.org/kylon/plugins-manager-vita/raw/master/README.md,None,https://bitbucket.org/kylon/plugins-manager-vita/overview,None,1588341926,None,None,VPK,None,True +NXEV00001,NXENGINE-EVO,sarcasticat,https://raw.githubusercontent.com/nxengine/nxengine-evo/master/platform/vita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NXEV00001_icon0.png,https://github.com/nxengine/nxengine-evo/releases/download/v2.6.5/NXEngine-Evo-v2.6.5-Vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NXEV00001.vpk,https://raw.githubusercontent.com/nxengine/nxengine-evo/master/README.md,None,https://github.com/nxengine/nxengine-evo.git,None,1588341925,None,None,VPK,None,True +NUMPTY001,NumptyPhysics,Rinnegatamante & meetpatty,https://raw.githubusercontent.com/Rinnegatamante/NumptyPhysics-Vita/master/builder/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NUMPTY001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=243,https://dl.coolatoms.org/vitadb/NumptyPhysics.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NUMPTY001.vpk,https://raw.githubusercontent.com/Rinnegatamante/NumptyPhysics-Vita/master/README.md,None,https://github.com/Rinnegatamante/NumptyPhysics-Vita.git,None,1588341924,None,None,VPK,4ade44f3,True +CUID18745,Cup Critters,FantaHourglass,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CUID18745_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CUID18745.vpk,None,None,None,None,None,1588341923,None,None,VPK,None,True +LAPY00001,Save The Scene,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY00001.vpk,None,None,None,https://github.com/Lapy055/Save_the_Scene.git,None,1588341922,None,None,VPK,None,True +PAUL00001,Jam,Paulo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PAUL00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PAUL00001.vpk,None,None,None,None,None,1588341921,None,None,VPK,None,True +OOPP54321,Home,Paulo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OOPP54321_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OOPP54321.vpk,None,None,None,None,None,1588341920,None,None,VPK,None,True +BEBE12908,MKMayhem,FantaHourglass,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BEBE12908_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BEBE12908.vpk,None,None,None,None,None,1588341919,None,None,VPK,None,True +ROCKS0000,rocksndiamonds,rsn8887,https://raw.githubusercontent.com/rsn8887/rocksndiamonds/master/psp2data/rocksndiamonds/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ROCKS0000_icon0.png,https://github.com/rsn8887/rocksndiamonds/releases/download/1.15/rocksndiamonds_vita_1.12.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ROCKS0000.vpk,https://raw.githubusercontent.com/rsn8887/rocksndiamonds/master/README.MD,None,https://github.com/rsn8887/rocksndiamonds.git,None,1588341918,None,None,VPK,bd3d35e,True +TOSF87312,SunflowerChair,Modello,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TOSF87312_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TOSF87312.vpk,None,None,None,None,None,1588341917,None,None,VPK,None,True +JUMPNBUMP,jumpnbump,rsn8887,https://raw.githubusercontent.com/rsn8887/jumpnbump/master/psp2data/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/JUMPNBUMP_icon0.png,https://github.com/rsn8887/jumpnbump/releases/download/1.02/jumpnbump_1.00.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/JUMPNBUMP.vpk,https://raw.githubusercontent.com/rsn8887/jumpnbump/master/README.md,None,https://github.com/rsn8887/jumpnbump.git,None,1588341916,None,None,VPK,None,True +ZERO00001,ZeldaROTH,usineur,https://raw.githubusercontent.com/usineur/ZeldaROTH/vita/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZERO00001_icon0.png,https://github.com/usineur/ZeldaROTH/releases/download/1.3/ZeldaROTH.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZERO00001.vpk,https://raw.githubusercontent.com/usineur/ZeldaROTH/vita/README.md,None,https://github.com/usineur/ZeldaROTH.git,None,1588341915,None,None,VPK,None,True +SKGPKG2CH,★Package Installer Launcher,SKGleba,https://raw.githubusercontent.com/SKGleba/PKGinstallerLauncher/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKGPKG2CH_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGPKG2CH.vpk,None,https://raw.githubusercontent.com/SKGleba/PKGinstallerLauncher/master/README.md,None,https://github.com/SKGleba/PKGinstallerLauncher.git,None,1588341914,None,None,VPK,None,True +LUAMANGAS,Manga Downloader,MyLegGuy,https://raw.githubusercontent.com/MyLegGuy/MangaDownloader-Vita/master/VpkContents/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LUAMANGAS_icon0.png,https://github.com/MyLegGuy/MangaDownloader-Vita/releases/download/v2.5/MangaDownloader-v2.5.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LUAMANGAS.vpk,https://raw.githubusercontent.com/MyLegGuy/MangaDownloader-Vita/master/README.md,None,https://github.com/MyLegGuy/MangaDownloader-Vita.git,None,1588341912,None,None,VPK,None,True +PTVT45668,The Hallway,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PTVT45668_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PTVT45668.vpk,None,None,None,None,None,1588341911,None,None,VPK,None,True +RTFD12345,Red Runner,RetroGamer74,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RTFD12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RTFD12345.vpk,None,https://raw.githubusercontent.com/RetroGamer74/RedRunner/master/README.md,None,https://github.com/RetroGamer74/RedRunner.git,None,1588341910,None,None,VPK,None,True +ABCD12345_05,The Enchanted Forest,RetroGamer74,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_05_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345_05.vpk,None,None,None,None,None,1588341909,None,None,VPK,None,True +ZMBR94732,Zombiebound Reloaded,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZMBR94732_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZMBR94732.vpk,None,None,None,None,None,1588341908,None,None,VPK,None,True +FRYM12345,FryingMaster,LazyOx199,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FRYM12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRYM12345.vpk,None,None,None,None,None,1588341907,None,None,VPK,None,True +SMWAR0000,SuperMarioWar,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/smw-vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SMWAR0000_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=422,https://dl.coolatoms.org/vitadb/SuperMarioWar.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SMWAR0000.vpk,None,None,https://github.com/Rinnegatamante/smw-vita.git,None,1588341905,None,None,VPK,f22dba1,True +DEFD20485,2048,FantaHourglass,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DEFD20485_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DEFD20485.vpk,None,None,None,None,None,1588341902,None,None,VPK,None,True +PSVGC0001,Virtual GC,motoharu,https://raw.githubusercontent.com/motoharu-gosuto/psvgamesd/master/app/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSVGC0001_icon0.png,https://github.com/motoharu-gosuto/psvgamesd/releases/download/v2.0/psvgc.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSVGC0001.vpk,https://raw.githubusercontent.com/motoharu-gosuto/psvgamesd/master/README.md,None,https://github.com/motoharu-gosuto/psvgamesd.git,None,1588341901,None,None,VPK,None,True +VGEE00001,RPPHS,G33 & MotoLegacy,https://raw.githubusercontent.com/G333333/RPPHS/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VGEE00001_icon0.png,https://github.com/G333333/RPPHS/releases/download/v1.2/RPPHS.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VGEE00001.vpk,https://raw.githubusercontent.com/G333333/RPPHS/master/Readme.md,None,https://github.com/G333333/RPPHS.git,None,1588341899,None,None,VPK,None,True +SKGIMCULK,IMCUnlockLite,SKGleba,https://raw.githubusercontent.com/SKGleba/IMCUnlockLite/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKGIMCULK_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKGIMCULK.vpk,None,https://raw.githubusercontent.com/SKGleba/IMCUnlockLite/master/README.md,None,https://github.com/SKGleba/IMCUnlockLite.git,None,1588341898,None,None,VPK,None,True +ABCD00999,Waves,Paulo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD00999_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD00999.vpk,None,None,None,None,None,1588341897,None,None,VPK,None,True +LAPY00004,Overcome,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LAPY00004_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LAPY00004.vpk,None,None,None,None,None,1588341896,None,None,VPK,None,True +CUBCCONUN,Cubic Conundrum,forthw & JeffRuLz345,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CUBCCONUN_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CUBCCONUN.vpk,None,None,None,None,None,1588341895,None,None,VPK,None,True +BADA00001,Bad Apple Vita!!!,knight-ryu12 & Princess of Sleeping,https://raw.githubusercontent.com/knight-ryu12/badapplevita/master/bin/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BADA00001_icon0.png,https://github.com/knight-ryu12/badapplevita/releases/download/v1.0/badapple_VITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BADA00001.vpk,https://raw.githubusercontent.com/knight-ryu12/badapplevita/master/README.md,None,https://github.com/knight-ryu12/badapplevita.git,None,1588341894,None,None,VPK,None,True +F2BGLVITA,FadeToBlack,usineur,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/F2BGLVITA_icon0.png,None,https://github.com/usineur/f2bgl/releases/download/vita-1.0/FadeToBlack.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/F2BGLVITA.vpk,https://raw.githubusercontent.com/usineur/f2bgl/master/README.txt,None,https://github.com/usineur/f2bgl.git,None,1588341893,None,None,VPK,None,True +RTRLVAREA,RetroLivearea,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/RetroLivearea/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RTRLVAREA_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=380,https://dl.coolatoms.org/vitadb/RetroLivearea.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RTRLVAREA.vpk,None,None,https://github.com/Rinnegatamante/RetroLivearea.git,None,1588341892,None,None,VPK,None,True +ADBT00001,App DB Tool,luck & kylon,https://bitbucket.org/kylon/appdbtool/raw/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ADBT00001_icon0.png,https://bitbucket.org/kylon/appdbtool/downloads/appdbtool.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADBT00001.vpk,https://bitbucket.org/kylon/appdbtool/raw/master/sce_sys/icon0.png,None,https://bitbucket.org/kylon/appdbtool,None,1588341891,None,None,VPK,None,True +WOLF00001,vitaWolfen,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaWolfen/master/release/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/WOLF00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=31,https://dl.coolatoms.org/vitadb/vitaWolfen.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WOLF00001.vpk,None,None,https://github.com/Rinnegatamante/vitaWolfen.git,None,1588341890,None,None,VPK,f442191f,True +PICRESTGM,PiCrest,Creckeryop,https://raw.githubusercontent.com/Creckeryop/PiCrest/master/make/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PICRESTGM_icon0.png,https://github.com/Creckeryop/PiCrest/releases/download/1.15/PiCrest.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PICRESTGM.vpk,https://raw.githubusercontent.com/Creckeryop/PiCrest/master/README.md,None,https://github.com/Creckeryop/PiCrest.git,None,1588341889,None,None,VPK,None,True +RBSD00001,Reboot or Shutdown,McCallum99,https://raw.githubusercontent.com/McCallum99/PSVitaRebootShutdown/master/source/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RBSD00001_icon0.png,https://github.com/McCallum99/PSVitaRebootShutdown/releases/download/v1.08/VitaRebootShutdown.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RBSD00001.vpk,https://raw.githubusercontent.com/McCallum99/PSVitaRebootShutdown/master/README.md,None,https://github.com/McCallum99/PSVitaRebootShutdown.git,None,1588341888,None,None,VPK,None,True +ABCD12345_04,TLC,WIDECGC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_04_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345_04.vpk,None,None,None,None,None,1588341887,None,None,VPK,None,True +CANNONBAL,Cannonball,rsn8887,https://raw.githubusercontent.com/rsn8887/cannonball/master/psp2data/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CANNONBAL_icon0.png,https://github.com/rsn8887/cannonball/releases/download/1.08switchgit-vita/switch-rsn8887/Cannonball_1.05.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CANNONBAL.vpk,https://raw.githubusercontent.com/rsn8887/cannonball/master/README.MD,None,https://github.com/rsn8887/cannonball.git,None,1588341886,None,None,VPK,None,True +ABCD12346,El Pollo de Lapy,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12346_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12346.vpk,None,None,None,None,None,1588341885,None,None,VPK,None,True +VSOI00001,VSOI,gnmmarechal,None,None,https://github.com/gnmmarechal/VSOI/releases/download/v0.1/VSOI.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VSOI00001.vpk,https://raw.githubusercontent.com/gnmmarechal/VSOI/master/README.md,None,https://github.com/gnmmarechal/VSOI.git,None,1588341884,None,None,VPK,None,True +WSTLNDKNG,Wasteland Kings,Vlambeer & JeffRuLz345,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/WSTLNDKNG_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WSTLNDKNG.vpk,None,None,None,None,None,1588341883,None,None,VPK,None,True +TEAR00001,Shiromino,Tear,https://raw.githubusercontent.com/Tearff/shiromino/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TEAR00001_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TEAR00001.vpk,None,https://raw.githubusercontent.com/Tearff/shiromino/master/README.md,None,https://github.com/Tearff/shiromino.git,None,1588341882,None,None,VPK,None,True +VSCU00001,scummvm,cpasjuste & rsn8887 & ScummVM Team,https://raw.githubusercontent.com/scummvm/scummvm/master/dists/psp2/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VSCU00001_icon0.png,https://www.scummvm.org/frs/scummvm/2.1.1/scummvm-2.1.1-vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VSCU00001.vpk,https://raw.githubusercontent.com/scummvm/scummvm/master/README.md,None,https://github.com/scummvm/scummvm.git,None,1588341881,None,None,VPK,None,True +WIZAWIZRD,Wizard Wizard,Crateboy & JeffRuLz345,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/WIZAWIZRD_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WIZAWIZRD.vpk,None,None,None,None,None,1588341880,None,None,VPK,None,True +XASH00001,vitaXash3D,fgsfds,https://raw.githubusercontent.com/fgsfdsfgs/vitaXash3D/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/XASH00001_icon0.png,https://github.com/fgsfdsfgs/vitaXash3D/releases/download/v4/vitaXash3D.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XASH00001.vpk,https://raw.githubusercontent.com/fgsfdsfgs/vitaXash3D/master/README.md,None,https://github.com/fgsfdsfgs/vitaXash3D.git,None,1588341879,None,None,VPK,925a0e06,True +SWITCHSDV,Switch SD2Vita,AppleIo & wth,https://raw.githubusercontent.com/Applelo/SwitchSD2Vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SWITCHSDV_icon0.png,https://github.com/Applelo/SwitchSD2Vita/releases/download/2.1/switch_sd2vita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SWITCHSDV.vpk,https://raw.githubusercontent.com/Applelo/SwitchSD2Vita/master/README.md,None,https://github.com/Applelo/SwitchSD2Vita.git,None,1588341878,None,None,VPK,None,True +ZELDATTT1,Zelda3T,usineur,https://raw.githubusercontent.com/usineur/Zelda3T/vita/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZELDATTT1_icon0.png,https://github.com/usineur/Zelda3T/releases/download/1.3.1/Zelda3T.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZELDATTT1.vpk,https://raw.githubusercontent.com/usineur/Zelda3T/vita/README.md,None,https://github.com/usineur/Zelda3T.git,None,1588341875,None,None,VPK,None,True +ABCD12347,El Pollo 2.0,Lapy,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12347_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12347.vpk,None,None,None,None,None,1588341874,None,None,VPK,None,True +THTR00001,Tetromino - Touhou Edition,Aurora & svennd,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/THTR00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=376,https://dl.coolatoms.org/vitadb/Tetromino - Touhou Edition.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/THTR00001.vpk,None,None,None,None,1588341873,None,None,VPK,None,True +VITABUP00,Vita Backup,joel16,https://raw.githubusercontent.com/joel16/VitaBackup/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITABUP00_icon0.png,https://github.com/joel16/VitaBackup/releases/download/2.00/VitaBackup.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITABUP00.vpk,https://raw.githubusercontent.com/joel16/VitaBackup/master/README.md,None,https://github.com/joel16/VitaBackup.git,None,1588341872,None,None,VPK,None,True +PAUL00004,Echo Moth,Paulo,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PAUL00004_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PAUL00004.vpk,None,None,None,None,None,1588341871,None,None,VPK,None,True +SPPX12345,SuperPixelRun,RetroGamer74,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SPPX12345_icon0.png,None,https://github.com/RetroGamer74/SuperPixelRun/releases/download/1.0/buildspr.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SPPX12345.vpk,https://raw.githubusercontent.com/RetroGamer74/SuperPixelRun/master/README.md,None,https://github.com/RetroGamer74/SuperPixelRun.git,None,1588341870,None,None,VPK,None,True +THMX00001,Theme Manager Ex,kylon,https://bitbucket.org/kylon/theme-manager-ex-theme-engine/raw/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/THMX00001_icon0.png,https://bitbucket.org/kylon/theme-manager-ex-theme-engine/downloads/vtheme.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/THMX00001.vpk,https://bitbucket.org/kylon/theme-manager-ex-theme-engine/raw/master/README.md,None,https://bitbucket.org/kylon/theme-manager-ex-theme-engine,None,1588341869,None,None,VPK,None,True +UNTITLEDS,An Untitled Story,JeffRulz345,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/UNTITLEDS_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/UNTITLEDS.vpk,None,None,None,https://drive.google.com/open?id=1WnmCXBQxEASaanJ0jX8fJoeK6NWbxTV7,None,1588341868,None,None,VPK,None,True +VITAFBA01,pfba,cpasjuste & rsn8887,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITAFBA01_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITAFBA01.vpk,None,None,None,https://github.com/cpasjuste/pfba.git,None,1588341867,None,None,VPK,None,True +DSTROYVIT,DstroyVita,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/DstroyVita/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DSTROYVIT_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=383,https://dl.coolatoms.org/vitadb/DstroyVita.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DSTROYVIT.vpk,None,None,https://github.com/Rinnegatamante/DstroyVita.git,None,1588341866,None,None,VPK,33319e4b,True +ZELDAOLB1,Zelda: Oni Link Begins,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/ZeldaOLB/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZELDAOLB1_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=265,https://dl.coolatoms.org/vitadb/hbs/ZeldaOLB.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZELDAOLB1.vpk,None,None,https://github.com/Rinnegatamante/ZeldaOLB.git,None,1588341865,None,None,VPK,None,True +ZELDANSQ1,ZeldaNSQ,usineur,https://raw.githubusercontent.com/usineur/ZeldaNSQ/vita/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZELDANSQ1_icon0.png,https://github.com/usineur/ZeldaNSQ/releases/download/1.1.1/ZeldaNSQ.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZELDANSQ1.vpk,https://raw.githubusercontent.com/usineur/ZeldaNSQ/vita/README.md,None,https://github.com/usineur/ZeldaNSQ.git,None,1588341864,None,None,VPK,None,True +CHOC66666,Chocolate Doom,fgsfds,https://raw.githubusercontent.com/fgsfdsfgs/chocolate-doom/master/vita/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CHOC66666_icon0.png,https://github.com/fgsfdsfgs/chocolate-doom/releases/download/chocolate-doom-3.0.0-vita-3.1/ChocolateDoom_r3_1.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CHOC66666.vpk,https://raw.githubusercontent.com/fgsfdsfgs/chocolate-doom/master/README.md,None,https://github.com/fgsfdsfgs/chocolate-doom.git,None,1588341863,None,None,VPK,69ec5ff,True +ADRBBLINS,AdrBubbleBooter Installer,Leecherman,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ADRBBLINS_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADRBBLINS.vpk,None,None,None,None,None,1588341860,None,None,VPK,None,True +HBINJECT0,HBInjector,emiyl,https://raw.githubusercontent.com/emiyl/HBInjector/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HBINJECT0_icon0.png,https://github.com/emiyl/HBInjector/releases/download/v1.2.6/HBInjector.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HBINJECT0.vpk,https://raw.githubusercontent.com/emiyl/HBInjector/master/README.md,None,https://github.com/emiyl/HBInjector.git,None,1588341858,None,None,VPK,None,True +THHM00001,Vita Hangman - Touhou Edition,Aurora & Jackiepooh & Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/THHM00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=379,https://dl.coolatoms.org/vitadb/Vita Hangman - Touhou Edition.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/THHM00001.vpk,None,None,None,None,1588341857,None,None,VPK,None,True +ABCD12345_03,Flappy Bird Vita,Moe_Baker,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABCD12345_03_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABCD12345_03.vpk,None,None,None,None,None,1588341854,None,None,VPK,None,True +QUAKE0002,vitaQuakeII,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/vitaQuakeII/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/QUAKE0002_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=278,https://dl.coolatoms.org/vitadb/13/vitaQuakeII.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/QUAKE0002.vpk,None,None,https://github.com/Rinnegatamante/vitaQuakeII.git,None,1588341853,None,None,VPK,f3e3104d,True +BTMR12345,Beat Master,LuckTheGamers,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BTMR12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BTMR12345.vpk,None,None,None,None,None,1588341852,None,None,VPK,None,True +ACTIVAMLT,MLTactivator,MiraLaTijera & Draqen,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ACTIVAMLT_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACTIVAMLT.vpk,None,None,None,None,None,1588341851,None,None,VPK,None,True +VITAPONG0,Pong,NamelessGhoul0,https://raw.githubusercontent.com/NamelessGhoul0/VitaPong/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITAPONG0_icon0.png,https://github.com/NamelessGhoul0/VitaPong/releases/download/v1.10/Pong.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITAPONG0.vpk,https://raw.githubusercontent.com/NamelessGhoul0/VitaPong/master/README.md,None,https://github.com/NamelessGhoul0/VitaPong.git,None,1588341850,None,None,VPK,None,True +DOOM00666,Vita Doom,MrNetrix & aagallag,https://raw.githubusercontent.com/aagallag/Vita_Doom/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DOOM00666_icon0.png,https://github.com/aagallag/Vita_Doom/releases/download/aagallag_v1.1/Vita_Doom.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DOOM00666.vpk,https://raw.githubusercontent.com/aagallag/Vita_Doom/master/Readme.txt,None,https://github.com/aagallag/Vita_Doom.git,None,1588341849,None,None,VPK,None,True +CHIP00001,MicroCHIP,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/MicroCHIP/master/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CHIP00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=337,https://dl.coolatoms.org/vitadb/MicroCHIP.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CHIP00001.vpk,None,None,https://github.com/Rinnegatamante/MicroCHIP.git,None,1588341848,None,None,VPK,None,True +VID000016,VITAident,joel16,https://raw.githubusercontent.com/joel16/VITAident/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VID000016_icon0.png,https://github.com/joel16/VITAident/releases/download/0.7.4/VITAident.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VID000016.vpk,https://raw.githubusercontent.com/joel16/VITAident/master/README.md,None,https://github.com/joel16/VITAident.git,None,1588341847,None,None,VPK,None,True +ABBAYEDMO,Abbaye Des Morts,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/AbbayeDesMorts-Vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABBAYEDMO_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=359,https://dl.coolatoms.org/vitadb/AbbayeDesMorts.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABBAYEDMO.vpk,None,None,https://github.com/Rinnegatamante/AbbayeDesMorts-Vita.git,None,1588341845,None,None,VPK,None,True +ARKSPCLNK,PC Link [0.8b],Arkanite,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARKSPCLNK_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARKSPCLNK.vpk,None,None,None,None,None,1588341844,None,None,VPK,None,True +CHAI00001,chain,svennd,https://raw.githubusercontent.com/svennd/vita-chain/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CHAI00001_icon0.png,https://github.com/svennd/vita-chain/releases/download/0.2/chain.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CHAI00001.vpk,https://raw.githubusercontent.com/svennd/vita-chain/master/README.md,None,https://github.com/svennd/vita-chain.git,None,1588341843,None,None,VPK,None,True +ZBND00001,Zombiebound,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZBND00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZBND00001.vpk,None,None,None,None,None,1588341842,None,None,VPK,None,True +LBRN00001,Labyrinth 3D,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LBRN00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=198,https://dl.coolatoms.org/vitadb/hbs/Labyrinth_3D.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LBRN00001.vpk,None,None,None,None,1588341841,None,None,VPK,None,True +VTGO00001,Vitamon GO,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VTGO00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VTGO00001.vpk,None,None,None,None,None,1588341840,None,None,VPK,None,True +VID000162,VITAident GUI,joel16,https://raw.githubusercontent.com/joel16/VITAident/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VID000162_icon0.png,https://github.com/joel16/VITAident/releases/download/0.7.4/VITAident_GUI.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VID000162.vpk,https://raw.githubusercontent.com/joel16/VITAident/master/README.md,None,https://github.com/joel16/VITAident.git,None,1588341839,None,None,VPK,None,True +A3A400001,Cookie Clicker,Creckeryop,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/A3A400001_icon0.png,None,https://github.com/Creckeryop/CookieClicker-Vita/releases/download/0.2/Cookie.Clicker.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/A3A400001.vpk,https://raw.githubusercontent.com/Creckeryop/CookieClicker-Vita/master/README.md,None,https://github.com/Creckeryop/CookieClicker-Vita.git,None,1588341838,None,None,VPK,None,True +SVEW00001,SwitchView,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SVEW00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SVEW00001.vpk,None,None,None,None,None,1588341837,None,None,VPK,None,True +OPENTITUS,OpenTitus,usineur,https://raw.githubusercontent.com/usineur/opentitus/vita/vita/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OPENTITUS_icon0.png,https://github.com/usineur/opentitus/releases/download/1.0/Titus.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OPENTITUS.vpk,https://raw.githubusercontent.com/usineur/opentitus/vita/README.md,None,https://github.com/usineur/opentitus.git,None,1588341836,None,None,VPK,None,True +OPENTITUS_01,OpenTitus,usineur,https://raw.githubusercontent.com/usineur/opentitus/vita/vita/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OPENTITUS_01_icon0.png,https://github.com/usineur/opentitus/releases/download/1.0/Moktar.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OPENTITUS_01.vpk,https://raw.githubusercontent.com/usineur/opentitus/vita/README.md,None,https://github.com/usineur/opentitus.git,None,1588341835,None,None,VPK,None,True +CTJ300001,Crazy Traffic Jam 3D,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CTJ300001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=292,https://dl.coolatoms.org/vitadb/Crazy Traffic Jam 3D.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CTJ300001.vpk,None,None,None,None,1588341834,None,None,VPK,None,True +PCM300001,Pro Camera Vita,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PCM300001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PCM300001.vpk,None,None,None,None,None,1588341833,None,None,VPK,None,True +DBMA00001,Database Manager,Deltaclock,https://raw.githubusercontent.com/deltaclock/Database-Manager/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DBMA00001_icon0.png,https://github.com/deltaclock/Database-Manager/releases/download/v1.20/Database.Manager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DBMA00001.vpk,https://raw.githubusercontent.com/deltaclock/Database-Manager/master/README.md,None,https://github.com/deltaclock/Database-Manager.git,None,1588341832,None,None,VPK,None,True +VHWT00001,Vita Hardware Test,ifrit05,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VHWT00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VHWT00001.vpk,None,None,None,None,None,1588341831,None,None,VPK,None,True +BIRD00000,flappybird,yukkurisinai,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BIRD00000.vpk,None,None,None,https://github.com/yukkurisinai/vita-flappybird.git,None,1588341829,None,None,VPK,None,True +DRSS00001,DeathRun Test,Vektast,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DRSS00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DRSS00001.vpk,None,None,None,None,None,1588341828,None,None,VPK,None,True +FLDT00001,Flood It!,notnotme,https://raw.githubusercontent.com/notnotme/NotEngine_PSV/master/floodit/vpk/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FLDT00001_icon0.png,https://github.com/notnotme/NotEngine_PSV/releases/download/11.17.2016/floodit.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FLDT00001.vpk,https://raw.githubusercontent.com/notnotme/NotEngine_PSV/master/README.md,None,https://github.com/notnotme/NotEngine_PSV.git,None,1588341827,None,None,VPK,None,True +ZXGQ00003,GoHAN,OneRice07,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ZXGQ00003_icon0.png,None,https://github.com/OneRice07/GoHAN/releases/download/v2.10/GoHAN_2.10.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ZXGQ00003.vpk,https://raw.githubusercontent.com/OneRice07/GoHAN/master/README.md,None,None,https://github.com/OneRice07/GoHAN.git,1588341826,None,None,VPK,None,True +XYZZ00003,idu-mode,xyzz,None,None,https://github.com/xyzz/vita-idu/releases/download/1.0/idu-mode.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XYZZ00003.vpk,None,None,https://github.com/xyzz/vita-idu.git,None,1588341825,None,None,VPK,None,True +SDLLOPAN0,SDLLopan,nop90,https://raw.githubusercontent.com/nop90-PSVITA/SDLLopan-VITA/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SDLLOPAN0_icon0.png,https://github.com/nop90-PSVITA/SDLLopan-VITA/releases/download/v1.0/SDLLopan.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SDLLOPAN0.vpk,None,None,https://github.com/nop90-PSVITA/SDLLopan-VITA.git,None,1588341824,None,None,VPK,None,True +CXZV00001,Vita Font Installer,cxziaho,https://raw.githubusercontent.com/cxziaho/fontInstaller/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CXZV00001_icon0.png,https://github.com/cxziaho/fontInstaller/releases/download/1.0/fontInstaller.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CXZV00001.vpk,https://raw.githubusercontent.com/cxziaho/fontInstaller/master/README.md,None,https://github.com/cxziaho/fontInstaller.git,None,1588341823,None,None,VPK,None,True +MLCL00002,offlineInstaller,xyzz,https://raw.githubusercontent.com/henkaku/offline-installer/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MLCL00002_icon0.png,https://github.com/henkaku/offline-installer/releases/download/1.0/offlineInstaller.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MLCL00002.vpk,https://raw.githubusercontent.com/henkaku/offline-installer/master/README.md,None,https://github.com/henkaku/offline-installer.git,None,1588341822,None,None,VPK,None,True +NOTE00001,Notepad Vita,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NOTE00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NOTE00001.vpk,None,None,None,None,None,1588341821,None,None,VPK,None,True +DAKR00001,Game Shrinker,Dakor,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DAKR00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DAKR00001.vpk,None,None,None,None,None,1588341820,None,None,VPK,None,True +HANG00001,VitaHangman,Jackiepooh & Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HANG00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HANG00001.vpk,None,None,None,None,None,1588341819,None,None,VPK,None,True +AMTR01693,Another Metroid 2 Remake,Greaterchimera,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AMTR01693_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AMTR01693.vpk,None,None,None,None,None,1588341818,None,None,VPK,None,True +MFFT00016,Vita Microphone FFT,pyroesp,https://raw.githubusercontent.com/pyroesp/vitaFFT/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MFFT00016_icon0.png,https://github.com/pyroesp/vitaFFT/releases/download/v0.1.6/VitaFFT.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MFFT00016.vpk,https://raw.githubusercontent.com/pyroesp/vitaFFT/master/README.md,None,https://github.com/pyroesp/vitaFFT.git,None,1588341816,None,None,VPK,None,True +VOID00001,projectvoid_v0.1.0,Akabane87,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VOID00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VOID00001.vpk,None,None,None,None,None,1588341815,None,None,VPK,None,True +VREC00001,Voice Recorder,VitaHEX games,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VREC00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VREC00001.vpk,None,None,None,None,None,1588341814,None,None,VPK,None,True +PKGI00000,PKGi,mmozeiko,https://raw.githubusercontent.com/mmozeiko/pkgi/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PKGI00000_icon0.png,https://github.com/mmozeiko/pkgi/releases/download/v0.05/pkgi-v0.05.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PKGI00000.vpk,https://raw.githubusercontent.com/mmozeiko/pkgi/master/README.md,None,https://github.com/mmozeiko/pkgi.git,None,1588341813,None,None,VPK,None,True +CFFVNPGAW,GirlsAreWeird,10TR!LL!ON Percent%,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CFFVNPGAW_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CFFVNPGAW.vpk,None,None,None,None,None,1588341812,None,None,VPK,None,True +VITADL999,VitaDL,Voxel,https://raw.githubusercontent.com/Voxel9/VitaDL/master/resource/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITADL999_icon0.png,https://github.com/Voxel9/VitaDL/releases/download/v0.1/VitaDL.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITADL999.vpk,None,None,https://github.com/Voxel9/VitaDL.git,None,1588341811,None,None,VPK,None,True +MAIM00001_01,MaiDumpTool,BeniYukiMai,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MAIM00001_01_icon0.png,None,https://github.com/BeniYukiMai/MaiDumpTool/releases/download/V233.2zEx/MaiDumpTool_V233.2zEx.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MAIM00001_01.vpk,https://raw.githubusercontent.com/BeniYukiMai/MaiDumpTool/master/README.md,None,https://github.com/BeniYukiMai/MaiDumpTool.git,None,1588341810,None,None,VPK,None,True +PICKRV016,Pickr VITA,joel16,https://raw.githubusercontent.com/joel16/PickrVITA/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PICKRV016_icon0.png,https://github.com/joel16/PickrVITA/releases/download/1.1/PickrVITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PICKRV016.vpk,https://raw.githubusercontent.com/joel16/PickrVITA/master/README.md,None,https://github.com/joel16/PickrVITA.git,None,1588341809,None,None,VPK,None,True +VITABOOKS,VitaBooks,BenMitnick,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITABOOKS_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITABOOKS.vpk,None,None,None,None,None,1588341808,None,None,VPK,None,True +ARKSPSPHB,PSP Homebrew Browser,Arkanite,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARKSPSPHB_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARKSPSPHB.vpk,None,None,None,None,None,1588341807,None,None,VPK,None,True +EUCLIOD01,EUCLIOD,HexZyle & Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/EUCLIOD01_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=263,https://dl.coolatoms.org/vitadb/Homebrews/EUCLIOD.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EUCLIOD01.vpk,None,None,None,None,1588341806,None,None,VPK,None,True +CARDUNLOK,CardUnlock,cnsldv,https://raw.githubusercontent.com/cnsldv/CardUnlock/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CARDUNLOK_icon0.png,https://github.com/cnsldv/CardUnlock/releases/download/v1.0/CardUnlock.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CARDUNLOK.vpk,https://raw.githubusercontent.com/cnsldv/CardUnlock/master/README.md,None,https://github.com/cnsldv/CardUnlock.git,None,1588341805,None,None,VPK,None,True +ABLK00001,AntiBlacklist,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/AntiBlacklist/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ABLK00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=11,https://dl.coolatoms.org/vitadb/Homebrews/AntiBlacklist.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ABLK00001.vpk,None,None,https://github.com/Rinnegatamante/AntiBlacklist.git,None,1588341804,None,None,VPK,None,True +MIMP00001,Media Importer,cnsldv,https://raw.githubusercontent.com/cnsldv/MediaImporter/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MIMP00001_icon0.png,https://github.com/cnsldv/MediaImporter/releases/download/v0.91/MediaImporter.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MIMP00001.vpk,https://raw.githubusercontent.com/cnsldv/MediaImporter/master/README.md,None,https://github.com/cnsldv/MediaImporter.git,None,1588341803,None,None,VPK,None,True +VID000163,VITA Net Check,joel16,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VID000163_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VID000163.vpk,None,None,None,None,None,1588341802,None,None,VPK,None,True +HACKINFOR,HackInformer,HackInformer Staff,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HACKINFOR_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HACKINFOR.vpk,None,None,None,None,None,1588341801,None,None,VPK,None,True +STEM00001,StemLoader,Voxel,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/STEM00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/STEM00001.vpk,None,None,None,https://github.com/Voxel9/Stem-Loader.git,None,1588341800,None,None,VPK,None,True +RPG100001,Galactic Federation,thesuicidalrobot,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RPG100001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RPG100001.vpk,None,None,None,None,None,1588341799,None,None,VPK,None,True +ARKSNPAD0,Notepad++,Arkanite,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARKSNPAD0_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARKSNPAD0.vpk,None,None,None,None,None,1588341798,None,None,VPK,None,True +VTCD00001,VitaCord,devingDev,https://raw.githubusercontent.com/devingDev/VitaCord/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VTCD00001_icon0.png,https://github.com/devingDev/VitaCord/releases/download/1.5fix1/vita_cord.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VTCD00001.vpk,https://raw.githubusercontent.com/devingDev/VitaCord/master/README.MD,None,https://github.com/devingDev/VitaCord.git,None,1588341797,None,None,VPK,None,True +EPSPINSTA,ePSP Bubble Installer by CelesteBlue,CelesteBlue,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/EPSPINSTA_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EPSPINSTA.vpk,None,None,None,None,None,1588341796,None,None,VPK,None,True +STFD00001,Starfield Vita,gnmmarechal,https://raw.githubusercontent.com/gnmmarechal/starfield-vita/master/lpp-builder/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/STFD00001_icon0.png,https://github.com/gnmmarechal/starfield-vita/releases/download/v0.2/Starfield-Vita-v0.2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/STFD00001.vpk,https://raw.githubusercontent.com/gnmmarechal/starfield-vita/master/README.md,None,https://github.com/gnmmarechal/starfield-vita.git,None,1588341795,None,None,VPK,None,True +PICOLOOP1,PicoloopPSVita,yoyz,https://raw.githubusercontent.com/yoyz/picoloop/master/picoloop/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PICOLOOP1_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PICOLOOP1.vpk,None,https://raw.githubusercontent.com/yoyz/picoloop/master/README.md,None,https://github.com/yoyz/picoloop.git,None,1588341794,None,None,VPK,None,True +SWKK00001,SwitchKaku,kylon,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SWKK00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SWKK00001.vpk,None,None,None,None,None,1588341793,None,None,VPK,None,True +PCSF00092,History Deleter,KanadeEngel,https://raw.githubusercontent.com/KanadeEngel/PS-Vita/master/history_deleter/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PCSF00092_icon0.png,https://raw.githubusercontent.com/KanadeEngel/PS-Vita/master/history_deleter/History_Deleter_reboot_v2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PCSF00092.vpk,None,None,https://github.com/KanadeEngel/PS-Vita.git,None,1588341792,None,None,VPK,None,True +ADRINSTAL,Adrenaline EasyInstaller,Freakler,https://raw.githubusercontent.com/Freakler/vita-AdrenalineEasyInstaller/master/livearea/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ADRINSTAL_icon0.png,https://github.com/Freakler/vita-AdrenalineEasyInstaller/releases/download/v1.15/AdrenalineEasyInstaller_v115.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ADRINSTAL.vpk,https://raw.githubusercontent.com/Freakler/vita-AdrenalineEasyInstaller/master/README.md,None,https://github.com/Freakler/vita-AdrenalineEasyInstaller.git,None,1588341791,None,None,VPK,None,True +SKOG10043,CATSFC-libretro-vita,Malachi & skogaby,https://raw.githubusercontent.com/skogaby/CATSFC-libretro/master/vpk/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SKOG10043_icon0.png,https://github.com/skogaby/CATSFC-libretro/releases/download/1.3.0/CATSFC-libretro-vita-1.3.0.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKOG10043.vpk,https://raw.githubusercontent.com/skogaby/CATSFC-libretro/master/README.md,None,https://github.com/skogaby/CATSFC-libretro.git,None,1588341790,None,None,VPK,None,True +VITACAST0,VITA Forecast,joel16,https://raw.githubusercontent.com/joel16/VITAforecast/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITACAST0_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITACAST0.vpk,None,https://raw.githubusercontent.com/joel16/VITAforecast/master/README.md,None,https://github.com/joel16/VITAforecast.git,None,1588341789,None,None,VPK,None,True +OBJL00001,Vita Object Loader,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OBJL00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=223,https://dl.coolatoms.org/vitadb/Vita Object Loader.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OBJL00001.vpk,None,None,None,None,1588341788,None,None,VPK,None,True +CLEM00001,luaVitaSeccy,Clem,https://raw.githubusercontent.com/eleriaqueen/luaVitaSeccy/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CLEM00001_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CLEM00001.vpk,None,https://raw.githubusercontent.com/eleriaqueen/luaVitaSeccy/master/README.md,None,https://github.com/eleriaqueen/luaVitaSeccy.git,None,1588341787,None,None,VPK,None,True +ARKSFLASH,Flash Light,Arkanite,https://raw.githubusercontent.com/theheroGAC/flashlight/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARKSFLASH_icon0.png,https://github.com/theheroGAC/flashlight/releases/download/v1.0/flashlight.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARKSFLASH.vpk,https://raw.githubusercontent.com/theheroGAC/flashlight/master/README.md,None,https://github.com/theheroGAC/flashlight.git,None,1588341786,None,None,VPK,None,True +VPKSOURCE,Better Browser Dowloader,THEN00P,https://raw.githubusercontent.com/THEN00P/Better-Browser-Downloader/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VPKSOURCE_icon0.png,https://github.com/THEN00P/Better-Browser-Downloader/releases/download/0.95/BetterBrowserDownloader.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VPKSOURCE.vpk,https://raw.githubusercontent.com/THEN00P/Better-Browser-Downloader/master/README.md,None,https://github.com/THEN00P/Better-Browser-Downloader.git,None,1588341785,None,None,VPK,None,True +ACTPSVITA,System Check Enabled,Draqen,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ACTPSVITA_icon0.png,None,http://aldezo.bplaced.net/SystemCheckEnabled.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACTPSVITA.vpk,None,None,None,None,1588341784,None,None,VPK,None,True +BOUT00002,blockout2,bomblik,https://raw.githubusercontent.com/bomblik/BlockOut_II_PSVITA/master/BlockOut/psvita/sce_sys/icon0_14.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BOUT00002_icon0.png,https://github.com/bomblik/BlockOut_II_PSVITA/releases/download/BlockOut_II_PSVITA_2.5/BlockOut_II.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BOUT00002.vpk,https://raw.githubusercontent.com/bomblik/BlockOut_II_PSVITA/master/README.md,None,https://github.com/bomblik/BlockOut_II_PSVITA.git,None,1588341783,None,None,VPK,None,True +ROBB00001,gnurobbo,bomblik,https://raw.githubusercontent.com/bomblik/GNU_Robbo_PSVITA_PSP/master/psvita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ROBB00001_icon0.png,https://github.com/bomblik/GNU_Robbo_PSVITA_PSP/releases/download/GNU_Robbo_0.68_PSVITA/gnurobbo_0.68.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ROBB00001.vpk,https://raw.githubusercontent.com/bomblik/GNU_Robbo_PSVITA_PSP/master/README.md,None,https://github.com/bomblik/GNU_Robbo_PSVITA_PSP.git,None,1588341782,None,None,VPK,None,True +CLON00001,Clonage Bulle ePSP,Markus95,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CLON00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CLON00001.vpk,None,None,None,None,None,1588341781,None,None,VPK,None,True +PSVIDENT0,PSVident,Freakler,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSVIDENT0_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSVIDENT0.vpk,None,None,None,https://github.com/Freakler/vita-PSVident.git,None,1588341779,None,None,VPK,None,True +PS4LINKM1,ReLink,theorywrong,https://raw.githubusercontent.com/theorywrong/ps4relink/master/resource/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PS4LINKM1_icon0.png,https://github.com/theorywrong/ps4relink/releases/download/1.0/ReLink.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PS4LINKM1.vpk,https://raw.githubusercontent.com/theorywrong/ps4relink/master/README.md,None,https://github.com/theorywrong/ps4relink.git,None,1588341778,None,None,VPK,None,True +VRST00001,Restart,devnoname120,https://raw.githubusercontent.com/devnoname120/vita-restart/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VRST00001_icon0.png,https://github.com/devnoname120/vita-restart/releases/download/0.10/vita-restart.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VRST00001.vpk,None,None,https://github.com/devnoname120/vita-restart.git,None,1588341777,None,None,VPK,None,True +GAUT16912,qrdecoder,linhtinh11,None,None,https://github.com/linhtinh11/vita_qrdecoder/releases/download/0.2.1/qrdecoder.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GAUT16912.vpk,None,None,https://github.com/linhtinh11/vita_qrdecoder.git,None,1588341776,None,None,VPK,None,True +STARKILL0,StarKiller2D,Freakler,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/STARKILL0_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/STARKILL0.vpk,None,None,None,None,None,1588341775,None,None,VPK,None,True +432100001,lua-gameoflife,domis4,https://raw.githubusercontent.com/domis4/lua-gameoflife/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/432100001_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/432100001.vpk,None,https://raw.githubusercontent.com/domis4/lua-gameoflife/master/README.md,None,https://github.com/domis4/lua-gameoflife.git,None,1588341774,None,None,VPK,None,True +KANA99999,Database Updater,KanadeEngel,https://raw.githubusercontent.com/KanadeEngel/PS-Vita/master/history_deleter/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/KANA99999_icon0.png,https://raw.githubusercontent.com/KanadeEngel/PS-Vita/master/database_updater/database_update_reboot.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/KANA99999.vpk,None,None,https://github.com/KanadeEngel/PS-Vita.git,None,1588341772,None,None,VPK,None,True +SWKK00001_01,SwitchKaKu,luck,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SWKK00001_01_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SWKK00001_01.vpk,None,None,None,None,None,1588341771,None,None,VPK,None,True +SYOBONCAT,OpenSyobon,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/OpenSyobon-Vita/master/builder/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SYOBONCAT_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=201,https://dl.coolatoms.org/vitadb/Homebrews/OpenSyobon.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SYOBONCAT.vpk,https://raw.githubusercontent.com/Rinnegatamante/OpenSyobon-Vita/master/README.md,None,https://github.com/Rinnegatamante/OpenSyobon-Vita.git,None,1588341770,None,None,VPK,None,True +XYZZ00001,button-swapper,xyzz,None,None,https://github.com/xyzz/vita-button-swapper/releases/download/1.0/button-swapper.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XYZZ00001.vpk,None,None,https://github.com/xyzz/vita-button-swapper.git,None,1588341769,None,None,VPK,None,True +EDUKE0032,EDuke32,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/EDuke32-Vita/master/platform/PSVita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/EDUKE0032_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=397,https://dl.coolatoms.org/vitadb/homebrew/EDuke32.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/EDUKE0032.vpk,None,None,https://github.com/Rinnegatamante/EDuke32-Vita.git,None,1588341768,None,None,VPK,3d7c217a,True +CRASHDUMP,Crash Dump Delete,Princess of Sleeping,None,None,https://github.com/Princess-of-Sleeping/Crash-Dump-Delete/releases/download/v1.1/Crash-Dump-Delete.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CRASHDUMP.vpk,https://raw.githubusercontent.com/Princess-of-Sleeping/Crash-Dump-Delete/master/README.md,None,https://github.com/Princess-of-Sleeping/Crash-Dump-Delete.git,None,1588341767,None,None,VPK,None,True +VITAMIN00,Vitamin,TheFloW,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITAMIN00_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITAMIN00.vpk,None,None,None,None,None,1588341766,None,None,VPK,None,True +TXTE00001,Simple Text Editor,jakibaki,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TXTE00001_icon0.png,None,https://www.dropbox.com/s/n7d51ww2i2a30hj/Simple%20Text%20Editor%201.1.1.vpk?dl=1,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TXTE00001.vpk,None,None,None,None,1588341764,None,None,VPK,None,True +ARIEL0005,Battery Indicator,Ruben_Wolfe,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARIEL0005_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARIEL0005.vpk,None,None,None,None,None,1588341763,None,None,VPK,None,True +ARIEL0004,VitaShell Theme Manager,Ruben_Wolfe,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARIEL0004_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARIEL0004.vpk,None,None,None,None,None,1588341762,None,None,VPK,None,True +MEMCRDSWP,memcardswap,NamelessGhoul0,https://raw.githubusercontent.com/SMOKE5/memcardswap/master/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MEMCRDSWP_icon0.png,https://github.com/SMOKE5/memcardswap/releases/download/v1.2/memcardswap.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MEMCRDSWP.vpk,https://raw.githubusercontent.com/SMOKE5/memcardswap/master/README.md,None,https://github.com/SMOKE5/memcardswap.git,None,1588341761,None,None,VPK,None,True +VITATLBOX,VitaToolbox,Orion,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITATLBOX_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITATLBOX.vpk,None,None,None,None,None,1588341760,None,None,VPK,None,True +VITAPONG0_01,vitapong,nyorem,https://raw.githubusercontent.com/nyorem/vitapong/master/pkg/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITAPONG0_01_icon0.png,https://github.com/nyorem/vitapong/releases/download/v1.0/vitapong.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITAPONG0_01.vpk,https://raw.githubusercontent.com/nyorem/vitapong/master/README.md,None,https://github.com/nyorem/vitapong.git,None,1588341758,None,None,VPK,None,True +FTP200001,FTPlaystation,Red7s,https://raw.githubusercontent.com/ItsDeidara/FTPlaystation/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FTP200001_icon0.png,https://github.com/ItsDeidara/FTPlaystation/releases/download/0.1/FTPlaystation.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FTP200001.vpk,https://raw.githubusercontent.com/ItsDeidara/FTPlaystation/master/README.md,None,https://github.com/ItsDeidara/FTPlaystation.git,None,1588341757,None,None,VPK,None,True +LIRC00001,luaIrc,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LIRC00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=51,https://dl.coolatoms.org/vitadb/Homebrews/luaIrc.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LIRC00001.vpk,None,None,None,None,1588341756,None,None,VPK,None,True +KSVN00001,Katawa Shoujo Demo,sudovim,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/KSVN00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/KSVN00001.vpk,None,None,None,None,None,1588341755,None,None,VPK,None,True +KETM00001,K.E.T.M.,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/K.E.T.M.-Vita/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/KETM00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=356,https://dl.coolatoms.org/vitadb/KETM.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/KETM00001.vpk,None,None,https://github.com/Rinnegatamante/K.E.T.M.-Vita.git,None,1588341754,None,None,VPK,None,True +SHTD00001,Shutdown,luck,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SHTD00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHTD00001.vpk,None,None,None,None,None,1588341753,None,None,VPK,None,True +RBTR00001,Reboot,luck,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RBTR00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RBTR00001.vpk,None,None,None,None,None,1588341752,None,None,VPK,None,True +WONR00001,tactic_miner,wonre,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/WONR00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WONR00001.vpk,None,None,None,None,None,1588341751,None,None,VPK,None,True +APPSRGMGR,Application Storage Manager,Lupo511,https://bitbucket.org/Lupo511/appstoragemanager/raw/master/VitaAppStorageManager/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/APPSRGMGR_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/APPSRGMGR.vpk,None,None,None,https://bitbucket.org/Lupo511/appstoragemanager.git,None,1588341750,None,None,VPK,None,True +VITATETRI,TetrisAttack,Flappy Jesus,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITATETRI_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITATETRI.vpk,None,None,None,None,None,1588341748,None,None,VPK,None,True +VAIH00001,vitaAirHockey,LaGaipaG,https://raw.githubusercontent.com/LaGaipaG/vitaAirHockey/master/source/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VAIH00001_icon0.png,https://raw.githubusercontent.com/LaGaipaG/vitaAirHockey/master/v0.2/vitaAirHockey_v0.2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VAIH00001.vpk,https://raw.githubusercontent.com/LaGaipaG/vitaAirHockey/master/README.md,None,https://github.com/LaGaipaG/vitaAirHockey.git,None,1588341747,None,None,VPK,None,True +VITATESTR,VitaTester,NamelessGhoul0,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITATESTR.vpk,None,https://raw.githubusercontent.com/NamelessGhoul0/VitaTester/master/README.md,None,https://github.com/NamelessGhoul0/VitaTester.git,None,1588341746,None,None,VPK,None,True +LPPV00001,Lua Player Plus Vita,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/LPPV00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=290,https://dl.coolatoms.org/vitadb/Lua Player Plus Vita.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/LPPV00001.vpk,https://raw.githubusercontent.com/Rinnegatamante/lpp-vita/master/README.md,None,https://github.com/Rinnegatamante/lpp-vita.git,None,1588341744,None,None,VPK,None,True +GRZB00003,Pingo,Grzybojad,https://raw.githubusercontent.com/Grzybojad/Pingo/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GRZB00003_icon0.png,https://github.com/Grzybojad/Pingo/releases/download/2.1/Pingo.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GRZB00003.vpk,https://raw.githubusercontent.com/Grzybojad/Pingo/master/README.md,None,https://github.com/Grzybojad/Pingo.git,None,1588341743,None,None,VPK,None,True +OCTO00000,G&Woctopus,JacobsPlayground,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/OCTO00000_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/OCTO00000.vpk,None,None,None,None,None,1588341742,None,None,VPK,None,True +ACTM00003,Vita Account Manager,windsurfer1122,https://raw.githubusercontent.com/windsurfer1122/Vita-Account-Manager/master/sce_sys/icon0_128x128_8bit.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ACTM00003_icon0.png,https://github.com/windsurfer1122/Vita-Account-Manager/releases/download/vita-account-manager-0.91/vita-account-manager-0.91.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ACTM00003.vpk,https://raw.githubusercontent.com/windsurfer1122/Vita-Account-Manager/master/README.md,None,https://github.com/windsurfer1122/Vita-Account-Manager.git,None,1588341741,None,None,VPK,None,True +WIDE87195,BrickRace,WIDECGC,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/WIDE87195_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WIDE87195.vpk,None,None,None,None,None,1588341740,None,None,VPK,None,True +DGSO12345,Dungeon Survivor,LuckTheGamers,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DGSO12345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DGSO12345.vpk,None,None,None,None,None,1588341739,None,None,VPK,None,True +JUMP55345,Jumping Guy,LuckTheGamers,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/JUMP55345_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/JUMP55345.vpk,None,None,None,None,None,1588341738,None,None,VPK,None,True +HIGURASHI,Higurashi When They Cry Hou,MyLegGuy,https://raw.githubusercontent.com/MyLegGuy/Higurashi-Vita/master/VpkContents-Primary/Vita/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HIGURASHI_icon0.png,https://github.com/MyLegGuy/Higurashi-Vita/releases/download/v2.9.4.1/Higurashi-Vita-v2.9.4.1.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HIGURASHI.vpk,https://raw.githubusercontent.com/MyLegGuy/Higurashi-Vita/master/README.txt,None,https://github.com/MyLegGuy/Higurashi-Vita.git,None,1588341737,None,None,VPK,None,True +RFLM32541,RunFromReality,LuckTheGamers,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RFLM32541_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RFLM32541.vpk,None,None,None,None,None,1588341736,None,None,VPK,None,True +PSMFIXER2,PSM Manager,Yoti,https://raw.githubusercontent.com/Yoti/psv_npdrmfix/master/nopsmdrm_fixer/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSMFIXER2_icon0.png,https://github.com/Yoti/psv_npdrmfix/releases/download/v2.1/PSM_Manager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSMFIXER2.vpk,https://raw.githubusercontent.com/Yoti/psv_npdrmfix/master/README.md,None,https://github.com/Yoti/psv_npdrmfix.git,None,1588341735,None,None,VPK,None,True +SOMO00002,Another_world,Enrique Somolinos Perez,https://raw.githubusercontent.com/enriquesomolinos/Another-World-Vita/master/pkg/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SOMO00002_icon0.png,https://github.com/enriquesomolinos/Another-World-Vita/releases/download/v0.2.1/Another_world.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SOMO00002.vpk,https://raw.githubusercontent.com/enriquesomolinos/Another-World-Vita/master/README.md,None,https://github.com/enriquesomolinos/Another-World-Vita.git,None,1588341732,None,None,VPK,None,True +PRINCEPER,Prince Of Persia,cpasjuste,https://raw.githubusercontent.com/Cpasjuste/SDLPoP/master/psp2/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PRINCEPER_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PRINCEPER.vpk,None,https://raw.githubusercontent.com/Cpasjuste/SDLPoP/master/README.md,None,https://github.com/Cpasjuste/SDLPoP.git,None,1588341731,None,None,VPK,None,True +VOPTIRYAN,vOpenTiryan,cpasjuste,https://raw.githubusercontent.com/Cpasjuste/vopentyrian/master/vita/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VOPTIRYAN_icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VOPTIRYAN.vpk,None,https://raw.githubusercontent.com/Cpasjuste/vopentyrian/master/README.MD,None,https://github.com/Cpasjuste/vopentyrian.git,None,1588341729,None,None,VPK,None,True +SOMO00001,REminiscence,Enrique Somolinos Perez,https://raw.githubusercontent.com/enriquesomolinos/REminiscence-Vita/master/pkg/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SOMO00001_icon0.png,https://github.com/enriquesomolinos/REminiscence-Vita/releases/download/v0.4.2/REminiscence-0.4.2.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SOMO00001.vpk,https://raw.githubusercontent.com/enriquesomolinos/REminiscence-Vita/master/README.md,None,https://github.com/enriquesomolinos/REminiscence-Vita.git,None,1588341728,None,None,VPK,None,True +VPAD00001,VitaPad,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/VitaPad/master/Server/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VPAD00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=50,https://dl.coolatoms.org/vitadb/Homebrews/VitaPad.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VPAD00001.vpk,https://raw.githubusercontent.com/Rinnegatamante/VitaPad/master/README.md,None,https://github.com/Rinnegatamante/VitaPad.git,None,1588341727,None,None,VPK,None,True +BTLSHPARN,BattleShipArena,DesiRED,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BTLSHPARN_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BTLSHPARN.vpk,None,None,None,None,None,1588341726,None,None,VPK,None,True +DOGGYTEST,doggytwicevt,LeeStorm,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DOGGYTEST_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DOGGYTEST.vpk,None,None,None,None,None,1588341725,None,None,VPK,None,True +FRAN00002,HandyVITA,frangarcj,https://raw.githubusercontent.com/frangarcj/HandyVITA/master/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FRAN00002_icon0.png,https://github.com/frangarcj/HandyVITA/releases/download/1.4-Henkaku/HandyVITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRAN00002.vpk,https://raw.githubusercontent.com/frangarcj/HandyVITA/master/README.md,None,https://github.com/frangarcj/HandyVITA.git,None,1588341724,None,None,VPK,None,True +FRAN00001,SMSPlusVITA,frangarcj,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FRAN00001_icon0.png,None,https://github.com/frangarcj/SMSplusVITA/releases/download/1.3.1-Henkaku/smsplusvita.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRAN00001.vpk,https://raw.githubusercontent.com/frangarcj/SMSplusVITA/master/README.md,None,https://github.com/frangarcj/SMSplusVITA.git,None,1588341723,None,None,VPK,None,True +SKOG00001,Snes9xVITA,skogaby & frangarcj,None,None,https://github.com/frangarcj/Snes9xVITA/releases/download/1.1-Henkaku/Snes9xVITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SKOG00001.vpk,https://raw.githubusercontent.com/frangarcj/Snes9xVITA/master/README.md,None,https://github.com/frangarcj/Snes9xVITA.git,None,1588341722,None,None,VPK,None,True +XXXX35570,Whitelist,Kankertje,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/XXXX35570_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XXXX35570.vpk,None,None,None,None,None,1588341720,None,None,VPK,None,True +REGEDIT01_01,RegistryEditor,some1,None,None,https://github.com/some1psv/RegistryEditor/releases/download/v1.0/RegistryEditor.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/REGEDIT01_01.vpk,https://raw.githubusercontent.com/some1psv/RegistryEditor/master/README.md,None,https://github.com/some1psv/RegistryEditor.git,None,1588341719,None,None,VPK,None,True +SUDO00001,VitaSudoku,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SUDO00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=129,https://dl.coolatoms.org/vitadb/Homebrews/VitaSudoku.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SUDO00001.vpk,None,None,None,None,1588341718,None,None,VPK,None,True +URI000001,uriCaller,Freakler,https://raw.githubusercontent.com/Freakler/vita-uriCaller/master/resource/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/URI000001_icon0.png,https://github.com/Freakler/vita-uriCaller/releases/download/0.1/uriCaller.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/URI000001.vpk,https://raw.githubusercontent.com/Freakler/vita-uriCaller/master/README.md,None,https://github.com/Freakler/vita-uriCaller.git,None,1588341717,None,None,VPK,None,True +HOTA00001,HOTA,usineur,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/HOTA00001_icon0.png,None,https://github.com/usineur/hota/releases/download/vita-1.0/HOTA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/HOTA00001.vpk,https://raw.githubusercontent.com/usineur/hota/master/README.md,None,https://github.com/usineur/hota.git,None,1588341716,None,None,VPK,None,True +CHICKENS2,Chicken Launcher,crait,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CHICKENS2_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CHICKENS2.vpk,None,None,None,None,None,1588341715,None,None,VPK,None,True +TQUE00001,TextQuest,joshaxey,https://raw.githubusercontent.com/joshaxey/textquest/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TQUE00001_icon0.png,https://github.com/lottehime/textquest/releases/download/1.0/TextQuest.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TQUE00001.vpk,https://raw.githubusercontent.com/joshaxey/textquest/master/README.md,None,https://github.com/joshaxey/textquest.git,None,1588341714,None,None,VPK,None,True +MINESWEEP,Minesweeper,LeeStorm,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MINESWEEP_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MINESWEEP.vpk,None,None,None,None,None,1588341713,None,None,VPK,None,True +SPIDERCAR,SpiderVita,LeeStorm,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SPIDERCAR_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SPIDERCAR.vpk,None,None,None,None,None,1588341712,None,None,VPK,None,True +SHC100001,Super Hero Chronicles,thesuicidalrobot,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/SHC100001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SHC100001.vpk,None,None,None,None,None,1588341711,None,None,VPK,None,True +FLPP00001,flppy bird,gambikules,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FLPP00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FLPP00001.vpk,None,None,None,None,None,1588341710,None,None,VPK,None,True +KUNI00002,sudokucpp,Kuni59,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/KUNI00002_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/KUNI00002.vpk,None,None,None,http://www.mediafire.com/file/wu7ptl6t57wo5tl/SudokuCPP.rar,None,1588341709,None,None,VPK,None,True +FRAN00003,GenesisPlusGXVITA,frangarcj,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FRAN00003_icon0.png,None,https://github.com/frangarcj/Genesis-Plus-GX/releases/download/1.7.5-RC-Henkaku/GenesisPlusGXVITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRAN00003.vpk,https://raw.githubusercontent.com/frangarcj/Genesis-Plus-GX/master/README.md,None,https://github.com/frangarcj/Genesis-Plus-GX.git,None,1588341707,None,None,VPK,None,True +BREW00001,ReversMe,TheFloW,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/BREW00001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/BREW00001.vpk,None,None,None,https://drive.google.com/file/d/0B8d0Wy4mDFrGM0k0YW9Xd01qS2M/view,None,1588341706,None,None,VPK,None,True +DSEMU0000,DeSmuME,MasterFeizz,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/DSEMU0000_icon0.png,None,https://github.com/masterfeizz/DeSmuME-Vita/releases/download/v0.2/desmume.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/DSEMU0000.vpk,https://raw.githubusercontent.com/masterfeizz/DeSmuME-Vita/master/README.md,None,https://github.com/masterfeizz/DeSmuME-Vita.git,None,1588341705,None,None,VPK,None,True +FRAN00004,NeopopVITA,frangarcj,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/FRAN00004_icon0.png,None,https://github.com/frangarcj/NeopopVITA/releases/download/0.71.15-Henkaku/NeopopVITA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/FRAN00004.vpk,https://raw.githubusercontent.com/frangarcj/NeopopVITA/master/README.md,None,https://github.com/frangarcj/NeopopVITA.git,None,1588341704,None,None,VPK,None,True +RTST00010,Homebrew Downloader,D5C85B13876B8,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/RTST00010_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/RTST00010.vpk,None,None,None,https://github.com/D5C85B13876B8/hbb.git,None,1588341703,None,None,VPK,None,True +NLTK00001,VITAPluginsManager,NeoLTK,https://raw.githubusercontent.com/NeoLTK/VITAPluginsManager/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/NLTK00001_icon0.png,https://github.com/NeoLTK/VITAPluginsManager/releases/download/0.6/VITAPluginsManager.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/NLTK00001.vpk,https://raw.githubusercontent.com/NeoLTK/VITAPluginsManager/master/readme.txt,None,https://github.com/NeoLTK/VITAPluginsManager.git,None,1588341702,None,None,VPK,None,True +TEMA00001,TEMA,Mithrenes,https://raw.githubusercontent.com/Mithrenes/TEMA/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/TEMA00001_icon0.png,https://github.com/Mithrenes/TEMA/releases/download/v1.5/TEMA.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/TEMA00001.vpk,None,None,https://github.com/Mithrenes/TEMA.git,None,1588341701,None,None,VPK,None,True +PSP2PUP00,PUP-Extractor,Princess of Sleeping,None,None,https://github.com/Princess-of-Sleeping/PSV-PUP-Extractor/releases/download/1.3/PUP-Extractor.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSP2PUP00.vpk,https://raw.githubusercontent.com/Princess-of-Sleeping/PSV-PUP-Extractor/master/README.md,None,https://github.com/Princess-of-Sleeping/PSV-PUP-Extractor.git,None,1588341700,None,None,VPK,None,True +VITACALCI,Calculator,Flappy Jesus,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/VITACALCI_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/VITACALCI.vpk,None,None,None,None,None,1588341699,None,None,VPK,None,True +MAIM00001,MaiDumpTool,LioMajor,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/MAIM00001_icon0.png,None,https://github.com/LioMajor/MaiDumpToolEN/releases/download/V233.2zEx_eng/MaiDumpTool_V233.2zEx_eng.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/MAIM00001.vpk,https://raw.githubusercontent.com/LioMajor/MaiDumpToolEN/master/README.md,None,https://github.com/LioMajor/MaiDumpToolEN.git,None,1588341698,None,None,VPK,None,True +PSVIBE001,PSVibe,NamelessGhoul0,https://raw.githubusercontent.com/NamelessGhoul0/PSVibe/master/res/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PSVIBE001_icon0.png,https://github.com/NamelessGhoul0/PSVibe/releases/download/v2-final/PSVibe.v2-final.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PSVIBE001.vpk,https://raw.githubusercontent.com/NamelessGhoul0/PSVibe/master/README.md,None,https://github.com/NamelessGhoul0/PSVibe.git,None,1588341697,None,None,VPK,None,True +CRFT00001,Minicraft,Rinnegatamante,https://raw.githubusercontent.com/Rinnegatamante/MinicraftVita/master/build/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/CRFT00001_icon0.png,https://vitadb.rinnegatamante.it/get_hb_url.php?id=24,https://dl.coolatoms.org/vitadb/Homebrews/Minicraft.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/CRFT00001.vpk,https://raw.githubusercontent.com/Rinnegatamante/MinicraftVita/master/README.md,None,https://github.com/Rinnegatamante/MinicraftVita.git,None,1588341696,None,None,VPK,None,True +WNTD00001,vitaWanted,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/WNTD00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=19,https://dl.coolatoms.org/vitadb/Homebrews/vitaWanted.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/WNTD00001.vpk,None,None,None,None,1588341695,None,None,VPK,None,True +ARIEL0001,RejuveSnake,Ruben_Wolfe,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARIEL0001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARIEL0001.vpk,None,None,None,None,None,1588341694,None,None,VPK,None,True +GBOT00001,milieTetris,GUIDOBOT,https://raw.githubusercontent.com/GUIDOBOT/milieTetris/master/sce_sys/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GBOT00001_icon0.png,https://raw.githubusercontent.com/GUIDOBOT/milieTetris/master/release/milieTetris1.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GBOT00001.vpk,None,None,https://github.com/GUIDOBOT/milieTetris.git,None,1588341693,None,None,VPK,None,True +ROWS00001,4Rows,Rinnegatamante,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ROWS00001_icon0.png,None,https://vitadb.rinnegatamante.it/get_hb_url.php?id=65,https://dl.coolatoms.org/vitadb/4Rows.vpk|https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ROWS00001.vpk,None,None,None,None,1588341692,None,None,VPK,None,True +XERP00003,realboy,xerpi,https://raw.githubusercontent.com/xerpi/realboy-vita/master/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/XERP00003_icon0.png,https://github.com/xerpi/realboy-vita/releases/download/1.2/realboy.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/XERP00003.vpk,https://raw.githubusercontent.com/xerpi/realboy-vita/master/README,None,https://github.com/xerpi/realboy-vita.git,None,1588341691,None,None,VPK,None,True +PRIMER001,Procedural Planets,Primer0 & Ruben_Wolfe,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/PRIMER001_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/PRIMER001.vpk,None,None,None,https://drive.google.com/file/d/0B4QqovA_rXzGT3I3ZUdpTnJtc2s/view,None,1588341689,None,None,VPK,None,True +SCRENFLSH,VitaScreenFlasher,NamelessGhoul0,None,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/SCRENFLSH.vpk,None,https://raw.githubusercontent.com/NamelessGhoul0/VitaScreenFlasher/master/README.md,None,https://github.com/NamelessGhoul0/VitaScreenFlasher.git,None,1588341688,None,None,VPK,None,True +ARIEL0002,Game of life,Ruben_Wolfe,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ARIEL0002_icon0.png,None,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ARIEL0002.vpk,None,None,None,None,None,1588341687,None,None,VPK,None,True +GS0100001,Moon Whitelister,gnmmarechal,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/GS0100001_icon0.png,None,https://github.com/gnmmarechal/moon-whitelister/releases/download/v1.0c/MoonWhitelisterv1.0c.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/GS0100001.vpk,https://raw.githubusercontent.com/gnmmarechal/moon-whitelister/master/README.md,None,https://github.com/gnmmarechal/moon-whitelister.git,None,1588341686,None,None,VPK,None,True +ERPG00001,EasyRPG Player,EasyRPG Team & Rinnegatamante,https://raw.githubusercontent.com/EasyRPG/Player/master/builds/psvita/vpk_builder/assets/icon0.png,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/ERPG00001_icon0.png,https://ci.easyrpg.org/job/player-vita/lastSuccessfulBuild/artifact/builds/psvita/EasyRPG.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/ERPG00001.vpk,https://raw.githubusercontent.com/EasyRPG/Player/master/README.md,None,https://github.com/EasyRPG/Player.git,None,1588341685,None,None,VPK,None,True +AF1A00001,VitaGraphs,Creckeryop,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/icon0/AF1A00001_icon0.png,None,https://github.com/Creckeryop/VitaGraphs/releases/download/0010/VitaGraphs.vpk,https://gitlab.com/SilicaAndPina/cbpsdb/-/raw/master/vpk/AF1A00001.vpk,https://raw.githubusercontent.com/Creckeryop/VitaGraphs/master/README.md,None,https://github.com/Creckeryop/VitaGraphs.git,None,1588341684,None,None,VPK,None,True +BULLY0000,bully_vita,TheFl0w,https://raw.githubusercontent.com/TheOfficialFloW/bully_vita/master/sce_sys/icon0.png,None,https://github.com/TheOfficialFloW/bully_vita/releases/download/v1.0/Bully.vpk,None,https://raw.githubusercontent.com/TheOfficialFloW/bully_vita/master/README.md,None,https://github.com/TheOfficialFloW/bully_vita.git,none,1623634291,None,None,VPK,None,True +BC2000000,bc2_vita,TheFl0w,https://raw.githubusercontent.com/TheOfficialFloW/bc2_vita/master/sce_sys/icon0.png,None,https://github.com/TheOfficialFloW/bc2_vita/releases/download/v1.0/BC2.vpk,None,https://raw.githubusercontent.com/TheOfficialFloW/bc2_vita/master/README.md,None,https://github.com/TheOfficialFloW/bc2_vita.git,None,1627858605,None,None,VPK,None,True diff --git a/check_exists.php b/check_exists.php new file mode 100644 index 0000000..0495dc5 --- /dev/null +++ b/check_exists.php @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/common.js b/common.js new file mode 100644 index 0000000..cf9a4df --- /dev/null +++ b/common.js @@ -0,0 +1,18 @@ +window.hasErrored = [] +function on_error(elem,id,plugins) +{ + if(window.hasErrored.indexOf("id") == -1) + elem.src = "getimage.php?id="+id; + else + if(plugins == 0) + elem.src = "/img/app_default.png"; + else + elem.src="/img/plugin_default.png"; + + window.hasErrored = window.hasErrored.concat(id); +} + +function open_url(url) +{ + window.location = url; +} \ No newline at end of file diff --git a/common.php b/common.php index 625a2eb..3e03b54 100644 --- a/common.php +++ b/common.php @@ -1,78 +1,78 @@ - ($csvTime + 600)) - { - $csvData = file_get_contents("https://raw.githubusercontent.com/git-username/git-repo/master/cbpsdb.csv"); - if(strcmp($http_response_header[0],"HTTP/1.1 200 OK" == 0)) - file_put_contents("cbpsdb.csv",$csvData); - } -} - - -function isAvalible(string $url) -{ - $headers = get_headers($url); - if((strstr($headers[0],"200 OK") !== False) || (strstr($headers[0],"302 Found") !== False)) - { - return true; - } - else - { - return false; - } -} - -function get_list(string $list){ - $listStr = str_replace("||",".-!-PIPE-!-.",$list); - $listContents = explode("|",$list); - for($i = 0; $i >= count($listContents); $i++) { - $listContents[$i] = str_replace(".-!-PIPE-!-.","|",$listContents[$i]); - } - return $listContents; -} - - -function get_readme(array $entry){ - if(isAvalible($entry[DOWNLOAD_README])) - { - return $entry[DOWNLOAD_README]; - } - else - { - $arr = get_list($entry[DOWNLOAD_README_MIRROR]); - foreach($arr as &$itm) - { - if(isAvalible($itm) == true) - { - return $itm; - } - } - } -} - -?> - + ($csvTime + 600)) + { + $csvData = file_get_contents("https://raw.githubusercontent.com/git-username/git-repo/master/cbpsdb.csv"); + if(strcmp($http_response_header[0],"HTTP/1.1 200 OK" == 0)) + file_put_contents("cbpsdb.csv",$csvData); + } +} + + +function isAvalible(string $url) +{ + $headers = get_headers($url); + if((strstr($headers[0],"200 OK") !== False) || (strstr($headers[0],"302 Found") !== False)) + { + return true; + } + else + { + return false; + } +} + +function get_list(string $list){ + $listStr = str_replace("||",".-!-PIPE-!-.",$list); + $listContents = explode("|",$list); + for($i = 0; $i >= count($listContents); $i++) { + $listContents[$i] = str_replace(".-!-PIPE-!-.","|",$listContents[$i]); + } + return $listContents; +} + + +function get_readme(array $entry){ + if(isAvalible($entry[DOWNLOAD_README])) + { + return $entry[DOWNLOAD_README]; + } + else + { + $arr = get_list($entry[DOWNLOAD_README_MIRROR]); + foreach($arr as &$itm) + { + if(isAvalible($itm) == true) + { + return $itm; + } + } + } +} + +?> + diff --git a/create_pr.py b/create_pr.py new file mode 100644 index 0000000..ae631c0 --- /dev/null +++ b/create_pr.py @@ -0,0 +1,109 @@ +import requests +from lxml import html +import sys + +LOGIN_USERNAME = "PLACEHOLDER" +LOGIN_PASSWORD = "PLACEHOLDER" + +REPO_OWNER = "git-username" +MERGE_WITH_MASTER = sys.argv[1] +MASTER_BRANCH = "master" + +header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36;", + "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", + "Accept-Encoding":"gzip, deflate, br", + "Accept-Language":"en-GB,en;q=0.9,ja;q=0.8"} + +githubSession = requests.Session() + +loginPageRequest = githubSession.get("https://github.com/login",headers=header); + +htmlTree = html.fromstring(loginPageRequest.text) +timestamp = htmlTree.xpath('//*[@id="login"]/form/div[4]/input[7]')[0].get('value') +timestamp_secret = htmlTree.xpath('//*[@id="login"]/form/div[4]/input[8]')[0].get('value') +authenticity_token = htmlTree.xpath('//*[@id="login"]/form/input[1]')[0].get('value') +required_feild = htmlTree.xpath('//*[@id="login"]/form/div[4]/input[6]')[0].get('name') + +#print(timestamp) +#print(timestamp_secret) +#print(authenticity_token) +#print(required_feild) + +postdata = {"commit":"Sign+In", + "authenticity_token":authenticity_token, + "ga_id":"", + "login":LOGIN_USERNAME, + "password":LOGIN_PASSWORD, + "webauthn-support":"supported", + "webauthn-iuvpaa-support":"unsupported", + "return_to":"", + required_feild:"", + "timestamp":timestamp, + "timestamp_secret":timestamp_secret} + + +postreq = githubSession.post("https://github.com/session",headers=header,data=postdata) +#print(postreq.status_code) + +pullRequestPageRequest = githubSession.get('https://github.com/git-username/git-repo/pull/new/'+MERGE_WITH_MASTER,headers=header) + +print("abc") +##print(pullRequestPageRequest.status_code) + +htmlTree = html.fromstring(pullRequestPageRequest.text) +authenticity_token = htmlTree.xpath('//*[@id="new_pull_request"]/input[1]')[0].get('value') +timestamp = htmlTree.xpath('//*[@id="new_pull_request"]/div/div[1]/div/div[2]/input[2]').get('value') +timestamp_secret = htmlTree.xpath('//*[@id="new_pull_request"]/div/div[1]/div/div[1]/input[3]')[0].get('value') +required_feild = htmlTree.xpath('//*[@id="new_pull_request"]/div/div[1]/div/div[1]/input[1]')[0].get('name') + +#print(timestamp) +#print(timestamp_secret) +#print(authenticity_token) +#print(required_feild) + +postdata = {"authenticity_token":authenticity_token, + "pull_request[title]":sys.argv[2], + "saved_reply_id":"", + "pull_request[body]":sys.argv[3], + "path":"", + "line":"", + "start_line":"", + "preview_side":"", + "preview_start_side":"", + "start_commit_oid":"", + "end_commit_oid":"", + "base_commit_oid":"", + "comment_id":"", + required_feild:"", + "timestamp":timestamp, + "timestamp_secret":timestamp_secret, + "draft":"off", + "quick_pull":""} + +pullRequestRequest = githubSession.post('https://github.com/git-username/git-repo/pull/create?base='+REPO_OWNER+':'+MASTER_BRANCH+'&head='+REPO_OWNER+':'+MERGE_WITH_MASTER,data=postdata,headers=header) + +#print(pullRequestRequest.status_code) + +githubHomePageRequest = githubSession.get("http://github.com",headers=header); +#print(githubHomePageRequest.status_code) + +htmlTree = html.fromstring(githubHomePageRequest.text) +authenticity_token = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[1]')[0].get('value') +timestamp = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[3]')[0].get('value') +timestamp_secret = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[4]')[0].get('value') +required_feild = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[2]')[0].get('name') + +#print(timestamp) +#print(timestamp_secret) +#print(authenticity_token) +#print(required_feild) + +postdata = {"authenticity_token":authenticity_token, + required_feild:"", + "timestamp":timestamp, + "timestamp_secret":timestamp_secret} + +logoutRequest = githubSession.get("https://github.com/logout",headers=header,data=postdata) +#print(logoutRequest.status_code) + +print(pullRequestRequest.url) \ No newline at end of file diff --git a/dbparser.php b/dbparser.php new file mode 100644 index 0000000..90009f3 --- /dev/null +++ b/dbparser.php @@ -0,0 +1,102 @@ + \ No newline at end of file diff --git a/edit_entry.php b/edit_entry.php new file mode 100644 index 0000000..e581bb5 --- /dev/null +++ b/edit_entry.php @@ -0,0 +1,595 @@ + + + + + +'); + echo('
'); + echo('Edit '.htmlspecialchars($_GET['id'],ENT_QUOTES).'
'); + echo(''); + + $entry_id = $_GET['id']; + $csv = get_csv_entry($entry_id); + if($csv == NULL){ + echo("Invalid ID"); + exit(); + } + + echo(''); + + echo(' +
+
+ +

One last thing.. you arent a robot now.. are you?

+
+ + + + + + + + + + + + +
+
+
+
+ + +
+ Waiting for input... +
+
+
'); + + + if(strcmp($csv[TYPE],"PLUGIN") == 0) + { + if(strcmp($csv[CONFIG_TYPE],"TAI") == 0) + { + echo('
+
+ +

+ + + + +

+
+ + + +
+ Waiting for input... +

+
'); + } + else + { + echo('
+
+ +

+ + +
+ + +
+ Changes not saved! +
+
'); + } + + } + else + { + echo('
+

Enter DIRECT Download URL to icon0.png file:

+
+ +
+ +
+
'); + } + echo(' +
+

Please enter the TITLE shown on the PSVita LiveArea Screen below.

+

If its a plugin, enter the name of the plugin.

+ +
+ +
+
+
+

Enter DIRECT download url...

+
+ +
+ +
+
+

Please enter the DIRECT URL to the readme file below:

+ +
+ +
+
+
+

Enter the developer who wrote this application:

+ +
+ +
+
+ +
+
+ +

+ + + + +

+
+ + + +
+ Waiting for input... +

+
+ + +
+

Please enter the URL to download this softwares Src Code or a GIT Repository

+

If using Github, its what you get from the "Clone or Download" button

+

ex: https://github.com/TheOfficialFloW/VitaShell.git

+
+ +
+
+ '); + + echo('


+
'); + echo('
+ + + '); +} +else +{ + include("list_releases.php"); + list_entries("EDIT"); +} +?> + + + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..10694d90b3a723dd4b239446f5b8571a4791a36d GIT binary patch literal 102297 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%0DKrjRtm{2Cnw-#9)PIh?p#J4VN>

yXaHvUgB2!Q863ytyhf^(>88=`|FJ^ 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 uAqS?PRedirecting."); + header("Referrer-Policy: no-referrer"); /*Bypass rin firewall*/ + header("Location: ".$download); +} + +?> \ No newline at end of file diff --git a/getimage.php b/getimage.php new file mode 100644 index 0000000..2050f39 --- /dev/null +++ b/getimage.php @@ -0,0 +1,12 @@ +Redirecting."); + header("Location: ".$icon); +} + +?> \ No newline at end of file diff --git a/git/add_entry.php b/git/add_entry.php new file mode 100644 index 0000000..843f70a --- /dev/null +++ b/git/add_entry.php @@ -0,0 +1,112 @@ + 'YOUR_RECAPTCHA_BACKEND_KEY_HERE', + 'response' => $_POST["g-recaptcha-response"] + ); + $options = array( + 'http' => array ( + 'method' => 'POST', + 'content' => http_build_query($data) + ) + ); + $context = stream_context_create($options); + $verify = file_get_contents($url, false, $context); + $captcha_success=json_decode($verify); + if ($captcha_success->success==false) { + echo "Recaptcha was not solved successfully."; + die(); + } else if ($captcha_success->success==true) { + if(strcmp($captcha_success->hostname,"cbps-db.gt.tc") !== 0) + { + echo("Recaptcha returned incorrect hostname."); + die(); + } + } +} +else +{ + echo("No recaptcha response data sent."); + die(); +} + +exec("sh get_latest.sh"); + +$branch_no = "add-entry-".(string)rand(); + +$csvdata = file_get_contents("cbps-db/cbpsdb.csv"); + +$id = "None"; +$title = "None"; +$credits = "None"; +$type = "None"; +$scope = "None"; +$download_icon0 = "None"; +$download_url = "None"; +$download_readme = "None"; +$download_src = "None"; +$config_type = "None"; + + +if(isset($_POST['id'])) + $id = $_POST['id']; +if(isset($_POST['title'])) + $title = $_POST['title']; +if(isset($_POST['credits'])) + $credits = $_POST['credits']; +if(isset($_POST['type'])) + $type = $_POST['type']; +if(isset($_POST['scope'])) + $scope = $_POST['scope']; +if(isset($_POST['config_type'])) + $config_type = $_POST['config_type']; +if(isset($_POST['download_icon0'])) + $download_icon0 = $_POST['download_icon0']; +if(isset($_POST['download_url'])) + $download_url = $_POST['download_url']; +if(isset($_POST['download_readme'])) + $download_readme = $_POST['download_readme']; +if(isset($_POST['download_src'])) + $download_src = $_POST['download_src']; + + + +$existing_tids = (array)null; + +$csvEntries = explode("\n",$csvdata); +foreach($csvEntries as &$Entry){ + $csv = explode(',',$Entry); + array_push($existing_tids,$csv[ID]); +} + +$warn_user_might_be_idot = false; + +$i = 1; +$nId = $id; +while(in_array($nId,$existing_tids)) +{ + $warn_user_might_be_idot = true; + $nId = $id."_".sprintf("%02d", $i); + $i += 1; +} +$id = $nId; + +$csvdata .= $id.",".$title.",".$credits.",".$download_icon0.",None,".$download_url.",None,".$download_readme.",None,".$download_src.",None,".(string)(time()).",".$config_type.",".$scope.",".$type.",None,True\n"; + +file_put_contents("cbps-db/cbpsdb.csv",$csvdata); +sort_newest_csv("cbps-db/cbpsdb.csv"); +exec("sh push_latest.sh \"".$branch_no."\""); +$prepend = ""; +if($warn_user_might_be_idot) +{ + $prepend .= "Warning: titleid was found in DB already. User is possibly an idiot. "; +} +header("Location: ".exec("python3 create_pr.py ".escapeshellarg($branch_no)." ".escapeshellarg('Add '.$title)." ".escapeshellarg($prepend." ".$id."\t".$title." ".$credits." ".$download_icon0." None ".$download_url." None ".$download_readme." None ".$download_src." None ".(string)(time())." ".$config_type." ".$scope." ".$type." None True"))); + +?> \ No newline at end of file diff --git a/git/create_pr.py b/git/create_pr.py new file mode 100644 index 0000000..be31501 --- /dev/null +++ b/git/create_pr.py @@ -0,0 +1,105 @@ +import requests +from lxml import html +import sys + +import secrets + +REPO_OWNER = "git-username" +MERGE_WITH_MASTER = sys.argv[1] +MASTER_BRANCH = "master" + +header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36;", + "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", + "Accept-Encoding":"gzip, deflate, br", + "Accept-Language":"en-GB,en;q=0.9,ja;q=0.8"} + +githubSession = requests.Session() + +loginPageRequest = githubSession.get("https://github.com/login",headers=header); + +htmlTree = html.fromstring(loginPageRequest.text) +timestamp = htmlTree.xpath('//*[@id="login"]/form/div[4]/input[7]')[0].get('value') +timestamp_secret = htmlTree.xpath('//*[@id="login"]/form/div[4]/input[8]')[0].get('value') +authenticity_token = htmlTree.xpath('//*[@id="login"]/form/input[1]')[0].get('value') +required_feild = htmlTree.xpath('//*[@id="login"]/form/div[4]/input[6]')[0].get('name') + +#print(timestamp) +#print(timestamp_secret) +#print(authenticity_token) +#print(required_feild) + +postdata = {"commit":"Sign+In", + "authenticity_token":authenticity_token, + "ga_id":"", + "login":LOGIN_USERNAME, + "password":LOGIN_PASSWORD, + "webauthn-support":"supported", + "webauthn-iuvpaa-support":"unsupported", + "return_to":"", + required_feild:"", + "timestamp":timestamp, + "timestamp_secret":timestamp_secret} + + +postreq = githubSession.post("https://github.com/session",headers=header,data=postdata) +#print(postreq.status_code) + +pullRequestPageRequest = githubSession.get('https://github.com/git-username/git-repo/pull/new/'+MERGE_WITH_MASTER,headers=header) + +htmlTree = html.fromstring(pullRequestPageRequest.content) +authenticity_token = htmlTree.xpath('//*[@id="new_pull_request"]/input[1]')[0].get('value') +timestamp = htmlTree.xpath('//*[@id="new_pull_request"]/div/div[1]/div/div[2]/input[2]')[0].get('value') +timestamp_secret = htmlTree.xpath('//*[@id="new_pull_request"]/div/div[1]/div/div[2]/input[3]')[0].get('value') +required_feild = htmlTree.xpath('//*[@id="new_pull_request"]/div/div[1]/div/div[2]/input[1]')[0].get('name') + +#print(timestamp) +#print(timestamp_secret) +#print(authenticity_token) +#print(required_feild) + +postdata = {"authenticity_token":authenticity_token, + "pull_request[title]":sys.argv[2], + "saved_reply_id":"", + "pull_request[body]":sys.argv[3], + "path":"", + "line":"", + "start_line":"", + "preview_side":"", + "preview_start_side":"", + "start_commit_oid":"", + "end_commit_oid":"", + "base_commit_oid":"", + "comment_id":"", + required_feild:"", + "timestamp":timestamp, + "timestamp_secret":timestamp_secret, + "draft":"off", + "quick_pull":""} + +pullRequestRequest = githubSession.post('https://github.com/git-username/git-repo/pull/create?base='+REPO_OWNER+':'+MASTER_BRANCH+'&head='+REPO_OWNER+':'+MERGE_WITH_MASTER,data=postdata,headers=header) + +#print(pullRequestRequest.status_code) + +githubHomePageRequest = githubSession.get("http://github.com",headers=header); +#print(githubHomePageRequest.status_code) + +htmlTree = html.fromstring(githubHomePageRequest.text) +authenticity_token = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[1]')[0].get('value') +timestamp = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[3]')[0].get('value') +timestamp_secret = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[4]')[0].get('value') +required_feild = htmlTree.xpath('/html/body/div[1]/header/div[7]/details/details-menu/form/input[2]')[0].get('name') + +#print(timestamp) +#print(timestamp_secret) +#print(authenticity_token) +#print(required_feild) + +postdata = {"authenticity_token":authenticity_token, + required_feild:"", + "timestamp":timestamp, + "timestamp_secret":timestamp_secret} + +logoutRequest = githubSession.get("https://github.com/logout",headers=header,data=postdata) +#print(logoutRequest.status_code) + +print(pullRequestRequest.url) diff --git a/git/edit_entry.php b/git/edit_entry.php new file mode 100644 index 0000000..53d8144 --- /dev/null +++ b/git/edit_entry.php @@ -0,0 +1,88 @@ + 'YOUR_RECAPTCHA_BACKEND_KEY_HERE', + 'response' => $_POST["g-recaptcha-response"] + ); + $options = array( + 'http' => array ( + 'method' => 'POST', + 'content' => http_build_query($data) + ) + ); + $context = stream_context_create($options); + $verify = file_get_contents($url, false, $context); + $captcha_success=json_decode($verify); + if ($captcha_success->success==false) { + echo "Recaptcha was not solved successfully."; + die(); + } else if ($captcha_success->success==true) { + if(strcmp($captcha_success->hostname,"cbps-db.gt.tc") !== 0) + { + echo("Recaptcha returned incorrect hostname."); + die(); + } + } +} +else +{ + echo("No recaptcha response data sent."); + die(); +} + +exec("sh get_latest.sh"); + +$branch_no = "add-entry-".(string)rand(); + + +$id = "None"; +$title = "None"; +$credits = "None"; +$type = "None"; +$scope = "None"; +$download_icon0 = "None"; +$download_url = "None"; +$download_readme = "None"; +$download_src = "None"; +$config_type = "None"; +$depends_on = "None"; + +if(isset($_POST['depends_on'])) + $depends_on = $_POST['depends_on']; +if(isset($_POST['id'])) + $id = $_POST['id']; +if(isset($_POST['title'])) + $title = $_POST['title']; +if(isset($_POST['credits'])) + $credits = $_POST['credits']; +if(isset($_POST['type'])) + $type = $_POST['type']; +if(isset($_POST['scope'])) + $scope = $_POST['scope']; +if(isset($_POST['config_type'])) + $config_type = $_POST['config_type']; +if(isset($_POST['download_icon0'])) + $download_icon0 = $_POST['download_icon0']; +if(isset($_POST['download_url'])) + $download_url = $_POST['download_url']; +if(isset($_POST['download_readme'])) + $download_readme = $_POST['download_readme']; +if(isset($_POST['download_src'])) + $download_src = $_POST['download_src']; + +remove_entry("cbps-db/cbpsdb.csv",$id); + +$csvdata = file_get_contents("cbps-db/cbpsdb.csv"); +$csvdata .= $id.",".$title.",".$credits.",".$download_icon0.",None,".$download_url.",None,".$download_readme.",None,".$download_src.",None,".(string)(time()).",".$config_type.",".$scope.",".$type.",".$depends_on.",True\n"; +file_put_contents("cbps-db/cbpsdb.csv",$csvdata); +sort_newest_csv("cbps-db/cbpsdb.csv"); +exec("sh push_latest.sh \"".$branch_no."\""); +header("Location: ".exec("python3 create_pr.py ".escapeshellarg($branch_no)." ".escapeshellarg('Edit '.$title)." ".escapeshellarg($prepend." ".$id."\t".$title." ".$credits." ".$download_icon0." None ".$download_url." None ".$download_readme." None ".$download_src." None ".(string)(time())." ".$config_type." ".$scope." ".$type." ".$depends_on." True"))); + +?> \ No newline at end of file diff --git a/git/get_github_info.php b/git/get_github_info.php new file mode 100644 index 0000000..ad00dc4 --- /dev/null +++ b/git/get_github_info.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/git/get_github_info.py b/git/get_github_info.py new file mode 100644 index 0000000..5320185 --- /dev/null +++ b/git/get_github_info.py @@ -0,0 +1,145 @@ +import requests +from lxml import html +import json +import sys + +global branch +branch = "master" + +def getBranch(github): + req = requests.get(github) + htmlTree = html.fromstring(req.text) + branch = htmlTree.xpath("//*[@id=\"branch-select-menu\"]/summary/span[1]/text()")[0] + return branch + +def getReadme(github, branch): + try: + req = requests.get(github) + htmlTree = html.fromstring(req.text) + rdme = htmlTree.xpath("//*[@id=\"readme\"]/div[1]/h2") + rdme = rdme[0].text.replace("\n","").replace(" ","") + github = github.replace("github.com","raw.githubusercontent.com") + return github + "/"+branch+"/"+rdme + except: + return "None" + + +def getRepoName(github): + lst = github.split("/") + return lst[4] + +def getRepoOwner(github): + lst = github.split("/") + return lst[3] + +def getIcon0(github, branch): + repoName = getRepoName(github) + repoOwner = getRepoOwner(github) + url = "https://github.com/search?o=asc&q=repo:"+repoOwner+"/"+repoName+"+extension:.png+filename:icon0+fork:true&s=indexed" + req = requests.get(url) + htmlTree = html.fromstring(req.text) + searchResults = [] + elm = htmlTree.xpath('//*[@id="code_search_results"]/div/div') + pageCountElement = htmlTree.xpath('//*[@id="code_search_results"]/div[2]/div/em/@data-total-pages') + + if len(elm) == 0: #when no results found, search for all .png instead. + url = "https://github.com/search?o=asc&q=repo:"+repoOwner+"/"+repoName+"+extension:.png+fork:true&s=indexed" + req = requests.get(url) + htmlTree = html.fromstring(req.text) + searchResults = [] + elm = htmlTree.xpath('//*[@id="code_search_results"]/div/div') + pageCountElement = htmlTree.xpath('//*[@id="code_search_results"]/div[2]/div/em/@data-total-pages') + + oUrl = url + if len(pageCountElement) != 0: + totalPages = int(pageCountElement[0],10) + if totalPages > 1: + for i in range(2,totalPages+1): + url = oUrl + "&p="+str(i) + req = requests.get(url) + htmlTree = html.fromstring(req.text) + elm.extend(htmlTree.xpath('//*[@id="code_search_results"]/div/div')) + for element in elm: + icon0Element = element.xpath('div/div[2]/a/@href') + + if len(icon0Element) == 0: + continue + + icon0Url = icon0Element[0] + + lst = icon0Url.split('/') + url = "https://raw.githubusercontent.com/" + lst[1] + "/" +lst[2]+"/"+branch + + if len(lst) > 5: + numpath = len(lst)-5 + for i in range(0,numpath): + url += "/"+lst[5+i] + searchResults.append(url) + + if len(searchResults) == 0: + searchResults = "None" + return searchResults + +def getLatestReleases(github): + try: + git_latest = github + "/releases/latest" + req = requests.get(git_latest) + + htmlTree = html.fromstring(req.text) + releases = [] + + xpaths = ['//*[@class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"]/div/div/div',"/html/body/div[4]/div/main/div[2]/div/div[2]/div/div[2]/details/div/div/div","/html/body/div[4]/div/main/div[2]/div/div[2]/div/div/div[2]/details/div/div/div","/html/body/div[4]/div/main/div[3]/div/div[2]/div/div[2]/details/div/div/div"] + i = 0 + while len(releases) <= 2: + if i > len(xpaths): + break + releases = htmlTree.xpath(xpaths[i]) + i += 1 + + git_releases = [] + + for elm in releases: + release = elm.xpath("a/@href")[0] + if release.endswith(".vpk") or release.endswith(".suprx") or release.endswith(".skprx"): + git_releases.append("https://github.com"+release) + if len(git_releases) == 0: + git_releases = "None" + return git_releases + except: + return "None" + +def getActuralRepo(github): + github = github.replace(".git","") + repoOwner = getRepoOwner(github) + repoName = getRepoName(github) + git_url = "https://github.com/"+repoOwner+"/"+repoName + return git_url + +def checkIsGithub(url): + if url.__contains__("../"): + return False + if url.startswith("https://github.com"): + return True + else: + return False + +try: + github_url = sys.argv[1] +except: + print("not a github url.") + +if checkIsGithub(github_url): + github_url = getActuralRepo(github_url) + branch = getBranch(github_url) + repoOwner = getRepoOwner(github_url) + repoName = getRepoName(github_url) + releases = getLatestReleases(github_url) + readme = getReadme(github_url,branch) + icon0 = getIcon0(github_url,branch) + if not github_url.endswith(".git"): + github_url += ".git" + dict = {"credits":repoOwner,"name":repoName,"latest_releases":releases, "readme_md":readme, "icons":icon0,"git_uri":github_url} + print(json.dumps(dict)) +else: + print("not a github url") + \ No newline at end of file diff --git a/git/get_latest.sh b/git/get_latest.sh new file mode 100644 index 0000000..15f0d7d --- /dev/null +++ b/git/get_latest.sh @@ -0,0 +1,10 @@ +#!/bin/sh +chmod 777 -R cbps-db +rm -rf cbps-db + + +git clone https://github.com/git-username/git-repo.git + +cd cbps-db +git pull +cd .. \ No newline at end of file diff --git a/git/push_latest.sh b/git/push_latest.sh new file mode 100644 index 0000000..222460a --- /dev/null +++ b/git/push_latest.sh @@ -0,0 +1,13 @@ +#!/bin/sh +cd cbps-db +git config --global user.name "git-username" +git config --global user.email "git-email" + + +git checkout -b $1 +git commit -a -m $1 +git push https://CbpsDBCsvUpdater:PLACEHOLDER@github.com/git-username/git-repo.git $1 + +cd .. + +rm -rf cbps-db diff --git a/googlee8375b630003ae8b.html b/googlee8375b630003ae8b.html new file mode 100644 index 0000000..23bb918 --- /dev/null +++ b/googlee8375b630003ae8b.html @@ -0,0 +1 @@ +google-site-verification: googlee8375b630003ae8b.html \ No newline at end of file diff --git a/header.php b/header.php new file mode 100644 index 0000000..b3def15 --- /dev/null +++ b/header.php @@ -0,0 +1,84 @@ + + + + + + + + '); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); + echo(' + + + + '); + echo('CbpsDB - '.htmlspecialchars($csv[TITLE]).''); + } + } + } + else + { + echo(' + + + + + + + + + + + CbpsDB - Ultimate source for PS Vita Homebrew apps and Plugins!'); + + } + + ?> + + + + + + + + +

+
+ + cbpsDB + + CbpsDB +
+ +
+
Apps
+
Plugins
+
Submit
+
+
+ + diff --git a/img/BubbleOverlay.png b/img/BubbleOverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..ebcd080cf655eff6339e298522189d35a5ce32d4 GIT binary patch literal 14372 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 e$TV41 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 L*_v0IdL;fI1r$js literal 0 HcmV?d00001 diff --git a/img/app.png b/img/app.png new file mode 100644 index 0000000000000000000000000000000000000000..0795f8a573fbfd164924c08616fafa8e00aaf2b9 GIT binary patch literal 43663 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

-Yw1#4$X{ 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 M07*qoM6N<$g502twg3PC literal 0 HcmV?d00001 diff --git a/img/edit.png b/img/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..acc26f43a25ce63ea91bdd9d13b8f243c4e4b32b GIT binary patch literal 55945 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 z%0A&ItEkizTcsf%1X{{ULxHwa8Ce8Ni_6-4hWC1sMx`fhdU{Il_2kPj=4Yp63=xAk z_=$q35&+Kh-Y=*-j;_eT2PIQ%IGS5mawhRKOiPp@uKGmcFA&9DLQ@+2Vt%A?Y*`+I z1S&lHl5d>q>S(tW%X{>038avrWLw!Tww;bE0Qv-PuTbU3a%ZNY_yhgg?lCNxM1P+# z0M7tu0D55nR+bn5U&8zBAR5E+orZ%}1U;>d*4EmfONfmPzF$kBv}!)oE+peq5DetU z0h*YcuuU)s+p(8_n5S3BV+g9!h~r+^2T!wuc_sB;g<^ ze_?<^IT4p90k5SZGh@)`D;yYH(Q;58F%C{~%maND0z4p$AoAgI)|Hfff-rgLOBp>* z5OKJ)U-EY3af%k*!;U+@fZ;%kxTBFb`tssI@x&AkIE@W0AQhflJuc^4TU%@eui`-Q z8HYJu22qBOJ(zS@sR2-S$UFA=BxHm$KJP|V`H7>!{r0W5tKT@TRDQn#z{}3{*#0%1 zF#wf-2H*$`z^dak0M3WbrGSFg)zVTVOA&BsI+PvNCJg>Y;r2>yIpy3&{lx? zH8s@3$`4roz>xJG?bEHqLqqvBUDd%wkn$KH8C#$VG2f&POuK#O)ArC~j~5Jpd=EGt zd{T2X^1%$8p6vO-`A3ypkqy zA)Mkk$Wvaz72`Z21v-x0zD&=}>U=?Gdz+NJy{*-jbz@5f#rO9v`m&x%Ptf@L-$RZF zh;n5k1Hkeak90$W{Wdf(Xp>XCNzEq=)gZ_u>*faFHjl@+>K+pK47&knfC1Qe#sHMU z2{8b`sjxjA{=vouY%&`-X(29MsS+{+fMFONpYmmGDg+_Gmpagj6IeE<7aEJB{rxZu zFa{$dFbMAZLrPvpLQM^~E<#BTo+I4zJ_Q5t@JTQL?u9TQ!{KMtGQKo_^esIS*w4g8 zCr|F2l!WP%Q)t9PoOqp1hK!#sL~=~o@7$QhGwR|&G*>26;Mv(3jQ6~@L2d1=)`2Zi zXJ?1?VE^6>8WlEfOL!iG;6v%-8PRG6AeKqOhV|=hWO&H>`}=GJMxSIUJ?li5$RJlo z^cxx*?3UZO0ytv;jtfq-0YG&^Jd}+C2ZTOrNc{}ESjCTwO{&ba`mrso&HiqIEJ}!9 zn&RRx)`7n%?3IUxMzl&89UX-mlj8$QDi1=;vI({IwYFpD9((A~#~~yz03jbjU@6cd zRl$re#KFt)5SOJ(@GM<|XM8Lxpu$7h!H;PQ^gv_ZdN}gaQ>WYKc88ojoR}Sz)SU-}oCR{H*rAn(3Ghd^)!Rp4xdDMgOrpIv;&TT83f2tGTWF~a9i45~*Z@VxN{jpSj*bp%!}7he9eZ^E=W>mOZuav~{wj6EL=>Pg z3^*amqk92|(@9`-A?1e3$;)>;w{Nwb+qT=2Pi)Rs5bt~ckE#vcKJZF-*tbFU*e{9; z4q>+G*4yvUn4K{I#{s9x0MIE+iG)B=S-AqhsAnh0JO&v4G62ZG*fJ04m>&cgmXm;b zASzeHr>19h0+RR)X1=lUaT^&KwnK+{A$YTPxc8{y4)ZQWC}01;fM0SN9`R=(&DK*-vmu$f;E9r`W$}JC;s$NGCdQ^&!UyzlNp; zy(EJ}&wV$yJuOgXu4*X!RCLy)v8hq_KJX=(UEQ6og#5E!OpE}pPRK?m?8;AqLO7)A z?JTU5f&!*Xf>}PSDZ4}c17+k@k$rpj*sdK<*|sO1u>Je@>YNWB|7D$d(vF7iz3+Ly z&CGFp+~B4%m#qL;1lz&9LFWqKi~)EC;09n024IZ_j-5rd+Oa`@wite{_5l24WI8(s&ZlBY3I=7zrX3CIZ(< zT^&$Z6vjSazw>#Bc$I}O#H>SSam>6LT*51gm~!IfRE0$+ANyK=g#)4n(IBIdS_R1< zArD4ll$Bp#%kolR1c(N}WrIqK`a${lu+Q$NcVm`+(zZXf#dbaUl*XHvUul%;p|rZx z3?nN=jRxSo?~}pxnI4YDk3ZInbxmYY4q@hZ>m7GyN`J-xED|aifT+|ypgB%OiL|&J zOAWv>7yyc%28o&Dp!6C%2K0B~!C`QG%4T@29AOt^;uNlVTi(HwfG87jELUyl|#U^^mKG!Jx0eS$_xOxA}%jY%W@P#{zMc` z_#-boaTa{Im|h2u6D=WnTKX~UJ|l$1cn<~sKn!6~VmQN#w17D7{{Sf;4+x{Le2d}{ z9D6GM%=8qtO`|s0KVS#;@3Y-IcVVXAq1(PS2uRBnqYNP&jTyIA%vf>+w~zsN*Sp`V zyBfi$@v7mi$dVz-ApA&|1CFwIBhd5J0Qj2gIRVr@ikABkh~=T<2c?H#%*^s(kvZ(& zXKfh9V{l^HM#g7sY;wjXK%2zg-e=q(fEa4J2%sQ_zh@44cFZk6Nf{X=XeltNQglX3 zE4~m!wo)H(tQ;6mC6bZ^$6Ivcew+{0934Dr`}XX!EnBwO{rBBx-}w61>_7hF-|d#0 zZ?T6TdBhGMI&97D?RLQ>m)ZFjU#f|uEu2VlRbdrwZ z^U(7Vo;xdm&L#{7Re&@XE;@>u<6dSQ%*Cz%VmuQHm+v@1aSAgg2bRY@EsX(vN_>5N ztxeKcVBgNL=gW%u(%LZ|TzGX%@(o21%gW1QL!8r{rX#~4PQe%_dc@^9jlKtXbRPdR z4EiI^7xkoQBgedb&cwS$lLGD~}^s58_2CIrWs ziD^{10zi)_JI|AQB6kdrml^OvmlX$|( zI|6UO;Z+L0i(zbhQYX^JCnjxrdPX038G&N+(%U$ceFVx*P(Cyoq0H=7XCB#D0n6}u z$X7hc;N|lN9?+kM$QQ?-zv-Dt8$5c{Muvvu*nIBWD;a6Ffenh@hr3p+e8Y=a}?3j3|dd3vr$SPvI(?c3k?Bvg3V}baABq6 zhbY)S;uJ`}7r`F{0u2c`gEAfW&t50?Gxguo%-78NLq8}+v$X02V5hpl3;}MA|Q7{YzFI8&h$BaHYJZwXQ126`IGJ;glXaL^%L+?E96#&lx+;P`E z$it1p83V9LI8g?m9v#mo1gRdLhPg*Pr2!--^ENO713-lcLX#SRWiSAl7=b1p{sOOP ziVt|Ci#>*2_;VUXvDWtYVM&VZ2g9WXAcj3#*2QP(l!sx~F@||LkjfQbY{_zUiI8z{ zR65?+qi5Wq2;^ac*j_m(H78TYL1&(*ZH(ihffOZGvGOEl7wFsms#(~0Q5*PnQhDLB0%o=Oin8XJK@#x{Ys|8f=cPOJd< zoPjHM$!srq3vvm1JSj*8zw_>UWn7g1^T+_4(361Z&*10%6!DaXvE)Aigg8(Mr0fI? zjeH(C<7GmWK$IO9D}V%WVW>h?a&QDZk4jfq=1su$tmB)p@Ao_yRHe`nY#4}9oweb7yX@*~ZQa@DVp4HA%JT3W-A@~jz7dByoxXc1 z6lC@^g%fH3mIRu$jt!KDOu?%{GH@}|Ec2usvLTQPi(>s>29;>f6W|#&Q~P|0iT3fgU5|Gwew0UyqBpgOi;Q$%QdV;~)eu$Dr{9tY5+DUcSt_mMxcS zaMX*K1Ez@j{qPgu$Ls^{1eb-KcH#{g6^!3k)HH1a$g%Q6=SRLKMhMl@klIFC*s zL{yA>mOyp!3gy)bSZO_DSA{fLG?0`v;?7nQQ;aM|14@D=;k-;?AyCQ_jj@NwS7Zzx z$d1Kav)rlA_;K6C6Mr3@UDmT~h29H64#vf_1Q~+hA6uSIUwFVId$}6m!%aMY(Av>q-95|nRv&^CKc!EXe>gHaF_i$tN7LktrFd0LL~uCBlb5noks}0uP`xTn;W+ zCk2r4f>|e#Li0lc)xs&ANIBN@-ImS#Jqg@0R2Jwi=IU|3TP7DFX>@p2OI%$v_mf4;7LKP0LaG( zdeJc+ft!jxA|BNRiPrc{(p7A#bTugXdI*m^QgWg0=Y}isBT7hd0E61jWNbKc1pr@R zF)$Kgd5&`_z}oPROMX_IE|r+P9>@+d(%XC3UU1n(fpU7mk`2HW*Ic3JxN{@01jzec zP!e>&NG;CHlxBvo{~d@V_a4X(84Ks35D71aPa-_iBFfTb1RzOdb-p6R^MrYuqf$8` zl2c{LdGdJ2bDoSnCj~T*aGu=10hJbqRuu zk9LmFXLNLR>w%yMe7f=J9Z%WM{nU@0l3{-~;Di`}OU^&X+G{8DaKIU17++zOEp zi3;-Igm{e6go1u%0AkQkk7pVp#k2%b1CgGRaRq>-fR7jB1CBuS^?+8)jfqGM;r5Ph z`2?;ARI35Cibg!w=baz3Gj1$=S=*xhDfsIX>2v1MUH1EvnU~Kt~|sC!R&- zmmUR-dyW}^%8-e71z_vcfqDjsJ{>3_QA}CEa)4CKxwM=-i|ES>9a^AeN4P*EsQ+1x zXvsJ$%>2oamYZY5Ig|5IX%8|kxR54INmMUDi9zu2)?t3>xT(3x)@|5eYtOyVzIOAi zNutvWmTUkvZQ3+{*`=3DTsm5tY{Qym9+5!o;A1In8C2V04-`;2B8>M4=@A zH0**_n$aTbUy^SMQ5lW}EWeDERT8Zvq7p3uZ%fLdry3dLL4S6s2#h8r(~3YN%JB;f zN=`h>p%k2w(IY<&DmnO0PVy5Fp;JA@q^Ll4T*m-`NRL&-DnNOPfPaW~gk?F-AFl_b z(nQ&6X=}5y&N<)arf2Q!b1$%O-FA0~J^f(G24Kt9Eq3J;Pn72S69(7x>6 z>uNyxs%#K6Y&nppgs+4HV_6InQi^aM;EJ4SPQ{qW>oVhU6qn(Z}Ec zl;)F%lD0*pJUa~ok+S;GAb{q%z%jmx;f*CJ3$n(r0ugt}LXnU_EGy=d@>G(P$PkJU zXhw%qd;Bl(wnRv9W}HVLTw|-(ouzXDe5Qb~Z1p<3@1aLhuG0pVYycV>n)H4)-F?O0 ztgW^C?!4XpEGpa} zlK|7^8yjgw#=Q`bDY^)Sq@lA#D`h0aqB6b+pavSj(a3|^17#>0BjpiW#W-gbm2M8R zKb_)8V>&UB;Hec3bl(Dy3ZSgkHXsBVmlF7MMX+}LIri8STb<`LgC!e))vH$(_Wc~1 z`i4fk>$Y3$FaGqi{<@|`Tpb8QT7W!P2Zk&0Ee=X^1CW%|eIZyJ*9nG&>Q*(X7{NKL zl$Bd#(Abr7g?I!qC5sUS1_YC^D^q02Ba}y=y8?H`V;r1e8xmiF3<%T zQ6XLe)MY>hvi#^sV9?`YPzHktmA}486P8XQ1`gJ}t)s&Z9O_m0bb}=sfO{W!aK5>% z1LKh|4Y>`t_@WE+{&icYoVPM}}nx7FrFI32GsbLtfG|hnRI*gzysKZ~+Q{ zx@$(N-h`6^t~}+1dd-shl|tT#aLfpN@;XX5oC=_iLNXp;6?!_dX2(T9+J{J`96~l} zRLUg?Je5G?(l~VyYK>;-JS{TU54eINc~~GE4$OK*U1M`t#q#aX#d}&v<_BR;M_7^p zXu!K_3k#_M)^Cx`9JLbd+*UV=c=y;T*xcxS2k#HV5rDb z1+oDLP#|Jn2{{ANLW0tGzHD=P=Gl58tcux7D(Q6>T2}X*kRj~C-0AEdVi7Hlk_;;Ur+Lk_Sg0q?IqXTw=`^;K7B z|3rnS`~2Vit^M(5{?I1IC-fH9vef|hZGhO#afqUq0T_-o6#0dng&-4$a*)t?oC}hvW?V{Y%iN8!X8HP>07Rr_s&DY^Eos>_7j^Puf^mHgRY;`#-gHi+%JXAF^+K^BW3t zsYRvI;OAqyAW#L1wxgJcQ922f&?Nu?gl6G@qzn<#G!chEld3Ekjz5!1DJtjUR2|vz zF4s9T-x;oM%2F#_k{7oL0T`oq^U8^mF{6NhyZU7jA?$ux_mU9U(eX+~HSYT6tX`Nb@uOB?9NM;d9o~c41F48hyS^_1A z@dWo>Rst<}njE0f{wzSuD@052o2;R!*%LFKE=(4j#JamW$ypd{%G1QyxTkp*VcQc= z%zy2RUzq>1kAHmr6F>Hz`A`4q2j@TeqwkvkqmO-L{$Kv`&*vYx^Y+jS#|JefLwa1m z?*becp0>BX`o-4NP#0#$(BtSZ&ho$YyPve%?z{(<)$a>XKZeennw+w=>(<)azW4j> z^*6jiR#x>ct*?*gbi&qF*a&f`Q2IC=E;+9aNi zCtQ^)i&u{@u}AWSoA%Dx~@@Ho|-vVR9>>c_w>W(cLDgtA8jxF{r#ko|N0kR4|d)T z43*}4{;|JrmyoafG9iyyJBE;#G0@*4IK1@@dRP-;Y0TD{de1+ed^D0ucThm=-Ll{@ZVU!tS~Eetq>O=zbUkU;d9_mGHyw ze1~0g&9!#k`R6NIUxY>cQVf7vhKVc)xI6w>zkq9!5lx|-PcFnEFXlUqI_*31>=^)Y z@E_>ehe(vp=}5=eU;t|1^Oe~I?`)8r&p$Q9AiUUySwDw{O%&P@m7M_3>w^MF^Q5BF zS0~DkG^fL71o_ow$_Ilvp7F>7U3dtq%D&u-2EdH~l%5W_8v&=0|N84*sCw#y9?dP* zfLWho=j8y?p9^0vpK{gO+G4%^`5s?Is|x62$n^fFciB^09zW$D2KlQ`esaF=-~QE> z-*=ZaK;FAAKHGY(yuvy!ywIAux~;Lj)#^Jst!8@KCim>J@l6lfp@WBP$3-u+HLrb> zz4g66dd&JRZ3_UvxLEJts11)!l)a6YLd?%j{r8XjvfcQa8*IGf{ekRY4nPx@Wy3>5 zcFVVKwtx8i-`mDVAJKr-W1q%>FTn8(fd-ueEwPd-Kp7!GMh6mbzGi}7=XqA)nDrG3 ztr3Qv3JRC^8hv-*Auo_Xqd^Gi9kj8-I4C~QW1IsSGDrhTDW{*JJl+*CKtzL|umPAd z)}O@Oc_m`lK_SQ+4MTHlyR~$5>3$R$&NvzHi1MTHq3pG{wOKaD&7lW7C5s?}NjvX$2P^4Hn= zU-~V3;ctA>Uf+s#ec{jSkAMA_=67y>Jny6muw(6C$#x%yA_YaU8|NF9fYTYXcO&M|Y=+?hFC|9+uz|a7u_IsolI{M} zPuYQg_;VZE@~G9ec3ORFht+bW17pyzX1%TX<=?ay{_F?sbx%KTxBt=a+XFY>RNA}@ zmTmw5?4PNbS=+Lw7adn_Fgc*3qvQ6LH@@Ef({N5AxJ?3!__5#`#bL6wr|^J zU;5G)VGKTJ4?Osw(r_CQuO3u`G=?oNZ+$x8E=-P9;&ou2)k{2u5QMd?E~>cKK0yhb z*;V}#dXB?S$qp45GeyaL2M?!5L54WQe&%*UT>3k)gf$RQbtOt205dxC;7q@4%~`ho zyi2Tm#cIe5_VC*BApdNe6;t|;(9+zb6MkGRkSCv0yjQucn3$ZfgZuaRq;rzti(mZW z{Oz~jKF5|Jio^?uTsXfjh0C zvj_Bct7&RMV{5GW+Lzdd-}$V)rE%W&{L4Su-8X+LbY2loXzTihM(ybX{ZigaKm}g4 zV!3_x_y3oD;Qc?0J?y-`NSh52mu4JrISvGG)Tq;7JovzU_E%UHeDO~ zXlcP7FWzdL7z8dTDz>%+%6Ui$g5rMx{a~A(8&D8h2iDOwydp3LF0{fV?!fw%LkxXWQ8qU16&+<8$Vx!t0C5 zVD$4VG#nuxPpkl!`aRtp)(W{%-psQEII+x5PuZTG+m+wRhR=TXv-5Mkt zU3}$L_WnKl?R)RP*Vf(eQnN8Ad@uy{4bX>1On{i}>l(2Yz|3D)*I@ns_K&vvw?AaF zL;Y6Yj@1C#N4~nQ<+kECK4CX@x7ope{=7YS>$l4qbV3aPzqY!+Z^(8ZLPhFo%4TT> zc~XVv1-|#~Z?(_;$sgM5Z+x{)Oik%C)dbei$Bc(aVBWlOqu%=ZdhM%U{SW&uzwit8 zv5$Tf_*X@1X>QgHMzrcQ92q2eL?|Cu3Qduy5DuA`m&*#EBuxc@S&R@>Oc#8Iq7Diw zq)Dr&*uaCM_V)=yTcIlgftwz0gU`|d)R9iAREO+Oy zVS5EE$)+#=Z!1&WxQWy2z;V3T+BO^SmsOd>9``u@FuIBnX{fB_+jgL_m8Qq z^SloSEAN>Ddu-2d{JeeZ;uqUb{pKgKcGP|BV;>9X@x#ui_k3)0dJY5Cp|B5#U%H#b zj6N_rX+7KwYQp@R43AMKmS_KzQGw!!|mKJrWEE zX95lu`SzH|I*o_=3$CVuwzH9j^TfKe*lwz&5^DKUIqh~?m z5z_*s?)*zWyn>{${VRHq4#uA|epgqAW=%H;dHM*VAP=6n-nC=9ZQuHYl%58F&Slvz zG4>rfY;S+_>;AhEE)o9xFaL7>%4@GtJ28XlMC0(_fHgyzySuuq6Z+JGwl`2_Rm&P% z_R2Td^4ER0^?&1E_1r=oX82O&r{B=pZnN9B+WgdnHNW5*-fUxYa5cOaf+KzRP4>im z$Mb zA;irv{&nHDTv;lX4V6p zYTsIRzJ1`cf2+1E*#I1Y0a&$w0ni{J+|$}*YnSn)1(x?1l`t+G8s$X;pg|!h51-lh zA2^8Z!4tOisckj|OGesL+jo{30C`B)gid(bi>|Yo^xkc6suYAMea;NaWDJ(+o$y^< z-Fohu)nPo$2W6W9&HRiQ8J)nY=ENI-oQD)opV9O~pV3Irf-^0-V7O)#_IC5!N|r}V zhd8#xl{u7ypA1Y^W{4Lb>z~k=LCi1Wj*N1gK7L@5V)0xIm8Ss$O24tO1&U84 z0}EvX%8o4tZ4MiOvGIYF%tSxIg@v#unzz=r7VGKc7l6AY56gRcR43Ll2i7m304Ak; zjSLP#`S+?#TOeQYgfb@?${BrLXQyGubFZ{U;z4t@**7v=icZwxFbDXeP1E4T{DEZ3HR$GSE z02{=s01_BLY5>w2F+Gh2g?8tz-L`GpcKh;IziE5+?YAacKBNoD#7hJ4((A9)38Dgs zCw3;mSGa!bn;Qq#xw8xVF?4Dh_Fo;a(rxXn*3?3aTxUb0V_E?);mq6&l#YT$g@yx- zKC_PsQP}`^oE)b-ls$uO5W@s2hE^qUZ%rj9n-tvh&`KTgvmh{wIS4)KxqQt|$dW<4tbxmkXmB{nd6<9vh>PUD_~5*cp!8TdboX>xHw<@EBUTTHn}dNQ zEbr+i3;zXRTIRvk;N;|l9oV}YOYafXvtH@9KKWEt1HjkYZGC)c2H>|o{_**AyO~1|ZO=>?=B2tgQu|k94d; zH3Jaqr+oOUufa-S#x`RcaMwNe*@F*1X1#rV7%(5S76`|SUvv!`TxtOFvCFW87O5nu zPL9a2?#(T&Hat3RLt_*A-h3;Tn{FUF{QGj?nVp_icp=|re*f!`0Pr=qhkIp$DzHyThPwi`GE10HY~ z3_k3ocm&x-=8Q`7=i>Z>d7Qy+H^!skEI6B>E_=eT>hPshHX5#heLySp9B=1#04 z{GR>Hm@)y|1IP`4he`IlxV4 z(ll1GocZTqXqPSP#ulIl`~L=Q1K5uaX;Dane&>}kKC#Fx3MUulHT1>5vyp%MlJ@v> zGgFE3hgHDDn6+GfwJm@5&)CdxKMc)`9r^rc?6HG=cF~7FeQLGCHg$)!kO@Qb6WKMd8#8aNg{b+)InN%8WioJsjy(< zgu$6y28{}X7V&KQJg0pK1N%qMU4#{fT1=05(4zwn$B=pJ9uJnuu|yo{I4Td;g)fIy z8&IZ<76B|i4n7KTOw@k?r_bUUWIin|&DtY(VtL;amiIJJ%u@ZLwkxUH6a&klP_&(- z(r}>0ke6x9_6uZt8Z#XO?>ieMBZHX z^JFCzvbC8?&6%IshepX~m=naT>NJPulRK7LK8_q?mOD*BgyvF^d9FgdaIBvm$A#_TUY^(KJF)fR zXXj~1wGslCjFtG|``<%(ld|@$fDvZh+4tjE^6uUJwDlf7EW<_l;Clc#db}Ti_2#&; zu1}r>1Mr8R`ON$cuYbKYw|81IwyX851InTiXh7cFe$Ws|BH0fD7U8`^IiX>lgwnII zyz#BK@2E}ivL19`XlO`A;pH!Vu?_w0AKTG?{eLzO`I_ZQKwAO#XL)k*>~n49yM9_H z1Sj_I(j~>mfA}NM4Ff>eg_QseL1R6g3lgiA)=oHxr3RqT1oT}?lfQb51I=z78XU5{ z2lm_HBYn32;34bpAJ7aH>!$0>;`Xi=2qE2p0wzE2X|vhe&DADbT;8wbsAY8rq%b9>o`t;|8lBcDQA_b2Sp@A>f)VF2b}0M@8- z?9iyx1!V^DP) zbh!ncN9%dyNU!xCJ!*%rVmJz;FosShpDPa>(=kK*na7S@yX{C{KZ6>yn5Q2B43o~E z;+^JvCA1LE@lra2F+RZ+cATKFaPQ{=UyOrOo0N`0w2Qp_F)96+R#fMquqb(;F_7lz zq(H-uea$1c8~)=BY0X;Bx56m%3P5XXvy_nXLVmy6K*45lT%|c3Avn(e04FeK;U2^h zb>w(TDFz1Y@kbwq9ASA3!LP@XT81uBe)83V4pechH)(9k_8r?%FT_FVwUVSUQ2g;5 zfIs_-znH)AO>eY@mUi{QEaY`!Y(&fbw$>IHy&lcxY+>xj9M~T;0Q0(ao|7G)U6`Dj zwtlp68hP>LrKhX09ou)>E*QI3tRjEv$KGd8|NIZy*tU&+{wXNGwgQu*)_(mB)^^oP zZKAi&cKqRIZTrvs>d7|%nUDIWG+^+Zm#(|Lh3!$Nt7%CbjX*t|L=64}Izs}ast0ih z%^*K5tmx!%vLNMGU5L|%$1TDbmW;Hnbc2I~Hh>vqXkZlKL3HS>ZQHra`i>4r==kK7 z*PjBWELnK)SXt)pxX21eJkW)J9>N|O;zHQ@L=1SKXEf)>5kBihU$Ll{=gouHlgx}k zIE;mpc<^*y27@Urq=__yBsaj>n|zT5S6x(eKCDH&5klL{TT#W!8C@70XL;fdaon~&jUPEUX3#{VPD7? zfR-vhm7OJT+rC|^h0FkO1)z9d)o5I_0r=#nJ~e;&wb$Cz47PGu>i6_?+nUv@trOb- zUgE>j6MOzf<;^~IR|LIKmjZ8flEq1^0H{~PqobI-ct`4lJ&nnTs|sFyx%=MxY{$-> zcIl;;*w1|6{kHk7FR+<0tP*%NC!83Zof@~gp4Ha#mLIl}T{~^>-+$4zzT=0VI|iVq zoi_>v8uE_x+%W}VRvi@1^Z>m6u^AMch6dkTGb(MJ^Q1;0V1bY2!~xL&Apz^d)yDY5 zxb542*bc*ba>XzVD?B(fY=Z+>N%S7kK27^uTR>Wf zBO|H8V_a}~dPQV(cf2$jw+khXIr7i?u_92ds`Q=h=AZ*0(tsNJ< zmT!4#!HlM^LetrYbkuNNBcRecMUeG>PD=2=8N%-QkxI$)LsanofqvVJnSSTCr)=Mz zr$KAfRTzDo2K9c~OJ7bCgE~d!XMcNJ)%VE?K=EuZ{Dlob0}Q~%V;TVN`Cswc*IE;1 z{tn)K3WGC;S$}$RTz%N3%a*7s>XYyJ3Cz~BrfhST_nDuDq7L%bEBWFCH3B2hhS`1y zviIm?8|?)zc!9P}U;5`S+kR|wf97X@+HO31g+2QH*Vud$uMBVnfR)7btnpOBns@!I z_1<@%9lrMgJMxPkK6M5l(jyI2_<6XKTYyMI-jO$T1Xg!qYDUX=bT8aIIvQnz&X!P- z8X=slk6M;A&ztIm^q6{u?qHkX@d6jBsAU)}uxf}u>&oRCeLk_slUxT6^{TFi4jvW{ zPug%$X)GAu-#-L_L#Bx9LmYd8nd`(Si98}d8HCVxq^kYI6()|jS{NwokLKZ1Tcgp@ zDnJ>r-~C!V=@eu>2}i|lfMB;`xy*7}Ti|1vMW0I6&;+H2GSs6V{dQCuLDmm_8Wf#M z9!1!%Xarn`yzc`h$as=Yj(iT_2Cg=!eI9kRx7QA1Uw`D_L3?`VHXG{iN1slqJ+)|u zPVT`m-Ai8fQVtl>x`OlG6ZVF1IVd-LZc`YJ`1T#UbVW(DXJ7z6^GAO)f93Vpq2LCc zfaOfTqGy?AY2MdQ8R3e6KKs)hTj!0Z98u|Kg7VV{%)sZ#sC1F%W!CL9aanJ*G_aiS>1y2d}dy2z12sm$j5zZaX1vXB2PpBXr_!9`wC)!Rd1aQ9z6<$KWIn$dUX#z4JiAK z#)*o_{r$`w_QZ(m2QM4MJv(_``jVH)SaG@U+cd};EQ#chIQoKelC1zx9#07GdU|(e z0P+)ni!%U!@P~gm|3a)hcsE{0M~5xz;`0cYgfN~o1nsS@7zY{wHjr(n%d_HGQ_;E9 zpP2A{|4c9f#5wcxd=+nJXT2WVxDj=1vJD%~#wy@3+r4|Q-EhOJbUB~MIP=qntF+FD!olS&bgYNR3il;+CIFm>!)dZJk6%9ZLXE+ae-pn)O6FtQ75D@>d z;ixOyMmq3VA7=xP(mNr>kcGIKq&`82-Nk&!!AS8C31RtF!u$!%<6~NSftsaDad`;D zsM35m<}UDT9xrpv*#KtrqeuI!@9<%4r+Rf63mo1TWTc@YB`7lGgoeOp{(2i38k8{@ z9vQ|K;APqD?#@?0#c(d0TmejCT&X;9);}Ht@Y|pGU-QdWtpZP@tz5YpOaC_P_uGN5 z&^`V%R(xSD< z&$D&w*4o{7-)qZPtgz+Fm)QU&4898O+H0=1t2)hYeeoqW(-aH<++1yojSY-j|Ih!T z{ny|7J*vfX12TaLj)#aVe4N02JC${OYR(2HW^8b5#zruMkHL6MPy5`-*0bZ~m?#~e z5}*h&&uUO9X{6C-84)PlDZknXL6CAw`KeGaYQ#%jH98y)N{5410z{d4URGKvAO?e9 ztYdz3NO6a9N&<+C3PwfM>P7VBYk3QFBOB&?emVz4HsW(7hQIRHDR{(Es3{Z+)O}EC~{TDIPfk=-6Zu4 z;A0>Ajrqy(LEFA{lRf(IgLczRU$aLZc^LgTtE(RM*ylGl!jMSKVi~b)Zu>yR%+Kdm zM#si&d}6|yuwvt66O~`90PNwrySrha8tnEv?$p(Rm%aRDcH13y=wZ1lUU0eY2jJ`U zcxyDDYdP49mC=TaZS@bm$0o7#r}A?fFxCguiYh01;8Rz2UO}yv(>9 zv+$aAXIo2a8=_$pnKu2=I54I1ggFR?^LXKwo4+wXH$H52yB@OkJr7&w(I?FY58M5l zw%Er%^%?trU-$z01O0;j@fVa3)MId7Hsy`WetnDtVQ%-h)aQvlI-WD)_J_B=PfShP z1?O(i%J)CM`gLXV`WtVwjhi=X1+#M13efz-Y;!}c^}q=1-rHwa{_Y>!_=qe2G`0Za zd=mEU-(%O`cq1$F+}Q%Om23fY5=?mDVHm)2jkc)?2OrzWs_VFi| z^YF4G^I`osgEjKx4TM{Fv?($9F>_#DkjoBm_dMDQ$Z+~{;h>+hz;}e6I7@t|lR<2O z=JZI6JXu~kIG-TK2PDG@AuRqF#?0i8=A!>2J>p?ZxL@U~*|Z2S(=MgWB&-moixtwriz%kJhoytW#I2xmiF1iq$;MK{m8Qlyt zHOV(t`{TVjX~@E28aOH$pE_Oa7GTTfhvxtG4?be&G;POn8*(w$VEy|!mqH@Id${c^ z+gH01?VGp%^yBZg8*jLg$rP`nH%GJk_&6Wf!AhZ}3A6ctPBf2?W0iCOTN0GbnV-r( z4I@B7K7rkt{lCM~BBXSPk5RqR#aYGJkxNw{_B?U8pAw8JFM$7jc#sgkAZwJzigO(R65% zV4QeV6SbGwQ0bhG1AQ`v`jJ;Ok^&++`-|;>Pb=uRCj+3^+HQ~sKbGN&P68<4XP!KB zJPPHeKQcP5Ywlcn@-|f7h%$^NC-1@cKGQey=WSNMO!6Yzm?`ZLnkx#&d41$Lk zr42L^6%6&H+|WTeuf(30lPOf+GyXb%{8~! zu9ov{-vsvKS6pQO^TQuPUOvmneGffimtB03?k1eII;|p_u-#a_{#=_KAJR*3maRSuSO;YSfDxv!f*QxHLjI94zTaTZhDZEX)1i@3rJumkl$kP)`&1Qx3iGjK zUU6X%MCV~2MqG4+Q8!c(;Ybg@_&jYi2o5=q2ivvn$ssSm(ha~k48W>r z0NCM_6Ib#$2=vPgKy)FzkO7Fi6c^5hqZ2Ry6msCKKK;cQ0L{20Fhn{r3UA;eB`UH1 zLRy9~w*7;n1p^@7;5aC0I4WmKlfeKzJ`&8Q+u*^)I^;$rzAJ(JydeYyC@&d^grB6z znJEYpdWY#W!^5!*js@~yo=7ZStA&ph2#&7I=vU%eWguUcLpCslHn7*}lL{X+#WAcu zY0kp}obEmihw@NOD?`pJ`?!8 z1i?o;Ih*s+Dqp{)`h|R`R0j_ForI+ZfS2?53HZ?PZv{_jUG76G+h8Z0@3MFKnYc%hIc3FK%H&HxdY z&qEq1c})q&5A1!634|p&8bCLK(Q!ud6+>`XMR4gi$ve3)@Vw8RCw(S`(_w~3-E?UT zE>Gva^5jxD;QFylDhT{oFK=1wkJ!%O7lPnP$@w9J7|Qg$kbsc$6O(?^uppEh7LR0& zvRWZd&I7>_CxLy-%Zlzin*5A$20mHGyZw5Wuhiq)jOR9qV^Rs&U(HPo)>1ocZS#-W zWozzs7k>u$f7W)xcJ}@f|Jpo?kx4n(F54x|tnze(R)t zTzx6%av6jyPxi=LD!4rF9A6lnk7!fE=PK6|oFTNTnR|V<3Z^*_DkzBrm}s zR-~j3ArZwh=g;YpnCG2?lfn@UI+vo=30E>(U53{=^on1RCth7rel}{FSfB_}}=N z8+3Ay@1xNB7O4E#F7k|jEmo0h&puao8;%b4T4QsYb+xzH;6T4WgoV{de}BJjAFc#T zG62_Ibw$l2UprjQgq|SqAqD{9fGq}m@OjKqmqXQRdzw5YW{QBFa>y!Cxg9CBB1feT zD`ix;NQ{Oqrt zs0|GHoB_YET~QD|s=*Kq0r$&I%`G77UdRl%0;6)ZS+C6x-ewnc--KCrUayIx0&3fU z*_g`D?bP)*rpo^mCga`6#Z_x|X3iQKYwdl%cD9{=O^0omIchKO9#X&5wC^aE{Ex#x_1I;XU1s;(cR#I>U3}4n#+!{e3F(0=C_K+4)yz%F zICOQxpkWup^9gP3ZCHg&%1E)-AA0yg!|y%P227fdwPe=zx{+XDR|9zCc?dqw8x1QPms}3Z3TE zgr0;P@{q7_NK^RVDVnJRPm!*mBL&|*A#v%?P>y&kd?)#j?ceLx&F8lUuji2R`s)RR?^@2A}~s1U*_3EH;m0*%}RF znwgJlkY^2jbwJ)x5FA2bWtpB}kYrY_TSiMFh31Ef;JFp!^H8xZ;$_>ja0*FC-BD7{ zY^hKoU8Jc`V*!=gSxNy<;LW2P;W3U;b`%jM)c9<#laKs`K9w(K^3pl(akJQC^Mj&( zA4*G0lXW+aS>4F(cHzodF&}e7@nPn{KlI{Gb1G7@*3qqz{7-P}s+g z938|Gq+4MsC@Vt8j*?#zuH<+f-CqdddGMfL!b9MTDtU{q4_^*CLk=JpFT=Tz6nTni zfQK}KBq0ZgL+BfLj>mW^3$%t6FV*WX{H)9>!Lq*6!VQ1Ts61 zmB5r8?mc4XZrGp`e|)l(vpmb}UbfsCP+e|K)}C`7x^_l4sPU~zt*tFKIXD__D>3f$k3C*zVN z!O6?%PK_alEDi{_2ucdzjXFin1t2gk#9t8p01LMZap;DaOkOw?Qz0CfGJ0g@KjN8- zkmdtC>GDXIUy`@ViUFo$ph(K=Lk|aeq7V=!PYea5)Xx(+A(Dw@ymUCoi4e+)M4s$Z zTnH<+#_A!5JYlx1alo3#Z?|(hzO5(dT>1TkAC;d^7|vTgX8uI^N4G%v_adLgsS@kL zTXJ8ImB2;UciJV5<92z^tUdDB6E-n94kIvOJ9qEay$5_pBF{VX-GQyBU-ycYkV6gEOiwZq){i^$JdVp}1sRjBa1_TqKi}$%6a!nW zar_qB&~=ARPV;Tftx*23><@c>qw-_sZ;qeua6E-?AjxuZX3VNQ@o0}fDHS5pO8-Yg$dZp<67%pdj-b}>D zkO{ZlcDwz|&-_eL2^N4Q8-VTGpRx-sy2vhAyIdzbmI5(#A(s$1hTdmTZ6Q*%W{Pm} zsSJL~jAxTi1yrv`6$lBcrK?2eo;4~CITlWv9Cg2Pnl=H@ME8T7*mQ`Hlm(|u{JD07{!#?9}g5Z@7ZX`Q+NJkv9{1SRb$~>or;V3{%Ulxb3M-hpUPSiFHG)0L@ zoJVJ&a|7WYp5@I_gL@yg_Srk^?5=wu%k$QvnLnQGpRpQhNKF%z{{vWx^J;-B|Lo*` z;JoUf+!H7bR|ig*{O12Vetx~xOwZYy&YH9BJNDW`58i95Un(>LsAfA(jOTS%8|0M@KtgNFE5a5k*&u~t~EX9S_@ z#TLZQbUzH`;-CuaVsmi5SQ~_nyK7Gt(u%xJOXP{|cp$(s&exLwXW0fHP+MBZvXU! z&)dqCt8|xNQ$xK?j10mUHP|x5_4W12F!1idFMa8s?fvh6f6`IM2TL*l4?q0yd`DY{ zI+j46-#Fj4=>c@0-+R7TsHR`Ka+5%LOMPH702)sA7RDeG*Z>~y1jh@}4hccGkOI=8 z77K;?367nKgu9dvLC-3oXYER82^1z%LhPFoD61oyOPbT+==0=30g}-OEb{%3D58QH zJ%$}(84iw-lbG-6vv_)N?olOKeo`m44ZLorLLN%WJp2wnUOMaFzr{M|zh&#%AJwJ4 z7AXG=W`3UK_n9Bt1MI~p4u!O;%C(Pz6{=W&)0tO?%S#9NqhLg2kb|Ff?K8jsN!>CTjX?P&zj7$G7qR=&ZlrQA1mcxUX!sWm;!OuIL0KffzjrdB zOn53(z5=O?rf@h=MZ$S+2OvJXMhXc5ErHVBV<>YWiYp}X>F=?5SV8$}o17E9t?shC zA`j`oldA?XF7?B>^GQmEy+|*Q%l<|vc;D{(ZMl8jR<}L~<*$YEwLQTa1TD9E%|q--1my%M zoJTnQ-IpU|eo73Wpwo(d9RdYn+P5((Lp+W_$8bc)BaR^|mVV-Ofs4xKp05am!)1AZ zK;>?3s`!4y27rA)>*Px@2X+RpO}_e-udss$_S^sdo!_*9epoJS4Hkl9t`N%muqqUD z%1_cnp`b@hp=7i&TJW>@Q?L6D<&u;`)u<3r5?{ui5r9OzjLD%uRv`3bh{)rC>7V!k zqOum-6!}6tT#R+h_w-qs7^xF79&oXZao_sJM6mG z{a8@`Iw=1m*pK(2ELVPJtzx+44dq3n6~Qr80)Q4KaSo^((oaG8w@~@(Yi$ig)Jt-ouN8|sL4R9PjCXm{9HF|#R3R8Z%0D#=<=^Vc zKRv70r1Q;8o!y;Cg>Avuq&0O8s_d4zan!BZx_f%;KmOxC>=%Ci#LfH>mSg}3Y~SI5 zQ8bQO<@Mu>41VE1{e&*Ba8R0>o9(`P?zZ3h=zp_4yLRg#hV&}Iu|%BlekpDdeE`OM zaH;?!0|SL>LEdK>QXyIhQa0f@WV95Ckpa}Bc~DU7ksL2!1CZj>LOp@|Re%^I;!5KX zdp&AYh$jsd5*rTkiDn2KlaK)4^Wc$0j5`#Qvp7EvGr0F&JG=7^DF5S_i0bsteJ%SD z&sT#{`Wl+Lg7UlkP7OW`<@Xne#ySzG{B9=Qz&I5tf;h_9fhdj`83AFgM)-Q~EgQF3 zJ&g~x&Z8q#{(0-@ZUf6aR?Aa1GCXQME8487b>3fd-m}~`ZQN+@dCz+mA^67+OEv&p z5$!&7H0y|{pPVtdZ2ryP`1S0yN4%cO2Npi{zkkR6`Y--m%P&7SkhiVScaa>3E-FD_ z7J?F%vH__GU?QJ9#~CEBZKYd)C<58+q~qdX(e+87Qj*HFQYtAqt+Z^03*CjVSlHai zoB51n067W|*sHvn*xuxy9>hqDPBv6n%ELnrcFz(Wr|Xdn6YU$xtA`L>>D z;uBBo=nTYq>~@!TJQq?qWYGzq3tfSfg(FQIA)uuo4(Xs*g%Xy$hR1<*l^&vY%U0PFhW^%j|_WV&<2$Q28Iko*&9j1xK-@ zGXEMr2M`E~V^M%OA25CCIAn7LwkSM*G&4PCn=$iqmBEjEj&s=$){ZVHKbR-RC$SnB z*DJo4l;O1XvC7gv#rra_TFRXb=_obwOcU(VdkguL(Xcj?5FZmwy6Bq-}rtP ze&jVdK;`GYn;FA-^&pGB=Vu9Xd}DE}L;%XY?F&e zt$gpFNG{;xar@%b(_Z;SNOzqiF;eF=kXWXOmlaaHdK<{WzP8Jr2p#q2@DIehl z(=fh-f#ICQRSohxCBtzHDAX&5O0)=y3k)ePh- zC?C_ecdfP;zWRNxqVw4E58MYW9ReTE>Vp?zMI*q=b5Z%3hw6d9OC2Wz#Pg#o`Z*{L za!Fnq0Y2dum7nEviO;y!_Et@1zU&{f&Q2lP#6Ck&SK zPQaZ{@A=r+^qjS|cPLEdq#MApW*HjG_x$-l=D<$n{mgIst~aW)9(ec>?T-~89bHzCLt5vGK&f#g>rawMd<;HP zs%>z7_SOfR#m6w?GalhY-RgtIVj5$2{m*KlpS`W0>{#uz2x90Uk#v@REm~ zry;8!oQLsZ@q>Q+v#Y2;o!u*J)!KEoqNl^g4?bWQF8iuA&mY40L;0H<)#tp_#?P-Y zVMot8yY|)ZaoIuJIrGoYj%MQ~d1D$WKhGEV6M>3D4vL54>Ql>puaW2;#Xg1)8oOrm z#;xLE|4mR{P>7_p-dT12 zx^8QyRn~yBuf04S*>T`+Zfvr9?t8%g{p;V*=aOlO9lVnr1rD=5G&H17IdibquU~I3 ze$h+px))uql>u))!f+s8l*OM=A80yJiBk@RhdPlb@&~~LNj@F9$FN=D!yC@Scq*93 zdl*j2k*CW)U`iL$WriF!Jx{>aot{tMnpFz8$BnZq6o-JZ2X!`*&-YJCG|s`Z6y2X#hKW&bF&x^={

2@Qe16m%brN`6-8!Y5?e?^|pRRo2|f- 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 SDP6$;0000QD6n0O0LkAb^zk_F?hiyZwJF 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 literal 0 HcmV?d00001 diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2c9b8b293671ca7918589fb6bacccd85ccf340 GIT binary patch literal 102351 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 J>Jau({{g-2m&E`8 literal 0 HcmV?d00001 diff --git a/img/plugin_boot.png b/img/plugin_boot.png new file mode 100644 index 0000000000000000000000000000000000000000..a69e9b28fcad1adad0a56d26fcfdb6b8db3c7e22 GIT binary patch literal 58606 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 literal 0 HcmV?d00001 diff --git a/img/plugin_default.png b/img/plugin_default.png new file mode 100644 index 0000000000000000000000000000000000000000..786fab78eb5200a5514a09db03231f10863e7627 GIT binary patch literal 23470 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 literal 0 HcmV?d00001 diff --git a/img/plugin_tai.png b/img/plugin_tai.png new file mode 100644 index 0000000000000000000000000000000000000000..21da33e7c4a69735da68cc5c058227d8c3938e97 GIT binary patch literal 41192 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 IlwouRy?&3W9y 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 B>BRs5 literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000..9808eff --- /dev/null +++ b/index.php @@ -0,0 +1,8 @@ + + diff --git a/lib/deflate.js b/lib/deflate.js new file mode 100644 index 0000000..9696b5f --- /dev/null +++ b/lib/deflate.js @@ -0,0 +1,2060 @@ +/* + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc. + * JZlib is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +(function(global) { + "use strict"; + + // Global + + var MAX_BITS = 15; + var D_CODES = 30; + var BL_CODES = 19; + + var LENGTH_CODES = 29; + var LITERALS = 256; + var L_CODES = (LITERALS + 1 + LENGTH_CODES); + var HEAP_SIZE = (2 * L_CODES + 1); + + var END_BLOCK = 256; + + // Bit length codes must not exceed MAX_BL_BITS bits + var MAX_BL_BITS = 7; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + var REP_3_6 = 16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + var REPZ_3_10 = 17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + var REPZ_11_138 = 18; + + // The lengths of the bit length codes are sent in order of decreasing + // probability, to avoid transmitting the lengths for unused bit + // length codes. + + var Buf_size = 8 * 2; + + // JZlib version : "1.0.2" + var Z_DEFAULT_COMPRESSION = -1; + + // compression strategy + var Z_FILTERED = 1; + var Z_HUFFMAN_ONLY = 2; + var Z_DEFAULT_STRATEGY = 0; + + var Z_NO_FLUSH = 0; + var Z_PARTIAL_FLUSH = 1; + var Z_FULL_FLUSH = 3; + var Z_FINISH = 4; + + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_NEED_DICT = 2; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_BUF_ERROR = -5; + + // Tree + + // see definition of array dist_code below + var _dist_code = [ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, + 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 ]; + + function Tree() { + var that = this; + + // dyn_tree; // the dynamic tree + // max_code; // largest code with non zero frequency + // stat_desc; // the corresponding static tree + + // Compute the optimal bit lengths for a tree and update the total bit + // length + // for the current block. + // IN assertion: the fields freq and dad are set, heap[heap_max] and + // above are the tree nodes sorted by increasing frequency. + // OUT assertions: the field len is set to the optimal bit length, the + // array bl_count contains the frequencies for each bit length. + // The length opt_len is updated; static_len is also updated if stree is + // not null. + function gen_bitlen(s) { + var tree = that.dyn_tree; + var stree = that.stat_desc.static_tree; + var extra = that.stat_desc.extra_bits; + var base = that.stat_desc.extra_base; + var max_length = that.stat_desc.max_length; + var h; // heap index + var n, m; // iterate over the tree elements + var bits; // bit length + var xbits; // extra bits + var f; // frequency + var overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= MAX_BITS; bits++) + s.bl_count[bits] = 0; + + // In a first pass, compute the optimal bit lengths (which may + // overflow in the case of the bit length tree). + tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1] = bits; + // We overwrite tree[n*2+1] which is no longer needed + + if (n > that.max_code) + continue; // not a leaf node + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) + xbits = extra[n - base]; + f = tree[n * 2]; + s.opt_len += f * (bits + xbits); + if (stree) + s.static_len += f * (stree[n * 2 + 1] + xbits); + } + if (overflow === 0) + return; + + // This happens for example on obj2 and pic of the Calgary corpus + // Find the first bit length which could increase: + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) + bits--; + s.bl_count[bits]--; // move one leaf down the tree + s.bl_count[bits + 1] += 2; // move one overflow item as its brother + s.bl_count[max_length]--; + // The brother of the overflow item also moves one step up, + // but this does not affect bl_count[max_length] + overflow -= 2; + } while (overflow > 0); + + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > that.max_code) + continue; + if (tree[m * 2 + 1] != bits) { + s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2]; + tree[m * 2 + 1] = bits; + } + n--; + } + } + } + + // Reverse the first len bits of a code, using straightforward code (a + // faster + // method would use a table) + // IN assertion: 1 <= len <= 15 + function bi_reverse(code, // the value to invert + len // its bit length + ) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; + } + + // Generate the codes for a given tree and bit counts (which need not be + // optimal). + // IN assertion: the array bl_count contains the bit length statistics for + // the given tree and the field len is set for all tree elements. + // OUT assertion: the field code is set for all tree elements of non + // zero code length. + function gen_codes(tree, // the tree to decorate + max_code, // largest code with non zero frequency + bl_count // number of codes at each bit length + ) { + var next_code = []; // next code value for each + // bit length + var code = 0; // running code value + var bits; // bit index + var n; // code index + var len; + + // The distribution counts are first used to generate the code values + // without bit reversal. + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = ((code + bl_count[bits - 1]) << 1); + } + + // Check that the bit counts in bl_count are consistent. The last code + // must be all ones. + // Assert (code + bl_count[MAX_BITS]-1 == (1<= 1; n--) + s.pqdownheap(tree, n); + + // Construct the Huffman tree by repeatedly combining the least two + // frequent nodes. + + node = elems; // next internal node of the tree + do { + // n = node of least frequency + n = s.heap[1]; + s.heap[1] = s.heap[s.heap_len--]; + s.pqdownheap(tree, 1); + m = s.heap[1]; // m = node of next least frequency + + s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency + s.heap[--s.heap_max] = m; + + // Create a new node father of n and m + tree[node * 2] = (tree[n * 2] + tree[m * 2]); + s.depth[node] = Math.max(s.depth[n], s.depth[m]) + 1; + tree[n * 2 + 1] = tree[m * 2 + 1] = node; + + // and insert the new node in the heap + s.heap[1] = node++; + s.pqdownheap(tree, 1); + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1]; + + // At this point, the fields freq and dad are set. We can now + // generate the bit lengths. + + gen_bitlen(s); + + // The field len is now set, we can generate the bit codes + gen_codes(tree, that.max_code, s.bl_count); + }; + + } + + Tree._length_code = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, + 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 ]; + + Tree.base_length = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 ]; + + Tree.base_dist = [ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, + 24576 ]; + + // Mapping from a distance to a distance code. dist is the distance - 1 and + // must not have side effects. _dist_code[256] and _dist_code[257] are never + // used. + Tree.d_code = function(dist) { + return ((dist) < 256 ? _dist_code[dist] : _dist_code[256 + ((dist) >>> 7)]); + }; + + // extra bits for each length code + Tree.extra_lbits = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 ]; + + // extra bits for each distance code + Tree.extra_dbits = [ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ]; + + // extra bits for each bit length code + Tree.extra_blbits = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 ]; + + Tree.bl_order = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + // StaticTree + + function StaticTree(static_tree, extra_bits, extra_base, elems, max_length) { + var that = this; + that.static_tree = static_tree; + that.extra_bits = extra_bits; + that.extra_base = extra_base; + that.elems = elems; + that.max_length = max_length; + } + + StaticTree.static_ltree = [ 12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, 2, 8, + 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, 10, 8, 138, 8, 74, 8, 202, 8, 42, + 8, 170, 8, 106, 8, 234, 8, 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8, + 22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, 30, 8, 158, 8, 94, 8, + 222, 8, 62, 8, 190, 8, 126, 8, 254, 8, 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, + 8, 241, 8, 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, 5, 8, 133, 8, + 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, 13, 8, 141, 8, 77, 8, 205, 8, 45, 8, + 173, 8, 109, 8, 237, 8, 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9, + 51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, 43, 9, 299, 9, 171, 9, + 427, 9, 107, 9, 363, 9, 235, 9, 491, 9, 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, + 9, 251, 9, 507, 9, 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, 23, + 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, 15, 9, 271, 9, 143, 9, + 399, 9, 79, 9, 335, 9, 207, 9, 463, 9, 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, + 223, 9, 479, 9, 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, 0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, 8, 7, 72, 7, + 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, + 99, 8, 227, 8 ]; + + StaticTree.static_dtree = [ 0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, 1, 5, 17, 5, 9, 5, + 25, 5, 5, 5, 21, 5, 13, 5, 29, 5, 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 ]; + + StaticTree.static_l_desc = new StaticTree(StaticTree.static_ltree, Tree.extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + + StaticTree.static_d_desc = new StaticTree(StaticTree.static_dtree, Tree.extra_dbits, 0, D_CODES, MAX_BITS); + + StaticTree.static_bl_desc = new StaticTree(null, Tree.extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + // Deflate + + var MAX_MEM_LEVEL = 9; + var DEF_MEM_LEVEL = 8; + + function Config(good_length, max_lazy, nice_length, max_chain, func) { + var that = this; + that.good_length = good_length; + that.max_lazy = max_lazy; + that.nice_length = nice_length; + that.max_chain = max_chain; + that.func = func; + } + + var STORED = 0; + var FAST = 1; + var SLOW = 2; + var config_table = [ new Config(0, 0, 0, 0, STORED), new Config(4, 4, 8, 4, FAST), new Config(4, 5, 16, 8, FAST), new Config(4, 6, 32, 32, FAST), + new Config(4, 4, 16, 16, SLOW), new Config(8, 16, 32, 32, SLOW), new Config(8, 16, 128, 128, SLOW), new Config(8, 32, 128, 256, SLOW), + new Config(32, 128, 258, 1024, SLOW), new Config(32, 258, 258, 4096, SLOW) ]; + + var z_errmsg = [ "need dictionary", // Z_NEED_DICT + // 2 + "stream end", // Z_STREAM_END 1 + "", // Z_OK 0 + "", // Z_ERRNO (-1) + "stream error", // Z_STREAM_ERROR (-2) + "data error", // Z_DATA_ERROR (-3) + "", // Z_MEM_ERROR (-4) + "buffer error", // Z_BUF_ERROR (-5) + "",// Z_VERSION_ERROR (-6) + "" ]; + + // block not completed, need more input or more output + var NeedMore = 0; + + // block flush performed + var BlockDone = 1; + + // finish started, need only more output at next deflate + var FinishStarted = 2; + + // finish done, accept no more input or output + var FinishDone = 3; + + // preset dictionary flag in zlib header + var PRESET_DICT = 0x20; + + var INIT_STATE = 42; + var BUSY_STATE = 113; + var FINISH_STATE = 666; + + // The deflate compression method + var Z_DEFLATED = 8; + + var STORED_BLOCK = 0; + var STATIC_TREES = 1; + var DYN_TREES = 2; + + var MIN_MATCH = 3; + var MAX_MATCH = 258; + var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + + function smaller(tree, n, m, depth) { + var tn2 = tree[n * 2]; + var tm2 = tree[m * 2]; + return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m])); + } + + function Deflate() { + + var that = this; + var strm; // pointer back to this zlib stream + var status; // as the name implies + // pending_buf; // output still pending + var pending_buf_size; // size of pending_buf + // pending_out; // next pending byte to output to the stream + // pending; // nb of bytes in the pending buffer + var method; // STORED (for zip only) or DEFLATED + var last_flush; // value of flush param for previous deflate call + + var w_size; // LZ77 window size (32K by default) + var w_bits; // log2(w_size) (8..16) + var w_mask; // w_size - 1 + + var window; + // Sliding window. Input bytes are read into the second half of the window, + // and move to the first half later to keep a dictionary of at least wSize + // bytes. With this organization, matches are limited to a distance of + // wSize-MAX_MATCH bytes, but this ensures that IO is always + // performed with a length multiple of the block size. Also, it limits + // the window size to 64K, which is quite useful on MSDOS. + // To do: use the user input buffer as sliding window. + + var window_size; + // Actual size of window: 2*wSize, except when the user input buffer + // is directly used as sliding window. + + var prev; + // Link to older string with same hash index. To limit the size of this + // array to 64K, this link is maintained only for the last 32K strings. + // An index in this array is thus a window index modulo 32K. + + var head; // Heads of the hash chains or NIL. + + var ins_h; // hash index of string to be inserted + var hash_size; // number of elements in hash table + var hash_bits; // log2(hash_size) + var hash_mask; // hash_size-1 + + // Number of bits by which ins_h must be shifted at each input + // step. It must be such that after MIN_MATCH steps, the oldest + // byte no longer takes part in the hash key, that is: + // hash_shift * MIN_MATCH >= hash_bits + var hash_shift; + + // Window position at the beginning of the current output block. Gets + // negative when the window is moved backwards. + + var block_start; + + var match_length; // length of best match + var prev_match; // previous match + var match_available; // set if previous match exists + var strstart; // start of string to insert + var match_start; // start of matching string + var lookahead; // number of valid bytes ahead in window + + // Length of the best match at previous step. Matches not greater than this + // are discarded. This is used in the lazy match evaluation. + var prev_length; + + // To speed up deflation, hash chains are never searched beyond this + // length. A higher limit improves compression ratio but degrades the speed. + var max_chain_length; + + // Attempt to find a better match only when the current match is strictly + // smaller than this value. This mechanism is used only for compression + // levels >= 4. + var max_lazy_match; + + // Insert new strings in the hash table only if the match length is not + // greater than this length. This saves time but degrades compression. + // max_insert_length is used only for compression levels <= 3. + + var level; // compression level (1..9) + var strategy; // favor or force Huffman coding + + // Use a faster search when the previous match is longer than this + var good_match; + + // Stop searching when current match exceeds this + var nice_match; + + var dyn_ltree; // literal and length tree + var dyn_dtree; // distance tree + var bl_tree; // Huffman tree for bit lengths + + var l_desc = new Tree(); // desc for literal tree + var d_desc = new Tree(); // desc for distance tree + var bl_desc = new Tree(); // desc for bit length tree + + // that.heap_len; // number of elements in the heap + // that.heap_max; // element of largest frequency + // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + // The same heap array is used to build all trees. + + // Depth of each subtree used as tie breaker for trees of equal frequency + that.depth = []; + + var l_buf; // index for literals or lengths */ + + // Size of match buffer for literals/lengths. There are 4 reasons for + // limiting lit_bufsize to 64K: + // - frequencies can be kept in 16 bit counters + // - if compression is not successful for the first block, all input + // data is still in the window so we can still emit a stored block even + // when input comes from standard input. (This can also be done for + // all blocks if lit_bufsize is not greater than 32K.) + // - if compression is not successful for a file smaller than 64K, we can + // even emit a stored file instead of a stored block (saving 5 bytes). + // This is applicable only for zip (not gzip or zlib). + // - creating new Huffman trees less frequently may not provide fast + // adaptation to changes in the input data statistics. (Take for + // example a binary file with poorly compressible code followed by + // a highly compressible string table.) Smaller buffer sizes give + // fast adaptation but have of course the overhead of transmitting + // trees more frequently. + // - I can't count above 4 + var lit_bufsize; + + var last_lit; // running index in l_buf + + // Buffer for distances. To simplify the code, d_buf and l_buf have + // the same number of elements. To use different lengths, an extra flag + // array would be necessary. + + var d_buf; // index of pendig_buf + + // that.opt_len; // bit length of current block with optimal trees + // that.static_len; // bit length of current block with static trees + var matches; // number of string matches in current block + var last_eob_len; // bit length of EOB code for last block + + // Output buffer. bits are inserted starting at the bottom (least + // significant bits). + var bi_buf; + + // Number of valid bits in bi_buf. All bits above the last valid bit + // are always zero. + var bi_valid; + + // number of codes at each bit length for an optimal tree + that.bl_count = []; + + // heap used to build the Huffman trees + that.heap = []; + + dyn_ltree = []; + dyn_dtree = []; + bl_tree = []; + + function lm_init() { + var i; + window_size = 2 * w_size; + + head[hash_size - 1] = 0; + for (i = 0; i < hash_size - 1; i++) { + head[i] = 0; + } + + // Set the default configuration parameters: + max_lazy_match = config_table[level].max_lazy; + good_match = config_table[level].good_length; + nice_match = config_table[level].nice_length; + max_chain_length = config_table[level].max_chain; + + strstart = 0; + block_start = 0; + lookahead = 0; + match_length = prev_length = MIN_MATCH - 1; + match_available = 0; + ins_h = 0; + } + + function init_block() { + var i; + // Initialize the trees. + for (i = 0; i < L_CODES; i++) + dyn_ltree[i * 2] = 0; + for (i = 0; i < D_CODES; i++) + dyn_dtree[i * 2] = 0; + for (i = 0; i < BL_CODES; i++) + bl_tree[i * 2] = 0; + + dyn_ltree[END_BLOCK * 2] = 1; + that.opt_len = that.static_len = 0; + last_lit = matches = 0; + } + + // Initialize the tree data structures for a new zlib stream. + function tr_init() { + + l_desc.dyn_tree = dyn_ltree; + l_desc.stat_desc = StaticTree.static_l_desc; + + d_desc.dyn_tree = dyn_dtree; + d_desc.stat_desc = StaticTree.static_d_desc; + + bl_desc.dyn_tree = bl_tree; + bl_desc.stat_desc = StaticTree.static_bl_desc; + + bi_buf = 0; + bi_valid = 0; + last_eob_len = 8; // enough lookahead for inflate + + // Initialize the first block of the first file: + init_block(); + } + + // Restore the heap property by moving down the tree starting at node k, + // exchanging a node with the smallest of its two sons if necessary, + // stopping + // when the heap property is re-established (each father smaller than its + // two sons). + that.pqdownheap = function(tree, // the tree to restore + k // node to move down + ) { + var heap = that.heap; + var v = heap[k]; + var j = k << 1; // left son of k + while (j <= that.heap_len) { + // Set j to the smallest of the two sons: + if (j < that.heap_len && smaller(tree, heap[j + 1], heap[j], that.depth)) { + j++; + } + // Exit if v is smaller than both sons + if (smaller(tree, v, heap[j], that.depth)) + break; + + // Exchange v with the smallest son + heap[k] = heap[j]; + k = j; + // And continue down the tree, setting j to the left son of k + j <<= 1; + } + heap[k] = v; + }; + + // Scan a literal or distance tree to determine the frequencies of the codes + // in the bit length tree. + function scan_tree(tree,// the tree to be scanned + max_code // and its largest code of non zero frequency + ) { + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0 * 2 + 1]; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1] = 0xffff; // guard + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + bl_tree[curlen * 2] += count; + } else if (curlen !== 0) { + if (curlen != prevlen) + bl_tree[curlen * 2]++; + bl_tree[REP_3_6 * 2]++; + } else if (count <= 10) { + bl_tree[REPZ_3_10 * 2]++; + } else { + bl_tree[REPZ_11_138 * 2]++; + } + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + } + + // Construct the Huffman tree for the bit lengths and return the index in + // bl_order of the last bit length code to send. + function build_bl_tree() { + var max_blindex; // index of last bit length code of non zero freq + + // Determine the bit length frequencies for literal and distance trees + scan_tree(dyn_ltree, l_desc.max_code); + scan_tree(dyn_dtree, d_desc.max_code); + + // Build the bit length tree: + bl_desc.build_tree(that); + // opt_len now includes the length of the tree representations, except + // the lengths of the bit lengths codes and the 5+5+4 bits for the + // counts. + + // Determine the number of bit length codes to send. The pkzip format + // requires that at least 4 bit length codes be sent. (appnote.txt says + // 3 but the actual value used is 4.) + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] !== 0) + break; + } + // Update opt_len to include the bit length tree and counts + that.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + + return max_blindex; + } + + // Output a byte on the stream. + // IN assertion: there is enough room in pending_buf. + function put_byte(p) { + that.pending_buf[that.pending++] = p; + } + + function put_short(w) { + put_byte(w & 0xff); + put_byte((w >>> 8) & 0xff); + } + + function putShortMSB(b) { + put_byte((b >> 8) & 0xff); + put_byte((b & 0xff) & 0xff); + } + + function send_bits(value, length) { + var val, len = length; + if (bi_valid > Buf_size - len) { + val = value; + // bi_buf |= (val << bi_valid); + bi_buf |= ((val << bi_valid) & 0xffff); + put_short(bi_buf); + bi_buf = val >>> (Buf_size - bi_valid); + bi_valid += len - Buf_size; + } else { + // bi_buf |= (value) << bi_valid; + bi_buf |= (((value) << bi_valid) & 0xffff); + bi_valid += len; + } + } + + function send_code(c, tree) { + var c2 = c * 2; + send_bits(tree[c2] & 0xffff, tree[c2 + 1] & 0xffff); + } + + // Send a literal or distance tree in compressed form, using the codes in + // bl_tree. + function send_tree(tree,// the tree to be sent + max_code // and its largest code of non zero frequency + ) { + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0 * 2 + 1]; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { + send_code(curlen, bl_tree); + } while (--count !== 0); + } else if (curlen !== 0) { + if (curlen != prevlen) { + send_code(curlen, bl_tree); + count--; + } + send_code(REP_3_6, bl_tree); + send_bits(count - 3, 2); + } else if (count <= 10) { + send_code(REPZ_3_10, bl_tree); + send_bits(count - 3, 3); + } else { + send_code(REPZ_11_138, bl_tree); + send_bits(count - 11, 7); + } + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + } + + // Send the header for a block using dynamic Huffman trees: the counts, the + // lengths of the bit length codes, the literal tree and the distance tree. + // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + function send_all_trees(lcodes, dcodes, blcodes) { + var rank; // index in bl_order + + send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt + send_bits(dcodes - 1, 5); + send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) { + send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3); + } + send_tree(dyn_ltree, lcodes - 1); // literal tree + send_tree(dyn_dtree, dcodes - 1); // distance tree + } + + // Flush the bit buffer, keeping at most 7 bits in it. + function bi_flush() { + if (bi_valid == 16) { + put_short(bi_buf); + bi_buf = 0; + bi_valid = 0; + } else if (bi_valid >= 8) { + put_byte(bi_buf & 0xff); + bi_buf >>>= 8; + bi_valid -= 8; + } + } + + // Send one empty static block to give enough lookahead for inflate. + // This takes 10 bits, of which 7 may remain in the bit buffer. + // The current inflate code requires 9 bits of lookahead. If the + // last two codes for the previous block (real code plus EOB) were coded + // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + // the last real code. In this case we send two empty static blocks instead + // of one. (There are no problems if the previous block is stored or fixed.) + // To simplify the code, we assume the worst case of last real code encoded + // on one bit only. + function _tr_align() { + send_bits(STATIC_TREES << 1, 3); + send_code(END_BLOCK, StaticTree.static_ltree); + + bi_flush(); + + // Of the 10 bits for the empty block, we have already sent + // (10 - bi_valid) bits. The lookahead for the last real code (before + // the EOB of the previous block) was thus at least one plus the length + // of the EOB plus what we have just sent of the empty static block. + if (1 + last_eob_len + 10 - bi_valid < 9) { + send_bits(STATIC_TREES << 1, 3); + send_code(END_BLOCK, StaticTree.static_ltree); + bi_flush(); + } + last_eob_len = 7; + } + + // Save the match info and tally the frequency counts. Return true if + // the current block must be flushed. + function _tr_tally(dist, // distance of matched string + lc // match length-MIN_MATCH or unmatched char (if dist==0) + ) { + var out_length, in_length, dcode; + that.pending_buf[d_buf + last_lit * 2] = (dist >>> 8) & 0xff; + that.pending_buf[d_buf + last_lit * 2 + 1] = dist & 0xff; + + that.pending_buf[l_buf + last_lit] = lc & 0xff; + last_lit++; + + if (dist === 0) { + // lc is the unmatched char + dyn_ltree[lc * 2]++; + } else { + matches++; + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++; + dyn_dtree[Tree.d_code(dist) * 2]++; + } + + if ((last_lit & 0x1fff) === 0 && level > 2) { + // Compute an upper bound for the compressed length + out_length = last_lit * 8; + in_length = strstart - block_start; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += dyn_dtree[dcode * 2] * (5 + Tree.extra_dbits[dcode]); + } + out_length >>>= 3; + if ((matches < Math.floor(last_lit / 2)) && out_length < Math.floor(in_length / 2)) + return true; + } + + return (last_lit == lit_bufsize - 1); + // We avoid equality with lit_bufsize because of wraparound at 64K + // on 16 bit machines and because stored blocks are restricted to + // 64K-1 bytes. + } + + // Send the block data compressed using the given Huffman trees + function compress_block(ltree, dtree) { + var dist; // distance of matched string + var lc; // match length or unmatched char (if dist === 0) + var lx = 0; // running index in l_buf + var code; // the code to send + var extra; // number of extra bits to send + + if (last_lit !== 0) { + do { + dist = ((that.pending_buf[d_buf + lx * 2] << 8) & 0xff00) | (that.pending_buf[d_buf + lx * 2 + 1] & 0xff); + lc = (that.pending_buf[l_buf + lx]) & 0xff; + lx++; + + if (dist === 0) { + send_code(lc, ltree); // send a literal byte + } else { + // Here, lc is the match length - MIN_MATCH + code = Tree._length_code[lc]; + + send_code(code + LITERALS + 1, ltree); // send the length + // code + extra = Tree.extra_lbits[code]; + if (extra !== 0) { + lc -= Tree.base_length[code]; + send_bits(lc, extra); // send the extra length bits + } + dist--; // dist is now the match distance - 1 + code = Tree.d_code(dist); + + send_code(code, dtree); // send the distance code + extra = Tree.extra_dbits[code]; + if (extra !== 0) { + dist -= Tree.base_dist[code]; + send_bits(dist, extra); // send the extra distance bits + } + } // literal or match pair ? + + // Check that the overlay between pending_buf and d_buf+l_buf is + // ok: + } while (lx < last_lit); + } + + send_code(END_BLOCK, ltree); + last_eob_len = ltree[END_BLOCK * 2 + 1]; + } + + // Flush the bit buffer and align the output on a byte boundary + function bi_windup() { + if (bi_valid > 8) { + put_short(bi_buf); + } else if (bi_valid > 0) { + put_byte(bi_buf & 0xff); + } + bi_buf = 0; + bi_valid = 0; + } + + // Copy a stored block, storing first the length and its + // one's complement if requested. + function copy_block(buf, // the input data + len, // its length + header // true if block header must be written + ) { + bi_windup(); // align on byte boundary + last_eob_len = 8; // enough lookahead for inflate + + if (header) { + put_short(len); + put_short(~len); + } + + that.pending_buf.set(window.subarray(buf, buf + len), that.pending); + that.pending += len; + } + + // Send a stored block + function _tr_stored_block(buf, // input block + stored_len, // length of input block + eof // true if this is the last block for a file + ) { + send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type + copy_block(buf, stored_len, true); // with header + } + + // Determine the best encoding for the current block: dynamic trees, static + // trees or store, and output the encoded block to the zip file. + function _tr_flush_block(buf, // input block, or NULL if too old + stored_len, // length of input block + eof // true if this is the last block for a file + ) { + var opt_lenb, static_lenb;// opt_len and static_len in bytes + var max_blindex = 0; // index of last bit length code of non zero freq + + // Build the Huffman trees unless a stored block is forced + if (level > 0) { + // Construct the literal and distance trees + l_desc.build_tree(that); + + d_desc.build_tree(that); + + // At this point, opt_len and static_len are the total bit lengths + // of + // the compressed block data, excluding the tree representations. + + // Build the bit length tree for the above two trees, and get the + // index + // in bl_order of the last bit length code to send. + max_blindex = build_bl_tree(); + + // Determine the best encoding. Compute first the block length in + // bytes + opt_lenb = (that.opt_len + 3 + 7) >>> 3; + static_lenb = (that.static_len + 3 + 7) >>> 3; + + if (static_lenb <= opt_lenb) + opt_lenb = static_lenb; + } else { + opt_lenb = static_lenb = stored_len + 5; // force a stored block + } + + if ((stored_len + 4 <= opt_lenb) && buf != -1) { + // 4: two words for the lengths + // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + // Otherwise we can't have processed more than WSIZE input bytes + // since + // the last block flush, because compression would have been + // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + // transform a block into a stored block. + _tr_stored_block(buf, stored_len, eof); + } else if (static_lenb == opt_lenb) { + send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3); + compress_block(StaticTree.static_ltree, StaticTree.static_dtree); + } else { + send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3); + send_all_trees(l_desc.max_code + 1, d_desc.max_code + 1, max_blindex + 1); + compress_block(dyn_ltree, dyn_dtree); + } + + // The above check is made mod 2^32, for files larger than 512 MB + // and uLong implemented on 32 bits. + + init_block(); + + if (eof) { + bi_windup(); + } + } + + function flush_block_only(eof) { + _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof); + block_start = strstart; + strm.flush_pending(); + } + + // Fill the window when the lookahead becomes insufficient. + // Updates strstart and lookahead. + // + // IN assertion: lookahead < MIN_LOOKAHEAD + // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + // At least one byte has been read, or avail_in === 0; reads are + // performed for at least two bytes (required for the zip translate_eol + // option -- not supported here). + function fill_window() { + var n, m; + var p; + var more; // Amount of free space at the end of the window. + + do { + more = (window_size - lookahead - strstart); + + // Deal with !@#$% 64K limit: + if (more === 0 && strstart === 0 && lookahead === 0) { + more = w_size; + } else if (more == -1) { + // Very unlikely, but possible on 16 bit machine if strstart == + // 0 + // and lookahead == 1 (input done one byte at time) + more--; + + // If the window is almost full and there is insufficient + // lookahead, + // move the upper half to the lower one to make room in the + // upper half. + } else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) { + window.set(window.subarray(w_size, w_size + w_size), 0); + + match_start -= w_size; + strstart -= w_size; // we now have strstart >= MAX_DIST + block_start -= w_size; + + // Slide the hash table (could be avoided with 32 bit values + // at the expense of memory usage). We slide even when level == + // 0 + // to keep the hash table consistent if we switch back to level + // > 0 + // later. (Using level 0 permanently is not an optimal usage of + // zlib, so we don't care about this pathological case.) + + n = hash_size; + p = n; + do { + m = (head[--p] & 0xffff); + head[p] = (m >= w_size ? m - w_size : 0); + } while (--n !== 0); + + n = w_size; + p = n; + do { + m = (prev[--p] & 0xffff); + prev[p] = (m >= w_size ? m - w_size : 0); + // If n is not on any hash chain, prev[n] is garbage but + // its value will never be used. + } while (--n !== 0); + more += w_size; + } + + if (strm.avail_in === 0) + return; + + // If there was no sliding: + // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + // more == window_size - lookahead - strstart + // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + // => more >= window_size - 2*WSIZE + 2 + // In the BIG_MEM or MMAP case (not yet supported), + // window_size == input_size + MIN_LOOKAHEAD && + // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + // Otherwise, window_size == 2*WSIZE so more >= 2. + // If there was sliding, more >= WSIZE. So in all cases, more >= 2. + + n = strm.read_buf(window, strstart + lookahead, more); + lookahead += n; + + // Initialize the hash value now that we have some input: + if (lookahead >= MIN_MATCH) { + ins_h = window[strstart] & 0xff; + ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; + } + // If the whole input has less than MIN_MATCH bytes, ins_h is + // garbage, + // but this is not important since only literal bytes will be + // emitted. + } while (lookahead < MIN_LOOKAHEAD && strm.avail_in !== 0); + } + + // Copy without compression as much as possible from the input stream, + // return + // the current block state. + // This function does not insert new strings in the dictionary since + // uncompressible data is probably not useful. This function is used + // only for the level=0 compression option. + // NOTE: this function should be optimized to avoid extra copying from + // window to pending_buf. + function deflate_stored(flush) { + // Stored blocks are limited to 0xffff bytes, pending_buf is limited + // to pending_buf_size, and each stored block has a 5 byte header: + + var max_block_size = 0xffff; + var max_start; + + if (max_block_size > pending_buf_size - 5) { + max_block_size = pending_buf_size - 5; + } + + // Copy as much as possible from input to output: + while (true) { + // Fill the window as much as possible: + if (lookahead <= 1) { + fill_window(); + if (lookahead === 0 && flush == Z_NO_FLUSH) + return NeedMore; + if (lookahead === 0) + break; // flush the current block + } + + strstart += lookahead; + lookahead = 0; + + // Emit a stored block if pending_buf will be full: + max_start = block_start + max_block_size; + if (strstart === 0 || strstart >= max_start) { + // strstart === 0 is possible when wraparound on 16-bit machine + lookahead = (strstart - max_start); + strstart = max_start; + + flush_block_only(false); + if (strm.avail_out === 0) + return NeedMore; + + } + + // Flush if we may have to slide, otherwise block_start may become + // negative and the data will be gone: + if (strstart - block_start >= w_size - MIN_LOOKAHEAD) { + flush_block_only(false); + if (strm.avail_out === 0) + return NeedMore; + } + } + + flush_block_only(flush == Z_FINISH); + if (strm.avail_out === 0) + return (flush == Z_FINISH) ? FinishStarted : NeedMore; + + return flush == Z_FINISH ? FinishDone : BlockDone; + } + + function longest_match(cur_match) { + var chain_length = max_chain_length; // max hash chain length + var scan = strstart; // current string + var match; // matched string + var len; // length of current match + var best_len = prev_length; // best match length so far + var limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0; + var _nice_match = nice_match; + + // Stop when cur_match becomes <= limit. To simplify the code, + // we prevent matches with the string of window index 0. + + var wmask = w_mask; + + var strend = strstart + MAX_MATCH; + var scan_end1 = window[scan + best_len - 1]; + var scan_end = window[scan + best_len]; + + // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of + // 16. + // It is easy to get rid of this optimization if necessary. + + // Do not waste too much time if we already have a good match: + if (prev_length >= good_match) { + chain_length >>= 2; + } + + // Do not look for matches beyond the end of the input. This is + // necessary + // to make deflate deterministic. + if (_nice_match > lookahead) + _nice_match = lookahead; + + do { + match = cur_match; + + // Skip to next match if the match length cannot increase + // or if the match length is less than 2: + if (window[match + best_len] != scan_end || window[match + best_len - 1] != scan_end1 || window[match] != window[scan] + || window[++match] != window[scan + 1]) + continue; + + // The check at best_len-1 can be removed because it will be made + // again later. (This heuristic is not always a win.) + // It is not necessary to compare scan[2] and match[2] since they + // are always equal when the other bytes match, given that + // the hash keys are equal and that HASH_BITS >= 8. + scan += 2; + match++; + + // We check for insufficient lookahead only every 8th comparison; + // the 256th check will be made at strstart+258. + do { + } while (window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] + && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] + && window[++scan] == window[++match] && window[++scan] == window[++match] && scan < strend); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + match_start = cur_match; + best_len = len; + if (len >= _nice_match) + break; + scan_end1 = window[scan + best_len - 1]; + scan_end = window[scan + best_len]; + } + + } while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length !== 0); + + if (best_len <= lookahead) + return best_len; + return lookahead; + } + + // Compress as much as possible from the input stream, return the current + // block state. + // This function does not perform lazy evaluation of matches and inserts + // new strings in the dictionary only for unmatched strings or for short + // matches. It is used only for the fast compression options. + function deflate_fast(flush) { + // short hash_head = 0; // head of the hash chain + var hash_head = 0; // head of the hash chain + var bflush; // set if current block must be flushed + + while (true) { + // Make sure that we always have enough lookahead, except + // at the end of the input file. We need MAX_MATCH bytes + // for the next match, plus MIN_MATCH bytes to insert the + // string following the next match. + if (lookahead < MIN_LOOKAHEAD) { + fill_window(); + if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return NeedMore; + } + if (lookahead === 0) + break; // flush the current block + } + + // Insert the string window[strstart .. strstart+2] in the + // dictionary, and set hash_head to the head of the hash chain: + if (lookahead >= MIN_MATCH) { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = strstart; + } + + // Find the longest match, discarding those <= prev_length. + // At this point we have always match_length < MIN_MATCH + + if (hash_head !== 0 && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) { + // To simplify the code, we prevent matches with the string + // of window index 0 (in particular we have to avoid a match + // of the string with itself at the start of the input file). + if (strategy != Z_HUFFMAN_ONLY) { + match_length = longest_match(hash_head); + } + // longest_match() sets match_start + } + if (match_length >= MIN_MATCH) { + // check_match(strstart, match_start, match_length); + + bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH); + + lookahead -= match_length; + + // Insert new strings in the hash table only if the match length + // is not too large. This saves time but degrades compression. + if (match_length <= max_lazy_match && lookahead >= MIN_MATCH) { + match_length--; // string at strstart already in hash table + do { + strstart++; + + ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = strstart; + + // strstart never exceeds WSIZE-MAX_MATCH, so there are + // always MIN_MATCH bytes ahead. + } while (--match_length !== 0); + strstart++; + } else { + strstart += match_length; + match_length = 0; + ins_h = window[strstart] & 0xff; + + ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; + // If lookahead < MIN_MATCH, ins_h is garbage, but it does + // not + // matter since it will be recomputed at next deflate call. + } + } else { + // No match, output a literal byte + + bflush = _tr_tally(0, window[strstart] & 0xff); + lookahead--; + strstart++; + } + if (bflush) { + + flush_block_only(false); + if (strm.avail_out === 0) + return NeedMore; + } + } + + flush_block_only(flush == Z_FINISH); + if (strm.avail_out === 0) { + if (flush == Z_FINISH) + return FinishStarted; + else + return NeedMore; + } + return flush == Z_FINISH ? FinishDone : BlockDone; + } + + // Same as above, but achieves better compression. We use a lazy + // evaluation for matches: a match is finally adopted only if there is + // no better match at the next window position. + function deflate_slow(flush) { + // short hash_head = 0; // head of hash chain + var hash_head = 0; // head of hash chain + var bflush; // set if current block must be flushed + var max_insert; + + // Process the input block. + while (true) { + // Make sure that we always have enough lookahead, except + // at the end of the input file. We need MAX_MATCH bytes + // for the next match, plus MIN_MATCH bytes to insert the + // string following the next match. + + if (lookahead < MIN_LOOKAHEAD) { + fill_window(); + if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return NeedMore; + } + if (lookahead === 0) + break; // flush the current block + } + + // Insert the string window[strstart .. strstart+2] in the + // dictionary, and set hash_head to the head of the hash chain: + + if (lookahead >= MIN_MATCH) { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = strstart; + } + + // Find the longest match, discarding those <= prev_length. + prev_length = match_length; + prev_match = match_start; + match_length = MIN_MATCH - 1; + + if (hash_head !== 0 && prev_length < max_lazy_match && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) { + // To simplify the code, we prevent matches with the string + // of window index 0 (in particular we have to avoid a match + // of the string with itself at the start of the input file). + + if (strategy != Z_HUFFMAN_ONLY) { + match_length = longest_match(hash_head); + } + // longest_match() sets match_start + + if (match_length <= 5 && (strategy == Z_FILTERED || (match_length == MIN_MATCH && strstart - match_start > 4096))) { + + // If prev_match is also MIN_MATCH, match_start is garbage + // but we will ignore the current match anyway. + match_length = MIN_MATCH - 1; + } + } + + // If there was a match at the previous step and the current + // match is not better, output the previous match: + if (prev_length >= MIN_MATCH && match_length <= prev_length) { + max_insert = strstart + lookahead - MIN_MATCH; + // Do not insert strings in hash table beyond this. + + // check_match(strstart-1, prev_match, prev_length); + + bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); + + // Insert in hash table all strings up to the end of the match. + // strstart-1 and strstart are already inserted. If there is not + // enough lookahead, the last two strings are not inserted in + // the hash table. + lookahead -= prev_length - 1; + prev_length -= 2; + do { + if (++strstart <= max_insert) { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = strstart; + } + } while (--prev_length !== 0); + match_available = 0; + match_length = MIN_MATCH - 1; + strstart++; + + if (bflush) { + flush_block_only(false); + if (strm.avail_out === 0) + return NeedMore; + } + } else if (match_available !== 0) { + + // If there was no match at the previous position, output a + // single literal. If there was a match but the current match + // is longer, truncate the previous match to a single literal. + + bflush = _tr_tally(0, window[strstart - 1] & 0xff); + + if (bflush) { + flush_block_only(false); + } + strstart++; + lookahead--; + if (strm.avail_out === 0) + return NeedMore; + } else { + // There is no previous match to compare with, wait for + // the next step to decide. + + match_available = 1; + strstart++; + lookahead--; + } + } + + if (match_available !== 0) { + bflush = _tr_tally(0, window[strstart - 1] & 0xff); + match_available = 0; + } + flush_block_only(flush == Z_FINISH); + + if (strm.avail_out === 0) { + if (flush == Z_FINISH) + return FinishStarted; + else + return NeedMore; + } + + return flush == Z_FINISH ? FinishDone : BlockDone; + } + + function deflateReset(strm) { + strm.total_in = strm.total_out = 0; + strm.msg = null; // + + that.pending = 0; + that.pending_out = 0; + + status = BUSY_STATE; + + last_flush = Z_NO_FLUSH; + + tr_init(); + lm_init(); + return Z_OK; + } + + that.deflateInit = function(strm, _level, bits, _method, memLevel, _strategy) { + if (!_method) + _method = Z_DEFLATED; + if (!memLevel) + memLevel = DEF_MEM_LEVEL; + if (!_strategy) + _strategy = Z_DEFAULT_STRATEGY; + + // byte[] my_version=ZLIB_VERSION; + + // + // if (!version || version[0] != my_version[0] + // || stream_size != sizeof(z_stream)) { + // return Z_VERSION_ERROR; + // } + + strm.msg = null; + + if (_level == Z_DEFAULT_COMPRESSION) + _level = 6; + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || _method != Z_DEFLATED || bits < 9 || bits > 15 || _level < 0 || _level > 9 || _strategy < 0 + || _strategy > Z_HUFFMAN_ONLY) { + return Z_STREAM_ERROR; + } + + strm.dstate = that; + + w_bits = bits; + w_size = 1 << w_bits; + w_mask = w_size - 1; + + hash_bits = memLevel + 7; + hash_size = 1 << hash_bits; + hash_mask = hash_size - 1; + hash_shift = Math.floor((hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + window = new Uint8Array(w_size * 2); + prev = []; + head = []; + + lit_bufsize = 1 << (memLevel + 6); // 16K elements by default + + // We overlay pending_buf and d_buf+l_buf. This works since the average + // output size for (length,distance) codes is <= 24 bits. + that.pending_buf = new Uint8Array(lit_bufsize * 4); + pending_buf_size = lit_bufsize * 4; + + d_buf = Math.floor(lit_bufsize / 2); + l_buf = (1 + 2) * lit_bufsize; + + level = _level; + + strategy = _strategy; + method = _method & 0xff; + + return deflateReset(strm); + }; + + that.deflateEnd = function() { + if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + // Deallocate in reverse order of allocations: + that.pending_buf = null; + head = null; + prev = null; + window = null; + // free + that.dstate = null; + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; + }; + + that.deflateParams = function(strm, _level, _strategy) { + var err = Z_OK; + + if (_level == Z_DEFAULT_COMPRESSION) { + _level = 6; + } + if (_level < 0 || _level > 9 || _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) { + return Z_STREAM_ERROR; + } + + if (config_table[level].func != config_table[_level].func && strm.total_in !== 0) { + // Flush the last buffer: + err = strm.deflate(Z_PARTIAL_FLUSH); + } + + if (level != _level) { + level = _level; + max_lazy_match = config_table[level].max_lazy; + good_match = config_table[level].good_length; + nice_match = config_table[level].nice_length; + max_chain_length = config_table[level].max_chain; + } + strategy = _strategy; + return err; + }; + + that.deflateSetDictionary = function(strm, dictionary, dictLength) { + var length = dictLength; + var n, index = 0; + + if (!dictionary || status != INIT_STATE) + return Z_STREAM_ERROR; + + if (length < MIN_MATCH) + return Z_OK; + if (length > w_size - MIN_LOOKAHEAD) { + length = w_size - MIN_LOOKAHEAD; + index = dictLength - length; // use the tail of the dictionary + } + window.set(dictionary.subarray(index, index + length), 0); + + strstart = length; + block_start = length; + + // Insert all strings in the hash table (except for the last two bytes). + // s->lookahead stays null, so s->ins_h will be recomputed at the next + // call of fill_window. + + ins_h = window[0] & 0xff; + ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask; + + for (n = 0; n <= length - MIN_MATCH; n++) { + ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + prev[n & w_mask] = head[ins_h]; + head[ins_h] = n; + } + return Z_OK; + }; + + that.deflate = function(_strm, flush) { + var i, header, level_flags, old_flush, bstate; + + if (flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + + if (!_strm.next_out || (!_strm.next_in && _strm.avail_in !== 0) || (status == FINISH_STATE && flush != Z_FINISH)) { + _strm.msg = z_errmsg[Z_NEED_DICT - (Z_STREAM_ERROR)]; + return Z_STREAM_ERROR; + } + if (_strm.avail_out === 0) { + _strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + strm = _strm; // just in case + old_flush = last_flush; + last_flush = flush; + + // Write the zlib header + if (status == INIT_STATE) { + header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8; + level_flags = ((level - 1) & 0xff) >> 1; + + if (level_flags > 3) + level_flags = 3; + header |= (level_flags << 6); + if (strstart !== 0) + header |= PRESET_DICT; + header += 31 - (header % 31); + + status = BUSY_STATE; + putShortMSB(header); + } + + // Flush as much pending output as possible + if (that.pending !== 0) { + strm.flush_pending(); + if (strm.avail_out === 0) { + // console.log(" avail_out==0"); + // Since avail_out is 0, deflate will be called again with + // more output space, but possibly with both pending and + // avail_in equal to zero. There won't be anything to do, + // but this is not an error situation so make sure we + // return OK instead of BUF_ERROR at next call of deflate: + last_flush = -1; + return Z_OK; + } + + // Make sure there is something to do and avoid duplicate + // consecutive + // flushes. For repeated and useless calls with Z_FINISH, we keep + // returning Z_STREAM_END instead of Z_BUFF_ERROR. + } else if (strm.avail_in === 0 && flush <= old_flush && flush != Z_FINISH) { + strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + // User must not provide more input after the first FINISH: + if (status == FINISH_STATE && strm.avail_in !== 0) { + _strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + // Start a new block or continue the current one. + if (strm.avail_in !== 0 || lookahead !== 0 || (flush != Z_NO_FLUSH && status != FINISH_STATE)) { + bstate = -1; + switch (config_table[level].func) { + case STORED: + bstate = deflate_stored(flush); + break; + case FAST: + bstate = deflate_fast(flush); + break; + case SLOW: + bstate = deflate_slow(flush); + break; + default: + } + + if (bstate == FinishStarted || bstate == FinishDone) { + status = FINISH_STATE; + } + if (bstate == NeedMore || bstate == FinishStarted) { + if (strm.avail_out === 0) { + last_flush = -1; // avoid BUF_ERROR next call, see above + } + return Z_OK; + // If flush != Z_NO_FLUSH && avail_out === 0, the next call + // of deflate should use the same flush parameter to make sure + // that the flush is complete. So we don't have to output an + // empty block here, this will be done at next call. This also + // ensures that for a very small output buffer, we emit at most + // one empty block. + } + + if (bstate == BlockDone) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(); + } else { // FULL_FLUSH or SYNC_FLUSH + _tr_stored_block(0, 0, false); + // For a full flush, this empty block will be recognized + // as a special marker by inflate_sync(). + if (flush == Z_FULL_FLUSH) { + // state.head[s.hash_size-1]=0; + for (i = 0; i < hash_size/*-1*/; i++) + // forget history + head[i] = 0; + } + } + strm.flush_pending(); + if (strm.avail_out === 0) { + last_flush = -1; // avoid BUF_ERROR at next call, see above + return Z_OK; + } + } + } + + if (flush != Z_FINISH) + return Z_OK; + return Z_STREAM_END; + }; + } + + // ZStream + + function ZStream() { + var that = this; + that.next_in_index = 0; + that.next_out_index = 0; + // that.next_in; // next input byte + that.avail_in = 0; // number of bytes available at next_in + that.total_in = 0; // total nb of input bytes read so far + // that.next_out; // next output byte should be put there + that.avail_out = 0; // remaining free space at next_out + that.total_out = 0; // total nb of bytes output so far + // that.msg; + // that.dstate; + } + + ZStream.prototype = { + deflateInit : function(level, bits) { + var that = this; + that.dstate = new Deflate(); + if (!bits) + bits = MAX_BITS; + return that.dstate.deflateInit(that, level, bits); + }, + + deflate : function(flush) { + var that = this; + if (!that.dstate) { + return Z_STREAM_ERROR; + } + return that.dstate.deflate(that, flush); + }, + + deflateEnd : function() { + var that = this; + if (!that.dstate) + return Z_STREAM_ERROR; + var ret = that.dstate.deflateEnd(); + that.dstate = null; + return ret; + }, + + deflateParams : function(level, strategy) { + var that = this; + if (!that.dstate) + return Z_STREAM_ERROR; + return that.dstate.deflateParams(that, level, strategy); + }, + + deflateSetDictionary : function(dictionary, dictLength) { + var that = this; + if (!that.dstate) + return Z_STREAM_ERROR; + return that.dstate.deflateSetDictionary(that, dictionary, dictLength); + }, + + // Read a new buffer from the current input stream, update the + // total number of bytes read. All deflate() input goes through + // this function so some applications may wish to modify it to avoid + // allocating a large strm->next_in buffer and copying from it. + // (See also flush_pending()). + read_buf : function(buf, start, size) { + var that = this; + var len = that.avail_in; + if (len > size) + len = size; + if (len === 0) + return 0; + that.avail_in -= len; + buf.set(that.next_in.subarray(that.next_in_index, that.next_in_index + len), start); + that.next_in_index += len; + that.total_in += len; + return len; + }, + + // Flush as much pending output as possible. All deflate() output goes + // through this function so some applications may wish to modify it + // to avoid allocating a large strm->next_out buffer and copying into it. + // (See also read_buf()). + flush_pending : function() { + var that = this; + var len = that.dstate.pending; + + if (len > that.avail_out) + len = that.avail_out; + if (len === 0) + return; + + // if (that.dstate.pending_buf.length <= that.dstate.pending_out || that.next_out.length <= that.next_out_index + // || that.dstate.pending_buf.length < (that.dstate.pending_out + len) || that.next_out.length < (that.next_out_index + + // len)) { + // console.log(that.dstate.pending_buf.length + ", " + that.dstate.pending_out + ", " + that.next_out.length + ", " + + // that.next_out_index + ", " + len); + // console.log("avail_out=" + that.avail_out); + // } + + that.next_out.set(that.dstate.pending_buf.subarray(that.dstate.pending_out, that.dstate.pending_out + len), that.next_out_index); + + that.next_out_index += len; + that.dstate.pending_out += len; + that.total_out += len; + that.avail_out -= len; + that.dstate.pending -= len; + if (that.dstate.pending === 0) { + that.dstate.pending_out = 0; + } + } + }; + + // Deflater + + function Deflater(options) { + var that = this; + var z = new ZStream(); + var bufsize = 512; + var flush = Z_NO_FLUSH; + var buf = new Uint8Array(bufsize); + var level = options ? options.level : Z_DEFAULT_COMPRESSION; + if (typeof level == "undefined") + level = Z_DEFAULT_COMPRESSION; + z.deflateInit(level); + z.next_out = buf; + + that.append = function(data, onprogress) { + var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array; + if (!data.length) + return; + z.next_in_index = 0; + z.next_in = data; + z.avail_in = data.length; + do { + z.next_out_index = 0; + z.avail_out = bufsize; + err = z.deflate(flush); + if (err != Z_OK) + throw new Error("deflating: " + z.msg); + if (z.next_out_index) + if (z.next_out_index == bufsize) + buffers.push(new Uint8Array(buf)); + else + buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); + bufferSize += z.next_out_index; + if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) { + onprogress(z.next_in_index); + lastIndex = z.next_in_index; + } + } while (z.avail_in > 0 || z.avail_out === 0); + array = new Uint8Array(bufferSize); + buffers.forEach(function(chunk) { + array.set(chunk, bufferIndex); + bufferIndex += chunk.length; + }); + return array; + }; + that.flush = function() { + var err, buffers = [], bufferIndex = 0, bufferSize = 0, array; + do { + z.next_out_index = 0; + z.avail_out = bufsize; + err = z.deflate(Z_FINISH); + if (err != Z_STREAM_END && err != Z_OK) + throw new Error("deflating: " + z.msg); + if (bufsize - z.avail_out > 0) + buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); + bufferSize += z.next_out_index; + } while (z.avail_in > 0 || z.avail_out === 0); + z.deflateEnd(); + array = new Uint8Array(bufferSize); + buffers.forEach(function(chunk) { + array.set(chunk, bufferIndex); + bufferIndex += chunk.length; + }); + return array; + }; + } + + // 'zip' may not be defined in z-worker and some tests + var env = global.zip || global; + env.Deflater = env._jzlib_Deflater = Deflater; +})(this); diff --git a/lib/inflate.js b/lib/inflate.js new file mode 100644 index 0000000..fdbf12a --- /dev/null +++ b/lib/inflate.js @@ -0,0 +1,2155 @@ +/* + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc. + * JZlib is based on zlib-1.1.3, so all credit should go authors + * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) + * and contributors of zlib. + */ + +(function(global) { + "use strict"; + + // Global + var MAX_BITS = 15; + + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_NEED_DICT = 2; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_MEM_ERROR = -4; + var Z_BUF_ERROR = -5; + + var inflate_mask = [ 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, + 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff ]; + + var MANY = 1440; + + // JZlib version : "1.0.2" + var Z_NO_FLUSH = 0; + var Z_FINISH = 4; + + // InfTree + var fixed_bl = 9; + var fixed_bd = 5; + + var fixed_tl = [ 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, + 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, + 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, + 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, + 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, + 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, + 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, + 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, + 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, + 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, + 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, + 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, + 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, + 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, + 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, + 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, + 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, + 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, + 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, + 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, + 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, + 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, + 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, + 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, + 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, + 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, + 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, + 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, + 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, + 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, + 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, + 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, + 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, + 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, + 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, + 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, + 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255 ]; + var fixed_td = [ 80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, + 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, + 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577 ]; + + // Tables for deflate from PKZIP's appnote.txt. + var cplens = [ // Copy lengths for literal codes 257..285 + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 ]; + + // see note #13 above about 258 + var cplext = [ // Extra bits for literal codes 257..285 + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid + ]; + + var cpdist = [ // Copy offsets for distance codes 0..29 + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ]; + + var cpdext = [ // Extra bits for distance codes + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ]; + + // If BMAX needs to be larger than 16, then h and x[] should be uLong. + var BMAX = 15; // maximum bit length of any code + + function InfTree() { + var that = this; + + var hn; // hufts used in space + var v; // work area for huft_build + var c; // bit length count table + var r; // table entry for structure assignment + var u; // table stack + var x; // bit offsets, then code stack + + function huft_build(b, // code lengths in bits (all assumed <= + // BMAX) + bindex, n, // number of codes (assumed <= 288) + s, // number of simple-valued codes (0..s-1) + d, // list of base values for non-simple codes + e, // list of extra bits for non-simple codes + t, // result: starting table + m, // maximum lookup bits, returns actual + hp,// space for trees + hn,// hufts used in space + v // working area: values in order of bit length + ) { + // Given a list of code lengths and a maximum table size, make a set of + // tables to decode that set of codes. Return Z_OK on success, + // Z_BUF_ERROR + // if the given code set is incomplete (the tables are still built in + // this + // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set + // of + // lengths), or Z_MEM_ERROR if not enough memory. + + var a; // counter for codes of length k + var f; // i repeats in table every f entries + var g; // maximum code length + var h; // table level + var i; // counter, current code + var j; // counter + var k; // number of bits in current code + var l; // bits per table (returned in m) + var mask; // (1 << w) - 1, to avoid cc -O bug on HP + var p; // pointer into c[], b[], or v[] + var q; // points to current table + var w; // bits before this table == (l * h) + var xp; // pointer into x + var y; // number of dummy codes added + var z; // number of entries in current table + + // Generate counts for each bit length + + p = 0; + i = n; + do { + c[b[bindex + p]]++; + p++; + i--; // assume all entries <= BMAX + } while (i !== 0); + + if (c[0] == n) { // null input--all zero length codes + t[0] = -1; + m[0] = 0; + return Z_OK; + } + + // Find minimum and maximum length, bound *m by those + l = m[0]; + for (j = 1; j <= BMAX; j++) + if (c[j] !== 0) + break; + k = j; // minimum code length + if (l < j) { + l = j; + } + for (i = BMAX; i !== 0; i--) { + if (c[i] !== 0) + break; + } + g = i; // maximum code length + if (l > i) { + l = i; + } + m[0] = l; + + // Adjust last length count to fill out codes, if needed + for (y = 1 << j; j < i; j++, y <<= 1) { + if ((y -= c[j]) < 0) { + return Z_DATA_ERROR; + } + } + if ((y -= c[i]) < 0) { + return Z_DATA_ERROR; + } + c[i] += y; + + // Generate starting offsets into the value table for each length + x[1] = j = 0; + p = 1; + xp = 2; + while (--i !== 0) { // note that i == g from above + x[xp] = (j += c[p]); + xp++; + p++; + } + + // Make a table of values in order of bit lengths + i = 0; + p = 0; + do { + if ((j = b[bindex + p]) !== 0) { + v[x[j]++] = i; + } + p++; + } while (++i < n); + n = x[g]; // set n to length of v + + // Generate the Huffman codes and for each, make the table entries + x[0] = i = 0; // first Huffman code is zero + p = 0; // grab values in bit order + h = -1; // no tables yet--level -1 + w = -l; // bits decoded == (l * h) + u[0] = 0; // just to keep compilers happy + q = 0; // ditto + z = 0; // ditto + + // go through the bit lengths (k already is bits in shortest code) + for (; k <= g; k++) { + a = c[k]; + while (a-- !== 0) { + // here i is the Huffman code of length k bits for value *p + // make tables up to required level + while (k > w + l) { + h++; + w += l; // previous table always l bits + // compute minimum size table less than or equal to l bits + z = g - w; + z = (z > l) ? l : z; // table size upper limit + if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table + // too few codes for + // k-w bit table + f -= a + 1; // deduct codes from patterns left + xp = k; + if (j < z) { + while (++j < z) { // try smaller tables up to z bits + if ((f <<= 1) <= c[++xp]) + break; // enough codes to use up j bits + f -= c[xp]; // else deduct codes from patterns + } + } + } + z = 1 << j; // table entries for j-bit table + + // allocate new table + if (hn[0] + z > MANY) { // (note: doesn't matter for fixed) + return Z_DATA_ERROR; // overflow of MANY + } + u[h] = q = /* hp+ */hn[0]; // DEBUG + hn[0] += z; + + // connect to last table, if there is one + if (h !== 0) { + x[h] = i; // save pattern for backing up + r[0] = /* (byte) */j; // bits in this table + r[1] = /* (byte) */l; // bits to dump before this table + j = i >>> (w - l); + r[2] = /* (int) */(q - u[h - 1] - j); // offset to this table + hp.set(r, (u[h - 1] + j) * 3); + // to + // last + // table + } else { + t[0] = q; // first table is returned result + } + } + + // set up table entry in r + r[1] = /* (byte) */(k - w); + if (p >= n) { + r[0] = 128 + 64; // out of values--invalid code + } else if (v[p] < s) { + r[0] = /* (byte) */(v[p] < 256 ? 0 : 32 + 64); // 256 is + // end-of-block + r[2] = v[p++]; // simple code is just the value + } else { + r[0] = /* (byte) */(e[v[p] - s] + 16 + 64); // non-simple--look + // up in lists + r[2] = d[v[p++] - s]; + } + + // fill code-like entries with r + f = 1 << (k - w); + for (j = i >>> w; j < z; j += f) { + hp.set(r, (q + j) * 3); + } + + // backwards increment the k-bit code i + for (j = 1 << (k - 1); (i & j) !== 0; j >>>= 1) { + i ^= j; + } + i ^= j; + + // backup over finished tables + mask = (1 << w) - 1; // needed on HP, cc -O bug + while ((i & mask) != x[h]) { + h--; // don't need to update q + w -= l; + mask = (1 << w) - 1; + } + } + } + // Return Z_BUF_ERROR if we were given an incomplete table + return y !== 0 && g != 1 ? Z_BUF_ERROR : Z_OK; + } + + function initWorkArea(vsize) { + var i; + if (!hn) { + hn = []; // []; //new Array(1); + v = []; // new Array(vsize); + c = new Int32Array(BMAX + 1); // new Array(BMAX + 1); + r = []; // new Array(3); + u = new Int32Array(BMAX); // new Array(BMAX); + x = new Int32Array(BMAX + 1); // new Array(BMAX + 1); + } + if (v.length < vsize) { + v = []; // new Array(vsize); + } + for (i = 0; i < vsize; i++) { + v[i] = 0; + } + for (i = 0; i < BMAX + 1; i++) { + c[i] = 0; + } + for (i = 0; i < 3; i++) { + r[i] = 0; + } + // for(int i=0; i 257)) { + if (result == Z_DATA_ERROR) { + z.msg = "oversubscribed distance tree"; + } else if (result == Z_BUF_ERROR) { + z.msg = "incomplete distance tree"; + result = Z_DATA_ERROR; + } else if (result != Z_MEM_ERROR) { + z.msg = "empty distance tree with lengths"; + result = Z_DATA_ERROR; + } + return result; + } + + return Z_OK; + }; + + } + + InfTree.inflate_trees_fixed = function(bl, // literal desired/actual bit depth + bd, // distance desired/actual bit depth + tl,// literal/length tree result + td// distance tree result + ) { + bl[0] = fixed_bl; + bd[0] = fixed_bd; + tl[0] = fixed_tl; + td[0] = fixed_td; + return Z_OK; + }; + + // InfCodes + + // waiting for "i:"=input, + // "o:"=output, + // "x:"=nothing + var START = 0; // x: set up for LEN + var LEN = 1; // i: get length/literal/eob next + var LENEXT = 2; // i: getting length extra (have base) + var DIST = 3; // i: get distance next + var DISTEXT = 4;// i: getting distance extra + var COPY = 5; // o: copying bytes in window, waiting + // for space + var LIT = 6; // o: got literal, waiting for output + // space + var WASH = 7; // o: got eob, possibly still output + // waiting + var END = 8; // x: got eob and all data flushed + var BADCODE = 9;// x: got error + + function InfCodes() { + var that = this; + + var mode; // current inflate_codes mode + + // mode dependent information + var len = 0; + + var tree; // pointer into tree + var tree_index = 0; + var need = 0; // bits needed + + var lit = 0; + + // if EXT or COPY, where and how much + var get = 0; // bits to get for extra + var dist = 0; // distance back to copy from + + var lbits = 0; // ltree bits decoded per branch + var dbits = 0; // dtree bits decoder per branch + var ltree; // literal/length/eob tree + var ltree_index = 0; // literal/length/eob tree + var dtree; // distance tree + var dtree_index = 0; // distance tree + + // Called with number of bytes left to write in window at least 258 + // (the maximum string length) and number of input bytes available + // at least ten. The ten bytes are six bytes for the longest length/ + // distance pair plus four bytes for overloading the bit buffer. + + function inflate_fast(bl, bd, tl, tl_index, td, td_index, s, z) { + var t; // temporary pointer + var tp; // temporary pointer + var tp_index; // temporary pointer + var e; // extra bits or operation + var b; // bit buffer + var k; // bits in bit buffer + var p; // input data pointer + var n; // bytes available there + var q; // output window write pointer + var m; // bytes to end of window or read pointer + var ml; // mask for literal/length tree + var md; // mask for distance tree + var c; // bytes to copy + var d; // distance back to copy from + var r; // copy source pointer + + var tp_index_t_3; // (tp_index+t)*3 + + // load input, output, bit values + p = z.next_in_index; + n = z.avail_in; + b = s.bitb; + k = s.bitk; + q = s.write; + m = q < s.read ? s.read - q - 1 : s.end - q; + + // initialize masks + ml = inflate_mask[bl]; + md = inflate_mask[bd]; + + // do until not enough input or output space for fast loop + do { // assume called with m >= 258 && n >= 10 + // get literal/length code + while (k < (20)) { // max bits for literal/length code + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + t = b & ml; + tp = tl; + tp_index = tl_index; + tp_index_t_3 = (tp_index + t) * 3; + if ((e = tp[tp_index_t_3]) === 0) { + b >>= (tp[tp_index_t_3 + 1]); + k -= (tp[tp_index_t_3 + 1]); + + s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2]; + m--; + continue; + } + do { + + b >>= (tp[tp_index_t_3 + 1]); + k -= (tp[tp_index_t_3 + 1]); + + if ((e & 16) !== 0) { + e &= 15; + c = tp[tp_index_t_3 + 2] + (/* (int) */b & inflate_mask[e]); + + b >>= e; + k -= e; + + // decode distance base of block to copy + while (k < (15)) { // max bits for distance code + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + t = b & md; + tp = td; + tp_index = td_index; + tp_index_t_3 = (tp_index + t) * 3; + e = tp[tp_index_t_3]; + + do { + + b >>= (tp[tp_index_t_3 + 1]); + k -= (tp[tp_index_t_3 + 1]); + + if ((e & 16) !== 0) { + // get extra bits to add to distance base + e &= 15; + while (k < (e)) { // get extra bits (up to 13) + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + d = tp[tp_index_t_3 + 2] + (b & inflate_mask[e]); + + b >>= (e); + k -= (e); + + // do the copy + m -= c; + if (q >= d) { // offset before dest + // just copy + r = q - d; + if (q - r > 0 && 2 > (q - r)) { + s.window[q++] = s.window[r++]; // minimum + // count is + // three, + s.window[q++] = s.window[r++]; // so unroll + // loop a + // little + c -= 2; + } else { + s.window.set(s.window.subarray(r, r + 2), q); + q += 2; + r += 2; + c -= 2; + } + } else { // else offset after destination + r = q - d; + do { + r += s.end; // force pointer in window + } while (r < 0); // covers invalid distances + e = s.end - r; + if (c > e) { // if source crosses, + c -= e; // wrapped copy + if (q - r > 0 && e > (q - r)) { + do { + s.window[q++] = s.window[r++]; + } while (--e !== 0); + } else { + s.window.set(s.window.subarray(r, r + e), q); + q += e; + r += e; + e = 0; + } + r = 0; // copy rest from start of window + } + + } + + // copy all or what's left + if (q - r > 0 && c > (q - r)) { + do { + s.window[q++] = s.window[r++]; + } while (--c !== 0); + } else { + s.window.set(s.window.subarray(r, r + c), q); + q += c; + r += c; + c = 0; + } + break; + } else if ((e & 64) === 0) { + t += tp[tp_index_t_3 + 2]; + t += (b & inflate_mask[e]); + tp_index_t_3 = (tp_index + t) * 3; + e = tp[tp_index_t_3]; + } else { + z.msg = "invalid distance code"; + + c = z.avail_in - n; + c = (k >> 3) < c ? k >> 3 : c; + n += c; + p -= c; + k -= c << 3; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + + return Z_DATA_ERROR; + } + } while (true); + break; + } + + if ((e & 64) === 0) { + t += tp[tp_index_t_3 + 2]; + t += (b & inflate_mask[e]); + tp_index_t_3 = (tp_index + t) * 3; + if ((e = tp[tp_index_t_3]) === 0) { + + b >>= (tp[tp_index_t_3 + 1]); + k -= (tp[tp_index_t_3 + 1]); + + s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2]; + m--; + break; + } + } else if ((e & 32) !== 0) { + + c = z.avail_in - n; + c = (k >> 3) < c ? k >> 3 : c; + n += c; + p -= c; + k -= c << 3; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + + return Z_STREAM_END; + } else { + z.msg = "invalid literal/length code"; + + c = z.avail_in - n; + c = (k >> 3) < c ? k >> 3 : c; + n += c; + p -= c; + k -= c << 3; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + + return Z_DATA_ERROR; + } + } while (true); + } while (m >= 258 && n >= 10); + + // not enough input or output--restore pointers and return + c = z.avail_in - n; + c = (k >> 3) < c ? k >> 3 : c; + n += c; + p -= c; + k -= c << 3; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + + return Z_OK; + } + + that.init = function(bl, bd, tl, tl_index, td, td_index) { + mode = START; + lbits = /* (byte) */bl; + dbits = /* (byte) */bd; + ltree = tl; + ltree_index = tl_index; + dtree = td; + dtree_index = td_index; + tree = null; + }; + + that.proc = function(s, z, r) { + var j; // temporary storage + var tindex; // temporary pointer + var e; // extra bits or operation + var b = 0; // bit buffer + var k = 0; // bits in bit buffer + var p = 0; // input data pointer + var n; // bytes available there + var q; // output window write pointer + var m; // bytes to end of window or read pointer + var f; // pointer to copy strings from + + // copy input/output information to locals (UPDATE macro restores) + p = z.next_in_index; + n = z.avail_in; + b = s.bitb; + k = s.bitk; + q = s.write; + m = q < s.read ? s.read - q - 1 : s.end - q; + + // process input and output based on current state + while (true) { + switch (mode) { + // waiting for "i:"=input, "o:"=output, "x:"=nothing + case START: // x: set up for LEN + if (m >= 258 && n >= 10) { + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z); + + p = z.next_in_index; + n = z.avail_in; + b = s.bitb; + k = s.bitk; + q = s.write; + m = q < s.read ? s.read - q - 1 : s.end - q; + + if (r != Z_OK) { + mode = r == Z_STREAM_END ? WASH : BADCODE; + break; + } + } + need = lbits; + tree = ltree; + tree_index = ltree_index; + + mode = LEN; + /* falls through */ + case LEN: // i: get length/literal/eob next + j = need; + + while (k < (j)) { + if (n !== 0) + r = Z_OK; + else { + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + tindex = (tree_index + (b & inflate_mask[j])) * 3; + + b >>>= (tree[tindex + 1]); + k -= (tree[tindex + 1]); + + e = tree[tindex]; + + if (e === 0) { // literal + lit = tree[tindex + 2]; + mode = LIT; + break; + } + if ((e & 16) !== 0) { // length + get = e & 15; + len = tree[tindex + 2]; + mode = LENEXT; + break; + } + if ((e & 64) === 0) { // next table + need = e; + tree_index = tindex / 3 + tree[tindex + 2]; + break; + } + if ((e & 32) !== 0) { // end of block + mode = WASH; + break; + } + mode = BADCODE; // invalid code + z.msg = "invalid literal/length code"; + r = Z_DATA_ERROR; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + case LENEXT: // i: getting length extra (have base) + j = get; + + while (k < (j)) { + if (n !== 0) + r = Z_OK; + else { + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + len += (b & inflate_mask[j]); + + b >>= j; + k -= j; + + need = dbits; + tree = dtree; + tree_index = dtree_index; + mode = DIST; + /* falls through */ + case DIST: // i: get distance next + j = need; + + while (k < (j)) { + if (n !== 0) + r = Z_OK; + else { + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + tindex = (tree_index + (b & inflate_mask[j])) * 3; + + b >>= tree[tindex + 1]; + k -= tree[tindex + 1]; + + e = (tree[tindex]); + if ((e & 16) !== 0) { // distance + get = e & 15; + dist = tree[tindex + 2]; + mode = DISTEXT; + break; + } + if ((e & 64) === 0) { // next table + need = e; + tree_index = tindex / 3 + tree[tindex + 2]; + break; + } + mode = BADCODE; // invalid code + z.msg = "invalid distance code"; + r = Z_DATA_ERROR; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + case DISTEXT: // i: getting distance extra + j = get; + + while (k < (j)) { + if (n !== 0) + r = Z_OK; + else { + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + dist += (b & inflate_mask[j]); + + b >>= j; + k -= j; + + mode = COPY; + /* falls through */ + case COPY: // o: copying bytes in window, waiting for space + f = q - dist; + while (f < 0) { // modulo window size-"while" instead + f += s.end; // of "if" handles invalid distances + } + while (len !== 0) { + + if (m === 0) { + if (q == s.end && s.read !== 0) { + q = 0; + m = q < s.read ? s.read - q - 1 : s.end - q; + } + if (m === 0) { + s.write = q; + r = s.inflate_flush(z, r); + q = s.write; + m = q < s.read ? s.read - q - 1 : s.end - q; + + if (q == s.end && s.read !== 0) { + q = 0; + m = q < s.read ? s.read - q - 1 : s.end - q; + } + + if (m === 0) { + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + } + } + + s.window[q++] = s.window[f++]; + m--; + + if (f == s.end) + f = 0; + len--; + } + mode = START; + break; + case LIT: // o: got literal, waiting for output space + if (m === 0) { + if (q == s.end && s.read !== 0) { + q = 0; + m = q < s.read ? s.read - q - 1 : s.end - q; + } + if (m === 0) { + s.write = q; + r = s.inflate_flush(z, r); + q = s.write; + m = q < s.read ? s.read - q - 1 : s.end - q; + + if (q == s.end && s.read !== 0) { + q = 0; + m = q < s.read ? s.read - q - 1 : s.end - q; + } + if (m === 0) { + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + } + } + r = Z_OK; + + s.window[q++] = /* (byte) */lit; + m--; + + mode = START; + break; + case WASH: // o: got eob, possibly more output + if (k > 7) { // return unused byte, if any + k -= 8; + n++; + p--; // can always return one + } + + s.write = q; + r = s.inflate_flush(z, r); + q = s.write; + m = q < s.read ? s.read - q - 1 : s.end - q; + + if (s.read != s.write) { + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + mode = END; + /* falls through */ + case END: + r = Z_STREAM_END; + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + case BADCODE: // x: got error + + r = Z_DATA_ERROR; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + default: + r = Z_STREAM_ERROR; + + s.bitb = b; + s.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + } + }; + + that.free = function() { + // ZFREE(z, c); + }; + + } + + // InfBlocks + + // Table for deflate from PKZIP's appnote.txt. + var border = [ // Order of the bit length code lengths + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + var TYPE = 0; // get type bits (3, including end bit) + var LENS = 1; // get lengths for stored + var STORED = 2;// processing stored block + var TABLE = 3; // get table lengths + var BTREE = 4; // get bit lengths tree for a dynamic + // block + var DTREE = 5; // get length, distance trees for a + // dynamic block + var CODES = 6; // processing fixed or dynamic block + var DRY = 7; // output remaining window bytes + var DONELOCKS = 8; // finished last block, done + var BADBLOCKS = 9; // ot a data error--stuck here + + function InfBlocks(z, w) { + var that = this; + + var mode = TYPE; // current inflate_block mode + + var left = 0; // if STORED, bytes left to copy + + var table = 0; // table lengths (14 bits) + var index = 0; // index into blens (or border) + var blens; // bit lengths of codes + var bb = [ 0 ]; // bit length tree depth + var tb = [ 0 ]; // bit length decoding tree + + var codes = new InfCodes(); // if CODES, current state + + var last = 0; // true if this block is the last block + + var hufts = new Int32Array(MANY * 3); // single malloc for tree space + var check = 0; // check on output + var inftree = new InfTree(); + + that.bitk = 0; // bits in bit buffer + that.bitb = 0; // bit buffer + that.window = new Uint8Array(w); // sliding window + that.end = w; // one byte after sliding window + that.read = 0; // window read pointer + that.write = 0; // window write pointer + + that.reset = function(z, c) { + if (c) + c[0] = check; + // if (mode == BTREE || mode == DTREE) { + // } + if (mode == CODES) { + codes.free(z); + } + mode = TYPE; + that.bitk = 0; + that.bitb = 0; + that.read = that.write = 0; + }; + + that.reset(z, null); + + // copy as much as possible from the sliding window to the output area + that.inflate_flush = function(z, r) { + var n; + var p; + var q; + + // local copies of source and destination pointers + p = z.next_out_index; + q = that.read; + + // compute number of bytes to copy as far as end of window + n = /* (int) */((q <= that.write ? that.write : that.end) - q); + if (n > z.avail_out) + n = z.avail_out; + if (n !== 0 && r == Z_BUF_ERROR) + r = Z_OK; + + // update counters + z.avail_out -= n; + z.total_out += n; + + // copy as far as end of window + z.next_out.set(that.window.subarray(q, q + n), p); + p += n; + q += n; + + // see if more to copy at beginning of window + if (q == that.end) { + // wrap pointers + q = 0; + if (that.write == that.end) + that.write = 0; + + // compute bytes to copy + n = that.write - q; + if (n > z.avail_out) + n = z.avail_out; + if (n !== 0 && r == Z_BUF_ERROR) + r = Z_OK; + + // update counters + z.avail_out -= n; + z.total_out += n; + + // copy + z.next_out.set(that.window.subarray(q, q + n), p); + p += n; + q += n; + } + + // update pointers + z.next_out_index = p; + that.read = q; + + // done + return r; + }; + + that.proc = function(z, r) { + var t; // temporary storage + var b; // bit buffer + var k; // bits in bit buffer + var p; // input data pointer + var n; // bytes available there + var q; // output window write pointer + var m; // bytes to end of window or read pointer + + var i; + + // copy input/output information to locals (UPDATE macro restores) + // { + p = z.next_in_index; + n = z.avail_in; + b = that.bitb; + k = that.bitk; + // } + // { + q = that.write; + m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); + // } + + // process input based on current state + // DEBUG dtree + while (true) { + switch (mode) { + case TYPE: + + while (k < (3)) { + if (n !== 0) { + r = Z_OK; + } else { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + t = /* (int) */(b & 7); + last = t & 1; + + switch (t >>> 1) { + case 0: // stored + // { + b >>>= (3); + k -= (3); + // } + t = k & 7; // go to byte boundary + + // { + b >>>= (t); + k -= (t); + // } + mode = LENS; // get length of stored block + break; + case 1: // fixed + // { + var bl = []; // new Array(1); + var bd = []; // new Array(1); + var tl = [ [] ]; // new Array(1); + var td = [ [] ]; // new Array(1); + + InfTree.inflate_trees_fixed(bl, bd, tl, td); + codes.init(bl[0], bd[0], tl[0], 0, td[0], 0); + // } + + // { + b >>>= (3); + k -= (3); + // } + + mode = CODES; + break; + case 2: // dynamic + + // { + b >>>= (3); + k -= (3); + // } + + mode = TABLE; + break; + case 3: // illegal + + // { + b >>>= (3); + k -= (3); + // } + mode = BADBLOCKS; + z.msg = "invalid block type"; + r = Z_DATA_ERROR; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + break; + case LENS: + + while (k < (32)) { + if (n !== 0) { + r = Z_OK; + } else { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + if ((((~b) >>> 16) & 0xffff) != (b & 0xffff)) { + mode = BADBLOCKS; + z.msg = "invalid stored block lengths"; + r = Z_DATA_ERROR; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + left = (b & 0xffff); + b = k = 0; // dump bits + mode = left !== 0 ? STORED : (last !== 0 ? DRY : TYPE); + break; + case STORED: + if (n === 0) { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + + if (m === 0) { + if (q == that.end && that.read !== 0) { + q = 0; + m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); + } + if (m === 0) { + that.write = q; + r = that.inflate_flush(z, r); + q = that.write; + m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); + if (q == that.end && that.read !== 0) { + q = 0; + m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); + } + if (m === 0) { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + } + } + r = Z_OK; + + t = left; + if (t > n) + t = n; + if (t > m) + t = m; + that.window.set(z.read_buf(p, t), q); + p += t; + n -= t; + q += t; + m -= t; + if ((left -= t) !== 0) + break; + mode = last !== 0 ? DRY : TYPE; + break; + case TABLE: + + while (k < (14)) { + if (n !== 0) { + r = Z_OK; + } else { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + table = t = (b & 0x3fff); + if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) { + mode = BADBLOCKS; + z.msg = "too many length or distance symbols"; + r = Z_DATA_ERROR; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); + if (!blens || blens.length < t) { + blens = []; // new Array(t); + } else { + for (i = 0; i < t; i++) { + blens[i] = 0; + } + } + + // { + b >>>= (14); + k -= (14); + // } + + index = 0; + mode = BTREE; + /* falls through */ + case BTREE: + while (index < 4 + (table >>> 10)) { + while (k < (3)) { + if (n !== 0) { + r = Z_OK; + } else { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + blens[border[index++]] = b & 7; + + // { + b >>>= (3); + k -= (3); + // } + } + + while (index < 19) { + blens[border[index++]] = 0; + } + + bb[0] = 7; + t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z); + if (t != Z_OK) { + r = t; + if (r == Z_DATA_ERROR) { + blens = null; + mode = BADBLOCKS; + } + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + + index = 0; + mode = DTREE; + /* falls through */ + case DTREE: + while (true) { + t = table; + if (index >= 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) { + break; + } + + var j, c; + + t = bb[0]; + + while (k < (t)) { + if (n !== 0) { + r = Z_OK; + } else { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + // if (tb[0] == -1) { + // System.err.println("null..."); + // } + + t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1]; + c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2]; + + if (c < 16) { + b >>>= (t); + k -= (t); + blens[index++] = c; + } else { // c == 16..18 + i = c == 18 ? 7 : c - 14; + j = c == 18 ? 11 : 3; + + while (k < (t + i)) { + if (n !== 0) { + r = Z_OK; + } else { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + n--; + b |= (z.read_byte(p++) & 0xff) << k; + k += 8; + } + + b >>>= (t); + k -= (t); + + j += (b & inflate_mask[i]); + + b >>>= (i); + k -= (i); + + i = index; + t = table; + if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) { + blens = null; + mode = BADBLOCKS; + z.msg = "invalid bit length repeat"; + r = Z_DATA_ERROR; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + + c = c == 16 ? blens[i - 1] : 0; + do { + blens[i++] = c; + } while (--j !== 0); + index = i; + } + } + + tb[0] = -1; + // { + var bl_ = []; // new Array(1); + var bd_ = []; // new Array(1); + var tl_ = []; // new Array(1); + var td_ = []; // new Array(1); + bl_[0] = 9; // must be <= 9 for lookahead assumptions + bd_[0] = 6; // must be <= 9 for lookahead assumptions + + t = table; + t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl_, bd_, tl_, td_, hufts, z); + + if (t != Z_OK) { + if (t == Z_DATA_ERROR) { + blens = null; + mode = BADBLOCKS; + } + r = t; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + codes.init(bl_[0], bd_[0], hufts, tl_[0], hufts, td_[0]); + // } + mode = CODES; + /* falls through */ + case CODES: + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + + if ((r = codes.proc(that, z, r)) != Z_STREAM_END) { + return that.inflate_flush(z, r); + } + r = Z_OK; + codes.free(z); + + p = z.next_in_index; + n = z.avail_in; + b = that.bitb; + k = that.bitk; + q = that.write; + m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); + + if (last === 0) { + mode = TYPE; + break; + } + mode = DRY; + /* falls through */ + case DRY: + that.write = q; + r = that.inflate_flush(z, r); + q = that.write; + m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); + if (that.read != that.write) { + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + mode = DONELOCKS; + /* falls through */ + case DONELOCKS: + r = Z_STREAM_END; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + case BADBLOCKS: + r = Z_DATA_ERROR; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + + default: + r = Z_STREAM_ERROR; + + that.bitb = b; + that.bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; + z.next_in_index = p; + that.write = q; + return that.inflate_flush(z, r); + } + } + }; + + that.free = function(z) { + that.reset(z, null); + that.window = null; + hufts = null; + // ZFREE(z, s); + }; + + that.set_dictionary = function(d, start, n) { + that.window.set(d.subarray(start, start + n), 0); + that.read = that.write = n; + }; + + // Returns true if inflate is currently at the end of a block generated + // by Z_SYNC_FLUSH or Z_FULL_FLUSH. + that.sync_point = function() { + return mode == LENS ? 1 : 0; + }; + + } + + // Inflate + + // preset dictionary flag in zlib header + var PRESET_DICT = 0x20; + + var Z_DEFLATED = 8; + + var METHOD = 0; // waiting for method byte + var FLAG = 1; // waiting for flag byte + var DICT4 = 2; // four dictionary check bytes to go + var DICT3 = 3; // three dictionary check bytes to go + var DICT2 = 4; // two dictionary check bytes to go + var DICT1 = 5; // one dictionary check byte to go + var DICT0 = 6; // waiting for inflateSetDictionary + var BLOCKS = 7; // decompressing blocks + var DONE = 12; // finished check, done + var BAD = 13; // got an error--stay here + + var mark = [ 0, 0, 0xff, 0xff ]; + + function Inflate() { + var that = this; + + that.mode = 0; // current inflate mode + + // mode dependent information + that.method = 0; // if FLAGS, method byte + + // if CHECK, check values to compare + that.was = [ 0 ]; // new Array(1); // computed check value + that.need = 0; // stream check value + + // if BAD, inflateSync's marker bytes count + that.marker = 0; + + // mode independent information + that.wbits = 0; // log2(window size) (8..15, defaults to 15) + + // this.blocks; // current inflate_blocks state + + function inflateReset(z) { + if (!z || !z.istate) + return Z_STREAM_ERROR; + + z.total_in = z.total_out = 0; + z.msg = null; + z.istate.mode = BLOCKS; + z.istate.blocks.reset(z, null); + return Z_OK; + } + + that.inflateEnd = function(z) { + if (that.blocks) + that.blocks.free(z); + that.blocks = null; + // ZFREE(z, z->state); + return Z_OK; + }; + + that.inflateInit = function(z, w) { + z.msg = null; + that.blocks = null; + + // set window size + if (w < 8 || w > 15) { + that.inflateEnd(z); + return Z_STREAM_ERROR; + } + that.wbits = w; + + z.istate.blocks = new InfBlocks(z, 1 << w); + + // reset state + inflateReset(z); + return Z_OK; + }; + + that.inflate = function(z, f) { + var r; + var b; + + if (!z || !z.istate || !z.next_in) + return Z_STREAM_ERROR; + f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; + r = Z_BUF_ERROR; + while (true) { + // System.out.println("mode: "+z.istate.mode); + switch (z.istate.mode) { + case METHOD: + + if (z.avail_in === 0) + return r; + r = f; + + z.avail_in--; + z.total_in++; + if (((z.istate.method = z.read_byte(z.next_in_index++)) & 0xf) != Z_DEFLATED) { + z.istate.mode = BAD; + z.msg = "unknown compression method"; + z.istate.marker = 5; // can't try inflateSync + break; + } + if ((z.istate.method >> 4) + 8 > z.istate.wbits) { + z.istate.mode = BAD; + z.msg = "invalid window size"; + z.istate.marker = 5; // can't try inflateSync + break; + } + z.istate.mode = FLAG; + /* falls through */ + case FLAG: + + if (z.avail_in === 0) + return r; + r = f; + + z.avail_in--; + z.total_in++; + b = (z.read_byte(z.next_in_index++)) & 0xff; + + if ((((z.istate.method << 8) + b) % 31) !== 0) { + z.istate.mode = BAD; + z.msg = "incorrect header check"; + z.istate.marker = 5; // can't try inflateSync + break; + } + + if ((b & PRESET_DICT) === 0) { + z.istate.mode = BLOCKS; + break; + } + z.istate.mode = DICT4; + /* falls through */ + case DICT4: + + if (z.avail_in === 0) + return r; + r = f; + + z.avail_in--; + z.total_in++; + z.istate.need = ((z.read_byte(z.next_in_index++) & 0xff) << 24) & 0xff000000; + z.istate.mode = DICT3; + /* falls through */ + case DICT3: + + if (z.avail_in === 0) + return r; + r = f; + + z.avail_in--; + z.total_in++; + z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 16) & 0xff0000; + z.istate.mode = DICT2; + /* falls through */ + case DICT2: + + if (z.avail_in === 0) + return r; + r = f; + + z.avail_in--; + z.total_in++; + z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 8) & 0xff00; + z.istate.mode = DICT1; + /* falls through */ + case DICT1: + + if (z.avail_in === 0) + return r; + r = f; + + z.avail_in--; + z.total_in++; + z.istate.need += (z.read_byte(z.next_in_index++) & 0xff); + z.istate.mode = DICT0; + return Z_NEED_DICT; + case DICT0: + z.istate.mode = BAD; + z.msg = "need dictionary"; + z.istate.marker = 0; // can try inflateSync + return Z_STREAM_ERROR; + case BLOCKS: + + r = z.istate.blocks.proc(z, r); + if (r == Z_DATA_ERROR) { + z.istate.mode = BAD; + z.istate.marker = 0; // can try inflateSync + break; + } + if (r == Z_OK) { + r = f; + } + if (r != Z_STREAM_END) { + return r; + } + r = f; + z.istate.blocks.reset(z, z.istate.was); + z.istate.mode = DONE; + /* falls through */ + case DONE: + return Z_STREAM_END; + case BAD: + return Z_DATA_ERROR; + default: + return Z_STREAM_ERROR; + } + } + }; + + that.inflateSetDictionary = function(z, dictionary, dictLength) { + var index = 0; + var length = dictLength; + if (!z || !z.istate || z.istate.mode != DICT0) + return Z_STREAM_ERROR; + + if (length >= (1 << z.istate.wbits)) { + length = (1 << z.istate.wbits) - 1; + index = dictLength - length; + } + z.istate.blocks.set_dictionary(dictionary, index, length); + z.istate.mode = BLOCKS; + return Z_OK; + }; + + that.inflateSync = function(z) { + var n; // number of bytes to look at + var p; // pointer to bytes + var m; // number of marker bytes found in a row + var r, w; // temporaries to save total_in and total_out + + // set up + if (!z || !z.istate) + return Z_STREAM_ERROR; + if (z.istate.mode != BAD) { + z.istate.mode = BAD; + z.istate.marker = 0; + } + if ((n = z.avail_in) === 0) + return Z_BUF_ERROR; + p = z.next_in_index; + m = z.istate.marker; + + // search + while (n !== 0 && m < 4) { + if (z.read_byte(p) == mark[m]) { + m++; + } else if (z.read_byte(p) !== 0) { + m = 0; + } else { + m = 4 - m; + } + p++; + n--; + } + + // restore + z.total_in += p - z.next_in_index; + z.next_in_index = p; + z.avail_in = n; + z.istate.marker = m; + + // return no joy or set up to restart on a new block + if (m != 4) { + return Z_DATA_ERROR; + } + r = z.total_in; + w = z.total_out; + inflateReset(z); + z.total_in = r; + z.total_out = w; + z.istate.mode = BLOCKS; + return Z_OK; + }; + + // Returns true if inflate is currently at the end of a block generated + // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + // implementation to provide an additional safety check. PPP uses + // Z_SYNC_FLUSH + // but removes the length bytes of the resulting empty stored block. When + // decompressing, PPP checks that at the end of input packet, inflate is + // waiting for these length bytes. + that.inflateSyncPoint = function(z) { + if (!z || !z.istate || !z.istate.blocks) + return Z_STREAM_ERROR; + return z.istate.blocks.sync_point(); + }; + } + + // ZStream + + function ZStream() { + } + + ZStream.prototype = { + inflateInit : function(bits) { + var that = this; + that.istate = new Inflate(); + if (!bits) + bits = MAX_BITS; + return that.istate.inflateInit(that, bits); + }, + + inflate : function(f) { + var that = this; + if (!that.istate) + return Z_STREAM_ERROR; + return that.istate.inflate(that, f); + }, + + inflateEnd : function() { + var that = this; + if (!that.istate) + return Z_STREAM_ERROR; + var ret = that.istate.inflateEnd(that); + that.istate = null; + return ret; + }, + + inflateSync : function() { + var that = this; + if (!that.istate) + return Z_STREAM_ERROR; + return that.istate.inflateSync(that); + }, + inflateSetDictionary : function(dictionary, dictLength) { + var that = this; + if (!that.istate) + return Z_STREAM_ERROR; + return that.istate.inflateSetDictionary(that, dictionary, dictLength); + }, + read_byte : function(start) { + var that = this; + return that.next_in.subarray(start, start + 1)[0]; + }, + read_buf : function(start, size) { + var that = this; + return that.next_in.subarray(start, start + size); + } + }; + + // Inflater + + function Inflater() { + var that = this; + var z = new ZStream(); + var bufsize = 512; + var flush = Z_NO_FLUSH; + var buf = new Uint8Array(bufsize); + var nomoreinput = false; + + z.inflateInit(); + z.next_out = buf; + + that.append = function(data, onprogress) { + var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array; + if (data.length === 0) + return; + z.next_in_index = 0; + z.next_in = data; + z.avail_in = data.length; + do { + z.next_out_index = 0; + z.avail_out = bufsize; + if ((z.avail_in === 0) && (!nomoreinput)) { // if buffer is empty and more input is available, refill it + z.next_in_index = 0; + nomoreinput = true; + } + err = z.inflate(flush); + if (nomoreinput && (err === Z_BUF_ERROR)) { + if (z.avail_in !== 0) + throw new Error("inflating: bad input"); + } else if (err !== Z_OK && err !== Z_STREAM_END) + throw new Error("inflating: " + z.msg); + if ((nomoreinput || err === Z_STREAM_END) && (z.avail_in === data.length)) + throw new Error("inflating: bad input"); + if (z.next_out_index) + if (z.next_out_index === bufsize) + buffers.push(new Uint8Array(buf)); + else + buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); + bufferSize += z.next_out_index; + if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) { + onprogress(z.next_in_index); + lastIndex = z.next_in_index; + } + } while (z.avail_in > 0 || z.avail_out === 0); + array = new Uint8Array(bufferSize); + buffers.forEach(function(chunk) { + array.set(chunk, bufferIndex); + bufferIndex += chunk.length; + }); + return array; + }; + that.flush = function() { + z.inflateEnd(); + }; + } + + // 'zip' may not be defined in z-worker and some tests + var env = global.zip || global; + env.Inflater = env._jzlib_Inflater = Inflater; +})(this); diff --git a/lib/mime-types.js b/lib/mime-types.js new file mode 100644 index 0000000..b4e6a61 --- /dev/null +++ b/lib/mime-types.js @@ -0,0 +1,1002 @@ +/* + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function() { + "use strict"; + var table = { + "application" : { + "andrew-inset" : "ez", + "annodex" : "anx", + "atom+xml" : "atom", + "atomcat+xml" : "atomcat", + "atomserv+xml" : "atomsrv", + "bbolin" : "lin", + "cap" : [ "cap", "pcap" ], + "cu-seeme" : "cu", + "davmount+xml" : "davmount", + "dsptype" : "tsp", + "ecmascript" : [ "es", "ecma" ], + "futuresplash" : "spl", + "hta" : "hta", + "java-archive" : "jar", + "java-serialized-object" : "ser", + "java-vm" : "class", + "javascript" : "js", + "m3g" : "m3g", + "mac-binhex40" : "hqx", + "mathematica" : [ "nb", "ma", "mb" ], + "msaccess" : "mdb", + "msword" : [ "doc", "dot" ], + "mxf" : "mxf", + "oda" : "oda", + "ogg" : "ogx", + "pdf" : "pdf", + "pgp-keys" : "key", + "pgp-signature" : [ "asc", "sig" ], + "pics-rules" : "prf", + "postscript" : [ "ps", "ai", "eps", "epsi", "epsf", "eps2", "eps3" ], + "rar" : "rar", + "rdf+xml" : "rdf", + "rss+xml" : "rss", + "rtf" : "rtf", + "smil" : [ "smi", "smil" ], + "xhtml+xml" : [ "xhtml", "xht" ], + "xml" : [ "xml", "xsl", "xsd" ], + "xspf+xml" : "xspf", + "zip" : "zip", + "vnd.android.package-archive" : "apk", + "vnd.cinderella" : "cdy", + "vnd.google-earth.kml+xml" : "kml", + "vnd.google-earth.kmz" : "kmz", + "vnd.mozilla.xul+xml" : "xul", + "vnd.ms-excel" : [ "xls", "xlb", "xlt", "xlm", "xla", "xlc", "xlw" ], + "vnd.ms-pki.seccat" : "cat", + "vnd.ms-pki.stl" : "stl", + "vnd.ms-powerpoint" : [ "ppt", "pps", "pot" ], + "vnd.oasis.opendocument.chart" : "odc", + "vnd.oasis.opendocument.database" : "odb", + "vnd.oasis.opendocument.formula" : "odf", + "vnd.oasis.opendocument.graphics" : "odg", + "vnd.oasis.opendocument.graphics-template" : "otg", + "vnd.oasis.opendocument.image" : "odi", + "vnd.oasis.opendocument.presentation" : "odp", + "vnd.oasis.opendocument.presentation-template" : "otp", + "vnd.oasis.opendocument.spreadsheet" : "ods", + "vnd.oasis.opendocument.spreadsheet-template" : "ots", + "vnd.oasis.opendocument.text" : "odt", + "vnd.oasis.opendocument.text-master" : "odm", + "vnd.oasis.opendocument.text-template" : "ott", + "vnd.oasis.opendocument.text-web" : "oth", + "vnd.openxmlformats-officedocument.spreadsheetml.sheet" : "xlsx", + "vnd.openxmlformats-officedocument.spreadsheetml.template" : "xltx", + "vnd.openxmlformats-officedocument.presentationml.presentation" : "pptx", + "vnd.openxmlformats-officedocument.presentationml.slideshow" : "ppsx", + "vnd.openxmlformats-officedocument.presentationml.template" : "potx", + "vnd.openxmlformats-officedocument.wordprocessingml.document" : "docx", + "vnd.openxmlformats-officedocument.wordprocessingml.template" : "dotx", + "vnd.smaf" : "mmf", + "vnd.stardivision.calc" : "sdc", + "vnd.stardivision.chart" : "sds", + "vnd.stardivision.draw" : "sda", + "vnd.stardivision.impress" : "sdd", + "vnd.stardivision.math" : [ "sdf", "smf" ], + "vnd.stardivision.writer" : [ "sdw", "vor" ], + "vnd.stardivision.writer-global" : "sgl", + "vnd.sun.xml.calc" : "sxc", + "vnd.sun.xml.calc.template" : "stc", + "vnd.sun.xml.draw" : "sxd", + "vnd.sun.xml.draw.template" : "std", + "vnd.sun.xml.impress" : "sxi", + "vnd.sun.xml.impress.template" : "sti", + "vnd.sun.xml.math" : "sxm", + "vnd.sun.xml.writer" : "sxw", + "vnd.sun.xml.writer.global" : "sxg", + "vnd.sun.xml.writer.template" : "stw", + "vnd.symbian.install" : [ "sis", "sisx" ], + "vnd.visio" : [ "vsd", "vst", "vss", "vsw" ], + "vnd.wap.wbxml" : "wbxml", + "vnd.wap.wmlc" : "wmlc", + "vnd.wap.wmlscriptc" : "wmlsc", + "vnd.wordperfect" : "wpd", + "vnd.wordperfect5.1" : "wp5", + "x-123" : "wk", + "x-7z-compressed" : "7z", + "x-abiword" : "abw", + "x-apple-diskimage" : "dmg", + "x-bcpio" : "bcpio", + "x-bittorrent" : "torrent", + "x-cbr" : [ "cbr", "cba", "cbt", "cb7" ], + "x-cbz" : "cbz", + "x-cdf" : [ "cdf", "cda" ], + "x-cdlink" : "vcd", + "x-chess-pgn" : "pgn", + "x-cpio" : "cpio", + "x-csh" : "csh", + "x-debian-package" : [ "deb", "udeb" ], + "x-director" : [ "dcr", "dir", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa" ], + "x-dms" : "dms", + "x-doom" : "wad", + "x-dvi" : "dvi", + "x-httpd-eruby" : "rhtml", + "x-font" : "pcf.Z", + "x-freemind" : "mm", + "x-gnumeric" : "gnumeric", + "x-go-sgf" : "sgf", + "x-graphing-calculator" : "gcf", + "x-gtar" : [ "gtar", "taz" ], + "x-hdf" : "hdf", + "x-httpd-php" : [ "phtml", "pht", "php" ], + "x-httpd-php-source" : "phps", + "x-httpd-php3" : "php3", + "x-httpd-php3-preprocessed" : "php3p", + "x-httpd-php4" : "php4", + "x-httpd-php5" : "php5", + "x-ica" : "ica", + "x-info" : "info", + "x-internet-signup" : [ "ins", "isp" ], + "x-iphone" : "iii", + "x-iso9660-image" : "iso", + "x-java-jnlp-file" : "jnlp", + "x-jmol" : "jmz", + "x-killustrator" : "kil", + "x-koan" : [ "skp", "skd", "skt", "skm" ], + "x-kpresenter" : [ "kpr", "kpt" ], + "x-kword" : [ "kwd", "kwt" ], + "x-latex" : "latex", + "x-lha" : "lha", + "x-lyx" : "lyx", + "x-lzh" : "lzh", + "x-lzx" : "lzx", + "x-maker" : [ "frm", "maker", "frame", "fm", "fb", "book", "fbdoc" ], + "x-ms-wmd" : "wmd", + "x-ms-wmz" : "wmz", + "x-msdos-program" : [ "com", "exe", "bat", "dll" ], + "x-msi" : "msi", + "x-netcdf" : [ "nc", "cdf" ], + "x-ns-proxy-autoconfig" : [ "pac", "dat" ], + "x-nwc" : "nwc", + "x-object" : "o", + "x-oz-application" : "oza", + "x-pkcs7-certreqresp" : "p7r", + "x-python-code" : [ "pyc", "pyo" ], + "x-qgis" : [ "qgs", "shp", "shx" ], + "x-quicktimeplayer" : "qtl", + "x-redhat-package-manager" : "rpm", + "x-ruby" : "rb", + "x-sh" : "sh", + "x-shar" : "shar", + "x-shockwave-flash" : [ "swf", "swfl" ], + "x-silverlight" : "scr", + "x-stuffit" : "sit", + "x-sv4cpio" : "sv4cpio", + "x-sv4crc" : "sv4crc", + "x-tar" : "tar", + "x-tcl" : "tcl", + "x-tex-gf" : "gf", + "x-tex-pk" : "pk", + "x-texinfo" : [ "texinfo", "texi" ], + "x-trash" : [ "~", "%", "bak", "old", "sik" ], + "x-troff" : [ "t", "tr", "roff" ], + "x-troff-man" : "man", + "x-troff-me" : "me", + "x-troff-ms" : "ms", + "x-ustar" : "ustar", + "x-wais-source" : "src", + "x-wingz" : "wz", + "x-x509-ca-cert" : [ "crt", "der", "cer" ], + "x-xcf" : "xcf", + "x-xfig" : "fig", + "x-xpinstall" : "xpi", + "applixware" : "aw", + "atomsvc+xml" : "atomsvc", + "ccxml+xml" : "ccxml", + "cdmi-capability" : "cdmia", + "cdmi-container" : "cdmic", + "cdmi-domain" : "cdmid", + "cdmi-object" : "cdmio", + "cdmi-queue" : "cdmiq", + "docbook+xml" : "dbk", + "dssc+der" : "dssc", + "dssc+xml" : "xdssc", + "emma+xml" : "emma", + "epub+zip" : "epub", + "exi" : "exi", + "font-tdpfr" : "pfr", + "gml+xml" : "gml", + "gpx+xml" : "gpx", + "gxf" : "gxf", + "hyperstudio" : "stk", + "inkml+xml" : [ "ink", "inkml" ], + "ipfix" : "ipfix", + "json" : "json", + "jsonml+json" : "jsonml", + "lost+xml" : "lostxml", + "mads+xml" : "mads", + "marc" : "mrc", + "marcxml+xml" : "mrcx", + "mathml+xml" : "mathml", + "mbox" : "mbox", + "mediaservercontrol+xml" : "mscml", + "metalink+xml" : "metalink", + "metalink4+xml" : "meta4", + "mets+xml" : "mets", + "mods+xml" : "mods", + "mp21" : [ "m21", "mp21" ], + "mp4" : "mp4s", + "oebps-package+xml" : "opf", + "omdoc+xml" : "omdoc", + "onenote" : [ "onetoc", "onetoc2", "onetmp", "onepkg" ], + "oxps" : "oxps", + "patch-ops-error+xml" : "xer", + "pgp-encrypted" : "pgp", + "pkcs10" : "p10", + "pkcs7-mime" : [ "p7m", "p7c" ], + "pkcs7-signature" : "p7s", + "pkcs8" : "p8", + "pkix-attr-cert" : "ac", + "pkix-crl" : "crl", + "pkix-pkipath" : "pkipath", + "pkixcmp" : "pki", + "pls+xml" : "pls", + "prs.cww" : "cww", + "pskc+xml" : "pskcxml", + "reginfo+xml" : "rif", + "relax-ng-compact-syntax" : "rnc", + "resource-lists+xml" : "rl", + "resource-lists-diff+xml" : "rld", + "rls-services+xml" : "rs", + "rpki-ghostbusters" : "gbr", + "rpki-manifest" : "mft", + "rpki-roa" : "roa", + "rsd+xml" : "rsd", + "sbml+xml" : "sbml", + "scvp-cv-request" : "scq", + "scvp-cv-response" : "scs", + "scvp-vp-request" : "spq", + "scvp-vp-response" : "spp", + "sdp" : "sdp", + "set-payment-initiation" : "setpay", + "set-registration-initiation" : "setreg", + "shf+xml" : "shf", + "sparql-query" : "rq", + "sparql-results+xml" : "srx", + "srgs" : "gram", + "srgs+xml" : "grxml", + "sru+xml" : "sru", + "ssdl+xml" : "ssdl", + "ssml+xml" : "ssml", + "tei+xml" : [ "tei", "teicorpus" ], + "thraud+xml" : "tfi", + "timestamped-data" : "tsd", + "vnd.3gpp.pic-bw-large" : "plb", + "vnd.3gpp.pic-bw-small" : "psb", + "vnd.3gpp.pic-bw-var" : "pvb", + "vnd.3gpp2.tcap" : "tcap", + "vnd.3m.post-it-notes" : "pwn", + "vnd.accpac.simply.aso" : "aso", + "vnd.accpac.simply.imp" : "imp", + "vnd.acucobol" : "acu", + "vnd.acucorp" : [ "atc", "acutc" ], + "vnd.adobe.air-application-installer-package+zip" : "air", + "vnd.adobe.formscentral.fcdt" : "fcdt", + "vnd.adobe.fxp" : [ "fxp", "fxpl" ], + "vnd.adobe.xdp+xml" : "xdp", + "vnd.adobe.xfdf" : "xfdf", + "vnd.ahead.space" : "ahead", + "vnd.airzip.filesecure.azf" : "azf", + "vnd.airzip.filesecure.azs" : "azs", + "vnd.amazon.ebook" : "azw", + "vnd.americandynamics.acc" : "acc", + "vnd.amiga.ami" : "ami", + "vnd.anser-web-certificate-issue-initiation" : "cii", + "vnd.anser-web-funds-transfer-initiation" : "fti", + "vnd.antix.game-component" : "atx", + "vnd.apple.installer+xml" : "mpkg", + "vnd.apple.mpegurl" : "m3u8", + "vnd.aristanetworks.swi" : "swi", + "vnd.astraea-software.iota" : "iota", + "vnd.audiograph" : "aep", + "vnd.blueice.multipass" : "mpm", + "vnd.bmi" : "bmi", + "vnd.businessobjects" : "rep", + "vnd.chemdraw+xml" : "cdxml", + "vnd.chipnuts.karaoke-mmd" : "mmd", + "vnd.claymore" : "cla", + "vnd.cloanto.rp9" : "rp9", + "vnd.clonk.c4group" : [ "c4g", "c4d", "c4f", "c4p", "c4u" ], + "vnd.cluetrust.cartomobile-config" : "c11amc", + "vnd.cluetrust.cartomobile-config-pkg" : "c11amz", + "vnd.commonspace" : "csp", + "vnd.contact.cmsg" : "cdbcmsg", + "vnd.cosmocaller" : "cmc", + "vnd.crick.clicker" : "clkx", + "vnd.crick.clicker.keyboard" : "clkk", + "vnd.crick.clicker.palette" : "clkp", + "vnd.crick.clicker.template" : "clkt", + "vnd.crick.clicker.wordbank" : "clkw", + "vnd.criticaltools.wbs+xml" : "wbs", + "vnd.ctc-posml" : "pml", + "vnd.cups-ppd" : "ppd", + "vnd.curl.car" : "car", + "vnd.curl.pcurl" : "pcurl", + "vnd.dart" : "dart", + "vnd.data-vision.rdz" : "rdz", + "vnd.dece.data" : [ "uvf", "uvvf", "uvd", "uvvd" ], + "vnd.dece.ttml+xml" : [ "uvt", "uvvt" ], + "vnd.dece.unspecified" : [ "uvx", "uvvx" ], + "vnd.dece.zip" : [ "uvz", "uvvz" ], + "vnd.denovo.fcselayout-link" : "fe_launch", + "vnd.dna" : "dna", + "vnd.dolby.mlp" : "mlp", + "vnd.dpgraph" : "dpg", + "vnd.dreamfactory" : "dfac", + "vnd.ds-keypoint" : "kpxx", + "vnd.dvb.ait" : "ait", + "vnd.dvb.service" : "svc", + "vnd.dynageo" : "geo", + "vnd.ecowin.chart" : "mag", + "vnd.enliven" : "nml", + "vnd.epson.esf" : "esf", + "vnd.epson.msf" : "msf", + "vnd.epson.quickanime" : "qam", + "vnd.epson.salt" : "slt", + "vnd.epson.ssf" : "ssf", + "vnd.eszigno3+xml" : [ "es3", "et3" ], + "vnd.ezpix-album" : "ez2", + "vnd.ezpix-package" : "ez3", + "vnd.fdf" : "fdf", + "vnd.fdsn.mseed" : "mseed", + "vnd.fdsn.seed" : [ "seed", "dataless" ], + "vnd.flographit" : "gph", + "vnd.fluxtime.clip" : "ftc", + "vnd.framemaker" : [ "fm", "frame", "maker", "book" ], + "vnd.frogans.fnc" : "fnc", + "vnd.frogans.ltf" : "ltf", + "vnd.fsc.weblaunch" : "fsc", + "vnd.fujitsu.oasys" : "oas", + "vnd.fujitsu.oasys2" : "oa2", + "vnd.fujitsu.oasys3" : "oa3", + "vnd.fujitsu.oasysgp" : "fg5", + "vnd.fujitsu.oasysprs" : "bh2", + "vnd.fujixerox.ddd" : "ddd", + "vnd.fujixerox.docuworks" : "xdw", + "vnd.fujixerox.docuworks.binder" : "xbd", + "vnd.fuzzysheet" : "fzs", + "vnd.genomatix.tuxedo" : "txd", + "vnd.geogebra.file" : "ggb", + "vnd.geogebra.tool" : "ggt", + "vnd.geometry-explorer" : [ "gex", "gre" ], + "vnd.geonext" : "gxt", + "vnd.geoplan" : "g2w", + "vnd.geospace" : "g3w", + "vnd.gmx" : "gmx", + "vnd.grafeq" : [ "gqf", "gqs" ], + "vnd.groove-account" : "gac", + "vnd.groove-help" : "ghf", + "vnd.groove-identity-message" : "gim", + "vnd.groove-injector" : "grv", + "vnd.groove-tool-message" : "gtm", + "vnd.groove-tool-template" : "tpl", + "vnd.groove-vcard" : "vcg", + "vnd.hal+xml" : "hal", + "vnd.handheld-entertainment+xml" : "zmm", + "vnd.hbci" : "hbci", + "vnd.hhe.lesson-player" : "les", + "vnd.hp-hpgl" : "hpgl", + "vnd.hp-hpid" : "hpid", + "vnd.hp-hps" : "hps", + "vnd.hp-jlyt" : "jlt", + "vnd.hp-pcl" : "pcl", + "vnd.hp-pclxl" : "pclxl", + "vnd.hydrostatix.sof-data" : "sfd-hdstx", + "vnd.ibm.minipay" : "mpy", + "vnd.ibm.modcap" : [ "afp", "listafp", "list3820" ], + "vnd.ibm.rights-management" : "irm", + "vnd.ibm.secure-container" : "sc", + "vnd.iccprofile" : [ "icc", "icm" ], + "vnd.igloader" : "igl", + "vnd.immervision-ivp" : "ivp", + "vnd.immervision-ivu" : "ivu", + "vnd.insors.igm" : "igm", + "vnd.intercon.formnet" : [ "xpw", "xpx" ], + "vnd.intergeo" : "i2g", + "vnd.intu.qbo" : "qbo", + "vnd.intu.qfx" : "qfx", + "vnd.ipunplugged.rcprofile" : "rcprofile", + "vnd.irepository.package+xml" : "irp", + "vnd.is-xpr" : "xpr", + "vnd.isac.fcs" : "fcs", + "vnd.jam" : "jam", + "vnd.jcp.javame.midlet-rms" : "rms", + "vnd.jisp" : "jisp", + "vnd.joost.joda-archive" : "joda", + "vnd.kahootz" : [ "ktz", "ktr" ], + "vnd.kde.karbon" : "karbon", + "vnd.kde.kchart" : "chrt", + "vnd.kde.kformula" : "kfo", + "vnd.kde.kivio" : "flw", + "vnd.kde.kontour" : "kon", + "vnd.kde.kpresenter" : [ "kpr", "kpt" ], + "vnd.kde.kspread" : "ksp", + "vnd.kde.kword" : [ "kwd", "kwt" ], + "vnd.kenameaapp" : "htke", + "vnd.kidspiration" : "kia", + "vnd.kinar" : [ "kne", "knp" ], + "vnd.koan" : [ "skp", "skd", "skt", "skm" ], + "vnd.kodak-descriptor" : "sse", + "vnd.las.las+xml" : "lasxml", + "vnd.llamagraphics.life-balance.desktop" : "lbd", + "vnd.llamagraphics.life-balance.exchange+xml" : "lbe", + "vnd.lotus-1-2-3" : "123", + "vnd.lotus-approach" : "apr", + "vnd.lotus-freelance" : "pre", + "vnd.lotus-notes" : "nsf", + "vnd.lotus-organizer" : "org", + "vnd.lotus-screencam" : "scm", + "vnd.lotus-wordpro" : "lwp", + "vnd.macports.portpkg" : "portpkg", + "vnd.mcd" : "mcd", + "vnd.medcalcdata" : "mc1", + "vnd.mediastation.cdkey" : "cdkey", + "vnd.mfer" : "mwf", + "vnd.mfmp" : "mfm", + "vnd.micrografx.flo" : "flo", + "vnd.micrografx.igx" : "igx", + "vnd.mif" : "mif", + "vnd.mobius.daf" : "daf", + "vnd.mobius.dis" : "dis", + "vnd.mobius.mbk" : "mbk", + "vnd.mobius.mqy" : "mqy", + "vnd.mobius.msl" : "msl", + "vnd.mobius.plc" : "plc", + "vnd.mobius.txf" : "txf", + "vnd.mophun.application" : "mpn", + "vnd.mophun.certificate" : "mpc", + "vnd.ms-artgalry" : "cil", + "vnd.ms-cab-compressed" : "cab", + "vnd.ms-excel.addin.macroenabled.12" : "xlam", + "vnd.ms-excel.sheet.binary.macroenabled.12" : "xlsb", + "vnd.ms-excel.sheet.macroenabled.12" : "xlsm", + "vnd.ms-excel.template.macroenabled.12" : "xltm", + "vnd.ms-fontobject" : "eot", + "vnd.ms-htmlhelp" : "chm", + "vnd.ms-ims" : "ims", + "vnd.ms-lrm" : "lrm", + "vnd.ms-officetheme" : "thmx", + "vnd.ms-powerpoint.addin.macroenabled.12" : "ppam", + "vnd.ms-powerpoint.presentation.macroenabled.12" : "pptm", + "vnd.ms-powerpoint.slide.macroenabled.12" : "sldm", + "vnd.ms-powerpoint.slideshow.macroenabled.12" : "ppsm", + "vnd.ms-powerpoint.template.macroenabled.12" : "potm", + "vnd.ms-project" : [ "mpp", "mpt" ], + "vnd.ms-word.document.macroenabled.12" : "docm", + "vnd.ms-word.template.macroenabled.12" : "dotm", + "vnd.ms-works" : [ "wps", "wks", "wcm", "wdb" ], + "vnd.ms-wpl" : "wpl", + "vnd.ms-xpsdocument" : "xps", + "vnd.mseq" : "mseq", + "vnd.musician" : "mus", + "vnd.muvee.style" : "msty", + "vnd.mynfc" : "taglet", + "vnd.neurolanguage.nlu" : "nlu", + "vnd.nitf" : [ "ntf", "nitf" ], + "vnd.noblenet-directory" : "nnd", + "vnd.noblenet-sealer" : "nns", + "vnd.noblenet-web" : "nnw", + "vnd.nokia.n-gage.data" : "ngdat", + "vnd.nokia.n-gage.symbian.install" : "n-gage", + "vnd.nokia.radio-preset" : "rpst", + "vnd.nokia.radio-presets" : "rpss", + "vnd.novadigm.edm" : "edm", + "vnd.novadigm.edx" : "edx", + "vnd.novadigm.ext" : "ext", + "vnd.oasis.opendocument.chart-template" : "otc", + "vnd.oasis.opendocument.formula-template" : "odft", + "vnd.oasis.opendocument.image-template" : "oti", + "vnd.olpc-sugar" : "xo", + "vnd.oma.dd2+xml" : "dd2", + "vnd.openofficeorg.extension" : "oxt", + "vnd.openxmlformats-officedocument.presentationml.slide" : "sldx", + "vnd.osgeo.mapguide.package" : "mgp", + "vnd.osgi.dp" : "dp", + "vnd.osgi.subsystem" : "esa", + "vnd.palm" : [ "pdb", "pqa", "oprc" ], + "vnd.pawaafile" : "paw", + "vnd.pg.format" : "str", + "vnd.pg.osasli" : "ei6", + "vnd.picsel" : "efif", + "vnd.pmi.widget" : "wg", + "vnd.pocketlearn" : "plf", + "vnd.powerbuilder6" : "pbd", + "vnd.previewsystems.box" : "box", + "vnd.proteus.magazine" : "mgz", + "vnd.publishare-delta-tree" : "qps", + "vnd.pvi.ptid1" : "ptid", + "vnd.quark.quarkxpress" : [ "qxd", "qxt", "qwd", "qwt", "qxl", "qxb" ], + "vnd.realvnc.bed" : "bed", + "vnd.recordare.musicxml" : "mxl", + "vnd.recordare.musicxml+xml" : "musicxml", + "vnd.rig.cryptonote" : "cryptonote", + "vnd.rn-realmedia" : "rm", + "vnd.rn-realmedia-vbr" : "rmvb", + "vnd.route66.link66+xml" : "link66", + "vnd.sailingtracker.track" : "st", + "vnd.seemail" : "see", + "vnd.sema" : "sema", + "vnd.semd" : "semd", + "vnd.semf" : "semf", + "vnd.shana.informed.formdata" : "ifm", + "vnd.shana.informed.formtemplate" : "itp", + "vnd.shana.informed.interchange" : "iif", + "vnd.shana.informed.package" : "ipk", + "vnd.simtech-mindmapper" : [ "twd", "twds" ], + "vnd.smart.teacher" : "teacher", + "vnd.solent.sdkm+xml" : [ "sdkm", "sdkd" ], + "vnd.spotfire.dxp" : "dxp", + "vnd.spotfire.sfs" : "sfs", + "vnd.stepmania.package" : "smzip", + "vnd.stepmania.stepchart" : "sm", + "vnd.sus-calendar" : [ "sus", "susp" ], + "vnd.svd" : "svd", + "vnd.syncml+xml" : "xsm", + "vnd.syncml.dm+wbxml" : "bdm", + "vnd.syncml.dm+xml" : "xdm", + "vnd.tao.intent-module-archive" : "tao", + "vnd.tcpdump.pcap" : [ "pcap", "cap", "dmp" ], + "vnd.tmobile-livetv" : "tmo", + "vnd.trid.tpt" : "tpt", + "vnd.triscape.mxs" : "mxs", + "vnd.trueapp" : "tra", + "vnd.ufdl" : [ "ufd", "ufdl" ], + "vnd.uiq.theme" : "utz", + "vnd.umajin" : "umj", + "vnd.unity" : "unityweb", + "vnd.uoml+xml" : "uoml", + "vnd.vcx" : "vcx", + "vnd.visionary" : "vis", + "vnd.vsf" : "vsf", + "vnd.webturbo" : "wtb", + "vnd.wolfram.player" : "nbp", + "vnd.wqd" : "wqd", + "vnd.wt.stf" : "stf", + "vnd.xara" : "xar", + "vnd.xfdl" : "xfdl", + "vnd.yamaha.hv-dic" : "hvd", + "vnd.yamaha.hv-script" : "hvs", + "vnd.yamaha.hv-voice" : "hvp", + "vnd.yamaha.openscoreformat" : "osf", + "vnd.yamaha.openscoreformat.osfpvg+xml" : "osfpvg", + "vnd.yamaha.smaf-audio" : "saf", + "vnd.yamaha.smaf-phrase" : "spf", + "vnd.yellowriver-custom-menu" : "cmp", + "vnd.zul" : [ "zir", "zirz" ], + "vnd.zzazz.deck+xml" : "zaz", + "voicexml+xml" : "vxml", + "widget" : "wgt", + "winhlp" : "hlp", + "wsdl+xml" : "wsdl", + "wspolicy+xml" : "wspolicy", + "x-ace-compressed" : "ace", + "x-authorware-bin" : [ "aab", "x32", "u32", "vox" ], + "x-authorware-map" : "aam", + "x-authorware-seg" : "aas", + "x-blorb" : [ "blb", "blorb" ], + "x-bzip" : "bz", + "x-bzip2" : [ "bz2", "boz" ], + "x-cfs-compressed" : "cfs", + "x-chat" : "chat", + "x-conference" : "nsc", + "x-dgc-compressed" : "dgc", + "x-dtbncx+xml" : "ncx", + "x-dtbook+xml" : "dtb", + "x-dtbresource+xml" : "res", + "x-eva" : "eva", + "x-font-bdf" : "bdf", + "x-font-ghostscript" : "gsf", + "x-font-linux-psf" : "psf", + "x-font-otf" : "otf", + "x-font-pcf" : "pcf", + "x-font-snf" : "snf", + "x-font-ttf" : [ "ttf", "ttc" ], + "x-font-type1" : [ "pfa", "pfb", "pfm", "afm" ], + "x-font-woff" : "woff", + "x-freearc" : "arc", + "x-gca-compressed" : "gca", + "x-glulx" : "ulx", + "x-gramps-xml" : "gramps", + "x-install-instructions" : "install", + "x-lzh-compressed" : [ "lzh", "lha" ], + "x-mie" : "mie", + "x-mobipocket-ebook" : [ "prc", "mobi" ], + "x-ms-application" : "application", + "x-ms-shortcut" : "lnk", + "x-ms-xbap" : "xbap", + "x-msbinder" : "obd", + "x-mscardfile" : "crd", + "x-msclip" : "clp", + "x-msdownload" : [ "exe", "dll", "com", "bat", "msi" ], + "x-msmediaview" : [ "mvb", "m13", "m14" ], + "x-msmetafile" : [ "wmf", "wmz", "emf", "emz" ], + "x-msmoney" : "mny", + "x-mspublisher" : "pub", + "x-msschedule" : "scd", + "x-msterminal" : "trm", + "x-mswrite" : "wri", + "x-nzb" : "nzb", + "x-pkcs12" : [ "p12", "pfx" ], + "x-pkcs7-certificates" : [ "p7b", "spc" ], + "x-research-info-systems" : "ris", + "x-silverlight-app" : "xap", + "x-sql" : "sql", + "x-stuffitx" : "sitx", + "x-subrip" : "srt", + "x-t3vm-image" : "t3", + "x-tads" : "gam", + "x-tex" : "tex", + "x-tex-tfm" : "tfm", + "x-tgif" : "obj", + "x-xliff+xml" : "xlf", + "x-xz" : "xz", + "x-zmachine" : [ "z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8" ], + "xaml+xml" : "xaml", + "xcap-diff+xml" : "xdf", + "xenc+xml" : "xenc", + "xml-dtd" : "dtd", + "xop+xml" : "xop", + "xproc+xml" : "xpl", + "xslt+xml" : "xslt", + "xv+xml" : [ "mxml", "xhvml", "xvml", "xvm" ], + "yang" : "yang", + "yin+xml" : "yin", + "envoy" : "evy", + "fractals" : "fif", + "internet-property-stream" : "acx", + "olescript" : "axs", + "vnd.ms-outlook" : "msg", + "vnd.ms-pkicertstore" : "sst", + "x-compress" : "z", + "x-compressed" : "tgz", + "x-gzip" : "gz", + "x-perfmon" : [ "pma", "pmc", "pml", "pmr", "pmw" ], + "x-pkcs7-mime" : [ "p7c", "p7m" ], + "ynd.ms-pkipko" : "pko" + }, + "audio" : { + "amr" : "amr", + "amr-wb" : "awb", + "annodex" : "axa", + "basic" : [ "au", "snd" ], + "flac" : "flac", + "midi" : [ "mid", "midi", "kar", "rmi" ], + "mpeg" : [ "mpga", "mpega", "mp2", "mp3", "m4a", "mp2a", "m2a", "m3a" ], + "mpegurl" : "m3u", + "ogg" : [ "oga", "ogg", "spx" ], + "prs.sid" : "sid", + "x-aiff" : [ "aif", "aiff", "aifc" ], + "x-gsm" : "gsm", + "x-ms-wma" : "wma", + "x-ms-wax" : "wax", + "x-pn-realaudio" : "ram", + "x-realaudio" : "ra", + "x-sd2" : "sd2", + "x-wav" : "wav", + "adpcm" : "adp", + "mp4" : "mp4a", + "s3m" : "s3m", + "silk" : "sil", + "vnd.dece.audio" : [ "uva", "uvva" ], + "vnd.digital-winds" : "eol", + "vnd.dra" : "dra", + "vnd.dts" : "dts", + "vnd.dts.hd" : "dtshd", + "vnd.lucent.voice" : "lvp", + "vnd.ms-playready.media.pya" : "pya", + "vnd.nuera.ecelp4800" : "ecelp4800", + "vnd.nuera.ecelp7470" : "ecelp7470", + "vnd.nuera.ecelp9600" : "ecelp9600", + "vnd.rip" : "rip", + "webm" : "weba", + "x-aac" : "aac", + "x-caf" : "caf", + "x-matroska" : "mka", + "x-pn-realaudio-plugin" : "rmp", + "xm" : "xm", + "mid" : [ "mid", "rmi" ] + }, + "chemical" : { + "x-alchemy" : "alc", + "x-cache" : [ "cac", "cache" ], + "x-cache-csf" : "csf", + "x-cactvs-binary" : [ "cbin", "cascii", "ctab" ], + "x-cdx" : "cdx", + "x-chem3d" : "c3d", + "x-cif" : "cif", + "x-cmdf" : "cmdf", + "x-cml" : "cml", + "x-compass" : "cpa", + "x-crossfire" : "bsd", + "x-csml" : [ "csml", "csm" ], + "x-ctx" : "ctx", + "x-cxf" : [ "cxf", "cef" ], + "x-embl-dl-nucleotide" : [ "emb", "embl" ], + "x-gamess-input" : [ "inp", "gam", "gamin" ], + "x-gaussian-checkpoint" : [ "fch", "fchk" ], + "x-gaussian-cube" : "cub", + "x-gaussian-input" : [ "gau", "gjc", "gjf" ], + "x-gaussian-log" : "gal", + "x-gcg8-sequence" : "gcg", + "x-genbank" : "gen", + "x-hin" : "hin", + "x-isostar" : [ "istr", "ist" ], + "x-jcamp-dx" : [ "jdx", "dx" ], + "x-kinemage" : "kin", + "x-macmolecule" : "mcm", + "x-macromodel-input" : [ "mmd", "mmod" ], + "x-mdl-molfile" : "mol", + "x-mdl-rdfile" : "rd", + "x-mdl-rxnfile" : "rxn", + "x-mdl-sdfile" : [ "sd", "sdf" ], + "x-mdl-tgf" : "tgf", + "x-mmcif" : "mcif", + "x-mol2" : "mol2", + "x-molconn-Z" : "b", + "x-mopac-graph" : "gpt", + "x-mopac-input" : [ "mop", "mopcrt", "mpc", "zmt" ], + "x-mopac-out" : "moo", + "x-ncbi-asn1" : "asn", + "x-ncbi-asn1-ascii" : [ "prt", "ent" ], + "x-ncbi-asn1-binary" : [ "val", "aso" ], + "x-pdb" : [ "pdb", "ent" ], + "x-rosdal" : "ros", + "x-swissprot" : "sw", + "x-vamas-iso14976" : "vms", + "x-vmd" : "vmd", + "x-xtel" : "xtel", + "x-xyz" : "xyz" + }, + "image" : { + "gif" : "gif", + "ief" : "ief", + "jpeg" : [ "jpeg", "jpg", "jpe" ], + "pcx" : "pcx", + "png" : "png", + "svg+xml" : [ "svg", "svgz" ], + "tiff" : [ "tiff", "tif" ], + "vnd.djvu" : [ "djvu", "djv" ], + "vnd.wap.wbmp" : "wbmp", + "x-canon-cr2" : "cr2", + "x-canon-crw" : "crw", + "x-cmu-raster" : "ras", + "x-coreldraw" : "cdr", + "x-coreldrawpattern" : "pat", + "x-coreldrawtemplate" : "cdt", + "x-corelphotopaint" : "cpt", + "x-epson-erf" : "erf", + "x-icon" : "ico", + "x-jg" : "art", + "x-jng" : "jng", + "x-nikon-nef" : "nef", + "x-olympus-orf" : "orf", + "x-photoshop" : "psd", + "x-portable-anymap" : "pnm", + "x-portable-bitmap" : "pbm", + "x-portable-graymap" : "pgm", + "x-portable-pixmap" : "ppm", + "x-rgb" : "rgb", + "x-xbitmap" : "xbm", + "x-xpixmap" : "xpm", + "x-xwindowdump" : "xwd", + "bmp" : "bmp", + "cgm" : "cgm", + "g3fax" : "g3", + "ktx" : "ktx", + "prs.btif" : "btif", + "sgi" : "sgi", + "vnd.dece.graphic" : [ "uvi", "uvvi", "uvg", "uvvg" ], + "vnd.dwg" : "dwg", + "vnd.dxf" : "dxf", + "vnd.fastbidsheet" : "fbs", + "vnd.fpx" : "fpx", + "vnd.fst" : "fst", + "vnd.fujixerox.edmics-mmr" : "mmr", + "vnd.fujixerox.edmics-rlc" : "rlc", + "vnd.ms-modi" : "mdi", + "vnd.ms-photo" : "wdp", + "vnd.net-fpx" : "npx", + "vnd.xiff" : "xif", + "webp" : "webp", + "x-3ds" : "3ds", + "x-cmx" : "cmx", + "x-freehand" : [ "fh", "fhc", "fh4", "fh5", "fh7" ], + "x-pict" : [ "pic", "pct" ], + "x-tga" : "tga", + "cis-cod" : "cod", + "pipeg" : "jfif" + }, + "message" : { + "rfc822" : [ "eml", "mime", "mht", "mhtml", "nws" ] + }, + "model" : { + "iges" : [ "igs", "iges" ], + "mesh" : [ "msh", "mesh", "silo" ], + "vrml" : [ "wrl", "vrml" ], + "x3d+vrml" : [ "x3dv", "x3dvz" ], + "x3d+xml" : [ "x3d", "x3dz" ], + "x3d+binary" : [ "x3db", "x3dbz" ], + "vnd.collada+xml" : "dae", + "vnd.dwf" : "dwf", + "vnd.gdl" : "gdl", + "vnd.gtw" : "gtw", + "vnd.mts" : "mts", + "vnd.vtu" : "vtu" + }, + "text" : { + "cache-manifest" : [ "manifest", "appcache" ], + "calendar" : [ "ics", "icz", "ifb" ], + "css" : "css", + "csv" : "csv", + "h323" : "323", + "html" : [ "html", "htm", "shtml", "stm" ], + "iuls" : "uls", + "mathml" : "mml", + "plain" : [ "txt", "text", "brf", "conf", "def", "list", "log", "in", "bas" ], + "richtext" : "rtx", + "scriptlet" : [ "sct", "wsc" ], + "texmacs" : [ "tm", "ts" ], + "tab-separated-values" : "tsv", + "vnd.sun.j2me.app-descriptor" : "jad", + "vnd.wap.wml" : "wml", + "vnd.wap.wmlscript" : "wmls", + "x-bibtex" : "bib", + "x-boo" : "boo", + "x-c++hdr" : [ "h++", "hpp", "hxx", "hh" ], + "x-c++src" : [ "c++", "cpp", "cxx", "cc" ], + "x-component" : "htc", + "x-dsrc" : "d", + "x-diff" : [ "diff", "patch" ], + "x-haskell" : "hs", + "x-java" : "java", + "x-literate-haskell" : "lhs", + "x-moc" : "moc", + "x-pascal" : [ "p", "pas" ], + "x-pcs-gcd" : "gcd", + "x-perl" : [ "pl", "pm" ], + "x-python" : "py", + "x-scala" : "scala", + "x-setext" : "etx", + "x-tcl" : [ "tcl", "tk" ], + "x-tex" : [ "tex", "ltx", "sty", "cls" ], + "x-vcalendar" : "vcs", + "x-vcard" : "vcf", + "n3" : "n3", + "prs.lines.tag" : "dsc", + "sgml" : [ "sgml", "sgm" ], + "troff" : [ "t", "tr", "roff", "man", "me", "ms" ], + "turtle" : "ttl", + "uri-list" : [ "uri", "uris", "urls" ], + "vcard" : "vcard", + "vnd.curl" : "curl", + "vnd.curl.dcurl" : "dcurl", + "vnd.curl.scurl" : "scurl", + "vnd.curl.mcurl" : "mcurl", + "vnd.dvb.subtitle" : "sub", + "vnd.fly" : "fly", + "vnd.fmi.flexstor" : "flx", + "vnd.graphviz" : "gv", + "vnd.in3d.3dml" : "3dml", + "vnd.in3d.spot" : "spot", + "x-asm" : [ "s", "asm" ], + "x-c" : [ "c", "cc", "cxx", "cpp", "h", "hh", "dic" ], + "x-fortran" : [ "f", "for", "f77", "f90" ], + "x-opml" : "opml", + "x-nfo" : "nfo", + "x-sfv" : "sfv", + "x-uuencode" : "uu", + "webviewhtml" : "htt" + }, + "video" : { + "3gpp" : "3gp", + "annodex" : "axv", + "dl" : "dl", + "dv" : [ "dif", "dv" ], + "fli" : "fli", + "gl" : "gl", + "mpeg" : [ "mpeg", "mpg", "mpe", "m1v", "m2v", "mp2", "mpa", "mpv2" ], + "mp4" : [ "mp4", "mp4v", "mpg4" ], + "quicktime" : [ "qt", "mov" ], + "ogg" : "ogv", + "vnd.mpegurl" : [ "mxu", "m4u" ], + "x-flv" : "flv", + "x-la-asf" : [ "lsf", "lsx" ], + "x-mng" : "mng", + "x-ms-asf" : [ "asf", "asx", "asr" ], + "x-ms-wm" : "wm", + "x-ms-wmv" : "wmv", + "x-ms-wmx" : "wmx", + "x-ms-wvx" : "wvx", + "x-msvideo" : "avi", + "x-sgi-movie" : "movie", + "x-matroska" : [ "mpv", "mkv", "mk3d", "mks" ], + "3gpp2" : "3g2", + "h261" : "h261", + "h263" : "h263", + "h264" : "h264", + "jpeg" : "jpgv", + "jpm" : [ "jpm", "jpgm" ], + "mj2" : [ "mj2", "mjp2" ], + "vnd.dece.hd" : [ "uvh", "uvvh" ], + "vnd.dece.mobile" : [ "uvm", "uvvm" ], + "vnd.dece.pd" : [ "uvp", "uvvp" ], + "vnd.dece.sd" : [ "uvs", "uvvs" ], + "vnd.dece.video" : [ "uvv", "uvvv" ], + "vnd.dvb.file" : "dvb", + "vnd.fvt" : "fvt", + "vnd.ms-playready.media.pyv" : "pyv", + "vnd.uvvu.mp4" : [ "uvu", "uvvu" ], + "vnd.vivo" : "viv", + "webm" : "webm", + "x-f4v" : "f4v", + "x-m4v" : "m4v", + "x-ms-vob" : "vob", + "x-smv" : "smv" + }, + "x-conference" : { + "x-cooltalk" : "ice" + }, + "x-world" : { + "x-vrml" : [ "vrm", "vrml", "wrl", "flr", "wrz", "xaf", "xof" ] + } + }; + + var mimeTypes = (function() { + var type, subtype, val, index, mimeTypes = {}; + for (type in table) { + if (table.hasOwnProperty(type)) { + for (subtype in table[type]) { + if (table[type].hasOwnProperty(subtype)) { + val = table[type][subtype]; + if (typeof val == "string") { + mimeTypes[val] = type + "/" + subtype; + } else { + for (index = 0; index < val.length; index++) { + mimeTypes[val[index]] = type + "/" + subtype; + } + } + } + } + } + } + return mimeTypes; + })(); + + zip.getMimeType = function(filename) { + var defaultValue = "application/octet-stream"; + return filename && mimeTypes[filename.split(".").pop().toLowerCase()] || defaultValue; + }; + +})(); diff --git a/lib/z-worker.js b/lib/z-worker.js new file mode 100644 index 0000000..8a03b4b --- /dev/null +++ b/lib/z-worker.js @@ -0,0 +1,153 @@ +/* jshint worker:true */ +(function main(global) { + "use strict"; + + if (global.zWorkerInitialized) + throw new Error('z-worker.js should be run only once'); + global.zWorkerInitialized = true; + + addEventListener("message", function(event) { + var message = event.data, type = message.type, sn = message.sn; + var handler = handlers[type]; + if (handler) { + try { + handler(message); + } catch (e) { + onError(type, sn, e); + } + } + //for debug + //postMessage({type: 'echo', originalType: type, sn: sn}); + }); + + var handlers = { + importScripts: doImportScripts, + newTask: newTask, + append: processData, + flush: processData, + }; + + // deflater/inflater tasks indexed by serial numbers + var tasks = {}; + + function doImportScripts(msg) { + if (msg.scripts && msg.scripts.length > 0) + importScripts.apply(undefined, msg.scripts); + postMessage({type: 'importScripts'}); + } + + function newTask(msg) { + var CodecClass = global[msg.codecClass]; + var sn = msg.sn; + if (tasks[sn]) + throw Error('duplicated sn'); + tasks[sn] = { + codec: new CodecClass(msg.options), + crcInput: msg.crcType === 'input', + crcOutput: msg.crcType === 'output', + crc: new Crc32(), + }; + postMessage({type: 'newTask', sn: sn}); + } + + // performance may not be supported + var now = global.performance ? global.performance.now.bind(global.performance) : Date.now; + + function processData(msg) { + var sn = msg.sn, type = msg.type, input = msg.data; + var task = tasks[sn]; + // allow creating codec on first append + if (!task && msg.codecClass) { + newTask(msg); + task = tasks[sn]; + } + var isAppend = type === 'append'; + var start = now(); + var output; + if (isAppend) { + try { + output = task.codec.append(input, function onprogress(loaded) { + postMessage({type: 'progress', sn: sn, loaded: loaded}); + }); + } catch (e) { + delete tasks[sn]; + throw e; + } + } else { + delete tasks[sn]; + output = task.codec.flush(); + } + var codecTime = now() - start; + + start = now(); + if (input && task.crcInput) + task.crc.append(input); + if (output && task.crcOutput) + task.crc.append(output); + var crcTime = now() - start; + + var rmsg = {type: type, sn: sn, codecTime: codecTime, crcTime: crcTime}; + var transferables = []; + if (output) { + rmsg.data = output; + transferables.push(output.buffer); + } + if (!isAppend && (task.crcInput || task.crcOutput)) + rmsg.crc = task.crc.get(); + + // posting a message with transferables will fail on IE10 + try { + postMessage(rmsg, transferables); + } catch(ex) { + postMessage(rmsg); // retry without transferables + } + } + + function onError(type, sn, e) { + var msg = { + type: type, + sn: sn, + error: formatError(e) + }; + postMessage(msg); + } + + function formatError(e) { + return { message: e.message, stack: e.stack }; + } + + // Crc32 code copied from file zip.js + function Crc32() { + this.crc = -1; + } + Crc32.prototype.append = function append(data) { + var crc = this.crc | 0, table = this.table; + for (var offset = 0, len = data.length | 0; offset < len; offset++) + crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF]; + this.crc = crc; + }; + Crc32.prototype.get = function get() { + return ~this.crc; + }; + Crc32.prototype.table = (function() { + var i, j, t, table = []; // Uint32Array is actually slower than [] + for (i = 0; i < 256; i++) { + t = i; + for (j = 0; j < 8; j++) + if (t & 1) + t = (t >>> 1) ^ 0xEDB88320; + else + t = t >>> 1; + table[i] = t; + } + return table; + })(); + + // "no-op" codec + function NOOP() {} + global.NOOP = NOOP; + NOOP.prototype.append = function append(bytes, onprogress) { + return bytes; + }; + NOOP.prototype.flush = function flush() {}; +})(this); diff --git a/lib/zip-ext.js b/lib/zip-ext.js new file mode 100644 index 0000000..533ad79 --- /dev/null +++ b/lib/zip-ext.js @@ -0,0 +1,259 @@ +/* + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function() { + "use strict"; + + var ERR_HTTP_RANGE = "HTTP Range not supported."; + + var Reader = zip.Reader; + var Writer = zip.Writer; + + var ZipDirectoryEntry; + + var appendABViewSupported; + try { + appendABViewSupported = new Blob([ new DataView(new ArrayBuffer(0)) ]).size === 0; + } catch (e) { + } + + function isHttpFamily(url) { + var a = document.createElement("a"); + a.href = url; + return a.protocol === "http:" || a.protocol === "https:"; + } + + function HttpReader(url) { + var that = this; + + function getData(callback, onerror) { + var request; + if (!that.data) { + request = new XMLHttpRequest(); + request.addEventListener("load", function() { + if (!that.size) + that.size = Number(request.getResponseHeader("Content-Length")) || Number(request.response.byteLength); + that.data = new Uint8Array(request.response); + callback(); + }, false); + request.addEventListener("error", onerror, false); + request.open("GET", url); + request.responseType = "arraybuffer"; + request.send(); + } else + callback(); + } + + function init(callback, onerror) { + if (!isHttpFamily(url)) { + // For schemas other than http(s), HTTP HEAD may be unavailable, + // so use HTTP GET instead. + getData(callback, onerror); + return; + } + var request = new XMLHttpRequest(); + request.addEventListener("load", function() { + that.size = Number(request.getResponseHeader("Content-Length")); + // If response header doesn't return size then prefetch the content. + if (!that.size) { + getData(callback, onerror); + } else { + callback(); + } + }, false); + request.addEventListener("error", onerror, false); + request.open("HEAD", url); + request.send(); + } + + function readUint8Array(index, length, callback, onerror) { + getData(function() { + callback(new Uint8Array(that.data.subarray(index, index + length))); + }, onerror); + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + HttpReader.prototype = new Reader(); + HttpReader.prototype.constructor = HttpReader; + + function HttpRangeReader(url) { + var that = this; + + function init(callback, onerror) { + var request = new XMLHttpRequest(); + request.addEventListener("load", function() { + that.size = Number(request.getResponseHeader("Content-Length")); + if (request.getResponseHeader("Accept-Ranges") == "bytes") + callback(); + else + onerror(ERR_HTTP_RANGE); + }, false); + request.addEventListener("error", onerror, false); + request.open("HEAD", url); + request.send(); + } + + function readArrayBuffer(index, length, callback, onerror) { + var request = new XMLHttpRequest(); + request.open("GET", url); + request.responseType = "arraybuffer"; + request.setRequestHeader("Range", "bytes=" + index + "-" + (index + length - 1)); + request.addEventListener("load", function() { + callback(request.response); + }, false); + request.addEventListener("error", onerror, false); + request.send(); + } + + function readUint8Array(index, length, callback, onerror) { + readArrayBuffer(index, length, function(arraybuffer) { + callback(new Uint8Array(arraybuffer)); + }, onerror); + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + HttpRangeReader.prototype = new Reader(); + HttpRangeReader.prototype.constructor = HttpRangeReader; + + function ArrayBufferReader(arrayBuffer) { + var that = this; + + function init(callback, onerror) { + that.size = arrayBuffer.byteLength; + callback(); + } + + function readUint8Array(index, length, callback, onerror) { + callback(new Uint8Array(arrayBuffer.slice(index, index + length))); + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + ArrayBufferReader.prototype = new Reader(); + ArrayBufferReader.prototype.constructor = ArrayBufferReader; + + function ArrayBufferWriter() { + var array, that = this; + + function init(callback, onerror) { + array = new Uint8Array(); + callback(); + } + + function writeUint8Array(arr, callback, onerror) { + var tmpArray = new Uint8Array(array.length + arr.length); + tmpArray.set(array); + tmpArray.set(arr, array.length); + array = tmpArray; + callback(); + } + + function getData(callback) { + callback(array.buffer); + } + + that.init = init; + that.writeUint8Array = writeUint8Array; + that.getData = getData; + } + ArrayBufferWriter.prototype = new Writer(); + ArrayBufferWriter.prototype.constructor = ArrayBufferWriter; + + function FileWriter(fileEntry, contentType) { + var writer, that = this; + + function init(callback, onerror) { + fileEntry.createWriter(function(fileWriter) { + writer = fileWriter; + callback(); + }, onerror); + } + + function writeUint8Array(array, callback, onerror) { + var blob = new Blob([ appendABViewSupported ? array : array.buffer ], { + type : contentType + }); + writer.onwrite = function() { + writer.onwrite = null; + callback(); + }; + writer.onerror = onerror; + writer.write(blob); + } + + function getData(callback) { + fileEntry.file(callback); + } + + that.init = init; + that.writeUint8Array = writeUint8Array; + that.getData = getData; + } + FileWriter.prototype = new Writer(); + FileWriter.prototype.constructor = FileWriter; + + zip.FileWriter = FileWriter; + zip.HttpReader = HttpReader; + zip.HttpRangeReader = HttpRangeReader; + zip.ArrayBufferReader = ArrayBufferReader; + zip.ArrayBufferWriter = ArrayBufferWriter; + + if (zip.fs) { + ZipDirectoryEntry = zip.fs.ZipDirectoryEntry; + ZipDirectoryEntry.prototype.addHttpContent = function(name, URL, useRangeHeader) { + function addChild(parent, name, params, directory) { + if (parent.directory) + return directory ? new ZipDirectoryEntry(parent.fs, name, params, parent) : new zip.fs.ZipFileEntry(parent.fs, name, params, parent); + else + throw "Parent entry is not a directory."; + } + + return addChild(this, name, { + data : URL, + Reader : useRangeHeader ? HttpRangeReader : HttpReader + }); + }; + ZipDirectoryEntry.prototype.importHttpContent = function(URL, useRangeHeader, onend, onerror) { + this.importZip(useRangeHeader ? new HttpRangeReader(URL) : new HttpReader(URL), onend, onerror); + }; + zip.fs.FS.prototype.importHttpContent = function(URL, useRangeHeader, onend, onerror) { + this.entries = []; + this.root = new ZipDirectoryEntry(this); + this.root.importHttpContent(URL, useRangeHeader, onend, onerror); + }; + } + +})(); diff --git a/lib/zip-fs.js b/lib/zip-fs.js new file mode 100644 index 0000000..38bf309 --- /dev/null +++ b/lib/zip-fs.js @@ -0,0 +1,553 @@ +/* + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function() { + "use strict"; + + var CHUNK_SIZE = 512 * 1024; + + var TextWriter = zip.TextWriter, // + BlobWriter = zip.BlobWriter, // + Data64URIWriter = zip.Data64URIWriter, // + Reader = zip.Reader, // + TextReader = zip.TextReader, // + BlobReader = zip.BlobReader, // + Data64URIReader = zip.Data64URIReader, // + createReader = zip.createReader, // + createWriter = zip.createWriter; + + function ZipBlobReader(entry) { + var that = this, blobReader; + + function init(callback) { + that.size = entry.uncompressedSize; + callback(); + } + + function getData(callback) { + if (that.data) + callback(); + else + entry.getData(new BlobWriter(), function(data) { + that.data = data; + blobReader = new BlobReader(data); + callback(); + }, null, that.checkCrc32); + } + + function readUint8Array(index, length, callback, onerror) { + getData(function() { + blobReader.readUint8Array(index, length, callback, onerror); + }, onerror); + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + ZipBlobReader.prototype = new Reader(); + ZipBlobReader.prototype.constructor = ZipBlobReader; + ZipBlobReader.prototype.checkCrc32 = false; + + function getTotalSize(entry) { + var size = 0; + + function process(entry) { + size += entry.uncompressedSize || 0; + entry.children.forEach(process); + } + + process(entry); + return size; + } + + function initReaders(entry, onend, onerror) { + var index = 0; + + function next() { + index++; + if (index < entry.children.length) + process(entry.children[index]); + else + onend(); + } + + function process(child) { + if (child.directory) + initReaders(child, next, onerror); + else { + child.reader = new child.Reader(child.data, onerror); + child.reader.init(function() { + child.uncompressedSize = child.reader.size; + next(); + }); + } + } + + if (entry.children.length) + process(entry.children[index]); + else + onend(); + } + + function detach(entry) { + var children = entry.parent.children; + children.forEach(function(child, index) { + if (child.id == entry.id) + children.splice(index, 1); + }); + } + + function exportZip(zipWriter, entry, onend, onprogress, totalSize) { + var currentIndex = 0; + + function process(zipWriter, entry, onend, onprogress, totalSize) { + var childIndex = 0; + + function exportChild() { + var child = entry.children[childIndex]; + if (child) + zipWriter.add(child.getFullname(), child.reader, function() { + currentIndex += child.uncompressedSize || 0; + process(zipWriter, child, function() { + childIndex++; + exportChild(); + }, onprogress, totalSize); + }, function(index) { + if (onprogress) + onprogress(currentIndex + index, totalSize); + }, { + directory : child.directory, + version : child.zipVersion + }); + else + onend(); + } + + exportChild(); + } + + process(zipWriter, entry, onend, onprogress, totalSize); + } + + function addFileEntry(zipEntry, fileEntry, onend, onerror) { + function getChildren(fileEntry, callback) { + var entries = []; + if (fileEntry.isDirectory) { + var directoryReader = fileEntry.createReader(); + (function readEntries() { + directoryReader.readEntries(function(temporaryEntries) { + if (!temporaryEntries.length) + callback(entries); + else { + entries = entries.concat(temporaryEntries); + readEntries(); + } + }, onerror); + })(); + } + if (fileEntry.isFile) + callback(entries); + } + + function process(zipEntry, fileEntry, onend) { + getChildren(fileEntry, function(children) { + var childIndex = 0; + + function addChild(child) { + function nextChild(childFileEntry) { + process(childFileEntry, child, function() { + childIndex++; + processChild(); + }); + } + + if (child.isDirectory) + nextChild(zipEntry.addDirectory(child.name)); + if (child.isFile) + child.file(function(file) { + var childZipEntry = zipEntry.addBlob(child.name, file); + childZipEntry.uncompressedSize = file.size; + nextChild(childZipEntry); + }, onerror); + } + + function processChild() { + var child = children[childIndex]; + if (child) + addChild(child); + else + onend(); + } + + processChild(); + }); + } + + if (fileEntry.isDirectory) + process(zipEntry, fileEntry, onend); + else + fileEntry.file(function(file) { + zipEntry.addBlob(fileEntry.name, file); + onend(); + }, onerror); + } + + function getFileEntry(fileEntry, entry, onend, onprogress, onerror, totalSize, checkCrc32) { + var currentIndex = 0; + + function process(fileEntry, entry, onend, onprogress, onerror, totalSize) { + var childIndex = 0; + + function addChild(child) { + function nextChild(childFileEntry) { + currentIndex += child.uncompressedSize || 0; + process(childFileEntry, child, function() { + childIndex++; + processChild(); + }, onprogress, onerror, totalSize); + } + + if (child.directory) + fileEntry.getDirectory(child.name, { + create : true + }, nextChild, onerror); + else + fileEntry.getFile(child.name, { + create : true + }, function(file) { + child.getData(new zip.FileWriter(file, zip.getMimeType(child.name)), nextChild, function(index) { + if (onprogress) + onprogress(currentIndex + index, totalSize); + }, checkCrc32); + }, onerror); + } + + function processChild() { + var child = entry.children[childIndex]; + if (child) + addChild(child); + else + onend(); + } + + processChild(); + } + + if (entry.directory) + process(fileEntry, entry, onend, onprogress, onerror, totalSize); + else + entry.getData(new zip.FileWriter(fileEntry, zip.getMimeType(entry.name)), onend, onprogress, checkCrc32); + } + + function resetFS(fs) { + fs.entries = []; + fs.root = new ZipDirectoryEntry(fs); + } + + function bufferedCopy(reader, writer, onend, onprogress, onerror) { + var chunkIndex = 0; + + function stepCopy() { + var index = chunkIndex * CHUNK_SIZE; + if (onprogress) + onprogress(index, reader.size); + if (index < reader.size) + reader.readUint8Array(index, Math.min(CHUNK_SIZE, reader.size - index), function(array) { + writer.writeUint8Array(new Uint8Array(array), function() { + chunkIndex++; + stepCopy(); + }); + }, onerror); + else + writer.getData(onend); + } + + stepCopy(); + } + + function addChild(parent, name, params, directory) { + if (parent.directory) + return directory ? new ZipDirectoryEntry(parent.fs, name, params, parent) : new ZipFileEntry(parent.fs, name, params, parent); + else + throw "Parent entry is not a directory."; + } + + function ZipEntry() { + } + + ZipEntry.prototype = { + init : function(fs, name, params, parent) { + var that = this; + if (fs.root && parent && parent.getChildByName(name)) + throw "Entry filename already exists."; + if (!params) + params = {}; + that.fs = fs; + that.name = name; + that.id = fs.entries.length; + that.parent = parent; + that.children = []; + that.zipVersion = params.zipVersion || 0x14; + that.uncompressedSize = 0; + fs.entries.push(that); + if (parent) + that.parent.children.push(that); + }, + getFileEntry : function(fileEntry, onend, onprogress, onerror, checkCrc32) { + var that = this; + initReaders(that, function() { + getFileEntry(fileEntry, that, onend, onprogress, onerror, getTotalSize(that), checkCrc32); + }, onerror); + }, + moveTo : function(target) { + var that = this; + if (target.directory) { + if (!target.isDescendantOf(that)) { + if (that != target) { + if (target.getChildByName(that.name)) + throw "Entry filename already exists."; + detach(that); + that.parent = target; + target.children.push(that); + } + } else + throw "Entry is a ancestor of target entry."; + } else + throw "Target entry is not a directory."; + }, + getFullname : function() { + var that = this, fullname = that.name, entry = that.parent; + while (entry) { + fullname = (entry.name ? entry.name + "/" : "") + fullname; + entry = entry.parent; + } + return fullname; + }, + isDescendantOf : function(ancestor) { + var entry = this.parent; + while (entry && entry.id != ancestor.id) + entry = entry.parent; + return !!entry; + } + }; + ZipEntry.prototype.constructor = ZipEntry; + + var ZipFileEntryProto; + + function ZipFileEntry(fs, name, params, parent) { + var that = this; + ZipEntry.prototype.init.call(that, fs, name, params, parent); + that.Reader = params.Reader; + that.Writer = params.Writer; + that.data = params.data; + if (params.getData) { + that.getData = params.getData; + } + } + + ZipFileEntry.prototype = ZipFileEntryProto = new ZipEntry(); + ZipFileEntryProto.constructor = ZipFileEntry; + ZipFileEntryProto.getData = function(writer, onend, onprogress, onerror) { + var that = this; + if (!writer || (writer.constructor == that.Writer && that.data)) + onend(that.data); + else { + if (!that.reader) + that.reader = new that.Reader(that.data, onerror); + that.reader.init(function() { + writer.init(function() { + bufferedCopy(that.reader, writer, onend, onprogress, onerror); + }, onerror); + }); + } + }; + + ZipFileEntryProto.getText = function(onend, onprogress, checkCrc32, encoding) { + this.getData(new TextWriter(encoding), onend, onprogress, checkCrc32); + }; + ZipFileEntryProto.getBlob = function(mimeType, onend, onprogress, checkCrc32) { + this.getData(new BlobWriter(mimeType), onend, onprogress, checkCrc32); + }; + ZipFileEntryProto.getData64URI = function(mimeType, onend, onprogress, checkCrc32) { + this.getData(new Data64URIWriter(mimeType), onend, onprogress, checkCrc32); + }; + + var ZipDirectoryEntryProto; + + function ZipDirectoryEntry(fs, name, params, parent) { + var that = this; + ZipEntry.prototype.init.call(that, fs, name, params, parent); + that.directory = true; + } + + ZipDirectoryEntry.prototype = ZipDirectoryEntryProto = new ZipEntry(); + ZipDirectoryEntryProto.constructor = ZipDirectoryEntry; + ZipDirectoryEntryProto.addDirectory = function(name) { + return addChild(this, name, null, true); + }; + ZipDirectoryEntryProto.addText = function(name, text) { + return addChild(this, name, { + data : text, + Reader : TextReader, + Writer : TextWriter + }); + }; + ZipDirectoryEntryProto.addBlob = function(name, blob) { + return addChild(this, name, { + data : blob, + Reader : BlobReader, + Writer : BlobWriter + }); + }; + ZipDirectoryEntryProto.addData64URI = function(name, dataURI) { + return addChild(this, name, { + data : dataURI, + Reader : Data64URIReader, + Writer : Data64URIWriter + }); + }; + ZipDirectoryEntryProto.addFileEntry = function(fileEntry, onend, onerror) { + addFileEntry(this, fileEntry, onend, onerror); + }; + ZipDirectoryEntryProto.addData = function(name, params) { + return addChild(this, name, params); + }; + ZipDirectoryEntryProto.importBlob = function(blob, onend, onerror) { + this.importZip(new BlobReader(blob), onend, onerror); + }; + ZipDirectoryEntryProto.importText = function(text, onend, onerror) { + this.importZip(new TextReader(text), onend, onerror); + }; + ZipDirectoryEntryProto.importData64URI = function(dataURI, onend, onerror) { + this.importZip(new Data64URIReader(dataURI), onend, onerror); + }; + ZipDirectoryEntryProto.exportBlob = function(onend, onprogress, onerror) { + this.exportZip(new BlobWriter("application/zip"), onend, onprogress, onerror); + }; + ZipDirectoryEntryProto.exportText = function(onend, onprogress, onerror) { + this.exportZip(new TextWriter(), onend, onprogress, onerror); + }; + ZipDirectoryEntryProto.exportFileEntry = function(fileEntry, onend, onprogress, onerror) { + this.exportZip(new zip.FileWriter(fileEntry, "application/zip"), onend, onprogress, onerror); + }; + ZipDirectoryEntryProto.exportData64URI = function(onend, onprogress, onerror) { + this.exportZip(new Data64URIWriter("application/zip"), onend, onprogress, onerror); + }; + ZipDirectoryEntryProto.importZip = function(reader, onend, onerror) { + var that = this; + createReader(reader, function(zipReader) { + zipReader.getEntries(function(entries) { + entries.forEach(function(entry) { + var parent = that, path = entry.filename.split("/"), name = path.pop(); + path.forEach(function(pathPart) { + parent = parent.getChildByName(pathPart) || new ZipDirectoryEntry(that.fs, pathPart, null, parent); + }); + if (!entry.directory) + addChild(parent, name, { + data : entry, + Reader : ZipBlobReader + }); + }); + onend(); + }); + }, onerror); + }; + ZipDirectoryEntryProto.exportZip = function(writer, onend, onprogress, onerror) { + var that = this; + initReaders(that, function() { + createWriter(writer, function(zipWriter) { + exportZip(zipWriter, that, function() { + zipWriter.close(onend); + }, onprogress, getTotalSize(that)); + }, onerror); + }, onerror); + }; + ZipDirectoryEntryProto.getChildByName = function(name) { + var childIndex, child, that = this; + for (childIndex = 0; childIndex < that.children.length; childIndex++) { + child = that.children[childIndex]; + if (child.name == name) + return child; + } + }; + + function FS() { + resetFS(this); + } + FS.prototype = { + remove : function(entry) { + detach(entry); + this.entries[entry.id] = null; + }, + find : function(fullname) { + var index, path = fullname.split("/"), node = this.root; + for (index = 0; node && index < path.length; index++) + node = node.getChildByName(path[index]); + return node; + }, + getById : function(id) { + return this.entries[id]; + }, + importBlob : function(blob, onend, onerror) { + resetFS(this); + this.root.importBlob(blob, onend, onerror); + }, + importText : function(text, onend, onerror) { + resetFS(this); + this.root.importText(text, onend, onerror); + }, + importData64URI : function(dataURI, onend, onerror) { + resetFS(this); + this.root.importData64URI(dataURI, onend, onerror); + }, + exportBlob : function(onend, onprogress, onerror) { + this.root.exportBlob(onend, onprogress, onerror); + }, + exportText : function(onend, onprogress, onerror) { + this.root.exportText(onend, onprogress, onerror); + }, + exportFileEntry : function(fileEntry, onend, onprogress, onerror) { + this.root.exportFileEntry(fileEntry, onend, onprogress, onerror); + }, + exportData64URI : function(onend, onprogress, onerror) { + this.root.exportData64URI(onend, onprogress, onerror); + } + }; + + zip.fs = { + FS : FS, + ZipDirectoryEntry : ZipDirectoryEntry, + ZipFileEntry : ZipFileEntry + }; + + zip.getMimeType = function() { + return "application/octet-stream"; + }; + +})(); diff --git a/lib/zip.js b/lib/zip.js new file mode 100644 index 0000000..906c138 --- /dev/null +++ b/lib/zip.js @@ -0,0 +1,966 @@ +/* + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function(obj) { + "use strict"; + + var ERR_BAD_FORMAT = "File format is not recognized."; + var ERR_CRC = "CRC failed."; + var ERR_ENCRYPTED = "File contains encrypted entry."; + var ERR_ZIP64 = "File is using Zip64 (4gb+ file size)."; + var ERR_READ = "Error while reading zip file."; + var ERR_WRITE = "Error while writing zip file."; + var ERR_WRITE_DATA = "Error while writing file data."; + var ERR_READ_DATA = "Error while reading file data."; + var ERR_DUPLICATED_NAME = "File already exists."; + var CHUNK_SIZE = 512 * 1024; + + var TEXT_PLAIN = "text/plain"; + + var appendABViewSupported; + try { + appendABViewSupported = new Blob([ new DataView(new ArrayBuffer(0)) ]).size === 0; + } catch (e) { + } + + function Crc32() { + this.crc = -1; + } + Crc32.prototype.append = function append(data) { + var crc = this.crc | 0, table = this.table; + for (var offset = 0, len = data.length | 0; offset < len; offset++) + crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF]; + this.crc = crc; + }; + Crc32.prototype.get = function get() { + return ~this.crc; + }; + Crc32.prototype.table = (function() { + var i, j, t, table = []; // Uint32Array is actually slower than [] + for (i = 0; i < 256; i++) { + t = i; + for (j = 0; j < 8; j++) + if (t & 1) + t = (t >>> 1) ^ 0xEDB88320; + else + t = t >>> 1; + table[i] = t; + } + return table; + })(); + + // "no-op" codec + function NOOP() {} + NOOP.prototype.append = function append(bytes, onprogress) { + return bytes; + }; + NOOP.prototype.flush = function flush() {}; + + function blobSlice(blob, index, length) { + if (index < 0 || length < 0 || index + length > blob.size) + throw new RangeError('offset:' + index + ', length:' + length + ', size:' + blob.size); + if (blob.slice) + return blob.slice(index, index + length); + else if (blob.webkitSlice) + return blob.webkitSlice(index, index + length); + else if (blob.mozSlice) + return blob.mozSlice(index, index + length); + else if (blob.msSlice) + return blob.msSlice(index, index + length); + } + + function getDataHelper(byteLength, bytes) { + var dataBuffer, dataArray; + dataBuffer = new ArrayBuffer(byteLength); + dataArray = new Uint8Array(dataBuffer); + if (bytes) + dataArray.set(bytes, 0); + return { + buffer : dataBuffer, + array : dataArray, + view : new DataView(dataBuffer) + }; + } + + // Readers + function Reader() { + } + + function TextReader(text) { + var that = this, blobReader; + + function init(callback, onerror) { + var blob = new Blob([ text ], { + type : TEXT_PLAIN + }); + blobReader = new BlobReader(blob); + blobReader.init(function() { + that.size = blobReader.size; + callback(); + }, onerror); + } + + function readUint8Array(index, length, callback, onerror) { + blobReader.readUint8Array(index, length, callback, onerror); + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + TextReader.prototype = new Reader(); + TextReader.prototype.constructor = TextReader; + + function Data64URIReader(dataURI) { + var that = this, dataStart; + + function init(callback) { + var dataEnd = dataURI.length; + while (dataURI.charAt(dataEnd - 1) == "=") + dataEnd--; + dataStart = dataURI.indexOf(",") + 1; + that.size = Math.floor((dataEnd - dataStart) * 0.75); + callback(); + } + + function readUint8Array(index, length, callback) { + var i, data = getDataHelper(length); + var start = Math.floor(index / 3) * 4; + var end = Math.ceil((index + length) / 3) * 4; + var bytes = obj.atob(dataURI.substring(start + dataStart, end + dataStart)); + var delta = index - Math.floor(start / 4) * 3; + for (i = delta; i < delta + length; i++) + data.array[i - delta] = bytes.charCodeAt(i); + callback(data.array); + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + Data64URIReader.prototype = new Reader(); + Data64URIReader.prototype.constructor = Data64URIReader; + + function BlobReader(blob) { + var that = this; + + function init(callback) { + that.size = blob.size; + callback(); + } + + function readUint8Array(index, length, callback, onerror) { + var reader = new FileReader(); + reader.onload = function(e) { + callback(new Uint8Array(e.target.result)); + }; + reader.onerror = onerror; + try { + reader.readAsArrayBuffer(blobSlice(blob, index, length)); + } catch (e) { + onerror(e); + } + } + + that.size = 0; + that.init = init; + that.readUint8Array = readUint8Array; + } + BlobReader.prototype = new Reader(); + BlobReader.prototype.constructor = BlobReader; + + // Writers + + function Writer() { + } + Writer.prototype.getData = function(callback) { + callback(this.data); + }; + + function TextWriter(encoding) { + var that = this, blob; + + function init(callback) { + blob = new Blob([], { + type : TEXT_PLAIN + }); + callback(); + } + + function writeUint8Array(array, callback) { + blob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], { + type : TEXT_PLAIN + }); + callback(); + } + + function getData(callback, onerror) { + var reader = new FileReader(); + reader.onload = function(e) { + callback(e.target.result); + }; + reader.onerror = onerror; + reader.readAsText(blob, encoding); + } + + that.init = init; + that.writeUint8Array = writeUint8Array; + that.getData = getData; + } + TextWriter.prototype = new Writer(); + TextWriter.prototype.constructor = TextWriter; + + function Data64URIWriter(contentType) { + var that = this, data = "", pending = ""; + + function init(callback) { + data += "data:" + (contentType || "") + ";base64,"; + callback(); + } + + function writeUint8Array(array, callback) { + var i, delta = pending.length, dataString = pending; + pending = ""; + for (i = 0; i < (Math.floor((delta + array.length) / 3) * 3) - delta; i++) + dataString += String.fromCharCode(array[i]); + for (; i < array.length; i++) + pending += String.fromCharCode(array[i]); + if (dataString.length > 2) + data += obj.btoa(dataString); + else + pending = dataString; + callback(); + } + + function getData(callback) { + callback(data + obj.btoa(pending)); + } + + that.init = init; + that.writeUint8Array = writeUint8Array; + that.getData = getData; + } + Data64URIWriter.prototype = new Writer(); + Data64URIWriter.prototype.constructor = Data64URIWriter; + + function BlobWriter(contentType) { + var blob, that = this; + + function init(callback) { + blob = new Blob([], { + type : contentType + }); + callback(); + } + + function writeUint8Array(array, callback) { + blob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], { + type : contentType + }); + callback(); + } + + function getData(callback) { + callback(blob); + } + + that.init = init; + that.writeUint8Array = writeUint8Array; + that.getData = getData; + } + BlobWriter.prototype = new Writer(); + BlobWriter.prototype.constructor = BlobWriter; + + /** + * inflate/deflate core functions + * @param worker {Worker} web worker for the task. + * @param initialMessage {Object} initial message to be sent to the worker. should contain + * sn(serial number for distinguishing multiple tasks sent to the worker), and codecClass. + * This function may add more properties before sending. + */ + function launchWorkerProcess(worker, initialMessage, reader, writer, offset, size, onprogress, onend, onreaderror, onwriteerror) { + var chunkIndex = 0, index, outputSize, sn = initialMessage.sn, crc; + + function onflush() { + worker.removeEventListener('message', onmessage, false); + onend(outputSize, crc); + } + + function onmessage(event) { + var message = event.data, data = message.data, err = message.error; + if (err) { + err.toString = function () { return 'Error: ' + this.message; }; + onreaderror(err); + return; + } + if (message.sn !== sn) + return; + if (typeof message.codecTime === 'number') + worker.codecTime += message.codecTime; // should be before onflush() + if (typeof message.crcTime === 'number') + worker.crcTime += message.crcTime; + + switch (message.type) { + case 'append': + if (data) { + outputSize += data.length; + writer.writeUint8Array(data, function() { + step(); + }, onwriteerror); + } else + step(); + break; + case 'flush': + crc = message.crc; + if (data) { + outputSize += data.length; + writer.writeUint8Array(data, function() { + onflush(); + }, onwriteerror); + } else + onflush(); + break; + case 'progress': + if (onprogress) + onprogress(index + message.loaded, size); + break; + case 'importScripts': //no need to handle here + case 'newTask': + case 'echo': + break; + default: + console.warn('zip.js:launchWorkerProcess: unknown message: ', message); + } + } + + function step() { + index = chunkIndex * CHUNK_SIZE; + // use `<=` instead of `<`, because `size` may be 0. + if (index <= size) { + reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(array) { + if (onprogress) + onprogress(index, size); + var msg = index === 0 ? initialMessage : {sn : sn}; + msg.type = 'append'; + msg.data = array; + + // posting a message with transferables will fail on IE10 + try { + worker.postMessage(msg, [array.buffer]); + } catch(ex) { + worker.postMessage(msg); // retry without transferables + } + chunkIndex++; + }, onreaderror); + } else { + worker.postMessage({ + sn: sn, + type: 'flush' + }); + } + } + + outputSize = 0; + worker.addEventListener('message', onmessage, false); + step(); + } + + function launchProcess(process, reader, writer, offset, size, crcType, onprogress, onend, onreaderror, onwriteerror) { + var chunkIndex = 0, index, outputSize = 0, + crcInput = crcType === 'input', + crcOutput = crcType === 'output', + crc = new Crc32(); + function step() { + var outputData; + index = chunkIndex * CHUNK_SIZE; + if (index < size) + reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(inputData) { + var outputData; + try { + outputData = process.append(inputData, function(loaded) { + if (onprogress) + onprogress(index + loaded, size); + }); + } catch (e) { + onreaderror(e); + return; + } + if (outputData) { + outputSize += outputData.length; + writer.writeUint8Array(outputData, function() { + chunkIndex++; + setTimeout(step, 1); + }, onwriteerror); + if (crcOutput) + crc.append(outputData); + } else { + chunkIndex++; + setTimeout(step, 1); + } + if (crcInput) + crc.append(inputData); + if (onprogress) + onprogress(index, size); + }, onreaderror); + else { + try { + outputData = process.flush(); + } catch (e) { + onreaderror(e); + return; + } + if (outputData) { + if (crcOutput) + crc.append(outputData); + outputSize += outputData.length; + writer.writeUint8Array(outputData, function() { + onend(outputSize, crc.get()); + }, onwriteerror); + } else + onend(outputSize, crc.get()); + } + } + + step(); + } + + function inflate(worker, sn, reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) { + var crcType = computeCrc32 ? 'output' : 'none'; + if (obj.zip.useWebWorkers) { + var initialMessage = { + sn: sn, + codecClass: 'Inflater', + crcType: crcType, + }; + launchWorkerProcess(worker, initialMessage, reader, writer, offset, size, onprogress, onend, onreaderror, onwriteerror); + } else + launchProcess(new obj.zip.Inflater(), reader, writer, offset, size, crcType, onprogress, onend, onreaderror, onwriteerror); + } + + function deflate(worker, sn, reader, writer, level, onend, onprogress, onreaderror, onwriteerror) { + var crcType = 'input'; + if (obj.zip.useWebWorkers) { + var initialMessage = { + sn: sn, + options: {level: level}, + codecClass: 'Deflater', + crcType: crcType, + }; + launchWorkerProcess(worker, initialMessage, reader, writer, 0, reader.size, onprogress, onend, onreaderror, onwriteerror); + } else + launchProcess(new obj.zip.Deflater(), reader, writer, 0, reader.size, crcType, onprogress, onend, onreaderror, onwriteerror); + } + + function copy(worker, sn, reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) { + var crcType = 'input'; + if (obj.zip.useWebWorkers && computeCrc32) { + var initialMessage = { + sn: sn, + codecClass: 'NOOP', + crcType: crcType, + }; + launchWorkerProcess(worker, initialMessage, reader, writer, offset, size, onprogress, onend, onreaderror, onwriteerror); + } else + launchProcess(new NOOP(), reader, writer, offset, size, crcType, onprogress, onend, onreaderror, onwriteerror); + } + + // ZipReader + + function decodeASCII(str) { + var i, out = "", charCode, extendedASCII = [ '\u00C7', '\u00FC', '\u00E9', '\u00E2', '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB', + '\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5', '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2', '\u00FB', '\u00F9', + '\u00FF', '\u00D6', '\u00DC', '\u00F8', '\u00A3', '\u00D8', '\u00D7', '\u0192', '\u00E1', '\u00ED', '\u00F3', '\u00FA', '\u00F1', '\u00D1', + '\u00AA', '\u00BA', '\u00BF', '\u00AE', '\u00AC', '\u00BD', '\u00BC', '\u00A1', '\u00AB', '\u00BB', '_', '_', '_', '\u00A6', '\u00A6', + '\u00C1', '\u00C2', '\u00C0', '\u00A9', '\u00A6', '\u00A6', '+', '+', '\u00A2', '\u00A5', '+', '+', '-', '-', '+', '-', '+', '\u00E3', + '\u00C3', '+', '+', '-', '-', '\u00A6', '-', '+', '\u00A4', '\u00F0', '\u00D0', '\u00CA', '\u00CB', '\u00C8', 'i', '\u00CD', '\u00CE', + '\u00CF', '+', '+', '_', '_', '\u00A6', '\u00CC', '_', '\u00D3', '\u00DF', '\u00D4', '\u00D2', '\u00F5', '\u00D5', '\u00B5', '\u00FE', + '\u00DE', '\u00DA', '\u00DB', '\u00D9', '\u00FD', '\u00DD', '\u00AF', '\u00B4', '\u00AD', '\u00B1', '_', '\u00BE', '\u00B6', '\u00A7', + '\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u00B7', '\u00B9', '\u00B3', '\u00B2', '_', ' ' ]; + for (i = 0; i < str.length; i++) { + charCode = str.charCodeAt(i) & 0xFF; + if (charCode > 127) + out += extendedASCII[charCode - 128]; + else + out += String.fromCharCode(charCode); + } + return out; + } + + function decodeUTF8(string) { + return decodeURIComponent(escape(string)); + } + + function getString(bytes) { + var i, str = ""; + for (i = 0; i < bytes.length; i++) + str += String.fromCharCode(bytes[i]); + return str; + } + + function getDate(timeRaw) { + var date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & 0x0000ffff; + try { + return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, + (time & 0x001F) * 2, 0); + } catch (e) { + } + } + + function readCommonHeader(entry, data, index, centralDirectory, onerror) { + entry.version = data.view.getUint16(index, true); + entry.bitFlag = data.view.getUint16(index + 2, true); + entry.compressionMethod = data.view.getUint16(index + 4, true); + entry.lastModDateRaw = data.view.getUint32(index + 6, true); + entry.lastModDate = getDate(entry.lastModDateRaw); + if ((entry.bitFlag & 0x01) === 0x01) { + onerror(ERR_ENCRYPTED); + return; + } + if (centralDirectory || (entry.bitFlag & 0x0008) != 0x0008) { + entry.crc32 = data.view.getUint32(index + 10, true); + entry.compressedSize = data.view.getUint32(index + 14, true); + entry.uncompressedSize = data.view.getUint32(index + 18, true); + } + if (entry.compressedSize === 0xFFFFFFFF || entry.uncompressedSize === 0xFFFFFFFF) { + onerror(ERR_ZIP64); + return; + } + entry.filenameLength = data.view.getUint16(index + 22, true); + entry.extraFieldLength = data.view.getUint16(index + 24, true); + } + + function createZipReader(reader, callback, onerror) { + var inflateSN = 0; + + function Entry() { + } + + Entry.prototype.getData = function(writer, onend, onprogress, checkCrc32) { + var that = this; + + function testCrc32(crc32) { + var dataCrc32 = getDataHelper(4); + dataCrc32.view.setUint32(0, crc32); + return that.crc32 == dataCrc32.view.getUint32(0); + } + + function getWriterData(uncompressedSize, crc32) { + if (checkCrc32 && !testCrc32(crc32)) + onerror(ERR_CRC); + else + writer.getData(function(data) { + onend(data); + }); + } + + function onreaderror(err) { + onerror(err || ERR_READ_DATA); + } + + function onwriteerror(err) { + onerror(err || ERR_WRITE_DATA); + } + + reader.readUint8Array(that.offset, 30, function(bytes) { + var data = getDataHelper(bytes.length, bytes), dataOffset; + if (data.view.getUint32(0) != 0x504b0304) { + onerror(ERR_BAD_FORMAT); + return; + } + readCommonHeader(that, data, 4, false, onerror); + dataOffset = that.offset + 30 + that.filenameLength + that.extraFieldLength; + writer.init(function() { + if (that.compressionMethod === 0) + copy(that._worker, inflateSN++, reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror); + else + inflate(that._worker, inflateSN++, reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror); + }, onwriteerror); + }, onreaderror); + }; + + function seekEOCDR(eocdrCallback) { + // "End of central directory record" is the last part of a zip archive, and is at least 22 bytes long. + // Zip file comment is the last part of EOCDR and has max length of 64KB, + // so we only have to search the last 64K + 22 bytes of a archive for EOCDR signature (0x06054b50). + var EOCDR_MIN = 22; + if (reader.size < EOCDR_MIN) { + onerror(ERR_BAD_FORMAT); + return; + } + var ZIP_COMMENT_MAX = 256 * 256, EOCDR_MAX = EOCDR_MIN + ZIP_COMMENT_MAX; + + // In most cases, the EOCDR is EOCDR_MIN bytes long + doSeek(EOCDR_MIN, function() { + // If not found, try within EOCDR_MAX bytes + doSeek(Math.min(EOCDR_MAX, reader.size), function() { + onerror(ERR_BAD_FORMAT); + }); + }); + + // seek last length bytes of file for EOCDR + function doSeek(length, eocdrNotFoundCallback) { + reader.readUint8Array(reader.size - length, length, function(bytes) { + for (var i = bytes.length - EOCDR_MIN; i >= 0; i--) { + if (bytes[i] === 0x50 && bytes[i + 1] === 0x4b && bytes[i + 2] === 0x05 && bytes[i + 3] === 0x06) { + eocdrCallback(new DataView(bytes.buffer, i, EOCDR_MIN)); + return; + } + } + eocdrNotFoundCallback(); + }, function() { + onerror(ERR_READ); + }); + } + } + + var zipReader = { + getEntries : function(callback) { + var worker = this._worker; + // look for End of central directory record + seekEOCDR(function(dataView) { + var datalength, fileslength; + datalength = dataView.getUint32(16, true); + fileslength = dataView.getUint16(8, true); + if (datalength < 0 || datalength >= reader.size) { + onerror(ERR_BAD_FORMAT); + return; + } + reader.readUint8Array(datalength, reader.size - datalength, function(bytes) { + var i, index = 0, entries = [], entry, filename, comment, data = getDataHelper(bytes.length, bytes); + for (i = 0; i < fileslength; i++) { + entry = new Entry(); + entry._worker = worker; + if (data.view.getUint32(index) != 0x504b0102) { + onerror(ERR_BAD_FORMAT); + return; + } + readCommonHeader(entry, data, index + 6, true, onerror); + entry.commentLength = data.view.getUint16(index + 32, true); + entry.directory = ((data.view.getUint8(index + 38) & 0x10) == 0x10); + entry.offset = data.view.getUint32(index + 42, true); + filename = getString(data.array.subarray(index + 46, index + 46 + entry.filenameLength)); + entry.filename = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(filename) : decodeASCII(filename); + if (!entry.directory && entry.filename.charAt(entry.filename.length - 1) == "/") + entry.directory = true; + comment = getString(data.array.subarray(index + 46 + entry.filenameLength + entry.extraFieldLength, index + 46 + + entry.filenameLength + entry.extraFieldLength + entry.commentLength)); + entry.comment = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(comment) : decodeASCII(comment); + entries.push(entry); + index += 46 + entry.filenameLength + entry.extraFieldLength + entry.commentLength; + } + callback(entries); + }, function() { + onerror(ERR_READ); + }); + }); + }, + close : function(callback) { + if (this._worker) { + this._worker.terminate(); + this._worker = null; + } + if (callback) + callback(); + }, + _worker: null + }; + + if (!obj.zip.useWebWorkers) + callback(zipReader); + else { + createWorker('inflater', + function(worker) { + zipReader._worker = worker; + callback(zipReader); + }, + function(err) { + onerror(err); + } + ); + } + } + + // ZipWriter + + function encodeUTF8(string) { + return unescape(encodeURIComponent(string)); + } + + function getBytes(str) { + var i, array = []; + for (i = 0; i < str.length; i++) + array.push(str.charCodeAt(i)); + return array; + } + + function createZipWriter(writer, callback, onerror, dontDeflate) { + var files = {}, filenames = [], datalength = 0; + var deflateSN = 0; + + function onwriteerror(err) { + onerror(err || ERR_WRITE); + } + + function onreaderror(err) { + onerror(err || ERR_READ_DATA); + } + + var zipWriter = { + add : function(name, reader, onend, onprogress, options) { + var header, filename, date; + var worker = this._worker; + + function writeHeader(callback) { + var data; + date = options.lastModDate || new Date(); + header = getDataHelper(26); + files[name] = { + headerArray : header.array, + directory : options.directory, + filename : filename, + offset : datalength, + comment : getBytes(encodeUTF8(options.comment || "")) + }; + header.view.setUint32(0, 0x14000808); + if (options.version) + header.view.setUint8(0, options.version); + if (!dontDeflate && options.level !== 0 && !options.directory) + header.view.setUint16(4, 0x0800); + header.view.setUint16(6, (((date.getHours() << 6) | date.getMinutes()) << 5) | date.getSeconds() / 2, true); + header.view.setUint16(8, ((((date.getFullYear() - 1980) << 4) | (date.getMonth() + 1)) << 5) | date.getDate(), true); + header.view.setUint16(22, filename.length, true); + data = getDataHelper(30 + filename.length); + data.view.setUint32(0, 0x504b0304); + data.array.set(header.array, 4); + data.array.set(filename, 30); + datalength += data.array.length; + writer.writeUint8Array(data.array, callback, onwriteerror); + } + + function writeFooter(compressedLength, crc32) { + var footer = getDataHelper(16); + datalength += compressedLength || 0; + footer.view.setUint32(0, 0x504b0708); + if (typeof crc32 != "undefined") { + header.view.setUint32(10, crc32, true); + footer.view.setUint32(4, crc32, true); + } + if (reader) { + footer.view.setUint32(8, compressedLength, true); + header.view.setUint32(14, compressedLength, true); + footer.view.setUint32(12, reader.size, true); + header.view.setUint32(18, reader.size, true); + } + writer.writeUint8Array(footer.array, function() { + datalength += 16; + onend(); + }, onwriteerror); + } + + function writeFile() { + options = options || {}; + name = name.trim(); + if (options.directory && name.charAt(name.length - 1) != "/") + name += "/"; + if (files.hasOwnProperty(name)) { + onerror(ERR_DUPLICATED_NAME); + return; + } + filename = getBytes(encodeUTF8(name)); + filenames.push(name); + writeHeader(function() { + if (reader) + if (dontDeflate || options.level === 0) + copy(worker, deflateSN++, reader, writer, 0, reader.size, true, writeFooter, onprogress, onreaderror, onwriteerror); + else + deflate(worker, deflateSN++, reader, writer, options.level, writeFooter, onprogress, onreaderror, onwriteerror); + else + writeFooter(); + }, onwriteerror); + } + + if (reader) + reader.init(writeFile, onreaderror); + else + writeFile(); + }, + close : function(callback) { + if (this._worker) { + this._worker.terminate(); + this._worker = null; + } + + var data, length = 0, index = 0, indexFilename, file; + for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { + file = files[filenames[indexFilename]]; + length += 46 + file.filename.length + file.comment.length; + } + data = getDataHelper(length + 22); + for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { + file = files[filenames[indexFilename]]; + data.view.setUint32(index, 0x504b0102); + data.view.setUint16(index + 4, 0x1400); + data.array.set(file.headerArray, index + 6); + data.view.setUint16(index + 32, file.comment.length, true); + if (file.directory) + data.view.setUint8(index + 38, 0x10); + data.view.setUint32(index + 42, file.offset, true); + data.array.set(file.filename, index + 46); + data.array.set(file.comment, index + 46 + file.filename.length); + index += 46 + file.filename.length + file.comment.length; + } + data.view.setUint32(index, 0x504b0506); + data.view.setUint16(index + 8, filenames.length, true); + data.view.setUint16(index + 10, filenames.length, true); + data.view.setUint32(index + 12, length, true); + data.view.setUint32(index + 16, datalength, true); + writer.writeUint8Array(data.array, function() { + writer.getData(callback); + }, onwriteerror); + }, + _worker: null + }; + + if (!obj.zip.useWebWorkers) + callback(zipWriter); + else { + createWorker('deflater', + function(worker) { + zipWriter._worker = worker; + callback(zipWriter); + }, + function(err) { + onerror(err); + } + ); + } + } + + function resolveURLs(urls) { + var a = document.createElement('a'); + return urls.map(function(url) { + a.href = url; + return a.href; + }); + } + + var DEFAULT_WORKER_SCRIPTS = { + deflater: ['z-worker.js', 'deflate.js'], + inflater: ['z-worker.js', 'inflate.js'] + }; + function createWorker(type, callback, onerror) { + if (obj.zip.workerScripts !== null && obj.zip.workerScriptsPath !== null) { + onerror(new Error('Either zip.workerScripts or zip.workerScriptsPath may be set, not both.')); + return; + } + var scripts; + if (obj.zip.workerScripts) { + scripts = obj.zip.workerScripts[type]; + if (!Array.isArray(scripts)) { + onerror(new Error('zip.workerScripts.' + type + ' is not an array!')); + return; + } + scripts = resolveURLs(scripts); + } else { + scripts = DEFAULT_WORKER_SCRIPTS[type].slice(0); + scripts[0] = (obj.zip.workerScriptsPath || '') + scripts[0]; + } + var worker = new Worker(scripts[0]); + // record total consumed time by inflater/deflater/crc32 in this worker + worker.codecTime = worker.crcTime = 0; + worker.postMessage({ type: 'importScripts', scripts: scripts.slice(1) }); + worker.addEventListener('message', onmessage); + function onmessage(ev) { + var msg = ev.data; + if (msg.error) { + worker.terminate(); // should before onerror(), because onerror() may throw. + onerror(msg.error); + return; + } + if (msg.type === 'importScripts') { + worker.removeEventListener('message', onmessage); + worker.removeEventListener('error', errorHandler); + callback(worker); + } + } + // catch entry script loading error and other unhandled errors + worker.addEventListener('error', errorHandler); + function errorHandler(err) { + worker.terminate(); + onerror(err); + } + } + + function onerror_default(error) { + console.error(error); + } + obj.zip = { + Reader : Reader, + Writer : Writer, + BlobReader : BlobReader, + Data64URIReader : Data64URIReader, + TextReader : TextReader, + BlobWriter : BlobWriter, + Data64URIWriter : Data64URIWriter, + TextWriter : TextWriter, + createReader : function(reader, callback, onerror) { + onerror = onerror || onerror_default; + + reader.init(function() { + createZipReader(reader, callback, onerror); + }, onerror); + }, + createWriter : function(writer, callback, onerror, dontDeflate) { + onerror = onerror || onerror_default; + dontDeflate = !!dontDeflate; + + writer.init(function() { + createZipWriter(writer, callback, onerror, dontDeflate); + }, onerror); + }, + useWebWorkers : true, + /** + * Directory containing the default worker scripts (z-worker.js, deflate.js, and inflate.js), relative to current base url. + * E.g.: zip.workerScripts = './'; + */ + workerScriptsPath : null, + /** + * Advanced option to control which scripts are loaded in the Web worker. If this option is specified, then workerScriptsPath must not be set. + * workerScripts.deflater/workerScripts.inflater should be arrays of urls to scripts for deflater/inflater, respectively. + * Scripts in the array are executed in order, and the first one should be z-worker.js, which is used to start the worker. + * All urls are relative to current base url. + * E.g.: + * zip.workerScripts = { + * deflater: ['z-worker.js', 'deflate.js'], + * inflater: ['z-worker.js', 'inflate.js'] + * }; + */ + workerScripts : null, + }; + +})(this); diff --git a/list_releases.php b/list_releases.php new file mode 100644 index 0000000..92540cd --- /dev/null +++ b/list_releases.php @@ -0,0 +1,226 @@ +'); + + $CbpsCsv = explode("\n",file_get_contents("cbpsdb.csv")); + + foreach($CbpsCsv as &$Entry){ + if(strcmp($Entry,"") == 0) + { + continue; + } + + $csv = explode(",",$Entry); + if(!$edit_mode) + { + if(strcmp($csv[VISIBLE],"False") == 0) + { + continue; + } + if($plugins == false) + { + if(strcmp($csv[TYPE],"PLUGIN") == 0) + { + continue; + } + } + else + { + if(strcmp($csv[TYPE],"VPK") == 0) + { + continue; + } + } + } + if(strcmp($csv[ID],"id") == 0) + { + continue; + } + + $DEFAULT_ICON0 = $csv[DOWNLOAD_ICON0]; + if(strcmp($csv[DOWNLOAD_ICON0],"None") == 0) + { + if($plugins == false) + $DEFAULT_ICON0 = "/img/app_default.png"; + else + $DEFAULT_ICON0 = "/img/plugin_default.png"; + } + + $APP_TITLE = $csv[TITLE]; + + $hasExtraData = strcmp($csv[DEPENDS],"None") !== 0; + + if(!isset($_GET["id"])) + { + echo(' + + + '); + } + else + { + if(strcmp($csv[ID],$_GET['id']) !== 0) + { + continue; + } + + echo('
+ +
+
+ +
+
+ +
+ + +
+ +
+ '.htmlspecialchars($APP_TITLE,ENT_QUOTES).' ('.$csv[ID].')'.'
+
+ '.htmlspecialchars($csv[CREDITS],ENT_QUOTES).''); + + echo(''); + echo('
'); + } + $count += 1; + } +$time_taken = (microtime(true) - $old_timestamp); +echo('

Indexed '.$count." entries in ".$time_taken." seconds
"); +echo(""); +echo(""); +echo(""); +} +?> \ No newline at end of file diff --git a/plugins.php b/plugins.php new file mode 100644 index 0000000..831544f --- /dev/null +++ b/plugins.php @@ -0,0 +1,8 @@ + + diff --git a/proxy.php b/proxy.php new file mode 100644 index 0000000..992c4b0 --- /dev/null +++ b/proxy.php @@ -0,0 +1,87 @@ += 400) { + http_response_code($http_code); + echo "Error fetching resource. HTTP Code: $http_code"; + exit; +} + +// All good, send the response +echo $body; +?> \ No newline at end of file diff --git a/referer-proxy.php b/referer-proxy.php new file mode 100644 index 0000000..1d471a0 --- /dev/null +++ b/referer-proxy.php @@ -0,0 +1,114 @@ + [ + "method" => "GET", + "proxy" => "tcp://".$proxy, + 'follow_location' => 0, + "request_fulluri" => true, + "header" => "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: en-GB,en-US;q=0.9,en;q=0.8\r\n". + "Sec-Fetch-Dest: document\r\n". + "Sec-Fetch-Mode: navigate\r\n". + "Sec-Fetch-Site: same-origin\r\n". + "Sec-Fetch-User: ?1\r\n". + "Upgrade-Insecure-Requests: 1\r\n". + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\r\n". + "Referer: https://rinnegatamante.eu/vitadb/\r\n" + ] + ]; + + $context = stream_context_create($opts); + file_get_contents($url, false, $context); + $filename = "app.vpk"; + $redirect = ""; + + if(strcmp($http_response_header[0],"HTTP/1.1 200 OK") !== 0 && strcmp($http_response_header[0],"HTTP/1.1 302 Found") !== 0) + { + $CbpsCsv = explode("\n",file_get_contents("cbpsdb.csv")); + foreach($CbpsCsv as &$Entry){ + $csv = explode(",",$Entry); + + if(strcmp($csv[DOWNLOAD_URL],$url) == 0) + { + $arr = get_list($csv[DOWNLOAD_URL_MIRROR]); + foreach($arr as &$itm) + { + if(isAvalible($itm) == true) + { + echo("Redirecting."); + header("Referrer-Policy: no-referrer"); /*Bypass rin firewall*/ + header("Location: ".$itm); + } + } + } + } + } + + + for($i = 1; $i < sizeof($http_response_header); $i++) + { + $head = $http_response_header[$i]; + + if(strcmp(substr(strtolower($head), 0, 9),"location:") == 0) + { + $redirect = substr($head, 10); + $filename = basename($redirect); + } + } + + + $opts = [ + "http" => [ + "method" => "GET", + "proxy" => "tcp://".$proxy, + 'follow_location' => 0, + "request_fulluri" => true, + "header" => "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: en-GB,en-US;q=0.9,en;q=0.8\r\n". + "Sec-Fetch-Dest: document\r\n". + "Sec-Fetch-Mode: navigate\r\n". + "Sec-Fetch-Site: same-origin\r\n". + "Sec-Fetch-User: ?1\r\n". + "Upgrade-Insecure-Requests: 1\r\n". + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\r\n". + "Referer: https://vitadb.rinnegatamante.it/\r\n" + ] + ]; + + $context = stream_context_create($opts); + $file = file_get_contents($redirect, false, $context); + + for($i = 1; $i < sizeof($http_response_header); $i++) + { + $head = $http_response_header[$i]; + + if(strcmp(substr(strtolower($head), 0, 15),"content-length:") == 0) + { + header($head); + } + } + + header('Content-Type: application/octet-stream'); + header('Cache-Control must-revalidate'); + header('Content-Disposition: attachment; filename="'.$filename.'"'); + header('X-Rinnegatamante: You Mad Bro?'); + + file_put_contents("php://output",$file); + } + +} +?> \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..e6f743e --- /dev/null +++ b/robots.txt @@ -0,0 +1,6 @@ +User-agent: * +Allow: / +Disallow: /referer-proxy.php +Disallow: /referer-proxy.php?url=* +Disallow: /create_pr.py +Sitemap: https://cbps-db.gt.tc/sitemap.xml diff --git a/script-pako.js b/script-pako.js new file mode 100644 index 0000000..8585795 --- /dev/null +++ b/script-pako.js @@ -0,0 +1,6818 @@ +/* pako 1.0.10 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i Array + * + * Chunks of output data, if [[Deflate#onData]] not overridden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; + // Convert data if needed + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} + +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + + if (this.ended) { return false; } + + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + + // Finalize on the last chunk. + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ +function deflate(input, options) { + var deflator = new Deflate(options); + + deflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (deflator.err) { throw deflator.msg || msg[deflator.err]; } + + return deflator.result; +} + + +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + + +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(require,module,exports){ +'use strict'; + + +var zlib_inflate = require('./zlib/inflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var c = require('./zlib/constants'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); +var GZheader = require('./zlib/gzheader'); + +var toString = Object.prototype.toString; + +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overridden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { opt.windowBits = -15; } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ((opt.windowBits >= 0) && (opt.windowBits < 16) && + !(options && options.windowBits)) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ((opt.windowBits > 15) && (opt.windowBits < 48)) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader(this.strm, this.header); + + // Setup dictionary + if (opt.dictionary) { + // Convert data if needed + if (typeof opt.dictionary === 'string') { + opt.dictionary = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + opt.dictionary = new Uint8Array(opt.dictionary); + } + if (opt.raw) { //In raw mode we need to set the dictionary early + status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + } + } +} + +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + status = zlib_inflate.inflateSetDictionary(this.strm, dictionary); + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { + + if (this.options.to === 'string') { + + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } + + this.onData(utf8str); + + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 aligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ +function inflate(input, options) { + var inflator = new Inflate(options); + + inflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (inflator.err) { throw inflator.msg || msg[inflator.err]; } + + return inflator.result; +} + + +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} + + +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; + +},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(require,module,exports){ +'use strict'; + + +var TYPED_OK = (typeof Uint8Array !== 'undefined') && + (typeof Uint16Array !== 'undefined') && + (typeof Int32Array !== 'undefined'); + +function _has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +exports.assign = function (obj /*from1, from2, from3, ...*/) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { continue; } + + if (typeof source !== 'object') { + throw new TypeError(source + 'must be non-object'); + } + + for (var p in source) { + if (_has(source, p)) { + obj[p] = source[p]; + } + } + } + + return obj; +}; + + +// reduce buffer size, avoiding mem copy +exports.shrinkBuf = function (buf, size) { + if (buf.length === size) { return buf; } + if (buf.subarray) { return buf.subarray(0, size); } + buf.length = size; + return buf; +}; + + +var fnTyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + // Fallback to ordinary array + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + var i, l, len, pos, chunk, result; + + // calculate data length + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + + // join chunks + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + + return result; + } +}; + +var fnUntyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + return [].concat.apply([], chunks); + } +}; + + +// Enable/Disable typed arrays use, for testing +// +exports.setTyped = function (on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } +}; + +exports.setTyped(TYPED_OK); + +},{}],4:[function(require,module,exports){ +// String encode/decode helpers +'use strict'; + + +var utils = require('./common'); + + +// Quick check if we can use fast array to bin string conversion +// +// - apply(Array) can fail on Android 2.2 +// - apply(Uint8Array) can fail on iOS 5.1 Safari +// +var STR_APPLY_OK = true; +var STR_APPLY_UIA_OK = true; + +try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } +try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } + + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new utils.Buf8(256); +for (var q = 0; q < 256; q++) { + _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // On Chrome, the arguments in a function call that are allowed is `65534`. + // If the length of the buffer is smaller than that, we can use this optimization, + // otherwise we will take a slower path. + if (len < 65534) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means buffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{"./common":3}],5:[function(require,module,exports){ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It isn't worth it to make additional optimizations as in original. +// Small size is preferable. + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; + +},{}],6:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type +}; + +},{}],7:[function(require,module,exports){ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],8:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +//var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +//var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +//var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; +var Z_DEFAULT_COMPRESSION = -1; + + +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + + +/* The deflate compression method */ +var Z_DEFLATED = 8; + +/*============================================================================*/ + + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_MEM_LEVEL = 8; + + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ +var LITERALS = 256; +/* number of literal bytes 0..255 */ +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ +var D_CODES = 30; +/* number of distance codes */ +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ +var BS_BLOCK_DONE = 2; /* block flush performed */ +var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ +var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} + + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +function putShortMSB(s, b) { +// put_byte(s, (Byte)(b >> 8)); +// put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} + + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + + strm.avail_in -= len; + + // zmemcpy(buf, strm->next_in, len); + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} + + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; /* max hash chain length */ + var scan = s.strstart; /* current string */ + var match; /* matched string */ + var len; /* length of current match */ + var best_len = s.prev_length; /* best match length so far */ + var nice_match = s.nice_match; /* stop if match long enough */ + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + + // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2; + match++; + // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + + // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} + + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + + //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; + + // JS ints have 32 bit, block below not needed + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + s.block_start -= _w_size; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; +//#if MIN_MATCH != 3 +// Call update_hash() MIN_MATCH-3 more times +//#endif + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ +// if (s.high_water < s.window_size) { +// var curr = s.strstart + s.lookahead; +// var init = 0; +// +// if (s.high_water < curr) { +// /* Previous high water mark below current data -- zero WIN_INIT +// * bytes or up to end of window, whichever is less. +// */ +// init = s.window_size - curr; +// if (init > WIN_INIT) +// init = WIN_INIT; +// zmemzero(s->window + curr, (unsigned)init); +// s->high_water = curr + init; +// } +// else if (s->high_water < (ulg)curr + WIN_INIT) { +// /* High water mark at or above current data, but below current data +// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +// * to end of window, whichever is less. +// */ +// init = (ulg)curr + WIN_INIT - s->high_water; +// if (init > s->window_size - s->high_water) +// init = s->window_size - s->high_water; +// zmemzero(s->window + s->high_water, (unsigned)init); +// s->high_water += init; +// } +// } +// +// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +// "not enough room for search"); +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); +// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || +// s.block_start >= s.w_size)) { +// throw new Error("slide too late"); +// } + + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + } + //Assert(s->block_start >= 0L, "block gone"); +// if (s.block_start < 0) throw new Error("block gone"); + + s.strstart += s.lookahead; + s.lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_NEED_MORE; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +function deflate_fast(s, flush) { + var hash_head; /* head of the hash chain */ + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; /* flush the current block */ + } + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { + s.match_length--; /* string at strstart already in table */ + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + +//#if MIN_MATCH != 3 +// Call UPDATE_HASH() MIN_MATCH-3 more times +//#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +function deflate_slow(s, flush) { + var hash_head; /* head of hash chain */ + var bflush; /* set if current block must be flushed */ + + var max_insert; + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + */ + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + //Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{"../utils/common":3,"./adler32":5,"./crc32":7,"./messages":13,"./trees":14}],9:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; +} + +module.exports = GZheader; + +},{}],10:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +// See state defs from inflate.js +var BAD = 30; /* got a data error -- remain here until reset */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ +module.exports = function inflate_fast(strm, start) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ +//#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ +//#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); +//#ifdef INFLATE_STRICT + dmax = state.dmax; +//#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: + for (;;) { // Goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + if (op === 0) { /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff/*here.val*/; + } + else if (op & 16) { /* length base */ + len = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & ((1 << op) - 1); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + + dodist: + for (;;) { // goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + + if (op & 16) { /* distance base */ + dist = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & ((1 << op) - 1); +//#ifdef INFLATE_STRICT + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } +//#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = _out - beg; /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } + +// (!) This block is disabled in zlib defaults, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// if (len <= op - whave) { +// do { +// output[_out++] = 0; +// } while (--len); +// continue top; +// } +// len -= op - whave; +// do { +// output[_out++] = 0; +// } while (--op > whave); +// if (op === 0) { +// from = _out - dist; +// do { +// output[_out++] = output[from++]; +// } while (--len); +// continue top; +// } +//#endif + } + from = 0; // window index + from_source = s_window; + if (wnext === 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } + else { + from = _out - dist; /* copy direct from output */ + do { /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } + else if ((op & 64) === 0) { /* 2nd level distance code */ + here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dodist; + } + else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } + else if ((op & 64) === 0) { /* 2nd level length code */ + here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dolen; + } + else if (op & 32) { /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } + else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); + strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); + state.hold = hold; + state.bits = bits; + return; +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var inflate_fast = require('./inffast'); +var inflate_table = require('./inftrees'); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ +var Z_DEFLATED = 8; + + +/* STATES ====================================================================*/ +/* ===========================================================================*/ + + +var HEAD = 1; /* i: waiting for magic header */ +var FLAGS = 2; /* i: waiting for method and flags (gzip) */ +var TIME = 3; /* i: waiting for modification time (gzip) */ +var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ +var EXLEN = 5; /* i: waiting for extra length (gzip) */ +var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ +var NAME = 7; /* i: waiting for end of file name (gzip) */ +var COMMENT = 8; /* i: waiting for end of comment (gzip) */ +var HCRC = 9; /* i: waiting for header crc (gzip) */ +var DICTID = 10; /* i: waiting for dictionary check value */ +var DICT = 11; /* waiting for inflateSetDictionary() call */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ +var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ +var STORED = 14; /* i: waiting for stored size (length and complement) */ +var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ +var COPY = 16; /* i/o: waiting for input or output to copy stored block */ +var TABLE = 17; /* i: waiting for dynamic block table lengths */ +var LENLENS = 18; /* i: waiting for code length code lengths */ +var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ +var LEN_ = 20; /* i: same as LEN below, but only first time in */ +var LEN = 21; /* i: waiting for length/lit/eob code */ +var LENEXT = 22; /* i: waiting for length extra bits */ +var DIST = 23; /* i: waiting for distance code */ +var DISTEXT = 24; /* i: waiting for distance extra bits */ +var MATCH = 25; /* o: waiting for output space to copy string */ +var LIT = 26; /* o: waiting for output space to write literal */ +var CHECK = 27; /* i: waiting for 32-bit check value */ +var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ +var DONE = 29; /* finished check, done -- remain here until reset */ +var BAD = 30; /* got a data error -- remain here until reset */ +var MEM = 31; /* got an inflate() memory error -- remain here until reset */ +var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + + + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_WBITS = MAX_WBITS; + + +function zswap32(q) { + return (((q >>> 24) & 0xff) + + ((q >>> 8) & 0xff00) + + ((q & 0xff00) << 8) + + ((q & 0xff) << 24)); +} + + +function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = null; /* starting table for length/literal codes */ + this.distcode = null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ + this.work = new utils.Buf16(288); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if (state.wrap) { /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null/*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + + /* get the state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { return Z_STREAM_ERROR; } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null/*Z_NULL*/; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null/*Z_NULL*/; + } + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} + + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +var virgin = true; + +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + + /* literal/length table */ + sym = 0; + while (sym < 144) { state.lens[sym++] = 8; } + while (sym < 256) { state.lens[sym++] = 9; } + while (sym < 280) { state.lens[sym++] = 7; } + while (sym < 288) { state.lens[sym++] = 8; } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + + /* distance table */ + sym = 0; + while (sym < 32) { state.lens[sym++] = 5; } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} + + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8(state.wsize); + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } + else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } + else { + state.wnext += dist; + if (state.wnext === state.wsize) { state.wnext = 0; } + if (state.whave < state.wsize) { state.whave += dist; } + } + } + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = /* permutation of code lengths */ + [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + + if (!strm || !strm.state || !strm.output || + (!strm.input && strm.avail_in !== 0)) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ + + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ + state.check = 0/*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = (hold & 0x0f)/*BITS(4)*/ + 8; + if (state.wbits === 0) { + state.wbits = len; + } + else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = ((hold >> 8) & 1); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.time = hold; + } + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + hbuf[2] = (hold >>> 16) & 0xff; + hbuf[3] = (hold >>> 24) & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.xflags = (hold & 0xff); + state.head.os = (hold >> 8); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + else if (state.head) { + state.head.extra = null/*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + if (copy > have) { copy = have; } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + // Use untyped array for more convenient processing later + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { break inf_leave; } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.name_max*/)) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.comm_max*/)) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if (state.head) { + state.head.hcrc = ((state.flags >> 9) & 1); + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32(hold); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } + /* falls through */ + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.last = (hold & 0x01)/*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ((hold & 0x03)/*BITS(2)*/) { + case 0: /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = LEN_; /* decode codes */ + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2: /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { copy = have; } + if (copy > left) { copy = left; } + if (copy === 0) { break inf_leave; } + //--- zmemcpy(put, next, copy); --- + utils.arraySet(output, input, next, copy, put); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// +//#ifndef PKZIP_BUG_WORKAROUND + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } +//#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[state.have++] = here_val; + } + else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03);//BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } + else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + (hold & 0x7f);//BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + + /* handle error breaks in while */ + if (state.mode === BAD) { break; } + + /* check for end-of-block code (better have one) */ + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast(strm, _out); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.lencode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.distcode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = (here_op) & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } +//#ifdef INFLATE_STRICT + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +//#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { break inf_leave; } + copy = _out - left; + if (state.offset > copy) { /* copy from window */ + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +// (!) This block is disabled in zlib defaults, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// Trace((stderr, "inflate.c too far\n")); +// copy -= state.whave; +// if (copy > state.length) { copy = state.length; } +// if (copy > left) { copy = left; } +// left -= copy; +// state.length -= copy; +// do { +// output[put++] = 0; +// } while (--copy); +// if (state.length === 0) { state.mode = LEN; } +// break; +//#endif + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } + else { + from = state.wnext - copy; + } + if (copy > state.length) { copy = state.length; } + from_source = state.window; + } + else { /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { copy = left; } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { state.mode = LEN; } + break; + case LIT: + if (left === 0) { break inf_leave; } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + // Use '|' instead of '+' to make sure that result is signed + hold |= input[next++] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); + + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && + (state.mode < CHECK || flush !== Z_FINISH))) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + + (state.mode === TYPE ? 128 : 0) + + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; +} + +function inflateEnd(strm) { + + if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + + /* check state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if (state.mode === DICT) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; + +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ + +},{"../utils/common":3,"./adler32":5,"./crc32":7,"./inffast":10,"./inftrees":12}],12:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +var lbase = [ /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +]; + +var lext = [ /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 +]; + +var dbase = [ /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0 +]; + +var dext = [ /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64 +]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) +{ + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; +// var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { break; } + } + if (root > max) { + root = max; + } + if (max === 0) { /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { break; } + } + if (root < min) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } /* over-subscribed */ + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if (type === CODES) { + base = extra = work; /* dummy value--not used */ + end = 19; + + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + + } else { /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } + else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } + else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << (len - drop); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; + } while (fill !== 0); + + /* backwards increment the len-bit code huff */ + incr = 1 << (len - 1); + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if (--count[len] === 0) { + if (len === max) { break; } + len = lens[lens_index + work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { break; } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; +}; + +},{"../utils/common":3}],13:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],14:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +/* eslint-disable space-unary-ops */ + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual ("white-listed") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + +// (!) This block is disabled in zlib defaults, +// don't enable it for binary compatibility + +//#ifdef TRUNCATE_BLOCK +// /* Try to guess if it is profitable to stop the current block here */ +// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { +// /* Compute an upper bound for the compressed length */ +// out_length = s.last_lit*8; +// in_length = s.strstart - s.block_start; +// +// for (dcode = 0; dcode < D_CODES; dcode++) { +// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); +// } +// out_length >>>= 3; +// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +// // s->last_lit, in_length, out_length, +// // 100L - out_length*100L/in_length)); +// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { +// return true; +// } +// } +//#endif + + return (s.last_lit === s.lit_bufsize - 1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{"../utils/common":3}],15:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; + +},{}],"/":[function(require,module,exports){ +// Top level file is just a mixin of submodules & constants +'use strict'; + +var assign = require('./lib/utils/common').assign; + +var deflate = require('./lib/deflate'); +var inflate = require('./lib/inflate'); +var constants = require('./lib/zlib/constants'); + +var pako = {}; + +assign(pako, deflate, inflate, constants); + +module.exports = pako; + +},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/") +}); diff --git a/script-self.js b/script-self.js new file mode 100644 index 0000000..4a22a05 --- /dev/null +++ b/script-self.js @@ -0,0 +1,235 @@ + +function readUint8(array) +{ + byt = array[ofset]; + ofset+=1; + return byt; +} + +function readUint64(array) { + var BigInt = window.BigInt, bigThirtyTwo = BigInt(32), bigZero = BigInt(0); + var left = BigInt(readUint32(array)>>>0); + var right = BigInt(readUint32(array)>>>0); + + var numb = (right<>>0); + var right = BigInt(readUint32At(array,offset+4)>>>0); + + var numb = (right<> 2] |= message[index] << SHIFT[i++ & 3]; + } + } else { + for (i = this.start; index < length && i < 64; ++index) { + code = message.charCodeAt(index); + if (code < 0x80) { + blocks[i >> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 0x800) { + blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else { + code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); + blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } + } + } + + this.lastByteIndex = i; + this.bytes += i - this.start; + if (i >= 64) { + this.block = blocks[16]; + this.start = i - 64; + this.hash(); + this.hashed = true; + } else { + this.start = i; + } + } + if (this.bytes > 4294967295) { + this.hBytes += this.bytes / 4294967296 << 0; + this.bytes = this.bytes % 4294967296; + } + return this; + }; + + Sha256.prototype.finalize = function () { + if (this.finalized) { + return; + } + this.finalized = true; + var blocks = this.blocks, i = this.lastByteIndex; + blocks[16] = this.block; + blocks[i >> 2] |= EXTRA[i & 3]; + this.block = blocks[16]; + if (i >= 56) { + if (!this.hashed) { + this.hash(); + } + blocks[0] = this.block; + blocks[16] = blocks[1] = blocks[2] = blocks[3] = + blocks[4] = blocks[5] = blocks[6] = blocks[7] = + blocks[8] = blocks[9] = blocks[10] = blocks[11] = + blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; + } + blocks[14] = this.hBytes << 3 | this.bytes >>> 29; + blocks[15] = this.bytes << 3; + this.hash(); + }; + + Sha256.prototype.hash = function () { + var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6, + h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc; + + for (j = 16; j < 64; ++j) { + // rightrotate + t1 = blocks[j - 15]; + s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3); + t1 = blocks[j - 2]; + s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10); + blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0; + } + + bc = b & c; + for (j = 0; j < 64; j += 4) { + if (this.first) { + if (this.is224) { + ab = 300032; + t1 = blocks[0] - 1413257819; + h = t1 - 150054599 << 0; + d = t1 + 24177077 << 0; + } else { + ab = 704751109; + t1 = blocks[0] - 210244248; + h = t1 - 1521486534 << 0; + d = t1 + 143694565 << 0; + } + this.first = false; + } else { + s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10)); + s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7)); + ab = a & b; + maj = ab ^ (a & c) ^ bc; + ch = (e & f) ^ (~e & g); + t1 = h + s1 + ch + K[j] + blocks[j]; + t2 = s0 + maj; + h = d + t1 << 0; + d = t1 + t2 << 0; + } + s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10)); + s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7)); + da = d & a; + maj = da ^ (d & b) ^ ab; + ch = (h & e) ^ (~h & f); + t1 = g + s1 + ch + K[j + 1] + blocks[j + 1]; + t2 = s0 + maj; + g = c + t1 << 0; + c = t1 + t2 << 0; + s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10)); + s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7)); + cd = c & d; + maj = cd ^ (c & a) ^ da; + ch = (g & h) ^ (~g & e); + t1 = f + s1 + ch + K[j + 2] + blocks[j + 2]; + t2 = s0 + maj; + f = b + t1 << 0; + b = t1 + t2 << 0; + s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10)); + s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7)); + bc = b & c; + maj = bc ^ (b & d) ^ cd; + ch = (f & g) ^ (~f & h); + t1 = e + s1 + ch + K[j + 3] + blocks[j + 3]; + t2 = s0 + maj; + e = a + t1 << 0; + a = t1 + t2 << 0; + } + + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + this.h4 = this.h4 + e << 0; + this.h5 = this.h5 + f << 0; + this.h6 = this.h6 + g << 0; + this.h7 = this.h7 + h << 0; + }; + + Sha256.prototype.hex = function () { + this.finalize(); + + var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, + h6 = this.h6, h7 = this.h7; + + var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] + + HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] + + HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] + + HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] + + HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] + + HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] + + HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] + + HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] + + HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] + + HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] + + HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] + + HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] + + HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] + + HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] + + HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] + + HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] + + HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] + + HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] + + HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] + + HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] + + HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] + + HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] + + HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] + + HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] + + HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] + + HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] + + HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] + + HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F]; + if (!this.is224) { + hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] + + HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] + + HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] + + HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F]; + } + return hex; + }; + + Sha256.prototype.toString = Sha256.prototype.hex; + + Sha256.prototype.digest = function () { + this.finalize(); + + var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, + h6 = this.h6, h7 = this.h7; + + var arr = [ + (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF, + (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF, + (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF, + (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF, + (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF, + (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF, + (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF + ]; + if (!this.is224) { + arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF); + } + return arr; + }; + + Sha256.prototype.array = Sha256.prototype.digest; + + Sha256.prototype.arrayBuffer = function () { + this.finalize(); + + var buffer = new ArrayBuffer(this.is224 ? 28 : 32); + var dataView = new DataView(buffer); + dataView.setUint32(0, this.h0); + dataView.setUint32(4, this.h1); + dataView.setUint32(8, this.h2); + dataView.setUint32(12, this.h3); + dataView.setUint32(16, this.h4); + dataView.setUint32(20, this.h5); + dataView.setUint32(24, this.h6); + if (!this.is224) { + dataView.setUint32(28, this.h7); + } + return buffer; + }; + + function HmacSha256(key, is224, sharedMemory) { + var i, type = typeof key; + if (type === 'string') { + var bytes = [], length = key.length, index = 0, code; + for (i = 0; i < length; ++i) { + code = key.charCodeAt(i); + if (code < 0x80) { + bytes[index++] = code; + } else if (code < 0x800) { + bytes[index++] = (0xc0 | (code >> 6)); + bytes[index++] = (0x80 | (code & 0x3f)); + } else if (code < 0xd800 || code >= 0xe000) { + bytes[index++] = (0xe0 | (code >> 12)); + bytes[index++] = (0x80 | ((code >> 6) & 0x3f)); + bytes[index++] = (0x80 | (code & 0x3f)); + } else { + code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff)); + bytes[index++] = (0xf0 | (code >> 18)); + bytes[index++] = (0x80 | ((code >> 12) & 0x3f)); + bytes[index++] = (0x80 | ((code >> 6) & 0x3f)); + bytes[index++] = (0x80 | (code & 0x3f)); + } + } + key = bytes; + } else { + if (type === 'object') { + if (key === null) { + throw new Error(ERROR); + } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) { + key = new Uint8Array(key); + } else if (!Array.isArray(key)) { + if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) { + throw new Error(ERROR); + } + } + } else { + throw new Error(ERROR); + } + } + + if (key.length > 64) { + key = (new Sha256(is224, true)).update(key).array(); + } + + var oKeyPad = [], iKeyPad = []; + for (i = 0; i < 64; ++i) { + var b = key[i] || 0; + oKeyPad[i] = 0x5c ^ b; + iKeyPad[i] = 0x36 ^ b; + } + + Sha256.call(this, is224, sharedMemory); + + this.update(iKeyPad); + this.oKeyPad = oKeyPad; + this.inner = true; + this.sharedMemory = sharedMemory; + } + HmacSha256.prototype = new Sha256(); + + HmacSha256.prototype.finalize = function () { + Sha256.prototype.finalize.call(this); + if (this.inner) { + this.inner = false; + var innerHash = this.array(); + Sha256.call(this, this.is224, this.sharedMemory); + this.update(this.oKeyPad); + this.update(innerHash); + Sha256.prototype.finalize.call(this); + } + }; + + var exports = createMethod(); + exports.sha256 = exports; + exports.sha224 = createMethod(true); + exports.sha256.hmac = createHmacMethod(); + exports.sha224.hmac = createHmacMethod(true); + + if (COMMON_JS) { + module.exports = exports; + } else { + root.sha256 = exports.sha256; + root.sha224 = exports.sha224; + if (AMD) { + define(function () { + return exports; + }); + } + } +})(); diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..00797bf --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,5781 @@ + + + + + + https://cbps-db.gt.tc/ + 2020-06-17T15:17:04+00:00 + monthly + 1.0000 + + + https://cbps-db.gt.tc/plugins.php + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/submit.php + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITAVOLUM + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LCDSAT000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ESVPK0009 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VPKMIRROR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VPRO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ROACTDATF + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY30016 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PS4LNKGUI + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ESPL00009 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PLYMARS01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSPEMUIN0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AUTOVPK00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=KOGRESMOU + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WEED42069 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BOMB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GMSV00013 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=JULIUS001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NOBOR0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=APWRFRESH + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AKRK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SHORTCUTS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARKFAST00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITABREAK + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BGFTP0010 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AUTOPLUG2 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TIMEMACHI + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MLCL00003_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BREWW0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VCID00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PEND00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BSTONE012 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZXGQ00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACTI00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VPRW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MYLEGNOOB + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SHDW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RCHT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BERM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SDLPAL001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TETR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OPENJAZZ1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=METHANE01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HYDCASLAB + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MIRROR000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ANGU00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VOYAGERQ3 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SPOP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MERITOUS1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HODEVITA1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PFBA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=XYZZ00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MGBA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RTCW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PKGJ00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LOLI00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CONNECT04 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OSPX00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SYSAPPS00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACCSWIT02 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FASTRESET + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SHOWMODE0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSTO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PKGE00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PKGE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FWREINSTA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NNHR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PARENTAL0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRDM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ANDRO0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=COVIDDATA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITAZORK1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=REPOHUB01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VDEC00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NOSLEEP00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TROPTOOLS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HIWORLD00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ONETROPHY + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGHFW100 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=1MENUVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MARISAHIL + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SUBPEWDS0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACCSWIT01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=UPDATBLOC + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HOLOCENE0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MEMEU4444 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LOVEU4444 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TLTL00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VECT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CEX2REX20 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=204800001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CBPSVCOOL + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACTIVATE0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TROPHAXSE + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AUTOPLUG0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RINNSIM44 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HYPRPITCH + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BBRM12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SCRATEBOX + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12345_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FNPT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKG4V2SW1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GMSV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12345_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGTLSE12 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VHBB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY30014 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSNE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BLKY00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RAND00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HELL66645 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MLCL00003_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MLCL00003_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=EZSV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CTMANAGER + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARKSMEDIA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VFRS12346 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MODALVOLM + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BLTG49694 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PCEXHUMED + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NREDNECK1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITASHELL + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CPUAFFCTR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=QUAK00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VGCF00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=UAE4ALL00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ENIGMA000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OPENBOR01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RAED67053 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ELEVENMPV + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRUITY001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SOUL45638 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BAKU88888 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CHROMONO2 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SWOR57517 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=091900001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GRZB00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=QUAK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=REGEDIT01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DOOM12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGB4TF1X + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MEIR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FLAPPY001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NABO12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DVDS42069 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DVLX00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY00010 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HERMES001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HXEN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MEIR00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=JELY00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FROV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABYD12945 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BBFF12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TPPG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CONSOLEID + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY00008 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGCBSMGR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BASILISK0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DRON57468 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGYAMT01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY00009 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MARK00095 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RETROVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GMSV00001_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITALIERO + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MSWEEPER1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSPEMUCFW + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SPED85632 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OSDB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FIGH12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NMDG54882 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AGWN00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD13370 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=POSTAL001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PLMN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NXEV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NUMPTY001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CUID18745 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PAUL00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OOPP54321 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BEBE12908 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ROCKS0000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TOSF87312 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=JUMPNBUMP + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZERO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGPKG2CH + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LUAMANGAS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PTVT45668 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RTFD12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12345_05 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZMBR94732 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRYM12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SMWAR0000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MLCL00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MODORU000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DEFD20485 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSVGC0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FHOMM0002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VGEE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKGIMCULK + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD00999 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LAPY00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CUBCCONUN + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BADA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=F2BGLVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RTRLVAREA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ADBT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WOLF00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PICRESTGM + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RBSD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12345_04 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CANNONBAL + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12346 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VSOI00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WSTLNDKNG + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TEAR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VSCU00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WIZAWIZRD + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=XASH00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SWITCHSDV + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PATH00027 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZELDATTT1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12347 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=THTR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITABUP00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PAUL00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SPPX12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=THMX00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=UNTITLEDS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITAFBA01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DSTROYVIT + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZELDAOLB1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZELDANSQ1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CHOC66666 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ADRBBLINS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SAVEMGR00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HBINJECT0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=THHM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABCD12345_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=QUAKE0002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BTMR12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACTIVAMLT + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITAPONG0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DOOM00666 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CHIP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VID000016 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABBAYEDMO + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARKSPCLNK + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CHAI00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZBND00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LBRN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VTGO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VID000162 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=A3A400001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SVEW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OPENTITUS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OPENTITUS_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CTJ300001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PCM300001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DBMA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VHWT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITABROT1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BIRD00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DRSS00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FLDT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ZXGQ00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=XYZZ00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SDLLOPAN0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CXZV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MLCL00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NOTE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DAKR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HANG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AMTR01693 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MFFT00016 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VOID00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VREC00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PKGI00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CFFVNPGAW + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITADL999 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MAIM00001_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PICKRV016 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITABOOKS + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARKSPSPHB + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=EUCLIOD01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CARDUNLOK + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ABLK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MIMP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VID000163 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HACKINFOR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=STEM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RPG100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARKSNPAD0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VTCD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=EPSPINSTA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=STFD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PICOLOOP1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SWKK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PCSF00092 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ADRINSTAL + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKOG10043 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITACAST0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OBJL00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CLEM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARKSFLASH + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VPKSOURCE + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACTPSVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BOUT00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ROBB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CLON00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSVIDENT0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PS4LINKM1 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VRST00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GAUT16912 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=STARKILL0 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=432100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=KANA99999 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SWKK00001_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SYOBONCAT + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=XYZZ00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=EDUKE0032 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CRASHDUMP + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITAMIN00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TXTE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARIEL0005 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARIEL0004 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MEMCRDSWP + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITATLBOX + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITAPONG0_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FTP200001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LIRC00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=KSVN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=KETM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SHTD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RBTR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WONR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=APPSRGMGR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITATETRI + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VAIH00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITATESTR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=LPPV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GRZB00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=OCTO00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ACTM00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WIDE87195 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DGSO12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=JUMP55345 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HIGURASHI + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RFLM32541 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSMFIXER2 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SOMO00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PRINCEPER + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VOPTIRYAN + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SOMO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VPAD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BTLSHPARN + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DOGGYTEST + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRAN00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRAN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SKOG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DEDALOX64 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=XXXX35570 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=REGEDIT01_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SUDO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=URI000001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=HOTA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CHICKENS2 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TQUE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MINESWEEP + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SPIDERCAR + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SHC100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FLPP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=KUNI00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRAN00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=BREW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=DSEMU0000 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=FRAN00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=RTST00010 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=NLTK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=TEMA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSP2PUP00 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=VITACALCI + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=MAIM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PSVIBE001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=CRFT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=WNTD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARIEL0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GBOT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ROWS00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=XERP00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=PRIMER001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=SCRENFLSH + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ARIEL0002 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=GS0100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=ERPG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/?id=AF1A00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.8000 + + + https://cbps-db.gt.tc/plugins.php?id=vmass + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=qaSpoof + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=noPsLock + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=iduSpoof + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=tmro + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=reSkype + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=ref00d + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=FuckPSSE + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=videoDebug + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=MakePsmGreatAgain + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogsEnhancer + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=custom_boot_splash + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=plugin + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=cidSpoof + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogStickDisable_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogStickDisable_04 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogStickDisable_05 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogStickDisable_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogStickDisable_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=AnalogStickDisable + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=netcheck_bypass + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=noavls + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=batteryPercent + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=MAFU-Input + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=MusicPremium + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=bootsound + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=EmergencyMount + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=CustomWarning + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=NoTrophyMsg + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=ScoreHax + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=DownloadEnabler + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=TropHax + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=NoLockScreen + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=VitaShellKernel + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=ds4vita + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=vFlux + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=pngshot + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=bmpshot + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=Quietshot + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=QuickVolume + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=Staybright + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=PSOneScrotKernel + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=QuickPower + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=JAVSceShell + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=repatch + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=LOLIcon_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=reScreeny + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=SysidentUser + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=LOLIcon_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=shellbat + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=StorageMgrKernel + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=noWhitelist + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=0syscall6 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=NoPowerLimits + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=VGi + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=oclockvita + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=LOLIcon_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=hcstudio + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=LOLIcon + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=ftpeverywhere + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=udcd_uvc + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=FreePSM + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=NoNpDrm_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=NoNpDrm + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/plugins.php?id=DolcePolce + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/add_entry.php + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITAVOLUM + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LCDSAT000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ESVPK0009 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VPKMIRROR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VPRO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ROACTDATF + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY30016 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PS4LNKGUI + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ESPL00009 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PLYMARS01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSPEMUIN0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AUTOVPK00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=KOGRESMOU + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WEED42069 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BOMB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GMSV00013 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=JULIUS001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NOBOR0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=APWRFRESH + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AKRK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SHORTCUTS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARKFAST00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITABREAK + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BGFTP0010 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AUTOPLUG2 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TIMEMACHI + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MLCL00003_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BREWW0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VCID00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PEND00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BSTONE012 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZXGQ00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACTI00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VPRW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MYLEGNOOB + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SHDW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RCHT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BERM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SDLPAL001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TETR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OPENJAZZ1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=METHANE01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HYDCASLAB + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MIRROR000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ANGU00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VOYAGERQ3 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SPOP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MERITOUS1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HODEVITA1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PFBA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=XYZZ00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MGBA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RTCW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PKGJ00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LOLI00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CONNECT04 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OSPX00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SYSAPPS00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACCSWIT02 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FASTRESET + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SHOWMODE0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSTO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PKGE00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PKGE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FWREINSTA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NNHR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PARENTAL0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRDM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ANDRO0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=COVIDDATA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITAZORK1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=REPOHUB01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VDEC00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NOSLEEP00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TROPTOOLS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HIWORLD00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ONETROPHY + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGHFW100 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=1MENUVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MARISAHIL + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SUBPEWDS0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACCSWIT01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=UPDATBLOC + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HOLOCENE0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MEMEU4444 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LOVEU4444 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TLTL00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VECT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CEX2REX20 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=204800001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CBPSVCOOL + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACTIVATE0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TROPHAXSE + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AUTOPLUG0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RINNSIM44 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HYPRPITCH + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BBRM12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SCRATEBOX + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12345_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FNPT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKG4V2SW1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GMSV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12345_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGTLSE12 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VHBB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY30014 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSNE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BLKY00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RAND00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HELL66645 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MLCL00003_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MLCL00003_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=EZSV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CTMANAGER + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARKSMEDIA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VFRS12346 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MODALVOLM + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BLTG49694 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PCEXHUMED + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NREDNECK1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITASHELL + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CPUAFFCTR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=QUAK00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VGCF00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=UAE4ALL00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ENIGMA000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OPENBOR01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RAED67053 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ELEVENMPV + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRUITY001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SOUL45638 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BAKU88888 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CHROMONO2 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SWOR57517 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=091900001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GRZB00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=QUAK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=REGEDIT01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DOOM12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGB4TF1X + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MEIR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FLAPPY001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NABO12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DVDS42069 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DVLX00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY00010 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HERMES001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HXEN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MEIR00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=JELY00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FROV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABYD12945 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BBFF12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TPPG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CONSOLEID + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY00008 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGCBSMGR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BASILISK0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DRON57468 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGYAMT01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY00009 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MARK00095 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RETROVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GMSV00001_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITALIERO + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MSWEEPER1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSPEMUCFW + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SPED85632 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OSDB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FIGH12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NMDG54882 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AGWN00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD13370 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=POSTAL001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PLMN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NXEV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NUMPTY001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CUID18745 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PAUL00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OOPP54321 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BEBE12908 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ROCKS0000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TOSF87312 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=JUMPNBUMP + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZERO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGPKG2CH + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LUAMANGAS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PTVT45668 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RTFD12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12345_05 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZMBR94732 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRYM12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SMWAR0000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MLCL00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MODORU000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DEFD20485 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSVGC0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FHOMM0002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VGEE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKGIMCULK + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD00999 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LAPY00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CUBCCONUN + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BADA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=F2BGLVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RTRLVAREA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ADBT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WOLF00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PICRESTGM + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RBSD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12345_04 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CANNONBAL + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12346 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VSOI00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WSTLNDKNG + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TEAR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VSCU00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WIZAWIZRD + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=XASH00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SWITCHSDV + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PATH00027 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZELDATTT1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12347 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=THTR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITABUP00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PAUL00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SPPX12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=THMX00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=UNTITLEDS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITAFBA01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DSTROYVIT + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZELDAOLB1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZELDANSQ1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CHOC66666 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ADRBBLINS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SAVEMGR00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HBINJECT0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=THHM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABCD12345_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=QUAKE0002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BTMR12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACTIVAMLT + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITAPONG0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DOOM00666 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CHIP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VID000016 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABBAYEDMO + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARKSPCLNK + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CHAI00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZBND00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LBRN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VTGO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VID000162 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=A3A400001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SVEW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OPENTITUS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OPENTITUS_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CTJ300001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PCM300001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DBMA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VHWT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITABROT1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BIRD00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DRSS00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FLDT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ZXGQ00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=XYZZ00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SDLLOPAN0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CXZV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MLCL00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NOTE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DAKR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HANG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AMTR01693 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MFFT00016 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VOID00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VREC00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PKGI00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CFFVNPGAW + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITADL999 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MAIM00001_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PICKRV016 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITABOOKS + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARKSPSPHB + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=EUCLIOD01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CARDUNLOK + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ABLK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MIMP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VID000163 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HACKINFOR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=STEM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RPG100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARKSNPAD0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VTCD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=EPSPINSTA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=STFD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PICOLOOP1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SWKK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PCSF00092 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ADRINSTAL + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKOG10043 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITACAST0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OBJL00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CLEM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARKSFLASH + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VPKSOURCE + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACTPSVITA + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BOUT00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ROBB00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CLON00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSVIDENT0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PS4LINKM1 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VRST00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GAUT16912 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=STARKILL0 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=432100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=KANA99999 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SWKK00001_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SYOBONCAT + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=XYZZ00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=EDUKE0032 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CRASHDUMP + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITAMIN00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TXTE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARIEL0005 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARIEL0004 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MEMCRDSWP + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITATLBOX + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITAPONG0_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FTP200001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LIRC00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=KSVN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=KETM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SHTD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RBTR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WONR00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=APPSRGMGR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITATETRI + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VAIH00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITATESTR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=LPPV00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GRZB00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=OCTO00000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ACTM00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WIDE87195 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DGSO12345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=JUMP55345 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HIGURASHI + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RFLM32541 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSMFIXER2 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SOMO00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PRINCEPER + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VOPTIRYAN + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SOMO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VPAD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BTLSHPARN + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DOGGYTEST + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRAN00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRAN00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SKOG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DEDALOX64 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=XXXX35570 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=REGEDIT01_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SUDO00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=URI000001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=HOTA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CHICKENS2 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TQUE00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MINESWEEP + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SPIDERCAR + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SHC100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FLPP00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=KUNI00002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRAN00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=BREW00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=DSEMU0000 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=FRAN00004 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=RTST00010 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=NLTK00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=TEMA00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSP2PUP00 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=VITACALCI + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=MAIM00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSVIBE001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=CRFT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=WNTD00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARIEL0001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GBOT00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ROWS00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=XERP00003 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=PRIMER001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=SCRENFLSH + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ARIEL0002 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=GS0100001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=ERPG00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=AF1A00001 + 2020-06-17T15:17:04+00:00 + monthly + 0.6400 + + + https://cbps-db.gt.tc/edit_entry.php?id=vmass + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=qaSpoof + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=noPsLock + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=iduSpoof + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=tmro + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=reSkype + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=ref00d + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=FuckPSSE + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=videoDebug + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=MakePsmGreatAgain + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogsEnhancer + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=custom_boot_splash + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=plugin + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=cidSpoof + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogStickDisable_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogStickDisable_04 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogStickDisable_05 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogStickDisable_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogStickDisable_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=AnalogStickDisable + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=netcheck_bypass + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=noavls + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=batteryPercent + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=MAFU-Input + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=MusicPremium + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=bootsound + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=EmergencyMount + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=CustomWarning + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=NoTrophyMsg + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=ScoreHax + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=DownloadEnabler + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=TropHax + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=NoLockScreen + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=VitaShellKernel + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=ds4vita + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=vFlux + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=pngshot + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=bmpshot + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=Quietshot + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=QuickVolume + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=Staybright + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=PSOneScrotKernel + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=QuickPower + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=JAVSceShell + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=repatch + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=LOLIcon_03 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=reScreeny + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=SysidentUser + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=LOLIcon_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=shellbat + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=StorageMgrKernel + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=noWhitelist + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=0syscall6 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=NoPowerLimits + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=VGi + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=oclockvita + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=LOLIcon_02 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=hcstudio + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=LOLIcon + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=ftpeverywhere + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=udcd_uvc + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=FreePSM + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=NoNpDrm_01 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=NoNpDrm + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=DolcePolce + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=TUBEVITA0 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=c305f3f5 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=28fb04cb + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=69ec5ff + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=23d4e6b0 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=33319e4b + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=f442191f + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=925a0e06 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=29672496 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=c7b7e3ec + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=a27883ff + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=77f8b1f7 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=bd3d35e + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=c47969cf + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=f22dba1 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=3e8db578 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=4ade44f3 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=2a3e5712 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=d36180de + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=3d7c217a + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=595c20fd + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=f784515d + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=ec02344b + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=ab05de1d + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=689a2463 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=85ff504d + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=a92fe139 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=21bcaa01 + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=7ac650de + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=f3e3104d + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + + https://cbps-db.gt.tc/edit_entry.php?id=e5b0d0fd + 2020-06-17T15:17:04+00:00 + monthly + 0.5120 + + diff --git a/style.css b/style.css new file mode 100644 index 0000000..17a58d6 --- /dev/null +++ b/style.css @@ -0,0 +1,507 @@ +/* +* header.php +*/ + +.sitename img { + vertical-align: top; +} + +.sitename{ + font-weight: bold; + float: left; +} + +.sitemap{ + position: relative; + float:right; + height: 100%; + margin: 0; + line-height: 120%; + font-weight: bold; +} + +.sitemap-entry{ + position:relative; + top: 0px; + color:#ffffff; + display: inline-block; + text-decoration:none; + padding: 0px 13px; + height: 100%; +} + + .sitemap-entry a{ + color: white; + text-decoration: none; + cursor: pointer; +} + +.sitemap-entry:hover{ + color: white; + background-image: linear-gradient(#30434a, #19262b); + text-decoration: none; + cursor: pointer; +} + + +.header { + font-size: 200%; + font-weight: bold; + color: white; + height: 50px; + width: 100%; + margin: 0px; + background-image: linear-gradient(#4e7280, #30434a); +} + +/* +* submit.php +*/ + + +.submit-tos{ + color: white; + font-size: 70%; + text-align: left; + float: left; +} + +.submit-box{ + margin:10px; + top:50px; + width: 800px; + border: 1px solid #8d9fba; + height: 430px; + background-image: linear-gradient(#566d8f, #2c384a); + display: inline-block; + text-align: center; + position: relative; +} + +.submit-form{ + display:none; +} + +.submit-action-icon{ + position: relative; + top:20px; + text-align:center; + width:100%; + height:145px; +} + +.submit-button{ + position:relative; + + color: white; + padding: 10px; + display: inline-block; + background-image: linear-gradient(#2f3d52, #141c29); + border: 1px solid #08101c; + box-sizing: border-box; +} + +.submit-inputs{ + position: relative; + top:20px; + text-align: center; + color: white; + font-weight: bold; +} + + +.submit-button:hover, .submit-button:disabled{ + background-image: linear-gradient(#1a2638, #0b1017); + cursor:pointer; +} + +.submit-textarea{ + position:relative; + top: 0px; + + vertical-align: top; + padding: 10px; + display: inline-block; + color: white; + border: 1px solid #08101c; + background-image: linear-gradient(#2f3d52, #141c29); + box-sizing: border-box; + resize: none; +} +.submit-captcha{ + text-align: center; +} +.submit-progress-back{ + position:relative; + display: inline-block; + height:30px; + width: 700px; + border: 1px solid #08101c; + background-image: linear-gradient(#2f3d52, #141c29); +} + +.submit-progress-front{ + position:relative; + top: 0px; + float: left; + display: inline-block; + height:100%; + width: 0px; + background-image: linear-gradient(#1a2638, #0b1017); +} +.g-recaptcha{ + display: inline-block; +} +.submit-dropdown{ + position:relative; + top: 0px; + + padding: 10px; + display: inline-block; + color: white; + border: 1px solid #08101c; + background-image: linear-gradient(#2f3d52, #141c29); + box-sizing: border-box; +} + +.submit-option{ + position:relative; + margin:40px; + margin-top:30px; + width:200px; + height:350px; + background-image: linear-gradient(#2f3d52, #141c29); + display: inline-block; + border: 1px solid #08101c; + vertical-align: top; +} + +.submit-status{ + position:relative; + top:70px; +} + +.submit-option:hover{ + background-image: linear-gradient(#1a2638, #0b1017); + cursor:pointer; +} + +.submit-skip{ + position:absolute; + bottom: 1px; + right: 1px; +} +/* +* index.php +*/ +.applist{ + text-align: center; +} + +.version-select{ + width:70px; + height:40px; + float:right; +} +.vita-app a:link, a:visited{ + color: white; + font-weight: bold; + text-decoration: none; +} + +.vita-src-download a:hover{ + color: white; + font-weight: bold; + text-decoration: underline; +} + +.vita-app-icon{ + position: absolute; + top:2px; + left:0px; + text-align:center; + width:100%; + height:145px; +} +.vita-app-info{ + position: absolute; + text-align: center; + width: 95%; + height: 70px; + top:150px; +} + +.vita-app-page{ + margin:20px; + margin-bottom:20px; + width: 85%; + border: 1px solid #8d9fba; + background-image: linear-gradient(#566d8f, #2c384a); + display: inline-block; + text-align: center; + position: relative; + overflow: hidden; +} + + +.vita-app-page-title{ + position:relative; + top:55px; + font-size:200%; +} +.vita-entry-info{ + position:relative; + margin-top:100px; + width: 100%; + text-align: center; +} +.vita-app-page-readme{ + margin-left: 0px; + margin: 10px; + text-align:left; + position:relative; + width:98%; + background-image: linear-gradient(#2f3d52, #141c29); + border: 1px solid #08101c; + vertical-align: top; + white-space: nowrap; + overflow: hidden; +} + + +.vita-app-page a:link, a:visited{ + color: white; + font-weight: bold; + text-decoration: none; +} +.vita-app-page-readme a:link, a:visited{ + color: white; + font-weight: bold; + text-decoration: underline; +} +.vita-app-page-icon{ + margin:10px; + float: left; +} + +.vita-app{ + padding: 5px; + width: 200px; + height: 250px; + margin: 10px; + background-image: linear-gradient(#566d8f, #2c384a); + color: white; + text-align: left; + display: inline-block; + border: 1px solid #8d9fba; + vertical-align: middle; + position: relative; + white-space: nowrap; + overflow: hidden; +} + +.vita-app:hover{ + background-image: linear-gradient(#2f3d52, #141c29); + cursor: pointer; +} + +.to-bottom{ + position: absolute; + right:4px; + bottom: 2px; +} + +.to-top{ + position: absolute; + right:4px; + top: 2px; +} + +.quick-download-area{ + text-align: center; +} + + +.download-button:hover{ + background-image: linear-gradient(#1a2638, #0b1017); +} + +.download-button{ + font-size: 80%; + border: 1px solid #08101c; + padding: 5px; + text-align:center; + background-image: linear-gradient(#2f3d52, #141c29); + margin:5px; +} +.vita-src-download{ + font-size: 55%; + width: 200px; + text-align: right; + overflow: hidden; +} + + +/* +* devtools.php +*/ + +.devtoollist{ + position: inherit; + margin-left: 15%; + margin-right: 15%; + text-align:center; +} + +.devtool{ + + padding:10px; + margin: 10px; + width: 325px; + border-radius: 1000px; + background-color: #00ffa9; + + display: inline-block; + vertical-align: middle; +} +.devtool:link, .devtool:visited, .devtool a{ + text-decoration: none !important; + color: black; + /*font-size: 150%;*/ + font-size: 25px; + font-weight: bold; + height:128px; + line-height: 120px; +} + +.devtool:hover{ + padding:10px; + margin: 10px; + width:325px; + height:128px; + border-radius: 1000px; + background-color: #005796; + cursor: pointer; + + display: inline-block; + vertical-align: middle; +} + +.devtool #textContent{ + text-align: center; +} + +.bubble-overlay{ + position: absolute; + bottom: -1; +} + +.bubble{ + border-radius: 100%; + background-color: green; +} + +/* +* Common +*/ + +html,body,header { + margin: 0; + padding: 0; + background-image: linear-gradient(#1e2226, #000000); + background-attachment: fixed; + background-repeat: no-repeat; + background-size: cover; + color:white; +} + + +option{ + color:black; +} + +a.image{ + text-decoration: none; +} + +.mid{ + vertical-align: middle; +} + +.left{ + float: left; +} + +.black:link, .black:visited, .black{ + color: black; + font-weight: bold; + text-decoration: none; +} +.black:hover{ + color: black; + font-weight: bold; + text-decoration: underline; +} + +.white:link, .white:visited, .white{ + color: white; + font-weight: bold; + text-decoration: none; + cursor: pointer; +} + +.white:hover{ + color: white; + font-weight: bold; + text-decoration: underline; + cursor: pointer; +} + +.nostyle:link, .nostyle:visited, .nostyle:hover, .nostyle, .nostyle a{ + color: white; + font-weight: bold; + text-decoration: none !important; + cursor: pointer; +} + +.button-enabled{ + width: 300px; + height: 50px; + margin: 10px; + background-color: #00d0ff; + text-align: center; + font-weight: bold; + line-height: 50px; + float: left; + color: white; + border-radius: 20px; +} + +.button-enabled:hover{ + width: 300px; + height: 50px; + margin: 10px; + background-color: #005796; + text-align: center; + font-weight: bold; + line-height: 50px; + float: left; + cursor: pointer; + color: white; + border-radius: 20px; +} + +.button-disabled{ + + width: 300px; + height: 50px; + margin: 10px; + background-color: #8f9db7; + text-align: center; + line-height: 50px; + float: left; + font-weight: bold; + color: #cfd2d3; + cursor: arrow; + border-radius: 20px; +} diff --git a/submit.php b/submit.php new file mode 100644 index 0000000..48c1025 --- /dev/null +++ b/submit.php @@ -0,0 +1,40 @@ + +
+ + + + \ No newline at end of file diff --git a/vita_config.txt b/vita_config.txt new file mode 100644 index 0000000..eb143e3 --- /dev/null +++ b/vita_config.txt @@ -0,0 +1,70 @@ +load os0:kd/clockgen.skprx +#load os0:kd/syscon.skprx +#load os0:kd/rtc.skprx +#load os0:kd/sm_comm.skprx +#load os0:kd/ss_mgr.skprx +load os0:kd/idstorage.skprx +load os0:kd/ctrl.skprx +load os0:kd/touch.skprx +load os0:kd/motion.skprx +load os0:kd/codec_cx.skprx +load os0:kd/codec.skprx +load os0:kd/audio.skprx +load os0:kd/hpremote.skprx +load os0:kd/power.skprx +load os0:kd/usbd.skprx +load os0:kd/udcd.skprx +load os0:kd/usbserv.skprx +load os0:kd/usbserial.skprx +load os0:kd/usbmtp.skprx +load os0:kd/mtpif.skprx +load os0:kd/post_ss_mgr.skprx +load os0:kd/update_mgr.skprx +load os0:kd/regmgr.skprx +load os0:kd/enum_wakeup.skprx +load os0:kd/vnz_wrapper.skprx +#load os0:kd/applier.skprx +- load os0:kd/mgkeymgr.skprx +load os0:kd/error.skprx +#load os0:kd/gcauthmgr.skprx +load os0:kd/npdrm.skprx +load os0:kd/ulobjmgr.skprx +load os0:kd/net_ps.skprx +load os0:kd/gps.skprx +load os0:kd/bbmc.skprx +load os0:kd/wlanbt.skprx +load os0:kd/usb_ether_smsc.skprx +load os0:kd/usb_ether_rtl.skprx +load os0:kd/bt.skprx +load os0:kd/usbstor.skprx +load os0:kd/usbstorvstor.skprx +load os0:kd/usbpspcm.skprx +- load os0:kd/magicgate.skprx +- load os0:kd/usbstormg.skprx +- load os0:kd/mgvideo.skprx +load os0:kd/avcodec.skprx +load os0:kd/audioin.skprx +load os0:kd/ngs.skprx +load os0:kd/hid.skprx +load os0:kd/gpu_es4.skprx +load os0:kd/gpuinit_es4.skprx +- load os0:kd/compat.skprx +load os0:kd/camera.skprx +load os0:kd/coredump.skprx +load os0:kd/crashdump.skprx +load os0:kd/av_config.skprx +load os0:kd/fios2.skprx +load os0:kd/pfsmgr.skprx +load os0:kd/appmgr.skprx +load os0:kd/sysmodule.skprx +load os0:kd/vshbridge.skprx +load os0:kd/marlin_hci.skprx +load os0:kd/krm.skprx +- load os0:kd/tty2uart.skprx +umount_bootfs +- spawnwait sd0:psp2diag.self +- spawnwait ux0:psp2diag.self +spawn os0:ue/safemode.self +spawn ud0:PSP2UPDATE/psp2swu.self +spawn ur0:PSP2UPDATE/psp2swu.self +- appspawn vs0:vsh/shell/shell.self SHELL_BUDGET_ID \ No newline at end of file