diff --git a/.package/4.3.5.txt b/.package/4.3.5.txt
deleted file mode 100644
index a6b4b7b..0000000
--- a/.package/4.3.5.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Chevereto 4.3.5 (2025-05-30)
-
-- Added favicon customization for Chevereto Lite edition
-- Added image watermark feature to Chevereto Lite edition
-- Added storage tools as baseline feature
-- Added support for floating point numbers in maximum upload size configuration
-- Fixed bug affecting URL upload functionality
-- Fixed bug in anywhere upload not populating album list
-- Fixed bug in Chevereto Lite missing Queue class
-- Fixed bug in installer when reading existing database
-- Fixed bug in root album list showing nested albums
-- Fixed bug with missing cache invalidation on album editing
\ No newline at end of file
diff --git a/.package/4.3.6.txt b/.package/4.3.6.txt
new file mode 100644
index 0000000..255c821
--- /dev/null
+++ b/.package/4.3.6.txt
@@ -0,0 +1,6 @@
+Chevereto 4.3.6 (2025-06-28)
+
+- Fixed bug affecting upgrades from 4.1.*
+- Resolved issue with release notes display
+- Updated README for the free edition
+- Corrected typos in custom_hooks sample files
diff --git a/README.md b/README.md
index d231609..e02f65c 100644
--- a/README.md
+++ b/README.md
@@ -102,7 +102,7 @@ The commercial license allows you to use Chevereto in commercial products and ap
### Compare licenses
-Chevereto Free edition is licensed under the AGPLv3 free software license, allowing use as long as you comply with its terms. If you modify and distribute the software, you are required to provide the source code to your end users. Please note that uUnder the AGPLv3, **making the software available over a network is considered distribution**, and you **must provide the source code** to users who interact with it remotely.
+Chevereto Free edition is licensed under the AGPLv3 free software license, allowing use as long as you comply with its terms. If you modify and distribute the software, you are required to provide the source code to your end users. Please note that under the AGPLv3, **making the software available over a network is considered distribution**, and you **must provide the source code** to users who interact with it remotely.
Both **Chevereto Lite** and **Chevereto Pro** are distributed under the proprietary **Chevereto License**, which is not subject to the restrictions imposed by the AGPLv3 license.
diff --git a/app/composer.lock b/app/composer.lock
index d8fb03c..c4f6214 100644
--- a/app/composer.lock
+++ b/app/composer.lock
@@ -168,16 +168,16 @@
},
{
"name": "amphp/parallel",
- "version": "v1.4.3",
+ "version": "v1.4.4",
"source": {
"type": "git",
"url": "https://github.com/amphp/parallel.git",
- "reference": "3aac213ba7858566fd83d38ccb85b91b2d652cb0"
+ "reference": "508ca221f2f47235327db5120f0a89d43435b69b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/parallel/zipball/3aac213ba7858566fd83d38ccb85b91b2d652cb0",
- "reference": "3aac213ba7858566fd83d38ccb85b91b2d652cb0",
+ "url": "https://api.github.com/repos/amphp/parallel/zipball/508ca221f2f47235327db5120f0a89d43435b69b",
+ "reference": "508ca221f2f47235327db5120f0a89d43435b69b",
"shasum": ""
},
"require": {
@@ -190,9 +190,9 @@
"php": ">=7.1"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
+ "amphp/php-cs-fixer-config": "^2",
"amphp/phpunit-util": "^1.1",
- "phpunit/phpunit": "^8 || ^7"
+ "phpunit/phpunit": "^9 || ^8 || ^7"
},
"type": "library",
"autoload": {
@@ -230,7 +230,7 @@
],
"support": {
"issues": "https://github.com/amphp/parallel/issues",
- "source": "https://github.com/amphp/parallel/tree/v1.4.3"
+ "source": "https://github.com/amphp/parallel/tree/v1.4.4"
},
"funding": [
{
@@ -238,7 +238,7 @@
"type": "github"
}
],
- "time": "2023-03-23T08:04:23+00:00"
+ "time": "2024-12-08T16:28:11+00:00"
},
{
"name": "amphp/parser",
@@ -495,16 +495,16 @@
},
{
"name": "brick/math",
- "version": "0.12.3",
+ "version": "0.13.1",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
+ "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
- "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
+ "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04",
+ "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04",
"shasum": ""
},
"require": {
@@ -543,7 +543,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.12.3"
+ "source": "https://github.com/brick/math/tree/0.13.1"
},
"funding": [
{
@@ -551,7 +551,7 @@
"type": "github"
}
],
- "time": "2025-02-28T13:11:00+00:00"
+ "time": "2025-03-29T13:50:30+00:00"
},
{
"name": "chevere/action",
@@ -653,6 +653,7 @@
"issues": "https://github.com/chevere/cache/issues",
"source": "https://github.com/chevere/cache/tree/0.5.0"
},
+ "abandoned": true,
"time": "2024-05-25T22:05:13+00:00"
},
{
@@ -870,16 +871,16 @@
},
{
"name": "chevere/parameter",
- "version": "1.1.1",
+ "version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/chevere/parameter.git",
- "reference": "4914eaac8f5bce3c01e317528d705db65bb17955"
+ "reference": "acb25103a989cc3648655c0700b69c3bb7bd3365"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chevere/parameter/zipball/4914eaac8f5bce3c01e317528d705db65bb17955",
- "reference": "4914eaac8f5bce3c01e317528d705db65bb17955",
+ "url": "https://api.github.com/repos/chevere/parameter/zipball/acb25103a989cc3648655c0700b69c3bb7bd3365",
+ "reference": "acb25103a989cc3648655c0700b69c3bb7bd3365",
"shasum": ""
},
"require": {
@@ -923,9 +924,9 @@
"homepage": "https://chevere.org",
"support": {
"issues": "https://github.com/chevere/parameter/issues",
- "source": "https://github.com/chevere/parameter/tree/1.1.1"
+ "source": "https://github.com/chevere/parameter/tree/1.1.2"
},
- "time": "2025-02-20T15:27:01+00:00"
+ "time": "2025-06-19T22:39:05+00:00"
},
{
"name": "chevere/regex",
@@ -3210,16 +3211,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "3.0.43",
+ "version": "3.0.45",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "709ec107af3cb2f385b9617be72af8cf62441d02"
+ "reference": "bd81b90d5963c6b9d87de50357585375223f4dd8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02",
- "reference": "709ec107af3cb2f385b9617be72af8cf62441d02",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/bd81b90d5963c6b9d87de50357585375223f4dd8",
+ "reference": "bd81b90d5963c6b9d87de50357585375223f4dd8",
"shasum": ""
},
"require": {
@@ -3300,7 +3301,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/3.0.43"
+ "source": "https://github.com/phpseclib/phpseclib/tree/3.0.45"
},
"funding": [
{
@@ -3316,7 +3317,7 @@
"type": "tidelift"
}
],
- "time": "2024-12-14T21:12:59+00:00"
+ "time": "2025-06-22T22:54:43+00:00"
},
{
"name": "pragmarx/google2fa",
@@ -4063,21 +4064,20 @@
},
{
"name": "ramsey/uuid",
- "version": "4.7.6",
+ "version": "4.9.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
+ "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
- "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0",
+ "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0",
"shasum": ""
},
"require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
- "ext-json": "*",
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
},
@@ -4085,26 +4085,23 @@
"rhumsaa/uuid": "self.version"
},
"require-dev": {
- "captainhook/captainhook": "^5.10",
+ "captainhook/captainhook": "^5.25",
"captainhook/plugin-composer": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "doctrine/annotations": "^1.8",
- "ergebnis/composer-normalize": "^2.15",
- "mockery/mockery": "^1.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "ergebnis/composer-normalize": "^2.47",
+ "mockery/mockery": "^1.6",
"paragonie/random-lib": "^2",
- "php-mock/php-mock": "^2.2",
- "php-mock/php-mock-mockery": "^1.3",
- "php-parallel-lint/php-parallel-lint": "^1.1",
- "phpbench/phpbench": "^1.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^8.5 || ^9",
- "ramsey/composer-repl": "^1.4",
- "slevomat/coding-standard": "^8.4",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.9"
+ "php-mock/php-mock": "^2.6",
+ "php-mock/php-mock-mockery": "^1.5",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpbench/phpbench": "^1.2.14",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "slevomat/coding-standard": "^8.18",
+ "squizlabs/php_codesniffer": "^3.13"
},
"suggest": {
"ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
@@ -4139,19 +4136,9 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.7.6"
+ "source": "https://github.com/ramsey/uuid/tree/4.9.0"
},
- "funding": [
- {
- "url": "https://github.com/ramsey",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
- "type": "tidelift"
- }
- ],
- "time": "2024-04-27T21:32:50+00:00"
+ "time": "2025-06-25T14:20:11+00:00"
},
{
"name": "react/cache",
@@ -5106,16 +5093,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.22",
+ "version": "v6.4.23",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3"
+ "reference": "9056771b8eca08d026cd3280deeec3cfd99c4d93"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3",
- "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3",
+ "url": "https://api.github.com/repos/symfony/console/zipball/9056771b8eca08d026cd3280deeec3cfd99c4d93",
+ "reference": "9056771b8eca08d026cd3280deeec3cfd99c4d93",
"shasum": ""
},
"require": {
@@ -5180,7 +5167,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.22"
+ "source": "https://github.com/symfony/console/tree/v6.4.23"
},
"funding": [
{
@@ -5196,7 +5183,7 @@
"type": "tidelift"
}
],
- "time": "2025-05-07T07:05:04+00:00"
+ "time": "2025-06-27T19:37:22+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -5972,16 +5959,16 @@
},
{
"name": "symfony/var-dumper",
- "version": "v6.4.21",
+ "version": "v6.4.23",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5"
+ "reference": "d55b1834cdbfcc31bc2cd7e095ba5ed9a88f6600"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5",
- "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d55b1834cdbfcc31bc2cd7e095ba5ed9a88f6600",
+ "reference": "d55b1834cdbfcc31bc2cd7e095ba5ed9a88f6600",
"shasum": ""
},
"require": {
@@ -6037,7 +6024,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.4.21"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.4.23"
},
"funding": [
{
@@ -6053,7 +6040,7 @@
"type": "tidelift"
}
],
- "time": "2025-04-09T07:34:50+00:00"
+ "time": "2025-06-27T15:05:27+00:00"
},
{
"name": "symfony/var-exporter",
@@ -6134,16 +6121,16 @@
},
{
"name": "symfony/yaml",
- "version": "v6.4.21",
+ "version": "v6.4.23",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e"
+ "reference": "93e29e0deb5f1b2e360adfb389a20d25eb81a27b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e",
- "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/93e29e0deb5f1b2e360adfb389a20d25eb81a27b",
+ "reference": "93e29e0deb5f1b2e360adfb389a20d25eb81a27b",
"shasum": ""
},
"require": {
@@ -6186,7 +6173,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.4.21"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.23"
},
"funding": [
{
@@ -6202,7 +6189,7 @@
"type": "tidelift"
}
],
- "time": "2025-04-04T09:48:44+00:00"
+ "time": "2025-06-03T06:46:12+00:00"
},
{
"name": "thecodingmachine/safe",
diff --git a/app/legacy/install/installer.php b/app/legacy/install/installer.php
index f84e939..9ae6277 100644
--- a/app/legacy/install/installer.php
+++ b/app/legacy/install/installer.php
@@ -653,6 +653,7 @@ $settings_updates = [
'4.3.3' => null,
'4.3.4' => null,
'4.3.5' => null,
+ '4.3.6' => null,
];
/**
@@ -1967,6 +1968,7 @@ if ($installed_version !== '' && empty($paramsCheck)) {
],
'4.2.0' => [
'users' => [
+ 'user_id' => $modifyIntUnsignedNotNullAutoIncrement,
'user_file_meta_tag_camera_model' => [
'op' => 'ADD',
'type' => 'TINYINT',
@@ -1994,6 +1996,7 @@ if ($installed_version !== '' && empty($paramsCheck)) {
],
],
'images' => [
+ 'image_id' => $modifyIntUnsignedNotNullAutoIncrement,
'image_type' => [
'op' => 'MODIFY',
'type' => 'TINYINT UNSIGNED',
@@ -2022,6 +2025,9 @@ if ($installed_version !== '' && empty($paramsCheck)) {
'prop' => "NOT NULL DEFAULT '0'",
],
],
+ 'albums' => [
+ 'album_id' => $modifyIntUnsignedNotNullAutoIncrement,
+ ],
'tags' => [],
'tags_files' => [],
'tags_users' => [],
diff --git a/app/legacy/load/app.php b/app/legacy/load/app.php
index 1a3c600..ef97634 100644
--- a/app/legacy/load/app.php
+++ b/app/legacy/load/app.php
@@ -9,5 +9,5 @@
* file that was distributed with this source code.
*/
-const APP_VERSION = '4.3.5';
+const APP_VERSION = '4.3.6';
const APP_VERSION_AKA = 'entrador';
diff --git a/content/legacy/themes/Peafowl/custom_hooks/footer.sample.php b/content/legacy/themes/Peafowl/custom_hooks/footer.sample.php
index 4883dac..9f1f705 100644
--- a/content/legacy/themes/Peafowl/custom_hooks/footer.sample.php
+++ b/content/legacy/themes/Peafowl/custom_hooks/footer.sample.php
@@ -5,4 +5,4 @@ if (!defined('ACCESS') || !ACCESS) {
die('This file cannot be directly accessed.');
}
?>
-
+
diff --git a/content/legacy/themes/Peafowl/custom_hooks/head_after.sample.php b/content/legacy/themes/Peafowl/custom_hooks/head_after.sample.php
index 927c98a..ff7f830 100644
--- a/content/legacy/themes/Peafowl/custom_hooks/head_after.sample.php
+++ b/content/legacy/themes/Peafowl/custom_hooks/head_after.sample.php
@@ -5,4 +5,4 @@ if (!defined('ACCESS') || !ACCESS) {
die('This file cannot be directly accessed.');
}
?>
-. See: app/themes/Peafowl/head.php */ ?>
+. See: content/legacy/themes/Peafowl/head.php */ ?>
diff --git a/content/legacy/themes/Peafowl/custom_hooks/head_open.sample.php b/content/legacy/themes/Peafowl/custom_hooks/head_open.sample.php
index e3cbea5..f8036b7 100644
--- a/content/legacy/themes/Peafowl/custom_hooks/head_open.sample.php
+++ b/content/legacy/themes/Peafowl/custom_hooks/head_open.sample.php
@@ -5,4 +5,4 @@ if (!defined('ACCESS') || !ACCESS) {
die('This file cannot be directly accessed.');
}
?>
-. See: app/themes/Peafowl/head.php */ ?>
+. See: content/legacy/themes/Peafowl/head.php */ ?>
diff --git a/content/legacy/themes/Peafowl/custom_hooks/header.sample.php b/content/legacy/themes/Peafowl/custom_hooks/header.sample.php
index 4883dac..c26b70a 100644
--- a/content/legacy/themes/Peafowl/custom_hooks/header.sample.php
+++ b/content/legacy/themes/Peafowl/custom_hooks/header.sample.php
@@ -5,4 +5,4 @@ if (!defined('ACCESS') || !ACCESS) {
die('This file cannot be directly accessed.');
}
?>
-
+
diff --git a/content/legacy/themes/Peafowl/lib/chevereto-all.js b/content/legacy/themes/Peafowl/lib/chevereto-all.js
index 7b1ccbd..a732a43 100644
--- a/content/legacy/themes/Peafowl/lib/chevereto-all.js
+++ b/content/legacy/themes/Peafowl/lib/chevereto-all.js
@@ -15809,7 +15809,7 @@ $(function () {
PF.fn._s("Check %s for a complete changelog since you last upgrade.", '' + CHV.obj.system_info.version + '') +
'
' +
'" +
'' +
PF.fn._s("Check the %s for alternative update methods.", '' + PF.fn._s('documentation') + '') +
diff --git a/content/legacy/themes/Peafowl/lib/chevereto-all.min.js b/content/legacy/themes/Peafowl/lib/chevereto-all.min.js
index 105f3f2..9298da2 100644
--- a/content/legacy/themes/Peafowl/lib/chevereto-all.min.js
+++ b/content/legacy/themes/Peafowl/lib/chevereto-all.min.js
@@ -1 +1 @@
-var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser),this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion),this.shortversion=this.browser+this.version,this.OS=this.searchString(this.dataOS)},searchString:function(e){for(var t=0;t{"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)})("undefined"!=typeof window?window:this,function(_,D){function O(e,t){return t.toUpperCase()}var u=[],p=_.document,d=u.slice,z=u.concat,N=u.push,M=u.indexOf,L={},R=L.toString,m=L.hasOwnProperty,g={},e="1.12.4",$=function(e,t){return new $.fn.init(e,t)},q=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,W=/^-ms-/,B=/-([\da-z])/gi;function U(e){var t=!!e&&"length"in e&&e.length,i=$.type(e);return"function"!==i&&!$.isWindow(e)&&("array"===i||0===t||"number"==typeof t&&0{function u(e,t,i){var n="0x"+t-65536;return n!=n||i?t:n<0?String.fromCharCode(65536+n):String.fromCharCode(n>>10|55296,1023&n|56320)}function O(){$()}var e,p,w,s,z,m,N,M,_,l,c,$,x,t,P,g,n,o,v,C="sizzle"+ +new Date,b=D.document,F=0,L=0,R=ce(),q=ce(),y=ce(),W=function(e,t){return e===t&&(c=!0),0},B={}.hasOwnProperty,i=[],U=i.pop,X=i.push,j=i.push,Y=i.slice,k=function(e,t){for(var i=0,n=e.length;i+~]|"+a+")"+a+"*"),te=new RegExp("="+a+"*([^\\]'\"]*?)"+a+"*\\]","g"),ie=new RegExp(K),ne=new RegExp("^"+r+"$"),h={ID:new RegExp("^#("+r+")"),CLASS:new RegExp("^\\.("+r+")"),TAG:new RegExp("^("+r+"|[*])"),ATTR:new RegExp("^"+J),PSEUDO:new RegExp("^"+K),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+a+"*(even|odd|(([+-]|)(\\d*)n|)"+a+"*(?:([+-]|)"+a+"*(\\d+)|))"+a+"*\\)|)","i"),bool:new RegExp("^(?:"+Q+")$","i"),needsContext:new RegExp("^"+a+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+a+"*((?:-\\d)?\\d*)"+a+"*\\)|)(?=[^-]|$)","i")},oe=/^(?:input|select|textarea|button)$/i,se=/^h\d$/i,d=/^[^{]+\{\s*\[native \w/,ae=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,re=/[+~]/,le=/'|\\/g,f=new RegExp("\\\\([\\da-f]{1,6}"+a+"?|("+a+")|.)","ig");try{j.apply(i=Y.call(b.childNodes),b.childNodes),i[b.childNodes.length].nodeType}catch(e){j={apply:i.length?function(e,t){X.apply(e,Y.call(t))}:function(e,t){for(var i=e.length,n=0;e[i++]=t[n++];);e.length=i-1}}}function T(e,t,i,n){var o,s,a,r,l,c,d,u,h=t&&t.ownerDocument,f=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==f&&9!==f&&11!==f)return i;if(!n&&((t?t.ownerDocument||t:b)!==x&&$(t),t=t||x,P)){if(11!==f&&(c=ae.exec(e)))if(o=c[1]){if(9===f){if(!(a=t.getElementById(o)))return i;if(a.id===o)return i.push(a),i}else if(h&&(a=h.getElementById(o))&&v(t,a)&&a.id===o)return i.push(a),i}else{if(c[2])return j.apply(i,t.getElementsByTagName(e)),i;if((o=c[3])&&p.getElementsByClassName&&t.getElementsByClassName)return j.apply(i,t.getElementsByClassName(o)),i}if(p.qsa&&!y[e+" "]&&(!g||!g.test(e))){if(1!==f)h=t,u=e;else if("object"!==t.nodeName.toLowerCase()){for((r=t.getAttribute("id"))?r=r.replace(le,"\\$&"):t.setAttribute("id",r=C),s=(d=m(e)).length,l=ne.test(r)?"#"+r:"[id='"+r+"']";s--;)d[s]=l+" "+I(d[s]);u=d.join(","),h=re.test(e)&&he(t.parentNode)||t}if(u)try{return j.apply(i,h.querySelectorAll(u)),i}catch(e){}finally{r===C&&t.removeAttribute("id")}}}return M(e.replace(H,"$1"),t,i,n)}function ce(){var i=[];function n(e,t){return i.push(e+" ")>w.cacheLength&&delete n[i.shift()],n[e+" "]=t}return n}function S(e){return e[C]=!0,e}function E(e){var t=x.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function de(e,t){for(var i=e.split("|"),n=i.length;n--;)w.attrHandle[i[n]]=t}function ue(e,t){var i=t&&e,n=i&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(n)return n;if(i)for(;i=i.nextSibling;)if(i===t)return-1;return e?1:-1}function V(a){return S(function(s){return s=+s,S(function(e,t){for(var i,n=a([],e.length,s),o=n.length;o--;)e[i=n[o]]&&(e[i]=!(t[i]=e[i]))})})}function he(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in p=T.support={},z=T.isXML=function(e){e=e&&(e.ownerDocument||e).documentElement;return!!e&&"HTML"!==e.nodeName},$=T.setDocument=function(e){var e=e?e.ownerDocument||e:b;return e!==x&&9===e.nodeType&&e.documentElement&&(t=(x=e).documentElement,P=!z(x),(e=x.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",O,!1):e.attachEvent&&e.attachEvent("onunload",O)),p.attributes=E(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=E(function(e){return e.appendChild(x.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=d.test(x.getElementsByClassName),p.getById=E(function(e){return t.appendChild(e).id=C,!x.getElementsByName||!x.getElementsByName(C).length}),p.getById?(w.find.ID=function(e,t){if(void 0!==t.getElementById&&P)return(t=t.getElementById(e))?[t]:[]},w.filter.ID=function(e){var t=e.replace(f,u);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(f,u);return function(e){e=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}}),w.find.TAG=p.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var i,n=[],o=0,s=t.getElementsByTagName(e);if("*"!==e)return s;for(;i=s[o++];)1===i.nodeType&&n.push(i);return n},w.find.CLASS=p.getElementsByClassName&&function(e,t){return void 0!==t.getElementsByClassName&&P?t.getElementsByClassName(e):void 0},n=[],g=[],(p.qsa=d.test(x.querySelectorAll))&&(E(function(e){t.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+a+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+a+"*(?:value|"+Q+")"),e.querySelectorAll("[id~="+C+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+C+"+*").length||g.push(".#.+[+~]")}),E(function(e){var t=x.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+a+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(p.matchesSelector=d.test(o=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.msMatchesSelector))&&E(function(e){p.disconnectedMatch=o.call(e,"div"),o.call(e,"[s!='']:x"),n.push("!=",K)}),g=g.length&&new RegExp(g.join("|")),n=n.length&&new RegExp(n.join("|")),e=d.test(t.compareDocumentPosition),v=e||d.test(t.contains)?function(e,t){var i=9===e.nodeType?e.documentElement:e,t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(i.contains?i.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},W=e?function(e,t){var i;return e===t?(c=!0,0):(i=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(i=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===i?e===x||e.ownerDocument===b&&v(b,e)?-1:t===x||t.ownerDocument===b&&v(b,t)?1:l?k(l,e)-k(l,t):0:4&i?-1:1)}:function(e,t){if(e===t)return c=!0,0;var i,n=0,o=e.parentNode,s=t.parentNode,a=[e],r=[t];if(!o||!s)return e===x?-1:t===x?1:o?-1:s?1:l?k(l,e)-k(l,t):0;if(o===s)return ue(e,t);for(i=e;i=i.parentNode;)a.unshift(i);for(i=t;i=i.parentNode;)r.unshift(i);for(;a[n]===r[n];)n++;return n?ue(a[n],r[n]):a[n]===b?-1:r[n]===b?1:0}),x},T.matches=function(e,t){return T(e,null,null,t)},T.matchesSelector=function(e,t){if((e.ownerDocument||e)!==x&&$(e),t=t.replace(te,"='$1']"),p.matchesSelector&&P&&!y[t+" "]&&(!n||!n.test(t))&&(!g||!g.test(t)))try{var i=o.call(e,t);if(i||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(f,u),e[3]=(e[3]||e[4]||e[5]||"").replace(f,u),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||T.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&T.error(e[0]),e},PSEUDO:function(e){var t,i=!e[6]&&e[2];return h.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":i&&ie.test(i)&&(t=(t=m(i,!0))&&i.indexOf(")",i.length-t)-i.length)&&(e[0]=e[0].slice(0,t),e[2]=i.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(f,u).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=R[e+" "];return t||(t=new RegExp("(^|"+a+")"+e+"("+a+"|$)"))&&R(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,i,n){return function(e){e=T.attr(e,t);return null==e?"!="===i:!i||(e+="","="===i?e===n:"!="===i?e!==n:"^="===i?n&&0===e.indexOf(n):"*="===i?n&&-1function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t})(e);for(e in{submit:!0,reset:!0})w.pseudos[e]=(i=>function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===i})(e);function fe(){}function I(e){for(var t=0,i=e.length,n="";t{for(var n=0,o=t.length;n(?:<\/\1>|)$/,J=/^.[^:#\[\.,]*$/;function K(e,i,n){if($.isFunction(i))return $.grep(e,function(e,t){return!!i.call(e,t,e)!==n});if(i.nodeType)return $.grep(e,function(e){return e===i!==n});if("string"==typeof i){if(J.test(i))return $.filter(i,e,n);i=$.filter(i,e)}return $.grep(e,function(e){return-1<$.inArray(e,i)!==n})}$.filter=function(e,t,i){var n=t[0];return i&&(e=":not("+e+")"),1===t.length&&1===n.nodeType?$.find.matchesSelector(n,e)?[n]:[]:$.find.matches(e,$.grep(t,function(e){return 1===e.nodeType}))},$.fn.extend({find:function(e){var t,i=[],n=this,o=n.length;if("string"!=typeof e)return this.pushStack($(e).filter(function(){for(t=0;t)[^>]*|#([\w-]*))$/,ee=(($.fn.init=function(e,t,i){if(e){if(i=i||G,"string"!=typeof e)return e.nodeType?(this.context=this[0]=e,this.length=1,this):$.isFunction(e)?void 0!==i.ready?i.ready(e):e($):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),$.makeArray(e,this));if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:Z.exec(e))||!n[1]&&t)return(!t||t.jquery?t||i:this.constructor(t)).find(e);if(n[1]){if(t=t instanceof $?t[0]:t,$.merge(this,$.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:p,!0)),Q.test(n[1])&&$.isPlainObject(t))for(var n in t)$.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n])}else{if((i=p.getElementById(n[2]))&&i.parentNode){if(i.id!==n[2])return G.find(e);this.length=1,this[0]=i}this.context=p,this.selector=e}}return this}).prototype=$.fn,G=$(p),/^(?:parents|prev(?:Until|All))/),te={children:!0,contents:!0,next:!0,prev:!0};function ie(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}$.fn.extend({has:function(e){var t,i=$(e,this),n=i.length;return this.filter(function(){for(t=0;ta",g.leadingWhitespace=3===j.firstChild.nodeType,g.tbody=!j.getElementsByTagName("tbody").length,g.htmlSerialize=!!j.getElementsByTagName("link").length,g.html5Clone="<:nav>"!==p.createElement("nav").cloneNode(!0).outerHTML,V.type="checkbox",V.checked=!0,F.appendChild(V),g.appendChecked=V.checked,j.innerHTML="",g.noCloneChecked=!!j.cloneNode(!0).lastChild.defaultValue,F.appendChild(j),(V=p.createElement("input")).setAttribute("type","radio"),V.setAttribute("checked","checked"),V.setAttribute("name","t"),j.appendChild(V),g.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,g.noCloneEvent=!!j.addEventListener,j[$.expando]=1,g.attributes=!j.getAttribute($.expando);var b={option:[1,""],legend:[1,""],area:[1,""],param:[1,""],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:g.htmlSerialize?[0,"",""]:[1,"X","
"]};function y(e,t){var i,n,o=0,s=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!s)for(s=[],i=e.childNodes||e;null!=(n=i[o]);o++)!t||$.nodeName(n,t)?s.push(n):$.merge(s,y(n,t));return void 0===t||t&&$.nodeName(e,t)?$.merge([e],s):s}function _e(e,t){for(var i,n=0;null!=(i=e[n]);n++)$._data(i,"globalEval",!t||$._data(t[n],"globalEval"))}b.optgroup=b.option,b.tbody=b.tfoot=b.colgroup=b.caption=b.thead,b.th=b.td;var $e=/<|?\w+;/,xe=/"!==u[1]||xe.test(a)?0:l:l.firstChild)&&a.childNodes.length;s--;)$.nodeName(d=a.childNodes[s],"tbody")&&!d.childNodes.length&&a.removeChild(d);for($.merge(p,l.childNodes),l.textContent="";l.firstChild;)l.removeChild(l.firstChild);l=f.lastChild}else p.push(t.createTextNode(a));for(l&&f.removeChild(l),g.appendChecked||$.grep(y(p,"input"),Pe),m=0;a=p[m++];)if(n&&-1<$.inArray(a,n))o&&o.push(a);else if(r=$.contains(a.ownerDocument,a),l=y(f.appendChild(a),"script"),r&&_e(l),i)for(s=0;a=l[s++];)ve.test(a.type||"")&&i.push(a);return l=null,f}var Fe,je,ke=p.createElement("div");for(Fe in{submit:!0,change:!0,focusin:!0})je="on"+Fe,(g[Fe]=je in _)||(ke.setAttribute(je,"t"),g[Fe]=!1===ke.attributes[je].expando);var He=/^(?:input|select|textarea)$/i,Te=/^key/,Se=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^(?:focusinfocus|focusoutblur)$/,Ve=/^([^.]*)(?:\.(.+)|)/;function Ie(){return!0}function l(){return!1}function Ae(){try{return p.activeElement}catch(e){}}function De(e,t,i,n,o,s){var a,r;if("object"==typeof t){for(r in"string"!=typeof i&&(n=n||i,i=void 0),t)De(e,r,i,n,t[r],s);return e}if(null==n&&null==o?(o=i,n=i=void 0):null==o&&("string"==typeof i?(o=n,n=void 0):(o=n,n=i,i=void 0)),!1===o)o=l;else if(!o)return e;return 1===s&&(a=o,(o=function(e){return $().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=$.guid++)),e.each(function(){$.event.add(this,t,o,n,i)})}$.event={global:{},add:function(e,t,i,n,o){var s,a,r,l,c,d,u,h,f,p=$._data(e);if(p)for(i.handler&&(i=(r=i).handler,o=r.selector),i.guid||(i.guid=$.guid++),s=(s=p.events)||(p.events={}),(c=p.handle)||((c=p.handle=function(e){return void 0===$||e&&$.event.triggered===e.type?void 0:$.event.dispatch.apply(c.elem,arguments)}).elem=e),a=(t=(t||"").match(x)||[""]).length;a--;)u=f=(h=Ve.exec(t[a])||[])[1],h=(h[2]||"").split(".").sort(),u&&(l=$.event.special[u]||{},u=(o?l.delegateType:l.bindType)||u,l=$.event.special[u]||{},f=$.extend({type:u,origType:f,data:n,handler:i,guid:i.guid,selector:o,needsContext:o&&$.expr.match.needsContext.test(o),namespace:h.join(".")},r),(d=s[u])||((d=s[u]=[]).delegateCount=0,l.setup&&!1!==l.setup.call(e,n,h,c))||(e.addEventListener?e.addEventListener(u,c,!1):e.attachEvent&&e.attachEvent("on"+u,c)),l.add&&(l.add.call(e,f),f.handler.guid||(f.handler.guid=i.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),$.event.global[u]=!0)},remove:function(e,t,i,n,o){var s,a,r,l,c,d,u,h,f,p,m,g=$.hasData(e)&&$._data(e);if(g&&(d=g.events)){for(c=(t=(t||"").match(x)||[""]).length;c--;)if(f=m=(r=Ve.exec(t[c])||[])[1],p=(r[2]||"").split(".").sort(),f){for(u=$.event.special[f]||{},h=d[f=(n?u.delegateType:u.bindType)||f]||[],r=r[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=s=h.length;s--;)a=h[s],!o&&m!==a.origType||i&&i.guid!==a.guid||r&&!r.test(a.namespace)||n&&n!==a.selector&&("**"!==n||!a.selector)||(h.splice(s,1),a.selector&&h.delegateCount--,u.remove&&u.remove.call(e,a));l&&!h.length&&(u.teardown&&!1!==u.teardown.call(e,p,g.handle)||$.removeEvent(e,f,g.handle),delete d[f])}else for(f in d)$.event.remove(e,f+t[c],i,n,!0);$.isEmptyObject(d)&&(delete g.handle,$._removeData(e,"events"))}},trigger:function(e,t,i,n){var o,s,a,r,l,c,d=[i||p],u=m.call(e,"type")?e.type:e,h=m.call(e,"namespace")?e.namespace.split("."):[],f=l=i=i||p;if(3!==i.nodeType&&8!==i.nodeType&&!Ee.test(u+$.event.triggered)&&(-1]","i"),Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Me=/