diff --git a/wp-content/plugins/nextgen-gallery/changelog.txt b/wp-content/plugins/nextgen-gallery/changelog.txt
index 52e63b540bbc3defb5650930fb4a3c03ec866458..0c8a1dd06e3d7d5d3d3df3be035a2ceab23864e4 100644
--- a/wp-content/plugins/nextgen-gallery/changelog.txt
+++ b/wp-content/plugins/nextgen-gallery/changelog.txt
@@ -1,6 +1,71 @@
 NextGEN Gallery
 by Imagely
 
+= V2.1.62 - 12.15.2016 =
+* Fixed:   Typo in notice for launching the gallery wizard
+* Fixed:   The ability to dismiss the gallery wizard notice
+
+= V2.1.61 - 12.14.2016 =
+* NEW:     Gallery creation wizard for new users
+* Fixed:   Shortcodes in widgets not getting substituted in Divi
+* Fixed:   Ensure that NGG placeholder text doesn't get styled incorrectly by other themes
+* Fixed:   Various thickbox issues on custom post type pages
+* Fixed:   Hide IGW placeholder images in Yoast feed
+
+= V2.1.60 - 11.22.2016 =
+* Secured: Ensure that only .css files can be edited using Styles tab
+
+= V2.1.59 - 11.22.2016 =
+* Secured: Ability to customize CSS Styles
+* Changed: readme.txt improvements
+* Fixed:   Compatibility with WordPress 4.7.0
+* Fixed:   IGW-inserted tagclouds are incorrect
+
+= V2.1.57 - 11.14.2016 =
+* Secured: Custom Styles may only be written to specific directories
+* Secured: SQL injection vulnerability for gallery names
+* Changed: Display type icons are now clickable in the Insert Gallery Window
+* Changed: Include backup image files when coping/moving a gallery
+* Changed: Show gallery name in upload notification
+* Changed: Added placeholder text to gallery name field on Add Gallery / Upload Images page
+* Fixed:   Custom sortorder not preserved in shortcode
+* Fixed:   Shortcodes added via Insert Gallery Window displayed as []
+* Fixed:   Uncaught TypeError: Cannot read property 'replace' of undefined
+* Fixed:   Use of deprecated Yoast SEO (aka WPSEO) filter
+* Fixed:   Conflict with Easy Digital Downloads
+* Fixed:   Misc invalid HTML tags in admin pages (thanks to kniebremser)
+* Fixed:   Change display:hidden to visibility:hidden in various places
+* Fixed:   Escaping of quotes in gallery titles and urls
+* Fixed:   Untranslatable strings
+
+= V2.1.56 - 10.27.2016 =
+* Fixed:   Shortcode parsing was affecting third-party shortcodes
+
+= V2.1.54 - 10.25.2016 =
+* NEW:     Added php docblock directives for code hinting/completion
+* NEW:     Display types can have aliases
+* NEW:     Visual Shortcodes
+* Changed: Now uses gulp for package compilation & JS/CSS minification
+* Changed: Updated Freemius SDK to 1.2.1
+* Fixed:   Extraneous backslashes being added to gallery titles & descriptions
+* Fixed:   Import folder 'gallery title' field wasn't being used for new gallery titles
+* Fixed:   Settings reset will now redirect to /wp-admin/ to avoid potential activation-related errors
+* Fixed:   Table columns cache becomes out of date between versions
+* Fixed:   Various issues with shortcodes when used in widgets
+* Fixed:   Warnings caused by calls to non-existent module package files
+* Fixed:   nextgen_admin's jquery-ui breaking Elegant Themes admin pages
+
+= V2.1.50 - 08.30-2016 =
+* NEW:     Added the ability to open galleries within albums using a lightbox
+* Changed: Increased freemius opt-in to 100%
+* Changed: Tamara Lackey's biography on the overview page
+* Fixed:   Images not responsive for all display types
+* Fixed:   Compatibility with the Imagely Lightroom plugin
+* Fixed:   Removed Pope tests folder
+* Fixed:   Maximum function nesting level fatal error when displaying two or more albums
+* Fixed:   Ensure Insert Gallery Window background stays white
+* Fixed:   PHP warning for C_NGG_Lightbox class using incompatible constructor
+
 = V2.1.49 - 07.26.2016 =
 * NEW:     Add a "Default" template option to override ATP settings when a global setting is used
 * NEW:     Added "generic" error reporting back during image upload.
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.css
index d4d179f146bcd5dc5b3f35e397666107130ae2e8..76bdf40b8c9d644e3c2a75eecc86ead8fdbb77bf 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.css
@@ -1 +1 @@
-#fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .button i.dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table var,.fs-key-value-table code{color:#0073AA;font-size:16px;background:none}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}
+#fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .button i.dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.min.css
index f0deec708e0d5c3734da269ae3ae1b0f8520065e..c618ad154d1ed29db075efdcef03b873984762a7 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.min.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/account.min.css
@@ -1 +1 @@
-#fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #f1f1f1}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .button i.dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table var,.fs-key-value-table code{color:#0073aa;font-size:16px;background:none}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_addons h3{border:0;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}
\ No newline at end of file
+#fs_account .fs-header-actions li form,.fs-key-value-table form{display:inline-block}#fs_addons td:last-child,#fs_addons th:last-child,.fs-key-value-table tr td.fs-right,.fs-key-value-table tr td:first-child{text-align:right}#fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .button i.dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table tr td:first-child nobr{font-weight:700}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table code,.fs-key-value-table input[type=text],.fs-key-value-table var{color:#0073AA;font-size:16px;background:0 0}label.fs-tag,label.fs-tag.fs-warn{background:#ffba00}.fs-key-value-table input[type=text]{width:100%;font-weight:700}label.fs-tag{color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:700}#fs_addons th{font-weight:700}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.css
index 60af6a14c44e59ee3ea3c78acbc8e2a36ff9fae8..0c2df5ab4c87dbc304f0b82068dff136edf072c3 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.css
@@ -1,2 +1,2 @@
-#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
-#TB_window,#TB_window iframe{width:772px !important}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
+#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
+#TB_window,#TB_window iframe{width:772px !important}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.min.css
index caaa008660612f52ffd3bab04624a7e6f8ecd8d6..5a6606883af1eccd44fae64369799615ec645b1a 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.min.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/add-ons.min.css
@@ -1 +1 @@
-#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button{position:absolute;top:112px;right:10px}@media screen and (min-width:960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:772px !important}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}@media screen and (max-width:961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
\ No newline at end of file
+#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:700}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px;border-top:1px solid #eee;margin:0 0 10px;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:700}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button{position:absolute;top:112px;right:10px}@media screen and (min-width:960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title{color:#29abe1}}#TB_window,#TB_window iframe{width:772px!important}#plugin-information #section-description b,#plugin-information #section-description blockquote,#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description i,#plugin-information #section-description li,#plugin-information #section-description ol,#plugin-information #section-description p,#plugin-information #section-description ul{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px!important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:700;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount,#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency{text-align:center;display:block;font-weight:700;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:400;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}@media screen and (max-width:961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.css
index f58930c897b23d5000b06473cee01d3186c15f9a..f58e647a241f9a2162463eddab8aa66e107f2fdb 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.css
@@ -1 +1 @@
-.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0px 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}
+.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0px 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.min.css
index ee05a589df482edfcae02256d554d9fd3edb9a3b..1bae2a296148b8c59e46aa361d7084fefc3e6b48 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.min.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/common.min.css
@@ -1 +1 @@
-.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}@media screen and (max-width:960px){.fs-secure-notice{left:36px}}@media screen and (max-width:782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}
\ No newline at end of file
+.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px!important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2!important;background-color:#f2fcff!important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:700;cursor:auto}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0 2px 2px rgba(6,113,6,.3);opacity:.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}@media screen and (max-width:960px){.fs-secure-notice{left:36px}}@media screen and (max-width:500px){#fs_promo_tab{display:none}}@media screen and (max-width:782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.css
index 86ef2146ff8f198179a7eeb9ab7c821027e82aaa..4bfe6b8580eb28c233946cf0909ffb04af8fec84 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.css
@@ -1 +1 @@
-#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
+#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.min.css
index f83548b8d9be50d96304a322efcdb0492762dfea..0351a06e6c34b24490096e1079b99a6d3f0085dc 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.min.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/connect.min.css
@@ -1 +1 @@
-#fs_connect{width:480px;-moz-box-shadow:0 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.3);box-shadow:0 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width:479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-actions{padding:10px 20px;background:#c0c7ca}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#fefefe;-moz-transition:background .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-trigger{font-size:.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width:479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#c0c7ca}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
\ No newline at end of file
+#fs_connect{width:480px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3);margin:20px 0}@media screen and (max-width:479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0}#fs_connect .fs-license-key-container input,#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:700;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px}@media screen and (max-width:479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:.85em;padding:5px;background:rgba(0,0,0,.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.css
index 27a596a2775879f6823c1902a55c62ec517257e6..47fa6df7325589bedf867d032454867b3ff0a139 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.css
@@ -1 +1 @@
-.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}.fs-modal .fs-modal-dialog li.reason{margin-bottom:10px}.fs-modal .fs-modal-dialog li.reason .reason-input{margin-left:29px}.fs-modal .fs-modal-dialog li.reason label{display:table}.fs-modal .fs-modal-dialog li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}.fs-modal .reason-input{margin:3px 0 3px 22px}.fs-modal .reason-input input,.fs-modal .reason-input textarea{width:100%}body.has-fs-modal{overflow:hidden}#the-list .deactivate>.fs-slug{display:none}
+.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}.fs-modal .fs-modal-dialog li.reason{margin-bottom:10px}.fs-modal .fs-modal-dialog li.reason .reason-input,.fs-modal .fs-modal-dialog li.reason .internal-message{margin-left:29px}.fs-modal .fs-modal-dialog li.reason label{display:table}.fs-modal .fs-modal-dialog li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}.fs-modal .reason-input,.fs-modal .internal-message{margin:3px 0 3px 22px}.fs-modal .reason-input input,.fs-modal .reason-input textarea,.fs-modal .internal-message input,.fs-modal .internal-message textarea{width:100%}.fs-modal li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}body.has-fs-modal{overflow:hidden}#the-list .deactivate>.fs-slug{display:none}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.min.css
index 7302ec6aa6121124e3014399b782d0fc517dc7df..85dfd738e550679cc605e7e79889f6721bde0bb6 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.min.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/deactivation-feedback.min.css
@@ -1 +1 @@
-.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media(max-width:650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}.fs-modal .fs-modal-dialog li.reason{margin-bottom:10px}.fs-modal .fs-modal-dialog li.reason .reason-input{margin-left:29px}.fs-modal .fs-modal-dialog li.reason label{display:table}.fs-modal .fs-modal-dialog li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}.fs-modal .reason-input{margin:3px 0 3px 22px}.fs-modal .reason-input input,.fs-modal .reason-input textarea{width:100%}body.has-fs-modal{overflow:hidden}#the-list .deactivate>.fs-slug{display:none}
\ No newline at end of file
+.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}.fs-modal .fs-modal-dialog{background:0 0;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width:650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}.fs-modal .fs-modal-dialog li.reason{margin-bottom:10px}.fs-modal .fs-modal-dialog li.reason .internal-message,.fs-modal .fs-modal-dialog li.reason .reason-input{margin-left:29px}.fs-modal .fs-modal-dialog li.reason label{display:table}.fs-modal .fs-modal-dialog li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.active,.fs-modal.active:before{display:block}#the-list .deactivate>.fs-slug,.fs-modal .fs-modal-panel:not(.active){display:none}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:700;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .internal-message,.fs-modal .reason-input{margin:3px 0 3px 22px}.fs-modal .internal-message input,.fs-modal .internal-message textarea,.fs-modal .reason-input input,.fs-modal .reason-input textarea{width:100%}.fs-modal li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}body.has-fs-modal{overflow:hidden}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.css
index 63779fb3db062df477688a34c336922ac0033c23..48fe92f9b96260c20dcc8842fb87b6c8ad4f6050 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.css
@@ -1 +1 @@
-.switch{position:relative;display:inline-block;font-size:1.6em;font-weight:bold;color:#ccc;text-shadow:0px 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:4px;background:#ececec;box-shadow:0px 0px 4px rgba(0,0,0,0.1),inset 0px 1px 3px 0px rgba(0,0,0,0.1);cursor:pointer}.switch span{display:inline-block;width:35px;text-transform:uppercase}.switch span.on{color:#6bc406}.switch .toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background:-moz-linear-gradient(top, #ececec 0%, #fff 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #fff));background:-webkit-linear-gradient(top, #ececec 0%, #fff 100%);background:-o-linear-gradient(top, #ececec 0%, #fff 100%);background:-ms-linear-gradient(top, #ececec 0%, #fff 100%);background:linear-gradient(top, #ececec 0%, #fff 100%);box-shadow:inset 0px 1px 0px 0px rgba(255,255,255,0.5);z-index:999;-moz-transition:all 0.15s ease-in-out;-o-transition:all 0.15s ease-in-out;-ms-transition:all 0.15s ease-in-out;-webkit-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.switch.on .toggle{left:2%}.switch.off .toggle{left:54%}.switch.round{padding:0px 20px;border-radius:40px}.switch.round .toggle{border-radius:40px;width:14px;height:14px}.switch.round.on .toggle{left:3%;background:#6bc406}.switch.round.off .toggle{left:58%}.switch-label{font-size:20px;line-height:31px;margin:0 5px}
+.switch{position:relative;display:inline-block;font-size:1.6em;font-weight:bold;color:#ccc;text-shadow:0px 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:4px;background:#ececec;box-shadow:0px 0px 4px rgba(0,0,0,0.1),inset 0px 1px 3px 0px rgba(0,0,0,0.1);cursor:pointer}.switch span{display:inline-block;width:35px;text-transform:uppercase}.switch span.on{color:#6bc406}.switch .toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background:-moz-linear-gradient(top, #ececec 0%, #fff 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #fff));background:-webkit-linear-gradient(top, #ececec 0%, #fff 100%);background:-o-linear-gradient(top, #ececec 0%, #fff 100%);background:-ms-linear-gradient(top, #ececec 0%, #fff 100%);background:linear-gradient(top, #ececec 0%, #fff 100%);box-shadow:inset 0px 1px 0px 0px rgba(255,255,255,0.5);z-index:999;-moz-transition:all 0.15s ease-in-out;-o-transition:all 0.15s ease-in-out;-ms-transition:all 0.15s ease-in-out;-webkit-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.switch.on .toggle{left:2%}.switch.off .toggle{left:54%}.switch.round{padding:0px 20px;border-radius:40px}.switch.round .toggle{border-radius:40px;width:14px;height:14px}.switch.round.on .toggle{left:3%;background:#6bc406}.switch.round.off .toggle{left:58%}.switch-label{font-size:20px;line-height:31px;margin:0 5px}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.min.css
index 67f7d100654cfff1446b47422787ed7052ad6f9f..dde05bb5ce7ecfc2e5fbe87ef85ef2504137201e 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.min.css
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/debug.min.css
@@ -1 +1 @@
-.switch{position:relative;display:inline-block;font-size:1.6em;font-weight:bold;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:4px;background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.switch span{display:inline-block;width:35px;text-transform:uppercase}.switch span.on{color:#6bc406}.switch .toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background:-moz-linear-gradient(top,#ececec 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ececec),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ececec 0,#fff 100%);background:-o-linear-gradient(top,#ececec 0,#fff 100%);background:-ms-linear-gradient(top,#ececec 0,#fff 100%);background:linear-gradient(top,#ececec 0,#fff 100%);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:all .15s ease-in-out;-o-transition:all .15s ease-in-out;-ms-transition:all .15s ease-in-out;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.switch.on .toggle{left:2%}.switch.off .toggle{left:54%}.switch.round{padding:0 20px;border-radius:40px}.switch.round .toggle{border-radius:40px;width:14px;height:14px}.switch.round.on .toggle{left:3%;background:#6bc406}.switch.round.off .toggle{left:58%}.switch-label{font-size:20px;line-height:31px;margin:0 5px}
\ No newline at end of file
+.switch,.switch span{display:inline-block}.switch{position:relative;font-size:1.6em;font-weight:700;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,.8);height:18px;padding:6px 6px 5px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;background:#ececec;box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(0,0,0,.1);cursor:pointer}.switch span{width:35px;text-transform:uppercase}.switch span.on{color:#6bc406}.switch .toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.3);border-radius:4px;background:#fff;background:-moz-linear-gradient(top,#ececec 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ececec),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ececec 0,#fff 100%);background:-o-linear-gradient(top,#ececec 0,#fff 100%);background:-ms-linear-gradient(top,#ececec 0,#fff 100%);background:linear-gradient(top,#ececec 0,#fff 100%);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.5);z-index:999;-moz-transition:all .15s ease-in-out;-o-transition:all .15s ease-in-out;-ms-transition:all .15s ease-in-out;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.switch.on .toggle{left:2%}.switch.off .toggle{left:54%}.switch.round{padding:0 20px;border-radius:40px}.switch.round .toggle{border-radius:40px;width:14px;height:14px}.switch.round.on .toggle{left:3%;background:#6bc406}.switch.round.off .toggle{left:58%}.switch-label{font-size:20px;line-height:31px;margin:0 5px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/dialog-boxes.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/dialog-boxes.css
new file mode 100644
index 0000000000000000000000000000000000000000..f71af932290aa4c409dbfbcd030cf0f6c88a0790
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/dialog-boxes.css
@@ -0,0 +1,2 @@
+.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-license-activation .fs-modal-body input.license_key{width:100%}.fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend .fs-modal-body input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{margin-top:2px}}
+.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/dialog-boxes.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/dialog-boxes.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..38cec20af80612a29078b150255f19eb0ac1e480
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/dialog-boxes.min.css
@@ -0,0 +1 @@
+.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}.fs-modal .fs-modal-dialog{background:0 0;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea,.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-license-activation .fs-modal-body input.license_key,.fs-modal.fs-modal-license-key-resend .fs-modal-body input.email-address{width:100%}@media (max-width:650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active,.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:700;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:700;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .internal-message,.fs-modal.fs-modal-deactivation-feedback .reason-input{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width:650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0!important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:right;margin-left:7px}@media (max-width:650px){.fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{margin-top:2px}}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/license-activation.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/license-activation.css
new file mode 100644
index 0000000000000000000000000000000000000000..6152f363cbac893b0ed5e51c70333338c4ce9240
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/license-activation.css
@@ -0,0 +1 @@
+.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body .license-activation-message{margin:0;display:none}.fs-modal .fs-modal-body input.license_key{width:100%}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}body.has-fs-modal{overflow:hidden}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/license-activation.min.css b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/license-activation.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..0b1874fec450ac5fa669334a58a2edc51ae05176
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/css/admin/license-activation.min.css
@@ -0,0 +1 @@
+.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}.fs-modal .fs-modal-dialog{background:0 0;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width:650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active,.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body .license-activation-message{margin:0;display:none}.fs-modal .fs-modal-body input.license_key{width:100%}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:700;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}body.has-fs-modal{overflow:hidden}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/js/jquery.ba-postmessage.min.js b/wp-content/plugins/nextgen-gallery/freemius/assets/js/jquery.ba-postmessage.min.js
index 3b14638655b704c0bfec9e2901c429bf5c4659c9..9a64dfcf27a2341e17588e97829c520cb74eb8b6 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/js/jquery.ba-postmessage.min.js
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/js/jquery.ba-postmessage.min.js
@@ -1,9 +1 @@
-/*
- * jQuery postMessage - v0.5 - 9/11/2009
- * http://benalman.com/projects/jquery-postmessage-plugin/
- * 
- * Copyright (c) 2009 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($){var g,d,j=1,a,b=this,f=!1,h="postMessage",e="addEventListener",c,i=b[h]&&!$.browser.opera;$[h]=function(k,l,m){if(!l){return}k=typeof k==="string"?k:$.param(k);m=m||parent;if(i){m[h](k,l.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))}else{if(l){m.location=l.replace(/#.*$/,"")+"#"+(+new Date)+(j++)+"&"+k}}};$.receiveMessage=c=function(l,m,k){if(i){if(l){a&&c();a=function(n){if((typeof m==="string"&&n.origin!==m)||($.isFunction(m)&&m(n.origin)===f)){return f}l(n)}}if(b[e]){b[l?e:"removeEventListener"]("message",a,f)}else{b[l?"attachEvent":"detachEvent"]("onmessage",a)}}else{g&&clearInterval(g);g=null;if(l){k=typeof m==="number"?m:typeof k==="number"?k:100;g=setInterval(function(){var o=document.location.hash,n=/^#?\d+&/;if(o!==d&&n.test(o)){d=o;l({data:o.replace(n,"")})}},k)}}}})(jQuery);
\ No newline at end of file
+!function(e){"$:nomunge";var n,t,a,r,o=1,i=this,s=!1,c="postMessage",u="addEventListener",p=i[c]&&!e.browser.opera;e[c]=function(n,t,a){t&&(n="string"==typeof n?n:e.param(n),a=a||parent,p?a[c](n,t.replace(/([^:]+:\/\/[^\/]+).*/,"$1")):t&&(a.location=t.replace(/#.*$/,"")+"#"+ +new Date+o++ +"&"+n))},e.receiveMessage=r=function(o,c,v){p?(o&&(a&&r(),a=function(n){return"string"==typeof c&&n.origin!==c||e.isFunction(c)&&c(n.origin)===s?s:void o(n)}),i[u]?i[o?u:"removeEventListener"]("message",a,s):i[o?"attachEvent":"detachEvent"]("onmessage",a)):(n&&clearInterval(n),n=null,o&&(v="number"==typeof c?c:"number"==typeof v?v:100,n=setInterval(function(){var e=document.location.hash,n=/^#?\d+&/;e!==t&&n.test(e)&&(t=e,o({data:e.replace(n,"")}))},v)))}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/js/nojquery.ba-postmessage.min.js b/wp-content/plugins/nextgen-gallery/freemius/assets/js/nojquery.ba-postmessage.min.js
index ae542d4e81fd6735c369904fca039ab83fa09f48..55cea2aa848cc77619c31ca7dadc31093b331a5d 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/js/nojquery.ba-postmessage.min.js
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/js/nojquery.ba-postmessage.min.js
@@ -1,12 +1 @@
-/*
- * nojquery-postmessage by Jeff Lee
- * a non-jQuery fork of:
- *
- * jQuery postMessage - v0.5 - 9/11/2009
- * http://benalman.com/projects/jquery-postmessage-plugin/
- *
- * Copyright (c) 2009 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-function NoJQueryPostMessageMixin(g,a){var b,h,e,d,f,c=1;if(window.postMessage){if(window.addEventListener){b=function(i){window.addEventListener("message",i,false)};h=function(i){window.removeEventListener("message",i,false)}}else{b=function(i){window.attachEvent("onmessage",i)};h=function(i){window.detachEvent("onmessage",i)}}this[g]=function(i,k,j){if(!k){return}j.postMessage(i,k.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))};this[a]=function(k,j,i){if(e){h(e);e=null}if(!k){return false}e=b(function(l){switch(Object.prototype.toString.call(j)){case"[object String]":if(j!==l.origin){return false}break;case"[object Function]":if(j(l.origin)){return false}break}k(l)})}}else{this[g]=function(i,k,j){if(!k){return}j.location=k.replace(/#.*$/,"")+"#"+(+new Date)+(c++)+"&"+i};this[a]=function(k,j,i){if(d){clearInterval(d);d=null}if(k){i=typeof j==="number"?j:typeof i==="number"?i:100;d=setInterval(function(){var m=document.location.hash,l=/^#?\d+&/;if(m!==f&&l.test(m)){f=m;k({data:m.replace(l,"")})}},i)}}}return this};
\ No newline at end of file
+function NoJQueryPostMessageMixin(n,e){var t,i,o,s,a,r=1;return window.postMessage?(window.addEventListener?(t=function(n){window.addEventListener("message",n,!1)},i=function(n){window.removeEventListener("message",n,!1)}):(t=function(n){window.attachEvent("onmessage",n)},i=function(n){window.detachEvent("onmessage",n)}),this[n]=function(n,e,t){e&&t.postMessage(n,e.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))},this[e]=function(n,e,s){return o&&(i(o),o=null),!!n&&void(o=t(function(t){switch(Object.prototype.toString.call(e)){case"[object String]":if(e!==t.origin)return!1;break;case"[object Function]":if(e(t.origin))return!1}n(t)}))}):(this[n]=function(n,e,t){e&&(t.location=e.replace(/#.*$/,"")+"#"+ +new Date+r++ +"&"+n)},this[e]=function(n,e,t){s&&(clearInterval(s),s=null),n&&(t="number"==typeof e?e:"number"==typeof t?t:100,s=setInterval(function(){var e=document.location.hash,t=/^#?\d+&/;e!==a&&t.test(e)&&(a=e,n({data:e.replace(t,"")}))},t))}),this}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.js b/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.js
index ad0c83979240368800964f4c284dff6de2905dc0..9ec5d12ce3d175fdf1a9fe0412657219b9e8ee22 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.js
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.js
@@ -24,10 +24,13 @@
                         }
                     }
                 }, _base_url);
-            };
+            },
+            _hasParent = ('' !== _parent_url),
+            $window = $(window),
+            $html = $('html');
 
         return {
-            init : function (url)
+            init : function (url, iframes)
             {
                 _base_url = url;
                 _init();
@@ -36,6 +39,16 @@
                 FS.PostMessage.receiveOnce('forward', function (data){
                     window.location = data.url;
                 });
+
+                iframes = iframes || [];
+
+                if (iframes.length > 0) {
+                    $window.on('scroll', function () {
+                        for (var i = 0; i < iframes.length; i++) {
+                            FS.PostMessage.postScroll(iframes[i]);
+                        }
+                    });
+                }
             },
             init_child : function ()
             {
@@ -46,8 +59,14 @@
                 // Post height of a child right after window is loaded.
                 $(window).bind('load', function () {
                     FS.PostMessage.postHeight();
-                });
 
+                    // Post message that window was loaded.
+                    FS.PostMessage.post('loaded');
+                });
+            },
+            hasParent : function ()
+            {
+                return _hasParent;
             },
             postHeight : function (diff, wrapper) {
                 diff = diff || 0;
@@ -56,6 +75,12 @@
                     height: diff + $(wrapper).outerHeight(true)
                 });
             },
+            postScroll : function (iframe) {
+                this.post('scroll', {
+                    top: $window.scrollTop(),
+                    height: ($window.height() - parseFloat($html.css('paddingTop')) - parseFloat($html.css('marginTop')))
+                }, iframe);
+            },
             post : function (type, data, iframe)
             {
                 console.debug('PostMessage.post', type);
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.min.js b/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.min.js
index c433fd012c37b0ef9f4fd57ed7a2ec59d6e6d224..107dfb2ca2c3d4e0a302b7ef3ddda653560acf3b 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.min.js
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/js/postmessage.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2($,q){g c=6;c.9=c.9||{};c.9.a=2(){g x=Q,d=P O(\'m\',\'C\'),4={},n,5=R(N.w.U.T(/^#/,\'\')),s=5.B(0,5.V(\'/\',(\'z://\'===5.B(0,(\'z://\').F))?8:7)),J=2(){d.C(2(e){g 3=r.M(e.3);l(4[3.1]){L(g i=0;i<4[3.1].F;i++){4[3.1][i](3.3)}}},n)};b{H:2(o){n=o;J();9.a.y(\'15\',2(3){t.w=3.o})},16:2(){6.H(s);x=I;$(t).W(\'12\',2(){9.a.A()})},A:2(j,h){j=j||0;h=h||\'#Z\';6.p(\'v\',{v:j+$(h).11(I)})},p:2(1,3,f){K.G(\'a.p\',1);l(f){d.m(r.E({1:1,3:3}),f.18,f.X)}13{d.m(r.E({1:1,3:3}),5,t.17)}},u:2(1,k){K.G(\'a.u\',1);l(q===4[1])4[1]=[];4[1].14(k)},y:2(1,k){l(6.D(1))b;6.u(1,k)},D:2(1){b(q!=4[1])},Y:2(){b 5},S:2(){b s}}}()})(10);',62,71,'|type|function|data|_callbacks|_parent_url|this|||FS|PostMessage|return|global|_postman||iframe|var|wrapper||diff|callback|if|postMessage|_base_url|url|post|undef|JSON|_parent_subdomain|window|receive|height|location|_is_child|receiveOnce|https|postHeight|substring|receiveMessage|is_set|stringify|length|debug|init|true|_init|console|for|parse|document|NoJQueryPostMessageMixin|new|false|decodeURIComponent|parent_subdomain|replace|hash|indexOf|bind|contentWindow|parent_url|wrap_section|jQuery|outerHeight|load|else|push|forward|init_child|parent|src'.split('|'),0,{}))
+!function(t,e){var s=this;s.FS=s.FS||{},s.FS.PostMessage=function(){var s,n=!1,o=new NoJQueryPostMessageMixin("postMessage","receiveMessage"),i={},r=decodeURIComponent(document.location.hash.replace(/^#/,"")),a=r.substring(0,r.indexOf("/","https://"===r.substring(0,"https://".length)?8:7)),c=function(){o.receiveMessage(function(t){var e=JSON.parse(t.data);if(i[e.type])for(var s=0;s<i[e.type].length;s++)i[e.type][s](e.data)},s)},u=""!==r,p=t(window),g=t("html");return{init:function(t,e){s=t,c(),FS.PostMessage.receiveOnce("forward",function(t){window.location=t.url}),e=e||[],e.length>0&&p.on("scroll",function(){for(var t=0;t<e.length;t++)FS.PostMessage.postScroll(e[t])})},init_child:function(){this.init(a),n=!0,t(window).bind("load",function(){FS.PostMessage.postHeight(),FS.PostMessage.post("loaded")})},hasParent:function(){return u},postHeight:function(e,s){e=e||0,s=s||"#wrap_section",this.post("height",{height:e+t(s).outerHeight(!0)})},postScroll:function(t){this.post("scroll",{top:p.scrollTop(),height:p.height()-parseFloat(g.css("paddingTop"))-parseFloat(g.css("marginTop"))},t)},post:function(t,e,s){console.debug("PostMessage.post",t),s?o.postMessage(JSON.stringify({type:t,data:e}),s.src,s.contentWindow):o.postMessage(JSON.stringify({type:t,data:e}),r,window.parent)},receive:function(t,s){console.debug("PostMessage.receive",t),e===i[t]&&(i[t]=[]),i[t].push(s)},receiveOnce:function(t,e){this.is_set(t)||this.receive(t,e)},is_set:function(t){return e!=i[t]},parent_url:function(){return r},parent_subdomain:function(){return a}}}()}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/_functions.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/_functions.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/_mixins.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/_mixins.scss
index 7c298dc0d6fcf67de0f72b075b158f0c9cc7bc92..5a6a192b0df246f2f1d4aac2a6686bd7a42c11fd 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/_mixins.scss
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/_mixins.scss
@@ -200,14 +200,6 @@ $useIEFilters: 0;
     filter: alpha(opacity=$opacity-ie); //IE8
 }
 
-@mixin sprite($img, $width, $height: $width, $display: block)
-{
-    display: $display;
-    background-image: url('#{$img}');
-
-    @include size($width, $height);
-}
-
 @mixin size($width, $height: $width)
 {
     width: $width;
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_deactivation-feedback.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_deactivation-feedback.scss
new file mode 100644
index 0000000000000000000000000000000000000000..b1672668e667dcdcb37cf866d3ab37a31fa9bc92
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_deactivation-feedback.scss
@@ -0,0 +1,55 @@
+@import "../colors";
+
+.fs-modal.fs-modal-deactivation-feedback {
+	.reason-input, .internal-message {
+		margin:	3px 0 3px 22px;
+
+		input, textarea {
+			width: 100%;
+		}
+	}
+
+	li.reason {
+		&.has-internal-message .internal-message {
+			border: 1px solid lighten($darkest-color, 80%);
+			padding: 7px;
+			display: none;
+		}
+
+		@media (max-width: 650px) {
+			li.reason {
+				margin-bottom: 10px;
+
+				.reason-input, .internal-message {
+					margin-left: 29px;
+				}
+
+				label {
+					display: table;
+
+					> span {
+						display: table-cell;
+						font-size: 1.3em;
+					}
+				}
+			}
+		}
+	}
+
+	.anonymous-feedback-label {
+		float: left;
+	}
+
+    .fs-modal-panel {
+        margin-top: 0 !important;
+
+        h3 {
+            margin-top: 0;
+            line-height: 1.5em;
+        }
+    }
+}
+
+#the-list .deactivate > .fs-slug {
+	display: none;
+}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_license-activation.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_license-activation.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2eb8accee645374bfe4e38d83bf92e4985d07669
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_license-activation.scss
@@ -0,0 +1,7 @@
+.fs-modal.fs-modal-license-activation {
+	.fs-modal-body {
+		input.license_key {
+			width: 100%;
+		}
+	}
+}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_license-key-resend.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_license-key-resend.scss
new file mode 100644
index 0000000000000000000000000000000000000000..5dc64cca3640b9e039066e26605c02dcc3e121c6
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_license-key-resend.scss
@@ -0,0 +1,44 @@
+.fs-modal.fs-modal-license-key-resend {
+	.fs-modal-body {
+		.input-container > .email-address-container {
+			overflow: hidden;
+			padding-right: 2px;
+		}
+
+		input.email-address {
+			width: 100%;
+		}
+
+		.button-container {
+			float: right;
+			margin-left: 7px;
+
+			@media (max-width: 650px) {
+				margin-top: 2px;
+			}
+		}
+	}
+}
+
+.rtl
+{
+    .fs-modal.fs-modal-license-key-resend {
+        .fs-modal-body {
+            .input-container > .email-address-container {
+                padding-left: 2px;
+                padding-right: 0;
+            }
+
+            .button-container {
+                float: left;
+                margin-right: 7px;
+                margin-left: 0;
+            }
+        }
+    }
+}
+
+a.show-license-resend-modal {
+	margin-top: 4px;
+	display: inline-block;
+}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_modal-common.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_modal-common.scss
new file mode 100644
index 0000000000000000000000000000000000000000..329390c087e225137e4fa46c5899e0cbda167ce9
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/_modal-common.scss
@@ -0,0 +1,153 @@
+@import "../colors";
+@import "../mixins";
+
+.fs-modal {
+	position: fixed;
+	overflow: auto;
+	height: 100%;
+	width: 100%;
+	top: 0;
+	z-index: 100000;
+	display: none;
+	background: rgba(0, 0, 0, 0.6);
+
+	.fs-modal-dialog {
+		background: transparent;
+		position: absolute;
+		left: 50%;
+		margin-left: -298px;
+		padding-bottom: 30px;
+		top: -100%;
+		z-index: 100001;
+		width: 596px;
+
+		@media (max-width: 650px) {
+			margin-left: -50%;
+			box-sizing: border-box;
+			padding-left: 10px;
+			padding-right: 10px;
+			width: 100%;
+
+			.fs-modal-panel > h3 > strong {
+				font-size: 1.3em;
+			}
+		}
+	}
+
+	&.active {
+		display: block;
+
+		&:before {
+			display: block;
+		}
+
+		.fs-modal-dialog {
+			top: 10%;
+		}
+	}
+
+	.fs-modal-body,
+	.fs-modal-footer {
+		border: 0;
+		background: #fefefe;
+		padding: 20px;
+	}
+
+    .fs-modal-header {
+        border-bottom: #eeeeee solid 1px;
+        background: #fbfbfb;
+        padding: 15px 20px;
+        position: relative;
+//        z-index: 2;
+
+        h4 {
+            margin: 0;
+            padding: 0;
+            text-transform: uppercase;
+            font-size: 1.2em;
+            font-weight: bold;
+            color: #cacaca;
+            text-shadow: 1px 1px 1px #fff;
+            letter-spacing: 0.6px;
+            -webkit-font-smoothing: antialiased;
+        }
+
+        .fs-close {
+            position: absolute;
+            right: 10px;
+            top: 12px;
+            cursor: pointer;
+            color: #bbb;
+            @include border-radius(20px);
+            padding: 3px;
+            @include transition(all 0.2s ease-in-out);
+
+            &:hover {
+                color: #fff;
+                background: #aaa;
+            }
+        }
+    }
+
+	.fs-modal-body {
+		border-bottom: 0;
+
+		p {
+			font-size: 14px;
+		}
+
+		h2 {
+			font-size: 20px;
+		}
+
+		> div {
+			margin-top: 10px;
+
+			h2 {
+				font-weight: bold;
+				font-size: 20px;
+				margin-top: 0;
+			}
+		}
+	}
+
+	.fs-modal-footer {
+		border-top: #eeeeee solid 1px;
+		text-align: right;
+
+		> .button {
+			margin: 0 7px;
+
+			&:first-child {
+				margin: 0;
+			}
+		}
+	}
+
+	.fs-modal-panel {
+		> .notice.inline {
+			margin: 0;
+			display: none;
+		}
+
+		&:not(.active) {
+			display: none;
+		}
+	}
+}
+
+.rtl
+{
+    .fs-modal {
+        .fs-modal-header {
+            .fs-close {
+                right: auto;
+                left: 20px;
+            }
+        }
+    }
+}
+
+body.has-fs-modal {
+	overflow: hidden;
+}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/account.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/account.scss
index ecd24963b9b4b141167eca31315a1881e3da2468..f828c5ccb78bbe04277fdfc0e08d0c32408036b6 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/account.scss
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/account.scss
@@ -1,171 +1,184 @@
-#fs_account
-{
-    .postbox,
-    .widefat
-    {
-        max-width: 700px;
-    }
-
-    h3
-    {
-        font-size: 1.3em;
-        padding: 12px 15px;
-        margin: 0 0 12px 0;
-        line-height: 1.4;
-        border-bottom: 1px solid #F1F1F1;
-    }
-
-    i.dashicons
-    {
-        font-size: 1.2em;
-        height: 1.2em;
-        width: 1.2em;
-    }
-
-    .button
-    {
-        i.dashicons
-        {
-            vertical-align: middle;
-        }
-    }
-
-    .fs-header-actions
-    {
-        position: absolute;
-        top: 17px;
-        right: 15px;
-        font-size: 0.9em;
-
-        ul
-        {
-            margin: 0;
-        }
-
-        li
-        {
-            form
-            {
-                display: inline-block;
-            }
-
-            float: left;
-            a
-            {
-                text-decoration: none;
-            }
-        }
-    }
-}
-
-.rtl #fs_account .fs-header-actions
-{
-    left: 15px;
-    right: auto;
-}
-
-.fs-key-value-table
-{
-    width: 100%;
-
-    form
-    {
-        display: inline-block;
-    }
-
-    tr
-    {
-        td:first-child
-        {
-            nobr
-            {
-                font-weight: bold;
-            }
-
-            text-align: right;
-
-            form
-            {
-                display: block;
-            }
-        }
-
-        td.fs-right
-        {
-            text-align: right;
-        }
-
-        &.fs-odd
-        {
-            background: #ebebeb;
-        }
-    }
-
-    td, th
-    {
-        padding: 10px;
-    }
-
-    var, code
-    {
-        color: #0073AA;
-        font-size: 16px;
-        background: none;
-    }
-}
-
-label.fs-tag
-{
-    background: #ffba00;
-    color: #fff;
-    display: inline-block;
-    border-radius: 3px;
-    padding: 5px;
-    font-size: 11px;
-    line-height: 11px;
-    vertical-align: baseline;
-
-    &.fs-warn
-    {
-        background: #ffba00;
-    }
-    &.fs-success
-    {
-        background: #46b450;
-    }
-    &.fs-error
-    {
-        background: #dc3232;
-    }
-}
-
-#fs_addons
-{
-    h3
-    {
-        border: none;
-        margin-bottom: 0;
-        padding: 4px 5px;
-    }
-
-    td
-    {
-        vertical-align: middle;
-    }
-
-    td:first-child,
-    th:first-child
-    {
-        text-align: left;
-        font-weight: bold;
-    }
-    td:last-child,
-    th:last-child
-    {
-        text-align: right;
-    }
-    th
-    {
-        font-weight: bold;
-    }
+#fs_account
+{
+    .postbox,
+    .widefat
+    {
+        max-width: 700px;
+    }
+
+    h3
+    {
+        font-size: 1.3em;
+        padding: 12px 15px;
+        margin: 0 0 12px 0;
+        line-height: 1.4;
+        border-bottom: 1px solid #F1F1F1;
+    }
+
+    i.dashicons
+    {
+        font-size: 1.2em;
+        height: 1.2em;
+        width: 1.2em;
+    }
+
+    .button
+    {
+        i.dashicons
+        {
+            vertical-align: middle;
+        }
+    }
+
+    .fs-header-actions
+    {
+        position: absolute;
+        top: 17px;
+        right: 15px;
+        font-size: 0.9em;
+
+        ul
+        {
+            margin: 0;
+        }
+
+        li
+        {
+            form
+            {
+                display: inline-block;
+            }
+
+            float: left;
+            a
+            {
+                text-decoration: none;
+            }
+        }
+    }
+}
+
+#fs_account_details .button-group {
+    float: right;
+}
+
+.rtl #fs_account .fs-header-actions
+{
+    left: 15px;
+    right: auto;
+}
+
+.fs-key-value-table
+{
+    width: 100%;
+
+    form
+    {
+        display: inline-block;
+    }
+
+    tr
+    {
+        td:first-child
+        {
+            nobr
+            {
+                font-weight: bold;
+            }
+
+            text-align: right;
+
+            form
+            {
+                display: block;
+            }
+        }
+
+        td.fs-right
+        {
+            text-align: right;
+        }
+
+        &.fs-odd
+        {
+            background: #ebebeb;
+        }
+    }
+
+    td, th
+    {
+        padding: 10px;
+    }
+
+    code {
+        line-height: 28px;
+    }
+
+    var, code, input[type="text"]
+    {
+        color: #0073AA;
+        font-size: 16px;
+        background: none;
+    }
+
+    input[type="text"] {
+        width: 100%;
+        font-weight: bold;
+    }
+}
+
+label.fs-tag
+{
+    background: #ffba00;
+    color: #fff;
+    display: inline-block;
+    border-radius: 3px;
+    padding: 5px;
+    font-size: 11px;
+    line-height: 11px;
+    vertical-align: baseline;
+
+    &.fs-warn
+    {
+        background: #ffba00;
+    }
+    &.fs-success
+    {
+        background: #46b450;
+    }
+    &.fs-error
+    {
+        background: #dc3232;
+    }
+}
+
+#fs_addons
+{
+    h3
+    {
+        border: none;
+        margin-bottom: 0;
+        padding: 4px 5px;
+    }
+
+    td
+    {
+        vertical-align: middle;
+    }
+
+    td:first-child,
+    th:first-child
+    {
+        text-align: left;
+        font-weight: bold;
+    }
+    td:last-child,
+    th:last-child
+    {
+        text-align: right;
+    }
+    th
+    {
+        font-weight: bold;
+    }
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/add-ons.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/add-ons.scss
index e744ff6da27e49fec1805bbfc90219ed9192b64a..f1636cdef00aad685eba7481c269bc630fde0b9d 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/add-ons.scss
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/add-ons.scss
@@ -1,449 +1,449 @@
-@import "../start";
-
-#fs_addons
-{
-    .fs-cards-list
-    {
-        list-style: none;
-
-        .fs-card
-        {
-            float:      left;
-            //            height: 185px; // With reviews/ratings
-            height:     152px;
-            width:      310px;
-            padding:    0;
-            margin:     0 0 30px 30px;
-            font-size:  14px;
-            list-style: none;
-            border:     1px solid #ddd;
-            cursor:     pointer;
-            position:   relative;
-
-            .fs-overlay
-            {
-                position: absolute;
-                left:     0;
-                right:    0;
-                bottom:   0;
-                top:      0;
-                z-index:  9;
-            }
-
-            .fs-inner
-            {
-                background-color: #fff;
-                overflow:         hidden;
-                height:           100%;
-                position:         relative;
-
-                ul
-                {
-                    @include transition(all, 0.15s);
-                    left:     0;
-                    right:    0;
-                    top:      0;
-                    position: absolute;
-                }
-
-                li
-                {
-                    list-style:  none;
-                    line-height: 18px;
-                    padding:     0 15px;
-                    width:       100%;
-                    display:     block;
-                    @include box-sizing(border-box);
-                }
-
-                .fs-card-banner
-                {
-                    padding:           0;
-                    margin:            0;
-                    line-height:       0;
-                    display:           block;
-                    height:            100px;
-                    background-repeat: repeat-x;
-                    background-size:   100% 100%;
-                    @include transition(all, 0.15s);
-                }
-
-                .fs-title
-                {
-                    margin:        10px 0 0 0;
-                    height:        18px;
-                    overflow:      hidden;
-                    color:         #000;
-                    white-space:   nowrap;
-                    text-overflow: ellipsis;
-                    font-weight:   bold;
-                }
-
-                .fs-offer
-                {
-                    font-size: 0.9em;
-                }
-
-                .fs-description
-                {
-                    background-color: #f9f9f9;
-                    padding:          10px 15px 100px 15px;
-                    border-top:       1px solid #eee;
-                    margin:           0 0 10px 0;
-                    color:            #777;
-                }
-
-                .fs-tag
-                {
-                    position: absolute;
-                    top: 10px;
-                    right: 0px;
-                    background: greenyellow;
-                    display: block;
-                    padding: 2px 10px;
-                    @include box-shadow(1px 1px 1px rgba(0,0,0,0.3));
-                    text-transform: uppercase;
-                    font-size: 0.9em;
-                    font-weight: bold;
-                }
-
-                .fs-cta
-                {
-                    .button
-                    {
-                        position: absolute;
-                        top: 112px;
-                        right: 10px;
-                    }
-                }
-            }
-
-            @media screen and (min-width: 960px) {
-                &:hover
-                {
-                    .fs-overlay
-                    {
-                        border:      2px solid $fms-link-color;
-                        margin-left: -1px;
-                        margin-top:  -1px;
-                    }
-
-                    .fs-inner
-                    {
-                        ul
-                        {
-                            top: -100px;
-                        }
-
-                        .fs-card-banner
-                        {
-                            //                        background-position: 50% -100px;
-                        }
-
-                        .fs-title,
-                        .fs-offer
-                        {
-                            color: $fms-link-color;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-#TB_window
-{
-    &, iframe
-    {
-        width: 772px !important;
-    }
-}
-
-#plugin-information
-{
-    #section-description
-    {
-        h2, h3, p, b, i, blockquote, li, ul, ol
-        {
-            clear: none;
-        }
-
-        .fs-selling-points
-        {
-            padding-bottom: 10px;
-            border-bottom:  1px solid #ddd;
-
-            ul
-            {
-                margin: 0;
-
-                li
-                {
-                    padding:    0;
-                    list-style: none outside none;
-
-                    i.dashicons
-                    {
-                        color:          $fs-logo-green-color;
-                        font-size:      3em;
-                        vertical-align: middle;
-                        line-height:    30px;
-                        float:          left;
-                        margin:         0 0 0 -15px;
-                    }
-
-                    h3
-                    {
-                        margin: 1em 30px !important;
-                    }
-                }
-            }
-        }
-
-        .fs-screenshots
-        {
-            @include clearfix();
-            ul
-            {
-                list-style: none;
-                margin:     0;
-
-                li
-                {
-                    width:         225px;
-                    height:        225px;
-                    float:         left;
-                    margin-bottom: 20px;
-                    @include box-sizing(content-box);
-
-                    a
-                    {
-                        display:         block;
-                        width:           100%;
-                        height:          100%;
-                        border:          1px solid;
-                        @include box-shadow(1px 1px 1px rgba(0, 0, 0, 0.2));
-                        background-size: cover;
-                    }
-
-                    &.odd
-                    {
-                        margin-right: 20px;
-                    }
-                }
-            }
-        }
-    }
-
-    .plugin-information-pricing
-    {
-        $pricing_color: #FFFEEC;
-        $borders_color: #DDD;
-        margin:        -16px;
-        //        padding: 20px;
-        border-bottom: 1px solid $borders_color;
-
-        .fs-plan
-        {
-
-            h3
-            {
-                margin-top: 0;
-                padding:    20px;
-                font-size:  16px;
-            }
-
-            .nav-tab-wrapper
-            {
-                border-bottom: 1px solid $borders_color;
-
-                .nav-tab
-                {
-                    cursor:    pointer;
-                    position:  relative;
-                    padding:   0 10px;
-                    font-size: 0.9em;
-
-                    label
-                    {
-                        text-transform: uppercase;
-                        color:          green;
-                        background:     greenyellow;
-                        position:       absolute;
-                        left:           -1px;
-                        right:          -1px;
-                        bottom:         100%;
-                        border:         1px solid darkgreen;
-                        padding:        2px;
-                        text-align:     center;
-                        font-size:      0.9em;
-                        line-height:    1em;
-                    }
-
-                    &.nav-tab-active
-                    {
-                        cursor:              default;
-                        background:          $pricing_color;
-                        border-bottom-color: $pricing_color;
-                    }
-                }
-            }
-
-            &.fs-single-cycle
-            {
-                h3
-                {
-                    background:     $pricing_color;
-                    margin:         0;
-                    padding-bottom: 0;
-                    color:          #0073aa;
-                }
-
-                .nav-tab-wrapper,
-                .fs-billing-frequency
-                {
-                    display: none;
-                }
-            }
-
-            .fs-pricing-body
-            {
-                background: $pricing_color;
-                padding:    20px;
-            }
-
-            .button
-            {
-                width:          100%;
-                text-align:     center;
-                font-weight:    bold;
-                text-transform: uppercase;
-                font-size:      1.1em;
-            }
-
-            label
-            {
-                white-space: nowrap;
-            }
-
-            var {
-                font-style: normal;
-            }
-
-            .fs-billing-frequency,
-            .fs-annual-discount
-            {
-                text-align: center;
-                display: block;
-                font-weight: bold;
-                margin-bottom: 10px;
-                text-transform: uppercase;
-                background: #F3F3F3;
-                padding: 2px;
-                border: 1px solid #ccc;
-            }
-
-            .fs-annual-discount
-            {
-                text-transform: none;
-                color:          green;
-                background:     greenyellow;
-            }
-
-            ul.fs-trial-terms
-            {
-                font-size: 0.9em;
-
-                i
-                {
-                    float:  left;
-                    margin: 0 0 0 -15px;
-                }
-
-                li
-                {
-                    margin: 10px 0 0 0;
-                }
-            }
-        }
-    }
-
-    #section-features
-    {
-        .fs-features
-        {
-            margin: -20px -26px;
-        }
-
-        table
-        {
-            width:           100%;
-            border-spacing:  0;
-            border-collapse: separate;
-
-            thead
-            {
-                th
-                {
-                    padding: 10px 0;
-                }
-
-                .fs-price
-                {
-                    color:       $fs-logo-green-color;
-                    font-weight: normal;
-                    display:     block;
-                    text-align:  center;
-                }
-            }
-
-            tbody
-            {
-                td
-                {
-                    border-top: 1px solid #ccc;
-                    padding:    10px 0;
-                    text-align: center;
-                    width:      100px;
-                    color:      $fs-logo-green-color;
-
-                    &:first-child
-                    {
-                        text-align:   left;
-                        width:        auto;
-                        color:        inherit;
-                        padding-left: 26px;
-                    }
-                }
-                tr.fs-odd
-                {
-                    td
-                    {
-                        background: #fefefe;
-                    }
-                }
-            }
-        }
-
-        .dashicons-yes
-        {
-            width:     30px;
-            height:    30px;
-            font-size: 30px;
-        }
-    }
-}
-
-@media screen and (max-width: 961px) {
-    #fs_addons
-    {
-        .fs-cards-list
-        {
-            .fs-card
-            {
-                height: 265px;
-            }
-        }
-    }
+@import "../start";
+
+#fs_addons
+{
+    .fs-cards-list
+    {
+        list-style: none;
+
+        .fs-card
+        {
+            float:      left;
+            //            height: 185px; // With reviews/ratings
+            height:     152px;
+            width:      310px;
+            padding:    0;
+            margin:     0 0 30px 30px;
+            font-size:  14px;
+            list-style: none;
+            border:     1px solid #ddd;
+            cursor:     pointer;
+            position:   relative;
+
+            .fs-overlay
+            {
+                position: absolute;
+                left:     0;
+                right:    0;
+                bottom:   0;
+                top:      0;
+                z-index:  9;
+            }
+
+            .fs-inner
+            {
+                background-color: #fff;
+                overflow:         hidden;
+                height:           100%;
+                position:         relative;
+
+                ul
+                {
+                    @include transition(all, 0.15s);
+                    left:     0;
+                    right:    0;
+                    top:      0;
+                    position: absolute;
+                }
+
+                li
+                {
+                    list-style:  none;
+                    line-height: 18px;
+                    padding:     0 15px;
+                    width:       100%;
+                    display:     block;
+                    @include box-sizing(border-box);
+                }
+
+                .fs-card-banner
+                {
+                    padding:           0;
+                    margin:            0;
+                    line-height:       0;
+                    display:           block;
+                    height:            100px;
+                    background-repeat: repeat-x;
+                    background-size:   100% 100%;
+                    @include transition(all, 0.15s);
+                }
+
+                .fs-title
+                {
+                    margin:        10px 0 0 0;
+                    height:        18px;
+                    overflow:      hidden;
+                    color:         #000;
+                    white-space:   nowrap;
+                    text-overflow: ellipsis;
+                    font-weight:   bold;
+                }
+
+                .fs-offer
+                {
+                    font-size: 0.9em;
+                }
+
+                .fs-description
+                {
+                    background-color: #f9f9f9;
+                    padding:          10px 15px 100px 15px;
+                    border-top:       1px solid #eee;
+                    margin:           0 0 10px 0;
+                    color:            #777;
+                }
+
+                .fs-tag
+                {
+                    position: absolute;
+                    top: 10px;
+                    right: 0px;
+                    background: greenyellow;
+                    display: block;
+                    padding: 2px 10px;
+                    @include box-shadow(1px 1px 1px rgba(0,0,0,0.3));
+                    text-transform: uppercase;
+                    font-size: 0.9em;
+                    font-weight: bold;
+                }
+
+                .fs-cta
+                {
+                    .button
+                    {
+                        position: absolute;
+                        top: 112px;
+                        right: 10px;
+                    }
+                }
+            }
+
+            @media screen and (min-width: 960px) {
+                &:hover
+                {
+                    .fs-overlay
+                    {
+                        border:      2px solid $fms-link-color;
+                        margin-left: -1px;
+                        margin-top:  -1px;
+                    }
+
+                    .fs-inner
+                    {
+                        ul
+                        {
+                            top: -100px;
+                        }
+
+                        .fs-card-banner
+                        {
+                            //                        background-position: 50% -100px;
+                        }
+
+                        .fs-title,
+                        .fs-offer
+                        {
+                            color: $fms-link-color;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+#TB_window
+{
+    &, iframe
+    {
+        width: 772px !important;
+    }
+}
+
+#plugin-information
+{
+    #section-description
+    {
+        h2, h3, p, b, i, blockquote, li, ul, ol
+        {
+            clear: none;
+        }
+
+        .fs-selling-points
+        {
+            padding-bottom: 10px;
+            border-bottom:  1px solid #ddd;
+
+            ul
+            {
+                margin: 0;
+
+                li
+                {
+                    padding:    0;
+                    list-style: none outside none;
+
+                    i.dashicons
+                    {
+                        color:          $fs-logo-green-color;
+                        font-size:      3em;
+                        vertical-align: middle;
+                        line-height:    30px;
+                        float:          left;
+                        margin:         0 0 0 -15px;
+                    }
+
+                    h3
+                    {
+                        margin: 1em 30px !important;
+                    }
+                }
+            }
+        }
+
+        .fs-screenshots
+        {
+            @include clearfix();
+            ul
+            {
+                list-style: none;
+                margin:     0;
+
+                li
+                {
+                    width:         225px;
+                    height:        225px;
+                    float:         left;
+                    margin-bottom: 20px;
+                    @include box-sizing(content-box);
+
+                    a
+                    {
+                        display:         block;
+                        width:           100%;
+                        height:          100%;
+                        border:          1px solid;
+                        @include box-shadow(1px 1px 1px rgba(0, 0, 0, 0.2));
+                        background-size: cover;
+                    }
+
+                    &.odd
+                    {
+                        margin-right: 20px;
+                    }
+                }
+            }
+        }
+    }
+
+    .plugin-information-pricing
+    {
+        $pricing_color: #FFFEEC;
+        $borders_color: #DDD;
+        margin:        -16px;
+        //        padding: 20px;
+        border-bottom: 1px solid $borders_color;
+
+        .fs-plan
+        {
+
+            h3
+            {
+                margin-top: 0;
+                padding:    20px;
+                font-size:  16px;
+            }
+
+            .nav-tab-wrapper
+            {
+                border-bottom: 1px solid $borders_color;
+
+                .nav-tab
+                {
+                    cursor:    pointer;
+                    position:  relative;
+                    padding:   0 10px;
+                    font-size: 0.9em;
+
+                    label
+                    {
+                        text-transform: uppercase;
+                        color:          green;
+                        background:     greenyellow;
+                        position:       absolute;
+                        left:           -1px;
+                        right:          -1px;
+                        bottom:         100%;
+                        border:         1px solid darkgreen;
+                        padding:        2px;
+                        text-align:     center;
+                        font-size:      0.9em;
+                        line-height:    1em;
+                    }
+
+                    &.nav-tab-active
+                    {
+                        cursor:              default;
+                        background:          $pricing_color;
+                        border-bottom-color: $pricing_color;
+                    }
+                }
+            }
+
+            &.fs-single-cycle
+            {
+                h3
+                {
+                    background:     $pricing_color;
+                    margin:         0;
+                    padding-bottom: 0;
+                    color:          #0073aa;
+                }
+
+                .nav-tab-wrapper,
+                .fs-billing-frequency
+                {
+                    display: none;
+                }
+            }
+
+            .fs-pricing-body
+            {
+                background: $pricing_color;
+                padding:    20px;
+            }
+
+            .button
+            {
+                width:          100%;
+                text-align:     center;
+                font-weight:    bold;
+                text-transform: uppercase;
+                font-size:      1.1em;
+            }
+
+            label
+            {
+                white-space: nowrap;
+            }
+
+            var {
+                font-style: normal;
+            }
+
+            .fs-billing-frequency,
+            .fs-annual-discount
+            {
+                text-align: center;
+                display: block;
+                font-weight: bold;
+                margin-bottom: 10px;
+                text-transform: uppercase;
+                background: #F3F3F3;
+                padding: 2px;
+                border: 1px solid #ccc;
+            }
+
+            .fs-annual-discount
+            {
+                text-transform: none;
+                color:          green;
+                background:     greenyellow;
+            }
+
+            ul.fs-trial-terms
+            {
+                font-size: 0.9em;
+
+                i
+                {
+                    float:  left;
+                    margin: 0 0 0 -15px;
+                }
+
+                li
+                {
+                    margin: 10px 0 0 0;
+                }
+            }
+        }
+    }
+
+    #section-features
+    {
+        .fs-features
+        {
+            margin: -20px -26px;
+        }
+
+        table
+        {
+            width:           100%;
+            border-spacing:  0;
+            border-collapse: separate;
+
+            thead
+            {
+                th
+                {
+                    padding: 10px 0;
+                }
+
+                .fs-price
+                {
+                    color:       $fs-logo-green-color;
+                    font-weight: normal;
+                    display:     block;
+                    text-align:  center;
+                }
+            }
+
+            tbody
+            {
+                td
+                {
+                    border-top: 1px solid #ccc;
+                    padding:    10px 0;
+                    text-align: center;
+                    width:      100px;
+                    color:      $fs-logo-green-color;
+
+                    &:first-child
+                    {
+                        text-align:   left;
+                        width:        auto;
+                        color:        inherit;
+                        padding-left: 26px;
+                    }
+                }
+                tr.fs-odd
+                {
+                    td
+                    {
+                        background: #fefefe;
+                    }
+                }
+            }
+        }
+
+        .dashicons-yes
+        {
+            width:     30px;
+            height:    30px;
+            font-size: 30px;
+        }
+    }
+}
+
+@media screen and (max-width: 961px) {
+    #fs_addons
+    {
+        .fs-cards-list
+        {
+            .fs-card
+            {
+                height: 265px;
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/common.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/common.scss
index a8edf586f14a9ae4e8a97999b71ad17eea623157..bc42de1d3360d0fdfc9a42385cdd3657c68a62d5 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/common.scss
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/common.scss
@@ -1,134 +1,140 @@
-@import "../start";
-
-.fs-notice
-{
-    position: relative;
-
-    &.fs-has-title
-    {
-        margin-bottom: 30px !important;
-    }
-
-    &.success
-    {
-        color: green;
-        //        font-weight: normal;
-    }
-
-    &.promotion
-    {
-        border-color:     $fs-notice-promotion-border-color !important;
-        background-color: $fs-notice-promotion-bkg !important;
-    }
-
-    .fs-notice-body
-    {
-        margin:  .5em 0;
-        padding: 2px;
-    }
-
-    .fs-close
-    {
-        //        position:      absolute;
-        //        top:           2px;
-        //        bottom:        2px;
-        //        right:         2px;
-        //        min-width:     100px;
-        //        text-align:    center;
-        //        padding-right: 2px;
-        cursor: pointer;
-        color:  #aaa;
-        float:  right;
-
-        &:hover
-        {
-            color: #666;
-            //            background: #A9A9A9;
-        }
-
-        > *
-        {
-            margin-top: 7px;
-            display:    inline-block;
-        }
-    }
-
-    label.fs-plugin-title
-    {
-        background:  rgba(0, 0, 0, 0.3);
-        color:       #fff;
-        padding:     2px 10px;
-        position:    absolute;
-        top:         100%;
-        bottom:      auto;
-        right:       auto;
-        @include border-radius(0 0 3px 3px);
-        left:        10px;
-        font-size:   12px;
-        font-weight: bold;
-        cursor:      auto;
-    }
-}
-
-.rtl .fs-notice
-{
-    .fs-close
-    {
-        //        left:          2px;
-        //        right:         auto;
-        //        padding-right: 0;
-        //        padding-left:  2px;
-        float: left;
-    }
-}
-
-.fs-secure-notice
-{
-    position:   fixed;
-    top:        32px;
-    left:       160px;
-    right:      0;
-    background: rgb(235, 253, 235);
-    padding:    10px 20px;
-    color:      green;
-    z-index:    9999;
-    box-shadow: 0px 2px 2px rgba(6, 113, 6, 0.3);
-    @include opacity(0.95);
-
-    &:hover
-    {
-        @include opacity(1);
-    }
-}
-
-@media screen and (max-width: 960px) {
-    .fs-secure-notice
-    {
-        left: 36px;
-    }
-}
-
-@media screen and (max-width: 782px) {
-    .fs-secure-notice
-    {
-        left:       0;
-        top:        46px;
-        text-align: center;
-    }
-}
-
-span.fs-submenu-item.fs-sub:before
-{
-    // Add small arrow.
-    content: '\21B3';
-    padding: 0 5px;
-}
-
-.rtl
-{
-    span.fs-submenu-item.fs-sub:before
-    {
-        // Add small RTL arrow.
-        content: '\21B2';
-    }
+@import "../start";
+
+.fs-notice
+{
+    position: relative;
+
+    &.fs-has-title
+    {
+        margin-bottom: 30px !important;
+    }
+
+    &.success
+    {
+        color: green;
+        //        font-weight: normal;
+    }
+
+    &.promotion
+    {
+        border-color:     $fs-notice-promotion-border-color !important;
+        background-color: $fs-notice-promotion-bkg !important;
+    }
+
+    .fs-notice-body
+    {
+        margin:  .5em 0;
+        padding: 2px;
+    }
+
+    .fs-close
+    {
+        //        position:      absolute;
+        //        top:           2px;
+        //        bottom:        2px;
+        //        right:         2px;
+        //        min-width:     100px;
+        //        text-align:    center;
+        //        padding-right: 2px;
+        cursor: pointer;
+        color:  #aaa;
+        float:  right;
+
+        &:hover
+        {
+            color: #666;
+            //            background: #A9A9A9;
+        }
+
+        > *
+        {
+            margin-top: 7px;
+            display:    inline-block;
+        }
+    }
+
+    label.fs-plugin-title
+    {
+        background:  rgba(0, 0, 0, 0.3);
+        color:       #fff;
+        padding:     2px 10px;
+        position:    absolute;
+        top:         100%;
+        bottom:      auto;
+        right:       auto;
+        @include border-radius(0 0 3px 3px);
+        left:        10px;
+        font-size:   12px;
+        font-weight: bold;
+        cursor:      auto;
+    }
+}
+
+.rtl .fs-notice
+{
+    .fs-close
+    {
+        //        left:          2px;
+        //        right:         auto;
+        //        padding-right: 0;
+        //        padding-left:  2px;
+        float: left;
+    }
+}
+
+.fs-secure-notice
+{
+    position:   fixed;
+    top:        32px;
+    left:       160px;
+    right:      0;
+    background: rgb(235, 253, 235);
+    padding:    10px 20px;
+    color:      green;
+    z-index:    9999;
+    box-shadow: 0px 2px 2px rgba(6, 113, 6, 0.3);
+    @include opacity(0.95);
+
+    &:hover
+    {
+        @include opacity(1);
+    }
+}
+
+@media screen and (max-width: 960px) {
+    .fs-secure-notice
+    {
+        left: 36px;
+    }
+}
+
+@media screen and (max-width:500px) {
+    #fs_promo_tab {
+        display: none;
+    }
+}
+
+@media screen and (max-width: 782px) {
+    .fs-secure-notice
+    {
+        left:       0;
+        top:        46px;
+        text-align: center;
+    }
+}
+
+span.fs-submenu-item.fs-sub:before
+{
+    // Add small arrow.
+    content: '\21B3';
+    padding: 0 5px;
+}
+
+.rtl
+{
+    span.fs-submenu-item.fs-sub:before
+    {
+        // Add small RTL arrow.
+        content: '\21B2';
+    }
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/connect.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/connect.scss
index 39f2d6920ce85d550876872dae2aacfb8ea25fd9..b8cf6cd83b882aa187b71ddc65cab60760d38898 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/connect.scss
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/connect.scss
@@ -19,6 +19,16 @@ $form_width: 480px;
         background: #fff;
         padding:    15px 20px;
 
+        .fs-error {
+            background: snow;
+            color: $fs-logo-magenta-color;
+            border: 1px solid $fs-logo-magenta-color;
+            @include box-shadow(0 1px 1px 0 rgba(0,0,0,.1));
+            text-align: center;
+            padding: 5px;
+            margin-bottom: 10px;
+        }
+
         p
         {
             margin:    0;
@@ -27,6 +37,22 @@ $form_width: 480px;
         }
     }
 
+    .fs-license-key-container {
+        position: relative;
+        width: 280px;
+        margin: 10px auto 0 auto;
+
+        input {
+            width: 100%;
+        }
+
+        .dashicons {
+            position: absolute;
+            top: 5px;
+            right: 5px;
+        }
+    }
+
     .fs-actions
     {
         padding:    10px 20px;
@@ -99,6 +125,11 @@ $form_width: 480px;
         //        background: #F1F1F1;
         @include transition(background 0.5s ease);
 
+        .fs-license-sync-disclaimer {
+            text-align: center;
+            margin-top: 0;
+        }
+
         .fs-trigger
         {
             font-size:       0.9em;
@@ -176,6 +207,25 @@ $form_width: 480px;
         }
     }
 
+    .fs-freemium-licensing {
+        padding: 8px;
+//        background: #0085BA;
+        background: #777;
+        color: #fff;
+
+        p {
+            text-align: center;
+            display: block;
+            margin: 0;
+            padding: 0;
+        }
+
+        a {
+            color: #C2EEFF;
+            text-decoration: underline;
+        }
+    }
+
     $icon_size: 80px;
     $wp_logo_padding: $icon_size / 10;
     $icons_top: 10px;
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/debug.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/debug.scss
index 1c3836d44754934dc994be69981e9e07a4c9eb36..f1ff001011e53a2ae3dd09134c837c1341a53b69 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/debug.scss
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/debug.scss
@@ -1,91 +1,91 @@
-@import "../start";
-
-.switch
-{
-    position:      relative;
-    display:       inline-block;
-    font-size:     1.6em;
-    font-weight:   bold;
-    color:         #ccc;
-    text-shadow:   0px 1px 1px rgba(255, 255, 255, 0.8);
-    height:        18px;
-    padding:       6px 6px 5px 6px;
-    border:        1px solid #ccc;
-    border:        1px solid rgba(0, 0, 0, 0.2);
-    border-radius: 4px;
-    background:    #ececec;
-    box-shadow:    0px 0px 4px rgba(0, 0, 0, 0.1), inset 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
-    cursor:        pointer;
-
-    span
-    {
-        display: inline-block; width: 35px;
-        text-transform: uppercase;
-
-        &.on
-        {
-            color: $button-primary-bkg;
-        }
-    }
-
-    .toggle
-    {
-        position:      absolute;
-        top:           1px;
-        width:         37px;
-        height:        25px;
-        border:        1px solid #ccc;
-        border:        1px solid rgba(0, 0, 0, 0.3);
-        border-radius: 4px;
-        background:    #fff;
-        background:    -moz-linear-gradient(top, #ececec 0%, #fff 100%);
-        background:    -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #fff));
-        background:    -webkit-linear-gradient(top, #ececec 0%, #fff 100%);
-        background:    -o-linear-gradient(top, #ececec 0%, #fff 100%);
-        background:    -ms-linear-gradient(top, #ececec 0%, #fff 100%);
-        background:    linear-gradient(top, #ececec 0%, #fff 100%);
-        box-shadow:    inset 0px 1px 0px 0px rgba(255, 255, 255, 0.5);
-        z-index:       999;
-        @include transition(all 0.15s ease-in-out);
-    }
-
-    &.on .toggle
-    {
-        left: 2%;
-    }
-    &.off .toggle
-    {
-        left: 54%;
-    }
-
-    /* Round switch */
-    &.round
-    {
-        padding:       0px 20px;
-        border-radius: 40px;
-
-        .toggle
-        {
-            border-radius: 40px;
-            width:         14px;
-            height:        14px;
-        }
-
-        &.on .toggle
-        {
-            left:       3%;
-            background: $button-primary-bkg;
-        }
-        &.off .toggle
-        {
-            left: 58%;
-        }
-    }
-}
-
-.switch-label
-{
-    font-size: 20px;
-    line-height: 31px;
-    margin: 0 5px;
+@import "../start";
+
+.switch
+{
+    position:      relative;
+    display:       inline-block;
+    font-size:     1.6em;
+    font-weight:   bold;
+    color:         #ccc;
+    text-shadow:   0px 1px 1px rgba(255, 255, 255, 0.8);
+    height:        18px;
+    padding:       6px 6px 5px 6px;
+    border:        1px solid #ccc;
+    border:        1px solid rgba(0, 0, 0, 0.2);
+    border-radius: 4px;
+    background:    #ececec;
+    box-shadow:    0px 0px 4px rgba(0, 0, 0, 0.1), inset 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
+    cursor:        pointer;
+
+    span
+    {
+        display: inline-block; width: 35px;
+        text-transform: uppercase;
+
+        &.on
+        {
+            color: $button-primary-bkg;
+        }
+    }
+
+    .toggle
+    {
+        position:      absolute;
+        top:           1px;
+        width:         37px;
+        height:        25px;
+        border:        1px solid #ccc;
+        border:        1px solid rgba(0, 0, 0, 0.3);
+        border-radius: 4px;
+        background:    #fff;
+        background:    -moz-linear-gradient(top, #ececec 0%, #fff 100%);
+        background:    -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #fff));
+        background:    -webkit-linear-gradient(top, #ececec 0%, #fff 100%);
+        background:    -o-linear-gradient(top, #ececec 0%, #fff 100%);
+        background:    -ms-linear-gradient(top, #ececec 0%, #fff 100%);
+        background:    linear-gradient(top, #ececec 0%, #fff 100%);
+        box-shadow:    inset 0px 1px 0px 0px rgba(255, 255, 255, 0.5);
+        z-index:       999;
+        @include transition(all 0.15s ease-in-out);
+    }
+
+    &.on .toggle
+    {
+        left: 2%;
+    }
+    &.off .toggle
+    {
+        left: 54%;
+    }
+
+    /* Round switch */
+    &.round
+    {
+        padding:       0px 20px;
+        border-radius: 40px;
+
+        .toggle
+        {
+            border-radius: 40px;
+            width:         14px;
+            height:        14px;
+        }
+
+        &.on .toggle
+        {
+            left:       3%;
+            background: $button-primary-bkg;
+        }
+        &.off .toggle
+        {
+            left: 58%;
+        }
+    }
+}
+
+.switch-label
+{
+    font-size: 20px;
+    line-height: 31px;
+    margin: 0 5px;
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/dialog-boxes.scss b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/dialog-boxes.scss
new file mode 100644
index 0000000000000000000000000000000000000000..8c6ac684f1dcf5af0bac883ea237968cc03d1fd4
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/assets/scss/admin/dialog-boxes.scss
@@ -0,0 +1,5 @@
+@import "../start";
+@import "modal-common";
+@import "deactivation-feedback";
+@import "license-activation";
+@import "license-key-resend";
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/config.php b/wp-content/plugins/nextgen-gallery/freemius/config.php
index eb8526aec1df5ad2bf261ec1cdc33607bfba0266..4c4504f9689d2c9dbae8bb43144cb6a4908aaf61 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/config.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/config.php
@@ -1,229 +1,229 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.4
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	define( 'WP_FS__SLUG', 'freemius' );
-	if ( ! defined( 'WP_FS__DEV_MODE' ) ) {
-		define( 'WP_FS__DEV_MODE', false );
-	}
-
-	/**
-	 * API Connectivity Simulation
-	 */
-	if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY' ) ) {
-		define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY', false );
-	}
-	if ( ! defined( 'WP_FS__SIMULATE_NO_CURL' ) ) {
-		define( 'WP_FS__SIMULATE_NO_CURL', false );
-	}
-	if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE' ) ) {
-		define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', false );
-	}
-	if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL' ) ) {
-		define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', false );
-	}
-	if ( WP_FS__SIMULATE_NO_CURL ) {
-		define( 'FS_SDK__SIMULATE_NO_CURL', true );
-	}
-	if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
-		define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', true );
-	}
-	if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
-		define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', true );
-	}
-
-	if ( ! defined( 'WP_FS__SIMULATE_FREEMIUS_OFF' ) ) {
-		define( 'WP_FS__SIMULATE_FREEMIUS_OFF', false );
-	}
-
-	if ( ! defined( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES' ) ) {
-		/**
-		 * @since  1.1.7.3
-		 * @author Vova Feldman (@svovaf)
-		 *
-		 * I'm not sure if shared servers periodically change IP, or the subdomain of the
-		 * admin dashboard. Also, I've seen sites that have strange loop of switching
-		 * between domains on a daily basis. Therefore, to eliminate the risk of
-		 * multiple unwanted connectivity test pings, temporary ignore domain or
-		 * server IP changes.
-		 */
-		define( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES', false );
-	}
-
-	/**
-	 * If your dev environment supports custom public network IP setup
-	 * like VVV, please update WP_FS__LOCALHOST_IP with your public IP
-	 * and uncomment it during dev.
-	 */
-	if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
-		// VVV default public network IP.
-		define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.4' );
-
-//		define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
-	}
-
-	/**
-	 * If true and running with secret key, the opt-in process
-	 * will skip the email activation process which is invoked
-	 * when the email of the context user already exist in Freemius
-	 * database (as a security precaution, to prevent sharing user
-	 * secret with unauthorized entity).
-	 *
-	 * IMPORTANT:
-	 *      AS A SECURITY PRECAUTION, WE VALIDATE THE TIMESTAMP OF THE OPT-IN REQUEST.
-	 *      THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
-	 *      CLOCK IS SYNCED.
-	 */
-	if ( ! defined( 'WP_FS__SKIP_EMAIL_ACTIVATION' ) ) {
-		define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
-	}
-
-
-	/**
-	 * Directories
-	 */
-	define( 'WP_FS__DIR', dirname( __FILE__ ) );
-	define( 'WP_FS__DIR_INCLUDES', WP_FS__DIR . '/includes' );
-	define( 'WP_FS__DIR_TEMPLATES', WP_FS__DIR . '/templates' );
-	define( 'WP_FS__DIR_ASSETS', WP_FS__DIR . '/assets' );
-	define( 'WP_FS__DIR_CSS', WP_FS__DIR_ASSETS . '/css' );
-	define( 'WP_FS__DIR_JS', WP_FS__DIR_ASSETS . '/js' );
-	define( 'WP_FS__DIR_IMG', WP_FS__DIR_ASSETS . '/img' );
-	define( 'WP_FS__DIR_SDK', WP_FS__DIR_INCLUDES . '/sdk' );
-
-
-	/**
-	 * Domain / URL / Address
-	 */
-	define( 'WP_FS__DOMAIN_PRODUCTION', 'wp.freemius.com' );
-	define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
-
-	if ( ! defined( 'WP_FS__DOMAIN_LOCALHOST' ) ) {
-		define( 'WP_FS__DOMAIN_LOCALHOST', 'wp.freemius' );
-	}
-	if ( ! defined( 'WP_FS__ADDRESS_LOCALHOST' ) ) {
-		define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
-	}
-
-	if ( ! defined( 'WP_FS__TESTING_DOMAIN' ) ) {
-		define( 'WP_FS__TESTING_DOMAIN', 'fswp' );
-	}
-
-	if ( ! defined( 'WP_FS__API_ADDRESS_LOCALHOST' ) ) {
-		define( 'WP_FS__API_ADDRESS_LOCALHOST', 'http://api.freemius:8080' );
-	}
-	if ( ! defined( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST' ) ) {
-		define( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST', 'http://sandbox-api.freemius:8080' );
-	}
-
-	define( 'WP_FS__IS_HTTP_REQUEST', isset( $_SERVER['HTTP_HOST'] ) );
-	define( 'WP_FS__REMOTE_ADDR', fs_get_ip() );
-
-	if ( ! defined( 'WP_FS__IS_PRODUCTION_MODE' ) ) {
-		// By default, run with Freemius production servers.
-		define( 'WP_FS__IS_PRODUCTION_MODE', true );
-	}
-
-	define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
-
-	if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
-		define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP === WP_FS__REMOTE_ADDR ) );
-	} else {
-		define( 'WP_FS__IS_LOCALHOST', WP_FS__IS_HTTP_REQUEST &&
-		                               is_string( WP_FS__REMOTE_ADDR ) &&
-		                               ( substr( WP_FS__REMOTE_ADDR, 0, 4 ) == '127.' ||
-		                                 WP_FS__REMOTE_ADDR == '::1' )
-		);
-	}
-
-	define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( ! WP_FS__IS_HTTP_REQUEST ||
-	                                            false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
-
-	// Set API address for local testing.
-	if ( ! WP_FS__IS_PRODUCTION_MODE ) {
-		define( 'FS_API__ADDRESS', WP_FS__API_ADDRESS_LOCALHOST );
-		define( 'FS_API__SANDBOX_ADDRESS', WP_FS__API_SANDBOX_ADDRESS_LOCALHOST );
-	}
-
-	define( 'WP_FS___OPTION_PREFIX', 'fs' . ( WP_FS__IS_PRODUCTION_MODE ? '' : '_dbg' ) . '_' );
-
-	if ( ! defined( 'WP_FS__ACCOUNTS_OPTION_NAME' ) ) {
-		define( 'WP_FS__ACCOUNTS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'accounts' );
-	}
-	if ( ! defined( 'WP_FS__API_CACHE_OPTION_NAME' ) ) {
-		define( 'WP_FS__API_CACHE_OPTION_NAME', WP_FS___OPTION_PREFIX . 'api_cache' );
-	}
-	define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
-
-	define( 'WP_FS__IS_HTTPS', ( WP_FS__IS_HTTP_REQUEST &&
-	                             // Checks if CloudFlare's HTTPS (Flexible SSL support)
-	                             isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) ||
-	                           // Check if HTTPS request.
-	                           ( isset( $_SERVER['HTTPS'] ) && 'on' == $_SERVER['HTTPS'] ) ||
-	                           ( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
-	);
-
-	define( 'WP_FS__IS_POST_REQUEST', ( WP_FS__IS_HTTP_REQUEST &&
-	                                    strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
-
-	/**
-	 * Billing Frequencies
-	 */
-	define( 'WP_FS__PERIOD_ANNUALLY', 'annual' );
-	define( 'WP_FS__PERIOD_MONTHLY', 'monthly' );
-	define( 'WP_FS__PERIOD_LIFETIME', 'lifetime' );
-
-	/**
-	 * Plans
-	 */
-	define( 'WP_FS__PLAN_DEFAULT_PAID', false );
-	define( 'WP_FS__PLAN_FREE', 'free' );
-	define( 'WP_FS__PLAN_TRIAL', 'trial' );
-
-	/**
-	 * Times in seconds
-	 */
-	define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
-	define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
-//	define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
-	define( 'WP_FS__TIME_24_HOURS_IN_SEC', 86400 );
-
-	/**
-	 * Debugging
-	 */
-	if ( ! defined( 'WP_FS__DEBUG_SDK' ) ) {
-		$debug_mode = get_option( 'fs_debug_mode', null );
-
-		if ( $debug_mode === null ) {
-			$debug_mode = false;
-			add_option( 'fs_debug_mode', $debug_mode );
-		}
-
-		define( 'WP_FS__DEBUG_SDK', is_numeric( $debug_mode ) ? ( 0 < $debug_mode ) : WP_FS__DEV_MODE );
-	}
-
-	define( 'WP_FS__ECHO_DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg_echo'] ) );
-	define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-n-d H:i:s' );
-	if ( ! defined( 'FS_API__LOGGER_ON' ) ) {
-		define( 'FS_API__LOGGER_ON', WP_FS__DEBUG_SDK );
-	}
-
-	if ( WP_FS__ECHO_DEBUG_SDK ) {
-		error_reporting( E_ALL );
-		ini_set( 'error_reporting', E_ALL );
-		ini_set( 'display_errors', true );
-		ini_set( 'html_errors', true );
-	}
-
-
-	define( 'WP_FS__SCRIPT_START_TIME', time() );
-	define( 'WP_FS__DEFAULT_PRIORITY', 10 );
-	define( 'WP_FS__LOWEST_PRIORITY', 999999999 );
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.4
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	define( 'WP_FS__SLUG', 'freemius' );
+	if ( ! defined( 'WP_FS__DEV_MODE' ) ) {
+		define( 'WP_FS__DEV_MODE', false );
+	}
+
+	/**
+	 * API Connectivity Simulation
+	 */
+	if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY' ) ) {
+		define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY', false );
+	}
+	if ( ! defined( 'WP_FS__SIMULATE_NO_CURL' ) ) {
+		define( 'WP_FS__SIMULATE_NO_CURL', false );
+	}
+	if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE' ) ) {
+		define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', false );
+	}
+	if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL' ) ) {
+		define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', false );
+	}
+	if ( WP_FS__SIMULATE_NO_CURL ) {
+		define( 'FS_SDK__SIMULATE_NO_CURL', true );
+	}
+	if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
+		define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', true );
+	}
+	if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
+		define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', true );
+	}
+
+	if ( ! defined( 'WP_FS__SIMULATE_FREEMIUS_OFF' ) ) {
+		define( 'WP_FS__SIMULATE_FREEMIUS_OFF', false );
+	}
+
+	if ( ! defined( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES' ) ) {
+		/**
+		 * @since  1.1.7.3
+		 * @author Vova Feldman (@svovaf)
+		 *
+		 * I'm not sure if shared servers periodically change IP, or the subdomain of the
+		 * admin dashboard. Also, I've seen sites that have strange loop of switching
+		 * between domains on a daily basis. Therefore, to eliminate the risk of
+		 * multiple unwanted connectivity test pings, temporary ignore domain or
+		 * server IP changes.
+		 */
+		define( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES', false );
+	}
+
+	/**
+	 * If your dev environment supports custom public network IP setup
+	 * like VVV, please update WP_FS__LOCALHOST_IP with your public IP
+	 * and uncomment it during dev.
+	 */
+	if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
+		// VVV default public network IP.
+		define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.4' );
+
+//		define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
+	}
+
+	/**
+	 * If true and running with secret key, the opt-in process
+	 * will skip the email activation process which is invoked
+	 * when the email of the context user already exist in Freemius
+	 * database (as a security precaution, to prevent sharing user
+	 * secret with unauthorized entity).
+	 *
+	 * IMPORTANT:
+	 *      AS A SECURITY PRECAUTION, WE VALIDATE THE TIMESTAMP OF THE OPT-IN REQUEST.
+	 *      THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
+	 *      CLOCK IS SYNCED.
+	 */
+	if ( ! defined( 'WP_FS__SKIP_EMAIL_ACTIVATION' ) ) {
+		define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
+	}
+
+
+	/**
+	 * Directories
+	 */
+	define( 'WP_FS__DIR', dirname( __FILE__ ) );
+	define( 'WP_FS__DIR_INCLUDES', WP_FS__DIR . '/includes' );
+	define( 'WP_FS__DIR_TEMPLATES', WP_FS__DIR . '/templates' );
+	define( 'WP_FS__DIR_ASSETS', WP_FS__DIR . '/assets' );
+	define( 'WP_FS__DIR_CSS', WP_FS__DIR_ASSETS . '/css' );
+	define( 'WP_FS__DIR_JS', WP_FS__DIR_ASSETS . '/js' );
+	define( 'WP_FS__DIR_IMG', WP_FS__DIR_ASSETS . '/img' );
+	define( 'WP_FS__DIR_SDK', WP_FS__DIR_INCLUDES . '/sdk' );
+
+
+	/**
+	 * Domain / URL / Address
+	 */
+	define( 'WP_FS__DOMAIN_PRODUCTION', 'wp.freemius.com' );
+	define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
+
+	if ( ! defined( 'WP_FS__DOMAIN_LOCALHOST' ) ) {
+		define( 'WP_FS__DOMAIN_LOCALHOST', 'wp.freemius' );
+	}
+	if ( ! defined( 'WP_FS__ADDRESS_LOCALHOST' ) ) {
+		define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
+	}
+
+	if ( ! defined( 'WP_FS__TESTING_DOMAIN' ) ) {
+		define( 'WP_FS__TESTING_DOMAIN', 'fswp' );
+	}
+
+	if ( ! defined( 'WP_FS__API_ADDRESS_LOCALHOST' ) ) {
+		define( 'WP_FS__API_ADDRESS_LOCALHOST', 'http://api.freemius:8080' );
+	}
+	if ( ! defined( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST' ) ) {
+		define( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST', 'http://sandbox-api.freemius:8080' );
+	}
+
+	define( 'WP_FS__IS_HTTP_REQUEST', isset( $_SERVER['HTTP_HOST'] ) );
+	define( 'WP_FS__REMOTE_ADDR', fs_get_ip() );
+
+	if ( ! defined( 'WP_FS__IS_PRODUCTION_MODE' ) ) {
+		// By default, run with Freemius production servers.
+		define( 'WP_FS__IS_PRODUCTION_MODE', true );
+	}
+
+	define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
+
+	if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
+		define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP === WP_FS__REMOTE_ADDR ) );
+	} else {
+		define( 'WP_FS__IS_LOCALHOST', WP_FS__IS_HTTP_REQUEST &&
+		                               is_string( WP_FS__REMOTE_ADDR ) &&
+		                               ( substr( WP_FS__REMOTE_ADDR, 0, 4 ) === '127.' ||
+		                                 WP_FS__REMOTE_ADDR === '::1' )
+		);
+	}
+
+	define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( ! WP_FS__IS_HTTP_REQUEST ||
+	                                            false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
+
+	// Set API address for local testing.
+	if ( ! WP_FS__IS_PRODUCTION_MODE ) {
+		define( 'FS_API__ADDRESS', WP_FS__API_ADDRESS_LOCALHOST );
+		define( 'FS_API__SANDBOX_ADDRESS', WP_FS__API_SANDBOX_ADDRESS_LOCALHOST );
+	}
+
+	define( 'WP_FS___OPTION_PREFIX', 'fs' . ( WP_FS__IS_PRODUCTION_MODE ? '' : '_dbg' ) . '_' );
+
+	if ( ! defined( 'WP_FS__ACCOUNTS_OPTION_NAME' ) ) {
+		define( 'WP_FS__ACCOUNTS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'accounts' );
+	}
+	if ( ! defined( 'WP_FS__API_CACHE_OPTION_NAME' ) ) {
+		define( 'WP_FS__API_CACHE_OPTION_NAME', WP_FS___OPTION_PREFIX . 'api_cache' );
+	}
+	define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
+
+	define( 'WP_FS__IS_HTTPS', ( WP_FS__IS_HTTP_REQUEST &&
+	                             // Checks if CloudFlare's HTTPS (Flexible SSL support).
+	                             isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) ||
+	                           // Check if HTTPS request.
+	                           ( isset( $_SERVER['HTTPS'] ) && 'on' == $_SERVER['HTTPS'] ) ||
+	                           ( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
+	);
+
+	define( 'WP_FS__IS_POST_REQUEST', ( WP_FS__IS_HTTP_REQUEST &&
+	                                    strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
+
+	/**
+	 * Billing Frequencies
+	 */
+	define( 'WP_FS__PERIOD_ANNUALLY', 'annual' );
+	define( 'WP_FS__PERIOD_MONTHLY', 'monthly' );
+	define( 'WP_FS__PERIOD_LIFETIME', 'lifetime' );
+
+	/**
+	 * Plans
+	 */
+	define( 'WP_FS__PLAN_DEFAULT_PAID', false );
+	define( 'WP_FS__PLAN_FREE', 'free' );
+	define( 'WP_FS__PLAN_TRIAL', 'trial' );
+
+	/**
+	 * Times in seconds
+	 */
+	define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
+	define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
+//	define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
+	define( 'WP_FS__TIME_24_HOURS_IN_SEC', 86400 );
+
+	/**
+	 * Debugging
+	 */
+	if ( ! defined( 'WP_FS__DEBUG_SDK' ) ) {
+		$debug_mode = get_option( 'fs_debug_mode', null );
+
+		if ( $debug_mode === null ) {
+			$debug_mode = false;
+			add_option( 'fs_debug_mode', $debug_mode );
+		}
+
+		define( 'WP_FS__DEBUG_SDK', is_numeric( $debug_mode ) ? ( 0 < $debug_mode ) : WP_FS__DEV_MODE );
+	}
+
+	define( 'WP_FS__ECHO_DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg_echo'] ) );
+	define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-n-d H:i:s' );
+	if ( ! defined( 'FS_API__LOGGER_ON' ) ) {
+		define( 'FS_API__LOGGER_ON', WP_FS__DEBUG_SDK );
+	}
+
+	if ( WP_FS__ECHO_DEBUG_SDK ) {
+		error_reporting( E_ALL );
+		ini_set( 'error_reporting', E_ALL );
+		ini_set( 'display_errors', true );
+		ini_set( 'html_errors', true );
+	}
+
+
+	define( 'WP_FS__SCRIPT_START_TIME', time() );
+	define( 'WP_FS__DEFAULT_PRIORITY', 10 );
+	define( 'WP_FS__LOWEST_PRIORITY', 999999999 );
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius-abstract.php b/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius-abstract.php
index 9d08494bb5b7ce80054b5ee22db1786117afd37e..d8a89c928e5778e16361f9c2b71930184ba5e068 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius-abstract.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius-abstract.php
@@ -1,404 +1,453 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.7
-	 */
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-
-	/**
-	 * - Each instance of Freemius class represents a single plugin
-	 * install by a single user (the installer of the plugin).
-	 *
-	 * - Each website can only have one install of the same plugin.
-	 *
-	 * - Install entity is only created after a user connects his account with Freemius.
-	 *
-	 * Class Freemius_Abstract
-	 */
-	abstract class Freemius_Abstract {
-
-		#region Identity ------------------------------------------------------------------
-
-		/**
-		 * Check if user registered with Freemius by connecting his account.
-		 *
-		 * @since 1.0.1
-		 * @return bool
-		 */
-		abstract function is_registered();
-
-		/**
-		 * Check if the user skipped connecting the account with Freemius.
-		 *
-		 * @since 1.0.7
-		 *
-		 * @return bool
-		 */
-		abstract function is_anonymous();
-
-		/**
-		 * Check if the user currently in activation mode.
-		 *
-		 * @since 1.0.7
-		 *
-		 * @return bool
-		 */
-		abstract function is_activation_mode();
-
-		#endregion Identity ------------------------------------------------------------------
-
-		#region Permissions ------------------------------------------------------------------
-
-		/**
-		 * Check if plugin must be WordPress.org compliant.
-		 *
-		 * @since 1.0.7
-		 *
-		 * @return bool
-		 */
-		abstract function is_org_repo_compliant();
-
-		/**
-		 * Check if plugin is allowed to install executable files.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return bool
-		 */
-		function is_allowed_to_install() {
-			return ( $this->is_premium() || ! $this->is_org_repo_compliant() );
-		}
-
-		#endregion Permissions ------------------------------------------------------------------
-
-		/**
-		 * Check if user in trial or in free plan (not paying).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return bool
-		 */
-		function is_not_paying() {
-			return ( $this->is_trial() || $this->is_free_plan() );
-		}
-
-		/**
-		 * Check if the user has an activated and valid paid license on current plugin's install.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		abstract function is_paying();
-
-		/**
-		 * Check if the user is paying or in trial.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_paying_or_trial() {
-			return ( $this->is_paying() || $this->is_trial() );
-		}
-
-		#region Premium Only ------------------------------------------------------------------
-
-		/**
-		 * All logic wrapped in methods with "__premium_only()" suffix will be only
-		 * included in the premium code.
-		 *
-		 * Example:
-		 *      if ( freemius()->is__premium_only() ) {
-		 *          ...
-		 *      }
-		 */
-
-		/**
-		 * Returns true when running premium plugin code.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		function is__premium_only() {
-			return $this->is_premium();
-		}
-
-		/**
-		 * Check if the user has an activated and valid paid license on current plugin's install.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 *
-		 */
-		function is_paying__premium_only() {
-			return ( $this->is__premium_only() && $this->is_paying() );
-		}
-
-		/**
-		 * All code wrapped in this statement will be only included in the premium code.
-		 *
-		 * @since  1.0.9
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		function is_plan__premium_only( $plan, $exact = false ) {
-			return ( $this->is_premium() && $this->is_plan( $plan, $exact ) );
-		}
-
-		/**
-		 * Check if plan matches active license' plan or active trial license' plan.
-		 *
-		 * All code wrapped in this statement will be only included in the premium code.
-		 *
-		 * @since  1.0.9
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		function is_plan_or_trial__premium_only( $plan, $exact = false ) {
-			return ( $this->is_premium() && $this->is_plan_or_trial( $plan, $exact ) );
-		}
-
-		/**
-		 * Check if the user is paying or in trial.
-		 *
-		 * All code wrapped in this statement will be only included in the premium code.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_paying_or_trial__premium_only() {
-			return $this->is_premium() && $this->is_paying_or_trial();
-		}
-
-		/**
-		 * Check if the user has an activated and valid paid license on current plugin's install.
-		 *
-		 * @since      1.0.4
-		 *
-		 * @return bool
-		 *
-		 * @deprecated Method name is confusing since it's not clear from the name the code will be removed.
-		 * @using      Alias to is_paying__premium_only()
-		 */
-		function is_paying__fs__() {
-			return $this->is_paying__premium_only();
-		}
-
-		#endregion Premium Only ------------------------------------------------------------------
-
-		#region Trial ------------------------------------------------------------------
-
-		/**
-		 * Check if the user in a trial.
-		 *
-		 * @since 1.0.3
-		 *
-		 * @return bool
-		 */
-		abstract function is_trial();
-
-		/**
-		 * Check if trial already utilized.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		abstract function is_trial_utilized();
-
-		#endregion Trial ------------------------------------------------------------------
-
-		#region Plans ------------------------------------------------------------------
-
-		/**
-		 * Check if plugin using the free plan.
-		 *
-		 * @since 1.0.4
-		 *
-		 * @return bool
-		 */
-		abstract function is_free_plan();
-
-		/**
-		 * @since  1.0.2
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		abstract function is_plan( $plan, $exact = false );
-
-		/**
-		 * Check if plan based on trial. If not in trial mode, should return false.
-		 *
-		 * @since  1.0.9
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		abstract function is_trial_plan( $plan, $exact = false );
-
-		/**
-		 * Check if plan matches active license' plan or active trial license' plan.
-		 *
-		 * @since  1.0.9
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		function is_plan_or_trial( $plan, $exact = false ) {
-			return $this->is_plan( $plan, $exact ) ||
-			       $this->is_trial_plan( $plan, $exact );
-		}
-
-		/**
-		 * Check if plugin has any paid plans.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		abstract function has_paid_plan();
-
-		/**
-		 * Check if plugin has any free plan, or is it premium only.
-		 *
-		 * Note: If no plans configured, assume plugin is free.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		abstract function has_free_plan();
-
-		#endregion Plans ------------------------------------------------------------------
-
-		/**
-		 * Check if running payments in sandbox mode.
-		 *
-		 * @since 1.0.4
-		 *
-		 * @return bool
-		 */
-		abstract function is_payments_sandbox();
-
-		/**
-		 * Check if running test vs. live plugin.
-		 *
-		 * @since 1.0.5
-		 *
-		 * @return bool
-		 */
-		abstract function is_live();
-
-		/**
-		 * Check if running premium plugin code.
-		 *
-		 * @since 1.0.5
-		 *
-		 * @return bool
-		 */
-		abstract function is_premium();
-
-		/**
-		 * Get upgrade URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @param string $period Billing cycle
-		 *
-		 * @return string
-		 */
-		abstract function get_upgrade_url( $period = WP_FS__PERIOD_ANNUALLY );
-
-		/**
-		 * Check if Freemius was first added in a plugin update.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.5
-		 *
-		 * @return bool
-		 */
-		function is_plugin_update() {
-			return ! $this->is_plugin_new_install();
-		}
-
-		/**
-		 * Check if Freemius was part of the plugin when the user installed it first.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.5
-		 *
-		 * @return bool
-		 */
-		abstract function is_plugin_new_install();
-
-		#region Marketing ------------------------------------------------------------------
-
-		/**
-		 * Check if current user purchased any other plugins before.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		abstract function has_purchased_before();
-
-		/**
-		 * Check if current user classified as an agency.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		abstract function is_agency();
-
-		/**
-		 * Check if current user classified as a developer.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		abstract function is_developer();
-
-		/**
-		 * Check if current user classified as a business.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		abstract function is_business();
-
-		#endregion ------------------------------------------------------------------
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.7
+	 */
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+
+	/**
+	 * - Each instance of Freemius class represents a single plugin
+	 * install by a single user (the installer of the plugin).
+	 *
+	 * - Each website can only have one install of the same plugin.
+	 *
+	 * - Install entity is only created after a user connects his account with Freemius.
+	 *
+	 * Class Freemius_Abstract
+	 */
+	abstract class Freemius_Abstract {
+
+		#region Identity ------------------------------------------------------------------
+
+		/**
+		 * Check if user registered with Freemius by connecting his account.
+		 *
+		 * @since 1.0.1
+		 * @return bool
+		 */
+		abstract function is_registered();
+
+		/**
+		 * Check if the user skipped connecting the account with Freemius.
+		 *
+		 * @since 1.0.7
+		 *
+		 * @return bool
+		 */
+		abstract function is_anonymous();
+
+		/**
+		 * Check if the user currently in activation mode.
+		 *
+		 * @since 1.0.7
+		 *
+		 * @return bool
+		 */
+		abstract function is_activation_mode();
+
+		#endregion Identity ------------------------------------------------------------------
+
+		#region Permissions ------------------------------------------------------------------
+
+		/**
+		 * Check if plugin must be WordPress.org compliant.
+		 *
+		 * @since 1.0.7
+		 *
+		 * @return bool
+		 */
+		abstract function is_org_repo_compliant();
+
+		/**
+		 * Check if plugin is allowed to install executable files.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return bool
+		 */
+		function is_allowed_to_install() {
+			return ( $this->is_premium() || ! $this->is_org_repo_compliant() );
+		}
+
+		#endregion Permissions ------------------------------------------------------------------
+
+		/**
+		 * Check if user in trial or in free plan (not paying).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return bool
+		 */
+		function is_not_paying() {
+			return ( $this->is_trial() || $this->is_free_plan() );
+		}
+
+		/**
+		 * Check if the user has an activated and valid paid license on current plugin's install.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		abstract function is_paying();
+
+		/**
+		 * Check if the user is paying or in trial.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_paying_or_trial() {
+			return ( $this->is_paying() || $this->is_trial() );
+		}
+
+		/**
+		 * Check if user in a trial or have feature enabled license.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @return bool
+		 */
+		abstract function can_use_premium_code();
+
+		#region Premium Only ------------------------------------------------------------------
+
+		/**
+		 * All logic wrapped in methods with "__premium_only()" suffix will be only
+		 * included in the premium code.
+		 *
+		 * Example:
+		 *      if ( freemius()->is__premium_only() ) {
+		 *          ...
+		 *      }
+		 */
+
+		/**
+		 * Returns true when running premium plugin code.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		function is__premium_only() {
+			return $this->is_premium();
+		}
+
+		/**
+		 * Check if the user has an activated and valid paid license on current plugin's install.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 *
+		 */
+		function is_paying__premium_only() {
+			return ( $this->is__premium_only() && $this->is_paying() );
+		}
+
+		/**
+		 * All code wrapped in this statement will be only included in the premium code.
+		 *
+		 * @since  1.0.9
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		function is_plan__premium_only( $plan, $exact = false ) {
+			return ( $this->is_premium() && $this->is_plan( $plan, $exact ) );
+		}
+
+		/**
+		 * Check if plan matches active license' plan or active trial license' plan.
+		 *
+		 * All code wrapped in this statement will be only included in the premium code.
+		 *
+		 * @since  1.0.9
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		function is_plan_or_trial__premium_only( $plan, $exact = false ) {
+			return ( $this->is_premium() && $this->is_plan_or_trial( $plan, $exact ) );
+		}
+
+		/**
+		 * Check if the user is paying or in trial.
+		 *
+		 * All code wrapped in this statement will be only included in the premium code.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_paying_or_trial__premium_only() {
+			return $this->is_premium() && $this->is_paying_or_trial();
+		}
+
+		/**
+		 * Check if the user has an activated and valid paid license on current plugin's install.
+		 *
+		 * @since      1.0.4
+		 *
+		 * @return bool
+		 *
+		 * @deprecated Method name is confusing since it's not clear from the name the code will be removed.
+		 * @using      Alias to is_paying__premium_only()
+		 */
+		function is_paying__fs__() {
+			return $this->is_paying__premium_only();
+		}
+
+		/**
+		 * Check if user in a trial or have feature enabled license.
+		 *
+		 * All code wrapped in this statement will be only included in the premium code.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9
+		 *
+		 * @return bool
+		 */
+		function can_use_premium_code__premium_only() {
+			return $this->is_premium() && $this->can_use_premium_code();
+		}
+
+		#endregion Premium Only ------------------------------------------------------------------
+
+		#region Trial ------------------------------------------------------------------
+
+		/**
+		 * Check if the user in a trial.
+		 *
+		 * @since 1.0.3
+		 *
+		 * @return bool
+		 */
+		abstract function is_trial();
+
+		/**
+		 * Check if trial already utilized.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		abstract function is_trial_utilized();
+
+		#endregion Trial ------------------------------------------------------------------
+
+		#region Plans ------------------------------------------------------------------
+
+		/**
+		 * Check if plugin using the free plan.
+		 *
+		 * @since 1.0.4
+		 *
+		 * @return bool
+		 */
+		abstract function is_free_plan();
+
+		/**
+		 * @since  1.0.2
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		abstract function is_plan( $plan, $exact = false );
+
+		/**
+		 * Check if plan based on trial. If not in trial mode, should return false.
+		 *
+		 * @since  1.0.9
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		abstract function is_trial_plan( $plan, $exact = false );
+
+		/**
+		 * Check if plan matches active license' plan or active trial license' plan.
+		 *
+		 * @since  1.0.9
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		function is_plan_or_trial( $plan, $exact = false ) {
+			return $this->is_plan( $plan, $exact ) ||
+			       $this->is_trial_plan( $plan, $exact );
+		}
+
+		/**
+		 * Check if plugin has any paid plans.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		abstract function has_paid_plan();
+
+		/**
+		 * Check if plugin has any free plan, or is it premium only.
+		 *
+		 * Note: If no plans configured, assume plugin is free.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		abstract function has_free_plan();
+
+		/**
+		 * Check if plugin is premium only (no free plans).
+		 *
+		 * NOTE: is__premium_only() is very different method, don't get confused.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9
+		 *
+		 * @return bool
+		 */
+		abstract function is_only_premium();
+
+		/**
+		 * Checks if it's a freemium plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9
+		 *
+		 * @return bool
+		 */
+		function is_freemium() {
+			return $this->has_paid_plan() &&
+			       $this->has_free_plan();
+		}
+
+		#endregion Plans ------------------------------------------------------------------
+
+		/**
+		 * Check if running payments in sandbox mode.
+		 *
+		 * @since 1.0.4
+		 *
+		 * @return bool
+		 */
+		abstract function is_payments_sandbox();
+
+		/**
+		 * Check if running test vs. live plugin.
+		 *
+		 * @since 1.0.5
+		 *
+		 * @return bool
+		 */
+		abstract function is_live();
+
+		/**
+		 * Check if running premium plugin code.
+		 *
+		 * @since 1.0.5
+		 *
+		 * @return bool
+		 */
+		abstract function is_premium();
+
+		/**
+		 * Get upgrade URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @param string $period Billing cycle
+		 *
+		 * @return string
+		 */
+		abstract function get_upgrade_url( $period = WP_FS__PERIOD_ANNUALLY );
+
+		/**
+		 * Check if Freemius was first added in a plugin update.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.5
+		 *
+		 * @return bool
+		 */
+		function is_plugin_update() {
+			return ! $this->is_plugin_new_install();
+		}
+
+		/**
+		 * Check if Freemius was part of the plugin when the user installed it first.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.5
+		 *
+		 * @return bool
+		 */
+		abstract function is_plugin_new_install();
+
+		#region Marketing ------------------------------------------------------------------
+
+		/**
+		 * Check if current user purchased any other plugins before.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		abstract function has_purchased_before();
+
+		/**
+		 * Check if current user classified as an agency.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		abstract function is_agency();
+
+		/**
+		 * Check if current user classified as a developer.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		abstract function is_developer();
+
+		/**
+		 * Check if current user classified as a business.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		abstract function is_business();
+
+		#endregion ------------------------------------------------------------------
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius.php b/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius.php
index 9e64158397c322a1386714e825d73abb79df84ce..034f2dac5961d687b76f8b803a5801e9bc9dd3f2 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/class-freemius.php
@@ -1,9452 +1,10422 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	// "final class"
-	class Freemius extends Freemius_Abstract {
-		/**
-		 * SDK Version
-		 *
-		 * @var string
-		 */
-		public $version = WP_FS__SDK_VERSION;
-
-		#region Plugin Info
-
-		/**
-		 * @since 1.0.1
-		 *
-		 * @var string
-		 */
-		private $_slug;
-
-		/**
-		 * @since 1.0.0
-		 *
-		 * @var string
-		 */
-		private $_plugin_basename;
-		/**
-		 * @since 1.0.0
-		 *
-		 * @var string
-		 */
-		private $_free_plugin_basename;
-		/**
-		 * @since 1.0.0
-		 *
-		 * @var string
-		 */
-		private $_plugin_dir_path;
-		/**
-		 * @since 1.0.0
-		 *
-		 * @var string
-		 */
-		private $_plugin_dir_name;
-		/**
-		 * @since 1.0.0
-		 *
-		 * @var string
-		 */
-		private $_plugin_main_file_path;
-		/**
-		 * @var string[]
-		 */
-		private $_plugin_data;
-		/**
-		 * @since 1.0.9
-		 *
-		 * @var string
-		 */
-		private $_plugin_name;
-
-		#endregion Plugin Info
-
-		/**
-		 * @since 1.0.9
-		 *
-		 * @var bool If false, don't turn Freemius on.
-		 */
-		private $_is_on;
-
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var bool If false, don't turn Freemius on.
-		 */
-		private $_is_anonymous;
-
-		/**
-		 * @since 1.0.9
-		 * @var bool If false, issues with connectivity to Freemius API.
-		 */
-		private $_has_api_connection;
-
-		/**
-		 * @since 1.0.9
-		 * @var bool Hints the SDK if plugin can support anonymous mode (if skip connect is visible).
-		 */
-		private $_enable_anonymous;
-
-		/**
-		 * @since 1.1.7.5
-		 * @var bool Hints the SDK if plugin should run in anonymous mode (only adds feedback form).
-		 */
-		private $_anonymous_mode;
-
-		/**
-		 * @since 1.0.8
-		 * @var bool Hints the SDK if the plugin has any paid plans.
-		 */
-		private $_has_paid_plans;
-
-		/**
-		 * @since 1.0.7
-		 * @var bool Hints the SDK if the plugin is WordPress.org compliant.
-		 */
-		private $_is_org_compliant;
-
-		/**
-		 * @since 1.0.7
-		 * @var bool Hints the SDK if the plugin is has add-ons.
-		 */
-		private $_has_addons;
-
-		/**
-		 * @since 1.1.6
-		 * @var string[]bool.
-		 */
-		private $_permissions;
-
-		/**
-		 * @var FS_Key_Value_Storage
-		 */
-		private $_storage;
-
-		/**
-		 * @since 1.0.0
-		 *
-		 * @var FS_Logger
-		 */
-		private $_logger;
-		/**
-		 * @since 1.0.4
-		 *
-		 * @var FS_Plugin
-		 */
-		private $_plugin = false;
-		/**
-		 * @since 1.0.4
-		 *
-		 * @var FS_Plugin
-		 */
-		private $_parent_plugin = false;
-		/**
-		 * @since 1.1.1
-		 *
-		 * @var Freemius
-		 */
-		private $_parent = false;
-		/**
-		 * @since 1.0.1
-		 *
-		 * @var FS_User
-		 */
-		private $_user = false;
-		/**
-		 * @since 1.0.1
-		 *
-		 * @var FS_Site
-		 */
-		private $_site = false;
-		/**
-		 * @since 1.0.1
-		 *
-		 * @var FS_Plugin_License
-		 */
-		private $_license;
-		/**
-		 * @since 1.0.2
-		 *
-		 * @var FS_Plugin_Plan[]
-		 */
-		private $_plans = false;
-		/**
-		 * @var FS_Plugin_License[]
-		 * @since 1.0.5
-		 */
-		private $_licenses = false;
-
-		/**
-		 * @since 1.0.1
-		 *
-		 * @var FS_Admin_Menu_Manager
-		 */
-		private $_menu;
-
-		/**
-		 * @var FS_Admin_Notice_Manager
-		 */
-		private $_admin_notices;
-
-		/**
-		 * @since 1.1.6
-		 *
-		 * @var FS_Admin_Notice_Manager
-		 */
-		private static $_global_admin_notices;
-
-		/**
-		 * @var FS_Logger
-		 * @since 1.0.0
-		 */
-		private static $_static_logger;
-
-		/**
-		 * @var FS_Option_Manager
-		 * @since 1.0.2
-		 */
-		private static $_accounts;
-
-		/**
-		 * @var Freemius[]
-		 */
-		private static $_instances = array();
-
-
-		/* Ctor
-------------------------------------------------------------------------------------------------------------------*/
-
-		private function __construct( $slug ) {
-			$this->_slug = $slug;
-
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			$this->_storage = FS_Key_Value_Storage::instance( 'plugin_data', $this->_slug );
-
-			$this->_plugin_main_file_path = $this->_find_caller_plugin_file();
-			$this->_plugin_dir_path       = plugin_dir_path( $this->_plugin_main_file_path );
-			$this->_plugin_basename       = plugin_basename( $this->_plugin_main_file_path );
-			$this->_free_plugin_basename  = str_replace( '-premium/', '/', $this->_plugin_basename );
-
-			$base_name_split        = explode( '/', $this->_plugin_basename );
-			$this->_plugin_dir_name = $base_name_split[0];
-
-			if ( $this->_logger->is_on() ) {
-				$this->_logger->info( 'plugin_main_file_path = ' . $this->_plugin_main_file_path );
-				$this->_logger->info( 'plugin_dir_path = ' . $this->_plugin_dir_path );
-				$this->_logger->info( 'plugin_basename = ' . $this->_plugin_basename );
-				$this->_logger->info( 'free_plugin_basename = ' . $this->_free_plugin_basename );
-				$this->_logger->info( 'plugin_dir_name = ' . $this->_plugin_dir_name );
-			}
-
-			// Remember link between file to slug.
-			$this->store_file_slug_map();
-
-			// Store plugin's initial install timestamp.
-			if ( ! isset( $this->_storage->install_timestamp ) ) {
-				$this->_storage->install_timestamp = WP_FS__SCRIPT_START_TIME;
-			}
-
-			$this->_plugin = FS_Plugin_Manager::instance( $this->_slug )->get();
-
-			$this->_admin_notices = FS_Admin_Notice_Manager::instance(
-				$slug,
-				is_object( $this->_plugin ) ? $this->_plugin->title : ''
-			);
-
-			if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
-			     'true' === fs_request_is_action( 'restart_freemius' )
-			) {
-				FS_Api::clear_cache();
-			}
-
-			$this->_register_hooks();
-
-			$this->_load_account();
-
-			$this->_version_updates_handler();
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		private function _version_updates_handler() {
-			if ( ! isset( $this->_storage->sdk_version ) || $this->_storage->sdk_version != $this->version ) {
-				// Freemius version upgrade mode.
-				$this->_storage->sdk_last_version = $this->_storage->sdk_version;
-				$this->_storage->sdk_version      = $this->version;
-
-				if ( empty( $this->_storage->sdk_last_version ) ||
-				     version_compare( $this->_storage->sdk_last_version, $this->version, '<' )
-				) {
-					$this->_storage->sdk_upgrade_mode   = true;
-					$this->_storage->sdk_downgrade_mode = false;
-				} else {
-					$this->_storage->sdk_downgrade_mode = true;
-					$this->_storage->sdk_upgrade_mode   = false;
-
-				}
-
-				$this->do_action( 'sdk_version_update', $this->_storage->sdk_last_version, $this->version );
-			}
-
-			$plugin_version = $this->get_plugin_version();
-			if ( ! isset( $this->_storage->plugin_version ) || $this->_storage->plugin_version != $plugin_version ) {
-				// Plugin version upgrade mode.
-				$this->_storage->plugin_last_version = $this->_storage->plugin_version;
-				$this->_storage->plugin_version      = $plugin_version;
-
-				if ( empty( $this->_storage->plugin_last_version ) ||
-				     version_compare( $this->_storage->plugin_last_version, $plugin_version, '<' )
-				) {
-					$this->_storage->plugin_upgrade_mode   = true;
-					$this->_storage->plugin_downgrade_mode = false;
-				} else {
-					$this->_storage->plugin_downgrade_mode = true;
-					$this->_storage->plugin_upgrade_mode   = false;
-				}
-
-				if ( ! empty( $this->_storage->plugin_last_version ) ) {
-					// Different version of the plugin was installed before, therefore it's an update.
-					$this->_storage->is_plugin_new_install = false;
-				}
-
-				$this->do_action( 'plugin_version_update', $this->_storage->plugin_last_version, $plugin_version );
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.5
-		 *
-		 * @param string $sdk_prev_version
-		 * @param string $sdk_version
-		 */
-		function _data_migration( $sdk_prev_version, $sdk_version ) {
-			/**
-			 * @since 1.1.7.3 Fixed unwanted connectivity test cleanup.
-			 */
-			if ( empty( $sdk_prev_version ) ) {
-				return;
-			}
-
-			if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
-			     version_compare( $sdk_version, '1.1.5', '>=' )
-			) {
-				// On version 1.1.5 merged connectivity and is_on data.
-				if ( isset( $this->_storage->connectivity_test ) ) {
-					if ( ! isset( $this->_storage->is_on ) ) {
-						unset( $this->_storage->connectivity_test );
-					} else {
-						$connectivity_data              = $this->_storage->connectivity_test;
-						$connectivity_data['is_active'] = $this->_storage->is_on['is_active'];
-						$connectivity_data['timestamp'] = $this->_storage->is_on['timestamp'];
-
-						// Override.
-						$this->_storage->connectivity_test = $connectivity_data;
-
-						// Remove previous structure.
-						unset( $this->_storage->is_on );
-					}
-
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		private function _register_hooks() {
-			if ( is_admin() ) {
-				// Hook to plugin activation
-				register_activation_hook( $this->_plugin_main_file_path, array(
-					&$this,
-					'_activate_plugin_event_hook'
-				) );
-
-				// Hook to plugin uninstall.
-				register_uninstall_hook( $this->_plugin_main_file_path, array( 'Freemius', '_uninstall_plugin_hook' ) );
-
-				if ( ! $this->is_ajax() ) {
-					if ( ! $this->is_addon() ) {
-						add_action( 'init', array( &$this, '_add_default_submenu_items' ), WP_FS__LOWEST_PRIORITY );
-						add_action( 'admin_menu', array( &$this, '_prepare_admin_menu' ), WP_FS__LOWEST_PRIORITY );
-					}
-				}
-			}
-
-			register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
-
-			add_action( 'init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
-
-			$this->add_action( 'after_plans_sync', array( &$this, '_check_for_trial_plans' ) );
-
-			$this->add_action( 'sdk_version_update', array( &$this, '_data_migration' ), WP_FS__DEFAULT_PRIORITY, 2 );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		private function _register_account_hooks() {
-			if ( is_admin() ) {
-				if ( ! $this->is_ajax() ) {
-					if ( $this->apply_filters( 'show_trial', true ) && $this->has_trial_plan() ) {
-						$last_time_trial_promotion_shown = $this->_storage->get( 'trial_promotion_shown', false );
-						if ( ! $this->_site->is_trial_utilized() &&
-						     (
-							     // Show promotion if never shown it yet and 24 hours after initial activation.
-							     ( false === $last_time_trial_promotion_shown && $this->_storage->activation_timestamp < ( time() - WP_FS__TIME_24_HOURS_IN_SEC ) ) ||
-							     // Show promotion in every 30 days.
-							     ( is_numeric( $last_time_trial_promotion_shown ) && 30 * WP_FS__TIME_24_HOURS_IN_SEC < time() - $last_time_trial_promotion_shown ) )
-						) {
-							$this->add_action( 'after_init_plugin_registered', array( &$this, '_add_trial_notice' ) );
-						}
-					}
-				}
-
-				// If user is paying or in trial and have the free version installed,
-				// assume that the deactivation is for the upgrade process.
-				if ( ! $this->is_paying_or_trial() || $this->is_premium() ) {
-					add_action( 'wp_ajax_submit-uninstall-reason', array( &$this, '_submit_uninstall_reason_action' ) );
-
-					global $pagenow;
-					if ( 'plugins.php' === $pagenow ) {
-						add_action( 'admin_footer', array( &$this, '_add_deactivation_feedback_dialog_box' ) );
-					}
-				}
-			}
-		}
-
-		/**
-		 * Leverage backtrace to find caller plugin file path.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return string
-		 *
-		 * @uses   fs_find_caller_plugin_file
-		 */
-		private function _find_caller_plugin_file() {
-			// Try to load the cached value of the file path.
-			if ( isset( $this->_storage->plugin_main_file ) ) {
-				if ( file_exists( $this->_storage->plugin_main_file->path ) ) {
-					return $this->_storage->plugin_main_file->path;
-				}
-			}
-
-			$plugin_file = fs_find_caller_plugin_file();
-
-			$this->_storage->plugin_main_file = (object) array(
-				'path' => fs_normalize_path( $plugin_file ),
-			);
-
-			return $plugin_file;
-		}
-
-
-		#region Deactivation Feedback Form ------------------------------------------------------------------
-
-		/**
-		 * Displays a confirmation and feedback dialog box when the user clicks on the "Deactivate" link on the plugins
-		 * page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @author Leo Fajardo (@leorw)
-		 * @since  1.1.2
-		 */
-		function _add_deactivation_feedback_dialog_box() {
-			fs_enqueue_local_style( 'fs_deactivation_feedback', '/admin/deactivation-feedback.css' );
-
-			/* Check the type of user:
-			 * 1. Long-term (long-term)
-			 * 2. Non-registered and non-anonymous short-term (non-registered-and-non-anonymous-short-term).
-			 * 3. Short-term (short-term)
-			 */
-			$is_long_term_user = true;
-
-			// Check if the site is at least 2 days old.
-			$time_installed = $this->_storage->install_timestamp;
-
-			// Difference in seconds.
-			$date_diff = time() - $time_installed;
-
-			// Convert seconds to days.
-			$date_diff_days = floor( $date_diff / ( 60 * 60 * 24 ) );
-
-			if ( $date_diff_days < 2 ) {
-				$is_long_term_user = false;
-			}
-
-			$is_long_term_user = $this->apply_filters( 'is_long_term_user', $is_long_term_user );
-
-			if ( $is_long_term_user ) {
-				$user_type = 'long-term';
-			} else {
-				if ( ! $this->is_registered() && ! $this->is_anonymous() ) {
-					$user_type = 'non-registered-and-non-anonymous-short-term';
-				} else {
-					$user_type = 'short-term';
-				}
-			}
-
-			$uninstall_reasons = $this->_get_uninstall_reasons( $user_type );
-
-			// Load the HTML template for the deactivation feedback dialog box.
-			$vars = array(
-				'reasons' => $uninstall_reasons,
-				'slug'    => $this->_slug
-			);
-
-			/**
-			 * @todo Deactivation form core functions should be loaded only once! Otherwise, when there are multiple Freemius powered plugins the same code is loaded multiple times. The only thing that should be loaded differently is the various deactivation reasons object based on the state of the plugin.
-			 */
-			fs_require_template( 'deactivation-feedback-modal.php', $vars );
-		}
-
-		/**
-		 * @author Leo Fajardo (leorw)
-		 * @since  1.1.2
-		 *
-		 * @param string $user_type
-		 *
-		 * @return array The uninstall reasons for the specified user type.
-		 */
-		function _get_uninstall_reasons( $user_type = 'long-term' ) {
-			$reason_found_better_plugin = array(
-				'id'                => 2,
-				'text'              => __fs( 'reason-found-a-better-plugin', $this->_slug ),
-				'input_type'        => 'textfield',
-				'input_placeholder' => __fs( 'placeholder-plugin-name', $this->_slug )
-			);
-
-			$reason_temporary_deactivation = array(
-				'id'                => 15,
-				'text'              => __fs( 'reason-temporary-deactivation', $this->_slug ),
-				'input_type'        => '',
-				'input_placeholder' => ''
-			);
-
-			$reason_other = array(
-				'id'                => 7,
-				'text'              => __fs( 'reason-other', $this->_slug ),
-				'input_type'        => 'textfield',
-				'input_placeholder' => ''
-			);
-
-			$long_term_user_reasons = array(
-				array(
-					'id'                => 1,
-					'text'              => __fs( 'reason-no-longer-needed', $this->_slug ),
-					'input_type'        => '',
-					'input_placeholder' => ''
-				),
-				$reason_found_better_plugin,
-				array(
-					'id'                => 3,
-					'text'              => __fs( 'reason-needed-for-a-short-period', $this->_slug ),
-					'input_type'        => '',
-					'input_placeholder' => ''
-				),
-				array(
-					'id'                => 4,
-					'text'              => __fs( 'reason-broke-my-site', $this->_slug ),
-					'input_type'        => '',
-					'input_placeholder' => ''
-				),
-				array(
-					'id'                => 5,
-					'text'              => __fs( 'reason-suddenly-stopped-working', $this->_slug ),
-					'input_type'        => '',
-					'input_placeholder' => ''
-				)
-			);
-
-			if ( $this->is_paying() ) {
-				$long_term_user_reasons[] = array(
-					'id'                => 6,
-					'text'              => __fs( 'reason-cant-pay-anymore', $this->_slug ),
-					'input_type'        => 'textfield',
-					'input_placeholder' => __fs( 'placeholder-comfortable-price', $this->_slug )
-				);
-			}
-
-			$long_term_user_reasons[] = $reason_temporary_deactivation;
-			$long_term_user_reasons[] = $reason_other;
-
-			$uninstall_reasons = array(
-				'long-term'                                   => $long_term_user_reasons,
-				'non-registered-and-non-anonymous-short-term' => array(
-					array(
-						'id'                => 8,
-						'text'              => __fs( 'reason-didnt-work', $this->_slug ),
-						'input_type'        => '',
-						'input_placeholder' => ''
-					),
-					array(
-						'id'                => 9,
-						'text'              => __fs( 'reason-dont-like-to-share-my-information', $this->_slug ),
-						'input_type'        => '',
-						'input_placeholder' => ''
-					),
-					$reason_found_better_plugin,
-					$reason_temporary_deactivation,
-					$reason_other
-				),
-				'short-term'                                  => array(
-					array(
-						'id'                => 10,
-						'text'              => __fs( 'reason-couldnt-make-it-work', $this->_slug ),
-						'input_type'        => '',
-						'input_placeholder' => ''
-					),
-					$reason_found_better_plugin,
-					array(
-						'id'                => 11,
-						'text'              => __fs( 'reason-great-but-need-specific-feature', $this->_slug ),
-						'input_type'        => 'textarea',
-						'input_placeholder' => __fs( 'placeholder-feature', $this->_slug )
-					),
-					array(
-						'id'                => 12,
-						'text'              => __fs( 'reason-not-working', $this->_slug ),
-						'input_type'        => 'textarea',
-						'input_placeholder' => __fs( 'placeholder-share-what-didnt-work', $this->_slug )
-					),
-					array(
-						'id'                => 13,
-						'text'              => __fs( 'reason-not-what-i-was-looking-for', $this->_slug ),
-						'input_type'        => 'textarea',
-						'input_placeholder' => __fs( 'placeholder-what-youve-been-looking-for', $this->_slug )
-					),
-					array(
-						'id'                => 14,
-						'text'              => __fs( 'reason-didnt-work-as-expected', $this->_slug ),
-						'input_type'        => 'textarea',
-						'input_placeholder' => __fs( 'placeholder-what-did-you-expect', $this->_slug )
-					),
-					$reason_temporary_deactivation,
-					$reason_other
-				)
-			);
-
-			$uninstall_reasons = $this->apply_filters( 'uninstall_reasons', $uninstall_reasons );
-
-			return $uninstall_reasons[ $user_type ];
-		}
-
-		/**
-		 * Called after the user has submitted his reason for deactivating the plugin.
-		 *
-		 * @author Leo Fajardo (@leorw)
-		 * @since  1.1.2
-		 */
-		function _submit_uninstall_reason_action() {
-			if ( ! isset( $_POST['reason_id'] ) ) {
-				exit;
-			}
-
-			$reason_info = isset( $_REQUEST['reason_info'] ) ? trim( stripslashes( $_REQUEST['reason_info'] ) ) : '';
-
-			$reason = (object) array(
-				'id'   => $_POST['reason_id'],
-				'info' => substr( $reason_info, 0, 128 )
-			);
-
-			$this->_storage->store( 'uninstall_reason', $reason );
-
-			// Print '1' for successful operation.
-			echo 1;
-			exit;
-		}
-
-		#endregion Deactivation Feedback Form ------------------------------------------------------------------
-
-		#region Instance ------------------------------------------------------------------
-
-		/**
-		 * Main singleton instance.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 *
-		 * @param $slug
-		 *
-		 * @return Freemius
-		 */
-		static function instance( $slug ) {
-			$slug = strtolower( $slug );
-
-			if ( ! isset( self::$_instances[ $slug ] ) ) {
-				if ( 0 === count( self::$_instances ) ) {
-					self::_load_required_static();
-				}
-
-				self::$_instances[ $slug ] = new Freemius( $slug );
-			}
-
-			return self::$_instances[ $slug ];
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param string|number $slug_or_id
-		 *
-		 * @return bool
-		 */
-		private static function has_instance( $slug_or_id ) {
-			return ! is_numeric( $slug_or_id ) ?
-				isset( self::$_instances[ strtolower( $slug_or_id ) ] ) :
-				( false !== self::get_instance_by_id( $slug_or_id ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param $id
-		 *
-		 * @return false|Freemius
-		 */
-		static function get_instance_by_id( $id ) {
-			foreach ( self::$_instances as $slug => $instance ) {
-				if ( $id == $instance->get_id() ) {
-					return $instance;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param $plugin_file
-		 *
-		 * @return false|Freemius
-		 */
-		static function get_instance_by_file( $plugin_file ) {
-			$slug = self::find_slug_by_basename( $plugin_file );
-
-			return ( false !== $slug ) ?
-				self::instance( $slug ) :
-				false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return false|Freemius
-		 */
-		function get_parent_instance() {
-			return self::get_instance_by_id( $this->_plugin->parent_plugin_id );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param $slug_or_id
-		 *
-		 * @return bool|Freemius
-		 */
-		function get_addon_instance( $slug_or_id ) {
-			return ! is_numeric( $slug_or_id ) ?
-				self::instance( strtolower( $slug_or_id ) ) :
-				self::get_instance_by_id( $slug_or_id );
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool
-		 */
-		function is_parent_plugin_installed() {
-			return self::has_instance( $this->_plugin->parent_plugin_id );
-		}
-
-		/**
-		 * Check if add-on parent plugin in activation mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function is_parent_in_activation() {
-			$parent_fs = $this->get_parent_instance();
-			if ( ! is_object( $parent_fs ) ) {
-				return false;
-			}
-
-			return ( $parent_fs->is_activation_mode() );
-		}
-
-		/**
-		 * Is plugin in activation mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function is_activation_mode() {
-			return (
-				$this->is_on() &&
-				! $this->is_registered() &&
-				( ! $this->enable_anonymous() ||
-				  ( ! $this->is_anonymous() && ! $this->is_pending_activation() ) )
-			);
-		}
-
-		/**
-		 * Get collection of all active plugins.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return array[string]array
-		 */
-		private static function get_active_plugins() {
-			self::require_plugin_essentials();
-
-			$active_plugin            = array();
-			$all_plugins              = get_plugins();
-			$active_plugins_basenames = get_option( 'active_plugins' );
-
-			foreach ( $active_plugins_basenames as $plugin_basename ) {
-				$active_plugin[ $plugin_basename ] = $all_plugins[ $plugin_basename ];
-			}
-
-			return $active_plugin;
-		}
-
-		/**
-		 * Get collection of all plugins.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return array Key is the plugin file path and the value is an array of the plugin data.
-		 */
-		private static function get_all_plugins() {
-			self::require_plugin_essentials();
-
-			$all_plugins              = get_plugins();
-			$active_plugins_basenames = get_option( 'active_plugins' );
-
-			foreach ( $all_plugins as $basename => &$data ) {
-				// By default set to inactive (next foreach update the active plugins).
-				$data['is_active'] = false;
-				// Enrich with plugin slug.
-				$data['slug'] = self::get_plugin_slug( $basename );
-			}
-
-			// Flag active plugins.
-			foreach ( $active_plugins_basenames as $basename ) {
-				if ( isset( $all_plugins[ $basename ] ) ) {
-					$all_plugins[ $basename ]['is_active'] = true;
-				}
-			}
-
-			return $all_plugins;
-		}
-
-
-		/**
-		 * Cached result of get_site_transient( 'update_plugins' )
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @var object
-		 */
-		private static $_plugins_info;
-
-		/**
-		 * Helper function to get specified plugin's slug.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @param $basename
-		 *
-		 * @return string
-		 */
-		private static function get_plugin_slug( $basename ) {
-			if ( ! isset( self::$_plugins_info ) ) {
-				self::$_plugins_info = get_site_transient( 'update_plugins' );
-			}
-
-			$slug = '';
-
-			if ( is_object( self::$_plugins_info ) ) {
-				if ( isset( self::$_plugins_info->no_update ) &&
-				     isset( self::$_plugins_info->no_update[ $basename ] ) &&
-				     ! empty( self::$_plugins_info->no_update[ $basename ]->slug )
-				) {
-					$slug = self::$_plugins_info->no_update[ $basename ]->slug;
-				} else if ( isset( self::$_plugins_info->response ) &&
-				            isset( self::$_plugins_info->response[ $basename ] ) &&
-				            ! empty( self::$_plugins_info->response[ $basename ]->slug )
-				) {
-					$slug = self::$_plugins_info->response[ $basename ]->slug;
-				}
-			}
-
-			if ( empty( $slug ) ) {
-				// Try to find slug from FS data.
-				$slug = self::find_slug_by_basename( $basename );
-			}
-
-			if ( empty( $slug ) ) {
-				// Fallback to plugin's folder name.
-				$slug = dirname( $basename );
-			}
-
-			return $slug;
-		}
-
-		private static $_statics_loaded = false;
-
-		/**
-		 * Load static resources.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 */
-		private static function _load_required_static() {
-			if ( self::$_statics_loaded ) {
-				return;
-			}
-
-			self::$_static_logger = FS_Logger::get_logger( WP_FS__SLUG, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			self::$_static_logger->entrance();
-
-			self::$_accounts = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
-
-			self::$_global_admin_notices = FS_Admin_Notice_Manager::instance( 'global' );
-
-			// Configure which Freemius powered plugins should be auto updated.
-//			add_filter( 'auto_update_plugin', '_include_plugins_in_auto_update', 10, 2 );
-
-			add_action( 'admin_menu', array( 'Freemius', 'add_debug_page' ) );
-
-			add_action( "wp_ajax_fs_toggle_debug_mode", array( 'Freemius', '_toggle_debug_mode' ) );
-
-			self::$_statics_loaded = true;
-		}
-
-		#region Debugging ------------------------------------------------------------------
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.8
-		 */
-		static function add_debug_page() {
-			if ( ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			self::$_static_logger->entrance();
-
-			$title = sprintf( '%s [v.%s]', __fs( 'freemius-debug' ), WP_FS__SDK_VERSION );
-
-			if ( WP_FS__DEV_MODE ) {
-				// Add top-level debug menu item.
-				$hook = add_menu_page(
-					$title,
-					$title,
-					'manage_options',
-					'freemius',
-					array( 'Freemius', '_debug_page_render' )
-				);
-			} else {
-				// Add hidden debug page.
-				$hook = add_submenu_page(
-					null,
-					$title,
-					$title,
-					'manage_options',
-					'freemius',
-					array( 'Freemius', '_debug_page_render' )
-				);
-			}
-
-			add_action( "load-$hook", array( 'Freemius', '_debug_page_actions' ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		static function _toggle_debug_mode() {
-			if ( in_array( $_POST['is_on'], array( 0, 1 ) ) ) {
-				update_option( 'fs_debug_mode', $_POST['is_on'] );
-			}
-
-			exit;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.8
-		 */
-		static function _debug_page_actions() {
-			self::_clean_admin_content_section();
-
-			if ( fs_request_is_action( 'restart_freemius' ) ) {
-				check_admin_referer( 'restart_freemius' );
-
-				self::$_accounts->clear( true );
-
-
-				return;
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.8
-		 */
-		static function _debug_page_render() {
-			self::$_static_logger->entrance();
-
-			$sites          = self::get_all_sites();
-			$users          = self::get_all_users();
-			$addons         = self::get_all_addons();
-			$account_addons = self::get_all_account_addons();
-
-//			$plans    = self::get_all_plans();
-//			$licenses = self::get_all_licenses();
-
-			$vars = array(
-				'sites'          => $sites,
-				'users'          => $users,
-				'addons'         => $addons,
-				'account_addons' => $account_addons,
-			);
-
-			fs_enqueue_local_style( 'fs_account', '/admin/debug.css' );
-			fs_require_once_template( 'debug.php', $vars );
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		#region Connectivity Issues ------------------------------------------------------------------
-
-		/**
-		 * Check if Freemius should be turned on for the current plugin install.
-		 *
-		 * Note:
-		 *  $this->_is_on is updated in has_api_connectivity()
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_on() {
-			self::$_static_logger->entrance();
-
-			if ( isset( $this->_is_on ) ) {
-				return $this->_is_on;
-			}
-
-			// If already installed or pending then sure it's on :)
-			if ( $this->is_registered() || $this->is_pending_activation() ) {
-				$this->_is_on = true;
-
-				return true;
-			}
-
-			return false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @param bool $flush_if_no_connectivity
-		 *
-		 * @return bool
-		 */
-		private function should_run_connectivity_test( $flush_if_no_connectivity = false ) {
-			if ( ! isset( $this->_storage->connectivity_test ) ) {
-				// Connectivity test was never executed, or cache was cleared.
-				return true;
-			}
-
-			if ( WP_FS__PING_API_ON_IP_OR_HOST_CHANGES ) {
-				if ( WP_FS__IS_HTTP_REQUEST ) {
-					if ( $_SERVER['HTTP_HOST'] != $this->_storage->connectivity_test['host'] ) {
-						// Domain changed.
-						return true;
-					}
-
-					if ( WP_FS__REMOTE_ADDR != $this->_storage->connectivity_test['server_ip'] ) {
-						// Server IP changed.
-						return true;
-					}
-				}
-			}
-
-			if ( $this->_storage->connectivity_test['is_connected'] &&
-			     $this->_storage->connectivity_test['is_active']
-			) {
-				// API connected and Freemius is active - no need to run connectivity check.
-				return false;
-			}
-
-			if ( $flush_if_no_connectivity ) {
-				/**
-				 * If explicitly asked to flush when no connectivity - do it only
-				 * if at least 10 sec passed from the last API connectivity test.
-				 */
-				return ( isset( $this->_storage->connectivity_test['timestamp'] ) &&
-				         ( WP_FS__SCRIPT_START_TIME - $this->_storage->connectivity_test['timestamp'] ) > 10 );
-			}
-
-			/**
-			 * @since 1.1.7 Don't check for connectivity on plugin downgrade.
-			 */
-			$version = $this->get_plugin_version();
-			if ( version_compare( $version, $this->_storage->connectivity_test['version'], '>' ) ) {
-				// If it's a plugin version upgrade and Freemius is off or no connectivity, run connectivity test.
-				return true;
-			}
-
-			return false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @return object|false
-		 */
-		private function ping() {
-			if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY ) {
-				return false;
-			}
-
-			$version = $this->get_plugin_version();
-
-			$is_update = $this->apply_filters( 'is_plugin_update', $this->is_plugin_update() );
-
-			return $this->get_api_plugin_scope()->ping(
-				$this->get_anonymous_id(),
-				array(
-					'is_update' => json_encode( $is_update ),
-					'version'   => $version,
-					'sdk'       => $this->version,
-					'is_admin'  => json_encode( is_admin() ),
-					'is_ajax'   => json_encode( $this->is_ajax() ),
-					'is_cron'   => json_encode( $this->is_cron() ),
-					'is_http'   => json_encode( WP_FS__IS_HTTP_REQUEST ),
-				)
-			);
-		}
-
-		/**
-		 * Check if there's any connectivity issue to Freemius API.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param bool $flush_if_no_connectivity
-		 *
-		 * @return bool
-		 */
-		function has_api_connectivity( $flush_if_no_connectivity = false ) {
-			$this->_logger->entrance();
-
-			if ( isset( $this->_has_api_connection ) && ( $this->_has_api_connection || ! $flush_if_no_connectivity ) ) {
-				return $this->_has_api_connection;
-			}
-
-			if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY &&
-			     isset( $this->_storage->connectivity_test ) &&
-			     true === $this->_storage->connectivity_test['is_connected']
-			) {
-				unset( $this->_storage->connectivity_test );
-			}
-
-			if ( ! $this->should_run_connectivity_test( $flush_if_no_connectivity ) ) {
-				$this->_has_api_connection = $this->_storage->connectivity_test['is_connected'];
-				/**
-				 * @since 1.1.6 During dev mode, if there's connectivity - turn Freemius on regardless the configuration.
-				 */
-				$this->_is_on = $this->_storage->connectivity_test['is_active'] ||
-				                ( WP_FS__DEV_MODE && $this->_has_api_connection && ! WP_FS__SIMULATE_FREEMIUS_OFF );
-
-				return $this->_has_api_connection;
-			}
-
-			$pong         = $this->ping();
-			$is_connected = $this->get_api_plugin_scope()->is_valid_ping( $pong );
-
-			if ( ! $is_connected ) {
-				// API failure.
-				$this->_add_connectivity_issue_message( $pong );
-			}
-
-			$this->store_connectivity_info( $pong, $is_connected );
-
-			return $this->_has_api_connection;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @param object $pong
-		 * @param bool   $is_connected
-		 */
-		private function store_connectivity_info( $pong, $is_connected ) {
-			$this->_logger->entrance();
-
-			$version = $this->get_plugin_version();
-
-			if ( ! $is_connected || WP_FS__SIMULATE_FREEMIUS_OFF ) {
-				$is_active = false;
-			} else {
-				$is_active = ( isset( $pong->is_active ) && true == $pong->is_active );
-			}
-
-			$is_active = $this->apply_filters(
-				'is_on',
-				$is_active,
-				$this->is_plugin_update(),
-				$version
-			);
-
-			$this->_storage->connectivity_test = array(
-				'is_connected' => $is_connected,
-				'host'         => $_SERVER['HTTP_HOST'],
-				'server_ip'    => WP_FS__REMOTE_ADDR,
-				'is_active'    => $is_active,
-				'timestamp'    => WP_FS__SCRIPT_START_TIME,
-				// Last version with connectivity attempt.
-				'version'      => $version,
-			);
-
-			$this->_has_api_connection = $is_connected;
-			$this->_is_on              = $is_active || ( WP_FS__DEV_MODE && $is_connected && ! WP_FS__SIMULATE_FREEMIUS_OFF );
-		}
-
-		/**
-		 * Force turning Freemius on.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8.1
-		 *
-		 * @return bool TRUE if successfully turned on.
-		 */
-		private function turn_on() {
-			$this->_logger->entrance();
-
-			if ($this->is_on() || ! isset( $this->_storage->connectivity_test['is_active'] ) ) {
-				return false;
-			}
-
-			$updated_connectivity              = $this->_storage->connectivity_test;
-			$updated_connectivity['is_active'] = true;
-			$updated_connectivity['timestamp'] = WP_FS__SCRIPT_START_TIME;
-			$this->_storage->connectivity_test = $updated_connectivity;
-
-			$this->_is_on = true;
-
-			return true;
-		}
-
-		/**
-		 * Anonymous and unique site identifier (Hash).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.0
-		 *
-		 * @return string
-		 */
-		function get_anonymous_id() {
-			$unique_id = self::$_accounts->get_option( 'unique_id' );
-
-			if ( empty( $unique_id ) || ! is_string( $unique_id ) ) {
-				$key = get_site_url();
-
-				// If localhost, assign microtime instead of domain.
-				if ( WP_FS__IS_LOCALHOST ||
-				     false !== strpos( $key, 'localhost' ) ||
-				     false === strpos( $key, '.' )
-				) {
-					$key = microtime();
-				}
-
-				$unique_id = md5( $key );
-
-				self::$_accounts->set_option( 'unique_id', $unique_id, true );
-			}
-
-			$this->_logger->departure( $unique_id );
-
-			return $unique_id;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @return \WP_User
-		 */
-		static function _get_current_wp_user() {
-			self::require_pluggable_essentials();
-
-			return wp_get_current_user();
-		}
-
-		/**
-		 * Generate API connectivity issue message.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param mixed $api_result
-		 * @param bool  $is_first_failure
-		 */
-		function _add_connectivity_issue_message( $api_result, $is_first_failure = true ) {
-			if ( $this->_enable_anonymous ) {
-				// Don't add message if can run anonymously.
-				return;
-			}
-
-			if ( ! function_exists( 'wp_nonce_url' ) ) {
-				require_once( ABSPATH . 'wp-includes/functions.php' );
-			}
-
-			$current_user = self::_get_current_wp_user();
-//			$admin_email = get_option( 'admin_email' );
-			$admin_email = $current_user->user_email;
-
-			$message = false;
-			if ( is_object( $api_result ) &&
-			     isset( $api_result->error ) &&
-			     isset( $api_result->error->code )
-			) {
-				switch ( $api_result->error->code ) {
-					case 'curl_missing':
-						$message = sprintf(
-							__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
-							__fs( 'curl-missing-message', $this->_slug ) . ' ' .
-							' %s',
-							'<b>' . $this->get_plugin_name() . '</b>',
-							sprintf(
-								'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
-								sprintf(
-									'<a class="fs-resolve" data-type="curl" href="#"><b>%s</b></a>%s',
-									__fs( 'curl-missing-no-clue-title', $this->_slug ),
-									' - ' . sprintf(
-										__fs( 'curl-missing-no-clue-desc', $this->_slug ),
-										'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
-									)
-								),
-								sprintf(
-									'<b>%s</b> - %s',
-									__fs( 'sysadmin-title', $this->_slug ),
-									__fs( 'curl-missing-sysadmin-desc', $this->_slug )
-								),
-								sprintf(
-									'<a href="%s"><b>%s</b></a>%s',
-									wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
-									__fs( 'deactivate-plugin-title', $this->_slug ),
-									' - ' . __fs( 'deactivate-plugin-desc', 'freemius', $this->_slug )
-								)
-							)
-						);
-						break;
-					case 'cloudflare_ddos_protection':
-						$message = sprintf(
-							__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
-							__fs( 'cloudflare-blocks-connection-message', $this->_slug ) . ' ' .
-							__fs( 'happy-to-resolve-issue-asap', $this->_slug ) .
-							' %s',
-							'<b>' . $this->get_plugin_name() . '</b>',
-							sprintf(
-								'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
-								sprintf(
-									'<a class="fs-resolve" data-type="cloudflare" href="#"><b>%s</b></a>%s',
-									__fs( 'fix-issue-title', $this->_slug ),
-									' - ' . sprintf(
-										__fs( 'fix-issue-desc', $this->_slug ),
-										'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
-									)
-								),
-								sprintf(
-									'<a href="%s" target="_blank"><b>%s</b></a>%s',
-									sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
-									__fs( 'install-previous-title', $this->_slug ),
-									' - ' . __fs( 'install-previous-desc', $this->_slug )
-								),
-								sprintf(
-									'<a href="%s"><b>%s</b></a>%s',
-									wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
-									__fs( 'deactivate-plugin-title', $this->_slug ),
-									' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
-								)
-							)
-						);
-						break;
-					case 'squid_cache_block':
-						$message = sprintf(
-							__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
-							__fs( 'squid-blocks-connection-message', $this->_slug ) .
-							' %s',
-							'<b>' . $this->get_plugin_name() . '</b>',
-							sprintf(
-								'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
-								sprintf(
-									'<a class="fs-resolve" data-type="squid" href="#"><b>%s</b></a>%s',
-									__fs( 'squid-no-clue-title', $this->_slug ),
-									' - ' . sprintf(
-										__fs( 'squid-no-clue-desc', $this->_slug ),
-										'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
-									)
-								),
-								sprintf(
-									'<b>%s</b> - %s',
-									__fs( 'sysadmin-title', $this->_slug ),
-									sprintf(
-										__fs( 'squid-sysadmin-desc', $this->_slug ),
-										// We use a filter since the plugin might require additional API connectivity.
-										'<b>' . implode( ', ', $this->apply_filters( 'api_domains', array( 'api.freemius.com' ) ) ) . '</b>' )
-								),
-								sprintf(
-									'<a href="%s"><b>%s</b></a>%s',
-									wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
-									__fs( 'deactivate-plugin-title', $this->_slug ),
-									' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
-								)
-							)
-						);
-						break;
-//					default:
-//						$message = __fs( 'connectivity-test-fails-message', $this->_slug );
-//						break;
-				}
-			}
-
-			$message_id = 'failed_connect_api';
-			$type       = 'error';
-
-			if ( false === $message ) {
-				if ( $is_first_failure ) {
-					// First attempt failed.
-					$message = sprintf(
-						__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
-						__fs( 'connectivity-test-fails-message', $this->_slug ) . ' ' .
-						__fs( 'connectivity-test-maybe-temporary', $this->_slug ) . '<br><br>' .
-						'%s',
-						'<b>' . $this->get_plugin_name() . '</b>',
-						sprintf(
-							'<div id="fs_firewall_issue_options">%s %s</div>',
-							sprintf(
-								'<a  class="button button-primary fs-resolve" data-type="retry_ping" href="#">%s</a>',
-								__fs( 'yes-do-your-thing', $this->_slug )
-							),
-							sprintf(
-								'<a href="%s" class="button">%s</a>',
-								wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
-								__fs( 'no-deactivate', $this->_slug )
-							)
-						)
-					);
-
-					$message_id = 'failed_connect_api_first';
-					$type       = 'promotion';
-				} else {
-					// Second connectivity attempt failed.
-					$message = sprintf(
-						__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
-						__fs( 'connectivity-test-fails-message', $this->_slug ) . ' ' .
-						__fs( 'happy-to-resolve-issue-asap', $this->_slug ) .
-						' %s',
-						'<b>' . $this->get_plugin_name() . '</b>',
-						sprintf(
-							'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
-							sprintf(
-								'<a class="fs-resolve" data-type="general" href="#"><b>%s</b></a>%s',
-								__fs( 'fix-issue-title', $this->_slug ),
-								' - ' . sprintf(
-									__fs( 'fix-issue-desc', $this->_slug ),
-									'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
-								)
-							),
-							sprintf(
-								'<a href="%s" target="_blank"><b>%s</b></a>%s',
-								sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
-								__fs( 'install-previous-title', $this->_slug ),
-								' - ' . __fs( 'install-previous-desc', $this->_slug )
-							),
-							sprintf(
-								'<a href="%s"><b>%s</b></a>%s',
-								wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
-								__fs( 'deactivate-plugin-title', $this->_slug ),
-								' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
-							)
-						)
-					);
-				}
-			}
-
-			$this->_admin_notices->add_sticky(
-				$message,
-				$message_id,
-				__fs( 'oops', $this->_slug ) . '...',
-				$type
-			);
-		}
-
-		/**
-		 * Handle user request to resolve connectivity issue.
-		 * This method will send an email to Freemius API technical staff for resolution.
-		 * The email will contain server's info and installed plugins (might be caching issue).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		function _email_about_firewall_issue() {
-			$this->_admin_notices->remove_sticky( 'failed_connect_api' );
-
-			$pong = $this->ping();
-
-			$is_connected = $this->get_api_plugin_scope()->is_valid_ping( $pong );
-
-			if ( $is_connected ) {
-				$this->store_connectivity_info( $pong, $is_connected );
-
-				echo $this->get_after_plugin_activation_redirect_url();
-				exit;
-			}
-
-			$current_user = self::_get_current_wp_user();
-			$admin_email  = $current_user->user_email;
-
-			$error_type = fs_request_get( 'error_type', 'general' );
-
-			switch ( $error_type ) {
-				case 'squid':
-					$title = 'Squid ACL Blocking Issue';
-					break;
-				case 'cloudflare':
-					$title = 'CloudFlare Blocking Issue';
-					break;
-				default:
-					$title = 'API Connectivity Issue';
-					break;
-			}
-
-			$custom_email_sections = array();
-
-			if ( 'squid' === $error_type ) {
-				// Override the 'Site' email section.
-				$custom_email_sections['site'] = array(
-					'rows' => array(
-						'hosting_company' => array( 'Hosting Company', fs_request_get( 'hosting_company' ) )
-					)
-				);
-			}
-
-			// Add 'API Error' custom email section.
-			$custom_email_sections['api_error'] = array(
-				'title' => 'API Error',
-				'rows'  => array(
-					'ping' => array( is_string( $pong ) ? htmlentities( $pong ) : json_encode( $pong ) )
-				)
-			);
-
-			// Add PHP info for deeper investigation.
-			ob_start();
-			phpinfo();
-			$php_info                          = ob_get_clean();
-			$custom_email_sections['php_info'] = array(
-				'title' => 'PHP Info',
-				'rows'  => array(
-					'info' => array( $php_info )
-				)
-			);
-
-			// Send email with technical details to resolve CloudFlare's firewall unnecessary protection.
-			$this->send_email(
-				'api@freemius.com',                              // recipient
-				$title . ' [' . $this->get_plugin_name() . ']',  // subject
-				$custom_email_sections,
-				array( "Reply-To: $admin_email <$admin_email>" ) // headers
-			);
-
-			$this->_admin_notices->add_sticky(
-				sprintf(
-					__fs( 'fix-request-sent-message', $this->_slug ),
-					'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
-				),
-				'server_details_sent'
-			);
-
-			// Action was taken, tell that API connectivity troubleshooting should be off now.
-
-			echo "1";
-			exit;
-		}
-
-		/**
-		 * Handle connectivity test retry approved by the user.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 */
-		function _retry_connectivity_test() {
-			$this->_admin_notices->remove_sticky( 'failed_connect_api_first' );
-
-			$pong = $this->ping();
-
-			$is_connected = $this->get_api_plugin_scope()->is_valid_ping( $pong );
-
-			if ( $is_connected ) {
-				$this->store_connectivity_info( $pong, $is_connected );
-
-				echo $this->get_after_plugin_activation_redirect_url();
-			} else {
-				// Add connectivity issue message after 2nd failed attempt.
-				$this->_add_connectivity_issue_message( $pong, false );
-
-				echo "1";
-			}
-
-			exit;
-		}
-
-		static function _add_firewall_issues_javascript() {
-			$params = array();
-			fs_require_once_template( 'firewall-issues-js.php', $params );
-		}
-
-		#endregion Connectivity Issues ------------------------------------------------------------------
-
-		#region Email ------------------------------------------------------------------
-
-		/**
-		 * Generates and sends an HTML email with customizable sections.
-		 *
-		 * @author Leo Fajardo (@leorw)
-		 * @since  1.1.2
-		 *
-		 * @param string $to_address
-		 * @param string $subject
-		 * @param array  $sections
-		 * @param array  $headers
-		 *
-		 * @return bool Whether the email contents were sent successfully.
-		 */
-		private function send_email(
-			$to_address,
-			$subject,
-			$sections = array(),
-			$headers = array()
-		) {
-			$default_sections = $this->get_email_sections();
-
-			// Insert new sections or replace the default email sections.
-			if ( is_array( $sections ) && ! empty( $sections ) ) {
-				foreach ( $sections as $section_id => $custom_section ) {
-					if ( ! isset( $default_sections[ $section_id ] ) ) {
-						// If the section does not exist, add it.
-						$default_sections[ $section_id ] = $custom_section;
-					} else {
-						// If the section already exists, override it.
-						$current_section = $default_sections[ $section_id ];
-
-						// Replace the current section's title if a custom section title exists.
-						if ( isset( $custom_section['title'] ) ) {
-							$current_section['title'] = $custom_section['title'];
-						}
-
-						// Insert new rows under the current section or replace the default rows.
-						if ( isset( $custom_section['rows'] ) && is_array( $custom_section['rows'] ) && ! empty( $custom_section['rows'] ) ) {
-							foreach ( $custom_section['rows'] as $row_id => $row ) {
-								$current_section['rows'][ $row_id ] = $row;
-							}
-						}
-
-						$default_sections[ $section_id ] = $current_section;
-					}
-				}
-			}
-
-			$vars    = array( 'sections' => $default_sections );
-			$message = fs_get_template( 'email.php', $vars );
-
-			// Set the type of email to HTML.
-			$headers[] = 'Content-type: text/html';
-
-			$header_string = implode( "\r\n", $headers );
-
-			return wp_mail(
-				$to_address,
-				$subject,
-				$message,
-				$header_string
-			);
-		}
-
-		/**
-		 * Generates the data for the sections of the email content.
-		 *
-		 * @author Leo Fajardo (@leorw)
-		 * @since  1.1.2
-		 *
-		 * @return array
-		 */
-		private function get_email_sections() {
-			// Retrieve the current user's information so that we can get the user's email, first name, and last name below.
-			$current_user = self::_get_current_wp_user();
-
-			// Retrieve the cURL version information so that we can get the version number below.
-			$curl_version_information = curl_version();
-
-			$active_plugin = self::get_active_plugins();
-
-			// Generate the list of active plugins separated by new line. 
-			$active_plugin_string = '';
-			foreach ( $active_plugin as $plugin ) {
-				$active_plugin_string .= sprintf(
-					'<a href="%s">%s</a> [v%s]<br>',
-					$plugin['PluginURI'],
-					$plugin['Name'],
-					$plugin['Version']
-				);
-			}
-
-			$server_ip = WP_FS__REMOTE_ADDR;
-
-			// Generate the default email sections.
-			$sections = array(
-				'sdk'     => array(
-					'title' => 'SDK',
-					'rows'  => array(
-						'fs_version'   => array( 'FS Version', $this->version ),
-						'curl_version' => array( 'cURL Version', $curl_version_information['version'] )
-					)
-				),
-				'plugin'  => array(
-					'title' => 'Plugin',
-					'rows'  => array(
-						'name'    => array( 'Name', $this->get_plugin_name() ),
-						'version' => array( 'Version', $this->get_plugin_version() )
-					)
-				),
-				'site'    => array(
-					'title' => 'Site',
-					'rows'  => array(
-						'unique_id'   => array( 'Address', $this->get_anonymous_id() ),
-						'address'     => array( 'Address', site_url() ),
-						'host'        => array(
-							'HTTP_HOST',
-							( ! empty( $_SERVER['HTTP_HOST'] ) ? $_SERVER['HTTP_HOST'] : '' )
-						),
-						'server_addr' => array(
-							'SERVER_ADDR',
-							'<a href="http://www.projecthoneypot.org/ip_' . $server_ip . '">' . $server_ip . '</a>'
-						)
-					)
-				),
-				'user'    => array(
-					'title' => 'User',
-					'rows'  => array(
-						'email' => array( 'Email', $current_user->user_email ),
-						'first' => array( 'First', $current_user->user_firstname ),
-						'last'  => array( 'Last', $current_user->user_lastname )
-					)
-				),
-				'plugins' => array(
-					'title' => 'Plugins',
-					'rows'  => array(
-						'active_plugins' => array( 'Active Plugins', $active_plugin_string )
-					)
-				),
-			);
-
-			// Allow the sections to be modified by other code.
-			$sections = $this->apply_filters( 'email_template_sections', $sections );
-
-			return $sections;
-		}
-
-		#endregion Email ------------------------------------------------------------------
-
-		#region Initialization ------------------------------------------------------------------
-
-		/**
-		 * Init plugin's Freemius instance.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param number $id
-		 * @param string $public_key
-		 * @param bool   $is_live
-		 * @param bool   $is_premium
-		 */
-		function init( $id, $public_key, $is_live = true, $is_premium = true ) {
-			$this->_logger->entrance();
-
-			$this->dynamic_init( array(
-				'id'         => $id,
-				'public_key' => $public_key,
-				'is_live'    => $is_live,
-				'is_premium' => $is_premium,
-			) );
-		}
-
-		/**
-		 * Dynamic initiator, originally created to support initiation
-		 * with parent_id for add-ons.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param array $plugin_info
-		 *
-		 * @throws Freemius_Exception
-		 */
-		function dynamic_init( array $plugin_info ) {
-			$this->_logger->entrance();
-
-			$this->parse_settings( $plugin_info );
-
-			if ( $this->should_stop_execution() ) {
-				return;
-			}
-
-			if ( ! $this->is_registered() ) {
-				if ( $this->is_anonymous() ) {
-					// If user skipped, no need to test connectivity.
-					$this->_has_api_connection = true;
-					$this->_is_on              = true;
-				} else {
-					if ( ! $this->has_api_connectivity() ) {
-						if ( $this->_admin_notices->has_sticky( 'failed_connect_api_first' ) ||
-						     $this->_admin_notices->has_sticky( 'failed_connect_api' )
-						) {
-							if ( ! $this->_enable_anonymous ) {
-								// If anonymous mode is disabled, add firewall admin-notice message.
-								add_action( 'admin_footer', array( 'Freemius', '_add_firewall_issues_javascript' ) );
-
-								add_action( "wp_ajax_{$this->_slug}_resolve_firewall_issues", array(
-									&$this,
-									'_email_about_firewall_issue'
-								) );
-
-								add_action( "wp_ajax_{$this->_slug}_retry_connectivity_test", array(
-									&$this,
-									'_retry_connectivity_test'
-								) );
-							}
-						}
-
-						return;
-					} else {
-						$this->_admin_notices->remove_sticky( array(
-							'failed_connect_api_first',
-							'failed_connect_api',
-						) );
-
-						if ( $this->_anonymous_mode ) {
-							// Simulate anonymous mode.
-							$this->_is_anonymous = true;
-						}
-					}
-				}
-
-				// Check if Freemius is on for the current plugin.
-				// This MUST be executed after all the plugin variables has been loaded.
-				if ( ! $this->is_on() ) {
-					return;
-				}
-			}
-
-			if ( $this->has_api_connectivity() && $this->is_user_in_admin() ) {
-				/**
-				 * Schedule daily data sync cron if:
-				 *
-				 *  1. User opted-in (for tracking).
-				 *  2. If plugin has add-ons (update add-ons data).
-				 *  3. If skipped, but later upgraded (opted-in via upgrade).
-				 *
-				 * @author Vova Feldman (@svovaf)
-				 * @since  1.1.7.3
-				 *
-				 */
-				if ( $this->is_registered() ||
-				     ( ! $this->is_activation_mode() && $this->_has_addons )
-				) {
-
-					$this->hook_callback_to_sync_cron();
-
-					if ( ! $this->is_sync_cron_on() ) {
-						$this->schedule_sync_cron();
-					}
-				}
-
-				/**
-				 * Check if requested for manual blocking background sync.
-				 */
-				if ( fs_request_has( 'background_sync' ) ) {
-					$this->run_manual_sync();
-				}
-			}
-
-			if ( $this->is_registered() ) {
-				$this->hook_callback_to_install_sync();
-			}
-
-			if ( $this->is_addon() ) {
-				if ( $this->is_parent_plugin_installed() ) {
-					// Link to parent FS.
-					$this->_parent = self::get_instance_by_id( $this->_plugin->parent_plugin_id );
-
-					// Get parent plugin reference.
-					$this->_parent_plugin = $this->_parent->get_plugin();
-				}
-			}
-
-			if ( $this->is_user_in_admin() ) {
-				global $pagenow;
-				if ( 'plugins.php' === $pagenow ) {
-					$this->hook_plugin_action_links();
-				}
-
-				if ( $this->is_addon() ) {
-					if ( ! $this->is_parent_plugin_installed() ) {
-						$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
-
-						if ( isset( $plugin_info['parent'] ) ) {
-							$parent_name = $this->get_option( $plugin_info['parent'], 'name', null );
-						}
-
-						$this->_admin_notices->add(
-							( ! empty( $parent_name ) ?
-								sprintf( __fs( 'addon-x-cannot-run-without-y', $this->_slug ), $this->get_plugin_name(), $parent_name ) :
-								sprintf( __fs( 'addon-x-cannot-run-without-parent', $this->_slug ), $this->get_plugin_name() )
-							),
-							__fs( 'oops', $this->_slug ) . '...',
-							'error'
-						);
-
-						return;
-					} else {
-						if ( $this->_parent->is_registered() && ! $this->is_registered() ) {
-							// If parent plugin activated, automatically install add-on for the user.
-							$this->_activate_addon_account( $this->_parent );
-						}
-
-						// @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic.
-						if ( $this->is_premium() ) {
-							// Remove add-on download admin-notice.
-							$this->_parent->_admin_notices->remove_sticky( 'addon_plan_upgraded_' . $this->_slug );
-						}
-
-						$this->deactivate_premium_only_addon_without_license();
-					}
-				} else {
-					add_action( 'admin_init', array( &$this, '_admin_init_action' ) );
-
-					if ( $this->has_addons() &&
-					     'plugin-information' === fs_request_get( 'tab', false ) &&
-					     $this->get_id() == fs_request_get( 'parent_plugin_id', false )
-					) {
-						require_once WP_FS__DIR_INCLUDES . '/fs-plugin-info-dialog.php';
-
-						new FS_Plugin_Info_Dialog( $this );
-					}
-				}
-
-				if ( $this->is_premium() ) {
-					new FS_Plugin_Updater( $this );
-				}
-
-//				if ( $this->is_registered() ||
-//				     $this->is_anonymous() ||
-//				     $this->is_pending_activation()
-//				) {
-//					$this->_init_admin();
-//				}
-			}
-
-			$this->do_action( 'initiated' );
-
-			if ( ! $this->is_addon() ) {
-				if ( $this->is_registered() ) {
-					// Fix for upgrade from versions < 1.0.9.
-					if ( ! isset( $this->_storage->activation_timestamp ) ) {
-						$this->_storage->activation_timestamp = WP_FS__SCRIPT_START_TIME;
-					}
-					if ( $this->_storage->prev_is_premium !== $this->_plugin->is_premium ) {
-						if ( isset( $this->_storage->prev_is_premium ) ) {
-							add_action( is_admin() ? 'admin_init' : 'init', array(
-								&$this,
-								'_plugin_code_type_changed'
-							) );
-						} else {
-							// Set for code type for the first time.
-							$this->_storage->prev_is_premium = $this->_plugin->is_premium;
-						}
-					}
-
-					$this->do_action( 'after_init_plugin_registered' );
-				} else if ( $this->is_anonymous() ) {
-					$this->do_action( 'after_init_plugin_anonymous' );
-				} else if ( $this->is_pending_activation() ) {
-					$this->do_action( 'after_init_plugin_pending_activations' );
-				}
-			} else {
-				if ( $this->is_registered() ) {
-					$this->do_action( 'after_init_addon_registered' );
-				} else if ( $this->is_anonymous() ) {
-					$this->do_action( 'after_init_addon_anonymous' );
-				} else if ( $this->is_pending_activation() ) {
-					$this->do_action( 'after_init_addon_pending_activations' );
-				}
-			}
-		}
-
-		/**
-		 * Parse plugin's settings (as defined by the plugin dev).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @param array $plugin_info
-		 *
-		 * @throws \Freemius_Exception
-		 */
-		private function parse_settings( &$plugin_info ) {
-			$this->_logger->entrance();
-
-			$id          = $this->get_numeric_option( $plugin_info, 'id', false );
-			$public_key  = $this->get_option( $plugin_info, 'public_key', false );
-			$secret_key  = $this->get_option( $plugin_info, 'secret_key', null );
-			$parent_id   = $this->get_numeric_option( $plugin_info, 'parent_id', null );
-			$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
-
-			if ( isset( $plugin_info['parent'] ) ) {
-				$parent_id = $this->get_numeric_option( $plugin_info['parent'], 'id', null );
-//				$parent_slug       = $this->get_option( $plugin_info['parent'], 'slug', null );
-//				$parent_public_key = $this->get_option( $plugin_info['parent'], 'public_key', null );
-				$parent_name = $this->get_option( $plugin_info['parent'], 'name', null );
-			}
-
-			if ( false === $id ) {
-				throw new Freemius_Exception( 'Plugin id parameter is not set.' );
-			}
-			if ( false === $public_key ) {
-				throw new Freemius_Exception( 'Plugin public_key parameter is not set.' );
-			}
-
-			$plugin = ( $this->_plugin instanceof FS_Plugin ) ?
-				$this->_plugin :
-				new FS_Plugin();
-
-			$plugin->update( array(
-				'id'               => $id,
-				'public_key'       => $public_key,
-				'slug'             => $this->_slug,
-				'parent_plugin_id' => $parent_id,
-				'version'          => $this->get_plugin_version(),
-				'title'            => $this->get_plugin_name(),
-				'file'             => $this->_plugin_basename,
-				'is_premium'       => $this->get_bool_option( $plugin_info, 'is_premium', true ),
-				'is_live'          => $this->get_bool_option( $plugin_info, 'is_live', true ),
-//				'secret_key' => $secret_key,
-			) );
-
-			if ( $plugin->is_updated() ) {
-				// Update plugin details.
-				$this->_plugin = FS_Plugin_Manager::instance( $this->_slug )->store( $plugin );
-			}
-			// Set the secret key after storing the plugin, we don't want to store the key in the storage.
-			$this->_plugin->secret_key = $secret_key;
-
-			if ( ! isset( $plugin_info['menu'] ) ) {
-				// Back compatibility to 1.1.2
-				$plugin_info['menu'] = array(
-					'slug' => isset( $plugin_info['menu_slug'] ) ?
-						$plugin_info['menu_slug'] :
-						$this->_slug
-				);
-			}
-
-			$this->_menu = FS_Admin_Menu_Manager::instance( $this->_slug );
-			$this->_menu->init( $plugin_info['menu'], $this->is_addon() );
-
-			$this->_has_addons       = $this->get_bool_option( $plugin_info, 'has_addons', false );
-			$this->_has_paid_plans   = $this->get_bool_option( $plugin_info, 'has_paid_plans', true );
-			$this->_is_org_compliant = $this->get_bool_option( $plugin_info, 'is_org_compliant', true );
-			$this->_enable_anonymous = $this->get_bool_option( $plugin_info, 'enable_anonymous', true );
-			$this->_anonymous_mode   = $this->get_bool_option( $plugin_info, 'anonymous_mode', false );
-			$this->_permissions      = $this->get_option( $plugin_info, 'permissions', array() );
-		}
-
-		/**
-		 * @param string[] $options
-		 * @param string   $key
-		 * @param mixed    $default
-		 *
-		 * @return bool
-		 */
-		private function get_option( &$options, $key, $default = false ) {
-			return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
-		}
-
-		private function get_bool_option( &$options, $key, $default = false ) {
-			return isset( $options[ $key ] ) && is_bool( $options[ $key ] ) ? $options[ $key ] : $default;
-		}
-
-		private function get_numeric_option( &$options, $key, $default = false ) {
-			return isset( $options[ $key ] ) && is_numeric( $options[ $key ] ) ? $options[ $key ] : $default;
-		}
-
-		/**
-		 * Gate keeper.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return bool
-		 */
-		private function should_stop_execution() {
-			if ( $this->is_activation_mode() ) {
-				if ( ! is_admin() ) {
-					/**
-					 * If in activation mode, don't execute Freemius outside of the
-					 * admin dashboard.
-					 *
-					 * @author Vova Feldman (@svovaf)
-					 * @since  1.1.7.3
-					 */
-					return true;
-				}
-
-				if ( ! WP_FS__IS_HTTP_REQUEST ) {
-					/**
-					 * If in activation and executed without HTTP context (e.g. CLI, Cronjob),
-					 * then don't start Freemius.
-					 *
-					 * @author Vova Feldman (@svovaf)
-					 * @since  1.1.6.3
-					 *
-					 * @link   https://wordpress.org/support/topic/errors-in-the-freemius-class-when-running-in-wordpress-in-cli
-					 */
-					return true;
-				}
-
-				if ( $this->is_cron() ) {
-					/**
-					 * If in activation mode, don't execute Freemius during wp crons
-					 * (wp crons have HTTP context - called as HTTP request).
-					 *
-					 * @author Vova Feldman (@svovaf)
-					 * @since  1.1.7.3
-					 */
-					return true;
-				}
-
-				if ( $this->is_ajax() &&
-				     ! $this->_admin_notices->has_sticky( 'failed_connect_api_first' ) &&
-				     ! $this->_admin_notices->has_sticky( 'failed_connect_api' )
-				) {
-					/**
-					 * During activation, if running in AJAX mode, unless there's a sticky
-					 * connectivity issue notice, don't run Freemius.
-					 *
-					 * @author Vova Feldman (@svovaf)
-					 * @since  1.1.7.3
-					 */
-					return true;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Handles plugin's code type change (free <--> premium).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		function _plugin_code_type_changed() {
-			// Schedule code type changes event.
-//			$this->sync_install();
-			$this->schedule_install_sync();
-
-			if ( $this->is_premium() ) {
-				// Activated premium code.
-				$this->do_action( 'after_premium_version_activation' );
-
-				// Remove all sticky messages related to download of the premium version.
-				$this->_admin_notices->remove_sticky( array(
-					'trial_started',
-					'plan_upgraded',
-					'plan_changed',
-				) );
-
-				$this->_admin_notices->add_sticky(
-					__fs( 'premium-activated-message', $this->_slug ),
-					'premium_activated',
-					__fs( 'woot', $this->_slug ) . '!'
-				);
-			} else {
-				// Activated free code (after had the premium before).
-				$this->do_action( 'after_free_version_reactivation' );
-
-				if ( $this->is_paying() && ! $this->is_premium() ) {
-					$this->_admin_notices->add_sticky(
-						sprintf(
-							__fs( 'you-have-x-license', $this->_slug ),
-							$this->_site->plan->title
-						) . ' ' . $this->_get_latest_download_link( sprintf(
-							__fs( 'download-x-version-now', $this->_slug ),
-							$this->_site->plan->title
-						) ),
-						'plan_upgraded',
-						__fs( 'yee-haw', $this->_slug ) . '!'
-					);
-				}
-			}
-
-			// Update is_premium of latest version.
-			$this->_storage->prev_is_premium = $this->_plugin->is_premium;
-		}
-
-		#endregion Initialization ------------------------------------------------------------------
-
-		#region Add-ons -------------------------------------------------------------------------
-
-		/**
-		 * Check if add-on installed and activated on site.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param string|number $slug_or_id
-		 *
-		 * @return bool
-		 */
-		function is_addon_activated( $slug_or_id ) {
-			return self::has_instance( $slug_or_id );
-		}
-
-		/**
-		 * Check if add-on was connected to install
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @param string $slug
-		 *
-		 * @return bool
-		 */
-		function is_addon_connected( $slug ) {
-			$sites = self::get_all_sites();
-
-			if ( ! isset( $sites[ $slug ] ) ) {
-				return false;
-			}
-
-			$site = $sites[ $slug ];
-
-			$plugin = FS_Plugin_Manager::instance( $slug )->get();
-
-			if ( $plugin->parent_plugin_id != $this->_plugin->id ) {
-				// The given slug do NOT belong to any of the plugin's add-ons.
-				return false;
-			}
-
-			return ( is_object( $site ) &&
-			         is_numeric( $site->id ) &&
-			         is_numeric( $site->user_id ) &&
-			         is_object( $site->plan )
-			);
-		}
-
-		/**
-		 * Determines if add-on installed.
-		 *
-		 * NOTE: This is a heuristic and only works if the folder/file named as the slug.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param string $slug
-		 *
-		 * @return bool
-		 */
-		function is_addon_installed( $slug ) {
-			return file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->get_addon_basename( $slug ) ) );
-		}
-
-		/**
-		 * Get add-on basename.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param string $slug
-		 *
-		 * @return string
-		 */
-		function get_addon_basename( $slug ) {
-			if ( $this->is_addon_activated( $slug ) ) {
-				self::instance( $slug )->get_plugin_basename();
-			}
-
-			$premium_basename = $slug . '-premium/' . $slug . '.php';
-
-			if ( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $premium_basename ) ) ) {
-				return $premium_basename;
-			}
-
-			$free_basename = $slug . '/' . $slug . '.php';
-
-			return $free_basename;
-		}
-
-		/**
-		 * Get installed add-ons instances.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return Freemius[]
-		 */
-		function get_installed_addons() {
-			$installed_addons = array();
-			foreach ( self::$_instances as $slug => $instance ) {
-				if ( $instance->is_addon() && is_object( $instance->_parent_plugin ) ) {
-					if ( $this->_plugin->id == $instance->_parent_plugin->id ) {
-						$installed_addons[] = $instance;
-					}
-				}
-			}
-
-			return $installed_addons;
-		}
-
-		/**
-		 * Check if any add-ons of the plugin are installed.
-		 *
-		 * @author Leo Fajardo (@leorw)
-		 * @since  1.1.1
-		 *
-		 * @return bool
-		 */
-		function has_installed_addons() {
-			if ( ! $this->has_addons() ) {
-				return false;
-			}
-
-			foreach ( self::$_instances as $slug => $instance ) {
-				if ( $instance->is_addon() && is_object( $instance->_parent_plugin ) ) {
-					if ( $this->_plugin->id == $instance->_parent_plugin->id ) {
-						return true;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Tell Freemius that the current plugin is an add-on.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param number $parent_plugin_id The parent plugin ID
-		 */
-		function init_addon( $parent_plugin_id ) {
-			$this->_plugin->parent_plugin_id = $parent_plugin_id;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool
-		 */
-		function is_addon() {
-			return isset( $this->_plugin->parent_plugin_id ) && is_numeric( $this->_plugin->parent_plugin_id );
-		}
-
-		/**
-		 * Deactivate add-on if it's premium only and the user does't have a valid license.
-		 *
-		 * @param bool $is_after_trial_cancel
-		 *
-		 * @return bool If add-on was deactivated.
-		 */
-		private function deactivate_premium_only_addon_without_license( $is_after_trial_cancel = false ) {
-			if ( ! $this->has_free_plan() &&
-			     ! $this->has_features_enabled_license() &&
-			     ! $this->_has_premium_license()
-			) {
-				deactivate_plugins( array( $this->_plugin_basename ), true );
-
-				$this->_parent->_admin_notices->add_sticky(
-					sprintf(
-						__fs( ( $is_after_trial_cancel ?
-								'addon-trial-cancelled-message' :
-								'addon-no-license-message' ),
-							$this->_parent->_slug
-						),
-						'<b>' . $this->_plugin->title . '</b>'
-					) . ' ' . sprintf(
-						'<a href="%s" aria-label="%s" class="button button-primary" style="margin-left: 10px; vertical-align: middle;">%s &nbsp;&#10140;</a>',
-						$this->_parent->addon_url( $this->_slug ),
-						esc_attr( sprintf( __fs( 'more-information-about-x', $this->_parent->_slug ), $this->_plugin->title ) ),
-						__fs( 'purchase-license', $this->_parent->_slug )
-					),
-					'no_addon_license',
-					( $is_after_trial_cancel ? '' : __fs( 'oops', $this->_parent->_slug ) . '...' ),
-					( $is_after_trial_cancel ? 'success' : 'error' )
-				);
-
-				return true;
-			}
-
-			return false;
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		#region Sandbox ------------------------------------------------------------------
-
-		/**
-		 * Set Freemius into sandbox mode for debugging.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param string $secret_key
-		 */
-		function init_sandbox( $secret_key ) {
-			$this->_plugin->secret_key = $secret_key;
-
-			// Update plugin details.
-			FS_Plugin_Manager::instance( $this->_slug )->update( $this->_plugin, true );
-		}
-
-		/**
-		 * Check if running payments in sandbox mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return bool
-		 */
-		function is_payments_sandbox() {
-			return ( ! $this->is_live() ) || isset( $this->_plugin->secret_key );
-		}
-
-		#endregion Sandbox ------------------------------------------------------------------
-
-		/**
-		 * Check if running test vs. live plugin.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return bool
-		 */
-		function is_live() {
-			return $this->_plugin->is_live;
-		}
-
-		/**
-		 * Check if the user skipped connecting the account with Freemius.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function is_anonymous() {
-			if ( ! isset( $this->_is_anonymous ) ) {
-				if ( ! isset( $this->_storage->is_anonymous ) ) {
-					// Not skipped.
-					$this->_is_anonymous = false;
-				} else if ( is_bool( $this->_storage->is_anonymous ) ) {
-					// For back compatibility, since the variable was boolean before.
-					$this->_is_anonymous = $this->_storage->is_anonymous;
-
-					// Upgrade stored data format to 1.1.3 format.
-					$this->set_anonymous_mode( $this->_storage->is_anonymous );
-				} else {
-					// Version 1.1.3 and later.
-					$this->_is_anonymous = $this->_storage->is_anonymous['is'];
-				}
-			}
-
-			return $this->_is_anonymous;
-		}
-
-		/**
-		 * Check if user connected his account and install pending email activation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function is_pending_activation() {
-			return $this->_storage->get( 'is_pending_activation', false );
-		}
-
-		/**
-		 * Check if plugin must be WordPress.org compliant.
-		 *
-		 * @since 1.0.7
-		 *
-		 * @return bool
-		 */
-		function is_org_repo_compliant() {
-			return $this->_is_org_compliant;
-		}
-
-		#region Daily Sync Cron ------------------------------------------------------------------
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		private function run_manual_sync() {
-			$this->require_pluggable_essentials();
-
-			if ( ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			// Run manual sync.
-			$this->_sync_cron();
-
-			// Reschedule next cron to run 24 hours from now (performance optimization).
-			$this->clear_sync_cron();
-
-			$this->schedule_sync_cron( time() + WP_FS__TIME_24_HOURS_IN_SEC, false );
-		}
-
-		/**
-		 * Data sync cron job. Replaces the background sync non blocking HTTP request
-		 * that doesn't halt page loading.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		function _sync_cron() {
-			$this->_logger->entrance();
-
-			// Store the last time data sync was executed.
-			$this->_storage->sync_timestamp = time();
-
-			// Check if API is temporary down.
-			if ( FS_Api::is_temporary_down() ) {
-				return;
-			}
-
-			// @todo Add logic that identifies API latency, and reschedule the next background sync randomly between 8-16 hours.
-
-			if ( $this->is_registered() ) {
-				if ( $this->has_paid_plan() ) {
-					// Initiate background plan sync.
-					$this->_sync_license( true );
-
-					if ( $this->is_paying() ) {
-						// Check for premium plugin updates.
-						$this->_check_updates( true );
-					}
-				} else {
-					// Sync install (only if something changed locally).
-					$this->sync_install();
-				}
-			}
-
-			if ( ! $this->is_addon() && $this->_has_addons ) {
-				// Sync add-ons collection.
-				$this->_sync_addons( true );
-			}
-		}
-
-		/**
-		 * Check if sync was executed in the last $period of seconds.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @param int $period In seconds
-		 *
-		 * @return bool
-		 */
-		private function is_sync_executed( $period = WP_FS__TIME_24_HOURS_IN_SEC ) {
-			if ( ! isset( $this->_storage->sync_timestamp ) ) {
-				return false;
-			}
-
-			return ( $this->_storage->sync_timestamp > ( WP_FS__SCRIPT_START_TIME - $period ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return bool
-		 */
-		private function is_sync_cron_on() {
-			/**
-			 * @var object $sync_cron_data
-			 */
-			$sync_cron_data = $this->_storage->get( 'sync_cron', null );
-
-			return ( ! is_null( $sync_cron_data ) && true === $sync_cron_data->on );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @param int  $start_at        Defaults to now.
-		 * @param bool $randomize_start If true, schedule first job randomly during the next 12 hours. Otherwise,
-		 *                              schedule job to start right away.
-		 */
-		private function schedule_sync_cron( $start_at = WP_FS__SCRIPT_START_TIME, $randomize_start = true ) {
-			$this->_logger->entrance();
-
-			if ( $randomize_start ) {
-				// Schedule first sync with a random 12 hour time range from now.
-				$start_at += rand( 0, ( WP_FS__TIME_24_HOURS_IN_SEC / 2 ) );
-			}
-
-			// Schedule daily WP cron.
-			wp_schedule_event(
-				$start_at,
-				'daily',
-				$this->get_action_tag( 'data_sync' )
-			);
-
-			$this->_storage->store( 'sync_cron', (object) array(
-				'version'     => $this->get_plugin_version(),
-				'sdk_version' => $this->version,
-				'timestamp'   => WP_FS__SCRIPT_START_TIME,
-				'on'          => true,
-			) );
-		}
-
-		/**
-		 * Add the actual sync function to the cron job hook.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		private function hook_callback_to_sync_cron() {
-			$this->add_action( 'data_sync', array( &$this, '_sync_cron' ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		private function clear_sync_cron() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_sync_cron_on() ) {
-				return;
-			}
-
-			$this->_storage->remove( 'sync_cron' );
-
-			wp_clear_scheduled_hook( $this->get_action_tag( 'data_sync' ) );
-		}
-
-		/**
-		 * Unix timestamp for next sync cron execution or false if not scheduled.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return int|false
-		 */
-		function next_sync_cron() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_sync_cron_on() ) {
-				return false;
-			}
-
-			return wp_next_scheduled( $this->get_action_tag( 'data_sync' ) );
-		}
-
-		/**
-		 * Unix timestamp for previous sync cron execution or false if never executed.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return int|false
-		 */
-		function last_sync_cron() {
-			$this->_logger->entrance();
-
-			return $this->_storage->get( 'sync_timestamp' );
-		}
-
-		#endregion Daily Sync Cron ------------------------------------------------------------------
-
-		#region Async Install Sync ------------------------------------------------------------------
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return bool
-		 */
-		private function is_install_sync_scheduled() {
-			/**
-			 * @var object $cron_data
-			 */
-			$cron_data = $this->_storage->get( 'install_sync_cron', null );
-
-			return ( ! is_null( $cron_data ) && true === $cron_data->on );
-		}
-
-		/**
-		 * Instead of running blocking install sync event, execute non blocking scheduled wp-cron.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		private function schedule_install_sync() {
-			$this->_logger->entrance();
-
-			$this->clear_install_sync_cron();
-
-			// Schedule immediate install sync.
-			wp_schedule_single_event(
-				WP_FS__SCRIPT_START_TIME,
-				$this->get_action_tag( 'install_sync' )
-			);
-
-			$this->_storage->store( 'install_sync_cron', (object) array(
-				'version'     => $this->get_plugin_version(),
-				'sdk_version' => $this->version,
-				'timestamp'   => WP_FS__SCRIPT_START_TIME,
-				'on'          => true,
-			) );
-		}
-
-		/**
-		 * Unix timestamp for previous install sync cron execution or false if never executed.
-		 *
-		 * @todo   There's some very strange bug that $this->_storage->install_sync_timestamp value is not being
-		 *         updated. But for sure the sync event is working.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return int|false
-		 */
-		function last_install_sync() {
-			$this->_logger->entrance();
-
-			return $this->_storage->get( 'install_sync_timestamp' );
-		}
-
-		/**
-		 * Unix timestamp for next install sync cron execution or false if not scheduled.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return int|false
-		 */
-		function next_install_sync() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_install_sync_scheduled() ) {
-				return false;
-			}
-
-			return wp_next_scheduled( $this->get_action_tag( 'install_sync' ) );
-		}
-
-		/**
-		 * Add the actual install sync function to the cron job hook.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		private function hook_callback_to_install_sync() {
-			$this->add_action( 'install_sync', array( &$this, '_run_sync_install' ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		private function clear_install_sync_cron() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_install_sync_scheduled() ) {
-				return;
-			}
-
-			$this->_storage->remove( 'install_sync_cron' );
-
-			wp_clear_scheduled_hook( $this->get_action_tag( 'install_sync' ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 */
-		public function _run_sync_install() {
-			$this->_logger->entrance();
-
-			// Update last install sync timestamp.
-			$this->_storage->install_sync_timestamp = time();
-
-			$this->sync_install( array(), true );
-		}
-
-		#endregion Async Install Sync ------------------------------------------------------------------
-
-		/**
-		 * Show a notice that activation is currently pending.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @param bool|string $email
-		 */
-		function _add_pending_activation_notice( $email = false ) {
-			if ( ! is_string( $email ) ) {
-				$current_user = self::_get_current_wp_user();
-				$email        = $current_user->user_email;
-			}
-
-			$this->_admin_notices->add_sticky(
-				sprintf(
-					__fs( 'pending-activation-message', $this->_slug ),
-					'<b>' . $this->get_plugin_name() . '</b>',
-					'<b>' . $email . '</b>'
-				),
-				'activation_pending',
-				'Thanks!'
-			);
-		}
-
-		/**
-		 * Check if currently in plugin activation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 *
-		 * @return bool
-		 */
-		function is_plugin_activation() {
-			return get_option( "fs_{$this->_slug}_activated", false );
-		}
-
-		/**
-		 *
-		 * NOTE: admin_menu action executed before admin_init.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 */
-		function _admin_init_action() {
-			/**
-			 * Automatically redirect to connect/activation page after plugin activation.
-			 *
-			 * @since 1.1.7 Do NOT redirect to opt-in when running in network admin mode.
-			 */
-			if ( $this->is_plugin_activation() ) {
-				delete_option( "fs_{$this->_slug}_activated" );
-
-				if ( ! function_exists( 'is_network_admin' ) || ! is_network_admin() ) {
-					$this->_redirect_on_activation_hook();
-
-					return;
-				}
-			}
-
-			if ( fs_request_is_action( $this->_slug . '_skip_activation' ) ) {
-				check_admin_referer( $this->_slug . '_skip_activation' );
-
-				$this->skip_connection();
-
-				if ( fs_redirect( $this->get_after_activation_url( 'after_skip_url' ) ) ) {
-					exit();
-				}
-			}
-
-			if ( ! $this->is_addon() && ! $this->is_registered() && ! $this->is_anonymous() ) {
-				if ( ! $this->is_pending_activation() ) {
-					if ( ! $this->_menu->is_activation_page() ) {
-						if ( $this->is_plugin_new_install() ) {
-							// Show notice for new plugin installations.
-							$this->_admin_notices->add(
-								sprintf(
-									__fs( 'you-are-step-away', $this->_slug ),
-									sprintf( '<b><a href="%s">%s</a></b>',
-										$this->get_activation_url(),
-										sprintf( __fs( 'activate-x-now', $this->_slug ), $this->get_plugin_name() )
-									)
-								),
-								'',
-								'update-nag'
-							);
-						} else {
-							if ( ! isset( $this->_storage->sticky_optin_added ) ) {
-								$this->_storage->sticky_optin_added = true;
-
-								// Show notice for new plugin installations.
-								$this->_admin_notices->add_sticky(
-									sprintf(
-										__fs( 'few-plugin-tweaks', $this->_slug ),
-										sprintf( '<b><a href="%s">%s</a></b>',
-											$this->get_activation_url(),
-											sprintf( __fs( 'optin-x-now', $this->_slug ), $this->get_plugin_name() )
-										)
-									),
-									'connect_account',
-									'',
-									'update-nag'
-								);
-							}
-
-							if ( $this->has_filter( 'optin_pointer_element' ) ) {
-								// Don't show admin nag if plugin update.
-								wp_enqueue_script( 'wp-pointer' );
-								wp_enqueue_style( 'wp-pointer' );
-
-								$this->_enqueue_connect_essentials();
-
-								add_action( 'admin_print_footer_scripts', array(
-									$this,
-									'_add_connect_pointer_script'
-								) );
-							}
-
-						}
-					}
-				}
-			}
-
-			$this->_add_upgrade_action_link();
-		}
-
-		/**
-		 * Enqueue connect requires scripts and styles.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 */
-		function _enqueue_connect_essentials() {
-			wp_enqueue_script( 'jquery' );
-			wp_enqueue_script( 'json2' );
-
-			fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
-			fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
-
-			fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
-		}
-
-		/**
-		 * Add connect / opt-in pointer.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 */
-		function _add_connect_pointer_script() {
-			$vars            = array( 'slug' => $this->_slug );
-			$pointer_content = fs_get_template( 'connect.php', $vars );
-			?>
-			<script type="text/javascript">// <![CDATA[
-				jQuery(document).ready(function ($) {
-					if ('undefined' !== typeof(jQuery().pointer)) {
-
-						var element = <?php echo $this->apply_filters('optin_pointer_element', '$("#non_existing_element");') ?>;
-
-						if (element.length > 0) {
-							var optin = $(element).pointer($.extend(true, {}, {
-								content     : <?php echo json_encode($pointer_content) ?>,
-								position    : {
-									edge : 'left',
-									align: 'center'
-								},
-								buttons     : function () {
-									// Don't show pointer buttons.
-									return '';
-								},
-								pointerWidth: 482
-							}, <?php echo $this->apply_filters('optin_pointer_options_json', '{}') ?>));
-
-							<?php
-							echo $this->apply_filters('optin_pointer_execute', "
-
-							optin.pointer('open');
-
-							// Tag the opt-in pointer with custom class.
-							$('.wp-pointer #fs_connect')
-								.parents('.wp-pointer.wp-pointer-top')
-								.addClass('fs-opt-in-pointer');
-
-							", 'element', 'optin') ?>
-						}
-					}
-				});
-				// ]]></script>
-		<?php
-		}
-
-		/**
-		 * Return current page's URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return string
-		 */
-		function current_page_url() {
-			$url = 'http';
-
-			if ( isset( $_SERVER["HTTPS"] ) ) {
-				if ( $_SERVER["HTTPS"] == "on" ) {
-					$url .= "s";
-				}
-			}
-			$url .= "://";
-			if ( $_SERVER["SERVER_PORT"] != "80" ) {
-				$url .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
-			} else {
-				$url .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
-			}
-
-			return esc_url( $url );
-		}
-
-		/**
-		 * Check if the current page is the plugin's main admin settings page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function _is_plugin_page() {
-			return fs_is_plugin_page( $this->_menu->get_raw_slug() ) ||
-			       fs_is_plugin_page( $this->_slug );
-		}
-
-		/* Events
-		------------------------------------------------------------------------------------------------------------------*/
-		/**
-		 * Delete site install from Database.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param bool $store
-		 */
-		function _delete_site( $store = true ) {
-			$sites = self::get_all_sites();
-
-			if ( isset( $sites[ $this->_slug ] ) ) {
-				unset( $sites[ $this->_slug ] );
-			}
-
-			self::$_accounts->set_option( 'sites', $sites, $store );
-		}
-
-		/**
-		 * Delete plugin's plans information.
-		 *
-		 * @param bool $store Flush to Database if true.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		private function _delete_plans( $store = true ) {
-			$this->_logger->entrance();
-
-			$plans = self::get_all_plans();
-
-			unset( $plans[ $this->_slug ] );
-
-			self::$_accounts->set_option( 'plans', $plans, $store );
-		}
-
-		/**
-		 * Delete all plugin licenses.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param bool        $store
-		 * @param string|bool $plugin_slug
-		 */
-		private function _delete_licenses( $store = true, $plugin_slug = false ) {
-			$this->_logger->entrance();
-
-			$all_licenses = self::get_all_licenses();
-
-			if ( ! is_string( $plugin_slug ) ) {
-				$plugin_slug = $this->_slug;
-			}
-
-			unset( $all_licenses[ $plugin_slug ] );
-
-			self::$_accounts->set_option( 'licenses', $all_licenses, $store );
-		}
-
-		/**
-		 * Check if Freemius was added on new plugin installation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.5
-		 *
-		 * @return bool
-		 */
-		function is_plugin_new_install() {
-			return isset( $this->_storage->is_plugin_new_install ) &&
-			       $this->_storage->is_plugin_new_install;
-		}
-
-		/**
-		 * Plugin activated hook.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @uses   FS_Api
-		 */
-		function _activate_plugin_event_hook() {
-			$this->_logger->entrance( 'slug = ' . $this->_slug );
-
-			if ( ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			// Clear API cache on activation.
-			FS_Api::clear_cache();
-
-			if ( $this->is_registered() ) {
-				// Schedule re-activation event and sync.
-//				$this->sync_install( array(), true );
-				$this->schedule_install_sync();
-
-				/**
-				 * @todo Work on automatic deactivation of the Free plugin version. It doesn't work since the slug of the free & premium versions is identical. Therefore, only one instance of Freemius is created and the activation hook of the premium version is not being added.
-				 */
-				if ( $this->_plugin_basename !== $this->_free_plugin_basename ) {
-					// Deactivate Free plugin version on premium plugin activation.
-					deactivate_plugins( $this->_free_plugin_basename );
-
-					$this->_admin_notices->add(
-						sprintf( __fs( 'successful-version-upgrade-message', $this->_slug ), sprintf( '<b>%s</b>', $this->_plugin->title ) ),
-						__fs( 'woot', $this->_slug ) . '!'
-					);
-				}
-			} else if ( $this->is_anonymous() ) {
-				/**
-				 * Reset "skipped" click cache on the following:
-				 *  1. Development mode.
-				 *  2. If the user skipped the exact same version before.
-				 *
-				 * @todo 3. If explicitly asked to retry after every activation.
-				 */
-				if ( WP_FS__DEV_MODE ||
-				     $this->get_plugin_version() == $this->_storage->is_anonymous['version']
-				) {
-					$this->reset_anonymous_mode();
-				}
-			}
-
-			if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
-				/**
-				 * If no previous version of plugin's version exist, it means that it's either
-				 * the first time that the plugin installed on the site, or the plugin was installed
-				 * before but didn't have Freemius integrated.
-				 *
-				 * Since register_activation_hook() do NOT fires on updates since 3.1, and only fires
-				 * on manual activation via the dashboard, is_plugin_activation() is TRUE
-				 * only after immediate activation.
-				 *
-				 * @since 1.1.4
-				 * @link  https://make.wordpress.org/core/2010/10/27/plugin-activation-hooks-no-longer-fire-for-updates/
-				 */
-				$this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
-			}
-
-			if ( ! $this->_anonymous_mode && $this->has_api_connectivity( WP_FS__DEV_MODE ) ) {
-				// Store hint that the plugin was just activated to enable auto-redirection to settings.
-				add_option( "fs_{$this->_slug}_activated", true );
-			}
-		}
-
-		/**
-		 * Delete account.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param bool $check_user Enforce checking if user have plugins activation privileges.
-		 */
-		function delete_account_event( $check_user = true ) {
-			$this->_logger->entrance( 'slug = ' . $this->_slug );
-
-			if ( $check_user && ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			$this->do_action( 'before_account_delete' );
-
-			// Clear all admin notices.
-			$this->_admin_notices->clear_all_sticky();
-
-			$this->_delete_site( false );
-
-			$this->_delete_plans( false );
-
-			$this->_delete_licenses( false );
-
-			// Delete add-ons related to plugin's account.
-			$this->_delete_account_addons( false );
-
-			// @todo Delete plans and licenses of add-ons.
-
-			self::$_accounts->store();
-
-			/**
-			 * IMPORTANT:
-			 *  Clear crons must be executed before clearing all storage.
-			 *  Otherwise, the cron will not be cleared.
-			 */
-			$this->clear_sync_cron();
-			$this->clear_install_sync_cron();
-
-			// Clear all storage data.
-			$this->_storage->clear_all( true, array(
-				'connectivity_test',
-				'is_on',
-			) );
-
-			// Send delete event.
-			$this->get_api_site_scope()->call( '/', 'delete' );
-
-			$this->do_action( 'after_account_delete' );
-		}
-
-		/**
-		 * Plugin deactivation hook.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 */
-		function _deactivate_plugin_hook() {
-			$this->_logger->entrance( 'slug = ' . $this->_slug );
-
-			if ( ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			$this->_admin_notices->clear_all_sticky();
-			if ( isset( $this->_storage->sticky_optin_added ) ) {
-				unset( $this->_storage->sticky_optin_added );
-			}
-
-			if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
-				// Remember that plugin was already installed.
-				$this->_storage->is_plugin_new_install = false;
-			}
-
-			$this->clear_sync_cron();
-			$this->clear_install_sync_cron();
-
-			if ( $this->is_registered() ) {
-				// Send deactivation event.
-				$this->sync_install( array(
-					'is_active' => false,
-				) );
-			} else {
-				if ( ! $this->has_api_connectivity() ) {
-					// Reset connectivity test cache.
-					unset( $this->_storage->connectivity_test );
-				}
-			}
-
-			// Clear API cache on deactivation.
-			FS_Api::clear_cache();
-
-			$this->remove_sdk_reference();
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 */
-		private function remove_sdk_reference() {
-			global $fs_active_plugins;
-
-			foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
-				if ( $this->_plugin_basename == $data->plugin_path ) {
-					unset( $fs_active_plugins->plugins[ $sdk_path ] );
-					break;
-				}
-			}
-
-			fs_fallback_to_newest_active_sdk();
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param bool $is_anonymous
-		 */
-		private function set_anonymous_mode( $is_anonymous = true ) {
-			// Store information regarding skip to try and opt-in the user
-			// again in the future.
-			$this->_storage->is_anonymous = array(
-				'is'        => $is_anonymous,
-				'timestamp' => WP_FS__SCRIPT_START_TIME,
-				'version'   => $this->get_plugin_version(),
-			);
-
-			// Update anonymous mode cache.
-			$this->_is_anonymous = $is_anonymous;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 */
-		private function reset_anonymous_mode() {
-			unset( $this->_storage->is_anonymous );
-		}
-
-		/**
-		 * Clears the anonymous mode and redirects to the opt-in screen.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 */
-		function connect_again() {
-			if ( ! $this->is_anonymous() ) {
-				return;
-			}
-
-			$this->reset_anonymous_mode();
-
-			if ( fs_redirect( $this->get_activation_url() ) ) {
-				exit();
-			}
-		}
-
-		/**
-		 * Skip account connect, and set anonymous mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 */
-		private function skip_connection() {
-			$this->_logger->entrance();
-
-			$this->_admin_notices->remove_sticky( 'connect_account' );
-
-			$this->set_anonymous_mode();
-
-			// Send anonymous skip event.
-			// No user identified info nor any tracking will be sent after the user skips the opt-in.
-			$this->get_api_plugin_scope()->call( 'skip.json', 'put', array(
-				'uid' => $this->get_anonymous_id(),
-			) );
-		}
-
-		/**
-		 * Plugin version update hook.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 */
-		private function update_plugin_version_event() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_registered() ) {
-				return;
-			}
-
-			$this->schedule_install_sync();
-//			$this->sync_install( array(), true );
-		}
-
-		/**
-		 * Return a list of modified plugins since the last sync.
-		 *
-		 * Note:
-		 *  There's no point to store a plugins counter since even if the number of
-		 *  plugins didn't change, we still need to check if the versions are all the
-		 *  same and the activity state is similar.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return array|false
-		 */
-		private function get_plugins_data_for_api() {
-			// Alias.
-			$option_name = 'all_plugins';
-
-			$all_cached_plugins = self::$_accounts->get_option( $option_name );
-
-			if ( ! is_object( $all_cached_plugins ) ) {
-				$all_cached_plugins = (object) array(
-					'timestamp' => '',
-					'md5'       => '',
-					'plugins'   => array(),
-				);
-			}
-
-			$time = time();
-
-			if ( ! empty( $all_cached_plugins->timestamp ) &&
-			     ( $time - $all_cached_plugins->timestamp ) < WP_FS__TIME_5_MIN_IN_SEC
-			) {
-				// Don't send plugin updates if last update was in the past 5 min.
-				return false;
-			}
-
-			// Write timestamp to lock the logic.
-			$all_cached_plugins->timestamp = $time;
-			self::$_accounts->set_option( $option_name, $all_cached_plugins, true );
-
-			// Reload options from DB.
-			self::$_accounts->load( true );
-			$all_cached_plugins = self::$_accounts->get_option( $option_name );
-
-			if ( $time != $all_cached_plugins->timestamp ) {
-				// If timestamp is different, then another thread captured the lock.
-				return false;
-			}
-
-			// Check if there's a change in plugins.
-			$all_plugins = self::get_all_plugins();
-
-			// Check if plugins changed.
-			ksort( $all_plugins );
-
-			$plugins_signature = '';
-			foreach ( $all_plugins as $basename => $data ) {
-				$plugins_signature .= $data['slug'] . ',' .
-				                      $data['Version'] . ',' .
-				                      ( $data['is_active'] ? '1' : '0' ) . ';';
-			}
-
-			// Check if plugins status changed (version or active/inactive).
-			$plugins_changed = ( $all_cached_plugins->md5 !== md5( $plugins_signature ) );
-
-			$plugins_update_data = array();
-
-			if ( $plugins_changed ) {
-				// Change in plugins, report changes.
-
-				// Update existing plugins info.
-				foreach ( $all_cached_plugins->plugins as $basename => $data ) {
-					if ( ! isset( $all_plugins[ $basename ] ) ) {
-						// Plugin uninstalled.
-						$uninstalled_plugin_data                   = $data;
-						$uninstalled_plugin_data['is_active']      = false;
-						$uninstalled_plugin_data['is_uninstalled'] = true;
-						$plugins_update_data[]                     = $uninstalled_plugin_data;
-
-						unset( $all_plugins[ $basename ] );
-						unset( $all_cached_plugins->plugins[ $basename ] );
-					} else if ( $data['is_active'] !== $all_plugins[ $basename ]['is_active'] ||
-					            $data['version'] !== $all_plugins[ $basename ]['Version']
-					) {
-						// Plugin activated or deactivated, or version changed.
-						$all_cached_plugins->plugins[ $basename ]['is_active'] = $all_plugins[ $basename ]['is_active'];
-						$all_cached_plugins->plugins[ $basename ]['version']   = $all_plugins[ $basename ]['Version'];
-
-						$plugins_update_data[] = $all_cached_plugins->plugins[ $basename ];
-					}
-				}
-
-				// Find new plugins that weren't yet seen before.
-				foreach ( $all_plugins as $basename => $data ) {
-					if ( ! isset( $all_cached_plugins->plugins[ $basename ] ) ) {
-						// New plugin.
-						$new_plugin = array(
-							'slug'           => $data['slug'],
-							'version'        => $data['Version'],
-							'title'          => $data['Name'],
-							'is_active'      => $data['is_active'],
-							'is_uninstalled' => false,
-						);
-
-						$plugins_update_data[]                    = $new_plugin;
-						$all_cached_plugins->plugins[ $basename ] = $new_plugin;
-					}
-				}
-
-				$all_cached_plugins->md5       = md5( $plugins_signature );
-				$all_cached_plugins->timestamp = $time;
-				self::$_accounts->set_option( $option_name, $all_cached_plugins, true );
-			}
-
-			return $plugins_update_data;
-		}
-
-		/**
-		 * Return a list of modified themes since the last sync.
-		 *
-		 * Note:
-		 *  There's no point to store a themes counter since even if the number of
-		 *  themes didn't change, we still need to check if the versions are all the
-		 *  same and the activity state is similar.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return array|false
-		 */
-		private function get_themes_data_for_api() {
-			// Alias.
-			$option_name = 'all_themes';
-
-			$all_cached_themes = self::$_accounts->get_option( $option_name );
-
-			if ( ! is_object( $all_cached_themes ) ) {
-				$all_cached_themes = (object) array(
-					'timestamp' => '',
-					'md5'       => '',
-					'themes'    => array(),
-				);
-			}
-
-			$time = time();
-
-			if ( ! empty( $all_cached_themes->timestamp ) &&
-			     ( $time - $all_cached_themes->timestamp ) < WP_FS__TIME_5_MIN_IN_SEC
-			) {
-				// Don't send theme updates if last update was in the past 5 min.
-				return false;
-			}
-
-			// Write timestamp to lock the logic.
-			$all_cached_themes->timestamp = $time;
-			self::$_accounts->set_option( $option_name, $all_cached_themes, true );
-
-			// Reload options from DB.
-			self::$_accounts->load( true );
-			$all_cached_themes = self::$_accounts->get_option( $option_name );
-
-			if ( $time != $all_cached_themes->timestamp ) {
-				// If timestamp is different, then another thread captured the lock.
-				return false;
-			}
-
-			// Get active theme.
-			$active_theme = wp_get_theme();
-
-			// Check if there's a change in themes.
-			$all_themes = wp_get_themes();
-
-			// Check if themes changed.
-			ksort( $all_themes );
-
-			$themes_signature = '';
-			foreach ( $all_themes as $slug => $data ) {
-				$is_active = ( $slug === $active_theme->stylesheet );
-				$themes_signature .= $slug . ',' .
-				                     $data->version . ',' .
-				                     ( $is_active ? '1' : '0' ) . ';';
-			}
-
-			// Check if themes status changed (version or active/inactive).
-			$themes_changed = ( $all_cached_themes->md5 !== md5( $themes_signature ) );
-
-			$themes_update_data = array();
-
-			if ( $themes_changed ) {
-				// Change in themes, report changes.
-
-				// Update existing themes info.
-				foreach ( $all_cached_themes->themes as $slug => $data ) {
-					$is_active = ( $slug === $active_theme->stylesheet );
-
-					if ( ! isset( $all_themes[ $slug ] ) ) {
-						// Plugin uninstalled.
-						$uninstalled_theme_data                   = $data;
-						$uninstalled_theme_data['is_active']      = false;
-						$uninstalled_theme_data['is_uninstalled'] = true;
-						$themes_update_data[]                     = $uninstalled_theme_data;
-
-						unset( $all_themes[ $slug ] );
-						unset( $all_cached_themes->themes[ $slug ] );
-					} else if ( $data['is_active'] !== $is_active ||
-					            $data['version'] !== $all_themes[ $slug ]->version
-					) {
-						// Plugin activated or deactivated, or version changed.
-
-						$all_cached_themes->themes[ $slug ]['is_active'] = $is_active;
-						$all_cached_themes->themes[ $slug ]['version']   = $all_themes[ $slug ]->version;
-
-						$themes_update_data[] = $all_cached_themes->themes[ $slug ];
-					}
-				}
-
-				// Find new themes that weren't yet seen before.
-				foreach ( $all_themes as $slug => $data ) {
-					if ( ! isset( $all_cached_themes->themes[ $slug ] ) ) {
-						$is_active = ( $slug === $active_theme->stylesheet );
-
-						// New plugin.
-						$new_plugin = array(
-							'slug'           => $slug,
-							'version'        => $data->version,
-							'title'          => $data->name,
-							'is_active'      => $is_active,
-							'is_uninstalled' => false,
-						);
-
-						$themes_update_data[]               = $new_plugin;
-						$all_cached_themes->themes[ $slug ] = $new_plugin;
-					}
-				}
-
-				$all_cached_themes->md5       = md5( $themes_signature );
-				$all_cached_themes->timestamp = time();
-				self::$_accounts->set_option( $option_name, $all_cached_themes, true );
-			}
-
-			return $themes_update_data;
-		}
-
-		/**
-		 * Update install details.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.2
-		 *
-		 * @param string[] string           $override
-		 * @param bool     $include_plugins Since 1.1.8 by default include plugin changes.
-		 * @param bool     $include_themes  Since 1.1.8 by default include plugin changes.
-		 *
-		 * @return array
-		 */
-		private function get_install_data_for_api(
-			array $override,
-			$include_plugins = true,
-			$include_themes = true
-		) {
-			/**
-			 * @since 1.1.8 Also send plugin updates.
-			 */
-			if ( $include_plugins && ! isset( $override['plugins'] ) ) {
-				$plugins = $this->get_plugins_data_for_api();
-				if ( ! empty( $plugins ) ) {
-					$override['plugins'] = $plugins;
-				}
-			}
-			/**
-			 * @since 1.1.8 Also send themes updates.
-			 */
-			if ( $include_themes && ! isset( $override['themes'] ) ) {
-				$themes = $this->get_themes_data_for_api();
-				if ( ! empty( $themes ) ) {
-					$override['themes'] = $themes;
-				}
-			}
-
-			return array_merge( array(
-				'version'                      => $this->get_plugin_version(),
-				'is_premium'                   => $this->is_premium(),
-				'language'                     => get_bloginfo( 'language' ),
-				'charset'                      => get_bloginfo( 'charset' ),
-				'platform_version'             => get_bloginfo( 'version' ),
-				'programming_language_version' => phpversion(),
-				'title'                        => get_bloginfo( 'name' ),
-				'url'                          => get_site_url(),
-				// Special params.
-				'is_active'                    => true,
-				'is_uninstalled'               => false,
-			), $override );
-		}
-
-		/**
-		 * Update install only if changed.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param string[] string $override
-		 * @param bool     $flush
-		 *
-		 * @return false|object|string
-		 */
-		private function send_install_update( $override = array(), $flush = false ) {
-			$this->_logger->entrance();
-
-			$check_properties = $this->get_install_data_for_api( $override );
-
-			if ( $flush ) {
-				$params = $check_properties;
-			} else {
-				$params           = array();
-				$special          = array();
-				$special_override = false;
-
-				foreach ( $check_properties as $p => $v ) {
-					if ( property_exists( $this->_site, $p ) ) {
-						if ( ! empty( $this->_site->{$p} ) &&
-						     $this->_site->{$p} != $v
-						) {
-							$this->_site->{$p} = $v;
-							$params[ $p ]      = $v;
-						}
-					} else {
-						$special[ $p ] = $v;
-
-						if ( isset( $override[ $p ] ) ||
-						     'plugins' === $p ||
-						     'themes' === $p
-						) {
-							$special_override = true;
-						}
-					}
-				}
-
-				if ( $special_override || 0 < count( $params ) ) {
-					// Add special params only if has at least one
-					// standard param, or if explicitly requested to
-					// override a special param or a param which is not exist
-					// in the install object.
-					$params = array_merge( $params, $special );
-				}
-			}
-
-			if ( 0 < count( $params ) ) {
-				// Update last install sync timestamp.
-				$this->_storage->install_sync_timestamp = time();
-
-				$params['uid'] = $this->get_anonymous_id();
-
-				// Send updated values to FS.
-				$site = $this->get_api_site_scope()->call( '/', 'put', $params );
-
-				if ( ! $this->is_api_error( $site ) ) {
-					// I successfully sent install update, clear scheduled sync if exist.
-					$this->clear_install_sync_cron();
-				}
-
-				return $site;
-			}
-
-			return false;
-		}
-
-		/**
-		 * Update install only if changed.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param string[] string $override
-		 * @param bool     $flush
-		 *
-		 * @return false|object|string
-		 */
-		private function sync_install( $override = array(), $flush = false ) {
-			$this->_logger->entrance();
-
-			$site = $this->send_install_update( $override, $flush );
-
-			if ( false === $site ) {
-				// No sync required.
-				return;
-			}
-
-			if ( $this->is_api_error( $site ) ) {
-				// Failed to sync, don't update locally.
-				return;
-			}
-
-			$plan              = $this->get_plan();
-			$this->_site       = new FS_Site( $site );
-			$this->_site->plan = $plan;
-
-			$this->_store_site( true );
-		}
-
-		/**
-		 * Plugin uninstall hook.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param bool $check_user Enforce checking if user have plugins activation privileges.
-		 */
-		function _uninstall_plugin_event( $check_user = true ) {
-			$this->_logger->entrance( 'slug = ' . $this->_slug );
-
-			if ( $check_user && ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			$params = array();
-			if ( isset( $this->_storage->uninstall_reason ) ) {
-				$params['reason_id']   = $this->_storage->uninstall_reason->id;
-				$params['reason_info'] = $this->_storage->uninstall_reason->info;
-			}
-
-			if ( ! $this->is_registered() && isset( $this->_storage->uninstall_reason ) ) {
-				// Send anonymous uninstall event only if user submitted a feedback.
-				$params['uid'] = $this->get_anonymous_id();
-				$this->get_api_plugin_scope()->call( 'uninstall.json', 'put', $params );
-			} else {
-				// Send uninstall event.
-				$this->send_install_update( array_merge( $params, array(
-					'is_active'      => false,
-					'is_uninstalled' => true,
-				) ) );
-			}
-
-			// @todo Decide if we want to delete plugin information from db.
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 *
-		 * @return string
-		 */
-		private function premium_plugin_basename() {
-			return preg_replace( '/\//', '-premium/', $this->_free_plugin_basename, 1 );
-		}
-
-		/**
-		 * Uninstall plugin hook. Called only when connected his account with Freemius for active sites tracking.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 */
-		public static function _uninstall_plugin_hook() {
-			self::_load_required_static();
-
-			self::$_static_logger->entrance();
-
-			if ( ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			$plugin_file = substr( current_filter(), strlen( 'uninstall_' ) );
-
-			self::$_static_logger->info( 'plugin = ' . $plugin_file );
-
-			define( 'WP_FS__UNINSTALL_MODE', true );
-
-			$fs = self::get_instance_by_file( $plugin_file );
-
-			if ( is_object( $fs ) ) {
-				self::require_plugin_essentials();
-
-				if ( is_plugin_active( $fs->_free_plugin_basename ) ||
-				     is_plugin_active( $fs->premium_plugin_basename() )
-				) {
-					// Deleting Free or Premium plugin version while the other version still installed.
-					return;
-				}
-
-				$fs->_uninstall_plugin_event();
-
-				$fs->do_action( 'after_uninstall' );
-			}
-		}
-
-		#region Plugin Information ------------------------------------------------------------------
-
-		/**
-		 * Load WordPress core plugin.php essential module.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 */
-		private static function require_plugin_essentials() {
-			if ( ! function_exists( 'get_plugins' ) ) {
-				require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
-			}
-		}
-
-		/**
-		 * Load WordPress core pluggable.php module.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.2
-		 */
-		private static function require_pluggable_essentials() {
-			if ( ! function_exists( 'wp_get_current_user' ) ) {
-				require_once( ABSPATH . 'wp-includes/pluggable.php' );
-			}
-		}
-
-		/**
-		 * Return plugin data.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @return array
-		 */
-		function get_plugin_data() {
-			if ( ! isset( $this->_plugin_data ) ) {
-				self::require_plugin_essentials();
-
-				$this->_plugin_data = get_plugin_data( $this->_plugin_main_file_path );
-			}
-
-			return $this->_plugin_data;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @return string Plugin slug.
-		 */
-		function get_slug() {
-			return $this->_slug;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @return number Plugin ID.
-		 */
-		function get_id() {
-			return $this->_plugin->id;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @return string Plugin public key.
-		 */
-		function get_public_key() {
-			return $this->_plugin->public_key;
-		}
-
-		/**
-		 * Will be available only on sandbox mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return mixed Plugin secret key.
-		 */
-		function get_secret_key() {
-			return $this->_plugin->secret_key;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 *
-		 * @return bool
-		 */
-		function has_secret_key() {
-			return ! empty( $this->_plugin->secret_key );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return string
-		 */
-		function get_plugin_name() {
-			$this->_logger->entrance();
-
-			if ( ! isset( $this->_plugin_name ) ) {
-				$plugin_data = $this->get_plugin_data();
-
-				// Get name.
-				$this->_plugin_name = $plugin_data['Name'];
-
-				// Check if plugin name contains [Premium] suffix and remove it.
-				$suffix     = '[premium]';
-				$suffix_len = strlen( $suffix );
-
-				if ( strlen( $plugin_data['Name'] ) > $suffix_len &&
-				     $suffix === substr( strtolower( $plugin_data['Name'] ), - $suffix_len )
-				) {
-					$this->_plugin_name = substr( $plugin_data['Name'], 0, - $suffix_len );
-				}
-
-				$this->_logger->departure( 'Name = ' . $this->_plugin_name );
-			}
-
-			return $this->_plugin_name;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 *
-		 * @return string
-		 */
-		function get_plugin_version() {
-			$this->_logger->entrance();
-
-			$plugin_data = $this->get_plugin_data();
-
-			$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
-
-			return $this->apply_filters( 'plugin_version', $plugin_data['Version'] );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return string
-		 */
-		function get_plugin_basename() {
-			return $this->_plugin_basename;
-		}
-
-		function get_plugin_folder_name() {
-			$this->_logger->entrance();
-
-			$plugin_folder = $this->_plugin_basename;
-
-			while ( '.' !== dirname( $plugin_folder ) ) {
-				$plugin_folder = dirname( $plugin_folder );
-			}
-
-			$this->_logger->departure( 'Folder Name = ' . $plugin_folder );
-
-			return $plugin_folder;
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		/* Account
-		------------------------------------------------------------------------------------------------------------------*/
-
-		/**
-		 * Find plugin's slug by plugin's basename.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param string $plugin_base_name
-		 *
-		 * @return false|string
-		 */
-		private static function find_slug_by_basename( $plugin_base_name ) {
-			$file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
-
-			if ( ! array( $file_slug_map ) || ! isset( $file_slug_map[ $plugin_base_name ] ) ) {
-				return false;
-			}
-
-			return $file_slug_map[ $plugin_base_name ];
-		}
-
-		/**
-		 * Store the map between the plugin's basename to the slug.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		private function store_file_slug_map() {
-			$file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
-
-			if ( ! array( $file_slug_map ) ) {
-				$file_slug_map = array();
-			}
-
-			if ( ! isset( $file_slug_map[ $this->_plugin_basename ] ) ||
-			     $file_slug_map[ $this->_plugin_basename ] !== $this->_slug
-			) {
-				$file_slug_map[ $this->_plugin_basename ] = $this->_slug;
-				self::$_accounts->set_option( 'file_slug_map', $file_slug_map, true );
-			}
-		}
-
-		/**
-		 * @return FS_User[]
-		 */
-		static function get_all_users() {
-			$users = self::$_accounts->get_option( 'users', array() );
-
-			if ( ! is_array( $users ) ) {
-				$users = array();
-			}
-
-			return $users;
-		}
-
-		/**
-		 * @return FS_Site[]
-		 */
-		private static function get_all_sites() {
-			$sites = self::$_accounts->get_option( 'sites', array() );
-
-			if ( ! is_array( $sites ) ) {
-				$sites = array();
-			}
-
-			return $sites;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return FS_Plugin_License[]
-		 */
-		private static function get_all_licenses() {
-			$licenses = self::$_accounts->get_option( 'licenses', array() );
-
-			if ( ! is_array( $licenses ) ) {
-				$licenses = array();
-			}
-
-			return $licenses;
-		}
-
-		/**
-		 * @return FS_Plugin_Plan[]
-		 */
-		private static function get_all_plans() {
-			$plans = self::$_accounts->get_option( 'plans', array() );
-
-			if ( ! is_array( $plans ) ) {
-				$plans = array();
-			}
-
-			return $plans;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return FS_Plugin_Tag[]
-		 */
-		private static function get_all_updates() {
-			$updates = self::$_accounts->get_option( 'updates', array() );
-
-			if ( ! is_array( $updates ) ) {
-				$updates = array();
-			}
-
-			return $updates;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return FS_Plugin[]|false
-		 */
-		private static function get_all_addons() {
-			$addons = self::$_accounts->get_option( 'addons', array() );
-
-			if ( ! is_array( $addons ) ) {
-				$addons = array();
-			}
-
-			return $addons;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return FS_Plugin[]|false
-		 */
-		private static function get_all_account_addons() {
-			$addons = self::$_accounts->get_option( 'account_addons', array() );
-
-			if ( ! is_array( $addons ) ) {
-				$addons = array();
-			}
-
-			return $addons;
-		}
-
-		/**
-		 * Check if user is registered.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 * @return bool
-		 */
-		function is_registered() {
-			return is_object( $this->_user );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return FS_Plugin
-		 */
-		function get_plugin() {
-			return $this->_plugin;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @return FS_User
-		 */
-		function get_user() {
-			return $this->_user;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @return FS_Site
-		 */
-		function get_site() {
-			return $this->_site;
-		}
-
-		/**
-		 * Get plugin add-ons.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @since  1.1.7.3 If not yet loaded, fetch data from the API.
-		 *
-		 * @return FS_Plugin[]|false
-		 */
-		function get_addons() {
-			$this->_logger->entrance();
-
-			$all_addons = self::get_all_addons();
-
-			/**
-			 * @since 1.1.7.3 If not yet loaded, fetch data from the API.
-			 */
-			if ( ! is_array( $all_addons ) ||
-			     ! isset( $all_addons[ $this->_plugin->id ] ) ||
-			     ! is_array( $all_addons[ $this->_plugin->id ] ) ||
-			     empty( $all_addons[ $this->_plugin->id ] )
-			) {
-				if ( $this->_has_addons ) {
-					$addons = $this->_sync_addons();
-
-					if ( ! empty( $addons ) ) {
-						$all_addons = self::get_all_addons();
-					}
-				}
-			}
-
-			if ( ! is_array( $all_addons ) ||
-			     ! isset( $all_addons[ $this->_plugin->id ] ) ||
-			     ! is_array( $all_addons[ $this->_plugin->id ] ) ||
-			     empty( $all_addons[ $this->_plugin->id ] )
-			) {
-				return false;
-			}
-
-			return $all_addons[ $this->_plugin->id ];
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return FS_Plugin[]|false
-		 */
-		function get_account_addons() {
-			$this->_logger->entrance();
-
-			$addons = self::get_all_account_addons();
-
-			if ( ! is_array( $addons ) ||
-			     ! isset( $addons[ $this->_plugin->id ] ) ||
-			     ! is_array( $addons[ $this->_plugin->id ] ) ||
-			     0 === count( $addons[ $this->_plugin->id ] )
-			) {
-				return false;
-			}
-
-			return $addons[ $this->_plugin->id ];
-		}
-
-		/**
-		 * Check if user has any
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @return bool
-		 */
-		function has_account_addons() {
-			$addons = $this->get_account_addons();
-
-			return is_array( $addons ) && ( 0 < count( $addons ) );
-		}
-
-
-		/**
-		 * Get add-on by ID (from local data).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param number $id
-		 *
-		 * @return FS_Plugin|false
-		 */
-		function get_addon( $id ) {
-			$this->_logger->entrance();
-
-			$addons = $this->get_addons();
-
-			if ( is_array( $addons ) ) {
-				foreach ( $addons as $addon ) {
-					if ( $id == $addon->id ) {
-						return $addon;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Get add-on by slug (from local data).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param string $slug
-		 *
-		 * @return FS_Plugin|false
-		 */
-		function get_addon_by_slug( $slug ) {
-			$this->_logger->entrance();
-
-			$addons = $this->get_addons();
-
-			if ( is_array( $addons ) ) {
-				foreach ( $addons as $addon ) {
-					if ( $slug == $addon->slug ) {
-						return $addon;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		#region Plans & Licensing ------------------------------------------------------------------
-
-		/**
-		 * Check if running premium plugin code.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return bool
-		 */
-		function is_premium() {
-			return $this->_plugin->is_premium;
-		}
-
-		/**
-		 * Get site's plan ID.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @return number
-		 */
-		function get_plan_id() {
-			return $this->_site->plan->id;
-		}
-
-		/**
-		 * Get site's plan title.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @return string
-		 */
-		function get_plan_title() {
-			return $this->_site->plan->title;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return FS_Plugin_Plan
-		 */
-		function get_plan() {
-			return is_object( $this->_site->plan ) ? $this->_site->plan : false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @return bool
-		 */
-		function is_trial() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_registered() ) {
-				return false;
-			}
-
-			return $this->_site->is_trial();
-		}
-
-		/**
-		 * Check if currently in a trial with payment method (credit card or paypal).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @return bool
-		 */
-		function is_paid_trial() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_trial() ) {
-				return false;
-			}
-
-			return $this->has_active_license() && ( $this->_site->trial_plan_id == $this->_license->plan_id );
-		}
-
-		/**
-		 * Check if trial already utilized.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_trial_utilized() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_registered() ) {
-				return false;
-			}
-
-			return $this->_site->is_trial_utilized();
-		}
-
-		/**
-		 * Get trial plan information (if in trial).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool|FS_Plugin_Plan
-		 */
-		function get_trial_plan() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_trial() ) {
-				return false;
-			}
-
-			return $this->_storage->trial_plan;
-		}
-
-		/**
-		 * Check if the user has an activated and valid paid license on current plugin's install.
-		 *
-		 * @since 1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_paying() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_registered() ) {
-				return false;
-			}
-
-			if ( ! $this->has_paid_plan() ) {
-				return false;
-			}
-
-			return (
-				! $this->is_trial() &&
-				'free' !== $this->_site->plan->name &&
-				$this->has_features_enabled_license()
-			);
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @return bool
-		 */
-		function is_free_plan() {
-			if ( ! $this->is_registered() ) {
-				return true;
-			}
-
-			if ( ! $this->has_paid_plan() ) {
-				return true;
-			}
-
-			return (
-				'free' === $this->_site->plan->name ||
-				! $this->has_features_enabled_license()
-			);
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return bool
-		 */
-		function _has_premium_license() {
-			$this->_logger->entrance();
-
-			$premium_license = $this->_get_available_premium_license();
-
-			return ( false !== $premium_license );
-		}
-
-		/**
-		 * Check if user has any licenses associated with the plugin (including expired or blocking).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @return bool
-		 */
-		private function has_any_license() {
-			return is_array( $this->_licenses ) && ( 0 < count( $this->_licenses ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return FS_Plugin_License
-		 */
-		function _get_available_premium_license() {
-			$this->_logger->entrance();
-
-			if ( ! $this->has_paid_plan() ) {
-				return false;
-			}
-
-			if ( is_array( $this->_licenses ) ) {
-				foreach ( $this->_licenses as $license ) {
-					if ( ! $license->is_utilized() && $license->is_features_enabled() ) {
-						return $license;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Sync local plugin plans with remote server.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return FS_Plugin_Plan[]|object
-		 */
-		function _sync_plans() {
-			$plans = $this->_fetch_plugin_plans();
-			if ( ! $this->is_api_error( $plans ) ) {
-				$this->_plans = $plans;
-				$this->_store_plans();
-			}
-
-			$this->do_action( 'after_plans_sync', $plans );
-
-			return $this->_plans;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param number $id
-		 *
-		 * @return FS_Plugin_Plan
-		 */
-		function _get_plan_by_id( $id ) {
-			$this->_logger->entrance();
-
-			if ( ! is_array( $this->_plans ) || 0 === count( $this->_plans ) ) {
-				$this->_sync_plans();
-			}
-
-			foreach ( $this->_plans as $plan ) {
-				if ( $id == $plan->id ) {
-					return $plan;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8.1
-		 *
-		 * @param string $name
-		 *
-		 * @return FS_Plugin_Plan|false
-		 */
-		private function get_plan_by_name( $name ) {
-			$this->_logger->entrance();
-
-			if ( ! is_array( $this->_plans ) || 0 === count( $this->_plans ) ) {
-				$this->_sync_plans();
-			}
-
-			foreach ( $this->_plans as $plan ) {
-				if ( $name == $plan->name ) {
-					return $plan;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Sync local plugin plans with remote server.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return FS_Plugin_License[]|object
-		 */
-		function _sync_licenses() {
-			$licenses = $this->_fetch_licenses();
-			if ( ! $this->is_api_error( $licenses ) ) {
-				$this->_licenses = $licenses;
-				$this->_store_licenses();
-			}
-
-			// Update current license.
-			if ( is_object( $this->_license ) ) {
-				$this->_license = $this->_get_license_by_id( $this->_license->id );
-			}
-
-			return $this->_licenses;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param number $id
-		 *
-		 * @return FS_Plugin_License
-		 */
-		function _get_license_by_id( $id ) {
-			$this->_logger->entrance();
-
-			if ( ! is_numeric( $id ) ) {
-				return false;
-			}
-
-			if ( ! is_array( $this->_licenses ) || 0 === count( $this->_licenses ) ) {
-				$this->_sync_licenses();
-			}
-
-			foreach ( $this->_licenses as $license ) {
-				if ( $id == $license->id ) {
-					return $license;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Sync site's license with user licenses.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param FS_Plugin_License|null $new_license
-		 */
-		function _update_site_license( $new_license ) {
-			$this->_logger->entrance();
-
-			$this->_license = $new_license;
-
-			if ( ! is_object( $new_license ) ) {
-				$this->_site->license_id = null;
-				$this->_sync_site_subscription( null );
-
-				return;
-			}
-
-			$this->_site->license_id = $this->_license->id;
-
-			if ( ! is_array( $this->_licenses ) ) {
-				$this->_licenses = array();
-			}
-
-			$is_license_found = false;
-			for ( $i = 0, $len = count( $this->_licenses ); $i < $len; $i ++ ) {
-				if ( $new_license->id == $this->_licenses[ $i ]->id ) {
-					$this->_licenses[ $i ] = $new_license;
-
-					$is_license_found = true;
-					break;
-				}
-			}
-
-			// If new license just append.
-			if ( ! $is_license_found ) {
-				$this->_licenses[] = $new_license;
-			}
-
-			$this->_sync_site_subscription( $new_license );
-		}
-
-		/**
-		 * Sync site's subscription.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param FS_Plugin_License|null $license
-		 *
-		 * @return bool|\FS_Subscription
-		 */
-		private function _sync_site_subscription( $license ) {
-			if ( ! is_object( $license ) ) {
-				unset( $this->_storage->subscription );
-
-				return false;
-			}
-
-			// Load subscription details if not lifetime.
-			$subscription = $license->is_lifetime() ?
-				false :
-				$this->_fetch_site_license_subscription();
-
-			if ( is_object( $subscription ) && ! isset( $subscription->error ) ) {
-				$this->_storage->subscription = $subscription;
-			} else {
-				unset( $this->_storage->subscription );
-			}
-
-			return $subscription;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool|\FS_Plugin_License
-		 */
-		function _get_license() {
-			return $this->_license;
-		}
-
-		/**
-		 * @return bool|\FS_Subscription
-		 */
-		function _get_subscription() {
-			return isset( $this->_storage->subscription ) ?
-				$this->_storage->subscription :
-				false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		function is_plan( $plan, $exact = false ) {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_registered() ) {
-				return false;
-			}
-
-			$plan = strtolower( $plan );
-
-			if ( $this->_site->plan->name === $plan ) // Exact plan.
-			{
-				return true;
-			} else if ( $exact ) // Required exact, but plans are different.
-			{
-				return false;
-			}
-
-			$current_plan_order  = - 1;
-			$required_plan_order = - 1;
-			for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
-				if ( $plan === $this->_plans[ $i ]->name ) {
-					$required_plan_order = $i;
-				} else if ( $this->_site->plan->name === $this->_plans[ $i ]->name ) {
-					$current_plan_order = $i;
-				}
-			}
-
-			return ( $current_plan_order > $required_plan_order );
-		}
-
-		/**
-		 * Check if plan based on trial. If not in trial mode, should return false.
-		 *
-		 * @since  1.0.9
-		 *
-		 * @param string $plan  Plan name
-		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
-		 *
-		 * @return bool
-		 */
-		function is_trial_plan( $plan, $exact = false ) {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_registered() ) {
-				return false;
-			}
-
-			if ( ! $this->is_trial() ) {
-				return false;
-			}
-
-			if ( ! isset( $this->_storage->trial_plan ) ) {
-				// Store trial plan information.
-				$this->_enrich_site_trial_plan( true );
-			}
-
-			if ( $this->_storage->trial_plan->name === $plan ) // Exact plan.
-			{
-				return true;
-			} else if ( $exact ) // Required exact, but plans are different.
-			{
-				return false;
-			}
-
-			$current_plan_order  = - 1;
-			$required_plan_order = - 1;
-			for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
-				if ( $plan === $this->_plans[ $i ]->name ) {
-					$required_plan_order = $i;
-				} else if ( $this->_storage->trial_plan->name === $this->_plans[ $i ]->name ) {
-					$current_plan_order = $i;
-				}
-			}
-
-			return ( $current_plan_order > $required_plan_order );
-		}
-
-		/**
-		 * Check if plugin has any paid plans.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function has_paid_plan() {
-			return $this->_has_paid_plans || FS_Plan_Manager::instance()->has_paid_plan( $this->_plans );
-		}
-
-		/**
-		 * Check if plugin has any plan with a trail.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function has_trial_plan() {
-			if ( ! $this->is_registered() ) {
-				return false;
-			}
-
-			return $this->_storage->get( 'has_trial_plan', false );
-		}
-
-		/**
-		 * Check if plugin has any free plan, or is it premium only.
-		 *
-		 * Note: If no plans configured, assume plugin is free.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool
-		 */
-		function has_free_plan() {
-			return FS_Plan_Manager::instance()->has_free_plan( $this->_plans );
-		}
-
-		#region URL Generators
-
-		/**
-		 * Alias to pricing_url().
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @uses   pricing_url()
-		 *
-		 * @param string $period Billing cycle
-		 * @param bool   $is_trial
-		 *
-		 * @return string
-		 */
-		function get_upgrade_url( $period = WP_FS__PERIOD_ANNUALLY, $is_trial = false ) {
-			return $this->pricing_url( $period, $is_trial );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @uses   get_upgrade_url()
-		 *
-		 * @return string
-		 */
-		function get_trial_url() {
-			return $this->get_upgrade_url( WP_FS__PERIOD_ANNUALLY, true );
-		}
-
-		/**
-		 * Plugin's pricing URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param string $billing_cycle Billing cycle
-		 *
-		 * @param bool   $is_trial
-		 *
-		 * @return string
-		 */
-		function pricing_url( $billing_cycle = WP_FS__PERIOD_ANNUALLY, $is_trial = false ) {
-			$this->_logger->entrance();
-
-			$params = array(
-				'billing_cycle' => $billing_cycle
-			);
-
-			if ( $is_trial ) {
-				$params['trial'] = 'true';
-			}
-
-			return $this->_get_admin_page_url( 'pricing', $params );
-		}
-
-		/**
-		 * Checkout page URL.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.6
-		 *
-		 * @param string $billing_cycle Billing cycle
-		 * @param bool   $is_trial
-		 * @param array  $extra         (optional) Extra parameters, override other query params.
-		 *
-		 * @return string
-		 */
-		function checkout_url(
-			$billing_cycle = WP_FS__PERIOD_ANNUALLY,
-			$is_trial = false,
-			$extra = array()
-		) {
-			$this->_logger->entrance();
-
-			$params = array(
-				'checkout'      => 'true',
-				'billing_cycle' => $billing_cycle,
-			);
-
-			if ( $is_trial ) {
-				$params['trial'] = 'true';
-			}
-
-			/**
-			 * Params in extra override other params.
-			 */
-			$params = array_merge( $params, $extra );
-
-			return $this->_get_admin_page_url( 'pricing', $params );
-		}
-
-		/**
-		 * Add-on checkout URL.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.1.7
-		 *
-		 * @param number $addon_id
-		 * @param number $pricing_id
-		 * @param string $billing_cycle
-		 * @param bool   $is_trial
-		 *
-		 * @return string
-		 */
-		function addon_checkout_url(
-			$addon_id,
-			$pricing_id,
-			$billing_cycle = WP_FS__PERIOD_ANNUALLY,
-			$is_trial = false
-		) {
-			return $this->checkout_url( $billing_cycle, $is_trial, array(
-				'plugin_id'  => $addon_id,
-				'pricing_id' => $pricing_id,
-			) );
-		}
-
-		#endregion
-
-		#endregion ------------------------------------------------------------------
-
-		/**
-		 * Check if plugin has any add-ons.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @since  1.1.7.3 Base logic only on the parameter provided by the developer in the init function.
-		 *
-		 * @return bool
-		 */
-		function has_addons() {
-			$this->_logger->entrance();
-
-			return $this->_has_addons;
-		}
-
-		/**
-		 * Check if plugin can work in anonymous mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function enable_anonymous() {
-			return $this->_enable_anonymous;
-		}
-
-		/**
-		 * Check if feature supported with current site's plan.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @todo   IMPLEMENT
-		 *
-		 * @param number $feature_id
-		 *
-		 * @throws Exception
-		 */
-		function is_feature_supported( $feature_id ) {
-			throw new Exception( 'not implemented' );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @return bool Is running in SSL/HTTPS
-		 */
-		function is_ssl() {
-			return WP_FS__IS_HTTPS;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool Is running in AJAX call.
-		 *
-		 * @link   http://wordpress.stackexchange.com/questions/70676/how-to-check-if-i-am-in-admin-ajax
-		 */
-		function is_ajax() {
-			return ( defined( 'DOING_AJAX' ) && DOING_AJAX );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @return bool
-		 */
-		function is_cron() {
-			return ( defined( 'DOING_CRON' ) && DOING_CRON );
-		}
-
-		/**
-		 * Check if a real user is visiting the admin dashboard.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @return bool
-		 */
-		function is_user_in_admin() {
-			return is_admin() && ! $this->is_ajax() && ! $this->is_cron();
-		}
-
-		/**
-		 * Check if running in HTTPS and if site's plan matching the specified plan.
-		 *
-		 * @param string $plan
-		 * @param bool   $exact
-		 *
-		 * @return bool
-		 */
-		function is_ssl_and_plan( $plan, $exact = false ) {
-			return ( $this->is_ssl() && $this->is_plan( $plan, $exact ) );
-		}
-
-		/**
-		 * Construct plugin's settings page URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param string $page
-		 * @param array  $params
-		 *
-		 * @return string
-		 */
-		function _get_admin_page_url( $page = '', $params = array() ) {
-			if ( ! $this->_menu->is_top_level() ) {
-				$parent_slug = $this->_menu->get_parent_slug();
-				$menu_file   = ( false !== strpos( $parent_slug, '.php' ) ) ?
-					$parent_slug :
-					'admin.php';
-
-				return add_query_arg( array_merge( $params, array(
-					'page' => $this->_menu->get_slug( $page ),
-				) ), admin_url( $menu_file, 'admin' ) );
-			}
-
-			if ( $this->_menu->is_cpt() ) {
-				if ( empty( $page ) && $this->is_activation_mode() ) {
-					return add_query_arg( array_merge( $params, array(
-						'page' => $this->_menu->get_slug()
-					) ), admin_url( 'admin.php', 'admin' ) );
-				} else {
-					if ( ! empty( $page ) ) {
-						$params['page'] = $this->_menu->get_slug( $page );
-					}
-
-					return add_query_arg( $params, admin_url( $this->_menu->get_raw_slug(), 'admin' ) );
-				}
-			} else {
-				return add_query_arg( array_merge( $params, array(
-					'page' => $this->_menu->get_slug( $page ),
-				) ), admin_url( 'admin.php', 'admin' ) );
-			}
-		}
-
-
-		/**
-		 * Plugin's account URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool|string $action
-		 * @param array       $params
-		 *
-		 * @param bool        $add_action_nonce
-		 *
-		 * @return string
-		 */
-		function get_account_url( $action = false, $params = array(), $add_action_nonce = true ) {
-			if ( is_string( $action ) ) {
-				$params['fs_action'] = $action;
-			}
-
-			self::require_pluggable_essentials();
-
-			return ( $add_action_nonce && is_string( $action ) ) ?
-				wp_nonce_url( $this->_get_admin_page_url( 'account', $params ), $action ) :
-				$this->_get_admin_page_url( 'account', $params );
-		}
-
-		/**
-		 * Plugin's account URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool|string $topic
-		 * @param bool|string $message
-		 *
-		 * @return string
-		 */
-		function contact_url( $topic = false, $message = false ) {
-			$params = array();
-			if ( is_string( $topic ) ) {
-				$params['topic'] = $topic;
-			}
-			if ( is_string( $message ) ) {
-				$params['message'] = $message;
-			}
-
-			if ( $this->is_addon() ) {
-				$params['addon_id'] = $this->get_id();
-
-				return $this->get_parent_instance()->_get_admin_page_url( 'contact', $params );
-			} else {
-				return $this->_get_admin_page_url( 'contact', $params );
-			}
-		}
-
-		/**
-		 * Add-on direct info URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.0
-		 *
-		 * @param string $slug
-		 *
-		 * @return string
-		 */
-		function addon_url( $slug ) {
-			return $this->_get_admin_page_url( 'addons', array(
-				'slug' => $slug
-			) );
-		}
-
-		/* Logger
-		------------------------------------------------------------------------------------------------------------------*/
-		/**
-		 * @param string $id
-		 * @param bool   $prefix_slug
-		 *
-		 * @return FS_Logger
-		 */
-		function get_logger( $id = '', $prefix_slug = true ) {
-			return FS_Logger::get_logger( ( $prefix_slug ? $this->_slug : '' ) . ( ( ! $prefix_slug || empty( $id ) ) ? '' : '_' ) . $id );
-		}
-
-		/**
-		 * @param      $id
-		 * @param bool $load_options
-		 * @param bool $prefix_slug
-		 *
-		 * @return FS_Option_Manager
-		 */
-		function get_options_manager( $id, $load_options = false, $prefix_slug = true ) {
-			return FS_Option_Manager::get_manager( ( $prefix_slug ? $this->_slug : '' ) . ( ( ! $prefix_slug || empty( $id ) ) ? '' : '_' ) . $id, $load_options );
-		}
-
-		/* Security
-		------------------------------------------------------------------------------------------------------------------*/
-		private function _encrypt( $str ) {
-			if ( is_null( $str ) ) {
-				return null;
-			}
-
-			return base64_encode( $str );
-		}
-
-		private function _decrypt( $str ) {
-			if ( is_null( $str ) ) {
-				return null;
-			}
-
-			return base64_decode( $str );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param FS_Entity $entity
-		 *
-		 * @return FS_Entity Return an encrypted clone entity.
-		 */
-		private function _encrypt_entity( FS_Entity $entity ) {
-			$clone = clone $entity;
-			$props = get_object_vars( $entity );
-
-			foreach ( $props as $key => $val ) {
-				$clone->{$key} = $this->_encrypt( $val );
-			}
-
-			return $clone;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param FS_Entity $entity
-		 *
-		 * @return FS_Entity Return an decrypted clone entity.
-		 */
-		private function _decrypt_entity( FS_Entity $entity ) {
-			$clone = clone $entity;
-			$props = get_object_vars( $entity );
-
-			foreach ( $props as $key => $val ) {
-				$clone->{$key} = $this->_decrypt( $val );
-			}
-
-			return $clone;
-		}
-
-		/**
-		 * Tries to activate account based on POST params.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 */
-		function _activate_account() {
-			if ( $this->is_registered() ) {
-				// Already activated.
-				return;
-			}
-
-			self::_clean_admin_content_section();
-
-			if ( fs_request_is_action( 'activate' ) && fs_request_is_post() ) {
-//				check_admin_referer( 'activate_' . $this->_plugin->public_key );
-
-				// Verify matching plugin details.
-				if ( $this->_plugin->id != fs_request_get( 'plugin_id' ) || $this->_slug != fs_request_get( 'plugin_slug' ) ) {
-					return;
-				}
-
-				$user              = new FS_User();
-				$user->id          = fs_request_get( 'user_id' );
-				$user->public_key  = fs_request_get( 'user_public_key' );
-				$user->secret_key  = fs_request_get( 'user_secret_key' );
-				$user->email       = fs_request_get( 'user_email' );
-				$user->first       = fs_request_get( 'user_first' );
-				$user->last        = fs_request_get( 'user_last' );
-				$user->is_verified = fs_request_get_bool( 'user_is_verified' );
-
-				$site              = new FS_Site();
-				$site->id          = fs_request_get( 'install_id' );
-				$site->public_key  = fs_request_get( 'install_public_key' );
-				$site->secret_key  = fs_request_get( 'install_secret_key' );
-				$site->plan->id    = fs_request_get( 'plan_id' );
-				$site->plan->title = fs_request_get( 'plan_title' );
-				$site->plan->name  = fs_request_get( 'plan_name' );
-
-				$plans      = array();
-				$plans_data = json_decode( urldecode( fs_request_get( 'plans' ) ) );
-				foreach ( $plans_data as $p ) {
-					$plans[] = new FS_Plugin_Plan( $p );
-				}
-
-				$this->_set_account( $user, $site, $plans );
-
-				// Reload the page with the keys.
-				if ( fs_redirect( $this->_get_admin_page_url() ) ) {
-					exit();
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @param string $email
-		 *
-		 * @return FS_User|bool
-		 */
-		static function _get_user_by_email( $email ) {
-			self::$_static_logger->entrance();
-
-			$email = trim( strtolower( $email ) );
-			$users = self::get_all_users();
-			if ( is_array( $users ) ) {
-				foreach ( $users as $u ) {
-					if ( $email === trim( strtolower( $u->email ) ) ) {
-						return $u;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		#region Account (Loading, Updates & Activation) ------------------------------------------------------------------
-
-		/***
-		 * Load account information (user + site).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 */
-		private function _load_account() {
-			$this->_logger->entrance();
-
-			$this->do_action( 'before_account_load' );
-
-			$sites    = self::get_all_sites();
-			$users    = self::get_all_users();
-			$plans    = self::get_all_plans();
-			$licenses = self::get_all_licenses();
-
-			if ( $this->_logger->is_on() && is_admin() ) {
-				$this->_logger->log( 'sites = ' . var_export( $sites, true ) );
-				$this->_logger->log( 'users = ' . var_export( $users, true ) );
-				$this->_logger->log( 'plans = ' . var_export( $plans, true ) );
-				$this->_logger->log( 'licenses = ' . var_export( $licenses, true ) );
-			}
-
-			$site = isset( $sites[ $this->_slug ] ) ? $sites[ $this->_slug ] : false;
-
-			if ( is_object( $site ) &&
-			     is_numeric( $site->id ) &&
-			     is_numeric( $site->user_id ) &&
-			     is_object( $site->plan )
-			) {
-				// Load site.
-				$this->_site       = clone $site;
-				$this->_site->plan = $this->_decrypt_entity( $this->_site->plan );
-
-				// Load relevant user.
-				$this->_user = clone $users[ $this->_site->user_id ];
-
-				// Load plans.
-				$this->_plans = $plans[ $this->_slug ];
-				if ( ! is_array( $this->_plans ) || empty( $this->_plans ) ) {
-					$this->_sync_plans( true );
-				} else {
-					for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
-						if ( $this->_plans[ $i ] instanceof FS_Plugin_Plan ) {
-							$this->_plans[ $i ] = $this->_decrypt_entity( $this->_plans[ $i ] );
-						} else {
-							unset( $this->_plans[ $i ] );
-						}
-					}
-				}
-
-				// Load licenses.
-				$this->_licenses = array();
-				if ( is_array( $licenses ) &&
-				     isset( $licenses[ $this->_slug ] ) &&
-				     isset( $licenses[ $this->_slug ][ $this->_user->id ] )
-				) {
-					$this->_licenses = $licenses[ $this->_slug ][ $this->_user->id ];
-				}
-
-				$this->_license = $this->_get_license_by_id( $this->_site->license_id );
-
-				if ( $this->_site->version != $this->get_plugin_version() ) {
-					// If stored install version is different than current installed plugin version,
-					// then update plugin version event.
-					$this->update_plugin_version_event();
-				}
-			}
-
-			$this->_register_account_hooks();
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param FS_User    $user
-		 * @param FS_Site    $site
-		 * @param bool|array $plans
-		 */
-		private function _set_account( FS_User $user, FS_Site $site, $plans = false ) {
-			$site->slug    = $this->_slug;
-			$site->user_id = $user->id;
-
-			$this->_site = $site;
-			$this->_user = $user;
-			if ( false !== $plans ) {
-				$this->_plans = $plans;
-			}
-
-			$this->send_install_update();
-
-			$this->_store_account();
-
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @param array $override_with
-		 *
-		 * @return array
-		 */
-		function get_opt_in_params( $override_with = array() ) {
-			$this->_logger->entrance();
-
-			$current_user = self::_get_current_wp_user();
-
-			$params = array(
-				'user_firstname'    => $current_user->user_firstname,
-				'user_lastname'     => $current_user->user_lastname,
-				'user_nickname'     => $current_user->user_nicename,
-				'user_email'        => $current_user->user_email,
-				'user_ip'           => WP_FS__REMOTE_ADDR,
-				'plugin_slug'       => $this->_slug,
-				'plugin_id'         => $this->get_id(),
-				'plugin_public_key' => $this->get_public_key(),
-				'plugin_version'    => $this->get_plugin_version(),
-				'return_url'        => wp_nonce_url( $this->_get_admin_page_url(
-					'',
-					array( 'fs_action' => $this->_slug . '_activate_new' )
-				), $this->_slug . '_activate_new' ),
-				'account_url'       => wp_nonce_url( $this->_get_admin_page_url(
-					'account',
-					array( 'fs_action' => 'sync_user' )
-				), 'sync_user' ),
-				'site_uid'          => $this->get_anonymous_id(),
-				'site_url'          => get_site_url(),
-				'site_name'         => get_bloginfo( 'name' ),
-				'platform_version'  => get_bloginfo( 'version' ),
-				'php_version'       => phpversion(),
-				'language'          => get_bloginfo( 'language' ),
-				'charset'           => get_bloginfo( 'charset' ),
-			);
-
-			if ( WP_FS__SKIP_EMAIL_ACTIVATION && $this->has_secret_key() ) {
-				// Even though rand() is known for its security issues,
-				// the timestamp adds another layer of protection.
-				// It would be very hard for an attacker to get the secret key form here.
-				// Plus, this should never run in production since the secret should never
-				// be included in the production version.
-				$params['ts']     = WP_FS__SCRIPT_START_TIME;
-				$params['salt']   = md5( uniqid( rand() ) );
-				$params['secure'] = md5(
-					$params['ts'] .
-					$params['salt'] .
-					$this->get_secret_key()
-				);
-			}
-
-			return array_merge( $params, $override_with );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @param string|bool $email
-		 * @param string|bool $first
-		 * @param string|bool $last
-		 *
-		 * @return bool Is successful opt-in (or set to pending).
-		 */
-		function opt_in( $email = false, $first = false, $last = false ) {
-			$this->_logger->entrance();
-
-			if ( false === $email ) {
-				$current_user = self::_get_current_wp_user();
-				$email        = $current_user->user_email;
-			}
-
-			$fs_user = Freemius::_get_user_by_email( $email );
-			if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
-				$this->install_with_current_user( false );
-
-				return true;
-			}
-
-			$user_info = array();
-			if ( ! empty( $email ) ) {
-				$user_info['user_email'] = $email;
-			}
-			if ( ! empty( $first ) ) {
-				$user_info['user_firstname'] = $first;
-			}
-			if ( ! empty( $last ) ) {
-				$user_info['user_lastname'] = $last;
-			}
-
-			$params           = $this->get_opt_in_params( $user_info );
-			$params['format'] = 'json';
-
-			$url = WP_FS__ADDRESS . '/action/service/user/install/';
-			if ( isset( $_COOKIE['XDEBUG_SESSION'] ) ) {
-				$url = add_query_arg( 'XDEBUG_SESSION', 'PHPSTORM', $url );
-			}
-
-			$response = wp_remote_post( $url, array(
-				'method'  => 'POST',
-				'body'    => $params,
-				'timeout' => 15,
-			) );
-
-			if ( $response instanceof WP_Error ) {
-				if ( 'https://' === substr( $url, 0, 8 ) &&
-				     isset( $response->errors ) &&
-				     isset( $response->errors['http_request_failed'] ) &&
-				     false !== strpos( $response->errors['http_request_failed'][0], 'sslv3 alert handshake' )
-				) {
-					// Failed due to old version of cURL or Open SSL (SSLv3 is not supported by CloudFlare).
-					$url = 'http://' . substr( $url, 8 );
-
-					$response = wp_remote_post( $url, array(
-						'method'  => 'POST',
-						'body'    => $params,
-						'timeout' => 15,
-					) );
-				}
-
-				if ( $response instanceof WP_Error ) {
-					return false;
-				}
-			}
-
-			if ( is_wp_error( $response ) ) {
-				return false;
-			}
-
-			$decoded = @json_decode( $response['body'] );
-
-			if ( empty( $decoded ) ) {
-				return false;
-			}
-
-			if ( isset( $decoded->error ) ) {
-				return false;
-			} else if ( isset( $decoded->pending_activation ) && $decoded->pending_activation ) {
-				// Pending activation, add message.
-				$this->set_pending_confirmation( false, false );
-
-				return true;
-			} else if ( isset( $decoded->install_secret_key ) ) {
-				$this->install_with_new_user(
-					$decoded->user_id,
-					$decoded->user_public_key,
-					$decoded->user_secret_key,
-					$decoded->install_id,
-					$decoded->install_public_key,
-					$decoded->install_secret_key,
-					false
-				);
-
-				return true;
-			}
-
-			return false;
-		}
-
-		/**
-		 * Set user and site identities.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param FS_User $user
-		 * @param FS_Site $site
-		 * @param bool    $redirect
-		 *
-		 * @return bool False if account already set.
-		 */
-		function setup_account( FS_User $user, FS_Site $site, $redirect = true ) {
-			$this->_user = $user;
-			$this->_site = $site;
-
-			$this->_sync_plans();
-
-			$this->_enrich_site_plan( false );
-
-			$this->_set_account( $user, $site );
-
-			if ( $this->is_trial() ) {
-				// Store trial plan information.
-				$this->_enrich_site_trial_plan( true );
-			}
-
-			// If Freemius was OFF before, turn it on.
-			$this->turn_on();
-
-			$this->do_action( 'after_account_connection', $user, $site );
-
-			if ( is_numeric( $site->license_id ) ) {
-				$this->_license = $this->_get_license_by_id( $site->license_id );
-			}
-
-			if ( $this->is_pending_activation() ) {
-				// Remove pending activation sticky notice (if still exist).
-				$this->_admin_notices->remove_sticky( 'activation_pending' );
-
-				// Remove plugin from pending activation mode.
-				unset( $this->_storage->is_pending_activation );
-
-				if ( ! $this->is_paying() ) {
-					$this->_admin_notices->add_sticky(
-						sprintf( __fs( 'plugin-x-activation-message', $this->_slug ), '<b>' . $this->get_plugin_name() . '</b>' ),
-						'activation_complete'
-					);
-				}
-			}
-
-			if ( $this->is_paying() && ! $this->is_premium() ) {
-				$this->_admin_notices->add_sticky(
-					sprintf(
-						__fs( 'activation-with-plan-x-message', $this->_slug ),
-						$this->_site->plan->title
-					) . ' ' . $this->_get_latest_download_link( sprintf(
-						__fs( 'download-latest-x-version', $this->_slug ),
-						$this->_site->plan->title
-					) ),
-					'plan_upgraded',
-					__fs( 'yee-haw', $this->_slug ) . '!'
-				);
-			}
-
-			$plugin_id = fs_request_get( 'plugin_id', false );
-
-			// Store activation time ONLY for plugins (not add-ons).
-			if ( ! is_numeric( $plugin_id ) || ( $plugin_id == $this->_plugin->id ) ) {
-				$this->_storage->activation_timestamp = WP_FS__SCRIPT_START_TIME;
-			}
-
-			if ( is_numeric( $plugin_id ) ) {
-				if ( $plugin_id != $this->_plugin->id ) {
-					// Add-on was installed - sync license right after install.
-					if ( $redirect && fs_redirect( fs_nonce_url( $this->_get_admin_page_url(
-							'account',
-							array(
-								'fs_action' => $this->_slug . '_sync_license',
-								'plugin_id' => $plugin_id
-							)
-						), $this->_slug . '_sync_license' ) )
-					) {
-						exit();
-					}
-
-				}
-			} else {
-				// Reload the page with the keys.
-				if ( $redirect && fs_redirect( $this->get_after_activation_url( 'after_connect_url' ) ) ) {
-					exit();
-				}
-			}
-		}
-
-		/**
-		 * Install plugin with new user information after approval.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 */
-		function _install_with_new_user() {
-			$this->_logger->entrance();
-
-			if ( $this->is_registered() ) {
-				return;
-			}
-
-			if ( fs_request_is_action( $this->_slug . '_activate_new' ) ) {
-//				check_admin_referer( $this->_slug . '_activate_new' );
-
-				$this->_admin_notices->remove_sticky( 'connect_account' );
-
-				if ( fs_request_has( 'user_secret_key' ) ) {
-					$this->install_with_new_user(
-						fs_request_get( 'user_id' ),
-						fs_request_get( 'user_public_key' ),
-						fs_request_get( 'user_secret_key' ),
-						fs_request_get( 'install_id' ),
-						fs_request_get( 'install_public_key' ),
-						fs_request_get( 'install_secret_key' )
-					);
-				} else if ( fs_request_has( 'pending_activation' ) ) {
-					$this->set_pending_confirmation( fs_request_get( 'user_email' ), true );
-				}
-			}
-		}
-
-		/**
-		 * Install plugin with new user.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @param number $user_id
-		 * @param string $user_public_key
-		 * @param string $user_secret_key
-		 * @param number $install_id
-		 * @param string $install_public_key
-		 * @param string $install_secret_key
-		 * @param bool   $redirect
-		 */
-		private function install_with_new_user(
-			$user_id,
-			$user_public_key,
-			$user_secret_key,
-			$install_id,
-			$install_public_key,
-			$install_secret_key,
-			$redirect = true
-		) {
-			$user             = new FS_User();
-			$user->id         = $user_id;
-			$user->public_key = $user_public_key;
-			$user->secret_key = $user_secret_key;
-
-			$this->_user = $user;
-			$user_result = $this->get_api_user_scope()->get();
-			$user        = new FS_User( $user_result );
-			$this->_user = $user;
-
-			$site             = new FS_Site();
-			$site->id         = $install_id;
-			$site->public_key = $install_public_key;
-			$site->secret_key = $install_secret_key;
-
-			$this->_site = $site;
-			$site_result = $this->get_api_site_scope()->get();
-			$site        = new FS_Site( $site_result );
-			$this->_site = $site;
-
-			$this->setup_account( $this->_user, $this->_site, $redirect );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @param bool $email
-		 * @param bool $redirect
-		 */
-		private function set_pending_confirmation( $email = false, $redirect = true ) {
-			// Install must be activated via email since
-			// user with the same email already exist.
-			$this->_storage->is_pending_activation = true;
-			$this->_add_pending_activation_notice( $email );
-
-			// Reload the page with with pending activation message.
-			if ( $redirect && fs_redirect( $this->get_after_activation_url( 'after_pending_connect_url' ) ) ) {
-				exit();
-			}
-		}
-
-		/**
-		 * Install plugin with current logged WP user info.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 */
-		function _install_with_current_user() {
-			$this->_logger->entrance();
-
-			if ( $this->is_registered() ) {
-				return;
-			}
-
-			if ( fs_request_is_action( $this->_slug . '_activate_existing' ) && fs_request_is_post() ) {
-//				check_admin_referer( 'activate_existing_' . $this->_plugin->public_key );
-
-				$this->install_with_current_user();
-			}
-		}
-
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @param bool $redirect
-		 */
-		private function install_with_current_user( $redirect = true ) {
-			$this->_admin_notices->remove_sticky( 'connect_account' );
-
-			// Get current logged WP user.
-			$current_user = self::_get_current_wp_user();
-
-			// Find the relevant FS user by the email.
-			$user = self::_get_user_by_email( $current_user->user_email );
-
-			// We have to set the user before getting user scope API handler.
-			$this->_user = $user;
-
-			// Install the plugin.
-			$install = $this->get_api_user_scope()->call(
-				"/plugins/{$this->get_id()}/installs.json",
-				'post',
-				$this->get_install_data_for_api( array(
-					'uid' => $this->get_anonymous_id(),
-				), false, false )
-			);
-
-			if ( isset( $install->error ) ) {
-				$this->_admin_notices->add(
-					sprintf( __fs( 'could-not-activate-x', $this->_slug ), $this->get_plugin_name() ) . ' ' .
-					__fs( 'contact-us-with-error-message', $this->_slug ) . ' ' . '<b>' . $install->error->message . '</b>',
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-
-				return;
-			}
-
-			$site        = new FS_Site( $install );
-			$this->_site = $site;
-//				$this->_enrich_site_plan( false );
-
-//				$this->_set_account( $user, $site );
-//				$this->_sync_plans();
-
-			$this->setup_account( $this->_user, $this->_site, $redirect );
-		}
-
-		/**
-		 * Tries to activate add-on account based on parent plugin info.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param Freemius $parent_fs
-		 */
-		private function _activate_addon_account( Freemius $parent_fs ) {
-			if ( $this->is_registered() ) {
-				// Already activated.
-				return;
-			}
-
-			// Activate add-on with parent plugin credentials.
-			$addon_install = $parent_fs->get_api_site_scope()->call(
-				"/addons/{$this->_plugin->id}/installs.json",
-				'post',
-				$this->get_install_data_for_api( array(
-					'uid' => $this->get_anonymous_id(),
-				), false, false )
-			);
-
-			if ( isset( $addon_install->error ) ) {
-				$this->_admin_notices->add(
-					sprintf( __fs( 'could-not-activate-x', $this->_slug ), $this->get_plugin_name() ) . ' ' .
-					__fs( 'contact-us-with-error-message', $this->_slug ) . ' ' . '<b>' . $addon_install->error->message . '</b>',
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-
-				return;
-			}
-
-			// First of all, set site info - otherwise we won't
-			// be able to invoke API calls.
-			$this->_site = new FS_Site( $addon_install );
-
-			// Sync add-on plans.
-			$this->_sync_plans();
-
-			// Get site's current plan.
-			$this->_site->plan = $this->_get_plan_by_id( $this->_site->plan->id );
-
-			// Get user information based on parent's plugin.
-			$user = $parent_fs->get_user();
-
-			$this->_set_account( $user, $this->_site );
-
-			// Sync licenses.
-			$this->_sync_licenses();
-
-			// Try to activate premium license.
-			$this->_activate_license( true );
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		#region Admin Menu Items ------------------------------------------------------------------
-
-		private $_menu_items = array();
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return string
-		 */
-		function get_menu_slug() {
-			return $this->_menu->get_slug();
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		function _prepare_admin_menu() {
-//			if ( ! $this->is_on() ) {
-//				return;
-//			}
-
-			if ( ! $this->has_api_connectivity() && ! $this->enable_anonymous() ) {
-				$this->_menu->remove_menu_item();
-			} else {
-				$this->add_submenu_items();
-				$this->add_menu_action();
-			}
-		}
-
-		/**
-		 * Admin dashboard menu items modifications.
-		 *
-		 * NOTE: admin_menu action executed before admin_init.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 */
-		private function add_menu_action() {
-			if ( $this->is_activation_mode() ) {
-				$this->override_plugin_menu_with_activation();
-			} else {
-				// If not registered try to install user.
-				if ( ! $this->is_registered() &&
-				     fs_request_is_action( $this->_slug . '_activate_new' )
-				) {
-					$this->_install_with_new_user();
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @return string
-		 */
-		function _redirect_on_clicked_menu_link() {
-			$this->_logger->entrance();
-
-			$page = strtolower( isset( $_REQUEST['page'] ) ? $_REQUEST['page'] : '' );
-
-			$this->_logger->log( 'page = ' . $page );
-
-			foreach ( $this->_menu_items as $priority => $items ) {
-				foreach ( $items as $item ) {
-					if ( isset( $item['url'] ) ) {
-						if ( $page === strtolower( $item['menu_slug'] ) ) {
-							$this->_logger->log( 'Redirecting to ' . $item['url'] );
-
-							fs_redirect( $item['url'] );
-						}
-					}
-				}
-			}
-		}
-
-		/**
-		 * Remove plugin's all admin menu items & pages, and replace with activation page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 */
-		private function override_plugin_menu_with_activation() {
-			$this->_logger->entrance();
-
-			$hook = false;
-
-			if ( $this->_menu->is_top_level() ) {
-				$hook = $this->_menu->override_menu_item( array( &$this, '_connect_page_render' ) );
-
-				if ( false === $hook ) {
-					// Create new menu item just for the opt-in.
-					$hook = add_menu_page(
-						$this->get_plugin_name(),
-						$this->get_plugin_name(),
-						'manage_options',
-						$this->_menu->get_slug(),
-						array( &$this, '_connect_page_render' )
-					);
-				}
-			} else {
-				$menus = array( $this->_menu->get_parent_slug() );
-
-				if ( $this->_menu->is_override_exact() ) {
-					// Make sure the current page is matching the activation page.
-					$activation_url = strtolower( $this->get_activation_url() );
-					$request_url    = strtolower( $_SERVER['REQUEST_URI'] );
-
-					if ( parse_url( $activation_url, PHP_URL_PATH ) !== parse_url( $request_url, PHP_URL_PATH ) ) {
-						// Different path - DO NOT OVERRIDE PAGE.
-						return;
-					}
-
-					$activation_url_params = array();
-					parse_str( parse_url( $activation_url, PHP_URL_QUERY ), $activation_url_params );
-
-					$request_url_params = array();
-					parse_str( parse_url( $request_url, PHP_URL_QUERY ), $request_url_params );
-
-
-					foreach ( $activation_url_params as $key => $val ) {
-						if ( ! isset( $request_url_params[ $key ] ) || $val != $request_url_params[ $key ] ) {
-							// Not matching query string - DO NOT OVERRIDE PAGE.
-							return;
-						}
-					}
-				}
-
-				foreach ( $menus as $parent_slug ) {
-					$hook = $this->_menu->override_submenu_action(
-						$parent_slug,
-						$this->_menu->get_raw_slug(),
-						array( &$this, '_connect_page_render' )
-					);
-
-					if ( false !== $hook ) {
-						// Found plugin's submenu item.
-						break;
-					}
-				}
-			}
-
-			if ( $this->_menu->is_activation_page() ) {
-				// Clean admin page from distracting content.
-				self::_clean_admin_content_section();
-			}
-
-			if ( false !== $hook ) {
-				if ( fs_request_is_action( $this->_slug . '_activate_existing' ) ) {
-					add_action( "load-$hook", array( &$this, '_install_with_current_user' ) );
-				} else if ( fs_request_is_action( $this->_slug . '_activate_new' ) ) {
-					add_action( "load-$hook", array( &$this, '_install_with_new_user' ) );
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 *
-		 * @return string
-		 */
-		private function get_top_level_menu_slug() {
-			return ( $this->is_addon() ?
-				$this->get_parent_instance()->_menu->get_top_level_menu_slug() :
-				$this->_menu->get_top_level_menu_slug() );
-		}
-
-		/**
-		 * Add default Freemius menu items.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 */
-		private function add_submenu_items() {
-			$this->_logger->entrance();
-
-			$this->do_action( 'before_admin_menu_init' );
-
-			if ( ! $this->is_addon() ) {
-				if ( ! $this->is_activation_mode() ) {
-					if ( $this->is_registered() ) {
-						// Add user account page.
-						$this->add_submenu_item(
-							__fs( 'account', $this->_slug ),
-							array( &$this, '_account_page_render' ),
-							$this->get_plugin_name() . ' &ndash; ' . __fs( 'account', $this->_slug ),
-							'manage_options',
-							'account',
-							array( &$this, '_account_page_load' ),
-							WP_FS__DEFAULT_PRIORITY,
-							$this->_menu->is_submenu_item_visible( 'account' )
-						);
-					}
-
-					// Add contact page.
-					$this->add_submenu_item(
-						__fs( 'contact-us', $this->_slug ),
-						array( &$this, '_contact_page_render' ),
-						$this->get_plugin_name() . ' &ndash; ' . __fs( 'contact-us', $this->_slug ),
-						'manage_options',
-						'contact',
-						'Freemius::_clean_admin_content_section',
-						WP_FS__DEFAULT_PRIORITY,
-						$this->_menu->is_submenu_item_visible( 'contact' )
-					);
-
-					if ( $this->has_addons() ) {
-						$this->add_submenu_item(
-							__fs( 'add-ons', $this->_slug ),
-							array( &$this, '_addons_page_render' ),
-							$this->get_plugin_name() . ' &ndash; ' . __fs( 'add-ons', $this->_slug ),
-							'manage_options',
-							'addons',
-							array( &$this, '_addons_page_load' ),
-							WP_FS__LOWEST_PRIORITY - 1,
-							$this->_menu->is_submenu_item_visible( 'addons' )
-						);
-					}
-
-					$show_pricing = ( $this->has_paid_plan() && $this->_menu->is_submenu_item_visible( 'pricing' ) );
-					// If user don't have paid plans, add pricing page
-					// to support add-ons checkout but don't add the submenu item.
-					// || (isset( $_GET['page'] ) && $this->_menu->get_slug( 'pricing' ) == $_GET['page']);
-
-					// Add upgrade/pricing page.
-					$this->add_submenu_item(
-						( $this->is_paying() ? __fs( 'pricing', $this->_slug ) : __fs( 'upgrade', $this->_slug ) . '&nbsp;&nbsp;&#x27a4;' ),
-						array( &$this, '_pricing_page_render' ),
-						$this->get_plugin_name() . ' &ndash; ' . __fs( 'pricing', $this->_slug ),
-						'manage_options',
-						'pricing',
-						'Freemius::_clean_admin_content_section',
-						WP_FS__LOWEST_PRIORITY,
-						$show_pricing
-					);
-				}
-			}
-
-
-			if ( 0 < count( $this->_menu_items ) ) {
-				if ( ! $this->_menu->is_top_level() ) {
-					fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
-
-					// Append submenu items right after the plugin's submenu item.
-					$this->order_sub_submenu_items();
-				} else {
-					// Append submenu items.
-					$this->embed_submenu_items();
-				}
-			}
-		}
-
-		/**
-		 * Moved the actual submenu item additions to a separated function,
-		 * in order to support sub-submenu items when the plugin's settings
-		 * only have a submenu and not top-level menu item.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 */
-		private function embed_submenu_items() {
-			$item_template = $this->_menu->is_top_level() ?
-				'<span class="fs-submenu-item">%s</span>' :
-				'<span class="fs-submenu-item fs-sub">%s</span>';
-
-			ksort( $this->_menu_items );
-
-			foreach ( $this->_menu_items as $priority => $items ) {
-				foreach ( $items as $item ) {
-					if ( ! isset( $item['url'] ) ) {
-						$hook = add_submenu_page(
-							$item['show_submenu'] ?
-								$this->get_top_level_menu_slug() :
-								null,
-							$item['page_title'],
-							sprintf( $item_template, $item['menu_title'] ),
-							$item['capability'],
-							$item['menu_slug'],
-							$item['render_function']
-						);
-
-						if ( false !== $item['before_render_function'] ) {
-							add_action( "load-$hook", $item['before_render_function'] );
-						}
-					} else {
-						add_submenu_page(
-							$this->get_top_level_menu_slug(),
-							$item['page_title'],
-							sprintf( $item_template, $item['menu_title'] ),
-							$item['capability'],
-							$item['menu_slug'],
-							array( $this, '' )
-						);
-					}
-				}
-			}
-		}
-
-		/**
-		 * Re-order the submenu items so all Freemius added new submenu items
-		 * are added right after the plugin's settings submenu item.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 */
-		private function order_sub_submenu_items() {
-			global $submenu;
-
-			$top_level_menu = &$submenu[ $this->_menu->get_top_level_menu_slug() ];
-
-			$all_submenu_items_after = array();
-
-			$found_submenu_item = false;
-
-			foreach ( $top_level_menu as $submenu_id => $meta ) {
-				if ( $found_submenu_item ) {
-					// Remove all submenu items after the plugin's submenu item.
-					$all_submenu_items_after[] = $meta;
-					unset( $top_level_menu[ $submenu_id ] );
-				}
-
-				if ( $this->_menu->get_raw_slug() === $meta[2] ) {
-					// Found the submenu item, put all below.
-					$found_submenu_item = true;
-					continue;
-				}
-			}
-
-			// Embed all plugin's new submenu items.
-			$this->embed_submenu_items();
-
-			// Start with specially high number to make sure it's appended.
-			$i = max( 10000, max( array_keys( $top_level_menu ) ) + 1 );
-			foreach ( $all_submenu_items_after as $meta ) {
-				$top_level_menu[ $i ] = $meta;
-				$i ++;
-			}
-
-			// Sort submenu items.
-			ksort( $top_level_menu );
-		}
-
-		/**
-		 * Displays the Support Forum link when enabled.
-		 *
-		 * Can be filtered like so:
-		 *
-		 *  function _fs_show_support_menu( $is_visible, $menu_id ) {
-		 *      if ( 'support' === $menu_id ) {
-		 *            return _fs->is_registered();
-		 *        }
-		 *        return $is_visible;
-		 *    }
-		 *    _fs()->add_filter('is_submenu_visible', '_fs_show_support_menu', 10, 2);
-		 *
-		 */
-		function _add_default_submenu_items() {
-			if ( ! $this->is_on() ) {
-				return;
-			}
-
-			if ( ! $this->is_activation_mode() ) {
-				if ( $this->_menu->is_submenu_item_visible( 'support' ) ) {
-					$this->add_submenu_link_item(
-						$this->apply_filters( 'support_forum_submenu', __fs( 'support-forum', $this->_slug ) ),
-						$this->apply_filters( 'support_forum_url', 'https://wordpress.org/support/plugin/' . $this->_slug ),
-						'wp-support-forum',
-						'read',
-						50
-					);
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param string        $menu_title
-		 * @param callable      $render_function
-		 * @param bool|string   $page_title
-		 * @param string        $capability
-		 * @param bool|string   $menu_slug
-		 * @param bool|callable $before_render_function
-		 * @param int           $priority
-		 * @param bool          $show_submenu
-		 */
-		function add_submenu_item(
-			$menu_title,
-			$render_function,
-			$page_title = false,
-			$capability = 'manage_options',
-			$menu_slug = false,
-			$before_render_function = false,
-			$priority = WP_FS__DEFAULT_PRIORITY,
-			$show_submenu = true
-		) {
-			$this->_logger->entrance( 'Title = ' . $menu_title );
-
-			if ( $this->is_addon() ) {
-				$parent_fs = $this->get_parent_instance();
-
-				if ( is_object( $parent_fs ) ) {
-					$parent_fs->add_submenu_item(
-						$menu_title,
-						$render_function,
-						$page_title,
-						$capability,
-						$menu_slug,
-						$before_render_function,
-						$priority,
-						$show_submenu
-					);
-
-					return;
-				}
-			}
-
-			if ( ! isset( $this->_menu_items[ $priority ] ) ) {
-				$this->_menu_items[ $priority ] = array();
-			}
-
-			$this->_menu_items[ $priority ][] = array(
-				'page_title'             => is_string( $page_title ) ? $page_title : $menu_title,
-				'menu_title'             => $menu_title,
-				'capability'             => $capability,
-				'menu_slug'              => $this->_menu->get_slug( is_string( $menu_slug ) ? $menu_slug : strtolower( $menu_title ) ),
-				'render_function'        => $render_function,
-				'before_render_function' => $before_render_function,
-				'show_submenu'           => $show_submenu,
-			);
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param string $menu_title
-		 * @param string $url
-		 * @param bool   $menu_slug
-		 * @param string $capability
-		 * @param int    $priority
-		 *
-		 */
-		function add_submenu_link_item(
-			$menu_title,
-			$url,
-			$menu_slug = false,
-			$capability = 'read',
-			$priority = WP_FS__DEFAULT_PRIORITY
-		) {
-			$this->_logger->entrance( 'Title = ' . $menu_title . '; Url = ' . $url );
-
-			if ( $this->is_addon() ) {
-				$parent_fs = $this->get_parent_instance();
-
-				if ( is_object( $parent_fs ) ) {
-					$parent_fs->add_submenu_link_item(
-						$menu_title,
-						$url,
-						$menu_slug,
-						$capability,
-						$priority
-					);
-
-					return;
-				}
-			}
-
-			if ( ! isset( $this->_menu_items[ $priority ] ) ) {
-				$this->_menu_items[ $priority ] = array();
-			}
-
-			$this->_menu_items[ $priority ][] = array(
-				'menu_title'             => $menu_title,
-				'capability'             => $capability,
-				'menu_slug'              => $this->_menu->get_slug( is_string( $menu_slug ) ? $menu_slug : strtolower( $menu_title ) ),
-				'url'                    => $url,
-				'page_title'             => $menu_title,
-				'render_function'        => 'fs_dummy',
-				'before_render_function' => '',
-			);
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		/* Actions / Hooks / Filters
-		------------------------------------------------------------------------------------------------------------------*/
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @param string $tag
-		 *
-		 * @return string
-		 */
-		private function get_action_tag( $tag ) {
-			return 'fs_' . $tag . '_' . $this->_slug;
-		}
-
-		/**
-		 * Do action, specific for the current context plugin.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param string $tag     The name of the action to be executed.
-		 * @param mixed  $arg,... Optional. Additional arguments which are passed on to the
-		 *                        functions hooked to the action. Default empty.
-		 *
-		 * @uses   do_action()
-		 */
-		function do_action( $tag, $arg = '' ) {
-			$this->_logger->entrance( $tag );
-
-			$args = func_get_args();
-
-			call_user_func_array( 'do_action', array_merge(
-					array( $this->get_action_tag( $tag ) ),
-					array_slice( $args, 1 ) )
-			);
-		}
-
-		/**
-		 * Add action, specific for the current context plugin.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param string   $tag
-		 * @param callable $function_to_add
-		 * @param int      $priority
-		 * @param int      $accepted_args
-		 *
-		 * @uses   add_action()
-		 */
-		function add_action( $tag, $function_to_add, $priority = WP_FS__DEFAULT_PRIORITY, $accepted_args = 1 ) {
-			$this->_logger->entrance( $tag );
-
-			add_action( $this->get_action_tag( $tag ), $function_to_add, $priority, $accepted_args );
-		}
-
-		/**
-		 * Apply filter, specific for the current context plugin.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param string $tag   The name of the filter hook.
-		 * @param mixed  $value The value on which the filters hooked to `$tag` are applied on.
-		 *
-		 * @return mixed The filtered value after all hooked functions are applied to it.
-		 *
-		 * @uses   apply_filters()
-		 */
-		function apply_filters( $tag, $value ) {
-			$this->_logger->entrance( $tag );
-
-			$args = func_get_args();
-			array_unshift( $args, $this->_slug );
-
-			return call_user_func_array( 'fs_apply_filter', $args );
-		}
-
-		/**
-		 * Add filter, specific for the current context plugin.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param string   $tag
-		 * @param callable $function_to_add
-		 * @param int      $priority
-		 * @param int      $accepted_args
-		 *
-		 * @uses   add_filter()
-		 */
-		function add_filter( $tag, $function_to_add, $priority = WP_FS__DEFAULT_PRIORITY, $accepted_args = 1 ) {
-			$this->_logger->entrance( $tag );
-
-			add_filter( $this->get_action_tag( $tag ), $function_to_add, $priority, $accepted_args );
-		}
-
-		/**
-		 * Check if has filter.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 *
-		 * @param string        $tag
-		 * @param callable|bool $function_to_check Optional. The callback to check for. Default false.
-		 *
-		 * @return false|int
-		 *
-		 * @uses   has_filter()
-		 */
-		function has_filter( $tag, $function_to_check = false ) {
-			$this->_logger->entrance( $tag );
-
-			return has_filter( $this->get_action_tag( $tag ), $function_to_check );
-		}
-
-		/**
-		 * Override default i18n text phrases.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string[] string $key_value
-		 *
-		 * @uses   fs_override_i18n()
-		 */
-		function override_i18n( $key_value ) {
-			fs_override_i18n( $key_value, $this->_slug );
-		}
-
-		/* Account Page
-		------------------------------------------------------------------------------------------------------------------*/
-		/**
-		 * Update site information.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param bool $store Flush to Database if true.
-		 */
-		private function _store_site( $store = true ) {
-			$this->_logger->entrance();
-
-			$encrypted_site       = clone $this->_site;
-			$encrypted_site->plan = $this->_encrypt_entity( $this->_site->plan );
-
-			$sites                 = self::get_all_sites();
-			$sites[ $this->_slug ] = $encrypted_site;
-			self::$_accounts->set_option( 'sites', $sites, $store );
-		}
-
-		/**
-		 * Update plugin's plans information.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @param bool $store Flush to Database if true.
-		 */
-		private function _store_plans( $store = true ) {
-			$this->_logger->entrance();
-
-			$plans = self::get_all_plans();
-
-			// Copy plans.
-			$encrypted_plans = array();
-			for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
-				$encrypted_plans[] = $this->_encrypt_entity( $this->_plans[ $i ] );
-			}
-
-			$plans[ $this->_slug ] = $encrypted_plans;
-			self::$_accounts->set_option( 'plans', $plans, $store );
-		}
-
-		/**
-		 * Update user's plugin licenses.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param bool                $store
-		 * @param string|bool         $plugin_slug
-		 * @param FS_Plugin_License[] $licenses
-		 */
-		private function _store_licenses( $store = true, $plugin_slug = false, $licenses = array() ) {
-			$this->_logger->entrance();
-
-			$all_licenses = self::get_all_licenses();
-
-			if ( ! is_string( $plugin_slug ) ) {
-				$plugin_slug = $this->_slug;
-				$licenses    = $this->_licenses;
-			}
-
-			if ( ! isset( $all_licenses[ $plugin_slug ] ) ) {
-				$all_licenses[ $plugin_slug ] = array();
-			}
-
-			$all_licenses[ $plugin_slug ][ $this->_user->id ] = $licenses;
-
-			self::$_accounts->set_option( 'licenses', $all_licenses, $store );
-		}
-
-		/**
-		 * Update user information.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 *
-		 * @param bool $store Flush to Database if true.
-		 */
-		private function _store_user( $store = true ) {
-			$this->_logger->entrance();
-
-			$users                     = self::get_all_users();
-			$users[ $this->_user->id ] = $this->_user;
-			self::$_accounts->set_option( 'users', $users, $store );
-		}
-
-		/**
-		 * Update new updates information.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param FS_Plugin_Tag|null $update
-		 * @param bool               $store Flush to Database if true.
-		 * @param bool|number        $plugin_id
-		 */
-		private function _store_update( $update, $store = true, $plugin_id = false ) {
-			$this->_logger->entrance();
-
-			if ( $update instanceof FS_Plugin_Tag ) {
-				$update->updated = time();
-			}
-
-			if ( ! is_numeric( $plugin_id ) ) {
-				$plugin_id = $this->_plugin->id;
-			}
-
-			$updates               = self::get_all_updates();
-			$updates[ $plugin_id ] = $update;
-			self::$_accounts->set_option( 'updates', $updates, $store );
-		}
-
-		/**
-		 * Update new updates information.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.6
-		 *
-		 * @param FS_Plugin[] $plugin_addons
-		 * @param bool        $store Flush to Database if true.
-		 */
-		private function _store_addons( $plugin_addons, $store = true ) {
-			$this->_logger->entrance();
-
-			$addons                       = self::get_all_addons();
-			$addons[ $this->_plugin->id ] = $plugin_addons;
-			self::$_accounts->set_option( 'addons', $addons, $store );
-		}
-
-		/**
-		 * Delete plugin's associated add-ons.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.8
-		 *
-		 * @param bool $store
-		 *
-		 * @return bool
-		 */
-		private function _delete_account_addons( $store = true ) {
-			$all_addons = self::get_all_account_addons();
-
-			if ( ! isset( $all_addons[ $this->_plugin->id ] ) ) {
-				return false;
-			}
-
-			unset( $all_addons[ $this->_plugin->id ] );
-
-			self::$_accounts->set_option( 'account_addons', $all_addons, $store );
-
-			return true;
-		}
-
-		/**
-		 * Update account add-ons list.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.6
-		 *
-		 * @param FS_Plugin[] $addons
-		 * @param bool        $store Flush to Database if true.
-		 */
-		private function _store_account_addons( $addons, $store = true ) {
-			$this->_logger->entrance();
-
-			$all_addons                       = self::get_all_account_addons();
-			$all_addons[ $this->_plugin->id ] = $addons;
-			self::$_accounts->set_option( 'account_addons', $all_addons, $store );
-		}
-
-		/**
-		 * Store account params in the Database.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.1
-		 */
-		private function _store_account() {
-			$this->_logger->entrance();
-
-			$this->_store_site( false );
-			$this->_store_user( false );
-			$this->_store_plans( false );
-			$this->_store_licenses( false );
-
-			self::$_accounts->store();
-		}
-
-		/**
-		 * Sync user's information.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 * @uses   FS_Api
-		 */
-		private function _handle_account_user_sync() {
-			$this->_logger->entrance();
-
-			$api = $this->get_api_user_scope();
-
-			// Get user's information.
-			$user = $api->get( '/', true );
-
-			if ( isset( $user->id ) ) {
-				$this->_user->first = $user->first;
-				$this->_user->last  = $user->last;
-				$this->_user->email = $user->email;
-
-				$is_menu_item_account_visible = $this->_menu->is_submenu_item_visible( 'account' );
-
-				if ( $user->is_verified &&
-				     ( ! isset( $this->_user->is_verified ) || false === $this->_user->is_verified )
-				) {
-					$this->_user->is_verified = true;
-
-					$this->do_action( 'account_email_verified', $user->email );
-
-					$this->_admin_notices->add(
-						__fs( 'email-verified-message', $this->_slug ),
-						__fs( 'right-on', $this->_slug ) . '!',
-						'success',
-						// Make admin sticky if account menu item is invisible,
-						// since the page will be auto redirected to the plugin's
-						// main settings page, and the non-sticky message
-						// will disappear.
-						! $is_menu_item_account_visible,
-						false,
-						'email_verified'
-					);
-				}
-
-				// Flush user details to DB.
-				$this->_store_user();
-
-				$this->do_action( 'after_account_user_sync', $user );
-
-				/**
-				 * If account menu item is hidden, redirect to plugin's main settings page.
-				 *
-				 * @author Vova Feldman (@svovaf)
-				 * @since  1.1.6
-				 *
-				 * @link   https://github.com/Freemius/wordpress-sdk/issues/6
-				 */
-				if ( ! $is_menu_item_account_visible ) {
-					if ( fs_redirect( $this->_get_admin_page_url() ) ) {
-						exit();
-					}
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 * @uses   FS_Api
-		 *
-		 * @param bool $flush
-		 *
-		 * @return object|\FS_Site
-		 */
-		private function _fetch_site( $flush = false ) {
-			$this->_logger->entrance();
-			$api = $this->get_api_site_scope();
-
-			$site = $api->get( '/', $flush );
-
-			if ( ! isset( $site->error ) ) {
-				$site          = new FS_Site( $site );
-				$site->slug    = $this->_slug;
-				$site->version = $this->get_plugin_version();
-			}
-
-			return $site;
-		}
-
-		/**
-		 * @param bool $store
-		 *
-		 * @return FS_Plugin_Plan|object|false
-		 */
-		private function _enrich_site_plan( $store = true ) {
-			// Try to load plan from local cache.
-			$plan = $this->_get_plan_by_id( $this->_site->plan->id );
-
-			if ( false === $plan ) {
-				$plan = $this->_fetch_site_plan();
-			}
-
-			if ( $plan instanceof FS_Plugin_Plan ) {
-				$this->_update_plan( $plan, $store );
-			}
-
-			return $plan;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 * @uses   FS_Api
-		 *
-		 * @param bool $store
-		 *
-		 * @return FS_Plugin_Plan|object|false
-		 */
-		private function _enrich_site_trial_plan( $store = true ) {
-			// Try to load plan from local cache.
-			$trial_plan = $this->_get_plan_by_id( $this->_site->trial_plan_id );
-
-			if ( false === $trial_plan ) {
-				$trial_plan = $this->_fetch_site_plan( $this->_site->trial_plan_id );
-			}
-
-			if ( $trial_plan instanceof FS_Plugin_Plan ) {
-				$this->_storage->store( 'trial_plan', $trial_plan, $store );
-			}
-
-			return $trial_plan;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 * @uses   FS_Api
-		 *
-		 * @param number|bool $license_id
-		 *
-		 * @return FS_Subscription|object|bool
-		 */
-		private function _fetch_site_license_subscription( $license_id = false ) {
-			$this->_logger->entrance();
-			$api = $this->get_api_site_scope();
-
-			if ( ! is_numeric( $license_id ) ) {
-				$license_id = $this->_license->id;
-			}
-
-			$result = $api->get( "/licenses/{$license_id}/subscriptions.json", true );
-
-			return ! isset( $result->error ) ?
-				( ( is_array( $result->subscriptions ) && 0 < count( $result->subscriptions ) ) ?
-					new FS_Subscription( $result->subscriptions[0] ) :
-					false
-				) :
-				$result;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 * @uses   FS_Api
-		 *
-		 * @param number|bool $plan_id
-		 *
-		 * @return FS_Plugin_Plan|object
-		 */
-		private function _fetch_site_plan( $plan_id = false ) {
-			$this->_logger->entrance();
-			$api = $this->get_api_site_scope();
-
-			if ( ! is_numeric( $plan_id ) ) {
-				$plan_id = $this->_site->plan->id;
-			}
-
-			$plan = $api->get( "/plans/{$plan_id}.json", true );
-
-			return ! isset( $plan->error ) ? new FS_Plugin_Plan( $plan ) : $plan;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 * @uses   FS_Api
-		 *
-		 * @return FS_Plugin_Plan[]|object
-		 */
-		private function _fetch_plugin_plans() {
-			$this->_logger->entrance();
-			$api = $this->get_api_site_scope();
-
-			$result = $api->get( '/plans.json', true );
-
-			if ( ! $this->is_api_error( $result ) ) {
-				for ( $i = 0, $len = count( $result->plans ); $i < $len; $i ++ ) {
-					$result->plans[ $i ] = new FS_Plugin_Plan( $result->plans[ $i ] );
-				}
-
-				$result = $result->plans;
-			}
-
-			return $result;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 * @uses   FS_Api
-		 *
-		 * @param number|bool $plugin_id
-		 *
-		 * @return FS_Plugin_License[]|object
-		 */
-		private function _fetch_licenses( $plugin_id = false ) {
-			$this->_logger->entrance();
-
-			$api = $this->get_api_user_scope();
-
-			if ( ! is_numeric( $plugin_id ) ) {
-				$plugin_id = $this->_plugin->id;
-			}
-
-			$result = $api->get( "/plugins/{$plugin_id}/licenses.json", true );
-
-			if ( ! isset( $result->error ) ) {
-				for ( $i = 0, $len = count( $result->licenses ); $i < $len; $i ++ ) {
-					$result->licenses[ $i ] = new FS_Plugin_License( $result->licenses[ $i ] );
-				}
-
-				$result = $result->licenses;
-			}
-
-			return $result;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param FS_Plugin_Plan $plan
-		 * @param bool           $store
-		 */
-		private function _update_plan( $plan, $store = false ) {
-			$this->_logger->entrance();
-
-			$this->_site->plan = $plan;
-			$this->_store_site( $store );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param FS_Plugin_License[] $licenses
-		 * @param string|bool         $plugin_slug
-		 */
-		private function _update_licenses( $licenses, $plugin_slug = false ) {
-			$this->_logger->entrance();
-
-			if ( is_array( $licenses ) ) {
-				for ( $i = 0, $len = count( $licenses ); $i < $len; $i ++ ) {
-					$licenses[ $i ]->updated = time();
-				}
-			}
-
-			if ( ! is_string( $plugin_slug ) ) {
-				$this->_licenses = $licenses;
-			}
-
-			$this->_store_licenses( true, $plugin_slug, $licenses );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool|number $plugin_id
-		 * @param bool        $flush Since 1.1.7.3
-		 *
-		 * @return object|false New plugin tag info if exist.
-		 */
-		private function _fetch_newer_version( $plugin_id = false, $flush = true ) {
-			$latest_tag = $this->_fetch_latest_version( $plugin_id, $flush );
-
-			if ( ! is_object( $latest_tag ) ) {
-				return false;
-			}
-
-			// Check if version is actually newer.
-			$has_new_version =
-				// If it's an non-installed add-on then always return latest.
-				( $this->_is_addon_id( $plugin_id ) && ! $this->is_addon_activated( $plugin_id ) ) ||
-				// Compare versions.
-				version_compare( $this->get_plugin_version(), $latest_tag->version, '<' );
-
-			$this->_logger->departure( $has_new_version ? 'Found newer plugin version ' . $latest_tag->version : 'No new version' );
-
-			return $has_new_version ? $latest_tag : false;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param bool|number $plugin_id
-		 * @param bool        $flush Since 1.1.7.3
-		 *
-		 * @return bool|FS_Plugin_Tag
-		 */
-		function get_update( $plugin_id = false, $flush = true ) {
-			$this->_logger->entrance();
-
-			if ( ! is_numeric( $plugin_id ) ) {
-				$plugin_id = $this->_plugin->id;
-			}
-
-			$this->_check_updates( true, $plugin_id, $flush );
-			$updates = $this->get_all_updates();
-
-			return isset( $updates[ $plugin_id ] ) && is_object( $updates[ $plugin_id ] ) ? $updates[ $plugin_id ] : false;
-		}
-
-		/**
-		 * Check if site assigned with active license.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 */
-		function has_active_license() {
-			return (
-				is_object( $this->_license ) &&
-				is_numeric( $this->_license->id ) &&
-				! $this->_license->is_expired()
-			);
-		}
-
-		/**
-		 * Check if site assigned with license with enabled features.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool
-		 */
-		function has_features_enabled_license() {
-			return (
-				is_object( $this->_license ) &&
-				is_numeric( $this->_license->id ) &&
-				$this->_license->is_features_enabled()
-			);
-		}
-
-		/**
-		 * Check if user is a trial or have feature enabled license.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @return bool
-		 */
-		function can_use_premium_code() {
-			return $this->is_trial() || $this->has_features_enabled_license();
-		}
-
-		/**
-		 * Sync site's plan.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @uses   FS_Api
-		 *
-		 * @param bool $background Hints the method if it's a background sync. If false, it means that was initiated by
-		 *                         the admin.
-		 */
-		private function _sync_license( $background = false ) {
-			$this->_logger->entrance();
-
-			$plugin_id = fs_request_get( 'plugin_id', $this->get_id() );
-
-			$is_addon_sync = ( ! $this->_plugin->is_addon() && $plugin_id != $this->get_id() );
-
-			if ( $is_addon_sync ) {
-				$this->_sync_addon_license( $plugin_id, $background );
-			} else {
-				$this->_sync_plugin_license( $background );
-			}
-
-			$this->do_action( 'after_account_plan_sync', $this->_site->plan->name );
-		}
-
-		/**
-		 * Sync plugin's add-on license.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 * @uses   FS_Api
-		 *
-		 * @param number $addon_id
-		 * @param bool   $background
-		 */
-		private function _sync_addon_license( $addon_id, $background ) {
-			$this->_logger->entrance();
-
-			if ( $this->is_addon_activated( $addon_id ) ) {
-				// If already installed, use add-on sync.
-				$fs_addon = self::get_instance_by_id( $addon_id );
-				$fs_addon->_sync_license( $background );
-
-				return;
-			}
-
-			// Validate add-on exists.
-			$addon = $this->get_addon( $addon_id );
-
-			if ( ! is_object( $addon ) ) {
-				return;
-			}
-
-			// Add add-on into account add-ons.
-			$account_addons = $this->get_account_addons();
-			if ( ! is_array( $account_addons ) ) {
-				$account_addons = array();
-			}
-			$account_addons[] = $addon->id;
-			$account_addons   = array_unique( $account_addons );
-			$this->_store_account_addons( $account_addons );
-
-			// Load add-on licenses.
-			$licenses = $this->_fetch_licenses( $addon->id );
-
-			// Sync add-on licenses.
-			if ( ! isset( $licenses->error ) ) {
-				$this->_update_licenses( $licenses, $addon->slug );
-
-				if ( ! $this->is_addon_installed( $addon->slug ) && FS_License_Manager::has_premium_license( $licenses ) ) {
-					$plans_result = $this->get_api_site_or_plugin_scope()->get( "/addons/{$addon_id}/plans.json" );
-
-					if ( ! isset( $plans_result->error ) ) {
-						$plans = array();
-						foreach ( $plans_result->plans as $plan ) {
-							$plans[] = new FS_Plugin_Plan( $plan );
-						}
-
-						$this->_admin_notices->add_sticky(
-							FS_Plan_Manager::instance()->has_free_plan( $plans ) ?
-								sprintf(
-									__fs( 'addon-successfully-upgraded-message', $this->_slug ),
-									$addon->title
-								) . ' ' . $this->_get_latest_download_link(
-									__fs( 'download-latest-version', $this->_slug ),
-									$addon_id
-								)
-								:
-								sprintf(
-									__fs( 'addon-successfully-purchased-message', $this->_slug ),
-									$addon->title
-								) . ' ' . $this->_get_latest_download_link(
-									__fs( 'download-latest-version', $this->_slug ),
-									$addon_id
-								),
-							'addon_plan_upgraded_' . $addon->slug,
-							__fs( 'yee-haw', $this->_slug ) . '!'
-						);
-					}
-				}
-			}
-		}
-
-		/**
-		 * Sync site's plugin plan.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 * @uses   FS_Api
-		 *
-		 * @param bool $background Hints the method if it's a background sync. If false, it means that was initiated by
-		 *                         the admin.
-		 */
-		private function _sync_plugin_license( $background = false ) {
-			$this->_logger->entrance();
-
-			// Sync site info.
-			$site = $this->send_install_update( array(), true );
-
-			$plan_change = 'none';
-
-			if ( $this->is_api_error( $site ) ) {
-				// Show API messages only if not background sync or if paying customer.
-				if ( ! $background || $this->is_paying() ) {
-					// Try to ping API to see if not blocked.
-					if ( ! FS_Api::test() ) {
-						/**
-						 * Failed to ping API - blocked!
-						 *
-						 * @author Vova Feldman (@svovaf)
-						 * @since  1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
-						 */
-						$api = $this->get_api_site_scope();
-
-						if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
-							self::$_global_admin_notices->add(
-								sprintf(
-									__fs( 'server-blocking-access', $this->_slug ),
-									$this->get_plugin_name(),
-									'<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
-								) . '<br> ' . __fs( 'server-error-message', $this->_slug ) . var_export( $site->error, true ),
-								__fs( 'oops', $this->_slug ) . '...',
-								'error',
-								$background,
-								false,
-								'api_blocked'
-							);
-						}
-					} else {
-						// Authentication params are broken.
-						$this->_admin_notices->add(
-							__fs( 'wrong-authentication-param-message', $this->_slug ),
-							__fs( 'oops', $this->_slug ) . '...',
-							'error'
-						);
-					}
-				}
-
-				// No reason to continue with license sync while there are API issues.
-				return;
-			}
-
-			// Remove sticky API connectivity message.
-			self::$_global_admin_notices->remove_sticky( 'api_blocked' );
-
-			$site = new FS_Site( $site );
-
-			// Sync plans.
-			$this->_sync_plans();
-
-			if ( ! $this->has_paid_plan() ) {
-				$this->_site = $site;
-				$this->_enrich_site_plan( true );
-				$this->_store_site();
-			} else {
-				// Sync licenses.
-				$this->_sync_licenses();
-
-				// Check if plan / license changed.
-				if ( ! FS_Entity::equals( $site->plan, $this->_site->plan ) ||
-				     // Check if trial started.
-				     $site->trial_plan_id != $this->_site->trial_plan_id ||
-				     $site->trial_ends != $this->_site->trial_ends ||
-				     // Check if license changed.
-				     $site->license_id != $this->_site->license_id
-				) {
-					if ( $site->is_trial() && ( ! $this->_site->is_trial() || $site->trial_ends != $this->_site->trial_ends ) ) {
-						// New trial started.
-						$this->_site = $site;
-						$plan_change = 'trial_started';
-
-						// Store trial plan information.
-						$this->_enrich_site_trial_plan( true );
-
-						// For trial with subscription use-case.
-						$new_license = is_null( $site->license_id ) ? null : $this->_get_license_by_id( $site->license_id );
-
-						if ( is_object( $new_license ) && ! $new_license->is_expired() ) {
-							$this->_site = $site;
-							$this->_update_site_license( $new_license );
-							$this->_store_licenses();
-							$this->_enrich_site_plan( true );
-
-							$this->_sync_site_subscription( $this->_license );
-						}
-					} else if ( $this->_site->is_trial() && ! $site->is_trial() && ! is_numeric( $site->license_id ) ) {
-						// Was in trial, but now trial expired and no license ID.
-						// New trial started.
-						$this->_site = $site;
-						$plan_change = 'trial_expired';
-
-						// Clear trial plan information.
-						$this->_storage->trial_plan = null;
-
-					} else {
-						$is_free = $this->is_free_plan();
-
-						// Make sure license exist and not expired.
-						$new_license = is_null( $site->license_id ) ? null : $this->_get_license_by_id( $site->license_id );
-
-						if ( $is_free && ( ( ! is_object( $new_license ) || $new_license->is_expired() ) ) ) {
-							// The license is expired, so ignore upgrade method.
-						} else {
-							// License changed.
-							$this->_site = $site;
-							$this->_update_site_license( $new_license );
-							$this->_store_licenses();
-							$this->_enrich_site_plan( true );
-
-							$plan_change = $is_free ?
-								'upgraded' :
-								( is_object( $new_license ) ?
-									'changed' :
-									'downgraded' );
-						}
-					}
-
-					// Store updated site info.
-					$this->_store_site();
-				} else {
-					if ( is_object( $this->_license ) && $this->_license->is_expired() ) {
-						if ( ! $this->has_features_enabled_license() ) {
-							$this->_deactivate_license();
-							$plan_change = 'downgraded';
-						} else {
-							$plan_change = 'expired';
-						}
-					}
-
-					if ( is_numeric( $site->license_id ) && is_object( $this->_license ) ) {
-						$this->_sync_site_subscription( $this->_license );
-					}
-				}
-			}
-
-			if ( $this->has_paid_plan() ) {
-				switch ( $plan_change ) {
-					case 'none':
-						if ( ! $background && is_admin() ) {
-							$plan = $this->is_trial() ?
-								$this->_storage->trial_plan :
-								$this->_site->plan;
-
-							$this->_admin_notices->add(
-								sprintf(
-									__fs( 'plan-did-not-change-message', $this->_slug ) . ' ' .
-									sprintf(
-										'<a href="%s">%s</a>',
-										$this->contact_url(
-											'bug',
-											sprintf( __fs( 'plan-did-not-change-email-message', $this->_slug ),
-												strtoupper( $plan->name )
-											)
-										),
-										__fs( 'contact-us-here', $this->_slug )
-									),
-									'<i>' . $plan->title . ( $this->is_trial() ? ' ' . __fs( 'trial', $this->_slug ) : '' ) . '</i>'
-								),
-								__fs( 'hmm', $this->_slug ) . '...',
-								'error'
-							);
-						}
-						break;
-					case 'upgraded':
-						$this->_admin_notices->add_sticky(
-							sprintf(
-								__fs( 'plan-upgraded-message', $this->_slug ),
-								'<i>' . $this->get_plugin_name() . '</i>'
-							) . ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
-									__fs( 'download-latest-x-version', $this->_slug ),
-									$this->_site->plan->title
-								) )
-							),
-							'plan_upgraded',
-							__fs( 'yee-haw', $this->_slug ) . '!'
-						);
-
-						$this->_admin_notices->remove_sticky( array(
-							'trial_started',
-							'trial_promotion',
-							'trial_expired',
-							'activation_complete',
-						) );
-						break;
-					case 'changed':
-						$this->_admin_notices->add_sticky(
-							sprintf(
-								__fs( 'plan-changed-to-x-message', $this->_slug ),
-								$this->_site->plan->title
-							),
-							'plan_changed'
-						);
-
-						$this->_admin_notices->remove_sticky( array(
-							'trial_started',
-							'trial_promotion',
-							'trial_expired',
-							'activation_complete',
-						) );
-						break;
-					case 'downgraded':
-						$this->_admin_notices->add_sticky(
-							sprintf( __fs( 'license-expired-blocking-message', $this->_slug ) ),
-							'license_expired',
-							__fs( 'hmm', $this->_slug ) . '...'
-						);
-						$this->_admin_notices->remove_sticky( 'plan_upgraded' );
-						break;
-					case 'expired':
-						$this->_admin_notices->add_sticky(
-							sprintf( __fs( 'license-expired-non-blocking-message', $this->_slug ), $this->_site->plan->title ),
-							'license_expired',
-							__fs( 'hmm', $this->_slug ) . '...'
-						);
-						$this->_admin_notices->remove_sticky( 'plan_upgraded' );
-						break;
-					case 'trial_started':
-						$this->_admin_notices->add_sticky(
-							sprintf(
-								__fs( 'trial-started-message', $this->_slug ),
-								'<i>' . $this->get_plugin_name() . '</i>'
-							) . ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
-									__fs( 'download-latest-x-version', $this->_slug ),
-									$this->_storage->trial_plan->title
-								) ) ),
-							'trial_started',
-							__fs( 'yee-haw', $this->_slug ) . '!'
-						);
-
-						$this->_admin_notices->remove_sticky( array(
-							'trial_promotion',
-						) );
-						break;
-					case 'trial_expired':
-						$this->_admin_notices->add_sticky(
-							__fs( 'trial-expired-message', $this->_slug ),
-							'trial_expired',
-							__fs( 'hmm', $this->_slug ) . '...'
-						);
-						$this->_admin_notices->remove_sticky( array(
-							'trial_started',
-							'trial_promotion',
-							'plan_upgraded',
-						) );
-						break;
-				}
-			}
-
-			if ( 'none' !== $plan_change ) {
-				$this->do_action( 'after_license_change', $plan_change, $this->_site->plan );
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param bool $background
-		 */
-		protected function _activate_license( $background = false ) {
-			$this->_logger->entrance();
-
-			$license_id = fs_request_get( 'license_id' );
-
-			if ( FS_Plugin_License::is_valid_id( $license_id ) && $license_id == $this->_site->license_id ) {
-				// License is already activated.
-				return;
-			}
-
-			$premium_license = FS_Plugin_License::is_valid_id( $license_id ) ?
-				$this->_get_license_by_id( $license_id ) :
-				$this->_get_available_premium_license();
-
-			if ( ! is_object( $premium_license ) ) {
-				return;
-			}
-
-			$api     = $this->get_api_site_scope();
-			$license = $api->call( "/licenses/{$premium_license->id}.json", 'put' );
-
-			if ( $this->is_api_error( $license ) ) {
-				if ( ! $background ) {
-					$this->_admin_notices->add(
-						__fs( 'license-activation-failed-message', $this->_slug ) . '<br> ' .
-						__fs( 'server-error-message', $this->_slug ) . ' ' . var_export( $license, true ),
-						__fs( 'hmm', $this->_slug ) . '...',
-						'error'
-					);
-				}
-
-				return;
-			}
-
-			$premium_license = new FS_Plugin_License( $license );
-
-			// Updated site plan.
-			$site = $this->get_api_site_scope()->get( '/', true );
-			if ( ! $this->is_api_error( $site ) ) {
-				$this->_site = new FS_Site( $site );
-			}
-			$this->_update_site_license( $premium_license );
-			$this->_enrich_site_plan( false );
-
-			$this->_store_account();
-
-			if ( ! $background ) {
-				$this->_admin_notices->add_sticky(
-					__fs( 'license-activated-message', $this->_slug ) .
-					( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
-							__fs( 'download-latest-x-version', $this->_slug ),
-							$this->_site->plan->title
-						) ) ),
-					'license_activated',
-					__fs( 'yee-haw', $this->_slug ) . '!'
-				);
-			}
-
-			$this->_admin_notices->remove_sticky( array(
-				'trial_promotion',
-				'license_expired',
-			) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param bool $show_notice
-		 */
-		protected function _deactivate_license( $show_notice = true ) {
-			$this->_logger->entrance();
-
-			if ( ! is_object( $this->_license ) ) {
-				$this->_admin_notices->add(
-					sprintf( __fs( 'no-active-license-message', $this->_slug ), $this->_site->plan->title ),
-					__fs( 'hmm', $this->_slug ) . '...'
-				);
-
-				return;
-			}
-
-			$api     = $this->get_api_site_scope();
-			$license = $api->call( "/licenses/{$this->_site->license_id}.json", 'delete' );
-
-			if ( isset( $license->error ) ) {
-				$this->_admin_notices->add(
-					__fs( 'license-deactivation-failed-message', $this->_slug ) . '<br> ' .
-					__fs( 'server-error-message', $this->_slug ) . ' ' . var_export( $license->error, true ),
-					__fs( 'hmm', $this->_slug ) . '...',
-					'error'
-				);
-
-				return;
-			}
-
-			// Update license cache.
-			for ( $i = 0, $len = count( $this->_licenses ); $i < $len; $i ++ ) {
-				if ( $license->id == $this->_licenses[ $i ]->id ) {
-					$this->_licenses[ $i ] = new FS_Plugin_License( $license );
-				}
-			}
-
-			// Updated site plan to default.
-			$this->_sync_plans();
-			$this->_site->plan->id = $this->_plans[0]->id;
-			// Unlink license from site.
-			$this->_update_site_license( null );
-			$this->_enrich_site_plan( false );
-
-			$this->_store_account();
-
-			if ( $show_notice ) {
-				$this->_admin_notices->add(
-					sprintf( __fs( 'license-deactivation-message', $this->_slug ), $this->_site->plan->title ),
-					__fs( 'ok', $this->_slug )
-				);
-			}
-
-			$this->_admin_notices->remove_sticky( array(
-				'plan_upgraded',
-				'license_activated',
-			) );
-		}
-
-		/**
-		 * Site plan downgrade.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @uses   FS_Api
-		 */
-		private function _downgrade_site() {
-			$this->_logger->entrance();
-
-			$api  = $this->get_api_site_scope();
-			$site = $api->call( 'downgrade.json', 'put' );
-
-			$plan_downgraded = false;
-			$plan            = false;
-			if ( ! isset( $site->error ) ) {
-				$prev_plan_id = $this->_site->plan->id;
-
-				// Update new site plan id.
-				$this->_site->plan->id = $site->plan_id;
-
-				$plan         = $this->_enrich_site_plan();
-				$subscription = $this->_sync_site_subscription( $this->_license );
-
-				// Plan downgraded if plan was changed or subscription was cancelled.
-				$plan_downgraded = ( $plan instanceof FS_Plugin_Plan && $prev_plan_id != $plan->id ) ||
-				                   ( is_object( $subscription ) && ! isset( $subscription->error ) && ! $subscription->is_active() );
-			} else {
-				// handle different error cases.
-
-			}
-
-			if ( $plan_downgraded ) {
-				// Remove previous sticky message about upgrade (if exist).
-				$this->_admin_notices->remove_sticky( 'plan_upgraded' );
-
-				$this->_admin_notices->add(
-					sprintf( __fs( 'plan-x-downgraded-message', $this->_slug ),
-						$plan->title,
-						human_time_diff( time(), strtotime( $this->_license->expiration ) )
-					)
-				);
-
-				// Store site updates.
-				$this->_store_site();
-			} else {
-				$this->_admin_notices->add(
-					__fs( 'plan-downgraded-failure-message', $this->_slug ),
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8.1
-		 *
-		 * @param bool|string $plan_name
-		 *
-		 * @return bool If trial was successfully started.
-		 */
-		function start_trial($plan_name = false) {
-			$this->_logger->entrance();
-
-			if ( $this->is_trial() ) {
-				// Already in trial mode.
-				$this->_admin_notices->add(
-					__fs( 'in-trial-mode', $this->_slug ),
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-
-				return false;
-			}
-
-			if ( $this->_site->is_trial_utilized() ) {
-				// Trial was already utilized.
-				$this->_admin_notices->add(
-					__fs( 'trial-utilized', $this->_slug ),
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-
-				return false;
-			}
-
-			if ( false !== $plan_name ) {
-				$plan = $this->get_plan_by_name( $plan_name );
-
-				if ( false === $plan ) {
-					// Plan doesn't exist.
-					$this->_admin_notices->add(
-						sprintf( __fs( 'trial-plan-x-not-exist', $this->_slug ), $plan_name ),
-						__fs( 'oops', $this->_slug ) . '...',
-						'error'
-					);
-
-					return false;
-				}
-
-				if ( ! $plan->has_trial() ) {
-					// Plan doesn't exist.
-					$this->_admin_notices->add(
-						sprintf( __fs( 'plan-x-no-trial', $this->_slug ), $plan_name ),
-						__fs( 'oops', $this->_slug ) . '...',
-						'error'
-					);
-
-					return false;
-				}
-			} else {
-				if ( ! $this->has_trial_plan() ) {
-					// None of the plans have a trial.
-					$this->_admin_notices->add(
-						__fs( 'no-trials', $this->_slug ),
-						__fs( 'oops', $this->_slug ) . '...',
-						'error'
-					);
-
-					return false;
-				}
-
-				$plans_with_trial = FS_Plan_Manager::instance()->get_trial_plans( $this->_plans );
-
-				$plan = $plans_with_trial[0];
-			}
-
-			$api  = $this->get_api_site_scope();
-			$plan = $api->call( "plans/{$plan->id}/trials.json", 'post' );
-
-			if ( $this->is_api_error( $plan ) ) {
-				// Some API error while trying to start the trial.
-				$this->_admin_notices->add(
-					__fs( 'unexpected-api-error', $this->_slug ) . ' ' . var_export( $plan, true ),
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-
-				return false;
-			}
-
-			// Sync license.
-			$this->_sync_license();
-
-			return $this->is_trial();
-		}
-
-		/**
-		 * Cancel site trial.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @uses   FS_Api
-		 */
-		private function _cancel_trial() {
-			$this->_logger->entrance();
-
-			if ( ! $this->is_trial() ) {
-				$this->_admin_notices->add(
-					__fs( 'trial-cancel-no-trial-message', $this->_slug ),
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-
-				return;
-			}
-
-			$api  = $this->get_api_site_scope();
-			$site = $api->call( 'trials.json', 'delete' );
-
-			$trial_cancelled = false;
-
-			if ( ! $this->is_api_error( $site ) ) {
-				$prev_trial_ends = $this->_site->trial_ends;
-
-				if ( $this->is_paid_trial() ) {
-					$this->_license->expiration   = $site->trial_ends;
-					$this->_license->is_cancelled = true;
-					$this->_update_site_license( $this->_license );
-					$this->_store_licenses();
-
-					// Clear subscription reference.
-					$this->_sync_site_subscription( null );
-				}
-
-				// Update site info.
-				$this->_site = new FS_Site( $site );
-				$this->_enrich_site_plan();
-
-				$trial_cancelled = ( $prev_trial_ends != $site->trial_ends );
-			} else {
-				// handle different error cases.
-
-			}
-
-			if ( $trial_cancelled ) {
-				// Remove previous sticky messages about upgrade or trial (if exist).
-				$this->_admin_notices->remove_sticky( array(
-					'trial_started',
-					'trial_promotion',
-					'plan_upgraded',
-				) );
-
-				// Store site updates.
-				$this->_store_site();
-
-				// Clear trial plan information.
-				unset( $this->_storage->trial_plan );
-
-				if ( ! $this->is_addon() ||
-				     ! $this->deactivate_premium_only_addon_without_license( true )
-				) {
-					$this->_admin_notices->add(
-						sprintf( __fs( 'trial-cancel-message', $this->_slug ), $this->_storage->trial_plan->title )
-					);
-				}
-			} else {
-				$this->_admin_notices->add(
-					__fs( 'trial-cancel-failure-message', $this->_slug ),
-					__fs( 'oops', $this->_slug ) . '...',
-					'error'
-				);
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param bool|number $plugin_id
-		 *
-		 * @return bool
-		 */
-		private function _is_addon_id( $plugin_id ) {
-			return is_numeric( $plugin_id ) && ( $this->get_id() != $plugin_id );
-		}
-
-		/**
-		 * Check if user eligible to download premium version updates.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool
-		 */
-		private function _can_download_premium() {
-			return $this->has_active_license() ||
-			       ( $this->is_trial() && ! $this->get_trial_plan()->is_free() );
-		}
-
-		/**
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param bool|number $addon_id
-		 * @param string      $type "json" or "zip"
-		 *
-		 * @return string
-		 */
-		private function _get_latest_version_endpoint( $addon_id = false, $type = 'json' ) {
-
-			$is_addon = $this->_is_addon_id( $addon_id );
-
-			$is_premium = null;
-			if ( ! $is_addon ) {
-				$is_premium = $this->_can_download_premium();
-			} else if ( $this->is_addon_activated( $addon_id ) ) {
-				$is_premium = self::get_instance_by_id( $addon_id )->_can_download_premium();
-			}
-
-			return // If add-on, then append add-on ID.
-				( $is_addon ? "/addons/$addon_id" : '' ) .
-				'/updates/latest.' . $type .
-				// If add-on and not yet activated, try to fetch based on server licensing.
-				( is_bool( $is_premium ) ? '?is_premium=' . json_encode( $is_premium ) : '' );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool|number $addon_id
-		 * @param bool        $flush Since 1.1.7.3
-		 *
-		 * @return object|false Plugin latest tag info.
-		 */
-		function _fetch_latest_version( $addon_id = false, $flush = true ) {
-			$this->_logger->entrance();
-
-			/**
-			 * @since 1.1.7.3 Check for plugin updates from Freemius only if opted-in.
-			 * @since 1.1.7.4 Also check updates for add-ons.
-			 */
-			if ( ! $this->is_registered() &&
-			     ! $this->_is_addon_id( $addon_id )
-			) {
-				return false;
-			}
-
-			$tag = $this->get_api_site_or_plugin_scope()->get(
-				$this->_get_latest_version_endpoint( $addon_id, 'json' ),
-				$flush
-			);
-
-			$latest_version = ( is_object( $tag ) && isset( $tag->version ) ) ? $tag->version : 'couldn\'t get';
-
-			$this->_logger->departure( 'Latest version ' . $latest_version );
-
-			return ( is_object( $tag ) && isset( $tag->version ) ) ? $tag : false;
-		}
-
-		#region Download Plugin ------------------------------------------------------------------
-
-		/**
-		 * Download latest plugin version, based on plan.
-		 * The download will be fetched via the API first.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool|number $plugin_id
-		 *
-		 * @uses   FS_Api
-		 *
-		 * @deprecated
-		 */
-		private function _download_latest( $plugin_id = false ) {
-			$this->_logger->entrance();
-
-			$is_addon = $this->_is_addon_id( $plugin_id );
-
-			$is_premium = $this->_can_download_premium();
-
-			$latest = $this->get_api_site_scope()->call(
-				$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
-			);
-
-			$slug = $this->_slug;
-			if ( $is_addon ) {
-				$addon = $this->get_addon( $plugin_id );
-				$slug  = is_object( $addon ) ? $addon->slug : 'addon';
-			}
-
-			if ( ! is_object( $latest ) ) {
-				header( "Content-Type: application/zip" );
-				header( "Content-Disposition: attachment; filename={$slug}" . ( ! $is_addon && $is_premium ? '-premium' : '' ) . ".zip" );
-				header( "Content-Length: " . strlen( $latest ) );
-				echo $latest;
-
-				exit();
-			}
-		}
-
-		/**
-		 * Download latest plugin version, based on plan.
-		 *
-		 * Not like _download_latest(), this will redirect the page
-		 * to secure download url to prevent dual download (from FS to WP server,
-		 * and then from WP server to the client / browser).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param bool|number $plugin_id
-		 *
-		 * @uses   FS_Api
-		 * @uses   wp_redirect()
-		 */
-		private function _download_latest_directly( $plugin_id = false ) {
-			$this->_logger->entrance();
-
-			wp_redirect( $this->_get_latest_download_api_url( $plugin_id ) );
-		}
-
-		/**
-		 * Get latest plugin FS API download URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param bool|number $plugin_id
-		 *
-		 * @return string
-		 */
-		private function _get_latest_download_api_url( $plugin_id = false ) {
-			$this->_logger->entrance();
-
-			return $this->get_api_site_scope()->get_signed_url(
-				$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
-			);
-		}
-
-		/**
-		 * Get latest plugin download link.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param string      $label
-		 * @param bool|number $plugin_id
-		 *
-		 * @return string
-		 */
-		private function _get_latest_download_link( $label, $plugin_id = false ) {
-			return sprintf(
-				'<a target="_blank" href="%s">%s</a>',
-				$this->_get_latest_download_local_url( $plugin_id ),
-				$label
-			);
-		}
-
-		/**
-		 * Get latest plugin download local URL.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param bool|number $plugin_id
-		 *
-		 * @return string
-		 */
-		function _get_latest_download_local_url( $plugin_id = false ) {
-			// Add timestamp to protect from caching.
-			$params = array( 'ts' => WP_FS__SCRIPT_START_TIME );
-
-			if ( ! empty( $plugin_id ) ) {
-				$params['plugin_id'] = $plugin_id;
-			}
-
-			return $this->get_account_url( 'download_latest', $params );
-		}
-
-		#endregion Download Plugin ------------------------------------------------------------------
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @uses   FS_Api
-		 *
-		 * @param bool        $background Hints the method if it's a background updates check. If false, it means that
-		 *                                was initiated by the admin.
-		 * @param bool|number $plugin_id
-		 * @param bool        $flush      Since 1.1.7.3
-		 */
-		private function _check_updates( $background = false, $plugin_id = false, $flush = true ) {
-			$this->_logger->entrance();
-
-			// Check if there's a newer version for download.
-			$new_version = $this->_fetch_newer_version( $plugin_id, $flush );
-
-			$update = null;
-			if ( is_object( $new_version ) ) {
-				$update = new FS_Plugin_Tag( $new_version );
-
-				if ( ! $background ) {
-					$this->_admin_notices->add(
-						sprintf(
-							__fs( 'version-x-released', $this->_slug ) . ' ' . __fs( 'please-download-x', $this->_slug ),
-							$update->version,
-							sprintf(
-								'<a href="%s" target="_blank">%s</a>',
-								$this->get_account_url( 'download_latest' ),
-								sprintf( __fs( 'latest-x-version', $this->_slug ), $this->_site->plan->title )
-							)
-						),
-						__fs( 'new', $this->_slug ) . '!'
-					);
-				}
-			} else if ( false === $new_version && ! $background ) {
-				$this->_admin_notices->add(
-					__fs( 'you-have-latest', $this->_slug ),
-					__fs( 'you-are-good', $this->_slug )
-				);
-			}
-
-			$this->_store_update( $update, true, $plugin_id );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool $flush Since 1.1.7.3 by default add 24 hour cache.
-		 *
-		 * @return FS_Plugin[]
-		 *
-		 * @uses   FS_Api
-		 */
-		private function _sync_addons( $flush = false ) {
-			$this->_logger->entrance();
-
-			$result = $this->get_api_site_or_plugin_scope()->get( '/addons.json?enriched=true', $flush );
-
-			$addons = array();
-			if ( ! $this->is_api_error( $result ) ) {
-				for ( $i = 0, $len = count( $result->plugins ); $i < $len; $i ++ ) {
-					$addons[ $i ] = new FS_Plugin( $result->plugins[ $i ] );
-				}
-
-				$this->_store_addons( $addons, true );
-			}
-
-			return $addons;
-		}
-
-		/**
-		 * Handle user email update.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 * @uses   FS_Api
-		 *
-		 * @param string $new_email
-		 *
-		 * @return object
-		 */
-		private function _update_email( $new_email ) {
-			$this->_logger->entrance();
-
-
-			$api  = $this->get_api_user_scope();
-			$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,email,is_verified", 'put', array(
-				'email'                   => $new_email,
-				'after_email_confirm_url' => $this->_get_admin_page_url(
-					'account',
-					array( 'fs_action' => 'sync_user' )
-				),
-			) );
-
-			if ( ! isset( $user->error ) ) {
-				$this->_user->email       = $user->email;
-				$this->_user->is_verified = $user->is_verified;
-				$this->_store_user();
-			} else {
-				// handle different error cases.
-
-			}
-
-			return $user;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 *
-		 * @param mixed $result
-		 *
-		 * @return bool Is API result contains an error.
-		 */
-		private function is_api_error( $result ) {
-			return ( is_object( $result ) && isset( $result->error ) ) ||
-			       is_string( $result );
-		}
-
-		/**
-		 * Start install ownership change.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 * @uses   FS_Api
-		 *
-		 * @param string $candidate_email
-		 *
-		 * @return bool Is ownership change successfully initiated.
-		 */
-		private function init_change_owner( $candidate_email ) {
-			$this->_logger->entrance();
-
-			$api    = $this->get_api_site_scope();
-			$result = $api->call( "/users/{$this->_user->id}.json", 'put', array(
-				'email'             => $candidate_email,
-				'after_confirm_url' => $this->_get_admin_page_url(
-					'account',
-					array( 'fs_action' => 'change_owner' )
-				),
-			) );
-
-			return ! $this->is_api_error( $result );
-		}
-
-		/**
-		 * Handle install ownership change.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 * @uses   FS_Api
-		 *
-		 * @return bool Was ownership change successfully complete.
-		 */
-		private function complete_change_owner() {
-			$this->_logger->entrance();
-
-			$site_result = $this->get_api_site_scope( true )->get();
-			$site        = new FS_Site( $site_result );
-			$this->_site = $site;
-
-			$user     = new FS_User();
-			$user->id = fs_request_get( 'user_id' );
-
-			// Validate install's user and given user.
-			if ( $user->id != $this->_site->user_id ) {
-				return false;
-			}
-
-			$user->public_key = fs_request_get( 'user_public_key' );
-			$user->secret_key = fs_request_get( 'user_secret_key' );
-
-			// Fetch new user information.
-			$this->_user = $user;
-			$user_result = $this->get_api_user_scope( true )->get();
-			$user        = new FS_User( $user_result );
-			$this->_user = $user;
-
-			$this->_set_account( $user, $site );
-
-			return true;
-		}
-
-		/**
-		 * Handle user name update.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 * @uses   FS_Api
-		 *
-		 * @return object
-		 */
-		private function update_user_name() {
-			$this->_logger->entrance();
-			$name = fs_request_get( 'fs_user_name_' . $this->_slug, '' );
-
-			$api  = $this->get_api_user_scope();
-			$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,first,last", 'put', array(
-				'name' => $name,
-			) );
-
-			if ( ! isset( $user->error ) ) {
-				$this->_user->first = $user->first;
-				$this->_user->last  = $user->last;
-				$this->_store_user();
-			} else {
-				// handle different error cases.
-
-			}
-
-			return $user;
-		}
-
-		/**
-		 * Verify user email.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 * @uses   FS_Api
-		 */
-		private function verify_email() {
-			$this->_handle_account_user_sync();
-
-			if ( $this->_user->is_verified() ) {
-				return;
-			}
-
-			$api    = $this->get_api_site_scope();
-			$result = $api->call( "/users/{$this->_user->id}/verify.json", 'put', array(
-				'after_email_confirm_url' => $this->_get_admin_page_url(
-					'account',
-					array( 'fs_action' => 'sync_user' )
-				)
-			) );
-
-			if ( ! isset( $result->error ) ) {
-				$this->_admin_notices->add( sprintf(
-					__fs( 'verification-email-sent-message', $this->_slug ),
-					sprintf( '<a href="mailto:%1s">%2s</a>', esc_url( $this->_user->email ), $this->_user->email )
-				) );
-			} else {
-				// handle different error cases.
-
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.2
-		 *
-		 * @return string
-		 */
-		private function get_activation_url() {
-			return $this->apply_filters( 'connect_url', $this->_get_admin_page_url() );
-		}
-
-		/**
-		 * Get the URL of the page that should be loaded after the user connect or skip in the opt-in screen.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string $filter Filter name.
-		 *
-		 * @return string
-		 */
-		private function get_after_activation_url( $filter ) {
-			$first_time_path = $this->_menu->get_first_time_path();
-
-			return $this->apply_filters(
-				$filter,
-				empty( $first_time_path ) ?
-					$this->_get_admin_page_url() :
-					$first_time_path
-			);
-		}
-
-		/**
-		 * Handle account page updates / edits / actions.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 */
-		private function _handle_account_edits() {
-			if ( ! current_user_can( 'activate_plugins' ) ) {
-				return;
-			}
-
-			$plugin_id = fs_request_get( 'plugin_id', $this->get_id() );
-			$action    = fs_get_action();
-
-			switch ( $action ) {
-				case 'delete_account':
-					check_admin_referer( $action );
-
-					if ( $plugin_id == $this->get_id() ) {
-						$this->delete_account_event();
-
-						// Clear user and site.
-						$this->_site = null;
-						$this->_user = null;
-
-						if ( fs_redirect( $this->get_activation_url() ) ) {
-							exit();
-						}
-					} else {
-						if ( $this->is_addon_activated( $plugin_id ) ) {
-							$fs_addon = self::get_instance_by_id( $plugin_id );
-							$fs_addon->delete_account_event();
-
-							if ( fs_redirect( $this->_get_admin_page_url( 'account' ) ) ) {
-								exit();
-							}
-						}
-					}
-
-					return;
-
-				case 'downgrade_account':
-					check_admin_referer( $action );
-					$this->_downgrade_site();
-
-					return;
-
-				case 'activate_license':
-					check_admin_referer( $action );
-
-					if ( $plugin_id == $this->get_id() ) {
-						$this->_activate_license();
-					} else {
-						if ( $this->is_addon_activated( $plugin_id ) ) {
-							$fs_addon = self::get_instance_by_id( $plugin_id );
-							$fs_addon->_activate_license();
-						}
-					}
-
-					return;
-
-				case 'deactivate_license':
-					check_admin_referer( $action );
-
-					if ( $plugin_id == $this->get_id() ) {
-						$this->_deactivate_license();
-					} else {
-						if ( $this->is_addon_activated( $plugin_id ) ) {
-							$fs_addon = self::get_instance_by_id( $plugin_id );
-							$fs_addon->_deactivate_license();
-						}
-					}
-
-					return;
-
-				case 'check_updates':
-					check_admin_referer( $action );
-					$this->_check_updates();
-
-					return;
-
-				case 'change_owner':
-					$state = fs_request_get( 'state', 'init' );
-					switch ( $state ) {
-						case 'init':
-							$candidate_email = fs_request_get( 'candidate_email', '' );
-
-							if ( $this->init_change_owner( $candidate_email ) ) {
-								$this->_admin_notices->add( sprintf( __fs( 'change-owner-request-sent-x', $this->_slug ), '<b>' . $this->_user->email . '</b>' ) );
-							}
-							break;
-						case 'owner_confirmed':
-							$candidate_email = fs_request_get( 'candidate_email', '' );
-
-							$this->_admin_notices->add( sprintf( __fs( 'change-owner-request_owner-confirmed', $this->_slug ), '<b>' . $candidate_email . '</b>' ) );
-							break;
-						case 'candidate_confirmed':
-							if ( $this->complete_change_owner() ) {
-								$this->_admin_notices->add_sticky(
-									sprintf( __fs( 'change-owner-request_candidate-confirmed', $this->_slug ), '<b>' . $this->_user->email . '</b>' ),
-									'ownership_changed',
-									__fs( 'congrats', $this->_slug ) . '!'
-								);
-							} else {
-								// @todo Handle failed ownership change message.
-							}
-							break;
-					}
-
-					return;
-
-				case 'update_email':
-					check_admin_referer( 'update_email' );
-
-					$new_email = fs_request_get( 'fs_email_' . $this->_slug, '' );
-					$result    = $this->_update_email( $new_email );
-
-					if ( isset( $result->error ) ) {
-						switch ( $result->error->code ) {
-							case 'user_exist':
-								$this->_admin_notices->add(
-									__fs( 'user-exist-message', $this->_slug ) . ' ' .
-									sprintf( __fs( 'user-exist-message_ownership', $this->_slug ), '<b>' . $new_email . '</b>' ) .
-									sprintf(
-										'<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
-										$this->get_account_url( 'change_owner', array(
-											'state'           => 'init',
-											'candidate_email' => $new_email
-										) ),
-										__fs( 'change-ownership', $this->_slug )
-									),
-									__fs( 'oops', $this->_slug ) . '...',
-									'error'
-								);
-								break;
-						}
-					} else {
-						$this->_admin_notices->add( __fs( 'email-updated-message', $this->_slug ) );
-					}
-
-					return;
-
-				case 'update_user_name':
-					check_admin_referer( 'update_user_name' );
-
-					$result = $this->update_user_name();
-
-					if ( isset( $result->error ) ) {
-						$this->_admin_notices->add(
-							__fs( 'name-update-failed-message', $this->_slug ),
-							__fs( 'oops', $this->_slug ) . '...',
-							'error'
-						);
-					} else {
-						$this->_admin_notices->add( __fs( 'name-updated-message', $this->_slug ) );
-					}
-
-					return;
-
-				#region Actions that might be called from external links (e.g. email)
-
-				case 'cancel_trial':
-					if ( $plugin_id == $this->get_id() ) {
-						$this->_cancel_trial();
-					} else {
-						if ( $this->is_addon_activated( $plugin_id ) ) {
-							$fs_addon = self::get_instance_by_id( $plugin_id );
-							$fs_addon->_cancel_trial();
-						}
-					}
-
-					return;
-
-				case 'verify_email':
-					$this->verify_email();
-
-					return;
-
-				case 'sync_user':
-					$this->_handle_account_user_sync();
-
-					return;
-
-				case $this->_slug . '_sync_license':
-					$this->_sync_license();
-
-					return;
-
-				case 'download_latest':
-					$this->_download_latest_directly( $plugin_id );
-
-					return;
-
-				#endregion
-			}
-
-			if ( WP_FS__IS_POST_REQUEST ) {
-				$properties = array( 'site_secret_key', 'site_id', 'site_public_key' );
-				foreach ( $properties as $p ) {
-					if ( 'update_' . $p === $action ) {
-						check_admin_referer( $action );
-
-						$this->_logger->log( $action );
-
-						$site_property                      = substr( $p, strlen( 'site_' ) );
-						$site_property_value                = fs_request_get( 'fs_' . $p . '_' . $this->_slug, '' );
-						$this->get_site()->{$site_property} = $site_property_value;
-
-						// Store account after modification.
-						$this->_store_site();
-
-						$this->do_action( 'account_property_edit', 'site', $site_property, $site_property_value );
-
-						$this->_admin_notices->add( sprintf(
-							__fs( 'x-updated', $this->_slug ),
-							'<b>' . str_replace( '_', ' ', $p ) . '</b>' ) );
-
-						return;
-					}
-				}
-			}
-		}
-
-		/**
-		 * Account page resources load.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 */
-		function _account_page_load() {
-			$this->_logger->entrance();
-
-			$this->_logger->info( var_export( $_REQUEST, true ) );
-
-			fs_enqueue_local_style( 'fs_account', '/admin/account.css' );
-
-			if ( $this->has_addons() ) {
-				wp_enqueue_script( 'plugin-install' );
-				add_thickbox();
-
-				function fs_addons_body_class( $classes ) {
-					$classes .= ' plugins-php';
-
-					return $classes;
-				}
-
-				add_filter( 'admin_body_class', 'fs_addons_body_class' );
-			}
-
-			if ( $this->has_paid_plan() &&
-			     ! $this->has_any_license() &&
-			     ! $this->is_sync_executed()
-			) {
-				/**
-				 * If no licenses found and no sync job was executed during the last 24 hours,
-				 * just execute the sync job right away (blocking execution).
-				 *
-				 * @since 1.1.7.3
-				 */
-				$this->run_manual_sync();
-			}
-
-			$this->_handle_account_edits();
-
-			$this->do_action( 'account_page_load_before_departure' );
-		}
-
-		/**
-		 * Render account page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 */
-		function _account_page_render() {
-			$this->_logger->entrance();
-
-			$vars = array( 'slug' => $this->_slug );
-			fs_require_once_template( 'account.php', $vars );
-		}
-
-		/**
-		 * Render account connect page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 */
-		function _connect_page_render() {
-			$this->_logger->entrance();
-
-			$vars = array( 'slug' => $this->_slug );
-			fs_require_once_template( 'connect.php', $vars );
-		}
-
-		/**
-		 * Load required resources before add-ons page render.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 */
-		function _addons_page_load() {
-			$this->_logger->entrance();
-
-			fs_enqueue_local_style( 'fs_addons', '/admin/add-ons.css' );
-
-			wp_enqueue_script( 'plugin-install' );
-			add_thickbox();
-
-			function fs_addons_body_class( $classes ) {
-				$classes .= ' plugins-php';
-
-				return $classes;
-			}
-
-			add_filter( 'admin_body_class', 'fs_addons_body_class' );
-
-			if ( ! $this->is_registered() && $this->is_org_repo_compliant() ) {
-				$this->_admin_notices->add(
-					sprintf( __fs( 'addons-info-external-message', $this->_slug ), '<b>' . $this->get_plugin_name() . '</b>' ),
-					__fs( 'heads-up', $this->_slug ),
-					'update-nag'
-				);
-			}
-		}
-
-		/**
-		 * Render add-ons page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 */
-		function _addons_page_render() {
-			$this->_logger->entrance();
-
-			$vars = array( 'slug' => $this->_slug );
-			fs_require_once_template( 'add-ons.php', $vars );
-		}
-
-		/* Pricing & Upgrade
-		------------------------------------------------------------------------------------------------------------------*/
-		/**
-		 * Render pricing page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 */
-		function _pricing_page_render() {
-			$this->_logger->entrance();
-
-			$vars = array( 'slug' => $this->_slug );
-
-			if ( 'true' === fs_request_get( 'checkout', false ) ) {
-				fs_require_once_template( 'checkout.php', $vars );
-			} else {
-				fs_require_once_template( 'pricing.php', $vars );
-			}
-		}
-
-		#region Contact Us ------------------------------------------------------------------
-
-		/**
-		 * Render contact-us page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 */
-		function _contact_page_render() {
-			$this->_logger->entrance();
-
-			$vars = array( 'slug' => $this->_slug );
-			fs_require_once_template( 'contact.php', $vars );
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		/**
-		 * Hide all admin notices to prevent distractions.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @uses   remove_all_actions()
-		 */
-		private static function _hide_admin_notices() {
-			remove_all_actions( 'admin_notices' );
-			remove_all_actions( 'network_admin_notices' );
-			remove_all_actions( 'all_admin_notices' );
-			remove_all_actions( 'user_admin_notices' );
-		}
-
-		static function _clean_admin_content_section_hook() {
-			self::_hide_admin_notices();
-
-			// Hide footer.
-			echo '<style>#wpfooter { display: none !important; }</style>';
-		}
-
-		/**
-		 * Attach to admin_head hook to hide all admin notices.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 */
-		static function _clean_admin_content_section() {
-			add_action( 'admin_head', 'Freemius::_clean_admin_content_section_hook' );
-		}
-
-		/* CSS & JavaScript
-		------------------------------------------------------------------------------------------------------------------*/
-		/*		function _enqueue_script($handle, $src) {
-					$url = plugins_url( substr( WP_FS__DIR_JS, strlen( $this->_plugin_dir_path ) ) . '/assets/js/' . $src );
-
-					$this->_logger->entrance( 'script = ' . $url );
-
-					wp_enqueue_script( $handle, $url );
-				}*/
-
-		/* SDK
-		------------------------------------------------------------------------------------------------------------------*/
-		private $_user_api;
-
-		/**
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @param bool $flush
-		 *
-		 * @return FS_Api
-		 */
-		function get_api_user_scope( $flush = false ) {
-			if ( ! isset( $this->_user_api ) || $flush ) {
-				$this->_user_api = FS_Api::instance(
-					$this->_slug,
-					'user',
-					$this->_user->id,
-					$this->_user->public_key,
-					! $this->is_live(),
-					$this->_user->secret_key
-				);
-			}
-
-			return $this->_user_api;
-		}
-
-		private $_site_api;
-
-		/**
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @param bool $flush
-		 *
-		 * @return FS_Api
-		 */
-		function get_api_site_scope( $flush = false ) {
-			if ( ! isset( $this->_site_api ) || $flush ) {
-				$this->_site_api = FS_Api::instance(
-					$this->_slug,
-					'install',
-					$this->_site->id,
-					$this->_site->public_key,
-					! $this->is_live(),
-					$this->_site->secret_key
-				);
-			}
-
-			return $this->_site_api;
-		}
-
-		private $_plugin_api;
-
-		/**
-		 * Get plugin public API scope.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return FS_Api
-		 */
-		function get_api_plugin_scope() {
-			if ( ! isset( $this->_plugin_api ) ) {
-				$this->_plugin_api = FS_Api::instance(
-					$this->_slug,
-					'plugin',
-					$this->_plugin->id,
-					$this->_plugin->public_key,
-					! $this->is_live()
-				);
-			}
-
-			return $this->_plugin_api;
-		}
-
-		/**
-		 * Get site API scope object (fallback to public plugin scope when not registered).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return FS_Api
-		 */
-		function get_api_site_or_plugin_scope() {
-			return $this->is_registered() ?
-				$this->get_api_site_scope() :
-				$this->get_api_plugin_scope();
-		}
-
-		/**
-		 * Show trial promotional notice (if any trial exist).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param $plans
-		 */
-		function _check_for_trial_plans( $plans ) {
-			$this->_storage->has_trial_plan = FS_Plan_Manager::instance()->has_trial_plan( $plans );
-		}
-
-		/**
-		 * Show trial promotional notice (if any trial exist).
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		function _add_trial_notice() {
-			// Check if trial already utilized.
-			if ( $this->_site->is_trial_utilized() ) {
-				return;
-			}
-
-			// Check if already paying.
-			if ( $this->is_paying() ) {
-				return;
-			}
-
-			// Check if trial message is already shown.
-			if ( $this->_admin_notices->has_sticky( 'trial_promotion' ) ) {
-				return;
-			}
-
-			$trial_plans       = FS_Plan_Manager::instance()->get_trial_plans( $this->_plans );
-			$trial_plans_count = count( $trial_plans );
-
-			// Check if any of the plans contains trial.
-			if ( 0 === $trial_plans_count ) {
-				return;
-			}
-
-			/**
-			 * @var FS_Plugin_Plan $paid_plan
-			 */
-			$paid_plan            = $trial_plans[0];
-			$require_subscription = $paid_plan->is_require_subscription;
-			$upgrade_url          = $this->get_trial_url();
-			$cc_string            = $require_subscription ?
-				sprintf( __fs( 'no-commitment-for-x-days', $this->_slug ), $paid_plan->trial_period ) :
-				__fs( 'no-cc-required', $this->_slug ) . '!';
-
-
-			$total_paid_plans = count( $this->_plans ) - ( FS_Plan_Manager::instance()->has_free_plan( $this->_plans ) ? 1 : 0 );
-
-			if ( $total_paid_plans === $trial_plans_count ) {
-				// All paid plans have trials.
-				$message = sprintf(
-					__fs( 'hey', $this->_slug ) . '! ' . __fs( 'trial-x-promotion-message', $this->_slug ),
-					sprintf( '<b>%s</b>', $this->get_plugin_name() ),
-					strtolower( __fs( 'awesome', $this->_slug ) ),
-					$paid_plan->trial_period
-				);
-			} else {
-				$plans_string = '';
-				for ( $i = 0; $i < $trial_plans_count; $i ++ ) {
-					$plans_string .= sprintf( '<a href="%s">%s</a>', $upgrade_url, $trial_plans[ $i ]->title );
-
-					if ( $i < $trial_plans_count - 2 ) {
-						$plans_string .= ', ';
-					} else if ( $i == $trial_plans_count - 2 ) {
-						$plans_string .= ' and ';
-					}
-				}
-
-				// Not all paid plans have trials.
-				$message = sprintf(
-					__fs( 'hey', $this->_slug ) . '! ' . __fs( 'trial-x-promotion-message', $this->_slug ),
-					sprintf( '<b>%s</b>', $this->get_plugin_name() ),
-					$plans_string,
-					$paid_plan->trial_period
-				);
-			}
-
-			$message .= ' ' . $cc_string;
-
-			// Add start trial button.
-			$message .= ' ' . sprintf(
-					'<a style="margin-left: 10px; vertical-align: super;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
-					$upgrade_url,
-					__fs( 'start-free-trial', $this->_slug )
-				);
-
-			$this->_admin_notices->add_sticky(
-				$this->apply_filters( 'trial_promotion_message', $message ),
-				'trial_promotion',
-				'',
-				'promotion'
-			);
-
-			$this->_storage->trial_promotion_shown = WP_FS__SCRIPT_START_TIME;
-		}
-
-		/* Action Links
-		------------------------------------------------------------------------------------------------------------------*/
-		private $_action_links_hooked = false;
-		private $_action_links = array();
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 *
-		 * @return bool
-		 */
-		private function is_plugin_action_links_hooked() {
-			$this->_logger->entrance( json_encode( $this->_action_links_hooked ) );
-
-			return $this->_action_links_hooked;
-		}
-
-		/**
-		 * Hook to plugin action links filter.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 */
-		private function hook_plugin_action_links() {
-			$this->_logger->entrance();
-
-			$this->_action_links_hooked = true;
-
-			$this->_logger->log( 'Adding action links hooks.' );
-
-			// Add action link to settings page.
-			add_filter( 'plugin_action_links_' . $this->_plugin_basename, array(
-				&$this,
-				'_modify_plugin_action_links_hook'
-			), WP_FS__DEFAULT_PRIORITY, 2 );
-			add_filter( 'network_admin_plugin_action_links_' . $this->_plugin_basename, array(
-				&$this,
-				'_modify_plugin_action_links_hook'
-			), WP_FS__DEFAULT_PRIORITY, 2 );
-		}
-
-		/**
-		 * Add plugin action link.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 *
-		 * @param      $label
-		 * @param      $url
-		 * @param bool $external
-		 * @param int  $priority
-		 * @param bool $key
-		 */
-		function add_plugin_action_link( $label, $url, $external = false, $priority = WP_FS__DEFAULT_PRIORITY, $key = false ) {
-			$this->_logger->entrance();
-
-			if ( ! isset( $this->_action_links[ $priority ] ) ) {
-				$this->_action_links[ $priority ] = array();
-			}
-
-			if ( false === $key ) {
-				$key = preg_replace( "/[^A-Za-z0-9 ]/", '', strtolower( $label ) );
-			}
-
-			$this->_action_links[ $priority ][] = array(
-				'label'    => $label,
-				'href'     => $url,
-				'key'      => $key,
-				'external' => $external
-			);
-		}
-
-		/**
-		 * Adds Upgrade and Add-Ons links to the main Plugins page link actions collection.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 */
-		function _add_upgrade_action_link() {
-			$this->_logger->entrance();
-
-			if ( $this->is_registered() ) {
-				if ( ! $this->is_paying() && $this->has_paid_plan() ) {
-					$this->add_plugin_action_link(
-						__fs( 'upgrade', $this->_slug ),
-						$this->get_upgrade_url(),
-						false,
-						7,
-						'upgrade'
-					);
-				}
-
-				if ( $this->has_addons() ) {
-					$this->add_plugin_action_link(
-						__fs( 'add-ons', $this->_slug ),
-						$this->_get_admin_page_url( 'addons' ),
-						false,
-						9,
-						'addons'
-					);
-				}
-			}
-		}
-
-		/**
-		 * Get the URL of the page that should be loaded right after the plugin activation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.4
-		 *
-		 * @return string
-		 */
-		function get_after_plugin_activation_redirect_url() {
-			$url       = false;
-			$plugin_fs = false;
-
-			if ( ! $this->is_addon() ) {
-				$first_time_path = $this->_menu->get_first_time_path();
-				$plugin_fs       = $this;
-				$url             = $plugin_fs->is_activation_mode() ?
-					$plugin_fs->get_activation_url() :
-					( empty( $first_time_path ) ?
-						$this->_get_admin_page_url() :
-						$first_time_path );
-			} else {
-				if ( $this->is_parent_plugin_installed() ) {
-					$plugin_fs = self::get_parent_instance();
-				}
-
-				if ( is_object( $plugin_fs ) ) {
-					if ( ! $plugin_fs->is_registered() ) {
-						// Forward to parent plugin connect when parent not registered.
-						$url = $plugin_fs->get_activation_url();
-					} else {
-						// Forward to account page.
-						$url = $plugin_fs->_get_admin_page_url( 'account' );
-					}
-				}
-			}
-
-			return $url;
-		}
-
-		/**
-		 * Forward page to activation page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 */
-		function _redirect_on_activation_hook() {
-			$url = $this->get_after_plugin_activation_redirect_url();
-
-			if ( is_string( $url ) ) {
-				fs_redirect( $url );
-				exit();
-			}
-		}
-
-		/**
-		 * Modify plugin's page action links collection.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.0
-		 *
-		 * @param array $links
-		 * @param       $file
-		 *
-		 * @return array
-		 */
-		function _modify_plugin_action_links_hook( $links, $file ) {
-			$this->_logger->entrance();
-
-			$passed_deactivate = false;
-			$deactivate_link   = '';
-			$before_deactivate = array();
-			$after_deactivate  = array();
-			foreach ( $links as $key => $link ) {
-				if ( 'deactivate' === $key ) {
-					$deactivate_link   = $link;
-					$passed_deactivate = true;
-					continue;
-				}
-
-				if ( ! $passed_deactivate ) {
-					$before_deactivate[ $key ] = $link;
-				} else {
-					$after_deactivate[ $key ] = $link;
-				}
-			}
-
-			ksort( $this->_action_links );
-
-			foreach ( $this->_action_links as $new_links ) {
-				foreach ( $new_links as $link ) {
-					$before_deactivate[ $link['key'] ] = '<a href="' . $link['href'] . '"' . ( $link['external'] ? ' target="_blank"' : '' ) . '>' . $link['label'] . '</a>';
-				}
-			}
-
-			if ( ! empty( $deactivate_link ) ) {
-				if ( ! $this->is_paying_or_trial() || $this->is_premium() ) {
-					/*
-					 * This HTML element is used to identify the correct plugin when attaching an event to its Deactivate link.
-					 *
-					 * If user is paying or in trial and have the free version installed,
-					 * assume that the deactivation is for the upgrade process, so this is not needed.
-					 */
-					$deactivate_link .= '<i class="fs-slug" data-slug="' . $this->_slug . '"></i>';
-				}
-
-				// Append deactivation link.
-				$before_deactivate['deactivate'] = $deactivate_link;
-			}
-
-			return array_merge( $before_deactivate, $after_deactivate );
-		}
-
-		/**
-		 * Adds admin message.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param string $message
-		 * @param string $title
-		 * @param string $type
-		 */
-		function add_admin_message( $message, $title = '', $type = 'success' ) {
-			$this->_admin_notices->add( $message, $title, $type );
-		}
-
-		/**
-		 * Adds sticky admin message.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.0
-		 *
-		 * @param string $message
-		 * @param string $id
-		 * @param string $title
-		 * @param string $type
-		 */
-		function add_sticky_admin_message( $message, $id, $title = '', $type = 'success' ) {
-			$this->_admin_notices->add_sticky( $message, $id, $title, $type );
-		}
-
-		/* Plugin Auto-Updates (@since 1.0.4)
-		------------------------------------------------------------------------------------------------------------------*/
-		/**
-		 * @var string[]
-		 */
-		private static $_auto_updated_plugins;
-
-		/**
-		 * @todo   TEST IF IT WORKS!!!
-		 *
-		 * Include plugins for automatic updates based on stored settings.
-		 *
-		 * @see    http://wordpress.stackexchange.com/questions/131394/how-do-i-exclude-plugins-from-getting-automatically-updated/131404#131404
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool   $update Whether to update (not used for plugins)
-		 * @param object $item   The plugin's info
-		 *
-		 * @return bool
-		 */
-		static function _include_plugins_in_auto_update( $update, $item ) {
-			// Before version 3.8.2 the $item was the file name of the plugin,
-			// while in 3.8.2 statistics were added (https://core.trac.wordpress.org/changeset/27905).
-			$by_slug = ( (int) str_replace( '.', '', get_bloginfo( 'version' ) ) >= 382 );
-
-			if ( ! isset( self::$_auto_updated_plugins ) ) {
-				$plugins = self::$_accounts->get_option( 'plugins', array() );
-
-				$identifiers = array();
-				foreach ( $plugins as $p ) {
-					/**
-					 * @var FS_Plugin $p
-					 */
-					if ( isset( $p->auto_update ) && $p->auto_update ) {
-						$identifiers[] = ( $by_slug ? $p->slug : plugin_basename( $p->file ) );
-					}
-				}
-
-				self::$_auto_updated_plugins = $identifiers;
-			}
-
-			if ( in_array( $by_slug ? $item->slug : $item, self::$_auto_updated_plugins ) ) {
-				return true;
-			}
-
-			// Pass update decision to next filters
-			return $update;
-		}
-
-		#region Versioning ------------------------------------------------------------------
-
-		/**
-		 * Check if Freemius in SDK upgrade mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_sdk_upgrade_mode() {
-			return isset( $this->_storage->sdk_upgrade_mode ) ?
-				$this->_storage->sdk_upgrade_mode :
-				false;
-		}
-
-		/**
-		 * Turn SDK upgrade mode off.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function set_sdk_upgrade_complete() {
-			$this->_storage->sdk_upgrade_mode = false;
-		}
-
-		/**
-		 * Check if plugin upgrade mode.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_plugin_upgrade_mode() {
-			return isset( $this->_storage->plugin_upgrade_mode ) ?
-				$this->_storage->plugin_upgrade_mode :
-				false;
-		}
-
-		/**
-		 * Turn plugin upgrade mode off.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function set_plugin_upgrade_complete() {
-			$this->_storage->plugin_upgrade_mode = false;
-		}
-
-		#endregion ------------------------------------------------------------------
-
-		#region Permissions ------------------------------------------------------------------
-
-		/**
-		 * Check if specific permission requested.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $permission
-		 *
-		 * @return bool
-		 */
-		function is_permission_requested( $permission ) {
-			return isset( $this->_permissions[ $permission ] ) && ( true === $this->_permissions[ $permission ] );
-		}
-
-		#endregion Permissions ------------------------------------------------------------------
-
-		#region Marketing ------------------------------------------------------------------
-
-		/**
-		 * Check if current user purchased any other plugins before.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function has_purchased_before() {
-			// TODO: Implement has_purchased_before() method.
-		}
-
-		/**
-		 * Check if current user classified as an agency.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_agency() {
-			// TODO: Implement is_agency() method.
-		}
-
-		/**
-		 * Check if current user classified as a developer.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_developer() {
-			// TODO: Implement is_developer() method.
-		}
-
-		/**
-		 * Check if current user classified as a business.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_business() {
-			// TODO: Implement is_business() method.
-		}
-
-		#endregion ------------------------------------------------------------------
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	// "final class"
+	class Freemius extends Freemius_Abstract {
+		/**
+		 * SDK Version
+		 *
+		 * @var string
+		 */
+		public $version = WP_FS__SDK_VERSION;
+
+		#region Plugin Info
+
+		/**
+		 * @since 1.0.1
+		 *
+		 * @var string
+		 */
+		private $_slug;
+
+		/**
+		 * @since 1.0.0
+		 *
+		 * @var string
+		 */
+		private $_plugin_basename;
+		/**
+		 * @since 1.0.0
+		 *
+		 * @var string
+		 */
+		private $_free_plugin_basename;
+		/**
+		 * @since 1.0.0
+		 *
+		 * @var string
+		 */
+		private $_plugin_dir_path;
+		/**
+		 * @since 1.0.0
+		 *
+		 * @var string
+		 */
+		private $_plugin_dir_name;
+		/**
+		 * @since 1.0.0
+		 *
+		 * @var string
+		 */
+		private $_plugin_main_file_path;
+		/**
+		 * @var string[]
+		 */
+		private $_plugin_data;
+		/**
+		 * @since 1.0.9
+		 *
+		 * @var string
+		 */
+		private $_plugin_name;
+
+		#endregion Plugin Info
+
+		/**
+		 * @since 1.0.9
+		 *
+		 * @var bool If false, don't turn Freemius on.
+		 */
+		private $_is_on;
+
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var bool If false, don't turn Freemius on.
+		 */
+		private $_is_anonymous;
+
+		/**
+		 * @since 1.0.9
+		 * @var bool If false, issues with connectivity to Freemius API.
+		 */
+		private $_has_api_connection;
+
+		/**
+		 * @since 1.0.9
+		 * @var bool Hints the SDK if plugin can support anonymous mode (if skip connect is visible).
+		 */
+		private $_enable_anonymous;
+
+		/**
+		 * @since 1.1.7.5
+		 * @var bool Hints the SDK if plugin should run in anonymous mode (only adds feedback form).
+		 */
+		private $_anonymous_mode;
+
+		/**
+		 * @since 1.1.9
+		 * @var bool Hints the SDK if plugin have any free plans.
+		 */
+		private $_is_premium_only;
+
+		/**
+		 * @since 1.0.8
+		 * @var bool Hints the SDK if the plugin has any paid plans.
+		 */
+		private $_has_paid_plans;
+
+		/**
+		 * @since 1.0.7
+		 * @var bool Hints the SDK if the plugin is WordPress.org compliant.
+		 */
+		private $_is_org_compliant;
+
+		/**
+		 * @since 1.0.7
+		 * @var bool Hints the SDK if the plugin is has add-ons.
+		 */
+		private $_has_addons;
+
+		/**
+		 * @since 1.1.6
+		 * @var string[]bool.
+		 */
+		private $_permissions;
+
+		/**
+		 * @var FS_Key_Value_Storage
+		 */
+		private $_storage;
+
+		/**
+		 * @since 1.0.0
+		 *
+		 * @var FS_Logger
+		 */
+		private $_logger;
+		/**
+		 * @since 1.0.4
+		 *
+		 * @var FS_Plugin
+		 */
+		private $_plugin = false;
+		/**
+		 * @since 1.0.4
+		 *
+		 * @var FS_Plugin|false
+		 */
+		private $_parent_plugin = false;
+		/**
+		 * @since 1.1.1
+		 *
+		 * @var Freemius
+		 */
+		private $_parent = false;
+		/**
+		 * @since 1.0.1
+		 *
+		 * @var FS_User
+		 */
+		private $_user = false;
+		/**
+		 * @since 1.0.1
+		 *
+		 * @var FS_Site
+		 */
+		private $_site = false;
+		/**
+		 * @since 1.0.1
+		 *
+		 * @var FS_Plugin_License
+		 */
+		private $_license;
+		/**
+		 * @since 1.0.2
+		 *
+		 * @var FS_Plugin_Plan[]
+		 */
+		private $_plans = false;
+		/**
+		 * @var FS_Plugin_License[]
+		 * @since 1.0.5
+		 */
+		private $_licenses = false;
+
+		/**
+		 * @since 1.0.1
+		 *
+		 * @var FS_Admin_Menu_Manager
+		 */
+		private $_menu;
+
+		/**
+		 * @var FS_Admin_Notice_Manager
+		 */
+		private $_admin_notices;
+
+		/**
+		 * @since 1.1.6
+		 *
+		 * @var FS_Admin_Notice_Manager
+		 */
+		private static $_global_admin_notices;
+
+		/**
+		 * @var FS_Logger
+		 * @since 1.0.0
+		 */
+		private static $_static_logger;
+
+		/**
+		 * @var FS_Option_Manager
+		 * @since 1.0.2
+		 */
+		private static $_accounts;
+
+		/**
+		 * @var Freemius[]
+		 */
+		private static $_instances = array();
+
+		// Reason IDs
+		const REASON_NO_LONGER_NEEDED = 1;
+		const REASON_FOUND_A_BETTER_PLUGIN = 2;
+		const REASON_NEEDED_FOR_A_SHORT_PERIOD = 3;
+		const REASON_BROKE_MY_SITE = 4;
+		const REASON_SUDDENLY_STOPPED_WORKING = 5;
+		const REASON_CANT_PAY_ANYMORE = 6;
+		const REASON_OTHER = 7;
+		const REASON_DIDNT_WORK = 8;
+		const REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION = 9;
+		const REASON_COULDNT_MAKE_IT_WORK = 10;
+		const REASON_GREAT_BUT_NEED_SPECIFIC_FEATURE = 11;
+		const REASON_NOT_WORKING = 12;
+		const REASON_NOT_WHAT_I_WAS_LOOKING_FOR = 13;
+		const REASON_DIDNT_WORK_AS_EXPECTED = 14;
+		const REASON_TEMPORARY_DEACTIVATION = 15;
+
+		/* Ctor
+------------------------------------------------------------------------------------------------------------------*/
+
+		/**
+		 * Main singleton instance.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @param string $slug
+		 * @param bool   $is_init Since 1.2.1 Is initiation sequence.
+		 */
+		private function __construct( $slug, $is_init = false ) {
+			$this->_slug = $slug;
+
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			$this->_storage = FS_Key_Value_Storage::instance( 'plugin_data', $this->_slug );
+
+			$this->_plugin_main_file_path = $this->_find_caller_plugin_file( $is_init );
+			$this->_plugin_dir_path       = plugin_dir_path( $this->_plugin_main_file_path );
+			$this->_plugin_basename       = plugin_basename( $this->_plugin_main_file_path );
+			$this->_free_plugin_basename  = str_replace( '-premium/', '/', $this->_plugin_basename );
+
+			$base_name_split        = explode( '/', $this->_plugin_basename );
+			$this->_plugin_dir_name = $base_name_split[0];
+
+			if ( $this->_logger->is_on() ) {
+				$this->_logger->info( 'plugin_main_file_path = ' . $this->_plugin_main_file_path );
+				$this->_logger->info( 'plugin_dir_path = ' . $this->_plugin_dir_path );
+				$this->_logger->info( 'plugin_basename = ' . $this->_plugin_basename );
+				$this->_logger->info( 'free_plugin_basename = ' . $this->_free_plugin_basename );
+				$this->_logger->info( 'plugin_dir_name = ' . $this->_plugin_dir_name );
+			}
+
+			// Remember link between file to slug.
+			$this->store_file_slug_map();
+
+			// Store plugin's initial install timestamp.
+			if ( ! isset( $this->_storage->install_timestamp ) ) {
+				$this->_storage->install_timestamp = WP_FS__SCRIPT_START_TIME;
+			}
+
+			$this->_plugin = FS_Plugin_Manager::instance( $this->_slug )->get();
+
+			$this->_admin_notices = FS_Admin_Notice_Manager::instance(
+				$slug,
+				is_object( $this->_plugin ) ? $this->_plugin->title : ''
+			);
+
+			if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
+			     'true' === fs_request_is_action( 'restart_freemius' )
+			) {
+				FS_Api::clear_cache();
+			}
+
+			$this->_register_hooks();
+
+			$this->_load_account();
+
+			$this->_version_updates_handler();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		private function _version_updates_handler() {
+			if ( ! isset( $this->_storage->sdk_version ) || $this->_storage->sdk_version != $this->version ) {
+				// Freemius version upgrade mode.
+				$this->_storage->sdk_last_version = $this->_storage->sdk_version;
+				$this->_storage->sdk_version      = $this->version;
+
+				if ( empty( $this->_storage->sdk_last_version ) ||
+				     version_compare( $this->_storage->sdk_last_version, $this->version, '<' )
+				) {
+					$this->_storage->sdk_upgrade_mode   = true;
+					$this->_storage->sdk_downgrade_mode = false;
+				} else {
+					$this->_storage->sdk_downgrade_mode = true;
+					$this->_storage->sdk_upgrade_mode   = false;
+
+				}
+
+				$this->do_action( 'sdk_version_update', $this->_storage->sdk_last_version, $this->version );
+			}
+
+			$plugin_version = $this->get_plugin_version();
+			if ( ! isset( $this->_storage->plugin_version ) || $this->_storage->plugin_version != $plugin_version ) {
+				// Plugin version upgrade mode.
+				$this->_storage->plugin_last_version = $this->_storage->plugin_version;
+				$this->_storage->plugin_version      = $plugin_version;
+
+				if ( empty( $this->_storage->plugin_last_version ) ||
+				     version_compare( $this->_storage->plugin_last_version, $plugin_version, '<' )
+				) {
+					$this->_storage->plugin_upgrade_mode   = true;
+					$this->_storage->plugin_downgrade_mode = false;
+				} else {
+					$this->_storage->plugin_downgrade_mode = true;
+					$this->_storage->plugin_upgrade_mode   = false;
+				}
+
+				if ( ! empty( $this->_storage->plugin_last_version ) ) {
+					// Different version of the plugin was installed before, therefore it's an update.
+					$this->_storage->is_plugin_new_install = false;
+				}
+
+				$this->do_action( 'plugin_version_update', $this->_storage->plugin_last_version, $plugin_version );
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.5
+		 *
+		 * @param string $sdk_prev_version
+		 * @param string $sdk_version
+		 */
+		function _data_migration( $sdk_prev_version, $sdk_version ) {
+			/**
+			 * @since 1.1.7.3 Fixed unwanted connectivity test cleanup.
+			 */
+			if ( empty( $sdk_prev_version ) ) {
+				return;
+			}
+
+			if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
+			     version_compare( $sdk_version, '1.1.5', '>=' )
+			) {
+				// On version 1.1.5 merged connectivity and is_on data.
+				if ( isset( $this->_storage->connectivity_test ) ) {
+					if ( ! isset( $this->_storage->is_on ) ) {
+						unset( $this->_storage->connectivity_test );
+					} else {
+						$connectivity_data              = $this->_storage->connectivity_test;
+						$connectivity_data['is_active'] = $this->_storage->is_on['is_active'];
+						$connectivity_data['timestamp'] = $this->_storage->is_on['timestamp'];
+
+						// Override.
+						$this->_storage->connectivity_test = $connectivity_data;
+
+						// Remove previous structure.
+						unset( $this->_storage->is_on );
+					}
+
+				}
+			}
+		}
+
+		/**
+		 * This action is connected to the 'plugins_loaded' hook and helps to determine
+		 * if this is a new plugin installation or a plugin update.
+		 *
+		 * There are 3 different use-cases:
+		 *    1) New plugin installation right with Freemius:
+		 *       1.1 _activate_plugin_event_hook() will be executed first
+		 *       1.2 Since $this->_storage->is_plugin_new_install is not set,
+		 *           and $this->_storage->plugin_last_version is not set,
+		 *           $this->_storage->is_plugin_new_install will be set to TRUE.
+		 *       1.3 When _plugins_loaded() will be executed, $this->_storage->is_plugin_new_install will
+		 *           be already set to TRUE.
+		 *
+		 *    2) Plugin update, didn't have Freemius before, and now have the SDK:
+		 *       2.1 _activate_plugin_event_hook() will not be executed, because
+		 *           the activation hook do NOT fires on updates since WP 3.1.
+		 *       2.2 When _plugins_loaded() will be executed, $this->_storage->is_plugin_new_install will
+		 *           be empty, therefore, it will be set to FALSE.
+		 *
+		 *    3) Plugin update, had Freemius in prev version as well:
+		 *       3.1 _version_updates_handler() will be executed 1st, since FS was installed
+		 *           before, $this->_storage->plugin_last_version will NOT be empty,
+		 *           therefore, $this->_storage->is_plugin_new_install will be set to FALSE.
+		 *       3.2 When _plugins_loaded() will be executed, $this->_storage->is_plugin_new_install is
+		 *           already set, therefore, it will not be modified.
+		 *
+		 *    Use-case #3 is backward compatible, #3.1 will be executed since 1.0.9.
+		 *
+		 * NOTE:
+		 *    The only fallback of this mechanism is if an admin updates a plugin based on use-case #2,
+		 *    and then, the next immediate PageView is the plugin's main settings page, it will not
+		 *    show the opt-in right away. The reason it will happen is because Freemius execution
+		 *    will be turned off till the plugin is fully loaded at least once
+		 *    (till $this->_storage->was_plugin_loaded is TRUE).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9
+		 *
+		 */
+		function _plugins_loaded() {
+			// Update flag that plugin was loaded with Freemius at least once.
+			$this->_storage->was_plugin_loaded = true;
+
+			if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
+				$this->_storage->is_plugin_new_install = false;
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		private function _register_hooks() {
+			if ( is_admin() ) {
+				// Hook to plugin activation
+				register_activation_hook( $this->_plugin_main_file_path, array(
+					&$this,
+					'_activate_plugin_event_hook'
+				) );
+
+				/**
+				 * Part of the mechanism to identify new plugin install vs. plugin update.
+				 *
+				 * @author Vova Feldman (@svovaf)
+				 * @since  1.1.9
+				 */
+				if ( empty( $this->_storage->was_plugin_loaded ) ) {
+					if ( $this->is_activation_mode( false ) ) {
+						add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
+					} else {
+						// If was activated before, then it was already loaded before.
+						$this->_plugins_loaded();
+					}
+				}
+
+				if ( ! $this->is_ajax() ) {
+					if ( ! $this->is_addon() ) {
+						add_action( 'init', array( &$this, '_add_default_submenu_items' ), WP_FS__LOWEST_PRIORITY );
+						add_action( 'admin_menu', array( &$this, '_prepare_admin_menu' ), WP_FS__LOWEST_PRIORITY );
+					}
+				}
+			}
+
+			register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
+
+			add_action( 'init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
+
+			$this->add_action( 'after_plans_sync', array( &$this, '_check_for_trial_plans' ) );
+
+			$this->add_action( 'sdk_version_update', array( &$this, '_data_migration' ), WP_FS__DEFAULT_PRIORITY, 2 );
+		}
+
+		/**
+		 * Keeping the uninstall hook registered for free or premium plugin version may result to a fatal error that
+		 * could happen when a user tries to uninstall either version while one of them is still active. Uninstalling a
+		 * plugin will trigger inclusion of the free or premium version and if one of them is active during the
+		 * uninstallation, a fatal error may occur in case the plugin's class or functions are already defined.
+		 *
+		 * @author Leo Fajardo (leorw)
+		 *
+		 * @since  1.2.0
+		 */
+		private function unregister_uninstall_hook() {
+			$uninstallable_plugins = (array) get_option( 'uninstall_plugins' );
+			unset( $uninstallable_plugins[ $this->_free_plugin_basename ] );
+			unset( $uninstallable_plugins[ $this->premium_plugin_basename() ] );
+
+			update_option( 'uninstall_plugins', $uninstallable_plugins );
+		}
+
+		/**
+		 * @since 1.2.0 Invalidate module's main file cache, otherwise, FS_Plugin_Updater will not fetch updates.
+		 */
+		private function clear_module_main_file_cache() {
+			if ( ! isset( $this->_storage->plugin_main_file ) ||
+			     empty( $this->_storage->plugin_main_file->path )
+			) {
+				return;
+			}
+
+			// Store cached path (2nd layer cache).
+			$this->_storage->plugin_main_file->prev_path = $this->_storage->plugin_main_file->path;
+
+			// Clear cached path.
+			unset( $this->_storage->plugin_main_file->path );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		private function _register_account_hooks() {
+			if ( is_admin() ) {
+				if ( ! $this->is_ajax() ) {
+					if ( $this->apply_filters( 'show_trial', true ) && $this->has_trial_plan() ) {
+						$last_time_trial_promotion_shown = $this->_storage->get( 'trial_promotion_shown', false );
+						if ( ! $this->_site->is_trial_utilized() &&
+						     (
+							     // Show promotion if never shown it yet and 24 hours after initial activation.
+							     ( false === $last_time_trial_promotion_shown && $this->_storage->activation_timestamp < ( time() - WP_FS__TIME_24_HOURS_IN_SEC ) ) ||
+							     // Show promotion in every 30 days.
+							     ( is_numeric( $last_time_trial_promotion_shown ) && 30 * WP_FS__TIME_24_HOURS_IN_SEC < time() - $last_time_trial_promotion_shown ) )
+						) {
+							$this->add_action( 'after_init_plugin_registered', array( &$this, '_add_trial_notice' ) );
+						}
+					}
+				}
+
+				// If user is paying or in trial and have the free version installed,
+				// assume that the deactivation is for the upgrade process.
+				if ( ! $this->is_paying_or_trial() || $this->is_premium() ) {
+					$this->add_ajax_action(
+						'submit_uninstall_reason',
+						array( &$this, '_submit_uninstall_reason_action' )
+					);
+
+					global $pagenow;
+					if ( 'plugins.php' === $pagenow ) {
+						add_action( 'admin_footer', array( &$this, '_add_deactivation_feedback_dialog_box' ) );
+					}
+				}
+
+				if ( ! $this->is_addon() ) {
+					if ( $this->is_registered() ) {
+						$this->add_filter( 'after_code_type_change', array( &$this, '_after_code_type_change' ) );
+					}
+				}
+			}
+		}
+
+		/**
+		 * Leverage backtrace to find caller plugin file path.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param bool $is_init Is initiation sequence.
+		 *
+		 * @return string
+		 *
+		 * @uses   fs_find_caller_plugin_file
+		 */
+		private function _find_caller_plugin_file( $is_init = false ) {
+			// Try to load the cached value of the file path.
+			if ( isset( $this->_storage->plugin_main_file ) ) {
+				if ( file_exists( $this->_storage->plugin_main_file->path ) ) {
+					return $this->_storage->plugin_main_file->path;
+				}
+			}
+
+			/**
+			 * @since 1.2.1
+			 *
+			 * `clear_module_main_file_cache()` is clearing the plugin's cached path on
+			 * deactivation. Therefore, if any plugin/theme was initiating `Freemius`
+			 * with that plugin's slug, it was overriding the empty plugin path with a wrong path.
+			 *
+			 * So, we've added a special mechanism with a 2nd layer of cache that uses `prev_path`
+			 * when the class instantiator isn't the module.
+			 */
+			if ( ! $is_init ) {
+				// Fetch prev path cache.
+				if ( isset( $this->_storage->plugin_main_file ) &&
+				     isset( $this->_storage->plugin_main_file->prev_path )
+				) {
+					if ( file_exists( $this->_storage->plugin_main_file->prev_path ) ) {
+						return $this->_storage->plugin_main_file->prev_path;
+					}
+				}
+
+				wp_die(
+					__fs( 'failed-finding-main-path', $this->_slug ),
+					__fs( 'error' ),
+					array( 'back_link' => true )
+				);
+			}
+
+			/**
+			 * @since 1.2.1
+			 *
+			 * Only the original instantiator that calls dynamic_init can modify the module's path.
+			 */
+			// Find caller module.
+			$plugin_file = fs_find_caller_plugin_file();
+
+			$this->_storage->plugin_main_file = (object) array(
+				'path' => fs_normalize_path( $plugin_file ),
+			);
+
+			return $plugin_file;
+		}
+
+
+		#region Deactivation Feedback Form ------------------------------------------------------------------
+
+		/**
+		 * Displays a confirmation and feedback dialog box when the user clicks on the "Deactivate" link on the plugins
+		 * page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.2
+		 */
+		function _add_deactivation_feedback_dialog_box() {
+			/* Check the type of user:
+			 * 1. Long-term (long-term)
+			 * 2. Non-registered and non-anonymous short-term (non-registered-and-non-anonymous-short-term).
+			 * 3. Short-term (short-term)
+			 */
+			$is_long_term_user = true;
+
+			// Check if the site is at least 2 days old.
+			$time_installed = $this->_storage->install_timestamp;
+
+			// Difference in seconds.
+			$date_diff = time() - $time_installed;
+
+			// Convert seconds to days.
+			$date_diff_days = floor( $date_diff / ( 60 * 60 * 24 ) );
+
+			if ( $date_diff_days < 2 ) {
+				$is_long_term_user = false;
+			}
+
+			$is_long_term_user = $this->apply_filters( 'is_long_term_user', $is_long_term_user );
+
+			if ( $is_long_term_user ) {
+				$user_type = 'long-term';
+			} else {
+				if ( ! $this->is_registered() && ! $this->is_anonymous() ) {
+					$user_type = 'non-registered-and-non-anonymous-short-term';
+				} else {
+					$user_type = 'short-term';
+				}
+			}
+
+			$uninstall_reasons = $this->_get_uninstall_reasons( $user_type );
+
+			// Load the HTML template for the deactivation feedback dialog box.
+			$vars = array(
+				'reasons' => $uninstall_reasons,
+				'slug'    => $this->_slug
+			);
+
+			/**
+			 * @todo Deactivation form core functions should be loaded only once! Otherwise, when there are multiple Freemius powered plugins the same code is loaded multiple times. The only thing that should be loaded differently is the various deactivation reasons object based on the state of the plugin.
+			 */
+			fs_require_template( 'forms/deactivation/form.php', $vars );
+		}
+
+		/**
+		 * @author Leo Fajardo (leorw)
+		 * @since  1.1.2
+		 *
+		 * @param string $user_type
+		 *
+		 * @return array The uninstall reasons for the specified user type.
+		 */
+		function _get_uninstall_reasons( $user_type = 'long-term' ) {
+			$internal_message_template_var = array(
+				'slug' => $this->_slug
+			);
+
+			if ( $this->is_registered() && false !== $this->get_plan() && $this->get_plan()->has_technical_support() ) {
+				$contact_support_template = fs_get_template( 'forms/deactivation/contact.php', $internal_message_template_var );
+			} else {
+				$contact_support_template = '';
+			}
+
+			$reason_found_better_plugin = array(
+				'id'                => self::REASON_FOUND_A_BETTER_PLUGIN,
+				'text'              => __fs( 'reason-found-a-better-plugin', $this->_slug ),
+				'input_type'        => 'textfield',
+				'input_placeholder' => __fs( 'placeholder-plugin-name', $this->_slug )
+			);
+
+			$reason_temporary_deactivation = array(
+				'id'                => self::REASON_TEMPORARY_DEACTIVATION,
+				'text'              => __fs( 'reason-temporary-deactivation', $this->_slug ),
+				'input_type'        => '',
+				'input_placeholder' => ''
+			);
+
+			$reason_other = array(
+				'id'                => self::REASON_OTHER,
+				'text'              => __fs( 'reason-other', $this->_slug ),
+				'input_type'        => 'textfield',
+				'input_placeholder' => ''
+			);
+
+			$long_term_user_reasons = array(
+				array(
+					'id'                => self::REASON_NO_LONGER_NEEDED,
+					'text'              => __fs( 'reason-no-longer-needed', $this->_slug ),
+					'input_type'        => '',
+					'input_placeholder' => ''
+				),
+				$reason_found_better_plugin,
+				array(
+					'id'                => self::REASON_NEEDED_FOR_A_SHORT_PERIOD,
+					'text'              => __fs( 'reason-needed-for-a-short-period', $this->_slug ),
+					'input_type'        => '',
+					'input_placeholder' => ''
+				),
+				array(
+					'id'                => self::REASON_BROKE_MY_SITE,
+					'text'              => __fs( 'reason-broke-my-site', $this->_slug ),
+					'input_type'        => '',
+					'input_placeholder' => '',
+					'internal_message'  => $contact_support_template
+				),
+				array(
+					'id'                => self::REASON_SUDDENLY_STOPPED_WORKING,
+					'text'              => __fs( 'reason-suddenly-stopped-working', $this->_slug ),
+					'input_type'        => '',
+					'input_placeholder' => '',
+					'internal_message'  => $contact_support_template
+				)
+			);
+
+			if ( $this->is_paying() ) {
+				$long_term_user_reasons[] = array(
+					'id'                => self::REASON_CANT_PAY_ANYMORE,
+					'text'              => __fs( 'reason-cant-pay-anymore', $this->_slug ),
+					'input_type'        => 'textfield',
+					'input_placeholder' => __fs( 'placeholder-comfortable-price', $this->_slug )
+				);
+			}
+
+			$reason_dont_share_info = array(
+				'id'                => self::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION,
+				'text'              => __fs( 'reason-dont-like-to-share-my-information', $this->_slug ),
+				'input_type'        => '',
+				'input_placeholder' => ''
+			);
+
+			/**
+			 * If the current user has selected the "don't share data" reason in the deactivation feedback modal, inform the
+			 * user by showing additional message that he doesn't have to share data and can just choose to skip the opt-in
+			 * (the Skip button is included in the message to show). This message will only be shown if anonymous mode is
+			 * enabled and the user's account is currently not in pending activation state (similar to the way the Skip
+			 * button in the opt-in form is shown/hidden).
+			 */
+			if ( $this->is_enable_anonymous() && ! $this->is_pending_activation() ) {
+				$reason_dont_share_info['internal_message'] = fs_get_template( 'forms/deactivation/retry-skip.php', $internal_message_template_var );
+			}
+
+			$uninstall_reasons = array(
+				'long-term'                                   => $long_term_user_reasons,
+				'non-registered-and-non-anonymous-short-term' => array(
+					array(
+						'id'                => self::REASON_DIDNT_WORK,
+						'text'              => __fs( 'reason-didnt-work', $this->_slug ),
+						'input_type'        => '',
+						'input_placeholder' => ''
+					),
+					$reason_dont_share_info,
+					$reason_found_better_plugin
+				),
+				'short-term'                                  => array(
+					array(
+						'id'                => self::REASON_COULDNT_MAKE_IT_WORK,
+						'text'              => __fs( 'reason-couldnt-make-it-work', $this->_slug ),
+						'input_type'        => '',
+						'input_placeholder' => '',
+						'internal_message'  => $contact_support_template
+					),
+					$reason_found_better_plugin,
+					array(
+						'id'                => self::REASON_GREAT_BUT_NEED_SPECIFIC_FEATURE,
+						'text'              => __fs( 'reason-great-but-need-specific-feature', $this->_slug ),
+						'input_type'        => 'textarea',
+						'input_placeholder' => __fs( 'placeholder-feature', $this->_slug )
+					),
+					array(
+						'id'                => self::REASON_NOT_WORKING,
+						'text'              => __fs( 'reason-not-working', $this->_slug ),
+						'input_type'        => 'textarea',
+						'input_placeholder' => __fs( 'placeholder-share-what-didnt-work', $this->_slug )
+					),
+					array(
+						'id'                => self::REASON_NOT_WHAT_I_WAS_LOOKING_FOR,
+						'text'              => __fs( 'reason-not-what-i-was-looking-for', $this->_slug ),
+						'input_type'        => 'textarea',
+						'input_placeholder' => __fs( 'placeholder-what-youve-been-looking-for', $this->_slug )
+					),
+					array(
+						'id'                => self::REASON_DIDNT_WORK_AS_EXPECTED,
+						'text'              => __fs( 'reason-didnt-work-as-expected', $this->_slug ),
+						'input_type'        => 'textarea',
+						'input_placeholder' => __fs( 'placeholder-what-did-you-expect', $this->_slug )
+					)
+				)
+			);
+
+			// Randomize the reasons for the current user type.
+			shuffle( $uninstall_reasons[ $user_type ] );
+
+			// Keep the following reasons as the last items in the list.
+			$uninstall_reasons[ $user_type ][] = $reason_temporary_deactivation;
+			$uninstall_reasons[ $user_type ][] = $reason_other;
+
+			$uninstall_reasons = $this->apply_filters( 'uninstall_reasons', $uninstall_reasons );
+
+			return $uninstall_reasons[ $user_type ];
+		}
+
+		/**
+		 * Called after the user has submitted his reason for deactivating the plugin.
+		 *
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.2
+		 */
+		function _submit_uninstall_reason_action() {
+			$reason_id = fs_request_get( 'reason_id' );
+
+			// Check if the given reason ID is an unsigned integer.
+			if ( ! ctype_digit( $reason_id ) ) {
+				exit;
+			}
+
+			$reason_info = trim( fs_request_get( 'reason_info', '' ) );
+			if ( ! empty( $reason_info ) ) {
+				$reason_info = substr( $reason_info, 0, 128 );
+			}
+
+			$reason = (object) array(
+				'id'           => $reason_id,
+				'info'         => $reason_info,
+				'is_anonymous' => fs_request_get_bool( 'is_anonymous' )
+			);
+
+			$this->_storage->store( 'uninstall_reason', $reason );
+
+			// Print '1' for successful operation.
+			echo 1;
+			exit;
+		}
+
+		#endregion Deactivation Feedback Form ------------------------------------------------------------------
+
+		#region Instance ------------------------------------------------------------------
+
+		/**
+		 * Main singleton instance.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @param string $slug
+		 * @param bool   $is_init Is initiation sequence.
+		 *
+		 * @return Freemius
+		 */
+		static function instance( $slug, $is_init = false ) {
+			$slug = strtolower( $slug );
+
+			if ( ! isset( self::$_instances[ $slug ] ) ) {
+				if ( 0 === count( self::$_instances ) ) {
+					self::_load_required_static();
+				}
+
+				self::$_instances[ $slug ] = new Freemius( $slug, $is_init );
+			}
+
+			return self::$_instances[ $slug ];
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param string|number $slug_or_id
+		 *
+		 * @return bool
+		 */
+		private static function has_instance( $slug_or_id ) {
+			return ! is_numeric( $slug_or_id ) ?
+				isset( self::$_instances[ strtolower( $slug_or_id ) ] ) :
+				( false !== self::get_instance_by_id( $slug_or_id ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param $id
+		 *
+		 * @return false|Freemius
+		 */
+		static function get_instance_by_id( $id ) {
+			foreach ( self::$_instances as $slug => $instance ) {
+				if ( $id == $instance->get_id() ) {
+					return $instance;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param $plugin_file
+		 *
+		 * @return false|Freemius
+		 */
+		static function get_instance_by_file( $plugin_file ) {
+			$slug = self::find_slug_by_basename( $plugin_file );
+
+			return ( false !== $slug ) ?
+				self::instance( $slug ) :
+				false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return false|Freemius
+		 */
+		function get_parent_instance() {
+			return self::get_instance_by_id( $this->_plugin->parent_plugin_id );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param $slug_or_id
+		 *
+		 * @return bool|Freemius
+		 */
+		function get_addon_instance( $slug_or_id ) {
+			return ! is_numeric( $slug_or_id ) ?
+				self::instance( strtolower( $slug_or_id ) ) :
+				self::get_instance_by_id( $slug_or_id );
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool
+		 */
+		function is_parent_plugin_installed() {
+			return self::has_instance( $this->_plugin->parent_plugin_id );
+		}
+
+		/**
+		 * Check if add-on parent plugin in activation mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		function is_parent_in_activation() {
+			$parent_fs = $this->get_parent_instance();
+			if ( ! is_object( $parent_fs ) ) {
+				return false;
+			}
+
+			return ( $parent_fs->is_activation_mode() );
+		}
+
+		/**
+		 * Is plugin in activation mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @param bool $and_on
+		 *
+		 * @return bool
+		 */
+		function is_activation_mode( $and_on = true ) {
+			return (
+				( $this->is_on() || ! $and_on ) &&
+				! $this->is_registered() &&
+				( ! $this->is_enable_anonymous() ||
+				  ( ! $this->is_anonymous() && ! $this->is_pending_activation() ) )
+			);
+		}
+
+		/**
+		 * Get collection of all active plugins.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return array[string]array
+		 */
+		private static function get_active_plugins() {
+			self::require_plugin_essentials();
+
+			$active_plugin            = array();
+			$all_plugins              = get_plugins();
+			$active_plugins_basenames = get_option( 'active_plugins' );
+
+			foreach ( $active_plugins_basenames as $plugin_basename ) {
+				$active_plugin[ $plugin_basename ] = $all_plugins[ $plugin_basename ];
+			}
+
+			return $active_plugin;
+		}
+
+		/**
+		 * Get collection of all plugins.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return array Key is the plugin file path and the value is an array of the plugin data.
+		 */
+		private static function get_all_plugins() {
+			self::require_plugin_essentials();
+
+			$all_plugins              = get_plugins();
+			$active_plugins_basenames = get_option( 'active_plugins' );
+
+			foreach ( $all_plugins as $basename => &$data ) {
+				// By default set to inactive (next foreach update the active plugins).
+				$data['is_active'] = false;
+				// Enrich with plugin slug.
+				$data['slug'] = self::get_plugin_slug( $basename );
+			}
+
+			// Flag active plugins.
+			foreach ( $active_plugins_basenames as $basename ) {
+				if ( isset( $all_plugins[ $basename ] ) ) {
+					$all_plugins[ $basename ]['is_active'] = true;
+				}
+			}
+
+			return $all_plugins;
+		}
+
+
+		/**
+		 * Cached result of get_site_transient( 'update_plugins' )
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @var object
+		 */
+		private static $_plugins_info;
+
+		/**
+		 * Helper function to get specified plugin's slug.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @param $basename
+		 *
+		 * @return string
+		 */
+		private static function get_plugin_slug( $basename ) {
+			if ( ! isset( self::$_plugins_info ) ) {
+				self::$_plugins_info = get_site_transient( 'update_plugins' );
+			}
+
+			$slug = '';
+
+			if ( is_object( self::$_plugins_info ) ) {
+				if ( isset( self::$_plugins_info->no_update ) &&
+				     isset( self::$_plugins_info->no_update[ $basename ] ) &&
+				     ! empty( self::$_plugins_info->no_update[ $basename ]->slug )
+				) {
+					$slug = self::$_plugins_info->no_update[ $basename ]->slug;
+				} else if ( isset( self::$_plugins_info->response ) &&
+				            isset( self::$_plugins_info->response[ $basename ] ) &&
+				            ! empty( self::$_plugins_info->response[ $basename ]->slug )
+				) {
+					$slug = self::$_plugins_info->response[ $basename ]->slug;
+				}
+			}
+
+			if ( empty( $slug ) ) {
+				// Try to find slug from FS data.
+				$slug = self::find_slug_by_basename( $basename );
+			}
+
+			if ( empty( $slug ) ) {
+				// Fallback to plugin's folder name.
+				$slug = dirname( $basename );
+			}
+
+			return $slug;
+		}
+
+		private static $_statics_loaded = false;
+
+		/**
+		 * Load static resources.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 */
+		private static function _load_required_static() {
+			if ( self::$_statics_loaded ) {
+				return;
+			}
+
+			self::$_static_logger = FS_Logger::get_logger( WP_FS__SLUG, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			self::$_static_logger->entrance();
+
+			self::$_accounts = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
+
+			self::$_global_admin_notices = FS_Admin_Notice_Manager::instance( 'global' );
+
+			// Configure which Freemius powered plugins should be auto updated.
+//			add_filter( 'auto_update_plugin', '_include_plugins_in_auto_update', 10, 2 );
+
+			add_action( 'admin_menu', array( 'Freemius', 'add_debug_page' ) );
+
+			add_action( "wp_ajax_fs_toggle_debug_mode", array( 'Freemius', '_toggle_debug_mode' ) );
+
+			add_action( 'plugins_loaded', array( 'Freemius', '_load_textdomain' ), 1 );
+
+			self::$_statics_loaded = true;
+		}
+
+		/**
+		 * Load framework's text domain.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 */
+		static function _load_textdomain() {
+			if ( ! is_admin() ) {
+				return;
+			}
+
+			global $fs_active_plugins;
+
+			load_plugin_textdomain(
+				'freemius',
+				false,
+				$fs_active_plugins->newest->sdk_path . '/languages/'
+			);
+
+			// @todo Load for themes.
+		}
+
+		#region Debugging ------------------------------------------------------------------
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.8
+		 */
+		static function add_debug_page() {
+			if ( ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			self::$_static_logger->entrance();
+
+			$title = sprintf( '%s [v.%s]', __fs( 'freemius-debug' ), WP_FS__SDK_VERSION );
+
+			if ( WP_FS__DEV_MODE ) {
+				// Add top-level debug menu item.
+				$hook = add_menu_page(
+					$title,
+					$title,
+					'manage_options',
+					'freemius',
+					array( 'Freemius', '_debug_page_render' )
+				);
+			} else {
+				// Add hidden debug page.
+				$hook = add_submenu_page(
+					null,
+					$title,
+					$title,
+					'manage_options',
+					'freemius',
+					array( 'Freemius', '_debug_page_render' )
+				);
+			}
+
+			add_action( "load-$hook", array( 'Freemius', '_debug_page_actions' ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		static function _toggle_debug_mode() {
+			if ( in_array( $_POST['is_on'], array( 0, 1 ) ) ) {
+				update_option( 'fs_debug_mode', $_POST['is_on'] );
+			}
+
+			exit;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.8
+		 */
+		static function _debug_page_actions() {
+			self::_clean_admin_content_section();
+
+			if ( fs_request_is_action( 'restart_freemius' ) ) {
+				check_admin_referer( 'restart_freemius' );
+
+				self::$_accounts->clear( true );
+
+
+				return;
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.8
+		 */
+		static function _debug_page_render() {
+			self::$_static_logger->entrance();
+
+			$sites          = self::get_all_sites();
+			$users          = self::get_all_users();
+			$addons         = self::get_all_addons();
+			$account_addons = self::get_all_account_addons();
+			$licenses       = self::get_all_licenses();
+
+//			$plans    = self::get_all_plans();
+//			$licenses = self::get_all_licenses();
+
+			$vars = array(
+				'sites'          => $sites,
+				'users'          => $users,
+				'addons'         => $addons,
+				'account_addons' => $account_addons,
+				'licenses'       => $licenses,
+			);
+
+			fs_enqueue_local_style( 'fs_account', '/admin/debug.css' );
+			fs_require_once_template( 'debug.php', $vars );
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		#region Connectivity Issues ------------------------------------------------------------------
+
+		/**
+		 * Check if Freemius should be turned on for the current plugin install.
+		 *
+		 * Note:
+		 *  $this->_is_on is updated in has_api_connectivity()
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_on() {
+			self::$_static_logger->entrance();
+
+			if ( isset( $this->_is_on ) ) {
+				return $this->_is_on;
+			}
+
+			// If already installed or pending then sure it's on :)
+			if ( $this->is_registered() || $this->is_pending_activation() ) {
+				$this->_is_on = true;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @param bool $flush_if_no_connectivity
+		 *
+		 * @return bool
+		 */
+		private function should_run_connectivity_test( $flush_if_no_connectivity = false ) {
+			if ( ! isset( $this->_storage->connectivity_test ) ) {
+				// Connectivity test was never executed, or cache was cleared.
+				return true;
+			}
+
+			if ( WP_FS__PING_API_ON_IP_OR_HOST_CHANGES ) {
+				if ( WP_FS__IS_HTTP_REQUEST ) {
+					if ( $_SERVER['HTTP_HOST'] != $this->_storage->connectivity_test['host'] ) {
+						// Domain changed.
+						return true;
+					}
+
+					if ( WP_FS__REMOTE_ADDR != $this->_storage->connectivity_test['server_ip'] ) {
+						// Server IP changed.
+						return true;
+					}
+				}
+			}
+
+			if ( $this->_storage->connectivity_test['is_connected'] &&
+			     $this->_storage->connectivity_test['is_active']
+			) {
+				// API connected and Freemius is active - no need to run connectivity check.
+				return false;
+			}
+
+			if ( $flush_if_no_connectivity ) {
+				/**
+				 * If explicitly asked to flush when no connectivity - do it only
+				 * if at least 10 sec passed from the last API connectivity test.
+				 */
+				return ( isset( $this->_storage->connectivity_test['timestamp'] ) &&
+				         ( WP_FS__SCRIPT_START_TIME - $this->_storage->connectivity_test['timestamp'] ) > 10 );
+			}
+
+			/**
+			 * @since 1.1.7 Don't check for connectivity on plugin downgrade.
+			 */
+			$version = $this->get_plugin_version();
+			if ( version_compare( $version, $this->_storage->connectivity_test['version'], '>' ) ) {
+				// If it's a plugin version upgrade and Freemius is off or no connectivity, run connectivity test.
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @return object|false
+		 */
+		private function ping() {
+			if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY ) {
+				return false;
+			}
+
+			$version = $this->get_plugin_version();
+
+			$is_update = $this->apply_filters( 'is_plugin_update', $this->is_plugin_update() );
+
+			return $this->get_api_plugin_scope()->ping(
+				$this->get_anonymous_id(),
+				array(
+					'is_update' => json_encode( $is_update ),
+					'version'   => $version,
+					'sdk'       => $this->version,
+					'is_admin'  => json_encode( is_admin() ),
+					'is_ajax'   => json_encode( $this->is_ajax() ),
+					'is_cron'   => json_encode( $this->is_cron() ),
+					'is_http'   => json_encode( WP_FS__IS_HTTP_REQUEST ),
+				)
+			);
+		}
+
+		/**
+		 * Check if there's any connectivity issue to Freemius API.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param bool $flush_if_no_connectivity
+		 *
+		 * @return bool
+		 */
+		function has_api_connectivity( $flush_if_no_connectivity = false ) {
+			$this->_logger->entrance();
+
+			if ( isset( $this->_has_api_connection ) && ( $this->_has_api_connection || ! $flush_if_no_connectivity ) ) {
+				return $this->_has_api_connection;
+			}
+
+			if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY &&
+			     isset( $this->_storage->connectivity_test ) &&
+			     true === $this->_storage->connectivity_test['is_connected']
+			) {
+				unset( $this->_storage->connectivity_test );
+			}
+
+			if ( ! $this->should_run_connectivity_test( $flush_if_no_connectivity ) ) {
+				$this->_has_api_connection = $this->_storage->connectivity_test['is_connected'];
+				/**
+				 * @since 1.1.6 During dev mode, if there's connectivity - turn Freemius on regardless the configuration.
+				 */
+				$this->_is_on = $this->_storage->connectivity_test['is_active'] ||
+				                ( WP_FS__DEV_MODE && $this->_has_api_connection && ! WP_FS__SIMULATE_FREEMIUS_OFF );
+
+				return $this->_has_api_connection;
+			}
+
+			$pong         = $this->ping();
+			$is_connected = $this->get_api_plugin_scope()->is_valid_ping( $pong );
+
+			if ( ! $is_connected ) {
+				// API failure.
+				$this->_add_connectivity_issue_message( $pong );
+			}
+
+			$this->store_connectivity_info( $pong, $is_connected );
+
+			return $this->_has_api_connection;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @param object $pong
+		 * @param bool   $is_connected
+		 */
+		private function store_connectivity_info( $pong, $is_connected ) {
+			$this->_logger->entrance();
+
+			$version = $this->get_plugin_version();
+
+			if ( ! $is_connected || WP_FS__SIMULATE_FREEMIUS_OFF ) {
+				$is_active = false;
+			} else {
+				$is_active = ( isset( $pong->is_active ) && true == $pong->is_active );
+			}
+
+			$is_active = $this->apply_filters(
+				'is_on',
+				$is_active,
+				$this->is_plugin_update(),
+				$version
+			);
+
+			$this->_storage->connectivity_test = array(
+				'is_connected' => $is_connected,
+				'host'         => $_SERVER['HTTP_HOST'],
+				'server_ip'    => WP_FS__REMOTE_ADDR,
+				'is_active'    => $is_active,
+				'timestamp'    => WP_FS__SCRIPT_START_TIME,
+				// Last version with connectivity attempt.
+				'version'      => $version,
+			);
+
+			$this->_has_api_connection = $is_connected;
+			$this->_is_on              = $is_active || ( WP_FS__DEV_MODE && $is_connected && ! WP_FS__SIMULATE_FREEMIUS_OFF );
+		}
+
+		/**
+		 * Force turning Freemius on.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8.1
+		 *
+		 * @return bool TRUE if successfully turned on.
+		 */
+		private function turn_on() {
+			$this->_logger->entrance();
+
+			if ( $this->is_on() || ! isset( $this->_storage->connectivity_test['is_active'] ) ) {
+				return false;
+			}
+
+			$updated_connectivity              = $this->_storage->connectivity_test;
+			$updated_connectivity['is_active'] = true;
+			$updated_connectivity['timestamp'] = WP_FS__SCRIPT_START_TIME;
+			$this->_storage->connectivity_test = $updated_connectivity;
+
+			$this->_is_on = true;
+
+			return true;
+		}
+
+		/**
+		 * Anonymous and unique site identifier (Hash).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.0
+		 *
+		 * @return string
+		 */
+		function get_anonymous_id() {
+			$unique_id = self::$_accounts->get_option( 'unique_id' );
+
+			if ( empty( $unique_id ) || ! is_string( $unique_id ) ) {
+				$key = get_site_url();
+
+				// If localhost, assign microtime instead of domain.
+				if ( WP_FS__IS_LOCALHOST ||
+				     false !== strpos( $key, 'localhost' ) ||
+				     false === strpos( $key, '.' )
+				) {
+					$key = microtime();
+				}
+
+				$unique_id = md5( $key );
+
+				self::$_accounts->set_option( 'unique_id', $unique_id, true );
+			}
+
+			$this->_logger->departure( $unique_id );
+
+			return $unique_id;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @return \WP_User
+		 */
+		static function _get_current_wp_user() {
+			self::require_pluggable_essentials();
+
+			return wp_get_current_user();
+		}
+
+		/**
+		 * Generate API connectivity issue message.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param mixed $api_result
+		 * @param bool  $is_first_failure
+		 */
+		function _add_connectivity_issue_message( $api_result, $is_first_failure = true ) {
+			if ( $this->_enable_anonymous ) {
+				// Don't add message if can run anonymously.
+				return;
+			}
+
+			if ( ! function_exists( 'wp_nonce_url' ) ) {
+				require_once( ABSPATH . 'wp-includes/functions.php' );
+			}
+
+			$current_user = self::_get_current_wp_user();
+//			$admin_email = get_option( 'admin_email' );
+			$admin_email = $current_user->user_email;
+
+			$message = false;
+			if ( is_object( $api_result ) &&
+			     isset( $api_result->error ) &&
+			     isset( $api_result->error->code )
+			) {
+				switch ( $api_result->error->code ) {
+					case 'curl_missing':
+						$message = sprintf(
+							__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
+							__fs( 'curl-missing-message', $this->_slug ) . ' ' .
+							' %s',
+							'<b>' . $this->get_plugin_name() . '</b>',
+							sprintf(
+								'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
+								sprintf(
+									'<a class="fs-resolve" data-type="curl" href="#"><b>%s</b></a>%s',
+									__fs( 'curl-missing-no-clue-title', $this->_slug ),
+									' - ' . sprintf(
+										__fs( 'curl-missing-no-clue-desc', $this->_slug ),
+										'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
+									)
+								),
+								sprintf(
+									'<b>%s</b> - %s',
+									__fs( 'sysadmin-title', $this->_slug ),
+									__fs( 'curl-missing-sysadmin-desc', $this->_slug )
+								),
+								sprintf(
+									'<a href="%s"><b>%s</b></a>%s',
+									wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
+									__fs( 'deactivate-plugin-title', $this->_slug ),
+									' - ' . __fs( 'deactivate-plugin-desc', 'freemius', $this->_slug )
+								)
+							)
+						);
+						break;
+					case 'cloudflare_ddos_protection':
+						$message = sprintf(
+							__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
+							__fs( 'cloudflare-blocks-connection-message', $this->_slug ) . ' ' .
+							__fs( 'happy-to-resolve-issue-asap', $this->_slug ) .
+							' %s',
+							'<b>' . $this->get_plugin_name() . '</b>',
+							sprintf(
+								'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
+								sprintf(
+									'<a class="fs-resolve" data-type="cloudflare" href="#"><b>%s</b></a>%s',
+									__fs( 'fix-issue-title', $this->_slug ),
+									' - ' . sprintf(
+										__fs( 'fix-issue-desc', $this->_slug ),
+										'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
+									)
+								),
+								sprintf(
+									'<a href="%s" target="_blank"><b>%s</b></a>%s',
+									sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
+									__fs( 'install-previous-title', $this->_slug ),
+									' - ' . __fs( 'install-previous-desc', $this->_slug )
+								),
+								sprintf(
+									'<a href="%s"><b>%s</b></a>%s',
+									wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
+									__fs( 'deactivate-plugin-title', $this->_slug ),
+									' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
+								)
+							)
+						);
+						break;
+					case 'squid_cache_block':
+						$message = sprintf(
+							__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
+							__fs( 'squid-blocks-connection-message', $this->_slug ) .
+							' %s',
+							'<b>' . $this->get_plugin_name() . '</b>',
+							sprintf(
+								'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
+								sprintf(
+									'<a class="fs-resolve" data-type="squid" href="#"><b>%s</b></a>%s',
+									__fs( 'squid-no-clue-title', $this->_slug ),
+									' - ' . sprintf(
+										__fs( 'squid-no-clue-desc', $this->_slug ),
+										'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
+									)
+								),
+								sprintf(
+									'<b>%s</b> - %s',
+									__fs( 'sysadmin-title', $this->_slug ),
+									sprintf(
+										__fs( 'squid-sysadmin-desc', $this->_slug ),
+										// We use a filter since the plugin might require additional API connectivity.
+										'<b>' . implode( ', ', $this->apply_filters( 'api_domains', array( 'api.freemius.com' ) ) ) . '</b>' )
+								),
+								sprintf(
+									'<a href="%s"><b>%s</b></a>%s',
+									wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
+									__fs( 'deactivate-plugin-title', $this->_slug ),
+									' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
+								)
+							)
+						);
+						break;
+//					default:
+//						$message = __fs( 'connectivity-test-fails-message', $this->_slug );
+//						break;
+				}
+			}
+
+			$message_id = 'failed_connect_api';
+			$type       = 'error';
+
+			if ( false === $message ) {
+				if ( $is_first_failure ) {
+					// First attempt failed.
+					$message = sprintf(
+						__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
+						__fs( 'connectivity-test-fails-message', $this->_slug ) . ' ' .
+						__fs( 'connectivity-test-maybe-temporary', $this->_slug ) . '<br><br>' .
+						'%s',
+						'<b>' . $this->get_plugin_name() . '</b>',
+						sprintf(
+							'<div id="fs_firewall_issue_options">%s %s</div>',
+							sprintf(
+								'<a  class="button button-primary fs-resolve" data-type="retry_ping" href="#">%s</a>',
+								__fs( 'yes-do-your-thing', $this->_slug )
+							),
+							sprintf(
+								'<a href="%s" class="button">%s</a>',
+								wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
+								__fs( 'no-deactivate', $this->_slug )
+							)
+						)
+					);
+
+					$message_id = 'failed_connect_api_first';
+					$type       = 'promotion';
+				} else {
+					// Second connectivity attempt failed.
+					$message = sprintf(
+						__fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
+						__fs( 'connectivity-test-fails-message', $this->_slug ) . ' ' .
+						__fs( 'happy-to-resolve-issue-asap', $this->_slug ) .
+						' %s',
+						'<b>' . $this->get_plugin_name() . '</b>',
+						sprintf(
+							'<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
+							sprintf(
+								'<a class="fs-resolve" data-type="general" href="#"><b>%s</b></a>%s',
+								__fs( 'fix-issue-title', $this->_slug ),
+								' - ' . sprintf(
+									__fs( 'fix-issue-desc', $this->_slug ),
+									'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
+								)
+							),
+							sprintf(
+								'<a href="%s" target="_blank"><b>%s</b></a>%s',
+								sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
+								__fs( 'install-previous-title', $this->_slug ),
+								' - ' . __fs( 'install-previous-desc', $this->_slug )
+							),
+							sprintf(
+								'<a href="%s"><b>%s</b></a>%s',
+								wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
+								__fs( 'deactivate-plugin-title', $this->_slug ),
+								' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
+							)
+						)
+					);
+				}
+			}
+
+			$this->_admin_notices->add_sticky(
+				$message,
+				$message_id,
+				__fs( 'oops', $this->_slug ) . '...',
+				$type
+			);
+		}
+
+		/**
+		 * Handle user request to resolve connectivity issue.
+		 * This method will send an email to Freemius API technical staff for resolution.
+		 * The email will contain server's info and installed plugins (might be caching issue).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		function _email_about_firewall_issue() {
+			$this->_admin_notices->remove_sticky( 'failed_connect_api' );
+
+			$pong = $this->ping();
+
+			$is_connected = $this->get_api_plugin_scope()->is_valid_ping( $pong );
+
+			if ( $is_connected ) {
+				$this->store_connectivity_info( $pong, $is_connected );
+
+				echo $this->get_after_plugin_activation_redirect_url();
+				exit;
+			}
+
+			$current_user = self::_get_current_wp_user();
+			$admin_email  = $current_user->user_email;
+
+			$error_type = fs_request_get( 'error_type', 'general' );
+
+			switch ( $error_type ) {
+				case 'squid':
+					$title = 'Squid ACL Blocking Issue';
+					break;
+				case 'cloudflare':
+					$title = 'CloudFlare Blocking Issue';
+					break;
+				default:
+					$title = 'API Connectivity Issue';
+					break;
+			}
+
+			$custom_email_sections = array();
+
+			if ( 'squid' === $error_type ) {
+				// Override the 'Site' email section.
+				$custom_email_sections['site'] = array(
+					'rows' => array(
+						'hosting_company' => array( 'Hosting Company', fs_request_get( 'hosting_company' ) )
+					)
+				);
+			}
+
+			// Add 'API Error' custom email section.
+			$custom_email_sections['api_error'] = array(
+				'title' => 'API Error',
+				'rows'  => array(
+					'ping' => array( is_string( $pong ) ? htmlentities( $pong ) : json_encode( $pong ) )
+				)
+			);
+
+			// Add PHP info for deeper investigation.
+			ob_start();
+			phpinfo();
+			$php_info                          = ob_get_clean();
+			$custom_email_sections['php_info'] = array(
+				'title' => 'PHP Info',
+				'rows'  => array(
+					'info' => array( $php_info )
+				)
+			);
+
+			// Send email with technical details to resolve CloudFlare's firewall unnecessary protection.
+			$this->send_email(
+				'api@freemius.com',                              // recipient
+				$title . ' [' . $this->get_plugin_name() . ']',  // subject
+				$custom_email_sections,
+				array( "Reply-To: $admin_email <$admin_email>" ) // headers
+			);
+
+			$this->_admin_notices->add_sticky(
+				sprintf(
+					__fs( 'fix-request-sent-message', $this->_slug ),
+					'<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
+				),
+				'server_details_sent'
+			);
+
+			// Action was taken, tell that API connectivity troubleshooting should be off now.
+
+			echo "1";
+			exit;
+		}
+
+		/**
+		 * Handle connectivity test retry approved by the user.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 */
+		function _retry_connectivity_test() {
+			$this->_admin_notices->remove_sticky( 'failed_connect_api_first' );
+
+			$pong = $this->ping();
+
+			$is_connected = $this->get_api_plugin_scope()->is_valid_ping( $pong );
+
+			if ( $is_connected ) {
+				$this->store_connectivity_info( $pong, $is_connected );
+
+				echo $this->get_after_plugin_activation_redirect_url();
+			} else {
+				// Add connectivity issue message after 2nd failed attempt.
+				$this->_add_connectivity_issue_message( $pong, false );
+
+				echo "1";
+			}
+
+			exit;
+		}
+
+		static function _add_firewall_issues_javascript() {
+			$params = array();
+			fs_require_once_template( 'firewall-issues-js.php', $params );
+		}
+
+		#endregion Connectivity Issues ------------------------------------------------------------------
+
+		#region Email ------------------------------------------------------------------
+
+		/**
+		 * Generates and sends an HTML email with customizable sections.
+		 *
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.2
+		 *
+		 * @param string $to_address
+		 * @param string $subject
+		 * @param array  $sections
+		 * @param array  $headers
+		 *
+		 * @return bool Whether the email contents were sent successfully.
+		 */
+		private function send_email(
+			$to_address,
+			$subject,
+			$sections = array(),
+			$headers = array()
+		) {
+			$default_sections = $this->get_email_sections();
+
+			// Insert new sections or replace the default email sections.
+			if ( is_array( $sections ) && ! empty( $sections ) ) {
+				foreach ( $sections as $section_id => $custom_section ) {
+					if ( ! isset( $default_sections[ $section_id ] ) ) {
+						// If the section does not exist, add it.
+						$default_sections[ $section_id ] = $custom_section;
+					} else {
+						// If the section already exists, override it.
+						$current_section = $default_sections[ $section_id ];
+
+						// Replace the current section's title if a custom section title exists.
+						if ( isset( $custom_section['title'] ) ) {
+							$current_section['title'] = $custom_section['title'];
+						}
+
+						// Insert new rows under the current section or replace the default rows.
+						if ( isset( $custom_section['rows'] ) && is_array( $custom_section['rows'] ) && ! empty( $custom_section['rows'] ) ) {
+							foreach ( $custom_section['rows'] as $row_id => $row ) {
+								$current_section['rows'][ $row_id ] = $row;
+							}
+						}
+
+						$default_sections[ $section_id ] = $current_section;
+					}
+				}
+			}
+
+			$vars    = array( 'sections' => $default_sections );
+			$message = fs_get_template( 'email.php', $vars );
+
+			// Set the type of email to HTML.
+			$headers[] = 'Content-type: text/html';
+
+			$header_string = implode( "\r\n", $headers );
+
+			return wp_mail(
+				$to_address,
+				$subject,
+				$message,
+				$header_string
+			);
+		}
+
+		/**
+		 * Generates the data for the sections of the email content.
+		 *
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.2
+		 *
+		 * @return array
+		 */
+		private function get_email_sections() {
+			// Retrieve the current user's information so that we can get the user's email, first name, and last name below.
+			$current_user = self::_get_current_wp_user();
+
+			// Retrieve the cURL version information so that we can get the version number below.
+			$curl_version_information = curl_version();
+
+			$active_plugin = self::get_active_plugins();
+
+			// Generate the list of active plugins separated by new line. 
+			$active_plugin_string = '';
+			foreach ( $active_plugin as $plugin ) {
+				$active_plugin_string .= sprintf(
+					'<a href="%s">%s</a> [v%s]<br>',
+					$plugin['PluginURI'],
+					$plugin['Name'],
+					$plugin['Version']
+				);
+			}
+
+			$server_ip = WP_FS__REMOTE_ADDR;
+
+			// Generate the default email sections.
+			$sections = array(
+				'sdk'     => array(
+					'title' => 'SDK',
+					'rows'  => array(
+						'fs_version'   => array( 'FS Version', $this->version ),
+						'curl_version' => array( 'cURL Version', $curl_version_information['version'] )
+					)
+				),
+				'plugin'  => array(
+					'title' => 'Plugin',
+					'rows'  => array(
+						'name'    => array( 'Name', $this->get_plugin_name() ),
+						'version' => array( 'Version', $this->get_plugin_version() )
+					)
+				),
+				'site'    => array(
+					'title' => 'Site',
+					'rows'  => array(
+						'unique_id'   => array( 'Address', $this->get_anonymous_id() ),
+						'address'     => array( 'Address', site_url() ),
+						'host'        => array(
+							'HTTP_HOST',
+							( ! empty( $_SERVER['HTTP_HOST'] ) ? $_SERVER['HTTP_HOST'] : '' )
+						),
+						'server_addr' => array(
+							'SERVER_ADDR',
+							'<a href="http://www.projecthoneypot.org/ip_' . $server_ip . '">' . $server_ip . '</a>'
+						)
+					)
+				),
+				'user'    => array(
+					'title' => 'User',
+					'rows'  => array(
+						'email' => array( 'Email', $current_user->user_email ),
+						'first' => array( 'First', $current_user->user_firstname ),
+						'last'  => array( 'Last', $current_user->user_lastname )
+					)
+				),
+				'plugins' => array(
+					'title' => 'Plugins',
+					'rows'  => array(
+						'active_plugins' => array( 'Active Plugins', $active_plugin_string )
+					)
+				),
+			);
+
+			// Allow the sections to be modified by other code.
+			$sections = $this->apply_filters( 'email_template_sections', $sections );
+
+			return $sections;
+		}
+
+		#endregion Email ------------------------------------------------------------------
+
+		#region Initialization ------------------------------------------------------------------
+
+		/**
+		 * Init plugin's Freemius instance.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param number $id
+		 * @param string $public_key
+		 * @param bool   $is_live
+		 * @param bool   $is_premium
+		 */
+		function init( $id, $public_key, $is_live = true, $is_premium = true ) {
+			$this->_logger->entrance();
+
+			$this->dynamic_init( array(
+				'id'         => $id,
+				'public_key' => $public_key,
+				'is_live'    => $is_live,
+				'is_premium' => $is_premium,
+			) );
+		}
+
+		/**
+		 * Dynamic initiator, originally created to support initiation
+		 * with parent_id for add-ons.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param array $plugin_info
+		 *
+		 * @throws Freemius_Exception
+		 */
+		function dynamic_init( array $plugin_info ) {
+			$this->_logger->entrance();
+
+			$this->parse_settings( $plugin_info );
+
+			if ( $this->should_stop_execution() ) {
+				return;
+			}
+
+			if ( ! $this->is_registered() ) {
+				if ( $this->is_anonymous() ) {
+					// If user skipped, no need to test connectivity.
+					$this->_has_api_connection = true;
+					$this->_is_on              = true;
+				} else {
+					if ( ! $this->has_api_connectivity() ) {
+						if ( $this->_admin_notices->has_sticky( 'failed_connect_api_first' ) ||
+						     $this->_admin_notices->has_sticky( 'failed_connect_api' )
+						) {
+							if ( ! $this->_enable_anonymous ) {
+								// If anonymous mode is disabled, add firewall admin-notice message.
+								add_action( 'admin_footer', array( 'Freemius', '_add_firewall_issues_javascript' ) );
+
+								$this->add_ajax_action( 'resolve_firewall_issues', array(
+									&$this,
+									'_email_about_firewall_issue'
+								) );
+
+								$this->add_ajax_action( 'retry_connectivity_test', array(
+									&$this,
+									'_retry_connectivity_test'
+								) );
+							}
+						}
+
+						return;
+					} else {
+						$this->_admin_notices->remove_sticky( array(
+							'failed_connect_api_first',
+							'failed_connect_api',
+						) );
+
+						if ( $this->_anonymous_mode ) {
+							// Simulate anonymous mode.
+							$this->_is_anonymous = true;
+						}
+					}
+				}
+
+				// Check if Freemius is on for the current plugin.
+				// This MUST be executed after all the plugin variables has been loaded.
+				if ( ! $this->is_on() ) {
+					return;
+				}
+			}
+
+			if ( $this->has_api_connectivity() ) {
+				if ( $this->is_cron() ) {
+					$this->hook_callback_to_sync_cron();
+				} else if ( $this->is_user_in_admin() ) {
+					/**
+					 * Schedule daily data sync cron if:
+					 *
+					 *  1. User opted-in (for tracking).
+					 *  2. If skipped, but later upgraded (opted-in via upgrade).
+					 *
+					 * @author Vova Feldman (@svovaf)
+					 * @since  1.1.7.3
+					 *
+					 */
+					if ( $this->is_registered() ) {
+						if ( ! $this->is_sync_cron_on() ) {
+							$this->schedule_sync_cron();
+						}
+					}
+
+					/**
+					 * Check if requested for manual blocking background sync.
+					 */
+					if ( fs_request_has( 'background_sync' ) ) {
+						$this->run_manual_sync();
+					}
+				}
+			}
+
+			if ( $this->is_registered() ) {
+				$this->hook_callback_to_install_sync();
+			}
+
+			if ( $this->is_addon() ) {
+				if ( $this->is_parent_plugin_installed() ) {
+					// Link to parent FS.
+					$this->_parent = self::get_instance_by_id( $this->_plugin->parent_plugin_id );
+
+					// Get parent plugin reference.
+					$this->_parent_plugin = $this->_parent->get_plugin();
+				}
+			}
+
+			if ( $this->is_user_in_admin() ) {
+				global $pagenow;
+				if ( 'plugins.php' === $pagenow ) {
+					$this->hook_plugin_action_links();
+				}
+
+				if ( $this->is_addon() ) {
+					if ( ! $this->is_parent_plugin_installed() ) {
+						$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
+
+						if ( isset( $plugin_info['parent'] ) ) {
+							$parent_name = $this->get_option( $plugin_info['parent'], 'name', null );
+						}
+
+						$this->_admin_notices->add(
+							( ! empty( $parent_name ) ?
+								sprintf( __fs( 'addon-x-cannot-run-without-y', $this->_slug ), $this->get_plugin_name(), $parent_name ) :
+								sprintf( __fs( 'addon-x-cannot-run-without-parent', $this->_slug ), $this->get_plugin_name() )
+							),
+							__fs( 'oops', $this->_slug ) . '...',
+							'error'
+						);
+
+						return;
+					} else {
+						if ( $this->_parent->is_registered() && ! $this->is_registered() ) {
+							// If parent plugin activated, automatically install add-on for the user.
+							$this->_activate_addon_account( $this->_parent );
+						}
+
+						// @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic.
+						if ( $this->is_premium() ) {
+							// Remove add-on download admin-notice.
+							$this->_parent->_admin_notices->remove_sticky( array(
+								'addon_plan_upgraded_' . $this->_slug,
+								'no_addon_license_' . $this->_slug,
+							) );
+						}
+
+						$this->deactivate_premium_only_addon_without_license();
+					}
+				} else {
+					add_action( 'admin_init', array( &$this, '_admin_init_action' ) );
+
+					if ( $this->has_addons() &&
+					     'plugin-information' === fs_request_get( 'tab', false ) &&
+					     $this->get_id() == fs_request_get( 'parent_plugin_id', false )
+					) {
+						require_once WP_FS__DIR_INCLUDES . '/fs-plugin-info-dialog.php';
+
+						new FS_Plugin_Info_Dialog( $this );
+					}
+				}
+
+				if ( $this->is_premium() ) {
+					new FS_Plugin_Updater( $this );
+				}
+
+//				if ( $this->is_registered() ||
+//				     $this->is_anonymous() ||
+//				     $this->is_pending_activation()
+//				) {
+//					$this->_init_admin();
+//				}
+			}
+
+			$this->do_action( 'initiated' );
+
+			if ( $this->_storage->prev_is_premium !== $this->_plugin->is_premium ) {
+				if ( isset( $this->_storage->prev_is_premium ) ) {
+					$this->apply_filters(
+						'after_code_type_change',
+						// New code type.
+						$this->_plugin->is_premium
+					);
+				} else {
+					// Set for code type for the first time.
+					$this->_storage->prev_is_premium = $this->_plugin->is_premium;
+				}
+			}
+
+			if ( ! $this->is_addon() ) {
+				if ( $this->is_registered() ) {
+					// Fix for upgrade from versions < 1.0.9.
+					if ( ! isset( $this->_storage->activation_timestamp ) ) {
+						$this->_storage->activation_timestamp = WP_FS__SCRIPT_START_TIME;
+					}
+
+					$this->do_action( 'after_init_plugin_registered' );
+				} else if ( $this->is_anonymous() ) {
+					$this->do_action( 'after_init_plugin_anonymous' );
+				} else if ( $this->is_pending_activation() ) {
+					$this->do_action( 'after_init_plugin_pending_activations' );
+				}
+			} else {
+				if ( $this->is_registered() ) {
+					$this->do_action( 'after_init_addon_registered' );
+				} else if ( $this->is_anonymous() ) {
+					$this->do_action( 'after_init_addon_anonymous' );
+				} else if ( $this->is_pending_activation() ) {
+					$this->do_action( 'after_init_addon_pending_activations' );
+				}
+			}
+
+			// Add license activation link and AJAX request handler.
+			if ( $this->has_paid_plan() ) {
+				global $pagenow;
+				if ( 'plugins.php' === $pagenow ) {
+					/**
+					 * @since 1.2.0 Add license action link only on plugins page.
+					 */
+					$this->_add_license_action_link();
+					$this->_require_license_activation_dialog();
+				}
+
+				if ( $this->is_ajax_action( array(
+					'activate_license',
+					'resend_license_key'
+				) )
+				) {
+					// Hook license activation and resend AJAX callbacks.
+					$this->_require_license_activation_dialog();
+				}
+			}
+		}
+
+		/**
+		 * Parse plugin's settings (as defined by the plugin dev).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @param array $plugin_info
+		 *
+		 * @throws \Freemius_Exception
+		 */
+		private function parse_settings( &$plugin_info ) {
+			$this->_logger->entrance();
+
+			$id          = $this->get_numeric_option( $plugin_info, 'id', false );
+			$public_key  = $this->get_option( $plugin_info, 'public_key', false );
+			$secret_key  = $this->get_option( $plugin_info, 'secret_key', null );
+			$parent_id   = $this->get_numeric_option( $plugin_info, 'parent_id', null );
+			$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
+
+			/**
+			 * @author Vova Feldman (@svovaf)
+			 * @since  1.1.9 Try to pull secret key from external config.
+			 */
+			if ( is_null( $secret_key ) && defined( "WP_FS__{$this->_slug}_SECRET_KEY" ) ) {
+				$secret_key = constant( "WP_FS__{$this->_slug}_SECRET_KEY" );
+			}
+
+			if ( isset( $plugin_info['parent'] ) ) {
+				$parent_id = $this->get_numeric_option( $plugin_info['parent'], 'id', null );
+//				$parent_slug       = $this->get_option( $plugin_info['parent'], 'slug', null );
+//				$parent_public_key = $this->get_option( $plugin_info['parent'], 'public_key', null );
+				$parent_name = $this->get_option( $plugin_info['parent'], 'name', null );
+			}
+
+			if ( false === $id ) {
+				throw new Freemius_Exception( 'Plugin id parameter is not set.' );
+			}
+			if ( false === $public_key ) {
+				throw new Freemius_Exception( 'Plugin public_key parameter is not set.' );
+			}
+
+			$plugin = ( $this->_plugin instanceof FS_Plugin ) ?
+				$this->_plugin :
+				new FS_Plugin();
+
+			$plugin->update( array(
+				'id'               => $id,
+				'public_key'       => $public_key,
+				'slug'             => $this->_slug,
+				'parent_plugin_id' => $parent_id,
+				'version'          => $this->get_plugin_version(),
+				'title'            => $this->get_plugin_name(),
+				'file'             => $this->_plugin_basename,
+				'is_premium'       => $this->get_bool_option( $plugin_info, 'is_premium', true ),
+				'is_live'          => $this->get_bool_option( $plugin_info, 'is_live', true ),
+//				'secret_key' => $secret_key,
+			) );
+
+			if ( $plugin->is_updated() ) {
+				// Update plugin details.
+				$this->_plugin = FS_Plugin_Manager::instance( $this->_slug )->store( $plugin );
+			}
+			// Set the secret key after storing the plugin, we don't want to store the key in the storage.
+			$this->_plugin->secret_key = $secret_key;
+
+			if ( ! isset( $plugin_info['menu'] ) ) {
+				// Back compatibility to 1.1.2
+				$plugin_info['menu'] = array(
+					'slug' => isset( $plugin_info['menu_slug'] ) ?
+						$plugin_info['menu_slug'] :
+						$this->_slug
+				);
+			}
+
+			$this->_menu = FS_Admin_Menu_Manager::instance( $this->_slug );
+			$this->_menu->init( $plugin_info['menu'], $this->is_addon() );
+
+			$this->_has_addons       = $this->get_bool_option( $plugin_info, 'has_addons', false );
+			$this->_has_paid_plans   = $this->get_bool_option( $plugin_info, 'has_paid_plans', true );
+			$this->_is_org_compliant = $this->get_bool_option( $plugin_info, 'is_org_compliant', true );
+			$this->_is_premium_only  = $this->get_bool_option( $plugin_info, 'is_premium_only', false );
+			if ( $this->_is_premium_only ) {
+				// If premium only plugin, disable anonymous mode.
+				$this->_enable_anonymous = false;
+				$this->_anonymous_mode   = false;
+			} else {
+				$this->_enable_anonymous = $this->get_bool_option( $plugin_info, 'enable_anonymous', true );
+				$this->_anonymous_mode   = $this->get_bool_option( $plugin_info, 'anonymous_mode', false );
+			}
+			$this->_permissions = $this->get_option( $plugin_info, 'permissions', array() );
+		}
+
+		/**
+		 * @param string[] $options
+		 * @param string   $key
+		 * @param mixed    $default
+		 *
+		 * @return bool
+		 */
+		private function get_option( &$options, $key, $default = false ) {
+			return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
+		}
+
+		private function get_bool_option( &$options, $key, $default = false ) {
+			return isset( $options[ $key ] ) && is_bool( $options[ $key ] ) ? $options[ $key ] : $default;
+		}
+
+		private function get_numeric_option( &$options, $key, $default = false ) {
+			return isset( $options[ $key ] ) && is_numeric( $options[ $key ] ) ? $options[ $key ] : $default;
+		}
+
+		/**
+		 * Gate keeper.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return bool
+		 */
+		private function should_stop_execution() {
+			if ( empty( $this->_storage->was_plugin_loaded ) ) {
+				/**
+				 * Don't execute Freemius until plugin was fully loaded at least once,
+				 * to give the opportunity for the activation hook to run before pinging
+				 * the API for connectivity test. This logic is relevant for the
+				 * identification of new plugin install vs. plugin update.
+				 *
+				 * @author Vova Feldman (@svovaf)
+				 * @since  1.1.9
+				 */
+				return true;
+			}
+
+			if ( $this->is_activation_mode() ) {
+				if ( ! is_admin() ) {
+					/**
+					 * If in activation mode, don't execute Freemius outside of the
+					 * admin dashboard.
+					 *
+					 * @author Vova Feldman (@svovaf)
+					 * @since  1.1.7.3
+					 */
+					return true;
+				}
+
+				if ( ! WP_FS__IS_HTTP_REQUEST ) {
+					/**
+					 * If in activation and executed without HTTP context (e.g. CLI, Cronjob),
+					 * then don't start Freemius.
+					 *
+					 * @author Vova Feldman (@svovaf)
+					 * @since  1.1.6.3
+					 *
+					 * @link   https://wordpress.org/support/topic/errors-in-the-freemius-class-when-running-in-wordpress-in-cli
+					 */
+					return true;
+				}
+
+				if ( $this->is_cron() ) {
+					/**
+					 * If in activation mode, don't execute Freemius during wp crons
+					 * (wp crons have HTTP context - called as HTTP request).
+					 *
+					 * @author Vova Feldman (@svovaf)
+					 * @since  1.1.7.3
+					 */
+					return true;
+				}
+
+				if ( $this->is_ajax() &&
+				     ! $this->_admin_notices->has_sticky( 'failed_connect_api_first' ) &&
+				     ! $this->_admin_notices->has_sticky( 'failed_connect_api' )
+				) {
+					/**
+					 * During activation, if running in AJAX mode, unless there's a sticky
+					 * connectivity issue notice, don't run Freemius.
+					 *
+					 * @author Vova Feldman (@svovaf)
+					 * @since  1.1.7.3
+					 */
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Triggered after code type has changed.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9.1
+		 */
+		function _after_code_type_change() {
+			$this->_logger->entrance();
+
+			add_action( is_admin() ? 'admin_init' : 'init', array(
+				&$this,
+				'_plugin_code_type_changed'
+			) );
+		}
+
+		/**
+		 * Handles plugin's code type change (free <--> premium).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		function _plugin_code_type_changed() {
+			$this->_logger->entrance();
+
+			// Schedule code type changes event.
+//			$this->sync_install();
+			$this->schedule_install_sync();
+
+			if ( $this->is_premium() ) {
+				// Activated premium code.
+				$this->do_action( 'after_premium_version_activation' );
+
+				// Remove all sticky messages related to download of the premium version.
+				$this->_admin_notices->remove_sticky( array(
+					'trial_started',
+					'plan_upgraded',
+					'plan_changed',
+				) );
+
+				$this->_admin_notices->add_sticky(
+					__fs( 'premium-activated-message', $this->_slug ),
+					'premium_activated',
+					__fs( 'woot', $this->_slug ) . '!'
+				);
+			} else {
+				// Remove sticky message related to premium code activation.
+				$this->_admin_notices->remove_sticky( 'premium_activated' );
+
+				// Activated free code (after had the premium before).
+				$this->do_action( 'after_free_version_reactivation' );
+
+				if ( $this->is_paying() && ! $this->is_premium() ) {
+					$this->_admin_notices->add_sticky(
+						sprintf(
+							__fs( 'you-have-x-license', $this->_slug ),
+							$this->_site->plan->title
+						) . $this->get_complete_upgrade_instructions(),
+						'plan_upgraded',
+						__fs( 'yee-haw', $this->_slug ) . '!'
+					);
+				}
+			}
+
+			/**
+			 * Unregister the uninstall hook for the other version of the plugin (with different code type) to avoid
+			 * triggering a fatal error when uninstalling that plugin. For example, after deactivating the "free" version
+			 * of a specific plugin, its uninstall hook should be unregistered after the "premium" version has been
+			 * activated. If we don't do that, a fatal error will occur when we try to uninstall the "free" version since
+			 * the main file of the "free" version will be loaded first before calling the hooked callback. Since the
+			 * free and premium versions are almost identical (same class or have same functions), a fatal error like
+			 * "Cannot redeclare class MyClass" or "Cannot redeclare my_function()" will occur.
+			 */
+			$this->unregister_uninstall_hook();
+
+			$this->clear_module_main_file_cache();
+
+			// Update is_premium of latest version.
+			$this->_storage->prev_is_premium = $this->_plugin->is_premium;
+		}
+
+		#endregion Initialization ------------------------------------------------------------------
+
+		#region Add-ons -------------------------------------------------------------------------
+
+		/**
+		 * Check if add-on installed and activated on site.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param string|number $slug_or_id
+		 *
+		 * @return bool
+		 */
+		function is_addon_activated( $slug_or_id ) {
+			return self::has_instance( $slug_or_id );
+		}
+
+		/**
+		 * Check if add-on was connected to install
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @param string $slug
+		 *
+		 * @return bool
+		 */
+		function is_addon_connected( $slug ) {
+			$sites = self::get_all_sites();
+
+			if ( ! isset( $sites[ $slug ] ) ) {
+				return false;
+			}
+
+			$site = $sites[ $slug ];
+
+			$plugin = FS_Plugin_Manager::instance( $slug )->get();
+
+			if ( $plugin->parent_plugin_id != $this->_plugin->id ) {
+				// The given slug do NOT belong to any of the plugin's add-ons.
+				return false;
+			}
+
+			return ( is_object( $site ) &&
+			         is_numeric( $site->id ) &&
+			         is_numeric( $site->user_id ) &&
+			         is_object( $site->plan )
+			);
+		}
+
+		/**
+		 * Determines if add-on installed.
+		 *
+		 * NOTE: This is a heuristic and only works if the folder/file named as the slug.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param string $slug
+		 *
+		 * @return bool
+		 */
+		function is_addon_installed( $slug ) {
+			return file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->get_addon_basename( $slug ) ) );
+		}
+
+		/**
+		 * Get add-on basename.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param string $slug
+		 *
+		 * @return string
+		 */
+		function get_addon_basename( $slug ) {
+			if ( $this->is_addon_activated( $slug ) ) {
+				self::instance( $slug )->get_plugin_basename();
+			}
+
+			$premium_basename = $slug . '-premium/' . $slug . '.php';
+
+			if ( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $premium_basename ) ) ) {
+				return $premium_basename;
+			}
+
+			$free_basename = $slug . '/' . $slug . '.php';
+
+			return $free_basename;
+		}
+
+		/**
+		 * Get installed add-ons instances.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return Freemius[]
+		 */
+		function get_installed_addons() {
+			$installed_addons = array();
+			foreach ( self::$_instances as $slug => $instance ) {
+				if ( $instance->is_addon() && is_object( $instance->_parent_plugin ) ) {
+					if ( $this->_plugin->id == $instance->_parent_plugin->id ) {
+						$installed_addons[] = $instance;
+					}
+				}
+			}
+
+			return $installed_addons;
+		}
+
+		/**
+		 * Check if any add-ons of the plugin are installed.
+		 *
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.1
+		 *
+		 * @return bool
+		 */
+		function has_installed_addons() {
+			if ( ! $this->has_addons() ) {
+				return false;
+			}
+
+			foreach ( self::$_instances as $slug => $instance ) {
+				if ( $instance->is_addon() && is_object( $instance->_parent_plugin ) ) {
+					if ( $this->_plugin->id == $instance->_parent_plugin->id ) {
+						return true;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Tell Freemius that the current plugin is an add-on.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param number $parent_plugin_id The parent plugin ID
+		 */
+		function init_addon( $parent_plugin_id ) {
+			$this->_plugin->parent_plugin_id = $parent_plugin_id;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool
+		 */
+		function is_addon() {
+			return isset( $this->_plugin->parent_plugin_id ) && is_numeric( $this->_plugin->parent_plugin_id );
+		}
+
+		/**
+		 * Deactivate add-on if it's premium only and the user does't have a valid license.
+		 *
+		 * @param bool $is_after_trial_cancel
+		 *
+		 * @return bool If add-on was deactivated.
+		 */
+		private function deactivate_premium_only_addon_without_license( $is_after_trial_cancel = false ) {
+			if ( ! $this->has_free_plan() &&
+			     ! $this->has_features_enabled_license() &&
+			     ! $this->_has_premium_license()
+			) {
+				// IF wrapper is turned off because activation_timestamp is currently only stored for plugins (not addons).
+//                if (empty($this->_storage->activation_timestamp) ||
+//                    (WP_FS__SCRIPT_START_TIME - $this->_storage->activation_timestamp) > 30
+//                ) {
+				/**
+				 * @todo When it's first fail, there's no reason to try and re-sync because the licenses were just synced after initial activation.
+				 *
+				 * Retry syncing the user add-on licenses.
+				 */
+				// Sync licenses.
+				$this->_sync_licenses();
+//                }
+
+				// Try to activate premium license.
+				$this->_activate_license( true );
+
+				if ( ! $this->has_free_plan() &&
+				     ! $this->has_features_enabled_license() &&
+				     ! $this->_has_premium_license()
+				) {
+					// @todo Check if deactivate plugins also call the deactivation hook.
+
+					deactivate_plugins( array( $this->_plugin_basename ), true );
+
+					$this->_parent->_admin_notices->add_sticky(
+						sprintf(
+							__fs( ( $is_after_trial_cancel ?
+									'addon-trial-cancelled-message' :
+									'addon-no-license-message' ),
+								$this->_parent->_slug
+							),
+							'<b>' . $this->_plugin->title . '</b>'
+						) . ' ' . sprintf(
+							'<a href="%s" aria-label="%s" class="button button-primary" style="margin-left: 10px; vertical-align: middle;">%s &nbsp;&#10140;</a>',
+							$this->_parent->addon_url( $this->_slug ),
+							esc_attr( sprintf( __fs( 'more-information-about-x', $this->_parent->_slug ), $this->_plugin->title ) ),
+							__fs( 'purchase-license', $this->_parent->_slug )
+						),
+						'no_addon_license_' . $this->_slug,
+						( $is_after_trial_cancel ? '' : __fs( 'oops', $this->_parent->_slug ) . '...' ),
+						( $is_after_trial_cancel ? 'success' : 'error' )
+					);
+
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		#region Sandbox ------------------------------------------------------------------
+
+		/**
+		 * Set Freemius into sandbox mode for debugging.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param string $secret_key
+		 */
+		function init_sandbox( $secret_key ) {
+			$this->_plugin->secret_key = $secret_key;
+
+			// Update plugin details.
+			FS_Plugin_Manager::instance( $this->_slug )->update( $this->_plugin, true );
+		}
+
+		/**
+		 * Check if running payments in sandbox mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return bool
+		 */
+		function is_payments_sandbox() {
+			return ( ! $this->is_live() ) || isset( $this->_plugin->secret_key );
+		}
+
+		#endregion Sandbox ------------------------------------------------------------------
+
+		/**
+		 * Check if running test vs. live plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return bool
+		 */
+		function is_live() {
+			return $this->_plugin->is_live;
+		}
+
+		/**
+		 * Check if the user skipped connecting the account with Freemius.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		function is_anonymous() {
+			if ( ! isset( $this->_is_anonymous ) ) {
+				if ( ! isset( $this->_storage->is_anonymous ) ) {
+					// Not skipped.
+					$this->_is_anonymous = false;
+				} else if ( is_bool( $this->_storage->is_anonymous ) ) {
+					// For back compatibility, since the variable was boolean before.
+					$this->_is_anonymous = $this->_storage->is_anonymous;
+
+					// Upgrade stored data format to 1.1.3 format.
+					$this->set_anonymous_mode( $this->_storage->is_anonymous );
+				} else {
+					// Version 1.1.3 and later.
+					$this->_is_anonymous = $this->_storage->is_anonymous['is'];
+				}
+			}
+
+			return $this->_is_anonymous;
+		}
+
+		/**
+		 * Check if user connected his account and install pending email activation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		function is_pending_activation() {
+			return $this->_storage->get( 'is_pending_activation', false );
+		}
+
+		/**
+		 * Check if plugin must be WordPress.org compliant.
+		 *
+		 * @since 1.0.7
+		 *
+		 * @return bool
+		 */
+		function is_org_repo_compliant() {
+			return $this->_is_org_compliant;
+		}
+
+		#region Daily Sync Cron ------------------------------------------------------------------
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		private function run_manual_sync() {
+			$this->require_pluggable_essentials();
+
+			if ( ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			// Run manual sync.
+			$this->_sync_cron();
+
+			// Reschedule next cron to run 24 hours from now (performance optimization).
+			$this->clear_sync_cron();
+
+			$this->schedule_sync_cron( time() + WP_FS__TIME_24_HOURS_IN_SEC, false );
+		}
+
+		/**
+		 * Data sync cron job. Replaces the background sync non blocking HTTP request
+		 * that doesn't halt page loading.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		function _sync_cron() {
+			$this->_logger->entrance();
+
+			// Store the last time data sync was executed.
+			$this->_storage->sync_timestamp = time();
+
+			// Check if API is temporary down.
+			if ( FS_Api::is_temporary_down() ) {
+				return;
+			}
+
+			// @todo Add logic that identifies API latency, and reschedule the next background sync randomly between 8-16 hours.
+
+			if ( $this->is_registered() ) {
+				if ( $this->has_paid_plan() ) {
+					// Initiate background plan sync.
+					$this->_sync_license( true );
+
+					if ( $this->is_paying() ) {
+						// Check for premium plugin updates.
+						$this->_check_updates( true );
+					}
+				} else {
+					// Sync install (only if something changed locally).
+					$this->sync_install();
+				}
+			}
+
+			$this->do_action( 'after_sync_cron' );
+		}
+
+		/**
+		 * Check if sync was executed in the last $period of seconds.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @param int $period In seconds
+		 *
+		 * @return bool
+		 */
+		private function is_sync_executed( $period = WP_FS__TIME_24_HOURS_IN_SEC ) {
+			if ( ! isset( $this->_storage->sync_timestamp ) ) {
+				return false;
+			}
+
+			return ( $this->_storage->sync_timestamp > ( WP_FS__SCRIPT_START_TIME - $period ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return bool
+		 */
+		private function is_sync_cron_on() {
+			/**
+			 * @var object $sync_cron_data
+			 */
+			$sync_cron_data = $this->_storage->get( 'sync_cron', null );
+
+			return ( ! is_null( $sync_cron_data ) && true === $sync_cron_data->on );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @param int  $start_at        Defaults to now.
+		 * @param bool $randomize_start If true, schedule first job randomly during the next 12 hours. Otherwise,
+		 *                              schedule job to start right away.
+		 */
+		private function schedule_sync_cron( $start_at = WP_FS__SCRIPT_START_TIME, $randomize_start = true ) {
+			$this->_logger->entrance();
+
+			if ( $randomize_start ) {
+				// Schedule first sync with a random 12 hour time range from now.
+				$start_at += rand( 0, ( WP_FS__TIME_24_HOURS_IN_SEC / 2 ) );
+			}
+
+			// Schedule daily WP cron.
+			wp_schedule_event(
+				$start_at,
+				'daily',
+				$this->get_action_tag( 'data_sync' )
+			);
+
+			$this->_storage->store( 'sync_cron', (object) array(
+				'version'     => $this->get_plugin_version(),
+				'sdk_version' => $this->version,
+				'timestamp'   => WP_FS__SCRIPT_START_TIME,
+				'on'          => true,
+			) );
+		}
+
+		/**
+		 * Add the actual sync function to the cron job hook.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		private function hook_callback_to_sync_cron() {
+			$this->add_action( 'data_sync', array( &$this, '_sync_cron' ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		private function clear_sync_cron() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_sync_cron_on() ) {
+				return;
+			}
+
+			$this->_storage->remove( 'sync_cron' );
+
+			wp_clear_scheduled_hook( $this->get_action_tag( 'data_sync' ) );
+		}
+
+		/**
+		 * Unix timestamp for next sync cron execution or false if not scheduled.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return int|false
+		 */
+		function next_sync_cron() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_sync_cron_on() ) {
+				return false;
+			}
+
+			return wp_next_scheduled( $this->get_action_tag( 'data_sync' ) );
+		}
+
+		/**
+		 * Unix timestamp for previous sync cron execution or false if never executed.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return int|false
+		 */
+		function last_sync_cron() {
+			$this->_logger->entrance();
+
+			return $this->_storage->get( 'sync_timestamp' );
+		}
+
+		#endregion Daily Sync Cron ------------------------------------------------------------------
+
+		#region Async Install Sync ------------------------------------------------------------------
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return bool
+		 */
+		private function is_install_sync_scheduled() {
+			/**
+			 * @var object $cron_data
+			 */
+			$cron_data = $this->_storage->get( 'install_sync_cron', null );
+
+			return ( ! is_null( $cron_data ) && true === $cron_data->on );
+		}
+
+		/**
+		 * Instead of running blocking install sync event, execute non blocking scheduled wp-cron.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		private function schedule_install_sync() {
+			$this->_logger->entrance();
+
+			$this->clear_install_sync_cron();
+
+			// Schedule immediate install sync.
+			wp_schedule_single_event(
+				WP_FS__SCRIPT_START_TIME,
+				$this->get_action_tag( 'install_sync' )
+			);
+
+			$this->_storage->store( 'install_sync_cron', (object) array(
+				'version'     => $this->get_plugin_version(),
+				'sdk_version' => $this->version,
+				'timestamp'   => WP_FS__SCRIPT_START_TIME,
+				'on'          => true,
+			) );
+		}
+
+		/**
+		 * Unix timestamp for previous install sync cron execution or false if never executed.
+		 *
+		 * @todo   There's some very strange bug that $this->_storage->install_sync_timestamp value is not being
+		 *         updated. But for sure the sync event is working.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return int|false
+		 */
+		function last_install_sync() {
+			$this->_logger->entrance();
+
+			return $this->_storage->get( 'install_sync_timestamp' );
+		}
+
+		/**
+		 * Unix timestamp for next install sync cron execution or false if not scheduled.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return int|false
+		 */
+		function next_install_sync() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_install_sync_scheduled() ) {
+				return false;
+			}
+
+			return wp_next_scheduled( $this->get_action_tag( 'install_sync' ) );
+		}
+
+		/**
+		 * Add the actual install sync function to the cron job hook.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		private function hook_callback_to_install_sync() {
+			$this->add_action( 'install_sync', array( &$this, '_run_sync_install' ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		private function clear_install_sync_cron() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_install_sync_scheduled() ) {
+				return;
+			}
+
+			$this->_storage->remove( 'install_sync_cron' );
+
+			wp_clear_scheduled_hook( $this->get_action_tag( 'install_sync' ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 */
+		public function _run_sync_install() {
+			$this->_logger->entrance();
+
+			// Update last install sync timestamp.
+			$this->_storage->install_sync_timestamp = time();
+
+			$this->sync_install( array(), true );
+		}
+
+		#endregion Async Install Sync ------------------------------------------------------------------
+
+		/**
+		 * Show a notice that activation is currently pending.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @param bool|string $email
+		 */
+		function _add_pending_activation_notice( $email = false ) {
+			if ( ! is_string( $email ) ) {
+				$current_user = self::_get_current_wp_user();
+				$email        = $current_user->user_email;
+			}
+
+			$this->_admin_notices->add_sticky(
+				sprintf(
+					__fs( 'pending-activation-message', $this->_slug ),
+					'<b>' . $this->get_plugin_name() . '</b>',
+					'<b>' . $email . '</b>'
+				),
+				'activation_pending',
+				'Thanks!'
+			);
+		}
+
+		/**
+		 * Check if currently in plugin activation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 *
+		 * @return bool
+		 */
+		function is_plugin_activation() {
+			return get_option( "fs_{$this->_slug}_activated", false );
+		}
+
+		/**
+		 *
+		 * NOTE: admin_menu action executed before admin_init.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 */
+		function _admin_init_action() {
+			/**
+			 * Automatically redirect to connect/activation page after plugin activation.
+			 *
+			 * @since 1.1.7 Do NOT redirect to opt-in when running in network admin mode.
+			 */
+			if ( $this->is_plugin_activation() ) {
+				delete_option( "fs_{$this->_slug}_activated" );
+
+				if ( ! function_exists( 'is_network_admin' ) || ! is_network_admin() ) {
+					$this->_redirect_on_activation_hook();
+
+					return;
+				}
+			}
+
+			if ( fs_request_is_action( $this->_slug . '_skip_activation' ) ) {
+				check_admin_referer( $this->_slug . '_skip_activation' );
+
+				$this->skip_connection();
+
+				if ( fs_redirect( $this->get_after_activation_url( 'after_skip_url' ) ) ) {
+					exit();
+				}
+			}
+
+			if ( ! $this->is_addon() && ! $this->is_registered() && ! $this->is_anonymous() ) {
+				if ( ! $this->is_pending_activation() ) {
+					if ( ! $this->_menu->is_activation_page() ) {
+						if ( $this->is_plugin_new_install() || $this->is_only_premium() ) {
+							// Show notice for new plugin installations.
+							$this->_admin_notices->add(
+								sprintf(
+									__fs( 'you-are-step-away', $this->_slug ),
+									sprintf( '<b><a href="%s">%s</a></b>',
+										$this->get_activation_url(),
+										sprintf( __fs( 'activate-x-now', $this->_slug ), $this->get_plugin_name() )
+									)
+								),
+								'',
+								'update-nag'
+							);
+						} else {
+							if ( ! isset( $this->_storage->sticky_optin_added ) ) {
+								$this->_storage->sticky_optin_added = true;
+
+								// Show notice for new plugin installations.
+								$this->_admin_notices->add_sticky(
+									sprintf(
+										__fs( 'few-plugin-tweaks', $this->_slug ),
+										sprintf( '<b><a href="%s">%s</a></b>',
+											$this->get_activation_url(),
+											sprintf( __fs( 'optin-x-now', $this->_slug ), $this->get_plugin_name() )
+										)
+									),
+									'connect_account',
+									'',
+									'update-nag'
+								);
+							}
+
+							if ( $this->has_filter( 'optin_pointer_element' ) ) {
+								// Don't show admin nag if plugin update.
+								wp_enqueue_script( 'wp-pointer' );
+								wp_enqueue_style( 'wp-pointer' );
+
+								$this->_enqueue_connect_essentials();
+
+								add_action( 'admin_print_footer_scripts', array(
+									$this,
+									'_add_connect_pointer_script'
+								) );
+							}
+
+						}
+					}
+				}
+			}
+
+			$this->_add_upgrade_action_link();
+		}
+
+		/**
+		 * Enqueue connect requires scripts and styles.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 */
+		function _enqueue_connect_essentials() {
+			wp_enqueue_script( 'jquery' );
+			wp_enqueue_script( 'json2' );
+
+			fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
+			fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
+
+			fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
+		}
+
+		/**
+		 * Add connect / opt-in pointer.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 */
+		function _add_connect_pointer_script() {
+			$vars            = array( 'slug' => $this->_slug );
+			$pointer_content = fs_get_template( 'connect.php', $vars );
+			?>
+			<script type="text/javascript">// <![CDATA[
+				jQuery(document).ready(function ($) {
+					if ('undefined' !== typeof(jQuery().pointer)) {
+
+						var element = <?php echo $this->apply_filters('optin_pointer_element', '$("#non_existing_element");') ?>;
+
+						if (element.length > 0) {
+							var optin = $(element).pointer($.extend(true, {}, {
+								content     : <?php echo json_encode($pointer_content) ?>,
+								position    : {
+									edge : 'left',
+									align: 'center'
+								},
+								buttons     : function () {
+									// Don't show pointer buttons.
+									return '';
+								},
+								pointerWidth: 482
+							}, <?php echo $this->apply_filters('optin_pointer_options_json', '{}') ?>));
+
+							<?php
+							echo $this->apply_filters('optin_pointer_execute', "
+
+							optin.pointer('open');
+
+							// Tag the opt-in pointer with custom class.
+							$('.wp-pointer #fs_connect')
+								.parents('.wp-pointer.wp-pointer-top')
+								.addClass('fs-opt-in-pointer');
+
+							", 'element', 'optin') ?>
+						}
+					}
+				});
+				// ]]></script>
+		<?php
+		}
+
+		/**
+		 * Return current page's URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return string
+		 */
+		function current_page_url() {
+			$url = 'http';
+
+			if ( isset( $_SERVER["HTTPS"] ) ) {
+				if ( $_SERVER["HTTPS"] == "on" ) {
+					$url .= "s";
+				}
+			}
+			$url .= "://";
+			if ( $_SERVER["SERVER_PORT"] != "80" ) {
+				$url .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
+			} else {
+				$url .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
+			}
+
+			return esc_url( $url );
+		}
+
+		/**
+		 * Check if the current page is the plugin's main admin settings page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		function _is_plugin_page() {
+			return fs_is_plugin_page( $this->_menu->get_raw_slug() ) ||
+			       fs_is_plugin_page( $this->_slug );
+		}
+
+		/* Events
+		------------------------------------------------------------------------------------------------------------------*/
+		/**
+		 * Delete site install from Database.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param bool $store
+		 */
+		function _delete_site( $store = true ) {
+			$sites = self::get_all_sites();
+
+			if ( isset( $sites[ $this->_slug ] ) ) {
+				unset( $sites[ $this->_slug ] );
+			}
+
+			self::$_accounts->set_option( 'sites', $sites, $store );
+		}
+
+		/**
+		 * Delete plugin's plans information.
+		 *
+		 * @param bool $store Flush to Database if true.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		private function _delete_plans( $store = true ) {
+			$this->_logger->entrance();
+
+			$plans = self::get_all_plans();
+
+			unset( $plans[ $this->_slug ] );
+
+			self::$_accounts->set_option( 'plans', $plans, $store );
+		}
+
+		/**
+		 * Delete all plugin licenses.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param bool        $store
+		 * @param string|bool $plugin_slug
+		 */
+		private function _delete_licenses( $store = true, $plugin_slug = false ) {
+			$this->_logger->entrance();
+
+			$all_licenses = self::get_all_licenses();
+
+			if ( ! is_string( $plugin_slug ) ) {
+				$plugin_slug = $this->_slug;
+			}
+
+			unset( $all_licenses[ $plugin_slug ] );
+
+			self::$_accounts->set_option( 'licenses', $all_licenses, $store );
+		}
+
+		/**
+		 * Check if Freemius was added on new plugin installation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.5
+		 *
+		 * @return bool
+		 */
+		function is_plugin_new_install() {
+			return isset( $this->_storage->is_plugin_new_install ) &&
+			       $this->_storage->is_plugin_new_install;
+		}
+
+		/**
+		 * Plugin activated hook.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @uses   FS_Api
+		 */
+		function _activate_plugin_event_hook() {
+			$this->_logger->entrance( 'slug = ' . $this->_slug );
+
+			if ( ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			$this->unregister_uninstall_hook();
+
+			// Clear API cache on activation.
+			FS_Api::clear_cache();
+
+			if ( $this->is_registered() ) {
+				// Schedule re-activation event and sync.
+//				$this->sync_install( array(), true );
+				$this->schedule_install_sync();
+
+				/**
+				 * @todo Work on automatic deactivation of the Free plugin version. It doesn't work since the slug of the free & premium versions is identical. Therefore, only one instance of Freemius is created and the activation hook of the premium version is not being added.
+				 */
+				if ( $this->_plugin_basename !== $this->_free_plugin_basename ) {
+					// Deactivate Free plugin version on premium plugin activation.
+					deactivate_plugins( $this->_free_plugin_basename );
+
+					$this->_admin_notices->add(
+						sprintf( __fs( 'successful-version-upgrade-message', $this->_slug ), sprintf( '<b>%s</b>', $this->_plugin->title ) ),
+						__fs( 'woot', $this->_slug ) . '!'
+					);
+				}
+			} else if ( $this->is_anonymous() ) {
+				/**
+				 * Reset "skipped" click cache on the following:
+				 *  1. Development mode.
+				 *  2. If the user skipped the exact same version before.
+				 *
+				 * @todo 3. If explicitly asked to retry after every activation.
+				 */
+				if ( WP_FS__DEV_MODE ||
+				     $this->get_plugin_version() == $this->_storage->is_anonymous['version']
+				) {
+					$this->reset_anonymous_mode();
+				}
+			}
+
+			if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
+				/**
+				 * If no previous version of plugin's version exist, it means that it's either
+				 * the first time that the plugin installed on the site, or the plugin was installed
+				 * before but didn't have Freemius integrated.
+				 *
+				 * Since register_activation_hook() do NOT fires on updates since 3.1, and only fires
+				 * on manual activation via the dashboard, is_plugin_activation() is TRUE
+				 * only after immediate activation.
+				 *
+				 * @since 1.1.4
+				 * @link  https://make.wordpress.org/core/2010/10/27/plugin-activation-hooks-no-longer-fire-for-updates/
+				 */
+				$this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
+			}
+
+			if ( ! $this->_anonymous_mode && $this->has_api_connectivity( WP_FS__DEV_MODE ) ) {
+				// Store hint that the plugin was just activated to enable auto-redirection to settings.
+				add_option( "fs_{$this->_slug}_activated", true );
+			}
+
+			/**
+			 * Activation hook is executed after the plugin's main file is loaded, therefore,
+			 * after the plugin was loaded. The logic is located at activate_plugin()
+			 * ./wp-admin/includes/plugin.php.
+			 *
+			 * @author Vova Feldman (@svovaf)
+			 * @since  1.1.9
+			 */
+			$this->_storage->was_plugin_loaded = true;
+		}
+
+		/**
+		 * Delete account.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param bool $check_user Enforce checking if user have plugins activation privileges.
+		 */
+		function delete_account_event( $check_user = true ) {
+			$this->_logger->entrance( 'slug = ' . $this->_slug );
+
+			if ( $check_user && ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			$this->do_action( 'before_account_delete' );
+
+			// Clear all admin notices.
+			$this->_admin_notices->clear_all_sticky();
+
+			$this->_delete_site( false );
+
+			$this->_delete_plans( false );
+
+			$this->_delete_licenses( false );
+
+			// Delete add-ons related to plugin's account.
+			$this->_delete_account_addons( false );
+
+			// @todo Delete plans and licenses of add-ons.
+
+			self::$_accounts->store();
+
+			/**
+			 * IMPORTANT:
+			 *  Clear crons must be executed before clearing all storage.
+			 *  Otherwise, the cron will not be cleared.
+			 */
+			$this->clear_sync_cron();
+			$this->clear_install_sync_cron();
+
+			// Clear all storage data.
+			$this->_storage->clear_all( true, array(
+				'connectivity_test',
+				'is_on',
+			) );
+
+			// Send delete event.
+			$this->get_api_site_scope()->call( '/', 'delete' );
+
+			$this->do_action( 'after_account_delete' );
+		}
+
+		/**
+		 * Plugin deactivation hook.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 */
+		function _deactivate_plugin_hook() {
+			$this->_logger->entrance( 'slug = ' . $this->_slug );
+
+			if ( ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			$this->_admin_notices->clear_all_sticky();
+			if ( isset( $this->_storage->sticky_optin_added ) ) {
+				unset( $this->_storage->sticky_optin_added );
+			}
+
+			if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
+				// Remember that plugin was already installed.
+				$this->_storage->is_plugin_new_install = false;
+			}
+
+			// Hook to plugin uninstall.
+			register_uninstall_hook( $this->_plugin_main_file_path, array( 'Freemius', '_uninstall_plugin_hook' ) );
+
+			$this->clear_module_main_file_cache();
+			$this->clear_sync_cron();
+			$this->clear_install_sync_cron();
+
+			if ( $this->is_registered() ) {
+				// Send deactivation event.
+				$this->sync_install( array(
+					'is_active' => false,
+				) );
+			} else {
+				if ( ! $this->has_api_connectivity() ) {
+					// Reset connectivity test cache.
+					unset( $this->_storage->connectivity_test );
+				}
+			}
+
+			// Clear API cache on deactivation.
+			FS_Api::clear_cache();
+
+			$this->remove_sdk_reference();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 */
+		private function remove_sdk_reference() {
+			global $fs_active_plugins;
+
+			foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
+				if ( $this->_plugin_basename == $data->plugin_path ) {
+					unset( $fs_active_plugins->plugins[ $sdk_path ] );
+					break;
+				}
+			}
+
+			fs_fallback_to_newest_active_sdk();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param bool $is_anonymous
+		 */
+		private function set_anonymous_mode( $is_anonymous = true ) {
+			// Store information regarding skip to try and opt-in the user
+			// again in the future.
+			$this->_storage->is_anonymous = array(
+				'is'        => $is_anonymous,
+				'timestamp' => WP_FS__SCRIPT_START_TIME,
+				'version'   => $this->get_plugin_version(),
+			);
+
+			// Update anonymous mode cache.
+			$this->_is_anonymous = $is_anonymous;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 */
+		private function reset_anonymous_mode() {
+			unset( $this->_storage->is_anonymous );
+		}
+
+		/**
+		 * Clears the anonymous mode and redirects to the opt-in screen.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 */
+		function connect_again() {
+			if ( ! $this->is_anonymous() ) {
+				return;
+			}
+
+			$this->reset_anonymous_mode();
+
+			if ( fs_redirect( $this->get_activation_url() ) ) {
+				exit();
+			}
+		}
+
+		/**
+		 * Skip account connect, and set anonymous mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 */
+		private function skip_connection() {
+			$this->_logger->entrance();
+
+			$this->_admin_notices->remove_sticky( 'connect_account' );
+
+			$this->set_anonymous_mode();
+
+			// Send anonymous skip event.
+			// No user identified info nor any tracking will be sent after the user skips the opt-in.
+			$this->get_api_plugin_scope()->call( 'skip.json', 'put', array(
+				'uid' => $this->get_anonymous_id(),
+			) );
+		}
+
+		/**
+		 * Plugin version update hook.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 */
+		private function update_plugin_version_event() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_registered() ) {
+				return;
+			}
+
+			$this->schedule_install_sync();
+//			$this->sync_install( array(), true );
+		}
+
+		/**
+		 * Return a list of modified plugins since the last sync.
+		 *
+		 * Note:
+		 *  There's no point to store a plugins counter since even if the number of
+		 *  plugins didn't change, we still need to check if the versions are all the
+		 *  same and the activity state is similar.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return array|false
+		 */
+		private function get_plugins_data_for_api() {
+			// Alias.
+			$option_name = 'all_plugins';
+
+			$all_cached_plugins = self::$_accounts->get_option( $option_name );
+
+			if ( ! is_object( $all_cached_plugins ) ) {
+				$all_cached_plugins = (object) array(
+					'timestamp' => '',
+					'md5'       => '',
+					'plugins'   => array(),
+				);
+			}
+
+			$time = time();
+
+			if ( ! empty( $all_cached_plugins->timestamp ) &&
+			     ( $time - $all_cached_plugins->timestamp ) < WP_FS__TIME_5_MIN_IN_SEC
+			) {
+				// Don't send plugin updates if last update was in the past 5 min.
+				return false;
+			}
+
+			// Write timestamp to lock the logic.
+			$all_cached_plugins->timestamp = $time;
+			self::$_accounts->set_option( $option_name, $all_cached_plugins, true );
+
+			// Reload options from DB.
+			self::$_accounts->load( true );
+			$all_cached_plugins = self::$_accounts->get_option( $option_name );
+
+			if ( $time != $all_cached_plugins->timestamp ) {
+				// If timestamp is different, then another thread captured the lock.
+				return false;
+			}
+
+			// Check if there's a change in plugins.
+			$all_plugins = self::get_all_plugins();
+
+			// Check if plugins changed.
+			ksort( $all_plugins );
+
+			$plugins_signature = '';
+			foreach ( $all_plugins as $basename => $data ) {
+				$plugins_signature .= $data['slug'] . ',' .
+				                      $data['Version'] . ',' .
+				                      ( $data['is_active'] ? '1' : '0' ) . ';';
+			}
+
+			// Check if plugins status changed (version or active/inactive).
+			$plugins_changed = ( $all_cached_plugins->md5 !== md5( $plugins_signature ) );
+
+			$plugins_update_data = array();
+
+			if ( $plugins_changed ) {
+				// Change in plugins, report changes.
+
+				// Update existing plugins info.
+				foreach ( $all_cached_plugins->plugins as $basename => $data ) {
+					if ( ! isset( $all_plugins[ $basename ] ) ) {
+						// Plugin uninstalled.
+						$uninstalled_plugin_data                   = $data;
+						$uninstalled_plugin_data['is_active']      = false;
+						$uninstalled_plugin_data['is_uninstalled'] = true;
+						$plugins_update_data[]                     = $uninstalled_plugin_data;
+
+						unset( $all_plugins[ $basename ] );
+						unset( $all_cached_plugins->plugins[ $basename ] );
+					} else if ( $data['is_active'] !== $all_plugins[ $basename ]['is_active'] ||
+					            $data['version'] !== $all_plugins[ $basename ]['Version']
+					) {
+						// Plugin activated or deactivated, or version changed.
+						$all_cached_plugins->plugins[ $basename ]['is_active'] = $all_plugins[ $basename ]['is_active'];
+						$all_cached_plugins->plugins[ $basename ]['version']   = $all_plugins[ $basename ]['Version'];
+
+						$plugins_update_data[] = $all_cached_plugins->plugins[ $basename ];
+					}
+				}
+
+				// Find new plugins that weren't yet seen before.
+				foreach ( $all_plugins as $basename => $data ) {
+					if ( ! isset( $all_cached_plugins->plugins[ $basename ] ) ) {
+						// New plugin.
+						$new_plugin = array(
+							'slug'           => $data['slug'],
+							'version'        => $data['Version'],
+							'title'          => $data['Name'],
+							'is_active'      => $data['is_active'],
+							'is_uninstalled' => false,
+						);
+
+						$plugins_update_data[]                    = $new_plugin;
+						$all_cached_plugins->plugins[ $basename ] = $new_plugin;
+					}
+				}
+
+				$all_cached_plugins->md5       = md5( $plugins_signature );
+				$all_cached_plugins->timestamp = $time;
+				self::$_accounts->set_option( $option_name, $all_cached_plugins, true );
+			}
+
+			return $plugins_update_data;
+		}
+
+		/**
+		 * Return a list of modified themes since the last sync.
+		 *
+		 * Note:
+		 *  There's no point to store a themes counter since even if the number of
+		 *  themes didn't change, we still need to check if the versions are all the
+		 *  same and the activity state is similar.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return array|false
+		 */
+		private function get_themes_data_for_api() {
+			// Alias.
+			$option_name = 'all_themes';
+
+			$all_cached_themes = self::$_accounts->get_option( $option_name );
+
+			if ( ! is_object( $all_cached_themes ) ) {
+				$all_cached_themes = (object) array(
+					'timestamp' => '',
+					'md5'       => '',
+					'themes'    => array(),
+				);
+			}
+
+			$time = time();
+
+			if ( ! empty( $all_cached_themes->timestamp ) &&
+			     ( $time - $all_cached_themes->timestamp ) < WP_FS__TIME_5_MIN_IN_SEC
+			) {
+				// Don't send theme updates if last update was in the past 5 min.
+				return false;
+			}
+
+			// Write timestamp to lock the logic.
+			$all_cached_themes->timestamp = $time;
+			self::$_accounts->set_option( $option_name, $all_cached_themes, true );
+
+			// Reload options from DB.
+			self::$_accounts->load( true );
+			$all_cached_themes = self::$_accounts->get_option( $option_name );
+
+			if ( $time != $all_cached_themes->timestamp ) {
+				// If timestamp is different, then another thread captured the lock.
+				return false;
+			}
+
+			// Get active theme.
+			$active_theme            = wp_get_theme();
+			$active_theme_stylesheet = $active_theme->get_stylesheet();
+
+			// Check if there's a change in themes.
+			$all_themes = wp_get_themes();
+
+			// Check if themes changed.
+			ksort( $all_themes );
+
+			$themes_signature = '';
+			foreach ( $all_themes as $slug => $data ) {
+				$is_active = ( $slug === $active_theme_stylesheet );
+				$themes_signature .= $slug . ',' .
+				                     $data->version . ',' .
+				                     ( $is_active ? '1' : '0' ) . ';';
+			}
+
+			// Check if themes status changed (version or active/inactive).
+			$themes_changed = ( $all_cached_themes->md5 !== md5( $themes_signature ) );
+
+			$themes_update_data = array();
+
+			if ( $themes_changed ) {
+				// Change in themes, report changes.
+
+				// Update existing themes info.
+				foreach ( $all_cached_themes->themes as $slug => $data ) {
+					$is_active = ( $slug === $active_theme_stylesheet );
+
+					if ( ! isset( $all_themes[ $slug ] ) ) {
+						// Plugin uninstalled.
+						$uninstalled_theme_data                   = $data;
+						$uninstalled_theme_data['is_active']      = false;
+						$uninstalled_theme_data['is_uninstalled'] = true;
+						$themes_update_data[]                     = $uninstalled_theme_data;
+
+						unset( $all_themes[ $slug ] );
+						unset( $all_cached_themes->themes[ $slug ] );
+					} else if ( $data['is_active'] !== $is_active ||
+					            $data['version'] !== $all_themes[ $slug ]->version
+					) {
+						// Plugin activated or deactivated, or version changed.
+
+						$all_cached_themes->themes[ $slug ]['is_active'] = $is_active;
+						$all_cached_themes->themes[ $slug ]['version']   = $all_themes[ $slug ]->version;
+
+						$themes_update_data[] = $all_cached_themes->themes[ $slug ];
+					}
+				}
+
+				// Find new themes that weren't yet seen before.
+				foreach ( $all_themes as $slug => $data ) {
+					if ( ! isset( $all_cached_themes->themes[ $slug ] ) ) {
+						$is_active = ( $slug === $active_theme_stylesheet );
+
+						// New plugin.
+						$new_plugin = array(
+							'slug'           => $slug,
+							'version'        => $data->version,
+							'title'          => $data->name,
+							'is_active'      => $is_active,
+							'is_uninstalled' => false,
+						);
+
+						$themes_update_data[]               = $new_plugin;
+						$all_cached_themes->themes[ $slug ] = $new_plugin;
+					}
+				}
+
+				$all_cached_themes->md5       = md5( $themes_signature );
+				$all_cached_themes->timestamp = time();
+				self::$_accounts->set_option( $option_name, $all_cached_themes, true );
+			}
+
+			return $themes_update_data;
+		}
+
+		/**
+		 * Update install details.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.2
+		 *
+		 * @param string[] string           $override
+		 * @param bool     $include_plugins Since 1.1.8 by default include plugin changes.
+		 * @param bool     $include_themes  Since 1.1.8 by default include plugin changes.
+		 *
+		 * @return array
+		 */
+		private function get_install_data_for_api(
+			array $override,
+			$include_plugins = true,
+			$include_themes = true
+		) {
+			/**
+			 * @since 1.1.8 Also send plugin updates.
+			 */
+			if ( $include_plugins && ! isset( $override['plugins'] ) ) {
+				$plugins = $this->get_plugins_data_for_api();
+				if ( ! empty( $plugins ) ) {
+					$override['plugins'] = $plugins;
+				}
+			}
+			/**
+			 * @since 1.1.8 Also send themes updates.
+			 */
+			if ( $include_themes && ! isset( $override['themes'] ) ) {
+				$themes = $this->get_themes_data_for_api();
+				if ( ! empty( $themes ) ) {
+					$override['themes'] = $themes;
+				}
+			}
+
+			return array_merge( array(
+				'version'                      => $this->get_plugin_version(),
+				'is_premium'                   => $this->is_premium(),
+				'language'                     => get_bloginfo( 'language' ),
+				'charset'                      => get_bloginfo( 'charset' ),
+				'platform_version'             => get_bloginfo( 'version' ),
+				'programming_language_version' => phpversion(),
+				'title'                        => get_bloginfo( 'name' ),
+				'url'                          => get_site_url(),
+				// Special params.
+				'is_active'                    => true,
+				'is_uninstalled'               => false,
+			), $override );
+		}
+
+		/**
+		 * Update install only if changed.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param string[] string $override
+		 * @param bool     $flush
+		 *
+		 * @return false|object|string
+		 */
+		private function send_install_update( $override = array(), $flush = false ) {
+			$this->_logger->entrance();
+
+			$check_properties = $this->get_install_data_for_api( $override );
+
+			if ( $flush ) {
+				$params = $check_properties;
+			} else {
+				$params           = array();
+				$special          = array();
+				$special_override = false;
+
+				foreach ( $check_properties as $p => $v ) {
+					if ( property_exists( $this->_site, $p ) ) {
+						if ( ! empty( $this->_site->{$p} ) &&
+						     $this->_site->{$p} != $v
+						) {
+							$this->_site->{$p} = $v;
+							$params[ $p ]      = $v;
+						}
+					} else {
+						$special[ $p ] = $v;
+
+						if ( isset( $override[ $p ] ) ||
+						     'plugins' === $p ||
+						     'themes' === $p
+						) {
+							$special_override = true;
+						}
+					}
+				}
+
+				if ( $special_override || 0 < count( $params ) ) {
+					// Add special params only if has at least one
+					// standard param, or if explicitly requested to
+					// override a special param or a param which is not exist
+					// in the install object.
+					$params = array_merge( $params, $special );
+				}
+			}
+
+			if ( 0 < count( $params ) ) {
+				// Update last install sync timestamp.
+				$this->_storage->install_sync_timestamp = time();
+
+				$params['uid'] = $this->get_anonymous_id();
+
+				// Send updated values to FS.
+				$site = $this->get_api_site_scope()->call( '/', 'put', $params );
+
+				if ( ! $this->is_api_error( $site ) ) {
+					// I successfully sent install update, clear scheduled sync if exist.
+					$this->clear_install_sync_cron();
+				}
+
+				return $site;
+			}
+
+			return false;
+		}
+
+		/**
+		 * Update install only if changed.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param string[] string $override
+		 * @param bool     $flush
+		 *
+		 * @return false|object|string
+		 */
+		private function sync_install( $override = array(), $flush = false ) {
+			$this->_logger->entrance();
+
+			$site = $this->send_install_update( $override, $flush );
+
+			if ( false === $site ) {
+				// No sync required.
+				return;
+			}
+
+			if ( $this->is_api_error( $site ) ) {
+				// Failed to sync, don't update locally.
+				return;
+			}
+
+			$plan              = $this->get_plan();
+			$this->_site       = new FS_Site( $site );
+			$this->_site->plan = $plan;
+
+			$this->_store_site( true );
+		}
+
+		/**
+		 * Track install's custom event.
+		 *
+		 * IMPORTANT:
+		 *      Custom event tracking is currently only supported for specific clients.
+		 *      If you are not one of them, please don't use this method. If you will,
+		 *      the API will simply ignore your request based on the plugin ID.
+		 *
+		 * Need custom tracking for your plugin or theme?
+		 *      If you are interested in custom event tracking please contact yo@freemius.com
+		 *      for further details.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @param string $name       Event name.
+		 * @param array  $properties Associative key/value array with primitive values only
+		 * @param bool   $process_at A valid future date-time in the following format Y-m-d H:i:s.
+		 * @param bool   $once       If true, event will be tracked only once. IMPORTANT: Still trigger the API call.
+		 *
+		 * @return object|false Event data or FALSE on failure.
+		 *
+		 * @throws \Freemius_InvalidArgumentException
+		 */
+		public function track_event( $name, $properties = array(), $process_at = false, $once = false ) {
+			$this->_logger->entrance( http_build_query( array( 'name' => $name, 'once' => $once ) ) );
+
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			$event = array( 'type' => $name );
+
+			if ( is_numeric( $process_at ) && $process_at > time() ) {
+				$event['process_at'] = $process_at;
+			}
+
+			if ( $once ) {
+				$event['once'] = true;
+			}
+
+			if ( ! empty( $properties ) ) {
+				// Verify associative array values are primitive.
+				foreach ( $properties as $k => $v ) {
+					if ( ! is_scalar( $v ) ) {
+						throw new Freemius_InvalidArgumentException( 'The $properties argument must be an associative key/value array with primitive values only.' );
+					}
+				}
+
+				$event['properties'] = $properties;
+			}
+
+			$result = $this->get_api_site_scope()->call( 'events.json', 'post', $event );
+
+			return $this->is_api_error( $result ) ?
+				false :
+				$result;
+		}
+
+		/**
+		 * Track install's custom event only once, but it still triggers the API call.
+		 *
+		 * IMPORTANT:
+		 *      Custom event tracking is currently only supported for specific clients.
+		 *      If you are not one of them, please don't use this method. If you will,
+		 *      the API will simply ignore your request based on the plugin ID.
+		 *
+		 * Need custom tracking for your plugin or theme?
+		 *      If you are interested in custom event tracking please contact yo@freemius.com
+		 *      for further details.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @param string $name       Event name.
+		 * @param array  $properties Associative key/value array with primitive values only
+		 * @param bool   $process_at A valid future date-time in the following format Y-m-d H:i:s.
+		 *
+		 * @return object|false Event data or FALSE on failure.
+		 *
+		 * @throws \Freemius_InvalidArgumentException
+		 *
+		 * @user   Freemius::track_event()
+		 */
+		public function track_event_once( $name, $properties = array(), $process_at = false ) {
+			return $this->track_event( $name, $properties, $process_at, true );
+		}
+
+		/**
+		 * Plugin uninstall hook.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param bool $check_user Enforce checking if user have plugins activation privileges.
+		 */
+		function _uninstall_plugin_event( $check_user = true ) {
+			$this->_logger->entrance( 'slug = ' . $this->_slug );
+
+			if ( $check_user && ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			$params           = array();
+			$uninstall_reason = null;
+			if ( isset( $this->_storage->uninstall_reason ) ) {
+				$uninstall_reason      = $this->_storage->uninstall_reason;
+				$params['reason_id']   = $uninstall_reason->id;
+				$params['reason_info'] = $uninstall_reason->info;
+			}
+
+			if ( ! $this->is_registered() && isset( $uninstall_reason ) ) {
+				// Send anonymous uninstall event only if user submitted a feedback.
+				if ( isset( $uninstall_reason->is_anonymous ) && ! $uninstall_reason->is_anonymous ) {
+					$this->opt_in( false, false, false, false, true );
+				} else {
+					$params['uid'] = $this->get_anonymous_id();
+					$this->get_api_plugin_scope()->call( 'uninstall.json', 'put', $params );
+				}
+			} else {
+				// Send uninstall event.
+				$this->send_install_update( array_merge( $params, array(
+					'is_active'      => false,
+					'is_uninstalled' => true,
+				) ) );
+			}
+
+			// @todo Decide if we want to delete plugin information from db.
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 *
+		 * @return string
+		 */
+		private function premium_plugin_basename() {
+			return preg_replace( '/\//', '-premium/', $this->_free_plugin_basename, 1 );
+		}
+
+		/**
+		 * Uninstall plugin hook. Called only when connected his account with Freemius for active sites tracking.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 */
+		public static function _uninstall_plugin_hook() {
+			self::_load_required_static();
+
+			self::$_static_logger->entrance();
+
+			if ( ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			$plugin_file = substr( current_filter(), strlen( 'uninstall_' ) );
+
+			self::$_static_logger->info( 'plugin = ' . $plugin_file );
+
+			define( 'WP_FS__UNINSTALL_MODE', true );
+
+			$fs = self::get_instance_by_file( $plugin_file );
+
+			if ( is_object( $fs ) ) {
+				self::require_plugin_essentials();
+
+				if ( is_plugin_active( $fs->_free_plugin_basename ) ||
+				     is_plugin_active( $fs->premium_plugin_basename() )
+				) {
+					// Deleting Free or Premium plugin version while the other version still installed.
+					return;
+				}
+
+				$fs->_uninstall_plugin_event();
+
+				$fs->do_action( 'after_uninstall' );
+			}
+		}
+
+		#region Plugin Information ------------------------------------------------------------------
+
+		/**
+		 * Load WordPress core plugin.php essential module.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 */
+		private static function require_plugin_essentials() {
+			if ( ! function_exists( 'get_plugins' ) ) {
+				require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
+			}
+		}
+
+		/**
+		 * Load WordPress core pluggable.php module.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.2
+		 */
+		private static function require_pluggable_essentials() {
+			if ( ! function_exists( 'wp_get_current_user' ) ) {
+				require_once( ABSPATH . 'wp-includes/pluggable.php' );
+			}
+		}
+
+		/**
+		 * Return plugin data.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @return array
+		 */
+		function get_plugin_data() {
+			if ( ! isset( $this->_plugin_data ) ) {
+				self::require_plugin_essentials();
+
+				/**
+				 * @author Vova Feldman (@svovaf)
+				 * @since  1.2.0 When using get_plugin_data() do NOT translate plugin data.
+				 *
+				 * @link   https://github.com/Freemius/wordpress-sdk/issues/77
+				 */
+				$this->_plugin_data = get_plugin_data(
+					$this->_plugin_main_file_path,
+					false,
+					false
+				);
+			}
+
+			return $this->_plugin_data;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @return string Plugin slug.
+		 */
+		function get_slug() {
+			return $this->_slug;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @return number Plugin ID.
+		 */
+		function get_id() {
+			return $this->_plugin->id;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @return string Plugin public key.
+		 */
+		function get_public_key() {
+			return $this->_plugin->public_key;
+		}
+
+		/**
+		 * Will be available only on sandbox mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return mixed Plugin secret key.
+		 */
+		function get_secret_key() {
+			return $this->_plugin->secret_key;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 *
+		 * @return bool
+		 */
+		function has_secret_key() {
+			return ! empty( $this->_plugin->secret_key );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return string
+		 */
+		function get_plugin_name() {
+			$this->_logger->entrance();
+
+			if ( ! isset( $this->_plugin_name ) ) {
+				$plugin_data = $this->get_plugin_data();
+
+				// Get name.
+				$this->_plugin_name = $plugin_data['Name'];
+
+				// Check if plugin name contains [Premium] suffix and remove it.
+				$suffix     = '[premium]';
+				$suffix_len = strlen( $suffix );
+
+				if ( strlen( $plugin_data['Name'] ) > $suffix_len &&
+				     $suffix === substr( strtolower( $plugin_data['Name'] ), - $suffix_len )
+				) {
+					$this->_plugin_name = substr( $plugin_data['Name'], 0, - $suffix_len );
+				}
+
+				$this->_logger->departure( 'Name = ' . $this->_plugin_name );
+			}
+
+			return $this->_plugin_name;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @return string
+		 */
+		function get_plugin_version() {
+			$this->_logger->entrance();
+
+			$plugin_data = $this->get_plugin_data();
+
+			$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
+
+			return $this->apply_filters( 'plugin_version', $plugin_data['Version'] );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return string
+		 */
+		function get_plugin_basename() {
+			return $this->_plugin_basename;
+		}
+
+		function get_plugin_folder_name() {
+			$this->_logger->entrance();
+
+			$plugin_folder = $this->_plugin_basename;
+
+			while ( '.' !== dirname( $plugin_folder ) ) {
+				$plugin_folder = dirname( $plugin_folder );
+			}
+
+			$this->_logger->departure( 'Folder Name = ' . $plugin_folder );
+
+			return $plugin_folder;
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		/* Account
+		------------------------------------------------------------------------------------------------------------------*/
+
+		/**
+		 * Find plugin's slug by plugin's basename.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param string $plugin_base_name
+		 *
+		 * @return false|string
+		 */
+		private static function find_slug_by_basename( $plugin_base_name ) {
+			$file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
+
+			if ( ! array( $file_slug_map ) || ! isset( $file_slug_map[ $plugin_base_name ] ) ) {
+				return false;
+			}
+
+			return $file_slug_map[ $plugin_base_name ];
+		}
+
+		/**
+		 * Store the map between the plugin's basename to the slug.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		private function store_file_slug_map() {
+			$file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
+
+			if ( ! array( $file_slug_map ) ) {
+				$file_slug_map = array();
+			}
+
+			if ( ! isset( $file_slug_map[ $this->_plugin_basename ] ) ||
+			     $file_slug_map[ $this->_plugin_basename ] !== $this->_slug
+			) {
+				$file_slug_map[ $this->_plugin_basename ] = $this->_slug;
+				self::$_accounts->set_option( 'file_slug_map', $file_slug_map, true );
+			}
+		}
+
+		/**
+		 * @return FS_User[]
+		 */
+		static function get_all_users() {
+			$users = self::$_accounts->get_option( 'users', array() );
+
+			if ( ! is_array( $users ) ) {
+				$users = array();
+			}
+
+			return $users;
+		}
+
+		/**
+		 * @return FS_Site[]
+		 */
+		private static function get_all_sites() {
+			$sites = self::$_accounts->get_option( 'sites', array() );
+
+			if ( ! is_array( $sites ) ) {
+				$sites = array();
+			}
+
+			return $sites;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return FS_Plugin_License[]
+		 */
+		private static function get_all_licenses() {
+			$licenses = self::$_accounts->get_option( 'licenses', array() );
+
+			if ( ! is_array( $licenses ) ) {
+				$licenses = array();
+			}
+
+			return $licenses;
+		}
+
+		/**
+		 * @return FS_Plugin_Plan[]
+		 */
+		private static function get_all_plans() {
+			$plans = self::$_accounts->get_option( 'plans', array() );
+
+			if ( ! is_array( $plans ) ) {
+				$plans = array();
+			}
+
+			return $plans;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return FS_Plugin_Tag[]
+		 */
+		private static function get_all_updates() {
+			$updates = self::$_accounts->get_option( 'updates', array() );
+
+			if ( ! is_array( $updates ) ) {
+				$updates = array();
+			}
+
+			return $updates;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return FS_Plugin[]|false
+		 */
+		private static function get_all_addons() {
+			$addons = self::$_accounts->get_option( 'addons', array() );
+
+			if ( ! is_array( $addons ) ) {
+				$addons = array();
+			}
+
+			return $addons;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return FS_Plugin[]|false
+		 */
+		private static function get_all_account_addons() {
+			$addons = self::$_accounts->get_option( 'account_addons', array() );
+
+			if ( ! is_array( $addons ) ) {
+				$addons = array();
+			}
+
+			return $addons;
+		}
+
+		/**
+		 * Check if user is registered.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 * @return bool
+		 */
+		function is_registered() {
+			return is_object( $this->_user );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return FS_Plugin
+		 */
+		function get_plugin() {
+			return $this->_plugin;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @return FS_User
+		 */
+		function get_user() {
+			return $this->_user;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @return FS_Site
+		 */
+		function get_site() {
+			return $this->_site;
+		}
+
+		/**
+		 * Get plugin add-ons.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @since  1.1.7.3 If not yet loaded, fetch data from the API.
+		 *
+		 * @return FS_Plugin[]|false
+		 */
+		function get_addons() {
+			$this->_logger->entrance();
+
+			if ( ! $this->_has_addons ) {
+				return false;
+			}
+
+			$addons = $this->_sync_addons();
+
+			return ( ! is_array( $addons ) || empty( $addons ) ) ?
+				false :
+				$addons;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return FS_Plugin[]|false
+		 */
+		function get_account_addons() {
+			$this->_logger->entrance();
+
+			$addons = self::get_all_account_addons();
+
+			if ( ! is_array( $addons ) ||
+			     ! isset( $addons[ $this->_plugin->id ] ) ||
+			     ! is_array( $addons[ $this->_plugin->id ] ) ||
+			     0 === count( $addons[ $this->_plugin->id ] )
+			) {
+				return false;
+			}
+
+			return $addons[ $this->_plugin->id ];
+		}
+
+		/**
+		 * Check if user has any
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @return bool
+		 */
+		function has_account_addons() {
+			$addons = $this->get_account_addons();
+
+			return is_array( $addons ) && ( 0 < count( $addons ) );
+		}
+
+
+		/**
+		 * Get add-on by ID (from local data).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param number $id
+		 *
+		 * @return FS_Plugin|false
+		 */
+		function get_addon( $id ) {
+			$this->_logger->entrance();
+
+			$addons = $this->get_addons();
+
+			if ( is_array( $addons ) ) {
+				foreach ( $addons as $addon ) {
+					if ( $id == $addon->id ) {
+						return $addon;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Get add-on by slug (from local data).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param string $slug
+		 *
+		 * @return FS_Plugin|false
+		 */
+		function get_addon_by_slug( $slug ) {
+			$this->_logger->entrance();
+
+			$addons = $this->get_addons();
+
+			if ( is_array( $addons ) ) {
+				foreach ( $addons as $addon ) {
+					if ( $slug === $addon->slug ) {
+						return $addon;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		#region Plans & Licensing ------------------------------------------------------------------
+
+		/**
+		 * Check if running premium plugin code.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return bool
+		 */
+		function is_premium() {
+			return $this->_plugin->is_premium;
+		}
+
+		/**
+		 * Get site's plan ID.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @return number
+		 */
+		function get_plan_id() {
+			return $this->_site->plan->id;
+		}
+
+		/**
+		 * Get site's plan title.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @return string
+		 */
+		function get_plan_title() {
+			return $this->_site->plan->title;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return FS_Plugin_Plan
+		 */
+		function get_plan() {
+			return is_object( $this->_site->plan ) ? $this->_site->plan : false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @return bool
+		 */
+		function is_trial() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			return $this->_site->is_trial();
+		}
+
+		/**
+		 * Check if currently in a trial with payment method (credit card or paypal).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @return bool
+		 */
+		function is_paid_trial() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_trial() ) {
+				return false;
+			}
+
+			return $this->has_active_valid_license() && ( $this->_site->trial_plan_id == $this->_license->plan_id );
+		}
+
+		/**
+		 * Check if trial already utilized.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_trial_utilized() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			return $this->_site->is_trial_utilized();
+		}
+
+		/**
+		 * Get trial plan information (if in trial).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool|FS_Plugin_Plan
+		 */
+		function get_trial_plan() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_trial() ) {
+				return false;
+			}
+
+			return $this->_storage->trial_plan;
+		}
+
+		/**
+		 * Check if the user has an activate, non-expired license on current plugin's install.
+		 *
+		 * @since 1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_paying() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			if ( ! $this->has_paid_plan() ) {
+				return false;
+			}
+
+			return (
+				! $this->is_trial() &&
+				'free' !== $this->_site->plan->name &&
+				$this->has_active_valid_license()
+			);
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @return bool
+		 */
+		function is_free_plan() {
+			if ( ! $this->is_registered() ) {
+				return true;
+			}
+
+			if ( ! $this->has_paid_plan() ) {
+				return true;
+			}
+
+			return (
+				'free' === $this->_site->plan->name ||
+				! $this->has_features_enabled_license()
+			);
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return bool
+		 */
+		function _has_premium_license() {
+			$this->_logger->entrance();
+
+			$premium_license = $this->_get_available_premium_license();
+
+			return ( false !== $premium_license );
+		}
+
+		/**
+		 * Check if user has any licenses associated with the plugin (including expired or blocking).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @return bool
+		 */
+		private function has_any_license() {
+			return is_array( $this->_licenses ) && ( 0 < count( $this->_licenses ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return FS_Plugin_License
+		 */
+		function _get_available_premium_license() {
+			$this->_logger->entrance();
+
+			if ( ! $this->has_paid_plan() ) {
+				return false;
+			}
+
+			if ( is_array( $this->_licenses ) ) {
+				foreach ( $this->_licenses as $license ) {
+					if ( ! $license->is_utilized() && $license->is_features_enabled() ) {
+						return $license;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Sync local plugin plans with remote server.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return FS_Plugin_Plan[]|object
+		 */
+		function _sync_plans() {
+			$plans = $this->_fetch_plugin_plans();
+			if ( ! $this->is_api_error( $plans ) ) {
+				$this->_plans = $plans;
+				$this->_store_plans();
+			}
+
+			$this->do_action( 'after_plans_sync', $plans );
+
+			return $this->_plans;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param number $id
+		 *
+		 * @return FS_Plugin_Plan
+		 */
+		function _get_plan_by_id( $id ) {
+			$this->_logger->entrance();
+
+			if ( ! is_array( $this->_plans ) || 0 === count( $this->_plans ) ) {
+				$this->_sync_plans();
+			}
+
+			foreach ( $this->_plans as $plan ) {
+				if ( $id == $plan->id ) {
+					return $plan;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8.1
+		 *
+		 * @param string $name
+		 *
+		 * @return FS_Plugin_Plan|false
+		 */
+		private function get_plan_by_name( $name ) {
+			$this->_logger->entrance();
+
+			if ( ! is_array( $this->_plans ) || 0 === count( $this->_plans ) ) {
+				$this->_sync_plans();
+			}
+
+			foreach ( $this->_plans as $plan ) {
+				if ( $name == $plan->name ) {
+					return $plan;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Sync local plugin plans with remote server.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param number|bool $site_license_id
+		 *
+		 * @return FS_Plugin_License[]|object
+		 */
+		function _sync_licenses( $site_license_id = false ) {
+			$licenses = $this->_fetch_licenses( false, $site_license_id );
+			if ( ! $this->is_api_error( $licenses ) ) {
+				$this->_licenses = $licenses;
+				$this->_store_licenses();
+			}
+
+			// Update current license.
+			if ( is_object( $this->_license ) ) {
+				$this->_license = $this->_get_license_by_id( $this->_license->id );
+			}
+
+			return $this->_licenses;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param number $id
+		 *
+		 * @return FS_Plugin_License
+		 */
+		function _get_license_by_id( $id ) {
+			$this->_logger->entrance();
+
+			if ( ! is_numeric( $id ) ) {
+				return false;
+			}
+
+			if ( ! $this->has_any_license() ) {
+				$this->_sync_licenses();
+			}
+
+			foreach ( $this->_licenses as $license ) {
+				if ( $id == $license->id ) {
+					return $license;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Sync site's license with user licenses.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param FS_Plugin_License|null $new_license
+		 */
+		function _update_site_license( $new_license ) {
+			$this->_logger->entrance();
+
+			$this->_license = $new_license;
+
+			if ( ! is_object( $new_license ) ) {
+				$this->_site->license_id = null;
+				$this->_sync_site_subscription( null );
+
+				return;
+			}
+
+			$this->_site->license_id = $this->_license->id;
+
+			if ( ! is_array( $this->_licenses ) ) {
+				$this->_licenses = array();
+			}
+
+			$is_license_found = false;
+			for ( $i = 0, $len = count( $this->_licenses ); $i < $len; $i ++ ) {
+				if ( $new_license->id == $this->_licenses[ $i ]->id ) {
+					$this->_licenses[ $i ] = $new_license;
+
+					$is_license_found = true;
+					break;
+				}
+			}
+
+			// If new license just append.
+			if ( ! $is_license_found ) {
+				$this->_licenses[] = $new_license;
+			}
+
+			$this->_sync_site_subscription( $new_license );
+		}
+
+		/**
+		 * Sync site's subscription.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param FS_Plugin_License|null $license
+		 *
+		 * @return bool|\FS_Subscription
+		 */
+		private function _sync_site_subscription( $license ) {
+			if ( ! is_object( $license ) ) {
+				unset( $this->_storage->subscription );
+
+				return false;
+			}
+
+			// Load subscription details if not lifetime.
+			$subscription = $license->is_lifetime() ?
+				false :
+				$this->_fetch_site_license_subscription();
+
+			if ( is_object( $subscription ) && ! isset( $subscription->error ) ) {
+				$this->_storage->subscription = $subscription;
+			} else {
+				unset( $this->_storage->subscription );
+			}
+
+			return $subscription;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool|\FS_Plugin_License
+		 */
+		function _get_license() {
+			return $this->_license;
+		}
+
+		/**
+		 * @return bool|\FS_Subscription
+		 */
+		function _get_subscription() {
+			return isset( $this->_storage->subscription ) ?
+				$this->_storage->subscription :
+				false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		function is_plan( $plan, $exact = false ) {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			$plan = strtolower( $plan );
+
+			if ( $this->_site->plan->name === $plan ) // Exact plan.
+			{
+				return true;
+			} else if ( $exact ) // Required exact, but plans are different.
+			{
+				return false;
+			}
+
+			$current_plan_order  = - 1;
+			$required_plan_order = - 1;
+			for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
+				if ( $plan === $this->_plans[ $i ]->name ) {
+					$required_plan_order = $i;
+				} else if ( $this->_site->plan->name === $this->_plans[ $i ]->name ) {
+					$current_plan_order = $i;
+				}
+			}
+
+			return ( $current_plan_order > $required_plan_order );
+		}
+
+		/**
+		 * Check if plan based on trial. If not in trial mode, should return false.
+		 *
+		 * @since  1.0.9
+		 *
+		 * @param string $plan  Plan name
+		 * @param bool   $exact If true, looks for exact plan. If false, also check "higher" plans.
+		 *
+		 * @return bool
+		 */
+		function is_trial_plan( $plan, $exact = false ) {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			if ( ! $this->is_trial() ) {
+				return false;
+			}
+
+			if ( ! isset( $this->_storage->trial_plan ) ) {
+				// Store trial plan information.
+				$this->_enrich_site_trial_plan( true );
+			}
+
+			if ( $this->_storage->trial_plan->name === $plan ) // Exact plan.
+			{
+				return true;
+			} else if ( $exact ) // Required exact, but plans are different.
+			{
+				return false;
+			}
+
+			$current_plan_order  = - 1;
+			$required_plan_order = - 1;
+			for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
+				if ( $plan === $this->_plans[ $i ]->name ) {
+					$required_plan_order = $i;
+				} else if ( $this->_storage->trial_plan->name === $this->_plans[ $i ]->name ) {
+					$current_plan_order = $i;
+				}
+			}
+
+			return ( $current_plan_order > $required_plan_order );
+		}
+
+		/**
+		 * Check if plugin has any paid plans.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		function has_paid_plan() {
+			return $this->_has_paid_plans ||
+			       FS_Plan_Manager::instance()->has_paid_plan( $this->_plans );
+		}
+
+		/**
+		 * Check if plugin has any plan with a trail.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function has_trial_plan() {
+			if ( ! $this->is_registered() ) {
+				return false;
+			}
+
+			return $this->_storage->get( 'has_trial_plan', false );
+		}
+
+		/**
+		 * Check if plugin has any free plan, or is it premium only.
+		 *
+		 * Note: If no plans configured, assume plugin is free.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool
+		 */
+		function has_free_plan() {
+			return ! $this->is_premium() ||
+			       ! $this->is_only_premium() ||
+			       FS_Plan_Manager::instance()->has_free_plan( $this->_plans );
+		}
+
+		/**
+		 * Displays a license activation dialog box when the user clicks on the "Activate License"
+		 * or "Change License" link on the plugins
+		 * page.
+		 *
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.9
+		 */
+		function _add_license_activation_dialog_box() {
+			$vars = array(
+				'slug' => $this->_slug,
+			);
+
+			fs_require_template( 'forms/license-activation.php', $vars );
+			fs_require_template( 'forms/resend-key.php', $vars );
+		}
+
+		/**
+		 * Prepare page to include all required UI and logic for the license activation dialog.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.0
+		 */
+		function _require_license_activation_dialog() {
+			if ( $this->is_ajax() ) {
+				if ( $this->is_ajax_action( 'activate_license' ) ) {
+					// Add license activation AJAX callback.
+					$this->add_ajax_action( 'activate_license', array( &$this, '_activate_license_ajax_action' ) );
+				}
+
+				if ( $this->is_ajax_action( 'resend_license_key' ) ) {
+					// Add resend license AJAX callback.
+					$this->add_ajax_action( 'resend_license_key', array(
+						&$this,
+						'_resend_license_key_ajax_action'
+					) );
+				}
+			} else {
+				// Inject license activation dialog UI and client side code.
+				add_action( 'admin_footer', array( &$this, '_add_license_activation_dialog_box' ) );
+			}
+		}
+
+		/**
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.9
+		 */
+		function _activate_license_ajax_action() {
+			$license_key = trim( fs_request_get( 'license_key' ) );
+
+			if ( empty( $license_key ) ) {
+				exit;
+			}
+
+			$slug  = $_POST['slug'];
+			$fs    = ( ( $slug === $this->_slug ) ? $this : self::instance( $slug ) );
+			$error = false;
+
+			if ( $this->is_registered() ) {
+				$api     = $fs->get_api_site_scope();
+				$install = $api->call( '/', 'put',
+					array(
+						'license_key' => $license_key
+					)
+				);
+
+				if ( isset( $install->error ) ) {
+					$error = $install->error->message;
+				}
+			} else {
+				$install = $this->opt_in( false, false, false, $license_key );
+
+				if ( isset( $install->error ) ) {
+					$error = $install->error;
+				}
+			}
+
+			$result = array(
+				'success' => ( false === $error )
+			);
+
+			if ( false !== $error ) {
+				$result['error'] = $error;
+			}
+
+			echo json_encode( $result );
+
+			exit;
+		}
+
+		/**
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.2.0
+		 */
+		function _resend_license_key_ajax_action() {
+			if ( ! isset( $_POST['email'] ) ) {
+				exit;
+			}
+
+			$email_address = trim( $_POST['email'] );
+			if ( empty( $email_address ) ) {
+				exit;
+			}
+
+			$error = false;
+
+			$api    = $this->get_api_plugin_scope();
+			$result = $api->call( '/licenses/resend.json', 'post',
+				array(
+					'email'        => $email_address,
+					'is_localhost' => WP_FS__IS_LOCALHOST
+				)
+			);
+
+			if ( is_object( $result ) && isset( $result->error ) ) {
+				$error = $result->error;
+
+				if ( in_array( $error->code, array( 'invalid_email', 'no_user' ) ) ) {
+					$error = __fs( 'email-not-found' );
+				} else if ( 'no_license' === $error->code ) {
+					$error = __fs( 'no-active-licenses' );
+				} else {
+					$error = $error->message;
+				}
+			}
+
+			$licenses = array(
+				'success' => ( false === $error )
+			);
+
+			if ( false !== $error ) {
+				$licenses['error'] = sprintf( '%s... %s', __fs( 'oops', $this->_slug ), strtolower( $error ) );
+			}
+
+			echo json_encode( $licenses );
+
+			exit;
+		}
+
+		#region URL Generators
+
+		/**
+		 * Alias to pricing_url().
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @uses   pricing_url()
+		 *
+		 * @param string $period Billing cycle
+		 * @param bool   $is_trial
+		 *
+		 * @return string
+		 */
+		function get_upgrade_url( $period = WP_FS__PERIOD_ANNUALLY, $is_trial = false ) {
+			return $this->pricing_url( $period, $is_trial );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @uses   get_upgrade_url()
+		 *
+		 * @return string
+		 */
+		function get_trial_url() {
+			return $this->get_upgrade_url( WP_FS__PERIOD_ANNUALLY, true );
+		}
+
+		/**
+		 * Plugin's pricing URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param string $billing_cycle Billing cycle
+		 *
+		 * @param bool   $is_trial
+		 *
+		 * @return string
+		 */
+		function pricing_url( $billing_cycle = WP_FS__PERIOD_ANNUALLY, $is_trial = false ) {
+			$this->_logger->entrance();
+
+			$params = array(
+				'billing_cycle' => $billing_cycle
+			);
+
+			if ( $is_trial ) {
+				$params['trial'] = 'true';
+			}
+
+			return $this->_get_admin_page_url( 'pricing', $params );
+		}
+
+		/**
+		 * Checkout page URL.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.6
+		 *
+		 * @param string $billing_cycle Billing cycle
+		 * @param bool   $is_trial
+		 * @param array  $extra         (optional) Extra parameters, override other query params.
+		 *
+		 * @return string
+		 */
+		function checkout_url(
+			$billing_cycle = WP_FS__PERIOD_ANNUALLY,
+			$is_trial = false,
+			$extra = array()
+		) {
+			$this->_logger->entrance();
+
+			$params = array(
+				'checkout'      => 'true',
+				'billing_cycle' => $billing_cycle,
+			);
+
+			if ( $is_trial ) {
+				$params['trial'] = 'true';
+			}
+
+			/**
+			 * Params in extra override other params.
+			 */
+			$params = array_merge( $params, $extra );
+
+			return $this->_get_admin_page_url( 'pricing', $params );
+		}
+
+		/**
+		 * Add-on checkout URL.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.1.7
+		 *
+		 * @param number $addon_id
+		 * @param number $pricing_id
+		 * @param string $billing_cycle
+		 * @param bool   $is_trial
+		 *
+		 * @return string
+		 */
+		function addon_checkout_url(
+			$addon_id,
+			$pricing_id,
+			$billing_cycle = WP_FS__PERIOD_ANNUALLY,
+			$is_trial = false
+		) {
+			return $this->checkout_url( $billing_cycle, $is_trial, array(
+				'plugin_id'  => $addon_id,
+				'pricing_id' => $pricing_id,
+			) );
+		}
+
+		#endregion
+
+		#endregion ------------------------------------------------------------------
+
+		/**
+		 * Check if plugin has any add-ons.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @since  1.1.7.3 Base logic only on the parameter provided by the developer in the init function.
+		 *
+		 * @return bool
+		 */
+		function has_addons() {
+			$this->_logger->entrance();
+
+			return $this->_has_addons;
+		}
+
+		/**
+		 * Check if plugin can work in anonymous mode.
+		 *
+		 * @author     Vova Feldman (@svovaf)
+		 * @since      1.0.9
+		 *
+		 * @return bool
+		 *
+		 * @deprecated Please use is_enable_anonymous() instead
+		 */
+		function enable_anonymous() {
+			return $this->_enable_anonymous;
+		}
+
+		/**
+		 * Check if plugin can work in anonymous mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9
+		 *
+		 * @return bool
+		 */
+		function is_enable_anonymous() {
+			return $this->_enable_anonymous;
+		}
+
+		/**
+		 * Check if plugin is premium only (no free plans).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9
+		 *
+		 * @return bool
+		 */
+		function is_only_premium() {
+			return $this->_is_premium_only;
+		}
+
+		/**
+		 * Check if feature supported with current site's plan.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @todo   IMPLEMENT
+		 *
+		 * @param number $feature_id
+		 *
+		 * @throws Exception
+		 */
+		function is_feature_supported( $feature_id ) {
+			throw new Exception( 'not implemented' );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @return bool Is running in SSL/HTTPS
+		 */
+		function is_ssl() {
+			return WP_FS__IS_HTTPS;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool Is running in AJAX call.
+		 *
+		 * @link   http://wordpress.stackexchange.com/questions/70676/how-to-check-if-i-am-in-admin-ajax
+		 */
+		function is_ajax() {
+			return ( defined( 'DOING_AJAX' ) && DOING_AJAX );
+		}
+
+		/**
+		 * Check if it's an AJAX call targeted for the current module.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.0
+		 *
+		 * @param array|string $actions Collection of AJAX actions.
+		 *
+		 * @return bool
+		 */
+		function is_ajax_action( $actions ) {
+			// Verify it's an ajax call.
+			if ( ! $this->is_ajax() ) {
+				return false;
+			}
+
+			// Verify the call is relevant for the plugin.
+			if ( $this->_slug !== fs_request_get( 'slug' ) ) {
+				return false;
+			}
+
+			// Verify it's one of the specified actions.
+			if ( is_string( $actions ) ) {
+				$actions = explode( ',', $actions );
+			}
+
+			if ( is_array( $actions ) && 0 < count( $actions ) ) {
+				$ajax_action = fs_request_get( 'action' );
+
+				foreach ( $actions as $action ) {
+					if ( $ajax_action === $this->get_action_tag( $action ) ) {
+						return true;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @return bool
+		 */
+		function is_cron() {
+			return ( defined( 'DOING_CRON' ) && DOING_CRON );
+		}
+
+		/**
+		 * Check if a real user is visiting the admin dashboard.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @return bool
+		 */
+		function is_user_in_admin() {
+			return is_admin() && ! $this->is_ajax() && ! $this->is_cron();
+		}
+
+		/**
+		 * Check if running in HTTPS and if site's plan matching the specified plan.
+		 *
+		 * @param string $plan
+		 * @param bool   $exact
+		 *
+		 * @return bool
+		 */
+		function is_ssl_and_plan( $plan, $exact = false ) {
+			return ( $this->is_ssl() && $this->is_plan( $plan, $exact ) );
+		}
+
+		/**
+		 * Construct plugin's settings page URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param string $page
+		 * @param array  $params
+		 *
+		 * @return string
+		 */
+		function _get_admin_page_url( $page = '', $params = array() ) {
+			if ( 0 < count( $params ) ) {
+				foreach ( $params as $k => $v ) {
+					$params[ $k ] = urlencode( $v );
+				}
+			}
+
+			if ( ! $this->_menu->is_top_level() ) {
+				$parent_slug = $this->_menu->get_parent_slug();
+				$menu_file   = ( false !== strpos( $parent_slug, '.php' ) ) ?
+					$parent_slug :
+					'admin.php';
+
+				return add_query_arg( array_merge( $params, array(
+					'page' => $this->_menu->get_slug( $page ),
+				) ), admin_url( $menu_file, 'admin' ) );
+			}
+
+			if ( $this->_menu->is_cpt() ) {
+				if ( empty( $page ) && $this->is_activation_mode() ) {
+					return add_query_arg( array_merge( $params, array(
+						'page' => $this->_menu->get_slug()
+					) ), admin_url( 'admin.php', 'admin' ) );
+				} else {
+					if ( ! empty( $page ) ) {
+						$params['page'] = $this->_menu->get_slug( $page );
+					}
+
+					return add_query_arg( $params, admin_url( $this->_menu->get_raw_slug(), 'admin' ) );
+				}
+			} else {
+				return add_query_arg( array_merge( $params, array(
+					'page' => $this->_menu->get_slug( $page ),
+				) ), admin_url( 'admin.php', 'admin' ) );
+			}
+		}
+
+		/**
+		 * Plugin's account page + sync license URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.9.1
+		 *
+		 * @param bool|number $plugin_id
+		 * @param bool        $add_action_nonce
+		 *
+		 * @return string
+		 */
+		function _get_sync_license_url( $plugin_id = false, $add_action_nonce = true ) {
+			$params = array();
+
+			if ( is_numeric( $plugin_id ) ) {
+				$params['plugin_id'] = $plugin_id;
+			}
+
+			return $this->get_account_url(
+				$this->_slug . '_sync_license',
+				$params,
+				$add_action_nonce
+			);
+		}
+
+		/**
+		 * Plugin's account URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool|string $action
+		 * @param array       $params
+		 *
+		 * @param bool        $add_action_nonce
+		 *
+		 * @return string
+		 */
+		function get_account_url( $action = false, $params = array(), $add_action_nonce = true ) {
+			if ( is_string( $action ) ) {
+				$params['fs_action'] = $action;
+			}
+
+			self::require_pluggable_essentials();
+
+			return ( $add_action_nonce && is_string( $action ) ) ?
+				wp_nonce_url( $this->_get_admin_page_url( 'account', $params ), $action ) :
+				$this->_get_admin_page_url( 'account', $params );
+		}
+
+		/**
+		 * @author  Vova Feldman (@svovaf)
+		 * @since   1.2.0
+		 *
+		 * @param string $tab
+		 * @param bool   $action
+		 * @param array  $params
+		 * @param bool   $add_action_nonce
+		 *
+		 * @return string
+		 *
+		 * @uses    get_account_url()
+		 */
+		function get_account_tab_url( $tab, $action = false, $params = array(), $add_action_nonce = true ) {
+			$params['tab'] = $tab;
+
+			return $this->get_account_url( $action, $params, $add_action_nonce );
+		}
+
+		/**
+		 * Plugin's account URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool|string $topic
+		 * @param bool|string $message
+		 *
+		 * @return string
+		 */
+		function contact_url( $topic = false, $message = false ) {
+			$params = array();
+			if ( is_string( $topic ) ) {
+				$params['topic'] = $topic;
+			}
+			if ( is_string( $message ) ) {
+				$params['message'] = $message;
+			}
+
+			if ( $this->is_addon() ) {
+				$params['addon_id'] = $this->get_id();
+
+				return $this->get_parent_instance()->_get_admin_page_url( 'contact', $params );
+			} else {
+				return $this->_get_admin_page_url( 'contact', $params );
+			}
+		}
+
+		/**
+		 * Add-on direct info URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.0
+		 *
+		 * @param string $slug
+		 *
+		 * @return string
+		 */
+		function addon_url( $slug ) {
+			return $this->_get_admin_page_url( 'addons', array(
+				'slug' => $slug
+			) );
+		}
+
+		/* Logger
+		------------------------------------------------------------------------------------------------------------------*/
+		/**
+		 * @param string $id
+		 * @param bool   $prefix_slug
+		 *
+		 * @return FS_Logger
+		 */
+		function get_logger( $id = '', $prefix_slug = true ) {
+			return FS_Logger::get_logger( ( $prefix_slug ? $this->_slug : '' ) . ( ( ! $prefix_slug || empty( $id ) ) ? '' : '_' ) . $id );
+		}
+
+		/**
+		 * @param      $id
+		 * @param bool $load_options
+		 * @param bool $prefix_slug
+		 *
+		 * @return FS_Option_Manager
+		 */
+		function get_options_manager( $id, $load_options = false, $prefix_slug = true ) {
+			return FS_Option_Manager::get_manager( ( $prefix_slug ? $this->_slug : '' ) . ( ( ! $prefix_slug || empty( $id ) ) ? '' : '_' ) . $id, $load_options );
+		}
+
+		/* Security
+		------------------------------------------------------------------------------------------------------------------*/
+		private function _encrypt( $str ) {
+			if ( is_null( $str ) ) {
+				return null;
+			}
+
+			return base64_encode( $str );
+		}
+
+		private function _decrypt( $str ) {
+			if ( is_null( $str ) ) {
+				return null;
+			}
+
+			return base64_decode( $str );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param FS_Entity $entity
+		 *
+		 * @return FS_Entity Return an encrypted clone entity.
+		 */
+		private function _encrypt_entity( FS_Entity $entity ) {
+			$clone = clone $entity;
+			$props = get_object_vars( $entity );
+
+			foreach ( $props as $key => $val ) {
+				$clone->{$key} = $this->_encrypt( $val );
+			}
+
+			return $clone;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param FS_Entity $entity
+		 *
+		 * @return FS_Entity Return an decrypted clone entity.
+		 */
+		private function _decrypt_entity( FS_Entity $entity ) {
+			$clone = clone $entity;
+			$props = get_object_vars( $entity );
+
+			foreach ( $props as $key => $val ) {
+				$clone->{$key} = $this->_decrypt( $val );
+			}
+
+			return $clone;
+		}
+
+		/**
+		 * Tries to activate account based on POST params.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 */
+		function _activate_account() {
+			if ( $this->is_registered() ) {
+				// Already activated.
+				return;
+			}
+
+			self::_clean_admin_content_section();
+
+			if ( fs_request_is_action( 'activate' ) && fs_request_is_post() ) {
+//				check_admin_referer( 'activate_' . $this->_plugin->public_key );
+
+				// Verify matching plugin details.
+				if ( $this->_plugin->id != fs_request_get( 'plugin_id' ) || $this->_slug != fs_request_get( 'plugin_slug' ) ) {
+					return;
+				}
+
+				$user              = new FS_User();
+				$user->id          = fs_request_get( 'user_id' );
+				$user->public_key  = fs_request_get( 'user_public_key' );
+				$user->secret_key  = fs_request_get( 'user_secret_key' );
+				$user->email       = fs_request_get( 'user_email' );
+				$user->first       = fs_request_get( 'user_first' );
+				$user->last        = fs_request_get( 'user_last' );
+				$user->is_verified = fs_request_get_bool( 'user_is_verified' );
+
+				$site              = new FS_Site();
+				$site->id          = fs_request_get( 'install_id' );
+				$site->public_key  = fs_request_get( 'install_public_key' );
+				$site->secret_key  = fs_request_get( 'install_secret_key' );
+				$site->plan->id    = fs_request_get( 'plan_id' );
+				$site->plan->title = fs_request_get( 'plan_title' );
+				$site->plan->name  = fs_request_get( 'plan_name' );
+
+				$plans      = array();
+				$plans_data = json_decode( urldecode( fs_request_get( 'plans' ) ) );
+				foreach ( $plans_data as $p ) {
+					$plans[] = new FS_Plugin_Plan( $p );
+				}
+
+				$this->_set_account( $user, $site, $plans );
+
+				// Reload the page with the keys.
+				if ( fs_redirect( $this->_get_admin_page_url() ) ) {
+					exit();
+				}
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @param string $email
+		 *
+		 * @return FS_User|bool
+		 */
+		static function _get_user_by_email( $email ) {
+			self::$_static_logger->entrance();
+
+			$email = trim( strtolower( $email ) );
+			$users = self::get_all_users();
+			if ( is_array( $users ) ) {
+				foreach ( $users as $u ) {
+					if ( $email === trim( strtolower( $u->email ) ) ) {
+						return $u;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		#region Account (Loading, Updates & Activation) ------------------------------------------------------------------
+
+		/***
+		 * Load account information (user + site).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 */
+		private function _load_account() {
+			$this->_logger->entrance();
+
+			$this->do_action( 'before_account_load' );
+
+			$sites    = self::get_all_sites();
+			$users    = self::get_all_users();
+			$plans    = self::get_all_plans();
+			$licenses = self::get_all_licenses();
+
+			if ( $this->_logger->is_on() && is_admin() ) {
+				$this->_logger->log( 'sites = ' . var_export( $sites, true ) );
+				$this->_logger->log( 'users = ' . var_export( $users, true ) );
+				$this->_logger->log( 'plans = ' . var_export( $plans, true ) );
+				$this->_logger->log( 'licenses = ' . var_export( $licenses, true ) );
+			}
+
+			$site = isset( $sites[ $this->_slug ] ) ? $sites[ $this->_slug ] : false;
+
+			if ( is_object( $site ) &&
+			     is_numeric( $site->id ) &&
+			     is_numeric( $site->user_id ) &&
+			     is_object( $site->plan )
+			) {
+				// Load site.
+				$this->_site       = clone $site;
+				$this->_site->plan = $this->_decrypt_entity( $this->_site->plan );
+
+				// Load relevant user.
+				$this->_user = clone $users[ $this->_site->user_id ];
+
+				// Load plans.
+				$this->_plans = $plans[ $this->_slug ];
+				if ( ! is_array( $this->_plans ) || empty( $this->_plans ) ) {
+					$this->_sync_plans( true );
+				} else {
+					for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
+						if ( $this->_plans[ $i ] instanceof FS_Plugin_Plan ) {
+							$this->_plans[ $i ] = $this->_decrypt_entity( $this->_plans[ $i ] );
+						} else {
+							unset( $this->_plans[ $i ] );
+						}
+					}
+				}
+
+				// Load licenses.
+				$this->_licenses = array();
+				if ( is_array( $licenses ) &&
+				     isset( $licenses[ $this->_slug ] ) &&
+				     isset( $licenses[ $this->_slug ][ $this->_user->id ] )
+				) {
+					$this->_licenses = $licenses[ $this->_slug ][ $this->_user->id ];
+				}
+
+				$this->_license = $this->_get_license_by_id( $this->_site->license_id );
+
+				if ( $this->_site->version != $this->get_plugin_version() ) {
+					// If stored install version is different than current installed plugin version,
+					// then update plugin version event.
+					$this->update_plugin_version_event();
+				}
+			}
+
+			$this->_register_account_hooks();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param FS_User    $user
+		 * @param FS_Site    $site
+		 * @param bool|array $plans
+		 */
+		private function _set_account( FS_User $user, FS_Site $site, $plans = false ) {
+			$site->slug    = $this->_slug;
+			$site->user_id = $user->id;
+
+			$this->_site = $site;
+			$this->_user = $user;
+			if ( false !== $plans ) {
+				$this->_plans = $plans;
+			}
+
+			$this->send_install_update();
+
+			$this->_store_account();
+
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @param array $override_with
+		 *
+		 * @return array
+		 */
+		function get_opt_in_params( $override_with = array() ) {
+			$this->_logger->entrance();
+
+			$current_user = self::_get_current_wp_user();
+
+			$params = array(
+				'user_firstname'    => $current_user->user_firstname,
+				'user_lastname'     => $current_user->user_lastname,
+				'user_nickname'     => $current_user->user_nicename,
+				'user_email'        => $current_user->user_email,
+				'user_ip'           => WP_FS__REMOTE_ADDR,
+				'plugin_slug'       => $this->_slug,
+				'plugin_id'         => $this->get_id(),
+				'plugin_public_key' => $this->get_public_key(),
+				'plugin_version'    => $this->get_plugin_version(),
+				'return_url'        => wp_nonce_url( $this->_get_admin_page_url(
+					'',
+					array( 'fs_action' => $this->_slug . '_activate_new' )
+				), $this->_slug . '_activate_new' ),
+				'account_url'       => wp_nonce_url( $this->_get_admin_page_url(
+					'account',
+					array( 'fs_action' => 'sync_user' )
+				), 'sync_user' ),
+				'site_uid'          => $this->get_anonymous_id(),
+				'site_url'          => get_site_url(),
+				'site_name'         => get_bloginfo( 'name' ),
+				'platform_version'  => get_bloginfo( 'version' ),
+				'php_version'       => phpversion(),
+				'language'          => get_bloginfo( 'language' ),
+				'charset'           => get_bloginfo( 'charset' ),
+			);
+
+			if ( WP_FS__SKIP_EMAIL_ACTIVATION && $this->has_secret_key() ) {
+				// Even though rand() is known for its security issues,
+				// the timestamp adds another layer of protection.
+				// It would be very hard for an attacker to get the secret key form here.
+				// Plus, this should never run in production since the secret should never
+				// be included in the production version.
+				$params['ts']     = WP_FS__SCRIPT_START_TIME;
+				$params['salt']   = md5( uniqid( rand() ) );
+				$params['secure'] = md5(
+					$params['ts'] .
+					$params['salt'] .
+					$this->get_secret_key()
+				);
+			}
+
+			return array_merge( $params, $override_with );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @param string|bool $email
+		 * @param string|bool $first
+		 * @param string|bool $last
+		 * @param string|bool $license_key
+		 * @param bool        $is_uninstall       If "true", this means that the module is currently being uninstalled.
+		 *                                        In this case, the user and site info will be sent to the server but no
+		 *                                        data will be saved to the WP installation's database.
+		 *
+		 * @return bool Is successful opt-in (or set to pending).
+		 *
+		 * @use    WP_Error
+		 */
+		function opt_in(
+			$email = false,
+			$first = false,
+			$last = false,
+			$license_key = false,
+			$is_uninstall = false
+		) {
+			$this->_logger->entrance();
+
+			if ( false === $email ) {
+				$current_user = self::_get_current_wp_user();
+				$email        = $current_user->user_email;
+			}
+
+			/**
+			 * @since 1.2.1 If activating with license key, ignore the context-user
+			 *              since the user will be automatically loaded from the license.
+			 */
+			if (empty($license_key)) {
+				if ( ! $is_uninstall ) {
+					$fs_user = Freemius::_get_user_by_email( $email );
+					if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
+						return $this->install_with_current_user( false );
+					}
+				}
+			}
+
+			$user_info = array();
+			if ( ! empty( $email ) ) {
+				$user_info['user_email'] = $email;
+			}
+			if ( ! empty( $first ) ) {
+				$user_info['user_firstname'] = $first;
+			}
+			if ( ! empty( $last ) ) {
+				$user_info['user_lastname'] = $last;
+			}
+
+			$params = $this->get_opt_in_params( $user_info );
+
+			if ( is_string( $license_key ) ) {
+				$params['license_secret_key'] = $license_key;
+			}
+
+			if ( $is_uninstall ) {
+				$params['uninstall_params'] = array(
+					'reason_id'   => $this->_storage->uninstall_reason->id,
+					'reason_info' => $this->_storage->uninstall_reason->info
+				);
+			}
+
+			$params['format'] = 'json';
+
+			$url = WP_FS__ADDRESS . '/action/service/user/install/';
+			if ( isset( $_COOKIE['XDEBUG_SESSION'] ) ) {
+				$url = add_query_arg( 'XDEBUG_SESSION', 'PHPSTORM', $url );
+			}
+
+			$response = wp_remote_post( $url, array(
+				'method'  => 'POST',
+				'body'    => $params,
+				'timeout' => 15,
+			) );
+
+			if ( $response instanceof WP_Error ) {
+				if ( 'https://' === substr( $url, 0, 8 ) &&
+				     isset( $response->errors ) &&
+				     isset( $response->errors['http_request_failed'] ) &&
+				     false !== strpos( $response->errors['http_request_failed'][0], 'sslv3 alert handshake' )
+				) {
+					// Failed due to old version of cURL or Open SSL (SSLv3 is not supported by CloudFlare).
+					$url = 'http://' . substr( $url, 8 );
+
+					$response = wp_remote_post( $url, array(
+						'method'  => 'POST',
+						'body'    => $params,
+						'timeout' => 15,
+					) );
+				}
+
+				if ( $response instanceof WP_Error ) {
+					return false;
+				}
+			}
+
+			if ( is_wp_error( $response ) ) {
+				return false;
+			}
+
+			// Module is being uninstalled, don't handle the returned data.
+			if ( $is_uninstall ) {
+				return true;
+			}
+
+			$decoded = @json_decode( $response['body'] );
+
+			if ( empty( $decoded ) ) {
+				return false;
+			}
+
+			if ( isset( $decoded->error ) ) {
+				return $decoded;
+			} else if ( isset( $decoded->pending_activation ) && $decoded->pending_activation ) {
+				// Pending activation, add message.
+				$this->set_pending_confirmation( false, false );
+
+				return true;
+			} else if ( isset( $decoded->install_secret_key ) ) {
+				$this->install_with_new_user(
+					$decoded->user_id,
+					$decoded->user_public_key,
+					$decoded->user_secret_key,
+					$decoded->install_id,
+					$decoded->install_public_key,
+					$decoded->install_secret_key,
+					false
+				);
+
+				return true;
+			}
+
+			return $decoded;
+		}
+
+		/**
+		 * Set user and site identities.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param FS_User $user
+		 * @param FS_Site $site
+		 * @param bool    $redirect
+		 *
+		 * @return bool False if account already set.
+		 */
+		function setup_account( FS_User $user, FS_Site $site, $redirect = true ) {
+			$this->_user = $user;
+			$this->_site = $site;
+
+			$this->_sync_plans();
+
+			$this->_enrich_site_plan( false );
+
+			$this->_set_account( $user, $site );
+
+			if ( $this->is_trial() ) {
+				// Store trial plan information.
+				$this->_enrich_site_trial_plan( true );
+			}
+
+			// If Freemius was OFF before, turn it on.
+			$this->turn_on();
+
+			$this->do_action( 'after_account_connection', $user, $site );
+
+			if ( is_numeric( $site->license_id ) ) {
+				$this->_license = $this->_get_license_by_id( $site->license_id );
+			}
+
+			$this->_admin_notices->remove_sticky( 'connect_account' );
+
+			if ( $this->is_pending_activation() ) {
+				// Remove pending activation sticky notice (if still exist).
+				$this->_admin_notices->remove_sticky( 'activation_pending' );
+
+				// Remove plugin from pending activation mode.
+				unset( $this->_storage->is_pending_activation );
+
+				if ( ! $this->is_paying() ) {
+					$this->_admin_notices->add_sticky(
+						sprintf( __fs( 'plugin-x-activation-message', $this->_slug ), '<b>' . $this->get_plugin_name() . '</b>' ),
+						'activation_complete'
+					);
+				}
+			}
+
+			if ( $this->is_paying() && ! $this->is_premium() ) {
+				$this->_admin_notices->add_sticky(
+					sprintf(
+						__fs( 'activation-with-plan-x-message', $this->_slug ),
+						$this->_site->plan->title
+					) . $this->get_complete_upgrade_instructions(),
+					'plan_upgraded',
+					__fs( 'yee-haw', $this->_slug ) . '!'
+				);
+			}
+
+			$plugin_id = fs_request_get( 'plugin_id', false );
+
+			// Store activation time ONLY for plugins (not add-ons).
+			if ( ! is_numeric( $plugin_id ) || ( $plugin_id == $this->_plugin->id ) ) {
+				$this->_storage->activation_timestamp = WP_FS__SCRIPT_START_TIME;
+			}
+
+			if ( is_numeric( $plugin_id ) ) {
+				if ( $plugin_id != $this->_plugin->id ) {
+					// Add-on was installed - sync license right after install.
+					if ( $redirect && fs_redirect( $this->_get_sync_license_url( $plugin_id ) )
+					) {
+						exit();
+					}
+
+				}
+			} else {
+				/**
+				 * @author Vova Feldman (@svovaf)
+				 * @since  1.1.9 If site installed with a valid license, sync license.
+				 */
+				if ( $this->is_paying() ) {
+					$this->_sync_plugin_license( true );
+				}
+
+				// Reload the page with the keys.
+				if ( $redirect && fs_redirect( $this->get_after_activation_url( 'after_connect_url' ) ) ) {
+					exit();
+				}
+			}
+		}
+
+		/**
+		 * Install plugin with new user information after approval.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 */
+		function _install_with_new_user() {
+			$this->_logger->entrance();
+
+			if ( $this->is_registered() ) {
+				return;
+			}
+
+			if ( fs_request_is_action( $this->_slug . '_activate_new' ) ) {
+//				check_admin_referer( $this->_slug . '_activate_new' );
+
+				if ( fs_request_has( 'user_secret_key' ) ) {
+					$this->install_with_new_user(
+						fs_request_get( 'user_id' ),
+						fs_request_get( 'user_public_key' ),
+						fs_request_get( 'user_secret_key' ),
+						fs_request_get( 'install_id' ),
+						fs_request_get( 'install_public_key' ),
+						fs_request_get( 'install_secret_key' )
+					);
+				} else if ( fs_request_has( 'pending_activation' ) ) {
+					$this->set_pending_confirmation( fs_request_get( 'user_email' ), true );
+				}
+			}
+		}
+
+		/**
+		 * Install plugin with new user.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @param number $user_id
+		 * @param string $user_public_key
+		 * @param string $user_secret_key
+		 * @param number $install_id
+		 * @param string $install_public_key
+		 * @param string $install_secret_key
+		 * @param bool   $redirect
+		 */
+		private function install_with_new_user(
+			$user_id,
+			$user_public_key,
+			$user_secret_key,
+			$install_id,
+			$install_public_key,
+			$install_secret_key,
+			$redirect = true
+		) {
+			$user             = new FS_User();
+			$user->id         = $user_id;
+			$user->public_key = $user_public_key;
+			$user->secret_key = $user_secret_key;
+
+			$this->_user = $user;
+			$user_result = $this->get_api_user_scope()->get();
+			$user        = new FS_User( $user_result );
+			$this->_user = $user;
+
+			$site             = new FS_Site();
+			$site->id         = $install_id;
+			$site->public_key = $install_public_key;
+			$site->secret_key = $install_secret_key;
+
+			$this->_site = $site;
+			$site_result = $this->get_api_site_scope()->get();
+			$site        = new FS_Site( $site_result );
+			$this->_site = $site;
+
+			$this->setup_account( $this->_user, $this->_site, $redirect );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @param bool $email
+		 * @param bool $redirect
+		 */
+		private function set_pending_confirmation( $email = false, $redirect = true ) {
+			// Install must be activated via email since
+			// user with the same email already exist.
+			$this->_storage->is_pending_activation = true;
+			$this->_add_pending_activation_notice( $email );
+
+			// Reload the page with with pending activation message.
+			if ( $redirect && fs_redirect( $this->get_after_activation_url( 'after_pending_connect_url' ) ) ) {
+				exit();
+			}
+		}
+
+		/**
+		 * Install plugin with current logged WP user info.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 */
+		function _install_with_current_user() {
+			$this->_logger->entrance();
+
+			if ( $this->is_registered() ) {
+				return;
+			}
+
+			if ( fs_request_is_action( $this->_slug . '_activate_existing' ) && fs_request_is_post() ) {
+//				check_admin_referer( 'activate_existing_' . $this->_plugin->public_key );
+
+				$this->install_with_current_user();
+			}
+		}
+
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @param bool $redirect
+		 *
+		 * @return object|string
+		 */
+		private function install_with_current_user( $redirect = true ) {
+			// Get current logged WP user.
+			$current_user = self::_get_current_wp_user();
+
+			// Find the relevant FS user by the email.
+			$user = self::_get_user_by_email( $current_user->user_email );
+
+			// We have to set the user before getting user scope API handler.
+			$this->_user = $user;
+
+			$extra_install_params = array(
+				'uid' => $this->get_anonymous_id(),
+			);
+
+			/**
+			 * @author Vova Feldman (@svovaf)
+			 * @since  1.1.9 Add license key if given.
+			 */
+			$license_key = fs_request_get( 'license_secret_key' );
+
+			if ( ! empty( $license_key ) ) {
+				$extra_install_params['license_key'] = $license_key;
+			}
+
+			// Install the plugin.
+			$install = $this->get_api_user_scope()->call(
+				"/plugins/{$this->get_id()}/installs.json",
+				'post',
+				$this->get_install_data_for_api( $extra_install_params, false, false )
+			);
+
+			if ( $this->is_api_error($install) ) {
+				$this->_admin_notices->add(
+					sprintf( __fs( 'could-not-activate-x', $this->_slug ), $this->get_plugin_name() ) . ' ' .
+					__fs( 'contact-us-with-error-message', $this->_slug ) . ' ' . '<b>' . $install->error->message . '</b>',
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+
+				if ( $redirect && fs_redirect( $this->get_activation_url( array('error' => $install->error->message) ) )
+				) {
+					exit();
+				}
+
+				return $install;
+			}
+
+			$site        = new FS_Site( $install );
+			$this->_site = $site;
+//				$this->_enrich_site_plan( false );
+
+//				$this->_set_account( $user, $site );
+//				$this->_sync_plans();
+
+			$this->setup_account( $this->_user, $this->_site, $redirect );
+
+			return $install;
+		}
+
+		/**
+		 * Tries to activate add-on account based on parent plugin info.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param Freemius $parent_fs
+		 */
+		private function _activate_addon_account( Freemius $parent_fs ) {
+			if ( $this->is_registered() ) {
+				// Already activated.
+				return;
+			}
+
+			// Activate add-on with parent plugin credentials.
+			$addon_install = $parent_fs->get_api_site_scope()->call(
+				"/addons/{$this->_plugin->id}/installs.json",
+				'post',
+				$this->get_install_data_for_api( array(
+					'uid' => $this->get_anonymous_id(),
+				), false, false )
+			);
+
+			if ( isset( $addon_install->error ) ) {
+				$this->_admin_notices->add(
+					sprintf( __fs( 'could-not-activate-x', $this->_slug ), $this->get_plugin_name() ) . ' ' .
+					__fs( 'contact-us-with-error-message', $this->_slug ) . ' ' . '<b>' . $addon_install->error->message . '</b>',
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+
+				return;
+			}
+
+			// First of all, set site info - otherwise we won't
+			// be able to invoke API calls.
+			$this->_site = new FS_Site( $addon_install );
+
+			// Sync add-on plans.
+			$this->_sync_plans();
+
+			// Get site's current plan.
+			$this->_site->plan = $this->_get_plan_by_id( $this->_site->plan->id );
+
+			// Get user information based on parent's plugin.
+			$user = $parent_fs->get_user();
+
+			$this->_set_account( $user, $this->_site );
+
+			// Sync licenses.
+			$this->_sync_licenses();
+
+			// Try to activate premium license.
+			$this->_activate_license( true );
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		#region Admin Menu Items ------------------------------------------------------------------
+
+		private $_menu_items = array();
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return string
+		 */
+		function get_menu_slug() {
+			return $this->_menu->get_slug();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		function _prepare_admin_menu() {
+//			if ( ! $this->is_on() ) {
+//				return;
+//			}
+
+			if ( ! $this->has_api_connectivity() && ! $this->is_enable_anonymous() ) {
+				$this->_menu->remove_menu_item();
+			} else {
+				$this->do_action( 'before_admin_menu_init' );
+
+				$this->add_menu_action();
+				$this->add_submenu_items();
+			}
+		}
+
+		/**
+		 * Admin dashboard menu items modifications.
+		 *
+		 * NOTE: admin_menu action executed before admin_init.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 */
+		private function add_menu_action() {
+			if ( $this->is_activation_mode() ) {
+				$this->override_plugin_menu_with_activation();
+			} else {
+				// If not registered try to install user.
+				if ( ! $this->is_registered() &&
+				     fs_request_is_action( $this->_slug . '_activate_new' )
+				) {
+					$this->_install_with_new_user();
+				}
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @return string
+		 */
+		function _redirect_on_clicked_menu_link() {
+			$this->_logger->entrance();
+
+			$page = strtolower( isset( $_REQUEST['page'] ) ? $_REQUEST['page'] : '' );
+
+			$this->_logger->log( 'page = ' . $page );
+
+			foreach ( $this->_menu_items as $priority => $items ) {
+				foreach ( $items as $item ) {
+					if ( isset( $item['url'] ) ) {
+						if ( $page === strtolower( $item['menu_slug'] ) ) {
+							$this->_logger->log( 'Redirecting to ' . $item['url'] );
+
+							fs_redirect( $item['url'] );
+						}
+					}
+				}
+			}
+		}
+
+		/**
+		 * Remove plugin's all admin menu items & pages, and replace with activation page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 */
+		private function override_plugin_menu_with_activation() {
+			$this->_logger->entrance();
+
+			$hook = false;
+
+			if ( $this->_menu->is_top_level() ) {
+				$hook = $this->_menu->override_menu_item( array( &$this, '_connect_page_render' ) );
+
+				if ( false === $hook ) {
+					// Create new menu item just for the opt-in.
+					$hook = add_menu_page(
+						$this->get_plugin_name(),
+						$this->get_plugin_name(),
+						'manage_options',
+						$this->_menu->get_slug(),
+						array( &$this, '_connect_page_render' )
+					);
+				}
+			} else {
+				$menus = array( $this->_menu->get_parent_slug() );
+
+				if ( $this->_menu->is_override_exact() ) {
+					// Make sure the current page is matching the activation page.
+					$activation_url = strtolower( $this->get_activation_url() );
+					$request_url    = strtolower( $_SERVER['REQUEST_URI'] );
+
+					if ( parse_url( $activation_url, PHP_URL_PATH ) !== parse_url( $request_url, PHP_URL_PATH ) ) {
+						// Different path - DO NOT OVERRIDE PAGE.
+						return;
+					}
+
+					$activation_url_params = array();
+					parse_str( parse_url( $activation_url, PHP_URL_QUERY ), $activation_url_params );
+
+					$request_url_params = array();
+					parse_str( parse_url( $request_url, PHP_URL_QUERY ), $request_url_params );
+
+
+					foreach ( $activation_url_params as $key => $val ) {
+						if ( ! isset( $request_url_params[ $key ] ) || $val != $request_url_params[ $key ] ) {
+							// Not matching query string - DO NOT OVERRIDE PAGE.
+							return;
+						}
+					}
+				}
+
+				foreach ( $menus as $parent_slug ) {
+					$hook = $this->_menu->override_submenu_action(
+						$parent_slug,
+						$this->_menu->get_raw_slug(),
+						array( &$this, '_connect_page_render' )
+					);
+
+					if ( false !== $hook ) {
+						// Found plugin's submenu item.
+						break;
+					}
+				}
+			}
+
+			if ( $this->_menu->is_activation_page() ) {
+				// Clean admin page from distracting content.
+				self::_clean_admin_content_section();
+			}
+
+			if ( false !== $hook ) {
+				if ( fs_request_is_action( $this->_slug . '_activate_existing' ) ) {
+					add_action( "load-$hook", array( &$this, '_install_with_current_user' ) );
+				} else if ( fs_request_is_action( $this->_slug . '_activate_new' ) ) {
+					add_action( "load-$hook", array( &$this, '_install_with_new_user' ) );
+				}
+			}
+		}
+
+		/**
+		 * @author Leo Fajardo (leorw)
+		 * @since  1.2.1
+		 *
+		 * return string
+		 */
+		function get_top_level_menu_capability() {
+			global $menu;
+
+			$top_level_menu_slug = $this->get_top_level_menu_slug();
+
+			foreach ( $menu as $menu_info ) {
+				/**
+				 * The second element in the menu info array is the capability/role that has access to the menu and the
+				 * third element is the menu slug.
+				 */
+				if ( $menu_info[2] === $top_level_menu_slug ) {
+					return $menu_info[1];
+				}
+			}
+
+			return 'read';
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @return string
+		 */
+		private function get_top_level_menu_slug() {
+			return ( $this->is_addon() ?
+				$this->get_parent_instance()->_menu->get_top_level_menu_slug() :
+				$this->_menu->get_top_level_menu_slug() );
+		}
+
+		/**
+		 * Add default Freemius menu items.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 */
+		private function add_submenu_items() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_addon() ) {
+				if ( ! $this->is_activation_mode() ) {
+					if ( $this->is_registered() ) {
+						// Add user account page.
+						$this->add_submenu_item(
+							__fs( 'account', $this->_slug ),
+							array( &$this, '_account_page_render' ),
+							$this->get_plugin_name() . ' &ndash; ' . __fs( 'account', $this->_slug ),
+							'manage_options',
+							'account',
+							array( &$this, '_account_page_load' ),
+							WP_FS__DEFAULT_PRIORITY,
+							$this->_menu->is_submenu_item_visible( 'account' )
+						);
+					}
+
+					// Add contact page.
+					$this->add_submenu_item(
+						__fs( 'contact-us', $this->_slug ),
+						array( &$this, '_contact_page_render' ),
+						$this->get_plugin_name() . ' &ndash; ' . __fs( 'contact-us', $this->_slug ),
+						'manage_options',
+						'contact',
+						'Freemius::_clean_admin_content_section',
+						WP_FS__DEFAULT_PRIORITY,
+						$this->_menu->is_submenu_item_visible( 'contact' )
+					);
+
+					if ( $this->has_addons() ) {
+						$this->add_submenu_item(
+							__fs( 'add-ons', $this->_slug ),
+							array( &$this, '_addons_page_render' ),
+							$this->get_plugin_name() . ' &ndash; ' . __fs( 'add-ons', $this->_slug ),
+							'manage_options',
+							'addons',
+							array( &$this, '_addons_page_load' ),
+							WP_FS__LOWEST_PRIORITY - 1,
+							$this->_menu->is_submenu_item_visible( 'addons' )
+						);
+					}
+
+					$show_pricing = ( $this->has_paid_plan() && $this->_menu->is_submenu_item_visible( 'pricing' ) );
+					// If user don't have paid plans, add pricing page
+					// to support add-ons checkout but don't add the submenu item.
+					// || (isset( $_GET['page'] ) && $this->_menu->get_slug( 'pricing' ) == $_GET['page']);
+
+					// Add upgrade/pricing page.
+					$this->add_submenu_item(
+						( $this->is_paying() ? __fs( 'pricing', $this->_slug ) : __fs( 'upgrade', $this->_slug ) . '&nbsp;&nbsp;&#x27a4;' ),
+						array( &$this, '_pricing_page_render' ),
+						$this->get_plugin_name() . ' &ndash; ' . __fs( 'pricing', $this->_slug ),
+						'manage_options',
+						'pricing',
+						'Freemius::_clean_admin_content_section',
+						WP_FS__LOWEST_PRIORITY,
+						$show_pricing
+					);
+				}
+			}
+
+
+			if ( 0 < count( $this->_menu_items ) ) {
+				if ( ! $this->_menu->is_top_level() ) {
+					fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
+
+					// Append submenu items right after the plugin's submenu item.
+					$this->order_sub_submenu_items();
+				} else {
+					// Append submenu items.
+					$this->embed_submenu_items();
+				}
+			}
+		}
+
+		/**
+		 * Moved the actual submenu item additions to a separated function,
+		 * in order to support sub-submenu items when the plugin's settings
+		 * only have a submenu and not top-level menu item.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 */
+		private function embed_submenu_items() {
+			$item_template = $this->_menu->is_top_level() ?
+				'<span class="fs-submenu-item">%s</span>' :
+				'<span class="fs-submenu-item fs-sub">%s</span>';
+
+			$top_level_menu_capability = $this->get_top_level_menu_capability();
+
+			ksort( $this->_menu_items );
+
+			foreach ( $this->_menu_items as $priority => $items ) {
+				foreach ( $items as $item ) {
+					$capability = ( ! empty( $item['capability'] ) ? $item['capability'] : $top_level_menu_capability );
+
+					if ( ! isset( $item['url'] ) ) {
+						$hook = add_submenu_page(
+							$item['show_submenu'] ?
+								$this->get_top_level_menu_slug() :
+								null,
+							$item['page_title'],
+							sprintf( $item_template, $item['menu_title'] ),
+							$capability,
+							$item['menu_slug'],
+							$item['render_function']
+						);
+
+						if ( false !== $item['before_render_function'] ) {
+							add_action( "load-$hook", $item['before_render_function'] );
+						}
+					} else {
+						add_submenu_page(
+							$this->get_top_level_menu_slug(),
+							$item['page_title'],
+							sprintf( $item_template, $item['menu_title'] ),
+							$capability,
+							$item['menu_slug'],
+							array( $this, '' )
+						);
+					}
+				}
+			}
+		}
+
+		/**
+		 * Re-order the submenu items so all Freemius added new submenu items
+		 * are added right after the plugin's settings submenu item.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 */
+		private function order_sub_submenu_items() {
+			global $submenu;
+
+			$menu_slug = $this->_menu->get_top_level_menu_slug();
+
+			/**
+			 * Before "admin_menu" fires, WordPress will loop over the default submenus and remove pages for which the user
+			 * does not have permissions. So in case a plugin does not have top-level menu but does have submenus under any
+			 * of the default menus, only users that have the right role can access its sub-submenus (Account, Contact Us,
+			 * Support Forum, etc.) since $submenu[ $menu_slug ] will be empty if the user doesn't have permission.
+			 *
+			 * In case a plugin does not have submenus under any of the default menus but does have submenus under the menu
+			 * of another plugin, only users that have the right role can access its sub-submenus since we will use the
+			 * capability needed to access the parent menu as the capability for the submenus that we will add.
+			 */
+			if ( empty( $submenu[ $menu_slug ] ) ) {
+				return;
+			}
+
+			$top_level_menu = &$submenu[ $menu_slug ];
+
+			$all_submenu_items_after = array();
+
+			$found_submenu_item = false;
+
+			foreach ( $top_level_menu as $submenu_id => $meta ) {
+				if ( $found_submenu_item ) {
+					// Remove all submenu items after the plugin's submenu item.
+					$all_submenu_items_after[] = $meta;
+					unset( $top_level_menu[ $submenu_id ] );
+				}
+
+				if ( $this->_menu->get_raw_slug() === $meta[2] ) {
+					// Found the submenu item, put all below.
+					$found_submenu_item = true;
+					continue;
+				}
+			}
+
+			// Embed all plugin's new submenu items.
+			$this->embed_submenu_items();
+
+			// Start with specially high number to make sure it's appended.
+			$i = max( 10000, max( array_keys( $top_level_menu ) ) + 1 );
+			foreach ( $all_submenu_items_after as $meta ) {
+				$top_level_menu[ $i ] = $meta;
+				$i ++;
+			}
+
+			// Sort submenu items.
+			ksort( $top_level_menu );
+		}
+
+		/**
+		 * Displays the Support Forum link when enabled.
+		 *
+		 * Can be filtered like so:
+		 *
+		 *  function _fs_show_support_menu( $is_visible, $menu_id ) {
+		 *      if ( 'support' === $menu_id ) {
+		 *            return _fs->is_registered();
+		 *        }
+		 *        return $is_visible;
+		 *    }
+		 *    _fs()->add_filter('is_submenu_visible', '_fs_show_support_menu', 10, 2);
+		 *
+		 */
+		function _add_default_submenu_items() {
+			if ( ! $this->is_on() ) {
+				return;
+			}
+
+			if ( ! $this->is_activation_mode() ) {
+				if ( $this->_menu->is_submenu_item_visible( 'support' ) ) {
+					$this->add_submenu_link_item(
+						$this->apply_filters( 'support_forum_submenu', __fs( 'support-forum', $this->_slug ) ),
+						$this->apply_filters( 'support_forum_url', 'https://wordpress.org/support/plugin/' . $this->_slug ),
+						'wp-support-forum',
+						null,
+						50
+					);
+				}
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param string        $menu_title
+		 * @param callable      $render_function
+		 * @param bool|string   $page_title
+		 * @param string        $capability
+		 * @param bool|string   $menu_slug
+		 * @param bool|callable $before_render_function
+		 * @param int           $priority
+		 * @param bool          $show_submenu
+		 */
+		function add_submenu_item(
+			$menu_title,
+			$render_function,
+			$page_title = false,
+			$capability = 'manage_options',
+			$menu_slug = false,
+			$before_render_function = false,
+			$priority = WP_FS__DEFAULT_PRIORITY,
+			$show_submenu = true
+		) {
+			$this->_logger->entrance( 'Title = ' . $menu_title );
+
+			if ( $this->is_addon() ) {
+				$parent_fs = $this->get_parent_instance();
+
+				if ( is_object( $parent_fs ) ) {
+					$parent_fs->add_submenu_item(
+						$menu_title,
+						$render_function,
+						$page_title,
+						$capability,
+						$menu_slug,
+						$before_render_function,
+						$priority,
+						$show_submenu
+					);
+
+					return;
+				}
+			}
+
+			if ( ! isset( $this->_menu_items[ $priority ] ) ) {
+				$this->_menu_items[ $priority ] = array();
+			}
+
+			$this->_menu_items[ $priority ][] = array(
+				'page_title'             => is_string( $page_title ) ? $page_title : $menu_title,
+				'menu_title'             => $menu_title,
+				'capability'             => $capability,
+				'menu_slug'              => $this->_menu->get_slug( is_string( $menu_slug ) ? $menu_slug : strtolower( $menu_title ) ),
+				'render_function'        => $render_function,
+				'before_render_function' => $before_render_function,
+				'show_submenu'           => $show_submenu,
+			);
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param string $menu_title
+		 * @param string $url
+		 * @param bool   $menu_slug
+		 * @param string $capability
+		 * @param int    $priority
+		 *
+		 */
+		function add_submenu_link_item(
+			$menu_title,
+			$url,
+			$menu_slug = false,
+			$capability = 'read',
+			$priority = WP_FS__DEFAULT_PRIORITY
+		) {
+			$this->_logger->entrance( 'Title = ' . $menu_title . '; Url = ' . $url );
+
+			if ( $this->is_addon() ) {
+				$parent_fs = $this->get_parent_instance();
+
+				if ( is_object( $parent_fs ) ) {
+					$parent_fs->add_submenu_link_item(
+						$menu_title,
+						$url,
+						$menu_slug,
+						$capability,
+						$priority
+					);
+
+					return;
+				}
+			}
+
+			if ( ! isset( $this->_menu_items[ $priority ] ) ) {
+				$this->_menu_items[ $priority ] = array();
+			}
+
+			$this->_menu_items[ $priority ][] = array(
+				'menu_title'             => $menu_title,
+				'capability'             => $capability,
+				'menu_slug'              => $this->_menu->get_slug( is_string( $menu_slug ) ? $menu_slug : strtolower( $menu_title ) ),
+				'url'                    => $url,
+				'page_title'             => $menu_title,
+				'render_function'        => 'fs_dummy',
+				'before_render_function' => '',
+			);
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		/* Actions / Hooks / Filters
+		------------------------------------------------------------------------------------------------------------------*/
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @param string $tag
+		 *
+		 * @return string
+		 */
+		public function get_action_tag( $tag ) {
+			return "fs_{$tag}_{$this->_slug}";
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @param string $tag
+		 *
+		 * @return string
+		 */
+		private function get_ajax_action_tag( $tag ) {
+			return 'wp_ajax_' . $this->get_action_tag( $tag );
+		}
+
+		/**
+		 * Do action, specific for the current context plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param string $tag     The name of the action to be executed.
+		 * @param mixed  $arg,... Optional. Additional arguments which are passed on to the
+		 *                        functions hooked to the action. Default empty.
+		 *
+		 * @uses   do_action()
+		 */
+		function do_action( $tag, $arg = '' ) {
+			$this->_logger->entrance( $tag );
+
+			$args = func_get_args();
+
+			call_user_func_array( 'do_action', array_merge(
+					array( $this->get_action_tag( $tag ) ),
+					array_slice( $args, 1 ) )
+			);
+		}
+
+		/**
+		 * Add action, specific for the current context plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param string   $tag
+		 * @param callable $function_to_add
+		 * @param int      $priority
+		 * @param int      $accepted_args
+		 *
+		 * @uses   add_action()
+		 */
+		function add_action( $tag, $function_to_add, $priority = WP_FS__DEFAULT_PRIORITY, $accepted_args = 1 ) {
+			$this->_logger->entrance( $tag );
+
+			add_action( $this->get_action_tag( $tag ), $function_to_add, $priority, $accepted_args );
+		}
+
+		/**
+		 * Add AJAX action, specific for the current context plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @param string   $tag
+		 * @param callable $function_to_add
+		 * @param int      $priority
+		 * @param int      $accepted_args
+		 *
+		 * @uses   add_action()
+		 */
+		function add_ajax_action( $tag, $function_to_add, $priority = WP_FS__DEFAULT_PRIORITY, $accepted_args = 1 ) {
+			$this->_logger->entrance( $tag );
+
+			add_action( $this->get_ajax_action_tag( $tag ), $function_to_add, $priority, $accepted_args );
+		}
+
+		/**
+		 * Apply filter, specific for the current context plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param string $tag   The name of the filter hook.
+		 * @param mixed  $value The value on which the filters hooked to `$tag` are applied on.
+		 *
+		 * @return mixed The filtered value after all hooked functions are applied to it.
+		 *
+		 * @uses   apply_filters()
+		 */
+		function apply_filters( $tag, $value ) {
+			$this->_logger->entrance( $tag );
+
+			$args = func_get_args();
+			array_unshift( $args, $this->_slug );
+
+			return call_user_func_array( 'fs_apply_filter', $args );
+		}
+
+		/**
+		 * Add filter, specific for the current context plugin.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param string   $tag
+		 * @param callable $function_to_add
+		 * @param int      $priority
+		 * @param int      $accepted_args
+		 *
+		 * @uses   add_filter()
+		 */
+		function add_filter( $tag, $function_to_add, $priority = WP_FS__DEFAULT_PRIORITY, $accepted_args = 1 ) {
+			$this->_logger->entrance( $tag );
+
+			add_filter( $this->get_action_tag( $tag ), $function_to_add, $priority, $accepted_args );
+		}
+
+		/**
+		 * Check if has filter.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 *
+		 * @param string        $tag
+		 * @param callable|bool $function_to_check Optional. The callback to check for. Default false.
+		 *
+		 * @return false|int
+		 *
+		 * @uses   has_filter()
+		 */
+		function has_filter( $tag, $function_to_check = false ) {
+			$this->_logger->entrance( $tag );
+
+			return has_filter( $this->get_action_tag( $tag ), $function_to_check );
+		}
+
+		/**
+		 * Override default i18n text phrases.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string[] string $key_value
+		 *
+		 * @uses   fs_override_i18n()
+		 */
+		function override_i18n( $key_value ) {
+			fs_override_i18n( $key_value, $this->_slug );
+		}
+
+		/* Account Page
+		------------------------------------------------------------------------------------------------------------------*/
+		/**
+		 * Update site information.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param bool $store Flush to Database if true.
+		 */
+		private function _store_site( $store = true ) {
+			$this->_logger->entrance();
+
+			$encrypted_site       = clone $this->_site;
+			$encrypted_site->plan = $this->_encrypt_entity( $this->_site->plan );
+
+			$sites                 = self::get_all_sites();
+			$sites[ $this->_slug ] = $encrypted_site;
+			self::$_accounts->set_option( 'sites', $sites, $store );
+		}
+
+		/**
+		 * Update plugin's plans information.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @param bool $store Flush to Database if true.
+		 */
+		private function _store_plans( $store = true ) {
+			$this->_logger->entrance();
+
+			$plans = self::get_all_plans();
+
+			// Copy plans.
+			$encrypted_plans = array();
+			for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
+				$encrypted_plans[] = $this->_encrypt_entity( $this->_plans[ $i ] );
+			}
+
+			$plans[ $this->_slug ] = $encrypted_plans;
+			self::$_accounts->set_option( 'plans', $plans, $store );
+		}
+
+		/**
+		 * Update user's plugin licenses.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param bool                $store
+		 * @param string|bool         $plugin_slug
+		 * @param FS_Plugin_License[] $licenses
+		 */
+		private function _store_licenses( $store = true, $plugin_slug = false, $licenses = array() ) {
+			$this->_logger->entrance();
+
+			$all_licenses = self::get_all_licenses();
+
+			if ( ! is_string( $plugin_slug ) ) {
+				$plugin_slug = $this->_slug;
+				$licenses    = $this->_licenses;
+			}
+
+			if ( ! isset( $all_licenses[ $plugin_slug ] ) ) {
+				$all_licenses[ $plugin_slug ] = array();
+			}
+
+			$all_licenses[ $plugin_slug ][ $this->_user->id ] = $licenses;
+
+			self::$_accounts->set_option( 'licenses', $all_licenses, $store );
+		}
+
+		/**
+		 * Update user information.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 *
+		 * @param bool $store Flush to Database if true.
+		 */
+		private function _store_user( $store = true ) {
+			$this->_logger->entrance();
+
+			$users                     = self::get_all_users();
+			$users[ $this->_user->id ] = $this->_user;
+			self::$_accounts->set_option( 'users', $users, $store );
+		}
+
+		/**
+		 * Update new updates information.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param FS_Plugin_Tag|null $update
+		 * @param bool               $store Flush to Database if true.
+		 * @param bool|number        $plugin_id
+		 */
+		private function _store_update( $update, $store = true, $plugin_id = false ) {
+			$this->_logger->entrance();
+
+			if ( $update instanceof FS_Plugin_Tag ) {
+				$update->updated = time();
+			}
+
+			if ( ! is_numeric( $plugin_id ) ) {
+				$plugin_id = $this->_plugin->id;
+			}
+
+			$updates               = self::get_all_updates();
+			$updates[ $plugin_id ] = $update;
+			self::$_accounts->set_option( 'updates', $updates, $store );
+		}
+
+		/**
+		 * Update new updates information.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.6
+		 *
+		 * @param FS_Plugin[] $plugin_addons
+		 * @param bool        $store Flush to Database if true.
+		 */
+		private function _store_addons( $plugin_addons, $store = true ) {
+			$this->_logger->entrance();
+
+			$addons                       = self::get_all_addons();
+			$addons[ $this->_plugin->id ] = $plugin_addons;
+			self::$_accounts->set_option( 'addons', $addons, $store );
+		}
+
+		/**
+		 * Delete plugin's associated add-ons.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.8
+		 *
+		 * @param bool $store
+		 *
+		 * @return bool
+		 */
+		private function _delete_account_addons( $store = true ) {
+			$all_addons = self::get_all_account_addons();
+
+			if ( ! isset( $all_addons[ $this->_plugin->id ] ) ) {
+				return false;
+			}
+
+			unset( $all_addons[ $this->_plugin->id ] );
+
+			self::$_accounts->set_option( 'account_addons', $all_addons, $store );
+
+			return true;
+		}
+
+		/**
+		 * Update account add-ons list.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.6
+		 *
+		 * @param FS_Plugin[] $addons
+		 * @param bool        $store Flush to Database if true.
+		 */
+		private function _store_account_addons( $addons, $store = true ) {
+			$this->_logger->entrance();
+
+			$all_addons                       = self::get_all_account_addons();
+			$all_addons[ $this->_plugin->id ] = $addons;
+			self::$_accounts->set_option( 'account_addons', $all_addons, $store );
+		}
+
+		/**
+		 * Store account params in the Database.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.1
+		 */
+		private function _store_account() {
+			$this->_logger->entrance();
+
+			$this->_store_site( false );
+			$this->_store_user( false );
+			$this->_store_plans( false );
+			$this->_store_licenses( false );
+
+			self::$_accounts->store();
+		}
+
+		/**
+		 * Sync user's information.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 * @uses   FS_Api
+		 */
+		private function _handle_account_user_sync() {
+			$this->_logger->entrance();
+
+			$api = $this->get_api_user_scope();
+
+			// Get user's information.
+			$user = $api->get( '/', true );
+
+			if ( isset( $user->id ) ) {
+				$this->_user->first = $user->first;
+				$this->_user->last  = $user->last;
+				$this->_user->email = $user->email;
+
+				$is_menu_item_account_visible = $this->_menu->is_submenu_item_visible( 'account' );
+
+				if ( $user->is_verified &&
+				     ( ! isset( $this->_user->is_verified ) || false === $this->_user->is_verified )
+				) {
+					$this->_user->is_verified = true;
+
+					$this->do_action( 'account_email_verified', $user->email );
+
+					$this->_admin_notices->add(
+						__fs( 'email-verified-message', $this->_slug ),
+						__fs( 'right-on', $this->_slug ) . '!',
+						'success',
+						// Make admin sticky if account menu item is invisible,
+						// since the page will be auto redirected to the plugin's
+						// main settings page, and the non-sticky message
+						// will disappear.
+						! $is_menu_item_account_visible,
+						false,
+						'email_verified'
+					);
+				}
+
+				// Flush user details to DB.
+				$this->_store_user();
+
+				$this->do_action( 'after_account_user_sync', $user );
+
+				/**
+				 * If account menu item is hidden, redirect to plugin's main settings page.
+				 *
+				 * @author Vova Feldman (@svovaf)
+				 * @since  1.1.6
+				 *
+				 * @link   https://github.com/Freemius/wordpress-sdk/issues/6
+				 */
+				if ( ! $is_menu_item_account_visible ) {
+					if ( fs_redirect( $this->_get_admin_page_url() ) ) {
+						exit();
+					}
+				}
+			}
+		}
+
+		/**
+		 * @param bool $store
+		 *
+		 * @return FS_Plugin_Plan|object|false
+		 */
+		private function _enrich_site_plan( $store = true ) {
+			// Try to load plan from local cache.
+			$plan = $this->_get_plan_by_id( $this->_site->plan->id );
+
+			if ( false === $plan ) {
+				$plan = $this->_fetch_site_plan();
+			}
+
+			if ( $plan instanceof FS_Plugin_Plan ) {
+				$this->_update_plan( $plan, $store );
+			}
+
+			return $plan;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 * @uses   FS_Api
+		 *
+		 * @param bool $store
+		 *
+		 * @return FS_Plugin_Plan|object|false
+		 */
+		private function _enrich_site_trial_plan( $store = true ) {
+			// Try to load plan from local cache.
+			$trial_plan = $this->_get_plan_by_id( $this->_site->trial_plan_id );
+
+			if ( false === $trial_plan ) {
+				$trial_plan = $this->_fetch_site_plan( $this->_site->trial_plan_id );
+			}
+
+			if ( $trial_plan instanceof FS_Plugin_Plan ) {
+				$this->_storage->store( 'trial_plan', $trial_plan, $store );
+			}
+
+			return $trial_plan;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 * @uses   FS_Api
+		 *
+		 * @param number|bool $license_id
+		 *
+		 * @return FS_Subscription|object|bool
+		 */
+		private function _fetch_site_license_subscription( $license_id = false ) {
+			$this->_logger->entrance();
+			$api = $this->get_api_site_scope();
+
+			if ( ! is_numeric( $license_id ) ) {
+				$license_id = $this->_license->id;
+			}
+
+			$result = $api->get( "/licenses/{$license_id}/subscriptions.json", true );
+
+			return ! isset( $result->error ) ?
+				( ( is_array( $result->subscriptions ) && 0 < count( $result->subscriptions ) ) ?
+					new FS_Subscription( $result->subscriptions[0] ) :
+					false
+				) :
+				$result;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 * @uses   FS_Api
+		 *
+		 * @param number|bool $plan_id
+		 *
+		 * @return FS_Plugin_Plan|object
+		 */
+		private function _fetch_site_plan( $plan_id = false ) {
+			$this->_logger->entrance();
+			$api = $this->get_api_site_scope();
+
+			if ( ! is_numeric( $plan_id ) ) {
+				$plan_id = $this->_site->plan->id;
+			}
+
+			$plan = $api->get( "/plans/{$plan_id}.json", true );
+
+			return ! isset( $plan->error ) ? new FS_Plugin_Plan( $plan ) : $plan;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 * @uses   FS_Api
+		 *
+		 * @return FS_Plugin_Plan[]|object
+		 */
+		private function _fetch_plugin_plans() {
+			$this->_logger->entrance();
+			$api = $this->get_api_site_scope();
+
+			$result = $api->get( '/plans.json', true );
+
+			if ( ! $this->is_api_error( $result ) ) {
+				for ( $i = 0, $len = count( $result->plans ); $i < $len; $i ++ ) {
+					$result->plans[ $i ] = new FS_Plugin_Plan( $result->plans[ $i ] );
+				}
+
+				$result = $result->plans;
+			}
+
+			return $result;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 * @uses   FS_Api
+		 *
+		 * @param number|bool $plugin_id
+		 * @param number|bool $site_license_id
+		 *
+		 * @return FS_Plugin_License[]|object
+		 */
+		private function _fetch_licenses( $plugin_id = false, $site_license_id = false ) {
+			$this->_logger->entrance();
+
+			$api = $this->get_api_user_scope();
+
+			if ( ! is_numeric( $plugin_id ) ) {
+				$plugin_id = $this->_plugin->id;
+			}
+
+			$result = $api->get( "/plugins/{$plugin_id}/licenses.json", true );
+
+			$is_site_license_synced = false;
+
+			if ( ! isset( $result->error ) ) {
+				for ( $i = 0, $len = count( $result->licenses ); $i < $len; $i ++ ) {
+					$result->licenses[ $i ] = new FS_Plugin_License( $result->licenses[ $i ] );
+
+					if ( ( ! $is_site_license_synced ) && is_numeric( $site_license_id ) ) {
+						$is_site_license_synced = ( $site_license_id == $result->licenses[ $i ]->id );
+					}
+				}
+
+				$result = $result->licenses;
+			}
+
+			if ( ! $is_site_license_synced ) {
+				$api = $this->get_api_site_scope();
+
+				if ( is_numeric( $site_license_id ) ) {
+					// Try to retrieve a foreign license that is linked to the install.
+					$api_result = $api->call( '/licenses.json' );
+
+					if ( ! isset( $api_result->error ) ) {
+						$licenses = $api_result->licenses;
+
+						if ( ! empty( $licenses ) ) {
+							$result[] = new FS_Plugin_License( $licenses[0] );
+						}
+					}
+				} else if ( is_object( $this->_license ) ) {
+					// Fetch foreign license by ID and license key.
+					$license = $api->get( "/licenses/{$this->_license->id}.json?license_key=" .
+					                      urlencode( $this->_license->secret_key ) );
+
+					if ( ! isset( $license->error ) ) {
+						$result[] = new FS_Plugin_License( $license );
+					}
+				}
+			}
+
+			return $result;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.0
+		 * @uses   FS_Api
+		 *
+		 * @param number|bool $plugin_id
+		 *
+		 * @return FS_Payment[]|object
+		 */
+		function _fetch_payments( $plugin_id = false ) {
+			$this->_logger->entrance();
+
+			$api = $this->get_api_user_scope();
+
+			if ( ! is_numeric( $plugin_id ) ) {
+				$plugin_id = $this->_plugin->id;
+			}
+
+			$result = $api->get( "/plugins/{$plugin_id}/payments.json", true );
+
+			if ( ! isset( $result->error ) ) {
+				for ( $i = 0, $len = count( $result->payments ); $i < $len; $i ++ ) {
+					$result->payments[ $i ] = new FS_Payment( $result->payments[ $i ] );
+				}
+				$result = $result->payments;
+			}
+
+			return $result;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param FS_Plugin_Plan $plan
+		 * @param bool           $store
+		 */
+		private function _update_plan( $plan, $store = false ) {
+			$this->_logger->entrance();
+
+			$this->_site->plan = $plan;
+			$this->_store_site( $store );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param FS_Plugin_License[] $licenses
+		 * @param string|bool         $plugin_slug
+		 */
+		private function _update_licenses( $licenses, $plugin_slug = false ) {
+			$this->_logger->entrance();
+
+			if ( is_array( $licenses ) ) {
+				for ( $i = 0, $len = count( $licenses ); $i < $len; $i ++ ) {
+					$licenses[ $i ]->updated = time();
+				}
+			}
+
+			if ( ! is_string( $plugin_slug ) ) {
+				$this->_licenses = $licenses;
+			}
+
+			$this->_store_licenses( true, $plugin_slug, $licenses );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool|number $plugin_id
+		 * @param bool        $flush Since 1.1.7.3
+		 *
+		 * @return object|false New plugin tag info if exist.
+		 */
+		private function _fetch_newer_version( $plugin_id = false, $flush = true ) {
+			$latest_tag = $this->_fetch_latest_version( $plugin_id, $flush );
+
+			if ( ! is_object( $latest_tag ) ) {
+				return false;
+			}
+
+			// Check if version is actually newer.
+			$has_new_version =
+				// If it's an non-installed add-on then always return latest.
+				( $this->_is_addon_id( $plugin_id ) && ! $this->is_addon_activated( $plugin_id ) ) ||
+				// Compare versions.
+				version_compare( $this->get_plugin_version(), $latest_tag->version, '<' );
+
+			$this->_logger->departure( $has_new_version ? 'Found newer plugin version ' . $latest_tag->version : 'No new version' );
+
+			return $has_new_version ? $latest_tag : false;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param bool|number $plugin_id
+		 * @param bool        $flush Since 1.1.7.3
+		 *
+		 * @return bool|FS_Plugin_Tag
+		 */
+		function get_update( $plugin_id = false, $flush = true ) {
+			$this->_logger->entrance();
+
+			if ( ! is_numeric( $plugin_id ) ) {
+				$plugin_id = $this->_plugin->id;
+			}
+
+			$this->_check_updates( true, $plugin_id, $flush );
+			$updates = $this->get_all_updates();
+
+			return isset( $updates[ $plugin_id ] ) && is_object( $updates[ $plugin_id ] ) ? $updates[ $plugin_id ] : false;
+		}
+
+		/**
+		 * Check if site assigned with active license.
+		 *
+		 * @author     Vova Feldman (@svovaf)
+		 * @since      1.0.6
+		 *
+		 * @deprecated Please use has_active_valid_license() instead because license can be cancelled.
+		 */
+		function has_active_license() {
+			return (
+				is_object( $this->_license ) &&
+				is_numeric( $this->_license->id ) &&
+				! $this->_license->is_expired()
+			);
+		}
+
+		/**
+		 * Check if site assigned with active & valid (not expired) license.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 */
+		function has_active_valid_license() {
+			return (
+				is_object( $this->_license ) &&
+				is_numeric( $this->_license->id ) &&
+				$this->_license->is_active() &&
+				$this->_license->is_valid()
+			);
+		}
+
+		/**
+		 * Check if site assigned with license with enabled features.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool
+		 */
+		function has_features_enabled_license() {
+			return (
+				is_object( $this->_license ) &&
+				is_numeric( $this->_license->id ) &&
+				$this->_license->is_features_enabled()
+			);
+		}
+
+		/**
+		 * Check if user is a trial or have feature enabled license.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @return bool
+		 */
+		function can_use_premium_code() {
+			return $this->is_trial() || $this->has_features_enabled_license();
+		}
+
+		/**
+		 * Sync site's plan.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @uses   FS_Api
+		 *
+		 * @param bool $background Hints the method if it's a background sync. If false, it means that was initiated by
+		 *                         the admin.
+		 */
+		private function _sync_license( $background = false ) {
+			$this->_logger->entrance();
+
+			$plugin_id = fs_request_get( 'plugin_id', $this->get_id() );
+
+			$is_addon_sync = ( ! $this->_plugin->is_addon() && $plugin_id != $this->get_id() );
+
+			if ( $is_addon_sync ) {
+				$this->_sync_addon_license( $plugin_id, $background );
+			} else {
+				$this->_sync_plugin_license( $background );
+			}
+
+			$this->do_action( 'after_account_plan_sync', $this->_site->plan->name );
+		}
+
+		/**
+		 * Sync plugin's add-on license.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 * @uses   FS_Api
+		 *
+		 * @param number $addon_id
+		 * @param bool   $background
+		 */
+		private function _sync_addon_license( $addon_id, $background ) {
+			$this->_logger->entrance();
+
+			if ( $this->is_addon_activated( $addon_id ) ) {
+				// If already installed, use add-on sync.
+				$fs_addon = self::get_instance_by_id( $addon_id );
+				$fs_addon->_sync_license( $background );
+
+				return;
+			}
+
+			// Validate add-on exists.
+			$addon = $this->get_addon( $addon_id );
+
+			if ( ! is_object( $addon ) ) {
+				return;
+			}
+
+			// Add add-on into account add-ons.
+			$account_addons = $this->get_account_addons();
+			if ( ! is_array( $account_addons ) ) {
+				$account_addons = array();
+			}
+			$account_addons[] = $addon->id;
+			$account_addons   = array_unique( $account_addons );
+			$this->_store_account_addons( $account_addons );
+
+			// Load add-on licenses.
+			$licenses = $this->_fetch_licenses( $addon->id );
+
+			// Sync add-on licenses.
+			if ( ! isset( $licenses->error ) ) {
+				$this->_update_licenses( $licenses, $addon->slug );
+
+				if ( ! $this->is_addon_installed( $addon->slug ) && FS_License_Manager::has_premium_license( $licenses ) ) {
+					$plans_result = $this->get_api_site_or_plugin_scope()->get( "/addons/{$addon_id}/plans.json" );
+
+					if ( ! isset( $plans_result->error ) ) {
+						$plans = array();
+						foreach ( $plans_result->plans as $plan ) {
+							$plans[] = new FS_Plugin_Plan( $plan );
+						}
+
+						$this->_admin_notices->add_sticky(
+							FS_Plan_Manager::instance()->has_free_plan( $plans ) ?
+								sprintf(
+									__fs( 'addon-successfully-upgraded-message', $this->_slug ),
+									$addon->title
+								) . ' ' . $this->_get_latest_download_link(
+									__fs( 'download-latest-version', $this->_slug ),
+									$addon_id
+								)
+								:
+								sprintf(
+									__fs( 'addon-successfully-purchased-message', $this->_slug ),
+									$addon->title
+								) . ' ' . $this->_get_latest_download_link(
+									__fs( 'download-latest-version', $this->_slug ),
+									$addon_id
+								),
+							'addon_plan_upgraded_' . $addon->slug,
+							__fs( 'yee-haw', $this->_slug ) . '!'
+						);
+					}
+				}
+			}
+		}
+
+		/**
+		 * Sync site's plugin plan.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 * @uses   FS_Api
+		 *
+		 * @param bool $background Hints the method if it's a background sync. If false, it means that was initiated by
+		 *                         the admin.
+		 */
+		private function _sync_plugin_license( $background = false ) {
+			$this->_logger->entrance();
+
+			/**
+			 * Sync site info.
+			 *
+			 * @todo This line will execute install sync on a daily basis, even if running the free version (for opted-in users). The reason we want to keep it that way is for cases when the user was a paying customer, then there was a failure in subscription payment, and then after some time the payment was successful. This could be heavily optimized. For example, we can skip the $flush if the current install was never associated with a paid version.
+			 */
+			$site = $this->send_install_update( array(), true );
+
+			$plan_change = 'none';
+
+			if ( $this->is_api_error( $site ) ) {
+				// Show API messages only if not background sync or if paying customer.
+				if ( ! $background || $this->is_paying() ) {
+					// Try to ping API to see if not blocked.
+					if ( ! FS_Api::test() ) {
+						/**
+						 * Failed to ping API - blocked!
+						 *
+						 * @author Vova Feldman (@svovaf)
+						 * @since  1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
+						 */
+						$api = $this->get_api_site_scope();
+
+						if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
+							self::$_global_admin_notices->add(
+								sprintf(
+									__fs( 'server-blocking-access', $this->_slug ),
+									$this->get_plugin_name(),
+									'<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
+								) . '<br> ' . __fs( 'server-error-message', $this->_slug ) . var_export( $site->error, true ),
+								__fs( 'oops', $this->_slug ) . '...',
+								'error',
+								$background,
+								false,
+								'api_blocked'
+							);
+						}
+					} else {
+						// Authentication params are broken.
+						$this->_admin_notices->add(
+							__fs( 'wrong-authentication-param-message', $this->_slug ),
+							__fs( 'oops', $this->_slug ) . '...',
+							'error'
+						);
+					}
+				}
+
+				// No reason to continue with license sync while there are API issues.
+				return;
+			}
+
+			// Remove sticky API connectivity message.
+			self::$_global_admin_notices->remove_sticky( 'api_blocked' );
+
+			$site = new FS_Site( $site );
+
+			// Sync plans.
+			$this->_sync_plans();
+
+			if ( ! $this->has_paid_plan() ) {
+				$this->_site = $site;
+				$this->_enrich_site_plan( true );
+				$this->_store_site();
+			} else {
+				/**
+				 * Sync licenses. Pass the site's license ID so that the foreign licenses will be fetched if the license
+				 * associated with that ID is not included in the user's licenses collection.
+				 */
+				$this->_sync_licenses( $site->license_id );
+
+				// Check if plan / license changed.
+				if ( ! FS_Entity::equals( $site->plan, $this->_site->plan ) ||
+				     // Check if trial started.
+				     $site->trial_plan_id != $this->_site->trial_plan_id ||
+				     $site->trial_ends != $this->_site->trial_ends ||
+				     // Check if license changed.
+				     $site->license_id != $this->_site->license_id
+				) {
+					if ( $site->is_trial() && ( ! $this->_site->is_trial() || $site->trial_ends != $this->_site->trial_ends ) ) {
+						// New trial started.
+						$this->_site = $site;
+						$plan_change = 'trial_started';
+
+						// Store trial plan information.
+						$this->_enrich_site_trial_plan( true );
+
+						// For trial with subscription use-case.
+						$new_license = is_null( $site->license_id ) ? null : $this->_get_license_by_id( $site->license_id );
+
+						if ( is_object( $new_license ) && $new_license->is_valid() ) {
+							$this->_site = $site;
+							$this->_update_site_license( $new_license );
+							$this->_store_licenses();
+							$this->_enrich_site_plan( true );
+
+							$this->_sync_site_subscription( $this->_license );
+						}
+					} else if ( $this->_site->is_trial() && ! $site->is_trial() && ! is_numeric( $site->license_id ) ) {
+						// Was in trial, but now trial expired and no license ID.
+						// New trial started.
+						$this->_site = $site;
+						$plan_change = 'trial_expired';
+
+						// Clear trial plan information.
+						$this->_storage->trial_plan = null;
+
+					} else {
+						$is_free = $this->is_free_plan();
+
+						// Make sure license exist and not expired.
+						$new_license = is_null( $site->license_id ) ?
+							null :
+							$this->_get_license_by_id( $site->license_id );
+
+						if ( $is_free && is_null( $new_license ) && $this->has_any_license() && $this->_license->is_cancelled ) {
+							// License cancelled.
+							$this->_site = $site;
+							$this->_update_site_license( $new_license );
+							$this->_store_licenses();
+							$this->_enrich_site_plan( true );
+
+							$plan_change = 'cancelled';
+						} else if ( $is_free && ( ( ! is_object( $new_license ) || $new_license->is_expired() ) ) ) {
+							// The license is expired, so ignore upgrade method.
+						} else {
+							// License changed.
+							$this->_site = $site;
+							$this->_update_site_license( $new_license );
+							$this->_store_licenses();
+							$this->_enrich_site_plan( true );
+
+							$plan_change = $is_free ?
+								'upgraded' :
+								( is_object( $new_license ) ?
+									'changed' :
+									'downgraded' );
+						}
+					}
+
+					// Store updated site info.
+					$this->_store_site();
+				} else {
+					if ( is_object( $this->_license ) && $this->_license->is_expired() ) {
+						if ( ! $this->has_features_enabled_license() ) {
+							$this->_deactivate_license();
+							$plan_change = 'downgraded';
+						} else {
+							$plan_change = 'expired';
+						}
+					}
+
+					if ( is_numeric( $site->license_id ) && is_object( $this->_license ) ) {
+						$this->_sync_site_subscription( $this->_license );
+					}
+				}
+			}
+
+			if ( $this->has_paid_plan() ) {
+				switch ( $plan_change ) {
+					case 'none':
+						if ( ! $background && is_admin() ) {
+							$plan = $this->is_trial() ?
+								$this->_storage->trial_plan :
+								$this->_site->plan;
+
+							$this->_admin_notices->add(
+								sprintf(
+									__fs( 'plan-did-not-change-message', $this->_slug ),
+									'<i><b>' . $plan->title . ( $this->is_trial() ? ' ' . __fs( 'trial', $this->_slug ) : '' ) . '</b></i>'
+								) . ' ' . sprintf(
+									'<a href="%s">%s</a>',
+									$this->contact_url(
+										'bug',
+										sprintf( __fs( 'plan-did-not-change-email-message', $this->_slug ),
+											strtoupper( $plan->name )
+										)
+									),
+									__fs( 'contact-us-here', $this->_slug )
+								),
+								__fs( 'hmm', $this->_slug ) . '...'
+							);
+						}
+						break;
+					case 'upgraded':
+						$this->_admin_notices->add_sticky(
+							sprintf(
+								__fs( 'plan-upgraded-message', $this->_slug ),
+								'<i>' . $this->get_plugin_name() . '</i>'
+							) . $this->get_complete_upgrade_instructions(),
+							'plan_upgraded',
+							__fs( 'yee-haw', $this->_slug ) . '!'
+						);
+
+						$this->_admin_notices->remove_sticky( array(
+							'trial_started',
+							'trial_promotion',
+							'trial_expired',
+							'activation_complete',
+						) );
+						break;
+					case 'changed':
+						$this->_admin_notices->add_sticky(
+							sprintf(
+								__fs( 'plan-changed-to-x-message', $this->_slug ),
+								$this->_site->plan->title
+							),
+							'plan_changed'
+						);
+
+						$this->_admin_notices->remove_sticky( array(
+							'trial_started',
+							'trial_promotion',
+							'trial_expired',
+							'activation_complete',
+						) );
+						break;
+					case 'downgraded':
+						$this->_admin_notices->add_sticky(
+							sprintf( __fs( 'license-expired-blocking-message', $this->_slug ) ),
+							'license_expired',
+							__fs( 'hmm', $this->_slug ) . '...'
+						);
+						$this->_admin_notices->remove_sticky( 'plan_upgraded' );
+						break;
+					case 'cancelled':
+						$this->_admin_notices->add(
+							__fs( 'license-cancelled', $this->_slug ) . ' ' .
+							sprintf(
+								'<a href="%s">%s</a>',
+								$this->contact_url( 'bug' ),
+								__fs( 'contact-us-here', $this->_slug )
+							),
+							__fs( 'hmm', $this->_slug ) . '...',
+							'error'
+						);
+						$this->_admin_notices->remove_sticky( 'plan_upgraded' );
+						break;
+					case 'expired':
+						$this->_admin_notices->add_sticky(
+							sprintf( __fs( 'license-expired-non-blocking-message', $this->_slug ), $this->_site->plan->title ),
+							'license_expired',
+							__fs( 'hmm', $this->_slug ) . '...'
+						);
+						$this->_admin_notices->remove_sticky( 'plan_upgraded' );
+						break;
+					case 'trial_started':
+						$this->_admin_notices->add_sticky(
+							sprintf(
+								__fs( 'trial-started-message', $this->_slug ),
+								'<i>' . $this->get_plugin_name() . '</i>'
+							) . $this->get_complete_upgrade_instructions( $this->_storage->trial_plan->title ),
+							'trial_started',
+							__fs( 'yee-haw', $this->_slug ) . '!'
+						);
+
+						$this->_admin_notices->remove_sticky( array(
+							'trial_promotion',
+						) );
+						break;
+					case 'trial_expired':
+						$this->_admin_notices->add_sticky(
+							__fs( 'trial-expired-message', $this->_slug ),
+							'trial_expired',
+							__fs( 'hmm', $this->_slug ) . '...'
+						);
+						$this->_admin_notices->remove_sticky( array(
+							'trial_started',
+							'trial_promotion',
+							'plan_upgraded',
+						) );
+						break;
+				}
+			}
+
+			if ( 'none' !== $plan_change ) {
+				$this->do_action( 'after_license_change', $plan_change, $this->_site->plan );
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param bool $background
+		 */
+		protected function _activate_license( $background = false ) {
+			$this->_logger->entrance();
+
+			$license_id = fs_request_get( 'license_id' );
+
+			if ( FS_Plugin_License::is_valid_id( $license_id ) && $license_id == $this->_site->license_id ) {
+				// License is already activated.
+				return;
+			}
+
+			$premium_license = FS_Plugin_License::is_valid_id( $license_id ) ?
+				$this->_get_license_by_id( $license_id ) :
+				$this->_get_available_premium_license();
+
+			if ( ! is_object( $premium_license ) ) {
+				return;
+			}
+
+			/**
+			 * If the premium license is already associated with the install, just
+			 * update the license reference (activation is not required).
+			 *
+			 * @since 1.1.9
+			 */
+			if ( $premium_license->id == $this->_site->license_id ) {
+				// License is already activated.
+				$this->_update_site_license( $premium_license );
+				$this->_enrich_site_plan( false );
+				$this->_store_account();
+
+				return;
+			}
+
+			if ( $this->_site->user_id != $premium_license->user_id ) {
+				$api_request_params = array( 'license_key' => $premium_license->secret_key );
+			} else {
+				$api_request_params = array();
+			}
+
+			$api     = $this->get_api_site_scope();
+			$license = $api->call( "/licenses/{$premium_license->id}.json", 'put', $api_request_params );
+
+			if ( $this->is_api_error( $license ) ) {
+				if ( ! $background ) {
+					$this->_admin_notices->add( sprintf(
+							'%s %s',
+							__fs( 'license-activation-failed-message', $this->_slug ),
+							( is_object( $license ) && isset( $license->error ) ?
+								$license->error->message :
+								sprintf( '%s<br><code>%s</code>',
+									__fs( 'server-error-message', $this->_slug ),
+									var_export( $license, true )
+								)
+							)
+						),
+						__fs( 'hmm', $this->_slug ) . '...',
+						'error'
+					);
+				}
+
+				return;
+			}
+
+			$premium_license = new FS_Plugin_License( $license );
+
+			// Updated site plan.
+			$site = $this->get_api_site_scope()->get( '/', true );
+			if ( ! $this->is_api_error( $site ) ) {
+				$this->_site = new FS_Site( $site );
+			}
+			$this->_update_site_license( $premium_license );
+			$this->_enrich_site_plan( false );
+
+			$this->_store_account();
+
+			if ( ! $background ) {
+				$this->_admin_notices->add_sticky(
+					__fs( 'license-activated-message', $this->_slug ) .
+					$this->get_complete_upgrade_instructions(),
+					'license_activated',
+					__fs( 'yee-haw', $this->_slug ) . '!'
+				);
+			}
+
+			$this->_admin_notices->remove_sticky( array(
+				'trial_promotion',
+				'license_expired',
+			) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param bool $show_notice
+		 */
+		protected function _deactivate_license( $show_notice = true ) {
+			$this->_logger->entrance();
+
+			if ( ! is_object( $this->_license ) ) {
+				$this->_admin_notices->add(
+					sprintf( __fs( 'no-active-license-message', $this->_slug ), $this->_site->plan->title ),
+					__fs( 'hmm', $this->_slug ) . '...'
+				);
+
+				return;
+			}
+
+			$api     = $this->get_api_site_scope();
+			$license = $api->call( "/licenses/{$this->_site->license_id}.json", 'delete' );
+
+			if ( isset( $license->error ) ) {
+				$this->_admin_notices->add(
+					__fs( 'license-deactivation-failed-message', $this->_slug ) . '<br> ' .
+					__fs( 'server-error-message', $this->_slug ) . ' ' . var_export( $license->error, true ),
+					__fs( 'hmm', $this->_slug ) . '...',
+					'error'
+				);
+
+				return;
+			}
+
+			// Update license cache.
+			for ( $i = 0, $len = count( $this->_licenses ); $i < $len; $i ++ ) {
+				if ( $license->id == $this->_licenses[ $i ]->id ) {
+					$this->_licenses[ $i ] = new FS_Plugin_License( $license );
+				}
+			}
+
+			// Updated site plan to default.
+			$this->_sync_plans();
+			$this->_site->plan->id = $this->_plans[0]->id;
+			// Unlink license from site.
+			$this->_update_site_license( null );
+			$this->_enrich_site_plan( false );
+
+			$this->_store_account();
+
+			if ( $show_notice ) {
+				$this->_admin_notices->add(
+					sprintf( __fs( 'license-deactivation-message', $this->_slug ), $this->_site->plan->title ),
+					__fs( 'ok', $this->_slug )
+				);
+			}
+
+			$this->_admin_notices->remove_sticky( array(
+				'plan_upgraded',
+				'license_activated',
+			) );
+		}
+
+		/**
+		 * Site plan downgrade.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @uses   FS_Api
+		 */
+		private function _downgrade_site() {
+			$this->_logger->entrance();
+
+			$api  = $this->get_api_site_scope();
+			$site = $api->call( 'downgrade.json', 'put' );
+
+			$plan_downgraded = false;
+			$plan            = false;
+			if ( ! isset( $site->error ) ) {
+				$prev_plan_id = $this->_site->plan->id;
+
+				// Update new site plan id.
+				$this->_site->plan->id = $site->plan_id;
+
+				$plan         = $this->_enrich_site_plan();
+				$subscription = $this->_sync_site_subscription( $this->_license );
+
+				// Plan downgraded if plan was changed or subscription was cancelled.
+				$plan_downgraded = ( $plan instanceof FS_Plugin_Plan && $prev_plan_id != $plan->id ) ||
+				                   ( is_object( $subscription ) && ! isset( $subscription->error ) && ! $subscription->is_active() );
+			} else {
+				// handle different error cases.
+
+			}
+
+			if ( $plan_downgraded ) {
+				// Remove previous sticky message about upgrade (if exist).
+				$this->_admin_notices->remove_sticky( 'plan_upgraded' );
+
+				$this->_admin_notices->add(
+					sprintf( __fs( 'plan-x-downgraded-message', $this->_slug ),
+						$plan->title,
+						human_time_diff( time(), strtotime( $this->_license->expiration ) )
+					)
+				);
+
+				// Store site updates.
+				$this->_store_site();
+			} else {
+				$this->_admin_notices->add(
+					__fs( 'plan-downgraded-failure-message', $this->_slug ),
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8.1
+		 *
+		 * @param bool|string $plan_name
+		 *
+		 * @return bool If trial was successfully started.
+		 */
+		function start_trial( $plan_name = false ) {
+			$this->_logger->entrance();
+
+			if ( $this->is_trial() ) {
+				// Already in trial mode.
+				$this->_admin_notices->add(
+					__fs( 'in-trial-mode', $this->_slug ),
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+
+				return false;
+			}
+
+			if ( $this->_site->is_trial_utilized() ) {
+				// Trial was already utilized.
+				$this->_admin_notices->add(
+					__fs( 'trial-utilized', $this->_slug ),
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+
+				return false;
+			}
+
+			if ( false !== $plan_name ) {
+				$plan = $this->get_plan_by_name( $plan_name );
+
+				if ( false === $plan ) {
+					// Plan doesn't exist.
+					$this->_admin_notices->add(
+						sprintf( __fs( 'trial-plan-x-not-exist', $this->_slug ), $plan_name ),
+						__fs( 'oops', $this->_slug ) . '...',
+						'error'
+					);
+
+					return false;
+				}
+
+				if ( ! $plan->has_trial() ) {
+					// Plan doesn't exist.
+					$this->_admin_notices->add(
+						sprintf( __fs( 'plan-x-no-trial', $this->_slug ), $plan_name ),
+						__fs( 'oops', $this->_slug ) . '...',
+						'error'
+					);
+
+					return false;
+				}
+			} else {
+				if ( ! $this->has_trial_plan() ) {
+					// None of the plans have a trial.
+					$this->_admin_notices->add(
+						__fs( 'no-trials', $this->_slug ),
+						__fs( 'oops', $this->_slug ) . '...',
+						'error'
+					);
+
+					return false;
+				}
+
+				$plans_with_trial = FS_Plan_Manager::instance()->get_trial_plans( $this->_plans );
+
+				$plan = $plans_with_trial[0];
+			}
+
+			$api  = $this->get_api_site_scope();
+			$plan = $api->call( "plans/{$plan->id}/trials.json", 'post' );
+
+			if ( $this->is_api_error( $plan ) ) {
+				// Some API error while trying to start the trial.
+				$this->_admin_notices->add(
+					__fs( 'unexpected-api-error', $this->_slug ) . ' ' . var_export( $plan, true ),
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+
+				return false;
+			}
+
+			// Sync license.
+			$this->_sync_license();
+
+			return $this->is_trial();
+		}
+
+		/**
+		 * Cancel site trial.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @uses   FS_Api
+		 */
+		private function _cancel_trial() {
+			$this->_logger->entrance();
+
+			if ( ! $this->is_trial() ) {
+				$this->_admin_notices->add(
+					__fs( 'trial-cancel-no-trial-message', $this->_slug ),
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+
+				return;
+			}
+
+			$api  = $this->get_api_site_scope();
+			$site = $api->call( 'trials.json', 'delete' );
+
+			$trial_cancelled = false;
+
+			if ( ! $this->is_api_error( $site ) ) {
+				$prev_trial_ends = $this->_site->trial_ends;
+
+				if ( $this->is_paid_trial() ) {
+					$this->_license->expiration   = $site->trial_ends;
+					$this->_license->is_cancelled = true;
+					$this->_update_site_license( $this->_license );
+					$this->_store_licenses();
+
+					// Clear subscription reference.
+					$this->_sync_site_subscription( null );
+				}
+
+				// Update site info.
+				$this->_site = new FS_Site( $site );
+				$this->_enrich_site_plan();
+
+				$trial_cancelled = ( $prev_trial_ends != $site->trial_ends );
+			} else {
+				// handle different error cases.
+
+			}
+
+			if ( $trial_cancelled ) {
+				// Remove previous sticky messages about upgrade or trial (if exist).
+				$this->_admin_notices->remove_sticky( array(
+					'trial_started',
+					'trial_promotion',
+					'plan_upgraded',
+				) );
+
+				// Store site updates.
+				$this->_store_site();
+
+				// Clear trial plan information.
+				unset( $this->_storage->trial_plan );
+
+				if ( ! $this->is_addon() ||
+				     ! $this->deactivate_premium_only_addon_without_license( true )
+				) {
+					$this->_admin_notices->add(
+						sprintf( __fs( 'trial-cancel-message', $this->_slug ), $this->_storage->trial_plan->title )
+					);
+				}
+			} else {
+				$this->_admin_notices->add(
+					__fs( 'trial-cancel-failure-message', $this->_slug ),
+					__fs( 'oops', $this->_slug ) . '...',
+					'error'
+				);
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param bool|number $plugin_id
+		 *
+		 * @return bool
+		 */
+		private function _is_addon_id( $plugin_id ) {
+			return is_numeric( $plugin_id ) && ( $this->get_id() != $plugin_id );
+		}
+
+		/**
+		 * Check if user eligible to download premium version updates.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool
+		 */
+		private function _can_download_premium() {
+			return $this->has_active_valid_license() ||
+			       ( $this->is_trial() && ! $this->get_trial_plan()->is_free() );
+		}
+
+		/**
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param bool|number $addon_id
+		 * @param string      $type "json" or "zip"
+		 *
+		 * @return string
+		 */
+		private function _get_latest_version_endpoint( $addon_id = false, $type = 'json' ) {
+
+			$is_addon = $this->_is_addon_id( $addon_id );
+
+			$is_premium = null;
+			if ( ! $is_addon ) {
+				$is_premium = $this->_can_download_premium();
+			} else if ( $this->is_addon_activated( $addon_id ) ) {
+				$is_premium = self::get_instance_by_id( $addon_id )->_can_download_premium();
+			}
+
+			return // If add-on, then append add-on ID.
+				( $is_addon ? "/addons/$addon_id" : '' ) .
+				'/updates/latest.' . $type .
+				// If add-on and not yet activated, try to fetch based on server licensing.
+				( is_bool( $is_premium ) ? '?is_premium=' . json_encode( $is_premium ) : '' );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool|number $addon_id
+		 * @param bool        $flush Since 1.1.7.3
+		 *
+		 * @return object|false Plugin latest tag info.
+		 */
+		function _fetch_latest_version( $addon_id = false, $flush = true ) {
+			$this->_logger->entrance();
+
+			/**
+			 * @since 1.1.7.3 Check for plugin updates from Freemius only if opted-in.
+			 * @since 1.1.7.4 Also check updates for add-ons.
+			 */
+			if ( ! $this->is_registered() &&
+			     ! $this->_is_addon_id( $addon_id )
+			) {
+				return false;
+			}
+
+			$tag = $this->get_api_site_or_plugin_scope()->get(
+				$this->_get_latest_version_endpoint( $addon_id, 'json' ),
+				$flush
+			);
+
+			$latest_version = ( is_object( $tag ) && isset( $tag->version ) ) ? $tag->version : 'couldn\'t get';
+
+			$this->_logger->departure( 'Latest version ' . $latest_version );
+
+			return ( is_object( $tag ) && isset( $tag->version ) ) ? $tag : false;
+		}
+
+		#region Download Plugin ------------------------------------------------------------------
+
+		/**
+		 * Download latest plugin version, based on plan.
+		 *
+		 * Not like _download_latest(), this will redirect the page
+		 * to secure download url to prevent dual download (from FS to WP server,
+		 * and then from WP server to the client / browser).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param bool|number $plugin_id
+		 *
+		 * @uses   FS_Api
+		 * @uses   wp_redirect()
+		 */
+		private function _download_latest_directly( $plugin_id = false ) {
+			$this->_logger->entrance();
+
+			wp_redirect( $this->_get_latest_download_api_url( $plugin_id ) );
+		}
+
+		/**
+		 * Get latest plugin FS API download URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param bool|number $plugin_id
+		 *
+		 * @return string
+		 */
+		private function _get_latest_download_api_url( $plugin_id = false ) {
+			$this->_logger->entrance();
+
+			return $this->get_api_site_scope()->get_signed_url(
+				$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
+			);
+		}
+
+		/**
+		 * Get payment invoice URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.0
+		 *
+		 * @param bool|number $payment_id
+		 *
+		 * @return string
+		 */
+		function _get_invoice_api_url( $payment_id = false ) {
+			$this->_logger->entrance();
+
+			return $this->get_api_user_scope()->get_signed_url(
+				"/payments/{$payment_id}/invoice.pdf"
+			);
+		}
+
+		/**
+		 * Get latest plugin download link.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param string      $label
+		 * @param bool|number $plugin_id
+		 *
+		 * @return string
+		 */
+		private function _get_latest_download_link( $label, $plugin_id = false ) {
+			return sprintf(
+				'<a target="_blank" href="%s">%s</a>',
+				$this->_get_latest_download_local_url( $plugin_id ),
+				$label
+			);
+		}
+
+		/**
+		 * Get latest plugin download local URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param bool|number $plugin_id
+		 *
+		 * @return string
+		 */
+		function _get_latest_download_local_url( $plugin_id = false ) {
+			// Add timestamp to protect from caching.
+			$params = array( 'ts' => WP_FS__SCRIPT_START_TIME );
+
+			if ( ! empty( $plugin_id ) ) {
+				$params['plugin_id'] = $plugin_id;
+			}
+
+			return $this->get_account_url( 'download_latest', $params );
+		}
+
+		#endregion Download Plugin ------------------------------------------------------------------
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @uses   FS_Api
+		 *
+		 * @param bool        $background Hints the method if it's a background updates check. If false, it means that
+		 *                                was initiated by the admin.
+		 * @param bool|number $plugin_id
+		 * @param bool        $flush      Since 1.1.7.3
+		 */
+		private function _check_updates( $background = false, $plugin_id = false, $flush = true ) {
+			$this->_logger->entrance();
+
+			// Check if there's a newer version for download.
+			$new_version = $this->_fetch_newer_version( $plugin_id, $flush );
+
+			$update = null;
+			if ( is_object( $new_version ) ) {
+				$update = new FS_Plugin_Tag( $new_version );
+
+				if ( ! $background ) {
+					$this->_admin_notices->add(
+						sprintf(
+							__fs( 'version-x-released', $this->_slug ) . ' ' . __fs( 'please-download-x', $this->_slug ),
+							$update->version,
+							sprintf(
+								'<a href="%s" target="_blank">%s</a>',
+								$this->get_account_url( 'download_latest' ),
+								sprintf( __fs( 'latest-x-version', $this->_slug ), $this->_site->plan->title )
+							)
+						),
+						__fs( 'new', $this->_slug ) . '!'
+					);
+				}
+			} else if ( false === $new_version && ! $background ) {
+				$this->_admin_notices->add(
+					__fs( 'you-have-latest', $this->_slug ),
+					__fs( 'you-are-good', $this->_slug )
+				);
+			}
+
+			$this->_store_update( $update, true, $plugin_id );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool $flush Since 1.1.7.3 add 24 hour cache by default.
+		 *
+		 * @return FS_Plugin[]
+		 *
+		 * @uses   FS_Api
+		 */
+		private function _sync_addons( $flush = false ) {
+			$this->_logger->entrance();
+
+			$api = $this->get_api_site_or_plugin_scope();
+
+			/**
+			 * @since 1.2.1
+			 *
+			 * If there's a cached version of the add-ons and not asking
+			 * for a flush, just use the currently stored add-ons.
+			 */
+			if ( ! $flush && $api->is_cached( '/addons.json?enriched=true' ) ) {
+				$addons = self::get_all_addons();
+
+				return $addons[ $this->_plugin->id ];
+			}
+
+			$result = $api->get( '/addons.json?enriched=true', $flush );
+
+			$addons = array();
+			if ( ! $this->is_api_error( $result ) ) {
+				for ( $i = 0, $len = count( $result->plugins ); $i < $len; $i ++ ) {
+					$addons[ $i ] = new FS_Plugin( $result->plugins[ $i ] );
+				}
+
+				$this->_store_addons( $addons, true );
+			}
+
+			return $addons;
+		}
+
+		/**
+		 * Handle user email update.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 * @uses   FS_Api
+		 *
+		 * @param string $new_email
+		 *
+		 * @return object
+		 */
+		private function _update_email( $new_email ) {
+			$this->_logger->entrance();
+
+
+			$api  = $this->get_api_user_scope();
+			$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,email,is_verified", 'put', array(
+				'email'                   => $new_email,
+				'after_email_confirm_url' => $this->_get_admin_page_url(
+					'account',
+					array( 'fs_action' => 'sync_user' )
+				),
+			) );
+
+			if ( ! isset( $user->error ) ) {
+				$this->_user->email       = $user->email;
+				$this->_user->is_verified = $user->is_verified;
+				$this->_store_user();
+			} else {
+				// handle different error cases.
+
+			}
+
+			return $user;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 *
+		 * @param mixed $result
+		 *
+		 * @return bool Is API result contains an error.
+		 */
+		private function is_api_error( $result ) {
+			return ( is_object( $result ) && isset( $result->error ) ) ||
+			       is_string( $result );
+		}
+
+		/**
+		 * Start install ownership change.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 * @uses   FS_Api
+		 *
+		 * @param string $candidate_email
+		 *
+		 * @return bool Is ownership change successfully initiated.
+		 */
+		private function init_change_owner( $candidate_email ) {
+			$this->_logger->entrance();
+
+			$api    = $this->get_api_site_scope();
+			$result = $api->call( "/users/{$this->_user->id}.json", 'put', array(
+				'email'             => $candidate_email,
+				'after_confirm_url' => $this->_get_admin_page_url(
+					'account',
+					array( 'fs_action' => 'change_owner' )
+				),
+			) );
+
+			return ! $this->is_api_error( $result );
+		}
+
+		/**
+		 * Handle install ownership change.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 * @uses   FS_Api
+		 *
+		 * @return bool Was ownership change successfully complete.
+		 */
+		private function complete_change_owner() {
+			$this->_logger->entrance();
+
+			$site_result = $this->get_api_site_scope( true )->get();
+			$site        = new FS_Site( $site_result );
+			$this->_site = $site;
+
+			$user     = new FS_User();
+			$user->id = fs_request_get( 'user_id' );
+
+			// Validate install's user and given user.
+			if ( $user->id != $this->_site->user_id ) {
+				return false;
+			}
+
+			$user->public_key = fs_request_get( 'user_public_key' );
+			$user->secret_key = fs_request_get( 'user_secret_key' );
+
+			// Fetch new user information.
+			$this->_user = $user;
+			$user_result = $this->get_api_user_scope( true )->get();
+			$user        = new FS_User( $user_result );
+			$this->_user = $user;
+
+			$this->_set_account( $user, $site );
+
+			return true;
+		}
+
+		/**
+		 * Handle user name update.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 * @uses   FS_Api
+		 *
+		 * @return object
+		 */
+		private function update_user_name() {
+			$this->_logger->entrance();
+			$name = fs_request_get( 'fs_user_name_' . $this->_slug, '' );
+
+			$api  = $this->get_api_user_scope();
+			$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,first,last", 'put', array(
+				'name' => $name,
+			) );
+
+			if ( ! isset( $user->error ) ) {
+				$this->_user->first = $user->first;
+				$this->_user->last  = $user->last;
+				$this->_store_user();
+			} else {
+				// handle different error cases.
+
+			}
+
+			return $user;
+		}
+
+		/**
+		 * Verify user email.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 * @uses   FS_Api
+		 */
+		private function verify_email() {
+			$this->_handle_account_user_sync();
+
+			if ( $this->_user->is_verified() ) {
+				return;
+			}
+
+			$api    = $this->get_api_site_scope();
+			$result = $api->call( "/users/{$this->_user->id}/verify.json", 'put', array(
+				'after_email_confirm_url' => $this->_get_admin_page_url(
+					'account',
+					array( 'fs_action' => 'sync_user' )
+				)
+			) );
+
+			if ( ! isset( $result->error ) ) {
+				$this->_admin_notices->add( sprintf(
+					__fs( 'verification-email-sent-message', $this->_slug ),
+					sprintf( '<a href="mailto:%1s">%2s</a>', esc_url( $this->_user->email ), $this->_user->email )
+				) );
+			} else {
+				// handle different error cases.
+
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.2
+		 *
+		 * @param array $params
+		 *
+		 * @return string
+		 */
+		private function get_activation_url( $params = array() ) {
+			return $this->apply_filters( 'connect_url', $this->_get_admin_page_url( '', $params ) );
+		}
+
+		/**
+		 * Get the URL of the page that should be loaded after the user connect or skip in the opt-in screen.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string $filter Filter name.
+		 *
+		 * @return string
+		 */
+		private function get_after_activation_url( $filter ) {
+			$first_time_path = $this->_menu->get_first_time_path();
+
+			return $this->apply_filters(
+				$filter,
+				empty( $first_time_path ) ?
+					$this->_get_admin_page_url() :
+					$first_time_path
+			);
+		}
+
+		/**
+		 * Handle account page updates / edits / actions.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 */
+		private function _handle_account_edits() {
+			if ( ! current_user_can( 'activate_plugins' ) ) {
+				return;
+			}
+
+			$plugin_id = fs_request_get( 'plugin_id', $this->get_id() );
+			$action    = fs_get_action();
+
+			switch ( $action ) {
+				case 'delete_account':
+					check_admin_referer( $action );
+
+					if ( $plugin_id == $this->get_id() ) {
+						$this->delete_account_event();
+
+						// Clear user and site.
+						$this->_site = null;
+						$this->_user = null;
+
+						if ( fs_redirect( $this->get_activation_url() ) ) {
+							exit();
+						}
+					} else {
+						if ( $this->is_addon_activated( $plugin_id ) ) {
+							$fs_addon = self::get_instance_by_id( $plugin_id );
+							$fs_addon->delete_account_event();
+
+							if ( fs_redirect( $this->_get_admin_page_url( 'account' ) ) ) {
+								exit();
+							}
+						}
+					}
+
+					return;
+
+				case 'downgrade_account':
+					check_admin_referer( $action );
+					$this->_downgrade_site();
+
+					return;
+
+				case 'activate_license':
+					check_admin_referer( $action );
+
+					if ( $plugin_id == $this->get_id() ) {
+						$this->_activate_license();
+					} else {
+						if ( $this->is_addon_activated( $plugin_id ) ) {
+							$fs_addon = self::get_instance_by_id( $plugin_id );
+							$fs_addon->_activate_license();
+						}
+					}
+
+					return;
+
+				case 'deactivate_license':
+					check_admin_referer( $action );
+
+					if ( $plugin_id == $this->get_id() ) {
+						$this->_deactivate_license();
+					} else {
+						if ( $this->is_addon_activated( $plugin_id ) ) {
+							$fs_addon = self::get_instance_by_id( $plugin_id );
+							$fs_addon->_deactivate_license();
+						}
+					}
+
+					return;
+
+				case 'check_updates':
+					check_admin_referer( $action );
+					$this->_check_updates();
+
+					return;
+
+				case 'change_owner':
+					$state = fs_request_get( 'state', 'init' );
+					switch ( $state ) {
+						case 'init':
+							$candidate_email = fs_request_get( 'candidate_email', '' );
+
+							if ( $this->init_change_owner( $candidate_email ) ) {
+								$this->_admin_notices->add( sprintf( __fs( 'change-owner-request-sent-x', $this->_slug ), '<b>' . $this->_user->email . '</b>' ) );
+							}
+							break;
+						case 'owner_confirmed':
+							$candidate_email = fs_request_get( 'candidate_email', '' );
+
+							$this->_admin_notices->add( sprintf( __fs( 'change-owner-request_owner-confirmed', $this->_slug ), '<b>' . $candidate_email . '</b>' ) );
+							break;
+						case 'candidate_confirmed':
+							if ( $this->complete_change_owner() ) {
+								$this->_admin_notices->add_sticky(
+									sprintf( __fs( 'change-owner-request_candidate-confirmed', $this->_slug ), '<b>' . $this->_user->email . '</b>' ),
+									'ownership_changed',
+									__fs( 'congrats', $this->_slug ) . '!'
+								);
+							} else {
+								// @todo Handle failed ownership change message.
+							}
+							break;
+					}
+
+					return;
+
+				case 'update_email':
+					check_admin_referer( 'update_email' );
+
+					$new_email = fs_request_get( 'fs_email_' . $this->_slug, '' );
+					$result    = $this->_update_email( $new_email );
+
+					if ( isset( $result->error ) ) {
+						switch ( $result->error->code ) {
+							case 'user_exist':
+								$this->_admin_notices->add(
+									__fs( 'user-exist-message', $this->_slug ) . ' ' .
+									sprintf( __fs( 'user-exist-message_ownership', $this->_slug ), '<b>' . $new_email . '</b>' ) .
+									sprintf(
+										'<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
+										$this->get_account_url( 'change_owner', array(
+											'state'           => 'init',
+											'candidate_email' => $new_email
+										) ),
+										__fs( 'change-ownership', $this->_slug )
+									),
+									__fs( 'oops', $this->_slug ) . '...',
+									'error'
+								);
+								break;
+						}
+					} else {
+						$this->_admin_notices->add( __fs( 'email-updated-message', $this->_slug ) );
+					}
+
+					return;
+
+				case 'update_user_name':
+					check_admin_referer( 'update_user_name' );
+
+					$result = $this->update_user_name();
+
+					if ( isset( $result->error ) ) {
+						$this->_admin_notices->add(
+							__fs( 'name-update-failed-message', $this->_slug ),
+							__fs( 'oops', $this->_slug ) . '...',
+							'error'
+						);
+					} else {
+						$this->_admin_notices->add( __fs( 'name-updated-message', $this->_slug ) );
+					}
+
+					return;
+
+				#region Actions that might be called from external links (e.g. email)
+
+				case 'cancel_trial':
+					if ( $plugin_id == $this->get_id() ) {
+						$this->_cancel_trial();
+					} else {
+						if ( $this->is_addon_activated( $plugin_id ) ) {
+							$fs_addon = self::get_instance_by_id( $plugin_id );
+							$fs_addon->_cancel_trial();
+						}
+					}
+
+					return;
+
+				case 'verify_email':
+					$this->verify_email();
+
+					return;
+
+				case 'sync_user':
+					$this->_handle_account_user_sync();
+
+					return;
+
+				case $this->_slug . '_sync_license':
+					$this->_sync_license();
+
+					return;
+
+				case 'download_latest':
+					$this->_download_latest_directly( $plugin_id );
+
+					return;
+
+				#endregion
+			}
+
+			if ( WP_FS__IS_POST_REQUEST ) {
+				$properties = array( 'site_secret_key', 'site_id', 'site_public_key' );
+				foreach ( $properties as $p ) {
+					if ( 'update_' . $p === $action ) {
+						check_admin_referer( $action );
+
+						$this->_logger->log( $action );
+
+						$site_property                      = substr( $p, strlen( 'site_' ) );
+						$site_property_value                = fs_request_get( 'fs_' . $p . '_' . $this->_slug, '' );
+						$this->get_site()->{$site_property} = $site_property_value;
+
+						// Store account after modification.
+						$this->_store_site();
+
+						$this->do_action( 'account_property_edit', 'site', $site_property, $site_property_value );
+
+						$this->_admin_notices->add( sprintf(
+							__fs( 'x-updated', $this->_slug ),
+							'<b>' . str_replace( '_', ' ', $p ) . '</b>' ) );
+
+						return;
+					}
+				}
+			}
+		}
+
+		/**
+		 * Account page resources load.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 */
+		function _account_page_load() {
+			$this->_logger->entrance();
+
+			$this->_logger->info( var_export( $_REQUEST, true ) );
+
+			fs_enqueue_local_style( 'fs_account', '/admin/account.css' );
+
+			if ( $this->has_addons() ) {
+				wp_enqueue_script( 'plugin-install' );
+				add_thickbox();
+
+				function fs_addons_body_class( $classes ) {
+					$classes .= ' plugins-php';
+
+					return $classes;
+				}
+
+				add_filter( 'admin_body_class', 'fs_addons_body_class' );
+			}
+
+			if ( $this->has_paid_plan() &&
+			     ! $this->has_any_license() &&
+			     ! $this->is_sync_executed()
+			) {
+				/**
+				 * If no licenses found and no sync job was executed during the last 24 hours,
+				 * just execute the sync job right away (blocking execution).
+				 *
+				 * @since 1.1.7.3
+				 */
+				$this->run_manual_sync();
+			}
+
+			$this->_handle_account_edits();
+
+			$this->do_action( 'account_page_load_before_departure' );
+		}
+
+		/**
+		 * Render account page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 */
+		function _account_page_render() {
+			$this->_logger->entrance();
+
+			$vars = array( 'slug' => $this->_slug );
+			if ( 'billing' === fs_request_get( 'tab' ) ) {
+				fs_require_once_template( 'billing.php', $vars );
+			} else {
+				fs_require_once_template( 'account.php', $vars );
+			}
+		}
+
+		/**
+		 * Render account connect page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 */
+		function _connect_page_render() {
+			$this->_logger->entrance();
+
+			$vars = array( 'slug' => $this->_slug );
+			fs_require_once_template( 'connect.php', $vars );
+		}
+
+		/**
+		 * Load required resources before add-ons page render.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 */
+		function _addons_page_load() {
+			$this->_logger->entrance();
+
+			fs_enqueue_local_style( 'fs_addons', '/admin/add-ons.css' );
+
+			wp_enqueue_script( 'plugin-install' );
+			add_thickbox();
+
+			function fs_addons_body_class( $classes ) {
+				$classes .= ' plugins-php';
+
+				return $classes;
+			}
+
+			add_filter( 'admin_body_class', 'fs_addons_body_class' );
+
+			if ( ! $this->is_registered() && $this->is_org_repo_compliant() ) {
+				$this->_admin_notices->add(
+					sprintf( __fs( 'addons-info-external-message', $this->_slug ), '<b>' . $this->get_plugin_name() . '</b>' ),
+					__fs( 'heads-up', $this->_slug ),
+					'update-nag'
+				);
+			}
+		}
+
+		/**
+		 * Render add-ons page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 */
+		function _addons_page_render() {
+			$this->_logger->entrance();
+
+			$vars = array( 'slug' => $this->_slug );
+			fs_require_once_template( 'add-ons.php', $vars );
+		}
+
+		/* Pricing & Upgrade
+		------------------------------------------------------------------------------------------------------------------*/
+		/**
+		 * Render pricing page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 */
+		function _pricing_page_render() {
+			$this->_logger->entrance();
+
+			$vars = array( 'slug' => $this->_slug );
+
+			if ( 'true' === fs_request_get( 'checkout', false ) ) {
+				fs_require_once_template( 'checkout.php', $vars );
+			} else {
+				fs_require_once_template( 'pricing.php', $vars );
+			}
+		}
+
+		#region Contact Us ------------------------------------------------------------------
+
+		/**
+		 * Render contact-us page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 */
+		function _contact_page_render() {
+			$this->_logger->entrance();
+
+			$vars = array( 'slug' => $this->_slug );
+			fs_require_once_template( 'contact.php', $vars );
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		/**
+		 * Hide all admin notices to prevent distractions.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @uses   remove_all_actions()
+		 */
+		private static function _hide_admin_notices() {
+			remove_all_actions( 'admin_notices' );
+			remove_all_actions( 'network_admin_notices' );
+			remove_all_actions( 'all_admin_notices' );
+			remove_all_actions( 'user_admin_notices' );
+		}
+
+		static function _clean_admin_content_section_hook() {
+			self::_hide_admin_notices();
+
+			// Hide footer.
+			echo '<style>#wpfooter { display: none !important; }</style>';
+		}
+
+		/**
+		 * Attach to admin_head hook to hide all admin notices.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 */
+		static function _clean_admin_content_section() {
+			add_action( 'admin_head', 'Freemius::_clean_admin_content_section_hook' );
+		}
+
+		/* CSS & JavaScript
+		------------------------------------------------------------------------------------------------------------------*/
+		/*		function _enqueue_script($handle, $src) {
+					$url = plugins_url( substr( WP_FS__DIR_JS, strlen( $this->_plugin_dir_path ) ) . '/assets/js/' . $src );
+
+					$this->_logger->entrance( 'script = ' . $url );
+
+					wp_enqueue_script( $handle, $url );
+				}*/
+
+		/* SDK
+		------------------------------------------------------------------------------------------------------------------*/
+		private $_user_api;
+
+		/**
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @param bool $flush
+		 *
+		 * @return FS_Api
+		 */
+		function get_api_user_scope( $flush = false ) {
+			if ( ! isset( $this->_user_api ) || $flush ) {
+				$this->_user_api = FS_Api::instance(
+					$this->_slug,
+					'user',
+					$this->_user->id,
+					$this->_user->public_key,
+					! $this->is_live(),
+					$this->_user->secret_key
+				);
+			}
+
+			return $this->_user_api;
+		}
+
+		private $_site_api;
+
+		/**
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @param bool $flush
+		 *
+		 * @return FS_Api
+		 */
+		function get_api_site_scope( $flush = false ) {
+			if ( ! isset( $this->_site_api ) || $flush ) {
+				$this->_site_api = FS_Api::instance(
+					$this->_slug,
+					'install',
+					$this->_site->id,
+					$this->_site->public_key,
+					! $this->is_live(),
+					$this->_site->secret_key
+				);
+			}
+
+			return $this->_site_api;
+		}
+
+		private $_plugin_api;
+
+		/**
+		 * Get plugin public API scope.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return FS_Api
+		 */
+		function get_api_plugin_scope() {
+			if ( ! isset( $this->_plugin_api ) ) {
+				$this->_plugin_api = FS_Api::instance(
+					$this->_slug,
+					'plugin',
+					$this->_plugin->id,
+					$this->_plugin->public_key,
+					! $this->is_live()
+				);
+			}
+
+			return $this->_plugin_api;
+		}
+
+		/**
+		 * Get site API scope object (fallback to public plugin scope when not registered).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return FS_Api
+		 */
+		function get_api_site_or_plugin_scope() {
+			return $this->is_registered() ?
+				$this->get_api_site_scope() :
+				$this->get_api_plugin_scope();
+		}
+
+		/**
+		 * Show trial promotional notice (if any trial exist).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param $plans
+		 */
+		function _check_for_trial_plans( $plans ) {
+			$this->_storage->has_trial_plan = FS_Plan_Manager::instance()->has_trial_plan( $plans );
+		}
+
+		/**
+		 * Show trial promotional notice (if any trial exist).
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		function _add_trial_notice() {
+			// Check if trial already utilized.
+			if ( $this->_site->is_trial_utilized() ) {
+				return;
+			}
+
+			// Check if already paying.
+			if ( $this->is_paying() ) {
+				return;
+			}
+
+			// Check if trial message is already shown.
+			if ( $this->_admin_notices->has_sticky( 'trial_promotion' ) ) {
+				return;
+			}
+
+			$trial_plans       = FS_Plan_Manager::instance()->get_trial_plans( $this->_plans );
+			$trial_plans_count = count( $trial_plans );
+
+			// Check if any of the plans contains trial.
+			if ( 0 === $trial_plans_count ) {
+				return;
+			}
+
+			/**
+			 * @var FS_Plugin_Plan $paid_plan
+			 */
+			$paid_plan            = $trial_plans[0];
+			$require_subscription = $paid_plan->is_require_subscription;
+			$upgrade_url          = $this->get_trial_url();
+			$cc_string            = $require_subscription ?
+				sprintf( __fs( 'no-commitment-for-x-days', $this->_slug ), $paid_plan->trial_period ) :
+				__fs( 'no-cc-required', $this->_slug ) . '!';
+
+
+			$total_paid_plans = count( $this->_plans ) - ( FS_Plan_Manager::instance()->has_free_plan( $this->_plans ) ? 1 : 0 );
+
+			if ( $total_paid_plans === $trial_plans_count ) {
+				// All paid plans have trials.
+				$message = sprintf(
+					__fs( 'hey', $this->_slug ) . '! ' . __fs( 'trial-x-promotion-message', $this->_slug ),
+					sprintf( '<b>%s</b>', $this->get_plugin_name() ),
+					strtolower( __fs( 'awesome', $this->_slug ) ),
+					$paid_plan->trial_period
+				);
+			} else {
+				$plans_string = '';
+				for ( $i = 0; $i < $trial_plans_count; $i ++ ) {
+					$plans_string .= sprintf( '<a href="%s">%s</a>', $upgrade_url, $trial_plans[ $i ]->title );
+
+					if ( $i < $trial_plans_count - 2 ) {
+						$plans_string .= ', ';
+					} else if ( $i == $trial_plans_count - 2 ) {
+						$plans_string .= ' and ';
+					}
+				}
+
+				// Not all paid plans have trials.
+				$message = sprintf(
+					__fs( 'hey', $this->_slug ) . '! ' . __fs( 'trial-x-promotion-message', $this->_slug ),
+					sprintf( '<b>%s</b>', $this->get_plugin_name() ),
+					$plans_string,
+					$paid_plan->trial_period
+				);
+			}
+
+			$message .= ' ' . $cc_string;
+
+			// Add start trial button.
+			$message .= ' ' . sprintf(
+					'<a style="margin-left: 10px; vertical-align: super;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
+					$upgrade_url,
+					__fs( 'start-free-trial', $this->_slug )
+				);
+
+			$this->_admin_notices->add_sticky(
+				$this->apply_filters( 'trial_promotion_message', $message ),
+				'trial_promotion',
+				'',
+				'promotion'
+			);
+
+			$this->_storage->trial_promotion_shown = WP_FS__SCRIPT_START_TIME;
+		}
+
+		/* Action Links
+		------------------------------------------------------------------------------------------------------------------*/
+		private $_action_links_hooked = false;
+		private $_action_links = array();
+
+		/**
+		 * Hook to plugin action links filter.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 */
+		private function hook_plugin_action_links() {
+			$this->_logger->entrance();
+
+			$this->_action_links_hooked = true;
+
+			$this->_logger->log( 'Adding action links hooks.' );
+
+			// Add action link to settings page.
+			add_filter( 'plugin_action_links_' . $this->_plugin_basename, array(
+				&$this,
+				'_modify_plugin_action_links_hook'
+			), WP_FS__DEFAULT_PRIORITY, 2 );
+			add_filter( 'network_admin_plugin_action_links_' . $this->_plugin_basename, array(
+				&$this,
+				'_modify_plugin_action_links_hook'
+			), WP_FS__DEFAULT_PRIORITY, 2 );
+		}
+
+		/**
+		 * Add plugin action link.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @param      $label
+		 * @param      $url
+		 * @param bool $external
+		 * @param int  $priority
+		 * @param bool $key
+		 */
+		function add_plugin_action_link( $label, $url, $external = false, $priority = WP_FS__DEFAULT_PRIORITY, $key = false ) {
+			$this->_logger->entrance();
+
+			if ( ! isset( $this->_action_links[ $priority ] ) ) {
+				$this->_action_links[ $priority ] = array();
+			}
+
+			if ( false === $key ) {
+				$key = preg_replace( "/[^A-Za-z0-9 ]/", '', strtolower( $label ) );
+			}
+
+			$this->_action_links[ $priority ][] = array(
+				'label'    => $label,
+				'href'     => $url,
+				'key'      => $key,
+				'external' => $external
+			);
+		}
+
+		/**
+		 * Adds Upgrade and Add-Ons links to the main Plugins page link actions collection.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 */
+		function _add_upgrade_action_link() {
+			$this->_logger->entrance();
+
+			if ( $this->is_registered() ) {
+				if ( ! $this->is_paying() && $this->has_paid_plan() ) {
+					$this->add_plugin_action_link(
+						__fs( 'upgrade', $this->_slug ),
+						$this->get_upgrade_url(),
+						false,
+						7,
+						'upgrade'
+					);
+				}
+
+				if ( $this->has_addons() ) {
+					$this->add_plugin_action_link(
+						__fs( 'add-ons', $this->_slug ),
+						$this->_get_admin_page_url( 'addons' ),
+						false,
+						9,
+						'addons'
+					);
+				}
+			}
+		}
+
+		/**
+		 * Adds "Activate License" or "Change License" link to the main Plugins page link actions collection.
+		 *
+		 * @author Leo Fajardo (@leorw)
+		 * @since  1.1.9
+		 */
+		function _add_license_action_link() {
+			$this->_logger->entrance();
+
+			if ( $this->is_free_plan() && $this->is_addon() ) {
+				return;
+			}
+
+			$link_text = __fs(
+				$this->is_free_plan() ? 'activate-license' : 'change-license',
+				$this->_slug
+			);
+
+			$this->add_plugin_action_link(
+				$link_text,
+				'#',
+				false,
+				11,
+				( 'activate-license ' . $this->_slug )
+			);
+		}
+
+		/**
+		 * Get the URL of the page that should be loaded right after the plugin activation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.4
+		 *
+		 * @return string
+		 */
+		function get_after_plugin_activation_redirect_url() {
+			$url       = false;
+			$plugin_fs = false;
+
+			if ( ! $this->is_addon() ) {
+				$first_time_path = $this->_menu->get_first_time_path();
+				$plugin_fs       = $this;
+				$url             = $plugin_fs->is_activation_mode() ?
+					$plugin_fs->get_activation_url() :
+					( empty( $first_time_path ) ?
+						$this->_get_admin_page_url() :
+						$first_time_path );
+			} else {
+				if ( $this->is_parent_plugin_installed() ) {
+					$plugin_fs = self::get_parent_instance();
+				}
+
+				if ( is_object( $plugin_fs ) ) {
+					if ( ! $plugin_fs->is_registered() ) {
+						// Forward to parent plugin connect when parent not registered.
+						$url = $plugin_fs->get_activation_url();
+					} else {
+						// Forward to account page.
+						$url = $plugin_fs->_get_admin_page_url( 'account' );
+					}
+				}
+			}
+
+			return $url;
+		}
+
+		/**
+		 * Forward page to activation page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 */
+		function _redirect_on_activation_hook() {
+			$url = $this->get_after_plugin_activation_redirect_url();
+
+			if ( is_string( $url ) ) {
+				fs_redirect( $url );
+				exit();
+			}
+		}
+
+		/**
+		 * Modify plugin's page action links collection.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @param array $links
+		 * @param       $file
+		 *
+		 * @return array
+		 */
+		function _modify_plugin_action_links_hook( $links, $file ) {
+			$this->_logger->entrance();
+
+			$passed_deactivate = false;
+			$deactivate_link   = '';
+			$before_deactivate = array();
+			$after_deactivate  = array();
+			foreach ( $links as $key => $link ) {
+				if ( 'deactivate' === $key ) {
+					$deactivate_link   = $link;
+					$passed_deactivate = true;
+					continue;
+				}
+
+				if ( ! $passed_deactivate ) {
+					$before_deactivate[ $key ] = $link;
+				} else {
+					$after_deactivate[ $key ] = $link;
+				}
+			}
+
+			ksort( $this->_action_links );
+
+			foreach ( $this->_action_links as $new_links ) {
+				foreach ( $new_links as $link ) {
+					$before_deactivate[ $link['key'] ] = '<a href="' . $link['href'] . '"' . ( $link['external'] ? ' target="_blank"' : '' ) . '>' . $link['label'] . '</a>';
+				}
+			}
+
+			if ( ! empty( $deactivate_link ) ) {
+				if ( ! $this->is_paying_or_trial() || $this->is_premium() ) {
+					/*
+					 * This HTML element is used to identify the correct plugin when attaching an event to its Deactivate link.
+					 *
+					 * If user is paying or in trial and have the free version installed,
+					 * assume that the deactivation is for the upgrade process, so this is not needed.
+					 */
+					$deactivate_link .= '<i class="fs-slug" data-slug="' . $this->_slug . '"></i>';
+				}
+
+				// Append deactivation link.
+				$before_deactivate['deactivate'] = $deactivate_link;
+			}
+
+			return array_merge( $before_deactivate, $after_deactivate );
+		}
+
+		/**
+		 * Adds admin message.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param string $message
+		 * @param string $title
+		 * @param string $type
+		 */
+		function add_admin_message( $message, $title = '', $type = 'success' ) {
+			$this->_admin_notices->add( $message, $title, $type );
+		}
+
+		/**
+		 * Adds sticky admin message.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.0
+		 *
+		 * @param string $message
+		 * @param string $id
+		 * @param string $title
+		 * @param string $type
+		 */
+		function add_sticky_admin_message( $message, $id, $title = '', $type = 'success' ) {
+			$this->_admin_notices->add_sticky( $message, $id, $title, $type );
+		}
+
+		/**
+		 * Helper function that returns the final steps for the upgrade completion.
+		 *
+		 * If the module is already running the premium code, returns an empty string.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @param string $plan_title
+		 *
+		 * @return string
+		 */
+		private function get_complete_upgrade_instructions( $plan_title = '' ) {
+			if ( $this->is_premium() ) {
+				return '';
+			}
+
+			if ( empty( $plan_title ) ) {
+				$plan_title = $this->_site->plan->title;
+			}
+
+			return sprintf(
+				' %s: <ol><li>%s.</li><li>%s.</li><li>%s (<a href="%s" target="_blank">%s</a>).</li></ol>',
+				__fs( 'follow-steps-to-complete-upgrade', $this->_slug ),
+				$this->_get_latest_download_link( sprintf(
+					__fs( 'download-latest-x-version', $this->_slug ),
+					$plan_title
+				) ),
+				__fs( 'deactivate-free-version', $this->_slug ),
+				__fs( 'upload-and-activate', $this->_slug ),
+				'//bit.ly/upload-wp-plugin',
+				__fs( 'howto-upload-activate', $this->_slug )
+			);
+		}
+
+		/* Plugin Auto-Updates (@since 1.0.4)
+		------------------------------------------------------------------------------------------------------------------*/
+		/**
+		 * @var string[]
+		 */
+		private static $_auto_updated_plugins;
+
+		/**
+		 * @todo   TEST IF IT WORKS!!!
+		 *
+		 * Include plugins for automatic updates based on stored settings.
+		 *
+		 * @see    http://wordpress.stackexchange.com/questions/131394/how-do-i-exclude-plugins-from-getting-automatically-updated/131404#131404
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool   $update Whether to update (not used for plugins)
+		 * @param object $item   The plugin's info
+		 *
+		 * @return bool
+		 */
+		static function _include_plugins_in_auto_update( $update, $item ) {
+			// Before version 3.8.2 the $item was the file name of the plugin,
+			// while in 3.8.2 statistics were added (https://core.trac.wordpress.org/changeset/27905).
+			$by_slug = ( (int) str_replace( '.', '', get_bloginfo( 'version' ) ) >= 382 );
+
+			if ( ! isset( self::$_auto_updated_plugins ) ) {
+				$plugins = self::$_accounts->get_option( 'plugins', array() );
+
+				$identifiers = array();
+				foreach ( $plugins as $p ) {
+					/**
+					 * @var FS_Plugin $p
+					 */
+					if ( isset( $p->auto_update ) && $p->auto_update ) {
+						$identifiers[] = ( $by_slug ? $p->slug : plugin_basename( $p->file ) );
+					}
+				}
+
+				self::$_auto_updated_plugins = $identifiers;
+			}
+
+			if ( in_array( $by_slug ? $item->slug : $item, self::$_auto_updated_plugins ) ) {
+				return true;
+			}
+
+			// Pass update decision to next filters
+			return $update;
+		}
+
+		#region Versioning ------------------------------------------------------------------
+
+		/**
+		 * Check if Freemius in SDK upgrade mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_sdk_upgrade_mode() {
+			return isset( $this->_storage->sdk_upgrade_mode ) ?
+				$this->_storage->sdk_upgrade_mode :
+				false;
+		}
+
+		/**
+		 * Turn SDK upgrade mode off.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function set_sdk_upgrade_complete() {
+			$this->_storage->sdk_upgrade_mode = false;
+		}
+
+		/**
+		 * Check if plugin upgrade mode.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_plugin_upgrade_mode() {
+			return isset( $this->_storage->plugin_upgrade_mode ) ?
+				$this->_storage->plugin_upgrade_mode :
+				false;
+		}
+
+		/**
+		 * Turn plugin upgrade mode off.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function set_plugin_upgrade_complete() {
+			$this->_storage->plugin_upgrade_mode = false;
+		}
+
+		#endregion ------------------------------------------------------------------
+
+		#region Permissions ------------------------------------------------------------------
+
+		/**
+		 * Check if specific permission requested.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $permission
+		 *
+		 * @return bool
+		 */
+		function is_permission_requested( $permission ) {
+			return isset( $this->_permissions[ $permission ] ) && ( true === $this->_permissions[ $permission ] );
+		}
+
+		#endregion Permissions ------------------------------------------------------------------
+
+		#region Marketing ------------------------------------------------------------------
+
+		/**
+		 * Check if current user purchased any other plugins before.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function has_purchased_before() {
+			// TODO: Implement has_purchased_before() method.
+		}
+
+		/**
+		 * Check if current user classified as an agency.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_agency() {
+			// TODO: Implement is_agency() method.
+		}
+
+		/**
+		 * Check if current user classified as a developer.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_developer() {
+			// TODO: Implement is_developer() method.
+		}
+
+		/**
+		 * Check if current user classified as a business.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_business() {
+			// TODO: Implement is_business() method.
+		}
+
+		#endregion ------------------------------------------------------------------
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-api.php b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-api.php
index 79bd2bf06fcca5208735a4e08bc43cc6f732dec4..1b66331ff17d0bc9aeb780b4308010827a59140a 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-api.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-api.php
@@ -1,455 +1,482 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.4
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * Class FS_Api
-	 *
-	 * Wraps Freemius API SDK to handle:
-	 *      1. Clock sync.
-	 *      2. Fallback to HTTP when HTTPS fails.
-	 *      3. Adds caching layer to GET requests.
-	 *      4. Adds consistency for failed requests by using last cached version.
-	 */
-	class FS_Api {
-		/**
-		 * @var FS_Api[]
-		 */
-		private static $_instances = array();
-
-		/**
-		 * @var FS_Option_Manager Freemius options, options-manager.
-		 */
-		private static $_options;
-
-		/**
-		 * @var FS_Cache_Manager API Caching layer
-		 */
-		private static $_cache;
-
-		/**
-		 * @var int Clock diff in seconds between current server to API server.
-		 */
-		private static $_clock_diff;
-
-		/**
-		 * @var Freemius_Api
-		 */
-		private $_api;
-
-		/**
-		 * @var string
-		 */
-		private $_slug;
-
-		/**
-		 * @var FS_Logger
-		 * @since 1.0.4
-		 */
-		private $_logger;
-
-		/**
-		 * @param string      $slug
-		 * @param string      $scope      'app', 'developer', 'user' or 'install'.
-		 * @param number      $id         Element's id.
-		 * @param string      $public_key Public key.
-		 * @param bool        $is_sandbox
-		 * @param bool|string $secret_key Element's secret key.
-		 *
-		 * @return FS_Api
-		 */
-		static function instance( $slug, $scope, $id, $public_key, $is_sandbox, $secret_key = false ) {
-			$identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
-
-			if ( ! isset( self::$_instances[ $identifier ] ) ) {
-				self::_init();
-
-				self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox );
-			}
-
-			return self::$_instances[ $identifier ];
-		}
-
-		private static function _init() {
-			if ( isset( self::$_options ) ) {
-				return;
-			}
-
-			if ( ! class_exists( 'Freemius_Api' ) ) {
-				require_once( WP_FS__DIR_SDK . '/Freemius.php' );
-			}
-
-			self::$_options = FS_Option_Manager::get_manager( WP_FS__OPTIONS_OPTION_NAME, true );
-			self::$_cache   = FS_Cache_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME );
-
-			self::$_clock_diff = self::$_options->get_option( 'api_clock_diff', 0 );
-			Freemius_Api::SetClockDiff( self::$_clock_diff );
-
-			if ( self::$_options->get_option( 'api_force_http', false ) ) {
-				Freemius_Api::SetHttp();
-			}
-		}
-
-		/**
-		 * @param string      $slug
-		 * @param string      $scope      'app', 'developer', 'user' or 'install'.
-		 * @param number      $id         Element's id.
-		 * @param string      $public_key Public key.
-		 * @param bool|string $secret_key Element's secret key.
-		 * @param bool        $is_sandbox
-		 */
-		private function __construct( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox ) {
-			$this->_api = new Freemius_Api( $scope, $id, $public_key, $secret_key, $is_sandbox );
-
-			$this->_slug   = $slug;
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_api', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-		}
-
-		/**
-		 * Find clock diff between server and API server, and store the diff locally.
-		 *
-		 * @param bool|int $diff
-		 *
-		 * @return bool|int False if clock diff didn't change, otherwise returns the clock diff in seconds.
-		 */
-		private function _sync_clock_diff( $diff = false ) {
-			$this->_logger->entrance();
-
-			// Sync clock and store.
-			$new_clock_diff = ( false === $diff ) ?
-				Freemius_Api::FindClockDiff() :
-				$diff;
-
-			if ( $new_clock_diff === self::$_clock_diff ) {
-				return false;
-			}
-
-			self::$_clock_diff = $new_clock_diff;
-
-			// Update API clock's diff.
-			Freemius_Api::SetClockDiff( self::$_clock_diff );
-
-			// Store new clock diff in storage.
-			self::$_options->set_option( 'api_clock_diff', self::$_clock_diff, true );
-
-			return $new_clock_diff;
-		}
-
-		/**
-		 * Override API call to enable retry with servers' clock auto sync method.
-		 *
-		 * @param string $path
-		 * @param string $method
-		 * @param array  $params
-		 * @param bool   $retry Is in retry or first call attempt.
-		 *
-		 * @return array|mixed|string|void
-		 */
-		private function _call( $path, $method = 'GET', $params = array(), $retry = false ) {
-			$this->_logger->entrance( $method . ':' . $path );
-
-			if ( self::is_temporary_down() ) {
-				$result = $this->get_temporary_unavailable_error();
-			} else {
-				$result = $this->_api->Api( $path, $method, $params );
-
-				if ( null !== $result &&
-				     isset( $result->error ) &&
-				     isset( $result->error->code ) &&
-				     'request_expired' === $result->error->code
-				) {
-					if ( ! $retry ) {
-						$diff = isset( $result->error->timestamp ) ?
-							( time() - strtotime( $result->error->timestamp ) ) :
-							false;
-
-						// Try to sync clock diff.
-						if ( false !== $this->_sync_clock_diff( $diff ) ) {
-							// Retry call with new synced clock.
-							return $this->_call( $path, $method, $params, true );
-						}
-					}
-				}
-			}
-
-			if ( null !== $result && isset( $result->error ) && isset( $result->error->message ) ) {
-				// Log API errors.
-				$this->_logger->error( $result->error->message );
-			}
-
-			return $result;
-		}
-
-		/**
-		 * Override API call to wrap it in servers' clock sync method.
-		 *
-		 * @param string $path
-		 * @param string $method
-		 * @param array  $params
-		 *
-		 * @return array|mixed|string|void
-		 * @throws Freemius_Exception
-		 */
-		function call( $path, $method = 'GET', $params = array() ) {
-			return $this->_call( $path, $method, $params );
-		}
-
-		/**
-		 * Get API request URL signed via query string.
-		 *
-		 * @param string $path
-		 *
-		 * @return string
-		 */
-		function get_signed_url( $path ) {
-			return $this->_api->GetSignedUrl( $path );
-		}
-
-		/**
-		 * @param string $path
-		 * @param bool   $flush
-		 * @param int    $expiration (optional) Time until expiration in seconds from now, defaults to 24 hours
-		 *
-		 * @return stdClass|mixed
-		 */
-		function get( $path = '/', $flush = false, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
-			$this->_logger->entrance( $path );
-
-			$cache_key = $this->get_cache_key( $path );
-
-			// Always flush during development.
-			if ( WP_FS__DEV_MODE || $this->_api->IsSandbox() ) {
-				$flush = true;
-			}
-
-			$cached_result = self::$_cache->get( $cache_key );
-
-			if ( $flush || ! self::$_cache->has_valid( $cache_key ) ) {
-				$result = $this->call( $path );
-
-				if ( ! is_object( $result ) || isset( $result->error ) ) {
-					// Api returned an error.
-					if ( is_object( $cached_result ) &&
-					     ! isset( $cached_result )
-					) {
-						// If there was an error during a newer data fetch,
-						// fallback to older data version.
-						$result = $cached_result;
-					} else {
-						// If no older data version, return result without
-						// caching the error.
-						return $result;
-					}
-				}
-
-				self::$_cache->set( $cache_key, $result, $expiration );
-
-				$cached_result = $result;
-			}
-
-			return $cached_result;
-		}
-
-		private function get_cache_key( $path, $method = 'GET', $params = array() ) {
-			$canonized = $this->_api->CanonizePath( $path );
-//			$exploded = explode('/', $canonized);
-//			return $method . '_' . array_pop($exploded) . '_' . md5($canonized . json_encode($params));
-			return $method . ':' . $canonized . ( ! empty( $params ) ? '#' . md5( json_encode( $params ) ) : '' );
-		}
-
-		/**
-		 * Test API connectivity.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9 If fails, try to fallback to HTTP.
-		 * @since  1.1.6 Added a 5-min caching mechanism, to prevent from overloading the server if the API if
-		 *         temporary down.
-		 *
-		 * @return bool True if successful connectivity to the API.
-		 */
-		static function test() {
-			self::_init();
-
-			$cache_key = 'ping_test';
-
-			$test = self::$_cache->get_valid( $cache_key, null );
-
-			if ( is_null( $test ) ) {
-				$test = Freemius_Api::Test();
-
-				if ( false === $test && Freemius_Api::IsHttps() ) {
-					// Fallback to HTTP, since HTTPS fails.
-					Freemius_Api::SetHttp();
-
-					self::$_options->set_option( 'api_force_http', true, true );
-
-					$test = Freemius_Api::Test();
-
-					if ( false === $test ) {
-						/**
-						 * API connectivity test fail also in HTTP request, therefore,
-						 * fallback to HTTPS to keep connection secure.
-						 *
-						 * @since 1.1.6
-						 */
-						self::$_options->set_option( 'api_force_http', false, true );
-					}
-				}
-
-				self::$_cache->set( $cache_key, $test, WP_FS__TIME_5_MIN_IN_SEC );
-			}
-
-			return $test;
-		}
-
-		/**
-		 * Check if API is temporary down.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @return bool
-		 */
-		static function is_temporary_down() {
-			self::_init();
-
-			$test = self::$_cache->get_valid( 'ping_test', null );
-
-			return ( false === $test );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @return object
-		 */
-		private function get_temporary_unavailable_error() {
-			return (object) array(
-				'error' => array(
-					'type'    => 'TemporaryUnavailable',
-					'message' => 'API is temporary unavailable, please retry in ' . ( self::$_cache->get_record_expiration( 'ping_test' ) - WP_FS__SCRIPT_START_TIME ) . ' sec.',
-					'code'    => 'temporary_unavailable',
-					'http'    => 503
-				)
-			);
-		}
-
-		/**
-		 * Ping API for connectivity test, and return result object.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.9
-		 *
-		 * @param null|string $unique_anonymous_id
-		 * @param array       $params
-		 *
-		 * @return object
-		 */
-		function ping( $unique_anonymous_id = null, $params = array() ) {
-			$this->_logger->entrance();
-
-			if ( self::is_temporary_down() ) {
-				return $this->get_temporary_unavailable_error();
-			}
-
-			$pong = is_null( $unique_anonymous_id ) ?
-				Freemius_Api::Ping() :
-				$this->_call( 'ping.json?' . http_build_query( array_merge(
-						array( 'uid' => $unique_anonymous_id ),
-						$params
-					) ) );
-
-			if ( $this->is_valid_ping( $pong ) ) {
-				return $pong;
-			}
-
-			if ( self::should_try_with_http( $pong ) ) {
-				// Fallback to HTTP, since HTTPS fails.
-				Freemius_Api::SetHttp();
-
-				self::$_options->set_option( 'api_force_http', true, true );
-
-				$pong = is_null( $unique_anonymous_id ) ?
-					Freemius_Api::Ping() :
-					$this->_call( 'ping.json?' . http_build_query( array_merge(
-							array( 'uid' => $unique_anonymous_id ),
-							$params
-						) ) );
-
-				if ( ! $this->is_valid_ping( $pong ) ) {
-					self::$_options->set_option( 'api_force_http', false, true );
-				}
-			}
-
-			return $pong;
-		}
-
-		/**
-		 * Check if based on the API result we should try
-		 * to re-run the same request with HTTP instead of HTTPS.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param $result
-		 *
-		 * @return bool
-		 */
-		private static function should_try_with_http( $result ) {
-			if ( ! Freemius_Api::IsHttps() ) {
-				return false;
-			}
-
-			return ( ! is_object( $result ) ||
-			         ! isset( $result->error ) ||
-			         ! isset( $result->error->code ) ||
-			         ! in_array( $result->error->code, array(
-				         'curl_missing',
-				         'cloudflare_ddos_protection',
-				         'maintenance_mode',
-				         'squid_cache_block',
-				         'too_many_requests',
-			         ) ) );
-
-		}
-
-		/**
-		 * Check if valid ping request result.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.1
-		 *
-		 * @param mixed $pong
-		 *
-		 * @return bool
-		 */
-		function is_valid_ping( $pong ) {
-			return Freemius_Api::Test( $pong );
-		}
-
-		function get_url( $path = '' ) {
-			return Freemius_Api::GetUrl( $path, $this->_api->IsSandbox() );
-		}
-
-		/**
-		 * Clear API cache.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		static function clear_cache() {
-			self::_init();
-
-			self::$_cache = FS_Cache_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME );
-			self::$_cache->clear( true );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.4
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * Class FS_Api
+	 *
+	 * Wraps Freemius API SDK to handle:
+	 *      1. Clock sync.
+	 *      2. Fallback to HTTP when HTTPS fails.
+	 *      3. Adds caching layer to GET requests.
+	 *      4. Adds consistency for failed requests by using last cached version.
+	 */
+	class FS_Api {
+		/**
+		 * @var FS_Api[]
+		 */
+		private static $_instances = array();
+
+		/**
+		 * @var FS_Option_Manager Freemius options, options-manager.
+		 */
+		private static $_options;
+
+		/**
+		 * @var FS_Cache_Manager API Caching layer
+		 */
+		private static $_cache;
+
+		/**
+		 * @var int Clock diff in seconds between current server to API server.
+		 */
+		private static $_clock_diff;
+
+		/**
+		 * @var Freemius_Api
+		 */
+		private $_api;
+
+		/**
+		 * @var string
+		 */
+		private $_slug;
+
+		/**
+		 * @var FS_Logger
+		 * @since 1.0.4
+		 */
+		private $_logger;
+
+		/**
+		 * @param string      $slug
+		 * @param string      $scope      'app', 'developer', 'user' or 'install'.
+		 * @param number      $id         Element's id.
+		 * @param string      $public_key Public key.
+		 * @param bool        $is_sandbox
+		 * @param bool|string $secret_key Element's secret key.
+		 *
+		 * @return FS_Api
+		 */
+		static function instance( $slug, $scope, $id, $public_key, $is_sandbox, $secret_key = false ) {
+			$identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
+
+			if ( ! isset( self::$_instances[ $identifier ] ) ) {
+				self::_init();
+
+				self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox );
+			}
+
+			return self::$_instances[ $identifier ];
+		}
+
+		private static function _init() {
+			if ( isset( self::$_options ) ) {
+				return;
+			}
+
+			if ( ! class_exists( 'Freemius_Api' ) ) {
+				require_once( WP_FS__DIR_SDK . '/Freemius.php' );
+			}
+
+			self::$_options = FS_Option_Manager::get_manager( WP_FS__OPTIONS_OPTION_NAME, true );
+			self::$_cache   = FS_Cache_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME );
+
+			self::$_clock_diff = self::$_options->get_option( 'api_clock_diff', 0 );
+			Freemius_Api::SetClockDiff( self::$_clock_diff );
+
+			if ( self::$_options->get_option( 'api_force_http', false ) ) {
+				Freemius_Api::SetHttp();
+			}
+		}
+
+		/**
+		 * @param string      $slug
+		 * @param string      $scope      'app', 'developer', 'user' or 'install'.
+		 * @param number      $id         Element's id.
+		 * @param string      $public_key Public key.
+		 * @param bool|string $secret_key Element's secret key.
+		 * @param bool        $is_sandbox
+		 */
+		private function __construct( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox ) {
+			$this->_api = new Freemius_Api( $scope, $id, $public_key, $secret_key, $is_sandbox );
+
+			$this->_slug   = $slug;
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_api', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+		}
+
+		/**
+		 * Find clock diff between server and API server, and store the diff locally.
+		 *
+		 * @param bool|int $diff
+		 *
+		 * @return bool|int False if clock diff didn't change, otherwise returns the clock diff in seconds.
+		 */
+		private function _sync_clock_diff( $diff = false ) {
+			$this->_logger->entrance();
+
+			// Sync clock and store.
+			$new_clock_diff = ( false === $diff ) ?
+				Freemius_Api::FindClockDiff() :
+				$diff;
+
+			if ( $new_clock_diff === self::$_clock_diff ) {
+				return false;
+			}
+
+			self::$_clock_diff = $new_clock_diff;
+
+			// Update API clock's diff.
+			Freemius_Api::SetClockDiff( self::$_clock_diff );
+
+			// Store new clock diff in storage.
+			self::$_options->set_option( 'api_clock_diff', self::$_clock_diff, true );
+
+			return $new_clock_diff;
+		}
+
+		/**
+		 * Override API call to enable retry with servers' clock auto sync method.
+		 *
+		 * @param string $path
+		 * @param string $method
+		 * @param array  $params
+		 * @param bool   $retry Is in retry or first call attempt.
+		 *
+		 * @return array|mixed|string|void
+		 */
+		private function _call( $path, $method = 'GET', $params = array(), $retry = false ) {
+			$this->_logger->entrance( $method . ':' . $path );
+
+			if ( self::is_temporary_down() ) {
+				$result = $this->get_temporary_unavailable_error();
+			} else {
+				$result = $this->_api->Api( $path, $method, $params );
+
+				if ( null !== $result &&
+				     isset( $result->error ) &&
+				     isset( $result->error->code ) &&
+				     'request_expired' === $result->error->code
+				) {
+					if ( ! $retry ) {
+						$diff = isset( $result->error->timestamp ) ?
+							( time() - strtotime( $result->error->timestamp ) ) :
+							false;
+
+						// Try to sync clock diff.
+						if ( false !== $this->_sync_clock_diff( $diff ) ) {
+							// Retry call with new synced clock.
+							return $this->_call( $path, $method, $params, true );
+						}
+					}
+				}
+			}
+
+			if ( null !== $result && isset( $result->error ) && isset( $result->error->message ) ) {
+				// Log API errors.
+				$this->_logger->error( $result->error->message );
+			}
+
+			return $result;
+		}
+
+		/**
+		 * Override API call to wrap it in servers' clock sync method.
+		 *
+		 * @param string $path
+		 * @param string $method
+		 * @param array  $params
+		 *
+		 * @return array|mixed|string|void
+		 * @throws Freemius_Exception
+		 */
+		function call( $path, $method = 'GET', $params = array() ) {
+			return $this->_call( $path, $method, $params );
+		}
+
+		/**
+		 * Get API request URL signed via query string.
+		 *
+		 * @param string $path
+		 *
+		 * @return string
+		 */
+		function get_signed_url( $path ) {
+			return $this->_api->GetSignedUrl( $path );
+		}
+
+		/**
+		 * @param string $path
+		 * @param bool   $flush
+		 * @param int    $expiration (optional) Time until expiration in seconds from now, defaults to 24 hours
+		 *
+		 * @return stdClass|mixed
+		 */
+		function get( $path = '/', $flush = false, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
+			$this->_logger->entrance( $path );
+
+			$cache_key = $this->get_cache_key( $path );
+
+			// Always flush during development.
+			if ( WP_FS__DEV_MODE || $this->_api->IsSandbox() ) {
+				$flush = true;
+			}
+
+			$cached_result = self::$_cache->get( $cache_key );
+
+			if ( $flush || ! self::$_cache->has_valid( $cache_key ) ) {
+				$result = $this->call( $path );
+
+				if ( ! is_object( $result ) || isset( $result->error ) ) {
+					// Api returned an error.
+					if ( is_object( $cached_result ) &&
+					     ! isset( $cached_result )
+					) {
+						// If there was an error during a newer data fetch,
+						// fallback to older data version.
+						$result = $cached_result;
+					} else {
+						// If no older data version, return result without
+						// caching the error.
+						return $result;
+					}
+				}
+
+				self::$_cache->set( $cache_key, $result, $expiration );
+
+				$cached_result = $result;
+			}
+
+			return $cached_result;
+		}
+
+		/**
+		 * Check if there's a cached version of the API request.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @param string $path
+		 * @param string $method
+		 * @param array  $params
+		 *
+		 * @return bool
+		 */
+		function is_cached( $path, $method = 'GET', $params = array() )
+		{
+			$cache_key = $this->get_cache_key( $path, $method, $params );
+
+			return self::$_cache->has_valid( $cache_key );
+		}
+
+		/**
+		 * @param string $path
+		 * @param string $method
+		 * @param array  $params
+		 *
+		 * @return string
+		 * @throws \Freemius_Exception
+		 */
+		private function get_cache_key( $path, $method = 'GET', $params = array() ) {
+			$canonized = $this->_api->CanonizePath( $path );
+//			$exploded = explode('/', $canonized);
+//			return $method . '_' . array_pop($exploded) . '_' . md5($canonized . json_encode($params));
+			return strtolower($method . ':' . $canonized) . ( ! empty( $params ) ? '#' . md5( json_encode( $params ) ) : '' );
+		}
+
+		/**
+		 * Test API connectivity.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9 If fails, try to fallback to HTTP.
+		 * @since  1.1.6 Added a 5-min caching mechanism, to prevent from overloading the server if the API if
+		 *         temporary down.
+		 *
+		 * @return bool True if successful connectivity to the API.
+		 */
+		static function test() {
+			self::_init();
+
+			$cache_key = 'ping_test';
+
+			$test = self::$_cache->get_valid( $cache_key, null );
+
+			if ( is_null( $test ) ) {
+				$test = Freemius_Api::Test();
+
+				if ( false === $test && Freemius_Api::IsHttps() ) {
+					// Fallback to HTTP, since HTTPS fails.
+					Freemius_Api::SetHttp();
+
+					self::$_options->set_option( 'api_force_http', true, true );
+
+					$test = Freemius_Api::Test();
+
+					if ( false === $test ) {
+						/**
+						 * API connectivity test fail also in HTTP request, therefore,
+						 * fallback to HTTPS to keep connection secure.
+						 *
+						 * @since 1.1.6
+						 */
+						self::$_options->set_option( 'api_force_http', false, true );
+					}
+				}
+
+				self::$_cache->set( $cache_key, $test, WP_FS__TIME_5_MIN_IN_SEC );
+			}
+
+			return $test;
+		}
+
+		/**
+		 * Check if API is temporary down.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @return bool
+		 */
+		static function is_temporary_down() {
+			self::_init();
+
+			$test = self::$_cache->get_valid( 'ping_test', null );
+
+			return ( false === $test );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @return object
+		 */
+		private function get_temporary_unavailable_error() {
+			return (object) array(
+				'error' => array(
+					'type'    => 'TemporaryUnavailable',
+					'message' => 'API is temporary unavailable, please retry in ' . ( self::$_cache->get_record_expiration( 'ping_test' ) - WP_FS__SCRIPT_START_TIME ) . ' sec.',
+					'code'    => 'temporary_unavailable',
+					'http'    => 503
+				)
+			);
+		}
+
+		/**
+		 * Ping API for connectivity test, and return result object.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.9
+		 *
+		 * @param null|string $unique_anonymous_id
+		 * @param array       $params
+		 *
+		 * @return object
+		 */
+		function ping( $unique_anonymous_id = null, $params = array() ) {
+			$this->_logger->entrance();
+
+			if ( self::is_temporary_down() ) {
+				return $this->get_temporary_unavailable_error();
+			}
+
+			$pong = is_null( $unique_anonymous_id ) ?
+				Freemius_Api::Ping() :
+				$this->_call( 'ping.json?' . http_build_query( array_merge(
+						array( 'uid' => $unique_anonymous_id ),
+						$params
+					) ) );
+
+			if ( $this->is_valid_ping( $pong ) ) {
+				return $pong;
+			}
+
+			if ( self::should_try_with_http( $pong ) ) {
+				// Fallback to HTTP, since HTTPS fails.
+				Freemius_Api::SetHttp();
+
+				self::$_options->set_option( 'api_force_http', true, true );
+
+				$pong = is_null( $unique_anonymous_id ) ?
+					Freemius_Api::Ping() :
+					$this->_call( 'ping.json?' . http_build_query( array_merge(
+							array( 'uid' => $unique_anonymous_id ),
+							$params
+						) ) );
+
+				if ( ! $this->is_valid_ping( $pong ) ) {
+					self::$_options->set_option( 'api_force_http', false, true );
+				}
+			}
+
+			return $pong;
+		}
+
+		/**
+		 * Check if based on the API result we should try
+		 * to re-run the same request with HTTP instead of HTTPS.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param $result
+		 *
+		 * @return bool
+		 */
+		private static function should_try_with_http( $result ) {
+			if ( ! Freemius_Api::IsHttps() ) {
+				return false;
+			}
+
+			return ( ! is_object( $result ) ||
+			         ! isset( $result->error ) ||
+			         ! isset( $result->error->code ) ||
+			         ! in_array( $result->error->code, array(
+				         'curl_missing',
+				         'cloudflare_ddos_protection',
+				         'maintenance_mode',
+				         'squid_cache_block',
+				         'too_many_requests',
+			         ) ) );
+
+		}
+
+		/**
+		 * Check if valid ping request result.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.1
+		 *
+		 * @param mixed $pong
+		 *
+		 * @return bool
+		 */
+		function is_valid_ping( $pong ) {
+			return Freemius_Api::Test( $pong );
+		}
+
+		function get_url( $path = '' ) {
+			return Freemius_Api::GetUrl( $path, $this->_api->IsSandbox() );
+		}
+
+		/**
+		 * Clear API cache.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		static function clear_cache() {
+			self::_init();
+
+			self::$_cache = FS_Cache_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME );
+			self::$_cache->clear( true );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-logger.php b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-logger.php
index 420676122b5408285cf17a387a50f51585f00bde..6f5fc76ac11a7af8c10669027c13878f25216ae0 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-logger.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-logger.php
@@ -1,179 +1,179 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Logger {
-		private $_id;
-		private $_on = false;
-		private $_echo = false;
-		private $_file_start = 0;
-
-		private static $LOGGERS = array();
-		private static $LOG = array();
-		private static $CNT = 0;
-		private static $_HOOKED_FOOTER = false;
-
-		private function __construct( $id, $on = false, $echo = false ) {
-			$this->_id = $id;
-
-			$bt     = debug_backtrace();
-			$caller = $bt[2];
-
-			$this->_file_start = strpos( $caller['file'], 'plugins' ) + strlen( 'plugins/' );
-
-			if ( $on ) {
-				$this->on();
-			}
-			if ( $echo ) {
-				$this->echo_on();
-			}
-		}
-
-		/**
-		 * @param string $id
-		 * @param bool   $on
-		 * @param bool   $echo
-		 *
-		 * @return FS_Logger
-		 */
-		public static function get_logger( $id, $on = false, $echo = false ) {
-			$id = strtolower( $id );
-
-			if ( ! isset( self::$LOGGERS[ $id ] ) ) {
-				self::$LOGGERS[ $id ] = new FS_Logger( $id, $on, $echo );
-			}
-
-			return self::$LOGGERS[ $id ];
-		}
-
-		private static function _hook_footer() {
-			if ( self::$_HOOKED_FOOTER ) {
-				return;
-			}
-
-			if ( is_admin() ) {
-				add_action( 'admin_footer', 'FS_Logger::dump', 100 );
-			} else {
-				add_action( 'wp_footer', 'FS_Logger::dump', 100 );
-			}
-		}
-
-		function is_on() {
-			return $this->_on;
-		}
-
-		function on() {
-			$this->_on = true;
-
-			self::_hook_footer();
-		}
-
-		function echo_on() {
-			$this->on();
-
-			$this->_echo = true;
-		}
-
-		function is_echo_on() {
-			return $this->_echo;
-		}
-
-		function get_id() {
-			return $this->_id;
-		}
-
-		function get_file() {
-			return $this->_file_start;
-		}
-
-		private function _log( &$message, $type = 'log', $wrapper ) {
-			if ( ! $this->is_on() ) {
-				return;
-			}
-
-			$bt    = debug_backtrace();
-			$depth = $wrapper ? 3 : 2;
-			while ( $depth < count( $bt ) - 1 && 'eval' === $bt[ $depth ]['function'] ) {
-				$depth ++;
-			}
-
-			$caller = $bt[ $depth ];
-
-			$log = array_merge( $caller, array(
-				'cnt'       => self::$CNT ++,
-				'logger'    => $this,
-				'timestamp' => microtime(true),
-				'type'      => $type,
-				'msg'       => $message,
-			) );
-
-			self::$LOG[] = $log;
-
-			if ( $this->is_echo_on() ) {
-				echo self::format_html( $log ) . "\n";
-			}
-		}
-
-		function log( $message, $wrapper = false ) {
-			$this->_log( $message, 'log', $wrapper );
-		}
-
-		function info( $message, $wrapper = false ) {
-			$this->_log( $message, 'info', $wrapper );
-		}
-
-		function warn( $message, $wrapper = false ) {
-			$this->_log( $message, 'warn', $wrapper );
-		}
-
-		function error( $message, $wrapper = false ) {
-			$this->_log( $message, 'error', $wrapper );
-		}
-
-		function entrance( $message = '', $wrapper = false ) {
-			$msg = 'Entrance' . ( empty( $message ) ? '' : ' > ' ) . $message;
-
-			$this->_log( $msg, 'log', $wrapper );
-		}
-
-		function departure( $message = '', $wrapper = false ) {
-			$msg = 'Departure' . ( empty( $message ) ? '' : ' > ' ) . $message;
-
-			$this->_log( $msg, 'log', $wrapper );
-		}
-
-		private static function format( $log, $show_type = true ) {
-			return '[' . str_pad( $log['cnt'], strlen( self::$CNT ), '0', STR_PAD_LEFT ) . '] [' . $log['logger']->_id . '] ' . ( $show_type ? '[' . $log['type'] . ']' : '' ) . $log['function'] . ' >> ' . $log['msg'] . ( isset( $log['file'] ) ? ' (' . substr( $log['file'], $log['logger']->_file_start ) . ' ' . $log['line'] . ') ' : '' ) . ' [' . $log['timestamp'] . ']';
-		}
-
-		private static function format_html( $log ) {
-			return '<div style="font-size: 11px; padding: 3px; background: #ccc; margin-bottom: 3px;">[' . $log['cnt'] . '] [' . $log['logger']->_id . '] [' . $log['type'] . '] <b><code style="color: blue;">' . $log['function'] . '</code> >> <b style="color: darkorange;">' . $log['msg'] . '</b></b>' . ( isset( $log['file'] ) ? ' (' . substr( $log['file'], $log['logger']->_file_start ) . ' ' . $log['line'] . ')' : '' ) . ' [' . $log['timestamp'] . ']</div>';
-		}
-
-		static function dump() {
-			?>
-			<!-- BEGIN: Freemius PHP Console Log -->
-			<script type="text/javascript">
-				<?php
-					foreach (self::$LOG as $log)
-					{
-						echo 'console.' . $log['type'] . '(' . json_encode(self::format($log, false)) . ')' . "\n";
-					}
-				?>
-			</script>
-			<!-- END: Freemius PHP Console Log -->
-		<?php
-		}
-
-		static function get_log() {
-			return self::$LOG;
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Logger {
+		private $_id;
+		private $_on = false;
+		private $_echo = false;
+		private $_file_start = 0;
+
+		private static $LOGGERS = array();
+		private static $LOG = array();
+		private static $CNT = 0;
+		private static $_HOOKED_FOOTER = false;
+
+		private function __construct( $id, $on = false, $echo = false ) {
+			$this->_id = $id;
+
+			$bt     = debug_backtrace();
+			$caller = $bt[2];
+
+			$this->_file_start = strpos( $caller['file'], 'plugins' ) + strlen( 'plugins/' );
+
+			if ( $on ) {
+				$this->on();
+			}
+			if ( $echo ) {
+				$this->echo_on();
+			}
+		}
+
+		/**
+		 * @param string $id
+		 * @param bool   $on
+		 * @param bool   $echo
+		 *
+		 * @return FS_Logger
+		 */
+		public static function get_logger( $id, $on = false, $echo = false ) {
+			$id = strtolower( $id );
+
+			if ( ! isset( self::$LOGGERS[ $id ] ) ) {
+				self::$LOGGERS[ $id ] = new FS_Logger( $id, $on, $echo );
+			}
+
+			return self::$LOGGERS[ $id ];
+		}
+
+		private static function _hook_footer() {
+			if ( self::$_HOOKED_FOOTER ) {
+				return;
+			}
+
+			if ( is_admin() ) {
+				add_action( 'admin_footer', 'FS_Logger::dump', 100 );
+			} else {
+				add_action( 'wp_footer', 'FS_Logger::dump', 100 );
+			}
+		}
+
+		function is_on() {
+			return $this->_on;
+		}
+
+		function on() {
+			$this->_on = true;
+
+			self::_hook_footer();
+		}
+
+		function echo_on() {
+			$this->on();
+
+			$this->_echo = true;
+		}
+
+		function is_echo_on() {
+			return $this->_echo;
+		}
+
+		function get_id() {
+			return $this->_id;
+		}
+
+		function get_file() {
+			return $this->_file_start;
+		}
+
+		private function _log( &$message, $type = 'log', $wrapper ) {
+			if ( ! $this->is_on() ) {
+				return;
+			}
+
+			$bt    = debug_backtrace();
+			$depth = $wrapper ? 3 : 2;
+			while ( $depth < count( $bt ) - 1 && 'eval' === $bt[ $depth ]['function'] ) {
+				$depth ++;
+			}
+
+			$caller = $bt[ $depth ];
+
+			$log = array_merge( $caller, array(
+				'cnt'       => self::$CNT ++,
+				'logger'    => $this,
+				'timestamp' => microtime(true),
+				'type'      => $type,
+				'msg'       => $message,
+			) );
+
+			self::$LOG[] = $log;
+
+			if ( $this->is_echo_on() ) {
+				echo self::format_html( $log ) . "\n";
+			}
+		}
+
+		function log( $message, $wrapper = false ) {
+			$this->_log( $message, 'log', $wrapper );
+		}
+
+		function info( $message, $wrapper = false ) {
+			$this->_log( $message, 'info', $wrapper );
+		}
+
+		function warn( $message, $wrapper = false ) {
+			$this->_log( $message, 'warn', $wrapper );
+		}
+
+		function error( $message, $wrapper = false ) {
+			$this->_log( $message, 'error', $wrapper );
+		}
+
+		function entrance( $message = '', $wrapper = false ) {
+			$msg = 'Entrance' . ( empty( $message ) ? '' : ' > ' ) . $message;
+
+			$this->_log( $msg, 'log', $wrapper );
+		}
+
+		function departure( $message = '', $wrapper = false ) {
+			$msg = 'Departure' . ( empty( $message ) ? '' : ' > ' ) . $message;
+
+			$this->_log( $msg, 'log', $wrapper );
+		}
+
+		private static function format( $log, $show_type = true ) {
+			return '[' . str_pad( $log['cnt'], strlen( self::$CNT ), '0', STR_PAD_LEFT ) . '] [' . $log['logger']->_id . '] ' . ( $show_type ? '[' . $log['type'] . ']' : '' ) . $log['function'] . ' >> ' . $log['msg'] . ( isset( $log['file'] ) ? ' (' . substr( $log['file'], $log['logger']->_file_start ) . ' ' . $log['line'] . ') ' : '' ) . ' [' . $log['timestamp'] . ']';
+		}
+
+		private static function format_html( $log ) {
+			return '<div style="font-size: 11px; padding: 3px; background: #ccc; margin-bottom: 3px;">[' . $log['cnt'] . '] [' . $log['logger']->_id . '] [' . $log['type'] . '] <b><code style="color: blue;">' . $log['function'] . '</code> >> <b style="color: darkorange;">' . $log['msg'] . '</b></b>' . ( isset( $log['file'] ) ? ' (' . substr( $log['file'], $log['logger']->_file_start ) . ' ' . $log['line'] . ')' : '' ) . ' [' . $log['timestamp'] . ']</div>';
+		}
+
+		static function dump() {
+			?>
+			<!-- BEGIN: Freemius PHP Console Log -->
+			<script type="text/javascript">
+				<?php
+					foreach (self::$LOG as $log)
+					{
+						echo 'console.' . $log['type'] . '(' . json_encode(self::format($log, false)) . ')' . "\n";
+					}
+				?>
+			</script>
+			<!-- END: Freemius PHP Console Log -->
+		<?php
+		}
+
+		static function get_log() {
+			return self::$LOG;
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-plugin-updater.php b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-plugin-updater.php
index 830db3662dd219f2007c4c1374ee860c815772e8..8c2ef8bee7cb43287b20a8c285bbd09e17b1662a 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-plugin-updater.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-plugin-updater.php
@@ -1,334 +1,337 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.4
-	 *
-	 * @link        https://github.com/easydigitaldownloads/EDD-License-handler/blob/master/EDD_SL_Plugin_Updater.php
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	// Uncomment this line for testing.
-//	set_site_transient( 'update_plugins', null );
-
-	class FS_Plugin_Updater {
-
-		/**
-		 * @var Freemius
-		 * @since 1.0.4
-		 */
-		private $_fs;
-		/**
-		 * @var FS_Logger
-		 * @since 1.0.4
-		 */
-		private $_logger;
-		/**
-		 * @var object
-		 * @since 1.1.8.1
-		 */
-		private $_update_details;
-
-		function __construct( Freemius $freemius ) {
-			$this->_fs = $freemius;
-
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $freemius->get_slug() . '_updater', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			$this->_filters();
-		}
-
-		/**
-		 * Initiate required filters.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 */
-		private function _filters() {
-			// Override request for plugin information
-			add_filter( 'plugins_api', array( &$this, 'plugins_api_filter' ), 10, 3 );
-
-			// WP 3.0+
-			add_filter( 'pre_set_site_transient_update_plugins', array(
-				&$this,
-				'pre_set_site_transient_update_plugins_filter'
-			) );
-
-			if ( ! $this->_fs->has_active_license() ) {
-				/**
-				 * If user has the premium plugin's code but do NOT have an active license,
-				 * encourage him to upgrade by showing that there's a new release, but instead
-				 * of showing an update link, show upgrade link to the pricing page.
-				 *
-				 * @since 1.1.6
-				 *
-				 */
-				// WP 2.9+
-				add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
-					&$this,
-					'catch_plugin_update_row'
-				), 9 );
-				add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
-					&$this,
-					'edit_and_echo_plugin_update_row'
-				), 11, 2 );
-			}
-
-			if ( ! WP_FS__IS_PRODUCTION_MODE ) {
-				add_filter( 'http_request_host_is_external', array(
-					$this,
-					'http_request_host_is_external_filter'
-				), 10, 3 );
-			}
-		}
-
-		/**
-		 * Capture plugin update row by turning output buffering.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 */
-		function catch_plugin_update_row() {
-			ob_start();
-		}
-
-		/**
-		 * Overrides default update message format with "renew your license" message.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 */
-		function edit_and_echo_plugin_update_row( $file, $plugin_data ) {
-			$plugin_update_row = ob_get_clean();
-
-			$current = get_site_transient( 'update_plugins' );
-			if ( ! isset( $current->response[ $file ] ) ) {
-				echo $plugin_update_row;
-
-				return false;
-			}
-
-			$r = $current->response[ $file ];
-
-			$plugin_update_row = preg_replace(
-				'/(\<div.+>)(.+)(\<a.+\<a.+)\<\/div\>/is',
-				'$1 $2 ' . sprintf(
-					__fs( 'renew-license-now' ),
-					'<a href="' . $this->_fs->pricing_url() . '">', '</a>',
-					$r->new_version ) .
-				'$4',
-				$plugin_update_row
-			);
-
-			echo $plugin_update_row;
-		}
-
-		/**
-		 * Since WP version 3.6, a new security feature was added that denies access to repository with a local ip.
-		 * During development mode we want to be able updating plugin versions via our localhost repository. This
-		 * filter white-list all domains including "api.freemius".
-		 *
-		 * @link   http://www.emanueletessore.com/wordpress-download-failed-valid-url-provided/
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @param bool   $allow
-		 * @param string $host
-		 * @param string $url
-		 *
-		 * @return bool
-		 */
-		function http_request_host_is_external_filter( $allow, $host, $url ) {
-			return ( false !== strpos( $host, 'freemius' ) ) ? true : $allow;
-		}
-
-		/**
-		 * Check for Updates at the defined API endpoint and modify the update array.
-		 *
-		 * This function dives into the update api just when WordPress creates its update array,
-		 * then adds a custom API call and injects the custom plugin data retrieved from the API.
-		 * It is reassembled from parts of the native WordPress plugin update code.
-		 * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @uses   FS_Api
-		 *
-		 * @param stdClass $transient_data Update array build by WordPress.
-		 *
-		 * @return array Modified update array with custom plugin data.
-		 */
-		function pre_set_site_transient_update_plugins_filter( $transient_data ) {
-			$this->_logger->entrance();
-
-			if ( empty( $transient_data ) ||
-			     defined( 'WP_FS__UNINSTALL_MODE' )
-			) {
-				return $transient_data;
-			}
-
-			if ( ! isset( $this->_update_details ) ) {
-				// Get plugin's newest update.
-				$new_version = $this->_fs->get_update( false, false );
-
-				$this->_update_details = false;
-
-				if ( is_object( $new_version ) ) {
-					$this->_logger->log( 'Found newer plugin version ' . $new_version->version );
-
-					$plugin_details              = new stdClass();
-					$plugin_details->slug        = $this->_fs->get_slug();
-					$plugin_details->new_version = $new_version->version;
-					$plugin_details->url         = WP_FS__ADDRESS;
-					$plugin_details->package     = $new_version->url;
-					$plugin_details->plugin      = $this->_fs->get_plugin_basename();
-
-					/**
-					 * Cache plugin details locally since set_site_transient( 'update_plugins' )
-					 * called multiple times and the non wp.org plugins are filtered after the
-					 * call to .org.
-					 *
-					 * @since 1.1.8.1
-					 */
-					$this->_update_details = $plugin_details;
-				}
-			}
-
-			if ( is_object( $this->_update_details ) ) {
-				// Add plugin to transient data.
-				$transient_data->response[ $this->_fs->get_plugin_basename() ] = $this->_update_details;
-			}
-
-			return $transient_data;
-		}
-
-		/**
-		 * Try to fetch plugin's info from .org repository.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @param string $action
-		 * @param object $args
-		 *
-		 * @return bool|mixed
-		 */
-		static function _fetch_plugin_info_from_repository( $action, $args ) {
-			$url = $http_url = 'http://api.wordpress.org/plugins/info/1.0/';
-			if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) {
-				$url = set_url_scheme( $url, 'https' );
-			}
-
-			$args = array(
-				'timeout' => 15,
-				'body'    => array(
-					'action'  => $action,
-					'request' => serialize( $args )
-				)
-			);
-
-			$request = wp_remote_post( $url, $args );
-
-			if ( is_wp_error( $request ) ) {
-				return false;
-			}
-
-			$res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
-
-			if ( ! is_object( $res ) && ! is_array( $res ) ) {
-				return false;
-			}
-
-			return $res;
-		}
-
-		/**
-		 * Updates information on the "View version x.x details" page with custom data.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.4
-		 *
-		 * @uses   FS_Api
-		 *
-		 * @param object $data
-		 * @param string $action
-		 * @param mixed  $args
-		 *
-		 * @return object
-		 */
-		function plugins_api_filter( $data, $action = '', $args = null ) {
-			$this->_logger->entrance();
-
-			if ( ( 'plugin_information' !== $action ) ||
-			     ! isset( $args->slug )
-			) {
-				return $data;
-			}
-
-			$addon    = false;
-			$is_addon = false;
-
-			if ( $this->_fs->get_slug() !== $args->slug ) {
-				$addon = $this->_fs->get_addon_by_slug( $args->slug );
-
-				if ( ! is_object( $addon ) ) {
-					return $data;
-				}
-
-				$is_addon = true;
-			}
-
-			$plugin_in_repo = false;
-			if ( ! $is_addon ) {
-				// Try to fetch info from .org repository.
-				$data = self::_fetch_plugin_info_from_repository( $action, $args );
-
-				$plugin_in_repo = ( false !== $data );
-			}
-
-			if ( ! $plugin_in_repo ) {
-				$data = $args;
-
-				// Fetch as much as possible info from local files.
-				$plugin_local_data = $this->_fs->get_plugin_data();
-				$data->name        = $plugin_local_data['Name'];
-				$data->author      = $plugin_local_data['Author'];
-				$data->sections    = array(
-					'description' => 'Upgrade ' . $plugin_local_data['Name'] . ' to latest.',
-				);
-
-				// @todo Store extra plugin info on Freemius or parse readme.txt markup.
-				/*$info = $this->_fs->get_api_site_scope()->call('/information.json');
-
-if ( !isset($info->error) ) {
-	$data = $info;
-}*/
-			}
-
-			// Get plugin's newest update.
-			$new_version = $this->_fs->_fetch_latest_version( $is_addon ? $addon->id : false );
-
-			if ( $is_addon ) {
-				$data->name    = $addon->title . ' ' . __fs( 'addon', $this->_fs->get_slug() );
-				$data->slug    = $addon->slug;
-				$data->url     = WP_FS__ADDRESS;
-				$data->package = $new_version->url;
-			}
-
-			if ( ! $plugin_in_repo ) {
-				$data->last_updated = ! is_null( $new_version->updated ) ? $new_version->updated : $new_version->created;
-				$data->requires     = $new_version->requires_platform_version;
-				$data->tested       = $new_version->tested_up_to_version;
-			}
-
-			$data->version       = $new_version->version;
-			$data->download_link = $new_version->url;
-
-			return $data;
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.4
+	 *
+	 * @link        https://github.com/easydigitaldownloads/EDD-License-handler/blob/master/EDD_SL_Plugin_Updater.php
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	// Uncomment this line for testing.
+//	set_site_transient( 'update_plugins', null );
+
+	class FS_Plugin_Updater {
+
+		/**
+		 * @var Freemius
+		 * @since 1.0.4
+		 */
+		private $_fs;
+		/**
+		 * @var FS_Logger
+		 * @since 1.0.4
+		 */
+		private $_logger;
+		/**
+		 * @var object
+		 * @since 1.1.8.1
+		 */
+		private $_update_details;
+
+		function __construct( Freemius $freemius ) {
+			$this->_fs = $freemius;
+
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $freemius->get_slug() . '_updater', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			$this->_filters();
+		}
+
+		/**
+		 * Initiate required filters.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 */
+		private function _filters() {
+			// Override request for plugin information
+			add_filter( 'plugins_api', array( &$this, 'plugins_api_filter' ), 10, 3 );
+
+			// WP 3.0+
+			add_filter( 'pre_set_site_transient_update_plugins', array(
+				&$this,
+				'pre_set_site_transient_update_plugins_filter'
+			) );
+
+			if ( ! $this->_fs->has_active_valid_license() ) {
+				/**
+				 * If user has the premium plugin's code but do NOT have an active license,
+				 * encourage him to upgrade by showing that there's a new release, but instead
+				 * of showing an update link, show upgrade link to the pricing page.
+				 *
+				 * @since 1.1.6
+				 *
+				 */
+				// WP 2.9+
+				add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
+					&$this,
+					'catch_plugin_update_row'
+				), 9 );
+				add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
+					&$this,
+					'edit_and_echo_plugin_update_row'
+				), 11, 2 );
+			}
+
+			if ( ! WP_FS__IS_PRODUCTION_MODE ) {
+				add_filter( 'http_request_host_is_external', array(
+					$this,
+					'http_request_host_is_external_filter'
+				), 10, 3 );
+			}
+		}
+
+		/**
+		 * Capture plugin update row by turning output buffering.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 */
+		function catch_plugin_update_row() {
+			ob_start();
+		}
+
+		/**
+		 * Overrides default update message format with "renew your license" message.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $file
+		 * @param array $plugin_data
+		 */
+		function edit_and_echo_plugin_update_row( $file, $plugin_data ) {
+			$plugin_update_row = ob_get_clean();
+
+			$current = get_site_transient( 'update_plugins' );
+			if ( ! isset( $current->response[ $file ] ) ) {
+				echo $plugin_update_row;
+
+				return;
+			}
+
+			$r = $current->response[ $file ];
+
+			$plugin_update_row = preg_replace(
+				'/(\<div.+>)(.+)(\<a.+\<a.+)\<\/div\>/is',
+				'$1 $2 ' . sprintf(
+					__fs( 'renew-license-now' ),
+					'<a href="' . $this->_fs->pricing_url() . '">', '</a>',
+					$r->new_version ) .
+				'$4',
+				$plugin_update_row
+			);
+
+			echo $plugin_update_row;
+		}
+
+		/**
+		 * Since WP version 3.6, a new security feature was added that denies access to repository with a local ip.
+		 * During development mode we want to be able updating plugin versions via our localhost repository. This
+		 * filter white-list all domains including "api.freemius".
+		 *
+		 * @link   http://www.emanueletessore.com/wordpress-download-failed-valid-url-provided/
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @param bool   $allow
+		 * @param string $host
+		 * @param string $url
+		 *
+		 * @return bool
+		 */
+		function http_request_host_is_external_filter( $allow, $host, $url ) {
+			return ( false !== strpos( $host, 'freemius' ) ) ? true : $allow;
+		}
+
+		/**
+		 * Check for Updates at the defined API endpoint and modify the update array.
+		 *
+		 * This function dives into the update api just when WordPress creates its update array,
+		 * then adds a custom API call and injects the custom plugin data retrieved from the API.
+		 * It is reassembled from parts of the native WordPress plugin update code.
+		 * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @uses   FS_Api
+		 *
+		 * @param stdClass $transient_data Update array build by WordPress.
+		 *
+		 * @return array Modified update array with custom plugin data.
+		 */
+		function pre_set_site_transient_update_plugins_filter( $transient_data ) {
+			$this->_logger->entrance();
+
+			if ( empty( $transient_data ) ||
+			     defined( 'WP_FS__UNINSTALL_MODE' )
+			) {
+				return $transient_data;
+			}
+
+			if ( ! isset( $this->_update_details ) ) {
+				// Get plugin's newest update.
+				$new_version = $this->_fs->get_update( false, false );
+
+				$this->_update_details = false;
+
+				if ( is_object( $new_version ) ) {
+					$this->_logger->log( 'Found newer plugin version ' . $new_version->version );
+
+					$plugin_details              = new stdClass();
+					$plugin_details->slug        = $this->_fs->get_slug();
+					$plugin_details->new_version = $new_version->version;
+					$plugin_details->url         = WP_FS__ADDRESS;
+					$plugin_details->package     = $new_version->url;
+					$plugin_details->plugin      = $this->_fs->get_plugin_basename();
+
+					/**
+					 * Cache plugin details locally since set_site_transient( 'update_plugins' )
+					 * called multiple times and the non wp.org plugins are filtered after the
+					 * call to .org.
+					 *
+					 * @since 1.1.8.1
+					 */
+					$this->_update_details = $plugin_details;
+				}
+			}
+
+			if ( is_object( $this->_update_details ) ) {
+				// Add plugin to transient data.
+				$transient_data->response[ $this->_fs->get_plugin_basename() ] = $this->_update_details;
+			}
+
+			return $transient_data;
+		}
+
+		/**
+		 * Try to fetch plugin's info from .org repository.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @param string $action
+		 * @param object $args
+		 *
+		 * @return bool|mixed
+		 */
+		static function _fetch_plugin_info_from_repository( $action, $args ) {
+			$url = $http_url = 'http://api.wordpress.org/plugins/info/1.0/';
+			if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) {
+				$url = set_url_scheme( $url, 'https' );
+			}
+
+			$args = array(
+				'timeout' => 15,
+				'body'    => array(
+					'action'  => $action,
+					'request' => serialize( $args )
+				)
+			);
+
+			$request = wp_remote_post( $url, $args );
+
+			if ( is_wp_error( $request ) ) {
+				return false;
+			}
+
+			$res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
+
+			if ( ! is_object( $res ) && ! is_array( $res ) ) {
+				return false;
+			}
+
+			return $res;
+		}
+
+		/**
+		 * Updates information on the "View version x.x details" page with custom data.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.4
+		 *
+		 * @uses   FS_Api
+		 *
+		 * @param object $data
+		 * @param string $action
+		 * @param mixed  $args
+		 *
+		 * @return object
+		 */
+		function plugins_api_filter( $data, $action = '', $args = null ) {
+			$this->_logger->entrance();
+
+			if ( ( 'plugin_information' !== $action ) ||
+			     ! isset( $args->slug )
+			) {
+				return $data;
+			}
+
+			$addon    = false;
+			$is_addon = false;
+
+			if ( $this->_fs->get_slug() !== $args->slug ) {
+				$addon = $this->_fs->get_addon_by_slug( $args->slug );
+
+				if ( ! is_object( $addon ) ) {
+					return $data;
+				}
+
+				$is_addon = true;
+			}
+
+			$plugin_in_repo = false;
+			if ( ! $is_addon ) {
+				// Try to fetch info from .org repository.
+				$data = self::_fetch_plugin_info_from_repository( $action, $args );
+
+				$plugin_in_repo = ( false !== $data );
+			}
+
+			if ( ! $plugin_in_repo ) {
+				$data = $args;
+
+				// Fetch as much as possible info from local files.
+				$plugin_local_data = $this->_fs->get_plugin_data();
+				$data->name        = $plugin_local_data['Name'];
+				$data->author      = $plugin_local_data['Author'];
+				$data->sections    = array(
+					'description' => 'Upgrade ' . $plugin_local_data['Name'] . ' to latest.',
+				);
+
+				// @todo Store extra plugin info on Freemius or parse readme.txt markup.
+				/*$info = $this->_fs->get_api_site_scope()->call('/information.json');
+
+if ( !isset($info->error) ) {
+	$data = $info;
+}*/
+			}
+
+			// Get plugin's newest update.
+			$new_version = $this->_fs->_fetch_latest_version( $is_addon ? $addon->id : false );
+
+			if ( $is_addon ) {
+				$data->name    = $addon->title . ' ' . __fs( 'addon', $this->_fs->get_slug() );
+				$data->slug    = $addon->slug;
+				$data->url     = WP_FS__ADDRESS;
+				$data->package = $new_version->url;
+			}
+
+			if ( ! $plugin_in_repo ) {
+				$data->last_updated = ! is_null( $new_version->updated ) ? $new_version->updated : $new_version->created;
+				$data->requires     = $new_version->requires_platform_version;
+				$data->tested       = $new_version->tested_up_to_version;
+			}
+
+			$data->version       = $new_version->version;
+			$data->download_link = $new_version->url;
+
+			return $data;
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-security.php b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-security.php
index aa4d4ac0c50280f47dcee77aeb0233f7e32552e6..d6f59a8e218e38b7539a65861ca886cb9d04d9ac 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-security.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/class-fs-security.php
@@ -27,7 +27,11 @@
 		public static function instance() {
 			if ( ! isset( self::$_instance ) ) {
 				self::$_instance = new FS_Security();
-				self::$_logger   = FS_Logger::get_logger( WP_FS__SLUG, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+				self::$_logger   = FS_Logger::get_logger(
+					WP_FS__SLUG,
+					WP_FS__DEBUG_SDK,
+					WP_FS__ECHO_DEBUG_SDK
+				);
 			}
 
 			return self::$_instance;
@@ -36,6 +40,13 @@
 		private function __construct() {
 		}
 
+		/**
+		 * @param \FS_Scope_Entity $entity
+		 * @param int              $timestamp
+		 * @param string           $action
+		 *
+		 * @return string
+		 */
 		function get_secure_token( FS_Scope_Entity $entity, $timestamp, $action = '' ) {
 			return md5(
 				$timestamp .
@@ -46,6 +57,13 @@
 			);
 		}
 
+		/**
+		 * @param \FS_Scope_Entity $entity
+		 * @param int|bool         $timestamp
+		 * @param string           $action
+		 *
+		 * @return array
+		 */
 		function get_context_params( FS_Scope_Entity $entity, $timestamp = false, $action = '' ) {
 			if ( false === $timestamp ) {
 				$timestamp = time();
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/debug/class-fs-debug-bar-panel.php b/wp-content/plugins/nextgen-gallery/freemius/includes/debug/class-fs-debug-bar-panel.php
index af0c6cb27c01503d53da226a641723ba23efe828..1c3259bdf52b015ae679b3928dc2e1b75b228822 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/debug/class-fs-debug-bar-panel.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/debug/class-fs-debug-bar-panel.php
@@ -1,64 +1,64 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * Extends Debug Bar plugin by adding a panel to show all Freemius API requests.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.7.3
-	 *
-	 * Class Freemius_Debug_Bar_Panel
-	 */
-	class Freemius_Debug_Bar_Panel extends Debug_Bar_Panel {
-		function init() {
-			$this->title( 'Freemius' );
-		}
-
-		static function requests_count() {
-			if ( class_exists( 'Freemius_Api' ) ) {
-				$logger = Freemius_Api::GetLogger();
-			} else {
-				$logger = array();
-			}
-
-			return number_format( count( $logger ) );
-		}
-
-		static function total_time() {
-			if ( class_exists( 'Freemius_Api' ) ) {
-				$logger = Freemius_Api::GetLogger();
-			} else {
-				$logger = array();
-			}
-
-			$total_time = .0;
-			foreach ( $logger as $l ) {
-				$total_time += $l['total'];
-			}
-
-			return number_format( 100 * $total_time, 2 ) . ' ' . __fs( 'ms' );
-		}
-
-		function render() {
-			?>
-			<div id='debug-bar-php'>
-				<?php fs_require_template( '/debug/api-calls.php' ) ?>
-				<br>
-				<?php fs_require_template( '/debug/scheduled-crons.php' ) ?>
-				<br>
-				<?php fs_require_template( '/debug/plugins-themes-sync.php' ) ?>
-				<br>
-				<?php fs_require_template( '/debug/logger.php' ) ?>
-			</div>
-		<?php
-		}
-	}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * Extends Debug Bar plugin by adding a panel to show all Freemius API requests.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.7.3
+	 *
+	 * Class Freemius_Debug_Bar_Panel
+	 */
+	class Freemius_Debug_Bar_Panel extends Debug_Bar_Panel {
+		function init() {
+			$this->title( 'Freemius' );
+		}
+
+		static function requests_count() {
+			if ( class_exists( 'Freemius_Api' ) ) {
+				$logger = Freemius_Api::GetLogger();
+			} else {
+				$logger = array();
+			}
+
+			return number_format( count( $logger ) );
+		}
+
+		static function total_time() {
+			if ( class_exists( 'Freemius_Api' ) ) {
+				$logger = Freemius_Api::GetLogger();
+			} else {
+				$logger = array();
+			}
+
+			$total_time = .0;
+			foreach ( $logger as $l ) {
+				$total_time += $l['total'];
+			}
+
+			return number_format( 100 * $total_time, 2 ) . ' ' . __fs( 'ms' );
+		}
+
+		function render() {
+			?>
+			<div id='debug-bar-php'>
+				<?php fs_require_template( '/debug/api-calls.php' ) ?>
+				<br>
+				<?php fs_require_template( '/debug/scheduled-crons.php' ) ?>
+				<br>
+				<?php fs_require_template( '/debug/plugins-themes-sync.php' ) ?>
+				<br>
+				<?php fs_require_template( '/debug/logger.php' ) ?>
+			</div>
+		<?php
+		}
+	}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/debug/debug-bar-start.php b/wp-content/plugins/nextgen-gallery/freemius/includes/debug/debug-bar-start.php
index 9ae7b2adad347dcee6880bac337606b07a1d6c9c..852dfd7ceaa1a1b701807714fe66db262aeb61a4 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/debug/debug-bar-start.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/debug/debug-bar-start.php
@@ -1,52 +1,52 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	if ( ! WP_FS__DEBUG_SDK ) {
-		return;
-	}
-
-	/**
-	 * Initialize Freemius custom debug panels.
-	 *
-	 * @param array $panels Debug bar panels objects
-	 *
-	 * @return array Debug bar panels with your custom panels
-	 */
-	function fs_custom_panels_init( $panels ) {
-		if ( class_exists( 'Debug_Bar_Panel' ) ) {
-			if ( FS_API__LOGGER_ON ) {
-				require_once dirname( __FILE__ ) . '/class-fs-debug-bar-panel.php';
-				$panels[] = new Freemius_Debug_Bar_Panel();
-			}
-		}
-
-		return $panels;
-	}
-
-	function fs_custom_status_init( $statuses ) {
-		if ( class_exists( 'Debug_Bar_Panel' ) ) {
-			if ( FS_API__LOGGER_ON ) {
-				require_once dirname( __FILE__ ) . '/class-fs-debug-bar-panel.php';
-				$statuses[] = array(
-					'fs_api_requests',
-					__fs( 'Freemius API' ),
-					Freemius_Debug_Bar_Panel::requests_count() . ' ' . __fs( 'Requests' ) .
-					' (' . Freemius_Debug_Bar_Panel::total_time() . ')'
-				);
-			}
-		}
-
-		return $statuses;
-	}
-
-	add_filter( 'debug_bar_panels', 'fs_custom_panels_init' );
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	if ( ! WP_FS__DEBUG_SDK ) {
+		return;
+	}
+
+	/**
+	 * Initialize Freemius custom debug panels.
+	 *
+	 * @param array $panels Debug bar panels objects
+	 *
+	 * @return array Debug bar panels with your custom panels
+	 */
+	function fs_custom_panels_init( $panels ) {
+		if ( class_exists( 'Debug_Bar_Panel' ) ) {
+			if ( FS_API__LOGGER_ON ) {
+				require_once dirname( __FILE__ ) . '/class-fs-debug-bar-panel.php';
+				$panels[] = new Freemius_Debug_Bar_Panel();
+			}
+		}
+
+		return $panels;
+	}
+
+	function fs_custom_status_init( $statuses ) {
+		if ( class_exists( 'Debug_Bar_Panel' ) ) {
+			if ( FS_API__LOGGER_ON ) {
+				require_once dirname( __FILE__ ) . '/class-fs-debug-bar-panel.php';
+				$statuses[] = array(
+					'fs_api_requests',
+					__fs( 'Freemius API' ),
+					Freemius_Debug_Bar_Panel::requests_count() . ' ' . __fs( 'Requests' ) .
+					' (' . Freemius_Debug_Bar_Panel::total_time() . ')'
+				);
+			}
+		}
+
+		return $statuses;
+	}
+
+	add_filter( 'debug_bar_panels', 'fs_custom_panels_init' );
 	add_filter( 'debug_bar_statuses', 'fs_custom_status_init' );
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-entity.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-entity.php
index 125b1911c0e2f8d0e18b77567901c6258e10ad93..4d45e9a87e97acd7b8e45da43c25133c3a19b529 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-entity.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-entity.php
@@ -39,7 +39,7 @@
 		public $created;
 
 		/**
-		 * @param bool|stdClass $entity
+		 * @param bool|object $entity
 		 */
 		function __construct( $entity = false ) {
 			if ( ! ( $entity instanceof stdClass ) ) {
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-payment.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-payment.php
new file mode 100644
index 0000000000000000000000000000000000000000..e3d61868d9cdecc537107af19d7a652f95ccce98
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-payment.php
@@ -0,0 +1,94 @@
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2016, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.0
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Payment extends FS_Entity {
+
+		#region Properties
+
+		/**
+		 * @var number
+		 */
+		public $plugin_id;
+		/**
+		 * @var number
+		 */
+		public $user_id;
+		/**
+		 * @var number
+		 */
+		public $install_id;
+		/**
+		 * @var number
+		 */
+		public $subscription_id;
+		/**
+		 * @var number
+		 */
+		public $plan_id;
+		/**
+		 * @var number
+		 */
+		public $license_id;
+		/**
+		 * @var float
+		 */
+		public $gross;
+		/**
+		 * @var number
+		 */
+		public $bound_payment_id;
+		/**
+		 * @var string
+		 */
+		public $external_id;
+		/**
+		 * @var string
+		 */
+		public $gateway;
+		/**
+		 * @var string ISO 3166-1 alpha-2 - two-letter country code.
+		 *
+		 * @link http://www.wikiwand.com/en/ISO_3166-1_alpha-2
+		 */
+		public $country_code;
+		/**
+		 * @var string
+		 */
+		public $vat_id;
+		/**
+		 * @var float Actual Tax / VAT in $$$
+		 */
+		public $vat;
+
+		#endregion Properties
+
+		/**
+		 * @param object|bool $payment
+		 */
+		function __construct( $payment = false ) {
+			parent::__construct( $payment );
+		}
+
+		static function get_type() {
+			return 'payment';
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.0
+		 *
+		 * @return bool
+		 */
+		function is_refund() {
+			return ( parent::is_valid_id( $this->bound_payment_id ) && 0 > $this->gross );
+		}
+	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-license.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-license.php
index 8fd5f378761806500c0f094fcb0586317d4b15cf..dd39b907fae7b92e2f1bc543cd0bb5d55cac4730 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-license.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-license.php
@@ -1,172 +1,216 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.5
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Plugin_License extends FS_Entity {
-
-		#region Properties
-
-		/**
-		 * @var number
-		 */
-		public $plugin_id;
-		/**
-		 * @var number
-		 */
-		public $user_id;
-		/**
-		 * @var number
-		 */
-		public $plan_id;
-		/**
-		 * @var number
-		 */
-		public $pricing_id;
-		/**
-		 * @var int|null
-		 */
-		public $quota;
-		/**
-		 * @var int
-		 */
-		public $activated;
-		/**
-		 * @var int
-		 */
-		public $activated_local;
-		/**
-		 * @var string
-		 */
-		public $expiration;
-		/**
-		 * @var bool $is_free_localhost Defaults to true. If true, allow unlimited localhost installs with the same
-		 *      license.
-		 */
-		public $is_free_localhost;
-		/**
-		 * @var bool $is_block_features Defaults to true. If false, don't block features after license expiry - only
-		 *      block updates and support.
-		 */
-		public $is_block_features;
-		/**
-		 * @var bool
-		 */
-		public $is_cancelled;
-
-		#endregion Properties
-
-		/**
-		 * @param stdClass|bool $license
-		 */
-		function __construct( $license = false ) {
-			parent::__construct( $license );
-		}
-
-		static function get_type() {
-			return 'license';
-		}
-
-		/**
-		 * Check how many site activations left.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return int
-		 */
-		function left() {
-			if ( $this->is_expired() ) {
-				return 0;
-			}
-
-			return ( $this->quota - $this->activated - ( $this->is_free_localhost ? 0 : $this->activated_local ) );
-		}
-
-		/**
-		 * Check if single site license.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8.1
-		 *
-		 * @return bool
-		 */
-		function is_single_site() {
-			return ( is_numeric( $this->quota ) && 1 == $this->quota );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.5
-		 *
-		 * @return bool
-		 */
-		function is_expired() {
-			return ! $this->is_lifetime() && ( strtotime( $this->expiration ) < WP_FS__SCRIPT_START_TIME );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool
-		 */
-		function is_lifetime() {
-			return is_null( $this->expiration );
-		}
-
-		/**
-		 * Check if license is fully utilized.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param bool $is_localhost
-		 *
-		 * @return bool
-		 */
-		function is_utilized( $is_localhost = null ) {
-			if ( is_null( $is_localhost ) ) {
-				$is_localhost = WP_FS__IS_LOCALHOST_FOR_SERVER;
-			}
-
-			return ! ( $this->is_free_localhost && $is_localhost ) &&
-			       ( $this->quota <= $this->activated + ( $this->is_free_localhost ? 0 : $this->activated_local ) );
-		}
-
-		/**
-		 * Check if license's plan features are enabled.
-		 *
-		 *  - Either if plan not expired
-		 *  - If expired, based on the configuration to block features or not.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @return bool
-		 */
-		function is_features_enabled() {
-			return ( ! $this->is_block_features || ! $this->is_expired() );
-		}
-
-		/**
-		 * Subscription considered to be new without any payments
-		 * if the license expires in less than 24 hours
-		 * from the license creation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_first_payment_pending() {
-			return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->expiration ) - strtotime( $this->created ) );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.5
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Plugin_License extends FS_Entity {
+
+		#region Properties
+
+		/**
+		 * @var number
+		 */
+		public $plugin_id;
+		/**
+		 * @var number
+		 */
+		public $user_id;
+		/**
+		 * @var number
+		 */
+		public $plan_id;
+		/**
+		 * @var number
+		 */
+		public $pricing_id;
+		/**
+		 * @var int|null
+		 */
+		public $quota;
+		/**
+		 * @var int
+		 */
+		public $activated;
+		/**
+		 * @var int
+		 */
+		public $activated_local;
+		/**
+		 * @var string
+		 */
+		public $expiration;
+		/**
+		 * @var string
+		 */
+		public $secret_key;
+		/**
+		 * @var bool $is_free_localhost Defaults to true. If true, allow unlimited localhost installs with the same
+		 *      license.
+		 */
+		public $is_free_localhost;
+		/**
+		 * @var bool $is_block_features Defaults to true. If false, don't block features after license expiry - only
+		 *      block updates and support.
+		 */
+		public $is_block_features;
+		/**
+		 * @var bool
+		 */
+		public $is_cancelled;
+
+		#endregion Properties
+
+		/**
+		 * @param stdClass|bool $license
+		 */
+		function __construct( $license = false ) {
+			parent::__construct( $license );
+		}
+
+		static function get_type() {
+			return 'license';
+		}
+
+		/**
+		 * Check how many site activations left.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return int
+		 */
+		function left() {
+			if ( ! $this->is_active() || $this->is_expired() ) {
+				return 0;
+			}
+
+			if ( $this->is_unlimited() ) {
+				return 999;
+			}
+
+			return ( $this->quota - $this->activated - ( $this->is_free_localhost ? 0 : $this->activated_local ) );
+		}
+
+		/**
+		 * Check if single site license.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8.1
+		 *
+		 * @return bool
+		 */
+		function is_single_site() {
+			return ( is_numeric( $this->quota ) && 1 == $this->quota );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.5
+		 *
+		 * @return bool
+		 */
+		function is_expired() {
+			return ! $this->is_lifetime() && ( strtotime( $this->expiration ) < WP_FS__SCRIPT_START_TIME );
+		}
+
+		/**
+		 * Check if license is not expired.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @return bool
+		 */
+		function is_valid() {
+			return ! $this->is_expired();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool
+		 */
+		function is_lifetime() {
+			return is_null( $this->expiration );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.0
+		 *
+		 * @return bool
+		 */
+		function is_unlimited() {
+			return is_null( $this->quota );
+		}
+
+		/**
+		 * Check if license is fully utilized.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param bool $is_localhost
+		 *
+		 * @return bool
+		 */
+		function is_utilized( $is_localhost = null ) {
+			if ( is_null( $is_localhost ) ) {
+				$is_localhost = WP_FS__IS_LOCALHOST_FOR_SERVER;
+			}
+
+			if ( $this->is_unlimited() ) {
+				return false;
+			}
+
+			return ! ( $this->is_free_localhost && $is_localhost ) &&
+			       ( $this->quota <= $this->activated + ( $this->is_free_localhost ? 0 : $this->activated_local ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.2.1
+		 *
+		 * @return bool
+		 */
+		function is_active() {
+			return ( ! $this->is_cancelled );
+		}
+
+		/**
+		 * Check if license's plan features are enabled.
+		 *
+		 *  - Either if plan not expired
+		 *  - If expired, based on the configuration to block features or not.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @return bool
+		 */
+		function is_features_enabled() {
+			return $this->is_active() && ( ! $this->is_block_features || ! $this->is_expired() );
+		}
+
+		/**
+		 * Subscription considered to be new without any payments
+		 * if the license expires in less than 24 hours
+		 * from the license creation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_first_payment_pending() {
+			return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->expiration ) - strtotime( $this->created ) );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-plan.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-plan.php
index 90378b4fc7018db770db603e8368aa460d7fa7ac..9e564de4455ee918dc447d7ee19ebf34d1ed27d0 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-plan.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-plugin-plan.php
@@ -1,124 +1,145 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.5
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Plugin_Plan extends FS_Entity {
-
-		#region Properties
-
-		/**
-		 * @var number
-		 */
-		public $plugin_id;
-		/**
-		 * @var string
-		 */
-		public $name;
-		/**
-		 * @var string
-		 */
-		public $title;
-		/**
-		 * @var string
-		 */
-		public $description;
-		/**
-		 * @var bool Defaults to true. If true, allow unlimited localhost installs with the same license.
-		 */
-		public $is_free_localhost;
-		/**
-		 * @var bool Defaults to true. If false, don't block features after license expiry - only block updates and
-		 *      support.
-		 */
-		public $is_block_features;
-		/**
-		 * @var int
-		 */
-		public $license_type;
-		/**
-		 * @var bool
-		 */
-		public $is_https_support;
-		/**
-		 * @var int Trial days.
-		 */
-		public $trial_period;
-		/**
-		 * @var string If true, require payment for trial.
-		 */
-		public $is_require_subscription;
-		/**
-		 * @var string Knowledge Base URL.
-		 */
-		public $support_kb;
-		/**
-		 * @var string Support Forum URL.
-		 */
-		public $support_forum;
-		/**
-		 * @var string Support email address.
-		 */
-		public $support_email;
-		/**
-		 * @var string Support phone.
-		 */
-		public $support_phone;
-		/**
-		 * @var string Support skype username.
-		 */
-		public $support_skype;
-		/**
-		 * @var bool Is personal success manager supported with the plan.
-		 */
-		public $is_success_manager;
-		/**
-		 * @var bool Is featured plan.
-		 */
-		public $is_featured;
-
-		#endregion Properties
-
-		/**
-		 * @param object|bool $plan
-		 */
-		function __construct( $plan = false ) {
-			parent::__construct( $plan );
-
-			if ( is_object( $plan ) ) {
-				$this->name = strtolower( $plan->name );
-			}
-		}
-
-		static function get_type() {
-			return 'plan';
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_free() {
-			return ( 'free' === $this->name );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function has_trial() {
-			return ! $this->is_free() &&
-			       is_numeric( $this->trial_period ) && ( $this->trial_period > 0 );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.5
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * Class FS_Plugin_Plan
+	 *
+	 * @property FS_Pricing[] $pricing
+	 */
+	class FS_Plugin_Plan extends FS_Entity {
+
+		#region Properties
+
+		/**
+		 * @var number
+		 */
+		public $plugin_id;
+		/**
+		 * @var string
+		 */
+		public $name;
+		/**
+		 * @var string
+		 */
+		public $title;
+		/**
+		 * @var string
+		 */
+		public $description;
+		/**
+		 * @var bool Defaults to true. If true, allow unlimited localhost installs with the same license.
+		 */
+		public $is_free_localhost;
+		/**
+		 * @var bool Defaults to true. If false, don't block features after license expiry - only block updates and
+		 *      support.
+		 */
+		public $is_block_features;
+		/**
+		 * @var int
+		 */
+		public $license_type;
+		/**
+		 * @var bool
+		 */
+		public $is_https_support;
+		/**
+		 * @var int Trial days.
+		 */
+		public $trial_period;
+		/**
+		 * @var string If true, require payment for trial.
+		 */
+		public $is_require_subscription;
+		/**
+		 * @var string Knowledge Base URL.
+		 */
+		public $support_kb;
+		/**
+		 * @var string Support Forum URL.
+		 */
+		public $support_forum;
+		/**
+		 * @var string Support email address.
+		 */
+		public $support_email;
+		/**
+		 * @var string Support phone.
+		 */
+		public $support_phone;
+		/**
+		 * @var string Support skype username.
+		 */
+		public $support_skype;
+		/**
+		 * @var bool Is personal success manager supported with the plan.
+		 */
+		public $is_success_manager;
+		/**
+		 * @var bool Is featured plan.
+		 */
+		public $is_featured;
+
+		#endregion Properties
+
+		/**
+		 * @param object|bool $plan
+		 */
+		function __construct( $plan = false ) {
+			parent::__construct( $plan );
+
+			if ( is_object( $plan ) ) {
+				$this->name = strtolower( $plan->name );
+			}
+		}
+
+		static function get_type() {
+			return 'plan';
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_free() {
+			return ( 'free' === $this->name );
+		}
+
+		/**
+		 * Checks if this plan supports "Technical Support".
+		 *
+		 * @author Leo Fajardo (leorw)
+		 * @since 1.2.0
+		 *
+		 * @return bool
+		 */
+		function has_technical_support() {
+			return ( ! empty( $this->support_email ) ||
+			     ! empty( $this->support_skype ) ||
+			     ! empty( $this->support_phone ) ||
+			     ! empty( $this->is_success_manager )
+			);
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function has_trial() {
+			return ! $this->is_free() &&
+			       is_numeric( $this->trial_period ) && ( $this->trial_period > 0 );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-pricing.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-pricing.php
index 2962f6d436e892a5e856e893e3549d54acee5b4c..fb70b5aef08c78d8b2d5cf39d2b72f4f93fedb33 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-pricing.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-pricing.php
@@ -1,141 +1,141 @@
-<?php
-	/**
-	 * @package     Freemius for EDD Add-On
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.0
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Pricing extends FS_Entity {
-
-		#region Properties
-
-		/**
-		 * @var number
-		 */
-		public $plan_id;
-		/**
-		 * @var int
-		 */
-		public $licenses;
-		/**
-		 * @var null|float
-		 */
-		public $monthly_price;
-		/**
-		 * @var null|float
-		 */
-		public $annual_price;
-		/**
-		 * @var null|float
-		 */
-		public $lifetime_price;
-
-		#endregion Properties
-
-		/**
-		 * @param object|bool $pricing
-		 */
-		function __construct( $pricing = false ) {
-			parent::__construct( $pricing );
-		}
-
-		static function get_type() {
-			return 'pricing';
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return bool
-		 */
-		function has_monthly() {
-			return ( is_numeric( $this->monthly_price ) && $this->monthly_price > 0 );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return bool
-		 */
-		function has_annual() {
-			return ( is_numeric( $this->annual_price ) && $this->annual_price > 0 );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return bool
-		 */
-		function has_lifetime() {
-			return ( is_numeric( $this->lifetime_price ) && $this->lifetime_price > 0 );
-		}
-
-		/**
-		 * Check if unlimited licenses pricing.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return bool
-		 */
-		function is_unlimited() {
-			return is_null( $this->licenses );
-		}
-
-
-		/**
-		 * Check if pricing has more than one billing cycle.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return bool
-		 */
-		function is_multi_cycle() {
-			$cycles = 0;
-			if ( $this->has_monthly() ) {
-				$cycles ++;
-			}
-			if ( $this->has_annual() ) {
-				$cycles ++;
-			}
-			if ( $this->has_lifetime() ) {
-				$cycles ++;
-			}
-
-			return $cycles > 1;
-		}
-
-		/**
-		 * Get annual over monthly discount.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return int
-		 */
-		function annual_discount_percentage() {
-			return floor( $this->annual_savings() / ( $this->monthly_price * 12 * ( $this->is_unlimited() ? 1 : $this->licenses ) ) * 100 );
-		}
-
-		/**
-		 * Get annual over monthly savings.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.8
-		 *
-		 * @return float
-		 */
-		function annual_savings() {
-			return ( $this->monthly_price * 12 - $this->annual_price ) * ( $this->is_unlimited() ? 1 : $this->licenses );
-		}
-
+<?php
+	/**
+	 * @package     Freemius for EDD Add-On
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.0
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Pricing extends FS_Entity {
+
+		#region Properties
+
+		/**
+		 * @var number
+		 */
+		public $plan_id;
+		/**
+		 * @var int
+		 */
+		public $licenses;
+		/**
+		 * @var null|float
+		 */
+		public $monthly_price;
+		/**
+		 * @var null|float
+		 */
+		public $annual_price;
+		/**
+		 * @var null|float
+		 */
+		public $lifetime_price;
+
+		#endregion Properties
+
+		/**
+		 * @param object|bool $pricing
+		 */
+		function __construct( $pricing = false ) {
+			parent::__construct( $pricing );
+		}
+
+		static function get_type() {
+			return 'pricing';
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return bool
+		 */
+		function has_monthly() {
+			return ( is_numeric( $this->monthly_price ) && $this->monthly_price > 0 );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return bool
+		 */
+		function has_annual() {
+			return ( is_numeric( $this->annual_price ) && $this->annual_price > 0 );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return bool
+		 */
+		function has_lifetime() {
+			return ( is_numeric( $this->lifetime_price ) && $this->lifetime_price > 0 );
+		}
+
+		/**
+		 * Check if unlimited licenses pricing.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return bool
+		 */
+		function is_unlimited() {
+			return is_null( $this->licenses );
+		}
+
+
+		/**
+		 * Check if pricing has more than one billing cycle.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return bool
+		 */
+		function is_multi_cycle() {
+			$cycles = 0;
+			if ( $this->has_monthly() ) {
+				$cycles ++;
+			}
+			if ( $this->has_annual() ) {
+				$cycles ++;
+			}
+			if ( $this->has_lifetime() ) {
+				$cycles ++;
+			}
+
+			return $cycles > 1;
+		}
+
+		/**
+		 * Get annual over monthly discount.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return int
+		 */
+		function annual_discount_percentage() {
+			return floor( $this->annual_savings() / ( $this->monthly_price * 12 * ( $this->is_unlimited() ? 1 : $this->licenses ) ) * 100 );
+		}
+
+		/**
+		 * Get annual over monthly savings.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.8
+		 *
+		 * @return float
+		 */
+		function annual_savings() {
+			return ( $this->monthly_price * 12 - $this->annual_price ) * ( $this->is_unlimited() ? 1 : $this->licenses );
+		}
+
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-site.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-site.php
index 37215699468d084f6cf4fb4b98c56446b6718126..1c9393bdf325c139078ae34642079a4b39b429eb 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-site.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-site.php
@@ -1,127 +1,127 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Site extends FS_Scope_Entity {
-		/**
-		 * @var string
-		 */
-		public $slug;
-		/**
-		 * @var number
-		 */
-		public $site_id;
-		/**
-		 * @var number
-		 */
-		public $plugin_id;
-		/**
-		 * @var number
-		 */
-		public $user_id;
-		/**
-		 * @var string
-		 */
-		public $title;
-		/**
-		 * @var string
-		 */
-		public $url;
-		/**
-		 * @var string
-		 */
-		public $version;
-		/**
-		 * @var string E.g. en-GB
-		 */
-		public $language;
-		/**
-		 * @var string E.g. UTF-8
-		 */
-		public $charset;
-		/**
-		 * @var string Platform version (e.g WordPress version).
-		 */
-		public $platform_version;
-		/**
-		 * @var string Programming language version (e.g PHP version).
-		 */
-		public $programming_language_version;
-		/**
-		 * @var FS_Plugin_Plan $plan
-		 */
-		public $plan;
-		/**
-		 * @var number|null
-		 */
-		public $license_id;
-		/**
-		 * @var number|null
-		 */
-		public $trial_plan_id;
-		/**
-		 * @var string|null
-		 */
-		public $trial_ends;
-		/**
-		 * @since 1.0.9
-		 *
-		 * @var bool
-		 */
-		public $is_premium = false;
-
-		/**
-		 * @param stdClass|bool $site
-		 */
-		function __construct( $site = false ) {
-			$this->plan = new FS_Plugin_Plan();
-
-			parent::__construct( $site );
-
-			if ( is_object( $site ) ) {
-				$this->plan->id = $site->plan_id;
-			}
-		}
-
-		static function get_type() {
-			return 'install';
-		}
-
-		function is_localhost() {
-			// The server has no way to verify if localhost unless localhost appears in domain.
-			return WP_FS__IS_LOCALHOST_FOR_SERVER;
-//			return (substr($_SERVER['REMOTE_ADDR'], 0, 4) == '127.' || $_SERVER['REMOTE_ADDR'] == '::1');
-		}
-
-		/**
-		 * Check if site in trial.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_trial() {
-			return is_numeric( $this->trial_plan_id ) && ( strtotime( $this->trial_ends ) > WP_FS__SCRIPT_START_TIME );
-		}
-
-		/**
-		 * Check if user already utilized the trial with the current install.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_trial_utilized() {
-			return is_numeric( $this->trial_plan_id );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Site extends FS_Scope_Entity {
+		/**
+		 * @var string
+		 */
+		public $slug;
+		/**
+		 * @var number
+		 */
+		public $site_id;
+		/**
+		 * @var number
+		 */
+		public $plugin_id;
+		/**
+		 * @var number
+		 */
+		public $user_id;
+		/**
+		 * @var string
+		 */
+		public $title;
+		/**
+		 * @var string
+		 */
+		public $url;
+		/**
+		 * @var string
+		 */
+		public $version;
+		/**
+		 * @var string E.g. en-GB
+		 */
+		public $language;
+		/**
+		 * @var string E.g. UTF-8
+		 */
+		public $charset;
+		/**
+		 * @var string Platform version (e.g WordPress version).
+		 */
+		public $platform_version;
+		/**
+		 * @var string Programming language version (e.g PHP version).
+		 */
+		public $programming_language_version;
+		/**
+		 * @var FS_Plugin_Plan $plan
+		 */
+		public $plan;
+		/**
+		 * @var number|null
+		 */
+		public $license_id;
+		/**
+		 * @var number|null
+		 */
+		public $trial_plan_id;
+		/**
+		 * @var string|null
+		 */
+		public $trial_ends;
+		/**
+		 * @since 1.0.9
+		 *
+		 * @var bool
+		 */
+		public $is_premium = false;
+
+		/**
+		 * @param stdClass|bool $site
+		 */
+		function __construct( $site = false ) {
+			$this->plan = new FS_Plugin_Plan();
+
+			parent::__construct( $site );
+
+			if ( is_object( $site ) ) {
+				$this->plan->id = $site->plan_id;
+			}
+		}
+
+		static function get_type() {
+			return 'install';
+		}
+
+		function is_localhost() {
+			// The server has no way to verify if localhost unless localhost appears in domain.
+			return WP_FS__IS_LOCALHOST_FOR_SERVER;
+//			return (substr($_SERVER['REMOTE_ADDR'], 0, 4) == '127.' || $_SERVER['REMOTE_ADDR'] == '::1');
+		}
+
+		/**
+		 * Check if site in trial.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_trial() {
+			return is_numeric( $this->trial_plan_id ) && ( strtotime( $this->trial_ends ) > WP_FS__SCRIPT_START_TIME );
+		}
+
+		/**
+		 * Check if user already utilized the trial with the current install.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_trial_utilized() {
+			return is_numeric( $this->trial_plan_id );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-subscription.php b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-subscription.php
index b18634c5e6a7485add66ecce19c185df095622ec..0041df0e94b42bff0eeacaf624a75643cdc3b647 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-subscription.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/entities/class-fs-subscription.php
@@ -1,125 +1,125 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.9
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Subscription extends FS_Entity {
-
-		#region Properties
-
-		/**
-		 * @var number
-		 */
-		public $user_id;
-		/**
-		 * @var number
-		 */
-		public $install_id;
-		/**
-		 * @var number
-		 */
-		public $plan_id;
-		/**
-		 * @var number
-		 */
-		public $license_id;
-		/**
-		 * @var float
-		 */
-		public $total_gross;
-		/**
-		 * @var float
-		 */
-		public $amount_per_cycle;
-		/**
-		 * @var int # of months
-		 */
-		public $billing_cycle;
-		/**
-		 * @var float
-		 */
-		public $outstanding_balance;
-		/**
-		 * @var int
-		 */
-		public $failed_payments;
-		/**
-		 * @var string
-		 */
-		public $gateway;
-		/**
-		 * @var string
-		 */
-		public $external_id;
-		/**
-		 * @var string|null
-		 */
-		public $trial_ends;
-		/**
-		 * @var string|null Datetime of the next payment, or null if cancelled
-		 */
-		public $next_payment;
-		/**
-		 * @var string|null
-		 */
-		public $vat_id;
-		/**
-		 * @var string Two characters country code
-		 */
-		public $country_code;
-
-		#endregion Properties
-
-		/**
-		 * @param object|bool $subscription
-		 */
-		function __construct( $subscription = false ) {
-			parent::__construct( $subscription );
-		}
-
-		static function get_type() {
-			return 'subscription';
-		}
-
-		/**
-		 * Check if subscription is active.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_active() {
-			return ! empty( $this->next_payment ) &&
-			       ( strtotime( $this->next_payment ) > WP_FS__SCRIPT_START_TIME );
-		}
-
-		/**
-		 * Subscription considered to be new without any payments
-		 * if the next payment should be made within less than 24 hours
-		 * from the subscription creation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return bool
-		 */
-		function is_first_payment_pending() {
-			return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->next_payment ) - strtotime( $this->created ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 */
-		function has_trial() {
-			return ! is_null( $this->trial_ends );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.9
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Subscription extends FS_Entity {
+
+		#region Properties
+
+		/**
+		 * @var number
+		 */
+		public $user_id;
+		/**
+		 * @var number
+		 */
+		public $install_id;
+		/**
+		 * @var number
+		 */
+		public $plan_id;
+		/**
+		 * @var number
+		 */
+		public $license_id;
+		/**
+		 * @var float
+		 */
+		public $total_gross;
+		/**
+		 * @var float
+		 */
+		public $amount_per_cycle;
+		/**
+		 * @var int # of months
+		 */
+		public $billing_cycle;
+		/**
+		 * @var float
+		 */
+		public $outstanding_balance;
+		/**
+		 * @var int
+		 */
+		public $failed_payments;
+		/**
+		 * @var string
+		 */
+		public $gateway;
+		/**
+		 * @var string
+		 */
+		public $external_id;
+		/**
+		 * @var string|null
+		 */
+		public $trial_ends;
+		/**
+		 * @var string|null Datetime of the next payment, or null if cancelled
+		 */
+		public $next_payment;
+		/**
+		 * @var string|null
+		 */
+		public $vat_id;
+		/**
+		 * @var string Two characters country code
+		 */
+		public $country_code;
+
+		#endregion Properties
+
+		/**
+		 * @param object|bool $subscription
+		 */
+		function __construct( $subscription = false ) {
+			parent::__construct( $subscription );
+		}
+
+		static function get_type() {
+			return 'subscription';
+		}
+
+		/**
+		 * Check if subscription is active.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_active() {
+			return ! empty( $this->next_payment ) &&
+			       ( strtotime( $this->next_payment ) > WP_FS__SCRIPT_START_TIME );
+		}
+
+		/**
+		 * Subscription considered to be new without any payments
+		 * if the next payment should be made within less than 24 hours
+		 * from the subscription creation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return bool
+		 */
+		function is_first_payment_pending() {
+			return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->next_payment ) - strtotime( $this->created ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 */
+		function has_trial() {
+			return ! is_null( $this->trial_ends );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/fs-core-functions.php b/wp-content/plugins/nextgen-gallery/freemius/includes/fs-core-functions.php
index 49fdc5f652a8a62c68cb058d948e04e528471912..d00f04b82e94502c56eb34594447c2407a4ab6ca 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/fs-core-functions.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/fs-core-functions.php
@@ -1,441 +1,463 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	global $fs_core_logger;
-
-	$fs_core_logger = FS_Logger::get_logger( WP_FS__SLUG . '_core', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-	if ( ! function_exists( 'fs_dummy' ) ) {
-		function fs_dummy() {
-		}
-	}
-
-	/* Url.
-	--------------------------------------------------------------------------------------------*/
-	function fs_get_url_daily_cache_killer() {
-		return date( '\YY\Mm\Dd' );
-	}
-
-	/* Templates / Views.
-	--------------------------------------------------------------------------------------------*/
-	if ( ! function_exists( 'fs_get_template_path' ) ) {
-		function fs_get_template_path( $path ) {
-			return WP_FS__DIR_TEMPLATES . '/' . trim( $path, '/' );
-		}
-
-		function fs_include_template( $path, &$params = null ) {
-			$VARS = &$params;
-			include( fs_get_template_path( $path ) );
-		}
-
-		function fs_include_once_template( $path, &$params = null ) {
-			$VARS = &$params;
-			include_once( fs_get_template_path( $path ) );
-		}
-
-		function fs_require_template( $path, &$params = null ) {
-			$VARS = &$params;
-			require( fs_get_template_path( $path ) );
-		}
-
-		function fs_require_once_template( $path, &$params = null ) {
-			$VARS = &$params;
-			require_once( fs_get_template_path( $path ) );
-		}
-
-		function fs_get_template( $path, &$params = null ) {
-			ob_start();
-
-			$VARS = &$params;
-			require_once( fs_get_template_path( $path ) );
-
-			return ob_get_clean();
-		}
-	}
-
-	/* Scripts and styles including.
-	--------------------------------------------------------------------------------------------*/
-	function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
-		global $fs_core_logger;
-		if ( $fs_core_logger->is_on() ) {
-			$fs_core_logger->info( 'handle = ' . $handle . '; path = ' . $path . ';' );
-			$fs_core_logger->info( 'plugin_basename = ' . plugins_url( WP_FS__DIR_CSS . trim( $path, '/' ) ) );
-			$fs_core_logger->info( 'plugins_url = ' . plugins_url( plugin_basename( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ) ) );
-		}
-
-		wp_enqueue_style( $handle, plugins_url( plugin_basename( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ) ), $deps, $ver, $media );
-	}
-
-	function fs_enqueue_local_script( $handle, $path, $deps = array(), $ver = false, $in_footer = 'all' ) {
-		global $fs_core_logger;
-		if ( $fs_core_logger->is_on() ) {
-			$fs_core_logger->info( 'handle = ' . $handle . '; path = ' . $path . ';' );
-			$fs_core_logger->info( 'plugin_basename = ' . plugins_url( WP_FS__DIR_JS . trim( $path, '/' ) ) );
-			$fs_core_logger->info( 'plugins_url = ' . plugins_url( plugin_basename( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ) ) );
-		}
-
-		wp_enqueue_script( $handle, plugins_url( plugin_basename( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ) ), $deps, $ver, $in_footer );
-	}
-
-	function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
-		return plugins_url( plugin_basename( $img_dir . '/' . trim( $path, '/' ) ) );
-	}
-
-	/* Request handlers.
-	--------------------------------------------------------------------------------------------*/
-	/**
-	 * @param string $key
-	 * @param mixed  $def
-	 *
-	 * @return mixed
-	 */
-	function fs_request_get( $key, $def = false ) {
-		return isset( $_REQUEST[ $key ] ) ? $_REQUEST[ $key ] : $def;
-	}
-
-	function fs_request_has( $key ) {
-		return isset( $_REQUEST[ $key ] );
-	}
-
-	function fs_request_get_bool( $key, $def = false ) {
-		return ( isset( $_REQUEST[ $key ] ) && ( 1 == $_REQUEST[ $key ] || 'true' === strtolower( $_REQUEST[ $key ] ) ) ) ? true : $def;
-	}
-
-	function fs_request_is_post() {
-		return ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) );
-	}
-
-	function fs_request_is_get() {
-		return ( 'get' === strtolower( $_SERVER['REQUEST_METHOD'] ) );
-	}
-
-	function fs_get_action( $action_key = 'action' ) {
-		if ( ! empty( $_REQUEST[ $action_key ] ) ) {
-			return strtolower( $_REQUEST[ $action_key ] );
-		}
-
-		if ( 'action' == $action_key ) {
-			$action_key = 'fs_action';
-
-			if ( ! empty( $_REQUEST[ $action_key ] ) ) {
-				return strtolower( $_REQUEST[ $action_key ] );
-			}
-		}
-
-		return false;
-	}
-
-	function fs_request_is_action( $action, $action_key = 'action' ) {
-		return ( strtolower( $action ) === fs_get_action( $action_key ) );
-	}
-
-	function fs_is_plugin_page( $menu_slug ) {
-		return ( is_admin() && $_REQUEST['page'] === $menu_slug );
-	}
-
-	/* Core UI.
-	--------------------------------------------------------------------------------------------*/
-	/**
-	 * @param string      $slug
-	 * @param string      $page
-	 * @param string      $action
-	 * @param string      $title
-	 * @param array       $params
-	 * @param bool        $is_primary
-	 * @param string|bool $icon_class   Optional class for an icon (since 1.1.7).
-	 * @param string|bool $confirmation Optional confirmation message before submit (since 1.1.7).
-	 * @param string      $method       Since 1.1.7
-	 *
-	 * @uses fs_ui_get_action_button()
-	 */
-	function fs_ui_action_button(
-		$slug,
-		$page,
-		$action,
-		$title,
-		$params = array(),
-		$is_primary = true,
-		$icon_class = false,
-		$confirmation = false,
-		$method = 'GET'
-	) {
-		echo fs_ui_get_action_button(
-			$slug,
-			$page,
-			$action,
-			$title,
-			$params,
-			$is_primary,
-			$icon_class,
-			$confirmation,
-			$method
-		);
-	}
-
-	/**
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.7
-	 *
-	 * @param string      $slug
-	 * @param string      $page
-	 * @param string      $action
-	 * @param string      $title
-	 * @param array       $params
-	 * @param bool        $is_primary
-	 * @param string|bool $icon_class   Optional class for an icon.
-	 * @param string|bool $confirmation Optional confirmation message before submit.
-	 * @param string      $method
-	 *
-	 * @return string
-	 */
-	function fs_ui_get_action_button(
-		$slug,
-		$page,
-		$action,
-		$title,
-		$params = array(),
-		$is_primary = true,
-		$icon_class = false,
-		$confirmation = false,
-		$method = 'GET'
-	) {
-		// Prepend icon (if set).
-		$title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
-
-		if ( is_string( $confirmation ) ) {
-			return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
-				freemius( $slug )->_get_admin_page_url( $page, $params ),
-				$method,
-				$action,
-				wp_nonce_field( $action, '_wpnonce', true, false ),
-				'button' . ( $is_primary ? ' button-primary' : '' ),
-				$confirmation,
-				$title
-			);
-		} else if ( 'GET' !== strtoupper( $method ) ) {
-			return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
-				freemius( $slug )->_get_admin_page_url( $page, $params ),
-				$method,
-				$action,
-				wp_nonce_field( $action, '_wpnonce', true, false ),
-				'button' . ( $is_primary ? ' button-primary' : '' ),
-				$title
-			);
-		} else {
-			return sprintf( '<a href="%s" class="%s">%s</a></form>',
-				wp_nonce_url( freemius( $slug )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
-				'button' . ( $is_primary ? ' button-primary' : '' ),
-				$title
-			);
-		}
-	}
-
-	function fs_ui_action_link( $slug, $page, $action, $title, $params = array() ) {
-		?><a class=""
-		     href="<?php echo wp_nonce_url( freemius( $slug )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
-	}
-
-	/*function fs_error_handler($errno, $errstr, $errfile, $errline)
-	{
-		if (false === strpos($errfile, 'freemius/'))
-		{
-			// @todo Dump Freemius errors to local log.
-		}
-
-//		switch ($errno) {
-//			case E_USER_ERROR:
-//				break;
-//			case E_WARNING:
-//			case E_USER_WARNING:
-//				break;
-//			case E_NOTICE:
-//			case E_USER_NOTICE:
-//				break;
-//			default:
-//				break;
-//		}
-	}
-
-	set_error_handler('fs_error_handler');*/
-
-	function fs_nonce_url( $actionurl, $action = - 1, $name = '_wpnonce' ) {
-//		$actionurl = str_replace( '&amp;', '&', $actionurl );
-		return add_query_arg( $name, wp_create_nonce( $action ), $actionurl );
-	}
-
-	if ( ! function_exists( 'fs_starts_with' ) ) {
-		/**
-		 * Check if string starts with.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string $haystack
-		 * @param string $needle
-		 *
-		 * @return bool
-		 */
-		function fs_starts_with( $haystack, $needle ) {
-			$length = strlen( $needle );
-
-			return ( substr( $haystack, 0, $length ) === $needle );
-		}
-	}
-
-	#region Url Canonization ------------------------------------------------------------------
-
-	if ( ! function_exists( 'fs_canonize_url' ) ) {
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string $url
-		 * @param bool   $omit_host
-		 * @param array  $ignore_params
-		 *
-		 * @return string
-		 */
-		function fs_canonize_url( $url, $omit_host = false, $ignore_params = array() ) {
-			$parsed_url = parse_url( strtolower( $url ) );
-
-//		if ( ! isset( $parsed_url['host'] ) ) {
-//			return $url;
-//		}
-
-			$canonical = ( ( $omit_host || ! isset( $parsed_url['host'] ) ) ? '' : $parsed_url['host'] ) . $parsed_url['path'];
-
-			if ( isset( $parsed_url['query'] ) ) {
-				parse_str( $parsed_url['query'], $queryString );
-				$canonical .= '?' . fs_canonize_query_string( $queryString, $ignore_params );
-			}
-
-			return $canonical;
-		}
-	}
-
-	if ( ! function_exists( 'fs_canonize_query_string' ) ) {
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param array $params
-		 * @param array $ignore_params
-		 * @param bool  $params_prefix
-		 *
-		 * @return string
-		 */
-		function fs_canonize_query_string( array $params, array &$ignore_params, $params_prefix = false ) {
-			if ( ! is_array( $params ) || 0 === count( $params ) ) {
-				return '';
-			}
-
-			// Urlencode both keys and values
-			$keys   = fs_urlencode_rfc3986( array_keys( $params ) );
-			$values = fs_urlencode_rfc3986( array_values( $params ) );
-			$params = array_combine( $keys, $values );
-
-			// Parameters are sorted by name, using lexicographical byte value ordering.
-			// Ref: Spec: 9.1.1 (1)
-			uksort( $params, 'strcmp' );
-
-			$pairs = array();
-			foreach ( $params as $parameter => $value ) {
-				$lower_param = strtolower( $parameter );
-
-				// Skip ignore params.
-				if ( in_array( $lower_param, $ignore_params ) || ( false !== $params_prefix && startsWith( $lower_param, $params_prefix ) ) ) {
-					continue;
-				}
-
-				if ( is_array( $value ) ) {
-					// If two or more parameters share the same name, they are sorted by their value
-					// Ref: Spec: 9.1.1 (1)
-					natsort( $value );
-					foreach ( $value as $duplicate_value ) {
-						$pairs[] = $lower_param . '=' . $duplicate_value;
-					}
-				} else {
-					$pairs[] = $lower_param . '=' . $value;
-				}
-			}
-
-			if ( 0 === count( $pairs ) ) {
-				return '';
-			}
-
-			return implode( "&", $pairs );
-		}
-	}
-
-	if ( ! function_exists( 'fs_urlencode_rfc3986' ) ) {
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string|string[] $input
-		 *
-		 * @return array|mixed|string
-		 */
-		function fs_urlencode_rfc3986( $input ) {
-			if ( is_array( $input ) ) {
-				return array_map( 'fs_urlencode_rfc3986', $input );
-			} else if ( is_scalar( $input ) ) {
-				return str_replace( '+', ' ', str_replace( '%7E', '~', rawurlencode( $input ) ) );
-			}
-
-			return '';
-		}
-	}
-
-	#endregion Url Canonization ------------------------------------------------------------------
-
-	function fs_download_image( $from, $to ) {
-		$ch = curl_init( $from );
-		$fp = fopen( fs_normalize_path( $to ), 'wb' );
-		curl_setopt( $ch, CURLOPT_FILE, $fp );
-		curl_setopt( $ch, CURLOPT_HEADER, 0 );
-		curl_exec( $ch );
-		curl_close( $ch );
-		fclose( $fp );
-	}
-
-	/* General Utilities
-	--------------------------------------------------------------------------------------------*/
-
-	/**
-	 * Sorts an array by the value of the priority key.
-	 *
-	 * @author Daniel Iser (@danieliser)
-	 * @since  1.1.7
-	 *
-	 * @param $a
-	 * @param $b
-	 *
-	 * @return int
-	 */
-	function fs_sort_by_priority( $a, $b ) {
-
-		// If b has a priority and a does not, b wins.
-		if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
-			return 1;
-		} // If b has a priority and a does not, b wins.
-		elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
-			return - 1;
-		} // If neither has a priority or both priorities are equal its a tie.
-		elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
-			return 0;
-		}
-
-		// If both have priority return the winner.
-		return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
-	}
-
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	global $fs_core_logger;
+
+	$fs_core_logger = FS_Logger::get_logger( WP_FS__SLUG . '_core', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+	if ( ! function_exists( 'fs_dummy' ) ) {
+		function fs_dummy() {
+		}
+	}
+
+	if ( ! function_exists( 'starts_with' ) ) {
+		function starts_with( $haystack, $needle ) {
+			$length = strlen( $needle );
+
+			return ( substr( $haystack, 0, $length ) === $needle );
+		}
+	}
+
+	/* Url.
+	--------------------------------------------------------------------------------------------*/
+	function fs_get_url_daily_cache_killer() {
+		return date( '\YY\Mm\Dd' );
+	}
+
+	/* Templates / Views.
+	--------------------------------------------------------------------------------------------*/
+	if ( ! function_exists( 'fs_get_template_path' ) ) {
+		function fs_get_template_path( $path ) {
+			return WP_FS__DIR_TEMPLATES . '/' . trim( $path, '/' );
+		}
+
+		function fs_include_template( $path, &$params = null ) {
+			$VARS = &$params;
+			include( fs_get_template_path( $path ) );
+		}
+
+		function fs_include_once_template( $path, &$params = null ) {
+			$VARS = &$params;
+			include_once( fs_get_template_path( $path ) );
+		}
+
+		function fs_require_template( $path, &$params = null ) {
+			$VARS = &$params;
+			require( fs_get_template_path( $path ) );
+		}
+
+		function fs_require_once_template( $path, &$params = null ) {
+			$VARS = &$params;
+			require_once( fs_get_template_path( $path ) );
+		}
+
+		function fs_get_template( $path, &$params = null ) {
+			ob_start();
+
+			$VARS = &$params;
+			require_once( fs_get_template_path( $path ) );
+
+			return ob_get_clean();
+		}
+	}
+
+	/* Scripts and styles including.
+	--------------------------------------------------------------------------------------------*/
+	function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
+		global $fs_core_logger;
+		if ( $fs_core_logger->is_on() ) {
+			$fs_core_logger->info( 'handle = ' . $handle . '; path = ' . $path . ';' );
+			$fs_core_logger->info( 'plugin_basename = ' . plugins_url( WP_FS__DIR_CSS . trim( $path, '/' ) ) );
+			$fs_core_logger->info( 'plugins_url = ' . plugins_url( plugin_basename( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ) ) );
+		}
+
+		wp_enqueue_style( $handle, plugins_url( plugin_basename( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ) ), $deps, $ver, $media );
+	}
+
+	function fs_enqueue_local_script( $handle, $path, $deps = array(), $ver = false, $in_footer = 'all' ) {
+		global $fs_core_logger;
+		if ( $fs_core_logger->is_on() ) {
+			$fs_core_logger->info( 'handle = ' . $handle . '; path = ' . $path . ';' );
+			$fs_core_logger->info( 'plugin_basename = ' . plugins_url( WP_FS__DIR_JS . trim( $path, '/' ) ) );
+			$fs_core_logger->info( 'plugins_url = ' . plugins_url( plugin_basename( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ) ) );
+		}
+
+		wp_enqueue_script( $handle, plugins_url( plugin_basename( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ) ), $deps, $ver, $in_footer );
+	}
+
+	function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
+		return plugins_url( plugin_basename( $img_dir . '/' . trim( $path, '/' ) ) );
+	}
+
+	/* Request handlers.
+	--------------------------------------------------------------------------------------------*/
+	/**
+	 * @param string $key
+	 * @param mixed  $def
+	 *
+	 * @return mixed
+	 */
+	function fs_request_get( $key, $def = false ) {
+		return isset( $_REQUEST[ $key ] ) ? $_REQUEST[ $key ] : $def;
+	}
+
+	function fs_request_has( $key ) {
+		return isset( $_REQUEST[ $key ] );
+	}
+
+	function fs_request_get_bool( $key, $def = false ) {
+		if ( ! isset( $_REQUEST[ $key ] ) ) {
+			return $def;
+		}
+
+		if ( 1 == $_REQUEST[ $key ] || 'true' === strtolower( $_REQUEST[ $key ] ) ) {
+			return true;
+		}
+
+		if ( 0 == $_REQUEST[ $key ] || 'false' === strtolower( $_REQUEST[ $key ] ) ) {
+			return false;
+		}
+
+		return $def;
+	}
+
+	function fs_request_is_post() {
+		return ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) );
+	}
+
+	function fs_request_is_get() {
+		return ( 'get' === strtolower( $_SERVER['REQUEST_METHOD'] ) );
+	}
+
+	function fs_get_action( $action_key = 'action' ) {
+		if ( ! empty( $_REQUEST[ $action_key ] ) ) {
+			return strtolower( $_REQUEST[ $action_key ] );
+		}
+
+		if ( 'action' == $action_key ) {
+			$action_key = 'fs_action';
+
+			if ( ! empty( $_REQUEST[ $action_key ] ) ) {
+				return strtolower( $_REQUEST[ $action_key ] );
+			}
+		}
+
+		return false;
+	}
+
+	function fs_request_is_action( $action, $action_key = 'action' ) {
+		return ( strtolower( $action ) === fs_get_action( $action_key ) );
+	}
+
+	function fs_is_plugin_page( $menu_slug ) {
+		return ( is_admin() && $_REQUEST['page'] === $menu_slug );
+	}
+
+	/* Core UI.
+	--------------------------------------------------------------------------------------------*/
+	/**
+	 * @param string      $slug
+	 * @param string      $page
+	 * @param string      $action
+	 * @param string      $title
+	 * @param array       $params
+	 * @param bool        $is_primary
+	 * @param string|bool $icon_class   Optional class for an icon (since 1.1.7).
+	 * @param string|bool $confirmation Optional confirmation message before submit (since 1.1.7).
+	 * @param string      $method       Since 1.1.7
+	 *
+	 * @uses fs_ui_get_action_button()
+	 */
+	function fs_ui_action_button(
+		$slug,
+		$page,
+		$action,
+		$title,
+		$params = array(),
+		$is_primary = true,
+		$icon_class = false,
+		$confirmation = false,
+		$method = 'GET'
+	) {
+		echo fs_ui_get_action_button(
+			$slug,
+			$page,
+			$action,
+			$title,
+			$params,
+			$is_primary,
+			$icon_class,
+			$confirmation,
+			$method
+		);
+	}
+
+	/**
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.7
+	 *
+	 * @param string      $slug
+	 * @param string      $page
+	 * @param string      $action
+	 * @param string      $title
+	 * @param array       $params
+	 * @param bool        $is_primary
+	 * @param string|bool $icon_class   Optional class for an icon.
+	 * @param string|bool $confirmation Optional confirmation message before submit.
+	 * @param string      $method
+	 *
+	 * @return string
+	 */
+	function fs_ui_get_action_button(
+		$slug,
+		$page,
+		$action,
+		$title,
+		$params = array(),
+		$is_primary = true,
+		$icon_class = false,
+		$confirmation = false,
+		$method = 'GET'
+	) {
+		// Prepend icon (if set).
+		$title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
+
+		if ( is_string( $confirmation ) ) {
+			return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
+				freemius( $slug )->_get_admin_page_url( $page, $params ),
+				$method,
+				$action,
+				wp_nonce_field( $action, '_wpnonce', true, false ),
+				'button' . ( $is_primary ? ' button-primary' : '' ),
+				$confirmation,
+				$title
+			);
+		} else if ( 'GET' !== strtoupper( $method ) ) {
+			return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
+				freemius( $slug )->_get_admin_page_url( $page, $params ),
+				$method,
+				$action,
+				wp_nonce_field( $action, '_wpnonce', true, false ),
+				'button' . ( $is_primary ? ' button-primary' : '' ),
+				$title
+			);
+		} else {
+			return sprintf( '<a href="%s" class="%s">%s</a></form>',
+				wp_nonce_url( freemius( $slug )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
+				'button' . ( $is_primary ? ' button-primary' : '' ),
+				$title
+			);
+		}
+	}
+
+	function fs_ui_action_link( $slug, $page, $action, $title, $params = array() ) {
+		?><a class=""
+		     href="<?php echo wp_nonce_url( freemius( $slug )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
+	}
+
+	/*function fs_error_handler($errno, $errstr, $errfile, $errline)
+	{
+		if (false === strpos($errfile, 'freemius/'))
+		{
+			// @todo Dump Freemius errors to local log.
+		}
+
+//		switch ($errno) {
+//			case E_USER_ERROR:
+//				break;
+//			case E_WARNING:
+//			case E_USER_WARNING:
+//				break;
+//			case E_NOTICE:
+//			case E_USER_NOTICE:
+//				break;
+//			default:
+//				break;
+//		}
+	}
+
+	set_error_handler('fs_error_handler');*/
+
+	function fs_nonce_url( $actionurl, $action = - 1, $name = '_wpnonce' ) {
+//		$actionurl = str_replace( '&amp;', '&', $actionurl );
+		return add_query_arg( $name, wp_create_nonce( $action ), $actionurl );
+	}
+
+	if ( ! function_exists( 'fs_starts_with' ) ) {
+		/**
+		 * Check if string starts with.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string $haystack
+		 * @param string $needle
+		 *
+		 * @return bool
+		 */
+		function fs_starts_with( $haystack, $needle ) {
+			$length = strlen( $needle );
+
+			return ( substr( $haystack, 0, $length ) === $needle );
+		}
+	}
+
+	#region Url Canonization ------------------------------------------------------------------
+
+	if ( ! function_exists( 'fs_canonize_url' ) ) {
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string $url
+		 * @param bool   $omit_host
+		 * @param array  $ignore_params
+		 *
+		 * @return string
+		 */
+		function fs_canonize_url( $url, $omit_host = false, $ignore_params = array() ) {
+			$parsed_url = parse_url( strtolower( $url ) );
+
+//		if ( ! isset( $parsed_url['host'] ) ) {
+//			return $url;
+//		}
+
+			$canonical = ( ( $omit_host || ! isset( $parsed_url['host'] ) ) ? '' : $parsed_url['host'] ) . $parsed_url['path'];
+
+			if ( isset( $parsed_url['query'] ) ) {
+				parse_str( $parsed_url['query'], $queryString );
+				$canonical .= '?' . fs_canonize_query_string( $queryString, $ignore_params );
+			}
+
+			return $canonical;
+		}
+	}
+
+	if ( ! function_exists( 'fs_canonize_query_string' ) ) {
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param array $params
+		 * @param array $ignore_params
+		 * @param bool  $params_prefix
+		 *
+		 * @return string
+		 */
+		function fs_canonize_query_string( array $params, array &$ignore_params, $params_prefix = false ) {
+			if ( ! is_array( $params ) || 0 === count( $params ) ) {
+				return '';
+			}
+
+			// Url encode both keys and values
+			$keys   = fs_urlencode_rfc3986( array_keys( $params ) );
+			$values = fs_urlencode_rfc3986( array_values( $params ) );
+			$params = array_combine( $keys, $values );
+
+			// Parameters are sorted by name, using lexicographical byte value ordering.
+			// Ref: Spec: 9.1.1 (1)
+			uksort( $params, 'strcmp' );
+
+			$pairs = array();
+			foreach ( $params as $parameter => $value ) {
+				$lower_param = strtolower( $parameter );
+
+				// Skip ignore params.
+				if ( in_array( $lower_param, $ignore_params ) ||
+				     ( false !== $params_prefix && starts_with( $lower_param, $params_prefix ) )
+				) {
+					continue;
+				}
+
+				if ( is_array( $value ) ) {
+					// If two or more parameters share the same name, they are sorted by their value
+					// Ref: Spec: 9.1.1 (1)
+					natsort( $value );
+					foreach ( $value as $duplicate_value ) {
+						$pairs[] = $lower_param . '=' . $duplicate_value;
+					}
+				} else {
+					$pairs[] = $lower_param . '=' . $value;
+				}
+			}
+
+			if ( 0 === count( $pairs ) ) {
+				return '';
+			}
+
+			return implode( "&", $pairs );
+		}
+	}
+
+	if ( ! function_exists( 'fs_urlencode_rfc3986' ) ) {
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string|string[] $input
+		 *
+		 * @return array|mixed|string
+		 */
+		function fs_urlencode_rfc3986( $input ) {
+			if ( is_array( $input ) ) {
+				return array_map( 'fs_urlencode_rfc3986', $input );
+			} else if ( is_scalar( $input ) ) {
+				return str_replace( '+', ' ', str_replace( '%7E', '~', rawurlencode( $input ) ) );
+			}
+
+			return '';
+		}
+	}
+
+	#endregion Url Canonization ------------------------------------------------------------------
+
+	function fs_download_image( $from, $to ) {
+		$ch = curl_init( $from );
+		$fp = fopen( fs_normalize_path( $to ), 'wb' );
+		curl_setopt( $ch, CURLOPT_FILE, $fp );
+		curl_setopt( $ch, CURLOPT_HEADER, 0 );
+		curl_exec( $ch );
+		curl_close( $ch );
+		fclose( $fp );
+	}
+
+	/* General Utilities
+	--------------------------------------------------------------------------------------------*/
+
+	/**
+	 * Sorts an array by the value of the priority key.
+	 *
+	 * @author Daniel Iser (@danieliser)
+	 * @since  1.1.7
+	 *
+	 * @param $a
+	 * @param $b
+	 *
+	 * @return int
+	 */
+	function fs_sort_by_priority( $a, $b ) {
+
+		// If b has a priority and a does not, b wins.
+		if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
+			return 1;
+		} // If b has a priority and a does not, b wins.
+		elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
+			return - 1;
+		} // If neither has a priority or both priorities are equal its a tie.
+		elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
+			return 0;
+		}
+
+		// If both have priority return the winner.
+		return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
+	}
+
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/fs-essential-functions.php b/wp-content/plugins/nextgen-gallery/freemius/includes/fs-essential-functions.php
index 38eb8d598d672b1009b1a7142cafd674437f567d..4ea92a70807590d23379e1ca6a09de07f6841582 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/fs-essential-functions.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/fs-essential-functions.php
@@ -1,412 +1,415 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.5
-	 */
-
-	if ( ! function_exists( 'fs_normalize_path' ) ) {
-		if ( function_exists( 'wp_normalize_path' ) ) {
-			/**
-			 * Normalize a filesystem path.
-			 *
-			 * Replaces backslashes with forward slashes for Windows systems, and ensures
-			 * no duplicate slashes exist.
-			 *
-			 * @param string $path Path to normalize.
-			 *
-			 * @return string Normalized path.
-			 */
-			function fs_normalize_path( $path ) {
-				return wp_normalize_path( $path );
-			}
-		} else {
-			function fs_normalize_path( $path ) {
-				$path = str_replace( '\\', '/', $path );
-				$path = preg_replace( '|/+|', '/', $path );
-
-				return $path;
-			}
-		}
-	}
-
-	#region Core Redirect (copied from BuddyPress) -----------------------------------------
-
-	if ( ! function_exists( 'fs_redirect' ) ) {
-		/**
-		 * Redirects to another page, with a workaround for the IIS Set-Cookie bug.
-		 *
-		 * @link  http://support.microsoft.com/kb/q176113/
-		 * @since 1.5.1
-		 * @uses  apply_filters() Calls 'wp_redirect' hook on $location and $status.
-		 *
-		 * @param string $location The path to redirect to
-		 * @param int    $status   Status code to use
-		 *
-		 * @return bool False if $location is not set
-		 */
-		function fs_redirect( $location, $status = 302 ) {
-			global $is_IIS;
-
-			if ( headers_sent() ) {
-				return false;
-			}
-
-			if ( ! $location ) // allows the wp_redirect filter to cancel a redirect
-			{
-				return false;
-			}
-
-			$location = fs_sanitize_redirect( $location );
-
-			if ( $is_IIS ) {
-				header( "Refresh: 0;url=$location" );
-			} else {
-				if ( php_sapi_name() != 'cgi-fcgi' ) {
-					status_header( $status );
-				} // This causes problems on IIS and some FastCGI setups
-				header( "Location: $location" );
-			}
-
-			return true;
-		}
-
-		if ( ! function_exists( 'fs_sanitize_redirect' ) ) {
-			/**
-			 * Sanitizes a URL for use in a redirect.
-			 *
-			 * @since 2.3
-			 *
-			 * @param string $location
-			 *
-			 * @return string redirect-sanitized URL
-			 */
-			function fs_sanitize_redirect( $location ) {
-				$location = preg_replace( '|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location );
-				$location = fs_kses_no_null( $location );
-
-				// remove %0d and %0a from location
-				$strip = array( '%0d', '%0a' );
-				$found = true;
-				while ( $found ) {
-					$found = false;
-					foreach ( (array) $strip as $val ) {
-						while ( strpos( $location, $val ) !== false ) {
-							$found    = true;
-							$location = str_replace( $val, '', $location );
-						}
-					}
-				}
-
-				return $location;
-			}
-		}
-
-		if ( ! function_exists( 'fs_kses_no_null' ) ) {
-			/**
-			 * Removes any NULL characters in $string.
-			 *
-			 * @since 1.0.0
-			 *
-			 * @param string $string
-			 *
-			 * @return string
-			 */
-			function fs_kses_no_null( $string ) {
-				$string = preg_replace( '/\0+/', '', $string );
-				$string = preg_replace( '/(\\\\0)+/', '', $string );
-
-				return $string;
-			}
-		}
-	}
-
-	#endregion Core Redirect (copied from BuddyPress) -----------------------------------------
-
-	if ( ! function_exists( '__fs' ) ) {
-		global $fs_text_overrides;
-
-		if ( ! isset( $fs_text_overrides ) ) {
-			$fs_text_overrides = array();
-		}
-
-		/**
-		 * Retrieve a translated text by key.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 *
-		 * @param string $key
-		 * @param string $slug
-		 *
-		 * @return string
-		 *
-		 * @global       $fs_text , $fs_text_overrides
-		 */
-		function __fs( $key, $slug = 'freemius' ) {
-			global $fs_text, $fs_text_overrides;
-
-			if ( ! isset( $fs_text ) ) {
-				require_once( ( defined( 'WP_FS__DIR_INCLUDES' ) ? WP_FS__DIR_INCLUDES : dirname( __FILE__ ) ) . '/i18n.php' );
-			}
-
-			if ( isset( $fs_text_overrides[ $slug ] ) ) {
-				if ( isset( $fs_text_overrides[ $slug ][ $key ] ) ) {
-					return $fs_text_overrides[ $slug ][ $key ];
-				}
-
-				$lower_key = strtolower( $key );
-				if ( isset( $fs_text_overrides[ $slug ][ $lower_key ] ) ) {
-					return $fs_text_overrides[ $slug ][ $lower_key ];
-				}
-			}
-
-			return isset( $fs_text[ $key ] ) ?
-				$fs_text[ $key ] :
-				$key;
-		}
-
-		/**
-		 * Display a translated text by key.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 *
-		 * @param string $key
-		 * @param string $slug
-		 */
-		function _efs( $key, $slug = 'freemius' ) {
-			echo __fs( $key, $slug );
-		}
-
-		/**
-		 * Override default i18n text phrases.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string[] $key_value
-		 * @param string   $slug
-		 *
-		 * @global         $fs_text_overrides
-		 */
-		function fs_override_i18n( array $key_value, $slug = 'freemius' ) {
-			global $fs_text_overrides;
-
-			if ( ! isset( $fs_text_overrides[ $slug ] ) ) {
-				$fs_text_overrides[ $slug ] = array();
-			}
-
-			foreach ( $key_value as $key => $value ) {
-				$fs_text_overrides[ $slug ][ $key ] = $value;
-			}
-		}
-	}
-
-	if ( ! function_exists( 'fs_get_ip' ) ) {
-		/**
-		 * Get client IP.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.2
-		 *
-		 * @return string|null
-		 */
-		function fs_get_ip() {
-			$fields = array(
-				'HTTP_CF_CONNECTING_IP',
-				'HTTP_CLIENT_IP',
-				'HTTP_X_FORWARDED_FOR',
-				'HTTP_X_FORWARDED',
-				'HTTP_FORWARDED_FOR',
-				'HTTP_FORWARDED',
-				'REMOTE_ADDR',
-			);
-
-			foreach ( $fields as $ip_field ) {
-				if ( ! empty( $_SERVER[ $ip_field ] ) ) {
-					return $_SERVER[ $ip_field ];
-				}
-			}
-
-			return null;
-		}
-	}
-
-	/**
-	 * Leverage backtrace to find caller plugin main file path.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.0.6
-	 *
-	 * @return string
-	 */
-	function fs_find_caller_plugin_file() {
-		/**
-		 * All the code below will be executed once on activation.
-		 * If the user changes the main plugin's file name, the file_exists()
-		 * will catch it.
-		 */
-		if ( ! function_exists( 'get_plugins' ) ) {
-			require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
-		}
-
-		$all_plugins       = get_plugins();
-		$all_plugins_paths = array();
-
-		// Get active plugin's main files real full names (might be symlinks).
-		foreach ( $all_plugins as $relative_path => &$data ) {
-			$all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
-		}
-
-		$plugin_file = null;
-		for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) {
-			if ( in_array( fs_normalize_path( $bt[ $i ]['file'] ), $all_plugins_paths ) ) {
-				$plugin_file = $bt[ $i ]['file'];
-				break;
-			}
-		}
-
-		if ( is_null( $plugin_file ) ) {
-			// Throw an error to the developer in case of some edge case dev environment.
-			wp_die( __fs( 'failed-finding-main-path' ), __fs( 'error' ), array( 'back_link' => true ) );
-		}
-
-		return $plugin_file;
-	}
-
-	require_once dirname( __FILE__ ) . '/supplements/fs-essential-functions-1.1.7.1.php';
-
-	/**
-	 * Update SDK newest version reference.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.6
-	 *
-	 * @param string      $sdk_relative_path
-	 * @param string|bool $plugin_file
-	 *
-	 * @global            $fs_active_plugins
-	 */
-	function fs_update_sdk_newest_version( $sdk_relative_path, $plugin_file = false ) {
-		global $fs_active_plugins;
-
-		if ( ! is_string( $plugin_file ) ) {
-			$plugin_file = plugin_basename( fs_find_caller_plugin_file() );
-		}
-
-		$fs_active_plugins->newest = (object) array(
-			'plugin_path'   => $plugin_file,
-			'sdk_path'      => $sdk_relative_path,
-			'version'       => $fs_active_plugins->plugins[ $sdk_relative_path ]->version,
-			'in_activation' => ! is_plugin_active( $plugin_file ),
-			'timestamp'     => time(),
-		);
-
-		// Update DB with latest SDK version and path.
-		update_option( 'fs_active_plugins', $fs_active_plugins );
-	}
-
-	/**
-	 * Reorder the plugins load order so the plugin with the newest Freemius SDK is loaded first.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.6
-	 *
-	 * @return bool Was plugin order changed. Return false if plugin was loaded first anyways.
-	 *
-	 * @global $fs_active_plugins
-	 */
-	function fs_newest_sdk_plugin_first() {
-		global $fs_active_plugins;
-
-		/**
-		 * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins).
-		 *
-		 * @link https://github.com/Freemius/wordpress-sdk/issues/26
-		 */
-//		$active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' );
-
-		$active_plugins        = get_option( 'active_plugins' );
-		$newest_sdk_plugin_key = array_search( $fs_active_plugins->newest->plugin_path, $active_plugins );
-		if ( 0 == $newest_sdk_plugin_key ) {
-			// if it's 0 it's the first plugin already, no need to continue
-			return false;
-		}
-
-		array_splice( $active_plugins, $newest_sdk_plugin_key, 1 );
-		array_unshift( $active_plugins, $fs_active_plugins->newest->plugin_path );
-		update_option( 'active_plugins', $active_plugins );
-
-		return true;
-	}
-
-	/**
-	 * Go over all Freemius SDKs in the system and find and "remember"
-	 * the newest SDK which is associated with an active plugin.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.6
-	 *
-	 * @global $fs_active_plugins
-	 */
-	function fs_fallback_to_newest_active_sdk() {
-		global $fs_active_plugins;
-
-		$newest_sdk_data = null;
-		$newest_sdk_path = null;
-
-		foreach ( $fs_active_plugins->plugins as $sdk_relative_path => $data ) {
-			if ( is_null( $newest_sdk_data ) || version_compare( $data->version, $newest_sdk_data->version, '>' )
-			) {
-				// If plugin inactive or SDK starter file doesn't exist, remove SDK reference.
-				if ( ! is_plugin_active( $data->plugin_path ) ||
-				     ! file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $sdk_relative_path . '/start.php' ) )
-				) {
-					unset( $fs_active_plugins->plugins[ $sdk_relative_path ] );
-
-					// No need to store the data since it will be stored in fs_update_sdk_newest_version()
-					// or explicitly with update_option().
-				} else {
-					$newest_sdk_data = $data;
-					$newest_sdk_path = $sdk_relative_path;
-				}
-			}
-		}
-
-		if ( is_null( $newest_sdk_data ) ) {
-			// Couldn't find any SDK reference.
-			$fs_active_plugins = new stdClass();
-			update_option( 'fs_active_plugins', $fs_active_plugins );
-		} else {
-			fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path );
-		}
-	}
-
-	#region Actions / Filters -----------------------------------------
-
-	/**
-	 * Apply filter for specific plugin.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.0.9
-	 *
-	 * @param string $slug  Plugin slug
-	 * @param string $tag   The name of the filter hook.
-	 * @param mixed  $value The value on which the filters hooked to `$tag` are applied on.
-	 *
-	 * @return mixed The filtered value after all hooked functions are applied to it.
-	 *
-	 * @uses   apply_filters()
-	 */
-	function fs_apply_filter( $slug, $tag, $value ) {
-		$args = func_get_args();
-
-		return call_user_func_array( 'apply_filters', array_merge(
-				array( 'fs_' . $tag . '_' . $slug ),
-				array_slice( $args, 2 ) )
-		);
-	}
-
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.5
+	 */
+
+	if ( ! function_exists( 'fs_normalize_path' ) ) {
+		if ( function_exists( 'wp_normalize_path' ) ) {
+			/**
+			 * Normalize a filesystem path.
+			 *
+			 * Replaces backslashes with forward slashes for Windows systems, and ensures
+			 * no duplicate slashes exist.
+			 *
+			 * @param string $path Path to normalize.
+			 *
+			 * @return string Normalized path.
+			 */
+			function fs_normalize_path( $path ) {
+				return wp_normalize_path( $path );
+			}
+		} else {
+			function fs_normalize_path( $path ) {
+				$path = str_replace( '\\', '/', $path );
+				$path = preg_replace( '|/+|', '/', $path );
+
+				return $path;
+			}
+		}
+	}
+
+	#region Core Redirect (copied from BuddyPress) -----------------------------------------
+
+	if ( ! function_exists( 'fs_redirect' ) ) {
+		/**
+		 * Redirects to another page, with a workaround for the IIS Set-Cookie bug.
+		 *
+		 * @link  http://support.microsoft.com/kb/q176113/
+		 * @since 1.5.1
+		 * @uses  apply_filters() Calls 'wp_redirect' hook on $location and $status.
+		 *
+		 * @param string $location The path to redirect to
+		 * @param int    $status   Status code to use
+		 *
+		 * @return bool False if $location is not set
+		 */
+		function fs_redirect( $location, $status = 302 ) {
+			global $is_IIS;
+
+			if ( headers_sent() ) {
+				return false;
+			}
+
+			if ( ! $location ) // allows the wp_redirect filter to cancel a redirect
+			{
+				return false;
+			}
+
+			$location = fs_sanitize_redirect( $location );
+
+			if ( $is_IIS ) {
+				header( "Refresh: 0;url=$location" );
+			} else {
+				if ( php_sapi_name() != 'cgi-fcgi' ) {
+					status_header( $status );
+				} // This causes problems on IIS and some FastCGI setups
+				header( "Location: $location" );
+			}
+
+			return true;
+		}
+
+		if ( ! function_exists( 'fs_sanitize_redirect' ) ) {
+			/**
+			 * Sanitizes a URL for use in a redirect.
+			 *
+			 * @since 2.3
+			 *
+			 * @param string $location
+			 *
+			 * @return string redirect-sanitized URL
+			 */
+			function fs_sanitize_redirect( $location ) {
+				$location = preg_replace( '|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location );
+				$location = fs_kses_no_null( $location );
+
+				// remove %0d and %0a from location
+				$strip = array( '%0d', '%0a' );
+				$found = true;
+				while ( $found ) {
+					$found = false;
+					foreach ( (array) $strip as $val ) {
+						while ( strpos( $location, $val ) !== false ) {
+							$found    = true;
+							$location = str_replace( $val, '', $location );
+						}
+					}
+				}
+
+				return $location;
+			}
+		}
+
+		if ( ! function_exists( 'fs_kses_no_null' ) ) {
+			/**
+			 * Removes any NULL characters in $string.
+			 *
+			 * @since 1.0.0
+			 *
+			 * @param string $string
+			 *
+			 * @return string
+			 */
+			function fs_kses_no_null( $string ) {
+				$string = preg_replace( '/\0+/', '', $string );
+				$string = preg_replace( '/(\\\\0)+/', '', $string );
+
+				return $string;
+			}
+		}
+	}
+
+	#endregion Core Redirect (copied from BuddyPress) -----------------------------------------
+
+	if ( ! function_exists( '__fs' ) ) {
+		global $fs_text_overrides;
+
+		if ( ! isset( $fs_text_overrides ) ) {
+			$fs_text_overrides = array();
+		}
+
+		/**
+		 * Retrieve a translated text by key.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 *
+		 * @param string $key
+		 * @param string $slug
+		 *
+		 * @return string
+		 *
+		 * @global       $fs_text , $fs_text_overrides
+		 */
+		function __fs( $key, $slug = 'freemius' ) {
+			global $fs_text, $fs_text_overrides;
+
+			if ( ! isset( $fs_text ) ) {
+				require_once( ( defined( 'WP_FS__DIR_INCLUDES' ) ? WP_FS__DIR_INCLUDES : dirname( __FILE__ ) ) . '/i18n.php' );
+			}
+
+			if ( isset( $fs_text_overrides[ $slug ] ) ) {
+				if ( isset( $fs_text_overrides[ $slug ][ $key ] ) ) {
+					return $fs_text_overrides[ $slug ][ $key ];
+				}
+
+				$lower_key = strtolower( $key );
+				if ( isset( $fs_text_overrides[ $slug ][ $lower_key ] ) ) {
+					return $fs_text_overrides[ $slug ][ $lower_key ];
+				}
+			}
+
+			return isset( $fs_text[ $key ] ) ?
+				$fs_text[ $key ] :
+				$key;
+		}
+
+		/**
+		 * Display a translated text by key.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 *
+		 * @param string $key
+		 * @param string $slug
+		 */
+		function _efs( $key, $slug = 'freemius' ) {
+			echo __fs( $key, $slug );
+		}
+
+		/**
+		 * Override default i18n text phrases.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string[] $key_value
+		 * @param string   $slug
+		 *
+		 * @global         $fs_text_overrides
+		 */
+		function fs_override_i18n( array $key_value, $slug = 'freemius' ) {
+			global $fs_text_overrides;
+
+			if ( ! isset( $fs_text_overrides[ $slug ] ) ) {
+				$fs_text_overrides[ $slug ] = array();
+			}
+
+			foreach ( $key_value as $key => $value ) {
+				$fs_text_overrides[ $slug ][ $key ] = $value;
+			}
+		}
+	}
+
+	if ( ! function_exists( 'fs_get_ip' ) ) {
+		/**
+		 * Get client IP.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.2
+		 *
+		 * @return string|null
+		 */
+		function fs_get_ip() {
+			$fields = array(
+				'HTTP_CF_CONNECTING_IP',
+				'HTTP_CLIENT_IP',
+				'HTTP_X_FORWARDED_FOR',
+				'HTTP_X_FORWARDED',
+				'HTTP_FORWARDED_FOR',
+				'HTTP_FORWARDED',
+				'REMOTE_ADDR',
+			);
+
+			foreach ( $fields as $ip_field ) {
+				if ( ! empty( $_SERVER[ $ip_field ] ) ) {
+					return $_SERVER[ $ip_field ];
+				}
+			}
+
+			return null;
+		}
+	}
+
+	/**
+	 * Leverage backtrace to find caller plugin main file path.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.0.6
+	 *
+	 * @return string
+	 */
+	function fs_find_caller_plugin_file() {
+		/**
+		 * All the code below will be executed once on activation.
+		 * If the user changes the main plugin's file name, the file_exists()
+		 * will catch it.
+		 */
+		if ( ! function_exists( 'get_plugins' ) ) {
+			require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
+		}
+
+		$all_plugins       = get_plugins();
+		$all_plugins_paths = array();
+
+		// Get active plugin's main files real full names (might be symlinks).
+		foreach ( $all_plugins as $relative_path => &$data ) {
+			$all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
+		}
+
+		$plugin_file = null;
+		for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) {
+			if ( in_array( fs_normalize_path( $bt[ $i ]['file'] ), $all_plugins_paths ) ) {
+				$plugin_file = $bt[ $i ]['file'];
+				break;
+			}
+		}
+
+		if ( is_null( $plugin_file ) ) {
+			// Throw an error to the developer in case of some edge case dev environment.
+			wp_die( __fs( 'failed-finding-main-path' ), __fs( 'error' ), array( 'back_link' => true ) );
+		}
+
+		return $plugin_file;
+	}
+
+	require_once dirname( __FILE__ ) . '/supplements/fs-essential-functions-1.1.7.1.php';
+
+	/**
+	 * Update SDK newest version reference.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.6
+	 *
+	 * @param string      $sdk_relative_path
+	 * @param string|bool $plugin_file
+	 *
+	 * @global            $fs_active_plugins
+	 */
+	function fs_update_sdk_newest_version( $sdk_relative_path, $plugin_file = false ) {
+		global $fs_active_plugins;
+
+		if ( ! is_string( $plugin_file ) ) {
+			$plugin_file = plugin_basename( fs_find_caller_plugin_file() );
+		}
+
+		$fs_active_plugins->newest = (object) array(
+			'plugin_path'   => $plugin_file,
+			'sdk_path'      => $sdk_relative_path,
+			'version'       => $fs_active_plugins->plugins[ $sdk_relative_path ]->version,
+			'in_activation' => ! is_plugin_active( $plugin_file ),
+			'timestamp'     => time(),
+		);
+
+		// Update DB with latest SDK version and path.
+		update_option( 'fs_active_plugins', $fs_active_plugins );
+	}
+
+	/**
+	 * Reorder the plugins load order so the plugin with the newest Freemius SDK is loaded first.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.6
+	 *
+	 * @return bool Was plugin order changed. Return false if plugin was loaded first anyways.
+	 *
+	 * @global $fs_active_plugins
+	 */
+	function fs_newest_sdk_plugin_first() {
+		global $fs_active_plugins;
+
+		/**
+		 * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins).
+		 *
+		 * @link https://github.com/Freemius/wordpress-sdk/issues/26
+		 */
+//		$active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' );
+
+		$active_plugins        = get_option( 'active_plugins' );
+		$newest_sdk_plugin_key = array_search( $fs_active_plugins->newest->plugin_path, $active_plugins );
+		if ( 0 == $newest_sdk_plugin_key ) {
+			// if it's 0 it's the first plugin already, no need to continue
+			return false;
+		}
+
+		array_splice( $active_plugins, $newest_sdk_plugin_key, 1 );
+		array_unshift( $active_plugins, $fs_active_plugins->newest->plugin_path );
+		update_option( 'active_plugins', $active_plugins );
+
+		return true;
+	}
+
+	/**
+	 * Go over all Freemius SDKs in the system and find and "remember"
+	 * the newest SDK which is associated with an active plugin.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.6
+	 *
+	 * @global $fs_active_plugins
+	 */
+	function fs_fallback_to_newest_active_sdk() {
+		global $fs_active_plugins;
+
+		/**
+		 * @var object $newest_sdk_data
+		 */
+		$newest_sdk_data = null;
+		$newest_sdk_path = null;
+
+		foreach ( $fs_active_plugins->plugins as $sdk_relative_path => $data ) {
+			if ( is_null( $newest_sdk_data ) || version_compare( $data->version, $newest_sdk_data->version, '>' )
+			) {
+				// If plugin inactive or SDK starter file doesn't exist, remove SDK reference.
+				if ( ! is_plugin_active( $data->plugin_path ) ||
+				     ! file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $sdk_relative_path . '/start.php' ) )
+				) {
+					unset( $fs_active_plugins->plugins[ $sdk_relative_path ] );
+
+					// No need to store the data since it will be stored in fs_update_sdk_newest_version()
+					// or explicitly with update_option().
+				} else {
+					$newest_sdk_data = $data;
+					$newest_sdk_path = $sdk_relative_path;
+				}
+			}
+		}
+
+		if ( is_null( $newest_sdk_data ) ) {
+			// Couldn't find any SDK reference.
+			$fs_active_plugins = new stdClass();
+			update_option( 'fs_active_plugins', $fs_active_plugins );
+		} else {
+			fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path );
+		}
+	}
+
+	#region Actions / Filters -----------------------------------------
+
+	/**
+	 * Apply filter for specific plugin.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.0.9
+	 *
+	 * @param string $slug  Plugin slug
+	 * @param string $tag   The name of the filter hook.
+	 * @param mixed  $value The value on which the filters hooked to `$tag` are applied on.
+	 *
+	 * @return mixed The filtered value after all hooked functions are applied to it.
+	 *
+	 * @uses   apply_filters()
+	 */
+	function fs_apply_filter( $slug, $tag, $value ) {
+		$args = func_get_args();
+
+		return call_user_func_array( 'apply_filters', array_merge(
+				array( 'fs_' . $tag . '_' . $slug ),
+				array_slice( $args, 2 ) )
+		);
+	}
+
 	#endregion Actions / Filters -----------------------------------------
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/fs-plugin-info-dialog.php b/wp-content/plugins/nextgen-gallery/freemius/includes/fs-plugin-info-dialog.php
index caacfb794784f79262efeda0501d2ede6593bb56..f111bde9d4215dd1c14e6519dce42bb13b93394a 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/fs-plugin-info-dialog.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/fs-plugin-info-dialog.php
@@ -1,936 +1,930 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.6
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * Class FS_Plugin_Info_Dialog
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.7
-	 */
-	class FS_Plugin_Info_Dialog {
-		/**
-		 * @since 1.1.7
-		 *
-		 * @var FS_Logger
-		 */
-		private $_logger;
-
-		/**
-		 * @since 1.1.7
-		 *
-		 * @var Freemius
-		 */
-		private $_fs;
-
-		function __construct( Freemius $fs ) {
-			$this->_fs = $fs;
-
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $fs->get_slug() . '_info', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			// Remove default plugin information action.
-			remove_all_actions( 'install_plugins_pre_plugin-information' );
-
-			// Override action with custom plugins function for add-ons.
-			add_action( 'install_plugins_pre_plugin-information', array( &$this, 'install_plugin_information' ) );
-
-			// Override request for plugin information for Add-ons.
-			add_filter(
-				'fs_plugins_api',
-				array( &$this, '_get_addon_info_filter' ),
-				WP_FS__DEFAULT_PRIORITY, 3 );
-		}
-
-		/**
-		 * Generate add-on plugin information.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param array       $data
-		 * @param string      $action
-		 * @param object|null $args
-		 *
-		 * @return array|null
-		 */
-		function _get_addon_info_filter( $data, $action = '', $args = null ) {
-			$this->_logger->entrance();
-
-			$parent_plugin_id = fs_request_get( 'parent_plugin_id', false );
-
-			if ( $this->_fs->get_id() != $parent_plugin_id ||
-			     ( 'plugin_information' !== $action ) ||
-			     ! isset( $args->slug )
-			) {
-				return $data;
-			}
-
-			// Find add-on by slug.
-			$addons         = $this->_fs->get_addons();
-			$selected_addon = false;
-			foreach ( $addons as $addon ) {
-				if ( $addon->slug == $args->slug ) {
-					$selected_addon = $addon;
-					break;
-				}
-			}
-
-			if ( false === $selected_addon ) {
-				return $data;
-			}
-
-			if ( ! isset( $selected_addon->info ) ) {
-				// Setup some default info.
-				$selected_addon->info                  = new stdClass();
-				$selected_addon->info->selling_point_0 = 'Selling Point 1';
-				$selected_addon->info->selling_point_1 = 'Selling Point 2';
-				$selected_addon->info->selling_point_2 = 'Selling Point 3';
-				$selected_addon->info->description     = '<p>Tell your users all about your add-on</p>';
-			}
-
-			fs_enqueue_local_style( 'fs_addons', '/admin/add-ons.css' );
-
-			$data = $args;
-
-			$is_free = true;
-
-			// Load add-on pricing.
-			$has_pricing  = false;
-			$has_features = false;
-			$plans        = false;
-			$plans_result = $this->_fs->get_api_site_or_plugin_scope()->get( "/addons/{$selected_addon->id}/plans.json" );
-			if ( ! isset( $plans_result->error ) ) {
-				$plans = $plans_result->plans;
-				if ( is_array( $plans ) ) {
-					for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
-						$plans[ $i ] = new FS_Plugin_Plan( $plans[ $i ] );
-						$plan        = $plans[ $i ];
-
-						$pricing_result = $this->_fs->get_api_site_or_plugin_scope()->get( "/addons/{$selected_addon->id}/plans/{$plan->id}/pricing.json" );
-						if ( ! isset( $pricing_result->error ) ) {
-							// Update plan's pricing.
-							$plan->pricing = $pricing_result->pricing;
-
-							if ( is_array( $plan->pricing ) && ! empty( $plan->pricing ) ) {
-								$is_free = false;
-
-								foreach ( $plan->pricing as &$pricing ) {
-									$pricing = new FS_Pricing( $pricing );
-								}
-							}
-
-							$has_pricing = true;
-						}
-
-						$features_result = $this->_fs->get_api_site_or_plugin_scope()->get( "/addons/{$selected_addon->id}/plans/{$plan->id}/features.json" );
-						if ( ! isset( $features_result->error ) &&
-						     is_array( $features_result->features ) &&
-						     0 < count( $features_result->features )
-						) {
-							// Update plan's pricing.
-							$plan->features = $features_result->features;
-
-							$has_features = true;
-						}
-					}
-				}
-			}
-
-			// Fetch latest version from Freemius.
-			$latest = $this->_fs->_fetch_latest_version( $selected_addon->id );
-
-			if ( ! $is_free ) {
-				// If paid add-on, then it's not on wordpress.org
-				$is_wordpress_org = false;
-			} else {
-				// If no versions found, then assume it's a .org plugin.
-				$is_wordpress_org = ( false === $latest );
-			}
-
-			if ( $is_wordpress_org ) {
-				$repo_data = FS_Plugin_Updater::_fetch_plugin_info_from_repository(
-					'plugin_information', (object) array(
-						'slug'   => $selected_addon->slug,
-						'is_ssl' => is_ssl(),
-						'fields' => array(
-							'banners'         => true,
-							'reviews'         => true,
-							'downloaded'      => false,
-							'active_installs' => true
-						)
-					) );
-
-				if ( ! empty( $repo_data ) ) {
-					$data                 = $repo_data;
-					$data->wp_org_missing = false;
-				} else {
-					// Couldn't find plugin on .org.
-					$is_wordpress_org = false;
-
-					// Plugin is missing, not on Freemius nor WP.org.
-					$data->wp_org_missing = true;
-				}
-			}
-
-			if ( ! $is_wordpress_org ) {
-				$data->checkout_link = $this->_fs->checkout_url();
-				$data->fs_missing    = ( false === $latest );
-
-				if ( $is_free ) {
-					$data->download_link = $this->_fs->_get_latest_download_local_url( $selected_addon->id );
-				}
-			}
-
-			if ( ! $is_wordpress_org ) {
-// Fetch as much as possible info from local files.
-				$plugin_local_data = $this->_fs->get_plugin_data();
-				$data->name        = $selected_addon->title;
-				$data->author      = $plugin_local_data['Author'];
-				$view_vars         = array( 'plugin' => $selected_addon );
-				$data->sections    = array(
-					'description' => fs_get_template( '/plugin-info/description.php', $view_vars ),
-				);
-
-				if ( ! empty( $selected_addon->info->banner_url ) ) {
-					$data->banners = array(
-						'low' => $selected_addon->info->banner_url,
-					);
-				}
-
-				if ( ! empty( $selected_addon->info->screenshots ) ) {
-					$view_vars                     = array(
-						'screenshots' => $selected_addon->info->screenshots,
-						'plugin'      => $selected_addon,
-					);
-					$data->sections['screenshots'] = fs_get_template( '/plugin-info/screenshots.php', $view_vars );
-				}
-
-				if ( is_object( $latest ) ) {
-					$data->version      = $latest->version;
-					$data->last_updated = ! is_null( $latest->updated ) ? $latest->updated : $latest->created;
-					$data->requires     = $latest->requires_platform_version;
-					$data->tested       = $latest->tested_up_to_version;
-				} else {
-					// Add dummy version.
-					$data->version = '1.0.0';
-
-					// Add message to developer to deploy the plugin through Freemius.
-				}
-			}
-
-			if ( $has_pricing ) {
-				// Add plans to data.
-				$data->plans = $plans;
-
-				if ( $has_features ) {
-					$view_vars                  = array(
-						'plans'  => $plans,
-						'plugin' => $selected_addon,
-					);
-					$data->sections['features'] = fs_get_template( '/plugin-info/features.php', $view_vars );
-				}
-			}
-
-			$data->is_paid  = ! $is_free;
-			$data->external = ! $is_wordpress_org;
-
-			return $data;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @param FS_Plugin_Plan $plan
-		 *
-		 * @return string
-		 */
-		private function get_billing_cycle( FS_Plugin_Plan $plan ) {
-			$billing_cycle = null;
-
-			if ( 1 === count( $plan->pricing ) && 1 == $plan->pricing[0]->licenses ) {
-				$pricing = $plan->pricing[0];
-				if ( isset( $pricing->annual_price ) ) {
-					$billing_cycle = 'annual';
-				} else if ( isset( $pricing->monthly_price ) ) {
-					$billing_cycle = 'monthly';
-				} else if ( isset( $pricing->lifetime_price ) ) {
-					$billing_cycle = 'lifetime';
-				}
-			} else {
-				foreach ( $plan->pricing as $pricing ) {
-					if ( isset( $pricing->annual_price ) ) {
-						$billing_cycle = 'annual';
-					} else if ( isset( $pricing->monthly_price ) ) {
-						$billing_cycle = 'monthly';
-					} else if ( isset( $pricing->lifetime_price ) ) {
-						$billing_cycle = 'lifetime';
-					}
-
-					if ( ! is_null( $billing_cycle ) ) {
-						break;
-					}
-				}
-			}
-
-			return $billing_cycle;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @param FS_Plugin_Plan $plan
-		 * @param FS_Pricing     $pricing
-		 *
-		 * @return float|null|string
-		 */
-		private function get_price_tag( FS_Plugin_Plan $plan, FS_Pricing $pricing ) {
-			$price_tag = '';
-			if ( isset( $pricing->annual_price ) ) {
-				$price_tag = $pricing->annual_price . ( $plan->is_block_features ? ' / year' : '' );
-			} else if ( isset( $pricing->monthly_price ) ) {
-				$price_tag = $pricing->monthly_price . ' / mo';
-			} else if ( isset( $pricing->lifetime_price ) ) {
-				$price_tag = $pricing->lifetime_price;
-			}
-
-			return '$' . $price_tag;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @param object              $api
-		 * @param FS_Plugin_Plan|null $plan
-		 *
-		 * @return string
-		 */
-		private function get_plugin_cta( $api, $plan = null ) {
-			if ( ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) ) {
-
-				if ( ! empty( $api->checkout_link ) && isset( $api->plans ) && 0 < is_array( $api->plans ) ) {
-					if ( is_null( $plan ) ) {
-						$plan = $api->plans[0];
-					}
-
-					return ' <a class="button button-primary right" href="' . $this->_fs->addon_checkout_url(
-						$plan->plugin_id,
-						$plan->pricing[0]->id,
-						$this->get_billing_cycle( $plan ),
-						$plan->has_trial()
-					) . '" target="_parent">' .
-					       ( ! $plan->has_trial() ?
-						       __fs( 'purchase', $api->slug ) :
-						       sprintf( __fs( 'start-free-x', $api->slug ), $this->get_trial_period( $plan ) )
-					       ) .
-					       '</a>';
-
-					// @todo Add Cart concept.
-//			echo ' <a class="button right" href="' . $status['url'] . '" target="_parent">' . __( 'Add to Cart' ) . '</a>';
-
-				} else if ( ! empty( $api->download_link ) ) {
-					$status = install_plugin_install_status( $api );
-
-
-					// Hosted on WordPress.org.
-					switch ( $status['status'] ) {
-						case 'install':
-							if ( $api->external &&
-							     $this->_fs->is_org_repo_compliant() ||
-							     ! $this->_fs->is_premium()
-							) {
-								/**
-								 * Add-on hosted on Freemius, not yet installed, and core
-								 * plugin is wordpress.org compliant. Therefore, require a download
-								 * since installing external plugins is not allowed by the wp.org guidelines.
-								 */
-								return ' <a class="button button-primary right" href="' . esc_url( $api->download_link ) . '" target="_blank">' . __fs( 'download-latest', $api->slug ) . '</a>';
-							} else {
-								if ( $status['url'] ) {
-									return '<a class="button button-primary right" href="' . $status['url'] . '" target="_parent">' . __( 'Install Now' ) . '</a>';
-								}
-							}
-							break;
-						case 'update_available':
-							if ( $status['url'] ) {
-								return '<a class="button button-primary right" href="' . $status['url'] . '" target="_parent">' . __( 'Install Update Now' ) . '</a>';
-							}
-							break;
-						case 'newer_installed':
-							return '<a class="button button-primary right disabled">' . sprintf( __( 'Newer Version (%s) Installed' ), $status['version'] ) . '</a>';
-							break;
-						case 'latest_installed':
-							return '<a class="button button-primary right disabled">' . __( 'Latest Version Installed' ) . '</a>';
-							break;
-					}
-
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7
-		 *
-		 * @param FS_Plugin_Plan $plan
-		 *
-		 * @return string
-		 */
-		private function get_trial_period( $plan ) {
-			$trial_period = (int) $plan->trial_period;
-
-			switch ( $trial_period ) {
-				case 30:
-					return 'month';
-				case 60:
-					return '2 months';
-				default:
-					return "{$plan->trial_period} days";
-			}
-		}
-
-		/**
-		 * Display plugin information in dialog box form.
-		 *
-		 * Based on core install_plugin_information() function.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 */
-		function install_plugin_information() {
-			global $tab;
-
-			if ( empty( $_REQUEST['plugin'] ) ) {
-				return;
-			}
-
-			$args = array(
-				'slug'   => wp_unslash( $_REQUEST['plugin'] ),
-				'is_ssl' => is_ssl(),
-				'fields' => array(
-					'banners'         => true,
-					'reviews'         => true,
-					'downloaded'      => false,
-					'active_installs' => true
-				)
-			);
-
-			if ( is_array( $args ) ) {
-				$args = (object) $args;
-			}
-
-			if ( ! isset( $args->per_page ) ) {
-				$args->per_page = 24;
-			}
-
-			if ( ! isset( $args->locale ) ) {
-				$args->locale = get_locale();
-			}
-
-			$api = apply_filters( 'fs_plugins_api', false, 'plugin_information', $args );
-
-			if ( is_wp_error( $api ) ) {
-				wp_die( $api );
-			}
-
-			$plugins_allowedtags = array(
-				'a'       => array(
-					'href'   => array(),
-					'title'  => array(),
-					'target' => array(),
-					// Add image style for screenshots.
-					'class'  => array()
-				),
-				'style'   => array(),
-				'abbr'    => array( 'title' => array() ),
-				'acronym' => array( 'title' => array() ),
-				'code'    => array(),
-				'pre'     => array(),
-				'em'      => array(),
-				'strong'  => array(),
-				'div'     => array( 'class' => array() ),
-				'span'    => array( 'class' => array() ),
-				'p'       => array(),
-				'ul'      => array(),
-				'ol'      => array(),
-				'li'      => array( 'class' => array() ),
-				'i'       => array( 'class' => array() ),
-				'h1'      => array(),
-				'h2'      => array(),
-				'h3'      => array(),
-				'h4'      => array(),
-				'h5'      => array(),
-				'h6'      => array(),
-				'img'     => array( 'src' => array(), 'class' => array(), 'alt' => array() ),
-//			'table' => array(),
-//			'td' => array(),
-//			'tr' => array(),
-//			'th' => array(),
-//			'thead' => array(),
-//			'tbody' => array(),
-			);
-
-			$plugins_section_titles = array(
-				'description'  => _x( 'Description', 'Plugin installer section title' ),
-				'installation' => _x( 'Installation', 'Plugin installer section title' ),
-				'faq'          => _x( 'FAQ', 'Plugin installer section title' ),
-				'screenshots'  => _x( 'Screenshots', 'Plugin installer section title' ),
-				'changelog'    => _x( 'Changelog', 'Plugin installer section title' ),
-				'reviews'      => _x( 'Reviews', 'Plugin installer section title' ),
-				'other_notes'  => _x( 'Other Notes', 'Plugin installer section title' ),
-			);
-
-			// Sanitize HTML
-//		foreach ( (array) $api->sections as $section_name => $content ) {
-//			$api->sections[$section_name] = wp_kses( $content, $plugins_allowedtags );
-//		}
-
-			foreach ( array( 'version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug' ) as $key ) {
-				if ( isset( $api->$key ) ) {
-					$api->$key = wp_kses( $api->$key, $plugins_allowedtags );
-				}
-			}
-
-			// Add after $api->slug is ready.
-			$plugins_section_titles['features'] = __fs( 'features-and-pricing', $api->slug );
-
-			$_tab = esc_attr( $tab );
-
-			$section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; // Default to the Description tab, Do not translate, API returns English.
-			if ( empty( $section ) || ! isset( $api->sections[ $section ] ) ) {
-				$section_titles = array_keys( (array) $api->sections );
-				$section        = array_shift( $section_titles );
-			}
-
-			iframe_header( __( 'Plugin Install' ) );
-
-			$_with_banner = '';
-
-//	var_dump($api->banners);
-			if ( ! empty( $api->banners ) && ( ! empty( $api->banners['low'] ) || ! empty( $api->banners['high'] ) ) ) {
-				$_with_banner = 'with-banner';
-				$low          = empty( $api->banners['low'] ) ? $api->banners['high'] : $api->banners['low'];
-				$high         = empty( $api->banners['high'] ) ? $api->banners['low'] : $api->banners['high'];
-				?>
-				<style type="text/css">
-					#plugin-information-title.with-banner
-					{
-						background-image: url( <?php echo esc_url( $low ); ?> );
-					}
-
-					@media only screen and ( -webkit-min-device-pixel-ratio: 1.5 )
-					{
-						#plugin-information-title.with-banner
-						{
-							background-image: url( <?php echo esc_url( $high ); ?> );
-						}
-					}
-				</style>
-			<?php
-			}
-
-			echo '<div id="plugin-information-scrollable">';
-			echo "<div id='{$_tab}-title' class='{$_with_banner}'><div class='vignette'></div><h2>{$api->name}</h2></div>";
-			echo "<div id='{$_tab}-tabs' class='{$_with_banner}'>\n";
-
-			foreach ( (array) $api->sections as $section_name => $content ) {
-				if ( 'reviews' === $section_name && ( empty( $api->ratings ) || 0 === array_sum( (array) $api->ratings ) ) ) {
-					continue;
-				}
-
-				if ( isset( $plugins_section_titles[ $section_name ] ) ) {
-					$title = $plugins_section_titles[ $section_name ];
-				} else {
-					$title = ucwords( str_replace( '_', ' ', $section_name ) );
-				}
-
-				$class       = ( $section_name === $section ) ? ' class="current"' : '';
-				$href        = add_query_arg( array( 'tab' => $tab, 'section' => $section_name ) );
-				$href        = esc_url( $href );
-				$san_section = esc_attr( $section_name );
-				echo "\t<a name='$san_section' href='$href' $class>$title</a>\n";
-			}
-
-			echo "</div>\n";
-
-			?>
-		<div id="<?php echo $_tab; ?>-content" class='<?php echo $_with_banner; ?>'>
-			<div class="fyi">
-			<?php if ( $api->is_paid ) : ?>
-				<?php if ( isset( $api->plans ) ) : ?>
-					<div class="plugin-information-pricing">
-					<?php foreach ( $api->plans as $plan ) : ?>
-						<?php
-						/**
-						 * @var FS_Plugin_Plan $plan
-						 */
-						?>
-						<?php $first_pricing = $plan->pricing[0] ?>
-						<?php $is_multi_cycle = $first_pricing->is_multi_cycle() ?>
-						<div class="fs-plan<?php if ( ! $is_multi_cycle ) {
-							echo ' fs-single-cycle';
-						} ?>" data-plan-id="<?php echo $plan->id ?>">
-							<h3 data-plan="<?php echo $plan->id ?>"><?php printf( __fs( 'x-plan', $api->slug ), $plan->title ) ?></h3>
-							<?php $has_annual = $first_pricing->has_annual() ?>
-							<?php $has_monthly = $first_pricing->has_monthly() ?>
-							<div class="nav-tab-wrapper">
-								<?php $billing_cycles = array( 'monthly', 'annual', 'lifetime' ) ?>
-								<?php $i = 0;
-									foreach ( $billing_cycles as $cycle ) : ?>
-										<?php $prop = "{$cycle}_price";
-										if ( isset( $first_pricing->{$prop} ) ) : ?>
-											<?php $is_featured = ( 'annual' === $cycle && $is_multi_cycle ) ?>
-											<?php
-											$prices = array();
-											foreach ( $plan->pricing as $pricing ) {
-												if ( isset( $pricing->{$prop} ) ) {
-													$prices[] = array(
-														'id'       => $pricing->id,
-														'licenses' => $pricing->licenses,
-														'price'    => $pricing->{$prop}
-													);
-												}
-											}
-											?>
-											<a class="nav-tab" data-billing-cycle="<?php echo $cycle ?>"
-											   data-pricing="<?php esc_attr_e( json_encode( $prices ) ) ?>">
-												<?php if ( $is_featured ) : ?>
-													<label>&#9733; <?php _efs( 'best', $api->slug ) ?> &#9733;</label>
-												<?php endif ?>
-												<?php _efs( $cycle, $api->slug ) ?>
-											</a>
-										<?php endif ?>
-										<?php $i ++; endforeach ?>
-								<?php wp_enqueue_script( 'jquery' ) ?>
-								<script type="text/javascript">
-									(function ($, undef) {
-										var
-											_formatBillingFrequency = function (cycle) {
-												switch (cycle) {
-													case 'monthly':
-														return '<?php printf(__fs('billed-x', $api->slug), __fs('monthly', $api->slug)) ?>';
-													case 'annual':
-														return '<?php printf(__fs('billed-x', $api->slug), __fs('annually', $api->slug)) ?>';
-													case 'lifetime':
-														return '<?php printf(__fs('billed-x', $api->slug), __fs('once', $api->slug)) ?>';
-												}
-											},
-											_formatLicensesTitle = function (pricing) {
-												switch (pricing.licenses) {
-													case 1:
-														return '<?php _efs( 'license-single-site', $api->slug ) ?>';
-													case null:
-														return '<?php _efs( 'license-unlimited', $api->slug ) ?>';
-													default:
-														return '<?php _efs( 'license-x-sites', $api->slug ) ?>'.replace('%s', pricing.licenses);
-												}
-											},
-											_formatPrice = function (pricing, cycle, multipleLicenses) {
-												if (undef === multipleLicenses)
-													multipleLicenses = true;
-
-												var priceCycle;
-												switch (cycle) {
-													case 'monthly':
-														priceCycle = ' / <?php _efs('mo', $api->slug) ?>';
-														break;
-													case 'lifetime':
-														priceCycle = '';
-														break;
-													case 'annual':
-													default:
-														priceCycle = ' / <?php _efs('year', $api->slug) ?>';
-														break;
-												}
-
-												if (!multipleLicenses && 1 == pricing.licenses) {
-													return '$' + pricing.price + priceCycle;
-												}
-
-												return _formatLicensesTitle(pricing) + ' - <var class="fs-price">$' + pricing.price + priceCycle + '</var>';
-											},
-											_checkoutUrl = function (plan, pricing, cycle) {
-												return '<?php echo esc_url_raw(remove_query_arg('billing_cycle', add_query_arg(array('plugin_id' => $plan->plugin_id), $api->checkout_link))) ?>' +
-												'&plan_id=' + plan +
-												'&pricing_id=' + pricing +
-												'&billing_cycle=' + cycle<?php if ($plan->has_trial()) { echo " + '&trial=true'"; }?>;
-											},
-											_updateCtaUrl = function (plan, pricing, cycle) {
-												$('.plugin-information-pricing .button, #plugin-information-footer .button').attr('href', _checkoutUrl(plan, pricing, cycle));
-											};
-
-										$(document).ready(function () {
-											var $plan = $('.plugin-information-pricing .fs-plan[data-plan-id=<?php echo $plan->id ?>]');
-											$plan.find('input[type=radio]').live('click', function () {
-												_updateCtaUrl(
-													$plan.attr('data-plan-id'),
-													$(this).val(),
-													$plan.find('.nav-tab-active').attr('data-billing-cycle')
-												);
-
-												$plan.find('.fs-trial-terms .fs-price').html(
-													$(this).parents('label').find('.fs-price').html()
-												);
-											});
-
-											$plan.find('.nav-tab').click(function () {
-												if ($(this).hasClass('nav-tab-active'))
-													return;
-
-												var $this = $(this),
-												    billingCycle = $this.attr('data-billing-cycle'),
-												    pricing = JSON.parse($this.attr('data-pricing')),
-												    $pricesList = $this.parents('.fs-plan').find('.fs-pricing-body .fs-licenses'),
-												    html = '';
-
-												// Un-select previously selected tab.
-												$plan.find('.nav-tab').removeClass('nav-tab-active');
-
-												// Select current tab.
-												$this.addClass('nav-tab-active');
-
-												// Render licenses prices.
-												if (1 == pricing.length) {
-													html = '<li><label><?php _efs( 'price', $api->slug ) ?>: ' + _formatPrice(pricing[0], billingCycle, false) + '</label></li>';
-												} else {
-													for (var i = 0; i < pricing.length; i++) {
-														html += '<li><label><input name="pricing-<?php echo $plan->id ?>" type="radio" value="' + pricing[i].id + '">' + _formatPrice(pricing[i], billingCycle) + '</label></li>';
-													}
-												}
-												$pricesList.html(html);
-
-												if (1 < pricing.length) {
-													// Select first license option.
-													$pricesList.find('li:first input').click();
-												}
-												else {
-													_updateCtaUrl(
-														$plan.attr('data-plan-id'),
-														pricing[0].id,
-														billingCycle
-													);
-												}
-
-												// Update billing frequency.
-												$plan.find('.fs-billing-frequency').html(_formatBillingFrequency(billingCycle));
-
-												if ('annual' === billingCycle) {
-													$plan.find('.fs-annual-discount').show();
-												} else {
-													$plan.find('.fs-annual-discount').hide();
-												}
-											});
-
-											<?php if ( $has_annual ) : ?>
-											// Select annual by default.
-											$plan.find('.nav-tab[data-billing-cycle=annual]').click();
-											<?php else : ?>
-											// Select first tab.
-											$plan.find('.nav-tab:first').click();
-											<?php endif ?>
-										});
-									}(jQuery));
-								</script>
-							</div>
-							<div class="fs-pricing-body">
-								<span class="fs-billing-frequency"></span>
-								<?php $annual_discount = ( $has_annual && $has_monthly ) ? $plan->pricing[0]->annual_discount_percentage() : 0 ?>
-								<?php if ( $annual_discount > 0 ) : ?>
-									<span
-										class="fs-annual-discount"><?php printf( __fs( 'save-x', $api->slug ), $annual_discount . '%' ) ?></span>
-								<?php endif ?>
-								<ul class="fs-licenses">
-								</ul>
-								<?php echo $this->get_plugin_cta( $api, $plan ) ?>
-								<div style="clear:both"></div>
-								<?php if ( $plan->has_trial() ) : ?>
-									<?php $trial_period = $this->get_trial_period( $plan ) ?>
-									<ul class="fs-trial-terms">
-										<li>
-											<i class="dashicons dashicons-yes"></i><?php printf( __fs( 'no-commitment-x', $api->slug ), $trial_period ) ?>
-										</li>
-										<li>
-											<i class="dashicons dashicons-yes"></i><?php printf( __fs( 'after-x-pay-as-little-y', $api->slug ), $trial_period, '<var class="fs-price">' . $this->get_price_tag( $plan, $plan->pricing[0] ) . '</var>' ) ?>
-										</li>
-									</ul>
-								<?php endif ?>
-							</div>
-						</div>
-						</div>
-					<?php endforeach ?>
-				<?php endif ?>
-			<?php endif ?>
-			<div>
-				<h3><?php _efs( 'details', $api->slug ) ?></h3>
-				<ul>
-					<?php if ( ! empty( $api->version ) ) { ?>
-						<li><strong><?php _e( 'Version:' ); ?></strong> <?php echo $api->version; ?></li>
-					<?php
-					}
-						if ( ! empty( $api->author ) ) {
-							?>
-							<li>
-								<strong><?php _e( 'Author:' ); ?></strong> <?php echo links_add_target( $api->author, '_blank' ); ?>
-							</li>
-						<?php
-						}
-						if ( ! empty( $api->last_updated ) ) {
-							?>
-							<li><strong><?php _e( 'Last Updated:' ); ?></strong> <span
-									title="<?php echo $api->last_updated; ?>">
-				<?php printf( __( '%s ago' ), human_time_diff( strtotime( $api->last_updated ) ) ); ?>
-			</span></li>
-						<?php
-						}
-						if ( ! empty( $api->requires ) ) {
-							?>
-							<li>
-								<strong><?php _e( 'Requires WordPress Version:' ); ?></strong> <?php printf( __( '%s or higher' ), $api->requires ); ?>
-							</li>
-						<?php
-						}
-						if ( ! empty( $api->tested ) ) {
-							?>
-							<li><strong><?php _e( 'Compatible up to:' ); ?></strong> <?php echo $api->tested; ?>
-							</li>
-						<?php
-						}
-						if ( ! empty( $api->downloaded ) ) {
-							?>
-							<li>
-								<strong><?php _e( 'Downloaded:' ); ?></strong> <?php printf( _n( '%s time', '%s times', $api->downloaded ), number_format_i18n( $api->downloaded ) ); ?>
-							</li>
-						<?php
-						}
-						if ( ! empty( $api->slug ) && empty( $api->external ) ) {
-							?>
-							<li><a target="_blank"
-							       href="https://wordpress.org/plugins/<?php echo $api->slug; ?>/"><?php _e( 'WordPress.org Plugin Page &#187;' ); ?></a>
-							</li>
-						<?php
-						}
-						if ( ! empty( $api->homepage ) ) {
-							?>
-							<li><a target="_blank"
-							       href="<?php echo esc_url( $api->homepage ); ?>"><?php _e( 'Plugin Homepage &#187;' ); ?></a>
-							</li>
-						<?php
-						}
-						if ( ! empty( $api->donate_link ) && empty( $api->contributors ) ) {
-							?>
-							<li><a target="_blank"
-							       href="<?php echo esc_url( $api->donate_link ); ?>"><?php _e( 'Donate to this plugin &#187;' ); ?></a>
-							</li>
-						<?php } ?>
-				</ul>
-			</div>
-			<?php if ( ! empty( $api->rating ) ) { ?>
-				<h3><?php _e( 'Average Rating' ); ?></h3>
-				<?php wp_star_rating( array(
-					'rating' => $api->rating,
-					'type'   => 'percent',
-					'number' => $api->num_ratings
-				) ); ?>
-				<small><?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $api->num_ratings ), number_format_i18n( $api->num_ratings ) ); ?></small>
-			<?php
-			}
-
-				if ( ! empty( $api->ratings ) && array_sum( (array) $api->ratings ) > 0 ) {
-					foreach ( $api->ratings as $key => $ratecount ) {
-						// Avoid div-by-zero.
-						$_rating = $api->num_ratings ? ( $ratecount / $api->num_ratings ) : 0;
-						?>
-						<div class="counter-container">
-					<span class="counter-label"><a
-							href="https://wordpress.org/support/view/plugin-reviews/<?php echo $api->slug; ?>?filter=<?php echo $key; ?>"
-							target="_blank"
-							title="<?php echo esc_attr( sprintf( _n( 'Click to see reviews that provided a rating of %d star', 'Click to see reviews that provided a rating of %d stars', $key ), $key ) ); ?>"><?php printf( _n( '%d star', '%d stars', $key ), $key ); ?></a></span>
-					<span class="counter-back">
-						<span class="counter-bar" style="width: <?php echo 92 * $_rating; ?>px;"></span>
-					</span>
-							<span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
-						</div>
-					<?php
-					}
-				}
-				if ( ! empty( $api->contributors ) ) {
-					?>
-					<h3><?php _e( 'Contributors' ); ?></h3>
-					<ul class="contributors">
-						<?php
-							foreach ( (array) $api->contributors as $contrib_username => $contrib_profile ) {
-								if ( empty( $contrib_username ) && empty( $contrib_profile ) ) {
-									continue;
-								}
-								if ( empty( $contrib_username ) ) {
-									$contrib_username = preg_replace( '/^.+\/(.+)\/?$/', '\1', $contrib_profile );
-								}
-								$contrib_username = sanitize_user( $contrib_username );
-								if ( empty( $contrib_profile ) ) {
-									echo "<li><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</li>";
-								} else {
-									echo "<li><a href='{$contrib_profile}' target='_blank'><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</a></li>";
-								}
-							}
-						?>
-					</ul>
-					<?php if ( ! empty( $api->donate_link ) ) { ?>
-						<a target="_blank"
-						   href="<?php echo esc_url( $api->donate_link ); ?>"><?php _e( 'Donate to this plugin &#187;' ); ?></a>
-					<?php } ?>
-				<?php } ?>
-			</div>
-			<div id="section-holder" class="wrap">
-	<?php
-		if ( ! empty( $api->tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) {
-			echo '<div class="notice notice-warning"><p>' . '<strong>' . __( 'Warning:' ) . '</strong> ' . __( 'This plugin has not been tested with your current version of WordPress.' ) . '</p></div>';
-		} else if ( ! empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
-			echo '<div class="notice notice-warning"><p>' . '<strong>' . __( 'Warning:' ) . '</strong> ' . __( 'This plugin has not been marked as compatible with your version of WordPress.' ) . '</p></div>';
-		}
-
-		foreach ( (array) $api->sections as $section_name => $content ) {
-			$content = links_add_base_url( $content, 'https://wordpress.org/plugins/' . $api->slug . '/' );
-			$content = links_add_target( $content, '_blank' );
-
-			$san_section = esc_attr( $section_name );
-
-			$display = ( $section_name === $section ) ? 'block' : 'none';
-
-			if ( 'description' === $section_name &&
-			     ( ( ! $api->external && $api->wp_org_missing ) ||
-			       ( $api->external && $api->fs_missing ) )
-			) {
-				$missing_notice = array(
-					'type'    => 'error',
-					'id'      => md5( microtime() ),
-					'message' => __fs( ( $api->is_paid ? 'paid-addon-not-deployed' : 'free-addon-not-deployed' ), $api->slug ),
-				);
-				fs_require_template( 'admin-notice.php', $missing_notice );
-			}
-			echo "\t<div id='section-{$san_section}' class='section' style='display: {$display};'>\n";
-			echo $content;
-			echo "\t</div>\n";
-		}
-	echo "</div>\n";
-	echo "</div>\n";
-	echo "</div>\n"; // #plugin-information-scrollable
-	echo "<div id='$tab-footer'>\n";
-
-	echo $this->get_plugin_cta( $api );
-
-	echo "</div>\n";
-
-	iframe_footer();
-	exit;
-}
-	}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.6
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * Class FS_Plugin_Info_Dialog
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.7
+	 */
+	class FS_Plugin_Info_Dialog {
+		/**
+		 * @since 1.1.7
+		 *
+		 * @var FS_Logger
+		 */
+		private $_logger;
+
+		/**
+		 * @since 1.1.7
+		 *
+		 * @var Freemius
+		 */
+		private $_fs;
+
+		function __construct( Freemius $fs ) {
+			$this->_fs = $fs;
+
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $fs->get_slug() . '_info', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			// Remove default plugin information action.
+			remove_all_actions( 'install_plugins_pre_plugin-information' );
+
+			// Override action with custom plugins function for add-ons.
+			add_action( 'install_plugins_pre_plugin-information', array( &$this, 'install_plugin_information' ) );
+
+			// Override request for plugin information for Add-ons.
+			add_filter(
+				'fs_plugins_api',
+				array( &$this, '_get_addon_info_filter' ),
+				WP_FS__DEFAULT_PRIORITY, 3 );
+		}
+
+		/**
+		 * Generate add-on plugin information.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param array       $data
+		 * @param string      $action
+		 * @param object|null $args
+		 *
+		 * @return array|null
+		 */
+		function _get_addon_info_filter( $data, $action = '', $args = null ) {
+			$this->_logger->entrance();
+
+			$parent_plugin_id = fs_request_get( 'parent_plugin_id', false );
+
+			if ( $this->_fs->get_id() != $parent_plugin_id ||
+			     ( 'plugin_information' !== $action ) ||
+			     ! isset( $args->slug )
+			) {
+				return $data;
+			}
+
+			// Find add-on by slug.
+			$selected_addon = $this->_fs->get_addon_by_slug($args->slug);
+
+			if ( false === $selected_addon ) {
+				return $data;
+			}
+
+			if ( ! isset( $selected_addon->info ) ) {
+				// Setup some default info.
+				$selected_addon->info                  = new stdClass();
+				$selected_addon->info->selling_point_0 = 'Selling Point 1';
+				$selected_addon->info->selling_point_1 = 'Selling Point 2';
+				$selected_addon->info->selling_point_2 = 'Selling Point 3';
+				$selected_addon->info->description     = '<p>Tell your users all about your add-on</p>';
+			}
+
+			fs_enqueue_local_style( 'fs_addons', '/admin/add-ons.css' );
+
+			$data = $args;
+
+			$is_free = true;
+
+			// Load add-on pricing.
+			$has_pricing  = false;
+			$has_features = false;
+			$plans        = false;
+			$plans_result = $this->_fs->get_api_site_or_plugin_scope()->get( "/addons/{$selected_addon->id}/plans.json" );
+			if ( ! isset( $plans_result->error ) ) {
+				$plans = $plans_result->plans;
+				if ( is_array( $plans ) ) {
+					for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
+						$plans[ $i ] = new FS_Plugin_Plan( $plans[ $i ] );
+						$plan        = $plans[ $i ];
+
+						$pricing_result = $this->_fs->get_api_site_or_plugin_scope()->get( "/addons/{$selected_addon->id}/plans/{$plan->id}/pricing.json" );
+						if ( ! isset( $pricing_result->error ) ) {
+							// Update plan's pricing.
+							$plan->pricing = $pricing_result->pricing;
+
+							if ( is_array( $plan->pricing ) && ! empty( $plan->pricing ) ) {
+								$is_free = false;
+
+								foreach ( $plan->pricing as &$pricing ) {
+									$pricing = new FS_Pricing( $pricing );
+								}
+							}
+
+							$has_pricing = true;
+						}
+
+						$features_result = $this->_fs->get_api_site_or_plugin_scope()->get( "/addons/{$selected_addon->id}/plans/{$plan->id}/features.json" );
+						if ( ! isset( $features_result->error ) &&
+						     is_array( $features_result->features ) &&
+						     0 < count( $features_result->features )
+						) {
+							// Update plan's pricing.
+							$plan->features = $features_result->features;
+
+							$has_features = true;
+						}
+					}
+				}
+			}
+
+			// Fetch latest version from Freemius.
+			$latest = $this->_fs->_fetch_latest_version( $selected_addon->id );
+
+			if ( ! $is_free ) {
+				// If paid add-on, then it's not on wordpress.org
+				$is_wordpress_org = false;
+			} else {
+				// If no versions found, then assume it's a .org plugin.
+				$is_wordpress_org = ( false === $latest );
+			}
+
+			if ( $is_wordpress_org ) {
+				$repo_data = FS_Plugin_Updater::_fetch_plugin_info_from_repository(
+					'plugin_information', (object) array(
+						'slug'   => $selected_addon->slug,
+						'is_ssl' => is_ssl(),
+						'fields' => array(
+							'banners'         => true,
+							'reviews'         => true,
+							'downloaded'      => false,
+							'active_installs' => true
+						)
+					) );
+
+				if ( ! empty( $repo_data ) ) {
+					$data                 = $repo_data;
+					$data->wp_org_missing = false;
+				} else {
+					// Couldn't find plugin on .org.
+					$is_wordpress_org = false;
+
+					// Plugin is missing, not on Freemius nor WP.org.
+					$data->wp_org_missing = true;
+				}
+			}
+
+			if ( ! $is_wordpress_org ) {
+				$data->checkout_link = $this->_fs->checkout_url();
+				$data->fs_missing    = ( false === $latest );
+
+				if ( $is_free ) {
+					$data->download_link = $this->_fs->_get_latest_download_local_url( $selected_addon->id );
+				}
+			}
+
+			if ( ! $is_wordpress_org ) {
+// Fetch as much as possible info from local files.
+				$plugin_local_data = $this->_fs->get_plugin_data();
+				$data->name        = $selected_addon->title;
+				$data->author      = $plugin_local_data['Author'];
+				$view_vars         = array( 'plugin' => $selected_addon );
+				$data->sections    = array(
+					'description' => fs_get_template( '/plugin-info/description.php', $view_vars ),
+				);
+
+				if ( ! empty( $selected_addon->info->banner_url ) ) {
+					$data->banners = array(
+						'low' => $selected_addon->info->banner_url,
+					);
+				}
+
+				if ( ! empty( $selected_addon->info->screenshots ) ) {
+					$view_vars                     = array(
+						'screenshots' => $selected_addon->info->screenshots,
+						'plugin'      => $selected_addon,
+					);
+					$data->sections['screenshots'] = fs_get_template( '/plugin-info/screenshots.php', $view_vars );
+				}
+
+				if ( is_object( $latest ) ) {
+					$data->version      = $latest->version;
+					$data->last_updated = ! is_null( $latest->updated ) ? $latest->updated : $latest->created;
+					$data->requires     = $latest->requires_platform_version;
+					$data->tested       = $latest->tested_up_to_version;
+				} else {
+					// Add dummy version.
+					$data->version = '1.0.0';
+
+					// Add message to developer to deploy the plugin through Freemius.
+				}
+			}
+
+			if ( $has_pricing ) {
+				// Add plans to data.
+				$data->plans = $plans;
+
+				if ( $has_features ) {
+					$view_vars                  = array(
+						'plans'  => $plans,
+						'plugin' => $selected_addon,
+					);
+					$data->sections['features'] = fs_get_template( '/plugin-info/features.php', $view_vars );
+				}
+			}
+
+			$data->is_paid  = ! $is_free;
+			$data->external = ! $is_wordpress_org;
+
+			return $data;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @param FS_Plugin_Plan $plan
+		 *
+		 * @return string
+		 */
+		private function get_billing_cycle( FS_Plugin_Plan $plan ) {
+			$billing_cycle = null;
+
+			if ( 1 === count( $plan->pricing ) && 1 == $plan->pricing[0]->licenses ) {
+				$pricing = $plan->pricing[0];
+				if ( isset( $pricing->annual_price ) ) {
+					$billing_cycle = 'annual';
+				} else if ( isset( $pricing->monthly_price ) ) {
+					$billing_cycle = 'monthly';
+				} else if ( isset( $pricing->lifetime_price ) ) {
+					$billing_cycle = 'lifetime';
+				}
+			} else {
+				foreach ( $plan->pricing as $pricing ) {
+					if ( isset( $pricing->annual_price ) ) {
+						$billing_cycle = 'annual';
+					} else if ( isset( $pricing->monthly_price ) ) {
+						$billing_cycle = 'monthly';
+					} else if ( isset( $pricing->lifetime_price ) ) {
+						$billing_cycle = 'lifetime';
+					}
+
+					if ( ! is_null( $billing_cycle ) ) {
+						break;
+					}
+				}
+			}
+
+			return $billing_cycle;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @param FS_Plugin_Plan $plan
+		 * @param FS_Pricing     $pricing
+		 *
+		 * @return float|null|string
+		 */
+		private function get_price_tag( FS_Plugin_Plan $plan, FS_Pricing $pricing ) {
+			$price_tag = '';
+			if ( isset( $pricing->annual_price ) ) {
+				$price_tag = $pricing->annual_price . ( $plan->is_block_features ? ' / year' : '' );
+			} else if ( isset( $pricing->monthly_price ) ) {
+				$price_tag = $pricing->monthly_price . ' / mo';
+			} else if ( isset( $pricing->lifetime_price ) ) {
+				$price_tag = $pricing->lifetime_price;
+			}
+
+			return '$' . $price_tag;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @param object              $api
+		 * @param FS_Plugin_Plan|null $plan
+		 *
+		 * @return string
+		 */
+		private function get_plugin_cta( $api, $plan = null ) {
+			if ( ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) ) {
+
+				if ( ! empty( $api->checkout_link ) && isset( $api->plans ) && 0 < is_array( $api->plans ) ) {
+					if ( is_null( $plan ) ) {
+						$plan = $api->plans[0];
+					}
+
+					return ' <a class="button button-primary right" href="' . $this->_fs->addon_checkout_url(
+						$plan->plugin_id,
+						$plan->pricing[0]->id,
+						$this->get_billing_cycle( $plan ),
+						$plan->has_trial()
+					) . '" target="_parent">' .
+					       ( ! $plan->has_trial() ?
+						       __fs( 'purchase', $api->slug ) :
+						       sprintf( __fs( 'start-free-x', $api->slug ), $this->get_trial_period( $plan ) )
+					       ) .
+					       '</a>';
+
+					// @todo Add Cart concept.
+//			echo ' <a class="button right" href="' . $status['url'] . '" target="_parent">' . __( 'Add to Cart' ) . '</a>';
+
+				} else if ( ! empty( $api->download_link ) ) {
+					$status = install_plugin_install_status( $api );
+
+					// Hosted on WordPress.org.
+					switch ( $status['status'] ) {
+						case 'install':
+							if ( $api->external &&
+							     $this->_fs->is_org_repo_compliant() ||
+							     ! $this->_fs->is_premium()
+							) {
+								/**
+								 * Add-on hosted on Freemius, not yet installed, and core
+								 * plugin is wordpress.org compliant. Therefore, require a download
+								 * since installing external plugins is not allowed by the wp.org guidelines.
+								 */
+								return ' <a class="button button-primary right" href="' . esc_url( $api->download_link ) . '" target="_blank">' . __fs( 'download-latest', $api->slug ) . '</a>';
+							} else {
+								if ( $status['url'] ) {
+									return '<a class="button button-primary right" href="' . $status['url'] . '" target="_parent">' . __( 'Install Now' ) . '</a>';
+								}
+							}
+							break;
+						case 'update_available':
+							if ( $status['url'] ) {
+								return '<a class="button button-primary right" href="' . $status['url'] . '" target="_parent">' . __( 'Install Update Now' ) . '</a>';
+							}
+							break;
+						case 'newer_installed':
+							return '<a class="button button-primary right disabled">' . sprintf( __( 'Newer Version (%s) Installed' ), $status['version'] ) . '</a>';
+							break;
+						case 'latest_installed':
+							return '<a class="button button-primary right disabled">' . __( 'Latest Version Installed' ) . '</a>';
+							break;
+					}
+
+				}
+			}
+
+			return '';
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7
+		 *
+		 * @param FS_Plugin_Plan $plan
+		 *
+		 * @return string
+		 */
+		private function get_trial_period( $plan ) {
+			$trial_period = (int) $plan->trial_period;
+
+			switch ( $trial_period ) {
+				case 30:
+					return 'month';
+				case 60:
+					return '2 months';
+				default:
+					return "{$plan->trial_period} days";
+			}
+		}
+
+		/**
+		 * Display plugin information in dialog box form.
+		 *
+		 * Based on core install_plugin_information() function.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 */
+		function install_plugin_information() {
+			global $tab;
+
+			if ( empty( $_REQUEST['plugin'] ) ) {
+				return;
+			}
+
+			$args = array(
+				'slug'   => wp_unslash( $_REQUEST['plugin'] ),
+				'is_ssl' => is_ssl(),
+				'fields' => array(
+					'banners'         => true,
+					'reviews'         => true,
+					'downloaded'      => false,
+					'active_installs' => true
+				)
+			);
+
+			if ( is_array( $args ) ) {
+				$args = (object) $args;
+			}
+
+			if ( ! isset( $args->per_page ) ) {
+				$args->per_page = 24;
+			}
+
+			if ( ! isset( $args->locale ) ) {
+				$args->locale = get_locale();
+			}
+
+			$api = apply_filters( 'fs_plugins_api', false, 'plugin_information', $args );
+
+			if ( is_wp_error( $api ) ) {
+				wp_die( $api );
+			}
+
+			$plugins_allowedtags = array(
+				'a'       => array(
+					'href'   => array(),
+					'title'  => array(),
+					'target' => array(),
+					// Add image style for screenshots.
+					'class'  => array()
+				),
+				'style'   => array(),
+				'abbr'    => array( 'title' => array() ),
+				'acronym' => array( 'title' => array() ),
+				'code'    => array(),
+				'pre'     => array(),
+				'em'      => array(),
+				'strong'  => array(),
+				'div'     => array( 'class' => array() ),
+				'span'    => array( 'class' => array() ),
+				'p'       => array(),
+				'ul'      => array(),
+				'ol'      => array(),
+				'li'      => array( 'class' => array() ),
+				'i'       => array( 'class' => array() ),
+				'h1'      => array(),
+				'h2'      => array(),
+				'h3'      => array(),
+				'h4'      => array(),
+				'h5'      => array(),
+				'h6'      => array(),
+				'img'     => array( 'src' => array(), 'class' => array(), 'alt' => array() ),
+//			'table' => array(),
+//			'td' => array(),
+//			'tr' => array(),
+//			'th' => array(),
+//			'thead' => array(),
+//			'tbody' => array(),
+			);
+
+			$plugins_section_titles = array(
+				'description'  => _x( 'Description', 'Plugin installer section title' ),
+				'installation' => _x( 'Installation', 'Plugin installer section title' ),
+				'faq'          => _x( 'FAQ', 'Plugin installer section title' ),
+				'screenshots'  => _x( 'Screenshots', 'Plugin installer section title' ),
+				'changelog'    => _x( 'Changelog', 'Plugin installer section title' ),
+				'reviews'      => _x( 'Reviews', 'Plugin installer section title' ),
+				'other_notes'  => _x( 'Other Notes', 'Plugin installer section title' ),
+			);
+
+			// Sanitize HTML
+//		foreach ( (array) $api->sections as $section_name => $content ) {
+//			$api->sections[$section_name] = wp_kses( $content, $plugins_allowedtags );
+//		}
+
+			foreach ( array( 'version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug' ) as $key ) {
+				if ( isset( $api->$key ) ) {
+					$api->$key = wp_kses( $api->$key, $plugins_allowedtags );
+				}
+			}
+
+			// Add after $api->slug is ready.
+			$plugins_section_titles['features'] = __fs( 'features-and-pricing', $api->slug );
+
+			$_tab = esc_attr( $tab );
+
+			$section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; // Default to the Description tab, Do not translate, API returns English.
+			if ( empty( $section ) || ! isset( $api->sections[ $section ] ) ) {
+				$section_titles = array_keys( (array) $api->sections );
+				$section        = array_shift( $section_titles );
+			}
+
+			iframe_header( __( 'Plugin Install' ) );
+
+			$_with_banner = '';
+
+//	var_dump($api->banners);
+			if ( ! empty( $api->banners ) && ( ! empty( $api->banners['low'] ) || ! empty( $api->banners['high'] ) ) ) {
+				$_with_banner = 'with-banner';
+				$low          = empty( $api->banners['low'] ) ? $api->banners['high'] : $api->banners['low'];
+				$high         = empty( $api->banners['high'] ) ? $api->banners['low'] : $api->banners['high'];
+				?>
+				<style type="text/css">
+					#plugin-information-title.with-banner
+					{
+						background-image: url( <?php echo esc_url( $low ); ?> );
+					}
+
+					@media only screen and ( -webkit-min-device-pixel-ratio: 1.5 )
+					{
+						#plugin-information-title.with-banner
+						{
+							background-image: url( <?php echo esc_url( $high ); ?> );
+						}
+					}
+				</style>
+			<?php
+			}
+
+			echo '<div id="plugin-information-scrollable">';
+			echo "<div id='{$_tab}-title' class='{$_with_banner}'><div class='vignette'></div><h2>{$api->name}</h2></div>";
+			echo "<div id='{$_tab}-tabs' class='{$_with_banner}'>\n";
+
+			foreach ( (array) $api->sections as $section_name => $content ) {
+				if ( 'reviews' === $section_name && ( empty( $api->ratings ) || 0 === array_sum( (array) $api->ratings ) ) ) {
+					continue;
+				}
+
+				if ( isset( $plugins_section_titles[ $section_name ] ) ) {
+					$title = $plugins_section_titles[ $section_name ];
+				} else {
+					$title = ucwords( str_replace( '_', ' ', $section_name ) );
+				}
+
+				$class       = ( $section_name === $section ) ? ' class="current"' : '';
+				$href        = add_query_arg( array( 'tab' => $tab, 'section' => $section_name ) );
+				$href        = esc_url( $href );
+				$san_section = esc_attr( $section_name );
+				echo "\t<a name='$san_section' href='$href' $class>$title</a>\n";
+			}
+
+			echo "</div>\n";
+
+			?>
+		<div id="<?php echo $_tab; ?>-content" class='<?php echo $_with_banner; ?>'>
+			<div class="fyi">
+			<?php if ( $api->is_paid ) : ?>
+				<?php if ( isset( $api->plans ) ) : ?>
+					<div class="plugin-information-pricing">
+					<?php foreach ( $api->plans as $plan ) : ?>
+						<?php
+						/**
+						 * @var FS_Plugin_Plan $plan
+						 */
+						?>
+						<?php $first_pricing = $plan->pricing[0] ?>
+						<?php $is_multi_cycle = $first_pricing->is_multi_cycle() ?>
+						<div class="fs-plan<?php if ( ! $is_multi_cycle ) {
+							echo ' fs-single-cycle';
+						} ?>" data-plan-id="<?php echo $plan->id ?>">
+							<h3 data-plan="<?php echo $plan->id ?>"><?php printf( __fs( 'x-plan', $api->slug ), $plan->title ) ?></h3>
+							<?php $has_annual = $first_pricing->has_annual() ?>
+							<?php $has_monthly = $first_pricing->has_monthly() ?>
+							<div class="nav-tab-wrapper">
+								<?php $billing_cycles = array( 'monthly', 'annual', 'lifetime' ) ?>
+								<?php $i = 0;
+									foreach ( $billing_cycles as $cycle ) : ?>
+										<?php $prop = "{$cycle}_price";
+										if ( isset( $first_pricing->{$prop} ) ) : ?>
+											<?php $is_featured = ( 'annual' === $cycle && $is_multi_cycle ) ?>
+											<?php
+											$prices = array();
+											foreach ( $plan->pricing as $pricing ) {
+												if ( isset( $pricing->{$prop} ) ) {
+													$prices[] = array(
+														'id'       => $pricing->id,
+														'licenses' => $pricing->licenses,
+														'price'    => $pricing->{$prop}
+													);
+												}
+											}
+											?>
+											<a class="nav-tab" data-billing-cycle="<?php echo $cycle ?>"
+											   data-pricing="<?php esc_attr_e( json_encode( $prices ) ) ?>">
+												<?php if ( $is_featured ) : ?>
+													<label>&#9733; <?php _efs( 'best', $api->slug ) ?> &#9733;</label>
+												<?php endif ?>
+												<?php _efs( $cycle, $api->slug ) ?>
+											</a>
+										<?php endif ?>
+										<?php $i ++; endforeach ?>
+								<?php wp_enqueue_script( 'jquery' ) ?>
+								<script type="text/javascript">
+									(function ($, undef) {
+										var
+											_formatBillingFrequency = function (cycle) {
+												switch (cycle) {
+													case 'monthly':
+														return '<?php printf(__fs('billed-x', $api->slug), __fs('monthly', $api->slug)) ?>';
+													case 'annual':
+														return '<?php printf(__fs('billed-x', $api->slug), __fs('annually', $api->slug)) ?>';
+													case 'lifetime':
+														return '<?php printf(__fs('billed-x', $api->slug), __fs('once', $api->slug)) ?>';
+												}
+											},
+											_formatLicensesTitle = function (pricing) {
+												switch (pricing.licenses) {
+													case 1:
+														return '<?php _efs( 'license-single-site', $api->slug ) ?>';
+													case null:
+														return '<?php _efs( 'license-unlimited', $api->slug ) ?>';
+													default:
+														return '<?php _efs( 'license-x-sites', $api->slug ) ?>'.replace('%s', pricing.licenses);
+												}
+											},
+											_formatPrice = function (pricing, cycle, multipleLicenses) {
+												if (undef === multipleLicenses)
+													multipleLicenses = true;
+
+												var priceCycle;
+												switch (cycle) {
+													case 'monthly':
+														priceCycle = ' / <?php _efs('mo', $api->slug) ?>';
+														break;
+													case 'lifetime':
+														priceCycle = '';
+														break;
+													case 'annual':
+													default:
+														priceCycle = ' / <?php _efs('year', $api->slug) ?>';
+														break;
+												}
+
+												if (!multipleLicenses && 1 == pricing.licenses) {
+													return '$' + pricing.price + priceCycle;
+												}
+
+												return _formatLicensesTitle(pricing) + ' - <var class="fs-price">$' + pricing.price + priceCycle + '</var>';
+											},
+											_checkoutUrl = function (plan, pricing, cycle) {
+												return '<?php echo esc_url_raw(remove_query_arg('billing_cycle', add_query_arg(array('plugin_id' => $plan->plugin_id), $api->checkout_link))) ?>' +
+												'&plan_id=' + plan +
+												'&pricing_id=' + pricing +
+												'&billing_cycle=' + cycle<?php if ($plan->has_trial()) { echo " + '&trial=true'"; }?>;
+											},
+											_updateCtaUrl = function (plan, pricing, cycle) {
+												$('.plugin-information-pricing .button, #plugin-information-footer .button').attr('href', _checkoutUrl(plan, pricing, cycle));
+											};
+
+										$(document).ready(function () {
+											var $plan = $('.plugin-information-pricing .fs-plan[data-plan-id=<?php echo $plan->id ?>]');
+											$plan.find('input[type=radio]').live('click', function () {
+												_updateCtaUrl(
+													$plan.attr('data-plan-id'),
+													$(this).val(),
+													$plan.find('.nav-tab-active').attr('data-billing-cycle')
+												);
+
+												$plan.find('.fs-trial-terms .fs-price').html(
+													$(this).parents('label').find('.fs-price').html()
+												);
+											});
+
+											$plan.find('.nav-tab').click(function () {
+												if ($(this).hasClass('nav-tab-active'))
+													return;
+
+												var $this = $(this),
+												    billingCycle = $this.attr('data-billing-cycle'),
+												    pricing = JSON.parse($this.attr('data-pricing')),
+												    $pricesList = $this.parents('.fs-plan').find('.fs-pricing-body .fs-licenses'),
+												    html = '';
+
+												// Un-select previously selected tab.
+												$plan.find('.nav-tab').removeClass('nav-tab-active');
+
+												// Select current tab.
+												$this.addClass('nav-tab-active');
+
+												// Render licenses prices.
+												if (1 == pricing.length) {
+													html = '<li><label><?php _efs( 'price', $api->slug ) ?>: ' + _formatPrice(pricing[0], billingCycle, false) + '</label></li>';
+												} else {
+													for (var i = 0; i < pricing.length; i++) {
+														html += '<li><label><input name="pricing-<?php echo $plan->id ?>" type="radio" value="' + pricing[i].id + '">' + _formatPrice(pricing[i], billingCycle) + '</label></li>';
+													}
+												}
+												$pricesList.html(html);
+
+												if (1 < pricing.length) {
+													// Select first license option.
+													$pricesList.find('li:first input').click();
+												}
+												else {
+													_updateCtaUrl(
+														$plan.attr('data-plan-id'),
+														pricing[0].id,
+														billingCycle
+													);
+												}
+
+												// Update billing frequency.
+												$plan.find('.fs-billing-frequency').html(_formatBillingFrequency(billingCycle));
+
+												if ('annual' === billingCycle) {
+													$plan.find('.fs-annual-discount').show();
+												} else {
+													$plan.find('.fs-annual-discount').hide();
+												}
+											});
+
+											<?php if ( $has_annual ) : ?>
+											// Select annual by default.
+											$plan.find('.nav-tab[data-billing-cycle=annual]').click();
+											<?php else : ?>
+											// Select first tab.
+											$plan.find('.nav-tab:first').click();
+											<?php endif ?>
+										});
+									}(jQuery));
+								</script>
+							</div>
+							<div class="fs-pricing-body">
+								<span class="fs-billing-frequency"></span>
+								<?php $annual_discount = ( $has_annual && $has_monthly ) ? $plan->pricing[0]->annual_discount_percentage() : 0 ?>
+								<?php if ( $annual_discount > 0 ) : ?>
+									<span
+										class="fs-annual-discount"><?php printf( __fs( 'save-x', $api->slug ), $annual_discount . '%' ) ?></span>
+								<?php endif ?>
+								<ul class="fs-licenses">
+								</ul>
+								<?php echo $this->get_plugin_cta( $api, $plan ) ?>
+								<div style="clear:both"></div>
+								<?php if ( $plan->has_trial() ) : ?>
+									<?php $trial_period = $this->get_trial_period( $plan ) ?>
+									<ul class="fs-trial-terms">
+										<li>
+											<i class="dashicons dashicons-yes"></i><?php printf( __fs( 'no-commitment-x', $api->slug ), $trial_period ) ?>
+										</li>
+										<li>
+											<i class="dashicons dashicons-yes"></i><?php printf( __fs( 'after-x-pay-as-little-y', $api->slug ), $trial_period, '<var class="fs-price">' . $this->get_price_tag( $plan, $plan->pricing[0] ) . '</var>' ) ?>
+										</li>
+									</ul>
+								<?php endif ?>
+							</div>
+						</div>
+						</div>
+					<?php endforeach ?>
+				<?php endif ?>
+			<?php endif ?>
+			<div>
+				<h3><?php _efs( 'details', $api->slug ) ?></h3>
+				<ul>
+					<?php if ( ! empty( $api->version ) ) { ?>
+						<li><strong><?php _e( 'Version:' ); ?></strong> <?php echo $api->version; ?></li>
+					<?php
+					}
+						if ( ! empty( $api->author ) ) {
+							?>
+							<li>
+								<strong><?php _e( 'Author:' ); ?></strong> <?php echo links_add_target( $api->author, '_blank' ); ?>
+							</li>
+						<?php
+						}
+						if ( ! empty( $api->last_updated ) ) {
+							?>
+							<li><strong><?php _e( 'Last Updated:' ); ?></strong> <span
+									title="<?php echo $api->last_updated; ?>">
+				<?php printf( __( '%s ago' ), human_time_diff( strtotime( $api->last_updated ) ) ); ?>
+			</span></li>
+						<?php
+						}
+						if ( ! empty( $api->requires ) ) {
+							?>
+							<li>
+								<strong><?php _e( 'Requires WordPress Version:' ); ?></strong> <?php printf( __( '%s or higher' ), $api->requires ); ?>
+							</li>
+						<?php
+						}
+						if ( ! empty( $api->tested ) ) {
+							?>
+							<li><strong><?php _e( 'Compatible up to:' ); ?></strong> <?php echo $api->tested; ?>
+							</li>
+						<?php
+						}
+						if ( ! empty( $api->downloaded ) ) {
+							?>
+							<li>
+								<strong><?php _e( 'Downloaded:' ); ?></strong> <?php printf( _n( '%s time', '%s times', $api->downloaded ), number_format_i18n( $api->downloaded ) ); ?>
+							</li>
+						<?php
+						}
+						if ( ! empty( $api->slug ) && empty( $api->external ) ) {
+							?>
+							<li><a target="_blank"
+							       href="https://wordpress.org/plugins/<?php echo $api->slug; ?>/"><?php _e( 'WordPress.org Plugin Page &#187;' ); ?></a>
+							</li>
+						<?php
+						}
+						if ( ! empty( $api->homepage ) ) {
+							?>
+							<li><a target="_blank"
+							       href="<?php echo esc_url( $api->homepage ); ?>"><?php _e( 'Plugin Homepage &#187;' ); ?></a>
+							</li>
+						<?php
+						}
+						if ( ! empty( $api->donate_link ) && empty( $api->contributors ) ) {
+							?>
+							<li><a target="_blank"
+							       href="<?php echo esc_url( $api->donate_link ); ?>"><?php _e( 'Donate to this plugin &#187;' ); ?></a>
+							</li>
+						<?php } ?>
+				</ul>
+			</div>
+			<?php if ( ! empty( $api->rating ) ) { ?>
+				<h3><?php _e( 'Average Rating' ); ?></h3>
+				<?php wp_star_rating( array(
+					'rating' => $api->rating,
+					'type'   => 'percent',
+					'number' => $api->num_ratings
+				) ); ?>
+				<small><?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $api->num_ratings ), number_format_i18n( $api->num_ratings ) ); ?></small>
+			<?php
+			}
+
+				if ( ! empty( $api->ratings ) && array_sum( (array) $api->ratings ) > 0 ) {
+					foreach ( $api->ratings as $key => $ratecount ) {
+						// Avoid div-by-zero.
+						$_rating = $api->num_ratings ? ( $ratecount / $api->num_ratings ) : 0;
+						?>
+						<div class="counter-container">
+					<span class="counter-label"><a
+							href="https://wordpress.org/support/view/plugin-reviews/<?php echo $api->slug; ?>?filter=<?php echo $key; ?>"
+							target="_blank"
+							title="<?php echo esc_attr( sprintf( _n( 'Click to see reviews that provided a rating of %d star', 'Click to see reviews that provided a rating of %d stars', $key ), $key ) ); ?>"><?php printf( _n( '%d star', '%d stars', $key ), $key ); ?></a></span>
+					<span class="counter-back">
+						<span class="counter-bar" style="width: <?php echo 92 * $_rating; ?>px;"></span>
+					</span>
+							<span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
+						</div>
+					<?php
+					}
+				}
+				if ( ! empty( $api->contributors ) ) {
+					?>
+					<h3><?php _e( 'Contributors' ); ?></h3>
+					<ul class="contributors">
+						<?php
+							foreach ( (array) $api->contributors as $contrib_username => $contrib_profile ) {
+								if ( empty( $contrib_username ) && empty( $contrib_profile ) ) {
+									continue;
+								}
+								if ( empty( $contrib_username ) ) {
+									$contrib_username = preg_replace( '/^.+\/(.+)\/?$/', '\1', $contrib_profile );
+								}
+								$contrib_username = sanitize_user( $contrib_username );
+								if ( empty( $contrib_profile ) ) {
+									echo "<li><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</li>";
+								} else {
+									echo "<li><a href='{$contrib_profile}' target='_blank'><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</a></li>";
+								}
+							}
+						?>
+					</ul>
+					<?php if ( ! empty( $api->donate_link ) ) { ?>
+						<a target="_blank"
+						   href="<?php echo esc_url( $api->donate_link ); ?>"><?php _e( 'Donate to this plugin &#187;' ); ?></a>
+					<?php } ?>
+				<?php } ?>
+			</div>
+			<div id="section-holder" class="wrap">
+	<?php
+		if ( ! empty( $api->tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) {
+			echo '<div class="notice notice-warning"><p>' . '<strong>' . __( 'Warning:' ) . '</strong> ' . __( 'This plugin has not been tested with your current version of WordPress.' ) . '</p></div>';
+		} else if ( ! empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
+			echo '<div class="notice notice-warning"><p>' . '<strong>' . __( 'Warning:' ) . '</strong> ' . __( 'This plugin has not been marked as compatible with your version of WordPress.' ) . '</p></div>';
+		}
+
+		foreach ( (array) $api->sections as $section_name => $content ) {
+			$content = links_add_base_url( $content, 'https://wordpress.org/plugins/' . $api->slug . '/' );
+			$content = links_add_target( $content, '_blank' );
+
+			$san_section = esc_attr( $section_name );
+
+			$display = ( $section_name === $section ) ? 'block' : 'none';
+
+			if ( 'description' === $section_name &&
+			     ( ( ! $api->external && $api->wp_org_missing ) ||
+			       ( $api->external && $api->fs_missing ) )
+			) {
+				$missing_notice = array(
+					'type'    => 'error',
+					'id'      => md5( microtime() ),
+					'message' => __fs( ( $api->is_paid ? 'paid-addon-not-deployed' : 'free-addon-not-deployed' ), $api->slug ),
+				);
+				fs_require_template( 'admin-notice.php', $missing_notice );
+			}
+			echo "\t<div id='section-{$san_section}' class='section' style='display: {$display};'>\n";
+			echo $content;
+			echo "\t</div>\n";
+		}
+	echo "</div>\n";
+	echo "</div>\n";
+	echo "</div>\n"; // #plugin-information-scrollable
+	echo "<div id='$tab-footer'>\n";
+
+	echo $this->get_plugin_cta( $api );
+
+	echo "</div>\n";
+
+	iframe_footer();
+	exit;
+}
+	}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/i18n.php b/wp-content/plugins/nextgen-gallery/freemius/includes/i18n.php
index 32ea23dce406b94ef96af0e4d1bb6b3dc86132cb..14b6af120cc14a5c77f6405e26b5a5f9c84556e4 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/i18n.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/i18n.php
@@ -35,6 +35,7 @@
 		'account'                                  => __( 'Account', 'freemius' ),
 		'addon'                                    => __( 'Add On', 'freemius' ),
 		'contact-us'                               => __( 'Contact Us', 'freemius' ),
+		'contact-support'                          => __( 'Contact Support', 'freemius' ),
 		'change-ownership'                         => __( 'Change Ownership', 'freemius' ),
 		'support'                                  => __( 'Support', 'freemius' ),
 		'support-forum'                            => __( 'Support Forum', 'freemius' ),
@@ -53,6 +54,14 @@
 		'details'                                  => __( 'Details', 'freemius' ),
 		'account-details'                          => __( 'Account Details', 'freemius' ),
 		'delete'                                   => _x( 'Delete', 'verb', 'freemius' ),
+		'show'                                     => _x( 'Show', 'verb', 'freemius' ),
+		'hide'                                     => _x( 'Hide', 'verb', 'freemius' ),
+		'edit'                                     => _x( 'Edit', 'verb', 'freemius' ),
+		'date'                                     => __( 'Date', 'freemius' ),
+		'amount'                                   => __( 'Amount', 'freemius' ),
+		'invoice'                                  => __( 'Invoice', 'freemius' ),
+		'billing'                                  => __( 'Billing', 'freemius' ),
+		'payments'                                 => __( 'Payments', 'freemius' ),
 		'delete-account'                           => __( 'Delete Account', 'freemius' ),
 		'dismiss'                                  => _x( 'Dismiss', 'as close a window', 'freemius' ),
 		'plan'                                     => _x( 'Plan', 'as product pricing plan', 'freemius' ),
@@ -72,6 +81,7 @@
 		'license-unlimited'                        => __( 'Unlimited Licenses', 'freemius' ),
 		'license-x-sites'                          => __( 'Up to %s Sites', 'freemius' ),
 		'renew-license-now'                        => __( '%sRenew your license now%s to access version %s features and support.', 'freemius' ),
+		'ask-for-upgrade-email-address'            => __( "Enter the email address you've used for the upgrade below and we will resend you the license key.", 'freemius' ),
 		'x-plan'                                   => _x( '%s Plan', 'e.g. Professional Plan', 'freemius' ),
 		'you-are-step-away'                        => __( 'You are just one step away - %s', 'freemius' ),
 		'activate-x-now'                           => _x( 'Complete "%s" Activation Now', '%s - plugin name. As complete "Jetpack" activation now', 'freemius' ),
@@ -95,6 +105,7 @@
 		'version'                                  => _x( 'Version', 'as plugin version', 'freemius' ),
 		'name'                                     => __( 'Name', 'freemius' ),
 		'email'                                    => __( 'Email', 'freemius' ),
+		'email-address'                            => __( 'Email address', 'freemius' ),
 		'verified'                                 => __( 'Verified', 'freemius' ),
 		'plugin'                                   => __( 'Plugin', 'freemius' ),
 		'plugins'                                  => __( 'Plugins', 'freemius' ),
@@ -116,6 +127,12 @@
 		'no-id'                                    => __( 'No ID', 'freemius' ),
 		'sync-license'                             => _x( 'Sync License', 'as synchronize license', 'freemius' ),
 		'sync'                                     => _x( 'Sync', 'as synchronize', 'freemius' ),
+		'activate-license'                         => __( 'Activate License', 'freemius' ),
+		'activate-free-version'                    => __( 'Activate Free Version', 'freemius' ),
+		'activate-license-message'                 => __( 'Please enter the license key that you received in the email right after the purchase:', 'freemius' ),
+		'activating-license'                       => __( 'Activating license...', 'freemius' ),
+		'change-license'                           => __( 'Change License', 'freemius' ),
+		'update-license'                           => __( 'Update License', 'freemius' ),
 		'deactivate-license'                       => __( 'Deactivate License', 'freemius' ),
 		'activate'                                 => __( 'Activate', 'freemius' ),
 		'deactivate'                               => __( 'Deactivate', 'freemius' ),
@@ -146,6 +163,8 @@
 		'add-ons-for-x'                            => __( 'Add Ons for %s', 'freemius' ),
 		'add-ons-missing'                          => __( 'We could\'nt load the add-ons list. It\'s probably an issue on our side, please try to come back in few minutes.', 'freemius' ),
 		#region Plugin Deactivation
+		'anonymous-feedback'                       => __( 'Anonymous feedback', 'freemius' ),
+		'quick-feedback'                           => __( 'Quick feedback', 'freemius' ),
 		'deactivation-share-reason'                => __( 'If you have a moment, please let us know why you are deactivating', 'freemius' ),
 		'deactivation-modal-button-confirm'        => __( 'Yes - Deactivate', 'freemius' ),
 		'deactivation-modal-button-submit'         => __( 'Submit & Deactivate', 'freemius' ),
@@ -172,6 +191,7 @@
 		'placeholder-what-did-you-expect'          => __( "What did you expect?", 'freemius' ),
 		'reason-didnt-work'                        => __( "The plugin didn't work", 'freemius' ),
 		'reason-dont-like-to-share-my-information' => __( "I don't like to share my information with you", 'freemius' ),
+		'dont-have-to-share-any-data'              => __( "You might have missed it, but you don't have to share any data and can just %s the opt-in.", 'freemius' ),
 		#endregion Plugin Deactivation
 
 		#region Connect
@@ -180,6 +200,8 @@
 		'connect-message'                          => __( 'In order to enjoy all our features and functionality, %s needs to connect your user, %s at %s, to %s', 'freemius' ),
 		'connect-message_on-update'                => __( 'Please help us improve %2$s! If you opt-in, some data about your usage of %2$s will be sent to %5$s. If you skip this, that\'s okay! %2$s will still work just fine.', 'freemius' ),
 		'pending-activation-message'               => __( 'You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to complete the install.', 'freemius' ),
+		'thanks-for-purchasing'                    => __( 'Thanks for purchasing %s! To get started, please enter your license key:', 'freemius' ),
+		'license-sync-disclaimer'                  => __( 'The plugin will be periodically sending data to %s to check for plugin updates and verify the validity of your license.', 'freemius' ),
 		'what-permissions'                         => __( 'What permissions are being granted?', 'freemius' ),
 		'permissions-profile'                      => __( 'Your Profile Overview', 'freemius' ),
 		'permissions-profile_desc'                 => __( 'Name and email address', 'freemius' ),
@@ -196,8 +218,18 @@
 		'activating'                               => _x( 'Activating', 'as activating plugin', 'freemius' ),
 		'sending-email'                            => _x( 'Sending email', 'as in the process of sending an email', 'freemius' ),
 		'opt-in-connect'                           => _x( 'Allow & Continue', 'button label', 'freemius' ),
+		'agree-activate-license'                   => _x( 'Agree & Activate License', 'button label', 'freemius' ),
 		'skip'                                     => _x( 'Skip', 'verb', 'freemius' ),
+		'click-here-to-use-plugin-anonymously'     => __( 'Click here to use the plugin anonymously', 'freemius' ),
 		'resend-activation-email'                  => __( 'Re-send activation email', 'freemius' ),
+		'license-key'                              => __( 'License key', 'freemius' ),
+		'send-license-key'                         => __( 'Send License Key', 'freemius' ),
+		'sending-license-key'                      => __( 'Sending license key', 'freemius' ),
+		'have-license-key'                         => __( 'Have a license key?', 'freemius' ),
+		'dont-have-license-key'                    => __( 'Don\'t have a license key?', 'freemius' ),
+		'cant-find-license-key'                    => __( "Can't find your license key?", 'freemius' ),
+		'email-not-found'                          => __( "We couldn't find your email address in the system, are you sure it's the right address?" ),
+		'no-active-licenses'                       => __( "We can't see any active licenses associated with that email address, are you sure it's the right address?" ),
 		#endregion Connect
 
 		#region Screenshots
@@ -256,14 +288,19 @@
 		'premium-activated-message'                => __( 'Premium plugin version was successfully activated.', 'freemius' ),
 		'successful-version-upgrade-message'       => __( 'The upgrade of %s was successfully completed.', 'freemius' ),
 		'activation-with-plan-x-message'           => __( 'Your account was successfully activated with the %s plan.', 'freemius' ),
-		'download-latest-x-version'                => __( 'Download the latest %s version now', 'freemius' ),
-		'download-latest-version'                  => __( 'Download the latest version now', 'freemius' ),
+		'download-latest-x-version-now'            => __( 'Download the latest %s version now', 'freemius' ),
+		'follow-steps-to-complete-upgrade'         => __( 'Please follow these steps to complete the upgrade', 'freemius' ),
+		'download-latest-x-version'                => __( 'Download the latest %s version', 'freemius' ),
+		'deactivate-free-version'                  => __( 'Deactivate the free version', 'freemius' ),
+		'upload-and-activate'                      => __( 'Upload and activate the downloaded version', 'freemius' ),
+		'howto-upload-activate'                    => __( 'How to upload and activate?', 'freemius' ),
 		'addon-successfully-purchased-message'     => _x( '%s Add-on was successfully purchased.', '%s - product name, e.g. Facebook add-on was successfully...', 'freemius' ),
 		'addon-successfully-upgraded-message'      => __( 'Your %s Add-on plan was successfully upgraded.', 'freemius' ),
 		'email-verified-message'                   => __( 'Your email has been successfully verified - you are AWESOME!', 'freemius' ),
 		'plan-upgraded-message'                    => __( 'Your plan was successfully upgraded.', 'freemius' ),
 		'plan-changed-to-x-message'                => __( 'Your plan was successfully changed to %s.', 'freemius' ),
 		'license-expired-blocking-message'         => __( 'Your license has expired. You can still continue using the free plugin forever.', 'freemius' ),
+		'license-cancelled'                        => __( 'Your license has been cancelled. If you think it\'s a mistake, please contact support.', 'freemius' ),
 		'trial-started-message'                    => __( 'Your trial has been successfully started.', 'freemius' ),
 		'license-activated-message'                => __( 'Your license was successfully activated.', 'freemius' ),
 		'no-active-license-message'                => __( 'It looks like your site currently doesn\'t have an active license.', 'freemius' ),
@@ -311,6 +348,7 @@
 		'curl-missing-no-clue-desc'                => __( 'We\'ll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update.', 'freemius' ),
 		'curl-missing-sysadmin-desc'               => __( 'Great, please install cURL and enable it in your php.ini file. To make sure it was successfully activated, use \'phpinfo()\'. Once activated, deactivate the plugin and reactivate it back again.', 'freemius' ),
 		'happy-to-resolve-issue-asap'              => __( 'We are sure it\'s an issue on our side and more than happy to resolve it for you ASAP if you give us a chance.', 'freemius' ),
+		'contact-support-before-deactivation'      => __( 'Sorry for the inconvenience and we are here to help if you give us a chance.', 'freemius' ),
 		'fix-issue-title'                          => __( 'Yes - I\'m giving you a chance to fix it', 'freemius' ),
 		'fix-issue-desc'                           => __( 'We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update.', 'freemius' ),
 		'install-previous-title'                   => __( 'Let\'s try your previous version', 'freemius' ),
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-menu-manager.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-menu-manager.php
index 1f655b4da8c463f248a2cb6ec91d2a934aa1580a..4a894e0a29b0eb91c33cd84847a2a59e48629c74 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-menu-manager.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-menu-manager.php
@@ -1,549 +1,549 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Admin_Menu_Manager {
-
-		#region Properties
-
-		/**
-		 * @var string
-		 */
-		protected $_plugin_slug;
-
-		/**
-		 * @since 1.0.6
-		 *
-		 * @var string
-		 */
-		private $_menu_slug;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var string
-		 */
-		private $_parent_slug;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var string
-		 */
-		private $_parent_type;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var string
-		 */
-		private $_type;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var bool
-		 */
-		private $_is_top_level;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var bool
-		 */
-		private $_is_override_exact;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var string[]bool
-		 */
-		private $_default_submenu_items;
-		/**
-		 * @since 1.1.3
-		 *
-		 * @var string
-		 */
-		private $_first_time_path;
-
-		#endregion Properties
-
-		/**
-		 * @var FS_Logger
-		 */
-		protected $_logger;
-
-		#region Singleton
-
-		/**
-		 * @var FS_Admin_Menu_Manager[]
-		 */
-		private static $_instances = array();
-
-		/**
-		 * @param string $plugin_slug
-		 *
-		 * @return FS_Admin_Notice_Manager
-		 */
-		static function instance( $plugin_slug ) {
-			if ( ! isset( self::$_instances[ $plugin_slug ] ) ) {
-				self::$_instances[ $plugin_slug ] = new FS_Admin_Menu_Manager( $plugin_slug );
-			}
-
-			return self::$_instances[ $plugin_slug ];
-		}
-
-		protected function __construct( $plugin_slug ) {
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $plugin_slug . '_admin_menu', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			$this->_plugin_slug = $plugin_slug;
-		}
-
-		#endregion Singleton
-
-		#region Helpers
-
-		private function get_option( &$options, $key, $default = false ) {
-			return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
-		}
-
-		private function get_bool_option( &$options, $key, $default = false ) {
-			return isset( $options[ $key ] ) &&is_bool( $options[ $key ] )  ? $options[ $key ] : $default;
-		}
-
-		#endregion Helpers
-
-		/**
-		 * @param array $menu
-		 * @param bool  $is_addon
-		 */
-		function init( $menu, $is_addon = false ) {
-			$this->_menu_slug = $menu['slug'];
-
-			$this->_default_submenu_items = array();
-			// @deprecated
-			$this->_type              = 'page';
-			$this->_is_top_level      = true;
-			$this->_is_override_exact = false;
-			$this->_parent_slug       = false;
-			// @deprecated
-			$this->_parent_type = 'page';
-
-			if ( ! $is_addon && isset( $menu ) ) {
-				$this->_default_submenu_items = array(
-					'contact' => $this->get_bool_option( $menu, 'contact', true ),
-					'support' => $this->get_bool_option( $menu, 'support', true ),
-					'account' => $this->get_bool_option( $menu, 'account', true ),
-					'pricing' => $this->get_bool_option( $menu, 'pricing', true ),
-					'addons'  => $this->get_bool_option( $menu, 'addons', true ),
-				);
-
-				// @deprecated
-				$this->_type              = $this->get_option( $menu, 'type', 'page' );
-				$this->_is_override_exact = $this->get_bool_option( $menu, 'override_exact' );
-
-				if ( isset( $menu['parent'] ) ) {
-					$this->_parent_slug = $this->get_option( $menu['parent'], 'slug' );
-					// @deprecated
-					$this->_parent_type = $this->get_option( $menu['parent'], 'type', 'page' );
-
-					// If parent's slug is different, then it's NOT a top level menu item.
-					$this->_is_top_level = ( $this->_parent_slug === $this->_menu_slug );
-				} else {
-					/**
-					 * If no parent then top level if:
-					 *  - Has custom admin menu ('page')
-					 *  - CPT menu type ('cpt')
-					 */
-//					$this->_is_top_level = in_array( $this->_type, array(
-//						'cpt',
-//						'page'
-//					) );
-				}
-
-				$this->_first_time_path = $this->get_option( $menu, 'first-path', false );
-				if ( ! empty( $this->_first_time_path ) && is_string( $this->_first_time_path ) ) {
-					$this->_first_time_path = admin_url( $this->_first_time_path, 'admin' );
-				}
-			}
-		}
-
-		/**
-		 * Check if top level menu.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return bool False if submenu item.
-		 */
-		function is_top_level() {
-			return $this->_is_top_level;
-		}
-
-		/**
-		 * Check if the page should be override on exact URL match.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return bool False if submenu item.
-		 */
-		function is_override_exact() {
-			return $this->_is_override_exact;
-		}
-
-
-		/**
-		 * Get the path of the page the user should be forwarded to after first activation.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_first_time_path() {
-			return $this->_first_time_path;
-		}
-
-		/**
-		 * Check if plugin's menu item is part of a custom top level menu.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return bool
-		 */
-		function has_custom_parent() {
-			return ! $this->_is_top_level && is_string( $this->_parent_slug );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-//		function slug(){
-//			return $this->_menu_slug;
-//		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string $id
-		 * @param bool   $default
-		 *
-		 * @return bool
-		 */
-		function is_submenu_item_visible( $id, $default = true ) {
-			return fs_apply_filter(
-				$this->_plugin_slug,
-				'is_submenu_visible',
-				$this->get_bool_option( $this->_default_submenu_items, $id, $default ),
-				$id
-			);
-		}
-
-		/**
-		 * Calculates admin settings menu slug.
-		 * If plugin's menu slug is a file (e.g. CPT), uses plugin's slug as the menu slug.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string $page
-		 *
-		 * @return string
-		 */
-		function get_slug( $page = '' ) {
-			return ( ( false === strpos( $this->_menu_slug, '.php?' ) ) ?
-				$this->_menu_slug :
-				$this->_plugin_slug ) . ( empty( $page ) ? '' : ( '-' . $page ) );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_parent_slug() {
-			return $this->_parent_slug;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_type() {
-			return $this->_type;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return bool
-		 */
-		function is_cpt() {
-			return ( 0 === strpos( $this->_menu_slug, 'edit.php?post_type=' ) ||
-			         // Back compatibility.
-			         'cpt' === $this->_type
-			);
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_parent_type() {
-			return $this->_parent_type;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_raw_slug() {
-			return $this->_menu_slug;
-		}
-
-		/**
-		 * Get plugin's original menu slug.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_original_menu_slug() {
-			if ( 'cpt' === $this->_type ) {
-				return add_query_arg( array(
-					'post_type' => $this->_menu_slug
-				), 'edit.php' );
-			}
-
-			if ( false === strpos( $this->_menu_slug, '.php?' ) ) {
-				return $this->_menu_slug;
-			} else {
-				return $this->_plugin_slug;
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @return string
-		 */
-		function get_top_level_menu_slug() {
-			return $this->has_custom_parent() ?
-				$this->get_parent_slug() :
-				$this->get_raw_slug();
-		}
-
-		/**
-		 * Is user on plugin's admin activation page.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.8
-		 *
-		 * @return bool
-		 */
-		function is_activation_page() {
-			return isset( $_GET['page'] ) &&
-			       ( ( strtolower( $this->_menu_slug ) === strtolower( $_GET['page'] ) ) ||
-			         ( strtolower( $this->_plugin_slug ) === strtolower( $_GET['page'] ) ) );
-		}
-
-		#region Submenu Override
-
-		/**
-		 * Override submenu's action.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.0
-		 *
-		 * @param string   $parent_slug
-		 * @param string   $menu_slug
-		 * @param callable $function
-		 *
-		 * @return false|string If submenu exist, will return the hook name.
-		 */
-		function override_submenu_action( $parent_slug, $menu_slug, $function ) {
-			global $submenu;
-
-			$menu_slug   = plugin_basename( $menu_slug );
-			$parent_slug = plugin_basename( $parent_slug );
-
-			if ( ! isset( $submenu[ $parent_slug ] ) ) {
-				// Parent menu not exist.
-				return false;
-			}
-
-			$found_submenu_item = false;
-			foreach ( $submenu[ $parent_slug ] as $submenu_item ) {
-				if ( $menu_slug === $submenu_item[2] ) {
-					$found_submenu_item = $submenu_item;
-					break;
-				}
-			}
-
-			if ( false === $found_submenu_item ) {
-				// Submenu item not found.
-				return false;
-			}
-
-			// Remove current function.
-			$hookname = get_plugin_page_hookname( $menu_slug, $parent_slug );
-			remove_all_actions( $hookname );
-
-			// Attach new action.
-			add_action( $hookname, $function );
-
-			return $hookname;
-		}
-
-		#endregion Submenu Override
-
-		#region Top level menu Override
-
-		/**
-		 * Find plugin's admin dashboard main menu item.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.2
-		 *
-		 * @return string[]|false
-		 */
-		private function find_top_level_menu() {
-			global $menu;
-
-			$position   = - 1;
-			$found_menu = false;
-
-			$menu_slug = $this->get_raw_slug();
-
-			$hook_name = get_plugin_page_hookname( $menu_slug, '' );
-			foreach ( $menu as $pos => $m ) {
-				if ( $menu_slug === $m[2] ) {
-					$position   = $pos;
-					$found_menu = $m;
-					break;
-				}
-			}
-
-			if ( false === $found_menu ) {
-				return false;
-			}
-
-			return array(
-				'menu'      => $found_menu,
-				'position'  => $position,
-				'hook_name' => $hook_name
-			);
-		}
-
-		/**
-		 * Remove all sub-menu items.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @return bool If submenu with plugin's menu slug was found.
-		 */
-		private function remove_all_submenu_items() {
-			global $submenu;
-
-			$menu_slug = $this->get_raw_slug();
-
-			if ( ! isset( $submenu[ $menu_slug ] ) ) {
-				return false;
-			}
-
-			$submenu[ $menu_slug ] = array();
-
-			return true;
-		}
-
-		/**
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @return array[string]mixed
-		 */
-		function remove_menu_item() {
-			$this->_logger->entrance();
-
-			// Find main menu item.
-			$menu = $this->find_top_level_menu();
-
-			if ( false === $menu ) {
-				return false;
-			}
-
-			// Remove it with its actions.
-			remove_all_actions( $menu['hook_name'] );
-
-			// Remove all submenu items.
-			$this->remove_all_submenu_items();
-
-			return $menu;
-		}
-
-		/**
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.4
-		 *
-		 * @param callable $function
-		 *
-		 * @return array[string]mixed
-		 */
-		function override_menu_item( $function ) {
-			$found_menu = $this->remove_menu_item();
-
-			if ( false === $found_menu ) {
-				return false;
-			}
-
-			if ( ! $this->is_top_level() || ! $this->is_cpt() ) {
-				$menu_slug = plugin_basename( $this->get_slug() );
-
-				$hookname = get_plugin_page_hookname( $menu_slug, '' );
-
-				// Override menu action.
-				add_action( $hookname, $function );
-			} else {
-				global $menu;
-
-				// Create new top-level menu action.
-				$hookname = add_menu_page(
-					$found_menu['menu'][3],
-					$found_menu['menu'][0],
-					'manage_options',
-					$this->get_slug(),
-					$function,
-					$found_menu['menu'][6],
-					$found_menu['position']
-				);
-
-				// Remove original CPT menu.
-				unset( $menu[ $found_menu['position'] ] );
-			}
-
-			return $hookname;
-		}
-
-		#endregion Top level menu Override
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Admin_Menu_Manager {
+
+		#region Properties
+
+		/**
+		 * @var string
+		 */
+		protected $_plugin_slug;
+
+		/**
+		 * @since 1.0.6
+		 *
+		 * @var string
+		 */
+		private $_menu_slug;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var string
+		 */
+		private $_parent_slug;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var string
+		 */
+		private $_parent_type;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var string
+		 */
+		private $_type;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var bool
+		 */
+		private $_is_top_level;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var bool
+		 */
+		private $_is_override_exact;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var array<string,bool>
+		 */
+		private $_default_submenu_items;
+		/**
+		 * @since 1.1.3
+		 *
+		 * @var string
+		 */
+		private $_first_time_path;
+
+		#endregion Properties
+
+		/**
+		 * @var FS_Logger
+		 */
+		protected $_logger;
+
+		#region Singleton
+
+		/**
+		 * @var FS_Admin_Menu_Manager[]
+		 */
+		private static $_instances = array();
+
+		/**
+		 * @param string $plugin_slug
+		 *
+		 * @return FS_Admin_Notice_Manager
+		 */
+		static function instance( $plugin_slug ) {
+			if ( ! isset( self::$_instances[ $plugin_slug ] ) ) {
+				self::$_instances[ $plugin_slug ] = new FS_Admin_Menu_Manager( $plugin_slug );
+			}
+
+			return self::$_instances[ $plugin_slug ];
+		}
+
+		protected function __construct( $plugin_slug ) {
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $plugin_slug . '_admin_menu', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			$this->_plugin_slug = $plugin_slug;
+		}
+
+		#endregion Singleton
+
+		#region Helpers
+
+		private function get_option( &$options, $key, $default = false ) {
+			return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
+		}
+
+		private function get_bool_option( &$options, $key, $default = false ) {
+			return isset( $options[ $key ] ) && is_bool( $options[ $key ] ) ? $options[ $key ] : $default;
+		}
+
+		#endregion Helpers
+
+		/**
+		 * @param array $menu
+		 * @param bool  $is_addon
+		 */
+		function init( $menu, $is_addon = false ) {
+			$this->_menu_slug = $menu['slug'];
+
+			$this->_default_submenu_items = array();
+			// @deprecated
+			$this->_type              = 'page';
+			$this->_is_top_level      = true;
+			$this->_is_override_exact = false;
+			$this->_parent_slug       = false;
+			// @deprecated
+			$this->_parent_type = 'page';
+
+			if ( ! $is_addon && isset( $menu ) ) {
+				$this->_default_submenu_items = array(
+					'contact' => $this->get_bool_option( $menu, 'contact', true ),
+					'support' => $this->get_bool_option( $menu, 'support', true ),
+					'account' => $this->get_bool_option( $menu, 'account', true ),
+					'pricing' => $this->get_bool_option( $menu, 'pricing', true ),
+					'addons'  => $this->get_bool_option( $menu, 'addons', true ),
+				);
+
+				// @deprecated
+				$this->_type              = $this->get_option( $menu, 'type', 'page' );
+				$this->_is_override_exact = $this->get_bool_option( $menu, 'override_exact' );
+
+				if ( isset( $menu['parent'] ) ) {
+					$this->_parent_slug = $this->get_option( $menu['parent'], 'slug' );
+					// @deprecated
+					$this->_parent_type = $this->get_option( $menu['parent'], 'type', 'page' );
+
+					// If parent's slug is different, then it's NOT a top level menu item.
+					$this->_is_top_level = ( $this->_parent_slug === $this->_menu_slug );
+				} else {
+					/**
+					 * If no parent then top level if:
+					 *  - Has custom admin menu ('page')
+					 *  - CPT menu type ('cpt')
+					 */
+//					$this->_is_top_level = in_array( $this->_type, array(
+//						'cpt',
+//						'page'
+//					) );
+				}
+
+				$this->_first_time_path = $this->get_option( $menu, 'first-path', false );
+				if ( ! empty( $this->_first_time_path ) && is_string( $this->_first_time_path ) ) {
+					$this->_first_time_path = admin_url( $this->_first_time_path, 'admin' );
+				}
+			}
+		}
+
+		/**
+		 * Check if top level menu.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return bool False if submenu item.
+		 */
+		function is_top_level() {
+			return $this->_is_top_level;
+		}
+
+		/**
+		 * Check if the page should be override on exact URL match.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return bool False if submenu item.
+		 */
+		function is_override_exact() {
+			return $this->_is_override_exact;
+		}
+
+
+		/**
+		 * Get the path of the page the user should be forwarded to after first activation.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_first_time_path() {
+			return $this->_first_time_path;
+		}
+
+		/**
+		 * Check if plugin's menu item is part of a custom top level menu.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return bool
+		 */
+		function has_custom_parent() {
+			return ! $this->_is_top_level && is_string( $this->_parent_slug );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+//		function slug(){
+//			return $this->_menu_slug;
+//		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string $id
+		 * @param bool   $default
+		 *
+		 * @return bool
+		 */
+		function is_submenu_item_visible( $id, $default = true ) {
+			return fs_apply_filter(
+				$this->_plugin_slug,
+				'is_submenu_visible',
+				$this->get_bool_option( $this->_default_submenu_items, $id, $default ),
+				$id
+			);
+		}
+
+		/**
+		 * Calculates admin settings menu slug.
+		 * If plugin's menu slug is a file (e.g. CPT), uses plugin's slug as the menu slug.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string $page
+		 *
+		 * @return string
+		 */
+		function get_slug( $page = '' ) {
+			return ( ( false === strpos( $this->_menu_slug, '.php?' ) ) ?
+				$this->_menu_slug :
+				$this->_plugin_slug ) . ( empty( $page ) ? '' : ( '-' . $page ) );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_parent_slug() {
+			return $this->_parent_slug;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_type() {
+			return $this->_type;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return bool
+		 */
+		function is_cpt() {
+			return ( 0 === strpos( $this->_menu_slug, 'edit.php?post_type=' ) ||
+			         // Back compatibility.
+			         'cpt' === $this->_type
+			);
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_parent_type() {
+			return $this->_parent_type;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_raw_slug() {
+			return $this->_menu_slug;
+		}
+
+		/**
+		 * Get plugin's original menu slug.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_original_menu_slug() {
+			if ( 'cpt' === $this->_type ) {
+				return add_query_arg( array(
+					'post_type' => $this->_menu_slug
+				), 'edit.php' );
+			}
+
+			if ( false === strpos( $this->_menu_slug, '.php?' ) ) {
+				return $this->_menu_slug;
+			} else {
+				return $this->_plugin_slug;
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @return string
+		 */
+		function get_top_level_menu_slug() {
+			return $this->has_custom_parent() ?
+				$this->get_parent_slug() :
+				$this->get_raw_slug();
+		}
+
+		/**
+		 * Is user on plugin's admin activation page.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.8
+		 *
+		 * @return bool
+		 */
+		function is_activation_page() {
+			return isset( $_GET['page'] ) &&
+			       ( ( strtolower( $this->_menu_slug ) === strtolower( $_GET['page'] ) ) ||
+			         ( strtolower( $this->_plugin_slug ) === strtolower( $_GET['page'] ) ) );
+		}
+
+		#region Submenu Override
+
+		/**
+		 * Override submenu's action.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.0
+		 *
+		 * @param string   $parent_slug
+		 * @param string   $menu_slug
+		 * @param callable $function
+		 *
+		 * @return false|string If submenu exist, will return the hook name.
+		 */
+		function override_submenu_action( $parent_slug, $menu_slug, $function ) {
+			global $submenu;
+
+			$menu_slug   = plugin_basename( $menu_slug );
+			$parent_slug = plugin_basename( $parent_slug );
+
+			if ( ! isset( $submenu[ $parent_slug ] ) ) {
+				// Parent menu not exist.
+				return false;
+			}
+
+			$found_submenu_item = false;
+			foreach ( $submenu[ $parent_slug ] as $submenu_item ) {
+				if ( $menu_slug === $submenu_item[2] ) {
+					$found_submenu_item = $submenu_item;
+					break;
+				}
+			}
+
+			if ( false === $found_submenu_item ) {
+				// Submenu item not found.
+				return false;
+			}
+
+			// Remove current function.
+			$hookname = get_plugin_page_hookname( $menu_slug, $parent_slug );
+			remove_all_actions( $hookname );
+
+			// Attach new action.
+			add_action( $hookname, $function );
+
+			return $hookname;
+		}
+
+		#endregion Submenu Override
+
+		#region Top level menu Override
+
+		/**
+		 * Find plugin's admin dashboard main menu item.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.2
+		 *
+		 * @return string[]|false
+		 */
+		private function find_top_level_menu() {
+			global $menu;
+
+			$position   = - 1;
+			$found_menu = false;
+
+			$menu_slug = $this->get_raw_slug();
+
+			$hook_name = get_plugin_page_hookname( $menu_slug, '' );
+			foreach ( $menu as $pos => $m ) {
+				if ( $menu_slug === $m[2] ) {
+					$position   = $pos;
+					$found_menu = $m;
+					break;
+				}
+			}
+
+			if ( false === $found_menu ) {
+				return false;
+			}
+
+			return array(
+				'menu'      => $found_menu,
+				'position'  => $position,
+				'hook_name' => $hook_name
+			);
+		}
+
+		/**
+		 * Remove all sub-menu items.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @return bool If submenu with plugin's menu slug was found.
+		 */
+		private function remove_all_submenu_items() {
+			global $submenu;
+
+			$menu_slug = $this->get_raw_slug();
+
+			if ( ! isset( $submenu[ $menu_slug ] ) ) {
+				return false;
+			}
+
+			$submenu[ $menu_slug ] = array();
+
+			return true;
+		}
+
+		/**
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @return array[string]mixed
+		 */
+		function remove_menu_item() {
+			$this->_logger->entrance();
+
+			// Find main menu item.
+			$menu = $this->find_top_level_menu();
+
+			if ( false === $menu ) {
+				return false;
+			}
+
+			// Remove it with its actions.
+			remove_all_actions( $menu['hook_name'] );
+
+			// Remove all submenu items.
+			$this->remove_all_submenu_items();
+
+			return $menu;
+		}
+
+		/**
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.4
+		 *
+		 * @param callable $function
+		 *
+		 * @return array[string]mixed
+		 */
+		function override_menu_item( $function ) {
+			$found_menu = $this->remove_menu_item();
+
+			if ( false === $found_menu ) {
+				return false;
+			}
+
+			if ( ! $this->is_top_level() || ! $this->is_cpt() ) {
+				$menu_slug = plugin_basename( $this->get_slug() );
+
+				$hookname = get_plugin_page_hookname( $menu_slug, '' );
+
+				// Override menu action.
+				add_action( $hookname, $function );
+			} else {
+				global $menu;
+
+				// Remove original CPT menu.
+				unset( $menu[ $found_menu['position'] ] );
+
+				// Create new top-level menu action.
+				$hookname = add_menu_page(
+					$found_menu['menu'][3],
+					$found_menu['menu'][0],
+					'manage_options',
+					$this->get_slug(),
+					$function,
+					$found_menu['menu'][6],
+					$found_menu['position']
+				);
+			}
+
+			return $hookname;
+		}
+
+		#endregion Top level menu Override
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-notice-manager.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-notice-manager.php
index be94dbfc38b2094a751e6f93bea07b937a0e5147..343d5583571924e0d7aa3fa03af5a033a7eb002b 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-notice-manager.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-admin-notice-manager.php
@@ -61,7 +61,7 @@
 				if ( 0 < count( $this->_sticky_storage ) ) {
 					// If there are sticky notices for the current slug, add a callback
 					// to the AJAX action that handles message dismiss.
-					add_action( "wp_ajax_{$slug}_dismiss_notice_action", array(
+					add_action( "wp_ajax_fs_dismiss_notice_action_{$slug}", array(
 						&$this,
 						'dismiss_notice_ajax_callback'
 					) );
@@ -231,7 +231,7 @@
 		 * @author Vova Feldman (@svovaf)
 		 * @since  1.0.7
 		 *
-		 * @param string $ids
+		 * @param string|string[] $ids
 		 */
 		function remove_sticky( $ids ) {
 			if ( ! is_array( $ids ) ) {
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-cache-manager.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-cache-manager.php
index 4868e726f6e436d8e2f8b569fe324d5dfba2a4ef..595f49848f208ed072b248177c7f625d7a5e3f6f 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-cache-manager.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-cache-manager.php
@@ -1,237 +1,237 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.6
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Cache_Manager {
-		/**
-		 * @var FS_Option_Manager
-		 */
-		private $_options;
-		/**
-		 * @var FS_Logger
-		 */
-		private $_logger;
-
-		/**
-		 * @var FS_Cache_Manager[]
-		 */
-		private static $_MANAGERS = array();
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.3
-		 *
-		 * @param string $id
-		 */
-		private function __construct( $id ) {
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			$this->_logger->entrance();
-			$this->_logger->log( 'id = ' . $id );
-
-			$this->_options = FS_Option_Manager::get_manager( $id, true );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param $id
-		 *
-		 * @return FS_Cache_Manager
-		 */
-		static function get_manager( $id ) {
-			$id = strtolower( $id );
-
-			if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
-				self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
-			}
-
-			return self::$_MANAGERS[ $id ];
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @return bool
-		 */
-		function is_empty() {
-			$this->_logger->entrance();
-
-			return $this->_options->is_empty();
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 */
-		function clear() {
-			$this->_logger->entrance();
-
-			$this->_options->clear( true );
-		}
-
-		/**
-		 * Delete cache manager from DB.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		function delete() {
-			$this->_options->delete();
-		}
-
-		/**
-		 * Check if there's a cached item.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $key
-		 *
-		 * @return bool
-		 */
-		function has( $key ) {
-			$cache_entry = $this->_options->get_option( $key, false );
-
-			return ( is_object( $cache_entry ) &&
-			         isset( $cache_entry->timestamp ) &&
-			         is_numeric( $cache_entry->timestamp )
-			);
-		}
-
-		/**
-		 * Check if there's a valid cached item.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $key
-		 *
-		 * @return bool
-		 */
-		function has_valid( $key ) {
-			$cache_entry = $this->_options->get_option( $key, false );
-
-			return ( is_object( $cache_entry ) &&
-			         isset( $cache_entry->timestamp ) &&
-			         is_numeric( $cache_entry->timestamp ) &&
-			         $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
-			);
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $key
-		 * @param mixed  $default
-		 *
-		 * @return mixed
-		 */
-		function get( $key, $default = null ) {
-			$this->_logger->entrance( 'key = ' . $key );
-
-			$cache_entry = $this->_options->get_option( $key, false );
-
-			if ( is_object( $cache_entry ) &&
-			     isset( $cache_entry->timestamp ) &&
-			     is_numeric( $cache_entry->timestamp )
-			) {
-				return $cache_entry->result;
-			}
-
-			return $default;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $key
-		 * @param mixed  $default
-		 *
-		 * @return mixed
-		 */
-		function get_valid( $key, $default = null ) {
-			$this->_logger->entrance( 'key = ' . $key );
-
-			$cache_entry = $this->_options->get_option( $key, false );
-
-			if ( is_object( $cache_entry ) &&
-			     isset( $cache_entry->timestamp ) &&
-			     is_numeric( $cache_entry->timestamp ) &&
-			     $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
-			) {
-				return $cache_entry->result;
-			}
-
-			return $default;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $key
-		 * @param mixed  $value
-		 * @param int    $expiration
-		 */
-		function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
-			$this->_logger->entrance( 'key = ' . $key );
-
-			$cache_entry            = new stdClass();
-			$cache_entry->result    = $value;
-			$cache_entry->timestamp = WP_FS__SCRIPT_START_TIME + $expiration;
-			$this->_options->set_option( $key, $cache_entry, true );
-		}
-
-		/**
-		 * Get cached record expiration, or false if not cached or expired.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.7.3
-		 *
-		 * @param string $key
-		 *
-		 * @return bool|int
-		 */
-		function get_record_expiration( $key ) {
-			$this->_logger->entrance( 'key = ' . $key );
-
-			$cache_entry = $this->_options->get_option( $key, false );
-
-			if ( is_object( $cache_entry ) &&
-			     isset( $cache_entry->timestamp ) &&
-			     is_numeric( $cache_entry->timestamp ) &&
-			     $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
-			) {
-				return $cache_entry->timestamp;
-			}
-
-			return false;
-		}
-
-		/**
-		 * Purge cached item.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.1.6
-		 *
-		 * @param string $key
-		 */
-		function purge( $key ) {
-			$this->_logger->entrance( 'key = ' . $key );
-
-			$this->_options->unset_option( $key, true );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.6
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Cache_Manager {
+		/**
+		 * @var FS_Option_Manager
+		 */
+		private $_options;
+		/**
+		 * @var FS_Logger
+		 */
+		private $_logger;
+
+		/**
+		 * @var FS_Cache_Manager[]
+		 */
+		private static $_MANAGERS = array();
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.3
+		 *
+		 * @param string $id
+		 */
+		private function __construct( $id ) {
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			$this->_logger->entrance();
+			$this->_logger->log( 'id = ' . $id );
+
+			$this->_options = FS_Option_Manager::get_manager( $id, true );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param $id
+		 *
+		 * @return FS_Cache_Manager
+		 */
+		static function get_manager( $id ) {
+			$id = strtolower( $id );
+
+			if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
+				self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
+			}
+
+			return self::$_MANAGERS[ $id ];
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @return bool
+		 */
+		function is_empty() {
+			$this->_logger->entrance();
+
+			return $this->_options->is_empty();
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 */
+		function clear() {
+			$this->_logger->entrance();
+
+			$this->_options->clear( true );
+		}
+
+		/**
+		 * Delete cache manager from DB.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		function delete() {
+			$this->_options->delete();
+		}
+
+		/**
+		 * Check if there's a cached item.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $key
+		 *
+		 * @return bool
+		 */
+		function has( $key ) {
+			$cache_entry = $this->_options->get_option( $key, false );
+
+			return ( is_object( $cache_entry ) &&
+			         isset( $cache_entry->timestamp ) &&
+			         is_numeric( $cache_entry->timestamp )
+			);
+		}
+
+		/**
+		 * Check if there's a valid cached item.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $key
+		 *
+		 * @return bool
+		 */
+		function has_valid( $key ) {
+			$cache_entry = $this->_options->get_option( $key, false );
+
+			return ( is_object( $cache_entry ) &&
+			         isset( $cache_entry->timestamp ) &&
+			         is_numeric( $cache_entry->timestamp ) &&
+			         $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
+			);
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $key
+		 * @param mixed  $default
+		 *
+		 * @return mixed
+		 */
+		function get( $key, $default = null ) {
+			$this->_logger->entrance( 'key = ' . $key );
+
+			$cache_entry = $this->_options->get_option( $key, false );
+
+			if ( is_object( $cache_entry ) &&
+			     isset( $cache_entry->timestamp ) &&
+			     is_numeric( $cache_entry->timestamp )
+			) {
+				return $cache_entry->result;
+			}
+
+			return $default;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $key
+		 * @param mixed  $default
+		 *
+		 * @return mixed
+		 */
+		function get_valid( $key, $default = null ) {
+			$this->_logger->entrance( 'key = ' . $key );
+
+			$cache_entry = $this->_options->get_option( $key, false );
+
+			if ( is_object( $cache_entry ) &&
+			     isset( $cache_entry->timestamp ) &&
+			     is_numeric( $cache_entry->timestamp ) &&
+			     $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
+			) {
+				return $cache_entry->result;
+			}
+
+			return $default;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $key
+		 * @param mixed  $value
+		 * @param int    $expiration
+		 */
+		function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
+			$this->_logger->entrance( 'key = ' . $key );
+
+			$cache_entry            = new stdClass();
+			$cache_entry->result    = $value;
+			$cache_entry->timestamp = WP_FS__SCRIPT_START_TIME + $expiration;
+			$this->_options->set_option( $key, $cache_entry, true );
+		}
+
+		/**
+		 * Get cached record expiration, or false if not cached or expired.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.7.3
+		 *
+		 * @param string $key
+		 *
+		 * @return bool|int
+		 */
+		function get_record_expiration( $key ) {
+			$this->_logger->entrance( 'key = ' . $key );
+
+			$cache_entry = $this->_options->get_option( $key, false );
+
+			if ( is_object( $cache_entry ) &&
+			     isset( $cache_entry->timestamp ) &&
+			     is_numeric( $cache_entry->timestamp ) &&
+			     $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
+			) {
+				return $cache_entry->timestamp;
+			}
+
+			return false;
+		}
+
+		/**
+		 * Purge cached item.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.1.6
+		 *
+		 * @param string $key
+		 */
+		function purge( $key ) {
+			$this->_logger->entrance( 'key = ' . $key );
+
+			$this->_options->unset_option( $key, true );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-key-value-storage.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-key-value-storage.php
index f2d73719d1d454125ad6b27a185cfcf9e9116752..1dd6c2343009a44b552247ba2e385a5a01855293 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-key-value-storage.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-key-value-storage.php
@@ -1,295 +1,326 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.7
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Key_Value_Storage implements ArrayAccess, Iterator, Countable {
-		/**
-		 * @var string
-		 */
-		protected $_id;
-		/**
-		 * @var string
-		 */
-		protected $_slug;
-		/**
-		 * @var array
-		 */
-		protected $_data;
-
-		/**
-		 * @var FS_Plugin_Manager[]
-		 */
-		private static $_instances = array();
-		/**
-		 * @var FS_Logger
-		 */
-		protected $_logger;
-
-		/**
-		 * @param string $id
-		 * @param string $slug
-		 *
-		 * @return FS_Key_Value_Storage
-		 */
-		static function instance( $id, $slug ) {
-			$key = $id . ':' . $slug;
-			if ( ! isset( self::$_instances[ $key ] ) ) {
-				self::$_instances[ $key ] = new FS_Key_Value_Storage( $id, $slug );
-			}
-
-			return self::$_instances[ $key ];
-		}
-
-		protected function __construct( $id, $slug ) {
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			$this->_slug = $slug;
-			$this->_id   = $id;
-			$this->load();
-		}
-
-		protected function get_option_manager() {
-			return FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
-		}
-
-		protected function get_all_data() {
-			return $this->get_option_manager()->get_option( $this->_id, array() );
-		}
-
-		/**
-		 * Load plugin data from local DB.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 */
-		function load() {
-			$all_plugins_data = $this->get_all_data();
-			$this->_data      = isset( $all_plugins_data[ $this->_slug ] ) ?
-				$all_plugins_data[ $this->_slug ] :
-				array();
-		}
-
-		/**
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.7
-		 *
-		 * @param string $key
-		 * @param mixed  $value
-		 * @param bool   $flush
-		 */
-		function store( $key, $value, $flush = true ) {
-			if ( $this->_logger->is_on() ) {
-				$this->_logger->entrance( $key . ' = ' . var_export( $value, true ) );
-			}
-
-			if ( array_key_exists( $key, $this->_data ) && $value === $this->_data[ $key ] ) {
-				// No need to store data if the value wasn't changed.
-				return;
-			}
-
-			$all_data = $this->get_all_data();
-
-			$this->_data[ $key ] = $value;
-
-			$all_data[ $this->_slug ] = $this->_data;
-
-			$options_manager = $this->get_option_manager();
-			$options_manager->set_option( $this->_id, $all_data, $flush );
-		}
-
-		/**
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.7
-		 *
-		 * @param bool     $store
-		 * @param string[] $exceptions Set of keys to keep and not clear.
-		 */
-		function clear_all( $store = true, $exceptions = array() ) {
-			$new_data = array();
-			foreach ( $exceptions as $key ) {
-				if ( isset( $this->_data[ $key ] ) ) {
-					$new_data[ $key ] = $this->_data[ $key ];
-				}
-			}
-
-			$this->_data = $new_data;
-
-			if ( $store ) {
-				$all_data                 = $this->get_all_data();
-				$all_data[ $this->_slug ] = $this->_data;
-				$options_manager          = $this->get_option_manager();
-				$options_manager->set_option( $this->_id, $all_data, true );
-			}
-		}
-
-		/**
-		 * Delete key-value storage.
-		 *
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.9
-		 */
-		function delete() {
-			$this->_data = array();
-
-			$all_data = $this->get_all_data();
-			unset( $all_data[ $this->_slug ] );
-			$options_manager = $this->get_option_manager();
-			$options_manager->set_option( $this->_id, $all_data, true );
-		}
-
-		/**
-		 * @author   Vova Feldman (@svovaf)
-		 * @since    1.0.7
-		 *
-		 * @param string $key
-		 * @param bool   $store
-		 */
-		function remove( $key, $store = true ) {
-			if ( ! array_key_exists( $key, $this->_data ) ) {
-				return;
-			}
-
-			unset( $this->_data[ $key ] );
-
-			if ( $store ) {
-				$all_data                 = $this->get_all_data();
-				$all_data[ $this->_slug ] = $this->_data;
-				$options_manager          = $this->get_option_manager();
-				$options_manager->set_option( $this->_id, $all_data, true );
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @param string $key
-		 * @param mixed  $default
-		 *
-		 * @return bool|\FS_Plugin
-		 */
-		function get( $key, $default = false ) {
-			return array_key_exists( $key, $this->_data ) ?
-				$this->_data[ $key ] :
-				$default;
-		}
-
-
-		/* ArrayAccess + Magic Access (better for refactoring)
-        -----------------------------------------------------------------------------------*/
-		function __set( $k, $v ) {
-			$this->store( $k, $v );
-		}
-
-		function __isset( $k ) {
-			return array_key_exists( $k, $this->_data );
-		}
-
-		function __unset( $k ) {
-			$this->remove( $k );
-		}
-
-		function __get( $k ) {
-			return $this->get( $k, null );
-		}
-
-		function offsetSet( $k, $v ) {
-			if ( is_null( $k ) ) {
-				throw new Exception( 'Can\'t append value to request params.' );
-			} else {
-				$this->{$k} = $v;
-			}
-		}
-
-		function offsetExists( $k ) {
-			return array_key_exists( $k, $this->_data );
-		}
-
-		function offsetUnset( $k ) {
-			unset( $this->$k );
-		}
-
-		function offsetGet( $k ) {
-			return $this->get( $k, null );
-		}
-
-		/**
-		 * (PHP 5 &gt;= 5.0.0)<br/>
-		 * Return the current element
-		 *
-		 * @link http://php.net/manual/en/iterator.current.php
-		 * @return mixed Can return any type.
-		 */
-		public function current() {
-			return current( $this->_data );
-		}
-
-		/**
-		 * (PHP 5 &gt;= 5.0.0)<br/>
-		 * Move forward to next element
-		 *
-		 * @link http://php.net/manual/en/iterator.next.php
-		 * @return void Any returned value is ignored.
-		 */
-		public function next() {
-			next( $this->_data );
-		}
-
-		/**
-		 * (PHP 5 &gt;= 5.0.0)<br/>
-		 * Return the key of the current element
-		 *
-		 * @link http://php.net/manual/en/iterator.key.php
-		 * @return mixed scalar on success, or null on failure.
-		 */
-		public function key() {
-			return key( $this->_data );
-		}
-
-		/**
-		 * (PHP 5 &gt;= 5.0.0)<br/>
-		 * Checks if current position is valid
-		 *
-		 * @link http://php.net/manual/en/iterator.valid.php
-		 * @return boolean The return value will be casted to boolean and then evaluated.
-		 *       Returns true on success or false on failure.
-		 */
-		public function valid() {
-			$key = key( $this->_data );
-
-			return ( $key !== null && $key !== false );
-		}
-
-		/**
-		 * (PHP 5 &gt;= 5.0.0)<br/>
-		 * Rewind the Iterator to the first element
-		 *
-		 * @link http://php.net/manual/en/iterator.rewind.php
-		 * @return void Any returned value is ignored.
-		 */
-		public function rewind() {
-			reset( $this->_data );
-		}
-
-		/**
-		 * (PHP 5 &gt;= 5.1.0)<br/>
-		 * Count elements of an object
-		 *
-		 * @link http://php.net/manual/en/countable.count.php
-		 * @return int The custom count as an integer.
-		 *       </p>
-		 *       <p>
-		 *       The return value is cast to an integer.
-		 */
-		public function count() {
-			return count( $this->_data );
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.7
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * Class FS_Key_Value_Storage
+	 *
+	 * @property int           $install_timestamp
+	 * @property int           $activation_timestamp
+	 * @property int           $sync_timestamp
+	 * @property object        $sync_cron
+	 * @property int           $install_sync_timestamp
+	 * @property array         $connectivity_test
+	 * @property array         $is_on
+	 * @property object        $trial_plan
+	 * @property bool          $has_trial_plan
+	 * @property bool          $trial_promotion_shown
+	 * @property string        $sdk_version
+	 * @property string        $sdk_last_version
+	 * @property bool          $sdk_upgrade_mode
+	 * @property bool          $sdk_downgrade_mode
+	 * @property bool          $plugin_upgrade_mode
+	 * @property bool          $plugin_downgrade_mode
+	 * @property string        $plugin_version
+	 * @property string        $plugin_last_version
+	 * @property bool          $is_plugin_new_install
+	 * @property bool          $was_plugin_loaded
+	 * @property object        $plugin_main_file
+	 * @property bool          $prev_is_premium
+	 * @property array         $is_anonymous
+	 * @property bool          $is_pending_activation
+	 * @property bool          $sticky_optin_added
+	 * @property object        $uninstall_reason
+	 * @property object        $subscription
+	 */
+	class FS_Key_Value_Storage implements ArrayAccess, Iterator, Countable {
+		/**
+		 * @var string
+		 */
+		protected $_id;
+		/**
+		 * @var string
+		 */
+		protected $_slug;
+		/**
+		 * @var array
+		 */
+		protected $_data;
+
+		/**
+		 * @var FS_Plugin_Manager[]
+		 */
+		private static $_instances = array();
+		/**
+		 * @var FS_Logger
+		 */
+		protected $_logger;
+
+		/**
+		 * @param string $id
+		 * @param string $slug
+		 *
+		 * @return FS_Key_Value_Storage
+		 */
+		static function instance( $id, $slug ) {
+			$key = $id . ':' . $slug;
+			if ( ! isset( self::$_instances[ $key ] ) ) {
+				self::$_instances[ $key ] = new FS_Key_Value_Storage( $id, $slug );
+			}
+
+			return self::$_instances[ $key ];
+		}
+
+		protected function __construct( $id, $slug ) {
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			$this->_slug = $slug;
+			$this->_id   = $id;
+			$this->load();
+		}
+
+		protected function get_option_manager() {
+			return FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
+		}
+
+		protected function get_all_data() {
+			return $this->get_option_manager()->get_option( $this->_id, array() );
+		}
+
+		/**
+		 * Load plugin data from local DB.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 */
+		function load() {
+			$all_plugins_data = $this->get_all_data();
+			$this->_data      = isset( $all_plugins_data[ $this->_slug ] ) ?
+				$all_plugins_data[ $this->_slug ] :
+				array();
+		}
+
+		/**
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.7
+		 *
+		 * @param string $key
+		 * @param mixed  $value
+		 * @param bool   $flush
+		 */
+		function store( $key, $value, $flush = true ) {
+			if ( $this->_logger->is_on() ) {
+				$this->_logger->entrance( $key . ' = ' . var_export( $value, true ) );
+			}
+
+			if ( array_key_exists( $key, $this->_data ) && $value === $this->_data[ $key ] ) {
+				// No need to store data if the value wasn't changed.
+				return;
+			}
+
+			$all_data = $this->get_all_data();
+
+			$this->_data[ $key ] = $value;
+
+			$all_data[ $this->_slug ] = $this->_data;
+
+			$options_manager = $this->get_option_manager();
+			$options_manager->set_option( $this->_id, $all_data, $flush );
+		}
+
+		/**
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.7
+		 *
+		 * @param bool     $store
+		 * @param string[] $exceptions Set of keys to keep and not clear.
+		 */
+		function clear_all( $store = true, $exceptions = array() ) {
+			$new_data = array();
+			foreach ( $exceptions as $key ) {
+				if ( isset( $this->_data[ $key ] ) ) {
+					$new_data[ $key ] = $this->_data[ $key ];
+				}
+			}
+
+			$this->_data = $new_data;
+
+			if ( $store ) {
+				$all_data                 = $this->get_all_data();
+				$all_data[ $this->_slug ] = $this->_data;
+				$options_manager          = $this->get_option_manager();
+				$options_manager->set_option( $this->_id, $all_data, true );
+			}
+		}
+
+		/**
+		 * Delete key-value storage.
+		 *
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.9
+		 */
+		function delete() {
+			$this->_data = array();
+
+			$all_data = $this->get_all_data();
+			unset( $all_data[ $this->_slug ] );
+			$options_manager = $this->get_option_manager();
+			$options_manager->set_option( $this->_id, $all_data, true );
+		}
+
+		/**
+		 * @author   Vova Feldman (@svovaf)
+		 * @since    1.0.7
+		 *
+		 * @param string $key
+		 * @param bool   $store
+		 */
+		function remove( $key, $store = true ) {
+			if ( ! array_key_exists( $key, $this->_data ) ) {
+				return;
+			}
+
+			unset( $this->_data[ $key ] );
+
+			if ( $store ) {
+				$all_data                 = $this->get_all_data();
+				$all_data[ $this->_slug ] = $this->_data;
+				$options_manager          = $this->get_option_manager();
+				$options_manager->set_option( $this->_id, $all_data, true );
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @param string $key
+		 * @param mixed  $default
+		 *
+		 * @return bool|\FS_Plugin
+		 */
+		function get( $key, $default = false ) {
+			return array_key_exists( $key, $this->_data ) ?
+				$this->_data[ $key ] :
+				$default;
+		}
+
+
+		/* ArrayAccess + Magic Access (better for refactoring)
+        -----------------------------------------------------------------------------------*/
+		function __set( $k, $v ) {
+			$this->store( $k, $v );
+		}
+
+		function __isset( $k ) {
+			return array_key_exists( $k, $this->_data );
+		}
+
+		function __unset( $k ) {
+			$this->remove( $k );
+		}
+
+		function __get( $k ) {
+			return $this->get( $k, null );
+		}
+
+		function offsetSet( $k, $v ) {
+			if ( is_null( $k ) ) {
+				throw new Exception( 'Can\'t append value to request params.' );
+			} else {
+				$this->{$k} = $v;
+			}
+		}
+
+		function offsetExists( $k ) {
+			return array_key_exists( $k, $this->_data );
+		}
+
+		function offsetUnset( $k ) {
+			unset( $this->$k );
+		}
+
+		function offsetGet( $k ) {
+			return $this->get( $k, null );
+		}
+
+		/**
+		 * (PHP 5 &gt;= 5.0.0)<br/>
+		 * Return the current element
+		 *
+		 * @link http://php.net/manual/en/iterator.current.php
+		 * @return mixed Can return any type.
+		 */
+		public function current() {
+			return current( $this->_data );
+		}
+
+		/**
+		 * (PHP 5 &gt;= 5.0.0)<br/>
+		 * Move forward to next element
+		 *
+		 * @link http://php.net/manual/en/iterator.next.php
+		 * @return void Any returned value is ignored.
+		 */
+		public function next() {
+			next( $this->_data );
+		}
+
+		/**
+		 * (PHP 5 &gt;= 5.0.0)<br/>
+		 * Return the key of the current element
+		 *
+		 * @link http://php.net/manual/en/iterator.key.php
+		 * @return mixed scalar on success, or null on failure.
+		 */
+		public function key() {
+			return key( $this->_data );
+		}
+
+		/**
+		 * (PHP 5 &gt;= 5.0.0)<br/>
+		 * Checks if current position is valid
+		 *
+		 * @link http://php.net/manual/en/iterator.valid.php
+		 * @return boolean The return value will be casted to boolean and then evaluated.
+		 *       Returns true on success or false on failure.
+		 */
+		public function valid() {
+			$key = key( $this->_data );
+
+			return ( $key !== null && $key !== false );
+		}
+
+		/**
+		 * (PHP 5 &gt;= 5.0.0)<br/>
+		 * Rewind the Iterator to the first element
+		 *
+		 * @link http://php.net/manual/en/iterator.rewind.php
+		 * @return void Any returned value is ignored.
+		 */
+		public function rewind() {
+			reset( $this->_data );
+		}
+
+		/**
+		 * (PHP 5 &gt;= 5.1.0)<br/>
+		 * Count elements of an object
+		 *
+		 * @link http://php.net/manual/en/countable.count.php
+		 * @return int The custom count as an integer.
+		 *       </p>
+		 *       <p>
+		 *       The return value is cast to an integer.
+		 */
+		public function count() {
+			return count( $this->_data );
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-license-manager.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-license-manager.php
index ca27c463190568997c59d6ede719410307936d9d..8fa1bc76b2882e8f1006559a97aefff48d648ca1 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-license-manager.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-license-manager.php
@@ -90,6 +90,9 @@
 		static function has_premium_license( $licenses ) {
 			if ( is_array( $licenses ) ) {
 				foreach ( $licenses as $license ) {
+					/**
+					 * @var FS_Plugin_License $license
+					 */
 					if ( ! $license->is_utilized() && $license->is_features_enabled() ) {
 						return true;
 					}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-option-manager.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-option-manager.php
index 3d60b3990e10b210ea7e0d17a29a0e68798e9c4a..19c7069646920ace00de19d94ca6df7571d386c3 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-option-manager.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-option-manager.php
@@ -1,302 +1,302 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * 3-layer lazy options manager.
-	 *      layer 3: Memory
-	 *      layer 2: Cache (if there's any caching plugin and if WP_FS__DEBUG_SDK is FALSE)
-	 *      layer 1: Database (options table). All options stored as one option record in the DB to reduce number of DB
-	 *      queries.
-	 *
-	 * If load() is not explicitly called, starts as empty manager. Same thing about saving the data - you have to
-	 * explicitly call store().
-	 *
-	 * Class Freemius_Option_Manager
-	 */
-	class FS_Option_Manager {
-		/**
-		 * @var string
-		 */
-		private $_id;
-		/**
-		 * @var array
-		 */
-		private $_options;
-		/**
-		 * @var FS_Logger
-		 */
-		private $_logger;
-
-		/**
-		 * @var FS_Option_Manager[]
-		 */
-		private static $_MANAGERS = array();
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param string $id
-		 * @param bool   $load
-		 */
-		private function __construct( $id, $load = false ) {
-			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_opt_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
-
-			$this->_logger->entrance();
-			$this->_logger->log( 'id = ' . $id );
-
-			$this->_id = $id;
-
-			if ( $load ) {
-				$this->load();
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param $id
-		 * @param $load
-		 *
-		 * @return FS_Option_Manager
-		 */
-		static function get_manager( $id, $load = false ) {
-			$id = strtolower( $id );
-
-			if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
-				self::$_MANAGERS[ $id ] = new FS_Option_Manager( $id, $load );
-			} // If load required but not yet loaded, load.
-			else if ( $load && ! self::$_MANAGERS[ $id ]->is_loaded() ) {
-				self::$_MANAGERS[ $id ]->load();
-			}
-
-			return self::$_MANAGERS[ $id ];
-		}
-
-		private function _get_option_manager_name() {
-//			return WP_FS__SLUG . '_' . $this->_id;
-			return $this->_id;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param bool $flush
-		 */
-		function load( $flush = false ) {
-			$this->_logger->entrance();
-
-			$option_name = $this->_get_option_manager_name();
-
-			if ( $flush || ! isset( $this->_options ) ) {
-				if ( isset( $this->_options ) ) {
-					// Clear prev options.
-					$this->clear();
-				}
-
-				if ( ! WP_FS__DEBUG_SDK ) {
-					$this->_options = wp_cache_get( $option_name, WP_FS__SLUG );
-				}
-
-//				$this->_logger->info('wp_cache_get = ' . var_export($this->_options, true));
-
-//				if ( is_array( $this->_options ) ) {
-//					$this->clear();
-//				}
-
-				$cached = true;
-
-				if ( empty( $this->_options ) ) {
-					$this->_options = get_option( $option_name );
-
-					if ( is_string( $this->_options ) ) {
-						$this->_options = json_decode( $this->_options );
-					}
-
-//					$this->_logger->info('get_option = ' . var_export($this->_options, true));
-
-					if ( false === $this->_options ) {
-						$this->clear();
-					}
-
-					$cached = false;
-				}
-
-				if ( ! WP_FS__DEBUG_SDK && ! $cached ) // Set non encoded cache.
-				{
-					wp_cache_set( $option_name, $this->_options, WP_FS__SLUG );
-				}
-			}
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @return bool
-		 */
-		function is_loaded() {
-			return isset( $this->_options );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @return bool
-		 */
-		function is_empty() {
-			return ( $this->is_loaded() && false === $this->_options );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param bool $flush
-		 */
-		function clear( $flush = false ) {
-			$this->_logger->entrance();
-
-			$this->_options = array();
-
-			if ( $flush ) {
-				$this->store();
-			}
-		}
-
-		/**
-		 * Delete options manager from DB.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 */
-		function delete() {
-			delete_option( $this->_get_option_manager_name() );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.6
-		 *
-		 * @param string $option
-		 *
-		 * @return bool
-		 */
-		function has_option( $option ) {
-			return array_key_exists( $option, $this->_options );
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param string $option
-		 * @param mixed  $default
-		 *
-		 * @return mixed
-		 */
-		function get_option( $option, $default = null ) {
-			$this->_logger->entrance( 'option = ' . $option );
-
-			if ( is_array( $this->_options ) ) {
-				return isset( $this->_options[ $option ] ) ? $this->_options[ $option ] : $default;
-			} else if ( is_object( $this->_options ) ) {
-				return isset( $this->_options->{$option} ) ? $this->_options->{$option} : $default;
-			}
-
-			return $default;
-		}
-
-		/**
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param string $option
-		 * @param mixed  $value
-		 * @param bool   $flush
-		 */
-		function set_option( $option, $value, $flush = false ) {
-			$this->_logger->entrance( 'option = ' . $option );
-
-			if ( ! $this->is_loaded() ) {
-				$this->clear();
-			}
-
-			if ( is_array( $this->_options ) ) {
-				$this->_options[ $option ] = $value;
-			} else if ( is_object( $this->_options ) ) {
-				$this->_options->{$option} = $value;
-			}
-
-			if ( $flush ) {
-				$this->store();
-			}
-		}
-
-		/**
-		 * Unset option.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 *
-		 * @param string $option
-		 * @param bool   $flush
-		 */
-		function unset_option( $option, $flush = false ) {
-			$this->_logger->entrance( 'option = ' . $option );
-
-			if ( is_array( $this->_options ) ) {
-				if ( ! isset( $this->_options[ $option ] ) ) {
-					return;
-				}
-
-				unset( $this->_options[ $option ] );
-
-			} else if ( is_object( $this->_options ) ) {
-				if ( ! isset( $this->_options->{$option} ) ) {
-					return;
-				}
-
-				unset( $this->_options->{$option} );
-			}
-
-			if ( $flush ) {
-				$this->store();
-			}
-		}
-
-		/**
-		 * Dump options to database.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.3
-		 */
-		function store() {
-			$this->_logger->entrance();
-
-			$option_name = $this->_get_option_manager_name();
-
-			if ( $this->_logger->is_on() ) {
-				$this->_logger->info( $option_name . ' = ' . var_export( $this->_options, true ) );
-			}
-
-			// Update DB.
-			update_option( $option_name, $this->_options );
-
-			if ( ! WP_FS__DEBUG_SDK ) {
-				wp_cache_set( $option_name, $this->_options, WP_FS__SLUG );
-			}
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * 3-layer lazy options manager.
+	 *      layer 3: Memory
+	 *      layer 2: Cache (if there's any caching plugin and if WP_FS__DEBUG_SDK is FALSE)
+	 *      layer 1: Database (options table). All options stored as one option record in the DB to reduce number of DB
+	 *      queries.
+	 *
+	 * If load() is not explicitly called, starts as empty manager. Same thing about saving the data - you have to
+	 * explicitly call store().
+	 *
+	 * Class Freemius_Option_Manager
+	 */
+	class FS_Option_Manager {
+		/**
+		 * @var string
+		 */
+		private $_id;
+		/**
+		 * @var array
+		 */
+		private $_options;
+		/**
+		 * @var FS_Logger
+		 */
+		private $_logger;
+
+		/**
+		 * @var FS_Option_Manager[]
+		 */
+		private static $_MANAGERS = array();
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param string $id
+		 * @param bool   $load
+		 */
+		private function __construct( $id, $load = false ) {
+			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_opt_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
+
+			$this->_logger->entrance();
+			$this->_logger->log( 'id = ' . $id );
+
+			$this->_id = $id;
+
+			if ( $load ) {
+				$this->load();
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param $id
+		 * @param $load
+		 *
+		 * @return FS_Option_Manager
+		 */
+		static function get_manager( $id, $load = false ) {
+			$id = strtolower( $id );
+
+			if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
+				self::$_MANAGERS[ $id ] = new FS_Option_Manager( $id, $load );
+			} // If load required but not yet loaded, load.
+			else if ( $load && ! self::$_MANAGERS[ $id ]->is_loaded() ) {
+				self::$_MANAGERS[ $id ]->load();
+			}
+
+			return self::$_MANAGERS[ $id ];
+		}
+
+		private function _get_option_manager_name() {
+//			return WP_FS__SLUG . '_' . $this->_id;
+			return $this->_id;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param bool $flush
+		 */
+		function load( $flush = false ) {
+			$this->_logger->entrance();
+
+			$option_name = $this->_get_option_manager_name();
+
+			if ( $flush || ! isset( $this->_options ) ) {
+				if ( isset( $this->_options ) ) {
+					// Clear prev options.
+					$this->clear();
+				}
+
+				if ( ! WP_FS__DEBUG_SDK ) {
+					$this->_options = wp_cache_get( $option_name, WP_FS__SLUG );
+				}
+
+//				$this->_logger->info('wp_cache_get = ' . var_export($this->_options, true));
+
+//				if ( is_array( $this->_options ) ) {
+//					$this->clear();
+//				}
+
+				$cached = true;
+
+				if ( empty( $this->_options ) ) {
+					$this->_options = get_option( $option_name );
+
+					if ( is_string( $this->_options ) ) {
+						$this->_options = json_decode( $this->_options );
+					}
+
+//					$this->_logger->info('get_option = ' . var_export($this->_options, true));
+
+					if ( false === $this->_options ) {
+						$this->clear();
+					}
+
+					$cached = false;
+				}
+
+				if ( ! WP_FS__DEBUG_SDK && ! $cached ) // Set non encoded cache.
+				{
+					wp_cache_set( $option_name, $this->_options, WP_FS__SLUG );
+				}
+			}
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @return bool
+		 */
+		function is_loaded() {
+			return isset( $this->_options );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @return bool
+		 */
+		function is_empty() {
+			return ( $this->is_loaded() && false === $this->_options );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param bool $flush
+		 */
+		function clear( $flush = false ) {
+			$this->_logger->entrance();
+
+			$this->_options = array();
+
+			if ( $flush ) {
+				$this->store();
+			}
+		}
+
+		/**
+		 * Delete options manager from DB.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 */
+		function delete() {
+			delete_option( $this->_get_option_manager_name() );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.6
+		 *
+		 * @param string $option
+		 *
+		 * @return bool
+		 */
+		function has_option( $option ) {
+			return array_key_exists( $option, $this->_options );
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param string $option
+		 * @param mixed  $default
+		 *
+		 * @return mixed
+		 */
+		function get_option( $option, $default = null ) {
+			$this->_logger->entrance( 'option = ' . $option );
+
+			if ( is_array( $this->_options ) ) {
+				return isset( $this->_options[ $option ] ) ? $this->_options[ $option ] : $default;
+			} else if ( is_object( $this->_options ) ) {
+				return isset( $this->_options->{$option} ) ? $this->_options->{$option} : $default;
+			}
+
+			return $default;
+		}
+
+		/**
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param string $option
+		 * @param mixed  $value
+		 * @param bool   $flush
+		 */
+		function set_option( $option, $value, $flush = false ) {
+			$this->_logger->entrance( 'option = ' . $option );
+
+			if ( ! $this->is_loaded() ) {
+				$this->clear();
+			}
+
+			if ( is_array( $this->_options ) ) {
+				$this->_options[ $option ] = $value;
+			} else if ( is_object( $this->_options ) ) {
+				$this->_options->{$option} = $value;
+			}
+
+			if ( $flush ) {
+				$this->store();
+			}
+		}
+
+		/**
+		 * Unset option.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 *
+		 * @param string $option
+		 * @param bool   $flush
+		 */
+		function unset_option( $option, $flush = false ) {
+			$this->_logger->entrance( 'option = ' . $option );
+
+			if ( is_array( $this->_options ) ) {
+				if ( ! isset( $this->_options[ $option ] ) ) {
+					return;
+				}
+
+				unset( $this->_options[ $option ] );
+
+			} else if ( is_object( $this->_options ) ) {
+				if ( ! isset( $this->_options->{$option} ) ) {
+					return;
+				}
+
+				unset( $this->_options->{$option} );
+			}
+
+			if ( $flush ) {
+				$this->store();
+			}
+		}
+
+		/**
+		 * Dump options to database.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.3
+		 */
+		function store() {
+			$this->_logger->entrance();
+
+			$option_name = $this->_get_option_manager_name();
+
+			if ( $this->_logger->is_on() ) {
+				$this->_logger->info( $option_name . ' = ' . var_export( $this->_options, true ) );
+			}
+
+			// Update DB.
+			update_option( $option_name, $this->_options );
+
+			if ( ! WP_FS__DEBUG_SDK ) {
+				wp_cache_set( $option_name, $this->_options, WP_FS__SLUG );
+			}
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-plan-manager.php b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-plan-manager.php
index 9e8608126acb681d3c8f41f5a3d33d2e9a12ff15..ddd9015ba98ea8a02cfa7be480b9448baac0539f 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-plan-manager.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/managers/class-fs-plan-manager.php
@@ -1,162 +1,162 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.6
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	class FS_Plan_Manager {
-		/**
-		 * @var FS_Plan_Manager
-		 */
-		private static $_instance;
-
-		/**
-		 * @return FS_Plan_Manager
-		 */
-		static function instance() {
-			if ( ! isset( self::$_instance ) ) {
-				self::$_instance = new FS_Plan_Manager();
-			}
-
-			return self::$_instance;
-		}
-
-		private function __construct() {
-		}
-
-		/**
-		 * @param FS_Plugin_License[] $licenses
-		 *
-		 * @return bool
-		 */
-		function has_premium_license( $licenses ) {
-			if ( is_array( $licenses ) ) {
-				/**
-				 * @var FS_Plugin_License[] $licenses
-				 */
-				foreach ( $licenses as $license ) {
-					if ( ! $license->is_utilized() && $license->is_features_enabled() ) {
-						return true;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Check if plugin has any paid plans.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @param FS_Plugin_Plan[] $plans
-		 *
-		 * @return bool
-		 */
-		function has_paid_plan( $plans ) {
-			if ( ! is_array( $plans ) || 0 === count( $plans ) ) {
-				return false;
-			}
-
-			/**
-			 * @var FS_Plugin_Plan[] $plans
-			 */
-			for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
-				if ( ! $plans[ $i ]->is_free() ) {
-					return true;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Check if plugin has any free plan, or is it premium only.
-		 *
-		 * Note: If no plans configured, assume plugin is free.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.7
-		 *
-		 * @param FS_Plugin_Plan[] $plans
-		 *
-		 * @return bool
-		 */
-		function has_free_plan( $plans ) {
-			if ( ! is_array( $plans ) || 0 === count( $plans ) ) {
-				return true;
-			}
-
-			/**
-			 * @var FS_Plugin_Plan[] $plans
-			 */
-			for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
-				if ( $plans[ $i ]->is_free() ) {
-					return true;
-				}
-			}
-
-			return false;
-		}
-
-		/**
-		 * Find all plans that have trial.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param FS_Plugin_Plan[] $plans
-		 *
-		 * @return FS_Plugin_Plan[]
-		 */
-		function get_trial_plans( $plans ) {
-			$trial_plans = array();
-
-			if ( is_array( $plans ) && 0 < count( $plans ) ) {
-				/**
-				 * @var FS_Plugin_Plan[] $plans
-				 */
-				for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
-					if ( $plans[ $i ]->has_trial() ) {
-						$trial_plans[] = $plans[ $i ];
-					}
-				}
-			}
-
-			return $trial_plans;
-		}
-
-		/**
-		 * Check if plugin has any trial plan.
-		 *
-		 * @author Vova Feldman (@svovaf)
-		 * @since  1.0.9
-		 *
-		 * @param FS_Plugin_Plan[] $plans
-		 *
-		 * @return bool
-		 */
-		function has_trial_plan( $plans ) {
-			if ( ! is_array( $plans ) || 0 === count( $plans ) ) {
-				return true;
-			}
-
-			/**
-			 * @var FS_Plugin_Plan[] $plans
-			 */
-			for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
-				if ( $plans[ $i ]->has_trial() ) {
-					return true;
-				}
-			}
-
-			return false;
-		}
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.6
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	class FS_Plan_Manager {
+		/**
+		 * @var FS_Plan_Manager
+		 */
+		private static $_instance;
+
+		/**
+		 * @return FS_Plan_Manager
+		 */
+		static function instance() {
+			if ( ! isset( self::$_instance ) ) {
+				self::$_instance = new FS_Plan_Manager();
+			}
+
+			return self::$_instance;
+		}
+
+		private function __construct() {
+		}
+
+		/**
+		 * @param FS_Plugin_License[] $licenses
+		 *
+		 * @return bool
+		 */
+		function has_premium_license( $licenses ) {
+			if ( is_array( $licenses ) ) {
+				/**
+				 * @var FS_Plugin_License[] $licenses
+				 */
+				foreach ( $licenses as $license ) {
+					if ( ! $license->is_utilized() && $license->is_features_enabled() ) {
+						return true;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Check if plugin has any paid plans.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @param FS_Plugin_Plan[] $plans
+		 *
+		 * @return bool
+		 */
+		function has_paid_plan( $plans ) {
+			if ( ! is_array( $plans ) || 0 === count( $plans ) ) {
+				return false;
+			}
+
+			/**
+			 * @var FS_Plugin_Plan[] $plans
+			 */
+			for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
+				if ( ! $plans[ $i ]->is_free() ) {
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Check if plugin has any free plan, or is it premium only.
+		 *
+		 * Note: If no plans configured, assume plugin is free.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.7
+		 *
+		 * @param FS_Plugin_Plan[] $plans
+		 *
+		 * @return bool
+		 */
+		function has_free_plan( $plans ) {
+			if ( ! is_array( $plans ) || 0 === count( $plans ) ) {
+				return true;
+			}
+
+			/**
+			 * @var FS_Plugin_Plan[] $plans
+			 */
+			for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
+				if ( $plans[ $i ]->is_free() ) {
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		 * Find all plans that have trial.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param FS_Plugin_Plan[] $plans
+		 *
+		 * @return FS_Plugin_Plan[]
+		 */
+		function get_trial_plans( $plans ) {
+			$trial_plans = array();
+
+			if ( is_array( $plans ) && 0 < count( $plans ) ) {
+				/**
+				 * @var FS_Plugin_Plan[] $plans
+				 */
+				for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
+					if ( $plans[ $i ]->has_trial() ) {
+						$trial_plans[] = $plans[ $i ];
+					}
+				}
+			}
+
+			return $trial_plans;
+		}
+
+		/**
+		 * Check if plugin has any trial plan.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since  1.0.9
+		 *
+		 * @param FS_Plugin_Plan[] $plans
+		 *
+		 * @return bool
+		 */
+		function has_trial_plan( $plans ) {
+			if ( ! is_array( $plans ) || 0 === count( $plans ) ) {
+				return true;
+			}
+
+			/**
+			 * @var FS_Plugin_Plan[] $plans
+			 */
+			for ( $i = 0, $len = count( $plans ); $i < $len; $i ++ ) {
+				if ( $plans[ $i ]->has_trial() ) {
+					return true;
+				}
+			}
+
+			return false;
+		}
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/Freemius.php b/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/Freemius.php
index 64cac3237c254c858786b3b254d815295cc70522..2fc58d6f56332e694cade55997ace40a3c86f226 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/Freemius.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/Freemius.php
@@ -328,7 +328,9 @@
 				$opts[ CURLOPT_RETURNTRANSFER ] = true;
 			}
 
-			$opts[ CURLOPT_URL ]           = Freemius_Api::GetUrl( $pCanonizedPath, $pIsSandbox );
+			$request_url = Freemius_Api::GetUrl( $pCanonizedPath, $pIsSandbox );
+
+			$opts[ CURLOPT_URL ]           = $request_url;
 			$opts[ CURLOPT_CUSTOMREQUEST ] = $pMethod;
 
 			$resource = explode( '?', $pCanonizedPath );
@@ -337,7 +339,7 @@
 			// for 2 seconds if the server does not support this header.
 			$opts[ CURLOPT_HTTPHEADER ][] = 'Expect:';
 
-			if ( 'https' === substr( strtolower( $pCanonizedPath ), 0, 5 ) ) {
+			if ( 'https' === substr( strtolower( $request_url ), 0, 5 ) ) {
 				$opts[ CURLOPT_SSL_VERIFYHOST ] = false;
 				$opts[ CURLOPT_SSL_VERIFYPEER ] = false;
 			}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/FreemiusBase.php b/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/FreemiusBase.php
index efe58156709364c445f21f6112436380ebae3a56..e5b1da55320d612a93c5ab4cce5b0f149f4e516d 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/FreemiusBase.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/sdk/FreemiusBase.php
@@ -33,7 +33,7 @@
 	);
 
 	foreach ( $exceptions as $e ) {
-		require FS_SDK__EXCEPTIONS_PATH . $e . '.php';
+		require_once FS_SDK__EXCEPTIONS_PATH . $e . '.php';
 	}
 
 	abstract class Freemius_Api_Base {
diff --git a/wp-content/plugins/nextgen-gallery/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php b/wp-content/plugins/nextgen-gallery/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php
index a94f9899de5d1575b43e19406cc7d5cf8cfe9023..2f0a67aad8891c922c79fec25ffd46beca4d11bf 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php
@@ -1,45 +1,45 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * Find the plugin main file path based on any give file inside the plugin's folder.
-	 *
-	 * @author Vova Feldman (@svovaf)
-	 * @since  1.1.7.1
-	 *
-	 * @param string $file Absolute path to a file inside a plugin's folder.
-	 *
-	 * @return string
-	 */
-	function fs_find_direct_caller_plugin_file( $file ) {
-		/**
-		 * All the code below will be executed once on activation.
-		 * If the user changes the main plugin's file name, the file_exists()
-		 * will catch it.
-		 */
-		if ( ! function_exists( 'get_plugins' ) ) {
-			require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
-		}
-
-		$all_plugins = get_plugins();
-
-		$file_real_path = fs_normalize_path( realpath( $file ) );
-
-		// Get active plugin's main files real full names (might be symlinks).
-		foreach ( $all_plugins as $relative_path => &$data ) {
-			if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) ) ) ) {
-				return $relative_path;
-			}
-		}
-
-		return null;
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * Find the plugin main file path based on any give file inside the plugin's folder.
+	 *
+	 * @author Vova Feldman (@svovaf)
+	 * @since  1.1.7.1
+	 *
+	 * @param string $file Absolute path to a file inside a plugin's folder.
+	 *
+	 * @return string
+	 */
+	function fs_find_direct_caller_plugin_file( $file ) {
+		/**
+		 * All the code below will be executed once on activation.
+		 * If the user changes the main plugin's file name, the file_exists()
+		 * will catch it.
+		 */
+		if ( ! function_exists( 'get_plugins' ) ) {
+			require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
+		}
+
+		$all_plugins = get_plugins();
+
+		$file_real_path = fs_normalize_path( realpath( $file ) );
+
+		// Get active plugin's main files real full names (might be symlinks).
+		foreach ( $all_plugins as $relative_path => &$data ) {
+			if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) ) ) ) {
+				return $relative_path;
+			}
+		}
+
+		return null;
 	}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-en.mo b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-en.mo
new file mode 100644
index 0000000000000000000000000000000000000000..15507062496997d1e5d93ca3730618f075ddf270
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-en.mo differ
diff --git a/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-en.po b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-en.po
new file mode 100644
index 0000000000000000000000000000000000000000..2ae39b49a7512094ac0ba8ffdbeaeeddfb0bf1fe
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-en.po
@@ -0,0 +1,1396 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language: \n"
+"Language-Team: \n"
+"Content-Type: \n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+# Copyright (C) 2016 freemius
+# This file is distributed under the same license as the freemius package.
+#: includes/i18n.php:41, includes/i18n.php:55
+msgid "Yes - I'm in!"
+msgstr "Yes - I'm in!"
+
+#: includes/i18n.php:43, includes/i18n.php:57
+msgid "Not today"
+msgstr "Not today"
+
+#: includes/i18n.php:69
+msgid "Account"
+msgstr "Account"
+
+#: includes/i18n.php:71
+msgid "Add On"
+msgstr "Add On"
+
+#: includes/i18n.php:73
+msgid "Contact Us"
+msgstr "Contact Us"
+
+#: includes/i18n.php:75
+msgid "Contact Support"
+msgstr "Contact Support"
+
+#: includes/i18n.php:77
+msgid "Change Ownership"
+msgstr "Change Ownership"
+
+#: includes/i18n.php:79
+msgid "Support"
+msgstr "Support"
+
+#: includes/i18n.php:81
+msgid "Support Forum"
+msgstr "Support Forum"
+
+#: includes/i18n.php:83
+msgid "Add Ons"
+msgstr "Add Ons"
+
+#: includes/i18n.php:85
+msgctxt "verb"
+msgid "Upgrade"
+msgstr "Upgrade"
+
+#: includes/i18n.php:87
+msgid "Awesome"
+msgstr "Awesome"
+
+#: includes/i18n.php:89
+msgctxt "noun"
+msgid "Pricing"
+msgstr "Pricing"
+
+#: includes/i18n.php:91
+msgctxt "noun"
+msgid "Price"
+msgstr "Price"
+
+#: includes/i18n.php:93
+msgid "Unlimited Updates"
+msgstr "Unlimited Updates"
+
+#: includes/i18n.php:95
+msgctxt "verb"
+msgid "Downgrade"
+msgstr "Downgrade"
+
+#: includes/i18n.php:97
+msgid "Cancel Trial"
+msgstr "Cancel Trial"
+
+#: includes/i18n.php:99
+msgid "Free Trial"
+msgstr "Free Trial"
+
+#: includes/i18n.php:101
+msgid "Start my free %s"
+msgstr "Start my free %s"
+
+#: includes/i18n.php:103
+msgid "No commitment for %s - cancel anytime"
+msgstr "No commitment for %s - cancel anytime"
+
+#: includes/i18n.php:105
+msgid "After your free %s, pay as little as %s"
+msgstr "After your free %s, pay as little as %s"
+
+#: includes/i18n.php:107
+msgid "Details"
+msgstr "Details"
+
+#: includes/i18n.php:109
+msgid "Account Details"
+msgstr "Account Details"
+
+#: includes/i18n.php:111
+msgctxt "verb"
+msgid "Delete"
+msgstr "Delete"
+
+#: includes/i18n.php:113
+msgctxt "verb"
+msgid "Show"
+msgstr "Show"
+
+#: includes/i18n.php:115
+msgctxt "verb"
+msgid "Hide"
+msgstr "Hide"
+
+#: includes/i18n.php:117
+msgctxt "verb"
+msgid "Edit"
+msgstr "Edit"
+
+#: includes/i18n.php:119
+msgid "Date"
+msgstr "Date"
+
+#: includes/i18n.php:121
+msgid "Amount"
+msgstr "Amount"
+
+#: includes/i18n.php:123
+msgid "Invoice"
+msgstr "Invoice"
+
+#: includes/i18n.php:125
+msgid "Billing"
+msgstr "Billing"
+
+#: includes/i18n.php:127
+msgid "Payments"
+msgstr "Payments"
+
+#: includes/i18n.php:129
+msgid "Delete Account"
+msgstr "Delete Account"
+
+#: includes/i18n.php:131
+msgctxt "as close a window"
+msgid "Dismiss"
+msgstr "Dismiss"
+
+#: includes/i18n.php:133
+msgctxt "as product pricing plan"
+msgid "Plan"
+msgstr "Plan"
+
+#: includes/i18n.php:135
+msgid "Change Plan"
+msgstr "Change Plan"
+
+#: includes/i18n.php:137
+msgctxt "as download professional version"
+msgid "Download %s Version"
+msgstr "Download %s Version"
+
+#: includes/i18n.php:139
+msgctxt "as download professional version now"
+msgid "Download %s version now"
+msgstr "Download %s version now"
+
+#: includes/i18n.php:141
+msgctxt "as download latest version"
+msgid "Download Latest"
+msgstr "Download Latest"
+
+#: includes/i18n.php:143
+msgctxt "E.g. you have a professional license."
+msgid "You have a %s license."
+msgstr "You have a %s license."
+
+#: includes/i18n.php:145
+msgid "New"
+msgstr "New"
+
+#: includes/i18n.php:147
+msgid "Free"
+msgstr "Free"
+
+#: includes/i18n.php:149
+msgctxt "as trial plan"
+msgid "Trial"
+msgstr "Trial"
+
+#: includes/i18n.php:151
+msgctxt "verb"
+msgid "Purchase"
+msgstr "Purchase"
+
+#: includes/i18n.php:153
+msgid "Purchase License"
+msgstr "Purchase License"
+
+#: includes/i18n.php:155
+msgctxt "verb"
+msgid "Buy"
+msgstr "Buy"
+
+#: includes/i18n.php:157
+msgid "Buy License"
+msgstr "Buy License"
+
+#: includes/i18n.php:159
+msgid "Single Site License"
+msgstr "Single Site License"
+
+#: includes/i18n.php:161
+msgid "Unlimited Licenses"
+msgstr "Unlimited Licenses"
+
+#: includes/i18n.php:163
+msgid "Up to %s Sites"
+msgstr "Up to %s Sites"
+
+#: includes/i18n.php:165
+msgid "%sRenew your license now%s to access version %s features and support."
+msgstr "%sRenew your license now%s to access version %s features and support."
+
+#: includes/i18n.php:167
+msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
+msgstr "Enter the email address you've used for the upgrade below and we will resend you the license key."
+
+#: includes/i18n.php:169
+msgctxt "e.g. Professional Plan"
+msgid "%s Plan"
+msgstr "%s Plan"
+
+#: includes/i18n.php:171
+msgid "You are just one step away - %s"
+msgstr "You are just one step away - %s"
+
+#: includes/i18n.php:173
+msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
+msgid "Complete \"%s\" Activation Now"
+msgstr "Complete \"%s\" Activation Now"
+
+#: includes/i18n.php:175
+msgid "We made a few tweaks to the plugin, %s"
+msgstr "We made a few tweaks to the plugin, %s"
+
+#: includes/i18n.php:177
+msgid "Opt-in to make \"%s\" Better!"
+msgstr "Opt-in to make \"%s\" Better!"
+
+#: includes/i18n.php:179
+msgid "Error"
+msgstr "Error"
+
+#: includes/i18n.php:181
+msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
+msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
+
+#: includes/i18n.php:187
+msgctxt "as expiration date"
+msgid "Expiration"
+msgstr "Expiration"
+
+#: includes/i18n.php:189
+msgctxt "as software license"
+msgid "License"
+msgstr "License"
+
+#: includes/i18n.php:191
+msgid "not verified"
+msgstr "not verified"
+
+#: includes/i18n.php:193
+msgid "Verify Email"
+msgstr "Verify Email"
+
+#: includes/i18n.php:195
+msgctxt "e.g. expires in 2 months"
+msgid "Expires in %s"
+msgstr "Expires in %s"
+
+#: includes/i18n.php:197
+msgctxt "e.g. auto renews in 2 months"
+msgid "Auto renews in %s"
+msgstr "Auto renews in %s"
+
+#: includes/i18n.php:199
+msgid "No expiration"
+msgstr "No expiration"
+
+#: includes/i18n.php:201
+msgid "Expired"
+msgstr "Expired"
+
+#: includes/i18n.php:203
+msgid "Cancelled"
+msgstr "Cancelled"
+
+#: includes/i18n.php:205
+msgctxt "e.g. In 2 hours"
+msgid "In %s"
+msgstr "In %s"
+
+#: includes/i18n.php:207
+msgctxt "e.g. 2 min ago"
+msgid "%s ago"
+msgstr "%s ago"
+
+#: includes/i18n.php:209
+msgctxt "as plugin version"
+msgid "Version"
+msgstr "Version"
+
+#: includes/i18n.php:211
+msgid "Name"
+msgstr "Name"
+
+#: includes/i18n.php:213
+msgid "Email"
+msgstr "Email"
+
+#: includes/i18n.php:215
+msgid "Email address"
+msgstr "Email address"
+
+#: includes/i18n.php:217
+msgid "Verified"
+msgstr "Verified"
+
+#: includes/i18n.php:219
+msgid "Plugin"
+msgstr "Plugin"
+
+#: includes/i18n.php:221
+msgid "Plugins"
+msgstr "Plugins"
+
+#: includes/i18n.php:223
+msgid "Themes"
+msgstr "Themes"
+
+#: includes/i18n.php:225
+msgctxt "as file/folder path"
+msgid "Path"
+msgstr "Path"
+
+#: includes/i18n.php:227
+msgid "Title"
+msgstr "Title"
+
+#: includes/i18n.php:229
+msgid "Free version"
+msgstr "Free version"
+
+#: includes/i18n.php:231
+msgid "Premium version"
+msgstr "Premium version"
+
+#: includes/i18n.php:233
+msgctxt "as WP plugin slug"
+msgid "Slug"
+msgstr "Slug"
+
+#: includes/i18n.php:235
+msgid "ID"
+msgstr "ID"
+
+#: includes/i18n.php:237
+msgid "Users"
+msgstr "Users"
+
+#: includes/i18n.php:239
+msgid "Plugin Installs"
+msgstr "Plugin Installs"
+
+#: includes/i18n.php:241
+msgctxt "like websites"
+msgid "Sites"
+msgstr "Sites"
+
+#: includes/i18n.php:243
+msgid "User ID"
+msgstr "User ID"
+
+#: includes/i18n.php:245
+msgid "Site ID"
+msgstr "Site ID"
+
+#: includes/i18n.php:247
+msgid "Public Key"
+msgstr "Public Key"
+
+#: includes/i18n.php:249
+msgid "Secret Key"
+msgstr "Secret Key"
+
+#: includes/i18n.php:251
+msgctxt "as secret encryption key missing"
+msgid "No Secret"
+msgstr "No Secret"
+
+#: includes/i18n.php:253
+msgid "No ID"
+msgstr "No ID"
+
+#: includes/i18n.php:255
+msgctxt "as synchronize license"
+msgid "Sync License"
+msgstr "Sync License"
+
+#: includes/i18n.php:257
+msgctxt "as synchronize"
+msgid "Sync"
+msgstr "Sync"
+
+#: includes/i18n.php:259
+msgid "Activate License"
+msgstr "Activate License"
+
+#: includes/i18n.php:261
+msgid "Activate Free Version"
+msgstr "Activate Free Version"
+
+#: includes/i18n.php:263
+msgid "Please enter the license key that you received in the email right after the purchase:"
+msgstr "Please enter the license key that you received in the email right after the purchase:"
+
+#: includes/i18n.php:265
+msgid "Activating license..."
+msgstr "Activating license..."
+
+#: includes/i18n.php:267
+msgid "Change License"
+msgstr "Change License"
+
+#: includes/i18n.php:269
+msgid "Update License"
+msgstr "Update License"
+
+#: includes/i18n.php:271
+msgid "Deactivate License"
+msgstr "Deactivate License"
+
+#: includes/i18n.php:273
+msgid "Activate"
+msgstr "Activate"
+
+#: includes/i18n.php:275
+msgid "Deactivate"
+msgstr "Deactivate"
+
+#: includes/i18n.php:277
+msgid "Skip & Deactivate"
+msgstr "Skip & Deactivate"
+
+#: includes/i18n.php:279
+msgid "No - just deactivate"
+msgstr "No - just deactivate"
+
+#: includes/i18n.php:281
+msgid "Yes - do your thing"
+msgstr "Yes - do your thing"
+
+#: includes/i18n.php:283
+msgctxt "active mode"
+msgid "Active"
+msgstr "Active"
+
+#: includes/i18n.php:285
+msgctxt "is active mode?"
+msgid "Is Active"
+msgstr "Is Active"
+
+#: includes/i18n.php:287
+msgid "Install Now"
+msgstr "Install Now"
+
+#: includes/i18n.php:289
+msgid "Install Update Now"
+msgstr "Install Update Now"
+
+#: includes/i18n.php:291
+msgid "More information about %s"
+msgstr "More information about %s"
+
+#: includes/i18n.php:293
+msgid "Localhost"
+msgstr "Localhost"
+
+#: includes/i18n.php:295
+msgctxt "as activate Professional plan"
+msgid "Activate %s Plan"
+msgstr "Activate %s Plan"
+
+#: includes/i18n.php:297
+msgctxt "as 5 licenses left"
+msgid "%s left"
+msgstr "%s left"
+
+#: includes/i18n.php:299
+msgid "Last license"
+msgstr "Last license"
+
+#: includes/i18n.php:301
+msgid "What is your %s?"
+msgstr "What is your %s?"
+
+#: includes/i18n.php:303
+msgid "Activate this add-on"
+msgstr "Activate this add-on"
+
+#: includes/i18n.php:305
+msgid "Deactivating your license will block all premium features, but will enable you to activate the license on another site. Are you sure you want to proceed?"
+msgstr "Deactivating your license will block all premium features, but will enable you to activate the license on another site. Are you sure you want to proceed?"
+
+#: includes/i18n.php:307
+msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
+msgstr "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
+
+#: includes/i18n.php:309
+msgid "Deletion is not temporary. Only delete if you no longer want to use this plugin anymore. Are you sure you would like to continue with the deletion?"
+msgstr "Deletion is not temporary. Only delete if you no longer want to use this plugin anymore. Are you sure you would like to continue with the deletion?"
+
+#: includes/i18n.php:311
+msgid "Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s."
+msgstr "Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s."
+
+#: includes/i18n.php:313
+msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
+msgstr "Cancelling the trial will immediately block access to all premium features. Are you sure?"
+
+#: includes/i18n.php:315
+msgid "You can still enjoy all %s features but you will not have access to plugin updates and support."
+msgstr "You can still enjoy all %s features but you will not have access to plugin updates and support."
+
+#: includes/i18n.php:317
+msgid "Once your license expire you can still use the Free version but you will NOT have access to the %s features."
+msgstr "Once your license expire you can still use the Free version but you will NOT have access to the %s features."
+
+#: includes/i18n.php:319
+msgid "Are you sure you want to proceed?"
+msgstr "Are you sure you want to proceed?"
+
+#: includes/i18n.php:325
+msgid "Add Ons for %s"
+msgstr "Add Ons for %s"
+
+#: includes/i18n.php:327
+msgid "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
+msgstr "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
+
+#: includes/i18n.php:331
+msgid "Anonymous feedback"
+msgstr "Anonymous feedback"
+
+#: includes/i18n.php:333
+msgid "Quick feedback"
+msgstr "Quick feedback"
+
+#: includes/i18n.php:335
+msgid "If you have a moment, please let us know why you are deactivating"
+msgstr "If you have a moment, please let us know why you are deactivating"
+
+#: includes/i18n.php:337
+msgid "Yes - Deactivate"
+msgstr "Yes - Deactivate"
+
+#: includes/i18n.php:339
+msgid "Submit & Deactivate"
+msgstr "Submit & Deactivate"
+
+#: includes/i18n.php:341
+msgctxt "the text of the cancel button of the plugin deactivation dialog box."
+msgid "Cancel"
+msgstr "Cancel"
+
+#: includes/i18n.php:343
+msgid "I no longer need the plugin"
+msgstr "I no longer need the plugin"
+
+#: includes/i18n.php:345
+msgid "I found a better plugin"
+msgstr "I found a better plugin"
+
+#: includes/i18n.php:347
+msgid "I only needed the plugin for a short period"
+msgstr "I only needed the plugin for a short period"
+
+#: includes/i18n.php:349
+msgid "The plugin broke my site"
+msgstr "The plugin broke my site"
+
+#: includes/i18n.php:351
+msgid "The plugin suddenly stopped working"
+msgstr "The plugin suddenly stopped working"
+
+#: includes/i18n.php:353
+msgid "I can't pay for it anymore"
+msgstr "I can't pay for it anymore"
+
+#: includes/i18n.php:355
+msgid "It's a temporary deactivation. I'm just debugging an issue."
+msgstr "It's a temporary deactivation. I'm just debugging an issue."
+
+#: includes/i18n.php:357
+msgctxt "the text of the \"other\" reason for deactivating the plugin that is shown in the modal box."
+msgid "Other"
+msgstr "Other"
+
+#: includes/i18n.php:359
+msgid "Kindly tell us the reason so we can improve."
+msgstr "Kindly tell us the reason so we can improve."
+
+#: includes/i18n.php:361
+msgid "What's the plugin's name?"
+msgstr "What's the plugin's name?"
+
+#: includes/i18n.php:363
+msgid "What price would you feel comfortable paying?"
+msgstr "What price would you feel comfortable paying?"
+
+#: includes/i18n.php:365
+msgid "I couldn't understand how to make it work"
+msgstr "I couldn't understand how to make it work"
+
+#: includes/i18n.php:367
+msgid "The plugin is great, but I need specific feature that you don't support"
+msgstr "The plugin is great, but I need specific feature that you don't support"
+
+#: includes/i18n.php:369
+msgid "The plugin is not working"
+msgstr "The plugin is not working"
+
+#: includes/i18n.php:371
+msgid "It's not what I was looking for"
+msgstr "It's not what I was looking for"
+
+#: includes/i18n.php:373
+msgid "The plugin didn't work as expected"
+msgstr "The plugin didn't work as expected"
+
+#: includes/i18n.php:375
+msgid "What feature?"
+msgstr "What feature?"
+
+#: includes/i18n.php:377
+msgid "Kindly share what didn't work so we can fix it for future users..."
+msgstr "Kindly share what didn't work so we can fix it for future users..."
+
+#: includes/i18n.php:379
+msgid "What you've been looking for?"
+msgstr "What you've been looking for?"
+
+#: includes/i18n.php:381
+msgid "What did you expect?"
+msgstr "What did you expect?"
+
+#: includes/i18n.php:383
+msgid "The plugin didn't work"
+msgstr "The plugin didn't work"
+
+#: includes/i18n.php:385
+msgid "I don't like to share my information with you"
+msgstr "I don't like to share my information with you"
+
+#: includes/i18n.php:387
+msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
+msgstr "You might have missed it, but you don't have to share any data and can just %s the opt-in."
+
+#: includes/i18n.php:395
+msgctxt "greeting"
+msgid "Hey %s,"
+msgstr "Hey %s,"
+
+#: includes/i18n.php:397
+msgctxt "a greeting. E.g. Thanks John!"
+msgid "Thanks %s!"
+msgstr "Thanks %s!"
+
+#: includes/i18n.php:399
+msgid "In order to enjoy all our features and functionality, %s needs to connect your user, %s at %s, to %s"
+msgstr "In order to enjoy all our features and functionality, %s needs to connect your user, %s at %s, to %s"
+
+#: includes/i18n.php:401
+msgid "Please help us improve %2$s! If you opt-in, some data about your usage of %2$s will be sent to %5$s. If you skip this, that's okay! %2$s will still work just fine."
+msgstr "Please help us improve %2$s! If you opt-in, some data about your usage of %2$s will be sent to %5$s. If you skip this, that's okay! %2$s will still work just fine."
+
+#: includes/i18n.php:403
+msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to complete the install."
+msgstr "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to complete the install."
+
+#: includes/i18n.php:405
+msgid "Thanks for purchasing %s! To get started, please enter your license key:"
+msgstr "Thanks for purchasing %s! To get started, please enter your license key:"
+
+#: includes/i18n.php:407
+msgid "The plugin will be periodically sending data to %s to check for plugin updates and verify the validity of your license."
+msgstr "The plugin will be periodically sending data to %s to check for plugin updates and verify the validity of your license."
+
+#: includes/i18n.php:409
+msgid "What permissions are being granted?"
+msgstr "What permissions are being granted?"
+
+#: includes/i18n.php:411
+msgid "Your Profile Overview"
+msgstr "Your Profile Overview"
+
+#: includes/i18n.php:413
+msgid "Name and email address"
+msgstr "Name and email address"
+
+#: includes/i18n.php:415
+msgid "Your Site Overview"
+msgstr "Your Site Overview"
+
+#: includes/i18n.php:417
+msgid "Site URL, WP version, PHP info, plugins & themes"
+msgstr "Site URL, WP version, PHP info, plugins & themes"
+
+#: includes/i18n.php:419
+msgid "Current Plugin Events"
+msgstr "Current Plugin Events"
+
+#: includes/i18n.php:421
+msgid "Activation, deactivation and uninstall"
+msgstr "Activation, deactivation and uninstall"
+
+#: includes/i18n.php:423
+msgid "Plugins & Themes"
+msgstr "Plugins & Themes"
+
+#: includes/i18n.php:425
+msgid "Titles, versions and state."
+msgstr "Titles, versions and state."
+
+#: includes/i18n.php:427
+msgid "Newsletter"
+msgstr "Newsletter"
+
+#: includes/i18n.php:429
+msgid "Updates, announcements, marketing, no spam"
+msgstr "Updates, announcements, marketing, no spam"
+
+#: includes/i18n.php:431
+msgid "Privacy Policy"
+msgstr "Privacy Policy"
+
+#: includes/i18n.php:433
+msgid "Terms of Service"
+msgstr "Terms of Service"
+
+#: includes/i18n.php:435
+msgctxt "as activating plugin"
+msgid "Activating"
+msgstr "Activating"
+
+#: includes/i18n.php:437
+msgctxt "as in the process of sending an email"
+msgid "Sending email"
+msgstr "Sending email"
+
+#: includes/i18n.php:439
+msgctxt "button label"
+msgid "Allow & Continue"
+msgstr "Allow & Continue"
+
+#: includes/i18n.php:441
+msgctxt "button label"
+msgid "Agree & Activate License"
+msgstr "Agree & Activate License"
+
+#: includes/i18n.php:443
+msgctxt "verb"
+msgid "Skip"
+msgstr "Skip"
+
+#: includes/i18n.php:445
+msgid "Click here to use the plugin anonymously"
+msgstr "Click here to use the plugin anonymously"
+
+#: includes/i18n.php:447
+msgid "Re-send activation email"
+msgstr "Re-send activation email"
+
+#: includes/i18n.php:449
+msgid "License key"
+msgstr "License key"
+
+#: includes/i18n.php:451
+msgid "Send License Key"
+msgstr "Send License Key"
+
+#: includes/i18n.php:453
+msgid "Sending license key"
+msgstr "Sending license key"
+
+#: includes/i18n.php:455
+msgid "Have a license key?"
+msgstr "Have a license key?"
+
+#: includes/i18n.php:457
+msgid "Don't have a license key?"
+msgstr "Don't have a license key?"
+
+#: includes/i18n.php:459
+msgid "Can't find your license key?"
+msgstr "Can't find your license key?"
+
+#: includes/i18n.php:471
+msgid "Screenshots"
+msgstr "Screenshots"
+
+#: includes/i18n.php:473
+msgid "Click to view full-size screenshot %d"
+msgstr "Click to view full-size screenshot %d"
+
+#: includes/i18n.php:481
+msgid "Freemius Debug"
+msgstr "Freemius Debug"
+
+#: includes/i18n.php:483
+msgctxt "as turned on"
+msgid "On"
+msgstr "On"
+
+#: includes/i18n.php:485
+msgctxt "as turned off"
+msgid "Off"
+msgstr "Off"
+
+#: includes/i18n.php:487
+msgctxt "as code debugging"
+msgid "Debugging"
+msgstr "Debugging"
+
+#: includes/i18n.php:489
+msgid "Freemius State"
+msgstr "Freemius State"
+
+#: includes/i18n.php:491
+msgctxt "as connection was successful"
+msgid "Connected"
+msgstr "Connected"
+
+#: includes/i18n.php:493
+msgctxt "as connection blocked"
+msgid "Blocked"
+msgstr "Blocked"
+
+#: includes/i18n.php:495
+msgctxt "as application program interface"
+msgid "API"
+msgstr "API"
+
+#: includes/i18n.php:497
+msgctxt "as software development kit versions"
+msgid "SDK"
+msgstr "SDK"
+
+#: includes/i18n.php:499
+msgctxt "as software development kit versions"
+msgid "SDK Versions"
+msgstr "SDK Versions"
+
+#: includes/i18n.php:501
+msgctxt "as plugin folder path"
+msgid "Plugin Path"
+msgstr "Plugin Path"
+
+#: includes/i18n.php:503
+msgctxt "as sdk path"
+msgid "SDK Path"
+msgstr "SDK Path"
+
+#: includes/i18n.php:505
+msgid "Add Ons of Plugin %s"
+msgstr "Add Ons of Plugin %s"
+
+#: includes/i18n.php:507
+msgid "Are you sure you want to delete all Freemius data?"
+msgstr "Are you sure you want to delete all Freemius data?"
+
+#: includes/i18n.php:509
+msgid "Actions"
+msgstr "Actions"
+
+#: includes/i18n.php:511
+msgid "Delete All Accounts"
+msgstr "Delete All Accounts"
+
+#: includes/i18n.php:513
+msgid "Start Fresh"
+msgstr "Start Fresh"
+
+#: includes/i18n.php:515
+msgid "Clear API Cache"
+msgstr "Clear API Cache"
+
+#: includes/i18n.php:517
+msgid "Sync Data From Server"
+msgstr "Sync Data From Server"
+
+#: includes/i18n.php:519
+msgid "Scheduled Crons"
+msgstr "Scheduled Crons"
+
+#: includes/i18n.php:521
+msgid "Plugins & Themes Sync"
+msgstr "Plugins & Themes Sync"
+
+#: includes/i18n.php:529
+msgctxt "as congratulations"
+msgid "Congrats"
+msgstr "Congrats"
+
+#: includes/i18n.php:531
+msgctxt "exclamation"
+msgid "Oops"
+msgstr "Oops"
+
+#: includes/i18n.php:533
+msgctxt "interjection expressing joy or exuberance"
+msgid "Yee-haw"
+msgstr "Yee-haw"
+
+#: includes/i18n.php:535
+msgctxt "(especially in electronic communication) used to express elation, enthusiasm, or triumph."
+msgid "W00t"
+msgstr "W00t"
+
+#: includes/i18n.php:537
+msgctxt "a positive response"
+msgid "Right on"
+msgstr "Right on"
+
+#: includes/i18n.php:539
+msgctxt "something somebody says when they are thinking about what you have just said. "
+msgid "Hmm"
+msgstr "Hmm"
+
+#: includes/i18n.php:541
+msgid "O.K"
+msgstr "O.K"
+
+#: includes/i18n.php:543
+msgctxt "exclamation"
+msgid "Hey"
+msgstr "Hey"
+
+#: includes/i18n.php:545
+msgctxt "advance notice of something that will need attention."
+msgid "Heads up"
+msgstr "Heads up"
+
+#: includes/i18n.php:553
+msgid "Seems like you got the latest release."
+msgstr "Seems like you got the latest release."
+
+#: includes/i18n.php:555
+msgid "You are all good!"
+msgstr "You are all good!"
+
+#: includes/i18n.php:557
+msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
+msgstr "Sorry, we could not complete the email update. Another user with the same email is already registered."
+
+#: includes/i18n.php:559
+msgid "If you would like to give up the ownership of the plugin's account to %s click the Change Ownership button."
+msgstr "If you would like to give up the ownership of the plugin's account to %s click the Change Ownership button."
+
+#: includes/i18n.php:561
+msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
+msgstr "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
+
+#: includes/i18n.php:563
+msgid "Your name was successfully updated."
+msgstr "Your name was successfully updated."
+
+#: includes/i18n.php:565
+msgid "You have successfully updated your %s."
+msgstr "You have successfully updated your %s."
+
+#: includes/i18n.php:567
+msgid "Please provide your full name."
+msgstr "Please provide your full name."
+
+#: includes/i18n.php:569
+msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
+msgstr "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
+
+#: includes/i18n.php:571
+msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
+msgstr "Just letting you know that the add-ons information of %s is being pulled from an external server."
+
+#: includes/i18n.php:573
+msgid "No credit card required"
+msgstr "No credit card required"
+
+#: includes/i18n.php:575
+msgid "Premium plugin version was successfully activated."
+msgstr "Premium plugin version was successfully activated."
+
+#: includes/i18n.php:577
+msgid "The upgrade of %s was successfully completed."
+msgstr "The upgrade of %s was successfully completed."
+
+#: includes/i18n.php:579
+msgid "Your account was successfully activated with the %s plan."
+msgstr "Your account was successfully activated with the %s plan."
+
+#: includes/i18n.php:581
+msgid "Download the latest %s version now"
+msgstr "Download the latest %s version now"
+
+#: includes/i18n.php:583
+msgid "Please follow these steps to complete the upgrade"
+msgstr "Please follow these steps to complete the upgrade"
+
+#: includes/i18n.php:585
+msgid "Download the latest %s version"
+msgstr "Download the latest %s version"
+
+#: includes/i18n.php:587
+msgid "Deactivate the free version"
+msgstr "Deactivate the free version"
+
+#: includes/i18n.php:589
+msgid "Upload and activate the downloaded version"
+msgstr "Upload and activate the downloaded version"
+
+#: includes/i18n.php:591
+msgid "How to upload and activate?"
+msgstr "How to upload and activate?"
+
+#: includes/i18n.php:593
+msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
+msgid "%s Add-on was successfully purchased."
+msgstr "%s Add-on was successfully purchased."
+
+#: includes/i18n.php:595
+msgid "Your %s Add-on plan was successfully upgraded."
+msgstr "Your %s Add-on plan was successfully upgraded."
+
+#: includes/i18n.php:597
+msgid "Your email has been successfully verified - you are AWESOME!"
+msgstr "Your email has been successfully verified - you are AWESOME!"
+
+#: includes/i18n.php:599
+msgid "Your plan was successfully upgraded."
+msgstr "Your plan was successfully upgraded."
+
+#: includes/i18n.php:601
+msgid "Your plan was successfully changed to %s."
+msgstr "Your plan was successfully changed to %s."
+
+#: includes/i18n.php:603
+msgid "Your license has expired. You can still continue using the free plugin forever."
+msgstr "Your license has expired. You can still continue using the free plugin forever."
+
+#: includes/i18n.php:605
+msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
+msgstr "Your license has been cancelled. If you think it's a mistake, please contact support."
+
+#: includes/i18n.php:607
+msgid "Your trial has been successfully started."
+msgstr "Your trial has been successfully started."
+
+#: includes/i18n.php:609
+msgid "Your license was successfully activated."
+msgstr "Your license was successfully activated."
+
+#: includes/i18n.php:611
+msgid "It looks like your site currently doesn't have an active license."
+msgstr "It looks like your site currently doesn't have an active license."
+
+#: includes/i18n.php:613
+msgid "Your license was successfully deactivated, you are back to the %s plan."
+msgstr "Your license was successfully deactivated, you are back to the %s plan."
+
+#: includes/i18n.php:615
+msgid "It looks like the license deactivation failed."
+msgstr "It looks like the license deactivation failed."
+
+#: includes/i18n.php:617
+msgid "It looks like the license could not be activated."
+msgstr "It looks like the license could not be activated."
+
+#: includes/i18n.php:619
+msgid "Error received from the server:"
+msgstr "Error received from the server:"
+
+#: includes/i18n.php:621
+msgid "Your trial has expired. You can still continue using all our free features."
+msgstr "Your trial has expired. You can still continue using all our free features."
+
+#: includes/i18n.php:623
+msgid "Your plan was successfully downgraded. Your %s plan license will expire in %s."
+msgstr "Your plan was successfully downgraded. Your %s plan license will expire in %s."
+
+#: includes/i18n.php:625
+msgid "Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes."
+msgstr "Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes."
+
+#: includes/i18n.php:627
+msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
+msgstr "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
+
+#: includes/i18n.php:629
+msgid "Your %s free trial was successfully cancelled."
+msgstr "Your %s free trial was successfully cancelled."
+
+#: includes/i18n.php:631
+msgctxt "%s - numeric version number"
+msgid "Version %s was released."
+msgstr "Version %s was released."
+
+#: includes/i18n.php:633
+msgid "Please download %s."
+msgstr "Please download %s."
+
+#: includes/i18n.php:635
+msgctxt "%s - plan name, as the latest professional version here"
+msgid "the latest %s version here"
+msgstr "the latest %s version here"
+
+#: includes/i18n.php:637
+msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
+msgstr "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
+
+#: includes/i18n.php:639
+msgctxt "call to action"
+msgid "Start free trial"
+msgstr "Start free trial"
+
+#: includes/i18n.php:641
+msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
+msgstr "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
+
+#: includes/i18n.php:643
+msgid "You already utilized a trial before."
+msgstr "You already utilized a trial before."
+
+#: includes/i18n.php:645
+msgid "You are already running the plugin in a trial mode."
+msgstr "You are already running the plugin in a trial mode."
+
+#: includes/i18n.php:647
+msgid "Plan %s do not exist, therefore, can't start a trial."
+msgstr "Plan %s do not exist, therefore, can't start a trial."
+
+#: includes/i18n.php:649
+msgid "Plan %s does not support a trial period."
+msgstr "Plan %s does not support a trial period."
+
+#: includes/i18n.php:651
+msgid "None of the plugin's plans supports a trial period."
+msgstr "None of the plugin's plans supports a trial period."
+
+#: includes/i18n.php:653
+msgid "Unexpected API error. Please contact the plugin's author with the following error."
+msgstr "Unexpected API error. Please contact the plugin's author with the following error."
+
+#: includes/i18n.php:655
+msgid "No commitment for %s days - cancel anytime!"
+msgstr "No commitment for %s days - cancel anytime!"
+
+#: includes/i18n.php:657
+msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
+msgstr "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
+
+#: includes/i18n.php:659
+msgid "Couldn't activate %s."
+msgstr "Couldn't activate %s."
+
+#: includes/i18n.php:661
+msgid "Please contact us with the following message:"
+msgstr "Please contact us with the following message:"
+
+#: includes/i18n.php:663
+msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
+msgstr "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
+
+#: includes/i18n.php:665
+msgid "Please contact us here"
+msgstr "Please contact us here"
+
+#: includes/i18n.php:667
+msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
+msgstr "I have upgraded my account but when I try to Sync the License, the plan remains %s."
+
+#: includes/i18n.php:673
+msgid "From unknown reason, the API connectivity test failed."
+msgstr "From unknown reason, the API connectivity test failed."
+
+#: includes/i18n.php:675
+msgid "It's probably a temporary issue on our end. Just to be sure, with your permission, would it be o.k to run another connectivity test?"
+msgstr "It's probably a temporary issue on our end. Just to be sure, with your permission, would it be o.k to run another connectivity test?"
+
+#: includes/i18n.php:677
+msgid "We use PHP cURL library for the API calls, which is a very common library and usually installed out of the box. Unfortunately, cURL is not installed on your server."
+msgstr "We use PHP cURL library for the API calls, which is a very common library and usually installed out of the box. Unfortunately, cURL is not installed on your server."
+
+#: includes/i18n.php:679
+msgid "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
+msgstr "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
+
+#: includes/i18n.php:681
+msgctxt "as pluginX requires an access to our API"
+msgid "%s requires an access to our API."
+msgstr "%s requires an access to our API."
+
+#: includes/i18n.php:683
+msgid "It looks like your server is using Squid ACL (access control lists), which blocks the connection."
+msgstr "It looks like your server is using Squid ACL (access control lists), which blocks the connection."
+
+#: includes/i18n.php:685
+msgid "I don't know what is Squid or ACL, help me!"
+msgstr "I don't know what is Squid or ACL, help me!"
+
+#: includes/i18n.php:687, includes/i18n.php:695
+msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
+msgstr "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
+
+#: includes/i18n.php:689
+msgid "I'm a system administrator"
+msgstr "I'm a system administrator"
+
+#: includes/i18n.php:691
+msgid "Great, please whitelist the following domains: %s. Once you done, deactivate the plugin and activate it again."
+msgstr "Great, please whitelist the following domains: %s. Once you done, deactivate the plugin and activate it again."
+
+#: includes/i18n.php:693
+msgid "I don't know what is cURL or how to install it, help me!"
+msgstr "I don't know what is cURL or how to install it, help me!"
+
+#: includes/i18n.php:697
+msgid "Great, please install cURL and enable it in your php.ini file. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the plugin and reactivate it back again."
+msgstr "Great, please install cURL and enable it in your php.ini file. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the plugin and reactivate it back again."
+
+#: includes/i18n.php:699
+msgid "We are sure it's an issue on our side and more than happy to resolve it for you ASAP if you give us a chance."
+msgstr "We are sure it's an issue on our side and more than happy to resolve it for you ASAP if you give us a chance."
+
+#: includes/i18n.php:701
+msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
+msgstr "Sorry for the inconvenience and we are here to help if you give us a chance."
+
+#: includes/i18n.php:703
+msgid "Yes - I'm giving you a chance to fix it"
+msgstr "Yes - I'm giving you a chance to fix it"
+
+#: includes/i18n.php:705
+msgid "We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update."
+msgstr "We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update."
+
+#: includes/i18n.php:707
+msgid "Let's try your previous version"
+msgstr "Let's try your previous version"
+
+#: includes/i18n.php:709
+msgid "Uninstall this version and install the previous one."
+msgstr "Uninstall this version and install the previous one."
+
+#: includes/i18n.php:711
+msgid "That's exhausting, please deactivate"
+msgstr "That's exhausting, please deactivate"
+
+#: includes/i18n.php:713
+msgid "We feel your frustration and sincerely apologize for the inconvenience. Hope to see you again in the future."
+msgstr "We feel your frustration and sincerely apologize for the inconvenience. Hope to see you again in the future."
+
+#: includes/i18n.php:715
+msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
+msgstr "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
+
+#: includes/i18n.php:717
+msgctxt "%1s - plugin title, %2s - API domain"
+msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
+msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
+
+#: includes/i18n.php:719
+msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
+msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
+
+#: includes/i18n.php:725
+msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
+msgstr "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
+
+#: includes/i18n.php:727
+msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
+msgstr "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
+
+#: includes/i18n.php:729
+msgid "%s is the new owner of the account."
+msgstr "%s is the new owner of the account."
+
+#: includes/i18n.php:733
+msgctxt "addonX cannot run without pluginY"
+msgid "%s cannot run without %s."
+msgstr "%s cannot run without %s."
+
+#: includes/i18n.php:735
+msgctxt "addonX cannot run..."
+msgid "%s cannot run without the plugin."
+msgstr "%s cannot run without the plugin."
+
+#: includes/i18n.php:737
+msgctxt "pluginX activation was successfully..."
+msgid "%s activation was successfully completed."
+msgstr "%s activation was successfully completed."
+
+#: includes/i18n.php:739
+msgctxt "Plugin installer section title"
+msgid "Features & Pricing"
+msgstr "Features & Pricing"
+
+#: includes/i18n.php:741
+msgid "Add-on must be deployed to WordPress.org or Freemius."
+msgstr "Add-on must be deployed to WordPress.org or Freemius."
+
+#: includes/i18n.php:743
+msgid "Paid add-on must be deployed to Freemius."
+msgstr "Paid add-on must be deployed to Freemius."
+
+#: includes/i18n.php:747
+msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
+msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
+
+#: includes/i18n.php:749
+msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
+msgstr "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
+
+#: includes/i18n.php:755
+msgctxt "as every month"
+msgid "Monthly"
+msgstr "Monthly"
+
+#: includes/i18n.php:757
+msgctxt "as monthly period"
+msgid "mo"
+msgstr "mo"
+
+#: includes/i18n.php:759
+msgctxt "as once a year"
+msgid "Annual"
+msgstr "Annual"
+
+#: includes/i18n.php:761
+msgctxt "as once a year"
+msgid "Annually"
+msgstr "Annually"
+
+#: includes/i18n.php:763
+msgctxt "as once a year"
+msgid "Once"
+msgstr "Once"
+
+#: includes/i18n.php:765
+msgctxt "as annual period"
+msgid "year"
+msgstr "year"
+
+#: includes/i18n.php:767
+msgid "Lifetime"
+msgstr "Lifetime"
+
+#: includes/i18n.php:769
+msgctxt "e.g. the best product"
+msgid "Best"
+msgstr "Best"
+
+#: includes/i18n.php:771
+msgctxt "e.g. billed monthly"
+msgid "Billed %s"
+msgstr "Billed %s"
+
+#: includes/i18n.php:773
+msgctxt "as a discount of $5 or 10%"
+msgid "Save %s"
+msgstr "Save %s"
+
+#: includes/i18n.php:777
+msgid "View details"
+msgstr "View details"
diff --git a/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-it_IT.mo b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-it_IT.mo
new file mode 100644
index 0000000000000000000000000000000000000000..240828f1c9deb1b39c320fe77431c19329fb7071
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-it_IT.mo differ
diff --git a/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-it_IT.po b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-it_IT.po
new file mode 100644
index 0000000000000000000000000000000000000000..6262ddd6b5fac40c29778cf01196b314fb4c136b
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius-it_IT.po
@@ -0,0 +1,1521 @@
+# 
+# Translators:
+# Alessandro Benassi <plasmax@gmail.com>, 2016
+# Daniele Scasciafratte Mte90 <mte90net@gmail.com>, 2015
+# Vova Feldman <vova@freemius.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: WordPress SDK\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2016-09-13 08:22+0000\n"
+"Last-Translator: Alessandro Benassi <plasmax@gmail.com>\n"
+"Language-Team: Italian (Italy) (http://www.transifex.com/freemius/wordpress-sdk/language/it_IT/)\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it_IT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# Copyright (C) 2016 freemius
+# This file is distributed under the same license as the freemius package.
+#: includes/i18n.php41, includes/i18n.php:55
+msgid "Yes - I'm in!"
+msgstr "Sì, ci sto!"
+
+#: includes/i18n.php43, includes/i18n.php:57
+msgid "Not today"
+msgstr "Non oggi"
+
+#: includes/i18n.php:69
+msgid "Account"
+msgstr "Account"
+
+#: includes/i18n.php:71
+msgid "Add On"
+msgstr "Add-on"
+
+#: includes/i18n.php:73
+msgid "Contact Us"
+msgstr "Contattaci"
+
+#: includes/i18n.php:75
+msgid "Contact Support"
+msgstr "Contatta il supporto"
+
+#: includes/i18n.php:77
+msgid "Change Ownership"
+msgstr "Cambia Proprietario"
+
+#: includes/i18n.php:79
+msgid "Support"
+msgstr "Supporto"
+
+#: includes/i18n.php:81
+msgid "Support Forum"
+msgstr "Forum di supporto"
+
+#: includes/i18n.php:83
+msgid "Add Ons"
+msgstr "Add-on"
+
+#: includes/i18n.php:85
+msgctxt "verb"
+msgid "Upgrade"
+msgstr "Aggiornamento"
+
+#: includes/i18n.php:87
+msgid "Awesome"
+msgstr "Fantastico"
+
+#: includes/i18n.php:89
+msgctxt "noun"
+msgid "Pricing"
+msgstr "Prezzi"
+
+#: includes/i18n.php:91
+msgctxt "noun"
+msgid "Price"
+msgstr "Prezzo"
+
+#: includes/i18n.php:93
+msgid "Unlimited Updates"
+msgstr "Aggiornamenti Illimitati"
+
+#: includes/i18n.php:95
+msgctxt "verb"
+msgid "Downgrade"
+msgstr "Downgrade"
+
+#: includes/i18n.php:97
+msgid "Cancel Trial"
+msgstr "Annulla prova gratuita"
+
+#: includes/i18n.php:99
+msgid "Free Trial"
+msgstr "Prova gratuita"
+
+#: includes/i18n.php:101
+msgid "Start my free %s"
+msgstr "Inizia la mia %s"
+
+#: includes/i18n.php:103
+msgid "No commitment for %s - cancel anytime"
+msgstr "Nessun impegno con %s - cancella quando vuoi"
+
+#: includes/i18n.php:105
+msgid "After your free %s, pay as little as %s"
+msgstr "Dopo il tuo %s gratuito, paghi solamente %s"
+
+#: includes/i18n.php:107
+msgid "Details"
+msgstr "Dettagli"
+
+#: includes/i18n.php:109
+msgid "Account Details"
+msgstr "Dettagli dell'account"
+
+#: includes/i18n.php:111
+msgctxt "verb"
+msgid "Delete"
+msgstr "Elimina"
+
+#: includes/i18n.php:113
+msgctxt "verb"
+msgid "Show"
+msgstr "Mostra"
+
+#: includes/i18n.php:115
+msgctxt "verb"
+msgid "Hide"
+msgstr "Nascondi"
+
+#: includes/i18n.php:117
+msgctxt "verb"
+msgid "Edit"
+msgstr "Modifica"
+
+#: includes/i18n.php:119
+msgid "Date"
+msgstr "Data"
+
+#: includes/i18n.php:121
+msgid "Amount"
+msgstr "Importo"
+
+#: includes/i18n.php:123
+msgid "Invoice"
+msgstr "Fattura"
+
+#: includes/i18n.php:125
+msgid "Billing"
+msgstr "Fatturazione"
+
+#: includes/i18n.php:127
+msgid "Payments"
+msgstr "Pagamenti"
+
+#: includes/i18n.php:129
+msgid "Delete Account"
+msgstr "Elimina Account"
+
+#: includes/i18n.php:131
+msgctxt "as close a window"
+msgid "Dismiss"
+msgstr "Chiudi"
+
+#: includes/i18n.php:133
+msgctxt "as product pricing plan"
+msgid "Plan"
+msgstr "Piano"
+
+#: includes/i18n.php:135
+msgid "Change Plan"
+msgstr "Cambia piano"
+
+#: includes/i18n.php:137
+msgctxt "as download professional version"
+msgid "Download %s Version"
+msgstr "Scarica la versione %s"
+
+#: includes/i18n.php:139
+msgctxt "as download professional version now"
+msgid "Download %s version now"
+msgstr "Scarica la versione %s ora"
+
+#: includes/i18n.php:141
+msgctxt "as download latest version"
+msgid "Download Latest"
+msgstr "Scarica l'ultima versione"
+
+#: includes/i18n.php:143
+msgctxt "E.g. you have a professional license."
+msgid "You have a %s license."
+msgstr "Hai la licenza %s."
+
+#: includes/i18n.php:145
+msgid "New"
+msgstr "Nuovo"
+
+#: includes/i18n.php:147
+msgid "Free"
+msgstr "Gratuito"
+
+#: includes/i18n.php:149
+msgctxt "as trial plan"
+msgid "Trial"
+msgstr "Prova gratuita"
+
+#: includes/i18n.php:151
+msgctxt "verb"
+msgid "Purchase"
+msgstr "Acquisto"
+
+#: includes/i18n.php:153
+msgid "Purchase License"
+msgstr "Acquista licenza"
+
+#: includes/i18n.php:155
+msgctxt "verb"
+msgid "Buy"
+msgstr "Compra"
+
+#: includes/i18n.php:157
+msgid "Buy License"
+msgstr "Compra licenza"
+
+#: includes/i18n.php:159
+msgid "Single Site License"
+msgstr "Licenza per sito singolo"
+
+#: includes/i18n.php:161
+msgid "Unlimited Licenses"
+msgstr "Licenze illimitate"
+
+#: includes/i18n.php:163
+msgid "Up to %s Sites"
+msgstr "Fino a %s siti"
+
+#: includes/i18n.php:165
+msgid "%sRenew your license now%s to access version %s features and support."
+msgstr "%sRinnova la tua licenza ora%s per accedere a funzionalità e supporto della versione %s."
+
+#: includes/i18n.php:167
+msgid ""
+"Enter the email address you've used for the upgrade below and we will resend"
+" you the license key."
+msgstr "Inserisci qui sotto l'indirizzo email che hai usato per registrare l'aggiornamento e ti invieremo di nuovo la chiave di licenza."
+
+#: includes/i18n.php:169
+msgctxt "e.g. Professional Plan"
+msgid "%s Plan"
+msgstr "Piano %s"
+
+#: includes/i18n.php:171
+msgid "You are just one step away - %s"
+msgstr "Sei a un passo dalla fine - %s"
+
+#: includes/i18n.php:173
+msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
+msgid "Complete \"%s\" Activation Now"
+msgstr "Completa l'attivazione di \"%s\" ora"
+
+#: includes/i18n.php:175
+msgid "We made a few tweaks to the plugin, %s"
+msgstr "Abbiamo apportato alcune modifiche al plugin, %s"
+
+#: includes/i18n.php:177
+msgid "Opt-in to make \"%s\" Better!"
+msgstr "Contribuisci a rendere \"%s\" migliore!"
+
+#: includes/i18n.php:179
+msgid "Error"
+msgstr "Errore"
+
+#: includes/i18n.php:181
+msgid ""
+"Freemius SDK couldn't find the plugin's main file. Please contact "
+"sdk@freemius.com with the current error."
+msgstr "L'SDK di Freemius non è riuscito a trovare il file principale del plugin. Per favore contatta sdk@freemius.com riportando l'errore."
+
+#: includes/i18n.php:187
+msgctxt "as expiration date"
+msgid "Expiration"
+msgstr "Scadenza"
+
+#: includes/i18n.php:189
+msgctxt "as software license"
+msgid "License"
+msgstr "Licenza"
+
+#: includes/i18n.php:191
+msgid "not verified"
+msgstr "non verificato"
+
+#: includes/i18n.php:193
+msgid "Verify Email"
+msgstr "Verifica email"
+
+#: includes/i18n.php:195
+msgctxt "e.g. expires in 2 months"
+msgid "Expires in %s"
+msgstr "Scade in %s"
+
+#: includes/i18n.php:197
+msgctxt "e.g. auto renews in 2 months"
+msgid "Auto renews in %s"
+msgstr "Rinnovo automatico in %s"
+
+#: includes/i18n.php:199
+msgid "No expiration"
+msgstr "Nessuna scadenza"
+
+#: includes/i18n.php:201
+msgid "Expired"
+msgstr "Scaduto"
+
+#: includes/i18n.php:203
+msgid "Cancelled"
+msgstr "Annullato"
+
+#: includes/i18n.php:205
+msgctxt "e.g. In 2 hours"
+msgid "In %s"
+msgstr "In %s"
+
+#: includes/i18n.php:207
+msgctxt "e.g. 2 min ago"
+msgid "%s ago"
+msgstr "%s fa"
+
+#: includes/i18n.php:209
+msgctxt "as plugin version"
+msgid "Version"
+msgstr "Versione"
+
+#: includes/i18n.php:211
+msgid "Name"
+msgstr "Nome"
+
+#: includes/i18n.php:213
+msgid "Email"
+msgstr "Email"
+
+#: includes/i18n.php:215
+msgid "Email address"
+msgstr "Indirizzo email"
+
+#: includes/i18n.php:217
+msgid "Verified"
+msgstr "Verificato"
+
+#: includes/i18n.php:219
+msgid "Plugin"
+msgstr "Plugin"
+
+#: includes/i18n.php:221
+msgid "Plugins"
+msgstr "Plugin"
+
+#: includes/i18n.php:223
+msgid "Themes"
+msgstr "Temi"
+
+#: includes/i18n.php:225
+msgctxt "as file/folder path"
+msgid "Path"
+msgstr "Percorso"
+
+#: includes/i18n.php:227
+msgid "Title"
+msgstr "Titolo"
+
+#: includes/i18n.php:229
+msgid "Free version"
+msgstr "Versione gratuita"
+
+#: includes/i18n.php:231
+msgid "Premium version"
+msgstr "Versione premium"
+
+#: includes/i18n.php:233
+msgctxt "as WP plugin slug"
+msgid "Slug"
+msgstr "Slug"
+
+#: includes/i18n.php:235
+msgid "ID"
+msgstr "ID"
+
+#: includes/i18n.php:237
+msgid "Users"
+msgstr "Utenti"
+
+#: includes/i18n.php:239
+msgid "Plugin Installs"
+msgstr "Installazioni Plugin"
+
+#: includes/i18n.php:241
+msgctxt "like websites"
+msgid "Sites"
+msgstr "Siti"
+
+#: includes/i18n.php:243
+msgid "User ID"
+msgstr "ID utente"
+
+#: includes/i18n.php:245
+msgid "Site ID"
+msgstr "ID del sito"
+
+#: includes/i18n.php:247
+msgid "Public Key"
+msgstr "Chiave pubblica"
+
+#: includes/i18n.php:249
+msgid "Secret Key"
+msgstr "Chiave segreta"
+
+#: includes/i18n.php:251
+msgctxt "as secret encryption key missing"
+msgid "No Secret"
+msgstr "Nessuna chiave"
+
+#: includes/i18n.php:253
+msgid "No ID"
+msgstr "Nessun ID"
+
+#: includes/i18n.php:255
+msgctxt "as synchronize license"
+msgid "Sync License"
+msgstr "Sincronizza la licenza"
+
+#: includes/i18n.php:257
+msgctxt "as synchronize"
+msgid "Sync"
+msgstr "Sincronizza"
+
+#: includes/i18n.php:259
+msgid "Activate License"
+msgstr "Attiva licenza"
+
+#: includes/i18n.php:261
+msgid "Activate Free Version"
+msgstr "Attiva versione gratuita"
+
+#: includes/i18n.php:263
+msgid ""
+"Please enter the license key that you received in the email right after the "
+"purchase:"
+msgstr "Per favore inserisci la chiave di licenza che hai ricevuto via mail subito dopo l'acquisto:"
+
+#: includes/i18n.php:265
+msgid "Activating license..."
+msgstr "Sto attivando la licenza..."
+
+#: includes/i18n.php:267
+msgid "Change License"
+msgstr "Cambia licenza"
+
+#: includes/i18n.php:269
+msgid "Update License"
+msgstr "Aggiorna licenza"
+
+#: includes/i18n.php:271
+msgid "Deactivate License"
+msgstr "Disattiva licenza"
+
+#: includes/i18n.php:273
+msgid "Activate"
+msgstr "Attiva"
+
+#: includes/i18n.php:275
+msgid "Deactivate"
+msgstr "Disattiva"
+
+#: includes/i18n.php:277
+msgid "Skip & Deactivate"
+msgstr "Salta e disattiva"
+
+#: includes/i18n.php:279
+msgid "No - just deactivate"
+msgstr "No - disattiva e basta"
+
+#: includes/i18n.php:281
+msgid "Yes - do your thing"
+msgstr "Sì - fai pure"
+
+#: includes/i18n.php:283
+msgctxt "active mode"
+msgid "Active"
+msgstr "Attiva"
+
+#: includes/i18n.php:285
+msgctxt "is active mode?"
+msgid "Is Active"
+msgstr "è attiva"
+
+#: includes/i18n.php:287
+msgid "Install Now"
+msgstr "Installa ora"
+
+#: includes/i18n.php:289
+msgid "Install Update Now"
+msgstr "Installa l'aggiornamento ora"
+
+#: includes/i18n.php:291
+msgid "More information about %s"
+msgstr "Ulteriori informazioni su %s"
+
+#: includes/i18n.php:293
+msgid "Localhost"
+msgstr "Localhost"
+
+#: includes/i18n.php:295
+msgctxt "as activate Professional plan"
+msgid "Activate %s Plan"
+msgstr "Attivare il piano %s"
+
+#: includes/i18n.php:297
+msgctxt "as 5 licenses left"
+msgid "%s left"
+msgstr "%s rimanenti"
+
+#: includes/i18n.php:299
+msgid "Last license"
+msgstr "Ultima licenza"
+
+#: includes/i18n.php:301
+msgid "What is your %s?"
+msgstr "Qual è il tuo %s?"
+
+#: includes/i18n.php:303
+msgid "Activate this add-on"
+msgstr "Attivare questo addon"
+
+#: includes/i18n.php:305
+msgid ""
+"Deactivating your license will block all premium features, but will enable "
+"you to activate the license on another site. Are you sure you want to "
+"proceed?"
+msgstr "La disattivazione della licenza bloccherà tutte le funzionalità premium, ma vi permetterà di attivare la licenza su un altro sito. Sei sicuro di voler procedere?"
+
+#: includes/i18n.php:307
+msgid ""
+"Deleting the account will automatically deactivate your %s plan license so "
+"you can use it on other sites. If you want to terminate the recurring "
+"payments as well, click the \"Cancel\" button, and first \"Downgrade\" your "
+"account. Are you sure you would like to continue with the deletion?"
+msgstr "L'eliminazione dell'account disattiva automaticamente la tua licenza del piano %s quindi è possibile utilizzarlo su altri siti. Se si desidera anche terminare i pagamenti ricorrenti, fare clic sul pulsante \"Annulla\" ed effettuare il \"Downgrade\" del tuo account. Sei sicuro di voler continuare con l'eliminazione?"
+
+#: includes/i18n.php:309
+msgid ""
+"Deletion is not temporary. Only delete if you no longer want to use this "
+"plugin anymore. Are you sure you would like to continue with the deletion?"
+msgstr "L'eliminazione non è temporanea. Cancella solo se non si desidera più utilizzare questo plugin. Sei sicuro di voler continuare con l'eliminazione?"
+
+#: includes/i18n.php:311
+msgid ""
+"Downgrading your plan will immediately stop all future recurring payments "
+"and your %s plan license will expire in %s."
+msgstr "Effettuare il downgrade del piano interromperà immediatamente tutti i futuri pagamenti ricorrenti e la licenza del piano %s scadrà in %s."
+
+#: includes/i18n.php:313
+msgid ""
+"Cancelling the trial will immediately block access to all premium features. "
+"Are you sure?"
+msgstr "Cancellando il periodo di prova gratuito bloccherai immediatamente l'accesso a tutte le funzionalità premium. Vuoi continuare?"
+
+#: includes/i18n.php:315
+msgid ""
+"You can still enjoy all %s features but you will not have access to plugin "
+"updates and support."
+msgstr "Puoi ancora sfruttare tutte le funzionalità di %s, ma non avrai accesso al supporto ed agli aggiornamenti del plugin."
+
+#: includes/i18n.php:317
+msgid ""
+"Once your license expire you can still use the Free version but you will NOT"
+" have access to the %s features."
+msgstr "Una volta scaduta la licenza, sarà possibile ancora utilizzare la versione gratuita ma non avrete accesso alle funzionalità di %s."
+
+#: includes/i18n.php:319
+msgid "Are you sure you want to proceed?"
+msgstr "Sei sicuro di voler procedere?"
+
+#: includes/i18n.php:325
+msgid "Add Ons for %s"
+msgstr "Add-on per %s"
+
+#: includes/i18n.php:327
+msgid ""
+"We could'nt load the add-ons list. It's probably an issue on our side, "
+"please try to come back in few minutes."
+msgstr "Non siamo riusciti a caricare la lista degli add-on. Si tratta probabilmente di un problema nel nostro sistema, per favore riprova tra qualche minuto."
+
+#: includes/i18n.php:331
+msgid "Anonymous feedback"
+msgstr "Feedback anonimo"
+
+#: includes/i18n.php:333
+msgid "Quick feedback"
+msgstr "Feedback veloce"
+
+#: includes/i18n.php:335
+msgid "If you have a moment, please let us know why you are deactivating"
+msgstr "Se hai un momento, potresti dirci perché lo hai disattivato?"
+
+#: includes/i18n.php:337
+msgid "Yes - Deactivate"
+msgstr "Si - Disattiva"
+
+#: includes/i18n.php:339
+msgid "Submit & Deactivate"
+msgstr "Invia & Disattiva"
+
+#: includes/i18n.php:341
+msgctxt "the text of the cancel button of the plugin deactivation dialog box."
+msgid "Cancel"
+msgstr "Cancella"
+
+#: includes/i18n.php:343
+msgid "I no longer need the plugin"
+msgstr "Non ho piú bisogno di questo plugin"
+
+#: includes/i18n.php:345
+msgid "I found a better plugin"
+msgstr "Ho trovato un plugin migliore"
+
+#: includes/i18n.php:347
+msgid "I only needed the plugin for a short period"
+msgstr "Avevo bisogno del plugin solo per un breve periodo"
+
+#: includes/i18n.php:349
+msgid "The plugin broke my site"
+msgstr "Il plugin ha causato problemi al mio sito"
+
+#: includes/i18n.php:351
+msgid "The plugin suddenly stopped working"
+msgstr "Il plugin ha smesso di funzionare"
+
+#: includes/i18n.php:353
+msgid "I can't pay for it anymore"
+msgstr "Non posso piú pagarlo"
+
+#: includes/i18n.php:355
+msgid "It's a temporary deactivation. I'm just debugging an issue."
+msgstr "È una disattivazione temporanea. Sto solo cercando di risolvere un problema."
+
+#: includes/i18n.php:357
+msgctxt ""
+"the text of the \"other\" reason for deactivating the plugin that is shown "
+"in the modal box."
+msgid "Other"
+msgstr "Altro"
+
+#: includes/i18n.php:359
+msgid "Kindly tell us the reason so we can improve."
+msgstr "Spiegandoci il motivo ci aiuterai a migliorare."
+
+#: includes/i18n.php:361
+msgid "What's the plugin's name?"
+msgstr "Qual è il nome del plugin?"
+
+#: includes/i18n.php:363
+msgid "What price would you feel comfortable paying?"
+msgstr "Che prezzo ritieni opportuno pagare?"
+
+#: includes/i18n.php:365
+msgid "I couldn't understand how to make it work"
+msgstr "Non capisco come farlo funzionare"
+
+#: includes/i18n.php:367
+msgid ""
+"The plugin is great, but I need specific feature that you don't support"
+msgstr "Il plugin é ottimo ma ho bisogno di una funzionalitá specifica che non é supportata"
+
+#: includes/i18n.php:369
+msgid "The plugin is not working"
+msgstr "Il plugin non funziona"
+
+#: includes/i18n.php:371
+msgid "It's not what I was looking for"
+msgstr "Non é quello che stavo cercando"
+
+#: includes/i18n.php:373
+msgid "The plugin didn't work as expected"
+msgstr "Il plugin non funziona come mi aspettavo"
+
+#: includes/i18n.php:375
+msgid "What feature?"
+msgstr "Quale funzionalitá?"
+
+#: includes/i18n.php:377
+msgid "Kindly share what didn't work so we can fix it for future users..."
+msgstr "Condividi cosa non ha funzionato in modo da migliorare il prodotto per gli utenti futuri..."
+
+#: includes/i18n.php:379
+msgid "What you've been looking for?"
+msgstr "Che cosa stai cercando?"
+
+#: includes/i18n.php:381
+msgid "What did you expect?"
+msgstr "Che cosa ti aspettavi?"
+
+#: includes/i18n.php:383
+msgid "The plugin didn't work"
+msgstr "Il plugin non funziona"
+
+#: includes/i18n.php:385
+msgid "I don't like to share my information with you"
+msgstr "Non voglio condividere i miei dati con te"
+
+#: includes/i18n.php:387
+msgid ""
+"You might have missed it, but you don't have to share any data and can just "
+"%s the opt-in."
+msgstr "Potresti non averci fatto caso, ma non sei obbligato a condividere i tuoi dati e puoi semplicemente %s la tua partecipazione."
+
+#: includes/i18n.php:395
+msgctxt "greeting"
+msgid "Hey %s,"
+msgstr "Hey %s,"
+
+#: includes/i18n.php:397
+msgctxt "a greeting. E.g. Thanks John!"
+msgid "Thanks %s!"
+msgstr "Grazie %s!"
+
+#: includes/i18n.php:399
+msgid ""
+"In order to enjoy all our features and functionality, %s needs to connect "
+"your user, %s at %s, to %s"
+msgstr "Per poter sfruttare tutte le caratteristiche e funzionalità, %s deve connettere il tuo utente, %s a %s su %s"
+
+#: includes/i18n.php:401
+msgid ""
+"Please help us improve %2$s! If you opt-in, some data about your usage of "
+"%2$s will be sent to %5$s. If you skip this, that's okay! %2$s will still "
+"work just fine."
+msgstr "Per favore aiutaci a migliorare %2$s! Se decidi di contribuire, alcuni dei tuoi dati di utilizzo inerenti a %2$s verranno inviati a %5$s. Se salti questo passaggio, non c'è problema! %2$s funzionerà comunque perfettamente."
+
+#: includes/i18n.php:403
+msgid ""
+"You should receive an activation email for %s to your mailbox at %s. Please "
+"make sure you click the activation button in that email to complete the "
+"install."
+msgstr "Dovresti ricevere un'email di attivazione di %s all'indirizzo %s. Assicurati di fare clic sul pulsante di attivazione nell'email per completare l'installazione."
+
+#: includes/i18n.php:405
+msgid ""
+"Thanks for purchasing %s! To get started, please enter your license key:"
+msgstr "Grazie per aver acquistato %s! Per iniziare, per favore inserisci la tua chiave di licenza:"
+
+#: includes/i18n.php:407
+msgid ""
+"The plugin will be periodically sending data to %s to check for plugin "
+"updates and verify the validity of your license."
+msgstr "Il plugin invierà dati periodicamente a %s per controllare l'esistenza di aggiornamenti e verificare la validità della tua licenza."
+
+#: includes/i18n.php:409
+msgid "What permissions are being granted?"
+msgstr "Quali autorizzazioni vengono concesse?"
+
+#: includes/i18n.php:411
+msgid "Your Profile Overview"
+msgstr "Panoramica del tuo profilo"
+
+#: includes/i18n.php:413
+msgid "Name and email address"
+msgstr "Nome ed indirizzo email"
+
+#: includes/i18n.php:415
+msgid "Your Site Overview"
+msgstr "Panoramica del tuo sito"
+
+#: includes/i18n.php:417
+msgid "Site URL, WP version, PHP info, plugins & themes"
+msgstr "URL del sito, versione di WP, informazioni PHP, plugin e temi"
+
+#: includes/i18n.php:419
+msgid "Current Plugin Events"
+msgstr "Eventi correnti del plugin"
+
+#: includes/i18n.php:421
+msgid "Activation, deactivation and uninstall"
+msgstr "Attiva, disattivazione e disinstallazione"
+
+#: includes/i18n.php:423
+msgid "Plugins & Themes"
+msgstr "Plugin e temi"
+
+#: includes/i18n.php:425
+msgid "Titles, versions and state."
+msgstr "Titoli, versioni e stato."
+
+#: includes/i18n.php:427
+msgid "Newsletter"
+msgstr "Newsletter"
+
+#: includes/i18n.php:429
+msgid "Updates, announcements, marketing, no spam"
+msgstr "Aggiornamenti, annunci, marketing, no spam"
+
+#: includes/i18n.php:431
+msgid "Privacy Policy"
+msgstr "Politica sulla privacy"
+
+#: includes/i18n.php:433
+msgid "Terms of Service"
+msgstr "Termini del Servizio"
+
+#: includes/i18n.php:435
+msgctxt "as activating plugin"
+msgid "Activating"
+msgstr "Attivazione"
+
+#: includes/i18n.php:437
+msgctxt "as in the process of sending an email"
+msgid "Sending email"
+msgstr "Invio email"
+
+#: includes/i18n.php:439
+msgctxt "button label"
+msgid "Allow & Continue"
+msgstr "Consenti & Continua"
+
+#: includes/i18n.php:441
+msgctxt "button label"
+msgid "Agree & Activate License"
+msgstr "Accetta e attiva la licenza"
+
+#: includes/i18n.php:443
+msgctxt "verb"
+msgid "Skip"
+msgstr "Salta"
+
+#: includes/i18n.php:445
+msgid "Click here to use the plugin anonymously"
+msgstr "Fai clic qui per usare il plugin anonimamente"
+
+#: includes/i18n.php:447
+msgid "Re-send activation email"
+msgstr "Invia nuovamente l'email di attivazione"
+
+#: includes/i18n.php:449
+msgid "License key"
+msgstr "Chiave di licenza"
+
+#: includes/i18n.php:451
+msgid "Send License Key"
+msgstr "Invia chiave di licenza"
+
+#: includes/i18n.php:453
+msgid "Sending license key"
+msgstr "Invio chiave di licenza"
+
+#: includes/i18n.php:455
+msgid "Have a license key?"
+msgstr "Hai una chiave di licenza?"
+
+#: includes/i18n.php:457
+msgid "Don't have a license key?"
+msgstr "Non hai una chiave di licenza?"
+
+#: includes/i18n.php:459
+msgid "Can't find your license key?"
+msgstr "Non trovi la tua chiave di licenza?"
+
+#: includes/i18n.php:471
+msgid "Screenshots"
+msgstr "Screenshots"
+
+#: includes/i18n.php:473
+msgid "Click to view full-size screenshot %d"
+msgstr "Fare clic per visualizzare lo screenshot in grandi dimensioni %d"
+
+#: includes/i18n.php:481
+msgid "Freemius Debug"
+msgstr "Debug Freemius"
+
+#: includes/i18n.php:483
+msgctxt "as turned on"
+msgid "On"
+msgstr "Attivo"
+
+#: includes/i18n.php:485
+msgctxt "as turned off"
+msgid "Off"
+msgstr "Non attivo"
+
+#: includes/i18n.php:487
+msgctxt "as code debugging"
+msgid "Debugging"
+msgstr "Debugging"
+
+#: includes/i18n.php:489
+msgid "Freemius State"
+msgstr "Stato di Freemius"
+
+#: includes/i18n.php:491
+msgctxt "as connection was successful"
+msgid "Connected"
+msgstr "Connesso"
+
+#: includes/i18n.php:493
+msgctxt "as connection blocked"
+msgid "Blocked"
+msgstr "Bloccato"
+
+#: includes/i18n.php:495
+msgctxt "as application program interface"
+msgid "API"
+msgstr "API"
+
+#: includes/i18n.php:497
+msgctxt "as software development kit versions"
+msgid "SDK"
+msgstr "SDK"
+
+#: includes/i18n.php:499
+msgctxt "as software development kit versions"
+msgid "SDK Versions"
+msgstr "Versioni SDK"
+
+#: includes/i18n.php:501
+msgctxt "as plugin folder path"
+msgid "Plugin Path"
+msgstr "Percorso del plugin"
+
+#: includes/i18n.php:503
+msgctxt "as sdk path"
+msgid "SDK Path"
+msgstr "Percorso SDK"
+
+#: includes/i18n.php:505
+msgid "Add Ons of Plugin %s"
+msgstr "Add-on del Plugin %s"
+
+#: includes/i18n.php:507
+msgid "Are you sure you want to delete all Freemius data?"
+msgstr "Sei sicuro di voler eliminare tutti i dati di Freemius?"
+
+#: includes/i18n.php:509
+msgid "Actions"
+msgstr "Azioni"
+
+#: includes/i18n.php:511
+msgid "Delete All Accounts"
+msgstr "Eliminare tutti gli account"
+
+#: includes/i18n.php:513
+msgid "Start Fresh"
+msgstr "Inizia da capo"
+
+#: includes/i18n.php:515
+msgid "Clear API Cache"
+msgstr "Elimina cache API"
+
+#: includes/i18n.php:517
+msgid "Sync Data From Server"
+msgstr "Sincronizza i dati dal server"
+
+#: includes/i18n.php:519
+msgid "Scheduled Crons"
+msgstr "Azioni programmate"
+
+#: includes/i18n.php:521
+msgid "Plugins & Themes Sync"
+msgstr "Sincronizzazione plugin e temi"
+
+#: includes/i18n.php:529
+msgctxt "as congratulations"
+msgid "Congrats"
+msgstr "Congratulazioni"
+
+#: includes/i18n.php:531
+msgctxt "exclamation"
+msgid "Oops"
+msgstr "Ops"
+
+#: includes/i18n.php:533
+msgctxt "interjection expressing joy or exuberance"
+msgid "Yee-haw"
+msgstr "Evvai"
+
+#: includes/i18n.php:535
+msgctxt ""
+"(especially in electronic communication) used to express elation, "
+"enthusiasm, or triumph."
+msgid "W00t"
+msgstr "Forte"
+
+#: includes/i18n.php:537
+msgctxt "a positive response"
+msgid "Right on"
+msgstr "Sì"
+
+#: includes/i18n.php:539
+msgctxt ""
+"something somebody says when they are thinking about what you have just "
+"said. "
+msgid "Hmm"
+msgstr "Uhm"
+
+#: includes/i18n.php:541
+msgid "O.K"
+msgstr "OK"
+
+#: includes/i18n.php:543
+msgctxt "exclamation"
+msgid "Hey"
+msgstr "Hey"
+
+#: includes/i18n.php:545
+msgctxt "advance notice of something that will need attention."
+msgid "Heads up"
+msgstr "Attenzione"
+
+#: includes/i18n.php:553
+msgid "Seems like you got the latest release."
+msgstr "Sembra che tu abbia la versione più recente."
+
+#: includes/i18n.php:555
+msgid "You are all good!"
+msgstr "Sei fantastico!"
+
+#: includes/i18n.php:557
+msgid ""
+"Sorry, we could not complete the email update. Another user with the same "
+"email is already registered."
+msgstr "Siamo spiacenti, non siamo riusciti a completare l'aggiornamento via email. Un altro utente con lo stesso indirizzo email è già registrato."
+
+#: includes/i18n.php:559
+msgid ""
+"If you would like to give up the ownership of the plugin's account to %s "
+"click the Change Ownership button."
+msgstr "Se vuoi cedere la proprietá dell'account del plugin a %s clicca su Cambia Proprietà."
+
+#: includes/i18n.php:561
+msgid ""
+"Your email was successfully updated. You should receive an email with "
+"confirmation instructions in few moments."
+msgstr "Il tuo indirizzo email è stato aggiornato correttamente. Riceverai un'email con le istruzioni di conferma in pochi istanti."
+
+#: includes/i18n.php:563
+msgid "Your name was successfully updated."
+msgstr "Il tuo nome è stato aggiornato correttamente."
+
+#: includes/i18n.php:565
+msgid "You have successfully updated your %s."
+msgstr "Hai aggiornato con successo il tuo %s."
+
+#: includes/i18n.php:567
+msgid "Please provide your full name."
+msgstr "Per favore inserisci il tuo nome completo."
+
+#: includes/i18n.php:569
+msgid ""
+"Verification mail was just sent to %s. If you can't find it after 5 min, "
+"please check your spam box."
+msgstr "L'email di verifica è stata inviata a %s. Se dopo 5 minuti non è ancora arrivata, per favore controlla nella tua casella di posta indesiderata."
+
+#: includes/i18n.php:571
+msgid ""
+"Just letting you know that the add-ons information of %s is being pulled "
+"from an external server."
+msgstr "Le informazioni sugli add-on di %s vengono scaricate da un server esterno."
+
+#: includes/i18n.php:573
+msgid "No credit card required"
+msgstr "Nessuna carta di credito richiesta"
+
+#: includes/i18n.php:575
+msgid "Premium plugin version was successfully activated."
+msgstr "La versione Premium del plugin è stata attivata correttamente."
+
+#: includes/i18n.php:577
+msgid "The upgrade of %s was successfully completed."
+msgstr "L'aggiornamento di %s è stato completato con successo."
+
+#: includes/i18n.php:579
+msgid "Your account was successfully activated with the %s plan."
+msgstr "Il tuo account è stato attivato correttamente con il piano %s."
+
+#: includes/i18n.php:581
+msgid "Download the latest %s version now"
+msgstr "Scarica l'ultima versione di %s"
+
+#: includes/i18n.php:583
+msgid "Please follow these steps to complete the upgrade"
+msgstr "Segui i passi seguenti per completare l'aggiornamento"
+
+#: includes/i18n.php:585
+msgid "Download the latest %s version"
+msgstr "Scarica l'ultima versione di %s"
+
+#: includes/i18n.php:587
+msgid "Deactivate the free version"
+msgstr "Disattiva la versione gratuita"
+
+#: includes/i18n.php:589
+msgid "Upload and activate the downloaded version"
+msgstr "Carica e attiva la versione scaricata"
+
+#: includes/i18n.php:591
+msgid "How to upload and activate?"
+msgstr "Come faccio a caricare ed attivare?"
+
+#: includes/i18n.php:593
+msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
+msgid "%s Add-on was successfully purchased."
+msgstr "L' add-on %s è stato acquistato con successo."
+
+#: includes/i18n.php:595
+msgid "Your %s Add-on plan was successfully upgraded."
+msgstr "Il piano del tuo add-on %s è stato aggiornato con successo."
+
+#: includes/i18n.php:597
+msgid "Your email has been successfully verified - you are AWESOME!"
+msgstr "Il tuo indirizzo email è stato verificato con successo - SEI UN GRANDE!"
+
+#: includes/i18n.php:599
+msgid "Your plan was successfully upgraded."
+msgstr "Il piano è stato aggiornato con successo."
+
+#: includes/i18n.php:601
+msgid "Your plan was successfully changed to %s."
+msgstr "Il piano è stato cambiato con successo a %s."
+
+#: includes/i18n.php:603
+msgid ""
+"Your license has expired. You can still continue using the free plugin "
+"forever."
+msgstr "La licenza è scaduta. È comunque possibile continuare ad utilizzare il plugin gratuito per sempre."
+
+#: includes/i18n.php:605
+msgid ""
+"Your license has been cancelled. If you think it's a mistake, please contact"
+" support."
+msgstr "La tua licenza è stata cancellata. Se credi sia un errore, per favore contatta il supporto."
+
+#: includes/i18n.php:607
+msgid "Your trial has been successfully started."
+msgstr "La versione di prova è stata avviata correttamente."
+
+#: includes/i18n.php:609
+msgid "Your license was successfully activated."
+msgstr "La tua licenza è stata attivata correttamente."
+
+#: includes/i18n.php:611
+msgid "It looks like your site currently doesn't have an active license."
+msgstr "Sembra che il tuo sito non disponga di alcuna licenza attiva."
+
+#: includes/i18n.php:613
+msgid ""
+"Your license was successfully deactivated, you are back to the %s plan."
+msgstr "La tua licenza é stata disattivata con successo, sei tornato al piano %s."
+
+#: includes/i18n.php:615
+msgid "It looks like the license deactivation failed."
+msgstr "Sembra che la disattivazione della licenza non sia riuscita."
+
+#: includes/i18n.php:617
+msgid "It looks like the license could not be activated."
+msgstr "Sembra che la licenza non possa essere attivata."
+
+#: includes/i18n.php:619
+msgid "Error received from the server:"
+msgstr "Errore ricevuto dal server:"
+
+#: includes/i18n.php:621
+msgid ""
+"Your trial has expired. You can still continue using all our free features."
+msgstr "La versione di prova è scaduta. Si può comunque continuare a utilizzare tutte le nostre funzioni gratuite."
+
+#: includes/i18n.php:623
+msgid ""
+"Your plan was successfully downgraded. Your %s plan license will expire in "
+"%s."
+msgstr "Il tuo piano è stato declassato con successo. La licenza del piano %s scadrà in %s."
+
+#: includes/i18n.php:625
+msgid ""
+"Seems like we are having some temporary issue with your plan downgrade. "
+"Please try again in few minutes."
+msgstr "Stiamo avendo qualche problema temporaneo con il downgrade del piano. Riprova tra qualche minuto."
+
+#: includes/i18n.php:627
+msgid ""
+"It looks like you are not in trial mode anymore so there's nothing to cancel"
+" :)"
+msgstr "Sembra che tu non stia più usando la prova gratuita, quindi non c'è niente che tu debba annullare :)"
+
+#: includes/i18n.php:629
+msgid "Your %s free trial was successfully cancelled."
+msgstr "Il tuo periodo di prova gratuito %s è stato annullato con successo."
+
+#: includes/i18n.php:631
+msgctxt "%s - numeric version number"
+msgid "Version %s was released."
+msgstr "La versione %s é stata rilasciata."
+
+#: includes/i18n.php:633
+msgid "Please download %s."
+msgstr "Scarica %s."
+
+#: includes/i18n.php:635
+msgctxt "%s - plan name, as the latest professional version here"
+msgid "the latest %s version here"
+msgstr "l'ultima versione %s é quì"
+
+#: includes/i18n.php:637
+msgid ""
+"How do you like %s so far? Test all our %s premium features with a %d-day "
+"free trial."
+msgstr "Come sta andando con %s? Prova tutte le funzionalità premium di %s con una prova gratuita di %d giorni."
+
+#: includes/i18n.php:639
+msgctxt "call to action"
+msgid "Start free trial"
+msgstr "Inizia il periodo di prova gratuito"
+
+#: includes/i18n.php:641
+msgid ""
+"Seems like we are having some temporary issue with your trial cancellation. "
+"Please try again in few minutes."
+msgstr "Stiamo avendo qualche problema temporaneo con l'annullamento del periodo di prova. Riprova tra qualche minuto."
+
+#: includes/i18n.php:643
+msgid "You already utilized a trial before."
+msgstr "Hai già utilizzato una prova gratuita in passato."
+
+#: includes/i18n.php:645
+msgid "You are already running the plugin in a trial mode."
+msgstr "Stai già usando il plugin in modalità di prova gratuita."
+
+#: includes/i18n.php:647
+msgid "Plan %s do not exist, therefore, can't start a trial."
+msgstr "Il piano %s non esiste, per questo motivo non è possibile iniziare il periodo di prova."
+
+#: includes/i18n.php:649
+msgid "Plan %s does not support a trial period."
+msgstr "Il piano %s non supporta il periodo di prova."
+
+#: includes/i18n.php:651
+msgid "None of the plugin's plans supports a trial period."
+msgstr "Non esiste alcun piano del plugin che offra il periodo di prova."
+
+#: includes/i18n.php:653
+msgid ""
+"Unexpected API error. Please contact the plugin's author with the following "
+"error."
+msgstr "Errore inaspettato dell'API. Per favore contatta l'autore del plugin riportando il seguente errore."
+
+#: includes/i18n.php:655
+msgid "No commitment for %s days - cancel anytime!"
+msgstr "Nessun impegno per %s giorni - puoi annullare in qualsiasi momento!"
+
+#: includes/i18n.php:657
+msgid ""
+"Your license has expired. You can still continue using all the %s features, "
+"but you'll need to renew your license to continue getting updates and "
+"support."
+msgstr "La licenza è scaduta. È comunque possibile continuare a utilizzare tutte le funzionalità di %s, ma sarà necessario rinnovare la licenza per continuare a ricevere gli aggiornamenti ed il supporto."
+
+#: includes/i18n.php:659
+msgid "Couldn't activate %s."
+msgstr "Non é stato possibile attivare %s."
+
+#: includes/i18n.php:661
+msgid "Please contact us with the following message:"
+msgstr "Contattaci con il seguente messaggio:"
+
+#: includes/i18n.php:663
+msgid ""
+"It looks like you are still on the %s plan. If you did upgrade or change "
+"your plan, it's probably an issue on our side - sorry."
+msgstr "Sembra che tu sia ancora usando il piano %s. Se hai effettuato un upgrade o cambiato il piano, è probabile che ci sia un problema nei nostri sistemi."
+
+#: includes/i18n.php:665
+msgid "Please contact us here"
+msgstr "Contattaci qui"
+
+#: includes/i18n.php:667
+msgid ""
+"I have upgraded my account but when I try to Sync the License, the plan "
+"remains %s."
+msgstr "Ho aggiornato il mio account, ma quando cerco di sincronizzare la licenza, il piano rimane %s."
+
+#: includes/i18n.php:673
+msgid "From unknown reason, the API connectivity test failed."
+msgstr "Il test di connettività dell'API ha fallito per motivi sconosciuti."
+
+#: includes/i18n.php:675
+msgid ""
+"It's probably a temporary issue on our end. Just to be sure, with your "
+"permission, would it be o.k to run another connectivity test?"
+msgstr "Si tratta probabilmente di un problema nei nostri sistemi. Per esserne sicuri, potresti darci il permesso di effettuare un ulteriore test della connettività? "
+
+#: includes/i18n.php:677
+msgid ""
+"We use PHP cURL library for the API calls, which is a very common library "
+"and usually installed out of the box. Unfortunately, cURL is not installed "
+"on your server."
+msgstr "Utilizziamo la libreria PHP cURL per le chiamate alla nostra API. Questa libreria è molto comune ed è installata di base. Sfortunatamente cURL non è presente nel tuo server."
+
+#: includes/i18n.php:679
+msgid ""
+"From unknown reason, CloudFlare, the firewall we use, blocks the connection."
+msgstr "Per un motivo sconosciuto, CloudFlare, il firewall che utilizziamo, blocca la connessione."
+
+#: includes/i18n.php:681
+msgctxt "as pluginX requires an access to our API"
+msgid "%s requires an access to our API."
+msgstr "%s richiede un accesso alla nostra API."
+
+#: includes/i18n.php:683
+msgid ""
+"It looks like your server is using Squid ACL (access control lists), which "
+"blocks the connection."
+msgstr "Sembra che il tuo server stia usando Squid ACL (lista per il controllo degli accessi) il quale blocca la connessione."
+
+#: includes/i18n.php:685
+msgid "I don't know what is Squid or ACL, help me!"
+msgstr "Non ho idea di cosa sia Squid o ACL, aiutami!"
+
+#: includes/i18n.php687, includes/i18n.php:695
+msgid ""
+"We'll make sure to contact your hosting company and resolve the issue. You "
+"will get a follow-up email to %s once we have an update."
+msgstr "Contatteremo il tuo hosting e risolveremo il problema. Riceverai un' email a %s non appena ci saranno aggiornamenti."
+
+#: includes/i18n.php:689
+msgid "I'm a system administrator"
+msgstr "Sono un sistemista"
+
+#: includes/i18n.php:691
+msgid ""
+"Great, please whitelist the following domains: %s. Once you done, deactivate"
+" the plugin and activate it again."
+msgstr "Perfetto, aggiungi alla whitelist i seguenti domini: %s. Una volta che hai fatto, disattiva il plugin e attivalo di nuovo."
+
+#: includes/i18n.php:693
+msgid "I don't know what is cURL or how to install it, help me!"
+msgstr "Non ho idea di cosa sia cURL o come installarlo, aiutami!"
+
+#: includes/i18n.php:697
+msgid ""
+"Great, please install cURL and enable it in your php.ini file. To make sure "
+"it was successfully activated, use 'phpinfo()'. Once activated, deactivate "
+"the plugin and reactivate it back again."
+msgstr "Perfetto, installa cURL ed attivalo nel tuo file php.ini. Per essere sicuro di averlo attivato con successo, usa \"phpinfo()\". Una volta attivato disattva il plugin e attivalo di nuovo."
+
+#: includes/i18n.php:699
+msgid ""
+"We are sure it's an issue on our side and more than happy to resolve it for "
+"you ASAP if you give us a chance."
+msgstr "Siamo sicuri che sia un nostro problema e siamo più che felici di risolverlo per te al più presto. Per poter procedere abbiamo bisogno del tuo consenso."
+
+#: includes/i18n.php:701
+msgid ""
+"Sorry for the inconvenience and we are here to help if you give us a chance."
+msgstr "Siamo spiacenti per l'inconveniente e siamo qui per aiutarti con il tuo permesso."
+
+#: includes/i18n.php:703
+msgid "Yes - I'm giving you a chance to fix it"
+msgstr "Sì - sto dandovi la possibilità di risolvere il problema"
+
+#: includes/i18n.php:705
+msgid ""
+"We will do our best to whitelist your server and resolve this issue ASAP. "
+"You will get a follow-up email to %s once we have an update."
+msgstr "Faremo del nostro meglio per mettere il server in whitelist e risolvere il problema il prima possibile. Avrai un aggiornamento dello stato tramite email all'indirizzo %s."
+
+#: includes/i18n.php:707
+msgid "Let's try your previous version"
+msgstr "Proviamo con la versione precedente"
+
+#: includes/i18n.php:709
+msgid "Uninstall this version and install the previous one."
+msgstr "Disinstalla questa versione e installa quella precedente."
+
+#: includes/i18n.php:711
+msgid "That's exhausting, please deactivate"
+msgstr "È estenuante, disattivalo"
+
+#: includes/i18n.php:713
+msgid ""
+"We feel your frustration and sincerely apologize for the inconvenience. Hope"
+" to see you again in the future."
+msgstr "Capiamo la tua frustrazione e ci scusiamo per l'inconveniente. Speriamo di rivederti nuovamente in futuro."
+
+#: includes/i18n.php:715
+msgid ""
+"Thank for giving us the chance to fix it! A message was just sent to our "
+"technical staff. We will get back to you as soon as we have an update to %s."
+" Appreciate your patience."
+msgstr "Grazie per averci dato la possibilità di risolvere il problema! È stato appena inviato un messaggio al nostro staff tecnico. Ti risponderemo non appena avremo un aggiornamento riguardante %s. Grazie per la tua pazienza."
+
+#: includes/i18n.php:717
+msgctxt "%1s - plugin title, %2s - API domain"
+msgid ""
+"Your server is blocking the access to Freemius' API, which is crucial for "
+"%1s synchronization. Please contact your host to whitelist %2s"
+msgstr "Il tuo server sta bloccando l'accesso all'API di Freemius. L'accesso è cruciale per quanto riguarda la la sincronizzazione di %1s. Per favore contatta il tuo host per aggiungere %2s alla whitelist."
+
+#: includes/i18n.php:719
+msgid ""
+"It seems like one of the authentication parameters is wrong. Update your "
+"Public Key, Secret Key & User ID, and try again."
+msgstr "Sembra che uno dei parametri di autenticazione sia sbagliato. Aggiorna la tua chiave pubblica, Secret Key & User ID e riprova."
+
+#: includes/i18n.php:725
+msgid ""
+"Please check your mailbox, you should receive an email via %s to confirm the"
+" ownership change. From security reasons, you must confirm the change within"
+" the next 15 min. If you cannot find the email, please check your spam "
+"folder."
+msgstr "Verifica di aver ricevuto l'email da %s per confermare il cambiamento del proprietario. Per ragioni di sicurezza devi confermare il cambiamento entro 15 minuti. Se non trovi l'email controlla nella posta indesiderata."
+
+#: includes/i18n.php:727
+msgid ""
+"Thanks for confirming the ownership change. An email was just sent to %s for"
+" final approval."
+msgstr "Grazie per aver confermato il cambiamento del proprietario. Un' email è stata appena inviata a %s per la conferma finale."
+
+#: includes/i18n.php:729
+msgid "%s is the new owner of the account."
+msgstr "%s è il nuovo proprietario dell'account."
+
+#: includes/i18n.php:733
+msgctxt "addonX cannot run without pluginY"
+msgid "%s cannot run without %s."
+msgstr "%s non può funzionare senza %s."
+
+#: includes/i18n.php:735
+msgctxt "addonX cannot run..."
+msgid "%s cannot run without the plugin."
+msgstr "%s non può funzionare senza il plugin."
+
+#: includes/i18n.php:737
+msgctxt "pluginX activation was successfully..."
+msgid "%s activation was successfully completed."
+msgstr "%s è stato attivato con successo."
+
+#: includes/i18n.php:739
+msgctxt "Plugin installer section title"
+msgid "Features & Pricing"
+msgstr "Caratteristiche & prezzi"
+
+#: includes/i18n.php:741
+msgid "Add-on must be deployed to WordPress.org or Freemius."
+msgstr "L'add-on dev'essere distribuito da WordPress.org o Freemius."
+
+#: includes/i18n.php:743
+msgid "Paid add-on must be deployed to Freemius."
+msgstr "Gli add-on a pagamento devono essere distribuiti da Freemius."
+
+#: includes/i18n.php:747
+msgid ""
+"%s is a premium only add-on. You have to purchase a license first before "
+"activating the plugin."
+msgstr "%s è un add-on premium. Devi comprare una licenza prima di poter attivare il plugin."
+
+#: includes/i18n.php:749
+msgid ""
+"%s free trial was successfully cancelled. Since the add-on is premium only "
+"it was automatically deactivated. If you like to use it in the future, "
+"you'll have to purchase a license."
+msgstr "Il periodo di prova gratuito %s è stato annullato con successo. Siccome l'add-on è premium, è stato disattivato automaticamente. Se vorrai usarlo in futuro, dovrai comprare una licenza."
+
+#: includes/i18n.php:755
+msgctxt "as every month"
+msgid "Monthly"
+msgstr "Mensilmente"
+
+#: includes/i18n.php:757
+msgctxt "as monthly period"
+msgid "mo"
+msgstr "mese"
+
+#: includes/i18n.php:759
+msgctxt "as once a year"
+msgid "Annual"
+msgstr "Annuale"
+
+#: includes/i18n.php:761
+msgctxt "as once a year"
+msgid "Annually"
+msgstr "Annualmente"
+
+#: includes/i18n.php:763
+msgctxt "as once a year"
+msgid "Once"
+msgstr "Una volta"
+
+#: includes/i18n.php:765
+msgctxt "as annual period"
+msgid "year"
+msgstr "anno"
+
+#: includes/i18n.php:767
+msgid "Lifetime"
+msgstr "Tutta la vita"
+
+#: includes/i18n.php:769
+msgctxt "e.g. the best product"
+msgid "Best"
+msgstr "Migliore"
+
+#: includes/i18n.php:771
+msgctxt "e.g. billed monthly"
+msgid "Billed %s"
+msgstr "Fatturato %s"
+
+#: includes/i18n.php:773
+msgctxt "as a discount of $5 or 10%"
+msgid "Save %s"
+msgstr "Risparmia %s"
+
+#: includes/i18n.php:777
+msgid "View details"
+msgstr "Visualizza dettagli"
diff --git a/wp-content/plugins/nextgen-gallery/freemius/languages/freemius.pot b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius.pot
new file mode 100644
index 0000000000000000000000000000000000000000..5314cdb4b5622663b79075a02ebc280e54144263
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/languages/freemius.pot
@@ -0,0 +1,1399 @@
+# Copyright (C) 2016 freemius
+# This file is distributed under the same license as the freemius package.
+msgid ""
+msgstr ""
+"Project-Id-Version: freemius\n"
+"Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Vova Feldman <vova@freemius.com>\n"
+"Language-Team: Freemius Team <admin@freemius.com>\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: includes/i18n.php:41, includes/i18n.php:55
+msgid "Yes - I'm in!"
+msgstr ""
+
+#: includes/i18n.php:43, includes/i18n.php:57
+msgid "Not today"
+msgstr ""
+
+#: includes/i18n.php:69
+msgid "Account"
+msgstr ""
+
+#: includes/i18n.php:71
+msgid "Add On"
+msgstr ""
+
+#: includes/i18n.php:73
+msgid "Contact Us"
+msgstr ""
+
+#: includes/i18n.php:75
+msgid "Contact Support"
+msgstr ""
+
+#: includes/i18n.php:77
+msgid "Change Ownership"
+msgstr ""
+
+#: includes/i18n.php:79
+msgid "Support"
+msgstr ""
+
+#: includes/i18n.php:81
+msgid "Support Forum"
+msgstr ""
+
+#: includes/i18n.php:83
+msgid "Add Ons"
+msgstr ""
+
+#: includes/i18n.php:85
+msgctxt "verb"
+msgid "Upgrade"
+msgstr ""
+
+#: includes/i18n.php:87
+msgid "Awesome"
+msgstr ""
+
+#: includes/i18n.php:89
+msgctxt "noun"
+msgid "Pricing"
+msgstr ""
+
+#: includes/i18n.php:91
+msgctxt "noun"
+msgid "Price"
+msgstr ""
+
+#: includes/i18n.php:93
+msgid "Unlimited Updates"
+msgstr ""
+
+#: includes/i18n.php:95
+msgctxt "verb"
+msgid "Downgrade"
+msgstr ""
+
+#: includes/i18n.php:97
+msgid "Cancel Trial"
+msgstr ""
+
+#: includes/i18n.php:99
+msgid "Free Trial"
+msgstr ""
+
+#: includes/i18n.php:101
+msgid "Start my free %s"
+msgstr ""
+
+#: includes/i18n.php:103
+msgid "No commitment for %s - cancel anytime"
+msgstr ""
+
+#: includes/i18n.php:105
+msgid "After your free %s, pay as little as %s"
+msgstr ""
+
+#: includes/i18n.php:107
+msgid "Details"
+msgstr ""
+
+#: includes/i18n.php:109
+msgid "Account Details"
+msgstr ""
+
+#: includes/i18n.php:111
+msgctxt "verb"
+msgid "Delete"
+msgstr ""
+
+#: includes/i18n.php:113
+msgctxt "verb"
+msgid "Show"
+msgstr ""
+
+#: includes/i18n.php:115
+msgctxt "verb"
+msgid "Hide"
+msgstr ""
+
+#: includes/i18n.php:117
+msgctxt "verb"
+msgid "Edit"
+msgstr ""
+
+#: includes/i18n.php:119
+msgid "Date"
+msgstr ""
+
+#: includes/i18n.php:121
+msgid "Amount"
+msgstr ""
+
+#: includes/i18n.php:123
+msgid "Invoice"
+msgstr ""
+
+#: includes/i18n.php:125
+msgid "Billing"
+msgstr ""
+
+#: includes/i18n.php:127
+msgid "Payments"
+msgstr ""
+
+#: includes/i18n.php:129
+msgid "Delete Account"
+msgstr ""
+
+#: includes/i18n.php:131
+msgctxt "as close a window"
+msgid "Dismiss"
+msgstr ""
+
+#: includes/i18n.php:133
+msgctxt "as product pricing plan"
+msgid "Plan"
+msgstr ""
+
+#: includes/i18n.php:135
+msgid "Change Plan"
+msgstr ""
+
+#: includes/i18n.php:137
+msgctxt "as download professional version"
+msgid "Download %s Version"
+msgstr ""
+
+#: includes/i18n.php:139
+msgctxt "as download professional version now"
+msgid "Download %s version now"
+msgstr ""
+
+#: includes/i18n.php:141
+msgctxt "as download latest version"
+msgid "Download Latest"
+msgstr ""
+
+#: includes/i18n.php:143
+msgctxt "E.g. you have a professional license."
+msgid "You have a %s license."
+msgstr ""
+
+#: includes/i18n.php:145
+msgid "New"
+msgstr ""
+
+#: includes/i18n.php:147
+msgid "Free"
+msgstr ""
+
+#: includes/i18n.php:149
+msgctxt "as trial plan"
+msgid "Trial"
+msgstr ""
+
+#: includes/i18n.php:151
+msgctxt "verb"
+msgid "Purchase"
+msgstr ""
+
+#: includes/i18n.php:153
+msgid "Purchase License"
+msgstr ""
+
+#: includes/i18n.php:155
+msgctxt "verb"
+msgid "Buy"
+msgstr ""
+
+#: includes/i18n.php:157
+msgid "Buy License"
+msgstr ""
+
+#: includes/i18n.php:159
+msgid "Single Site License"
+msgstr ""
+
+#: includes/i18n.php:161
+msgid "Unlimited Licenses"
+msgstr ""
+
+#: includes/i18n.php:163
+msgid "Up to %s Sites"
+msgstr ""
+
+#: includes/i18n.php:165
+msgid "%sRenew your license now%s to access version %s features and support."
+msgstr ""
+
+#: includes/i18n.php:167
+msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
+msgstr ""
+
+#: includes/i18n.php:169
+msgctxt "e.g. Professional Plan"
+msgid "%s Plan"
+msgstr ""
+
+#: includes/i18n.php:171
+msgid "You are just one step away - %s"
+msgstr ""
+
+#: includes/i18n.php:173
+msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
+msgid "Complete \"%s\" Activation Now"
+msgstr ""
+
+#: includes/i18n.php:175
+msgid "We made a few tweaks to the plugin, %s"
+msgstr ""
+
+#: includes/i18n.php:177
+msgid "Opt-in to make \"%s\" Better!"
+msgstr ""
+
+#: includes/i18n.php:179
+msgid "Error"
+msgstr ""
+
+#: includes/i18n.php:181
+msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
+msgstr ""
+
+#: includes/i18n.php:187
+msgctxt "as expiration date"
+msgid "Expiration"
+msgstr ""
+
+#: includes/i18n.php:189
+msgctxt "as software license"
+msgid "License"
+msgstr ""
+
+#: includes/i18n.php:191
+msgid "not verified"
+msgstr ""
+
+#: includes/i18n.php:193
+msgid "Verify Email"
+msgstr ""
+
+#: includes/i18n.php:195
+msgctxt "e.g. expires in 2 months"
+msgid "Expires in %s"
+msgstr ""
+
+#: includes/i18n.php:197
+msgctxt "e.g. auto renews in 2 months"
+msgid "Auto renews in %s"
+msgstr ""
+
+#: includes/i18n.php:199
+msgid "No expiration"
+msgstr ""
+
+#: includes/i18n.php:201
+msgid "Expired"
+msgstr ""
+
+#: includes/i18n.php:203
+msgid "Cancelled"
+msgstr ""
+
+#: includes/i18n.php:205
+msgctxt "e.g. In 2 hours"
+msgid "In %s"
+msgstr ""
+
+#: includes/i18n.php:207
+msgctxt "e.g. 2 min ago"
+msgid "%s ago"
+msgstr ""
+
+#: includes/i18n.php:209
+msgctxt "as plugin version"
+msgid "Version"
+msgstr ""
+
+#: includes/i18n.php:211
+msgid "Name"
+msgstr ""
+
+#: includes/i18n.php:213
+msgid "Email"
+msgstr ""
+
+#: includes/i18n.php:215
+msgid "Email address"
+msgstr ""
+
+#: includes/i18n.php:217
+msgid "Verified"
+msgstr ""
+
+#: includes/i18n.php:219
+msgid "Plugin"
+msgstr ""
+
+#: includes/i18n.php:221
+msgid "Plugins"
+msgstr ""
+
+#: includes/i18n.php:223
+msgid "Themes"
+msgstr ""
+
+#: includes/i18n.php:225
+msgctxt "as file/folder path"
+msgid "Path"
+msgstr ""
+
+#: includes/i18n.php:227
+msgid "Title"
+msgstr ""
+
+#: includes/i18n.php:229
+msgid "Free version"
+msgstr ""
+
+#: includes/i18n.php:231
+msgid "Premium version"
+msgstr ""
+
+#: includes/i18n.php:233
+msgctxt "as WP plugin slug"
+msgid "Slug"
+msgstr ""
+
+#: includes/i18n.php:235
+msgid "ID"
+msgstr ""
+
+#: includes/i18n.php:237
+msgid "Users"
+msgstr ""
+
+#: includes/i18n.php:239
+msgid "Plugin Installs"
+msgstr ""
+
+#: includes/i18n.php:241
+msgctxt "like websites"
+msgid "Sites"
+msgstr ""
+
+#: includes/i18n.php:243
+msgid "User ID"
+msgstr ""
+
+#: includes/i18n.php:245
+msgid "Site ID"
+msgstr ""
+
+#: includes/i18n.php:247
+msgid "Public Key"
+msgstr ""
+
+#: includes/i18n.php:249
+msgid "Secret Key"
+msgstr ""
+
+#: includes/i18n.php:251
+msgctxt "as secret encryption key missing"
+msgid "No Secret"
+msgstr ""
+
+#: includes/i18n.php:253
+msgid "No ID"
+msgstr ""
+
+#: includes/i18n.php:255
+msgctxt "as synchronize license"
+msgid "Sync License"
+msgstr ""
+
+#: includes/i18n.php:257
+msgctxt "as synchronize"
+msgid "Sync"
+msgstr ""
+
+#: includes/i18n.php:259
+msgid "Activate License"
+msgstr ""
+
+#: includes/i18n.php:261
+msgid "Activate Free Version"
+msgstr ""
+
+#: includes/i18n.php:263
+msgid "Please enter the license key that you received in the email right after the purchase:"
+msgstr ""
+
+#: includes/i18n.php:265
+msgid "Activating license..."
+msgstr ""
+
+#: includes/i18n.php:267
+msgid "Change License"
+msgstr ""
+
+#: includes/i18n.php:269
+msgid "Update License"
+msgstr ""
+
+#: includes/i18n.php:271
+msgid "Deactivate License"
+msgstr ""
+
+#: includes/i18n.php:273
+msgid "Activate"
+msgstr ""
+
+#: includes/i18n.php:275
+msgid "Deactivate"
+msgstr ""
+
+#: includes/i18n.php:277
+msgid "Skip & Deactivate"
+msgstr ""
+
+#: includes/i18n.php:279
+msgid "No - just deactivate"
+msgstr ""
+
+#: includes/i18n.php:281
+msgid "Yes - do your thing"
+msgstr ""
+
+#: includes/i18n.php:283
+msgctxt "active mode"
+msgid "Active"
+msgstr ""
+
+#: includes/i18n.php:285
+msgctxt "is active mode?"
+msgid "Is Active"
+msgstr ""
+
+#: includes/i18n.php:287
+msgid "Install Now"
+msgstr ""
+
+#: includes/i18n.php:289
+msgid "Install Update Now"
+msgstr ""
+
+#: includes/i18n.php:291
+msgid "More information about %s"
+msgstr ""
+
+#: includes/i18n.php:293
+msgid "Localhost"
+msgstr ""
+
+#: includes/i18n.php:295
+msgctxt "as activate Professional plan"
+msgid "Activate %s Plan"
+msgstr ""
+
+#: includes/i18n.php:297
+msgctxt "as 5 licenses left"
+msgid "%s left"
+msgstr ""
+
+#: includes/i18n.php:299
+msgid "Last license"
+msgstr ""
+
+#: includes/i18n.php:301
+msgid "What is your %s?"
+msgstr ""
+
+#: includes/i18n.php:303
+msgid "Activate this add-on"
+msgstr ""
+
+#: includes/i18n.php:305
+msgid "Deactivating your license will block all premium features, but will enable you to activate the license on another site. Are you sure you want to proceed?"
+msgstr ""
+
+#: includes/i18n.php:307
+msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
+msgstr ""
+
+#: includes/i18n.php:309
+msgid "Deletion is not temporary. Only delete if you no longer want to use this plugin anymore. Are you sure you would like to continue with the deletion?"
+msgstr ""
+
+#: includes/i18n.php:311
+msgid "Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s."
+msgstr ""
+
+#: includes/i18n.php:313
+msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
+msgstr ""
+
+#: includes/i18n.php:315
+msgid "You can still enjoy all %s features but you will not have access to plugin updates and support."
+msgstr ""
+
+#: includes/i18n.php:317
+msgid "Once your license expire you can still use the Free version but you will NOT have access to the %s features."
+msgstr ""
+
+#: includes/i18n.php:319
+msgid "Are you sure you want to proceed?"
+msgstr ""
+
+#: includes/i18n.php:325
+msgid "Add Ons for %s"
+msgstr ""
+
+#: includes/i18n.php:327
+msgid "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
+msgstr ""
+
+#: includes/i18n.php:331
+msgid "Anonymous feedback"
+msgstr ""
+
+#: includes/i18n.php:333
+msgid "Quick feedback"
+msgstr ""
+
+#: includes/i18n.php:335
+msgid "If you have a moment, please let us know why you are deactivating"
+msgstr ""
+
+#: includes/i18n.php:337
+msgid "Yes - Deactivate"
+msgstr ""
+
+#: includes/i18n.php:339
+msgid "Submit & Deactivate"
+msgstr ""
+
+#: includes/i18n.php:341
+msgctxt "the text of the cancel button of the plugin deactivation dialog box."
+msgid "Cancel"
+msgstr ""
+
+#: includes/i18n.php:343
+msgid "I no longer need the plugin"
+msgstr ""
+
+#: includes/i18n.php:345
+msgid "I found a better plugin"
+msgstr ""
+
+#: includes/i18n.php:347
+msgid "I only needed the plugin for a short period"
+msgstr ""
+
+#: includes/i18n.php:349
+msgid "The plugin broke my site"
+msgstr ""
+
+#: includes/i18n.php:351
+msgid "The plugin suddenly stopped working"
+msgstr ""
+
+#: includes/i18n.php:353
+msgid "I can't pay for it anymore"
+msgstr ""
+
+#: includes/i18n.php:355
+msgid "It's a temporary deactivation. I'm just debugging an issue."
+msgstr ""
+
+#: includes/i18n.php:357
+msgctxt "the text of the \"other\" reason for deactivating the plugin that is shown in the modal box."
+msgid "Other"
+msgstr ""
+
+#: includes/i18n.php:359
+msgid "Kindly tell us the reason so we can improve."
+msgstr ""
+
+#: includes/i18n.php:361
+msgid "What's the plugin's name?"
+msgstr ""
+
+#: includes/i18n.php:363
+msgid "What price would you feel comfortable paying?"
+msgstr ""
+
+#: includes/i18n.php:365
+msgid "I couldn't understand how to make it work"
+msgstr ""
+
+#: includes/i18n.php:367
+msgid "The plugin is great, but I need specific feature that you don't support"
+msgstr ""
+
+#: includes/i18n.php:369
+msgid "The plugin is not working"
+msgstr ""
+
+#: includes/i18n.php:371
+msgid "It's not what I was looking for"
+msgstr ""
+
+#: includes/i18n.php:373
+msgid "The plugin didn't work as expected"
+msgstr ""
+
+#: includes/i18n.php:375
+msgid "What feature?"
+msgstr ""
+
+#: includes/i18n.php:377
+msgid "Kindly share what didn't work so we can fix it for future users..."
+msgstr ""
+
+#: includes/i18n.php:379
+msgid "What you've been looking for?"
+msgstr ""
+
+#: includes/i18n.php:381
+msgid "What did you expect?"
+msgstr ""
+
+#: includes/i18n.php:383
+msgid "The plugin didn't work"
+msgstr ""
+
+#: includes/i18n.php:385
+msgid "I don't like to share my information with you"
+msgstr ""
+
+#: includes/i18n.php:387
+msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
+msgstr ""
+
+#: includes/i18n.php:395
+msgctxt "greeting"
+msgid "Hey %s,"
+msgstr ""
+
+#: includes/i18n.php:397
+msgctxt "a greeting. E.g. Thanks John!"
+msgid "Thanks %s!"
+msgstr ""
+
+#: includes/i18n.php:399
+msgid "In order to enjoy all our features and functionality, %s needs to connect your user, %s at %s, to %s"
+msgstr ""
+
+#: includes/i18n.php:401
+msgid "Please help us improve %2$s! If you opt-in, some data about your usage of %2$s will be sent to %5$s. If you skip this, that's okay! %2$s will still work just fine."
+msgstr ""
+
+#: includes/i18n.php:403
+msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to complete the install."
+msgstr ""
+
+#: includes/i18n.php:405
+msgid "Thanks for purchasing %s! To get started, please enter your license key:"
+msgstr ""
+
+#: includes/i18n.php:407
+msgid "The plugin will be periodically sending data to %s to check for plugin updates and verify the validity of your license."
+msgstr ""
+
+#: includes/i18n.php:409
+msgid "What permissions are being granted?"
+msgstr ""
+
+#: includes/i18n.php:411
+msgid "Your Profile Overview"
+msgstr ""
+
+#: includes/i18n.php:413
+msgid "Name and email address"
+msgstr ""
+
+#: includes/i18n.php:415
+msgid "Your Site Overview"
+msgstr ""
+
+#: includes/i18n.php:417
+msgid "Site URL, WP version, PHP info, plugins & themes"
+msgstr ""
+
+#: includes/i18n.php:419
+msgid "Current Plugin Events"
+msgstr ""
+
+#: includes/i18n.php:421
+msgid "Activation, deactivation and uninstall"
+msgstr ""
+
+#: includes/i18n.php:423
+msgid "Plugins & Themes"
+msgstr ""
+
+#: includes/i18n.php:425
+msgid "Titles, versions and state."
+msgstr ""
+
+#: includes/i18n.php:427
+msgid "Newsletter"
+msgstr ""
+
+#: includes/i18n.php:429
+msgid "Updates, announcements, marketing, no spam"
+msgstr ""
+
+#: includes/i18n.php:431
+msgid "Privacy Policy"
+msgstr ""
+
+#: includes/i18n.php:433
+msgid "Terms of Service"
+msgstr ""
+
+#: includes/i18n.php:435
+msgctxt "as activating plugin"
+msgid "Activating"
+msgstr ""
+
+#: includes/i18n.php:437
+msgctxt "as in the process of sending an email"
+msgid "Sending email"
+msgstr ""
+
+#: includes/i18n.php:439
+msgctxt "button label"
+msgid "Allow & Continue"
+msgstr ""
+
+#: includes/i18n.php:441
+msgctxt "button label"
+msgid "Agree & Activate License"
+msgstr ""
+
+#: includes/i18n.php:443
+msgctxt "verb"
+msgid "Skip"
+msgstr ""
+
+#: includes/i18n.php:445
+msgid "Click here to use the plugin anonymously"
+msgstr ""
+
+#: includes/i18n.php:447
+msgid "Re-send activation email"
+msgstr ""
+
+#: includes/i18n.php:449
+msgid "License key"
+msgstr ""
+
+#: includes/i18n.php:451
+msgid "Send License Key"
+msgstr ""
+
+#: includes/i18n.php:453
+msgid "Sending license key"
+msgstr ""
+
+#: includes/i18n.php:455
+msgid "Have a license key?"
+msgstr ""
+
+#: includes/i18n.php:457
+msgid "Don't have a license key?"
+msgstr ""
+
+#: includes/i18n.php:459
+msgid "Can't find your license key?"
+msgstr ""
+
+#: includes/i18n.php:471
+msgid "Screenshots"
+msgstr ""
+
+#: includes/i18n.php:473
+msgid "Click to view full-size screenshot %d"
+msgstr ""
+
+#: includes/i18n.php:481
+msgid "Freemius Debug"
+msgstr ""
+
+#: includes/i18n.php:483
+msgctxt "as turned on"
+msgid "On"
+msgstr ""
+
+#: includes/i18n.php:485
+msgctxt "as turned off"
+msgid "Off"
+msgstr ""
+
+#: includes/i18n.php:487
+msgctxt "as code debugging"
+msgid "Debugging"
+msgstr ""
+
+#: includes/i18n.php:489
+msgid "Freemius State"
+msgstr ""
+
+#: includes/i18n.php:491
+msgctxt "as connection was successful"
+msgid "Connected"
+msgstr ""
+
+#: includes/i18n.php:493
+msgctxt "as connection blocked"
+msgid "Blocked"
+msgstr ""
+
+#: includes/i18n.php:495
+msgctxt "as application program interface"
+msgid "API"
+msgstr ""
+
+#: includes/i18n.php:497
+msgctxt "as software development kit versions"
+msgid "SDK"
+msgstr ""
+
+#: includes/i18n.php:499
+msgctxt "as software development kit versions"
+msgid "SDK Versions"
+msgstr ""
+
+#: includes/i18n.php:501
+msgctxt "as plugin folder path"
+msgid "Plugin Path"
+msgstr ""
+
+#: includes/i18n.php:503
+msgctxt "as sdk path"
+msgid "SDK Path"
+msgstr ""
+
+#: includes/i18n.php:505
+msgid "Add Ons of Plugin %s"
+msgstr ""
+
+#: includes/i18n.php:507
+msgid "Are you sure you want to delete all Freemius data?"
+msgstr ""
+
+#: includes/i18n.php:509
+msgid "Actions"
+msgstr ""
+
+#: includes/i18n.php:511
+msgid "Delete All Accounts"
+msgstr ""
+
+#: includes/i18n.php:513
+msgid "Start Fresh"
+msgstr ""
+
+#: includes/i18n.php:515
+msgid "Clear API Cache"
+msgstr ""
+
+#: includes/i18n.php:517
+msgid "Sync Data From Server"
+msgstr ""
+
+#: includes/i18n.php:519
+msgid "Scheduled Crons"
+msgstr ""
+
+#: includes/i18n.php:521
+msgid "Plugins & Themes Sync"
+msgstr ""
+
+#: includes/i18n.php:529
+msgctxt "as congratulations"
+msgid "Congrats"
+msgstr ""
+
+#: includes/i18n.php:531
+msgctxt "exclamation"
+msgid "Oops"
+msgstr ""
+
+#: includes/i18n.php:533
+msgctxt "interjection expressing joy or exuberance"
+msgid "Yee-haw"
+msgstr ""
+
+#: includes/i18n.php:535
+msgctxt "(especially in electronic communication) used to express elation, enthusiasm, or triumph."
+msgid "W00t"
+msgstr ""
+
+#: includes/i18n.php:537
+msgctxt "a positive response"
+msgid "Right on"
+msgstr ""
+
+#: includes/i18n.php:539
+msgctxt "something somebody says when they are thinking about what you have just said. "
+msgid "Hmm"
+msgstr ""
+
+#: includes/i18n.php:541
+msgid "O.K"
+msgstr ""
+
+#: includes/i18n.php:543
+msgctxt "exclamation"
+msgid "Hey"
+msgstr ""
+
+#: includes/i18n.php:545
+msgctxt "advance notice of something that will need attention."
+msgid "Heads up"
+msgstr ""
+
+#: includes/i18n.php:553
+msgid "Seems like you got the latest release."
+msgstr ""
+
+#: includes/i18n.php:555
+msgid "You are all good!"
+msgstr ""
+
+#: includes/i18n.php:557
+msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
+msgstr ""
+
+#: includes/i18n.php:559
+msgid "If you would like to give up the ownership of the plugin's account to %s click the Change Ownership button."
+msgstr ""
+
+#: includes/i18n.php:561
+msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
+msgstr ""
+
+#: includes/i18n.php:563
+msgid "Your name was successfully updated."
+msgstr ""
+
+#: includes/i18n.php:565
+msgid "You have successfully updated your %s."
+msgstr ""
+
+#: includes/i18n.php:567
+msgid "Please provide your full name."
+msgstr ""
+
+#: includes/i18n.php:569
+msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
+msgstr ""
+
+#: includes/i18n.php:571
+msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
+msgstr ""
+
+#: includes/i18n.php:573
+msgid "No credit card required"
+msgstr ""
+
+#: includes/i18n.php:575
+msgid "Premium plugin version was successfully activated."
+msgstr ""
+
+#: includes/i18n.php:577
+msgid "The upgrade of %s was successfully completed."
+msgstr ""
+
+#: includes/i18n.php:579
+msgid "Your account was successfully activated with the %s plan."
+msgstr ""
+
+#: includes/i18n.php:581
+msgid "Download the latest %s version now"
+msgstr ""
+
+#: includes/i18n.php:583
+msgid "Please follow these steps to complete the upgrade"
+msgstr ""
+
+#: includes/i18n.php:585
+msgid "Download the latest %s version"
+msgstr ""
+
+#: includes/i18n.php:587
+msgid "Deactivate the free version"
+msgstr ""
+
+#: includes/i18n.php:589
+msgid "Upload and activate the downloaded version"
+msgstr ""
+
+#: includes/i18n.php:591
+msgid "How to upload and activate?"
+msgstr ""
+
+#: includes/i18n.php:593
+msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
+msgid "%s Add-on was successfully purchased."
+msgstr ""
+
+#: includes/i18n.php:595
+msgid "Your %s Add-on plan was successfully upgraded."
+msgstr ""
+
+#: includes/i18n.php:597
+msgid "Your email has been successfully verified - you are AWESOME!"
+msgstr ""
+
+#: includes/i18n.php:599
+msgid "Your plan was successfully upgraded."
+msgstr ""
+
+#: includes/i18n.php:601
+msgid "Your plan was successfully changed to %s."
+msgstr ""
+
+#: includes/i18n.php:603
+msgid "Your license has expired. You can still continue using the free plugin forever."
+msgstr ""
+
+#: includes/i18n.php:605
+msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
+msgstr ""
+
+#: includes/i18n.php:607
+msgid "Your trial has been successfully started."
+msgstr ""
+
+#: includes/i18n.php:609
+msgid "Your license was successfully activated."
+msgstr ""
+
+#: includes/i18n.php:611
+msgid "It looks like your site currently doesn't have an active license."
+msgstr ""
+
+#: includes/i18n.php:613
+msgid "Your license was successfully deactivated, you are back to the %s plan."
+msgstr ""
+
+#: includes/i18n.php:615
+msgid "It looks like the license deactivation failed."
+msgstr ""
+
+#: includes/i18n.php:617
+msgid "It looks like the license could not be activated."
+msgstr ""
+
+#: includes/i18n.php:619
+msgid "Error received from the server:"
+msgstr ""
+
+#: includes/i18n.php:621
+msgid "Your trial has expired. You can still continue using all our free features."
+msgstr ""
+
+#: includes/i18n.php:623
+msgid "Your plan was successfully downgraded. Your %s plan license will expire in %s."
+msgstr ""
+
+#: includes/i18n.php:625
+msgid "Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes."
+msgstr ""
+
+#: includes/i18n.php:627
+msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
+msgstr ""
+
+#: includes/i18n.php:629
+msgid "Your %s free trial was successfully cancelled."
+msgstr ""
+
+#: includes/i18n.php:631
+msgctxt "%s - numeric version number"
+msgid "Version %s was released."
+msgstr ""
+
+#: includes/i18n.php:633
+msgid "Please download %s."
+msgstr ""
+
+#: includes/i18n.php:635
+msgctxt "%s - plan name, as the latest professional version here"
+msgid "the latest %s version here"
+msgstr ""
+
+#: includes/i18n.php:637
+msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
+msgstr ""
+
+#: includes/i18n.php:639
+msgctxt "call to action"
+msgid "Start free trial"
+msgstr ""
+
+#: includes/i18n.php:641
+msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
+msgstr ""
+
+#: includes/i18n.php:643
+msgid "You already utilized a trial before."
+msgstr ""
+
+#: includes/i18n.php:645
+msgid "You are already running the plugin in a trial mode."
+msgstr ""
+
+#: includes/i18n.php:647
+msgid "Plan %s do not exist, therefore, can't start a trial."
+msgstr ""
+
+#: includes/i18n.php:649
+msgid "Plan %s does not support a trial period."
+msgstr ""
+
+#: includes/i18n.php:651
+msgid "None of the plugin's plans supports a trial period."
+msgstr ""
+
+#: includes/i18n.php:653
+msgid "Unexpected API error. Please contact the plugin's author with the following error."
+msgstr ""
+
+#: includes/i18n.php:655
+msgid "No commitment for %s days - cancel anytime!"
+msgstr ""
+
+#: includes/i18n.php:657
+msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
+msgstr ""
+
+#: includes/i18n.php:659
+msgid "Couldn't activate %s."
+msgstr ""
+
+#: includes/i18n.php:661
+msgid "Please contact us with the following message:"
+msgstr ""
+
+#: includes/i18n.php:663
+msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
+msgstr ""
+
+#: includes/i18n.php:665
+msgid "Please contact us here"
+msgstr ""
+
+#: includes/i18n.php:667
+msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
+msgstr ""
+
+#: includes/i18n.php:673
+msgid "From unknown reason, the API connectivity test failed."
+msgstr ""
+
+#: includes/i18n.php:675
+msgid "It's probably a temporary issue on our end. Just to be sure, with your permission, would it be o.k to run another connectivity test?"
+msgstr ""
+
+#: includes/i18n.php:677
+msgid "We use PHP cURL library for the API calls, which is a very common library and usually installed out of the box. Unfortunately, cURL is not installed on your server."
+msgstr ""
+
+#: includes/i18n.php:679
+msgid "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
+msgstr ""
+
+#: includes/i18n.php:681
+msgctxt "as pluginX requires an access to our API"
+msgid "%s requires an access to our API."
+msgstr ""
+
+#: includes/i18n.php:683
+msgid "It looks like your server is using Squid ACL (access control lists), which blocks the connection."
+msgstr ""
+
+#: includes/i18n.php:685
+msgid "I don't know what is Squid or ACL, help me!"
+msgstr ""
+
+#: includes/i18n.php:687, includes/i18n.php:695
+msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
+msgstr ""
+
+#: includes/i18n.php:689
+msgid "I'm a system administrator"
+msgstr ""
+
+#: includes/i18n.php:691
+msgid "Great, please whitelist the following domains: %s. Once you done, deactivate the plugin and activate it again."
+msgstr ""
+
+#: includes/i18n.php:693
+msgid "I don't know what is cURL or how to install it, help me!"
+msgstr ""
+
+#: includes/i18n.php:697
+msgid "Great, please install cURL and enable it in your php.ini file. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the plugin and reactivate it back again."
+msgstr ""
+
+#: includes/i18n.php:699
+msgid "We are sure it's an issue on our side and more than happy to resolve it for you ASAP if you give us a chance."
+msgstr ""
+
+#: includes/i18n.php:701
+msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
+msgstr ""
+
+#: includes/i18n.php:703
+msgid "Yes - I'm giving you a chance to fix it"
+msgstr ""
+
+#: includes/i18n.php:705
+msgid "We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update."
+msgstr ""
+
+#: includes/i18n.php:707
+msgid "Let's try your previous version"
+msgstr ""
+
+#: includes/i18n.php:709
+msgid "Uninstall this version and install the previous one."
+msgstr ""
+
+#: includes/i18n.php:711
+msgid "That's exhausting, please deactivate"
+msgstr ""
+
+#: includes/i18n.php:713
+msgid "We feel your frustration and sincerely apologize for the inconvenience. Hope to see you again in the future."
+msgstr ""
+
+#: includes/i18n.php:715
+msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
+msgstr ""
+
+#: includes/i18n.php:717
+msgctxt "%1s - plugin title, %2s - API domain"
+msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
+msgstr ""
+
+#: includes/i18n.php:719
+msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
+msgstr ""
+
+#: includes/i18n.php:725
+msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
+msgstr ""
+
+#: includes/i18n.php:727
+msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
+msgstr ""
+
+#: includes/i18n.php:729
+msgid "%s is the new owner of the account."
+msgstr ""
+
+#: includes/i18n.php:733
+msgctxt "addonX cannot run without pluginY"
+msgid "%s cannot run without %s."
+msgstr ""
+
+#: includes/i18n.php:735
+msgctxt "addonX cannot run..."
+msgid "%s cannot run without the plugin."
+msgstr ""
+
+#: includes/i18n.php:737
+msgctxt "pluginX activation was successfully..."
+msgid "%s activation was successfully completed."
+msgstr ""
+
+#: includes/i18n.php:739
+msgctxt "Plugin installer section title"
+msgid "Features & Pricing"
+msgstr ""
+
+#: includes/i18n.php:741
+msgid "Add-on must be deployed to WordPress.org or Freemius."
+msgstr ""
+
+#: includes/i18n.php:743
+msgid "Paid add-on must be deployed to Freemius."
+msgstr ""
+
+#: includes/i18n.php:747
+msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
+msgstr ""
+
+#: includes/i18n.php:749
+msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
+msgstr ""
+
+#: includes/i18n.php:755
+msgctxt "as every month"
+msgid "Monthly"
+msgstr ""
+
+#: includes/i18n.php:757
+msgctxt "as monthly period"
+msgid "mo"
+msgstr ""
+
+#: includes/i18n.php:759
+msgctxt "as once a year"
+msgid "Annual"
+msgstr ""
+
+#: includes/i18n.php:761
+msgctxt "as once a year"
+msgid "Annually"
+msgstr ""
+
+#: includes/i18n.php:763
+msgctxt "as once a year"
+msgid "Once"
+msgstr ""
+
+#: includes/i18n.php:765
+msgctxt "as annual period"
+msgid "year"
+msgstr ""
+
+#: includes/i18n.php:767
+msgid "Lifetime"
+msgstr ""
+
+#: includes/i18n.php:769
+msgctxt "e.g. the best product"
+msgid "Best"
+msgstr ""
+
+#: includes/i18n.php:771
+msgctxt "e.g. billed monthly"
+msgid "Billed %s"
+msgstr ""
+
+#: includes/i18n.php:773
+msgctxt "as a discount of $5 or 10%"
+msgid "Save %s"
+msgstr ""
+
+#: includes/i18n.php:777
+msgid "View details"
+msgstr ""
diff --git a/wp-content/plugins/nextgen-gallery/freemius/require.php b/wp-content/plugins/nextgen-gallery/freemius/require.php
new file mode 100644
index 0000000000000000000000000000000000000000..082cd93043b1604d6873332ba7e1ec80b0da3eb6
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/require.php
@@ -0,0 +1,43 @@
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2016, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.9
+	 */
+
+	// Configuration should be loaded first.
+	require_once dirname( __FILE__ ) . '/config.php';
+
+	// Logger must be loaded before any other.
+	require_once WP_FS__DIR_INCLUDES . '/class-fs-logger.php';
+	require_once WP_FS__DIR_INCLUDES . '/debug/debug-bar-start.php';
+
+	require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
+//		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-key-value-storage.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-license-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-plan-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-plugin-manager.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-entity.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-scope-entity.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-user.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-site.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-info.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-tag.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-plan.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-pricing.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-payment.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-license.php';
+	require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-subscription.php';
+	require_once WP_FS__DIR_INCLUDES . '/class-fs-api.php';
+	require_once WP_FS__DIR_INCLUDES . '/class-fs-plugin-updater.php';
+	require_once WP_FS__DIR_INCLUDES . '/class-fs-security.php';
+	require_once WP_FS__DIR_INCLUDES . '/class-freemius-abstract.php';
+	require_once WP_FS__DIR_INCLUDES . '/sdk/Exceptions/Exception.php';
+	require_once WP_FS__DIR_INCLUDES . '/class-freemius.php';
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/start.php b/wp-content/plugins/nextgen-gallery/freemius/start.php
index eba031309f73922bd7defbdd4ad8205c1ba19ecb..552d84eeeef01b270a13d7e4606d7977a9ed9e03 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/start.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/start.php
@@ -15,7 +15,7 @@
 	 *
 	 * @var string
 	 */
-	$this_sdk_version = '1.1.8.1';
+	$this_sdk_version = '1.2.1';
 
 	#region SDK Selection Logic --------------------------------------------------------------------
 
@@ -260,39 +260,8 @@
 			define( 'WP_FS__SDK_VERSION', $this_sdk_version );
 		}
 
-		// Configuration should be loaded first.
-		require_once dirname( __FILE__ ) . '/config.php';
-
-		// Logger must be loaded before any other.
-		require_once WP_FS__DIR_INCLUDES . '/class-fs-logger.php';
-		require_once WP_FS__DIR_INCLUDES . '/debug/debug-bar-start.php';
-
-		require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
-//		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-key-value-storage.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-license-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-plan-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-plugin-manager.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-entity.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-scope-entity.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-user.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-site.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-info.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-tag.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-plan.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-pricing.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-plugin-license.php';
-		require_once WP_FS__DIR_INCLUDES . '/entities/class-fs-subscription.php';
-		require_once WP_FS__DIR_INCLUDES . '/class-fs-api.php';
-		require_once WP_FS__DIR_INCLUDES . '/class-fs-plugin-updater.php';
-		require_once WP_FS__DIR_INCLUDES . '/class-fs-security.php';
-		require_once WP_FS__DIR_INCLUDES . '/class-freemius-abstract.php';
-		require_once WP_FS__DIR_INCLUDES . '/class-freemius.php';
+		// Load SDK files.
+		require_once dirname( __FILE__ ) . '/require.php';
 
 		/**
 		 * Quick shortcut to get Freemius for specified plugin.
@@ -314,23 +283,25 @@
 		 * @param bool   $is_premium Hints freemius if running the premium plugin or not.
 		 *
 		 * @return Freemius
+		 *
+		 * @deprecated Please use fs_dynamic_init().
 		 */
 		function fs_init( $slug, $plugin_id, $public_key, $is_live = true, $is_premium = true ) {
-			$fs = Freemius::instance( $slug );
+			$fs = Freemius::instance( $slug, true );
 			$fs->init( $plugin_id, $public_key, $is_live, $is_premium );
 
 			return $fs;
 		}
 
 		/**
-		 * @param array [string]string $plugin
+		 * @param array<string,string> $module Plugin or Theme details.
 		 *
 		 * @return Freemius
 		 * @throws Freemius_Exception
 		 */
-		function fs_dynamic_init( $plugin ) {
-			$fs = Freemius::instance( $plugin['slug'] );
-			$fs->dynamic_init( $plugin );
+		function fs_dynamic_init( $module ) {
+			$fs = Freemius::instance( $module['slug'], true );
+			$fs->dynamic_init( $module );
 
 			return $fs;
 		}
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/account.php b/wp-content/plugins/nextgen-gallery/freemius/templates/account.php
index adc0659029055089e1ca42d03a638ff07b8742b7..6f72702199eaa0c7d218038786e445f3555ac06f 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/account.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/account.php
@@ -1,625 +1,691 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$slug = $VARS['slug'];
-	/**
-	 * @var Freemius $fs
-	 */
-	$fs = freemius( $slug );
-
-	/**
-	 * @var FS_Plugin_Tag $update
-	 */
-	$update = $fs->get_update( false, false );
-
-	$is_paying              = $fs->is_paying();
-	$user                   = $fs->get_user();
-	$site                   = $fs->get_site();
-	$name                   = $user->get_name();
-	$license                = $fs->_get_license();
-	$subscription           = $fs->_get_subscription();
-	$plan                   = $fs->get_plan();
-	$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
-	$is_paid_trial          = $fs->is_paid_trial();
-	$show_upgrade           = ( ! $is_paying && ! $is_paid_trial );
-?>
-
-<div class="wrap">
-<h2 class="nav-tab-wrapper">
-	<a href="<?php $fs->get_account_url() ?>" class="nav-tab nav-tab-active"><?php _efs( 'account', $slug ) ?></a>
-	<?php if ( $fs->has_addons() ) : ?>
-		<a href="<?php echo $fs->_get_admin_page_url( 'addons' ) ?>"
-		   class="nav-tab"><?php _efs( 'add-ons', $slug ) ?></a>
-	<?php endif ?>
-	<?php if ( $fs->is_not_paying() && $fs->has_paid_plan() ) : ?>
-		<a href="<?php echo $fs->get_upgrade_url() ?>" class="nav-tab"><?php _efs( 'upgrade', $slug ) ?></a>
-		<?php if ( $fs->apply_filters( 'show_trial', true ) && ! $fs->is_trial_utilized() && $fs->has_trial_plan() ) : ?>
-			<a href="<?php echo $fs->get_trial_url() ?>" class="nav-tab"><?php _efs( 'free-trial', $slug ) ?></a>
-		<?php endif ?>
-	<?php endif ?>
-</h2>
-
-<div id="poststuff">
-<div id="fs_account">
-<div class="has-sidebar has-right-sidebar">
-<div class="has-sidebar-content">
-<div class="postbox">
-<h3><?php _efs('account-details', $slug) ?></h3>
-
-<div class="fs-header-actions">
-	<ul>
-		<li>
-			<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST">
-				<input type="hidden" name="fs_action" value="delete_account">
-				<?php wp_nonce_field('delete_account') ?>
-				<a href="#" onclick="if (confirm('<?php
-					if ($is_active_subscription) {
-					echo esc_attr(sprintf(__fs('delete-account-x-confirm', $slug), $plan->title));
-					} else {
-					_efs('delete-account-confirm', $slug);
-					}
-				?>'))  this.parentNode.submit(); return false;"><i
-						class="dashicons dashicons-no"></i> <?php _efs('delete-account', $slug) ?></a>
-			</form>
-		</li>
-		<?php if ($is_paying) : ?>
-		<li>
-			&nbsp;•&nbsp;
-			<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST">
-				<input type="hidden" name="fs_action" value="deactivate_license">
-				<?php wp_nonce_field('deactivate_license') ?>
-				<a href="#"
-				   onclick="if (confirm('<?php _efs('deactivate-license-confirm', $slug) ?>')) this.parentNode.submit(); return false;"><i
-						class="dashicons dashicons-admin-network"></i> <?php _efs('deactivate-license', $slug) ?>
-				</a>
-			</form>
-		</li>
-		<?php if (! $license->is_lifetime() &&
-			$is_active_subscription
-			) : ?>
-		<li>
-			&nbsp;•&nbsp;
-			<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST">
-				<input type="hidden" name="fs_action" value="downgrade_account">
-				<?php wp_nonce_field('downgrade_account') ?>
-				<a href="#"
-				   onclick="if (confirm('<?php printf(__fs('downgrade-x-confirm', $slug), $plan->title, human_time_diff(time(), strtotime($license->expiration))) ?> <?php if (! $license->is_block_features) {
-					   printf(__fs('after-downgrade-non-blocking', $slug), $plan->title);
-					   } else {
-					   printf(__fs('after-downgrade-blocking', $slug), $plan->title);
-					   }?> <?php _efs('proceed-confirmation', $slug) ?>')) this.parentNode.submit(); return false;"><i
-						class="dashicons dashicons-download"></i> <?php _efs('downgrade', $slug) ?></a>
-			</form>
-		</li>
-		<?php endif ?>
-		<li>
-			&nbsp;•&nbsp;
-			<a href="<?php echo $fs->get_upgrade_url() ?>"><i
-					class="dashicons dashicons-grid-view"></i> <?php _efs('change-plan', $slug) ?></a>
-		</li>
-		<?php elseif ($is_paid_trial) : ?>
-		<li>
-			&nbsp;•&nbsp;
-			<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST">
-				<input type="hidden" name="fs_action" value="cancel_trial">
-				<?php wp_nonce_field('cancel_trial') ?>
-				<a href="#"
-				   onclick="if (confirm('<?php _efs('cancel-trial-confirm') ?>')) this.parentNode.submit(); return false;"><i
-						class="dashicons dashicons-download"></i> <?php _efs('cancel-trial', $slug) ?></a>
-			</form>
-		</li>
-		<?php endif ?>
-		<li>
-			&nbsp;•&nbsp;
-			<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST">
-				<input type="hidden" name="fs_action" value="<?php echo $slug ?>_sync_license">
-				<?php wp_nonce_field($slug . '_sync_license') ?>
-				<a href="#" onclick="this.parentNode.submit(); return false;"><i
-						class="dashicons dashicons-image-rotate"></i> <?php _efs('sync', $slug) ?></a>
-			</form>
-		</li>
-
-	</ul>
-</div>
-<div class="inside">
-	<table id="fs_account_details" cellspacing="0" class="fs-key-value-table">
-		<?php
-			$profile = array();
-			$profile[] = array(
-			'id' => 'user_name',
-			'title' => __fs('name', $slug),
-			'value' => $name
-			);
-			//					if (isset($user->email) && false !== strpos($user->email, '@'))
-			$profile[] = array(
-			'id' => 'email',
-			'title' => __fs('email', $slug),
-			'value' => $user->email
-			);
-			if (is_numeric($user->id)) {
-			$profile[] = array(
-			'id' => 'user_id',
-			'title' => __fs('user-id', $slug),
-			'value' => $user->id
-			);
-			}
-
-			$profile[] = array(
-			'id' => 'site_id',
-			'title' => __fs('site-id', $slug),
-			'value' => is_string($site->id) ?
-			$site->id :
-			__fs('no-id', $slug)
-			);
-
-			$profile[] = array(
-			'id' => 'site_public_key',
-			'title' => __fs('public-key', $slug),
-			'value' => $site->public_key
-			);
-
-			$profile[] = array(
-			'id' => 'site_secret_key',
-			'title' => __fs('secret-key', $slug),
-			'value' => ((is_string($site->secret_key)) ?
-			$site->secret_key :
-			__fs('no-secret', $slug)
-			)
-			);
-
-			if ($fs->has_paid_plan()) {
-			if ($fs->is_trial()) {
-			$trial_plan = $fs->get_trial_plan();
-
-			$profile[] = array(
-			'id' => 'plan',
-			'title' => __fs('plan', $slug),
-			'value' => (is_string($trial_plan->name) ?
-			strtoupper($trial_plan->title) :
-			__fs('trial', $slug))
-			);
-			} else {
-			$profile[] = array(
-			'id' => 'plan',
-			'title' => __fs('plan', $slug),
-			'value' => is_string($site->plan->name) ?
-			strtoupper($site->plan->title) :
-			strtoupper(__fs('free', $slug))
-			);
-			}
-			}
-
-			$profile[] = array(
-			'id' => 'version',
-			'title' => __fs('version', $slug),
-			'value' => $fs->get_plugin_version()
-			);
-		?>
-			<?php $odd = true;
-			foreach ($profile as $p) : ?>
-					<?php
-			if ('plan' === $p['id'] && ! $fs->has_paid_plan()) {
-			// If plugin don't have any paid plans, there's no reason
-			// to show current plan.
-			continue;
-			}
-		?>
-		<tr class="fs-field-<?php echo $p['id'] ?><?php if ($odd) : ?> alternate<?php endif ?>">
-			<td>
-				<nobr><?php echo $p['title'] ?>:</nobr>
-			</td>
-			<td>
-				<code><?php echo htmlspecialchars($p['value']) ?></code>
-				<?php if ('email' === $p['id'] && ! $user->is_verified()) : ?>
-				<label class="fs-tag fs-warn"><?php _efs('not-verified', $slug) ?></label>
-				<?php endif ?>
-							<?php if ('plan' === $p['id']) : ?>
-								<?php if ($fs->is_trial()) : ?>
-				<label class="fs-tag fs-success"><?php _efs('trial', $slug) ?></label>
-				<?php endif ?>
-								<?php if (is_object($license) && ! $license->is_lifetime()) : ?>
-									<?php if (! $is_active_subscription && ! $license->is_first_payment_pending()) : ?>
-				<label
-					class="fs-tag fs-warn"><?php printf(__fs('expires-in', $slug), human_time_diff(time(), strtotime($license->expiration))) ?></label>
-				<?php elseif ($is_active_subscription && ! $subscription->is_first_payment_pending()) : ?>
-				<label
-					class="fs-tag fs-success"><?php printf(__fs('renews-in', $slug), human_time_diff(time(), strtotime($subscription->next_payment))) ?></label>
-				<?php endif ?>
-								<?php elseif ($fs->is_trial()) : ?>
-				<label
-					class="fs-tag fs-warn"><?php printf(__fs('expires-in', $slug), human_time_diff(time(), strtotime($site->trial_ends))) ?></label>
-				<?php endif ?>
-							<?php endif ?>
-							<?php if ('version' === $p['id'] && $fs->has_paid_plan()) : ?>
-								<?php if ($fs->is_premium()) : ?>
-				<label
-					class="fs-tag fs-<?php echo $fs->can_use_premium_code() ? 'success' : 'warn' ?>"><?php _efs('premium-version') ?></label>
-				<?php elseif ($fs->can_use_premium_code()) : ?>
-				<label class="fs-tag fs-warn"><?php _efs('free-version') ?></label>
-				<?php endif ?>
-							<?php endif ?>
-			</td>
-			<td class="fs-right">
-				<?php if ('email' === $p['id'] && ! $user->is_verified()) : ?>
-				<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST">
-					<input type="hidden" name="fs_action" value="verify_email">
-					<?php wp_nonce_field('verify_email') ?>
-					<input type="submit" class="button button-small"
-					       value="<?php _efs('verify-email', $slug) ?>">
-				</form>
-				<?php endif ?>
-							<?php if ('plan' === $p['id']) : ?>
-				<div class="button-group">
-					<?php $license = $fs->is_free_plan() ? $fs->_get_available_premium_license() : false ?>
-									<?php if (false !== $license && ($license->left() > 0 || ($site->is_localhost() && $license->is_free_localhost))) : ?>
-										<?php $premium_plan = $fs->_get_plan_by_id($license->plan_id) ?>
-					<form action="<?php echo $fs->_get_admin_page_url('account') ?>"
-					      method="POST">
-						<input type="hidden" name="fs_action" value="activate_license">
-						<input type="hidden" name="license_id" value="<?php echo $license->id ?>">
-						<?php wp_nonce_field('activate_license') ?>
-						<input type="submit" class="button button-primary"
-						       value="<?php printf(
-							       __fs( 'activate-x-plan', $slug ) . '%s',
-							       $premium_plan->title,
-							       ( $site->is_localhost() && $license->is_free_localhost ) ?
-								       ' [' . __fs( 'localhost', $slug ) . ']' :
-								       ( $license->is_single_site() ?
-									       '' :
-									       ' [' . ( 1 < $license->left() ?
-										       sprintf( __fs( 'x-left', $slug ), $license->left() ) :
-										       strtolower( __fs( 'last-license', $slug ) ) ) . ']'
-								       )
-						       ) ?> ">
-					</form>
-					<?php else : ?>
-					<form action="<?php echo $fs->_get_admin_page_url('account') ?>"
-					      method="POST" class="button-group">
-						<input type="submit" class="button"
-						       value="<?php _efs('sync-license', $slug) ?>">
-						<input type="hidden" name="fs_action"
-						       value="<?php echo $slug ?>_sync_license">
-						<?php wp_nonce_field($slug . '_sync_license') ?>
-						<a href="<?php echo $fs->get_upgrade_url() ?>"
-						   class="button<?php if ($show_upgrade) {
-							   echo ' button-primary';
-							   } ?> button-upgrade"><i
-								class="dashicons dashicons-cart"></i> <?php ($show_upgrade) ?
-								_efs('upgrade', $slug) :
-								_efs('change-plan', $slug)
-							?></a>
-					</form>
-					<?php endif ?>
-				</div>
-				<?php elseif ('version' === $p['id']) : ?>
-				<div class="button-group">
-					<?php if ($is_paying || $fs->is_trial()) : ?>
-										<?php if (! $fs->is_allowed_to_install()) : ?>
-					<a target="_blank" class="button button-primary"
-					   href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php echo sprintf(__fs('download-x-version', $slug), $site->plan->title) . (is_object($update) ? ' [' . $update->version . ']' : '') ?></a>
-					<?php elseif (is_object($update)) : ?>
-					<a class="button button-primary"
-					   href="<?php echo wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=' . $fs->get_plugin_basename()), 'upgrade-plugin_' . $fs->get_plugin_basename()) ?>"><?php echo __fs('install-update-now', $slug) . ' [' . $update->version . ']' ?></a>
-					<?php endif ?>
-									<?php endif; ?>
-				</div>
-				<?php
-					elseif (/*in_array($p['id'], array('site_secret_key', 'site_id', 'site_public_key')) ||*/
-					(is_string($user->secret_key) && in_array($p['id'], array(
-					'email',
-					'user_name'
-					)))
-					) : ?>
-				<form action="<?php echo $fs->_get_admin_page_url('account') ?>" method="POST"
-				      onsubmit="var val = prompt('<?php printf(__fs('what-is-your-x', $slug), $p['title']) ?>', '<?php echo $p['value'] ?>'); if (null == val || '' === val) return false; jQuery('input[name=fs_<?php echo $p['id'] ?>_<?php echo $slug ?>]').val(val); return true;">
-					<input type="hidden" name="fs_action" value="update_<?php echo $p['id'] ?>">
-					<input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $slug ?>"
-					       value="">
-					<?php wp_nonce_field('update_' . $p['id']) ?>
-					<input type="submit" class="button button-small"
-					       value="<?php _ex('Edit', 'verb', 'freemius') ?>">
-				</form>
-				<?php endif ?>
-			</td>
-		</tr>
-		<?php $odd = ! $odd;
-			endforeach ?>
-	</table>
-</div>
-</div>
-<?php
-	$account_addons = $fs->get_account_addons();
-	if (! is_array($account_addons)) {
-	$account_addons = array();
-	}
-
-	$installed_addons = $fs->get_installed_addons();
-	$installed_addons_ids = array();
-	foreach ($installed_addons as $fs_addon) {
-	$installed_addons_ids[] = $fs_addon->get_id();
-	}
-
-	$addons_to_show = array_unique(array_merge($installed_addons_ids, $account_addons));
-?>
-	<?php if (0 < count($addons_to_show)) : ?>
-<div class="postbox">
-<div class="">
-<!--				<div class="inside">-->
-<table id="fs_addons" class="widefat">
-<thead>
-<tr>
-	<th><h3><?php _efs('add-ons', $slug) ?></h3></th>
-	<th><?php _efs('id', $slug) ?></th>
-	<th><?php _efs('version', $slug) ?></th>
-	<th><?php _efs('plan', $slug) ?></th>
-	<th><?php _efs('license', $slug) ?></th>
-	<th></th>
-	<?php if (defined('WP_FS__DEV_MODE') && WP_FS__DEV_MODE) : ?>
-		<th></th>
-	<?php endif ?>
-</tr>
-</thead>
-<tbody>
-<?php $odd = true;
-	foreach ($addons_to_show as $addon_id) : ?>
-				<?php
-	$addon = $fs->get_addon($addon_id);
-	$is_addon_activated = $fs->is_addon_activated($addon->slug);
-	$is_addon_connected = $fs->is_addon_connected($addon->slug);
-
-	$fs_addon = $is_addon_connected ? freemius($addon->slug) : false;
-	if (is_object($fs_addon)) {
-	$is_paying = $fs_addon->is_paying();
-	$user = $fs_addon->get_user();
-	$site = $fs_addon->get_site();
-	$license = $fs_addon->_get_license();
-	$subscription = $fs_addon->_get_subscription();
-	$plan = $fs_addon->get_plan();
-	$is_active_subscription = (is_object($subscription) && $subscription->is_active());
-	$is_paid_trial = $fs_addon->is_paid_trial();
-	$show_upgrade = (! $is_paying && ! $is_paid_trial && ! $fs_addon->_has_premium_license());
-	$is_current_license_expired = is_object($license) && $license->is_expired();
-	}
-
-	//					var_dump( $is_paid_trial, $license, $site, $subscription );
-
-?>
-<tr<?php if ($odd) {
-	echo ' class="alternate"';
-	} ?>>
-<td>
-	<!-- Title -->
-	<?php echo $addon->title ?>
-</td>
-<?php if ($is_addon_connected) : ?>
-					<?php // Add-on Installed ?>
-					<?php $addon_site = $fs_addon->get_site(); ?>
-<td>
-	<!-- ID -->
-	<?php echo $addon_site->id ?>
-</td>
-<td>
-	<!-- Version -->
-	<?php echo $fs_addon->get_plugin_version() ?>
-</td>
-<td>
-	<!-- Plan Title -->
-	<?php echo is_string($addon_site->plan->name) ? strtoupper($addon_site->plan->title) : 'FREE' ?>
-</td>
-<td>
-	<!-- Expiration -->
-	<?php
-		$tags = array();
-
-		if ($fs_addon->is_trial()) {
-		$tags[] = array('label' => __fs('trial', $slug), 'type' => 'success');
-
-		$tags[] = array(
-		'label' => sprintf(__fs(($is_paid_trial ? 'renews-in' : 'expires-in'), $slug), human_time_diff(time(), strtotime($site->trial_ends))),
-		'type' => ($is_paid_trial ? 'success' : 'warn')
-		);
-		} else {
-		if (is_object($license)) {
-		if ($license->is_cancelled) {
-		$tags[] = array(
-		'label' => __fs('cancelled', $slug),
-		'type' => 'error'
-		);
-		} else if ($license->is_expired()) {
-		$tags[] = array(
-		'label' => __fs('expired', $slug),
-		'type' => 'error'
-		);
-		} else if ($license->is_lifetime()) {
-		$tags[] = array(
-		'label' => __fs('no-expiration', $slug),
-		'type' => 'success'
-		);
-		} else if (! $is_active_subscription && ! $license->is_first_payment_pending()) {
-		$tags[] = array(
-		'label' => sprintf(__fs('expires-in', $slug), human_time_diff(time(), strtotime($license->expiration))),
-		'type' => 'warn'
-		);
-		} else if ($is_active_subscription && ! $subscription->is_first_payment_pending()) {
-		$tags[] = array(
-		'label' => sprintf(__fs('renews-in', $slug), human_time_diff(time(), strtotime($subscription->next_payment))),
-		'type' => 'success'
-		);
-		}
-		}
-		}
-
-		foreach ($tags as $t) {
-		printf('<label class="fs-tag fs-%s">%s</label>' . "\n", $t['type'], $t['label']);
-		}
-	?>
-</td>
-<?php
-	$buttons = array();
-	if ($is_addon_activated) {
-	if ($is_paying) {
-	$buttons[] = fs_ui_get_action_button(
-	$slug,
-	'account',
-	'deactivate_license',
-	__fs('deactivate-license', $slug),
-	array('plugin_id' => $addon_id),
-	false
-	);
-	} else if ($is_paid_trial) {
-	$buttons[] = fs_ui_get_action_button(
-	$slug,
-	'account',
-	'cancel_trial',
-	__fs('cancel-trial', $slug),
-	array('plugin_id' => $addon_id),
-	false,
-	'dashicons dashicons-download',
-	__fs('cancel-trial-confirm', $slug),
-	'POST'
-	);
-	} else {
-	$premium_license = $fs_addon->_get_available_premium_license();
-
-	if (is_object($premium_license)) {
-	$site = $fs_addon->get_site();
-
-	$buttons[] = fs_ui_get_action_button(
-	$slug,
-	'account',
-	'activate_license',
-	sprintf(__fs('activate-x-plan', $slug), $fs_addon->get_plan_title(), ($site->is_localhost() && $premium_license->is_free_localhost) ? '[localhost]' : (1 < $premium_license->left() ? $premium_license->left() . ' left' : '')),
-	array(
-	'plugin_id' => $addon_id,
-	'license_id' => $premium_license->id,
-	)
-	);
-	}
-	}
-
-	if (0 == count($buttons)) {
-	// Add sync license only if non of the other CTAs are visible.
-	$buttons[] = fs_ui_get_action_button(
-	$slug,
-	'account',
-	$slug . '_sync_license',
-	__fs('sync-license', $slug),
-	array('plugin_id' => $addon_id),
-	false
-	);
-
-	}
-	} else if (! $show_upgrade) {
-	if ($fs->is_addon_installed($addon->slug)) {
-	$addon_file = $fs->get_addon_basename($addon->slug);
-	$buttons[] = sprintf(
-	'<a class="button button-primary" href="%s" title="%s" class="edit">%s</a>',
-	wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $addon_file, 'activate-plugin_' . $addon_file),
-	esc_attr(__fs('activate-this-addon', $slug)),
-	__fs('activate', $slug)
-	);
-	} else {
-	if ($fs->is_allowed_to_install()) {
-	$buttons[] = sprintf(
-	'<a class="button button-primary" href="%s" class="edit">%s</a>',
-	wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $addon->slug), 'install-plugin_' . $addon->slug),
-	__fs('install-now', $slug)
-	);
-	} else {
-	$buttons[] = sprintf(
-	'<a target="_blank" class="button button-primary" href="%s" class="edit">%s</a>',
-	$fs->_get_latest_download_local_url($addon_id),
-	__fs('download-latest', $slug)
-	);
-	}
-	}
-	}
-
-	if ($show_upgrade) {
-	$buttons[] = sprintf('<a href="%s" class="thickbox button button-primary" aria-label="%s" data-title="%s"><i class="dashicons dashicons-cart"></i> %s</a>',
-	esc_url(network_admin_url('plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
-	'&TB_iframe=true&width=600&height=550')),
-	esc_attr(sprintf(__fs('more-information-about-x', $slug), $addon->title)),
-	esc_attr($addon->title),
-	__fs(($fs_addon->has_free_plan() ? 'upgrade' : 'purchase'), $slug)
-	);
-	}
-
-	$buttons_count = count($buttons);
-?>
-
-<td>
-	<!-- Actions -->
-	<?php if ($buttons_count > 1) : ?>
-	<div class="button-group">
-		<?php endif ?>
-							<?php foreach ($buttons as $button) : ?>
-								<?php echo $button ?>
-							<?php endforeach ?>
-							<?php if ($buttons_count > 1) : ?>
-	</div>
-	<?php endif ?>
-</td>
-<?php else : ?>
-					<?php // Add-on NOT Installed or was never connected.
-?>
-<td colspan="4">
-	<!-- Action -->
-	<?php if ($fs->is_addon_installed($addon->slug)) : ?>
-							<?php $addon_file = $fs->get_addon_basename($addon->slug) ?>
-	<a class="button button-primary"
-	   href="<?php echo wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $addon_file, 'activate-plugin_' . $addon_file) ?>"
-	   title="<?php esc_attr(__fs('activate-this-addon', $slug)) ?>"
-	   class="edit"><?php _efs('activate', $slug) ?></a>
-	<?php else : ?>
-							<?php if ($fs->is_allowed_to_install()) : ?>
-	<a class="button button-primary"
-	   href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $addon->slug), 'install-plugin_' . $addon->slug) ?>"><?php _efs('install-now', $slug) ?></a>
-	<?php else : ?>
-	<a target="_blank" class="button button-primary"
-	   href="<?php echo $fs->_get_latest_download_local_url($addon_id) ?>"><?php _efs('download-latest', $slug) ?></a>
-	<?php endif ?>
-						<?php endif ?>
-</td>
-<?php endif ?>
-				<?php if (defined('WP_FS__DEV_MODE') && WP_FS__DEV_MODE) : ?>
-<td>
-	<!-- Optional Delete Action -->
-	<?php
-		if ($is_addon_activated) {
-		fs_ui_action_button(
-		$slug, 'account',
-		'delete_account',
-		__fs('delete', $slug),
-		array('plugin_id' => $addon_id),
-		false
-		);
-		}
-	?>
-</td>
-<?php endif ?>
-</tr>
-<?php $odd = ! $odd;
-	endforeach ?>
-</tbody>
-</table>
-</div>
-</div>
-<?php endif ?>
-
-	<?php $fs->do_action('after_account_details') ?>
-</div>
-</div>
-</div>
-</div>
-</div>
-<?php fs_require_template('powered-by.php') ?>
\ No newline at end of file
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	/**
+	 * @var Freemius $fs
+	 */
+	$fs = freemius( $slug );
+
+	/**
+	 * @var FS_Plugin_Tag $update
+	 */
+	$update = $fs->get_update( false, false );
+
+	$is_paying              = $fs->is_paying();
+	$user                   = $fs->get_user();
+	$site                   = $fs->get_site();
+	$name                   = $user->get_name();
+	$license                = $fs->_get_license();
+	$subscription           = $fs->_get_subscription();
+	$plan                   = $fs->get_plan();
+	$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
+	$is_paid_trial          = $fs->is_paid_trial();
+	$show_upgrade           = ( $fs->has_paid_plan() && ! $is_paying && ! $is_paid_trial );
+
+	if ( $show_upgrade ) {
+		$fs->_require_license_activation_dialog();
+	}
+?>
+	<div class="wrap">
+	<h2 class="nav-tab-wrapper">
+		<a href="<?php echo $fs->get_account_url() ?>"
+		   class="nav-tab nav-tab-active"><?php _efs( 'account', $slug ) ?></a>
+		<?php if ( $fs->has_addons() ) : ?>
+			<a href="<?php echo $fs->_get_admin_page_url( 'addons' ) ?>"
+			   class="nav-tab"><?php _efs( 'add-ons', $slug ) ?></a>
+		<?php endif ?>
+		<?php if ( $show_upgrade ) : ?>
+			<a href="<?php echo $fs->get_upgrade_url() ?>" class="nav-tab"><?php _efs( 'upgrade', $slug ) ?></a>
+			<?php if ( $fs->apply_filters( 'show_trial', true ) && ! $fs->is_trial_utilized() && $fs->has_trial_plan() ) : ?>
+				<a href="<?php echo $fs->get_trial_url() ?>" class="nav-tab"><?php _efs( 'free-trial', $slug ) ?></a>
+			<?php endif ?>
+		<?php endif ?>
+		<?php if ( ! $plan->is_free() ) : ?>
+			<a href="<?php echo $fs->get_account_tab_url( 'billing' ) ?>"
+			   class="nav-tab"><?php _efs( 'billing', $slug ) ?></a>
+		<?php endif ?>
+	</h2>
+
+	<div id="poststuff">
+	<div id="fs_account">
+	<div class="has-sidebar has-right-sidebar">
+	<div class="has-sidebar-content">
+	<div class="postbox">
+	<h3><?php _efs( 'account-details', $slug ) ?></h3>
+
+	<div class="fs-header-actions">
+		<ul>
+			<li>
+				<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
+					<input type="hidden" name="fs_action" value="delete_account">
+					<?php wp_nonce_field( 'delete_account' ) ?>
+					<a href="#" onclick="if (confirm('<?php
+						if ( $is_active_subscription ) {
+							echo esc_attr( sprintf( __fs( 'delete-account-x-confirm', $slug ), $plan->title ) );
+						} else {
+							_efs( 'delete-account-confirm', $slug );
+						}
+					?>'))  this.parentNode.submit(); return false;"><i
+							class="dashicons dashicons-no"></i> <?php _efs( 'delete-account', $slug ) ?></a>
+				</form>
+			</li>
+			<?php if ( $is_paying ) : ?>
+				<li>
+					&nbsp;•&nbsp;
+					<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
+						<input type="hidden" name="fs_action" value="deactivate_license">
+						<?php wp_nonce_field( 'deactivate_license' ) ?>
+						<a href="#"
+						   onclick="if (confirm('<?php _efs( 'deactivate-license-confirm', $slug ) ?>')) this.parentNode.submit(); return false;"><i
+								class="dashicons dashicons-admin-network"></i> <?php _efs( 'deactivate-license', $slug ) ?>
+						</a>
+					</form>
+				</li>
+				<?php if ( ! $license->is_lifetime() &&
+				           $is_active_subscription
+				) : ?>
+					<li>
+						&nbsp;•&nbsp;
+						<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
+							<input type="hidden" name="fs_action" value="downgrade_account">
+							<?php wp_nonce_field( 'downgrade_account' ) ?>
+							<a href="#"
+							   onclick="if (confirm('<?php printf( __fs( 'downgrade-x-confirm', $slug ), $plan->title, human_time_diff( time(), strtotime( $license->expiration ) ) ) ?> <?php if ( ! $license->is_block_features ) {
+								   printf( __fs( 'after-downgrade-non-blocking', $slug ), $plan->title );
+							   } else {
+								   printf( __fs( 'after-downgrade-blocking', $slug ), $plan->title );
+							   }?> <?php _efs( 'proceed-confirmation', $slug ) ?>')) this.parentNode.submit(); return false;"><i
+									class="dashicons dashicons-download"></i> <?php _efs( 'downgrade', $slug ) ?></a>
+						</form>
+					</li>
+				<?php endif ?>
+				<li>
+					&nbsp;•&nbsp;
+					<a href="<?php echo $fs->get_upgrade_url() ?>"><i
+							class="dashicons dashicons-grid-view"></i> <?php _efs( 'change-plan', $slug ) ?></a>
+				</li>
+			<?php elseif ( $is_paid_trial ) : ?>
+				<li>
+					&nbsp;•&nbsp;
+					<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
+						<input type="hidden" name="fs_action" value="cancel_trial">
+						<?php wp_nonce_field( 'cancel_trial' ) ?>
+						<a href="#"
+						   onclick="if (confirm('<?php _efs( 'cancel-trial-confirm' ) ?>')) this.parentNode.submit(); return false;"><i
+								class="dashicons dashicons-download"></i> <?php _efs( 'cancel-trial', $slug ) ?></a>
+					</form>
+				</li>
+			<?php endif ?>
+			<li>
+				&nbsp;•&nbsp;
+				<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
+					<input type="hidden" name="fs_action" value="<?php echo $slug ?>_sync_license">
+					<?php wp_nonce_field( $slug . '_sync_license' ) ?>
+					<a href="#" onclick="this.parentNode.submit(); return false;"><i
+							class="dashicons dashicons-image-rotate"></i> <?php _efs( 'sync', $slug ) ?></a>
+				</form>
+			</li>
+
+		</ul>
+	</div>
+	<div class="inside">
+	<table id="fs_account_details" cellspacing="0" class="fs-key-value-table">
+	<?php
+		$profile   = array();
+		$profile[] = array(
+			'id'    => 'user_name',
+			'title' => __fs( 'name', $slug ),
+			'value' => $name
+		);
+		//					if (isset($user->email) && false !== strpos($user->email, '@'))
+		$profile[] = array(
+			'id'    => 'email',
+			'title' => __fs( 'email', $slug ),
+			'value' => $user->email
+		);
+
+		if ( is_numeric( $user->id ) ) {
+			$profile[] = array(
+				'id'    => 'user_id',
+				'title' => __fs( 'user-id', $slug ),
+				'value' => $user->id
+			);
+		}
+
+		$profile[] = array(
+			'id'    => 'site_id',
+			'title' => __fs( 'site-id', $slug ),
+			'value' => is_string( $site->id ) ?
+				$site->id :
+				__fs( 'no-id', $slug )
+		);
+
+		$profile[] = array(
+			'id'    => 'site_public_key',
+			'title' => __fs( 'public-key', $slug ),
+			'value' => $site->public_key
+		);
+
+		$profile[] = array(
+			'id'    => 'site_secret_key',
+			'title' => __fs( 'secret-key', $slug ),
+			'value' => ( ( is_string( $site->secret_key ) ) ?
+				$site->secret_key :
+				__fs( 'no-secret', $slug )
+			)
+		);
+
+		$profile[] = array(
+			'id'    => 'version',
+			'title' => __fs( 'version', $slug ),
+			'value' => $fs->get_plugin_version()
+		);
+
+		if ( $fs->has_paid_plan() ) {
+			if ( $fs->is_trial() ) {
+				$trial_plan = $fs->get_trial_plan();
+
+				$profile[] = array(
+					'id'    => 'plan',
+					'title' => __fs( 'plan', $slug ),
+					'value' => ( is_string( $trial_plan->name ) ?
+						strtoupper( $trial_plan->title ) :
+						__fs( 'trial', $slug ) )
+				);
+			} else {
+				$profile[] = array(
+					'id'    => 'plan',
+					'title' => __fs( 'plan', $slug ),
+					'value' => is_string( $site->plan->name ) ?
+						strtoupper( $site->plan->title ) :
+						strtoupper( __fs( 'free', $slug ) )
+				);
+
+				if ( is_object( $license ) ) {
+					$profile[] = array(
+						'id'    => 'license_key',
+						'title' => __fs( 'License Key', $slug ),
+						'value' => $license->secret_key,
+					);
+				}
+			}
+		}
+	?>
+	<?php $odd = true;
+		foreach ( $profile as $p ) : ?>
+			<?php
+			if ( 'plan' === $p['id'] && ! $fs->has_paid_plan() ) {
+				// If plugin don't have any paid plans, there's no reason
+				// to show current plan.
+				continue;
+			}
+			?>
+			<tr class="fs-field-<?php echo $p['id'] ?><?php if ( $odd ) : ?> alternate<?php endif ?>">
+				<td>
+					<nobr><?php echo $p['title'] ?>:</nobr>
+				</td>
+				<td<?php if ( 'plan' === $p['id'] ) { echo ' colspan="2"'; }?>>
+					<?php if ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
+						<code><?php echo htmlspecialchars( substr( $p['value'], 0, 6 ) ) . str_pad( '', 23 * 6, '&bull;' ) . htmlspecialchars( substr( $p['value'], - 3 ) ) ?></code>
+						<input type="text" value="<?php echo htmlspecialchars( $p['value'] ) ?>" style="display: none"
+						       readonly/>
+					<?php else : ?>
+						<code><?php echo htmlspecialchars( $p['value'] ) ?></code>
+					<?php endif ?>
+					<?php if ( 'email' === $p['id'] && ! $user->is_verified() ) : ?>
+						<label class="fs-tag fs-warn"><?php _efs( 'not-verified', $slug ) ?></label>
+					<?php endif ?>
+					<?php if ( 'plan' === $p['id'] ) : ?>
+						<?php if ( $fs->is_trial() ) : ?>
+							<label class="fs-tag fs-success"><?php _efs( 'trial', $slug ) ?></label>
+						<?php endif ?>
+						<?php if ( is_object( $license ) && ! $license->is_lifetime() ) : ?>
+							<?php if ( ! $is_active_subscription && ! $license->is_first_payment_pending() ) : ?>
+								<label
+									class="fs-tag fs-warn"><?php printf( __fs( 'expires-in', $slug ), human_time_diff( time(), strtotime( $license->expiration ) ) ) ?></label>
+							<?php elseif ( $is_active_subscription && ! $subscription->is_first_payment_pending() ) : ?>
+								<label
+									class="fs-tag fs-success"><?php printf( __fs( 'renews-in', $slug ), human_time_diff( time(), strtotime( $subscription->next_payment ) ) ) ?></label>
+							<?php endif ?>
+						<?php elseif ( $fs->is_trial() ) : ?>
+							<label
+								class="fs-tag fs-warn"><?php printf( __fs( 'expires-in', $slug ), human_time_diff( time(), strtotime( $site->trial_ends ) ) ) ?></label>
+						<?php endif ?>
+							<div class="button-group">
+								<?php $available_license = $fs->is_free_plan() ? $fs->_get_available_premium_license() : false ?>
+								<?php if ( false !== $available_license && ( $available_license->left() > 0 || ( $site->is_localhost() && $available_license->is_free_localhost ) ) ) : ?>
+									<?php $premium_plan = $fs->_get_plan_by_id( $available_license->plan_id ) ?>
+									<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>"
+									      method="POST">
+										<input type="hidden" name="fs_action" value="activate_license">
+										<input type="hidden" name="license_id" value="<?php echo $available_license->id ?>">
+										<?php wp_nonce_field( 'activate_license' ) ?>
+										<input type="submit" class="button button-primary"
+										       value="<?php printf(
+											       __fs( 'activate-x-plan', $slug ) . '%s',
+											       $premium_plan->title,
+											       ( $site->is_localhost() && $available_license->is_free_localhost ) ?
+												       ' [' . __fs( 'localhost', $slug ) . ']' :
+												       ( $available_license->is_single_site() ?
+													       '' :
+													       ' [' . ( 1 < $available_license->left() ?
+														       sprintf( __fs( 'x-left', $slug ), $available_license->left() ) :
+														       strtolower( __fs( 'last-license', $slug ) ) ) . ']'
+												       )
+										       ) ?> ">
+									</form>
+								<?php else : ?>
+									<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>"
+									      method="POST" class="button-group">
+										<?php if ($show_upgrade) : ?>
+										<a class="button activate-license-trigger <?php echo $slug ?>" href="#"><?php _efs( 'activate-license', $slug ) ?></a>
+										<?php endif ?>
+										<input type="submit" class="button"
+										       value="<?php _efs( 'sync-license', $slug ) ?>">
+										<input type="hidden" name="fs_action"
+										       value="<?php echo $slug ?>_sync_license">
+										<?php wp_nonce_field( $slug . '_sync_license' ) ?>
+										<a href="<?php echo $fs->get_upgrade_url() ?>"
+										   class="button<?php if ( $show_upgrade ) {
+											   echo ' button-primary';
+										   } ?> button-upgrade"><i
+												class="dashicons dashicons-cart"></i> <?php ( $show_upgrade ) ?
+												_efs( 'upgrade', $slug ) :
+												_efs( 'change-plan', $slug )
+											?></a>
+									</form>
+								<?php endif ?>
+							</div>
+					<?php elseif ( 'version' === $p['id'] && $fs->has_paid_plan() ) : ?>
+						<?php if ( $fs->is_premium() ) : ?>
+							<label
+								class="fs-tag fs-<?php echo $fs->can_use_premium_code() ? 'success' : 'warn' ?>"><?php _efs( 'premium-version' ) ?></label>
+						<?php elseif ( $fs->can_use_premium_code() ) : ?>
+							<label class="fs-tag fs-warn"><?php _efs( 'free-version' ) ?></label>
+						<?php endif ?>
+					<?php endif ?>
+				</td>
+				<?php if ( 'plan' !== $p['id'] ) : ?>
+				<td class="fs-right">
+					<?php if ( 'email' === $p['id'] && ! $user->is_verified() ) : ?>
+						<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
+							<input type="hidden" name="fs_action" value="verify_email">
+							<?php wp_nonce_field( 'verify_email' ) ?>
+							<input type="submit" class="button button-small"
+							       value="<?php _efs( 'verify-email', $slug ) ?>">
+						</form>
+					<?php endif ?>
+					<?php if ( 'version' === $p['id'] ) : ?>
+						<div class="button-group">
+							<?php if ( $is_paying || $fs->is_trial() ) : ?>
+								<?php if ( ! $fs->is_allowed_to_install() ) : ?>
+									<a target="_blank" class="button button-primary"
+									   href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php echo sprintf( __fs( 'download-x-version', $slug ), ( $fs->is_trial() ? $trial_plan->title : $site->plan->title ) ) . ( is_object( $update ) ? ' [' . $update->version . ']' : '' ) ?></a>
+								<?php elseif ( is_object( $update ) ) : ?>
+									<a class="button button-primary"
+									   href="<?php echo wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . $fs->get_plugin_basename() ), 'upgrade-plugin_' . $fs->get_plugin_basename() ) ?>"><?php echo __fs( 'install-update-now', $slug ) . ' [' . $update->version . ']' ?></a>
+								<?php endif ?>
+							<?php endif; ?>
+						</div>
+					<?php
+					elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
+						<button class="button button-small"><?php _efs( 'show', $slug ) ?></button>
+					<?php
+					elseif (/*in_array($p['id'], array('site_secret_key', 'site_id', 'site_public_key')) ||*/
+					( is_string( $user->secret_key ) && in_array( $p['id'], array(
+							'email',
+							'user_name'
+						) ) )
+					) : ?>
+						<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
+						      onsubmit="var val = prompt('<?php printf( __fs( 'what-is-your-x', $slug ), $p['title'] ) ?>', '<?php echo $p['value'] ?>'); if (null == val || '' === val) return false; jQuery('input[name=fs_<?php echo $p['id'] ?>_<?php echo $slug ?>]').val(val); return true;">
+							<input type="hidden" name="fs_action" value="update_<?php echo $p['id'] ?>">
+							<input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $slug ?>"
+							       value="">
+							<?php wp_nonce_field( 'update_' . $p['id'] ) ?>
+							<input type="submit" class="button button-small"
+							       value="<?php _efs( 'edit', $slug ) ?>">
+						</form>
+					<?php endif ?>
+				</td>
+				<?php endif ?>
+			</tr>
+			<?php $odd = ! $odd;
+		endforeach ?>
+	</table>
+	</div>
+	</div>
+	<script type="text/javascript">
+		(function ($) {
+			$('.fs-field-license_key button, .fs-field-site_secret_key button').click(function () {
+				var
+					$this = $(this),
+					$parent = $this.closest('tr'),
+					$input = $parent.find('input');
+
+				$parent.find('code').toggle();
+				$input.toggle();
+
+				if ($input.is(':visible')) {
+					$this.html('<?php _efs( 'hide', $slug ) ?>');
+					setTimeout(function () {
+						$input.select().focus();
+					}, 100);
+				}
+				else {
+					$this.html('<?php _efs( 'show', $slug ) ?>');
+				}
+			});
+		}(jQuery));
+
+	</script>
+
+	<?php
+		$account_addons = $fs->get_account_addons();
+		if ( ! is_array( $account_addons ) ) {
+			$account_addons = array();
+		}
+
+		$installed_addons     = $fs->get_installed_addons();
+		$installed_addons_ids = array();
+		foreach ( $installed_addons as $fs_addon ) {
+			$installed_addons_ids[] = $fs_addon->get_id();
+		}
+
+		$addons_to_show = array_unique( array_merge( $installed_addons_ids, $account_addons ) );
+	?>
+	<?php if ( 0 < count( $addons_to_show ) ) : ?>
+		<!-- Add-Ons -->
+		<div class="postbox">
+		<div class="">
+		<!--				<div class="inside">-->
+		<table id="fs_addons" class="widefat">
+		<thead>
+		<tr>
+			<th><h3><?php _efs( 'add-ons', $slug ) ?></h3></th>
+			<th><?php _efs( 'id', $slug ) ?></th>
+			<th><?php _efs( 'version', $slug ) ?></th>
+			<th><?php _efs( 'plan', $slug ) ?></th>
+			<th><?php _efs( 'license', $slug ) ?></th>
+			<th></th>
+			<?php if ( defined( 'WP_FS__DEV_MODE' ) && WP_FS__DEV_MODE ) : ?>
+				<th></th>
+			<?php endif ?>
+		</tr>
+		</thead>
+		<tbody>
+		<?php $odd = true;
+			foreach ( $addons_to_show as $addon_id ) : ?>
+				<?php
+				$addon              = $fs->get_addon( $addon_id );
+				$is_addon_activated = $fs->is_addon_activated( $addon->slug );
+				$is_addon_connected = $fs->is_addon_connected( $addon->slug );
+
+				$fs_addon = $is_addon_connected ? freemius( $addon->slug ) : false;
+				if ( is_object( $fs_addon ) ) {
+					$is_paying                  = $fs_addon->is_paying();
+					$user                       = $fs_addon->get_user();
+					$site                       = $fs_addon->get_site();
+					$license                    = $fs_addon->_get_license();
+					$subscription               = $fs_addon->_get_subscription();
+					$plan                       = $fs_addon->get_plan();
+					$is_active_subscription     = ( is_object( $subscription ) && $subscription->is_active() );
+					$is_paid_trial              = $fs_addon->is_paid_trial();
+					$show_upgrade               = ( ! $is_paying && ! $is_paid_trial && ! $fs_addon->_has_premium_license() );
+					$is_current_license_expired = is_object( $license ) && $license->is_expired();
+				}
+
+				//					var_dump( $is_paid_trial, $license, $site, $subscription );
+
+				?>
+				<tr<?php if ( $odd ) {
+					echo ' class="alternate"';
+				} ?>>
+				<td>
+					<!-- Title -->
+					<?php echo $addon->title ?>
+				</td>
+				<?php if ( $is_addon_connected ) : ?>
+					<?php // Add-on Installed ?>
+					<?php $addon_site = $fs_addon->get_site(); ?>
+					<td>
+						<!-- ID -->
+						<?php echo $addon_site->id ?>
+					</td>
+					<td>
+						<!-- Version -->
+						<?php echo $fs_addon->get_plugin_version() ?>
+					</td>
+					<td>
+						<!-- Plan Title -->
+						<?php echo is_string( $addon_site->plan->name ) ? strtoupper( $addon_site->plan->title ) : 'FREE' ?>
+					</td>
+					<td>
+						<!-- Expiration -->
+						<?php
+							$tags = array();
+
+							if ( $fs_addon->is_trial() ) {
+								$tags[] = array( 'label' => __fs( 'trial', $slug ), 'type' => 'success' );
+
+								$tags[] = array(
+									'label' => sprintf( __fs( ( $is_paid_trial ? 'renews-in' : 'expires-in' ), $slug ), human_time_diff( time(), strtotime( $site->trial_ends ) ) ),
+									'type'  => ( $is_paid_trial ? 'success' : 'warn' )
+								);
+							} else {
+								if ( is_object( $license ) ) {
+									if ( $license->is_cancelled ) {
+										$tags[] = array(
+											'label' => __fs( 'cancelled', $slug ),
+											'type'  => 'error'
+										);
+									} else if ( $license->is_expired() ) {
+										$tags[] = array(
+											'label' => __fs( 'expired', $slug ),
+											'type'  => 'error'
+										);
+									} else if ( $license->is_lifetime() ) {
+										$tags[] = array(
+											'label' => __fs( 'no-expiration', $slug ),
+											'type'  => 'success'
+										);
+									} else if ( ! $is_active_subscription && ! $license->is_first_payment_pending() ) {
+										$tags[] = array(
+											'label' => sprintf( __fs( 'expires-in', $slug ), human_time_diff( time(), strtotime( $license->expiration ) ) ),
+											'type'  => 'warn'
+										);
+									} else if ( $is_active_subscription && ! $subscription->is_first_payment_pending() ) {
+										$tags[] = array(
+											'label' => sprintf( __fs( 'renews-in', $slug ), human_time_diff( time(), strtotime( $subscription->next_payment ) ) ),
+											'type'  => 'success'
+										);
+									}
+								}
+							}
+
+							foreach ( $tags as $t ) {
+								printf( '<label class="fs-tag fs-%s">%s</label>' . "\n", $t['type'], $t['label'] );
+							}
+						?>
+					</td>
+					<?php
+					$buttons = array();
+					if ( $is_addon_activated ) {
+						if ( $is_paying ) {
+							$buttons[] = fs_ui_get_action_button(
+								$slug,
+								'account',
+								'deactivate_license',
+								__fs( 'deactivate-license', $slug ),
+								array( 'plugin_id' => $addon_id ),
+								false
+							);
+						} else if ( $is_paid_trial ) {
+							$buttons[] = fs_ui_get_action_button(
+								$slug,
+								'account',
+								'cancel_trial',
+								__fs( 'cancel-trial', $slug ),
+								array( 'plugin_id' => $addon_id ),
+								false,
+								'dashicons dashicons-download',
+								__fs( 'cancel-trial-confirm', $slug ),
+								'POST'
+							);
+						} else {
+							$premium_license = $fs_addon->_get_available_premium_license();
+
+							if ( is_object( $premium_license ) ) {
+								$site = $fs_addon->get_site();
+
+								$buttons[] = fs_ui_get_action_button(
+									$slug,
+									'account',
+									'activate_license',
+									sprintf( __fs( 'activate-x-plan', $slug ), $fs_addon->get_plan_title(), ( $site->is_localhost() && $premium_license->is_free_localhost ) ? '[localhost]' : ( 1 < $premium_license->left() ? $premium_license->left() . ' left' : '' ) ),
+									array(
+										'plugin_id'  => $addon_id,
+										'license_id' => $premium_license->id,
+									)
+								);
+							}
+						}
+
+						if ( 0 == count( $buttons ) ) {
+							// Add sync license only if non of the other CTAs are visible.
+							$buttons[] = fs_ui_get_action_button(
+								$slug,
+								'account',
+								$slug . '_sync_license',
+								__fs( 'sync-license', $slug ),
+								array( 'plugin_id' => $addon_id ),
+								false
+							);
+
+						}
+					} else if ( ! $show_upgrade ) {
+						if ( $fs->is_addon_installed( $addon->slug ) ) {
+							$addon_file = $fs->get_addon_basename( $addon->slug );
+							$buttons[]  = sprintf(
+								'<a class="button button-primary" href="%s" title="%s" class="edit">%s</a>',
+								wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $addon_file, 'activate-plugin_' . $addon_file ),
+								esc_attr( __fs( 'activate-this-addon', $slug ) ),
+								__fs( 'activate', $slug )
+							);
+						} else {
+							if ( $fs->is_allowed_to_install() ) {
+								$buttons[] = sprintf(
+									'<a class="button button-primary" href="%s" class="edit">%s</a>',
+									wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $addon->slug ), 'install-plugin_' . $addon->slug ),
+									__fs( 'install-now', $slug )
+								);
+							} else {
+								$buttons[] = sprintf(
+									'<a target="_blank" class="button button-primary" href="%s" class="edit">%s</a>',
+									$fs->_get_latest_download_local_url( $addon_id ),
+									__fs( 'download-latest', $slug )
+								);
+							}
+						}
+					}
+
+					if ( $show_upgrade ) {
+						$buttons[] = sprintf( '<a href="%s" class="thickbox button button-primary" aria-label="%s" data-title="%s"><i class="dashicons dashicons-cart"></i> %s</a>',
+							esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
+							                            '&TB_iframe=true&width=600&height=550' ) ),
+							esc_attr( sprintf( __fs( 'more-information-about-x', $slug ), $addon->title ) ),
+							esc_attr( $addon->title ),
+							__fs( ( $fs_addon->has_free_plan() ? 'upgrade' : 'purchase' ), $slug )
+						);
+					}
+
+					$buttons_count = count( $buttons );
+					?>
+
+					<td>
+						<!-- Actions -->
+						<?php if ($buttons_count > 1) : ?>
+						<div class="button-group">
+							<?php endif ?>
+							<?php foreach ( $buttons as $button ) : ?>
+								<?php echo $button ?>
+							<?php endforeach ?>
+							<?php if ($buttons_count > 1) : ?>
+						</div>
+					<?php endif ?>
+					</td>
+				<?php else : ?>
+					<?php // Add-on NOT Installed or was never connected.
+					?>
+					<td colspan="4">
+						<!-- Action -->
+						<?php if ( $fs->is_addon_installed( $addon->slug ) ) : ?>
+							<?php $addon_file = $fs->get_addon_basename( $addon->slug ) ?>
+							<a class="button button-primary"
+							   href="<?php echo wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $addon_file, 'activate-plugin_' . $addon_file ) ?>"
+							   title="<?php esc_attr( __fs( 'activate-this-addon', $slug ) ) ?>"
+							   class="edit"><?php _efs( 'activate', $slug ) ?></a>
+						<?php else : ?>
+							<?php if ( $fs->is_allowed_to_install() ) : ?>
+								<a class="button button-primary"
+								   href="<?php echo wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $addon->slug ), 'install-plugin_' . $addon->slug ) ?>"><?php _efs( 'install-now', $slug ) ?></a>
+							<?php else : ?>
+								<a target="_blank" class="button button-primary"
+								   href="<?php echo $fs->_get_latest_download_local_url( $addon_id ) ?>"><?php _efs( 'download-latest', $slug ) ?></a>
+							<?php endif ?>
+						<?php endif ?>
+					</td>
+				<?php endif ?>
+				<?php if ( defined( 'WP_FS__DEV_MODE' ) && WP_FS__DEV_MODE ) : ?>
+					<td>
+						<!-- Optional Delete Action -->
+						<?php
+							if ( $is_addon_activated ) {
+								fs_ui_action_button(
+									$slug, 'account',
+									'delete_account',
+									__fs( 'delete', $slug ),
+									array( 'plugin_id' => $addon_id ),
+									false
+								);
+							}
+						?>
+					</td>
+				<?php endif ?>
+				</tr>
+				<?php $odd = ! $odd;
+			endforeach ?>
+		</tbody>
+		</table>
+		</div>
+		</div>
+	<?php endif ?>
+
+	<?php $fs->do_action( 'after_account_details' ) ?>
+	</div>
+	</div>
+	</div>
+	</div>
+	</div>
+<?php
+	$params = array(
+		'page'           => 'account',
+		'module_id'      => $fs->get_id(),
+		'module_slug'    => $slug,
+		'module_version' => $fs->get_plugin_version(),
+	);
+	fs_require_template( 'powered-by.php', $params );
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/add-ons.php b/wp-content/plugins/nextgen-gallery/freemius/templates/add-ons.php
index e82d43a789a655a71f910879724345cdbd3209b7..c1dc5195f48e4055c5ef30b1c13a4386f8883725 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/add-ons.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/add-ons.php
@@ -1,144 +1,154 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$slug = $VARS['slug'];
-	/**
-	 * @var Freemius
-	 */
-	$fs = freemius( $slug );
-
-	$open_addon_slug = fs_request_get( 'slug' );
-
-	$open_addon = false;
-
-	/**
-	 * @var FS_Plugin[]
-	 */
-	$addons = $fs->get_addons();
-
-	$has_addons = ( is_array( $addons ) && 0 < count( $addons ) );
-?>
-	<div id="fs_addons" class="wrap">
-		<h2><?php printf( __fs( 'add-ons-for-x', $slug ), $fs->get_plugin_name() ) ?></h2>
-
-		<div id="poststuff">
-			<?php if ( ! $has_addons ) : ?>
-				<h3><?php printf(
-						'%s... %s',
-						__fs( 'oops', $slug ),
-						__fs( 'add-ons-missing', $slug )
-					) ?></h3>
-			<?php endif ?>
-				<ul class="fs-cards-list">
-				<?php if ( $has_addons ) : ?>
-					<?php foreach ( $addons as $addon ) : ?>
-						<?php
-						$open_addon = ( $open_addon || ( $open_addon_slug === $addon->slug ) );
-
-						$price        = 0;
-						$plan         = null;
-						$plans_result = $fs->get_api_site_or_plugin_scope()->get( "/addons/{$addon->id}/plans.json" );
-						if ( ! isset( $plans_result->error ) ) {
-							$plans = $plans_result->plans;
-							if ( is_array( $plans ) && 0 < count( $plans ) ) {
-								$plan           = new FS_Plugin_Plan( $plans[0] );
-								$pricing_result = $fs->get_api_site_or_plugin_scope()->get( "/addons/{$addon->id}/plans/{$plan->id}/pricing.json" );
-								if ( ! isset( $pricing_result->error ) ) {
-									// Update plan's pricing.
-									$plan->pricing = $pricing_result->pricing;
-
-									if ( is_array( $plan->pricing ) && 0 < count( $plan->pricing ) ) {
-										$min_price = 999999;
-										foreach ( $plan->pricing as $pricing ) {
-											if ( ! is_null( $pricing->annual_price ) && $pricing->annual_price > 0 ) {
-												$min_price = min( $min_price, $pricing->annual_price );
-											} else if ( ! is_null( $pricing->monthly_price ) && $pricing->monthly_price > 0 ) {
-												$min_price = min( $min_price, 12 * $pricing->monthly_price );
-											}
-										}
-
-										if ( $min_price < 999999 ) {
-											$price = $min_price;
-										}
-									}
-								}
-							}
-						}
-						?>
-						<li class="fs-card fs-addon" data-slug="<?php echo $addon->slug ?>">
-							<?php
-								echo sprintf( '<a href="%s" class="thickbox fs-overlay" aria-label="%s" data-title="%s"></a>',
-									esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
-									                            '&TB_iframe=true&width=600&height=550' ) ),
-									esc_attr( sprintf( __fs( 'more-information-about-x', $slug ), $addon->title ) ),
-									esc_attr( $addon->title )
-								);
-							?>
-							<?php
-								if ( is_null( $addon->info ) ) {
-									$addon->info = new stdClass();
-								}
-								if ( ! isset( $addon->info->card_banner_url ) ) {
-									$addon->info->card_banner_url = '//dashboard.freemius.com/assets/img/marketing/blueprint-300x100.jpg';
-								}
-								if ( ! isset( $addon->info->short_description ) ) {
-									$addon->info->short_description = 'What\'s the one thing your add-on does really, really well?';
-								}
-							?>
-							<div class="fs-inner">
-								<ul>
-									<li class="fs-card-banner"
-									    style="background-image: url('<?php echo $addon->info->card_banner_url ?>');"></li>
-<!--									<li class="fs-tag"></li>-->
-									<li class="fs-title"><?php echo $addon->title ?></li>
-									<li class="fs-offer">
-									<span
-										class="fs-price"><?php echo ( 0 == $price ) ? __fs( 'free', $slug ) : ('$' . number_format( $price, 2 ) . ($plan->has_trial() ? ' - ' . __fs('trial', $slug) : '')) ?></span>
-									</li>
-									<li class="fs-description"><?php echo ! empty( $addon->info->short_description ) ? $addon->info->short_description : 'SHORT DESCRIPTION' ?></li>
-									<li class="fs-cta"><a class="button"><?php _efs( 'view-details', $slug ) ?></a></li>
-								</ul>
-							</div>
-						</li>
-					<?php endforeach ?>
-			<?php endif ?>
-			</ul>
-		</div>
-	</div>
-	<script type="text/javascript">
-		(function ($) {
-			<?php if ( $open_addon ) : ?>
-
-			var interval = setInterval(function () {
-				// Open add-on information page.
-				$('.fs-card[data-slug=<?php echo $open_addon_slug ?>] a').click();
-				if ($('#TB_iframeContent').length > 0) {
-					clearInterval(interval);
-					interval = null;
-				}
-			}, 200);
-
-			<?php else : ?>
-
-
-			$('.fs-card.fs-addon').mouseover(function(){
-				$(this).find('.fs-cta .button').addClass('button-primary');
-			});
-
-			$('.fs-card.fs-addon').mouseout(function(){
-				$(this).find('.fs-cta .button').removeClass('button-primary');
-			});
-
-			<?php endif ?>
-		})(jQuery);
-	</script>
-<?php fs_require_template( 'powered-by.php' ) ?>
\ No newline at end of file
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	/**
+	 * @var Freemius
+	 */
+	$fs = freemius( $slug );
+
+	$open_addon_slug = fs_request_get( 'slug' );
+
+	$open_addon = false;
+
+	/**
+	 * @var FS_Plugin[]
+	 */
+	$addons = $fs->get_addons();
+
+	$has_addons = ( is_array( $addons ) && 0 < count( $addons ) );
+?>
+	<div id="fs_addons" class="wrap">
+		<h2><?php printf( __fs( 'add-ons-for-x', $slug ), $fs->get_plugin_name() ) ?></h2>
+
+		<div id="poststuff">
+			<?php if ( ! $has_addons ) : ?>
+				<h3><?php printf(
+						'%s... %s',
+						__fs( 'oops', $slug ),
+						__fs( 'add-ons-missing', $slug )
+					) ?></h3>
+			<?php endif ?>
+			<ul class="fs-cards-list">
+				<?php if ( $has_addons ) : ?>
+					<?php foreach ( $addons as $addon ) : ?>
+						<?php
+						$open_addon = ( $open_addon || ( $open_addon_slug === $addon->slug ) );
+
+						$price        = 0;
+						$plan         = null;
+						$plans_result = $fs->get_api_site_or_plugin_scope()->get( "/addons/{$addon->id}/plans.json" );
+						if ( ! isset( $plans_result->error ) ) {
+							$plans = $plans_result->plans;
+							if ( is_array( $plans ) && 0 < count( $plans ) ) {
+								$plan           = new FS_Plugin_Plan( $plans[0] );
+								$pricing_result = $fs->get_api_site_or_plugin_scope()->get( "/addons/{$addon->id}/plans/{$plan->id}/pricing.json" );
+								if ( ! isset( $pricing_result->error ) ) {
+									// Update plan's pricing.
+									$plan->pricing = $pricing_result->pricing;
+
+									if ( is_array( $plan->pricing ) && 0 < count( $plan->pricing ) ) {
+										$min_price = 999999;
+										foreach ( $plan->pricing as $pricing ) {
+											if ( ! is_null( $pricing->annual_price ) && $pricing->annual_price > 0 ) {
+												$min_price = min( $min_price, $pricing->annual_price );
+											} else if ( ! is_null( $pricing->monthly_price ) && $pricing->monthly_price > 0 ) {
+												$min_price = min( $min_price, 12 * $pricing->monthly_price );
+											}
+										}
+
+										if ( $min_price < 999999 ) {
+											$price = $min_price;
+										}
+									}
+								}
+							}
+						}
+						?>
+						<li class="fs-card fs-addon" data-slug="<?php echo $addon->slug ?>">
+							<?php
+								echo sprintf( '<a href="%s" class="thickbox fs-overlay" aria-label="%s" data-title="%s"></a>',
+									esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
+									                            '&TB_iframe=true&width=600&height=550' ) ),
+									esc_attr( sprintf( __fs( 'more-information-about-x', $slug ), $addon->title ) ),
+									esc_attr( $addon->title )
+								);
+							?>
+							<?php
+								if ( is_null( $addon->info ) ) {
+									$addon->info = new stdClass();
+								}
+								if ( ! isset( $addon->info->card_banner_url ) ) {
+									$addon->info->card_banner_url = '//dashboard.freemius.com/assets/img/marketing/blueprint-300x100.jpg';
+								}
+								if ( ! isset( $addon->info->short_description ) ) {
+									$addon->info->short_description = 'What\'s the one thing your add-on does really, really well?';
+								}
+							?>
+							<div class="fs-inner">
+								<ul>
+									<li class="fs-card-banner"
+									    style="background-image: url('<?php echo $addon->info->card_banner_url ?>');"></li>
+<!--									<li class="fs-tag"></li>-->
+									<li class="fs-title"><?php echo $addon->title ?></li>
+									<li class="fs-offer">
+									<span
+										class="fs-price"><?php echo ( 0 == $price ) ? __fs( 'free', $slug ) : ('$' . number_format( $price, 2 ) . ($plan->has_trial() ? ' - ' . __fs('trial', $slug) : '')) ?></span>
+									</li>
+									<li class="fs-description"><?php echo ! empty( $addon->info->short_description ) ? $addon->info->short_description : 'SHORT DESCRIPTION' ?></li>
+									<li class="fs-cta"><a class="button"><?php _efs( 'view-details', $slug ) ?></a></li>
+								</ul>
+							</div>
+						</li>
+					<?php endforeach ?>
+				<?php endif ?>
+			</ul>
+		</div>
+	</div>
+	<script type="text/javascript">
+		(function ($) {
+			<?php if ( $open_addon ) : ?>
+
+			var interval = setInterval(function () {
+				// Open add-on information page.
+				$('.fs-card[data-slug=<?php echo $open_addon_slug ?>] a').click();
+				if ($('#TB_iframeContent').length > 0) {
+					clearInterval(interval);
+					interval = null;
+				}
+			}, 200);
+
+			<?php else : ?>
+
+
+			$('.fs-card.fs-addon')
+				.mouseover(function () {
+					$(this).find('.fs-cta .button').addClass('button-primary');
+				}).mouseout(function () {
+					$(this).find('.fs-cta .button').removeClass('button-primary');
+				});
+
+			<?php endif ?>
+		})(jQuery);
+	</script>
+<?php
+	$params = array(
+		'page'           => 'addons',
+		'module_id'      => $fs->get_id(),
+		'module_slug'    => $slug,
+		'module_version' => $fs->get_plugin_version(),
+	);
+	fs_require_template( 'powered-by.php', $params );
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/admin-notice.php b/wp-content/plugins/nextgen-gallery/freemius/templates/admin-notice.php
index dd1750a74235633bbb49922d9b265de7e997b573..db205eb7d9f520c3ba5b6b0396642c9297d1d2c3 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/admin-notice.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/admin-notice.php
@@ -1,46 +1,46 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-?>
-<div<?php if ( ! empty( $VARS['id'] ) ) : ?> data-id="<?php echo $VARS['id'] ?>"<?php endif ?><?php if ( ! empty( $VARS['slug'] ) ) : ?> data-slug="<?php echo $VARS['slug'] ?>"<?php endif ?>
-	class="<?php
-		switch ( $VARS['type'] ) {
-			case 'error':
-				echo 'error form-invalid';
-				break;
-			case 'promotion':
-				echo 'updated promotion';
-				break;
-			case 'update':
-//			echo 'update-nag update';
-//			break;
-			case 'success':
-			default:
-				echo 'updated success';
-				break;
-		}
-	?> fs-notice<?php if ( ! empty( $VARS['sticky'] ) ) {
-		echo ' fs-sticky';
-	} ?><?php if ( ! empty( $VARS['plugin'] ) ) {
-		echo ' fs-has-title';
-	} ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?>
-		<label class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label>
-	<?php endif ?>
-	<?php if ( ! empty( $VARS['sticky'] ) ) : ?>
-		<div class="fs-close"><i class="dashicons dashicons-no"
-		                         title="<?php _efs( 'dismiss' ) ?>"></i> <span><?php _efs( 'dismiss' ) ?></span>
-		</div>
-	<?php endif ?>
-	<div class="fs-notice-body">
-		<?php if ( ! empty( $VARS['title'] ) ) : ?><b><?php echo $VARS['title'] ?></b> <?php endif ?>
-		<?php echo $VARS['message'] ?>
-	</div>
-</div>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+?>
+<div<?php if ( ! empty( $VARS['id'] ) ) : ?> data-id="<?php echo $VARS['id'] ?>"<?php endif ?><?php if ( ! empty( $VARS['slug'] ) ) : ?> data-slug="<?php echo $VARS['slug'] ?>"<?php endif ?>
+	class="<?php
+		switch ( $VARS['type'] ) {
+			case 'error':
+				echo 'error form-invalid';
+				break;
+			case 'promotion':
+				echo 'updated promotion';
+				break;
+			case 'update':
+//			echo 'update-nag update';
+//			break;
+			case 'success':
+			default:
+				echo 'updated success';
+				break;
+		}
+	?> fs-notice<?php if ( ! empty( $VARS['sticky'] ) ) {
+		echo ' fs-sticky';
+	} ?><?php if ( ! empty( $VARS['plugin'] ) ) {
+		echo ' fs-has-title';
+	} ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?>
+		<label class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label>
+	<?php endif ?>
+	<?php if ( ! empty( $VARS['sticky'] ) ) : ?>
+		<div class="fs-close"><i class="dashicons dashicons-no"
+		                         title="<?php _efs( 'dismiss' ) ?>"></i> <span><?php _efs( 'dismiss' ) ?></span>
+		</div>
+	<?php endif ?>
+	<div class="fs-notice-body">
+		<?php if ( ! empty( $VARS['title'] ) ) : ?><b><?php echo $VARS['title'] ?></b> <?php endif ?>
+		<?php echo $VARS['message'] ?>
+	</div>
+</div>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/all-admin-notice.php b/wp-content/plugins/nextgen-gallery/freemius/templates/all-admin-notice.php
index 31f7d40d06a0e66f99c33a78990bde349dbc28df..3500fac0d4f4b4cc5b2f11dab957b8102abe807b 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/all-admin-notice.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/all-admin-notice.php
@@ -1,35 +1,39 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-?>
-<div class="<?php
-	switch ($VARS['type']) {
-		case 'error':
-			echo 'error form-invalid';
-			break;
-		case 'update-nag':
-			echo 'update-nag ';
-			break;
-		case 'update':
-		case 'success':
-		default:
-			echo 'updated success';
-			break;
-	}
-?> fs-notice">
-	<?php if ('update-nag' !== $VARS['type']) : ?><p><?php endif ?>
-		<?php if (!empty($VARS['title'])) : ?>
-			<b><?php echo $VARS['title'] ?></b>
-		<?php endif ?>
-		<?php echo $VARS['message'] ?>
-	<?php if ('update-nag' !== $VARS['type']) : ?></p><?php endif ?>
-	<?php if ($VARS['sticky']) : ?><i class="dashicons dashicons-no"></i><?php endif ?>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+?>
+<div class="<?php
+	switch ($VARS['type']) {
+		case 'error':
+			echo 'error form-invalid';
+			break;
+		case 'update-nag':
+			echo 'update-nag ';
+			break;
+		case 'update':
+		case 'success':
+		default:
+			echo 'updated success';
+			break;
+	}
+?> fs-notice">
+	<?php if ('update-nag' !== $VARS['type']) : ?><p><?php endif ?>
+		<?php if (!empty($VARS['title'])) : ?>
+			<b><?php echo $VARS['title'] ?></b>
+		<?php endif ?>
+		<?php echo $VARS['message'] ?>
+	<?php if ('update-nag' !== $VARS['type']) : ?></p><?php endif ?>
+	<?php if ($VARS['sticky']) : ?><i class="dashicons dashicons-no"></i><?php endif ?>
 </div>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/billing.php b/wp-content/plugins/nextgen-gallery/freemius/templates/billing.php
new file mode 100644
index 0000000000000000000000000000000000000000..baaff59ba1137892d28d00abe4e0490fb4ced4f8
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/billing.php
@@ -0,0 +1,109 @@
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2016, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.2.0
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	/**
+	 * @var Freemius $fs
+	 */
+	$fs = freemius( $slug );
+
+	/**
+	 * @var FS_Plugin_Tag $update
+	 */
+	$update = $fs->get_update( false, false );
+
+	$is_paying              = $fs->is_paying();
+	$user                   = $fs->get_user();
+	$site                   = $fs->get_site();
+	$name                   = $user->get_name();
+	$license                = $fs->_get_license();
+	$subscription           = $fs->_get_subscription();
+	$plan                   = $fs->get_plan();
+	$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
+	$is_paid_trial          = $fs->is_paid_trial();
+	$show_upgrade           = ( ! $is_paying && ! $is_paid_trial );
+?>
+
+	<div id="fs_account" class="wrap">
+		<h2 class="nav-tab-wrapper">
+			<a href="<?php echo $fs->get_account_url() ?>" class="nav-tab"><?php _efs( 'account', $slug ) ?></a>
+			<?php if ( $fs->has_addons() ) : ?>
+				<a href="<?php echo $fs->_get_admin_page_url( 'addons' ) ?>"
+				   class="nav-tab"><?php _efs( 'add-ons', $slug ) ?></a>
+			<?php endif ?>
+			<?php if ( $fs->is_not_paying() && $fs->has_paid_plan() ) : ?>
+				<a href="<?php echo $fs->get_upgrade_url() ?>" class="nav-tab"><?php _efs( 'upgrade', $slug ) ?></a>
+				<?php if ( $fs->apply_filters( 'show_trial', true ) && ! $fs->is_trial_utilized() && $fs->has_trial_plan() ) : ?>
+					<a href="<?php echo $fs->get_trial_url() ?>"
+					   class="nav-tab"><?php _efs( 'free-trial', $slug ) ?></a>
+				<?php endif ?>
+			<?php endif ?>
+			<?php if ( ! $plan->is_free() ) : ?>
+				<a href="<?php echo $fs->get_account_tab_url( 'billing' ) ?>"
+				   class="nav-tab nav-tab-active"><?php _efs( 'billing', $slug ) ?></a>
+			<?php endif ?>
+		</h2>
+
+		<div id="poststuff">
+			<div>
+				<div class="has-sidebar has-right-sidebar">
+					<div class="has-sidebar-content">
+						<div class="postbox">
+							<h3><?php _efs( 'payments', $slug ) ?></h3>
+
+							<?php
+								$payments  = $fs->_fetch_payments();
+							?>
+
+							<div class="inside">
+								<table class="widefat">
+									<thead>
+									<tr>
+										<th><?php _efs( 'id', $slug ) ?></th>
+										<th><?php _efs( 'date', $slug ) ?></th>
+										<!--		<th>--><?php //_efs( 'transaction' ) ?><!--</th>-->
+										<th><?php _efs( 'amount', $slug ) ?></th>
+										<th><?php _efs( 'invoice', $slug ) ?></th>
+									</tr>
+									</thead>
+									<tbody>
+									<?php $odd = true ?>
+									<?php foreach ( $payments as $payment ) : ?>
+										<tr<?php echo $odd ? ' class="alternate"' : '' ?>>
+											<td><?php echo $payment->id ?></td>
+											<td><?php echo date( 'M j, Y', strtotime( $payment->created ) ) ?></td>
+											<td>$<?php echo $payment->gross ?></td>
+											<td><a href="<?php echo $fs->_get_invoice_api_url($payment->id) ?>" class="button button-small"
+											       target="_blank"><?php _efs( 'invoice', $slug ) ?></a></td>
+										</tr>
+										<?php $odd = ! $odd; endforeach ?>
+									</tbody>
+								</table>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+<?php
+	$params = array(
+		'page'           => 'account',
+		'module_id'      => $fs->get_id(),
+		'module_slug'    => $slug,
+		'module_version' => $fs->get_plugin_version(),
+	);
+	fs_require_template( 'powered-by.php', $params );
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/checkout.php b/wp-content/plugins/nextgen-gallery/freemius/templates/checkout.php
index 87ba26acd7120ee9534ee3095236c1ca2afcbc89..6762a666f19558377a2a598842408d596bef1369 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/checkout.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/checkout.php
@@ -1,260 +1,264 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	wp_enqueue_script( 'jquery' );
-	wp_enqueue_script( 'json2' );
-	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
-	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
-	fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
-
-	$slug = $VARS['slug'];
-	$fs   = freemius( $slug );
-
-	$timestamp = time();
-
-	$context_params = array(
-		'plugin_id'         => $fs->get_id(),
-		'plugin_public_key' => $fs->get_public_key(),
-		'plugin_version'    => $fs->get_plugin_version(),
-	);
-
-	// Get site context secure params.
-	if ( $fs->is_registered() ) {
-		$site = $fs->get_site();
-		$plugin_id = fs_request_get( 'plugin_id', $fs->get_id() );
-
-		if ($plugin_id != $fs->get_id()) {
-			if ( $fs->is_addon_activated( $plugin_id ) ) {
-				$fs_addon = Freemius::get_instance_by_id( $plugin_id );
-				$site = $fs_addon->get_site();
-			}
-		}
-
-		$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
-			$site,
-			$timestamp,
-			'checkout'
-		) );
-	} else {
-		$current_user = Freemius::_get_current_wp_user();
-
-		// Add site and user info to the request, this information
-		// is NOT being stored unless the user complete the purchase
-		// and agrees to the TOS.
-		$context_params = array_merge( $context_params, array(
-			'user_firstname' => $current_user->user_firstname,
-			'user_lastname'  => $current_user->user_lastname,
-			'user_email'     => $current_user->user_email,
-//			'user_nickname'    => $current_user->user_nicename,
-//			'plugin_slug'      => $slug,
-//			'site_url'         => get_site_url(),
-//			'site_name'        => get_bloginfo( 'name' ),
-//			'platform_version' => get_bloginfo( 'version' ),
-//			'language'         => get_bloginfo( 'language' ),
-//			'charset'          => get_bloginfo( 'charset' ),
-//			'account_url'      => fs_nonce_url( $fs->_get_admin_page_url(
-//				'account',
-//				array( 'fs_action' => 'sync_user' )
-//			), 'sync_user' ),
-		) );
-
-		$fs_user = Freemius::_get_user_by_email( $current_user->user_email );
-
-		if ( is_object( $fs_user ) ) {
-			$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
-				$fs_user,
-				$timestamp,
-				'checkout'
-			) );
-		}
-	}
-
-	if ( $fs->is_payments_sandbox() )
-	{
-		// Append plugin secure token for sandbox mode authentication.
-		$context_params['sandbox'] = FS_Security::instance()->get_secure_token(
-			$fs->get_plugin(),
-			$timestamp,
-			'checkout'
-		);
-
-		/**
-		 * @since 1.1.7.3 Add security timestamp for sandbox even for anonymous user.
-		 */
-		if ( empty( $context_params['s_ctx_ts'] ) ) {
-			$context_params['s_ctx_ts'] = $timestamp;
-		}
-	}
-
-	$return_url = fs_nonce_url( $fs->_get_admin_page_url(
-		'account',
-		array(
-			'fs_action' => $slug . '_sync_license',
-			'plugin_id' => isset( $_GET['plugin_id'] ) ? $_GET['plugin_id'] : $fs->get_id()
-		)
-	), $slug . '_sync_license' );
-
-	$query_params = array_merge( $context_params, $_GET, array(
-		// Current plugin version.
-		'plugin_version' => $fs->get_plugin_version(),
-		'return_url'     => $return_url,
-		// Admin CSS URL for style/design competability.
-//		'wp_admin_css'   => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons",
-	) );
-?>
-	<div class="fs-secure-notice">
-		<i class="dashicons dashicons-lock"></i>
-		<span><b>Secure HTTPS Checkout</b> - PCI compliant, running via iframe from external domain</span>
-	</div>
-	<div id="fs_contact" class="wrap" style="margin: 40px 0 -65px -20px;">
-		<div id="iframe"></div>
-		<script type="text/javascript">
-			// http://stackoverflow.com/questions/4583703/jquery-post-request-not-ajax
-			jQuery(function ($) {
-				$.extend({
-					form: function (url, data, method) {
-						if (method == null) method = 'POST';
-						if (data == null) data = {};
-
-						var form = $('<form>').attr({
-							method: method,
-							action: url
-						}).css({
-							display: 'none'
-						});
-
-						var addData = function (name, data) {
-							if ($.isArray(data)) {
-								for (var i = 0; i < data.length; i++) {
-									var value = data[i];
-									addData(name + '[]', value);
-								}
-							} else if (typeof data === 'object') {
-								for (var key in data) {
-									if (data.hasOwnProperty(key)) {
-										addData(name + '[' + key + ']', data[key]);
-									}
-								}
-							} else if (data != null) {
-								form.append($('<input>').attr({
-									type : 'hidden',
-									name : String(name),
-									value: String(data)
-								}));
-							}
-						};
-
-						for (var key in data) {
-							if (data.hasOwnProperty(key)) {
-								addData(key, data[key]);
-							}
-						}
-
-						return form.appendTo('body');
-					}
-				});
-			});
-
-			(function ($) {
-				$(function () {
-
-					var
-					// Keep track of the iframe height.
-					iframe_height = 800,
-					base_url = '<?php echo WP_FS__ADDRESS ?>',
-					// Pass the parent page URL into the Iframe in a meaningful way (this URL could be
-					// passed via query string or hard coded into the child page, it depends on your needs).
-					src = base_url + '/checkout/?<?php echo (isset($_REQUEST['XDEBUG_SESSION']) ? 'XDEBUG_SESSION=' . $_REQUEST['XDEBUG_SESSION'] . '&' : '') . http_build_query($query_params) ?>#' + encodeURIComponent(document.location.href),
-
-					// Append the Iframe into the DOM.
-					iframe = $('<iframe " src="' + src + '" width="100%" height="' + iframe_height + 'px" scrolling="no" frameborder="0" style="background: transparent;"><\/iframe>')
-						.appendTo('#iframe');
-
-					FS.PostMessage.init(base_url);
-					FS.PostMessage.receiveOnce('height', function (data) {
-						var h = data.height;
-						if (!isNaN(h) && h > 0 && h != iframe_height) {
-							iframe_height = h;
-							$("#iframe iframe").height(iframe_height + 'px');
-						}
-					});
-
-					FS.PostMessage.receiveOnce('install', function (data) {
-						// Post data to activation URL.
-						$.form('<?php echo fs_nonce_url($fs->_get_admin_page_url('account', array(
-							'fs_action' => $slug . '_activate_new',
-							'plugin_id' => isset($_GET['plugin_id']) ? $_GET['plugin_id'] : $fs->get_id()
-							)), $slug . '_activate_new') ?>', {
-							user_id           : data.user.id,
-							user_secret_key   : data.user.secret_key,
-							user_public_key   : data.user.public_key,
-							install_id        : data.install.id,
-							install_secret_key: data.install.secret_key,
-							install_public_key: data.install.public_key
-						}).submit();
-					});
-
-					FS.PostMessage.receiveOnce('pending_activation', function (data) {
-						$.form('<?php echo fs_nonce_url($fs->_get_admin_page_url('account', array(
-							'fs_action' => $slug . '_activate_new',
-							'plugin_id' => fs_request_get('plugin_id', $fs->get_id()),
-							'pending_activation' => true,
-							)), $slug . '_activate_new') ?>', {
-							user_email: data.user_email
-						}).submit();
-					});
-
-					FS.PostMessage.receiveOnce('get_context', function () {
-						console.debug('receiveOnce', 'get_context');
-
-						// If the user didn't connect his account with Freemius,
-						// once he accepts the Terms of Service and Privacy Policy,
-						// and then click the purchase button, the context information
-						// of the user will be shared with Freemius in order to complete the
-						// purchase workflow and activate the license for the right user.
-						FS.PostMessage.post('context', {
-							plugin_id        : '<?php echo $fs->get_id() ?>',
-							plugin_public_key: '<?php echo $fs->get_public_key() ?>',
-							plugin_version   : '<?php echo $fs->get_plugin_version() ?>',
-							plugin_slug      : '<?php echo $slug ?>',
-							site_name        : '<?php echo get_bloginfo('name') ?>',
-							platform_version : '<?php echo get_bloginfo('version') ?>',
-							language         : '<?php echo get_bloginfo('language') ?>',
-							charset          : '<?php echo get_bloginfo('charset') ?>',
-							return_url       : '<?php echo $return_url ?>',
-							account_url      : '<?php echo fs_nonce_url($fs->_get_admin_page_url(
-									'account',
-									array('fs_action' => 'sync_user')
-						), 'sync_user') ?>',
-							activation_url   : '<?php echo fs_nonce_url($fs->_get_admin_page_url('',
-							array(
-								'fs_action' => $slug . '_activate_new',
-								'plugin_id' => fs_request_get('plugin_id', $fs->get_id()),
-
-								)),
-							$slug . '_activate_new') ?>'
-						}, iframe[0]);
-					});
-
-					FS.PostMessage.receiveOnce('get_dimensions', function (data) {
-						console.debug('receiveOnce', 'get_dimensions');
-
-						FS.PostMessage.post('dimensions', {
-							height   : $(document.body).height(),
-							scrollTop: $(document).scrollTop()
-						}, iframe[0]);
-					});
-				});
-			})(jQuery);
-		</script>
-	</div>
-<?php fs_require_template( 'powered-by.php' ) ?>
\ No newline at end of file
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	wp_enqueue_script( 'jquery' );
+	wp_enqueue_script( 'json2' );
+	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
+	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
+	fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	$fs   = freemius( $slug );
+
+	$timestamp = time();
+
+	$context_params = array(
+		'plugin_id'         => $fs->get_id(),
+		'plugin_public_key' => $fs->get_public_key(),
+		'plugin_version'    => $fs->get_plugin_version(),
+	);
+
+	// Get site context secure params.
+	if ( $fs->is_registered() ) {
+		$site = $fs->get_site();
+		$plugin_id = fs_request_get( 'plugin_id', $fs->get_id() );
+
+		if ($plugin_id != $fs->get_id()) {
+			if ( $fs->is_addon_activated( $plugin_id ) ) {
+				$fs_addon = Freemius::get_instance_by_id( $plugin_id );
+				$site = $fs_addon->get_site();
+			}
+		}
+
+		$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
+			$site,
+			$timestamp,
+			'checkout'
+		) );
+	} else {
+		$current_user = Freemius::_get_current_wp_user();
+
+		// Add site and user info to the request, this information
+		// is NOT being stored unless the user complete the purchase
+		// and agrees to the TOS.
+		$context_params = array_merge( $context_params, array(
+			'user_firstname' => $current_user->user_firstname,
+			'user_lastname'  => $current_user->user_lastname,
+			'user_email'     => $current_user->user_email,
+//			'user_nickname'    => $current_user->user_nicename,
+//			'plugin_slug'      => $slug,
+//			'site_url'         => get_site_url(),
+//			'site_name'        => get_bloginfo( 'name' ),
+//			'platform_version' => get_bloginfo( 'version' ),
+//			'language'         => get_bloginfo( 'language' ),
+//			'charset'          => get_bloginfo( 'charset' ),
+//			'account_url'      => fs_nonce_url( $fs->_get_admin_page_url(
+//				'account',
+//				array( 'fs_action' => 'sync_user' )
+//			), 'sync_user' ),
+		) );
+
+		$fs_user = Freemius::_get_user_by_email( $current_user->user_email );
+
+		if ( is_object( $fs_user ) ) {
+			$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
+				$fs_user,
+				$timestamp,
+				'checkout'
+			) );
+		}
+	}
+
+	if ( $fs->is_payments_sandbox() )
+	{
+		// Append plugin secure token for sandbox mode authentication.
+		$context_params['sandbox'] = FS_Security::instance()->get_secure_token(
+			$fs->get_plugin(),
+			$timestamp,
+			'checkout'
+		);
+
+		/**
+		 * @since 1.1.7.3 Add security timestamp for sandbox even for anonymous user.
+		 */
+		if ( empty( $context_params['s_ctx_ts'] ) ) {
+			$context_params['s_ctx_ts'] = $timestamp;
+		}
+	}
+
+	$return_url = $fs->_get_sync_license_url( isset( $_GET['plugin_id'] ) ? $_GET['plugin_id'] : $fs->get_id() );
+
+	$query_params = array_merge( $context_params, $_GET, array(
+		// Current plugin version.
+		'plugin_version' => $fs->get_plugin_version(),
+		'sdk_version'    => WP_FS__SDK_VERSION,
+		'return_url'     => $return_url,
+		// Admin CSS URL for style/design competability.
+//		'wp_admin_css'   => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons",
+	) );
+?>
+	<div id="fs_checkout" class="wrap" style="margin: 0 0 -65px -20px;">
+		<div id="iframe"></div>
+		<script type="text/javascript">
+			// http://stackoverflow.com/questions/4583703/jquery-post-request-not-ajax
+			jQuery(function ($) {
+				$.extend({
+					form: function (url, data, method) {
+						if (method == null) method = 'POST';
+						if (data == null) data = {};
+
+						var form = $('<form>').attr({
+							method: method,
+							action: url
+						}).css({
+							display: 'none'
+						});
+
+						var addData = function (name, data) {
+							if ($.isArray(data)) {
+								for (var i = 0; i < data.length; i++) {
+									var value = data[i];
+									addData(name + '[]', value);
+								}
+							} else if (typeof data === 'object') {
+								for (var key in data) {
+									if (data.hasOwnProperty(key)) {
+										addData(name + '[' + key + ']', data[key]);
+									}
+								}
+							} else if (data != null) {
+								form.append($('<input>').attr({
+									type : 'hidden',
+									name : String(name),
+									value: String(data)
+								}));
+							}
+						};
+
+						for (var key in data) {
+							if (data.hasOwnProperty(key)) {
+								addData(key, data[key]);
+							}
+						}
+
+						return form.appendTo('body');
+					}
+				});
+			});
+
+			(function ($) {
+				$(function () {
+
+					var
+					// Keep track of the iframe height.
+					iframe_height = 800,
+					base_url = '<?php echo WP_FS__ADDRESS ?>',
+					// Pass the parent page URL into the Iframe in a meaningful way (this URL could be
+					// passed via query string or hard coded into the child page, it depends on your needs).
+					src = base_url + '/checkout/?<?php echo (isset($_REQUEST['XDEBUG_SESSION']) ? 'XDEBUG_SESSION=' . $_REQUEST['XDEBUG_SESSION'] . '&' : '') . http_build_query($query_params) ?>#' + encodeURIComponent(document.location.href),
+
+					// Append the Iframe into the DOM.
+					iframe = $('<iframe " src="' + src + '" width="100%" height="' + iframe_height + 'px" scrolling="no" frameborder="0" style="background: transparent;"><\/iframe>')
+						.appendTo('#iframe');
+
+					FS.PostMessage.init(base_url, [iframe[0]]);
+					FS.PostMessage.receiveOnce('height', function (data) {
+						var h = data.height;
+						if (!isNaN(h) && h > 0 && h != iframe_height) {
+							iframe_height = h;
+							iframe.height(iframe_height + 'px');
+
+							FS.PostMessage.postScroll(iframe[0]);
+						}
+					});
+
+					FS.PostMessage.receiveOnce('install', function (data) {
+						// Post data to activation URL.
+						$.form('<?php echo fs_nonce_url($fs->_get_admin_page_url('account', array(
+							'fs_action' => $slug . '_activate_new',
+							'plugin_id' => isset($_GET['plugin_id']) ? $_GET['plugin_id'] : $fs->get_id()
+							)), $slug . '_activate_new') ?>', {
+							user_id           : data.user.id,
+							user_secret_key   : data.user.secret_key,
+							user_public_key   : data.user.public_key,
+							install_id        : data.install.id,
+							install_secret_key: data.install.secret_key,
+							install_public_key: data.install.public_key
+						}).submit();
+					});
+
+					FS.PostMessage.receiveOnce('pending_activation', function (data) {
+						$.form('<?php echo fs_nonce_url($fs->_get_admin_page_url('account', array(
+							'fs_action' => $slug . '_activate_new',
+							'plugin_id' => fs_request_get('plugin_id', $fs->get_id()),
+							'pending_activation' => true,
+							)), $slug . '_activate_new') ?>', {
+							user_email: data.user_email
+						}).submit();
+					});
+
+					FS.PostMessage.receiveOnce('get_context', function () {
+						console.debug('receiveOnce', 'get_context');
+
+						// If the user didn't connect his account with Freemius,
+						// once he accepts the Terms of Service and Privacy Policy,
+						// and then click the purchase button, the context information
+						// of the user will be shared with Freemius in order to complete the
+						// purchase workflow and activate the license for the right user.
+						FS.PostMessage.post('context', {
+							plugin_id        : '<?php echo $fs->get_id() ?>',
+							plugin_public_key: '<?php echo $fs->get_public_key() ?>',
+							plugin_version   : '<?php echo $fs->get_plugin_version() ?>',
+							plugin_slug      : '<?php echo $slug ?>',
+							site_name        : '<?php echo get_bloginfo('name') ?>',
+							platform_version : '<?php echo get_bloginfo('version') ?>',
+							language         : '<?php echo get_bloginfo('language') ?>',
+							charset          : '<?php echo get_bloginfo('charset') ?>',
+							return_url       : '<?php echo $return_url ?>',
+							account_url      : '<?php echo fs_nonce_url($fs->_get_admin_page_url(
+									'account',
+									array('fs_action' => 'sync_user')
+						), 'sync_user') ?>',
+							activation_url   : '<?php echo fs_nonce_url($fs->_get_admin_page_url('',
+							array(
+								'fs_action' => $slug . '_activate_new',
+								'plugin_id' => fs_request_get('plugin_id', $fs->get_id()),
+
+								)),
+							$slug . '_activate_new') ?>'
+						}, iframe[0]);
+					});
+
+					FS.PostMessage.receiveOnce('get_dimensions', function (data) {
+						console.debug('receiveOnce', 'get_dimensions');
+
+						FS.PostMessage.post('dimensions', {
+							height   : $(document.body).height(),
+							scrollTop: $(document).scrollTop()
+						}, iframe[0]);
+					});
+				});
+			})(jQuery);
+		</script>
+	</div>
+<?php
+	$params = array(
+		'page'           => 'checkout',
+		'module_id'      => $fs->get_id(),
+		'module_slug'    => $slug,
+		'module_version' => $fs->get_plugin_version(),
+	);
+	fs_require_template( 'powered-by.php', $params );
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/connect.php b/wp-content/plugins/nextgen-gallery/freemius/templates/connect.php
index 147a07ef4d5803fe05794714b9533278bd857522..5850013d2489c1decc2115d05de984d92b7c1537 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/connect.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/connect.php
@@ -10,9 +10,16 @@
 		exit;
 	}
 
+	/**
+	 * @var array $VARS
+	 */
 	$slug                  = $VARS['slug'];
 	$fs                    = freemius( $slug );
 	$is_pending_activation = $fs->is_pending_activation();
+	$is_premium_only       = $fs->is_only_premium();
+	$has_paid_plans        = $fs->has_paid_plan();
+	$is_premium_code       = $fs->is_premium();
+	$is_freemium           = $fs->is_freemium();
 
 	$fs->_enqueue_connect_essentials();
 
@@ -33,10 +40,31 @@
 		'https://freemius.com/wordpress/' :
 		// Insights platform information.
 		'https://freemius.com/wordpress/usage-tracking/';
+
+	$freemius_site_url .= '?' . http_build_query( array(
+			'id'   => $fs->get_id(),
+			'slug' => $slug,
+		) );
+
+	$freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" tabindex="1">freemius.com</a>';
+
+	$error = fs_request_get( 'error' );
+
+	$require_license_key = $is_premium_only ||
+	                       ( $is_freemium && $is_premium_code && fs_request_get_bool( 'require_license', true ) );
+
+	if ( $is_pending_activation ) {
+		$require_license_key = false;
+	}
+
+	if ( $require_license_key ) {
+		$fs->_require_license_activation_dialog();
+	}
 ?>
-<div id="fs_connect" class="wrap<?php if ( ! $fs->enable_anonymous() || $is_pending_activation ) {
-	echo ' fs-anonymous-disabled';
-} ?>">
+<div id="fs_connect"
+     class="wrap<?php if ( ! $fs->is_enable_anonymous() || $is_pending_activation || $require_license_key ) {
+	     echo ' fs-anonymous-disabled';
+     } ?>">
 	<div class="fs-visual">
 		<b class="fs-site-icon"><i class="dashicons dashicons-wordpress"></i></b>
 		<i class="dashicons dashicons-plus fs-first"></i>
@@ -48,8 +76,15 @@
 		<img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/connect-logo.png"/>
 	</div>
 	<div class="fs-content">
+		<?php if ( ! empty( $error ) ) : ?>
+			<p class="fs-error"><?php echo $error ?></p>
+		<?php endif ?>
 		<p><?php
+				$button_label = 'opt-in-connect';
+
 				if ( $is_pending_activation ) {
+					$button_label = 'resend-activation-email';
+
 					echo $fs->apply_filters( 'pending_activation_message', sprintf(
 						__fs( 'thanks-x', $slug ) . '<br>' .
 						__fs( 'pending-activation-message', $slug ),
@@ -57,6 +92,15 @@
 						'<b>' . $fs->get_plugin_name() . '</b>',
 						'<b>' . $current_user->user_email . '</b>'
 					) );
+				} else if ( $require_license_key ) {
+					$button_label = 'agree-activate-license';
+
+					echo $fs->apply_filters( 'connect-message_on-premium',
+						sprintf( __fs( 'hey-x', $slug ), $first_name ) . '<br>' .
+						sprintf( __fs( 'thanks-for-purchasing', $slug ), '<b>' . $fs->get_plugin_name() . '</b>' ),
+						$first_name,
+						$fs->get_plugin_name()
+					);
 				} else {
 					$filter                = 'connect_message';
 					$default_optin_message = 'connect-message';
@@ -82,19 +126,28 @@
 							'<b>' . $fs->get_plugin_name() . '</b>',
 							'<b>' . $current_user->user_login . '</b>',
 							'<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
-							'<a href="' . $freemius_site_url . '" target="_blank">freemius.com</a>'
+							$freemius_link
 						),
 						$first_name,
 						$fs->get_plugin_name(),
 						$current_user->user_login,
 						'<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
-						'<a href="' . $freemius_site_url . '" target="_blank">freemius.com</a>'
+						$freemius_link
 					);
 				}
 			?></p>
+		<?php if ( $require_license_key ) : ?>
+			<div class="fs-license-key-container">
+				<input id="fs_license_key" name="fs_key" type="text" required maxlength="32"
+				       placeholder="<?php _efs( 'license-key', $slug ) ?>" tabindex="1"/>
+				<i class="dashicons dashicons-admin-network"></i>
+				<a class="show-license-resend-modal show-license-resend-modal-<?php echo $slug; ?>"
+				   href="#"><?php _efs( 'cant-find-license-key' ); ?></a>
+			</div>
+		<?php endif ?>
 	</div>
 	<div class="fs-actions">
-		<?php if ( $fs->enable_anonymous() && ! $is_pending_activation ) : ?>
+		<?php if ( $fs->is_enable_anonymous() && ! $is_pending_activation && ! $require_license_key ) : ?>
 			<a href="<?php echo wp_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $slug . '_skip_activation' ) ), $slug . '_skip_activation' ) ?>"
 			   class="button button-secondary" tabindex="2"><?php _efs( 'skip', $slug ) ?></a>
 		<?php endif ?>
@@ -105,7 +158,9 @@
 				<input type="hidden" name="fs_action" value="<?php echo $slug ?>_activate_existing">
 				<?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
 				<button class="button button-primary" tabindex="1"
-				        type="submit"><?php _efs( 'opt-in-connect', $slug ) ?></button>
+				        type="submit"<?php if ( $require_license_key ) {
+					echo ' disabled="disabled"';
+				} ?>><?php _efs( $button_label, $slug ) ?></button>
 			</form>
 		<?php else : ?>
 			<form method="post" action="<?php echo WP_FS__ADDRESS ?>/action/service/user/install/">
@@ -114,26 +169,28 @@
 					<input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
 				<?php endforeach ?>
 				<button class="button button-primary" tabindex="1"
-				        type="submit"><?php _efs( $is_pending_activation ? 'resend-activation-email' : 'opt-in-connect', $slug ) ?></button>
+				        type="submit"<?php if ( $require_license_key ) {
+					echo ' disabled="disabled"';
+				} ?>><?php _efs( $button_label, $slug ) ?></button>
 			</form>
 		<?php endif ?>
 	</div><?php
 
 		// Set core permission list items.
 		$permissions = array(
-			'profile'        => array(
+			'profile' => array(
 				'icon-class' => 'dashicons dashicons-admin-users',
 				'label'      => __fs( 'permissions-profile' ),
 				'desc'       => __fs( 'permissions-profile_desc' ),
 				'priority'   => 5,
 			),
-			'site'           => array(
+			'site'    => array(
 				'icon-class' => 'dashicons dashicons-admin-settings',
 				'label'      => __fs( 'permissions-site' ),
 				'desc'       => __fs( 'permissions-site_desc' ),
 				'priority'   => 10,
 			),
-			'events'         => array(
+			'events'  => array(
 				'icon-class' => 'dashicons dashicons-admin-plugins',
 				'label'      => __fs( 'permissions-events' ),
 				'desc'       => __fs( 'permissions-events_desc' ),
@@ -165,7 +222,10 @@
 
 		if ( ! empty( $permissions ) ) : ?>
 			<div class="fs-permissions">
-				<a class="fs-trigger" href="#"><?php _efs( 'what-permissions', $slug ) ?></a>
+				<?php if ( $require_license_key ) : ?>
+					<p class="fs-license-sync-disclaimer"><?php printf( __fs( 'license-sync-disclaimer', $slug ), $freemius_link ) ?></p>
+				<?php endif ?>
+				<a class="fs-trigger" href="#" tabindex="1"><?php _efs( 'what-permissions', $slug ) ?></a>
 				<ul><?php
 						foreach ( $permissions as $id => $permission ) : ?>
 							<li id="fs-permission-<?php esc_attr_e( $id ); ?>"
@@ -181,26 +241,109 @@
 						<?php endforeach; ?>
 				</ul>
 			</div>
-		<?php endif; ?>
-
+		<?php endif ?>
+	<?php if ( $is_premium_code && $is_freemium ) : ?>
+		<div class="fs-freemium-licensing">
+			<p>
+				<?php if ( $require_license_key ) : ?>
+					<?php _efs( 'dont-have-license-key', $slug ) ?>
+					<a data-require-license="false" tabindex="1"><?php _efs( 'activate-free-version', $slug ) ?></a>
+				<?php else : ?>
+					<?php _efs( 'have-license-key', $slug ) ?>
+					<a data-require-license="true" tabindex="1"><?php _efs( 'activate-license', $slug ) ?></a>
+				<?php endif ?>
+			</p>
+		</div>
+	<?php endif ?>
 	<div class="fs-terms">
-		<a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy', $slug ) ?></a>
+		<a href="https://freemius.com/privacy/" target="_blank"
+		   tabindex="1"><?php _efs( 'privacy-policy', $slug ) ?></a>
 		&nbsp;&nbsp;-&nbsp;&nbsp;
-		<a href="https://freemius.com/terms/" target="_blank"><?php _efs( 'tos', $slug ) ?></a>
+		<a href="https://freemius.com/terms/" target="_blank" tabindex="1"><?php _efs( 'tos', $slug ) ?></a>
 	</div>
 </div>
 <script type="text/javascript">
 	(function ($) {
-		$('.button').on('click', function () {
+		var $primaryCta = $('.fs-actions .button.button-primary'),
+		    $form = $('.fs-actions form'),
+		    requireLicenseKey = <?php echo $require_license_key ? 'true' : 'false' ?>,
+		    $licenseSecret,
+		    $licenseKeyInput = $('#fs_license_key');
+
+		$('.fs-actions .button').on('click', function () {
 			// Set loading mode.
 			$(document.body).css({'cursor': 'wait'});
 		});
-		$('.button.button-primary').on('click', function () {
+
+		$form.on('submit', function () {
+			/**
+			 * @author Vova Feldman (@svovaf)
+			 * @since 1.1.9
+			 */
+			if (requireLicenseKey) {
+				if (null == $licenseSecret) {
+					$licenseSecret = $('<input type="hidden" name="license_secret_key" value="" />');
+					$form.append($licenseSecret);
+				}
+
+				// Update secret key if premium only plugin.
+				$licenseSecret.val($licenseKeyInput.val());
+			}
+
+			return true;
+		});
+
+		$primaryCta.on('click', function () {
 			$(this).addClass('fs-loading');
 			$(this).html('<?php _efs( $is_pending_activation ? 'sending-email' : 'activating' , $slug ) ?>...').css({'cursor': 'wait'});
 		});
+
 		$('.fs-permissions .fs-trigger').on('click', function () {
 			$('.fs-permissions').toggleClass('fs-open');
 		});
+
+		if (requireLicenseKey) {
+			/**
+			 * Submit license key on enter.
+			 *
+			 * @author Vova Feldman (@svovaf)
+			 * @since 1.1.9
+			 */
+			$licenseKeyInput.keypress(function (e) {
+				if (e.which == 13) {
+					if ('' !== $(this).val()) {
+						$primaryCta.click();
+						return false;
+					}
+				}
+			});
+
+			/**
+			 * Disable activation button when empty license key.
+			 *
+			 * @author Vova Feldman (@svovaf)
+			 * @since 1.1.9
+			 */
+			$licenseKeyInput.on('keyup paste delete cut', function () {
+				setTimeout(function () {
+					if ('' === $licenseKeyInput.val()) {
+						$primaryCta.attr('disabled', 'disabled');
+					} else {
+						$primaryCta.prop('disabled', false);
+					}
+				}, 100);
+			}).focus();
+		}
+
+		/**
+		 * Set license mode trigger URL.
+		 *
+		 * @author Vova Feldman (@svovaf)
+		 * @since 1.1.9
+		 */
+		var $connectLicenseModeTrigger = $('#fs_connect .fs-freemium-licensing a');
+		if ($connectLicenseModeTrigger.length > 0) {
+			$connectLicenseModeTrigger.attr('href', window.location.href + '&require_license=' + $connectLicenseModeTrigger.attr('data-require-license'))
+		}
 	})(jQuery);
 </script>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/contact.php b/wp-content/plugins/nextgen-gallery/freemius/templates/contact.php
index eda05c27eaec804e62de75a2307118e8c6a45b21..e11d44823cf46543f953f94b554f8c0daaeb0677 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/contact.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/contact.php
@@ -1,77 +1,88 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	wp_enqueue_script( 'jquery' );
-	wp_enqueue_script( 'json2' );
-	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
-	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
-	fs_enqueue_local_style( 'fs_checkout', '/admin/common.css' );
-
-	$slug = $VARS['slug'];
-	$fs   = freemius( $slug );
-
-	$context_params = array(
-		'plugin_id'         => $fs->get_id(),
-		'plugin_public_key' => $fs->get_public_key(),
-		'plugin_version'    => $fs->get_plugin_version(),
-	);
-
-
-	// Get site context secure params.
-	if ( $fs->is_registered() ) {
-		$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
-			$fs->get_site(),
-			time(),
-			'contact'
-		) );
-	}
-
-	$query_params = array_merge( $_GET, array_merge( $context_params, array(
-		'plugin_version' => $fs->get_plugin_version(),
-		'wp_login_url'   => wp_login_url(),
-		'site_url'       => get_site_url(),
-//		'wp_admin_css' => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons",
-	) ) );
-?>
-	<div class="fs-secure-notice">
-		<i class="dashicons dashicons-lock"></i>
-		<span><b>Secure HTTPS contact page</b>, running via iframe from external domain</span>
-	</div>
-	<div id="fs_contact" class="wrap" style="margin: 40px 0 -65px -20px;">
-		<div id="iframe"></div>
-		<script type="text/javascript">
-			(function ($) {
-				$(function () {
-
-					var
-					// Keep track of the iframe height.
-					iframe_height = 800,
-					base_url = '<?php echo WP_FS__ADDRESS ?>',
-					src = base_url + '/contact/?<?php echo http_build_query($query_params) ?>#' + encodeURIComponent(document.location.href),
-
-					// Append the Iframe into the DOM.
-					iframe = $('<iframe " src="' + src + '" width="100%" height="' + iframe_height + 'px" scrolling="no" frameborder="0" style="background: transparent;"><\/iframe>')
-						.appendTo('#iframe');
-
-					FS.PostMessage.init(base_url);
-					FS.PostMessage.receive('height', function (data) {
-						var h = data.height;
-						if (!isNaN(h) && h > 0 && h != iframe_height) {
-							iframe_height = h;
-							$("#iframe iframe").height(iframe_height + 'px');
-						}
-					});
-				});
-			})(jQuery);
-		</script>
-	</div>
-<?php fs_require_template( 'powered-by.php' ) ?>
\ No newline at end of file
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	wp_enqueue_script( 'jquery' );
+	wp_enqueue_script( 'json2' );
+	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
+	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
+	fs_enqueue_local_style( 'fs_checkout', '/admin/common.css' );
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	$fs   = freemius( $slug );
+
+	$context_params = array(
+		'plugin_id'         => $fs->get_id(),
+		'plugin_public_key' => $fs->get_public_key(),
+		'plugin_version'    => $fs->get_plugin_version(),
+	);
+
+
+	// Get site context secure params.
+	if ( $fs->is_registered() ) {
+		$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
+			$fs->get_site(),
+			time(),
+			'contact'
+		) );
+	}
+
+	$query_params = array_merge( $_GET, array_merge( $context_params, array(
+		'plugin_version' => $fs->get_plugin_version(),
+		'wp_login_url'   => wp_login_url(),
+		'site_url'       => get_site_url(),
+//		'wp_admin_css' => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons",
+	) ) );
+?>
+	<div class="fs-secure-notice">
+		<i class="dashicons dashicons-lock"></i>
+		<span><b>Secure HTTPS contact page</b>, running via iframe from external domain</span>
+	</div>
+	<div id="fs_contact" class="wrap" style="margin: 40px 0 -65px -20px;">
+		<div id="iframe"></div>
+		<script type="text/javascript">
+			(function ($) {
+				$(function () {
+
+					var
+					// Keep track of the iframe height.
+					iframe_height = 800,
+					base_url = '<?php echo WP_FS__ADDRESS ?>',
+					src = base_url + '/contact/?<?php echo http_build_query($query_params) ?>#' + encodeURIComponent(document.location.href),
+
+					// Append the Iframe into the DOM.
+					iframe = $('<iframe " src="' + src + '" width="100%" height="' + iframe_height + 'px" scrolling="no" frameborder="0" style="background: transparent;"><\/iframe>')
+						.appendTo('#iframe');
+
+					FS.PostMessage.init(base_url);
+					FS.PostMessage.receive('height', function (data) {
+						var h = data.height;
+						if (!isNaN(h) && h > 0 && h != iframe_height) {
+							iframe_height = h;
+							$("#iframe iframe").height(iframe_height + 'px');
+						}
+					});
+				});
+			})(jQuery);
+		</script>
+	</div>
+<?php
+	$params = array(
+		'page'           => 'contact',
+		'module_id'      => $fs->get_id(),
+		'module_slug'    => $slug,
+		'module_version' => $fs->get_plugin_version(),
+	);
+	fs_require_template( 'powered-by.php', $params );
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/debug.php b/wp-content/plugins/nextgen-gallery/freemius/templates/debug.php
index 341cb1c0920dd8c6517f2c514339477b4d96c920..7fd79496699e7d77c690628f49a5d39cf1e35824 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/debug.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/debug.php
@@ -1,250 +1,296 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.1
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	global $fs_active_plugins;
-
-	$fs_options = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
-?>
-	<h1><?php echo __fs( 'Freemius Debug' ) . ' - ' . __fs( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
-	<div>
-		<!-- Debugging Switch -->
-		<?php //$debug_mode = get_option( 'fs_debug_mode', null ) ?>
-		<span class="switch-label"><?php _efs( 'debugging' ) ?></span>
-
-		<div class="switch <?php echo WP_FS__DEBUG_SDK ? 'off' : 'on' ?>">
-			<div class="toggle"></div>
-			<span class="on"><?php _efs( 'on' ) ?></span>
-			<span class="off"><?php _efs( 'off' ) ?></span>
-		</div>
-		<script type="text/javascript">
-			(function ($) {
-				$(document).ready(function () {
-					// Switch toggle
-					$('.switch').click(function () {
-						$(this)
-							.toggleClass('on')
-							.toggleClass('off');
-
-						$.post(ajaxurl, {
-							action: 'fs_toggle_debug_mode',
-							is_on : ($(this).hasClass('off') ? 1 : 0)
-						}, function (response) {
-							if (1 == response) {
-								// Refresh page on success.
-								location.reload();
-							}
-						});
-					});
-				});
-			}(jQuery));
-		</script>
-	</div>
-	<h2><?php _efs( 'actions' ) ?></h2>
-	<table>
-		<tbody>
-		<tr>
-			<td>
-				<!-- Delete All Accounts -->
-				<form action="" method="POST">
-					<input type="hidden" name="fs_action" value="restart_freemius">
-					<?php wp_nonce_field( 'restart_freemius' ) ?>
-					<button class="button button-primary"
-					        onclick="if (confirm('<?php _efs( 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-all-accounts' ) ?></button>
-				</form>
-			</td>
-			<td>
-				<!-- Clear API Cache -->
-				<form action="" method="POST">
-					<input type="hidden" name="fs_clear_api_cache" value="true">
-					<button class="button button-primary"><?php _efs( 'clear-api-cache' ) ?></button>
-				</form>
-			</td>
-			<td>
-				<!-- Sync Data with Server -->
-				<form action="" method="POST">
-					<input type="hidden" name="background_sync" value="true">
-					<button class="button button-primary"><?php _efs( 'sync-data-from-server' ) ?></button>
-				</form>
-			</td>
-		</tr>
-		</tbody>
-	</table>
-	<h2><?php _efs( 'sdk-versions' ) ?></h2>
-	<table id="fs_sdks" class="widefat">
-		<thead>
-		<tr>
-			<th><?php _efs( 'version' ) ?></th>
-			<th><?php _efs( 'sdk-path' ) ?></th>
-			<th><?php _efs( 'plugin-path' ) ?></th>
-			<th><?php _efs( 'is-active' ) ?></th>
-		</tr>
-		</thead>
-		<tbody>
-		<?php foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) : ?>
-			<?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
-			<tr<?php if ( $is_active ) {
-				echo ' style="background: #E6FFE6; font-weight: bold"';
-			} ?>>
-				<td><?php echo $data->version ?></td>
-				<td><?php echo $sdk_path ?></td>
-				<td><?php echo $data->plugin_path ?></td>
-				<td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
-			</tr>
-		<?php endforeach ?>
-		</tbody>
-	</table>
-<?php $plugins = $fs_options->get_option( 'plugins' ) ?>
-<?php if ( is_array( $plugins ) && 0 < count( $plugins ) ) : ?>
-	<h2><?php _efs( 'plugins' ) ?></h2>
-	<table id="fs_plugins" class="widefat">
-		<thead>
-		<tr>
-			<th><?php _efs( 'id' ) ?></th>
-			<th><?php _efs( 'slug' ) ?></th>
-			<th><?php _efs( 'version' ) ?></th>
-			<th><?php _efs( 'title' ) ?></th>
-			<th><?php _efs( 'api' ) ?></th>
-			<th><?php _efs( 'freemius-state' ) ?></th>
-			<th><?php _efs( 'plugin-path' ) ?></th>
-			<th><?php _efs( 'public-key' ) ?></th>
-		</tr>
-		</thead>
-		<tbody>
-		<?php foreach ( $plugins as $slug => $data ) : ?>
-			<?php $is_active = is_plugin_active( $data->file ) ?>
-			<?php $fs = $is_active ? freemius( $slug ) : null ?>
-			<tr<?php if ( $is_active ) {
-				echo ' style="background: #E6FFE6; font-weight: bold"';
-			} ?>>
-				<td><?php echo $data->id ?></td>
-				<td><?php echo $slug ?></td>
-				<td><?php echo $data->version ?></td>
-				<td><?php echo $data->title ?></td>
-				<td><?php if ( $is_active ) {
-						echo $fs->has_api_connectivity() ?
-							__fs( 'connected' ) :
-							__fs( 'blocked' );
-					} ?></td>
-				<td><?php if ( $is_active ) {
-						echo $fs->is_on() ?
-							__fs( 'on' ) :
-							__fs( 'off' );
-					} ?></td>
-				<td><?php echo $data->file ?></td>
-				<td><?php echo $data->public_key ?></td>
-			</tr>
-		<?php endforeach ?>
-		</tbody>
-	</table>
-<?php endif ?>
-<?php
-	/**
-	 * @var FS_Site[] $sites
-	 */
-	$sites = $VARS['sites'];
-?>
-<?php if ( is_array( $sites ) && 0 < count( $sites ) ) : ?>
-	<h2><?php _efs( 'plugin-installs' ) ?> / <?php _efs( 'sites' ) ?></h2>
-	<table id="fs_installs" class="widefat">
-		<thead>
-		<tr>
-			<th><?php _efs( 'id' ) ?></th>
-			<th><?php _efs( 'slug' ) ?></th>
-			<th><?php _efs( 'plan' ) ?></th>
-			<th><?php _efs( 'public-key' ) ?></th>
-			<th><?php _efs( 'secret-key' ) ?></th>
-		</tr>
-		</thead>
-		<tbody>
-		<?php foreach ( $sites as $slug => $site ) : ?>
-			<tr>
-				<td><?php echo $site->id ?></td>
-				<td><?php echo $slug ?></td>
-				<td><?php
-						echo is_object( $site->plan ) ?
-							base64_decode( $site->plan->name ) :
-							''
-					?></td>
-				<td><?php echo $site->public_key ?></td>
-				<td><?php echo $site->secret_key ?></td>
-			</tr>
-		<?php endforeach ?>
-		</tbody>
-	</table>
-<?php endif ?>
-<?php
-	$addons = $VARS['addons'];
-?>
-<?php foreach ( $addons as $plugin_id => $plugin_addons ) : ?>
-	<h2><?php printf( __fs( 'addons-of-x' ), $plugin_id ) ?></h2>
-	<table id="fs_addons" class="widefat">
-		<thead>
-		<tr>
-			<th><?php _efs( 'id' ) ?></th>
-			<th><?php _efs( 'title' ) ?></th>
-			<th><?php _efs( 'slug' ) ?></th>
-			<th><?php _efs( 'version' ) ?></th>
-			<th><?php _efs( 'public-key' ) ?></th>
-			<th><?php _efs( 'secret-key' ) ?></th>
-		</tr>
-		</thead>
-		<tbody>
-		<?php
-			/**
-			 * @var FS_Plugin[] $plugin_addons
-			 */
-			foreach ( $plugin_addons as $addon ) : ?>
-				<tr>
-					<td><?php echo $addon->id ?></td>
-					<td><?php echo $addon->title ?></td>
-					<td><?php echo $addon->slug ?></td>
-					<td><?php echo $addon->version ?></td>
-					<td><?php echo $addon->public_key ?></td>
-					<td><?php echo $addon->secret_key ?></td>
-				</tr>
-			<?php endforeach ?>
-		</tbody>
-	</table>
-<?php endforeach ?>
-<?php
-	/**
-	 * @var FS_User[] $users
-	 */
-	$users = $VARS['users'];
-?>
-<?php if ( is_array( $users ) && 0 < count( $users ) ) : ?>
-	<h2><?php _efs( 'users' ) ?></h2>
-	<table id="fs_users" class="widefat">
-		<thead>
-		<tr>
-			<th><?php _efs( 'id' ) ?></th>
-			<th><?php _efs( 'name' ) ?></th>
-			<th><?php _efs( 'email' ) ?></th>
-			<th><?php _efs( 'verified' ) ?></th>
-			<th><?php _efs( 'public-key' ) ?></th>
-			<th><?php _efs( 'secret-key' ) ?></th>
-		</tr>
-		</thead>
-		<tbody>
-		<?php foreach ( $users as $user_id => $user ) : ?>
-			<tr>
-				<td><?php echo $user->id ?></td>
-				<td><?php echo $user->get_name() ?></td>
-				<td><a href="mailto:<?php esc_attr_e($user->email) ?>"><?php echo $user->email ?></a></td>
-				<td><?php echo json_encode( $user->is_verified ) ?></td>
-				<td><?php echo $user->public_key ?></td>
-				<td><?php echo $user->secret_key ?></td>
-			</tr>
-		<?php endforeach ?>
-		</tbody>
-	</table>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.1
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	global $fs_active_plugins;
+
+	$fs_options = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
+?>
+	<h1><?php echo __fs( 'Freemius Debug' ) . ' - ' . __fs( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
+	<div>
+		<!-- Debugging Switch -->
+		<?php //$debug_mode = get_option( 'fs_debug_mode', null ) ?>
+		<span class="switch-label"><?php _efs( 'debugging' ) ?></span>
+
+		<div class="switch <?php echo WP_FS__DEBUG_SDK ? 'off' : 'on' ?>">
+			<div class="toggle"></div>
+			<span class="on"><?php _efs( 'on' ) ?></span>
+			<span class="off"><?php _efs( 'off' ) ?></span>
+		</div>
+		<script type="text/javascript">
+			(function ($) {
+				$(document).ready(function () {
+					// Switch toggle
+					$('.switch').click(function () {
+						$(this)
+							.toggleClass('on')
+							.toggleClass('off');
+
+						$.post(ajaxurl, {
+							action: 'fs_toggle_debug_mode',
+							is_on : ($(this).hasClass('off') ? 1 : 0)
+						}, function (response) {
+							if (1 == response) {
+								// Refresh page on success.
+								location.reload();
+							}
+						});
+					});
+				});
+			}(jQuery));
+		</script>
+	</div>
+	<h2><?php _efs( 'actions' ) ?></h2>
+	<table>
+		<tbody>
+		<tr>
+			<td>
+				<!-- Delete All Accounts -->
+				<form action="" method="POST">
+					<input type="hidden" name="fs_action" value="restart_freemius">
+					<?php wp_nonce_field( 'restart_freemius' ) ?>
+					<button class="button button-primary"
+					        onclick="if (confirm('<?php _efs( 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-all-accounts' ) ?></button>
+				</form>
+			</td>
+			<td>
+				<!-- Clear API Cache -->
+				<form action="" method="POST">
+					<input type="hidden" name="fs_clear_api_cache" value="true">
+					<button class="button button-primary"><?php _efs( 'clear-api-cache' ) ?></button>
+				</form>
+			</td>
+			<td>
+				<!-- Sync Data with Server -->
+				<form action="" method="POST">
+					<input type="hidden" name="background_sync" value="true">
+					<button class="button button-primary"><?php _efs( 'sync-data-from-server' ) ?></button>
+				</form>
+			</td>
+		</tr>
+		</tbody>
+	</table>
+	<h2><?php _efs( 'sdk-versions' ) ?></h2>
+	<table id="fs_sdks" class="widefat">
+		<thead>
+		<tr>
+			<th><?php _efs( 'version' ) ?></th>
+			<th><?php _efs( 'sdk-path' ) ?></th>
+			<th><?php _efs( 'plugin-path' ) ?></th>
+			<th><?php _efs( 'is-active' ) ?></th>
+		</tr>
+		</thead>
+		<tbody>
+		<?php foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) : ?>
+			<?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
+			<tr<?php if ( $is_active ) {
+				echo ' style="background: #E6FFE6; font-weight: bold"';
+			} ?>>
+				<td><?php echo $data->version ?></td>
+				<td><?php echo $sdk_path ?></td>
+				<td><?php echo $data->plugin_path ?></td>
+				<td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
+			</tr>
+		<?php endforeach ?>
+		</tbody>
+	</table>
+<?php $plugins = $fs_options->get_option( 'plugins' ) ?>
+<?php if ( is_array( $plugins ) && 0 < count( $plugins ) ) : ?>
+	<h2><?php _efs( 'plugins' ) ?></h2>
+	<table id="fs_plugins" class="widefat">
+		<thead>
+		<tr>
+			<th><?php _efs( 'id' ) ?></th>
+			<th><?php _efs( 'slug' ) ?></th>
+			<th><?php _efs( 'version' ) ?></th>
+			<th><?php _efs( 'title' ) ?></th>
+			<th><?php _efs( 'api' ) ?></th>
+			<th><?php _efs( 'freemius-state' ) ?></th>
+			<th><?php _efs( 'plugin-path' ) ?></th>
+			<th><?php _efs( 'public-key' ) ?></th>
+		</tr>
+		</thead>
+		<tbody>
+		<?php foreach ( $plugins as $slug => $data ) : ?>
+			<?php $is_active = is_plugin_active( $data->file ) ?>
+			<?php $fs = $is_active ? freemius( $slug ) : null ?>
+			<tr<?php if ( $is_active ) {
+				echo ' style="background: #E6FFE6; font-weight: bold"';
+			} ?>>
+				<td><?php echo $data->id ?></td>
+				<td><?php echo $slug ?></td>
+				<td><?php echo $data->version ?></td>
+				<td><?php echo $data->title ?></td>
+				<td><?php if ( $is_active ) {
+						echo $fs->has_api_connectivity() ?
+							__fs( 'connected' ) :
+							__fs( 'blocked' );
+					} ?></td>
+				<td><?php if ( $is_active ) {
+						echo $fs->is_on() ?
+							__fs( 'on' ) :
+							__fs( 'off' );
+					} ?></td>
+				<td><?php echo $data->file ?></td>
+				<td><?php echo $data->public_key ?></td>
+			</tr>
+		<?php endforeach ?>
+		</tbody>
+	</table>
+<?php endif ?>
+<?php
+	/**
+	 * @var array $VARS
+	 * @var FS_Site[] $sites
+	 */
+	$sites = $VARS['sites'];
+?>
+<?php if ( is_array( $sites ) && 0 < count( $sites ) ) : ?>
+	<h2><?php _efs( 'plugin-installs' ) ?> / <?php _efs( 'sites' ) ?></h2>
+	<table id="fs_installs" class="widefat">
+		<thead>
+		<tr>
+			<th><?php _efs( 'id' ) ?></th>
+			<th><?php _efs( 'slug' ) ?></th>
+			<th><?php _efs( 'plan' ) ?></th>
+			<th><?php _efs( 'public-key' ) ?></th>
+			<th><?php _efs( 'secret-key' ) ?></th>
+		</tr>
+		</thead>
+		<tbody>
+		<?php foreach ( $sites as $slug => $site ) : ?>
+			<tr>
+				<td><?php echo $site->id ?></td>
+				<td><?php echo $slug ?></td>
+				<td><?php
+						echo is_object( $site->plan ) ?
+							base64_decode( $site->plan->name ) :
+							''
+					?></td>
+				<td><?php echo $site->public_key ?></td>
+				<td><?php echo $site->secret_key ?></td>
+			</tr>
+		<?php endforeach ?>
+		</tbody>
+	</table>
+<?php endif ?>
+<?php
+	$addons = $VARS['addons'];
+?>
+<?php foreach ( $addons as $plugin_id => $plugin_addons ) : ?>
+	<h2><?php printf( __fs( 'addons-of-x' ), $plugin_id ) ?></h2>
+	<table id="fs_addons" class="widefat">
+		<thead>
+		<tr>
+			<th><?php _efs( 'id' ) ?></th>
+			<th><?php _efs( 'title' ) ?></th>
+			<th><?php _efs( 'slug' ) ?></th>
+			<th><?php _efs( 'version' ) ?></th>
+			<th><?php _efs( 'public-key' ) ?></th>
+			<th><?php _efs( 'secret-key' ) ?></th>
+		</tr>
+		</thead>
+		<tbody>
+		<?php
+			/**
+			 * @var FS_Plugin[] $plugin_addons
+			 */
+			foreach ( $plugin_addons as $addon ) : ?>
+				<tr>
+					<td><?php echo $addon->id ?></td>
+					<td><?php echo $addon->title ?></td>
+					<td><?php echo $addon->slug ?></td>
+					<td><?php echo $addon->version ?></td>
+					<td><?php echo $addon->public_key ?></td>
+					<td><?php echo $addon->secret_key ?></td>
+				</tr>
+			<?php endforeach ?>
+		</tbody>
+	</table>
+<?php endforeach ?>
+<?php
+	/**
+	 * @var FS_User[] $users
+	 */
+	$users = $VARS['users'];
+?>
+<?php if ( is_array( $users ) && 0 < count( $users ) ) : ?>
+	<h2><?php _efs( 'users' ) ?></h2>
+	<table id="fs_users" class="widefat">
+		<thead>
+		<tr>
+			<th><?php _efs( 'id' ) ?></th>
+			<th><?php _efs( 'name' ) ?></th>
+			<th><?php _efs( 'email' ) ?></th>
+			<th><?php _efs( 'verified' ) ?></th>
+			<th><?php _efs( 'public-key' ) ?></th>
+			<th><?php _efs( 'secret-key' ) ?></th>
+		</tr>
+		</thead>
+		<tbody>
+		<?php foreach ( $users as $user_id => $user ) : ?>
+			<tr>
+				<td><?php echo $user->id ?></td>
+				<td><?php echo $user->get_name() ?></td>
+				<td><a href="mailto:<?php esc_attr_e( $user->email ) ?>"><?php echo $user->email ?></a></td>
+				<td><?php echo json_encode( $user->is_verified ) ?></td>
+				<td><?php echo $user->public_key ?></td>
+				<td><?php echo $user->secret_key ?></td>
+			</tr>
+		<?php endforeach ?>
+		</tbody>
+	</table>
+<?php endif ?>
+<?php
+	/**
+	 * @var FS_Plugin_License[] $licenses
+	 */
+	$licenses = $VARS['licenses'];
+?>
+<?php if ( is_array( $licenses ) && 0 < count( $licenses ) ) : ?>
+	<h2><?php _efs( 'licenses' ) ?></h2>
+	<table id="fs_users" class="widefat">
+		<thead>
+		<tr>
+			<th><?php _efs( 'id' ) ?></th>
+			<th><?php _efs( 'plugin-id' ) ?></th>
+			<th><?php _efs( 'user-id' ) ?></th>
+			<th><?php _efs( 'plan-id' ) ?></th>
+			<th><?php _efs( 'quota' ) ?></th>
+			<th><?php _efs( 'activated' ) ?></th>
+			<th><?php _efs( 'blocking' ) ?></th>
+			<th><?php _efs( 'license-key' ) ?></th>
+			<th><?php _efs( 'expiration' ) ?></th>
+		</tr>
+		</thead>
+		<tbody>
+		<?php foreach ( $licenses as $slug => $module_licenses ) : ?>
+			<?php foreach ( $module_licenses as $id => $licenses ) : ?>
+				<?php if ( is_array( $licenses ) && 0 < count( $licenses ) ) : ?>
+					<?php foreach ( $licenses as $license ) : ?>
+						<tr>
+							<td><?php echo $license->id ?></td>
+							<td><?php echo $license->plugin_id ?></td>
+							<td><?php echo $license->user_id ?></td>
+							<td><?php echo $license->plan_id ?></td>
+							<td><?php echo $license->is_unlimited() ? 'Unlimited' : ( $license->is_single_site() ? 'Single Site' : $license->quota ) ?></td>
+							<td><?php echo $license->activated ?></td>
+							<td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
+							<td><?php echo htmlentities( $license->secret_key ) ?></td>
+							<td><?php echo $license->expiration ?></td>
+						</tr>
+					<?php endforeach ?>
+				<?php endif ?>
+			<?php endforeach ?>
+		<?php endforeach ?>
+		</tbody>
+	</table>
 <?php endif ?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/api-calls.php b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/api-calls.php
index fd83f5c3ce868375b2feda09d5e95e18042ed25d..c795c8e73422361d8663d60d0968ee53b15b900e 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/api-calls.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/api-calls.php
@@ -1,138 +1,138 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	if ( class_exists( 'Freemius_Api' ) ) {
-		$logger = Freemius_Api::GetLogger();
-	} else {
-		$logger = array();
-	}
-
-	$counters = array(
-		'GET'    => 0,
-		'POST'   => 0,
-		'PUT'    => 0,
-		'DELETE' => 0
-	);
-
-	$show_body = false;
-	foreach ( $logger as $log ) {
-		$counters[ $log['method'] ] ++;
-
-		if ( ! is_null( $log['body'] ) ) {
-			$show_body = true;
-		}
-	}
-
-	$pretty_print = $show_body && defined( 'JSON_PRETTY_PRINT' ) && version_compare( phpversion(), '5.3', '>=' );
-
-	$root_path_len = strlen( ABSPATH );
-?>
-<h1><?php _efs( 'API' ) ?></h1>
-
-<h2><span>Total Time:</span><?php echo Freemius_Debug_Bar_Panel::total_time() ?></h2>
-
-<h2><span>Total Requests:</span><?php echo Freemius_Debug_Bar_Panel::requests_count() ?></h2>
-<?php foreach ( $counters as $method => $count ) : ?>
-	<h2><span><?php echo $method ?>:</span><?php echo number_format( $count ) ?></h2>
-<?php endforeach ?>
-<table class="widefat">
-	<thead>
-	<tr>
-		<th>#</th>
-		<th><?php _efs( 'Method' ) ?></th>
-		<th><?php _efs( 'Code' ) ?></th>
-		<th><?php _efs( 'Length' ) ?></th>
-		<th><?php _efs( 'Path' ) ?></th>
-		<?php if ( $show_body ) : ?>
-			<th><?php _efs( 'Body' ) ?></th>
-		<?php endif ?>
-		<th><?php _efs( 'Result' ) ?></th>
-		<th><?php _efs( 'Start' ) ?></th>
-		<th><?php _efs( 'End' ) ?></th>
-	</tr>
-	</thead>
-	<tbody>
-	<?php foreach ( $logger as $log ) : ?>
-		<tr>
-			<td><?php echo $log['id'] ?>.</td>
-			<td><?php echo $log['method'] ?></td>
-			<td><?php echo $log['code'] ?></td>
-			<td><?php echo number_format( 100 * $log['total'], 2 ) . ' ' . __fs( 'ms' ) ?></td>
-			<td>
-				<?php
-					printf( '<a href="#" onclick="jQuery(this).parent().find(\'table\').toggle(); return false;">%s</a>',
-						$log['path']
-					);
-				?>
-				<table class="widefat" style="display: none">
-					<tbody>
-					<?php for ( $i = 0, $bt = $log['backtrace'], $len = count( $bt ); $i < $len; $i ++ ) : ?>
-						<tr>
-							<td><?php echo( $len - $i ) ?></td>
-							<td><?php if ( isset( $bt[ $i ]['function'] ) ) {
-									echo ( isset( $bt[ $i ]['class'] ) ? $bt[ $i ]['class'] . $bt[ $i ]['type'] : '' ) . $bt[ $i ]['function'];
-								} ?></td>
-							<td><?php if ( isset( $bt[ $i ]['file'] ) ) {
-									echo substr( $bt[ $i ]['file'], $root_path_len ) . ':' . $bt[ $i ]['line'];
-								} ?></td>
-						</tr>
-					<?php endfor ?>
-					</tbody>
-				</table>
-			</td>
-			<?php if ( $show_body ) : ?>
-				<td>
-					<?php if ( 'GET' !== $log['method'] ) : ?>
-						<?php
-						$body = $log['body'];
-						printf(
-							'<a href="#" onclick="jQuery(this).parent().find(\'pre\').toggle(); return false;">%s</a>',
-							substr( $body, 0, 32 ) . ( 32 < strlen( $body ) ? '...' : '' )
-						);
-						if ( $pretty_print ) {
-							$body = json_encode( json_decode( $log['body'] ), JSON_PRETTY_PRINT );
-						}
-						?>
-						<pre style="display: none"><code><?php echo esc_html( $body ) ?></code></pre>
-					<?php endif ?>
-				</td>
-			<?php endif ?>
-			<td>
-				<?php
-					$result = $log['result'];
-
-					$is_not_empty_result = ( is_string( $result ) && ! empty( $result ) );
-
-					if ( $is_not_empty_result ) {
-						printf(
-							'<a href="#" onclick="jQuery(this).parent().find(\'pre\').toggle(); return false;">%s</a>',
-							substr( $result, 0, 32 ) . ( 32 < strlen( $result ) ? '...' : '' )
-						);
-					}
-
-					if ( $is_not_empty_result && $pretty_print ) {
-						$decoded = json_decode( $result );
-						if ( ! is_null( $decoded ) ) {
-							$result = json_encode( $decoded, JSON_PRETTY_PRINT );
-						}
-					} else {
-						$result = is_string( $result ) ? $result : json_encode( $result );
-					}
-				?>
-				<pre<?php if ( $is_not_empty_result ) : ?> style="display: none"<?php endif ?>><code><?php echo esc_html( $result ) ?></code></pre>
-			</td>
-			<td><?php echo number_format( 100 * ( $log['start'] - WP_FS__SCRIPT_START_TIME ), 2 ) . ' ' . __fs( 'ms' ) ?></td>
-			<td><?php echo number_format( 100 * ( $log['end'] - WP_FS__SCRIPT_START_TIME ), 2 ) . ' ' . __fs( 'ms' ) ?></td>
-		</tr>
-	<?php endforeach ?>
-	</tbody>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	if ( class_exists( 'Freemius_Api' ) ) {
+		$logger = Freemius_Api::GetLogger();
+	} else {
+		$logger = array();
+	}
+
+	$counters = array(
+		'GET'    => 0,
+		'POST'   => 0,
+		'PUT'    => 0,
+		'DELETE' => 0
+	);
+
+	$show_body = false;
+	foreach ( $logger as $log ) {
+		$counters[ $log['method'] ] ++;
+
+		if ( ! is_null( $log['body'] ) ) {
+			$show_body = true;
+		}
+	}
+
+	$pretty_print = $show_body && defined( 'JSON_PRETTY_PRINT' ) && version_compare( phpversion(), '5.3', '>=' );
+
+	$root_path_len = strlen( ABSPATH );
+?>
+<h1><?php _efs( 'API' ) ?></h1>
+
+<h2><span>Total Time:</span><?php echo Freemius_Debug_Bar_Panel::total_time() ?></h2>
+
+<h2><span>Total Requests:</span><?php echo Freemius_Debug_Bar_Panel::requests_count() ?></h2>
+<?php foreach ( $counters as $method => $count ) : ?>
+	<h2><span><?php echo $method ?>:</span><?php echo number_format( $count ) ?></h2>
+<?php endforeach ?>
+<table class="widefat">
+	<thead>
+	<tr>
+		<th>#</th>
+		<th><?php _efs( 'Method' ) ?></th>
+		<th><?php _efs( 'Code' ) ?></th>
+		<th><?php _efs( 'Length' ) ?></th>
+		<th><?php _efs( 'Path' ) ?></th>
+		<?php if ( $show_body ) : ?>
+			<th><?php _efs( 'Body' ) ?></th>
+		<?php endif ?>
+		<th><?php _efs( 'Result' ) ?></th>
+		<th><?php _efs( 'Start' ) ?></th>
+		<th><?php _efs( 'End' ) ?></th>
+	</tr>
+	</thead>
+	<tbody>
+	<?php foreach ( $logger as $log ) : ?>
+		<tr>
+			<td><?php echo $log['id'] ?>.</td>
+			<td><?php echo $log['method'] ?></td>
+			<td><?php echo $log['code'] ?></td>
+			<td><?php echo number_format( 100 * $log['total'], 2 ) . ' ' . __fs( 'ms' ) ?></td>
+			<td>
+				<?php
+					printf( '<a href="#" onclick="jQuery(this).parent().find(\'table\').toggle(); return false;">%s</a>',
+						$log['path']
+					);
+				?>
+				<table class="widefat" style="display: none">
+					<tbody>
+					<?php for ( $i = 0, $bt = $log['backtrace'], $len = count( $bt ); $i < $len; $i ++ ) : ?>
+						<tr>
+							<td><?php echo( $len - $i ) ?></td>
+							<td><?php if ( isset( $bt[ $i ]['function'] ) ) {
+									echo ( isset( $bt[ $i ]['class'] ) ? $bt[ $i ]['class'] . $bt[ $i ]['type'] : '' ) . $bt[ $i ]['function'];
+								} ?></td>
+							<td><?php if ( isset( $bt[ $i ]['file'] ) ) {
+									echo substr( $bt[ $i ]['file'], $root_path_len ) . ':' . $bt[ $i ]['line'];
+								} ?></td>
+						</tr>
+					<?php endfor ?>
+					</tbody>
+				</table>
+			</td>
+			<?php if ( $show_body ) : ?>
+				<td>
+					<?php if ( 'GET' !== $log['method'] ) : ?>
+						<?php
+						$body = $log['body'];
+						printf(
+							'<a href="#" onclick="jQuery(this).parent().find(\'pre\').toggle(); return false;">%s</a>',
+							substr( $body, 0, 32 ) . ( 32 < strlen( $body ) ? '...' : '' )
+						);
+						if ( $pretty_print ) {
+							$body = json_encode( json_decode( $log['body'] ), JSON_PRETTY_PRINT );
+						}
+						?>
+						<pre style="display: none"><code><?php echo esc_html( $body ) ?></code></pre>
+					<?php endif ?>
+				</td>
+			<?php endif ?>
+			<td>
+				<?php
+					$result = $log['result'];
+
+					$is_not_empty_result = ( is_string( $result ) && ! empty( $result ) );
+
+					if ( $is_not_empty_result ) {
+						printf(
+							'<a href="#" onclick="jQuery(this).parent().find(\'pre\').toggle(); return false;">%s</a>',
+							substr( $result, 0, 32 ) . ( 32 < strlen( $result ) ? '...' : '' )
+						);
+					}
+
+					if ( $is_not_empty_result && $pretty_print ) {
+						$decoded = json_decode( $result );
+						if ( ! is_null( $decoded ) ) {
+							$result = json_encode( $decoded, JSON_PRETTY_PRINT );
+						}
+					} else {
+						$result = is_string( $result ) ? $result : json_encode( $result );
+					}
+				?>
+				<pre<?php if ( $is_not_empty_result ) : ?> style="display: none"<?php endif ?>><code><?php echo esc_html( $result ) ?></code></pre>
+			</td>
+			<td><?php echo number_format( 100 * ( $log['start'] - WP_FS__SCRIPT_START_TIME ), 2 ) . ' ' . __fs( 'ms' ) ?></td>
+			<td><?php echo number_format( 100 * ( $log['end'] - WP_FS__SCRIPT_START_TIME ), 2 ) . ' ' . __fs( 'ms' ) ?></td>
+		</tr>
+	<?php endforeach ?>
+	</tbody>
 </table>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/logger.php b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/logger.php
index c7272026206570925b40820c5f338bbbdcaa86ab..21fad48063ab19600ae25789db102206daf20bfd 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/logger.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/logger.php
@@ -1,60 +1,66 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$log_book = FS_Logger::get_log();
-?>
-<h1><?php _efs( 'Log' ) ?></h1>
-
-<table class="widefat" style="font-size: 11px;">
-	<thead>
-	<tr>
-		<th>#</th>
-		<th><?php _efs( 'id' ) ?></th>
-		<th><?php _efs( 'type' ) ?></th>
-		<th><?php _efs( 'function' ) ?></th>
-		<th><?php _efs( 'message' ) ?></th>
-		<th><?php _efs( 'file' ) ?></th>
-		<th><?php _efs( 'timestamp' ) ?></th>
-	</tr>
-	</thead>
-	<tbody>
-
-	<?php $i = 0;
-		foreach ( $log_book as $log ) : ?>
-			<tr<?php if ( $i % 2 ) {
-				echo ' class="alternate"';
-			} ?>>
-				<td><?php echo $log['cnt'] ?>.</td>
-				<td><?php echo $log['logger']->get_id() ?></td>
-				<td><?php echo $log['type'] ?></td>
-				<td><b><code style="color: blue;"><?php echo $log['function'] ?></code></b></td>
-				<td>
-					<?php
-						printf(
-							'<a href="#" style="color: darkorange !important;" onclick="jQuery(this).parent().find(\'div\').toggle(); return false;"><nobr>%s</nobr></a>',
-							substr( $log['msg'], 0, 32 ) . ( 32 < strlen( $log['msg'] ) ? '...' : '' )
-						);
-					?>
-					<div style="display: none;">
-						<b style="color: darkorange;"><?php echo $log['msg'] ?></b>
-					</div>
-				</td>
-				<td><?php
-						if ( isset( $log['file'] ) ) {
-							echo substr( $log['file'], $log['logger']->get_file() ) . ':' . $log['line'] . ')';
-						}
-					?></td>
-				<td><?php echo number_format( 100 * ( $log['timestamp'] - WP_FS__SCRIPT_START_TIME ), 2 ) . ' ' . __fs( 'ms' ) ?></td>
-			</tr>
-			<?php $i ++; endforeach ?>
-	</tbody>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	$log_book = FS_Logger::get_log();
+?>
+<h1><?php _efs( 'Log' ) ?></h1>
+
+<table class="widefat" style="font-size: 11px;">
+	<thead>
+	<tr>
+		<th>#</th>
+		<th><?php _efs( 'id' ) ?></th>
+		<th><?php _efs( 'type' ) ?></th>
+		<th><?php _efs( 'function' ) ?></th>
+		<th><?php _efs( 'message' ) ?></th>
+		<th><?php _efs( 'file' ) ?></th>
+		<th><?php _efs( 'timestamp' ) ?></th>
+	</tr>
+	</thead>
+	<tbody>
+
+	<?php $i = 0;
+		foreach ( $log_book as $log ) : ?>
+			<?php
+			/**
+			 * @var FS_Logger $logger
+			 */
+			$logger = $log['logger'];
+			?>
+			<tr<?php if ( $i % 2 ) {
+				echo ' class="alternate"';
+			} ?>>
+				<td><?php echo $log['cnt'] ?>.</td>
+				<td><?php echo $logger->get_id() ?></td>
+				<td><?php echo $log['type'] ?></td>
+				<td><b><code style="color: blue;"><?php echo $log['function'] ?></code></b></td>
+				<td>
+					<?php
+						printf(
+							'<a href="#" style="color: darkorange !important;" onclick="jQuery(this).parent().find(\'div\').toggle(); return false;"><nobr>%s</nobr></a>',
+							substr( $log['msg'], 0, 32 ) . ( 32 < strlen( $log['msg'] ) ? '...' : '' )
+						);
+					?>
+					<div style="display: none;">
+						<b style="color: darkorange;"><?php echo $log['msg'] ?></b>
+					</div>
+				</td>
+				<td><?php
+						if ( isset( $log['file'] ) ) {
+							echo substr( $log['file'], $logger->get_file() ) . ':' . $log['line'] . ')';
+						}
+					?></td>
+				<td><?php echo number_format( 100 * ( $log['timestamp'] - WP_FS__SCRIPT_START_TIME ), 2 ) . ' ' . __fs( 'ms' ) ?></td>
+			</tr>
+			<?php $i ++; endforeach ?>
+	</tbody>
 </table>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/plugins-themes-sync.php b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/plugins-themes-sync.php
index d5cb0c1b006ec99311bdedd71bc43ae49e3ad867..a7616220a28798205fa268d5446a5fce389891ee 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/plugins-themes-sync.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/plugins-themes-sync.php
@@ -1,68 +1,68 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$fs_options  = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
-	$all_plugins = $fs_options->get_option( 'all_plugins' );
-	$all_themes  = $fs_options->get_option( 'all_themes' );
-?>
-<h1><?php _efs( 'plugins-themes-sync' ) ?></h1>
-<table class="widefat">
-	<thead>
-	<tr>
-		<th></th>
-		<th><?php _efs( 'total' ) ?></th>
-		<th><?php _efs( 'Last' ) ?></th>
-	</tr>
-	</thead>
-	<tbody>
-	<?php if ( is_object( $all_plugins ) ) : ?>
-		<tr>
-			<td><?php _efs( 'plugins' ) ?></td>
-			<td><?php echo count( $all_plugins->plugins ) ?></td>
-			<td><?php
-					if ( isset( $all_plugins->timestamp ) && is_numeric( $all_plugins->timestamp ) ) {
-						$diff       = abs( WP_FS__SCRIPT_START_TIME - $all_plugins->timestamp );
-						$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
-							$diff . ' ' . __fs( 'sec' ) :
-							human_time_diff( WP_FS__SCRIPT_START_TIME, $all_plugins->timestamp );
-
-						if ( WP_FS__SCRIPT_START_TIME < $all_plugins->timestamp ) {
-							printf( __fs( 'in-x' ), $human_diff );
-						} else {
-							printf( __fs( 'x-ago' ), $human_diff );
-						}
-					}
-				?></td>
-		</tr>
-	<?php endif ?>
-	<?php if ( is_object( $all_themes ) ) : ?>
-		<tr>
-			<td><?php _efs( 'themes' ) ?></td>
-			<td><?php echo count( $all_themes->themes ) ?></td>
-			<td><?php
-					if ( isset( $all_themes->timestamp ) && is_numeric( $all_themes->timestamp ) ) {
-						$diff       = abs( WP_FS__SCRIPT_START_TIME - $all_themes->timestamp );
-						$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
-							$diff . ' ' . __fs( 'sec' ) :
-							human_time_diff( WP_FS__SCRIPT_START_TIME, $all_themes->timestamp );
-
-						if ( WP_FS__SCRIPT_START_TIME < $all_themes->timestamp ) {
-							printf( __fs( 'in-x' ), $human_diff );
-						} else {
-							printf( __fs( 'x-ago' ), $human_diff );
-						}
-					}
-				?></td>
-		</tr>
-	<?php endif ?>
-	</tbody>
-</table>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	$fs_options  = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
+	$all_plugins = $fs_options->get_option( 'all_plugins' );
+	$all_themes  = $fs_options->get_option( 'all_themes' );
+?>
+<h1><?php _efs( 'plugins-themes-sync' ) ?></h1>
+<table class="widefat">
+	<thead>
+	<tr>
+		<th></th>
+		<th><?php _efs( 'total' ) ?></th>
+		<th><?php _efs( 'Last' ) ?></th>
+	</tr>
+	</thead>
+	<tbody>
+	<?php if ( is_object( $all_plugins ) ) : ?>
+		<tr>
+			<td><?php _efs( 'plugins' ) ?></td>
+			<td><?php echo count( $all_plugins->plugins ) ?></td>
+			<td><?php
+					if ( isset( $all_plugins->timestamp ) && is_numeric( $all_plugins->timestamp ) ) {
+						$diff       = abs( WP_FS__SCRIPT_START_TIME - $all_plugins->timestamp );
+						$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
+							$diff . ' ' . __fs( 'sec' ) :
+							human_time_diff( WP_FS__SCRIPT_START_TIME, $all_plugins->timestamp );
+
+						if ( WP_FS__SCRIPT_START_TIME < $all_plugins->timestamp ) {
+							printf( __fs( 'in-x' ), $human_diff );
+						} else {
+							printf( __fs( 'x-ago' ), $human_diff );
+						}
+					}
+				?></td>
+		</tr>
+	<?php endif ?>
+	<?php if ( is_object( $all_themes ) ) : ?>
+		<tr>
+			<td><?php _efs( 'themes' ) ?></td>
+			<td><?php echo count( $all_themes->themes ) ?></td>
+			<td><?php
+					if ( isset( $all_themes->timestamp ) && is_numeric( $all_themes->timestamp ) ) {
+						$diff       = abs( WP_FS__SCRIPT_START_TIME - $all_themes->timestamp );
+						$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
+							$diff . ' ' . __fs( 'sec' ) :
+							human_time_diff( WP_FS__SCRIPT_START_TIME, $all_themes->timestamp );
+
+						if ( WP_FS__SCRIPT_START_TIME < $all_themes->timestamp ) {
+							printf( __fs( 'in-x' ), $human_diff );
+						} else {
+							printf( __fs( 'x-ago' ), $human_diff );
+						}
+					}
+				?></td>
+		</tr>
+	<?php endif ?>
+	</tbody>
+</table>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/scheduled-crons.php b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/scheduled-crons.php
index 758024dacfbcc471fbc547333b92b3a63ccc22b9..c17324ecc5828d72faecca2e15253c5edaefd6da 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/debug/scheduled-crons.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/debug/scheduled-crons.php
@@ -1,100 +1,109 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.7.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$fs_options      = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
-	$plugins         = $fs_options->get_option( 'plugins' );
-	$scheduled_crons = array();
-	if ( is_array( $plugins ) && 0 < count( $plugins ) ) {
-		foreach ( $plugins as $slug => $data ) {
-			$fs             = freemius( $slug );
-
-			$next_execution = $fs->next_sync_cron();
-			$last_execution = $fs->last_sync_cron();
-
-			if ( false !== $next_execution ) {
-				$scheduled_crons[ $slug ][] = array(
-					'name' => $fs->get_plugin_name(),
-					'slug' => $slug,
-					'type' => 'sync_cron',
-					'last' => $last_execution,
-					'next' => $next_execution,
-				);
-			}
-
-			$next_install_execution = $fs->next_install_sync();
-			$last_install_execution = $fs->last_install_sync();
-
-			if ( false !== $next_install_execution || false !== $last_install_execution ) {
-				$scheduled_crons[ $slug ][] = array(
-					'name' => $fs->get_plugin_name(),
-					'slug' => $slug,
-					'type' => 'install_sync',
-					'last' => $last_install_execution,
-					'next' => $next_install_execution,
-				);
-			}
-		}
-	}
-?>
-<h1><?php _efs( 'scheduled-crons' ) ?></h1>
-<table class="widefat">
-	<thead>
-	<tr>
-		<th><?php _efs( 'slug' ) ?></th>
-		<th><?php _efs( 'plugin' ) ?></th>
-		<th><?php _efs( 'type' ) ?></th>
-		<th><?php _efs( 'Last' ) ?></th>
-		<th><?php _efs( 'Next' ) ?></th>
-	</tr>
-	</thead>
-	<tbody>
-	<?php foreach ( $scheduled_crons as $slug => $crons ) : ?>
-		<?php foreach ( $crons as $cron ) : ?>
-			<tr>
-				<td><?php echo $slug ?></td>
-				<td><?php echo $cron['name'] ?></td>
-				<td><?php echo $cron['type'] ?></td>
-				<td><?php
-						if (is_numeric($cron['last'])) {
-							$diff       = abs( WP_FS__SCRIPT_START_TIME - $cron['last'] );
-							$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
-								$diff . ' ' . __fs( 'sec' ) :
-								human_time_diff( WP_FS__SCRIPT_START_TIME, $cron['last'] );
-
-							if ( WP_FS__SCRIPT_START_TIME < $cron['last'] ) {
-								printf( __fs( 'in-x' ), $human_diff );
-							} else {
-								printf( __fs( 'x-ago' ), $human_diff );
-							}
-
-//							echo ' ' . $cron['last'];
-						}
-					?></td>
-				<td><?php
-						if (is_numeric($cron['next'])) {
-							$diff       = abs( WP_FS__SCRIPT_START_TIME - $cron['next'] );
-							$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
-								$diff . ' ' . __fs( 'sec' ) :
-								human_time_diff( WP_FS__SCRIPT_START_TIME, $cron['next'] );
-
-							if ( WP_FS__SCRIPT_START_TIME < $cron['next'] ) {
-								printf( __fs( 'in-x' ), $human_diff );
-							} else {
-								printf( __fs( 'x-ago' ), $human_diff );
-							}
-						}
-					?></td>
-			</tr>
-		<?php endforeach ?>
-	<?php endforeach ?>
-	</tbody>
-</table>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.7.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	$fs_options      = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
+	$plugins         = $fs_options->get_option( 'plugins' );
+	$scheduled_crons = array();
+	if ( is_array( $plugins ) && 0 < count( $plugins ) ) {
+		foreach ( $plugins as $slug => $data ) {
+			/**
+			 * @author Vova Feldman
+			 *
+			 * @since 1.2.1 Don't load data from inactive modules.
+			 */
+			if ( is_plugin_active( $data->file ) ) {
+				$fs = freemius( $slug );
+
+				$next_execution = $fs->next_sync_cron();
+				$last_execution = $fs->last_sync_cron();
+
+				if ( false !== $next_execution ) {
+					$scheduled_crons[ $slug ][] = array(
+						'name' => $fs->get_plugin_name(),
+						'slug' => $slug,
+						'type' => 'sync_cron',
+						'last' => $last_execution,
+						'next' => $next_execution,
+					);
+				}
+
+				$next_install_execution = $fs->next_install_sync();
+				$last_install_execution = $fs->last_install_sync();
+
+				if ( false !== $next_install_execution ||
+				     false !== $last_install_execution
+				) {
+					$scheduled_crons[ $slug ][] = array(
+						'name' => $fs->get_plugin_name(),
+						'slug' => $slug,
+						'type' => 'install_sync',
+						'last' => $last_install_execution,
+						'next' => $next_install_execution,
+					);
+				}
+			}
+		}
+	}
+?>
+<h1><?php _efs( 'scheduled-crons' ) ?></h1>
+<table class="widefat">
+	<thead>
+	<tr>
+		<th><?php _efs( 'slug' ) ?></th>
+		<th><?php _efs( 'plugin' ) ?></th>
+		<th><?php _efs( 'type' ) ?></th>
+		<th><?php _efs( 'Last' ) ?></th>
+		<th><?php _efs( 'Next' ) ?></th>
+	</tr>
+	</thead>
+	<tbody>
+	<?php foreach ( $scheduled_crons as $slug => $crons ) : ?>
+		<?php foreach ( $crons as $cron ) : ?>
+			<tr>
+				<td><?php echo $slug ?></td>
+				<td><?php echo $cron['name'] ?></td>
+				<td><?php echo $cron['type'] ?></td>
+				<td><?php
+						if ( is_numeric( $cron['last'] ) ) {
+							$diff       = abs( WP_FS__SCRIPT_START_TIME - $cron['last'] );
+							$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
+								$diff . ' ' . __fs( 'sec' ) :
+								human_time_diff( WP_FS__SCRIPT_START_TIME, $cron['last'] );
+
+							if ( WP_FS__SCRIPT_START_TIME < $cron['last'] ) {
+								printf( __fs( 'in-x' ), $human_diff );
+							} else {
+								printf( __fs( 'x-ago' ), $human_diff );
+							}
+
+//							echo ' ' . $cron['last'];
+						}
+					?></td>
+				<td><?php
+						if ( is_numeric( $cron['next'] ) ) {
+							$diff       = abs( WP_FS__SCRIPT_START_TIME - $cron['next'] );
+							$human_diff = ( $diff < MINUTE_IN_SECONDS ) ?
+								$diff . ' ' . __fs( 'sec' ) :
+								human_time_diff( WP_FS__SCRIPT_START_TIME, $cron['next'] );
+
+							if ( WP_FS__SCRIPT_START_TIME < $cron['next'] ) {
+								printf( __fs( 'in-x' ), $human_diff );
+							} else {
+								printf( __fs( 'x-ago' ), $human_diff );
+							}
+						}
+					?></td>
+			</tr>
+		<?php endforeach ?>
+	<?php endforeach ?>
+	</tbody>
+</table>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/email.php b/wp-content/plugins/nextgen-gallery/freemius/templates/email.php
index 671aa2ad5ef48f741f1255ad24561d60f8f872cd..66c82b17023cb33fcb3d3c1d23dd06b1a3dac542 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/email.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/email.php
@@ -1,46 +1,49 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.1
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$sections = $VARS['sections'];
-?>
-<table>
-	<?php
-	foreach ( $sections as $section_id => $section ) {
-		?>
-		<thead>
-			<tr><th colspan="2" style="text-align: left; background: #333; color: #fff; padding: 5px;"><?php echo $section['title']; ?></th></tr>
-		</thead>
-		<tbody>
-		<?php
-		foreach ( $section['rows'] as $row_id => $row ) {
-			$col_count = count( $row );
-			?>
-			<tr>
-				<?php
-				if ( 1 === $col_count ) { ?>
-					<td style="vertical-align: top;" colspan="2"><?php echo $row[0]; ?></td>
-					<?php
-				} else { ?>
-					<td style="vertical-align: top;"><b><?php echo $row[0]; ?>:</b></td>
-					<td><?php echo $row[1]; ?></td>
-					<?php
-				}
-				?>
-			</tr>
-			<?php
-		}
-		?>
-		</tbody>
-		<?php
-	}
-	?>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.1
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$sections = $VARS['sections'];
+?>
+<table>
+	<?php
+	foreach ( $sections as $section_id => $section ) {
+		?>
+		<thead>
+			<tr><th colspan="2" style="text-align: left; background: #333; color: #fff; padding: 5px;"><?php echo $section['title']; ?></th></tr>
+		</thead>
+		<tbody>
+		<?php
+		foreach ( $section['rows'] as $row_id => $row ) {
+			$col_count = count( $row );
+			?>
+			<tr>
+				<?php
+				if ( 1 === $col_count ) { ?>
+					<td style="vertical-align: top;" colspan="2"><?php echo $row[0]; ?></td>
+					<?php
+				} else { ?>
+					<td style="vertical-align: top;"><b><?php echo $row[0]; ?>:</b></td>
+					<td><?php echo $row[1]; ?></td>
+					<?php
+				}
+				?>
+			</tr>
+			<?php
+		}
+		?>
+		</tbody>
+		<?php
+	}
+	?>
 </table>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/firewall-issues-js.php b/wp-content/plugins/nextgen-gallery/freemius/templates/firewall-issues-js.php
index 83450cec648ceaa7272eaff8dc2eda53335ce76c..a27b548ddb386104e0315e045d80e2057220a768 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/firewall-issues-js.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/firewall-issues-js.php
@@ -1,60 +1,60 @@
-<?php
-	/**
-	 * API connectivity issues (CloudFlare's firewall) handler for handling different
-	 * scenarios selected by the user after connectivity issue is detected, by sending
-	 * AJAX call to the server in order to make the actual actions.
-	 *
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.9
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-?>
-<script type="text/javascript">
-	jQuery(document).ready(function ($) {
-		$('#fs_firewall_issue_options a.fs-resolve').click(function () {
-			var
-				error_type = $(this).attr('data-type'),
-				notice = $(this).parents('.fs-notice'),
-				slug = notice.attr('data-slug');
-
-			var data = {
-				action    : slug + '_resolve_firewall_issues',
-				slug      : slug,
-				error_type: error_type
-			};
-
-			if ('squid' === error_type) {
-				data.hosting_company = prompt('What is the name or URL of your hosting company?');
-				if (null == data.hosting_company)
-					return false;
-
-				if ('' === data.hosting_company) {
-					alert('We won\'t be able to help without knowing your hosting company.');
-					return false;
-				}
-			}
-
-			if ('retry_ping' === error_type) {
-				data.action = slug + '_retry_connectivity_test';
-			}
-
-			$(this).css({'cursor': 'wait'});
-
-			// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
-			$.post(ajaxurl, data, function (response) {
-				if (1 == response) {
-					// Refresh page on success.
-					location.reload();
-				} else if ('http' === response.substr(0, 4)) {
-					// Ping actually worked, redirect.
-					window.location = response;
-				}
-			});
-		});
-	});
+<?php
+	/**
+	 * API connectivity issues (CloudFlare's firewall) handler for handling different
+	 * scenarios selected by the user after connectivity issue is detected, by sending
+	 * AJAX call to the server in order to make the actual actions.
+	 *
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.9
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+?>
+<script type="text/javascript">
+	jQuery(document).ready(function ($) {
+		$('#fs_firewall_issue_options a.fs-resolve').click(function () {
+			var
+				error_type = $(this).attr('data-type'),
+				notice = $(this).parents('.fs-notice'),
+				slug = notice.attr('data-slug');
+
+			var data = {
+				action    : 'fs_resolve_firewall_issues_' + slug,
+				slug      : slug,
+				error_type: error_type
+			};
+
+			if ('squid' === error_type) {
+				data.hosting_company = prompt('What is the name or URL of your hosting company?');
+				if (null == data.hosting_company)
+					return false;
+
+				if ('' === data.hosting_company) {
+					alert('We won\'t be able to help without knowing your hosting company.');
+					return false;
+				}
+			}
+
+			if ('retry_ping' === error_type) {
+				data.action = 'fs_retry_connectivity_test_' + slug;
+			}
+
+			$(this).css({'cursor': 'wait'});
+
+			// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
+			$.post(ajaxurl, data, function (response) {
+				if (1 == response) {
+					// Refresh page on success.
+					location.reload();
+				} else if ('http' === response.substr(0, 4)) {
+					// Ping actually worked, redirect.
+					window.location = response;
+				}
+			});
+		});
+	});
 </script>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/contact.php b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/contact.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c1db5d6d4ec52bbbda5875a2c916f343c8dcd4d
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/contact.php
@@ -0,0 +1,23 @@
+<?php
+    /**
+     * @package     Freemius
+     * @copyright   Copyright (c) 2015, Freemius, Inc.
+     * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+     * @since       1.2.0
+     */
+
+    if ( ! defined( 'ABSPATH' ) ) {
+        exit;
+    }
+
+	/**
+	 * @var array $VARS
+	 */
+    $slug = $VARS['slug'];
+    $fs   = freemius( $slug );
+
+    echo __fs( 'contact-support-before-deactivation', $slug )
+            . sprintf(" <a href='%s' class='button button-small button-primary'>%s</a>",
+                $fs->contact_url( 'technical_support' ),
+                __fs( 'contact-support', $slug )
+            );
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/form.php b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/form.php
new file mode 100644
index 0000000000000000000000000000000000000000..7dc0f55a80b356eca11a9ab87d19363cad0db31e
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/form.php
@@ -0,0 +1,360 @@
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.2
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	$fs   = freemius( $slug );
+
+	$confirmation_message = $fs->apply_filters( 'uninstall_confirmation_message', '' );
+
+	$reasons = $VARS['reasons'];
+
+	$reasons_list_items_html = '';
+
+	foreach ( $reasons as $reason ) {
+		$list_item_classes    = 'reason' . ( ! empty( $reason['input_type'] ) ? ' has-input' : '' );
+
+		if ( isset( $reason['internal_message'] ) && ! empty( $reason['internal_message'] ) ) {
+			$list_item_classes .= ' has-internal-message';
+			$reason_internal_message = $reason['internal_message'];
+		} else {
+			$reason_internal_message = '';
+		}
+
+		$reason_list_item_html = <<< HTML
+			<li class="{$list_item_classes}"
+			 	data-input-type="{$reason['input_type']}"
+			 	data-input-placeholder="{$reason['input_placeholder']}">
+	            <label>
+	            	<span>
+	            		<input type="radio" name="selected-reason" value="{$reason['id']}"/>
+                    </span>
+                    <span>{$reason['text']}</span>
+                </label>
+                <div class="internal-message">{$reason_internal_message}</div>
+            </li>
+HTML;
+
+		$reasons_list_items_html .= $reason_list_item_html;
+	}
+
+	$is_anonymous = ( ! $fs->is_registered() );
+	if ( $is_anonymous ) {
+		$anonymous_feedback_checkbox_html =
+			'<label class="anonymous-feedback-label"><input type="checkbox" class="anonymous-feedback-checkbox"> '
+				. __fs( 'anonymous-feedback', $slug )
+			. '</label>';
+	} else {
+		$anonymous_feedback_checkbox_html = '';
+	}
+
+	fs_enqueue_local_style( 'dialog-boxes', '/admin/dialog-boxes.css' );
+?>
+<script type="text/javascript">
+(function ($) {
+	var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ); ?>,
+	    modalHtml =
+		    '<div class="fs-modal fs-modal-deactivation-feedback<?php echo empty( $confirmation_message ) ? ' no-confirmation-message' : ''; ?>">'
+		    + '	<div class="fs-modal-dialog">'
+		    + '		<div class="fs-modal-header">'
+		    + '		    <h4><?php _efs('quick-feedback' , $slug) ?></h4>'
+		    + '		</div>'
+		    + '		<div class="fs-modal-body">'
+		    + '			<div class="fs-modal-panel" data-panel-id="confirm"><p><?php echo $confirmation_message; ?></p></div>'
+		    + '			<div class="fs-modal-panel active" data-panel-id="reasons"><h3><strong><?php printf( __fs(  'deactivation-share-reason' , $slug ) ); ?>:</strong></h3><ul id="reasons-list">' + reasonsHtml + '</ul></div>'
+		    + '		</div>'
+		    + '		<div class="fs-modal-footer">'
+			+ '         <?php echo $anonymous_feedback_checkbox_html ?>'
+		    + '			<a href="#" class="button button-secondary button-deactivate"></a>'
+		    + '			<a href="#" class="button button-primary button-close"><?php printf( __fs(  'deactivation-modal-button-cancel' , $slug ) ) ?></a>'
+		    + '		</div>'
+		    + '	</div>'
+		    + '</div>',
+	    $modal                = $(modalHtml),
+	    $deactivateLink       = $('#the-list .deactivate > [data-slug=<?php echo $VARS['slug']; ?>].fs-slug').prev(),
+		$anonymousFeedback    = $modal.find( '.anonymous-feedback-label' ),
+		isAnonymous           = <?php echo ( $is_anonymous ? 'true' : 'false' ); ?>,
+		selectedReasonID      = false,
+		otherReasonID         = <?php echo Freemius::REASON_OTHER; ?>,
+		dontShareDataReasonID = <?php echo Freemius::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION; ?>;
+
+	$modal.appendTo($('body'));
+
+	registerEventHandlers();
+
+	function registerEventHandlers() {
+		$deactivateLink.click(function (evt) {
+			evt.preventDefault();
+
+			showModal();
+		});
+
+		$modal.on('input propertychange', '.reason-input input', function () {
+			if (!isOtherReasonSelected()) {
+				return;
+			}
+
+			var reason = $(this).val().trim();
+
+			/**
+			 * If reason is not empty, remove the error-message class of the message container
+			 * to change the message color back to default.
+			 */
+			if (reason.length > 0) {
+				$('.message').removeClass('error-message');
+				enableDeactivateButton();
+			}
+		});
+
+		$modal.on('blur', '.reason-input input', function () {
+			var $userReason = $(this);
+
+			setTimeout(function () {
+				if (!isOtherReasonSelected()) {
+					return;
+				}
+
+				/**
+				 * If reason is empty, add the error-message class to the message container
+				 * to change the message color to red.
+				 */
+				if (0 === $userReason.val().trim().length) {
+					$('.message').addClass('error-message');
+					disableDeactivateButton();
+				}
+			}, 150);
+		});
+
+		$modal.on('click', '.fs-modal-footer .button', function (evt) {
+			evt.preventDefault();
+
+			if ($(this).hasClass('disabled')) {
+				return;
+			}
+
+			var _parent = $(this).parents('.fs-modal:first');
+			var _this = $(this);
+
+			if (_this.hasClass('allow-deactivate')) {
+				var $radio = $('input[type="radio"]:checked');
+
+				if (0 === $radio.length) {
+					// If no selected reason, just deactivate the plugin.
+					window.location.href = $deactivateLink.attr('href');
+					return;
+				}
+
+				var $selected_reason = $radio.parents('li:first'),
+				    $input = $selected_reason.find('textarea, input[type="text"]'),
+				    userReason = ( 0 !== $input.length ) ? $input.val().trim() : '';
+
+				if (isOtherReasonSelected() && ( '' === userReason )) {
+					return;
+				}
+
+				$.ajax({
+					url       : ajaxurl,
+					method    : 'POST',
+					data      : {
+						'action'      : '<?php echo $fs->get_action_tag( 'submit_uninstall_reason' ) ?>',
+						'reason_id'   : $radio.val(),
+						'reason_info' : userReason,
+						'is_anonymous': isAnonymousFeedback()
+					},
+					beforeSend: function () {
+						_parent.find('.fs-modal-footer .button').addClass('disabled');
+						_parent.find('.fs-modal-footer .button-secondary').text('Processing...');
+					},
+					complete  : function () {
+						// Do not show the dialog box, deactivate the plugin.
+						window.location.href = $deactivateLink.attr('href');
+					}
+				});
+			} else if (_this.hasClass('button-deactivate')) {
+				// Change the Deactivate button's text and show the reasons panel.
+				_parent.find('.button-deactivate').addClass('allow-deactivate');
+
+				showPanel('reasons');
+			}
+		});
+
+		$modal.on('click', 'input[type="radio"]', function () {
+			var $selectedReasonOption = $(this);
+
+			// If the selection has not changed, do not proceed.
+			if (selectedReasonID === $selectedReasonOption.val())
+				return;
+
+			selectedReasonID = $selectedReasonOption.val();
+
+			if ( isAnonymous ) {
+				if ( isReasonSelected( dontShareDataReasonID ) ) {
+					$anonymousFeedback.hide();
+				} else {
+					$anonymousFeedback.show();
+				}
+			}
+
+			var _parent = $(this).parents('li:first');
+
+			$modal.find('.reason-input').remove();
+			$modal.find( '.internal-message' ).hide();
+			$modal.find('.button-deactivate').text('<?php printf( __fs(  'deactivation-modal-button-submit' , $slug ) ); ?>');
+
+			enableDeactivateButton();
+
+			if ( _parent.hasClass( 'has-internal-message' ) ) {
+				_parent.find( '.internal-message' ).show();
+			}
+
+			if (_parent.hasClass('has-input')) {
+				var inputType = _parent.data('input-type'),
+				    inputPlaceholder = _parent.data('input-placeholder'),
+				    reasonInputHtml = '<div class="reason-input"><span class="message"></span>' + ( ( 'textfield' === inputType ) ? '<input type="text" />' : '<textarea rows="5"></textarea>' ) + '</div>';
+
+				_parent.append($(reasonInputHtml));
+				_parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
+
+				if (isOtherReasonSelected()) {
+					showMessage('<?php printf( __fs(  'ask-for-reason-message' , $slug ) ); ?>');
+					disableDeactivateButton();
+				}
+			}
+		});
+
+		// If the user has clicked outside the window, cancel it.
+		$modal.on('click', function (evt) {
+			var $target = $(evt.target);
+
+			// If the user has clicked anywhere in the modal dialog, just return.
+			if ($target.hasClass('fs-modal-body') || $target.hasClass('fs-modal-footer')) {
+				return;
+			}
+
+			// If the user has not clicked the close button and the clicked element is inside the modal dialog, just return.
+			if (!$target.hasClass('button-close') && ( $target.parents('.fs-modal-body').length > 0 || $target.parents('.fs-modal-footer').length > 0 )) {
+				return;
+			}
+
+			closeModal();
+			return false;
+		});
+	}
+
+	function isAnonymousFeedback() {
+		if ( ! isAnonymous ) {
+			return false;
+		}
+
+		return ( isReasonSelected( dontShareDataReasonID ) || $anonymousFeedback.find( 'input' ).prop( 'checked' ) );
+	}
+
+	function isReasonSelected( reasonID ) {
+		// Get the selected radio input element.
+		var $selectedReasonOption = $modal.find('input[type="radio"]:checked');
+
+		return ( reasonID == $selectedReasonOption.val() );
+	}
+
+	function isOtherReasonSelected() {
+		return isReasonSelected( otherReasonID );
+	}
+
+	function showModal() {
+		resetModal();
+
+		// Display the dialog box.
+		$modal.addClass('active');
+
+		$('body').addClass('has-fs-modal');
+	}
+
+	function closeModal() {
+		$modal.removeClass('active');
+
+		$('body').removeClass('has-fs-modal');
+	}
+
+	function resetModal() {
+		selectedReasonID = false;
+
+		enableDeactivateButton();
+
+		// Uncheck all radio buttons.
+		$modal.find('input[type="radio"]').prop('checked', false);
+
+		// Remove all input fields ( textfield, textarea ).
+		$modal.find('.reason-input').remove();
+
+		$modal.find('.message').hide();
+
+		if ( isAnonymous ) {
+			$anonymousFeedback.find( 'input' ).prop( 'checked', false );
+
+			// Hide, since by default there is no selected reason.
+			$anonymousFeedback.hide();
+		}
+
+		var $deactivateButton = $modal.find('.button-deactivate');
+
+		/*
+		 * If the modal dialog has no confirmation message, that is, it has only one panel, then ensure
+		 * that clicking the deactivate button will actually deactivate the plugin.
+		 */
+		if ($modal.hasClass('no-confirmation-message')) {
+			$deactivateButton.addClass('allow-deactivate');
+
+			showPanel('reasons');
+		} else {
+			$deactivateButton.removeClass('allow-deactivate');
+
+			showPanel('confirm');
+		}
+	}
+
+	function showMessage(message) {
+		$modal.find('.message').text(message).show();
+	}
+
+	function enableDeactivateButton() {
+		$modal.find('.button-deactivate').removeClass('disabled');
+	}
+
+	function disableDeactivateButton() {
+		$modal.find('.button-deactivate').addClass('disabled');
+	}
+
+	function showPanel(panelType) {
+		$modal.find('.fs-modal-panel').removeClass('active ');
+		$modal.find('[data-panel-id="' + panelType + '"]').addClass('active');
+
+		updateButtonLabels();
+	}
+
+	function updateButtonLabels() {
+		var $deactivateButton = $modal.find('.button-deactivate');
+
+		// Reset the deactivate button's text.
+		if ('confirm' === getCurrentPanel()) {
+			$deactivateButton.text('<?php printf( __fs( 'deactivation-modal-button-confirm' , $slug ) ); ?>');
+		} else {
+			$deactivateButton.text('<?php printf( __fs( 'skip-deactivate' , $slug ) ); ?>');
+		}
+	}
+
+	function getCurrentPanel() {
+		return $modal.find('.fs-modal-panel.active').attr('data-panel-id');
+	}
+})(jQuery);
+</script>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/retry-skip.php b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/retry-skip.php
new file mode 100644
index 0000000000000000000000000000000000000000..07583a16155d67507126a3837dab3973f4294495
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/deactivation/retry-skip.php
@@ -0,0 +1,24 @@
+<?php
+    /**
+     * @package     Freemius
+     * @copyright   Copyright (c) 2015, Freemius, Inc.
+     * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+     * @since       1.2.0
+     */
+
+    if ( ! defined( 'ABSPATH' ) ) {
+        exit;
+    }
+
+	/**
+	 * @var array $VARS
+	 */
+    $slug = $VARS['slug'];
+    $fs   = freemius( $slug );
+
+    $skip_url  = wp_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $slug . '_skip_activation' ) ), $slug . '_skip_activation' );
+    $skip_text = strtolower( __fs( 'skip', $slug ) );
+    $use_plugin_anonymously_text = __fs( 'click-here-to-use-plugin-anonymously', $slug );
+
+    echo sprintf( __fs( 'dont-have-to-share-any-data', $slug ), "<a href='{$skip_url}'>{$skip_text}</a>" )
+            . " <a href='{$skip_url}' class='button button-small button-secondary'>{$use_plugin_anonymously_text}</a>";
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/forms/license-activation.php b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/license-activation.php
new file mode 100644
index 0000000000000000000000000000000000000000..efd1fde167ed6cc889068be9af048d3b41c6fcb4
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/license-activation.php
@@ -0,0 +1,228 @@
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.9
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	$fs   = freemius( $slug );
+
+	if ($fs->is_registered()) {
+		// The URL to redirect to after successfully activating the license from the "Plugins" page.
+		if ( $fs->is_addon() ) {
+			$sync_license_url = $fs->get_parent_instance()->_get_sync_license_url( $fs->get_id(), true );
+		} else {
+			$sync_license_url = $fs->_get_sync_license_url( $fs->get_id(), true );
+		}
+
+		/**
+		 * Trigger license sync after valid license activation.
+		 */
+		$after_license_activation_url = $sync_license_url;
+	}
+	else
+	{
+		/**
+		 * If user not yet registered, the license activation triggers
+		 * an opt-in, which automatically sync the license.
+		 */
+		$after_license_activation_url = $fs->get_account_url();
+	}
+
+	$cant_find_license_key_text = __fs( 'cant-find-license-key', $slug );
+	$message_above_input_field  = __fs( 'activate-license-message', $slug );
+	$message_below_input_field  = '';
+
+	$header_title = __fs( $fs->is_free_plan() ? 'activate-license' : 'update-license', $slug );
+
+	if ( $fs->is_registered() ) {
+		$activate_button_text = $header_title;
+	} else {
+		$freemius_site_url = $fs->has_paid_plan() ?
+			'https://freemius.com/wordpress/' :
+			// Insights platform information.
+			'https://freemius.com/wordpress/usage-tracking/';
+
+		$freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" tabindex="0">freemius.com</a>';
+
+		$message_below_input_field = sprintf( __fs( 'license-sync-disclaimer', $slug ), $freemius_link );
+
+		$activate_button_text = __fs( 'agree-activate-license', $slug );
+	}
+
+	$license_key_text = __fs(  'license-key' , $slug );
+
+	$modal_content_html = <<< HTML
+	<div class="notice notice-error inline license-activation-message"><p></p></div>
+	<p>{$message_above_input_field}</p>
+	<input class="license_key" type="text" placeholder="{$license_key_text}" tabindex="1" />
+	<a class="show-license-resend-modal show-license-resend-modal-{$slug}" href="!#" tabindex="2">{$cant_find_license_key_text}</a>
+	<p>{$message_below_input_field}</p>
+HTML;
+
+	fs_enqueue_local_style( 'dialog-boxes', '/admin/dialog-boxes.css' );
+?>
+<script type="text/javascript">
+(function( $ ) {
+	$( document ).ready(function() {
+		var modalContentHtml = <?php echo json_encode($modal_content_html); ?>,
+			modalHtml =
+				'<div class="fs-modal fs-modal-license-activation">'
+				+ '	<div class="fs-modal-dialog">'
+				+ '		<div class="fs-modal-header">'
+				+ '		    <h4><?php echo $header_title ?></h4>'
+				+ '         <a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="<?php _efs( 'dismiss' ) ?>"></i></a>'
+				+ '		</div>'
+				+ '		<div class="fs-modal-body">'
+				+ '			<div class="fs-modal-panel active">' + modalContentHtml + '</div>'
+				+ '		</div>'
+				+ '		<div class="fs-modal-footer">'
+				+ '			<button class="button button-secondary button-close" tabindex="4"><?php _efs('deactivation-modal-button-cancel', $slug); ?></button>'
+				+ '			<button class="button button-primary button-activate-license"  tabindex="3"><?php echo $activate_button_text; ?></button>'
+				+ '		</div>'
+				+ '	</div>'
+				+ '</div>',
+			$modal = $(modalHtml),
+			$activateLicenseLink      = $('span.activate-license.<?php echo $VARS['slug'] ?> a, .activate-license-trigger.<?php echo $VARS['slug'] ?>'),
+			$activateLicenseButton    = $modal.find('.button-activate-license'),
+			$licenseKeyInput          = $modal.find('input.license_key'),
+			$licenseActivationMessage = $modal.find( '.license-activation-message' ),
+			pluginSlug                = '<?php echo $slug ?>',
+			afterActivationUrl        = '<?php echo $after_license_activation_url ?>';
+
+		$modal.appendTo($('body'));
+
+		function registerEventHandlers() {
+			$activateLicenseLink.click(function (evt) {
+				evt.preventDefault();
+
+				showModal();
+			});
+
+			$modal.on('input propertychange', 'input.license_key', function () {
+
+				var licenseKey = $(this).val().trim();
+
+				/**
+				 * If license key is not empty, enable the license activation button.
+				 */
+				if (licenseKey.length > 0) {
+					enableActivateLicenseButton();
+				}
+			});
+
+			$modal.on('blur', 'input.license_key', function () {
+				var licenseKey = $(this).val().trim();
+
+				/**
+				 * If license key is empty, disable the license activation button.
+				 */
+				if (0 === licenseKey.length) {
+					disableActivateLicenseButton();
+				}
+			});
+
+			$modal.on('click', '.button-activate-license', function (evt) {
+				evt.preventDefault();
+
+				if ($(this).hasClass('disabled')) {
+					return;
+				}
+
+				var licenseKey = $licenseKeyInput.val().trim();
+
+				disableActivateLicenseButton();
+
+				if (0 === licenseKey.length) {
+					return;
+				}
+
+				$.ajax({
+					url: ajaxurl,
+					method: 'POST',
+					data: {
+						action     : 'fs_activate_license_' + pluginSlug,
+						slug       : pluginSlug,
+						license_key: licenseKey
+					},
+					beforeSend: function () {
+						$activateLicenseButton.text( '<?php _efs( 'activating-license', $slug ); ?>' );
+					},
+					success: function( result ) {
+						var resultObj = $.parseJSON( result );
+						if ( resultObj.success ) {
+							closeModal();
+
+							// Redirect to the "Account" page and sync the license.
+							window.location.href = afterActivationUrl;
+						} else {
+							showError( resultObj.error );
+							resetActivateLicenseButton();
+						}
+					}
+				});
+			});
+
+			// If the user has clicked outside the window, close the modal.
+			$modal.on('click', '.fs-close, .button-secondary', function () {
+				closeModal();
+				return false;
+			});
+		}
+
+		registerEventHandlers();
+
+		function showModal() {
+			resetModal();
+
+			// Display the dialog box.
+			$modal.addClass('active');
+			$('body').addClass('has-fs-modal');
+
+			$licenseKeyInput.focus();
+		}
+
+		function closeModal() {
+			$modal.removeClass('active');
+			$('body').removeClass('has-fs-modal');
+		}
+
+		function resetActivateLicenseButton() {
+			enableActivateLicenseButton();
+			$activateLicenseButton.text( '<?php echo $activate_button_text; ?>' );
+		}
+
+		function resetModal() {
+			hideError();
+			resetActivateLicenseButton();
+			$licenseKeyInput.val( '' );
+		}
+
+		function enableActivateLicenseButton() {
+			$activateLicenseButton.removeClass( 'disabled' );
+		}
+
+		function disableActivateLicenseButton() {
+			$activateLicenseButton.addClass( 'disabled' );
+		}
+
+		function hideError() {
+			$licenseActivationMessage.hide();
+		}
+
+		function showError( msg ) {
+			$licenseActivationMessage.find( ' > p' ).html( msg );
+			$licenseActivationMessage.show();
+		}
+	});
+})( jQuery );
+</script>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/forms/resend-key.php b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/resend-key.php
new file mode 100644
index 0000000000000000000000000000000000000000..ade082a38de1684d9ea85ef4b2813bacabfbc4c2
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/forms/resend-key.php
@@ -0,0 +1,197 @@
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.2.0
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	$fs   = freemius( $slug );
+
+	$message_above_input_field = __fs( 'ask-for-upgrade-email-address', $slug );
+	$send_button_text          = __fs( 'send-license-key', $slug );
+	$cancel_button_text        = __fs( 'deactivation-modal-button-cancel', $slug );
+	$email_address_placeholder = __fs( 'email-address', $slug );
+
+	$modal_content_html = <<< HTML
+	<div class="notice notice-error inline license-resend-message"><p></p></div>
+	<p>{$message_above_input_field}</p>
+	<div class="input-container">
+		<div class="button-container">
+			<a href="#" class="button button-primary button-send-license-key disabled" tabindex="2">{$send_button_text}</a>
+		</div>
+	    <div class="email-address-container">
+	        <input class="email-address" type="text" placeholder="{$email_address_placeholder}" tabindex="1">
+	    </div>
+    </div>
+HTML;
+
+	fs_enqueue_local_style( 'dialog-boxes', '/admin/dialog-boxes.css' );
+?>
+<script type="text/javascript">
+	(function ($) {
+		$(document).ready(function () {
+			var modalContentHtml = <?php echo json_encode( $modal_content_html ); ?>,
+			    modalHtml =
+				    '<div class="fs-modal fs-modal-license-key-resend">'
+				    + '	<div class="fs-modal-dialog">'
+				    + '		<div class="fs-modal-header">'
+				    + '		    <h4><?php echo $send_button_text ?></h4>'
+				    + '         <a href="#!" class="fs-close" tabindex="3" title="Close"><i class="dashicons dashicons-no" title="<?php _efs( 'dismiss' ) ?>"></i></a>'
+				    + '		</div>'
+				    + '		<div class="fs-modal-body">'
+				    + '			<div class="fs-modal-panel active">' + modalContentHtml + '</div>'
+				    + '		</div>'
+				    + '	</div>'
+				    + '</div>',
+			    $modal = $(modalHtml),
+			    $sendLicenseKeyButton = $modal.find('.button-send-license-key'),
+			    $emailAddressInput = $modal.find('input.email-address'),
+			    $licenseResendMessage = $modal.find('.license-resend-message'),
+			    moduleSlug = '<?php echo $slug; ?>',
+			    isChild = false;
+
+			$modal.appendTo($('body'));
+
+			registerEventHandlers();
+
+			function registerEventHandlers() {
+				$('a.show-license-resend-modal-' + moduleSlug).click(function (evt) {
+					evt.preventDefault();
+
+					showModal();
+				});
+
+				$modal.on('input propertychange', 'input.email-address', function () {
+
+					var emailAddress = $(this).val().trim();
+
+					/**
+					 * If email address is not empty, enable the send license key button.
+					 */
+					if (emailAddress.length > 0) {
+						enableSendLicenseKeyButton();
+					}
+				});
+
+				$modal.on('blur', 'input.email-address', function () {
+					var emailAddress = $(this).val().trim();
+
+					/**
+					 * If email address is empty, disable the send license key button.
+					 */
+					if (0 === emailAddress.length) {
+						disableSendLicenseKeyButton();
+					}
+				});
+
+				$modal.on('click', '.fs-close', function (){
+					closeModal();
+					return false;
+				});
+
+				$modal.on('click', '.button', function (evt) {
+					evt.preventDefault();
+
+					if ($(this).hasClass('disabled')) {
+						return;
+					}
+
+					var emailAddress = $emailAddressInput.val().trim();
+
+					disableSendLicenseKeyButton();
+
+					if (0 === emailAddress.length) {
+						return;
+					}
+
+					$.ajax({
+						url       : ajaxurl,
+						method    : 'POST',
+						data      : {
+							action: '<?php echo $fs->get_action_tag( 'resend_license_key' ) ?>',
+							slug  : moduleSlug,
+							email : emailAddress
+						},
+						beforeSend: function () {
+							$sendLicenseKeyButton.text('<?php _efs( 'sending-license-key', $slug ) ?>...');
+						},
+						success   : function (result) {
+							var resultObj = $.parseJSON(result);
+							if (resultObj.success) {
+								closeModal();
+							} else {
+								showError(resultObj.error);
+								resetSendLicenseKeyButton();
+							}
+						}
+					});
+				});
+			}
+
+			function showModal() {
+				resetModal();
+
+				// Display the dialog box.
+				$modal.addClass('active');
+				$emailAddressInput.focus();
+
+				var $body = $('body');
+
+				isChild = $body.hasClass('has-fs-modal');
+				if (isChild) {
+					return;
+				}
+
+				$body.addClass('has-fs-modal');
+			}
+
+			function closeModal() {
+				$modal.removeClass('active');
+
+				// If child modal, do not remove the "has-fs-modal" class of the <body> element to keep its scrollbars hidden.
+				if (isChild) {
+					return;
+				}
+
+				$('body').removeClass('has-fs-modal');
+			}
+
+			function resetSendLicenseKeyButton() {
+				enableSendLicenseKeyButton();
+				$sendLicenseKeyButton.text('<?php echo $send_button_text; ?>');
+			}
+
+			function resetModal() {
+				hideError();
+				resetSendLicenseKeyButton();
+				$emailAddressInput.val('');
+			}
+
+			function enableSendLicenseKeyButton() {
+				$sendLicenseKeyButton.removeClass('disabled');
+			}
+
+			function disableSendLicenseKeyButton() {
+				$sendLicenseKeyButton.addClass('disabled');
+			}
+
+			function hideError() {
+				$licenseResendMessage.hide();
+			}
+
+			function showError(msg) {
+				$licenseResendMessage.find(' > p').html(msg);
+				$licenseResendMessage.show();
+			}
+		});
+	})(jQuery);
+</script>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-icon.php b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-icon.php
index bdbd3f58e2c8deb000c22544a2b1630d4e998f38..9bc70cfd35a66d9b016924a31e11f508447444e5 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-icon.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-icon.php
@@ -1,93 +1,96 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.1.4
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	$slug = $VARS['slug'];
-	$fs   = freemius( $slug );
-
-	/**
-	 * @since 1.1.7.5
-	 */
-	$local_path = $fs->apply_filters( 'plugin_icon', false );
-
-	if ( is_string( $local_path ) ) {
-		$icons = array( $local_path );
-	} else {
-		global $fs_active_plugins;
-
-		$img_dir = WP_FS__DIR_IMG;
-
-		if ( 1 < count( $fs_active_plugins->plugins ) ) {
-			foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
-				if ( $data->plugin_path == $fs->get_plugin_basename() ) {
-					$img_dir = WP_PLUGIN_DIR . '/' . $sdk_path . '/assets/img';
-					break;
-				}
-			}
-		}
-
-		$icons = glob( fs_normalize_path( $img_dir . '/' . $slug . '.*' ) );
-		if ( ! is_array( $icons ) || 0 === count( $icons ) ) {
-			$icon_found             = false;
-			$local_path             = fs_normalize_path( $img_dir . '/' . $slug . '.png' );
-			$have_write_permissions = is_writable( fs_normalize_path( $img_dir ) );
-
-			if ( WP_FS__IS_LOCALHOST && $fs->is_org_repo_compliant() && $have_write_permissions ) {
-				/**
-				 * IMPORTANT: THIS CODE WILL NEVER RUN AFTER THE PLUGIN IS IN THE REPO.
-				 *
-				 * This code will only be executed once during the testing
-				 * of the plugin in a local environment. The plugin icon file WILL
-				 * already exist in the assets folder when the plugin is deployed to
-				 * the repository.
-				 */
-				$suffixes = array(
-					'-128x128.png',
-					'-128x128.jpg',
-					'-256x256.png',
-					'-256x256.jpg',
-					'.svg',
-				);
-
-				$base_url = 'https://plugins.svn.wordpress.org/' . $slug . '/assets/icon';
-
-				foreach ( $suffixes as $s ) {
-					$headers = get_headers( $base_url . $s );
-					if ( strpos( $headers[0], '200' ) ) {
-						$local_path = fs_normalize_path( $img_dir . '/' . $slug . '.' . substr( $s, strpos( $s, '.' ) + 1 ) );
-						fs_download_image( $base_url . $s, $local_path );
-						$icon_found = true;
-						break;
-					}
-				}
-			}
-
-			if ( ! $icon_found ) {
-				// No icons found, fallback to default icon.
-				if ( $have_write_permissions ) {
-					// If have write permissions, copy default icon.
-					copy( fs_normalize_path( $img_dir . '/plugin-icon.png' ), $local_path );
-				} else {
-					// If doesn't have write permissions, use default icon path.
-					$local_path = fs_normalize_path( $img_dir . '/plugin-icon.png' );
-				}
-			}
-
-			$icons = array( $local_path );
-		}
-	}
-
-	$icon_dir     = dirname( $icons[0] );
-	$relative_url = fs_img_url( substr( $icons[0], strlen( $icon_dir ) ), $icon_dir );
-?>
-<div class="fs-plugin-icon">
-	<img src="<?php echo $relative_url ?>"/>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.1.4
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug = $VARS['slug'];
+	$fs   = freemius( $slug );
+
+	/**
+	 * @since 1.1.7.5
+	 */
+	$local_path = $fs->apply_filters( 'plugin_icon', false );
+
+	if ( is_string( $local_path ) ) {
+		$icons = array( $local_path );
+	} else {
+		global $fs_active_plugins;
+
+		$img_dir = WP_FS__DIR_IMG;
+
+		if ( 1 < count( $fs_active_plugins->plugins ) ) {
+			foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
+				if ( $data->plugin_path == $fs->get_plugin_basename() ) {
+					$img_dir = WP_PLUGIN_DIR . '/' . $sdk_path . '/assets/img';
+					break;
+				}
+			}
+		}
+
+		$icons = glob( fs_normalize_path( $img_dir . '/' . $slug . '.*' ) );
+		if ( ! is_array( $icons ) || 0 === count( $icons ) ) {
+			$icon_found             = false;
+			$local_path             = fs_normalize_path( $img_dir . '/' . $slug . '.png' );
+			$have_write_permissions = is_writable( fs_normalize_path( $img_dir ) );
+
+			if ( WP_FS__IS_LOCALHOST && $fs->is_org_repo_compliant() && $have_write_permissions ) {
+				/**
+				 * IMPORTANT: THIS CODE WILL NEVER RUN AFTER THE PLUGIN IS IN THE REPO.
+				 *
+				 * This code will only be executed once during the testing
+				 * of the plugin in a local environment. The plugin icon file WILL
+				 * already exist in the assets folder when the plugin is deployed to
+				 * the repository.
+				 */
+				$suffixes = array(
+					'-128x128.png',
+					'-128x128.jpg',
+					'-256x256.png',
+					'-256x256.jpg',
+					'.svg',
+				);
+
+				$base_url = 'https://plugins.svn.wordpress.org/' . $slug . '/assets/icon';
+
+				foreach ( $suffixes as $s ) {
+					$headers = get_headers( $base_url . $s );
+					if ( strpos( $headers[0], '200' ) ) {
+						$local_path = fs_normalize_path( $img_dir . '/' . $slug . '.' . substr( $s, strpos( $s, '.' ) + 1 ) );
+						fs_download_image( $base_url . $s, $local_path );
+						$icon_found = true;
+						break;
+					}
+				}
+			}
+
+			if ( ! $icon_found ) {
+				// No icons found, fallback to default icon.
+				if ( $have_write_permissions ) {
+					// If have write permissions, copy default icon.
+					copy( fs_normalize_path( $img_dir . '/plugin-icon.png' ), $local_path );
+				} else {
+					// If doesn't have write permissions, use default icon path.
+					$local_path = fs_normalize_path( $img_dir . '/plugin-icon.png' );
+				}
+			}
+
+			$icons = array( $local_path );
+		}
+	}
+
+	$icon_dir     = dirname( $icons[0] );
+	$relative_url = fs_img_url( substr( $icons[0], strlen( $icon_dir ) ), $icon_dir );
+?>
+<div class="fs-plugin-icon">
+	<img src="<?php echo $relative_url ?>" width="80" height="80" />
 </div>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/description.php b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/description.php
index bdcebbbf766b835ea309cfe301f6efefd1e760ee..b3d92c8220dc63bf41d0d10e545ccb7241c9cf70 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/description.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/description.php
@@ -1,75 +1,77 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.6
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * @var FS_Plugin $plugin
-	 */
-	$plugin = $VARS['plugin'];
-
-	if ( ! empty( $plugin->info->selling_point_0 ) ||
-	     ! empty( $plugin->info->selling_point_1 ) ||
-	     ! empty( $plugin->info->selling_point_2 )
-	) : ?>
-		<div class="fs-selling-points">
-			<ul>
-				<?php for ( $i = 0; $i < 3; $i ++ ) : ?>
-					<?php if ( ! empty( $plugin->info->{'selling_point_' . $i} ) ) : ?>
-						<li><i class="dashicons dashicons-yes"></i>
-
-							<h3><?php echo $plugin->info->{'selling_point_' . $i} ?></h3></li>
-					<?php endif ?>
-				<?php endfor ?>
-			</ul>
-		</div>
-	<?php endif ?>
-	<div>
-		<?php
-			echo wp_kses( $plugin->info->description, array(
-				'a'          => array( 'href' => array(), 'title' => array(), 'target' => array() ),
-				'b'          => array(),
-				'i'          => array(),
-				'p'          => array(),
-				'blockquote' => array(),
-				'h2'         => array(),
-				'h3'         => array(),
-				'ul'         => array(),
-				'ol'         => array(),
-				'li'         => array()
-			) );
-		?>
-	</div>
-<?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
-	<?php $screenshots = $plugin->info->screenshots ?>
-	<div class="fs-screenshots clearfix">
-		<h2><?php _efs( 'screenshots', $plugin->slug ) ?></h2>
-		<ul>
-			<?php $i = 0;
-				foreach ( $screenshots as $s => $url ) : ?>
-					<?php
-					// Relative URLs are replaced with WordPress.org base URL
-					// therefore we need to set absolute URLs.
-					$url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
-					<li class="<?php echo ( 0 === $i % 2 ) ? 'odd' : 'even' ?>">
-						<style>
-							#section-description .fs-screenshots <?php echo ".fs-screenshot-{$i}" ?>
-							{
-								background-image: url('<?php echo $url ?>');
-							}
-						</style>
-						<a href="<?php echo $url ?>"
-						   title="<?php printf( __fs( 'view-full-size-x', $plugin->slug ), $i ) ?>"
-						   class="fs-screenshot-<?php echo $i ?>"></a>
-					</li>
-					<?php $i ++; endforeach ?>
-		</ul>
-	</div>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.6
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 *
+	 * @var FS_Plugin $plugin
+	 */
+	$plugin = $VARS['plugin'];
+
+	if ( ! empty( $plugin->info->selling_point_0 ) ||
+	     ! empty( $plugin->info->selling_point_1 ) ||
+	     ! empty( $plugin->info->selling_point_2 )
+	) : ?>
+		<div class="fs-selling-points">
+			<ul>
+				<?php for ( $i = 0; $i < 3; $i ++ ) : ?>
+					<?php if ( ! empty( $plugin->info->{'selling_point_' . $i} ) ) : ?>
+						<li><i class="dashicons dashicons-yes"></i>
+
+							<h3><?php echo $plugin->info->{'selling_point_' . $i} ?></h3></li>
+					<?php endif ?>
+				<?php endfor ?>
+			</ul>
+		</div>
+	<?php endif ?>
+	<div>
+		<?php
+			echo wp_kses( $plugin->info->description, array(
+				'a'          => array( 'href' => array(), 'title' => array(), 'target' => array() ),
+				'b'          => array(),
+				'i'          => array(),
+				'p'          => array(),
+				'blockquote' => array(),
+				'h2'         => array(),
+				'h3'         => array(),
+				'ul'         => array(),
+				'ol'         => array(),
+				'li'         => array()
+			) );
+		?>
+	</div>
+<?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
+	<?php $screenshots = $plugin->info->screenshots ?>
+	<div class="fs-screenshots clearfix">
+		<h2><?php _efs( 'screenshots', $plugin->slug ) ?></h2>
+		<ul>
+			<?php $i = 0;
+				foreach ( $screenshots as $s => $url ) : ?>
+					<?php
+					// Relative URLs are replaced with WordPress.org base URL
+					// therefore we need to set absolute URLs.
+					$url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
+					<li class="<?php echo ( 0 === $i % 2 ) ? 'odd' : 'even' ?>">
+						<style>
+							#section-description .fs-screenshots <?php echo ".fs-screenshot-{$i}" ?>
+							{
+								background-image: url('<?php echo $url ?>');
+							}
+						</style>
+						<a href="<?php echo $url ?>"
+						   title="<?php printf( __fs( 'view-full-size-x', $plugin->slug ), $i ) ?>"
+						   class="fs-screenshot-<?php echo $i ?>"></a>
+					</li>
+					<?php $i ++; endforeach ?>
+		</ul>
+	</div>
 <?php endif ?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/features.php b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/features.php
index daa5b2f0cd7d235bffbe2ef7a6f3a6edac604919..c73dcd88642a4a7f540f7a5522c310040189a702 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/features.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/features.php
@@ -1,97 +1,99 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.6
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * @var FS_Plugin $plugin
-	 */
-	$plugin = $VARS['plugin'];
-
-	$plans = $VARS['plans'];
-
-	$features_plan_map = array();
-	foreach ( $plans as $plan ) {
-		foreach ( $plan->features as $feature ) {
-			if ( ! isset( $features_plan_map[ $feature->id ] ) ) {
-				$features_plan_map[ $feature->id ] = array( 'feature' => $feature, 'plans' => array() );
-			}
-
-			$features_plan_map[ $feature->id ]['plans'][ $plan->id ] = $feature;
-		}
-
-		// Add support as a feature.
-		if ( ! empty( $plan->support_email ) ||
-		     ! empty( $plan->support_skype ) ||
-		     ! empty( $plan->support_phone ) ||
-		     true === $plan->is_success_manager
-		) {
-			if ( ! isset( $features_plan_map['support'] ) ) {
-				$support_feature        = new stdClass();
-				$support_feature->id    = 'support';
-				$support_feature->title = __fs( 'Support', $plugin->slug );
-				$features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
-			} else {
-				$support_feature = $features_plan_map['support'];
-			}
-
-			$features_plan_map[ $support_feature->id ]['plans'][ $plan->id ] = $support_feature;
-		}
-	}
-
-	// Add updates as a feature for all plans.
-	$updates_feature        = new stdClass();
-	$updates_feature->id    = 'updates';
-	$updates_feature->title = __fs( 'unlimited-updates', $plugin->slug );
-	$features_plan_map[ $updates_feature->id ] = array( 'feature' => $updates_feature, 'plans' => array() );
-	foreach ( $plans as $plan ) {
-		$features_plan_map[ $updates_feature->id ]['plans'][ $plan->id ] = $updates_feature;
-	}
-?>
-<div class="fs-features">
-	<table>
-		<thead>
-		<tr>
-			<th></th>
-			<?php foreach ( $plans as $plan ) : ?>
-				<th>
-					<?php echo $plan->title ?>
-					<span class="fs-price">
-						<?php foreach ( $plan->pricing as $pricing ) : ?>
-							<?php if ( 1 == $pricing->licenses ) : ?>
-								$<?php echo $pricing->annual_price ?> / year
-							<?php endif ?>
-						<?php endforeach ?>
-						</span>
-				</th>
-			<?php endforeach ?>
-		</tr>
-		</thead>
-		<tbody>
-		<?php $odd = true;
-			foreach ( $features_plan_map as $feature_id => $data ) : ?>
-				<tr class="fs-<?php echo $odd ? 'odd' : 'even' ?>">
-					<td><?php echo ucfirst( $data['feature']->title ) ?></td>
-					<?php foreach ( $plans as $plan ) : ?>
-						<td>
-							<?php if ( isset( $data['plans'][ $plan->id ] ) ) : ?>
-								<?php if ( ! empty( $data['plans'][ $plan->id ]->value ) ) : ?>
-									<b><?php echo $data['plans'][ $plan->id ]->value ?></b>
-								<?php else : ?>
-									<i class="dashicons dashicons-yes"></i>
-								<?php endif ?>
-							<?php endif ?>
-						</td>
-					<?php endforeach ?>
-				</tr>
-				<?php $odd = ! $odd; endforeach ?>
-		</tbody>
-	</table>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.6
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 *
+	 * @var FS_Plugin $plugin
+	 */
+	$plugin = $VARS['plugin'];
+
+	$plans = $VARS['plans'];
+
+	$features_plan_map = array();
+	foreach ( $plans as $plan ) {
+		foreach ( $plan->features as $feature ) {
+			if ( ! isset( $features_plan_map[ $feature->id ] ) ) {
+				$features_plan_map[ $feature->id ] = array( 'feature' => $feature, 'plans' => array() );
+			}
+
+			$features_plan_map[ $feature->id ]['plans'][ $plan->id ] = $feature;
+		}
+
+		// Add support as a feature.
+		if ( ! empty( $plan->support_email ) ||
+		     ! empty( $plan->support_skype ) ||
+		     ! empty( $plan->support_phone ) ||
+		     true === $plan->is_success_manager
+		) {
+			if ( ! isset( $features_plan_map['support'] ) ) {
+				$support_feature        = new stdClass();
+				$support_feature->id    = 'support';
+				$support_feature->title = __fs( 'Support', $plugin->slug );
+				$features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
+			} else {
+				$support_feature = $features_plan_map['support'];
+			}
+
+			$features_plan_map[ $support_feature->id ]['plans'][ $plan->id ] = $support_feature;
+		}
+	}
+
+	// Add updates as a feature for all plans.
+	$updates_feature        = new stdClass();
+	$updates_feature->id    = 'updates';
+	$updates_feature->title = __fs( 'unlimited-updates', $plugin->slug );
+	$features_plan_map[ $updates_feature->id ] = array( 'feature' => $updates_feature, 'plans' => array() );
+	foreach ( $plans as $plan ) {
+		$features_plan_map[ $updates_feature->id ]['plans'][ $plan->id ] = $updates_feature;
+	}
+?>
+<div class="fs-features">
+	<table>
+		<thead>
+		<tr>
+			<th></th>
+			<?php foreach ( $plans as $plan ) : ?>
+				<th>
+					<?php echo $plan->title ?>
+					<span class="fs-price">
+						<?php foreach ( $plan->pricing as $pricing ) : ?>
+							<?php if ( 1 == $pricing->licenses ) : ?>
+								$<?php echo $pricing->annual_price ?> / year
+							<?php endif ?>
+						<?php endforeach ?>
+						</span>
+				</th>
+			<?php endforeach ?>
+		</tr>
+		</thead>
+		<tbody>
+		<?php $odd = true;
+			foreach ( $features_plan_map as $feature_id => $data ) : ?>
+				<tr class="fs-<?php echo $odd ? 'odd' : 'even' ?>">
+					<td><?php echo ucfirst( $data['feature']->title ) ?></td>
+					<?php foreach ( $plans as $plan ) : ?>
+						<td>
+							<?php if ( isset( $data['plans'][ $plan->id ] ) ) : ?>
+								<?php if ( ! empty( $data['plans'][ $plan->id ]->value ) ) : ?>
+									<b><?php echo $data['plans'][ $plan->id ]->value ?></b>
+								<?php else : ?>
+									<i class="dashicons dashicons-yes"></i>
+								<?php endif ?>
+							<?php endif ?>
+						</td>
+					<?php endforeach ?>
+				</tr>
+				<?php $odd = ! $odd; endforeach ?>
+		</tbody>
+	</table>
 </div>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/screenshots.php b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/screenshots.php
index ef025c188c9b91546ab4b83798649c72a284cb35..f47e94f0b6ee5f6c567820cd080c43b9caa565a1 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/screenshots.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/plugin-info/screenshots.php
@@ -1,33 +1,35 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.6
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * @var FS_Plugin $plugin
-	 */
-	$plugin = $VARS['plugin'];
-
-	$screenshots = $VARS['screenshots'];
-?>
-<ol>
-	<?php $i = 0;
-		foreach ( $screenshots as $s => $url ) : ?>
-			<?php
-			// Relative URLs are replaced with WordPress.org base URL
-			// therefore we need to set absolute URLs.
-			$url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
-			<li>
-				<a href="<?php echo $url ?>"
-				   title="<?php printf( __fs( 'view-full-size-x', $plugin->slug ), $i ) ?>"><img
-						src="<?php echo $url ?>"></a>
-			</li>
-			<?php $i ++; endforeach ?>
-</ol>
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.6
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	/**
+	 * @var array $VARS
+	 *
+	 * @var FS_Plugin $plugin
+	 */
+	$plugin = $VARS['plugin'];
+
+	$screenshots = $VARS['screenshots'];
+?>
+<ol>
+	<?php $i = 0;
+		foreach ( $screenshots as $s => $url ) : ?>
+			<?php
+			// Relative URLs are replaced with WordPress.org base URL
+			// therefore we need to set absolute URLs.
+			$url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
+			<li>
+				<a href="<?php echo $url ?>"
+				   title="<?php printf( __fs( 'view-full-size-x', $plugin->slug ), $i ) ?>"><img
+						src="<?php echo $url ?>"></a>
+			</li>
+			<?php $i ++; endforeach ?>
+</ol>
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/powered-by.php b/wp-content/plugins/nextgen-gallery/freemius/templates/powered-by.php
index 701653c8c94dbd2aab7827f86975366b0caa6a0e..b9dcc4cc7d8c38ff4baa11fff404963e129fd8f6 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/powered-by.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/powered-by.php
@@ -1,41 +1,39 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.5
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	/**
-	 * KEEP THE POWERED BY TAB AND GET ADDITIONAL - 1% - OFF THE COMMISSION
-	 */
-
-	wp_enqueue_script( 'jquery' );
-	wp_enqueue_script( 'json2' );
-	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
-	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
-?>
-
-<div id="piframe"></div>
-<script type="text/javascript">
-	(function ($) {
-		$(function () {
-			var
-				base_url = '<?php echo WP_FS__ADDRESS ?>',
-				piframe = $('<iframe id="fs_promo_tab" src="' + base_url + '/promotional-tab/?page=contact#' + encodeURIComponent(document.location.href) + '" height="350" width="60" frameborder="0" style="  background: transparent; position: fixed; top: 20%; right: 0;" scrolling="no"></iframe>')
-					.appendTo('#piframe');
-
-			FS.PostMessage.init(base_url);
-			FS.PostMessage.receive('state', function (state) {
-				if ('closed' === state)
-					$('#fs_promo_tab').css('width', '60px');
-				else
-					$('#fs_promo_tab').css('width', '345px');
-			});
-		});
-	})(jQuery);
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.5
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	$VARS = isset($VARS) ? $VARS : array();
+
+	wp_enqueue_script( 'jquery' );
+	wp_enqueue_script( 'json2' );
+	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
+	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
+?>
+
+<div id="piframe"></div>
+<script type="text/javascript">
+	(function ($) {
+		$(function () {
+			var
+				base_url = '<?php echo WP_FS__ADDRESS ?>',
+				piframe = $('<iframe id="fs_promo_tab" src="' + base_url + '/promotional-tab/?<?php echo http_build_query($VARS) ?>#' + encodeURIComponent(document.location.href) + '" height="350" width="60" frameborder="0" style="  background: transparent; position: fixed; top: 20%; right: 0;" scrolling="no"></iframe>')
+					.appendTo('#piframe');
+
+			FS.PostMessage.init(base_url);
+			FS.PostMessage.receive('state', function (state) {
+				if ('closed' === state)
+					$('#fs_promo_tab').css('width', '60px');
+				else
+					$('#fs_promo_tab').css('width', '345px');
+			});
+		});
+	})(jQuery);
 </script>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/pricing.php b/wp-content/plugins/nextgen-gallery/freemius/templates/pricing.php
index a5191e48b07868988b6eb084d1930588886534cf..0f4fe3c2425fc6a5e8f9fbc3298a0d5f543e7e4d 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/pricing.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/pricing.php
@@ -1,100 +1,111 @@
-<?php
-	/**
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.3
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-
-	wp_enqueue_script( 'jquery' );
-	wp_enqueue_script( 'json2' );
-	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
-	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
-
-	$slug      = $VARS['slug'];
-	$fs        = freemius( $slug );
-	$timestamp = time();
-
-	$context_params = array(
-		'plugin_id'         => $fs->get_id(),
-		'plugin_public_key' => $fs->get_public_key(),
-		'plugin_version'    => $fs->get_plugin_version(),
-	);
-
-	// Get site context secure params.
-	if ( $fs->is_registered() ) {
-		$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
-			$fs->get_site(),
-			$timestamp,
-			'upgrade'
-		) );
-	}
-
-	if ( $fs->is_payments_sandbox() ) // Append plugin secure token for sandbox mode authentication.)
-	{
-		$context_params['sandbox'] = FS_Security::instance()->get_secure_token(
-			$fs->get_plugin(),
-			$timestamp,
-			'checkout'
-		);
-	}
-
-	$query_params = array_merge( $context_params, $_GET, array(
-		'next'           => $fs->_get_admin_page_url( 'account', array( 'fs_action' => $slug . '_sync_license' ) ),
-		'plugin_version' => $fs->get_plugin_version(),
-		// Billing cycle.
-		'billing_cycle'  => fs_request_get( 'billing_cycle', WP_FS__PERIOD_ANNUALLY ),
-	) );
-?>
-
-	<div id="fs_pricing" class="wrap" style="margin: 0 0 -65px -20px;">
-		<div id="iframe"></div>
-		<form action="" method="POST">
-			<input type="hidden" name="user_id"/>
-			<input type="hidden" name="user_email"/>
-			<input type="hidden" name="site_id"/>
-			<input type="hidden" name="public_key"/>
-			<input type="hidden" name="secret_key"/>
-			<input type="hidden" name="action" value="account"/>
-		</form>
-
-		<script type="text/javascript">
-			(function ($, undef) {
-				$(function () {
-					var
-					// Keep track of the iframe height.
-					iframe_height = 800,
-					base_url = '<?php echo WP_FS__ADDRESS ?>',
-					// Pass the parent page URL into the Iframe in a meaningful way (this URL could be
-					// passed via query string or hard coded into the child page, it depends on your needs).
-					src = base_url + '/pricing/?<?php echo http_build_query($query_params) ?>#' + encodeURIComponent(document.location.href),
-
-					// Append the Iframe into the DOM.
-					iframe = $('<iframe " src="' + src + '" width="100%" height="' + iframe_height + 'px" scrolling="no" frameborder="0" style="background: transparent;"><\/iframe>')
-						.appendTo('#iframe');
-
-					FS.PostMessage.init(base_url);
-
-					FS.PostMessage.receive('height', function (data) {
-						var h = data.height;
-						if (!isNaN(h) && h > 0 && h != iframe_height) {
-							iframe_height = h;
-							$("#iframe iframe").height(iframe_height + 'px');
-						}
-					});
-
-					FS.PostMessage.receive('get_dimensions', function (data) {
-						FS.PostMessage.post('dimensions', {
-							height   : $(document.body).height(),
-							scrollTop: $(document).scrollTop()
-						}, iframe[0]);
-					});
-				});
-			})(jQuery);
-		</script>
-	</div>
-<?php fs_require_template( 'powered-by.php' ) ?>
\ No newline at end of file
+<?php
+	/**
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.3
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+
+	wp_enqueue_script( 'jquery' );
+	wp_enqueue_script( 'json2' );
+	fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
+	fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
+
+	/**
+	 * @var array $VARS
+	 */
+	$slug      = $VARS['slug'];
+	$fs        = freemius( $slug );
+	$timestamp = time();
+
+	$context_params = array(
+		'plugin_id'         => $fs->get_id(),
+		'plugin_public_key' => $fs->get_public_key(),
+		'plugin_version'    => $fs->get_plugin_version(),
+	);
+
+	// Get site context secure params.
+	if ( $fs->is_registered() ) {
+		$context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
+			$fs->get_site(),
+			$timestamp,
+			'upgrade'
+		) );
+	}
+
+	if ( $fs->is_payments_sandbox() ) // Append plugin secure token for sandbox mode authentication.)
+	{
+		$context_params['sandbox'] = FS_Security::instance()->get_secure_token(
+			$fs->get_plugin(),
+			$timestamp,
+			'checkout'
+		);
+	}
+
+	$query_params = array_merge( $context_params, $_GET, array(
+		'next'           => $fs->_get_sync_license_url( false, false ),
+		'plugin_version' => $fs->get_plugin_version(),
+		// Billing cycle.
+		'billing_cycle'  => fs_request_get( 'billing_cycle', WP_FS__PERIOD_ANNUALLY ),
+	) );
+?>
+
+	<div id="fs_pricing" class="wrap" style="margin: 0 0 -65px -20px;">
+		<div id="iframe"></div>
+		<form action="" method="POST">
+			<input type="hidden" name="user_id"/>
+			<input type="hidden" name="user_email"/>
+			<input type="hidden" name="site_id"/>
+			<input type="hidden" name="public_key"/>
+			<input type="hidden" name="secret_key"/>
+			<input type="hidden" name="action" value="account"/>
+		</form>
+
+		<script type="text/javascript">
+			(function ($, undef) {
+				$(function () {
+					var
+					// Keep track of the iframe height.
+					iframe_height = 800,
+					base_url = '<?php echo WP_FS__ADDRESS ?>',
+					// Pass the parent page URL into the Iframe in a meaningful way (this URL could be
+					// passed via query string or hard coded into the child page, it depends on your needs).
+					src = base_url + '/pricing/?<?php echo http_build_query($query_params) ?>#' + encodeURIComponent(document.location.href),
+
+					// Append the Iframe into the DOM.
+					iframe = $('<iframe " src="' + src + '" width="100%" height="' + iframe_height + 'px" scrolling="no" frameborder="0" style="background: transparent;"><\/iframe>')
+						.appendTo('#iframe');
+
+					FS.PostMessage.init(base_url);
+
+					FS.PostMessage.receive('height', function (data) {
+						var h = data.height;
+						if (!isNaN(h) && h > 0 && h != iframe_height) {
+							iframe_height = h;
+							$("#iframe iframe").height(iframe_height + 'px');
+						}
+					});
+
+					FS.PostMessage.receive('get_dimensions', function (data) {
+						FS.PostMessage.post('dimensions', {
+							height   : $(document.body).height(),
+							scrollTop: $(document).scrollTop()
+						}, iframe[0]);
+					});
+				});
+			})(jQuery);
+		</script>
+	</div>
+<?php
+	$params = array(
+		'page'           => 'pricing',
+		'module_id'      => $fs->get_id(),
+		'module_slug'    => $slug,
+		'module_version' => $fs->get_plugin_version(),
+	);
+	fs_require_template( 'powered-by.php', $params );
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/freemius/templates/sticky-admin-notice-js.php b/wp-content/plugins/nextgen-gallery/freemius/templates/sticky-admin-notice-js.php
index a6d194b76a0530bd71c798a09f2a61534889d963..79eabb2c38f521b28af65f3a55b90df1c909e042 100644
--- a/wp-content/plugins/nextgen-gallery/freemius/templates/sticky-admin-notice-js.php
+++ b/wp-content/plugins/nextgen-gallery/freemius/templates/sticky-admin-notice-js.php
@@ -1,40 +1,40 @@
-<?php
-	/**
-	 * Sticky admin notices JavaScript handler for dismissing notice messages
-	 * by sending AJAX call to the server in order to remove the message from the Database.
-	 *
-	 * @package     Freemius
-	 * @copyright   Copyright (c) 2015, Freemius, Inc.
-	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
-	 * @since       1.0.7
-	 */
-
-	if ( ! defined( 'ABSPATH' ) ) {
-		exit;
-	}
-?>
-<script type="text/javascript" >
-	jQuery(document).ready(function($) {
-		$('.fs-notice.fs-sticky .fs-close').click(function(){
-			var
-				notice = $(this).parents('.fs-notice'),
-				id = notice.attr('data-id'),
-				slug = notice.attr('data-slug');
-
-			notice.fadeOut('fast', function(){
-				var data = {
-					action: slug + '_dismiss_notice_action',
-					slug: slug,
-					message_id: id
-				};
-
-				// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
-				$.post(ajaxurl, data, function(response) {
-
-				});
-
-				notice.remove();
-			});
-		});
-	});
+<?php
+	/**
+	 * Sticky admin notices JavaScript handler for dismissing notice messages
+	 * by sending AJAX call to the server in order to remove the message from the Database.
+	 *
+	 * @package     Freemius
+	 * @copyright   Copyright (c) 2015, Freemius, Inc.
+	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
+	 * @since       1.0.7
+	 */
+
+	if ( ! defined( 'ABSPATH' ) ) {
+		exit;
+	}
+?>
+<script type="text/javascript" >
+	jQuery(document).ready(function($) {
+		$('.fs-notice.fs-sticky .fs-close').click(function(){
+			var
+				notice = $(this).parents('.fs-notice'),
+				id = notice.attr('data-id'),
+				slug = notice.attr('data-slug');
+
+			notice.fadeOut('fast', function(){
+				var data = {
+					action: 'fs_dismiss_notice_action_' + slug,
+					slug: slug,
+					message_id: id
+				};
+
+				// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
+				$.post(ajaxurl, data, function(response) {
+
+				});
+
+				notice.remove();
+			});
+		});
+	});
 </script>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/nggallery.php b/wp-content/plugins/nextgen-gallery/nggallery.php
index 77a8b0913c97194338051ae5ae4eee34d49050a4..807bbbc57213576fff062f66cb29e716e14eb8a9 100755
--- a/wp-content/plugins/nextgen-gallery/nggallery.php
+++ b/wp-content/plugins/nextgen-gallery/nggallery.php
@@ -3,8 +3,8 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You
 
 /**
  * Plugin Name: NextGEN Gallery
- * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 15 million downloads.
- * Version: 2.1.49
+ * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 16 million downloads.
+ * Version: 2.1.62
  * Author: Imagely
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
  * Author URI: https://www.imagely.com
@@ -161,11 +161,11 @@ class C_NextGEN_Bootstrap
 	function is_activating()
 	{
 		$retval =  strpos($_SERVER['REQUEST_URI'], 'plugins.php') !== FALSE && isset($_REQUEST['action']) && $_REQUEST['action'] == 'activate';
-		
+
 		if (!$retval && strpos($_SERVER['REQUEST_URI'], 'update.php') !== FALSE && isset($_REQUEST['action']) && $_REQUEST['action'] == 'install-plugin' && isset($_REQUEST['plugin']) && strpos($_REQUEST['plugin'], 'nextgen-gallery') === 0) {
 			$retval = TRUE;
 		}
-		
+
 		if (!$retval && strpos($_SERVER['REQUEST_URI'], 'update.php') !== FALSE && isset($_REQUEST['action']) && $_REQUEST['action'] == 'activate-plugin' && isset($_REQUEST['plugin']) && strpos($_REQUEST['plugin'], 'nextgen-gallery') === 0) {
 			$retval = TRUE;
 		}
@@ -174,7 +174,7 @@ class C_NextGEN_Bootstrap
 		/* if (!$retval && isset($_REQUEST['tgmpa-activate']) && $_REQUEST['tgmpa-activate'] == 'activate-plugin' && isset($_REQUEST['plugin']) && strtolower($_REQUEST['plugin']) == 'nextgen-gallery') {
 			$retval = TRUE;
 		} */
-		
+
 		return $retval;
 	}
 
@@ -206,6 +206,7 @@ class C_NextGEN_Bootstrap
 
 		// Load the shortcode manager
 		include_once('non_pope/class.nextgen_shortcode_manager.php');
+		C_NextGen_Shortcode_Manager::get_instance();
 	}
 
 	/**
@@ -595,7 +596,7 @@ class C_NextGEN_Bootstrap
 		define('NGG_PRODUCT_URL', path_join(str_replace("\\", '/', NGG_PLUGIN_URL), 'products'));
 		define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
 		define('NGG_PLUGIN_STARTED_AT', microtime());
-		define('NGG_PLUGIN_VERSION', '2.1.49');
+		define('NGG_PLUGIN_VERSION', '2.1.62');
 
 		if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG)
 			define('NGG_SCRIPT_VERSION', (string)mt_rand(0, mt_getrandmax()));
@@ -870,47 +871,68 @@ function ngg_fs_uninstall() {
 	// Your cleanup script.
 }
 
+/**
+ * Send custom event about 1st gallery creation.
+ *
+ * @author Vova Feldman (@svovaf)
+ */
+function fs_track_new_gallery() {
+	global $ngg_fs;
+
+	$galleries = C_Gallery_Mapper::get_instance()->count();
+	if (1 == $galleries) {
+		// Only track event on 1st gallery creation.
+		$ngg_fs->track_event_once( 'new_gallery' );
+	}
+}
+
 /**
  * Create a helper function for easy SDK access.
  *
  * @author Vova Feldman (@svovaf)
- * @since 2.1.32
+ * @since  2.1.32
+ *
+ * @param bool $activate_for_all If true, activate Freemius for all users. Was added for testing.
  *
  * @return \Freemius
  */
-function ngg_fs() {
+function ngg_fs( $activate_for_all = false ) {
 	global $ngg_fs;
 
-	$ngg_options = get_option( 'ngg_options' );
-	$ngg_run_freemius = get_option('ngg_run_freemius', NULL);
+	if ( ! $activate_for_all ) {
+		$ngg_options      = get_option( 'ngg_options' );
+		$ngg_run_freemius = get_option( 'ngg_run_freemius', null );
+
+		if ( false === $ngg_options ) {
+			// New plugin installation.
+
+			if ( defined( 'WP_FS__DEV_MODE' ) && WP_FS__DEV_MODE ) {
+				// Always run Freemius in development mode for new plugin installs.
+				$run_freemius = true;
+			} else {
+				// Run Freemius code on 20% of the new installations.
+			// $random = rand( 1, 10 );
+			// $run_freemius = ( 1 <= $random && $random <= 2 );
+            // Update 2016-08: run on all new instances
+            $run_freemius = TRUE;
+			}
 
-	if ( false === $ngg_options ) {
-		// New plugin installation.
+			update_option( 'ngg_run_freemius', $run_freemius );
 
-		if ( defined('WP_FS__DEV_MODE') && WP_FS__DEV_MODE ) {
-			// Always run Freemius in development mode for new plugin installs.
-			$run_freemius = true;
+			// Compare both bool or string 0/1 because get_option() may give us either
+		} else if ( ( is_bool( $ngg_run_freemius ) && $ngg_run_freemius ) || '1' === $ngg_run_freemius ) {
+			// If runFreemius was set, use the value.
+			$run_freemius = $ngg_run_freemius;
 		} else {
-			// Run Freemius code on 20% of the new installations.
-			$random = rand( 1, 10 );
-			$run_freemius = ( 1 <= $random && $random <= 2 );
-		}
-
-		update_option('ngg_run_freemius', $run_freemius);
-
-	// Compare both bool or string 0/1 because get_option() may give us either
-	} else if ((is_bool($ngg_run_freemius) && $ngg_run_freemius) || '1' === $ngg_run_freemius) {
-		// If runFreemius was set, use the value.
-		$run_freemius = $ngg_run_freemius;
-	} else {
-		// Don't run Freemius for plugin updates.
-		$run_freemius = false;
+			// Don't run Freemius for plugin updates.
+			$run_freemius = false;
 		if (is_null($ngg_run_freemius))
 			update_option('ngg_run_freemius', FALSE);
-	}
+		}
 
-	if ( ! $run_freemius ) {
-		return false;
+		if ( ! $run_freemius ) {
+			return false;
+		}
 	}
 
 	if ( ! isset( $ngg_fs ) ) {
@@ -949,6 +971,9 @@ function ngg_fs() {
 	$ngg_fs->add_filter( 'connect_message', 'ngg_fs_custom_connect_message', 10, 6 );
 	$ngg_fs->add_action( 'after_uninstall', 'ngg_fs_uninstall' );
 
+	// Hook to new gallery creation event.
+	add_action( 'ngg_created_new_gallery', 'fs_track_new_gallery' );
+
 	return $ngg_fs;
 }
 
@@ -957,4 +982,4 @@ ngg_fs();
 
 #endregion Freemius
 
-new C_NextGEN_Bootstrap();
+new C_NextGEN_Bootstrap();
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php b/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php
index d73ba9a85ffe481fed8630ebbcdca7335dd4043a..6c8c55b94e020e04e9b839ee7b752a3e331b2c8e 100644
--- a/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php
+++ b/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php
@@ -1,11 +1,39 @@
 <?php
 
+/**
+ * Class C_NextGen_Shortcode_Manager
+ *
+ * NGG registers it's shortcodes using C_NextGen_Shortcode_Manager::add($tag, $callback)
+ *
+ * We do this for the following reason:
+ *
+ * NGG is used with a wide variety of third-party themes and plugins. Some of which, do things
+ * a little unorthadox, and end up modifying the markup generated by the shortcode, which breaks
+ * the display for our users.
+ *
+ * Rather than having to explain to our userbase, "you shouldn't use NGG with [plugin x]", we
+ * decided to find a mechanism that would make our plugin immune from such manipulation from other
+ * plugins, or at least reduce likelihood of such a thing happening.
+ *
+ * This is how the mechanism works:
+ *
+ * When you register a shortcode using C_NextGen_Shortcode_Manager::add(), we store a reference to
+ * the callback internally, but add the shortcode will actually call one of the internal methods of
+ * this class which outputs a placeholder (@see $_privateholder_text) instead of the markup generated
+ * by the callback. It's just a simple string and something that a third-party plugin is unlikely to
+ * manipulate in any way.
+ *
+ * We then register a filter for the_content, at high a priority of PHP_INT_MAX as an attempt to make
+ * our hook be the last hook to be executed. This hook then substitutes the placeholders with the markup
+ * generated by the shortcode's callback that was provided in C_NextGen_Shortcode_Manager::add()
+ *
+ */
 class C_NextGen_Shortcode_Manager
 {
-	private static $_instance = NULL;
-	private $_shortcodes = array();
-    private $_runlevel = 0;
-    private $_has_warned = FALSE;
+	private static $_instance 	= NULL;
+	private $_shortcodes 		= array();
+    private $_found 			= array();
+	private $_placeholder_text  = 'ngg_shortcode_%d_placeholder';
 
 	/**
 	 * Gets an instance of the class
@@ -47,90 +75,93 @@ class C_NextGen_Shortcode_Manager
 	private function __construct()
 	{
         // For theme & plugin compatibility and to prevent the output of our shortcodes from being
-        // altered we disable our shortcodes at the beginning of the_content and enable them at the end
-        // however a bug in Wordpress (see comments in deactivate_all() below) causes another issue
-        // of compatibility causing our shortcodes to not be registered at the time the_content is run.
-        // This disables that at the risk that themes may alter our HTML output in an attempt to sanitize it.
-        if (defined('NGG_DISABLE_FILTER_THE_CONTENT') && NGG_DISABLE_FILTER_THE_CONTENT)
-            return;
-
-		// We have to temporily enable our shortcodes before wptexturize runs, and then
-		// disable them again immediately afterwards
-		global $wp_filter;
-
-		$filters = $wp_filter['the_content'][10];
-		$wp_filter['the_content'][10] = array();
-		foreach ($filters as $k=>$v) {
-			if ($k == 'wptexturize') {
-				$wp_filter['the_content'][10]['before_wptexturize'] = array(
-					'function'		=> 	array(&$this, 'activate_all_for_wptexturize'),
-					'accepted_args'	=>	1
-				);
-				$wp_filter['the_content'][10][$k] = $v;
-				$wp_filter['the_content'][10]['after_wptexturize'] = array(
-					'function'		=> 	array(&$this, 'deactivate_all'),
-					'accepted_args'	=>	1
-				);
+        // altered we substitute our shortcodes with placeholders at the start of the the_content() filter
+		// queue and then at the end of the the_content() queue, we substitute the placeholders with our
+		// actual markup
+		add_filter('the_content', array(&$this, 'fix_nested_shortcodes'), -1);
+        add_filter('the_content', array(&$this, 'parse_content'), PHP_INT_MAX);
+		add_filter('widget_text', array(&$this, 'fix_nested_shortcodes'), -1);
+	}
 
-			}
-			else $wp_filter['the_content'][10][$k] = $v;
-		}
+	/**
+	 * We're parsing our own shortcodes because WP can't yet handle nested shortcodes
+	 * [ngg_images param="[slideshow]"]
+	 * @param $content
+	 */
+	function fix_nested_shortcodes($content)
+	{
+		// Try to find each registered shortcode in the content
+		foreach ($this->_shortcodes as $tag => $callback) {
+			$shortcode_start_tag = "[{$tag}";
+			$offset = 0;
 
-		add_filter('the_content', array(&$this, 'deactivate_all_for_wptexturize'), -(PHP_INT_MAX-1));
-        add_filter('the_content', array(&$this, 'parse_content'), PHP_INT_MAX-1);
+			// Find each occurance of the shortcode
+			while(($start_of_shortcode = strpos($content, $shortcode_start_tag, $offset)) !== FALSE) {
+				$index = $start_of_shortcode + strlen($shortcode_start_tag);
+				$found_attribute_assignment = FALSE;
+				$current_attribute_enclosure = NULL;
+				$last_found_char = '';
+                $content_length = strlen($content) - 1;
 
-	}
+				while (TRUE) {
+					// Parse out the shortcode, character-by-character
+					$char = $content[$index];
+					if ($char == '"' || $char == "'" && $last_found_char == '=') {
+						// Is this the closing quote for an already found attribute assignment?
+						if ($found_attribute_assignment && $current_attribute_enclosure == $char) {
+							$found_attribute_assignment = FALSE;
+							$current_attribute_enclosure = NULL;
+						} else {
+							$found_attribute_assignment = TRUE;
+							$current_attribute_enclosure = $char;
+						}
+					}
+					else if ($char == ']') {
+						// we've found a shortcode closing tag. But, we need to ensure
+						// that this ] isn't within the value of a shortcode attribute
+						if (!$found_attribute_assignment) {
+							break; //exit loop - we've found the shortcode
+						}
+					}
 
-	function activate_all_for_wptexturize($content)
-	{
-		$this->activate_all();
-		return $content;
-	}
+                    $last_found_char = $char;
 
-	function deactivate_all_for_wptexturize($content)
-	{
-		return $this->deactivate_all($content);
-	}
+                    // Prevent infinite loops in our while(TRUE)
+					if ($index == $content_length)
+					    break;
 
-	/**
-	 * Deactivates all shortcodes
-	 */
-	function deactivate_all($content, $increment_runlevel=TRUE)
-	{
-		// There is a bug in Wordpress itself: when a hook recurses any hooks meant to execute after it are discarded.
-		// For example the following code, despite expectations, will NOT display 'bar' as bar() is never executed.
-		// See https://core.trac.wordpress.org/ticket/17817 for more information.
-		/* function foo() {
-		 *     remove_action('foo', 'foo');
-		 * }
-		 * function bar() {
-		 *     echo('bar');
-		 * }
-		 * add_action('foo', 'foo');
-		 * add_action('foo', 'bar');
-		 * do_action('foo');
-		 */
-		if ($increment_runlevel) $this->_runlevel += 1;
-		if ($this->_runlevel > 1 && defined('WP_DEBUG') && WP_DEBUG && !is_admin() && !$this->_has_warned)
-		{
-			$this->_has_warned = TRUE;
-			error_log('Sorry, but recursing filters on "the_content" breaks NextGEN Gallery. Please see https://core.trac.wordpress.org/ticket/17817 and NGG_DISABLE_FILTER_THE_CONTENT');
-		}
+                    $index++;
+				}
 
-		foreach (array_keys($this->_shortcodes) as $shortcode) {
-			$this->deactivate($shortcode);
+				// Get the shortcode
+				$shortcode = substr($content, $start_of_shortcode+1, --$index-$start_of_shortcode);
+				$shortcode_replacement = str_replace(
+					array('[', ']'), array('&#91;', '&#93;'), $shortcode
+				);
+
+				// Replace the shortcode with one that doesn't have nested shortcodes
+				$content = str_replace(
+					$shortcode,
+					$shortcode_replacement,
+					$content
+				);
+
+				// Calculate the offset for the next loop iteration
+				$offset = $index+1+strlen($shortcode_replacement)-strlen($shortcode);
+			}
 		}
+		reset($this->_shortcodes);
 
 		return $content;
 	}
 
 	/**
-	 * Activates all registered shortcodes
+	 * Deactivates all shortcodes
 	 */
-	function activate_all()
+	function deactivate_all()
 	{
 		foreach (array_keys($this->_shortcodes) as $shortcode) {
-			$this->activate($shortcode);
+			$this->deactivate($shortcode);
 		}
 	}
 
@@ -141,14 +172,28 @@ class C_NextGen_Shortcode_Manager
 	 */
 	function parse_content($content)
 	{
-        $this->_runlevel--;
-		$this->activate_all();
-		$content = do_shortcode($content);
-        $content = apply_filters('ngg_content', $content);
+		$regex = str_replace('%d', '(\d+)', $this->_placeholder_text);
+
+		if (preg_match_all("/{$regex}/m", $content, $matches, PREG_SET_ORDER)) {
+			foreach ($matches as $match) {
+				$placeholder = array_shift($match);
+				$id = array_shift($match);
+				$content = str_replace($placeholder, $this->execute_found_shortcode($id), $content);
+			}
+		}
 
         return $content;
 	}
 
+	function execute_found_shortcode($found_id)
+	{
+		$details 	= $this->_found[$found_id];
+		if (isset($this->_shortcodes[$details['shortcode']])) {
+			return call_user_func($this->_shortcodes[$details['shortcode']], $details['params'], $details['inner_content']);
+		}
+		return "Invalid shortcode";
+	}
+
 	/**
 	 * Adds a shortcode
 	 * @param $name
@@ -157,18 +202,7 @@ class C_NextGen_Shortcode_Manager
 	function add_shortcode($name, $callback)
 	{
 		$this->_shortcodes[$name] = $callback;
-		$this->activate($name);
-	}
-
-	/**
-	 * Activates a particular shortcode
-	 * @param $shortcode
-	 */
-	function activate($shortcode)
-	{
-		if (isset($this->_shortcodes[$shortcode])) {
-			add_shortcode($shortcode, array(&$this, "{$shortcode}__callback"));
-		}
+		add_shortcode($name, array(&$this, $name.'____wrapper'));
 	}
 
 	/**
@@ -191,37 +225,33 @@ class C_NextGen_Shortcode_Manager
 			remove_shortcode($shortcode);
 	}
 
-	function __call($method, $params)
+	function __call($method, $args)
 	{
-		$retval = NULL;
-
-		if (strpos($method, '__callback') !== FALSE) {
-			$parts = explode('__callback', $method);
-			$shortcode = $parts[0];
-			$inner_content = isset($params[1]) ? $params[1] : '';
-			$params = isset($params[0]) ? $params[0] : array();
-			$retval = $this->callback_wrapper($shortcode, $params, $inner_content);
+		$params = array_shift($args);
+		$inner_content = array_shift($args);
+		$parts = explode('____', $method);
+		$shortcode = array_shift($parts);
+		if (doing_filter('the_content') && !doing_filter('widget_text')) {
+			return $this->replace_with_placeholder($shortcode, $params, $inner_content);
+		}
+
+		// For widgets, don't use placeholders
+		else {
+			$callback = $this->_shortcodes[$shortcode];
+			return call_user_func($callback, $params, $inner_content);
 		}
 
-		return $retval;
 	}
 
-	function callback_wrapper($shortcode, $params, $inner_content)
+	function replace_with_placeholder($shortcode, $params=array(), $inner_content='')
 	{
-		$retval = '';
-
-		if (is_array($params))
-		{
-			foreach ($params as $key => &$val) {
-                $val = trim($val, "„“‚‘«»“”");
-				$val = preg_replace("/^(&[^;]+;)?(.*)/", '\2', $val);
-				$val = preg_replace("/(&[^;]+;)?$/", '', $val);
-			}
-		}
-
-		if (isset($this->_shortcodes[$shortcode]))
-			$retval = call_user_func($this->_shortcodes[$shortcode], $params, $inner_content);
+		$id = count($this->_found);
+		$this->_found[$id] = array(
+			'shortcode'		=>	$shortcode,
+			'params'		=>	$params,
+			'inner_content'	=>	$inner_content
+		);
 
-		return $retval;
+		return sprintf($this->_placeholder_text, $id); // try to wptexturize this! ha!
 	}
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php
index 2483e2eb9223323fa2757e237e36a5980b53c675..5c073ed1d0640cd5c138107d60e7578c821d3432 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php
@@ -2,12 +2,6 @@
 
 define('NGG_AJAX_SLUG', 'photocrati_ajax');
 
-/*
- {
-		Module: photocrati-ajax,
-		Depends: { photocrati-mvc }
- }
- */
 class M_Ajax extends C_Base_Module
 {
     function define()
@@ -16,7 +10,7 @@ class M_Ajax extends C_Base_Module
             'photocrati-ajax',
             'AJAX',
             'Provides AJAX functionality',
-            '0.9',
+            '0.10',
             'https://www.imagely.com',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/package.module.ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/package.module.ajax.php
index 4c723bfa653b1f0239a2a4e1754af0dd489bef05..c76ae9dd60e88baa86b48cce7ae1fef6c772c002 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/package.module.ajax.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/package.module.ajax.php
@@ -1,13 +1,17 @@
 <?php
+/**
+ * Class C_Ajax_Controller
+ * @implements I_Ajax_Controller
+ */
 class C_Ajax_Controller extends C_MVC_Controller
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Ajax_Controller');
     }
-    public function index_action()
+    function index_action()
     {
         $retval = NULL;
         // Inform the MVC framework what type of content we're returning
@@ -54,7 +58,7 @@ class C_Ajax_Controller extends C_MVC_Controller
         }
         return self::$_instances[$context];
     }
-    public function validate_ajax_request($action = NULL, $check_token = false)
+    function validate_ajax_request($action = NULL, $check_token = false)
     {
         // TODO: remove this. Pro 2.1's proofing calls validate_ajax_request() with a null $action
         if (!$action) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php
index bc790396bf800b3274a21f2d92c153f4b0c08347..8cc3691b7829284496424e1b3f4143e58c9fe105 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php
@@ -1,10 +1,4 @@
 <?php
-/**
- {
-	Module:		photocrati-attach_to_post,
-	Depends:	{ photocrati-nextgen_gallery_display }
- }
- */
 
 define('NGG_ATTACH_TO_POST_SLUG', 'nextgen-attach_to_post');
 
@@ -24,7 +18,7 @@ class M_Attach_To_Post extends C_Base_Module
 			'photocrati-attach_to_post',
 			'Attach To Post',
 			'Provides the "Attach to Post" interface for displaying galleries and albums',
-			'0.12',
+			'0.18',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com',
@@ -111,12 +105,14 @@ class M_Attach_To_Post extends C_Base_Module
 
         // We use two hooks here because we need it to execute for both the post-new.php
         // page and ATP interface
-        add_action('plugins_loaded',            array(&$this, 'fix_ie11'), 1);
-        add_action('admin_init',                array(&$this, 'fix_ie11'), PHP_INT_MAX-1);
-        add_action('admin_enqueue_scripts',     array(&$this, 'fix_ie11'), 1);
-        add_action('admin_enqueue_scripts',     array(&$this, 'fix_ie11'), PHP_INT_MAX-1);
-		add_filter('wpseo_pre_analysis_post_content', array(&$this, 'remove_preview_images_from_yoast_opengraph'));
-		add_filter('wpseo_sitemap_urlimages', 	array(&$this, 'remove_preview_images_from_yoast_sitemap'), NULL, 2);
+        add_action('plugins_loaded',        array($this, 'fix_ie11'), 1);
+        add_action('admin_init',            array($this, 'fix_ie11'), PHP_INT_MAX-1);
+        add_action('admin_enqueue_scripts', array($this, 'fix_ie11'), 1);
+        add_action('admin_enqueue_scripts', array($this, 'fix_ie11'), PHP_INT_MAX-1);
+
+        add_filter('wpseo_opengraph_image',   array($this, 'hide_preview_image_from_yoast'));
+        add_filter('wpseo_twitter_image',     array($this, 'hide_preview_image_from_yoast'));
+        add_filter('wpseo_sitemap_urlimages', array($this, 'remove_preview_images_from_yoast_sitemap'), NULL, 2);
 
         // Emit frame communication events
 		if ($this->does_request_require_frame_communication()) {
@@ -135,13 +131,10 @@ class M_Attach_To_Post extends C_Base_Module
 			);
 
 			add_action('admin_init', array(&$this, 'route_insert_gallery_window'));
-
-			// TODO: In 2.0.69, we're going to change the ATP placeholder urls
-			if (FALSE) {
-				add_filter('the_editor_content', array($this, 'fix_preview_images'));
-			}
 			
 			add_action('media_buttons', array($this, 'add_media_button'), 15);
+			add_action('admin_init', array($this, 'enqueue_tinymce_plugin_css'));
+			add_action('admin_print_scripts', array(&$this, 'print_tinymce_placeholder_template'));
 		}
 
 		// Frontend-only hooks
@@ -152,18 +145,40 @@ class M_Attach_To_Post extends C_Base_Module
 	}
 
 	/**
-	 * Removes IGW preview/placeholder images from Yoast OpenGraph analysis
-	 * @param $content
-	 * @return mixed
+	 * Renders the underscore template used by TinyMCE for IGW placeholders
 	 */
-	function remove_preview_images_from_yoast_opengraph($content)
+	function print_tinymce_placeholder_template()
 	{
-		$content = $this->fix_preview_images($content);
-		$content = preg_replace('/http(s)?:\/\/(.*?)'.NGG_ATTACH_TO_POST_SLUG.'\/preview\/id--\d+/', "", $content);
-		$content = preg_replace('/http(s)?:\/\/(.*?)'.NGG_ATTACH_TO_POST_SLUG.'\/preview\/id\/\d+/', "", $content);
-		return $content;
+		readfile(C_Fs::get_instance()->join_paths(
+			$this->get_registry()->get_module_dir('photocrati-attach_to_post'),
+			'templates',
+			'tinymce_placeholder.php'
+		));
 	}
 
+	/**
+	 * Enqueues the CSS needed to style the IGW placeholders
+	 */
+	function enqueue_tinymce_plugin_css()
+	{
+		add_editor_style('https://fonts.googleapis.com/css?family=Lato');
+		add_editor_style(M_Gallery_Display::get_fontawesome_url());
+		add_editor_style(C_Router::get_instance()->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.css'));
+	}
+
+    /**
+     * Prevents ATP preview image placeholders from being used as opengraph / twitter metadata
+     *
+     * @param string $image
+     * @return null
+     */
+	function hide_preview_image_from_yoast($image)
+    {
+        if (strpos($image, NGG_ATTACH_TO_POST_SLUG) !== FALSE)
+            return null;
+        return $image;
+    }
+
 	/**
 	 * Removes IGW preview/placeholder images from Yoast's sitemap
 	 * @param $images
@@ -236,8 +251,11 @@ class M_Attach_To_Post extends C_Base_Module
 	function add_media_button()
 	{
 		$router = C_Router::get_instance();
+		$button_url = $router->get_static_url('photocrati-attach_to_post#atp_button.png');
+		$label		= __('Add Gallery', 'nggallery');
+		$igw_url    = admin_url('/?'.NGG_ATTACH_TO_POST_SLUG.'=1&KeepThis=true&TB_iframe=true&height=600&width=1000');
 
-		echo '<a href="#" data-editor="content" class="button ngg-add-gallery" id="ngg-media-button" class="button" onclick="tinymce.EditorManager.execCommand(\'ngg_attach_to_post\'); return false;"><img src="' . $router->get_static_url('photocrati-attach_to_post#atp_button.png') . '" style="padding:0; margin-top:-3px;"> ' . __('Add Gallery', 'nggallery') . '</a>';
+		echo sprintf('<a href="%s" data-editor="content" class="button ngg-add-gallery thickbox" id="ngg-media-button" class="button" ><img src="%s" style="padding:0; margin-top:-3px;">%s</a>', $igw_url, $button_url, $label);
 	}
 
 	/**
@@ -332,12 +350,27 @@ class M_Attach_To_Post extends C_Base_Module
 		// Enqueue resources needed at post/page level
 		if (preg_match("/\/wp-admin\/(post|post-new)\.php$/", $_SERVER['SCRIPT_NAME'])) {
 			$this->_enqueue_tinymce_resources();
+
+			M_Gallery_Display::enqueue_fontawesome();
+
 			wp_enqueue_style(
 				'ngg_attach_to_post_dialog',
 				$router->get_static_url('photocrati-attach_to_post#attach_to_post_dialog.css'),
 				FALSE,
 				NGG_SCRIPT_VERSION
 			);
+
+			wp_enqueue_script(
+				'ngg-igw',
+				$router->get_static_url('photocrati-attach_to_post#igw.js'),
+				array('jquery'),
+				NGG_PLUGIN_VERSION
+			);
+			wp_localize_script('ngg-igw', 'ngg_igw_i18n', array(
+				'nextgen_gallery'	=>	__('NextGEN Gallery', 'nggallery'),
+				'edit'				=>	__('Click to edit', 'nggallery'),
+				'remove'			=>	__('Click to remove', 'nggallery'),
+			));
 		}
 
 		elseif (isset($_REQUEST['attach_to_post']) OR
@@ -402,15 +435,8 @@ class M_Attach_To_Post extends C_Base_Module
 	{
         global $wp_version;
         $router = C_Router::get_instance();
-
 		wp_enqueue_script('photocrati_ajax');
-
-        if ($wp_version >= 3.9)
-            $file = $router->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.js');
-        else
-            $file = $router->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin_wp38_compat.js');
-
-		$plugins[$this->attach_to_post_tinymce_plugin] = $file;
+		$plugins[$this->attach_to_post_tinymce_plugin] = $router->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.js');
 		return $plugins;
 	}
 
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/package.module.attach_to_post.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/package.module.attach_to_post.php
index 2741a3b257c8a0038f2135c7ffa677bdca94fc78..526b8e748eeadedb2c051486c72a70e1af728280 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/package.module.attach_to_post.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/package.module.attach_to_post.php
@@ -2,14 +2,17 @@
 /**
  * Provides AJAX actions for the Attach To Post interface
  * TODO: Need to add authorization checks to each action
+ *
+ * @mixin C_Ajax_Controller
+ * @adapts I_Ajax_Controller
  */
 class A_Attach_To_Post_Ajax extends Mixin
 {
-    public $attach_to_post = NULL;
+    var $attach_to_post = NULL;
     /**
      * Retrieves the attach to post controller
      */
-    public function get_attach_to_post()
+    function get_attach_to_post()
     {
         if (is_null($this->attach_to_post)) {
             $this->attach_to_post = C_Attach_Controller::get_instance();
@@ -20,7 +23,7 @@ class A_Attach_To_Post_Ajax extends Mixin
      * Returns a list of image sources for the Attach to Post interface
      * @return type
      */
-    public function get_attach_to_post_sources_action()
+    function get_attach_to_post_sources_action()
     {
         $response = array();
         if ($this->object->validate_ajax_request('nextgen_edit_displayed_gallery')) {
@@ -32,7 +35,7 @@ class A_Attach_To_Post_Ajax extends Mixin
      * Gets existing galleries
      * @return array
      */
-    public function get_existing_galleries_action()
+    function get_existing_galleries_action()
     {
         $this->debug = TRUE;
         $response = array();
@@ -61,7 +64,7 @@ class A_Attach_To_Post_Ajax extends Mixin
      * Gets existing albums
      * @return array
      */
-    public function get_existing_albums_action()
+    function get_existing_albums_action()
     {
         $response = array();
         if ($this->object->validate_ajax_request('nextgen_edit_displayed_gallery')) {
@@ -85,7 +88,7 @@ class A_Attach_To_Post_Ajax extends Mixin
      * Gets existing image tags
      * @return array
      */
-    public function get_existing_image_tags_action()
+    function get_existing_image_tags_action()
     {
         $response = array();
         if ($this->object->validate_ajax_request('nextgen_edit_displayed_gallery')) {
@@ -105,7 +108,7 @@ class A_Attach_To_Post_Ajax extends Mixin
     /**
      * Gets entities (such as images) for a displayed gallery (attached gallery)
      */
-    public function get_displayed_gallery_entities_action()
+    function get_displayed_gallery_entities_action()
     {
         $response = array();
         if ($this->object->validate_ajax_request('nextgen_edit_displayed_gallery') && ($params = $this->object->param('displayed_gallery'))) {
@@ -154,7 +157,7 @@ class A_Attach_To_Post_Ajax extends Mixin
     /**
      * Saves the displayed gallery
      */
-    public function save_displayed_gallery_action()
+    function save_displayed_gallery_action()
     {
         $response = array();
         $mapper = C_Displayed_Gallery_Mapper::get_instance();
@@ -188,9 +191,14 @@ class A_Attach_To_Post_Ajax extends Mixin
         return $response;
     }
 }
+/**
+ * Class A_Gallery_Storage_Frame_Event
+ * @mixin C_Gallery_Storage
+ * @adapts I_Gallery_Storage
+ */
 class A_Gallery_Storage_Frame_Event extends Mixin
 {
-    public function generate_thumbnail($image, $params = null, $skip_defaults = false)
+    function generate_thumbnail($image, $params = null, $skip_defaults = false)
     {
         $retval = $this->call_parent('generate_thumbnail', $image, $params, $skip_defaults);
         if (is_admin() && ($image = C_Image_Mapper::get_instance()->find($image))) {
@@ -207,12 +215,18 @@ class A_Gallery_Storage_Frame_Event extends Mixin
         return $retval;
     }
 }
+/**
+ * Class C_Attach_Controller
+ * @mixin Mixin_Attach_To_Post
+ * @mixin Mixin_Attach_To_Post_Display_Tab
+ * @implements I_Attach_To_Post_Controller
+ */
 class C_Attach_Controller extends C_NextGen_Admin_Page_Controller
 {
     static $_instances = array();
-    public $_displayed_gallery;
-    public $_marked_scripts;
-    public $_is_rendering;
+    var $_displayed_gallery;
+    var $_marked_scripts;
+    var $_is_rendering;
     static function &get_instance($context = 'all')
     {
         if (!isset(self::$_instances[$context])) {
@@ -221,7 +235,7 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller
         }
         return self::$_instances[$context];
     }
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         if (!is_array($context)) {
             $context = array($context);
@@ -232,7 +246,7 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller
         $this->add_mixin('Mixin_Attach_To_Post_Display_Tab');
         $this->implement('I_Attach_To_Post_Controller');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_load_displayed_gallery();
@@ -243,7 +257,7 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller
             add_action('wp_print_scripts', array($this, '_handle_scripts'), 9999);
         }
     }
-    public function _handle_scripts()
+    function _handle_scripts()
     {
         if (is_admin() && $this->_is_rendering) {
             global $wp_scripts;
@@ -257,7 +271,7 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller
             }
         }
     }
-    public function _handle_script($tag, &$queue)
+    function _handle_script($tag, &$queue)
     {
         global $wp_scripts;
         $registered = $wp_scripts->registered;
@@ -277,23 +291,74 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller
 }
 class Mixin_Attach_To_Post extends Mixin
 {
-    public function _load_displayed_gallery()
+    function _load_displayed_gallery()
     {
         $mapper = C_Displayed_Gallery_Mapper::get_instance();
-        if (!($this->object->_displayed_gallery = $mapper->find($this->object->param('id'), TRUE))) {
-            if (!empty($_REQUEST['id'])) {
-                $this->object->_displayed_gallery = $mapper->find($_REQUEST['id'], TRUE);
-            }
-            if (empty($this->object->_displayed_gallery)) {
-                $this->object->_displayed_gallery = $mapper->create();
+        // Fetch the displayed gallery by ID
+        if ($id = $this->object->param('id')) {
+            $this->object->_displayed_gallery = $mapper->find($id, TRUE);
+        } else {
+            if (isset($_REQUEST['shortcode'])) {
+                $params = str_replace('ngg_images', '', base64_decode($_REQUEST['shortcode']));
+                $params = stripslashes($params);
+                $params = str_replace(array('[', ']'), array('&#91;', '&#93;'), $params);
+                $params = shortcode_parse_atts($params);
+                $this->object->_displayed_gallery = C_Displayed_Gallery_Renderer::get_instance()->params_to_displayed_gallery($params);
             }
         }
+        // If all else fails, then create fresh with a new displayed gallery
+        if (empty($this->object->_displayed_gallery)) {
+            $this->object->_displayed_gallery = $mapper->create();
+        }
     }
-    public function mark_script($script_tag)
+    function mark_script($script_tag)
     {
         $this->object->_marked_scripts[$script_tag] = true;
     }
-    public function enqueue_backend_resources()
+    function enqueue_display_tab_js()
+    {
+        // Enqueue backbone.js library, required by the Attach to Post display tab
+        wp_enqueue_script('backbone');
+        // provided by WP
+        $this->object->mark_script('backbone');
+        // Ensure underscore sting, a helper utility
+        wp_enqueue_script('underscore.string', $this->get_static_url('photocrati-attach_to_post#underscore.string.js'), array('underscore'), NGG_SCRIPT_VERSION);
+        $this->object->mark_script('underscore.string');
+        // Enqueue the backbone app for the display tab
+        // Get all entities used by the display tab
+        $context = 'attach_to_post';
+        $gallery_mapper = $this->get_registry()->get_utility('I_Gallery_Mapper', $context);
+        $album_mapper = $this->get_registry()->get_utility('I_Album_Mapper', $context);
+        $image_mapper = $this->get_registry()->get_utility('I_Image_Mapper', $context);
+        $display_type_mapper = $this->get_registry()->get_utility('I_Display_Type_Mapper', $context);
+        $sources = C_Displayed_Gallery_Source_Manager::get_instance();
+        $security = $this->get_registry()->get_utility('I_Security_Manager');
+        $settings = C_NextGen_Settings::get_instance();
+        // Get the nextgen tags
+        global $wpdb;
+        $tags = $wpdb->get_results("SELECT DISTINCT name AS 'id', name FROM {$wpdb->terms}\n                        WHERE term_id IN (\n                                SELECT term_id FROM {$wpdb->term_taxonomy}\n                                WHERE taxonomy = 'ngg_tag'\n                        )");
+        $all_tags = new stdClass();
+        $all_tags->name = "All";
+        $all_tags->id = "All";
+        array_unshift($tags, $all_tags);
+        $display_types = array();
+        $registry = C_Component_Registry::get_instance();
+        foreach ($display_type_mapper->find_all() as $display_type) {
+            if (isset($display_type->hidden_from_igw) && $display_type->hidden_from_igw || isset($display_type->hidden_from_ui) && $display_type->hidden_from_ui) {
+                continue;
+            }
+            $available = $registry->is_module_loaded($display_type->name);
+            if (!apply_filters('ngg_atp_show_display_type', $available, $display_type)) {
+                continue;
+            }
+            $display_types[] = $display_type;
+        }
+        usort($display_types, array($this->object, '_display_type_list_sort'));
+        wp_enqueue_script('ngg_display_tab', $this->get_static_url('photocrati-attach_to_post#display_tab.js'), array('jquery', 'backbone', 'underscore.string', 'photocrati_ajax'));
+        $this->object->mark_script('ngg_display_tab');
+        wp_localize_script('ngg_display_tab', 'igw_data', array('displayed_gallery_preview_url' => $settings->gallery_preview_url, 'displayed_gallery' => $this->object->_displayed_gallery->get_entity(), 'sources' => $sources->get_all(), 'gallery_primary_key' => $gallery_mapper->get_primary_key_column(), 'galleries' => $gallery_mapper->find_all(), 'albums' => $album_mapper->find_all(), 'tags' => $tags, 'display_types' => $display_types, 'sec_token' => $security->get_request_token('nextgen_edit_displayed_gallery')->get_json(), 'image_primary_key' => $image_mapper->get_primary_key_column(), 'display_type_priority_base' => NGG_DISPLAY_PRIORITY_BASE, 'display_type_priority_step' => NGG_DISPLAY_PRIORITY_STEP, 'shortcode_ref' => isset($_REQUEST['ref']) ? doubleval($_REQUEST['ref']) : null, 'i18n' => array('sources' => __('Sources', 'nggallery'), 'optional' => __('(optional)', 'nggallery'), 'slug_tooltip' => __('Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox', 'nggallery'), 'slug_label' => __('Slug', 'nggallery'), 'no_entities' => __('No entities to display for this source', 'nggallery'), 'exclude_question' => __('Exlude?', 'nggallery'), 'select_gallery' => __('Select a gallery', 'nggallery'), 'galleries' => __('Galleries', 'nggallery'), 'albums' => __('Albums', 'nggallery'))));
+    }
+    function enqueue_backend_resources()
     {
         $this->call_parent('enqueue_backend_resources');
         $this->mark_script('jquery-ui-accordion');
@@ -326,23 +391,7 @@ class Mixin_Attach_To_Post extends Mixin
         wp_enqueue_script('ngg_attach_to_post', $this->get_static_url('photocrati-attach_to_post#attach_to_post.js'), FALSE, NGG_SCRIPT_VERSION);
         wp_enqueue_style('ngg_attach_to_post', $this->get_static_url('photocrati-attach_to_post#attach_to_post.css'), FALSE, NGG_SCRIPT_VERSION);
         $this->object->mark_script('ngg_attach_to_post');
-        // Enqueue backbone.js library, required by the Attach to Post display tab
-        wp_enqueue_script('backbone');
-        // provided by WP
-        $this->object->mark_script('backbone');
-        // Ensure underscore sting, a helper utility
-        wp_enqueue_script('underscore.string', $this->get_static_url('photocrati-attach_to_post#underscore.string.js'), array('underscore'), NGG_SCRIPT_VERSION);
-        $this->object->mark_script('underscore.string');
-        // Enqueue the backbone app for the display tab
-        $settings = C_NextGen_Settings::get_instance();
-        $preview_url = $settings->gallery_preview_url;
-        $display_tab_js_url = $settings->attach_to_post_display_tab_js_url;
-        if ($this->object->_displayed_gallery->id()) {
-            $display_tab_js_url .= '&id=' . $this->object->_displayed_gallery->id();
-        }
-        wp_enqueue_script('ngg_display_tab', $display_tab_js_url, array('backbone', 'underscore.string', 'photocrati_ajax'), NGG_SCRIPT_VERSION);
-        wp_localize_script('ngg_display_tab', 'ngg_displayed_gallery_preview_url', $settings->gallery_preview_url);
-        $this->object->mark_script('ngg_display_tab');
+        $this->enqueue_display_tab_js();
         // TODO: for now mark Pro scripts to ensure they are enqueued properly, remove this after Pro upgrade with tagging added
         $display_types = array('photocrati-nextgen_pro_slideshow', 'photocrati-nextgen_pro_horizontal_filmstrip', 'photocrati-nextgen_pro_thumbnail_grid', 'photocrati-nextgen_pro_blog_gallery', 'photocrati-nextgen_pro_film');
         foreach ($display_types as $display_type) {
@@ -353,7 +402,7 @@ class Mixin_Attach_To_Post extends Mixin
     /**
      * Renders the interface
      */
-    public function index_action($return = FALSE)
+    function index_action($return = FALSE)
     {
         $this->object->enqueue_backend_resources();
         $this->object->do_not_cache();
@@ -363,7 +412,7 @@ class Mixin_Attach_To_Post extends Mixin
     /**
      * Displays a preview image for the displayed gallery
      */
-    public function preview_action()
+    function preview_action()
     {
         $found_preview_pic = FALSE;
         $dyn_thumbs = C_Dynamic_Thumbnails_Manager::get_instance();
@@ -404,17 +453,17 @@ class Mixin_Attach_To_Post extends Mixin
     /**
      * Filter for ngg_before_save_thumbnail
      */
-    public function set_igw_placeholder_text($thumbnail)
+    function set_igw_placeholder_text($thumbnail)
     {
         $settings = C_NextGen_Settings::get_instance();
         $thumbnail->applyFilter(IMG_FILTER_BRIGHTNESS, -25);
-        $watermark_settings = apply_filters('ngg_igw_placeholder_line_1_settings', array('text' => __('NextGEN Gallery', 'nggallery'), 'font_color' => 'ffffff', 'font' => 'YanoneKaffeesatz-Bold.ttf', 'font_size' => 32));
+        $watermark_settings = apply_filters('ngg_igw_placeholder_line_1_settings', array('text' => __("NextGEN Gallery", 'nggallery'), 'font_color' => 'ffffff', 'font' => 'YanoneKaffeesatz-Bold.ttf', 'font_size' => 32));
         if ($watermark_settings) {
             $thumbnail->watermarkText = $watermark_settings['text'];
             $thumbnail->watermarkCreateText($watermark_settings['font_color'], $watermark_settings['font'], $watermark_settings['font_size'], 100);
             $thumbnail->watermarkImage('topCenter', 0, 72);
         }
-        $watermark_settings = apply_filters('ngg_igw_placeholder_line_2_settings', array('text' => __('Click to edit', 'nggallery'), 'font_color' => 'ffffff', 'font' => 'YanoneKaffeesatz-Bold.ttf', 'font_size' => 15));
+        $watermark_settings = apply_filters('ngg_igw_placeholder_line_2_settings', array('text' => __("Click to edit", 'nggallery'), 'font_color' => 'ffffff', 'font' => 'YanoneKaffeesatz-Bold.ttf', 'font_size' => 15));
         if ($watermark_settings) {
             $thumbnail->watermarkText = $watermark_settings['text'];
             $thumbnail->watermarkCreateText($watermark_settings['font_color'], $watermark_settings['font'], $watermark_settings['font_size'], 100);
@@ -426,7 +475,7 @@ class Mixin_Attach_To_Post extends Mixin
      * Returns the page title of the Attach to Post interface
      * @return string
      */
-    public function _get_page_title()
+    function _get_page_title()
     {
         return __('NextGEN Gallery - Attach To Post', 'nggallery');
     }
@@ -434,7 +483,7 @@ class Mixin_Attach_To_Post extends Mixin
      * Returns the main tabs displayed on the Attach to Post interface
      * @returns array
      */
-    public function _get_main_tabs()
+    function _get_main_tabs()
     {
         $retval = array();
         $security = $this->get_registry()->get_utility('I_Security_Manager');
@@ -462,7 +511,7 @@ class Mixin_Attach_To_Post extends Mixin
      * @param string $page
      * @return string
      */
-    public function _render_ngg_page_in_frame($page, $tab_id = null)
+    function _render_ngg_page_in_frame($page, $tab_id = null)
     {
         $frame_url = admin_url("/admin.php?page={$page}&attach_to_post");
         $frame_url = nextgen_esc_url($frame_url);
@@ -476,7 +525,7 @@ class Mixin_Attach_To_Post extends Mixin
      * displayed
      * @return type
      */
-    public function _render_display_tab()
+    function _render_display_tab()
     {
         return $this->object->render_partial('photocrati-attach_to_post#display_tab', array('messages' => array(), 'displayed_gallery' => $this->object->_displayed_gallery, 'tabs' => $this->object->_get_display_tabs()), TRUE);
     }
@@ -484,7 +533,7 @@ class Mixin_Attach_To_Post extends Mixin
      * Renders the tab used primarily for Gallery and Image creation
      * @return type
      */
-    public function _render_create_tab()
+    function _render_create_tab()
     {
         return $this->object->_render_ngg_page_in_frame('ngg_addgallery', 'create_tab');
     }
@@ -492,14 +541,14 @@ class Mixin_Attach_To_Post extends Mixin
      * Renders the tab used for Managing Galleries
      * @return string
      */
-    public function _render_galleries_tab()
+    function _render_galleries_tab()
     {
         return $this->object->_render_ngg_page_in_frame('nggallery-manage-gallery', 'galleries_tab');
     }
     /**
      * Renders the tab used for Managing Albums
      */
-    public function _render_albums_tab()
+    function _render_albums_tab()
     {
         return $this->object->_render_ngg_page_in_frame('nggallery-manage-album', 'albums_tab');
     }
@@ -507,69 +556,18 @@ class Mixin_Attach_To_Post extends Mixin
      * Renders the tab used for Managing Albums
      * @return string
      */
-    public function _render_tags_tab()
+    function _render_tags_tab()
     {
         return $this->object->_render_ngg_page_in_frame('nggallery-tags', 'tags_tab');
     }
 }
 /**
  * Provides the "Display Tab" for the Attach To Post interface/controller
+ * @see C_Attach_Controller adds this mixin
  */
 class Mixin_Attach_To_Post_Display_Tab extends Mixin
 {
-    /**
-     * Renders the JS required for the Backbone-based Display Tab
-     */
-    public function display_tab_js_action($return = FALSE)
-    {
-        // Cache appropriately
-        $this->object->do_not_cache();
-        // Ensure that JS is returned
-        $this->object->set_content_type('javascript');
-        $buffer_limit = 0;
-        $zlib = ini_get('zlib.output_compression');
-        if (!is_numeric($zlib) && $zlib == 'On') {
-            $buffer_limit = 1;
-        } else {
-            if (is_numeric($zlib) && $zlib > 0) {
-                $buffer_limit = 1;
-            }
-        }
-        while (ob_get_level() != $buffer_limit) {
-            ob_end_clean();
-        }
-        // Get all entities used by the display tab
-        $context = 'attach_to_post';
-        $gallery_mapper = $this->get_registry()->get_utility('I_Gallery_Mapper', $context);
-        $album_mapper = $this->get_registry()->get_utility('I_Album_Mapper', $context);
-        $image_mapper = $this->get_registry()->get_utility('I_Image_Mapper', $context);
-        $display_type_mapper = $this->get_registry()->get_utility('I_Display_Type_Mapper', $context);
-        $sources = C_Displayed_Gallery_Source_Manager::get_instance();
-        $security = $this->get_registry()->get_utility('I_Security_Manager');
-        // Get the nextgen tags
-        global $wpdb;
-        $tags = $wpdb->get_results("SELECT DISTINCT name AS 'id', name FROM {$wpdb->terms}\n                        WHERE term_id IN (\n                                SELECT term_id FROM {$wpdb->term_taxonomy}\n                                WHERE taxonomy = 'ngg_tag'\n                        )");
-        $all_tags = new stdClass();
-        $all_tags->name = 'All';
-        $all_tags->id = 'All';
-        array_unshift($tags, $all_tags);
-        $display_types = array();
-        $registry = C_Component_Registry::get_instance();
-        foreach ($display_type_mapper->find_all() as $display_type) {
-            if (isset($display_type->hidden_from_ui) && $display_type->hidden_from_ui) {
-                continue;
-            }
-            $available = $registry->is_module_loaded($display_type->name);
-            if (!apply_filters('ngg_atp_show_display_type', $available, $display_type)) {
-                continue;
-            }
-            $display_types[] = $display_type;
-        }
-        usort($display_types, array($this->object, '_display_type_list_sort'));
-        $output = $this->object->render_view('photocrati-attach_to_post#display_tab_js', array('displayed_gallery' => json_encode($this->object->_displayed_gallery->get_entity()), 'sources' => json_encode($sources->get_all()), 'gallery_primary_key' => $gallery_mapper->get_primary_key_column(), 'galleries' => json_encode($gallery_mapper->find_all()), 'albums' => json_encode($album_mapper->find_all()), 'tags' => json_encode($tags), 'display_types' => json_encode($display_types), 'sec_token' => $security->get_request_token('nextgen_edit_displayed_gallery')->get_json(), 'image_primary_key' => $image_mapper->get_primary_key_column()), $return);
-        return $output;
-    }
-    public function _display_type_list_sort($type_1, $type_2)
+    function _display_type_list_sort($type_1, $type_2)
     {
         $order_1 = $type_1->view_order;
         $order_2 = $type_2->view_order;
@@ -590,7 +588,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
     /**
      * Gets a list of tabs to render for the "Display" tab
      */
-    public function _get_display_tabs()
+    function _get_display_tabs()
     {
         // The ATP requires more memmory than some applications, somewhere around 60MB.
         // Because it's such an important feature of NextGEN Gallery, we temporarily disable
@@ -603,7 +601,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
     /**
      * Renders the accordion tab, "What would you like to display?"
      */
-    public function _render_display_source_tab()
+    function _render_display_source_tab()
     {
         return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array('id' => 'source_tab', 'title' => __('What would you like to display?', 'nggallery'), 'content' => $this->object->_render_display_source_tab_contents()), TRUE);
     }
@@ -611,7 +609,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * Renders the contents of the source tab
      * @return string
      */
-    public function _render_display_source_tab_contents()
+    function _render_display_source_tab_contents()
     {
         return $this->object->render_partial('photocrati-attach_to_post#display_tab_source', array(), TRUE);
     }
@@ -619,14 +617,14 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * Renders the accordion tab for selecting a display type
      * @return string
      */
-    public function _render_display_types_tab()
+    function _render_display_types_tab()
     {
         return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array('id' => 'display_type_tab', 'title' => __('Select a display type', 'nggallery'), 'content' => $this->object->_render_display_type_tab_contents()), TRUE);
     }
     /**
      * Renders the contents of the display type tab
      */
-    public function _render_display_type_tab_contents()
+    function _render_display_type_tab_contents()
     {
         return $this->object->render_partial('photocrati-attach_to_post#display_tab_type', array(), TRUE);
     }
@@ -634,7 +632,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * Renders the display settings tab for the Attach to Post interface
      * @return type
      */
-    public function _render_display_settings_tab()
+    function _render_display_settings_tab()
     {
         return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array('id' => 'display_settings_tab', 'title' => __('Customize the display settings', 'nggallery'), 'content' => $this->object->_render_display_settings_contents()), TRUE);
     }
@@ -643,7 +641,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * of the display type
      * @return string
      */
-    public function _get_selected_display_type_name()
+    function _get_selected_display_type_name()
     {
         $retval = '';
         if ($this->object->_displayed_gallery) {
@@ -657,7 +655,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * @param string $name	name of the display type
      * @return bool
      */
-    public function is_displayed_gallery_using_display_type($name)
+    function is_displayed_gallery_using_display_type($name)
     {
         $retval = FALSE;
         if ($this->object->_displayed_gallery) {
@@ -669,7 +667,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * Renders the contents of the display settings tab
      * @return string
      */
-    public function _render_display_settings_contents()
+    function _render_display_settings_contents()
     {
         $retval = array();
         // Get all display setting forms
@@ -699,14 +697,13 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
         $css_class = $this->object->_get_selected_display_type_name() ? 'display_settings_form hidden' : 'display_settings_form';
         $retval[] = $this->object->render_partial('photocrati-attach_to_post#no_display_type_selected', array('no_display_type_selected' => __('No display type selected', 'nggallery'), 'css_class' => $css_class), TRUE);
         // Return all display setting forms
-        return implode('
-', $retval);
+        return implode("\n", $retval);
     }
     /**
      * Renders the tab used to preview included images
      * @return string
      */
-    public function _render_preview_tab()
+    function _render_preview_tab()
     {
         return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array('id' => 'preview_tab', 'title' => __('Sort or Exclude Images', 'nggallery'), 'content' => $this->object->_render_preview_tab_contents()), TRUE);
     }
@@ -714,7 +711,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin
      * Renders the contents of the "Preview" tab.
      * @return string
      */
-    public function _render_preview_tab_contents()
+    function _render_preview_tab_contents()
     {
         return $this->object->render_partial('photocrati-attach_to_post#preview_tab', array(), TRUE);
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js
index 10db0e0d09d18b3a0120c3578cbe114e88b7c423..561682d3c9a03189e21dd2fbd39f1f4d9ebd09e1 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js
@@ -4,7 +4,13 @@ this.id = 'ngg-attach_to_post';
 // Provides a function to close the TinyMCE popup window
 function close_attach_to_post_window()
 {
-	parent.tinyMCE.activeEditor.windowManager.close(window);
+	var src = jQuery(top.document).find("#TB_window iframe").attr('src');
+	if (src && src.match('attach_to_post')) {
+		top.tb_remove();
+	}
+	else {
+		top.tinyMCE.activeEditor.windowManager.close(window);
+	}
 }
 
 // Adjusts the height of a frame on the page, and then executes
@@ -123,3 +129,45 @@ jQuery(function($){
 		opacity: 1.0
 	});
 });
+
+function is_visual_editor()
+{
+	return jQuery(top.document).find('.html-active:visible').length == 0;
+}
+
+function insert_into_editor(snippet, ref_or_id)
+{
+	if (is_visual_editor()) {
+		var editor = top.tinyMCE.activeEditor;
+		if (editor.selection.getNode().outerHTML.indexOf(ref_or_id) >= 0) {
+			jQuery(editor.selection.getNode()).attr('data-shortcode', snippet.substring(1, snippet.length-1));
+		}
+		else {
+			editor.insertContent(snippet);
+		}
+		editor.selection.collapse(true);
+
+	}
+	else {
+		myField = top.document.getElementById('content');
+
+		myValue = snippet;
+
+		//IE support
+		if (document.selection) {
+			myField.focus();
+			sel = document.selection.createRange();
+			sel.text = myValue;
+		}
+		//MOZILLA and others
+		else if (myField.selectionStart || myField.selectionStart == '0') {
+			var startPos = myField.selectionStart;
+			var endPos = myField.selectionEnd;
+			myField.value = myField.value.substring(0, startPos)
+				+ myValue
+				+ myField.value.substring(endPos, myField.value.length);
+		} else {
+			myField.value += myValue;
+		}
+	}
+}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.css
index aa67d174432a52eeea8e35909f16323938201f21..0dbdec75bfa66a2c094760c359bff15787eebd94 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.css
@@ -1 +1 @@
-html,body{width:100%;min-height:100%;padding:0;margin:0;font-size:13px}body{position:absolute;visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;height:100%}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}.ui-helper-reset{font-size:13px}#attach_to_post_tabs{border:0;background:none;min-height:100%;overflow:hidden}#attach_to_post_tabs div.main_menu_tab{overflow:hidden}.ui-tabs-panel{min-height:100%}.ui-widget-header{border:0;border-bottom:1px solid #dfdfdf;background:none}iframe{width:100%;min-height:100%;border:0;padding:0;margin:0;background:transparent}#displayed_gallery_source{width:400px}#source_configuration td{vertical-align:top}#source_configuration .chzn-choices input[type=text]{height:auto !important}#slug_configuration #slug_label{width:52px}#slug_configuration #slug_column input[type=text]{width:498px}.display_type_preview{float:left;width:25%}.display_type_preview .image_container{width:100%;vertical-align:middle;text-align:center;font-size:12px;font-weight:600}.display_type_preview .image_container p{display:inline-block}#preview_tab_content{padding:.8em 1em}#preview_tab_content .previewed_entity{width:100%;border-bottom:solid 1px #e0e0d6;background-color:#fafaf0}#preview_tab_content .previewed_entity .container{padding-top:15px}#preview_tab_content .previewed_entity.header{background-color:#f0f0e6;padding-bottom:5px;padding-top:5px}#preview_tab_content .header label{font-size:12px;color:#649664;font-weight:600}#preview_tab_content .ui-sortable-helper{background:none}#preview_tab_content ul{list-style-type:none;display:block;border:solid 2px #e0e0d6;padding:0;position:relative}#preview_tab_content .inclusion_checkbox{margin-right:7px;display:block;float:left}#preview_tab_content .preview_item{background-color:white;width:100px;padding:6px 6px 1.4em 6px;margin:4px;border:solid 1px #333;display:block;vertical-align:middle;text-align:center;position:relative}#preview_tab_content .image_container{background-repeat:no-repeat;background-position:center;background-size:cover;display:block;width:100%;height:75px}#preview_tab_content .image_container img{border:0}#preview_tab_content #entity_list li{float:left}#preview_tab_content #entity_list .ui-state-default{background:none;border:0}#preview_tab_content .placeholder{background-color:#e0ddc1;position:relative}#preview_tab_content #entity_list .exclude_container{background:white;display:block;text-align:center;margin:0 auto;color:black;font-weight:normal;height:1.4em;line-height:1.1em;font-size:.8em;position:absolute;bottom:.2em;left:0;width:100%}#preview_tab_content #entity_list .exclude_container input{vertical-align:middle;line-height:1.2em;margin:0 .5em}#preview_tab_content .header_row{margin-bottom:5px}#preview_tab_content .header_row strong{width:70px;display:inline-block}#preview_tab_content .header_row .separator{display:inline-block;margin:0 5px}#preview_tab_content .header_row .selected{font-weight:bold}#preview_tab_content #entity_list li.clear{float:none;clear:both}.clear{clear:both;float:none}table{font-size:13px}#display_settings_form table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;width:180px}#display_settings_form table td{text-align:left}#display_settings_form table textarea{height:60px}#display_settings_form textarea,#display_settings_form input[type=text],#display_settings_form input[type=number],#display_settings_form select{width:157px}#display_settings_form .ngg_slideshow_gallery_width,#display_settings_form .ngg_slideshow_gallery_height,#display_settings_form .ngg_thumbnail_dimension_width,#display_settings_form .ngg_thumbnail_dimension_height{width:65px !important}#display_settings_form .nextgen_settings_colorpicker{width:85px !important;text-align:center}.ui-tabs{visibility:visible;position:relative}.ui-tabs .ui-tabs-hide{display:block !important;visibility:hidden;position:absolute;top:-5000px}.ui-tabs .main_menu_tab{overflow:visible}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:pointer}.select2-result-label{white-space:nowrap}.select2-results{font-family:'segoe ui',Arial,sans-serif;font-size:13px}.refresh_button{float:right}
\ No newline at end of file
+.ui-helper-reset,body,html{font-size:13px}body,html,iframe{width:100%;min-height:100%;padding:0}body,html{margin:0}body{position:absolute;visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;height:100%}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#attach_to_post_tabs{border:0;background:0 0;min-height:100%;overflow:hidden}#attach_to_post_tabs div.main_menu_tab{overflow:hidden}.ui-tabs-panel{min-height:100%}.ui-widget-header{border:0;border-bottom:1px solid #dfdfdf;background:0 0}iframe{border:none;margin:0;background:0 0}#displayed_gallery_source{width:400px}#source_configuration td{vertical-align:top}#source_configuration .chzn-choices input[type=text]{height:auto!important}#slug_configuration #slug_label{width:52px}#slug_configuration #slug_column input[type=text]{width:498px}.display_type_preview{float:left;width:25%}.display_type_preview .image_container{width:100%;vertical-align:middle;text-align:center;font-size:12px;font-weight:600}.display_type_preview .image_container p{display:inline-block}#preview_tab_content{padding:.8em 1em}#preview_tab_content .previewed_entity{width:100%;border-bottom:solid 1px #E0E0D6;background-color:#FAFAF0}#preview_tab_content .previewed_entity .container{padding-top:15px}#preview_tab_content .previewed_entity.header{background-color:#F0F0E6;padding-bottom:5px;padding-top:5px}#preview_tab_content .header label{font-size:12px;color:#649664;font-weight:600}#preview_tab_content .ui-sortable-helper{background:0 0}#preview_tab_content ul{list-style-type:none;display:block;border:2px solid #E0E0D6;padding:0;position:relative}#preview_tab_content .inclusion_checkbox{margin-right:7px;display:block;float:left}#preview_tab_content .preview_item{background-color:#fff;width:100px;padding:6px 6px 1.4em;margin:4px;border:1px solid #333;display:block;vertical-align:middle;text-align:center;position:relative}#preview_tab_content .image_container{background-repeat:no-repeat;background-position:center;background-size:cover;display:block;width:100%;height:75px}#preview_tab_content .image_container img{border:0}#preview_tab_content #entity_list li{float:left}#preview_tab_content #entity_list li.clear,.clear{clear:both;float:none}#preview_tab_content #entity_list .ui-state-default{background:0 0;border:none}#preview_tab_content .placeholder{background-color:#e0ddc1;position:relative}#preview_tab_content #entity_list .exclude_container{background:#fff;display:block;text-align:center;margin:0 auto;color:#000;font-weight:400;height:1.4em;line-height:1.1em;font-size:.8em;position:absolute;bottom:.2em;left:0;width:100%}#preview_tab_content #entity_list .exclude_container input{vertical-align:middle;line-height:1.2em;margin:0 .5em}#preview_tab_content .header_row{margin-bottom:5px}#preview_tab_content .header_row strong{width:70px;display:inline-block}#preview_tab_content .header_row .separator{display:inline-block;margin:0 5px}#preview_tab_content .header_row .selected{font-weight:700}table{font-size:13px}#display_settings_form table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;width:180px}#display_settings_form table td{text-align:left}#display_settings_form table textarea{height:60px}#display_settings_form input[type=number],#display_settings_form input[type=text],#display_settings_form select,#display_settings_form textarea{width:157px}#display_settings_form .ngg_slideshow_gallery_height,#display_settings_form .ngg_slideshow_gallery_width,#display_settings_form .ngg_thumbnail_dimension_height,#display_settings_form .ngg_thumbnail_dimension_width{width:65px!important}#display_settings_form .nextgen_settings_colorpicker{width:85px!important;text-align:center}.ui-tabs{visibility:visible;position:relative}.ui-tabs .ui-tabs-hide{display:block!important;visibility:hidden;position:absolute;top:-5000px}.ui-tabs .main_menu_tab{overflow:visible}.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:pointer}.select2-result-label{white-space:nowrap}.select2-results{font-family:'segoe ui',Arial,sans-serif;font-size:13px}.refresh_button{float:right}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.js
index cbe7d70eb622af580cc8641baa0f7400d5618287..bbf0be0355ece10b516ff22f73d60860513d4cf2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('v.h=\'n-R\';b x(){j.Z.W.V.X(i)}b U(q,l,s){4 $5=c(l.T);4 7=$5.A().8()/3;4 u=$5.A().F(\'#S\').8();4 t=c(q.p).8();4 P=$5.8();2(7<u)7=u;2(7<t)7=t;2(P<7){$5.8(7);4 9=$5.g(\'h\');2(9&&9.O(\'n-6-\')==0){4 f=9.y(11);2(f){c(\'#\'+f).8(7)}}}2(s!=D)k s(q,l,7);I k C}b Y(5){4 $5=c(5);4 9=$5.g(\'h\');4 d={};2(9&&9.O(\'n-6-\')==0){4 f=9.y(11);2(f){4 m=c(p);d.w=m.w()-z;2(i.j){4 E=c(i.j.p);d.B=E.F(\'.10\').8()-z}I{d.B=m.8()}2(Q(i.K)!=\'D\'){K.1j(d)}}}k d}c(b($){$(\'#1q\').1r();$(\'.o 1p\').1o(\'G\',b(e){2($(v).g(\'h\')==\'1l\'){$(\'#12\').1m(\'1n\')}});$(\'.o\').o({1t:C,1s:1y,1x:\'1w\'});$(\'.L-1u-1v a\').G(b(e){4 r=e.M?e.M:e.1k;2($(r).j().18(\'L-19-17\')){4 6=$(r.16+\' 6\');2(6.13>0){2(6[0].N.J!=6.g(\'H\')){6[0].N.J=6.g(\'H\')}}}});$(v).14(b(e){2(e.15==1a)x();k});$(\'1b\').1h({1i:\'1g\',1f:\'1c\'}).1d({1e:1.0})});',62,97,'||if||var|frame|iframe|new_height|height|frame_id||function|jQuery|measures||tab_id|attr|id|window|parent|return|current_window|jDoc|ngg|accordion|document|parent_window|element|callback|parent_height|new_height_body|this|scrollTop|close_attach_to_post_window|substr|40|contents|scrollHeight|true|undefined|jparDoc|find|click|src|else|location|console|ui|target|contentDocument|indexOf|current_height|typeof|attach_to_post|wpbody|frameElement|adjust_height_for_frame|windowManager|activeEditor|close|ngg_get_measures_for_frame|tinyMCE|ngg_attach_to_post_window||preview_area|length|keydown|keyCode|hash|active|hasClass|state|27|body|visible|animate|opacity|visibility|static|css|position|log|srcElement|preview_tab|trigger|opened|bind|h3|attach_to_post_tabs|ngg_tabs|autoHeight|clearStyle|tabs|nav|content|heightStyle|false'.split('|'),0,{}))
+function close_attach_to_post_window(){var t=jQuery(top.document).find("#TB_window iframe").attr("src");t&&t.match("attach_to_post")?top.tb_remove():top.tinyMCE.activeEditor.windowManager.close(window)}function adjust_height_for_frame(t,e,i){var o=jQuery(e.frameElement),n=o.contents().height()/3,a=o.contents().find("#wpbody").height(),r=jQuery(t.document).height(),c=o.height();if(n<a&&(n=a),n<r&&(n=r),c<n){o.height(n);var s=o.attr("id");if(s&&0==s.indexOf("ngg-iframe-")){var l=s.substr(11);l&&jQuery("#"+l).height(n)}}return void 0==i||i(t,e,n)}function ngg_get_measures_for_frame(t){var e=jQuery(t),i=e.attr("id"),o={};if(i&&0==i.indexOf("ngg-iframe-")){var n=i.substr(11);if(n){var a=jQuery(document);if(o.scrollTop=a.scrollTop()-40,window.parent){var r=jQuery(window.parent.document);o.scrollHeight=r.find(".ngg_attach_to_post_window").height()-40}else o.scrollHeight=a.height();"undefined"!=typeof window.console&&console.log(o)}}return o}function is_visual_editor(){return 0==jQuery(top.document).find(".html-active:visible").length}function insert_into_editor(t,e){if(is_visual_editor()){var i=top.tinyMCE.activeEditor;i.selection.getNode().outerHTML.indexOf(e)>=0?jQuery(i.selection.getNode()).attr("data-shortcode",t.substring(1,t.length-1)):i.insertContent(t),i.selection.collapse(!0)}else if(myField=top.document.getElementById("content"),myValue=t,document.selection)myField.focus(),sel=document.selection.createRange(),sel.text=myValue;else if(myField.selectionStart||"0"==myField.selectionStart){var o=myField.selectionStart,n=myField.selectionEnd;myField.value=myField.value.substring(0,o)+myValue+myField.value.substring(n,myField.value.length)}else myField.value+=myValue}this.id="ngg-attach_to_post",jQuery(function(t){t("#attach_to_post_tabs").ngg_tabs(),t(".accordion h3").bind("click",function(e){"preview_tab"==t(this).attr("id")&&t("#preview_area").trigger("opened")}),t(".accordion").accordion({clearStyle:!0,autoHeight:!1,heightStyle:"content"}),t(".ui-tabs-nav a").click(function(e){var i=e.target?e.target:e.srcElement;if(t(i).parent().hasClass("ui-state-active")){var o=t(i.hash+" iframe");o.length>0&&o[0].contentDocument.location!=o.attr("src")&&(o[0].contentDocument.location=o.attr("src"))}}),t(this).keydown(function(t){27==t.keyCode&&close_attach_to_post_window()}),t("body").css({position:"static",visibility:"visible"}).animate({opacity:1})});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css
index 5751e08005569ffd3ae669a6dcbecf0d94d5e6c2..23041b4e747a13205c8ebf2f029a92782f0c82cd 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css
@@ -60,9 +60,4 @@
     border-radius: 0px;
     background: rgba(255, 255, 255, 0.6);
     border-top: none;
-}
-
-/** "Add Gallery" button */
-#ngg-media-button {
-	display: none;
-}
+}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.min.css
index be24ca4dcca60c1f01ac2e51cab5371e711feb72..83258440386d4d319ec76cc913747b7a8151baab 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.min.css
@@ -1 +1 @@
-#ngg_attach_to_post_dialog-title{display:none}#ngg_attach_to_post_dialog-head{min-height:0;height:0}#ngg_attach_to_post_dialog-head .mce-close{position:absolute;top:6px !important;right:20px !important;z-index:2}.ngg_attach_to_post_window{position:relative;border:0 !important}.ngg_attach_to_post_window .mceResize,.ngg_attach_to_post_window .mceTop,.ngg_attach_to_post_window .mceBottom,.ngg_attach_to_post_window .mceLeft,.ngg_attach_to_post_window .mceRight,.ngg_attach_to_post_window .mceCenter{background:transparent !important;border:0 !important}.ngg_attach_to_post_window .mceMiddle span{padding-top:6px !important}.ngg_attach_to_post_window .mceTop{display:block !important;height:0 !important;font-size:0 !important}.ngg_attach_to_post_window .mceClose{background:url('uploader-icons.png') !important;display:block !important;margin:0 !important;padding:0 !important;width:15px !important;height:15px !important;background-position:-100px 0 !important;position:absolute !important;top:44px !important;right:30px !important}#ngg_attach_to_post_dialog-body{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:rgba(255,255,255,.6);border-top:0}#ngg-media-button{display:none}
\ No newline at end of file
+#ngg_attach_to_post_dialog-title{display:none}#ngg_attach_to_post_dialog-head{min-height:0;height:0}#ngg_attach_to_post_dialog-head .mce-close{position:absolute;top:6px!important;right:20px!important;z-index:2}.ngg_attach_to_post_window{position:relative;border:none!important}.ngg_attach_to_post_window .mceBottom,.ngg_attach_to_post_window .mceCenter,.ngg_attach_to_post_window .mceLeft,.ngg_attach_to_post_window .mceResize,.ngg_attach_to_post_window .mceRight,.ngg_attach_to_post_window .mceTop{background:0 0!important;border:none!important}.ngg_attach_to_post_window .mceMiddle span{padding-top:6px!important}.ngg_attach_to_post_window .mceTop{display:block!important;height:0!important;font-size:0!important}.ngg_attach_to_post_window .mceClose{background:url(uploader-icons.png) -100px 0!important;display:block!important;margin:0!important;padding:0!important;width:15px!important;height:15px!important;position:absolute!important;top:44px!important;right:30px!important}#ngg_attach_to_post_dialog-body{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:rgba(255,255,255,.6);border-top:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/display_tab.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/display_tab.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4659474b7839287511882249ec6340aab9e03c4
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/display_tab.js
@@ -0,0 +1,1748 @@
+jQuery(function($){
+
+    /*****************************************************************************
+     ** NGG DEFINITION
+     ***/
+
+    /**
+     Setup a namespace for NextGEN-offered Backbone components
+     **/
+    var Ngg = {
+        Models: {},
+        Views: {}
+    };
+
+    /*****************************************************************************
+     ** NGG MODELS
+     ***/
+
+    /**
+     * Ngg.Models.SelectableItems
+     * A collection of items that can be selectable. Commonly used with the
+     * Ngg.Views.SelectTag widget (view)
+     **/
+    Ngg.Models.SelectableItems = Backbone.Collection.extend({
+        selected: function(){
+            return this.filter(function(item){
+                return item.get('selected') == true;
+            });
+        },
+
+        deselect_all: function(){
+            this.each(function(item){
+                item.set('selected', false);
+            });
+        },
+
+        selected_ids: function(){
+            return _.pluck(this.selected(), 'id');
+        },
+
+        select: function(ids){
+            if (!_.isArray(ids)) ids = [ids];
+            this.each(function(item){
+                if (_.indexOf(ids, item.id) >= 0) {
+                    item.set('selected', true);
+                }
+            });
+            this.trigger('selected');
+        }
+    });
+
+
+    /*****************************************************************************
+     ** NGG VIEWS
+     ***/
+
+    /**
+     * Ngg.Views.SelectTag
+     * Used to render a Select tag (drop-down list)
+     **/
+    Ngg.Views.SelectTag                    = Backbone.View.extend({
+        tagName: 'select',
+
+        collection: null,
+
+        multiple: false,
+
+        value_field: 'id',
+
+        text_field: 'title',
+
+        initialize: function(options) {
+            this.options = options || {};
+            _.each(this.options, function(value, key){
+                this[key] = value;
+            }, this);
+            this.collection.on('add', this.render_new_option, this);
+            this.collection.on('remove', this.remove_existing_option, this);
+            this.collection.on('reset', this.empty_list, this);
+        },
+
+        events: {
+            'change': 'selection_changed'
+        },
+
+        empty_list: function(){
+            this.$el.empty();
+        },
+
+        render_new_option: function(item){
+            this.$el.append(new this.Option({
+                model: item,
+                value_field: this.value_field,
+                text_field: this.text_field
+            }).render().el);
+        },
+
+        remove_existing_option: function(item){
+            this.$el.find("option[value='"+item.id+"']").remove();
+        },
+
+        /**
+         * After a selection has changed, set the 'selected' property for each item in the
+         * collection
+         * @triggers 'selected'
+         **/
+        selection_changed: function(){
+            // Get selected options from DOM
+            var selections = _.map(this.$el.find(':selected'), function(element){
+                return $(element).val();
+            });
+
+            // Set the 'selected' attribute for each item in the collection
+            this.collection.each(function(item){
+                if (_.indexOf(selections, item.id) >= 0 || _.indexOf(selections, item.id.toString()) >= 0)
+                    item.set('selected', true);
+                else
+                    item.set('selected', false);
+            });
+            this.collection.trigger('selected');
+        },
+
+        render: function(){
+            this.$el.empty();
+            if (this.options.include_blank) {
+                this.$el.append("<option></option>");
+            }
+            this.collection.each(function(item){
+                var option = new this.Option({
+                    model: item,
+                    value_field: this.value_field,
+                    text_field: this.text_field
+                });
+                this.$el.append(option.render().el);
+            }, this);
+            if (this.multiple) this.$el.prop('multiple', true).attr('multiple', 'multiple');
+            if (this.width) this.$el.width(this.width);
+            return this;
+        },
+
+        /**
+         * Represents an option in the Select drop-down
+         **/
+        Option: Backbone.View.extend({
+            tagName: 'option',
+
+            model: null,
+
+            initialize: function(options) {
+                this.options = options || {};
+                _.each(this.options, function(value, key){
+                    this[key] = value;
+                }, this);
+                this.model.on('change', this.render, this);
+            },
+
+            render: function(){
+                var self = this;
+                this.$el.html(this.model.get(this.text_field).replace(/\\&/g, '&').replace(/\\'/g, "'"));
+                this.$el.prop({
+                    value:    this.value_field == 'id' ? this.model.id : this.model.get(this.value_field),
+                });
+                if (self.model.get('selected') == true) {
+                    this.$el.prop('selected', true).attr('selected', 'selected');
+                }
+                return this;
+            }
+        })
+    });
+
+
+    Ngg.Views.Chosen								= Backbone.View.extend({
+        tagName: 'span',
+
+        initialize: function(options) {
+            this.options = options || {};
+            this.collection = this.options.collection;
+            this.options.include_blank = true;
+            this.select_tag = new Ngg.Views.SelectTag(this.options);
+            this.collection.on('change', this.selection_changed, this);
+        },
+
+        selection_changed: function(e){
+            if (_.isUndefined(e.changed['selected'])) this.render();
+        },
+
+        render: function(){
+
+            this.$el.append(this.select_tag.render().$el);
+            if (this.options.width)
+                this.select_tag.$el.width(this.options.width);
+
+            // Configure select2 options
+            this.select2_opts = {
+                placeholder: this.options.placeholder
+            };
+
+            // Create the select2 drop-down
+            if (this.$el.parent().length == 0) {
+                $('body').append(this.$el);
+                this.select_tag.$el.select2(this.select2_opts);
+                var container = this.select_tag.$el.select2('container').detach();
+                this.$el.append(container);
+                this.$el.detach();
+            }
+            else this.select_tag.$el.select2(this.select2_opts);
+
+            // Ensure that values are pre-populated
+            if (this.options.multiple) {
+                var selected = [];
+                _.each(this.collection.selected_ids(), function(id){
+                    selected.push(id.toString());
+                });
+                if (selected.length == 0) selected = '';
+                this.select_tag.$el.select2('val', selected);
+            }
+
+
+            // For IE, ensure that the text field has a width
+            this.$el.find('.select2-input').width(this.options.width-20);
+
+            return this;
+        }
+    });
+
+    /*****************************************************************************
+     ** DISPLAY TAB DEFINITION
+     ***/
+
+    /**
+     * Setup a namespace
+     **/
+    Ngg.DisplayTab = {
+        Models: {},
+        Views: {},
+        App: {}
+    };
+
+    /*****************************************************************************
+     * MODEL CLASSES
+     **/
+
+    /**
+     * A collection that can fetch it's entities from the server
+     **/
+    Ngg.Models.Remote_Collection			= Ngg.Models.SelectableItems.extend({
+        fetch_limit: 5000,
+        in_progress: false,
+        fetch_url:   photocrati_ajax.url,
+        action: 	 '',
+        extra_data:  {},
+
+        _create_request: function(limit, offset) {
+            var request = _.extend({}, igw_data.sec_token, {
+                action: this.action,
+                limit: limit ? limit : this.fetch_limit,
+                offset: offset ? offset : 0
+            });
+            for (var index in this.extra_data) {
+                var value = this.extra_data[index];
+                if (typeof(request[index]) === 'undefined') {
+                    request[index] = {};
+                }
+                if (typeof(value['toJSON']) !== 'undefined') {
+                    value = value.toJSON();
+                }
+                request[index] = _.extend(request[index], value);
+            }
+            return request;
+        },
+
+        _add_item: function(item) {
+            this.push(item);
+        },
+
+        fetch: 	function(limit, offset){
+            // Request the entities from the server
+            var self = this;
+            this.in_progress = true;
+            $.post(this.fetch_url, this._create_request(limit, offset), function(response){
+                if (typeof(_) == 'undefined') return;
+                if (!_.isObject(response)) response = JSON.parse(response);
+
+                if (response.items) {
+                    _.each(response.items, function(item){
+                        self._add_item(item);
+                    });
+
+                    // Continue fetching ?
+                    if (response.total >= response.limit+response.offset) {
+                        self.fetch(response.limit, response.offset+response.limit);
+                    }
+                    else {
+                        self.in_progress = false;
+                        self.trigger('finished_fetching');
+                    }
+                }
+            });
+        }
+    });
+
+
+    /**
+     * Ngg.DisplayTab.Models.Displayed_Gallery
+     * Represents the displayed gallery being edited or created by the Display Tab
+     **/
+    Ngg.DisplayTab.Models.Displayed_Gallery        = Backbone.Model.extend({
+        defaults: {
+            source: null,
+            container_ids: [],
+            entity_ids: [],
+            display_type: null,
+            display_settings: {},
+            exclusions: [],
+            sortorder: [],
+            slug: null
+        },
+
+        to_shortcode: function(){
+            retval = null;
+
+            var get_shortcode_attr= function(object, key){
+                var val = object[key];
+                if (_.isArray(val)) {
+                    val = val.length > 0 ? val.join(',') : null;
+                }
+                if (val) {
+                    val = val.toString().replace('[', '&#91;');
+                    val = val.toString().replace(']', '&#93;');
+                    return key + '="' + val +'"';
+                }
+            };
+
+            // Convert the displayed gallery to a JSON object
+            var display_type = Ngg.DisplayTab.instance.display_types.find_by_name_or_alias(this.get('display_type'));
+            var obj = this.toJSON();
+            obj.display_type = display_type.get_shortcode_value();
+
+            // Convert the displayed gallery to a shortcode
+            var snippet = '[ngg_images';
+            var val = null;
+            if ((val = get_shortcode_attr(obj, 'source'))) 			snippet += ' ' + val;
+            if ((val = get_shortcode_attr(obj, 'container_ids')))	snippet += ' ' + val;
+            if ((val = get_shortcode_attr(obj, 'entity_ids')))		snippet += ' ' + val;
+            if ((val = get_shortcode_attr(obj, 'exclusions')))		snippet += ' ' + val;
+            if ((val = get_shortcode_attr(obj, 'sortorder')))		snippet += ' ' + val;
+
+            for (var key in obj) {
+                var skipped = [
+                    'source',
+                    'container_ids',
+                    'entity_ids',
+                    'exclusions',
+                    'sortorder',
+                    '__defaults_set',
+                    'id_field'
+                ];
+
+                if (skipped.indexOf(key) > -1) continue;
+                else if (key == 'display_settings') {
+                    for (var display_key in obj[key]) {
+                        if ((val = get_shortcode_attr(obj[key], display_key))) snippet += ' ' + val;
+                    }
+                }
+                else {
+                    val = get_shortcode_attr(obj, key);
+                    if (val) snippet += ' ' + val;
+                }
+            }
+
+            snippet += ']';
+
+            return snippet;
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Source
+     * Represents an individual source used to collect displayable entities from
+     **/
+    Ngg.DisplayTab.Models.Source                = Backbone.Model.extend({
+        idAttribute: 'name',
+        defaults: {
+            title: '',
+            name: '',
+            selected: false
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Source_Collection
+     * Used as a collection of all the available sources for entities
+     **/
+    Ngg.DisplayTab.Models.Source_Collection        = Ngg.Models.SelectableItems.extend({
+        model: Ngg.DisplayTab.Models.Source,
+
+        selected_value: function(){
+            var retval = null;
+            var selected = this.selected();
+            if (selected.length > 0) {
+                retval = selected[0].get('name');
+            }
+            return retval;
+        },
+
+        find_by_name_or_alias: function(name) {
+            return this.find(function(source) {
+                return source.get('name') == name || (_.isArray(source.get('aliases')) && source.get('aliases').indexOf(name) > -1);
+            });
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Gallery
+     * Represents an individual gallery entity
+     **/
+    Ngg.DisplayTab.Models.Gallery                = Backbone.Model.extend({
+        idAttribute: igw_data.gallery_primary_key,
+        defaults: {
+            title:     '',
+            name:   ''
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Gallery_Collection
+     * Collection of gallery objects
+     **/
+    Ngg.DisplayTab.Models.Gallery_Collection    = Ngg.Models.Remote_Collection.extend({
+        model: Ngg.DisplayTab.Models.Gallery,
+
+        action: 'get_existing_galleries'
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Album
+     * Represents an individual Album object
+     **/
+    Ngg.DisplayTab.Models.Album                    = Backbone.Model.extend({
+        defaults: {
+            title: '',
+            name:  ''
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Album_Collection
+     * Used as a collection of album objects
+     **/
+    Ngg.DisplayTab.Models.Album_Collection        = Ngg.Models.Remote_Collection.extend({
+        model: Ngg.DisplayTab.Models.Album,
+
+        action: 'get_existing_albums'
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Tag
+     * Represents an individual tag object
+     **/
+    Ngg.DisplayTab.Models.Tag                    = Backbone.Model.extend({
+        defaults: {
+            title: ''
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Tag_Collection
+     * Represents a collection of tag objects
+     **/
+    Ngg.DisplayTab.Models.Tag_Collection        = Ngg.Models.Remote_Collection.extend({
+        model: Ngg.DisplayTab.Models.Tag,
+        /*
+         selected_ids: function(){
+         return this.selected().map(function(item){
+         return item.get('name');
+         });
+         },
+         */
+
+        action: 'get_existing_image_tags'
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Display_Type
+     * Represents an individual display type
+     **/
+    Ngg.DisplayTab.Models.Display_Type			= Backbone.Model.extend({
+        idAttribute: 'name',
+        defaults: {
+            title: ''
+        },
+
+        is_compatible_with_source: function(source){
+            var success = true;
+            for (index in source.get('returns')) {
+                var returned_entity_type = source.get('returns')[index];
+                if (_.indexOf(this.get('entity_types'), returned_entity_type) < 0) {
+                    success = false;
+                    break;
+                }
+            }
+            return success;
+        },
+
+
+        get_shortcode_value: function(){
+            var retval = this.id;
+
+            // TODO: Uncomment for a later version
+            // var aliases = this.get('aliases');
+            // if (_.isArray(aliases) && aliases.length > 0) {
+            //     retval = aliases[0];
+            // }
+            return retval;
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Display_Type_Collection
+     * Represents a collection of display type objects
+     **/
+    Ngg.DisplayTab.Models.Display_Type_Collection = Ngg.Models.SelectableItems.extend({
+        model: Ngg.DisplayTab.Models.Display_Type,
+
+        selected_value: function(){
+            var retval = null;
+            var selected = this.selected();
+            if (selected.length > 0) {
+                return selected[0].get('name');
+            }
+            return retval;
+        },
+
+        find_by_name_or_alias: function(name){
+            return this.find(function(display_type){
+                return display_type.get('name') == name || (_.isArray(display_type.get('aliases')) && display_type.get('aliases').indexOf(name) > -1);
+            });
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Entity
+     * Represents an entity to display on the front-end
+     **/
+    Ngg.DisplayTab.Models.Entity				= Backbone.Model.extend({
+        entity_id: function(){
+            return this.get(this.get('id_field'));
+        },
+
+        is_excluded: function() {
+            current_value = this.get('exclude');
+            if (_.isUndefined(current_value)) return false;
+            else if (_.isBoolean(current_value)) return current_value;
+            else return parseInt(current_value) == 0 ? false : true;
+        },
+
+        is_included: function(){
+            return !this.is_excluded();
+        },
+
+        is_gallery: function(){
+            retval = false;
+            if (this.get('is_gallery') == true) retval = true;
+            return retval;
+        },
+
+        is_album: function(){
+            retval = false;
+            if (this.get('is_album') == true) retval = true;
+            return retval;
+        },
+
+        is_image: function(){
+            return !this.is_album() && !this.is_gallery();
+        },
+
+        alttext: function(){
+            if (this.is_image()) {
+                return this.get('alttext');
+            }
+            else if (this.is_gallery()) {
+                return this.get('title');
+            }
+            else if (this.is_album()) {
+                return this.get('name');
+            }
+        }
+    });
+
+    /**
+     * Ngg.DisplayTab.Models.Entity_Collection
+     * Represents a collection of entities
+     **/
+    Ngg.DisplayTab.Models.Entity_Collection		= Ngg.Models.Remote_Collection.extend({
+        model: Ngg.DisplayTab.Models.Entity,
+
+        action: 'get_displayed_gallery_entities',
+
+        _add_item: function(item){
+            item.exclude = parseInt(item.exclude) == 1 ? true : false;
+            item.is_gallery = parseInt(item.is_gallery) == 1 ? true : false;
+            item.is_album = parseInt(item.is_album) == 1 ? true : false;
+            this.push(item);
+        },
+
+        entity_ids: function(){
+            return this.map(function(item){
+                return item.entity_id();
+            });
+        },
+
+        included_ids: function(){
+            return _.compact(this.map(function(item){
+                if (item.is_included()) return item.entity_id();
+            }));
+        },
+
+        excluded_ids: function() {
+            return _.compact(this.map(function(item) {
+                if (!item.is_included()) {
+                    return item.entity_id();
+                }
+            }));
+        }
+    });
+
+
+    Ngg.DisplayTab.Models.SortOrder				= Backbone.Model.extend({
+    });
+
+    Ngg.DisplayTab.Models.SortOrder_Options		= Ngg.Models.SelectableItems.extend({
+        model: Ngg.DisplayTab.Models.SortOrder
+    });
+    Ngg.DisplayTab.Models.SortDirection			= Backbone.Model.extend({
+
+    });
+    Ngg.DisplayTab.Models.SortDirection_Options = Backbone.Collection.extend({
+        model: Ngg.DisplayTab.Models.SortDirection
+    });
+
+    Ngg.DisplayTab.Models.Slug = Backbone.Model.extend({});
+
+    /*****************************************************************************
+     * VIEW CLASSES
+     **/
+
+    /**
+     * Ngg.DisplayTab.Views.Source_Config
+     * Used to populate the source configuration tab
+     **/
+    Ngg.DisplayTab.Views.Source_Config             = Backbone.View.extend({
+        el: '#source_configuration',
+
+        selected_view: null,
+
+        /**
+         * Bind to the "sources" collection to know when a selection has been made
+         * and determine what sub-view to render
+         **/
+        initialize: function(){
+            this.sources = Ngg.DisplayTab.instance.sources;
+            this.sources.on('selected', this.render, this);
+            _.bindAll(this, 'render');
+            this.render();
+        },
+
+        render: function(){
+            var chosen = new Ngg.Views.Chosen({
+                id: 'source_select',
+                collection: this.sources,
+                placeholder: 'Select a source',
+                width: 500
+            });
+
+            var template = _.template('<tr><td><label><%- sources %></label></td><td id="source_column"></td></tr>');
+            this.$el.html(template(igw_data.i18n));
+            this.$el.find('#source_column').append(chosen.render().el);
+
+            var selected = this.sources.selected();
+            if (selected.length) {
+                var view_name = _.str.capitalize(selected.pop().id)+"Source";
+                if (typeof(Ngg.DisplayTab.Views[view_name]) != 'undefined') {
+                    var selected_view = new Ngg.DisplayTab.Views[view_name];
+                    this.$el.append(selected_view.render().el);
+                }
+            }
+
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.Slug_Config = Backbone.View.extend({
+        el: '#slug_configuration',
+
+        selected_view: null,
+
+        initialize: function() {
+            this.displayed_gallery = Ngg.DisplayTab.instance.displayed_gallery;
+            this.slug = Ngg.DisplayTab.instance.displayed_gallery.get('slug');
+            this.render();
+        },
+
+        render: function() {
+            var self = this;
+
+            var input = $('<input>').prop({
+                type: 'text',
+                name: 'slug',
+                value: this.slug,
+                placeholder: igw_data.i18n.optional,
+                id: 'field_slug'
+            });
+
+            input.on('input', function() {
+                // Do not allow the following characters in the slug
+                $(this).val($(this).val().replace(/\s|\?|\\|\/|&|=|\[|]|#/gm, '-'));
+                self.displayed_gallery.set('slug', $(this).val());
+            });
+
+            // Trim extraneous leading/following dashes from the above sanitation
+            input.on('change', function() {
+                $(this).val(
+                    $(this).val()
+                        .replace(/^-*/gm, '')
+                        .replace(/-*$/gm, '')
+                );
+                self.displayed_gallery.set('slug', $(this).val());
+            });
+
+            var template = _.template('<tr><td id="slug_label"><label for="field_slug" class="tooltip" title="<%- slug_tooltip %><"><<%- slug_label %></label></td><td id="slug_column"></td></tr>');
+            this.$el.append(template(igw_data.i18n));
+            this.$el.find('#slug_column').append(input);
+
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.Display_Type_Selector = Backbone.View.extend({
+        el: '#display_type_selector',
+
+        initialize: function(){
+            this.display_types	= Ngg.DisplayTab.instance.display_types;
+            this.display_type_order_base	= Ngg.DisplayTab.instance.display_type_order_base;
+            this.display_type_order_step	= Ngg.DisplayTab.instance.display_type_order_step;
+            this.sources		= Ngg.DisplayTab.instance.sources;
+            this.render();
+        },
+
+        selection_changed: function(value){
+            var selected_type = null;
+            this.display_types.each(function(item){
+                if (item.get('name') == value) {
+                    selected_type = item;
+                    item.set('selected', true);
+                }
+                else {
+                    item.set('selected', false);
+                }
+            });
+
+            if (selected_type) {
+                var selected_source = this.sources.selected_value();
+                var default_source = selected_type.get('default_source');
+
+                // If the default source isn't selected, then select it
+                if (default_source && selected_source != default_source) {
+
+                    // Get the default source object by name
+                    default_source = this.sources.where({
+                        name: default_source
+                    });
+
+                    // Does the default source exist ?
+                    if (default_source.length > 0) {
+                        default_source = default_source[0];
+                        this.sources.deselect_all();
+                        this.sources.select(default_source.id);
+                    }
+                }
+            }
+
+            $('.display_settings_form').each(function(){
+                $this = $(this);
+                if ($this.attr('rel') == value) $this.removeClass('hidden');
+                else $this.addClass('hidden');
+            });
+        },
+
+        render: function(){
+            var selected_source = this.sources.selected();
+            var current_step = 0;
+            selected_source = selected_source.length > 0 ? selected_source[0] : false;
+            this.$el.empty();
+
+            var order_base = this.display_type_order_base;
+            var order_step = this.display_type_order_step;
+
+            this.display_types.each(function(item){
+                if (selected_source && !item.is_compatible_with_source(selected_source)) {
+
+                    // Show all display types if we're viewing the display type
+                    // selector tab
+                    var display_tab =  $('#display_type_tab_content:visible');
+                    if (display_tab.length == 0) return;
+                    else if (display_tab.css('visibility') == 'hidden') return;
+                }
+                var display_type = new this.DisplayType;
+                display_type.model = item;
+                display_type.on('selected', this.selection_changed, this);
+                if (!this.display_types.selected_value()) {
+                    item.set('selected', true);
+                    this.selection_changed(item.id);
+                }
+                var display_order = item.get('view_order');
+                if (!display_order)
+                    display_order = order_base;
+                var display_step = Math.floor(display_order / order_step);
+                if (current_step > 0 && display_step > current_step) {
+                    this.$el.append('<li class="clear" style="height: 10px" />');
+                }
+                current_step = display_step;
+                this.$el.append(display_type.render().el);
+            }, this);
+            return this;
+        },
+
+        DisplayType: Backbone.View.extend({
+            className: 'display_type_preview',
+
+            events: {
+                click: 'clicked'
+            },
+
+            clicked: function(e){
+                this.trigger('selected', this.model.get('name'));
+            },
+
+            render: function() {
+                // Create all elements
+                var image_container = $('<label style="display: block; cursor: pointer;"/>').addClass('image_container');
+
+                // 2.0.66 did not support plugins_url, 2.0.66.3+ does
+                var installed_at_version = this.model.get('installed_at_version');
+                var baseurl = photocrati_ajax.wp_plugins_url;
+                var preview_image_relpath = this.model.get('preview_image_relpath');
+                if (typeof installed_at_version == 'undefined') {
+                    baseurl = photocrati_ajax.wp_site_url;
+                    baseurl = baseurl.replace(/(.*)\/index\.php$/i, "$1");
+                    // those who installed 2.0.66.3 lack the 'installed_at_version' setting but have a
+                    // plugin-relative path
+                    if (preview_image_relpath.indexOf('/nextgen-gallery') == 0) {
+                        baseurl = photocrati_ajax.wp_plugins_url;
+                    }
+                }
+
+                var img = $('<img/>').attr({
+                    src: baseurl + '/' + preview_image_relpath,
+                    title: this.model.get('title'),
+                    alt: this.model.get('alt')
+                });
+                var inner_div = $('<div/>');
+                var radio_button = $('<input/>').prop({
+                    type: 'radio',
+                    value: this.model.get('name'),
+                    title: this.model.get('title'),
+                    name: 'display_type',
+                    checked: this.model.get('selected')
+                });
+                image_container.append(inner_div);
+                image_container.append(img);
+                inner_div.append(radio_button);
+                inner_div.append(this.model.get('title'));
+                this.$el.append(image_container);
+                return this;
+            }
+        })
+    });
+
+    Ngg.DisplayTab.Views.Preview_Area = Backbone.View.extend({
+        el: '#preview_area',
+
+        initialize: function(){
+            this.entities			= Ngg.DisplayTab.instance.entities;
+            this.sources			= Ngg.DisplayTab.instance.sources;
+            this.displayed_gallery	= Ngg.DisplayTab.instance.displayed_gallery;
+
+            // Create the entity list
+            this.entity_list		= $('<ul/>').attr('id', 'entity_list').append('<li class="clear"/>');
+
+            // When an entity is added/removed to the collection, we'll add/remove it on the DOM
+            this.entities.on('add', this.render_entity, this);
+            this.entities.on('remove', this.remove_entity, this);
+
+            // When the collection is reset, we add a list item to clear the float. This is important -
+            // jQuery sortable() will break without the cleared element.
+            this.entities.on('reset', this.entities_reset, this);
+
+            // When jQuery sortable() is finished sorting, we need to adjust the order of models in the collection
+            this.entities.on('change:sortorder', function(model){
+                this.entities.remove(model, {silent: true});
+                this.entities.add(model, {at: model.changed.sortorder, silent: true});
+                this.displayed_gallery.set('sortorder', this.entities.entity_ids());
+                if (typeof(console) != 'undefined' && typeof(console.log) != 'undefined') {
+                    console.log(this.entities.entity_ids());
+                }
+                this.displayed_gallery.set('order_by', 'sortorder');
+            }, this);
+
+            // Reset when the source changes
+            this.sources.on('selected', this.render, this);
+
+            this.render();
+        },
+
+        events: {
+            opened: 'entities_reset'
+        },
+
+        entities_reset: function(e){
+            this.entities.reset(null, {silent: true});
+            this.entity_list.empty().append('<li class="clear"/>');
+            if (!this.entities.in_progress) this.entities.fetch();
+        },
+
+        render_entity: function(model){
+            var entity_element = new this.EntityElement({model: model});
+            this.entity_list.find('.clear').before(entity_element.render().$el);
+            entity_element.$el.css('visibility', 'hidden');
+            setTimeout(function(){
+                entity_element.$el.css('visibility', 'visible');
+            }, 0);
+            if (this.$el.find('.no_entities').length == 1) {
+                this.render();
+            }
+            else if (this.entities.length > 1) {
+                this.entity_list.sortable('refresh');
+            }
+        },
+
+        remove_entity: function(model){
+            var id = this.id = model.get('id_field')+'_'+model.entity_id();
+            var entity = this.entity_list.find('#'+id).remove();
+            this.entity_list.sortable('refresh');
+            if (this.entities.length == 0) {
+                this.render_no_images_notice();
+            }
+        },
+
+        render_no_images_notice: function(){
+            this.$el.empty();
+            this.$el.append("<p class='no_entities'>"+igw_data.i18n.no_entities+"</p>");
+        },
+
+        render: function(){
+            this.$el.empty();
+            if (this.entities.length > 0 && this.displayed_gallery.get('container_ids').length > 0) {
+
+                // Render header rows
+                this.$el.append(new this.RefreshButton({
+                    entities: this.entities
+                }).render().el);
+                this.$el.append(new this.SortButtons({
+                    entities: this.entities,
+                    displayed_gallery: this.displayed_gallery,
+                    sources: this.sources
+                }).render().el);
+                this.$el.append(new this.ExcludeButtons({
+                    entities: this.entities
+                }).render().el);
+
+                this.$el.append(this.entity_list);
+
+                // Activate jQuery Sortable for the entity list
+                this.entity_list.sortable({
+                    placeholder: 'placeholder',
+                    forcePlaceholderSize: true,
+                    containment: 'parent',
+                    opacity: 0.7,
+                    revert: true,
+                    dropOnEmpty: true,
+                    start: function(e, ui){
+                        ui.placeholder.css({
+                            height: ui.item.height()
+                        });
+                        return true;
+                    },
+                    stop: function(e, ui) {
+                        ui.item.trigger('drop', ui.item.index());
+                    }
+                });
+                this.entity_list.disableSelection();
+            }
+            else {
+                this.render_no_images_notice();
+            }
+            return this;
+        },
+
+        RefreshButton: Backbone.View.extend({
+            className: 'refresh_button',
+
+            tagName: 'input',
+
+            label: 'Refresh',
+
+            events: {
+                click: 'clicked'
+            },
+
+            clicked: function(){
+                this.entities.reset();
+            },
+
+            initialize: function(options) {
+                this.options = options || {};
+                _.each(this.options, function(value, key){
+                    this[key] = value;
+                }, this);
+            },
+
+            render: function(){
+                this.$el.attr({
+                    value: this.label,
+                    type:  'button'
+                });
+                return this;
+            }
+        }),
+
+        ExcludeButtons: Backbone.View.extend({
+            className: 'header_row',
+
+            initialize: function(options) {
+                this.options = options || {};
+                _.each(this.options, function(value, key){
+                    this[key] = value;
+                }, this);
+            },
+
+            render: function(){
+                this.$el.empty();
+                this.$el.append('<strong>Exclude:</strong>');
+                var all_button = new this.Button({
+                    value: true,
+                    text: 'All',
+                    entities: this.entities
+                });
+                this.$el.append(all_button.render().el);
+                this.$el.append('<span class="separator">|</span>');
+                var none_button = new this.Button({
+                    value: false,
+                    text: 'None',
+                    entities: this.entities
+                });
+                this.$el.append(none_button.render().el);
+                return this;
+            },
+
+            Button: Backbone.View.extend({
+                tagName: 'a',
+
+                value: 1,
+
+                text: '',
+
+                events: {
+                    click: 'clicked'
+                },
+
+                initialize: function(options) {
+                    this.options = options || {};
+                    _.each(this.options, function(value, key){
+                        this[key] = value;
+                    }, this);
+                },
+
+                clicked: function(e){
+                    e.preventDefault();
+                    this.entities.each(function(item){
+                        item.set('exclude', this.value);
+                    }, this);
+                },
+
+                render: function(){
+                    this.$el.text(this.text).attr('href', '#');
+                    return this;
+                }
+            })
+        }),
+
+        SortButtons: Backbone.View.extend({
+            className: 'header_row',
+
+            initialize: function(options) {
+                this.options = options || {};
+                _.each(this.options, function(value, key){
+                    this[key] = value;
+                }, this);
+                this.sortorder_options = new Ngg.DisplayTab.Models.SortOrder_Options();
+                this.sortorder_options.on('change:selected', this.sortoption_changed, this);
+
+                // Create sort directions and listen for selection changes
+                this.sortdirection_options = new Ngg.DisplayTab.Models.SortDirection_Options([
+                    {
+                        value: 'ASC',
+                        title: 'Ascending',
+                        selected: this.displayed_gallery.get('order_direction') == 'ASC'
+                    },
+                    {
+                        value: 'DESC',
+                        title: 'Descending',
+                        selected: this.displayed_gallery.get('order_direction') == 'DESC'
+                    }
+                ]);
+                this.sortdirection_options.on('change:selected', this.sortdirection_changed, this);
+                this.displayed_gallery.on('change:order_by', this.displayed_gallery_order_changed, this);
+                this.displayed_gallery.on('change.order_direction', this.displayed_gallery_order_dir_changed, this);
+            },
+
+            populate_sorting_fields: function(){
+                // We display difference sorting buttons depending on what type of entities we're dealing with.
+                var entity_types = this.sources.selected().pop().get('returns');
+                if (_.indexOf(entity_types, 'image') !== -1) {
+                    this.fill_image_sortorder_options();
+                }
+                else {
+                    this.fill_gallery_sortorder_options();
+                }
+            },
+
+            create_sortorder_option: function(name, title){
+                return new Ngg.DisplayTab.Models.SortOrder({
+                    name: name,
+                    title: title,
+                    value: name,
+                    selected: this.displayed_gallery.get('order_by') == name
+                });
+            },
+
+            fill_image_sortorder_options: function(){
+                this.sortorder_options.reset();
+                this.sortorder_options.push(this.create_sortorder_option('', 'None'));
+                this.sortorder_options.push(this.create_sortorder_option('sortorder', 'Custom'));
+                this.sortorder_options.push(this.create_sortorder_option(Ngg.DisplayTab.instance.image_key, 'Image ID'));
+                this.sortorder_options.push(this.create_sortorder_option('filename', 'Filename'));
+                this.sortorder_options.push(this.create_sortorder_option('alttext', 'Alt/Title Text'));
+                this.sortorder_options.push(this.create_sortorder_option('imagedate', 'Date/Time'));
+            },
+
+            fill_gallery_sortorder_options: function(){
+                this.sortorder_options.reset();
+                this.sortorder_options.push(this.create_sortorder_option('', 'None'));
+                this.sortorder_options.push(this.create_sortorder_option('sortorder' ,'Custom'));
+                this.sortorder_options.push(this.create_sortorder_option('name', 'Name'));
+                this.sortorder_options.push(this.create_sortorder_option('galdesc', 'Description'));
+            },
+
+            displayed_gallery_order_changed: function(e){
+                this.sortorder_options.findWhere({value: e.get('order_by')}).set('selected', true);
+            },
+
+
+            displayed_gallery_order_dir_changed: function(e){
+                this.sortdirection_options.findWhere({value: e.get('order_direction')}).set('selected', true);
+            },
+
+            sortoption_changed: function(model){
+                this.sortorder_options.each(function(item){
+                    item.set('selected', model.get('value') == item.get('value') ? true : false, {silent: true});
+                });
+
+                this.displayed_gallery.set('sortorder', []);
+
+                var sort_by = model.get('value');
+
+                // If "None" was selected, then clear the "sortorder" property
+                if (model.get('value').length == 0) {
+                    sort_by = 'sortorder';
+                }
+
+                // Change the "sort by" parameter
+                this.displayed_gallery.set('order_by', sort_by);
+
+                this.entities.reset();
+                this.$el.find('a.sortorder').each(function(){
+                    var $item = $(this);
+                    if ($item.attr('value') == model.get('value'))
+                        $item.addClass('selected');
+                    else
+                        $item.removeClass('selected');
+                });
+            },
+
+            sortdirection_changed: function(model){
+
+                this.sortdirection_options.each(function(item){
+                    item.set('selected', model.get('value') == item.get('value') ? true : false, {silent: true});
+                });
+                this.displayed_gallery.set('order_direction', model.get('value'));
+                this.entities.reset();
+                this.$el.find('a.sortdirection').each(function(){
+                    var $item = $(this);
+                    if ($item.attr('value') == model.get('value'))
+                        $item.addClass('selected');
+                    else
+                        $item.removeClass('selected');
+                });
+            },
+
+            render: function(){
+                this.$el.empty();
+                this.populate_sorting_fields();
+                this.$el.append('<strong>Sort By:</strong>');
+                this.sortorder_options.each(function(item, index){
+                    var button = new this.Button({model: item, className: 'sortorder'});
+                    this.$el.append(button.render().el);
+                    if (this.sortorder_options.length-1 > index) {
+                        this.$el.append('<span class="separator">|</span>');
+                    }
+                }, this);
+                this.$el.append('<strong style="margin-left: 30px;">Order By:</strong>');
+                this.sortdirection_options.each(function(item, index){
+                    var button = new this.Button({model: item, className: 'sortdirection'});
+                    this.$el.append(button.render().el);
+                    if (this.sortdirection_options.length-1 > index) {
+                        this.$el.append('<span class="separator">|</span>');
+                    }
+                }, this);
+                return this;
+            },
+
+            Button: Backbone.View.extend({
+                tagName: 'a',
+
+                initialize: function(options) {
+                    this.options = options || {};
+                    _.each(this.options, function(value, key){
+                        this[key] = value;
+                    }, this);
+                },
+
+                events: {
+                    click: 'clicked'
+                },
+
+                clicked: function(e){
+                    e.preventDefault();
+                    this.model.set('selected', true);
+                },
+
+                render: function(){
+                    this.$el.prop({
+                        value: this.model.get('value'),
+                        href: '#'
+                    });
+                    this.$el.text(this.model.get('title'));
+                    if (this.model.get('selected')) this.$el.addClass('selected');
+                    return this;
+                }
+            })
+        }),
+
+        // Individual entity in the preview area
+        EntityElement: Backbone.View.extend({
+            tagName: 'li',
+
+            events: {
+                drop: 'item_dropped'
+            },
+
+            initialize: function(options) {
+                this.options = options || {};
+                _.each(this.options, function(value, key){
+                    this[key] = value;
+                }, this);
+                this.initTime = new Date().getTime();
+                this.model.on('change', this.render, this);
+                if (this.model.get('sortorder') == 0) {
+                    this.model.set('sortorder', -1, {silent: true});
+                }
+                this.id = this.model.get('id_field')+'_'+this.model.entity_id()
+            },
+
+            item_dropped: function(e, index){
+                Ngg.DisplayTab.instance.displayed_gallery.set('order_by', 'sortorder');
+                //Ngg.DisplayTab.instance.displayed_gallery.set('order_direction', 'ASC');
+                this.model.set('sortorder', index);
+            },
+
+            render: function(){
+                this.$el.empty();
+                var preview_item = $('<div/>').addClass('preview_item');
+                var image_container = $('<div/>').addClass('image_container');
+                var alt_text = this.model.alttext().replace(/\\&/g, '&').replace(/\\'/g, "'");
+                var timestamp = this.initTime;
+                image_container.attr({
+                    title: alt_text,
+                    style: "background-image: url('"+this.model.get('thumb_url')+"?timestamp"+timestamp+"')"
+                });
+
+                this.$el.append(preview_item).addClass('ui-state-default');
+
+                preview_item.append(image_container);
+
+                // Add exclude checkbox
+                var exclude_container = $('<div/>').addClass('exclude_container');
+                var exclude_label = $('<label/>');
+                exclude_label.append(igw_data.i18n.exclude_question);
+                var exclude_checkbox = new this.ExcludeCheckbox({model: this.model});
+                exclude_label.append(exclude_checkbox.render().el);
+                exclude_container.append(exclude_label);
+                preview_item.append(exclude_container);
+                return this;
+            },
+
+            ExcludeCheckbox: Backbone.View.extend({
+                tagName: 'input',
+
+                events: {
+                    'change': 'entity_excluded'
+                },
+
+                type_set: false,
+
+                entity_excluded: function(e){
+                    this.model.set('exclude', e.target.checked);
+                },
+
+                initialize: function(options) {
+                    this.options = options || {};
+                    _.each(this.options, function(value, key){
+                        this[key] = value;
+                    }, this);
+                    this.model.on('change:exclude', this.render, this);
+                },
+
+                render: function(){
+                    if (!this.type_set) {
+                        this.$el.attr('type', 'checkbox');
+                        this.type_set = true;
+                    }
+                    if (this.model.is_excluded()) this.$el.prop('checked', true);
+                    else this.$el.prop('checked', false);
+                    return this;
+                }
+            })
+        })
+    });
+
+
+    // Additional source configuration views. These will be rendered dynamically by PHP.
+    // Adapters will add them.
+    Ngg.DisplayTab.Views.GalleriesSource = Backbone.View.extend({
+        tagName: 'tbody',
+
+        initialize: function(){
+            this.galleries = Ngg.DisplayTab.instance.galleries;
+        },
+
+        render: function(){
+            var select = new Ngg.Views.Chosen({
+                collection: this.galleries,
+                placeholder: igw_data.i18n.select_gallery,
+                multiple: true,
+                width: 500
+            });
+            var html = $('<tr><td><label>'+igw_data.i18n.galleries+'</label></td><td class="galleries_column"></td></tr>');
+            this.$el.empty();
+            this.$el.append(html);
+            this.$el.find('.galleries_column').append(select.render().el);
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.AlbumsSource = Backbone.View.extend({
+        tagName: 'tbody',
+
+        initialize: function(){
+            this.albums 	= Ngg.DisplayTab.instance.albums;
+        },
+
+        render: function(){
+            var album_select = new Ngg.Views.Chosen({
+                collection: this.albums,
+                multiple: true,
+                placeholder: 'Select an album',
+                text_field: 'name',
+                width: 500
+            });
+            this.$el.empty();
+            this.$el.append('<tr><td><label>'+igw_data.i18n.albums+'</label></td><td class="albums_column"></td></tr>');
+            this.$el.find('.albums_column').append(album_select.render().el);
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.TagsSource = Backbone.View.extend({
+        tagName: 'tbody',
+
+        initialize: function(){
+            this.tags	= Ngg.DisplayTab.instance.tags;
+        },
+
+        render: function(){
+            var tag_select = new Ngg.Views.Chosen({
+                collection: this.tags,
+                multiple: true,
+                placeholder: 'Select a tag',
+                text_field: 'name',
+                width: 500
+            });
+            this.$el.empty();
+            this.$el.append('<tr><td><label>Tags</label></td><td class="tags_column"></td></tr>');
+            this.$el.find('.tags_column').append(tag_select.render().el);
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.Recent_imagesSource = Backbone.View.extend({
+        tagName: 'tbody',
+
+        initialize: function(){
+            this.displayed_gallery		= Ngg.DisplayTab.instance.displayed_gallery;
+            this.maximum_entity_count	= Ngg.DisplayTab.instance.displayed_gallery.get('maximum_entity_count');
+            this.displayed_gallery.set('container_ids', []);
+        },
+
+        render: function(){
+            var self = this;
+            var edit_field = $('<input/>').prop({
+                type: 'text',
+                value: this.maximum_entity_count,
+                name: 'maximum_entity_count'
+            });
+
+            edit_field.change(function () {
+                self.displayed_gallery.set('maximum_entity_count', $(this).val());
+            });
+
+            this.$el.empty();
+            this.$el.append('<tr><td><label># of Images To Display</label></td><td class="recent_images_column"></td></tr>');
+            this.$el.find('.recent_images_column').append(edit_field);
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.Random_imagesSource = Backbone.View.extend({
+        tagName: 'tbody',
+
+        initialize: function(){
+            this.displayed_gallery		= Ngg.DisplayTab.instance.displayed_gallery;
+            this.maximum_entity_count	= Ngg.DisplayTab.instance.displayed_gallery.get('maximum_entity_count');
+            this.displayed_gallery.set('container_ids', []);
+        },
+
+        render: function(){
+            var self = this;
+            var edit_field = $('<input/>').prop({
+                type: 'text',
+                value: this.maximum_entity_count,
+                name: 'maximum_entity_count'
+            });
+
+            edit_field.change(function () {
+                self.displayed_gallery.set('maximum_entity_count', $(this).val());
+            });
+
+            this.$el.empty();
+            this.$el.append('<tr><td><label># of Images To Display</label></td><td class="random_images_column"></td></tr>');
+            this.$el.find('.random_images_column').append(edit_field);
+            return this;
+        }
+    });
+
+    Ngg.DisplayTab.Views.SaveButton = Backbone.View.extend({
+        el: '#save_displayed_gallery',
+
+        errors_el: '#errors',
+
+        displayed_gallery: null,
+
+        events: {
+            click: 'clicked'
+        },
+
+        initialize: function(){
+            this.displayed_gallery	= Ngg.DisplayTab.instance.displayed_gallery;
+            this.entities			= Ngg.DisplayTab.instance.entities;
+            this.render();
+        },
+
+        clicked: function(){
+            this.set_display_settings();
+            insert_into_editor(this.displayed_gallery.to_shortcode(), (this.displayed_gallery.id ? this.displayed_gallery.id : igw_data.shortcode_ref));
+            close_attach_to_post_window();
+        },
+
+        set_display_settings: function(){
+            var display_type = this.displayed_gallery.get('display_type');
+            if (display_type) {
+                // Collect display settings
+                var form = $("form[rel='"+display_type+"']");
+                var display_settings	= (function(item){
+                    var obj = {};
+                    $.each(item.serializeArray(), function(key, item) {
+                        var parts = item.name.split('[');
+                        var current_obj = obj;
+                        for (var i=0; i<parts.length; i++) {
+                            var part = parts[i].replace(/\]$/, '');
+                            if (!current_obj[part]) {
+                                if (i == parts.length-1)
+                                    current_obj[part] = item.value;
+                                else
+                                    current_obj[part] = {};
+                            }
+                            current_obj = current_obj[part];
+                        }
+                    });
+                    return obj;
+                })(form);
+
+                // Set display settings for displayed gallery
+                this.displayed_gallery.set('display_settings', display_settings[display_type]);
+            }
+        },
+
+        render: function(){
+            this.$el.css('z-index', 1000);
+            return this;
+        }
+    });
+
+    /*****************************************************************************
+     * APPLICATION
+     **/
+    Ngg.DisplayTab.App = Backbone.View.extend({
+        /**
+         * Initializes the DisplayTab object
+         **/
+        initialize: function(){
+            // TODO: We're currently fetching ALL galleries, albums, and tags
+            // in one shot. Instead, we should display the displayed_gallery's
+            // containers, if there are any, otherwise get the first 100 or so.
+            // We can then use AJAX to fetch the rest of batches.
+            this.displayed_gallery = new Ngg.DisplayTab.Models.Displayed_Gallery(igw_data.displayed_gallery);
+            this.original_displayed_gallery = new Ngg.DisplayTab.Models.Displayed_Gallery(igw_data.displayed_gallery);
+            this.galleries = new Ngg.DisplayTab.Models.Gallery_Collection(igw_data.galleries);
+            this.albums = new Ngg.DisplayTab.Models.Album_Collection(igw_data.albums);
+            this.tags = new Ngg.DisplayTab.Models.Tag_Collection(igw_data.tags);
+            this.sources = new Ngg.DisplayTab.Models.Source_Collection(igw_data.sources);
+            this.display_types = new Ngg.DisplayTab.Models.Display_Type_Collection(igw_data.display_types);
+            this.display_type_order_base = igw_data.display_type_priority_base;
+            this.display_type_order_step = igw_data.display_type_priority_step;
+            this.entities = new Ngg.DisplayTab.Models.Entity_Collection();
+            this.entities.extra_data.displayed_gallery = this.displayed_gallery;
+            this.image_key = igw_data.image_primary_key;
+
+            // Pre-select current displayed gallery values
+            if (this.displayed_gallery.get('source')) {
+
+                // Pre-select source
+                if (this.displayed_gallery.get('source')) {
+                    var source = this.sources.find_by_name_or_alias(this.displayed_gallery.get('source'));
+                    if (source) source.set('selected', true);
+                }
+
+                // Pre-select containers
+                if (this.displayed_gallery.get('container_ids')) {
+                    _.each(this.displayed_gallery.get('container_ids'), function(id){
+                        var container = this[this.displayed_gallery.get('source')].find(function(item){
+                            return item.id == id;
+                        }, this);
+                        if (container) container.set('selected', true);
+                    }, this);
+                }
+
+                // Pre-select display type
+                if ((this.displayed_gallery.get('display_type'))) {
+                    var display_type = this.display_types.find_by_name_or_alias(this.displayed_gallery.get('display_type'));
+                    if (display_type) {
+                        display_type.set('selected', true);
+                        this.displayed_gallery.set('display_type', display_type.get('name'));
+                    }
+                }
+            }
+
+            // Bind to the 'selected' event for each of the collections, and update the displayed
+            // gallery object's 'container_ids' attribute when something has changed
+            collections = ['galleries', 'albums', 'tags'];
+            _.each(collections, function(collection){
+                this[collection].on('selected', function(){this.update_selected_containers(collection);}, this);
+            }, this);
+
+            // Bind to the 'selected' event for the display types collection, updating the displayed gallery
+            this.display_types.on('change:selected', function(){
+                this.displayed_gallery.set('display_type', this.display_types.selected_value());
+            }, this);
+
+            // Bind to the 'selected' event for the source, updating the displayed gallery
+            this.sources.on('selected', function(){
+                this.displayed_gallery.set('source', this.sources.selected_value());
+
+                // If the source changed, and it's not the set to the original value, then
+                // exclusions get's set to []
+                if (this.sources.selected_value() != this.original_displayed_gallery.get('source'))
+                    this.displayed_gallery.set('exclusions', this.entities.excluded_ids());
+
+                // Otherwise, we revert to the original exclusions
+                else
+                    this.displayed_gallery.set('exclusions', this.original_displayed_gallery.get('exclusions'));
+
+                // special exemption: these should default to a reasonable limit
+                if (this.sources.selected_value() == 'random_images' || this.sources.selected_value() == 'recent_images') {
+                    this.displayed_gallery.set('maximum_entity_count', 20);
+                }
+
+                // Reset everything else
+                this.galleries.deselect_all();
+                this.albums.deselect_all();
+                this.tags.deselect_all();
+
+                // If the selected source is incompatible with the current display type, then
+                // display a new list
+                var selected_display_type = this.display_types.selected();
+                var selected_source		  = this.sources.selected();
+                if (selected_display_type.length > 0 && selected_source.length > 0) {
+                    selected_display_type = selected_display_type[0];
+                    selected_source       = selected_source[0];
+                    if (!selected_display_type.is_compatible_with_source(selected_source))
+                        this.display_types.deselect_all();
+                    if (this.display_type_selector) this.display_type_selector.render();
+                }
+                if (this.preview_area) this.preview_area.render();
+            }, this);
+
+            // Synchronize changes made to entities with the displayed gallery
+            this.entities.on('change:exclude finished_fetching', function(){
+                //this.displayed_gallery.set('sortorder', this.entities.entity_ids());
+                this.displayed_gallery.set('exclusions', this.entities.excluded_ids());
+            }, this);
+
+            // Monitor events in other tabs and respond as appropriate
+            if (window.Frame_Event_Publisher) {
+                var app = this;
+
+                // New gallery event
+                Frame_Event_Publisher.listen_for('attach_to_post:new_gallery', function(){
+                    app.galleries.reset();
+                    app.galleries.fetch();
+                });
+
+                // A change has been made using the "Manage Galleries" page
+                Frame_Event_Publisher.listen_for('attach_to_post:manage_galleries attach_to_post:manage_images', function(data){
+
+                    // Refresh the list of galleries
+                    app.galleries.reset();
+                    app.galleries.fetch();
+
+                    // If we're viewing galleries or images, then we need to refresh the entity list
+                    var selected_source = app.sources.selected().pop();
+                    if (selected_source) {
+                        if (_.indexOf(selected_source.get('returns'), 'image') >= 0 ||
+                            _.indexOf(selected_source.get('returns'), 'gallery')) {
+                            app.entities.reset();
+                        }
+                    }
+                });
+
+                // A change has been made using the "Manage Albums" page
+                Frame_Event_Publisher.listen_for('attach_to_post:manage_album', function(data){
+                    // Refresh the list of albums
+                    app.albums.reset();
+                    app.albums.fetch();
+
+                    // If we're viewing albums, then we need to refresh the entity list
+                    var selected_source = app.sources.selected().pop();
+                    if (selected_source) {
+                        if (_.indexOf(selected_source.get('returns'), 'album') >= 0) {
+                            app.entities.reset();
+                        }
+                    }
+                });
+
+                // A change has been made using the "Manage Tags" page
+                Frame_Event_Publisher.listen_for('attach_to_post:manage_tags attach_to_post:manage_images', function(data){
+                    // Refresh the list of tags
+                    app.tags.reset();
+                    app.tags.fetch();
+
+                    // If we're viewing galleries or images, then we need to refresh the entity list
+                    var selected_source = app.sources.selected().pop();
+                    if (selected_source) {
+                        if (_.indexOf(selected_source.get('returns'), 'image') >= 0 ||
+                            _.indexOf(selected_source.get('returns'), 'gallery')) {
+                            app.entities.reset();
+                        }
+                    }
+                });
+
+                // Thumbnail modified event
+                Frame_Event_Publisher.listen_for('attach_to_post:thumbnail_modified', function(data){
+                    var selected_source = app.sources.selected().pop();
+                    var image_id = data.image[data.image.id_field];
+
+                    if (selected_source) {
+
+                        // Does the currently selected source return images? If so,
+                        // check refresh the modified image's thumbnail
+                        if(_.indexOf(selected_source.get('returns'), 'image') >= 0) {
+                            var image = app.entities.find(function(item){
+                                return parseInt(item.entity_id()) == parseInt(image_id);
+                            }, this);
+                            if (image) image.set('thumb_url', data.image.thumb_url);
+                        }
+
+                        // It must be an album or gallery
+                        else {
+                            var entity = app.entities.find(function(item){
+                                return parseInt(item.get('previewpic')) == image_id;
+                            }, this);
+                            if (entity) entity.trigger('change');
+                        }
+                    }
+                });
+            }
+        },
+
+        // Updates the selected container_ids for the displayed gallery
+        update_selected_containers: function(collection){
+            this.displayed_gallery.set('container_ids', this[collection].selected_ids());
+        },
+
+        render: function(){
+            this.display_type_selector = new Ngg.DisplayTab.Views.Display_Type_Selector();
+            new Ngg.DisplayTab.Views.Source_Config();
+            new Ngg.DisplayTab.Views.Slug_Config();
+            this.preview_area = new Ngg.DisplayTab.Views.Preview_Area();
+            new Ngg.DisplayTab.Views.SaveButton();
+        }
+    });
+    Ngg.DisplayTab.instance = new Ngg.DisplayTab.App();
+    Ngg.DisplayTab.instance.render();
+
+    window.Ngg = Ngg;
+
+    // Invoke styling libraries
+    $('span.tooltip, label.tooltip').tooltip();
+});
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/display_tab.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/display_tab.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8152b2dbb457ff89df50ac2257fd59485eae1ed
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/display_tab.min.js
@@ -0,0 +1 @@
+jQuery(function(e){var t={Models:{},Views:{}};t.Models.SelectableItems=Backbone.Collection.extend({selected:function(){return this.filter(function(e){return 1==e.get("selected")})},deselect_all:function(){this.each(function(e){e.set("selected",!1)})},selected_ids:function(){return _.pluck(this.selected(),"id")},select:function(e){_.isArray(e)||(e=[e]),this.each(function(t){_.indexOf(e,t.id)>=0&&t.set("selected",!0)}),this.trigger("selected")}}),t.Views.SelectTag=Backbone.View.extend({tagName:"select",collection:null,multiple:!1,value_field:"id",text_field:"title",initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this),this.collection.on("add",this.render_new_option,this),this.collection.on("remove",this.remove_existing_option,this),this.collection.on("reset",this.empty_list,this)},events:{change:"selection_changed"},empty_list:function(){this.$el.empty()},render_new_option:function(e){this.$el.append(new this.Option({model:e,value_field:this.value_field,text_field:this.text_field}).render().el)},remove_existing_option:function(e){this.$el.find("option[value='"+e.id+"']").remove()},selection_changed:function(){var t=_.map(this.$el.find(":selected"),function(t){return e(t).val()});this.collection.each(function(e){_.indexOf(t,e.id)>=0||_.indexOf(t,e.id.toString())>=0?e.set("selected",!0):e.set("selected",!1)}),this.collection.trigger("selected")},render:function(){return this.$el.empty(),this.options.include_blank&&this.$el.append("<option></option>"),this.collection.each(function(e){var t=new this.Option({model:e,value_field:this.value_field,text_field:this.text_field});this.$el.append(t.render().el)},this),this.multiple&&this.$el.prop("multiple",!0).attr("multiple","multiple"),this.width&&this.$el.width(this.width),this},Option:Backbone.View.extend({tagName:"option",model:null,initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this),this.model.on("change",this.render,this)},render:function(){var e=this;return this.$el.html(this.model.get(this.text_field).replace(/\\&/g,"&").replace(/\\'/g,"'")),this.$el.prop({value:"id"==this.value_field?this.model.id:this.model.get(this.value_field)}),1==e.model.get("selected")&&this.$el.prop("selected",!0).attr("selected","selected"),this}})}),t.Views.Chosen=Backbone.View.extend({tagName:"span",initialize:function(e){this.options=e||{},this.collection=this.options.collection,this.options.include_blank=!0,this.select_tag=new t.Views.SelectTag(this.options),this.collection.on("change",this.selection_changed,this)},selection_changed:function(e){_.isUndefined(e.changed.selected)&&this.render()},render:function(){if(this.$el.append(this.select_tag.render().$el),this.options.width&&this.select_tag.$el.width(this.options.width),this.select2_opts={placeholder:this.options.placeholder},0==this.$el.parent().length){e("body").append(this.$el),this.select_tag.$el.select2(this.select2_opts);var t=this.select_tag.$el.select2("container").detach();this.$el.append(t),this.$el.detach()}else this.select_tag.$el.select2(this.select2_opts);if(this.options.multiple){var i=[];_.each(this.collection.selected_ids(),function(e){i.push(e.toString())}),0==i.length&&(i=""),this.select_tag.$el.select2("val",i)}return this.$el.find(".select2-input").width(this.options.width-20),this}}),t.DisplayTab={Models:{},Views:{},App:{}},t.Models.Remote_Collection=t.Models.SelectableItems.extend({fetch_limit:5e3,in_progress:!1,fetch_url:photocrati_ajax.url,action:"",extra_data:{},_create_request:function(e,t){var i=_.extend({},igw_data.sec_token,{action:this.action,limit:e?e:this.fetch_limit,offset:t?t:0});for(var s in this.extra_data){var l=this.extra_data[s];"undefined"==typeof i[s]&&(i[s]={}),"undefined"!=typeof l.toJSON&&(l=l.toJSON()),i[s]=_.extend(i[s],l)}return i},_add_item:function(e){this.push(e)},fetch:function(t,i){var s=this;this.in_progress=!0,e.post(this.fetch_url,this._create_request(t,i),function(e){"undefined"!=typeof _&&(_.isObject(e)||(e=JSON.parse(e)),e.items&&(_.each(e.items,function(e){s._add_item(e)}),e.total>=e.limit+e.offset?s.fetch(e.limit,e.offset+e.limit):(s.in_progress=!1,s.trigger("finished_fetching"))))})}}),t.DisplayTab.Models.Displayed_Gallery=Backbone.Model.extend({defaults:{source:null,container_ids:[],entity_ids:[],display_type:null,display_settings:{},exclusions:[],sortorder:[],slug:null},to_shortcode:function(){retval=null;var e=function(e,t){var i=e[t];if(_.isArray(i)&&(i=i.length>0?i.join(","):null),i)return i=i.toString().replace("[","&#91;"),i=i.toString().replace("]","&#93;"),t+'="'+i+'"'},i=t.DisplayTab.instance.display_types.find_by_name_or_alias(this.get("display_type")),s=this.toJSON();s.display_type=i.get_shortcode_value();var l="[ngg_images",n=null;(n=e(s,"source"))&&(l+=" "+n),(n=e(s,"container_ids"))&&(l+=" "+n),(n=e(s,"entity_ids"))&&(l+=" "+n),(n=e(s,"exclusions"))&&(l+=" "+n),(n=e(s,"sortorder"))&&(l+=" "+n);for(var a in s){var o=["source","container_ids","entity_ids","exclusions","sortorder","__defaults_set","id_field"];if(!(o.indexOf(a)>-1))if("display_settings"==a)for(var r in s[a])(n=e(s[a],r))&&(l+=" "+n);else n=e(s,a),n&&(l+=" "+n)}return l+="]"}}),t.DisplayTab.Models.Source=Backbone.Model.extend({idAttribute:"name",defaults:{title:"",name:"",selected:!1}}),t.DisplayTab.Models.Source_Collection=t.Models.SelectableItems.extend({model:t.DisplayTab.Models.Source,selected_value:function(){var e=null,t=this.selected();return t.length>0&&(e=t[0].get("name")),e},find_by_name_or_alias:function(e){return this.find(function(t){return t.get("name")==e||_.isArray(t.get("aliases"))&&t.get("aliases").indexOf(e)>-1})}}),t.DisplayTab.Models.Gallery=Backbone.Model.extend({idAttribute:igw_data.gallery_primary_key,defaults:{title:"",name:""}}),t.DisplayTab.Models.Gallery_Collection=t.Models.Remote_Collection.extend({model:t.DisplayTab.Models.Gallery,action:"get_existing_galleries"}),t.DisplayTab.Models.Album=Backbone.Model.extend({defaults:{title:"",name:""}}),t.DisplayTab.Models.Album_Collection=t.Models.Remote_Collection.extend({model:t.DisplayTab.Models.Album,action:"get_existing_albums"}),t.DisplayTab.Models.Tag=Backbone.Model.extend({defaults:{title:""}}),t.DisplayTab.Models.Tag_Collection=t.Models.Remote_Collection.extend({model:t.DisplayTab.Models.Tag,action:"get_existing_image_tags"}),t.DisplayTab.Models.Display_Type=Backbone.Model.extend({idAttribute:"name",defaults:{title:""},is_compatible_with_source:function(e){var t=!0;for(index in e.get("returns")){var i=e.get("returns")[index];if(_.indexOf(this.get("entity_types"),i)<0){t=!1;break}}return t},get_shortcode_value:function(){var e=this.id;return e}}),t.DisplayTab.Models.Display_Type_Collection=t.Models.SelectableItems.extend({model:t.DisplayTab.Models.Display_Type,selected_value:function(){var e=null,t=this.selected();return t.length>0?t[0].get("name"):e},find_by_name_or_alias:function(e){return this.find(function(t){return t.get("name")==e||_.isArray(t.get("aliases"))&&t.get("aliases").indexOf(e)>-1})}}),t.DisplayTab.Models.Entity=Backbone.Model.extend({entity_id:function(){return this.get(this.get("id_field"))},is_excluded:function(){return current_value=this.get("exclude"),!_.isUndefined(current_value)&&(_.isBoolean(current_value)?current_value:0!=parseInt(current_value))},is_included:function(){return!this.is_excluded()},is_gallery:function(){return retval=!1,1==this.get("is_gallery")&&(retval=!0),retval},is_album:function(){return retval=!1,1==this.get("is_album")&&(retval=!0),retval},is_image:function(){return!this.is_album()&&!this.is_gallery()},alttext:function(){return this.is_image()?this.get("alttext"):this.is_gallery()?this.get("title"):this.is_album()?this.get("name"):void 0}}),t.DisplayTab.Models.Entity_Collection=t.Models.Remote_Collection.extend({model:t.DisplayTab.Models.Entity,action:"get_displayed_gallery_entities",_add_item:function(e){e.exclude=1==parseInt(e.exclude),e.is_gallery=1==parseInt(e.is_gallery),e.is_album=1==parseInt(e.is_album),this.push(e)},entity_ids:function(){return this.map(function(e){return e.entity_id()})},included_ids:function(){return _.compact(this.map(function(e){if(e.is_included())return e.entity_id()}))},excluded_ids:function(){return _.compact(this.map(function(e){if(!e.is_included())return e.entity_id()}))}}),t.DisplayTab.Models.SortOrder=Backbone.Model.extend({}),t.DisplayTab.Models.SortOrder_Options=t.Models.SelectableItems.extend({model:t.DisplayTab.Models.SortOrder}),t.DisplayTab.Models.SortDirection=Backbone.Model.extend({}),t.DisplayTab.Models.SortDirection_Options=Backbone.Collection.extend({model:t.DisplayTab.Models.SortDirection}),t.DisplayTab.Models.Slug=Backbone.Model.extend({}),t.DisplayTab.Views.Source_Config=Backbone.View.extend({el:"#source_configuration",selected_view:null,initialize:function(){this.sources=t.DisplayTab.instance.sources,this.sources.on("selected",this.render,this),_.bindAll(this,"render"),this.render()},render:function(){var e=new t.Views.Chosen({id:"source_select",collection:this.sources,placeholder:"Select a source",width:500}),i=_.template('<tr><td><label><%- sources %></label></td><td id="source_column"></td></tr>');this.$el.html(i(igw_data.i18n)),this.$el.find("#source_column").append(e.render().el);var s=this.sources.selected();if(s.length){var l=_.str.capitalize(s.pop().id)+"Source";if("undefined"!=typeof t.DisplayTab.Views[l]){var n=new t.DisplayTab.Views[l];this.$el.append(n.render().el)}}return this}}),t.DisplayTab.Views.Slug_Config=Backbone.View.extend({el:"#slug_configuration",selected_view:null,initialize:function(){this.displayed_gallery=t.DisplayTab.instance.displayed_gallery,this.slug=t.DisplayTab.instance.displayed_gallery.get("slug"),this.render()},render:function(){var t=this,i=e("<input>").prop({type:"text",name:"slug",value:this.slug,placeholder:igw_data.i18n.optional,id:"field_slug"});i.on("input",function(){e(this).val(e(this).val().replace(/\s|\?|\\|\/|&|=|\[|]|#/gm,"-")),t.displayed_gallery.set("slug",e(this).val())}),i.on("change",function(){e(this).val(e(this).val().replace(/^-*/gm,"").replace(/-*$/gm,"")),t.displayed_gallery.set("slug",e(this).val())});var s=_.template('<tr><td id="slug_label"><label for="field_slug" class="tooltip" title="<%- slug_tooltip %><"><<%- slug_label %></label></td><td id="slug_column"></td></tr>');return this.$el.append(s(igw_data.i18n)),this.$el.find("#slug_column").append(i),this}}),t.DisplayTab.Views.Display_Type_Selector=Backbone.View.extend({el:"#display_type_selector",initialize:function(){this.display_types=t.DisplayTab.instance.display_types,this.display_type_order_base=t.DisplayTab.instance.display_type_order_base,this.display_type_order_step=t.DisplayTab.instance.display_type_order_step,this.sources=t.DisplayTab.instance.sources,this.render()},selection_changed:function(t){var i=null;if(this.display_types.each(function(e){e.get("name")==t?(i=e,e.set("selected",!0)):e.set("selected",!1)}),i){var s=this.sources.selected_value(),l=i.get("default_source");l&&s!=l&&(l=this.sources.where({name:l}),l.length>0&&(l=l[0],this.sources.deselect_all(),this.sources.select(l.id)))}e(".display_settings_form").each(function(){$this=e(this),$this.attr("rel")==t?$this.removeClass("hidden"):$this.addClass("hidden")})},render:function(){var t=this.sources.selected(),i=0;t=t.length>0&&t[0],this.$el.empty();var s=this.display_type_order_base,l=this.display_type_order_step;return this.display_types.each(function(n){if(t&&!n.is_compatible_with_source(t)){var a=e("#display_type_tab_content:visible");if(0==a.length)return;if("hidden"==a.css("visibility"))return}var o=new this.DisplayType;o.model=n,o.on("selected",this.selection_changed,this),this.display_types.selected_value()||(n.set("selected",!0),this.selection_changed(n.id));var r=n.get("view_order");r||(r=s);var d=Math.floor(r/l);i>0&&d>i&&this.$el.append('<li class="clear" style="height: 10px" />'),i=d,this.$el.append(o.render().el)},this),this},DisplayType:Backbone.View.extend({className:"display_type_preview",events:{click:"clicked"},clicked:function(e){this.trigger("selected",this.model.get("name"))},render:function(){var t=e('<label style="display: block; cursor: pointer;"/>').addClass("image_container"),i=this.model.get("installed_at_version"),s=photocrati_ajax.wp_plugins_url,l=this.model.get("preview_image_relpath");"undefined"==typeof i&&(s=photocrati_ajax.wp_site_url,s=s.replace(/(.*)\/index\.php$/i,"$1"),0==l.indexOf("/nextgen-gallery")&&(s=photocrati_ajax.wp_plugins_url));var n=e("<img/>").attr({src:s+"/"+l,title:this.model.get("title"),alt:this.model.get("alt")}),a=e("<div/>"),o=e("<input/>").prop({type:"radio",value:this.model.get("name"),title:this.model.get("title"),name:"display_type",checked:this.model.get("selected")});return t.append(a),t.append(n),a.append(o),a.append(this.model.get("title")),this.$el.append(t),this}})}),t.DisplayTab.Views.Preview_Area=Backbone.View.extend({el:"#preview_area",initialize:function(){this.entities=t.DisplayTab.instance.entities,this.sources=t.DisplayTab.instance.sources,this.displayed_gallery=t.DisplayTab.instance.displayed_gallery,this.entity_list=e("<ul/>").attr("id","entity_list").append('<li class="clear"/>'),this.entities.on("add",this.render_entity,this),this.entities.on("remove",this.remove_entity,this),this.entities.on("reset",this.entities_reset,this),this.entities.on("change:sortorder",function(e){this.entities.remove(e,{silent:!0}),this.entities.add(e,{at:e.changed.sortorder,silent:!0}),this.displayed_gallery.set("sortorder",this.entities.entity_ids()),"undefined"!=typeof console&&"undefined"!=typeof console.log&&console.log(this.entities.entity_ids()),this.displayed_gallery.set("order_by","sortorder")},this),this.sources.on("selected",this.render,this),this.render()},events:{opened:"entities_reset"},entities_reset:function(e){this.entities.reset(null,{silent:!0}),this.entity_list.empty().append('<li class="clear"/>'),this.entities.in_progress||this.entities.fetch()},render_entity:function(e){var t=new this.EntityElement({model:e});this.entity_list.find(".clear").before(t.render().$el),t.$el.css("visibility","hidden"),setTimeout(function(){t.$el.css("visibility","visible")},0),1==this.$el.find(".no_entities").length?this.render():this.entities.length>1&&this.entity_list.sortable("refresh")},remove_entity:function(e){var t=this.id=e.get("id_field")+"_"+e.entity_id();this.entity_list.find("#"+t).remove();this.entity_list.sortable("refresh"),0==this.entities.length&&this.render_no_images_notice()},render_no_images_notice:function(){this.$el.empty(),this.$el.append("<p class='no_entities'>"+igw_data.i18n.no_entities+"</p>")},render:function(){return this.$el.empty(),this.entities.length>0&&this.displayed_gallery.get("container_ids").length>0?(this.$el.append(new this.RefreshButton({entities:this.entities}).render().el),this.$el.append(new this.SortButtons({entities:this.entities,displayed_gallery:this.displayed_gallery,sources:this.sources}).render().el),this.$el.append(new this.ExcludeButtons({entities:this.entities}).render().el),this.$el.append(this.entity_list),this.entity_list.sortable({placeholder:"placeholder",forcePlaceholderSize:!0,containment:"parent",opacity:.7,revert:!0,dropOnEmpty:!0,start:function(e,t){return t.placeholder.css({height:t.item.height()}),!0},stop:function(e,t){t.item.trigger("drop",t.item.index())}}),this.entity_list.disableSelection()):this.render_no_images_notice(),this},RefreshButton:Backbone.View.extend({className:"refresh_button",tagName:"input",label:"Refresh",events:{click:"clicked"},clicked:function(){this.entities.reset()},initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this)},render:function(){return this.$el.attr({value:this.label,type:"button"}),this}}),ExcludeButtons:Backbone.View.extend({className:"header_row",initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this)},render:function(){this.$el.empty(),this.$el.append("<strong>Exclude:</strong>");var e=new this.Button({value:!0,text:"All",entities:this.entities});this.$el.append(e.render().el),this.$el.append('<span class="separator">|</span>');var t=new this.Button({value:!1,text:"None",entities:this.entities});return this.$el.append(t.render().el),this},Button:Backbone.View.extend({tagName:"a",value:1,text:"",events:{click:"clicked"},initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this)},clicked:function(e){e.preventDefault(),this.entities.each(function(e){e.set("exclude",this.value)},this)},render:function(){return this.$el.text(this.text).attr("href","#"),this}})}),SortButtons:Backbone.View.extend({className:"header_row",initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this),this.sortorder_options=new t.DisplayTab.Models.SortOrder_Options,this.sortorder_options.on("change:selected",this.sortoption_changed,this),this.sortdirection_options=new t.DisplayTab.Models.SortDirection_Options([{value:"ASC",title:"Ascending",selected:"ASC"==this.displayed_gallery.get("order_direction")},{value:"DESC",title:"Descending",selected:"DESC"==this.displayed_gallery.get("order_direction")}]),this.sortdirection_options.on("change:selected",this.sortdirection_changed,this),this.displayed_gallery.on("change:order_by",this.displayed_gallery_order_changed,this),this.displayed_gallery.on("change.order_direction",this.displayed_gallery_order_dir_changed,this)},populate_sorting_fields:function(){var e=this.sources.selected().pop().get("returns");_.indexOf(e,"image")!==-1?this.fill_image_sortorder_options():this.fill_gallery_sortorder_options()},create_sortorder_option:function(e,i){return new t.DisplayTab.Models.SortOrder({name:e,title:i,value:e,selected:this.displayed_gallery.get("order_by")==e})},fill_image_sortorder_options:function(){this.sortorder_options.reset(),this.sortorder_options.push(this.create_sortorder_option("","None")),this.sortorder_options.push(this.create_sortorder_option("sortorder","Custom")),this.sortorder_options.push(this.create_sortorder_option(t.DisplayTab.instance.image_key,"Image ID")),this.sortorder_options.push(this.create_sortorder_option("filename","Filename")),this.sortorder_options.push(this.create_sortorder_option("alttext","Alt/Title Text")),this.sortorder_options.push(this.create_sortorder_option("imagedate","Date/Time"))},fill_gallery_sortorder_options:function(){this.sortorder_options.reset(),this.sortorder_options.push(this.create_sortorder_option("","None")),this.sortorder_options.push(this.create_sortorder_option("sortorder","Custom")),this.sortorder_options.push(this.create_sortorder_option("name","Name")),this.sortorder_options.push(this.create_sortorder_option("galdesc","Description"))},displayed_gallery_order_changed:function(e){this.sortorder_options.findWhere({value:e.get("order_by")}).set("selected",!0)},displayed_gallery_order_dir_changed:function(e){this.sortdirection_options.findWhere({value:e.get("order_direction")}).set("selected",!0)},sortoption_changed:function(t){this.sortorder_options.each(function(e){e.set("selected",t.get("value")==e.get("value"),{silent:!0})}),this.displayed_gallery.set("sortorder",[]);var i=t.get("value");0==t.get("value").length&&(i="sortorder"),this.displayed_gallery.set("order_by",i),this.entities.reset(),this.$el.find("a.sortorder").each(function(){var i=e(this);i.attr("value")==t.get("value")?i.addClass("selected"):i.removeClass("selected")})},sortdirection_changed:function(t){this.sortdirection_options.each(function(e){e.set("selected",t.get("value")==e.get("value"),{silent:!0})}),this.displayed_gallery.set("order_direction",t.get("value")),this.entities.reset(),this.$el.find("a.sortdirection").each(function(){var i=e(this);i.attr("value")==t.get("value")?i.addClass("selected"):i.removeClass("selected")})},render:function(){return this.$el.empty(),this.populate_sorting_fields(),this.$el.append("<strong>Sort By:</strong>"),this.sortorder_options.each(function(e,t){var i=new this.Button({model:e,className:"sortorder"});this.$el.append(i.render().el),this.sortorder_options.length-1>t&&this.$el.append('<span class="separator">|</span>')},this),this.$el.append('<strong style="margin-left: 30px;">Order By:</strong>'),this.sortdirection_options.each(function(e,t){var i=new this.Button({model:e,className:"sortdirection"});this.$el.append(i.render().el),this.sortdirection_options.length-1>t&&this.$el.append('<span class="separator">|</span>')},this),this},Button:Backbone.View.extend({tagName:"a",initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this)},events:{click:"clicked"},clicked:function(e){e.preventDefault(),this.model.set("selected",!0)},render:function(){return this.$el.prop({value:this.model.get("value"),href:"#"}),this.$el.text(this.model.get("title")),this.model.get("selected")&&this.$el.addClass("selected"),this}})}),EntityElement:Backbone.View.extend({tagName:"li",events:{drop:"item_dropped"},initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this),this.initTime=(new Date).getTime(),this.model.on("change",this.render,this),0==this.model.get("sortorder")&&this.model.set("sortorder",-1,{silent:!0}),this.id=this.model.get("id_field")+"_"+this.model.entity_id()},item_dropped:function(e,i){t.DisplayTab.instance.displayed_gallery.set("order_by","sortorder"),this.model.set("sortorder",i)},render:function(){this.$el.empty();var t=e("<div/>").addClass("preview_item"),i=e("<div/>").addClass("image_container"),s=this.model.alttext().replace(/\\&/g,"&").replace(/\\'/g,"'"),l=this.initTime;i.attr({title:s,style:"background-image: url('"+this.model.get("thumb_url")+"?timestamp"+l+"')"}),this.$el.append(t).addClass("ui-state-default"),t.append(i);var n=e("<div/>").addClass("exclude_container"),a=e("<label/>");a.append(igw_data.i18n.exclude_question);var o=new this.ExcludeCheckbox({model:this.model});return a.append(o.render().el),n.append(a),t.append(n),this},ExcludeCheckbox:Backbone.View.extend({tagName:"input",events:{change:"entity_excluded"},type_set:!1,entity_excluded:function(e){this.model.set("exclude",e.target.checked)},initialize:function(e){this.options=e||{},_.each(this.options,function(e,t){this[t]=e},this),this.model.on("change:exclude",this.render,this)},render:function(){return this.type_set||(this.$el.attr("type","checkbox"),this.type_set=!0),this.model.is_excluded()?this.$el.prop("checked",!0):this.$el.prop("checked",!1),this}})})}),t.DisplayTab.Views.GalleriesSource=Backbone.View.extend({tagName:"tbody",initialize:function(){this.galleries=t.DisplayTab.instance.galleries},render:function(){var i=new t.Views.Chosen({collection:this.galleries,placeholder:igw_data.i18n.select_gallery,multiple:!0,width:500}),s=e("<tr><td><label>"+igw_data.i18n.galleries+'</label></td><td class="galleries_column"></td></tr>');return this.$el.empty(),this.$el.append(s),this.$el.find(".galleries_column").append(i.render().el),this}}),t.DisplayTab.Views.AlbumsSource=Backbone.View.extend({tagName:"tbody",initialize:function(){this.albums=t.DisplayTab.instance.albums},render:function(){var e=new t.Views.Chosen({collection:this.albums,multiple:!0,placeholder:"Select an album",text_field:"name",width:500});return this.$el.empty(),this.$el.append("<tr><td><label>"+igw_data.i18n.albums+'</label></td><td class="albums_column"></td></tr>'),this.$el.find(".albums_column").append(e.render().el),this}}),t.DisplayTab.Views.TagsSource=Backbone.View.extend({tagName:"tbody",initialize:function(){this.tags=t.DisplayTab.instance.tags},render:function(){var e=new t.Views.Chosen({collection:this.tags,multiple:!0,placeholder:"Select a tag",text_field:"name",width:500});return this.$el.empty(),this.$el.append('<tr><td><label>Tags</label></td><td class="tags_column"></td></tr>'),this.$el.find(".tags_column").append(e.render().el),this}}),t.DisplayTab.Views.Recent_imagesSource=Backbone.View.extend({tagName:"tbody",initialize:function(){this.displayed_gallery=t.DisplayTab.instance.displayed_gallery,this.maximum_entity_count=t.DisplayTab.instance.displayed_gallery.get("maximum_entity_count"),this.displayed_gallery.set("container_ids",[])},render:function(){var t=this,i=e("<input/>").prop({type:"text",value:this.maximum_entity_count,name:"maximum_entity_count"});return i.change(function(){t.displayed_gallery.set("maximum_entity_count",e(this).val())}),this.$el.empty(),this.$el.append('<tr><td><label># of Images To Display</label></td><td class="recent_images_column"></td></tr>'),this.$el.find(".recent_images_column").append(i),this}}),t.DisplayTab.Views.Random_imagesSource=Backbone.View.extend({tagName:"tbody",initialize:function(){this.displayed_gallery=t.DisplayTab.instance.displayed_gallery,this.maximum_entity_count=t.DisplayTab.instance.displayed_gallery.get("maximum_entity_count"),this.displayed_gallery.set("container_ids",[])},render:function(){var t=this,i=e("<input/>").prop({type:"text",value:this.maximum_entity_count,name:"maximum_entity_count"});return i.change(function(){t.displayed_gallery.set("maximum_entity_count",e(this).val())}),this.$el.empty(),this.$el.append('<tr><td><label># of Images To Display</label></td><td class="random_images_column"></td></tr>'),this.$el.find(".random_images_column").append(i),this}}),t.DisplayTab.Views.SaveButton=Backbone.View.extend({el:"#save_displayed_gallery",errors_el:"#errors",displayed_gallery:null,events:{click:"clicked"},initialize:function(){this.displayed_gallery=t.DisplayTab.instance.displayed_gallery,this.entities=t.DisplayTab.instance.entities,this.render()},clicked:function(){this.set_display_settings(),insert_into_editor(this.displayed_gallery.to_shortcode(),this.displayed_gallery.id?this.displayed_gallery.id:igw_data.shortcode_ref),close_attach_to_post_window()},set_display_settings:function(){var t=this.displayed_gallery.get("display_type");if(t){var i=e("form[rel='"+t+"']"),s=function(t){var i={};return e.each(t.serializeArray(),function(e,t){for(var s=t.name.split("["),l=i,n=0;n<s.length;n++){var a=s[n].replace(/\]$/,"");l[a]||(n==s.length-1?l[a]=t.value:l[a]={}),l=l[a]}}),i}(i);this.displayed_gallery.set("display_settings",s[t])}},render:function(){return this.$el.css("z-index",1e3),this}}),t.DisplayTab.App=Backbone.View.extend({initialize:function(){if(this.displayed_gallery=new t.DisplayTab.Models.Displayed_Gallery(igw_data.displayed_gallery),this.original_displayed_gallery=new t.DisplayTab.Models.Displayed_Gallery(igw_data.displayed_gallery),this.galleries=new t.DisplayTab.Models.Gallery_Collection(igw_data.galleries),this.albums=new t.DisplayTab.Models.Album_Collection(igw_data.albums),this.tags=new t.DisplayTab.Models.Tag_Collection(igw_data.tags),this.sources=new t.DisplayTab.Models.Source_Collection(igw_data.sources),this.display_types=new t.DisplayTab.Models.Display_Type_Collection(igw_data.display_types),this.display_type_order_base=igw_data.display_type_priority_base,this.display_type_order_step=igw_data.display_type_priority_step,this.entities=new t.DisplayTab.Models.Entity_Collection,this.entities.extra_data.displayed_gallery=this.displayed_gallery,this.image_key=igw_data.image_primary_key,this.displayed_gallery.get("source")){if(this.displayed_gallery.get("source")){var e=this.sources.find_by_name_or_alias(this.displayed_gallery.get("source"));e&&e.set("selected",!0)}if(this.displayed_gallery.get("container_ids")&&_.each(this.displayed_gallery.get("container_ids"),function(e){var t=this[this.displayed_gallery.get("source")].find(function(t){return t.id==e},this);t&&t.set("selected",!0)},this),this.displayed_gallery.get("display_type")){var i=this.display_types.find_by_name_or_alias(this.displayed_gallery.get("display_type"));i&&(i.set("selected",!0),this.displayed_gallery.set("display_type",i.get("name")))}}if(collections=["galleries","albums","tags"],_.each(collections,function(e){this[e].on("selected",function(){this.update_selected_containers(e)},this)},this),this.display_types.on("change:selected",function(){this.displayed_gallery.set("display_type",this.display_types.selected_value())},this),this.sources.on("selected",function(){this.displayed_gallery.set("source",this.sources.selected_value()),this.sources.selected_value()!=this.original_displayed_gallery.get("source")?this.displayed_gallery.set("exclusions",this.entities.excluded_ids()):this.displayed_gallery.set("exclusions",this.original_displayed_gallery.get("exclusions")),"random_images"!=this.sources.selected_value()&&"recent_images"!=this.sources.selected_value()||this.displayed_gallery.set("maximum_entity_count",20),this.galleries.deselect_all(),this.albums.deselect_all(),this.tags.deselect_all();var e=this.display_types.selected(),t=this.sources.selected();e.length>0&&t.length>0&&(e=e[0],t=t[0],e.is_compatible_with_source(t)||this.display_types.deselect_all(),this.display_type_selector&&this.display_type_selector.render()),this.preview_area&&this.preview_area.render()},this),this.entities.on("change:exclude finished_fetching",function(){this.displayed_gallery.set("exclusions",this.entities.excluded_ids())},this),window.Frame_Event_Publisher){var s=this;Frame_Event_Publisher.listen_for("attach_to_post:new_gallery",function(){s.galleries.reset(),s.galleries.fetch()}),Frame_Event_Publisher.listen_for("attach_to_post:manage_galleries attach_to_post:manage_images",function(e){s.galleries.reset(),s.galleries.fetch();var t=s.sources.selected().pop();t&&(_.indexOf(t.get("returns"),"image")>=0||_.indexOf(t.get("returns"),"gallery"))&&s.entities.reset()}),Frame_Event_Publisher.listen_for("attach_to_post:manage_album",function(e){s.albums.reset(),s.albums.fetch();var t=s.sources.selected().pop();t&&_.indexOf(t.get("returns"),"album")>=0&&s.entities.reset()}),Frame_Event_Publisher.listen_for("attach_to_post:manage_tags attach_to_post:manage_images",function(e){s.tags.reset(),s.tags.fetch();var t=s.sources.selected().pop();t&&(_.indexOf(t.get("returns"),"image")>=0||_.indexOf(t.get("returns"),"gallery"))&&s.entities.reset()}),Frame_Event_Publisher.listen_for("attach_to_post:thumbnail_modified",function(e){var t=s.sources.selected().pop(),i=e.image[e.image.id_field];if(t)if(_.indexOf(t.get("returns"),"image")>=0){var l=s.entities.find(function(e){return parseInt(e.entity_id())==parseInt(i)},this);l&&l.set("thumb_url",e.image.thumb_url)}else{var n=s.entities.find(function(e){return parseInt(e.get("previewpic"))==i},this);n&&n.trigger("change")}})}},update_selected_containers:function(e){this.displayed_gallery.set("container_ids",this[e].selected_ids())},render:function(){this.display_type_selector=new t.DisplayTab.Views.Display_Type_Selector,new t.DisplayTab.Views.Source_Config,new t.DisplayTab.Views.Slug_Config,this.preview_area=new t.DisplayTab.Views.Preview_Area,new t.DisplayTab.Views.SaveButton}}),t.DisplayTab.instance=new t.DisplayTab.App,t.DisplayTab.instance.render(),window.Ngg=t,e("span.tooltip, label.tooltip").tooltip()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css
index 0d4fed00ab5648ecc330caefd2b221d229c55f68..1906830f086a85860583cf1e91e86b893360cbdd 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css
@@ -4,6 +4,7 @@ html#iframely {
 }
 
 #iframely, #iframely body {
+	background: white !important;
 	padding: 0px;
 	width: 100%;
 	height: 100%;
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.css
index a92894a5fa76c83481cb90c44136de7231c8147f..ed3e3c5231941acba6aa5a4d702e3c563619fdb4 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.css
@@ -1 +1 @@
-html#iframely{background:white !important}#iframely,#iframely body{padding:0;width:100%;height:100%}#iframely{-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;background-position:center center;background-repeat:no-repeat;position:absolute;visibility:hidden}#iframely #wpbody-content{float:none;padding:0}#iframely h2,#iframely #icon-nextgen-gallery{display:none}
\ No newline at end of file
+#iframely,#iframely body,html#iframely{background:#fff!important}#iframely,#iframely body{padding:0;width:100%;height:100%}#iframely{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;background-position:center center;background-repeat:no-repeat;position:absolute;visibility:hidden}#iframely #wpbody-content{float:none;padding:0}#iframely #icon-nextgen-gallery,#iframely h2{display:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.js
index 214019bfaa8b424b226d648fc82e18ee9e386a80..b9ee5778b6932748262968217279be37ce091356 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('5(7.v){E.D(\'d\')[0].A=\'4\';i(b($){$(\'#C\').d($(\'#j\').d($(\'#j-z\').d($(\'#y\'))));$(\'u\').w(b(){$(x).B("<J L=\'M\' F=\'N\' K=\'1\'/>")});c 2=7.2;5(2==k||a(2.6)=="9"){5(7!=k&&a(7.6)!="9"){2=7}}c l=G;5(l){5(a(2.6)!="9"){2.6(2,7,h)}}o{5(a(2.6)!="9"){2.6(2,7,b(){$(\'#4\').p({t:\'s\',q:\'m\'}).r({n:1.0})})}}})}b h(f,8,H){c $8=i(8);5(a($8.e(\'4\'))==\'9\')$8.e(\'4\',{g:1});c 4=$8.e(\'4\');5(4.g==3){i(\'#4\').p({t:\'s\',q:\'m\'}).r({n:1.0})}o{4.g+=1;O(b(){f.6(f,8,h)},I)}}',51,51,'||parent||iframely|if|adjust_height_for_frame|window|current_window|undefined|typeof|function|var|html|data|parent_window|attempts|iframely_callback|jQuery|wpbody|null|recursive_check|visible|opacity|else|css|visibility|animate|static|position|form|frameElement|each|this|ngg_page_content|content|id|append|wpwrap|getElementsByTagName|document|name|true|new_height|400|input|value|type|hidden|attach_to_post|setTimeout'.split('|'),0,{}))
+function iframely_callback(t,e,a){var i=jQuery(e);"undefined"==typeof i.data("iframely")&&i.data("iframely",{attempts:1});var n=i.data("iframely");3==n.attempts?jQuery("#iframely").css({position:"static",visibility:"visible"}).animate({opacity:1}):(n.attempts+=1,setTimeout(function(){t.adjust_height_for_frame(t,e,iframely_callback)},400))}window.frameElement&&(document.getElementsByTagName("html")[0].id="iframely",jQuery(function(t){t("#wpwrap").html(t("#wpbody").html(t("#wpbody-content").html(t("#ngg_page_content")))),t("form").each(function(){t(this).append("<input type='hidden' name='attach_to_post' value='1'/>")});var e=window.parent;null!=e&&"undefined"!=typeof e.adjust_height_for_frame||null!=window&&"undefined"!=typeof window.adjust_height_for_frame&&(e=window);var a=!0;a?"undefined"!=typeof e.adjust_height_for_frame&&e.adjust_height_for_frame(e,window,iframely_callback):"undefined"!=typeof e.adjust_height_for_frame&&e.adjust_height_for_frame(e,window,function(){t("#iframely").css({position:"static",visibility:"visible"}).animate({opacity:1})})}));
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/igw.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/igw.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a1bed353850728adb63268b824b8b261fea63d8
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/igw.js
@@ -0,0 +1,54 @@
+(function($){
+    setTimeout(function(){
+        $(function(){
+
+            window.get_igw_dimensions = function(){
+                var $button     = $('.ngg-add-gallery');
+                var href        = $button.attr('href');
+                var win = jQuery(top);
+                var winWidth    = win.width();
+                var winHeight   = win.height();
+                var popupWidth  = 1200;
+                var popupHeight = 600;
+                var minWidth    = 800;
+                var minHeight   = 600;
+                var maxWidth    = winWidth  - (winWidth  * 0.05);
+                var maxHeight   = winHeight - (winHeight * 0.05);
+
+                if (maxWidth    < minWidth)  { maxWidth    = winWidth-10  }
+                if (maxHeight   < minHeight) { maxHeight   = winHeight-10 }
+                if (popupWidth  > maxWidth)  { popupWidth  = maxWidth;  }
+                if (popupHeight > maxHeight) { popupHeight = maxHeight; }
+
+                return {
+                    width: popupWidth,
+                    height: popupHeight,
+                    top: (winHeight-popupHeight)/2,
+                    left: (winWidth-popupWidth)/2
+                };
+            };
+
+            // Restore Thickbox functionality
+            window.wp_tb_position = window.tb_position;
+            window.tb_position = function(){
+                var src = $("#TB_window iframe").attr('src');
+                if (src && src.match('attach_to_post')) {
+                    var dimensions = get_igw_dimensions();
+                    $("#TB_window").css({
+                        width:  dimensions.width.toString()+ "px",
+                        height: dimensions.height.toString()+"px",
+                        'top':  dimensions.top.toString()+"px",
+                        'left': dimensions.left.toString()+"px"
+                    });
+                    $('#TB_window iframe').css({
+                        width: '100%',
+                        height: '93%'
+                    });
+                }
+                else {
+                    window.wp_tb_position();
+                }
+            };
+        });
+    });
+})(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/igw.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/igw.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..d964d45ac361b6f3194aa140d124421ac60d8291
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/igw.min.js
@@ -0,0 +1 @@
+!function(t){setTimeout(function(){t(function(){window.get_igw_dimensions=function(){var i=t(".ngg-add-gallery"),o=(i.attr("href"),jQuery(top)),n=o.width(),w=o.height(),e=1200,h=600,r=800,d=600,g=n-.05*n,s=w-.05*w;return g<r&&(g=n-10),s<d&&(s=w-10),e>g&&(e=g),h>s&&(h=s),{width:e,height:h,top:(w-h)/2,left:(n-e)/2}},window.wp_tb_position=window.tb_position,window.tb_position=function(){var i=t("#TB_window iframe").attr("src");if(i&&i.match("attach_to_post")){var o=get_igw_dimensions();t("#TB_window").css({width:o.width.toString()+"px",height:o.height.toString()+"px",top:o.top.toString()+"px",left:o.left.toString()+"px"}),t("#TB_window iframe").css({width:"100%",height:"93%"})}else window.wp_tb_position()}})})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.css
new file mode 100644
index 0000000000000000000000000000000000000000..ecf505ce9db2c1b1aaf686daf22cb98edd7b8e87
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.css
@@ -0,0 +1,41 @@
+.nggPlaceholder {
+    text-align: center;
+    background-color: #fdfdfd;
+    border: solid 1px #ddd;
+    border-radius: 3px;
+    height: 230px;
+    padding: 5px;
+    margin: 5px;
+    max-width: 94%;
+    box-shadow: 0 0 3px 1px #EBECED;
+    -webkit-box-shadow: 0 0 3px 1px #EBECED;
+    -moz-box-shadow: 0 0 3px 1px #EBECED;
+    width: 400px;
+}
+
+.nggPlaceholder h3 {
+    margin: 0px !important;
+    font-family: Lato, sans-serif;
+    font-size: 16px;
+    font-size: 1.6rem;
+    font-weight: 300;
+    color: #555;
+    margin-top: 75px !important;
+    letter-spacing: -1px;
+}
+
+.nggPlaceholderButton:hover {
+    margin: 0;
+    opacity: .8;
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+    color: #76a934;
+}
+
+.nggPlaceholderButton {
+    font-size: 15px;
+    font-size: 1.5rem;
+    margin: 0;
+    opacity: 1.0;
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+    color: #bbb;
+}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js
index 91c78da2ba4dd85e11c2b39d8661affd53c5bc38..6d0d4d3e6ca5c33cc55f9e6a3a1207c5460a9df7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js
@@ -1,5 +1,5 @@
 // Self-executing function to create and register the TinyMCE plugin
-(function(siteurl) {
+(function(siteurl, $) {
     window.id = 'wordpress-post-page';
 
     tinyMCE.addI18n('en.ngg_attach_to_post', {
@@ -54,24 +54,123 @@
 				image:	plugin_url+'/atp_button.png'
 			});
 
-			// When the shortcode is clicked, open the attach to post interface
-			editor.settings.extended_valid_elements += ",shortcode";
-			editor.settings.custom_elements = "shortcode";
-
+			/**
+			 * Listen for click events to our placeholder
+			 */
             editor.on('mouseup', function(e) {
-                if (e.target.tagName == 'IMG') {
-                    if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) {
-                        editor.dom.events.cancel(e);
-                        var id = e.target.src.match(/\d+$/);
-                        if (id) id = id.pop();
-                        var obj = tinymce.extend(self, {
-                            editor: editor,
-                            plugin: editor.plugins.NextGEN_AttachToPost,
-                            id:		id
-                        });
-                        self.render_attach_to_post_interface(id);
-                    }
-                }
+				tinymce.extend(self, {
+					editor: editor,
+					plugin: editor.plugins.NextGEN_AttachToPost
+				});
+
+				// Support for IGW placeholder images. NGG <= 2.1.50
+				if (e.target.tagName == 'IMG') {
+					if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) {
+						editor.dom.events.cancel(e);
+						var id = e.target.src.match(/\d+$/);
+						if (id) id = id.pop();
+						self.render_attach_to_post_interface({
+							key: 'id',
+							val: id
+						});
+					}
+				}
+				// Support for IGW Visual Shortcodes. NGG >= 2.1.50.1
+				else {
+					var $target = $(e.target);
+					if ($target.parents('.nggPlaceholderButton')) {
+						$target = $target.parents('.nggPlaceholderButton');
+					}
+					if ($target.hasClass('nggPlaceholderButton')) {
+
+						// Remove button
+						if ($target.hasClass('nggIgwRemove')) {
+							$target.parents('.nggPlaceholder').remove();
+						}
+
+						// Edit button
+						else {
+							window.igw_shortcode=  $(e.target).parents('.nggPlaceholder').data('shortcode');
+							self.render_attach_to_post_interface({
+								key: 'shortcode',
+								val: btoa(window.igw_shortcode),
+								ref: $(e.target).parents('.nggPlaceholder').attr('id')
+							});
+						}
+					}
+				}
+			});
+
+			/**
+			 * Find each shortcode and replace it with the placeholder, rendered using an underscore template
+			 * in templates/tinymce_placeholder.php
+			 */
+			editor.on('BeforeSetContent', function(event){
+				var shortcode_opening_tag = '[ngg_images ';
+				while (event.content.indexOf(shortcode_opening_tag)>=0) {
+					var start_of_shortcode = event.content.indexOf(shortcode_opening_tag);
+					var index = start_of_shortcode+shortcode_opening_tag.length;
+					var found_attribute_assignment = false;
+					var current_attribute_enclosure = null;
+					var last_found_char = false;
+					var content_length = event.content.length;
+					while (true) {
+						var char = event.content[index];
+						if (char == '"' || char == "'" && last_found_char == '=') {
+							// Is this the closing quote for an already found attribute assignment?
+							if (found_attribute_assignment && current_attribute_enclosure == char) {
+								found_attribute_assignment = false;
+								current_attribute_enclosure = null;
+							}
+							else {
+								found_attribute_assignment = true;
+								current_attribute_enclosure = char;
+							}
+						}
+						else if (char == ']') {
+							// we've found a shortcode closing tag. But, we need to ensure
+							// that this ] isn't within the value of a shortcode attribute
+							if (!found_attribute_assignment) {
+								break; //exit loop - we've found the shortcode
+							}
+						}
+
+						last_found_char = char;
+
+						if (index == content_length) {
+							break;
+						}
+
+						index++;
+					}
+
+					// Replace the shortcode with a placeholder
+					var match = event.content.substring(start_of_shortcode, ++index);
+					var shortcode = match.substring(1, match.length-1);
+					shortcode = shortcode.replace('[', '&#91;');
+					shortcode = shortcode.replace(']', '&#93;');
+
+					var template = _.template($('#ngg-igw-placeholder').html());
+					event.content = event.content.replace(match, template($.extend(ngg_igw_i18n, {
+						shortcode: shortcode,
+						ref: _.now()
+					})));
+				}
+			});
+
+			/**
+			 * Whenever a request is made to fetch the content of the editor, substitute the IGW placeholders
+			 * with the corresponding shortcode
+			 */
+			editor.on('GetContent', function(event){
+				var $content = $('<div/>').append(event.content);
+				$content.find('.nggPlaceholder').toArray().forEach(function(placeholder){
+					var $placeholder = $(placeholder);
+					var shortcode = $placeholder.data('shortcode');
+					shortcode = '[' + _.unescape(shortcode) + ']';
+					$placeholder.replaceWith(shortcode);
+				});
+				event.content = $content.html();
 			});
 		},
 
@@ -87,7 +186,7 @@
         wm_close_event: function(e) {
             if (e && e.target && e.target._id && e.target._id == 'ngg_attach_to_post_dialog') {
                 // Restore scrolling for the main content window when the attach to post interface is closed
-                jQuery('html,body').css('overflow', 'auto');
+                $('html,body').css('overflow', 'auto');
                 tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select('p')[0]);
                 tinyMCE.activeEditor.selection.collapse(0);
             }
@@ -96,11 +195,14 @@
 		/**
 		 * Renders the attach to post interface
 		 */
-		render_attach_to_post_interface: function(id) {
+		render_attach_to_post_interface: function(params) {
 			// Determine the attach to post url
 			var attach_to_post_url = nextgen_gallery_attach_to_post_url;
-            if (typeof(id) != 'undefined') {
-				attach_to_post_url += "&id=" + this.id;
+            if (typeof(params) != 'undefined') {
+				attach_to_post_url += '&' + params.key + '='+encodeURIComponent(params.val);
+				if (typeof(params['ref']) != 'undefined') {
+					attach_to_post_url += '&ref='+encodeURIComponent(params.ref);
+				}
             }
 
 			var win = window;
@@ -108,7 +210,7 @@
 				win = win.parent;
 			}
 
-			win = jQuery(win);
+			win = $(win);
 			var winWidth    = win.width();
 			var winHeight   = win.height();
 			var popupWidth  = 1200;
@@ -133,23 +235,13 @@
 			});
 
 			// Ensure that the window cannot be scrolled - XXX actually allow scrolling in the main window and disable it for the inner-windows/frames/elements as to create a single scrollbar
-            jQuery('html,body').css('overflow', 'hidden');
-			jQuery('#ngg_attach_to_post_dialog_ifr').css('overflow-y', 'auto');
-			jQuery('#ngg_attach_to_post_dialog_ifr').css('overflow-x', 'hidden');
+            $('html,body').css('overflow', 'hidden');
+			$('#ngg_attach_to_post_dialog_ifr').css('overflow-y', 'auto');
+			$('#ngg_attach_to_post_dialog_ifr').css('overflow-x', 'hidden');
 		}
 	});
 
 	// Register plugin
 	tinymce.PluginManager.add('NextGEN_AttachToPost', tinymce.plugins.NextGEN_AttachToPost);
 
-	// Hide this button by default
-	var $button = jQuery('#ngg-media-button');
-	$button.css('display', 'inline-block');
-	jQuery('#content-html').on('click', function() {
-		$button.hide();
-	});
-	jQuery('#content-tmce').on('click', function() {
-		$button.css('display', 'inline-block');
-	});
-
-})(photocrati_ajax.wp_site_url);
+})(photocrati_ajax.wp_site_url, jQuery);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..b55b6f7b88fd37f7ee475c872b05cec419f22daf
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.css
@@ -0,0 +1 @@
+.nggPlaceholder{text-align:center;background-color:#fdfdfd;border:1px solid #ddd;border-radius:3px;height:230px;padding:5px;margin:5px;max-width:94%;box-shadow:0 0 3px 1px #EBECED;-webkit-box-shadow:0 0 3px 1px #EBECED;-moz-box-shadow:0 0 3px 1px #EBECED;width:400px}.nggPlaceholder h3{margin:75px 0 0!important;font-family:Lato,sans-serif;font-size:16px;font-size:1.6rem;font-weight:300;color:#555;letter-spacing:-1px}.nggPlaceholderButton:hover{margin:0;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";color:#76a934}.nggPlaceholderButton{font-size:15px;font-size:1.5rem;margin:0;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";color:#bbb}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.js
index f3636933460bd83e8beec7ac7ea048cddbd6e4b2..561fcebdc0718d83462ea7b501319f2732aa9ed5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(7(F){N.4=\'R-1y-1A\';z.1R(\'1O.s\',{q:\'18 H L 1P 1e\'});h.1Q(\'h.w.9\',{F:F,1K:7(){m{1F:\'H L\',1H:\'1N\',1J:\'V://W.U.T\',1I:\'V://W.U.T/R-S-J/1E-S/\',1B:\'0.1\'}},1u:7(2,15){3 g=r;2.f.X=2.f.E;2.f.E=7(Y,14){3 K=2.f.X(Y,14);K.u(\'1q\',g.16);m K};2.1D(\'s\',r.C,{2:2,J:2.w.9});2.1w(\'9\',{q:\'s.q\',1C:\'s\',1x:15+\'/1G.1Y\'});2.13.2g+=",12";2.13.2e="12";2.u(\'29\',7(e){5(e.a.1S==\'2c\'){5(g.Z(e.a).2h(\'2d\')>=0){2.M.2a.2f(e);3 4=e.a.2j.2i(/\\d+$/);5(4)4=4.27();3 1X=h.28(g,{2:2,J:2.w.9,4:4});g.C(4)}}})},Z:7(l){3 B=l.Q(\'11\')?l.Q(\'11\'):l.1V;5(B){m B}1T{m""}},16:7(e){5(e&&e.a&&e.a.P&&e.a.P==\'1c\'){8(\'I,1f\').b(\'k\',\'1j\');z.A.17.O(z.A.M.O(\'p\')[0]);z.A.17.20(0)}},C:7(4){3 D=25;5(26(4)!=\'24\'){D+="&4="+r.4}3 6=N;21(6.G!=22&&6.G!=6){6=6.G}6=8(6);3 v=6.1d();3 t=6.1a();3 n=2b;3 o=1n;3 1p=23;3 1l=1n;3 j=v-(v*0.1o);3 c=t-(t*0.1o);5(j<1p){j=v-10}5(c<1l){c=t-10}5(n>j){n=j}5(o>c){o=c}r.2.f.E({1U:D,4:\'1c\',1d:n,1a:o,q:"H L - 18 1W 1e"});8(\'I,1f\').b(\'k\',\'1h\');8(\'#1g\').b(\'k-y\',\'1j\');8(\'#1g\').b(\'k-x\',\'1h\')}});h.1z.1r(\'9\',h.w.9);3 $i=8(\'#1s-1t-i\');$i.b(\'19\',\'1m-1b\');8(\'#1i-I\').u(\'1k\',7(){$i.1v()});8(\'#1i-1M\').u(\'1k\',7(){$i.b(\'19\',\'1m-1b\')})})(1L.1Z);',62,144,'||editor|var|id|if|win|function|jQuery|NextGEN_AttachToPost|target|css|maxHeight|||windowManager|self|tinymce|button|maxWidth|overflow|node|return|popupWidth|popupHeight||title|this|ngg_attach_to_post|winHeight|on|winWidth|plugins|||tinyMCE|activeEditor|class_name|render_attach_to_post_interface|attach_to_post_url|open|siteurl|parent|NextGEN|html|plugin|modal|Gallery|dom|window|select|_id|getAttribute|wordpress|gallery|com|imagely|https|www|nggOldOpen|one|get_class_name||class|shortcode|settings|two|plugin_url|wm_close_event|selection|Attach|display|height|block|ngg_attach_to_post_dialog|width|Post|body|ngg_attach_to_post_dialog_ifr|hidden|content|auto|click|minHeight|inline|600|05|minWidth|close|add|ngg|media|init|hide|addButton|image|post|PluginManager|page|version|cmd|addCommand|nextgen|longname|atp_button|author|infourl|authorurl|getInfo|photocrati_ajax|tmce|Imagely|en|to|create|addI18n|tagName|else|url|className|To|obj|png|wp_site_url|collapse|while|null|800|undefined|nextgen_gallery_attach_to_post_url|typeof|pop|extend|mouseup|events|1200|IMG|ngg_displayed_gallery|custom_elements|cancel|extended_valid_elements|indexOf|match|src'.split('|'),0,{}))
+!function(t,e){window.id="wordpress-post-page",tinyMCE.addI18n("en.ngg_attach_to_post",{title:"Attach NextGEN Gallery to Post"}),tinymce.create("tinymce.plugins.NextGEN_AttachToPost",{siteurl:t,getInfo:function(){return{longname:"NextGEN Gallery",author:"Imagely",authorurl:"https://www.imagely.com",infourl:"https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/",version:"0.1"}},init:function(t,n){var o=this;t.windowManager.nggOldOpen=t.windowManager.open,t.windowManager.open=function(e,n){var a=t.windowManager.nggOldOpen(e,n);return a.on("close",o.wm_close_event),a},t.addCommand("ngg_attach_to_post",this.render_attach_to_post_interface,{editor:t,plugin:t.plugins.NextGEN_AttachToPost}),t.addButton("NextGEN_AttachToPost",{title:"ngg_attach_to_post.title",cmd:"ngg_attach_to_post",image:n+"/atp_button.png"}),t.on("mouseup",function(n){if(tinymce.extend(o,{editor:t,plugin:t.plugins.NextGEN_AttachToPost}),"IMG"==n.target.tagName){if(o.get_class_name(n.target).indexOf("ngg_displayed_gallery")>=0){t.dom.events.cancel(n);var a=n.target.src.match(/\d+$/);a&&(a=a.pop()),o.render_attach_to_post_interface({key:"id",val:a})}}else{var r=e(n.target);r.parents(".nggPlaceholderButton")&&(r=r.parents(".nggPlaceholderButton")),r.hasClass("nggPlaceholderButton")&&(r.hasClass("nggIgwRemove")?r.parents(".nggPlaceholder").remove():(window.igw_shortcode=e(n.target).parents(".nggPlaceholder").data("shortcode"),o.render_attach_to_post_interface({key:"shortcode",val:btoa(window.igw_shortcode),ref:e(n.target).parents(".nggPlaceholder").attr("id")})))}}),t.on("BeforeSetContent",function(t){for(var n="[ngg_images ";t.content.indexOf(n)>=0;){for(var o=t.content.indexOf(n),a=o+n.length,r=!1,i=null,g=!1,l=t.content.length;;){var c=t.content[a];if('"'==c||"'"==c&&"="==g)r&&i==c?(r=!1,i=null):(r=!0,i=c);else if("]"==c&&!r)break;if(g=c,a==l)break;a++}var s=t.content.substring(o,++a),d=s.substring(1,s.length-1);d=d.replace("[","&#91;"),d=d.replace("]","&#93;");var h=_.template(e("#ngg-igw-placeholder").html());t.content=t.content.replace(s,h(e.extend(ngg_igw_i18n,{shortcode:d,ref:_.now()})))}}),t.on("GetContent",function(t){var n=e("<div/>").append(t.content);n.find(".nggPlaceholder").toArray().forEach(function(t){var n=e(t),o=n.data("shortcode");o="["+_.unescape(o)+"]",n.replaceWith(o)}),t.content=n.html()})},get_class_name:function(t){var e=t.getAttribute("class")?t.getAttribute("class"):t.className;return e?e:""},wm_close_event:function(t){t&&t.target&&t.target._id&&"ngg_attach_to_post_dialog"==t.target._id&&(e("html,body").css("overflow","auto"),tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select("p")[0]),tinyMCE.activeEditor.selection.collapse(0))},render_attach_to_post_interface:function(t){var n=nextgen_gallery_attach_to_post_url;"undefined"!=typeof t&&(n+="&"+t.key+"="+encodeURIComponent(t.val),"undefined"!=typeof t.ref&&(n+="&ref="+encodeURIComponent(t.ref)));for(var o=window;null!=o.parent&&o.parent!=o;)o=o.parent;o=e(o);var a=o.width(),r=o.height(),i=1200,g=600,l=800,c=600,s=a-.05*a,d=r-.05*r;s<l&&(s=a-10),d<c&&(d=r-10),i>s&&(i=s),g>d&&(g=d),this.editor.windowManager.open({url:n,id:"ngg_attach_to_post_dialog",width:i,height:g,title:"NextGEN Gallery - Attach To Post"}),e("html,body").css("overflow","hidden"),e("#ngg_attach_to_post_dialog_ifr").css("overflow-y","auto"),e("#ngg_attach_to_post_dialog_ifr").css("overflow-x","hidden")}}),tinymce.PluginManager.add("NextGEN_AttachToPost",tinymce.plugins.NextGEN_AttachToPost)}(photocrati_ajax.wp_site_url,jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_tabs.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_tabs.min.js
index dceab8738c2d0476931b15e475bc4d42ca952285..9cb18cb70db8fad201169477635ef627057b4dac 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_tabs.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_tabs.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('x(3($){$.1.2=3(f){5.y(f);6 i=0;5.p(\'.m\').A(3(){w(i==0)$.1.2.a(5);v $.1.2.b(5);i++});5.s(\'t\',3(u,9){$.1.2.b($.1.2.7(9.C));$.1.2.a($.1.2.7(9.J))})};$.1.2.b=3(4){4=$(4);h(3(){4.j({k:\'c\',l:\'K\',e:-I,g:\'D\',r:0})},0)};$.1.2.a=3(4){4=$(4);h(3(){4.j({k:\'c\',l:\'H\',e:0,g:\'L\',r:\'E%\'})},0)};$.1.2.7=3(8){6 o=8.B(\'q-n\');6 d=8.G(\'F\').p(\'.m[q-n="\'+o+\'"]\');z d}});',48,48,'|fn|ngg_tabs|function|tab|this|var|get_tab_by_li|list_item|ui|show_tab|hide_tab|block|active_tab|top|options|visibility|setTimeout||css|display|position|main_menu_tab|labelledby|active_id|find|aria|height|bind|tabsactivate|event|else|if|jQuery|tabs|return|each|attr|oldTab|hidden|100|div|parents|static|1000|newTab|absolute|visible'.split('|'),0,{}))
+jQuery(function(t){t.fn.ngg_tabs=function(i){this.tabs(i);var n=0;this.find(".main_menu_tab").each(function(){0==n?t.fn.ngg_tabs.show_tab(this):t.fn.ngg_tabs.hide_tab(this),n++}),this.bind("tabsactivate",function(i,n){t.fn.ngg_tabs.hide_tab(t.fn.ngg_tabs.get_tab_by_li(n.oldTab)),t.fn.ngg_tabs.show_tab(t.fn.ngg_tabs.get_tab_by_li(n.newTab))})},t.fn.ngg_tabs.hide_tab=function(i){i=t(i),setTimeout(function(){i.css({display:"block",position:"absolute",top:-1e3,visibility:"hidden",height:0})},0)},t.fn.ngg_tabs.show_tab=function(i){i=t(i),setTimeout(function(){i.css({display:"block",position:"static",top:0,visibility:"visible",height:"100%"})},0)},t.fn.ngg_tabs.get_tab_by_li=function(t){var i=t.attr("aria-labelledby"),n=t.parents("div").find('.main_menu_tab[aria-labelledby="'+i+'"]');return n}});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/underscore.string.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/underscore.string.min.js
index 2254c3b52c56f3f8c1da905652214067c6c64e8c..c61464677746fe3142319d068de0b0427a3aa8ba 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/underscore.string.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/underscore.string.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('!r(1E,y){\'3O 3P\';E 2l=y.1M.1l;E 2d=y.1M.3Q;E 2a=y.1M.3R;E 2e=r(1X){l 1X*1||0};E 1f=r(h,U){p(U<1)l\'\';E 1q=\'\';2f(U>0){p(U&1)1q+=h;U>>=1,h+=h}l 1q};E M=[].M;E 1z=r(K){p(K==v)l\'\\\\s\';L p(K.1X)l K.1X;L l\'[\'+C.2O(K)+\']\'};E 1K={3M:\'<\',3I:\'>\',3J:\'"\',3K:"\'",3L:\'&\'};E 2s={};1g(E 2E 2g 1K){2s[1K[2E]]=2E}E T=(r(){r 1U(2V){l 3T.1M.1L.1j(2V).M(8,-1).1r()}E 2L=1f;E 11=r(){p(!11.1Z.2n(1h[0])){11.1Z[1h[0]]=11.2N(1h[0])}l 11.2T.1j(v,11.1Z[1h[0]],1h)};11.2T=r(12,1i){E 2o=1,2U=12.t,1V=\'\',D,27=[],i,k,B,1b,2z,2u;1g(i=0;i<2U;i++){1V=1U(12[i]);p(1V===\'2p\'){27.14(12[i])}L p(1V===\'1O\'){B=12[i];p(B[2]){D=1i[2o];1g(k=0;k<B[2].t;k++){p(!D.2n(B[2][k])){1w V 1u(T(\'[O.T] 3Z "%s" 3Y 2M 3U\',B[2][k]))}D=D[B[2][k]]}}L p(B[1]){D=1i[B[1]]}L{D=1i[2o++]}p(/[^s]/.2v(B[8])&&(1U(D)!=\'1e\')){1w V 1u(T(\'[O.T] 3W 1e 3H 44 %s\',1U(D)))}2Y(B[8]){P\'b\':D=D.1L(2);Y;P\'c\':D=y.1P(D);Y;P\'d\':D=2K(D,10);Y;P\'e\':D=B[7]?D.2J(B[7]):D.2J();Y;P\'f\':D=B[7]?2I(D).2j(B[7]):2I(D);Y;P\'o\':D=D.1L(8);Y;P\'s\':D=((D=y(D))&&B[7]?D.2t(0,B[7]):D);Y;P\'u\':D=23.3r(D);Y;P\'x\':D=D.1L(16);Y;P\'X\':D=D.1L(16).1k();Y}D=(/[3q]/.2v(B[8])&&B[3]&&D>=0?\'+\'+D:D);2z=B[4]?B[4]==\'0\'?\'0\':B[4].1y(1):\' \';2u=B[6]-y(D).t;1b=B[6]?2L(2z,2u):\'\';27.14(B[5]?D+1b:1b+D)}}l 27.1c(\'\')};11.1Z={};11.2N=r(1R){E 1m=1R,B=[],12=[],24=0;2f(1m){p((B=/^[^\\2C]+/.1p(1m))!==v){12.14(B[0])}L p((B=/^\\2C{2}/.1p(1m))!==v){12.14(\'%\')}L p((B=/^\\2C(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|\'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-3n])/.1p(1m))!==v){p(B[2]){24|=1;E 1G=[],1s=B[2],18=[];p((18=/^([a-21][a-21\\d]*)/i.1p(1s))!==v){1G.14(18[1]);2f((1s=1s.2t(18[0].t))!==\'\'){p((18=/^\\.([a-21][a-21\\d]*)/i.1p(1s))!==v){1G.14(18[1])}L p((18=/^\\[(\\d+)\\]/.1p(1s))!==v){1G.14(18[1])}L{1w V 1u(\'[O.T] 2q?\')}}}L{1w V 1u(\'[O.T] 2q?\')}B[2]=1G}L{24|=2}p(24===3){1w V 1u(\'[O.T] 45 3D 35 3E 3F 3B 2M (3w) 3x\')}12.14(B)}L{1w V 1u(\'[O.T] 2q?\')}1m=1m.2t(B[0].t)}l 12};l 11})();E C={4v:\'2.3.0\',2F:r(h){p(h==v)h=\'\';l(/^\\s*$/).2v(h)},4q:r(h){p(h==v)l\'\';l y(h).J(/<\\/?[^>]+>/g,\'\')},2Q:r(h){h=h==v?\'\':y(h);l h.1y(0).1k()+h.M(1)},4r:r(h,1J){p(h==v)l[];h=y(h);1J=~~1J;l 1J>0?h.B(V 1A(\'.{1,\'+1J+\'}\',\'g\')):[h]},4A:r(h){l C.3f(h).J(/\\s+/g,\' \')},4z:r(h,1n){p(h==v||1n==v)l 0;l y(h).1H(1n).t-1},2k:r(h){p(h==v)l[];l y(h).1H(\'\')},4B:r(h){p(h==v)l\'\';l y(h).J(/\\S/g,r(c){l c===c.1k()?c.1r():c.1k()})},4C:r(h){p(h==v)l\'\';l y(h).J(/[&<>"\']/g,r(m){l\'&\'+2s[m]+\';\'})},4p:r(h){p(h==v)l\'\';l y(h).J(/\\&([^;]+);/g,r(2H,1D){E B;p(1D 2g 1K){l 1K[1D]}L p(B=1D.B(/^#x([\\4l-4m-F]+)$/)){l y.1P(2K(B[1],16))}L p(B=1D.B(/^#(\\d+)$/)){l y.1P(~~B[1])}L{l 2H}})},2O:r(h){p(h==v)l\'\';l y(h).J(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\'\\\\$1\')},2A:r(h,i,2P,1n){E 2y=C.2k(h);2y.2A(~~i,~~2P,1n);l 2y.1c(\'\')},4j:r(h,i,1n){l C.2A(h,i,0,1n)},29:r(h,2B){p(2B===\'\')l 1Y;p(h==v)l 28;l y(h).26(2B)!==-1},1c:r(){E 1t=M.1j(1h),Q=1t.48();p(Q==v)Q=\'\';l 1t.1c(Q)},47:r(h){p(h==v)l[];l y(h).1H("\\n")},2m:r(h){l C.2k(h).2m().1c(\'\')},4a:r(h,1d){p(1d===\'\')l 1Y;p(h==v||1d==v)l 28;h=y(h);1d=y(1d);l h.t>=1d.t&&h.M(0,1d.t)===1d},4c:r(h,19){p(19===\'\')l 1Y;p(h==v||19==v)l 28;h=y(h);19=y(19);l h.t>=19.t&&h.M(h.t-19.t)===19},4o:r(h){p(h==v)l\'\';h=y(h);l h.M(0,-1)+y.1P(h.4t(h.t-1)+1)},2S:r(h){p(h==v)l\'\';l y(h).J(/(?:^|\\s)\\S/g,r(c){l c.1k()})},4D:r(h){l C.1l(h).J(/[-O\\s]+(.)?/g,r(B,c){l c.1k()})},2R:r(h){l C.1l(h).J(/([a-z\\d])([A-Z]+)/g,\'$4F$2\').J(/[-\\s]+/g,\'O\').1r()},36:r(h){l C.1l(h).J(/([A-Z])/g,\'-$1\').J(/[-O\\s]+/g,\'-\').1r()},3v:r(h){l C.2S(y(h).J(/O/g,\' \')).J(/\\s/g,\'\')},4b:r(h){l C.2Q(C.2R(h).J(/4h$/,\'\').J(/O/g,\' \'))},1l:r(h,K){p(h==v)l\'\';p(!K&&2l)l 2l.1j(h);K=1z(K);l y(h).J(V 1A(\'\\^\'+K+\'+|\'+K+\'+$\',\'g\'),\'\')},3g:r(h,K){p(h==v)l\'\';p(!K&&2a)l 2a.1j(h);K=1z(K);l y(h).J(V 1A(\'^\'+K+\'+\'),\'\')},1N:r(h,K){p(h==v)l\'\';p(!K&&2d)l 2d.1j(h);K=1z(K);l y(h).J(V 1A(K+\'+$\'),\'\')},3y:r(h,t,1Q){p(h==v)l\'\';h=y(h);1Q=1Q||\'...\';t=~~t;l h.t>t?h.M(0,t)+1Q:h},3G:r(h,t,1o){p(h==v)l\'\';h=y(h);t=~~t;1o=1o!=v?y(1o):\'...\';p(h.t<=t)l h;E 2G=r(c){l c.1k()!==c.1r()?\'A\':\' \'},13=h.M(0,t+1).J(/.(?=\\W*\\w*$)/g,2G);p(13.M(13.t-2).B(/\\w\\w/))13=13.J(/\\s*\\S+$/,\'\');L 13=C.1N(13.M(0,13.t-1));l(13+1o).t>h.t?h:h.M(0,13.t)+1o},41:r(h,2D){p(C.2F(h))l[];l C.1l(h,2D).1H(2D||/\\s+/)},1b:r(h,t,N,2W){h=h==v?\'\':y(h);t=~~t;E 1a=0;p(!N)N=\' \';L p(N.t>1)N=N.1y(0);2Y(2W){P\'3l\':1a=t-h.t;l h+1f(N,1a);P\'3j\':1a=t-h.t;l 1f(N,23.40(1a/2))+h+1f(N,23.42(1a/2));43:1a=t-h.t;l 1f(N,1a)+h}},3c:r(h,t,N){l C.1b(h,t,N)},38:r(h,t,N){l C.1b(h,t,N,\'3l\')},3d:r(h,t,N){l C.1b(h,t,N,\'3j\')},T:T,3A:r(1R,1i){1i.3z(1R);l T.2X(v,1i)},3X:r(h,1W){p(h==v||h==\'\')l 0;h=y(h);E 2i=2e(2e(h).2j(~~1W));l 2i===0&&!h.B(/^0+$/)?4E.49:2i},4g:r(1e,3k,3h,1T){p(4k(1e)||1e==v)l\'\';1e=1e.2j(~~3k);1T=1T||\',\';E 1S=1e.1H(\'.\'),33=1S[0],1W=1S[1]?(3h||\'.\')+1S[1]:\'\';l 33.J(/(\\d)(?=(?:\\d{3})+$)/g,\'$1\'+1T)+1W},4d:r(h,H){p(h==v)l\'\';h=y(h);H=H!=v?y(H):H;E R=!H?-1:h.26(H);l~R?h.M(R+H.t,h.t):h},46:r(h,H){p(h==v)l\'\';h=y(h);H=H!=v?y(H):H;E R=!H?-1:h.34(H);l~R?h.M(R+H.t,h.t):h},4e:r(h,H){p(h==v)l\'\';h=y(h);H=H!=v?y(H):H;E R=!H?-1:h.26(H);l~R?h.M(0,R):h},4f:r(h,H){p(h==v)l\'\';h+=\'\';H=H!=v?\'\'+H:H;E R=h.34(H);l~R?h.M(0,R):h},31:r(1O,Q,1v,32){Q=Q||\', \';1v=1v||\' 35 \';E a=1O.M(),2w=a.3e();p(1O.t>2&&32)1v=C.1N(Q)+1v;l a.t?a.1c(Q)+1v+2w:2w},4i:r(){E 1t=M.1j(1h);1t[3]=1Y;l C.31.2X(C,1t)},4s:r(h){p(h==v)l\'\';E 2r="G�1B��G� G�I�G�I�G�I�G�I�G�I�G�I�G�1B��G�1B��G�I�G�I�G�I�G�4u�I�G�I�G�I�G�I�G�1B��G�1B��G�I�G�I�G�I�G�I�G�4y�I�G�I�G�4x�I�G�I�G�I�G�I�G�I�G�4w",2Z="4n",3i=V 1A(1z(2r),\'g\');h=y(h).1r().J(3i,r(c){E 30=2r.26(c);l 2Z.1y(30)||\'-\'});l C.36(h.J(/[^\\w\\s-]/g,\'\'))},37:r(h,2b){l[2b,h,2b].1c(\'\')},3a:r(h){l C.37(h,\'"\')},1I:r(){E 1q={};1g(E 1C 2g 22){p(!22.2n(1C)||1C.B(/^(?:29|39|2m)$/))3u;1q[1C]=22[1C]}l 1q},20:r(h,U,Q){p(h==v)l\'\';U=~~U;p(Q==v)l 1f(y(h),U);1g(E 20=[];U>0;20[--U]=h){}l 20.1c(Q)},3o:r(17,15){p(17==v&&15==v)l 0;p(17==v)l y(15).t;p(15==v)l y(17).t;17=y(17);15=y(15);E 1x=[],25,1F;1g(E i=0;i<=15.t;i++)1g(E j=0;j<=17.t;j++){p(i&&j)p(17.1y(j-1)===15.1y(i-1))1F=25;L 1F=23.3m(1x[j],1x[j-1],25)+1;L 1F=i+j;25=1x[j];1x[j]=1F}l 1x.3e()}};C.3f=C.1l;C.3p=C.3g;C.3t=C.1N;C.3s=C.3d;C.3C=C.3c;C.3V=C.38;C.39=C.29;C.q=C.3a;p(2c 1I!==\'3b\'){p(2c 2h!==\'3b\'&&2h.1I){2h.1I=C}1I.C=C}L p(2c 2x===\'r\'&&2x.3S){2x(\'3N.2p\',[],r(){l C})}L{1E.O=1E.O||{};1E.O.2p=1E.O.h=C}}(22,y);',62,290,'|||||||||||||||||str||||return||||if||function||length||null|||String|||match|_s|arg|var||�|sep|�|replace|characters|else|slice|padStr|_|case|separator|pos||sprintf|qty|new|||break|||str_format|parse_tree|template|push|str2||str1|field_match|ends|padlen|pad|join|starts|number|strRepeat|for|arguments|argv|call|toUpperCase|trim|_fmt|substr|pruneStr|exec|result|toLowerCase|replacement_field|args|Error|lastSeparator|throw|current|charAt|defaultToWhiteSpace|RegExp|�|prop|entityCode|root|value|field_list|split|exports|step|escapeChars|toString|prototype|rtrim|array|fromCharCode|truncateStr|fmt|parts|tsep|get_type|node_type|decimals|source|true|cache|repeat|z_|this|Math|arg_names|prev|indexOf|output|false|include|nativeTrimLeft|wrapper|typeof|nativeTrimRight|parseNumber|while|in|module|num|toFixed|chars|nativeTrim|reverse|hasOwnProperty|cursor|string|huh|from|reversedEscapeChars|substring|pad_length|test|lastMember|define|arr|pad_character|splice|needle|x25|delimiter|key|isBlank|tmpl|entity|parseFloat|toExponential|parseInt|str_repeat|not|parse|escapeRegExp|howmany|capitalize|underscored|titleize|format|tree_length|variable|type|apply|switch|to|index|toSentence|serial|fnums|lastIndexOf|and|dasherize|surround|rpad|contains|quote|undefined|lpad|lrpad|pop|strip|ltrim|dsep|regex|both|dec|right|min|fosuxX|levenshtein|lstrip|def|abs|center|rstrip|continue|classify|yet|supported|truncate|unshift|vsprintf|is|rjust|positional|named|placeholders|prune|but|gt|quot|apos|amp|lt|underscore|use|strict|trimRight|trimLeft|amd|Object|exist|ljust|expecting|toNumber|does|property|ceil|words|floor|default|found|mixing|strRightBack|lines|shift|NaN|startsWith|humanize|endsWith|strRight|strLeft|strLeftBack|numberFormat|_id|toSentenceSerial|insert|isNaN|da|fA|aaaaaaaaceeeeeiiiilnoooooouuuunczz|succ|unescapeHTML|stripTags|chop|slugify|charCodeAt|ª�|VERSION|º|º�|µ�|count|clean|swapCase|escapeHTML|camelize|Number|1_'.split('|'),0,{}))
+!function(e,n){"use strict";var r=n.prototype.trim,t=n.prototype.trimRight,u=n.prototype.trimLeft,l=function(e){return 1*e||0},i=function(e,n){if(n<1)return"";for(var r="";n>0;)1&n&&(r+=e),n>>=1,e+=e;return r},o=[].slice,a=function(e){return null==e?"\\s":e.source?e.source:"["+h.escapeRegExp(e)+"]"},c={lt:"<",gt:">",quot:'"',apos:"'",amp:"&"},s={};for(var f in c)s[c[f]]=f;var p=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}var r=i,t=function(){return t.cache.hasOwnProperty(arguments[0])||(t.cache[arguments[0]]=t.parse(arguments[0])),t.format.call(null,t.cache[arguments[0]],arguments)};return t.format=function(t,u){var l,i,o,a,c,s,f,h=1,g=t.length,d="",m=[];for(i=0;i<g;i++)if(d=e(t[i]),"string"===d)m.push(t[i]);else if("array"===d){if(a=t[i],a[2])for(l=u[h],o=0;o<a[2].length;o++){if(!l.hasOwnProperty(a[2][o]))throw new Error(p('[_.sprintf] property "%s" does not exist',a[2][o]));l=l[a[2][o]]}else l=a[1]?u[a[1]]:u[h++];if(/[^s]/.test(a[8])&&"number"!=e(l))throw new Error(p("[_.sprintf] expecting number but found %s",e(l)));switch(a[8]){case"b":l=l.toString(2);break;case"c":l=n.fromCharCode(l);break;case"d":l=parseInt(l,10);break;case"e":l=a[7]?l.toExponential(a[7]):l.toExponential();break;case"f":l=a[7]?parseFloat(l).toFixed(a[7]):parseFloat(l);break;case"o":l=l.toString(8);break;case"s":l=(l=n(l))&&a[7]?l.substring(0,a[7]):l;break;case"u":l=Math.abs(l);break;case"x":l=l.toString(16);break;case"X":l=l.toString(16).toUpperCase()}l=/[def]/.test(a[8])&&a[3]&&l>=0?"+"+l:l,s=a[4]?"0"==a[4]?"0":a[4].charAt(1):" ",f=a[6]-n(l).length,c=a[6]?r(s,f):"",m.push(a[5]?l+c:c+l)}return m.join("")},t.cache={},t.parse=function(e){for(var n=e,r=[],t=[],u=0;n;){if(null!==(r=/^[^\x25]+/.exec(n)))t.push(r[0]);else if(null!==(r=/^\x25{2}/.exec(n)))t.push("%");else{if(null===(r=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(n)))throw new Error("[_.sprintf] huh?");if(r[2]){u|=1;var l=[],i=r[2],o=[];if(null===(o=/^([a-z_][a-z_\d]*)/i.exec(i)))throw new Error("[_.sprintf] huh?");for(l.push(o[1]);""!==(i=i.substring(o[0].length));)if(null!==(o=/^\.([a-z_][a-z_\d]*)/i.exec(i)))l.push(o[1]);else{if(null===(o=/^\[(\d+)\]/.exec(i)))throw new Error("[_.sprintf] huh?");l.push(o[1])}r[2]=l}else u|=2;if(3===u)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");t.push(r)}n=n.substring(r[0].length)}return t},t}(),h={VERSION:"2.3.0",isBlank:function(e){return null==e&&(e=""),/^\s*$/.test(e)},stripTags:function(e){return null==e?"":n(e).replace(/<\/?[^>]+>/g,"")},capitalize:function(e){return e=null==e?"":n(e),e.charAt(0).toUpperCase()+e.slice(1)},chop:function(e,r){return null==e?[]:(e=n(e),r=~~r,r>0?e.match(new RegExp(".{1,"+r+"}","g")):[e])},clean:function(e){return h.strip(e).replace(/\s+/g," ")},count:function(e,r){return null==e||null==r?0:n(e).split(r).length-1},chars:function(e){return null==e?[]:n(e).split("")},swapCase:function(e){return null==e?"":n(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})},escapeHTML:function(e){return null==e?"":n(e).replace(/[&<>"']/g,function(e){return"&"+s[e]+";"})},unescapeHTML:function(e){return null==e?"":n(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in c?c[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?n.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?n.fromCharCode(~~t[1]):e})},escapeRegExp:function(e){return null==e?"":n(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")},splice:function(e,n,r,t){var u=h.chars(e);return u.splice(~~n,~~r,t),u.join("")},insert:function(e,n,r){return h.splice(e,n,0,r)},include:function(e,r){return""===r||null!=e&&n(e).indexOf(r)!==-1},join:function(){var e=o.call(arguments),n=e.shift();return null==n&&(n=""),e.join(n)},lines:function(e){return null==e?[]:n(e).split("\n")},reverse:function(e){return h.chars(e).reverse().join("")},startsWith:function(e,r){return""===r||null!=e&&null!=r&&(e=n(e),r=n(r),e.length>=r.length&&e.slice(0,r.length)===r)},endsWith:function(e,r){return""===r||null!=e&&null!=r&&(e=n(e),r=n(r),e.length>=r.length&&e.slice(e.length-r.length)===r)},succ:function(e){return null==e?"":(e=n(e),e.slice(0,-1)+n.fromCharCode(e.charCodeAt(e.length-1)+1))},titleize:function(e){return null==e?"":n(e).replace(/(?:^|\s)\S/g,function(e){return e.toUpperCase()})},camelize:function(e){return h.trim(e).replace(/[-_\s]+(.)?/g,function(e,n){return n.toUpperCase()})},underscored:function(e){return h.trim(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()},dasherize:function(e){return h.trim(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()},classify:function(e){return h.titleize(n(e).replace(/_/g," ")).replace(/\s/g,"")},humanize:function(e){return h.capitalize(h.underscored(e).replace(/_id$/,"").replace(/_/g," "))},trim:function(e,t){return null==e?"":!t&&r?r.call(e):(t=a(t),n(e).replace(new RegExp("^"+t+"+|"+t+"+$","g"),""))},ltrim:function(e,r){return null==e?"":!r&&u?u.call(e):(r=a(r),n(e).replace(new RegExp("^"+r+"+"),""))},rtrim:function(e,r){return null==e?"":!r&&t?t.call(e):(r=a(r),n(e).replace(new RegExp(r+"+$"),""))},truncate:function(e,r,t){return null==e?"":(e=n(e),t=t||"...",r=~~r,e.length>r?e.slice(0,r)+t:e)},prune:function(e,r,t){if(null==e)return"";if(e=n(e),r=~~r,t=null!=t?n(t):"...",e.length<=r)return e;var u=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},l=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,u);return l=l.slice(l.length-2).match(/\w\w/)?l.replace(/\s*\S+$/,""):h.rtrim(l.slice(0,l.length-1)),(l+t).length>e.length?e:e.slice(0,l.length)+t},words:function(e,n){return h.isBlank(e)?[]:h.trim(e,n).split(n||/\s+/)},pad:function(e,r,t,u){e=null==e?"":n(e),r=~~r;var l=0;switch(t?t.length>1&&(t=t.charAt(0)):t=" ",u){case"right":return l=r-e.length,e+i(t,l);case"both":return l=r-e.length,i(t,Math.ceil(l/2))+e+i(t,Math.floor(l/2));default:return l=r-e.length,i(t,l)+e}},lpad:function(e,n,r){return h.pad(e,n,r)},rpad:function(e,n,r){return h.pad(e,n,r,"right")},lrpad:function(e,n,r){return h.pad(e,n,r,"both")},sprintf:p,vsprintf:function(e,n){return n.unshift(e),p.apply(null,n)},toNumber:function(e,r){if(null==e||""==e)return 0;e=n(e);var t=l(l(e).toFixed(~~r));return 0!==t||e.match(/^0+$/)?t:Number.NaN},numberFormat:function(e,n,r,t){if(isNaN(e)||null==e)return"";e=e.toFixed(~~n),t=t||",";var u=e.split("."),l=u[0],i=u[1]?(r||".")+u[1]:"";return l.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+t)+i},strRight:function(e,r){if(null==e)return"";e=n(e),r=null!=r?n(r):r;var t=r?e.indexOf(r):-1;return~t?e.slice(t+r.length,e.length):e},strRightBack:function(e,r){if(null==e)return"";e=n(e),r=null!=r?n(r):r;var t=r?e.lastIndexOf(r):-1;return~t?e.slice(t+r.length,e.length):e},strLeft:function(e,r){if(null==e)return"";e=n(e),r=null!=r?n(r):r;var t=r?e.indexOf(r):-1;return~t?e.slice(0,t):e},strLeftBack:function(e,n){if(null==e)return"";e+="",n=null!=n?""+n:n;var r=e.lastIndexOf(n);return~r?e.slice(0,r):e},toSentence:function(e,n,r,t){n=n||", ",r=r||" and ";var u=e.slice(),l=u.pop();return e.length>2&&t&&(r=h.rtrim(n)+r),u.length?u.join(n)+r+l:l},toSentenceSerial:function(){var e=o.call(arguments);return e[3]=!0,h.toSentence.apply(h,e)},slugify:function(e){if(null==e)return"";var r="ąà áäâãåæćęèéëêìíïîłńòóöôõøùúüûñçżź",t="aaaaaaaaceeeeeiiiilnoooooouuuunczz",u=new RegExp(a(r),"g");return e=n(e).toLowerCase().replace(u,function(e){var n=r.indexOf(e);return t.charAt(n)||"-"}),h.dasherize(e.replace(/[^\w\s-]/g,""))},surround:function(e,n){return[n,e,n].join("")},quote:function(e){return h.surround(e,'"')},exports:function(){var e={};for(var n in this)this.hasOwnProperty(n)&&!n.match(/^(?:include|contains|reverse)$/)&&(e[n]=this[n]);return e},repeat:function(e,r,t){if(null==e)return"";if(r=~~r,null==t)return i(n(e),r);for(var u=[];r>0;u[--r]=e);return u.join(t)},levenshtein:function(e,r){if(null==e&&null==r)return 0;if(null==e)return n(r).length;if(null==r)return n(e).length;e=n(e),r=n(r);for(var t,u,l=[],i=0;i<=r.length;i++)for(var o=0;o<=e.length;o++)u=i&&o?e.charAt(o-1)===r.charAt(i-1)?t:Math.min(l[o],l[o-1],t)+1:i+o,t=l[o],l[o]=u;return l.pop()}};h.strip=h.trim,h.lstrip=h.ltrim,h.rstrip=h.rtrim,h.center=h.lrpad,h.rjust=h.lpad,h.ljust=h.rpad,h.contains=h.include,h.q=h.quote,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(module.exports=h),exports._s=h):"function"==typeof define&&define.amd?define("underscore.string",[],function(){return h}):(e._=e._||{},e._.string=e._.str=h)}(this,String);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/tinymce_placeholder.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/tinymce_placeholder.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a02a28f6fe4ec492cda35cf05d7a19bc77e5ba6
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/tinymce_placeholder.php
@@ -0,0 +1,11 @@
+<script type="text/underscore-template" id="ngg-igw-placeholder">
+    <div class="mceItem mceNonEditable nggPlaceholder" id="<%- ref %>" data-shortcode="<%- shortcode %>" data-mce-resize="false" data-mce-placeholder="1" contenteditable="false">
+        <h3><%- nextgen_gallery %></h3>
+        <span title="<%- edit %>" class="nggPlaceholderButton nggIgwEdit">
+            <i class="fa fa-pencil-square-o" aria-hidden="true"></i>&nbsp;
+        </span>
+        <span title="<%- remove %>" class="nggPlaceholderButton nggIgwRemove">
+            <i class="fa fa-times-circle" aria-hidden="true"></i>&nbsp;
+        </span>
+    </div>
+</script>
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php
index 289d06ce9ba5a3e1b789cb63e9ff3d21bc700c56..8e094f3a9948ffd6979b4784d87807465c12414d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php
@@ -1,9 +1,4 @@
 <?php
-/***
-{
-		Module: photocrati-cache
-}
-***/
 class M_Cache extends C_Base_Module
 {
     /**
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/package.module.cache.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/package.module.cache.php
index 088232c396577971b7cd1ce9c6f9952b88f806bf..d19bd8410250693fa6aeaef1a0fd6e3dfe55c5e6 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/package.module.cache.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/package.module.cache.php
@@ -1,8 +1,13 @@
 <?php
+/**
+ * Class C_Cache
+ * @mixin Mixin_Cache
+ * @implements I_Cache
+ */
 class C_Cache extends C_Component
 {
     public static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Cache');
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php
index 0459459804265e1316bfe12848c7b89ce676e39c..0864e908c322d12c56f75cc930fa57ef388e8919 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php
@@ -1,11 +1,4 @@
 <?php
-
-/***
- {
-	Module: photocrati-datamapper,
-	Depends: { photocrati-validation }
- }
-***/
 class M_DataMapper extends C_Base_Module
 {
 	function define()
@@ -14,7 +7,7 @@ class M_DataMapper extends C_Base_Module
 			'photocrati-datamapper',
 			'DataMapper',
 			'Provides a database abstraction layer following the DataMapper pattern',
-			'0.9',
+			'0.10',
 			'https://www.imagely.com',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/package.module.datamapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/package.module.datamapper.php
index 70b3776212166f80dcdf704917b02891de2b9505..6f61f3e55491648d193bb047e2bcb262d6ce327b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/package.module.datamapper.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/package.module.datamapper.php
@@ -1,30 +1,39 @@
 <?php
+/**
+ * Class A_DataMapper_Factory
+ * @mixin C_Component_Factory
+ * @adapts I_Component_Factory
+ */
 class A_DataMapper_Factory extends Mixin
 {
-    public function datamapper_model($mapper, $properties = array(), $context = FALSE)
+    function datamapper_model($mapper, $properties = array(), $context = FALSE)
     {
         return new C_DataMapper_Model($mapper, $properties = array(), $context);
     }
-    public function datamapper($object_name, $context = FALSE)
+    function datamapper($object_name, $context = FALSE)
     {
         return new C_DataMapper($object_name, $context);
     }
-    public function custom_table_datamapper($object_name, $context = FALSE)
+    function custom_table_datamapper($object_name, $context = FALSE)
     {
         return new C_CustomTable_DataMapper_Driver($object_name, $context);
     }
-    public function custom_post_datamapper($object_name, $context = FALSE)
+    function custom_post_datamapper($object_name, $context = FALSE)
     {
         return new C_CustomPost_DataMapper_Driver($object_name, $context);
     }
 }
+/**
+ * Provides instance methods for C_CustomPost_DataMapper_Driver
+ * @mixin C_CustomPost_DataMapper_Driver
+ */
 class Mixin_CustomPost_DataMapper_Driver extends Mixin
 {
     /**
      * Returns a list of querable table columns for posts
      * @return array
      */
-    public function _get_querable_table_columns()
+    function _get_querable_table_columns()
     {
         return array('name', 'author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count');
     }
@@ -34,7 +43,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param type $fields
      * @return C_DataMapper_Driver_Base
      */
-    public function select($fields = '*')
+    function select($fields = '*')
     {
         $this->object->_query_args = array('post_type' => $this->object->get_object_name(), 'paged' => FALSE, 'fields' => $fields, 'post_status' => 'any', 'datamapper' => TRUE, 'posts_per_page' => -1, 'is_select' => TRUE, 'is_delete' => FALSE);
         return $this->object;
@@ -45,10 +54,10 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param type $direction
      * @return C_DataMapper_Driver_Base
      */
-    public function order_by($order_by, $direction = 'ASC')
+    function order_by($order_by, $direction = 'ASC')
     {
         // Make an exception for the rand() method
-        $order_by = preg_replace('/rand\\(\\s*\\)/', 'rand', $order_by);
+        $order_by = preg_replace("/rand\\(\\s*\\)/", 'rand', $order_by);
         if (in_array($order_by, $this->object->_get_querable_table_columns())) {
             $this->object->_query_args['orderby'] = $order_by;
         } else {
@@ -65,7 +74,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param integer $offset
      * @return C_DataMapper_Driver_Base
      */
-    public function limit($max, $offset = FALSE)
+    function limit($max, $offset = FALSE)
     {
         if ($max) {
             $this->object->_query_args['paged'] = TRUE;
@@ -82,7 +91,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * Specifies a list of columns to group by
      * @param array|string $columns
      */
-    public function group_by($columns = array())
+    function group_by($columns = array())
     {
         if (!isset($this->object->_query_args['group_by_columns'])) {
             $this->object->_query_args['group_by_columns'] = $columns;
@@ -96,7 +105,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param array $where_clauses
      * @param string $join
      */
-    public function _add_where_clause($where_clauses, $join)
+    function _add_where_clause($where_clauses, $join)
     {
         foreach ($where_clauses as $clause) {
             // $clause => array(
@@ -211,7 +220,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param stdObject|C_DataMapper_Model $entity
      * @return type
      */
-    public function destroy($entity, $skip_trash = TRUE)
+    function destroy($entity, $skip_trash = TRUE)
     {
         $retval = FALSE;
         $key = $this->object->get_primary_key_column();
@@ -237,7 +246,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param boolean $model
      * @return \stdClass
      */
-    public function convert_post_to_entity($post, $model = FALSE)
+    function convert_post_to_entity($post, $model = FALSE)
     {
         $entity = new stdClass();
         // Unserialize the post_content_filtered field
@@ -270,7 +279,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param type $entity
      * @return type
      */
-    public function _convert_entity_to_post($entity)
+    function _convert_entity_to_post($entity)
     {
         // Was a model passed instead of an entity?
         $post = $entity;
@@ -311,7 +320,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @global wpdb $wpdb
      * @return wpdb
      */
-    public function _wpdb()
+    function _wpdb()
     {
         global $wpdb;
         return $wpdb;
@@ -320,7 +329,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * Flush and update all postmeta for a particular post
      * @param int $post_id
      */
-    public function _flush_and_update_postmeta($post_id, $entity, $omit = array())
+    function _flush_and_update_postmeta($post_id, $entity, $omit = array())
     {
         // We need to insert post meta data for each property
         // Unfortunately, that means flushing all existing postmeta
@@ -344,7 +353,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
             if (is_array($value) or is_object($value)) {
                 $value = $this->object->serialize($value);
             }
-            $sql_parts[] = $wpdb->prepare('(%s, %s, %s)', $post_id, $key, $value);
+            $sql_parts[] = $wpdb->prepare("(%s, %s, %s)", $post_id, $key, $value);
         }
         $wpdb->query("INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) VALUES " . implode(',', $sql_parts));
     }
@@ -352,7 +361,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * Saves an entity to the database
      * @param stdObject $entity
      */
-    public function _save_entity($entity)
+    function _save_entity($entity)
     {
         $post = $this->object->_convert_entity_to_post($entity);
         $primary_key = $this->object->get_primary_key_column();
@@ -378,7 +387,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * Determines whether the current statement is SELECT
      * @return boolean
      */
-    public function is_select_statement()
+    function is_select_statement()
     {
         return isset($this->object->_query_args['is_select']) && $this->object->_query_args['is_select'];
     }
@@ -386,14 +395,14 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * Determines whether the current statement is DELETE
      * @return type
      */
-    public function is_delete_statement()
+    function is_delete_statement()
     {
         return isset($this->object->_query_args['is_delete']) && $this->object->_query_args['is_delete'];
     }
     /**
      * Starts a new DELETE statement
      */
-    public function delete()
+    function delete()
     {
         $this->object->select();
         $this->object->_query_args['is_select'] = FALSE;
@@ -405,7 +414,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param  string $sql optionally run the specified query
      * @return array
      */
-    public function run_query($sql = FALSE, $model = FALSE, $convert_to_entities = TRUE)
+    function run_query($sql = FALSE, $model = FALSE, $convert_to_entities = TRUE)
     {
         $retval = array();
         $results = array();
@@ -459,7 +468,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * plugin overrides our query
      * @param $query
      */
-    public function set_query_args($query)
+    function set_query_args($query)
     {
         if ($query->get('datamapper')) {
             $query->query_vars = $this->object->_query_args;
@@ -472,7 +481,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param array $conditions
      * @return C_DataMapper_Entity
      */
-    public function find_last($conditions = array(), $model = FALSE)
+    function find_last($conditions = array(), $model = FALSE)
     {
         $retval = NULL;
         // Get row number for the last row
@@ -498,7 +507,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * Returns the number of total records/entities that exist
      * @return int
      */
-    public function count()
+    function count()
     {
         $this->object->select($this->object->get_primary_key_column());
         $retval = $this->object->run_query(FALSE, FALSE, FALSE);
@@ -509,7 +518,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param stdClass $entity
      * @return string
      */
-    public function get_post_title($entity)
+    function get_post_title($entity)
     {
         return "Untitled {$this->object->get_object_name()}";
     }
@@ -518,26 +527,31 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin
      * @param stdClass $entity
      * @return string
      */
-    public function get_post_excerpt($entity)
+    function get_post_excerpt($entity)
     {
         return '';
     }
 }
+/**
+ * Class C_DataMapper_Driver_Base
+ * @mixin Mixin_DataMapper_Driver_Base
+ * @implements I_DataMapper_Driver
+ */
 class C_DataMapper_Driver_Base extends C_Component
 {
-    public $_object_name;
-    public $_model_factory_method = FALSE;
-    public $_columns = array();
-    public $_table_columns = array();
-    public $_serialized_columns = array();
-    public function define($object_name = FALSE, $context = FALSE)
+    var $_object_name;
+    var $_model_factory_method = FALSE;
+    var $_columns = array();
+    var $_table_columns = array();
+    var $_serialized_columns = array();
+    function define($object_name = FALSE, $context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_DataMapper_Driver_Base');
         $this->implement('I_DataMapper_Driver');
         $this->_object_name = $object_name;
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_cache = array();
@@ -550,7 +564,7 @@ class C_DataMapper_Driver_Base extends C_Component
      * Gets the object name
      * @return string
      */
-    public function get_object_name()
+    function get_object_name()
     {
         return $this->_object_name;
     }
@@ -559,36 +573,49 @@ class C_DataMapper_Driver_Base extends C_Component
      * @global string $table_prefix
      * @return string
      */
-    public function get_table_name()
+    function get_table_name()
     {
         global $table_prefix;
-        return apply_filters('ngg_datamapper_table_name', $table_prefix . $this->_object_name, $this->_object_name);
+        global $wpdb;
+        $prefix = $table_prefix;
+        if ($wpdb != null && $wpdb->prefix != null) {
+            $prefix = $wpdb->prefix;
+        }
+        return apply_filters('ngg_datamapper_table_name', $prefix . $this->_object_name, $this->_object_name);
     }
     /**
-     * Looks up using SQL the columns existing in the database
+     * Looks up using SQL the columns existing in the database, result is cached
      */
-    public function lookup_columns()
+    function lookup_columns()
     {
         // Avoid doing multiple SHOW COLUMNS if we can help it
         $key = C_Photocrati_Transient_Manager::create_key('col_in_' . $this->get_table_name(), 'columns');
         $this->_table_columns = C_Photocrati_Transient_Manager::fetch($key, FALSE);
         if (!$this->_table_columns) {
-            global $wpdb;
-            $this->_table_columns = array();
-            $sql = "SHOW COLUMNS FROM `{$this->get_table_name()}`";
-            foreach ($wpdb->get_results($sql) as $row) {
-                $this->_table_columns[] = $row->Field;
-            }
-            C_Photocrati_Transient_Manager::update($key, $this->_table_columns);
+            $this->object->update_columns_cache();
         }
         return $this->_table_columns;
     }
+    /**
+     * Looks up using SQL the columns existing in the database
+     */
+    function update_columns_cache()
+    {
+        $key = C_Photocrati_Transient_Manager::create_key('col_in_' . $this->get_table_name(), 'columns');
+        global $wpdb;
+        $this->_table_columns = array();
+        $sql = "SHOW COLUMNS FROM `{$this->get_table_name()}`";
+        foreach ($wpdb->get_results($sql) as $row) {
+            $this->_table_columns[] = $row->Field;
+        }
+        C_Photocrati_Transient_Manager::update($key, $this->_table_columns);
+    }
     /**
      * Determines whether a column is present for the table
      * @param string $column_name
      * @return string
      */
-    public function has_column($column_name)
+    function has_column($column_name)
     {
         if (empty($this->object->_table_columns)) {
             $this->object->lookup_columns();
@@ -599,14 +626,14 @@ class C_DataMapper_Driver_Base extends C_Component
      * Sets the name of the factory method used to create a model for this entity
      * @param string $method_name
      */
-    public function set_model_factory_method($method_name)
+    function set_model_factory_method($method_name)
     {
         $this->_model_factory_method = $method_name;
     }
     /**
      * Gets the name of the factory method used to create a model for this entity
      */
-    public function get_model_factory_method()
+    function get_model_factory_method()
     {
         return $this->_model_factory_method;
     }
@@ -614,7 +641,7 @@ class C_DataMapper_Driver_Base extends C_Component
      * Gets the name of the primary key column
      * @return string
      */
-    public function get_primary_key_column()
+    function get_primary_key_column()
     {
         return $this->_primary_key_column;
     }
@@ -622,17 +649,17 @@ class C_DataMapper_Driver_Base extends C_Component
      * Gets the class name of the driver used
      * @return string
      */
-    public function get_driver_class_name()
+    function get_driver_class_name()
     {
         return get_called_class();
     }
-    public function cache($key, $results)
+    function cache($key, $results)
     {
         if ($this->object->_use_cache) {
             $this->_cache[$key] = $results;
         }
     }
-    public function get_from_cache($key, $default = NULL)
+    function get_from_cache($key, $default = NULL)
     {
         if ($this->object->_use_cache && isset($this->_cache[$key])) {
             return $this->_cache[$key];
@@ -641,13 +668,17 @@ class C_DataMapper_Driver_Base extends C_Component
         }
     }
 }
+/**
+ * Provides instance methods for C_CustomTable_DataMapper_Driver
+ * @mixin C_CustomTable_DataMapper_Driver
+ */
 class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
 {
     /**
      * Gets the name of the primary key column
      * @return string
      */
-    public function get_primary_key_column()
+    function get_primary_key_column()
     {
         return $this->object->_primary_key_column;
     }
@@ -657,7 +688,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * specify DB columns
      * @param string $fields
      */
-    public function select($fields = NULL)
+    function select($fields = NULL)
     {
         // Create a fresh slate
         $this->object->_init();
@@ -671,7 +702,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Determines whether we're going to execute a SELECT statement
      * @return boolean
      */
-    public function is_select_statement()
+    function is_select_statement()
     {
         return $this->object->_select_clause ? TRUE : FALSE;
     }
@@ -679,18 +710,18 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Determines if we're going to be executing a DELETE statement
      * @return type
      */
-    public function is_delete_statement()
+    function is_delete_statement()
     {
         return $this->object->_delete_clause ? TRUE : FALSE;
     }
     /**
      * Start a delete statement
      */
-    public function delete()
+    function delete()
     {
         // Create a fresh slate
         $this->object->_init();
-        $this->object->_delete_clause = 'DELETE';
+        $this->object->_delete_clause = "DELETE";
         return $this->object;
     }
     /**
@@ -699,10 +730,10 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param $order_by
      * @param $direction
      */
-    public function order_by($order_by, $direction = 'ASC')
+    function order_by($order_by, $direction = 'ASC')
     {
         // We treat the rand() function as an exception
-        if (preg_match('/rand\\(\\s*\\)/', $order_by)) {
+        if (preg_match("/rand\\(\\s*\\)/", $order_by)) {
             $order = 'rand()';
         } else {
             $order_by = $this->object->_clean_column($order_by);
@@ -721,12 +752,12 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param integer $max
      * @param integer $offset
      */
-    public function limit($max, $offset = 0)
+    function limit($max, $offset = 0)
     {
         if ($offset) {
-            $limit = $this->_wpdb()->prepare('LIMIT %d, %d', max(0, $offset), $max);
+            $limit = $this->_wpdb()->prepare("LIMIT %d, %d", max(0, $offset), $max);
         } else {
-            $limit = $this->_wpdb()->prepare('LIMIT %d', max(0, $max));
+            $limit = $this->_wpdb()->prepare("LIMIT %d", max(0, $max));
         }
         if ($limit) {
             $this->object->_limit_clause = $limit;
@@ -737,7 +768,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Specifics a group by clause for one or more columns
      * @param array|string $columns
      */
-    public function group_by($columns = array())
+    function group_by($columns = array())
     {
         if (!is_array($columns)) {
             $columns = array($columns);
@@ -750,7 +781,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param array $where_clauses
      * @param string $join
      */
-    public function _add_where_clause($where_clauses, $join)
+    function _add_where_clause($where_clauses, $join)
     {
         $clauses = array();
         foreach ($where_clauses as $clause) {
@@ -781,7 +812,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Returns the total number of entities known
      * @return type
      */
-    public function count()
+    function count()
     {
         $retval = 0;
         $key = $this->object->get_primary_key_column();
@@ -795,7 +826,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Returns the generated SQL query to be executed
      * @return string
      */
-    public function get_generated_query($no_entities = FALSE)
+    function get_generated_query($no_entities = FALSE)
     {
         $sql = array();
         if ($this->object->is_select_statement()) {
@@ -829,7 +860,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param $sql optionally run the specified SQL insteads
      * return
      */
-    public function run_query($sql = FALSE, $model = FALSE, $no_entities = FALSE)
+    function run_query($sql = FALSE, $model = FALSE, $no_entities = FALSE)
     {
         $results = FALSE;
         $retval = array();
@@ -874,7 +905,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
                 }
             }
         } elseif ($this->object->debug) {
-            var_dump('No entities returned from query');
+            var_dump("No entities returned from query");
         }
         // Just a safety check
         if (!$retval) {
@@ -886,7 +917,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Stores the entity
      * @param stdClass $entity
      */
-    public function _save_entity($entity)
+    function _save_entity($entity)
     {
         $retval = FALSE;
         unset($entity->id_field);
@@ -917,7 +948,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param stdObject $entity
      * @return array
      */
-    public function _convert_to_table_data($entity)
+    function _convert_to_table_data($entity)
     {
         $data = (array) $entity;
         foreach ($data as $key => $value) {
@@ -932,7 +963,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param stdObject|C_DataMapper_Model|int $entity
      * @return boolean
      */
-    public function destroy($entity)
+    function destroy($entity)
     {
         $retval = FALSE;
         $key = $this->object->get_primary_key_column();
@@ -954,7 +985,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param stdObject $entity
      * @return boolean
      */
-    public function _create($entity)
+    function _create($entity)
     {
         $retval = FALSE;
         $id = $this->object->_wpdb()->insert($this->object->get_table_name(), $this->object->_convert_to_table_data($entity));
@@ -968,7 +999,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * Updates a record in the database
      * @param stdObject $entity
      */
-    public function _update($entity)
+    function _update($entity)
     {
         $key = $this->object->get_primary_key_column();
         return $this->object->_wpdb()->update($this->object->get_table_name(), $this->object->_convert_to_table_data($entity), array($key => $entity->{$key}));
@@ -978,7 +1009,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
      * @param array $conditions
      * @return C_DataMapper_Entity
      */
-    public function find_last($conditions = array(), $model = FALSE)
+    function find_last($conditions = array(), $model = FALSE)
     {
         $retval = NULL;
         // Get row number for the last row
@@ -992,26 +1023,30 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
         }
         return $retval;
     }
-    public function _add_column($column_name, $datatype, $default_value = NULL)
+    function _add_column($column_name, $datatype, $default_value = NULL)
     {
         $sql = "ALTER TABLE `{$this->get_table_name()}` ADD COLUMN `{$column_name}` {$datatype}";
         if ($default_value) {
             if (is_string($default_value)) {
-                $default_value = str_replace('\'', '\\\'', $default_value);
+                $default_value = str_replace("'", "\\'", $default_value);
             }
-            $sql .= ' NOT NULL DEFAULT ' . (is_string($default_value) ? "'{$default_value}" : "{$default_value}");
+            $sql .= " NOT NULL DEFAULT " . (is_string($default_value) ? "'{$default_value}" : "{$default_value}");
         }
-        return $this->object->_wpdb()->query($sql) ? TRUE : FALSE;
+        $return = $this->object->_wpdb()->query($sql) ? TRUE : FALSE;
+        $this->object->update_columns_cache();
+        return $return;
     }
-    public function _remove_column($column_name)
+    function _remove_column($column_name)
     {
         $sql = "ALTER TABLE `{$this->get_table_name()}` DROP COLUMN `{$column_name}`";
-        return $this->object->_wpdb()->query($sql) ? TRUE : FALSE;
+        $return = $this->object->_wpdb()->query($sql) ? TRUE : FALSE;
+        $this->object->update_columns_cache();
+        return $return;
     }
     /**
      * Migrates the schema of the database
      */
-    public function migrate()
+    function migrate()
     {
         if (!$this->object->_columns) {
             throw new E_ColumnsNotDefinedException("Columns not defined for {$this->get_table_name()}");
@@ -1036,9 +1071,10 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
         if ($added or $removed) {
             // var_dump($this->object->_table_columns);
             $this->object->lookup_columns();
+            // var_dump($added, $removed);
         }
     }
-    public function _init()
+    function _init()
     {
         $this->object->_where_clauses = array();
         $this->object->_order_clauses = array();
@@ -1047,26 +1083,30 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin
         $this->object->_select_clause = '';
     }
 }
+/**
+ * Class C_CustomTable_DataMapper_Driver
+ * @mixin C_CustomTable_DataMapper_Driver_Mixin
+ */
 class C_CustomTable_DataMapper_Driver extends C_DataMapper_Driver_Base
 {
     /**
      * The WordPress Database Connection
      * @var wpdb
      */
-    public $_where_clauses = array();
-    public $_order_clauses = array();
-    public $_group_by_columns = array();
-    public $_limit_clause = '';
-    public $_select_clause = '';
-    public $_delete_clause = '';
+    var $_where_clauses = array();
+    var $_order_clauses = array();
+    var $_group_by_columns = array();
+    var $_limit_clause = '';
+    var $_select_clause = '';
+    var $_delete_clause = '';
     public $_use_cache = TRUE;
-    public function define($object_name = FALSE, $context = FALSE)
+    function define($object_name = FALSE, $context = FALSE)
     {
         parent::define($object_name, $context);
         $this->add_mixin('C_CustomTable_DataMapper_Driver_Mixin');
         $this->implement('I_CustomTable_DataMapper');
     }
-    public function initialize($object_name = FALSE)
+    function initialize($object_name = FALSE)
     {
         parent::initialize($object_name);
         if (!isset($this->_primary_key_column)) {
@@ -1079,7 +1119,7 @@ class C_CustomTable_DataMapper_Driver extends C_DataMapper_Driver_Base
      * @global wpdb $wpdb
      * @return wpdb
      */
-    public function _wpdb()
+    function _wpdb()
     {
         global $wpdb;
         return $wpdb;
@@ -1087,7 +1127,7 @@ class C_CustomTable_DataMapper_Driver extends C_DataMapper_Driver_Base
     /**
      * Looks up the primary key column for this table
      */
-    public function _lookup_primary_key_column()
+    function _lookup_primary_key_column()
     {
         $key = $this->_wpdb()->get_row("SHOW INDEX FROM {$this->get_table_name()} WHERE Key_name='PRIMARY'", ARRAY_A);
         if (!$key) {
@@ -1112,7 +1152,7 @@ class E_ColumnsNotDefinedException extends E_NggErrorException
  */
 class E_InvalidEntityException extends E_NggErrorException
 {
-    public function __construct($message_or_previous = FALSE, $code = 0, $previous = NULL)
+    function __construct($message_or_previous = FALSE, $code = 0, $previous = NULL)
     {
         // We don't know if we have been passed a message yet or not
         $message = FALSE;
@@ -1126,13 +1166,15 @@ class E_InvalidEntityException extends E_NggErrorException
         }
         // If no message was provided, create a default message
         if (!$message) {
-            $message = 'Invalid data type used for entity. Please use stdClass
-				or a subclass of C_DataMapper_Model. Arrays will be supported in
-				the future.';
+            $message = "Invalid data type used for entity. Please use stdClass\n\t\t\t\tor a subclass of C_DataMapper_Model. Arrays will be supported in\n\t\t\t\tthe future.";
         }
         parent::__construct($message, $code);
     }
 }
+/**
+ * Provides instance methods for C_DataMapper_Driver_Base
+ * @mixin C_DataMapper_Driver_Base
+ */
 class Mixin_DataMapper_Driver_Base extends Mixin
 {
     /**
@@ -1140,19 +1182,19 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param string $val
      * @return string
      */
-    public function _clean_column($val)
+    function _clean_column($val)
     {
-        return str_replace(array(';', '\'', '"', '`'), array(''), $val);
+        return str_replace(array(';', "'", '"', '`'), array(''), $val);
     }
     /**
      * Notes that a particular columns is serialized, and should be unserialized when converted to an entity
      * @param $column
      */
-    public function add_serialized_column($column)
+    function add_serialized_column($column)
     {
         $this->object->_serialized_columns[] = $column;
     }
-    public function unserialize_columns($object)
+    function unserialize_columns($object)
     {
         foreach ($this->object->_serialized_columns as $column) {
             if (isset($object->{$column}) && is_string($object->{$column})) {
@@ -1165,7 +1207,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param mixed $value
      * @return string
      */
-    public function serialize($value)
+    function serialize($value)
     {
         return M_DataMapper::serialize($value);
     }
@@ -1174,7 +1216,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param string $value
      * @return mixed
      */
-    public function unserialize($value)
+    function unserialize($value)
     {
         return M_DataMapper::unserialize($value);
     }
@@ -1183,7 +1225,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param int|stdClass|C_DataMapper_Model $entity
      * @return C_DataMapper_Entity
      */
-    public function find($entity, $model = FALSE)
+    function find($entity, $model = FALSE)
     {
         $retval = NULL;
         // Get primary key of the entity
@@ -1205,7 +1247,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param array $conditions
      * @return C_DataMapper_Entity
      */
-    public function find_first($conditions = array(), $model = FALSE)
+    function find_first($conditions = array(), $model = FALSE)
     {
         $results = $this->object->select()->where_and($conditions)->limit(1, 0)->run_query();
         if ($results) {
@@ -1219,7 +1261,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param array $conditions
      * @return array
      */
-    public function find_all($conditions = array(), $model = FALSE)
+    function find_all($conditions = array(), $model = FALSE)
     {
         // Sometimes users will forget that the first parameter is conditions, and think it's $model instead
         if ($conditions === TRUE) {
@@ -1228,7 +1270,6 @@ class Mixin_DataMapper_Driver_Base extends Mixin
         }
         if ($conditions === FALSE) {
             $conditions = array();
-            $model = FALSE;
         }
         $results = $this->object->select()->where_and($conditions)->run_query();
         if ($results && $model) {
@@ -1247,15 +1288,15 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      *
      *		)
      */
-    public function where_and($conditions = array())
+    function where_and($conditions = array())
     {
         return $this->object->_where($conditions, 'AND');
     }
-    public function where_or($conditions = array())
+    function where_or($conditions = array())
     {
         return $this->object->where($conditions, 'OR');
     }
-    public function where($conditions = array())
+    function where($conditions = array())
     {
         return $this->object->_where($conditions, 'AND');
     }
@@ -1272,7 +1313,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param string $operator
      * @return ExtensibleObject
      */
-    public function _where($conditions = array(), $operator)
+    function _where($conditions = array(), $operator)
     {
         $where_clauses = array();
         // If conditions is not an array, make it one
@@ -1313,7 +1354,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param string $condition
      * @return array
      */
-    public function _parse_where_clause($condition)
+    function _parse_where_clause($condition)
     {
         $column = '';
         $operator = '';
@@ -1353,11 +1394,11 @@ class Mixin_DataMapper_Driver_Base extends Mixin
             $condition = $wpdb->prepare($condition, $binds);
         }
         // Parse the where clause
-        if (preg_match('/^[^\\s]+/', $condition, $match)) {
+        if (preg_match("/^[^\\s]+/", $condition, $match)) {
             $column = trim(array_shift($match));
             $condition = str_replace($column, '', $condition);
         }
-        if (preg_match('/(NOT )?IN|(NOT )?LIKE|(NOT )?BETWEEN|[=!<>]+/i', $condition, $match)) {
+        if (preg_match("/(NOT )?IN|(NOT )?LIKE|(NOT )?BETWEEN|[=!<>]+/i", $condition, $match)) {
             $operator = trim(array_shift($match));
             $condition = str_replace($operator, '', $condition);
             $operator = strtolower($operator);
@@ -1368,9 +1409,9 @@ class Mixin_DataMapper_Driver_Base extends Mixin
         // has multiple values, we attempt to split the values apart into an
         // array and iterate over them individually
         if ($operator == 'in') {
-            $values = preg_split('/\'?\\s?(,)\\s?\'?/i', $value);
+            $values = preg_split("/'?\\s?(,)\\s?'?/i", $value);
         } elseif ($operator == 'between') {
-            $values = preg_split('/\'?\\s?(AND)\\s?\'?/i', $value);
+            $values = preg_split("/'?\\s?(AND)\\s?'?/i", $value);
         }
         // If there's a single value, treat it as an array so that we
         // can still iterate
@@ -1378,8 +1419,8 @@ class Mixin_DataMapper_Driver_Base extends Mixin
             $values = array($value);
         }
         foreach ($values as $index => $value) {
-            $value = preg_replace('/^(\\()?\'/', '', $value);
-            $value = preg_replace('/\'(\\))?$/', '', $value);
+            $value = preg_replace("/^(\\()?'/", '', $value);
+            $value = preg_replace("/'(\\))?\$/", '', $value);
             $values[$index] = $value;
         }
         if (count($values) > 1) {
@@ -1394,7 +1435,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param stdObject $stdObject
      * @return stdObject
      */
-    public function _convert_to_entity($stdObject)
+    function _convert_to_entity($stdObject)
     {
         // Add name of the id_field to the entity, and convert
         // the ID to an integer
@@ -1412,40 +1453,43 @@ class Mixin_DataMapper_Driver_Base extends Mixin
         }
         return $stdObject;
     }
-    public function strip_slashes($stdObject)
-    {
-        foreach (get_object_vars($stdObject) as $key => $value) {
-            if (is_string($value)) {
-                $stdObject->{$key} = str_replace('\\\'', '\'', str_replace('\\"', '"', str_replace('\\\\', '\\', $value)));
-            } elseif (is_object($value)) {
-                $stdObject->{$key} = $this->strip_slashes_deep($value);
-            } elseif (is_array($value)) {
-                $stdObject->{$key} = $this->strip_slashes_deep($value);
-            }
-        }
-        return $stdObject;
-    }
-    public function strip_slashes_deep($input)
-    {
-        $retval = $input;
-        if (is_object($input)) {
-            foreach (get_object_vars($input) as $key => $value) {
-                $retval->{$key} = $this->strip_slashes_deep($value);
+    function strip_slashes($stdObject_or_array_or_string)
+    {
+        /**
+         * Some objects have properties that are recursive objects. To avoid this we have to keep track
+         * of what objects we've already processed when we're running this method recursively
+         */
+        static $level = 0;
+        static $processed_objects = array();
+        $level++;
+        $processed_objects[] = $stdObject_or_array_or_string;
+        if (is_string($stdObject_or_array_or_string)) {
+            $stdObject_or_array_or_string = str_replace("\\'", "'", str_replace('\\"', '"', str_replace("\\\\", "\\", $stdObject_or_array_or_string)));
+        } elseif (is_object($stdObject_or_array_or_string) && !in_array($stdObject_or_array_or_string, $processed_objects)) {
+            foreach (get_object_vars($stdObject_or_array_or_string) as $key => $val) {
+                if ($val != $stdObject_or_array_or_string && $key != '_mapper') {
+                    $stdObject_or_array_or_string->{$key} = $this->strip_slashes($val);
+                }
             }
-        } elseif (is_array($input)) {
-            foreach ($input as $key => $value) {
-                $retval[$key] = $this->strip_slashes_deep($value);
+            $processed_objects[] = $stdObject_or_array_or_string;
+        } elseif (is_array($stdObject_or_array_or_string)) {
+            foreach ($stdObject_or_array_or_string as $key => $val) {
+                if ($key != '_mixins') {
+                    $stdObject_or_array_or_string[$key] = $this->strip_slashes($val);
+                }
             }
-        } elseif (is_string($input)) {
-            $retval = str_replace('\\\'', '\'', str_replace('\\"', '"', str_replace('\\\\', '\\', $input)));
         }
-        return $retval;
+        $level--;
+        if ($level == 0) {
+            $processed_objects = array();
+        }
+        return $stdObject_or_array_or_string;
     }
     /**
      * Converts a stdObject entity to a model
      * @param stdObject $stdObject
      */
-    public function convert_to_model($stdObject, $context = FALSE)
+    function convert_to_model($stdObject, $context = FALSE)
     {
         // Create a factory
         $retval = NULL;
@@ -1462,7 +1506,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param stdClass|array $properties
      * @return C_DataMapper_Model
      */
-    public function create($properties = array(), $context = FALSE)
+    function create($properties = array(), $context = FALSE)
     {
         $entity = $properties;
         $factory = C_Component_Factory::get_instance();
@@ -1479,7 +1523,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param mixed $obj
      * @return bool
      */
-    public function is_model($obj)
+    function is_model($obj)
     {
         return is_subclass_of($obj, 'C_DataMapper_Model') or get_class($obj) == 'C_DataMapper_Model';
     }
@@ -1488,7 +1532,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param stdClass|C_DataMapper_Model $entity
      * @return bool
      */
-    public function save($entity)
+    function save($entity)
     {
         $retval = FALSE;
         $model = $entity;
@@ -1519,7 +1563,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * @param stdClass|C_DataMapper_Model $entity
      * @return array
      */
-    public function get_errors($entity)
+    function get_errors($entity)
     {
         $model = $entity;
         if (!$this->object->is_model($entity)) {
@@ -1534,10 +1578,10 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * implementation. The implementation should make use of the
      * _set_default_value() method
      */
-    public function set_defaults()
+    function set_defaults()
     {
     }
-    public function has_default_values($entity)
+    function has_default_values($entity)
     {
         return isset($entity->__defaults_set) && $entity->__defaults_set == TRUE;
     }
@@ -1545,7 +1589,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin
      * If a field has no value, then use the default value.
      * @param stdClass|C_DataMapper_Model $object
      */
-    public function _set_default_value($object)
+    function _set_default_value($object)
     {
         $array = NULL;
         $field = NULL;
@@ -1586,41 +1630,41 @@ class Mixin_DataMapper_Driver_Base extends Mixin
             }
         }
     }
-    public function define_column($name, $type, $default_value = NULL)
+    function define_column($name, $type, $default_value = NULL)
     {
         $this->object->_columns[$name] = array('type' => $type, 'default_value' => $default_value);
     }
-    public function get_defined_column_names()
+    function get_defined_column_names()
     {
         return array_keys($this->object->_columns);
     }
-    public function has_defined_column($name)
+    function has_defined_column($name)
     {
         $columns = $this->object->_columns;
         return isset($columns[$name]);
     }
-    public function cast_columns($entity)
+    function cast_columns($entity)
     {
         foreach ($this->object->_columns as $key => $properties) {
             $value = property_exists($entity, $key) ? $entity->{$key} : NULL;
             $default_value = $properties['default_value'];
             if (!is_null($value) && $value !== $default_value) {
                 $column_type = $this->object->_columns[$key]['type'];
-                if (preg_match('/varchar|text/i', $column_type)) {
+                if (preg_match("/varchar|text/i", $column_type)) {
                     if (!is_array($value) && !is_object($value)) {
                         $entity->{$key} = strval($value);
                     }
                 } else {
-                    if (preg_match('/decimal|numeric|double/i', $column_type)) {
+                    if (preg_match("/decimal|numeric|double/i", $column_type)) {
                         $entity->{$key} = doubleval($value);
                     } else {
-                        if (preg_match('/float/i', $column_type)) {
+                        if (preg_match("/float/i", $column_type)) {
                             $entity->{$key} = floatval($value);
                         } else {
-                            if (preg_match('/int/i', $column_type)) {
+                            if (preg_match("/int/i", $column_type)) {
                                 $entity->{$key} = intval($value);
                             } else {
-                                if (preg_match('/bool/i', $column_type)) {
+                                if (preg_match("/bool/i", $column_type)) {
                                     $entity->{$key} = $value ? TRUE : FALSE;
                                 }
                             }
@@ -1634,22 +1678,27 @@ class Mixin_DataMapper_Driver_Base extends Mixin
         return $entity;
     }
 }
+/**
+ * Class C_CustomPost_DataMapper_Driver
+ * @mixin Mixin_CustomPost_DataMapper_Driver
+ * @implements I_CustomPost_DataMapper
+ */
 class C_CustomPost_DataMapper_Driver extends C_DataMapper_Driver_Base
 {
-    public $_query_args = array();
-    public $_primary_key_column = 'ID';
+    var $_query_args = array();
+    var $_primary_key_column = 'ID';
     static $_post_table_columns = array();
     public $_use_cache = TRUE;
-    public function define($object_name = FALSE, $context = FALSE)
+    function define($object_name = FALSE, $context = FALSE)
     {
         if (strlen($object_name) > 20) {
-            throw new Exception('The custom post name can be no longer than 20 characters long');
+            throw new Exception("The custom post name can be no longer than 20 characters long");
         }
         parent::define($object_name, $context);
         $this->add_mixin('Mixin_CustomPost_DataMapper_Driver');
         $this->implement('I_CustomPost_DataMapper');
     }
-    public function lookup_columns()
+    function lookup_columns()
     {
         if (empty(self::$_post_table_columns)) {
             $columns = parent::lookup_columns();
@@ -1667,20 +1716,27 @@ class C_CustomPost_DataMapper_Driver extends C_DataMapper_Driver_Base
      * @global string $table_prefix
      * @return string
      */
-    public function get_table_name()
+    function get_table_name()
     {
         global $table_prefix;
         return $table_prefix . 'posts';
     }
 }
+/**
+ * Class C_DataMapper_Model
+ * @mixin Mixin_Validation
+ * @mixin Mixin_DataMapper_Model_Instance_Methods
+ * @mixin Mixin_DataMapper_Model_Validation
+ * @implements I_DataMapper_Model
+ */
 class C_DataMapper_Model extends C_Component
 {
-    public $_mapper;
-    public $_stdObject;
+    var $_mapper;
+    var $_stdObject;
     /**
      * Define the model
      */
-    public function define($mapper = NULL, $properties = array(), $context = FALSE)
+    function define($mapper = NULL, $properties = array(), $context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Validation');
@@ -1694,7 +1750,7 @@ class C_DataMapper_Model extends C_Component
      * @param array|stdClass $properties
      * @param string $context
      */
-    public function initialize($mapper = NULL, $properties = FALSE)
+    function initialize($mapper = NULL, $properties = FALSE)
     {
         $this->_mapper = $mapper;
         $this->_stdObject = $properties ? (object) $properties : new stdClass();
@@ -1704,7 +1760,7 @@ class C_DataMapper_Model extends C_Component
             $this->_stdObject->__defaults_set = TRUE;
         }
     }
-    public function has_default_values()
+    function has_default_values()
     {
         return isset($this->_stdObject->__defaults_set) && $this->_stdObject->__defaults_set == TRUE;
     }
@@ -1712,14 +1768,14 @@ class C_DataMapper_Model extends C_Component
      * Gets the data mapper for the entity
      * @return C_DataMapper_Driver_Base
      */
-    public function get_mapper()
+    function get_mapper()
     {
         return $this->_mapper;
     }
     /**
      * Gets a   property of the model
      */
-    public function &__get($property)
+    function &__get($property)
     {
         if (isset($this->_stdObject->{$property})) {
             $retval =& $this->_stdObject->{$property};
@@ -1734,12 +1790,12 @@ class C_DataMapper_Model extends C_Component
     /**
      * Sets a property for the model
      */
-    public function &__set($property, $value)
+    function &__set($property, $value)
     {
         $retval = $this->_stdObject->{$property} = $value;
         return $retval;
     }
-    public function __isset($property_name)
+    function __isset($property_name)
     {
         return isset($this->_stdObject->{$property_name});
     }
@@ -1747,7 +1803,7 @@ class C_DataMapper_Model extends C_Component
      * Saves the entity
      * @param type $updated_attributes
      */
-    public function save($updated_attributes = array())
+    function save($updated_attributes = array())
     {
         $this->update_attributes($updated_attributes);
         return $this->get_mapper()->save($this->get_entity());
@@ -1755,7 +1811,7 @@ class C_DataMapper_Model extends C_Component
     /**
      * Updates the attributes for an object
      */
-    public function update_attributes($array = array())
+    function update_attributes($array = array())
     {
         foreach ($array as $key => $value) {
             $this->_stdObject->{$key} = $value;
@@ -1764,7 +1820,7 @@ class C_DataMapper_Model extends C_Component
     /**
      * Sets the default values for this model
      */
-    public function set_defaults()
+    function set_defaults()
     {
         $mapper = $this->get_mapper();
         if ($mapper->has_method('set_defaults')) {
@@ -1774,7 +1830,7 @@ class C_DataMapper_Model extends C_Component
     /**
      * Destroys or deletes the entity
      */
-    public function destroy()
+    function destroy()
     {
         return $this->get_mapper()->destroy($this->_stdObject);
     }
@@ -1782,14 +1838,14 @@ class C_DataMapper_Model extends C_Component
      * Determines whether the object is new or existing
      * @return type
      */
-    public function is_new()
+    function is_new()
     {
         return $this->id() ? FALSE : TRUE;
     }
     /**
      * Gets/sets the primary key
      */
-    public function id($value = NULL)
+    function id($value = NULL)
     {
         $key = $this->get_mapper()->get_primary_key_column();
         if ($value) {
@@ -1803,7 +1859,7 @@ class C_DataMapper_Model extends C_Component
  */
 class Mixin_DataMapper_Model_Validation extends Mixin
 {
-    public function validation()
+    function validation()
     {
         return $this->object->is_valid();
     }
@@ -1813,7 +1869,7 @@ class Mixin_DataMapper_Model_Instance_Methods extends Mixin
     /**
      * Returns the associated entity
      */
-    public function &get_entity()
+    function &get_entity()
     {
         return $this->object->_stdObject;
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/module.dynamic_stylesheet.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/module.dynamic_stylesheet.php
index d3e114b19213ef4f7edfcabfc24be8b2e6e0d90c..96dbeeb7b8f337426268e27e816671f0d8dc7015 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/module.dynamic_stylesheet.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/module.dynamic_stylesheet.php
@@ -17,7 +17,7 @@ class M_Dynamic_Stylesheet extends C_Base_Module
 			'photocrati-dynamic_stylesheet',
 			'Dynamic Stylesheet',
 			'Provides the ability to generate and enqueue a dynamic stylesheet',
-			'0.3',
+			'0.4',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com',
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/package.module.dynamic_stylesheet.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/package.module.dynamic_stylesheet.php
index b865bc4fee69503832e9bf838be217dc8282998f..6379405fb34b28787bb20d1fda900c2ff23571d2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/package.module.dynamic_stylesheet.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/package.module.dynamic_stylesheet.php
@@ -1,17 +1,23 @@
 <?php
+/**
+ * Class C_Dynamic_Stylesheet_Controller
+ * @mixin Mixin_Dynamic_Stylesheet_Instance_Methods
+ * @mixin Mixin_Dynamic_Stylesheet_Actions
+ * @implements I_Dynamic_Stylesheet
+ */
 class C_Dynamic_Stylesheet_Controller extends C_MVC_Controller
 {
     static $_instances = array();
-    public $_known_templates = array();
-    public $_app = NULL;
-    public function define($context = FALSE)
+    var $_known_templates = array();
+    var $_app = NULL;
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Dynamic_Stylesheet_Instance_Methods');
         $this->add_mixin('Mixin_Dynamic_Stylesheet_Actions');
         $this->implement('I_Dynamic_Stylesheet');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_app = C_NextGen_Settings::get_instance()->dynamic_stylesheet_slug;
@@ -36,7 +42,7 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin
      * @param string $name
      * @param string $template
      */
-    public function register($name, $template)
+    function register($name, $template)
     {
         $this->object->_known_templates[$name] = $template;
     }
@@ -45,11 +51,11 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin
      * @param string $name
      * @return int
      */
-    public function get_css_template_index($name)
+    function get_css_template_index($name)
     {
         return array_search($name, array_keys($this->object->_known_templates));
     }
-    public function get_css_template($index)
+    function get_css_template($index)
     {
         $keys = array_keys($this->object->_known_templates);
         return $this->object->_known_templates[$keys[$index]];
@@ -59,7 +65,7 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin
      * @param string $name
      * @param array $vars
      */
-    public function enqueue($name, $data = array())
+    function enqueue($name, $data = array())
     {
         if (($index = $this->object->get_css_template_index($name)) !== FALSE) {
             if (is_subclass_of($data, 'C_DataMapper_Model')) {
@@ -82,7 +88,7 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin
      * @param $data
      * @return string
      */
-    public function encode($data)
+    function encode($data)
     {
         $data = json_encode($data);
         $data = base64_encode($data);
@@ -96,7 +102,7 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin
      * @param $data
      * @return array|mixed
      */
-    public function decode($data)
+    function decode($data)
     {
         $data = str_replace('\\', '/', $data);
         $data = base64_decode($data . '==');
@@ -109,7 +115,7 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin
  */
 class Mixin_Dynamic_Stylesheet_Actions extends Mixin
 {
-    public function index_action()
+    function index_action()
     {
         $this->set_content_type('css');
         if (($data = $this->param('data')) !== FALSE && ($index = $this->param('index')) !== FALSE) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/static/blank.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/static/blank.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php
index 4f7fa1dec1717c42b0178e39f36e0bca94ebde24..aa710a3f93e632c9877722a8d0c71612f0282eee 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php
@@ -13,7 +13,7 @@ class M_Dynamic_Thumbnails extends C_Base_Module
 			'photocrati-dynamic_thumbnails',
 			'Dynamic Thumbnails',
 			'Adds support for dynamic thumbnails',
-			'0.6',
+			'0.7',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/package.module.dynamic_thumbnails.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/package.module.dynamic_thumbnails.php
index f5c9515c6a5a01501bd3762d28dead1f047ff7c4..0114b9a9f9a02cde8752c78b9fb0496e384e59d9 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/package.module.dynamic_thumbnails.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/package.module.dynamic_thumbnails.php
@@ -1,7 +1,12 @@
 <?php
+/**
+ * Class A_Dynamic_Thumbnails_Storage_Driver
+ * @mixin C_GalleryStorage_Driver_Base
+ * @adapts I_GalleryStorage_Driver
+ */
 class A_Dynamic_Thumbnails_Storage_Driver extends Mixin
 {
-    public function get_image_abspath($image, $size = FALSE, $check_existance = FALSE)
+    function get_image_abspath($image, $size = FALSE, $check_existance = FALSE)
     {
         $retval = NULL;
         $dynthumbs = C_Dynamic_Thumbnails_Manager::get_instance();
@@ -16,7 +21,7 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin
                 if ($folder_path = $this->object->get_cache_abspath($image->galleryid)) {
                     $params = $dynthumbs->get_params_from_name($size, true);
                     $image_filename = $dynthumbs->get_image_name($image, $params);
-                    $image_path = implode(DIRECTORY_SEPARATOR, array(rtrim($folder_path, '\\/'), $image_filename));
+                    $image_path = implode(DIRECTORY_SEPARATOR, array(rtrim($folder_path, "\\/"), $image_filename));
                     if ($check_existance) {
                         if (@file_exists($image_path)) {
                             $retval = $image_path;
@@ -31,7 +36,7 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin
         }
         return $retval;
     }
-    public function get_image_url($image, $size = 'full', $check_existance = FALSE)
+    function get_image_url($image, $size = 'full', $check_existance = FALSE)
     {
         $retval = NULL;
         $abspath = FALSE;
@@ -59,7 +64,7 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin
         }
         return $retval;
     }
-    public function get_image_dimensions($image, $size = 'full')
+    function get_image_dimensions($image, $size = 'full')
     {
         $retval = $this->call_parent('get_image_dimensions', $image, $size);
         if ($retval == null) {
@@ -71,7 +76,7 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin
         }
         return $retval;
     }
-    public function get_image_size_params($image, $size, $params = null, $skip_defaults = false)
+    function get_image_size_params($image, $size, $params = null, $skip_defaults = false)
     {
         $dynthumbs = C_Dynamic_Thumbnails_Manager::get_instance();
         if ($dynthumbs && $dynthumbs->is_size_dynamic($size)) {
@@ -83,10 +88,14 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin
         return $this->call_parent('get_image_size_params', $image, $size, $params, $skip_defaults);
     }
 }
+/**
+ * Class C_Dynamic_Thumbnails_Controller
+ * @implements I_Dynamic_Thumbnails_Controller
+ */
 class C_Dynamic_Thumbnails_Controller extends C_MVC_Controller
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Dynamic_Thumbnails_Controller');
@@ -105,7 +114,7 @@ class C_Dynamic_Thumbnails_Controller extends C_MVC_Controller
         }
         return self::$_instances[$context];
     }
-    public function index_action()
+    function index_action()
     {
         $dynthumbs = C_Dynamic_Thumbnails_Manager::get_instance();
         $uri = $_SERVER['REQUEST_URI'];
@@ -116,6 +125,9 @@ class C_Dynamic_Thumbnails_Controller extends C_MVC_Controller
             // Note, URLs should always include quality setting when returned by Gallery Storage component
             // this sanity check is mostly for manually testing URLs
             if (!isset($params['quality'])) {
+                // Note: there's a problem when doing this as using the same set of parameters to *retrieve* the image path/URL will lead to a different filename than the one tha was used to *generate* it (which went through here)
+                // The statement above about URLs always containing quality setting is not true anymore, this is because we need to retrieve default quality from the imgQuality and thumbquality settings, depending on "full" or "thumbnail" request in the ngglegacy storage
+                //$params['quality'] = 100;
             }
             $image_id = $params['image'];
             $size = $dynthumbs->get_size_name($params);
@@ -141,11 +153,11 @@ class C_Dynamic_Thumbnails_Controller extends C_MVC_Controller
 }
 class Mixin_Dynamic_Thumbnails_Manager extends Mixin
 {
-    public function get_route_name()
+    function get_route_name()
     {
         return C_NextGen_Settings::get_instance()->get('dynamic_thumbnail_slug');
     }
-    public function _get_params_sanitized($params)
+    function _get_params_sanitized($params)
     {
         if (isset($params['rotation'])) {
             $rotation = intval($params['rotation']);
@@ -169,7 +181,7 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         }
         return $params;
     }
-    public function get_uri_from_params($params)
+    function get_uri_from_params($params)
     {
         $params = $this->object->_get_params_sanitized($params);
         $image = isset($params['image']) ? $params['image'] : null;
@@ -212,7 +224,7 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         }
         return $uri;
     }
-    public function get_image_uri($image, $params)
+    function get_image_uri($image, $params)
     {
         $params['image'] = $image;
         $uri = $this->object->get_uri_from_params($params);
@@ -222,11 +234,11 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         $uri .= wp_hash($uri) . '/';
         return $uri;
     }
-    public function get_image_url($image, $params)
+    function get_image_url($image, $params)
     {
         return C_Router::get_instance()->get_url($this->object->get_image_uri($image, $params), FALSE, 'root');
     }
-    public function get_params_from_uri($uri)
+    function get_params_from_uri($uri)
     {
         $regex = '/\\/?' . $this->object->get_route_name() . '\\/(\\d+)(?:\\/(.*))?/';
         $match = null;
@@ -278,11 +290,11 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         }
         return null;
     }
-    public function _get_name_prefix_list()
+    function _get_name_prefix_list()
     {
         return array('id' => 'nggid0', 'size' => 'ngg0dyn-', 'flags' => '00f0', 'flag' => array('w0' => 'watermark', 'c0' => 'crop', 'r1' => 'rotation', 'f1' => 'flip', 'r0' => 'reflection', 't0' => 'type'), 'flag_len' => 2, 'max_value_length' => 15);
     }
-    public function get_name_from_params($params, $only_size_name = false, $id_in_name = true)
+    function get_name_from_params($params, $only_size_name = false, $id_in_name = true)
     {
         $prefix_list = $this->object->_get_name_prefix_list();
         $id_prefix = $prefix_list['id'];
@@ -351,18 +363,18 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         $name .= $extension;
         return $name;
     }
-    public function get_size_name($params)
+    function get_size_name($params)
     {
         $name = $this->object->get_name_from_params($params, true);
         return $name;
     }
-    public function get_image_name($image, $params)
+    function get_image_name($image, $params)
     {
         $params['image'] = $image;
         $name = $this->object->get_name_from_params($params);
         return $name;
     }
-    public function get_params_from_name($name, $is_only_size_name = false)
+    function get_params_from_name($name, $is_only_size_name = false)
     {
         $prefix_list = $this->object->_get_name_prefix_list();
         $id_prefix = $prefix_list['id'];
@@ -441,6 +453,7 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
                                 unset($flags_todo[$flag_prefix]);
                             }
                         } else {
+                            // XXX unknown flag?
                         }
                     }
                 } else {
@@ -469,7 +482,7 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         }
         return $this->object->_get_params_sanitized($params);
     }
-    public function is_size_dynamic($name, $is_only_size_name = false)
+    function is_size_dynamic($name, $is_only_size_name = false)
     {
         $params = $this->object->get_params_from_name($name, $is_only_size_name);
         if (isset($params['width']) && isset($params['height'])) {
@@ -478,10 +491,14 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
         return false;
     }
 }
+/**
+ * Class C_Dynamic_Thumbnails_Manager
+ * @mixin Mixin_Dynamic_Thumbnails_Manager
+ */
 class C_Dynamic_Thumbnails_Manager extends C_Component
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Dynamic_Thumbnails_Manager');
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php
index 3c23653b05d43cb20936a6ee347f6f8f41b9ed83..c7fff94fc378fd30ae9ecf6a856c2e41abdd6aaa 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php
@@ -15,7 +15,7 @@ class M_Frame_Communication extends C_Base_Module
 			'photocrati-frame_communication',
 			'Frame/iFrame Inter-Communication',
 			'Provides a means for HTML frames to share server-side events with each other',
-			'0.4',
+			'0.5',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com',
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/package.module.frame_communication.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/package.module.frame_communication.php
index 0d08fb5c278280ef79aee202d2c39245a3dd369f..8d1cb6ab740d3d1011b0e1a53c960d67ec54a7fc 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/package.module.frame_communication.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/package.module.frame_communication.php
@@ -1,15 +1,20 @@
 <?php
+/**
+ * Class C_Frame_Event_Publisher
+ * @mixin Mixin_Frame_Event_Publisher
+ * @implements I_Frame_Event_Publisher
+ */
 class C_Frame_Event_Publisher extends C_Component
 {
     static $_instances = array();
-    public $setting_name = NULL;
-    public function define($context = FALSE)
+    var $setting_name = NULL;
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Frame_Event_Publisher');
         $this->implement('I_Frame_Event_Publisher');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->setting_name = C_NextGen_Settings::get_instance()->frame_event_cookie_name;
@@ -35,7 +40,7 @@ class Mixin_Frame_Event_Publisher extends Mixin
      * @param array $data
      * @return string
      */
-    public function _encode($data)
+    function _encode($data)
     {
         return rawurlencode(json_encode($data));
     }
@@ -44,7 +49,7 @@ class Mixin_Frame_Event_Publisher extends Mixin
      * @param string $data
      * @return array
      */
-    public function _decode($data)
+    function _decode($data)
     {
         return (array) json_decode(rawurldecode($data));
     }
@@ -53,7 +58,7 @@ class Mixin_Frame_Event_Publisher extends Mixin
      * @param type $data
      * @return type
      */
-    public function add_event($data)
+    function add_event($data)
     {
         $id = md5(serialize($data));
         $data['context'] = $this->object->context;
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/static/frame_event_publisher.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/static/frame_event_publisher.min.js
index bc077f638483b2ae76d5485d55c0e40d7bc3319e..96113af1ff1e624b56925afbea98e1002b6518a5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/static/frame_event_publisher.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/static/frame_event_publisher.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(4(g,f){\'2m 2n\';5 h=4(e){6("y"!==j e.p)1z 1B("I.Q 2l a `8` 1s a `p` y");5 b=4(a,d,c){7 1===16.t?b.14(a):b.R(a,d,c)};b.J=e.p;b.10="2k.";b.1r=W A("2i, 2j 2o 2p 23:1q:1q 2v");b.D={v:"/",w:!1};b.14=4(a){b.1F!==b.J.o&&b.1E();a=b.1o[b.10+a];7 a===f?f:1v(a)};b.R=4(a,d,c){c=b.1p(c);c.r=b.1l(d===f?-1:c.r);b.J.o=b.1C(a,d,c);7 b};b.1d=4(a,d){7 b.R(a,f,d)};b.1p=4(a){7{v:a&&a.v||b.D.v,x:a&&a.x||b.D.x,r:a&&a.r||b.D.r,w:a&&a.w!==f?a.w:b.D.w}};b.1m=4(a){7"[y A]"===2s.2h.2r.1Q(a)&&!2w(a.1j())};b.1l=4(a,d){d=d||W A;"2e"===j a?a=22===a?b.1r:W A(d.1j()+21*a):"26"===j a&&(a=W A(a));6(a&&!b.1m(a))1z 1B("`r` 27 2f 2d 2c 1I a 2a A 2q");7 a};b.1C=4(a,b,c){a=a.G(/[^#$&+\\^`|]/g,1D);a=a.G(/\\(/g,"%28").G(/\\)/g,"%29");b=(b+"").G(/[^!#$&-+\\--:<-\\[\\]-~]/g,1D);c=c||{};a=a+"="+b+(c.v?";v="+c.v:"");a+=c.x?";x="+c.x:"";a+=c.r?";r="+c.r.2K():"";7 a+=c.w?";w":""};b.1A=4(a){5 d={};a=a?a.1O("; "):[];M(5 c=0;c<a.t;c++){5 e=b.1u(a[c]);d[b.10+e.U]===f&&(d[b.10+e.U]=e.1w)}7 d};b.1u=4(a){5 b=a.2A("="),b=0>b?a.t:b,c=a.1x(0,b),e;Y{e=1v(c)}V(f){s&&"4"===j s.1t&&s.1t(\'2B 2C 2F o 1s U "\'+c+\'"\',f)}7{U:e,1w:a.1x(b+1)}};b.1E=4(){b.1o=b.1A(b.J.o);b.1F=b.J.o};b.1n=4(){5 a="1"===b.R("z.Q",1).14("z.Q");b.1d("z.Q");7 a};b.2J=b.1n();7 b},e="y"===j g.p?h(g):h;"4"===j 1i&&1i.2M?1i(4(){7 e}):"y"===j H?("y"===j 1g&&"y"===j 1g.H&&(H=1g.H=e),H.I=e):g.I=e})("q"===j 8?3:8);8.O={9:8.2z,1a:\'X-17-2g\',u:[],P:F,L:{},8:F,1y:F,1c:4(){7 1k.12.p===1k.p},1L:4(){7!3.1c()},1Z:4(){6(!3.1y){5 C=3;S(p).2t(4(e,2u,2O){1U(4(){C.1Y()},0)})}},1Y:4(){3.E(3.1e(p.o))},1X:4(){3.1Z();6(j 8.1G!==\'q\'){I.D.x=8.1G}3.8=8;6(j(3.8.9)!=\'q\'&&3.8.9.t!=2D&&3.8.9.t>0)3.9=3.8.9;15 3.9==\'20\';3.u=3.1e(p.o);3.P=1W;6(3.1c())3.T(3.u,1W);7 3.u},1M:4(k){3.L[k.9]=k},E:4(m,k){6(!3.P)m=3.1X();6(3.9=="20"){3.P=F;1U(4(){3.E(m,k)},2I)}15{6(3.1L()){6(16.t<=1)k=8;3.19(k).1M(k.O);3.1K(m,k)}15{6(16.t==0)m=3.u;3.1J(m)}}},1K:4(m,k){3.19(k).E(m,k)},1J:4(m){3.T(m);M(5 18 1H 3.L){5 k=3.L[18];Y{k.T(m)}V(K){6(j(s)!="q")s.1b(K);2N 3.L.18}}},19:4(k){5 B=k;Y{2H(B.p!==B.12.p)B=B.12}V(K){6(j(s)!="q")s.1b(K)}7 B.O},T:4(m,N){6(j(N)=="q")N=F;M(5 n 1H m){5 l=m[n];6(!N&&!3.1f(n)){6(j(s)!="q")s.1b("2G "+n+":"+l.l+" 1I "+3.9);3.1N(n,m[n])}}},1f:4(9){7 3.u[9]!=q},1N:4(9,l){5 Z=l.13+\':\'+l.l;l.9=9;6(j(8)!="q")S(8).2E(Z,l);3.u[9]=l},1e:4(o){5 1h={};5 z=2y(o).1O(\' \');M(5 i=0;i<z.t;i++){5 1V=z[i];5 11=1V.2L(/X-17-1S([^=]+)=(.*)/);6(11){5 n=11[1];5 1T=11[2].G(/;$/,\'\');Y{1h[n]=2x.2b(1T)}V(K){}5 1a=\'X-17-1S\'+n;3.1R(1a)}}7 1h},1R:4(o){I.1d(o)},25:4(Z,1P){5 C=3;S(8).24(Z,4(e,l){5 13=l.13;5 n=l.9;6(!C.1f(n)){1P.1Q(C,l);C.u[n]=l}})}};S(4($){O.E()});',62,175,'|||this|function|var|if|return|window|id||||||||||typeof|child|event|events|event_id|cookie|document|undefined|expires|console|length|received|path|secure|domain|object|cookies|Date|retval|publisher|defaults|broadcast|false|replace|exports|Cookies|_document|ex|children|for|forced|Frame_Event_Publisher|initialized|js|set|jQuery|emit|key|catch|new||try|signal|_cacheKeyPrefix|parts|parent|context|get|else|arguments|Frame|index|find_parent|cookie_name|log|is_parent|expire|get_events|has_received_event|module|frame_events|define|getTime|self|_getExpiresDate|_isValidDate|_areEnabled|_cache|_getExtendedOptions|59|_maxExpireDate|with|error|_getKeyValuePairFromCookieString|decodeURIComponent|value|substr|ajax_handlers_setup|throw|_getCacheFromString|Error|_generateCookieString|encodeURIComponent|_renewCache|_cachedDocumentCookie|frame_event_publisher_domain|in|to|notify_children|notify_parent|is_child|register_child|trigger_event|split|callback|call|delete_cookie|Events_|event_data|setTimeout|current_cookie|true|initialize|ajax_handler|setup_ajax_handlers|Unknown|1E3|Infinity||bind|listen_for|string|parameter|||valid|parse|converted|be|number|cannot|Events|prototype|Fri|31|cookey|requires|use|strict|Dec|9999|instance|toString|Object|ajaxComplete|xhr|UTC|isNaN|JSON|unescape|name|indexOf|Could|not|null|trigger|decode|Emitting|while|100|enabled|toUTCString|match|amd|delete|settings'.split('|'),0,{}))
+!function(e,t){"use strict";var i=function(e){if("object"!=typeof e.document)throw Error("Cookies.js requires a `window` with a `document` object");var i=function(e,t,n){return 1===arguments.length?i.get(e):i.set(e,t,n)};return i._document=e.document,i._cacheKeyPrefix="cookey.",i._maxExpireDate=new Date("Fri, 31 Dec 9999 23:59:59 UTC"),i.defaults={path:"/",secure:!1},i.get=function(e){return i._cachedDocumentCookie!==i._document.cookie&&i._renewCache(),e=i._cache[i._cacheKeyPrefix+e],e===t?t:decodeURIComponent(e)},i.set=function(e,n,o){return o=i._getExtendedOptions(o),o.expires=i._getExpiresDate(n===t?-1:o.expires),i._document.cookie=i._generateCookieString(e,n,o),i},i.expire=function(e,n){return i.set(e,t,n)},i._getExtendedOptions=function(e){return{path:e&&e.path||i.defaults.path,domain:e&&e.domain||i.defaults.domain,expires:e&&e.expires||i.defaults.expires,secure:e&&e.secure!==t?e.secure:i.defaults.secure}},i._isValidDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)&&!isNaN(e.getTime())},i._getExpiresDate=function(e,t){if(t=t||new Date,"number"==typeof e?e=1/0===e?i._maxExpireDate:new Date(t.getTime()+1e3*e):"string"==typeof e&&(e=new Date(e)),e&&!i._isValidDate(e))throw Error("`expires` parameter cannot be converted to a valid Date instance");return e},i._generateCookieString=function(e,t,i){return e=e.replace(/[^#$&+\^`|]/g,encodeURIComponent),e=e.replace(/\(/g,"%28").replace(/\)/g,"%29"),t=(t+"").replace(/[^!#$&-+\--:<-\[\]-~]/g,encodeURIComponent),i=i||{},e=e+"="+t+(i.path?";path="+i.path:""),e+=i.domain?";domain="+i.domain:"",e+=i.expires?";expires="+i.expires.toUTCString():"",e+=i.secure?";secure":""},i._getCacheFromString=function(e){var n={};e=e?e.split("; "):[];for(var o=0;o<e.length;o++){var r=i._getKeyValuePairFromCookieString(e[o]);n[i._cacheKeyPrefix+r.key]===t&&(n[i._cacheKeyPrefix+r.key]=r.value)}return n},i._getKeyValuePairFromCookieString=function(e){var t,i=e.indexOf("="),i=0>i?e.length:i,n=e.substr(0,i);try{t=decodeURIComponent(n)}catch(e){console&&"function"==typeof console.error&&console.error('Could not decode cookie with key "'+n+'"',e)}return{key:t,value:e.substr(i+1)}},i._renewCache=function(){i._cache=i._getCacheFromString(i._document.cookie),i._cachedDocumentCookie=i._document.cookie},i._areEnabled=function(){var e="1"===i.set("cookies.js",1).get("cookies.js");return i.expire("cookies.js"),e},i.enabled=i._areEnabled(),i},n="object"==typeof e.document?i(e):i;"function"==typeof define&&define.amd?define(function(){return n}):"object"==typeof exports?("object"==typeof module&&"object"==typeof module.exports&&(exports=module.exports=n),exports.Cookies=n):e.Cookies=n}("undefined"==typeof window?this:window),window.Frame_Event_Publisher={id:window.name,cookie_name:"X-Frame-Events",received:[],initialized:!1,children:{},window:!1,ajax_handlers_setup:!1,is_parent:function(){return self.parent.document===self.document},is_child:function(){return!this.is_parent()},setup_ajax_handlers:function(){if(!this.ajax_handlers_setup){var e=this;jQuery(document).ajaxComplete(function(t,i,n){setTimeout(function(){e.ajax_handler()},0)})}},ajax_handler:function(){this.broadcast(this.get_events(document.cookie))},initialize:function(){return this.setup_ajax_handlers(),"undefined"!=typeof window.frame_event_publisher_domain&&(Cookies.defaults.domain=window.frame_event_publisher_domain),this.window=window,"undefined"!=typeof this.window.id&&null!=this.window.id.length&&this.window.id.length>0?this.id=this.window.id:"Unknown"==this.id,this.received=this.get_events(document.cookie),this.initialized=!0,this.is_parent()&&this.emit(this.received,!0),this.received},register_child:function(e){this.children[e.id]=e},broadcast:function(e,t){this.initialized||(e=this.initialize()),"Unknown"==this.id?(this.initialized=!1,setTimeout(function(){this.broadcast(e,t)},100)):this.is_child()?(arguments.length<=1&&(t=window),this.find_parent(t).register_child(t.Frame_Event_Publisher),this.notify_parent(e,t)):(0==arguments.length&&(e=this.received),this.notify_children(e))},notify_parent:function(e,t){this.find_parent(t).broadcast(e,t)},notify_children:function(e){this.emit(e);for(var t in this.children){var i=this.children[t];try{i.emit(e)}catch(e){"undefined"!=typeof console&&console.log(e),delete this.children.index}}},find_parent:function(e){var t=e;try{for(;t.document!==t.parent.document;)t=t.parent}catch(e){"undefined"!=typeof console&&console.log(e)}return t.Frame_Event_Publisher},emit:function(e,t){"undefined"==typeof t&&(t=!1);for(var i in e){var n=e[i];t||this.has_received_event(i)||("undefined"!=typeof console&&console.log("Emitting "+i+":"+n.event+" to "+this.id),this.trigger_event(i,e[i]))}},has_received_event:function(e){return void 0!=this.received[e]},trigger_event:function(e,t){var i=t.context+":"+t.event;t.id=e,"undefined"!=typeof window&&jQuery(window).trigger(i,t),this.received[e]=t},get_events:function(e){for(var t={},i=unescape(e).split(" "),n=0;n<i.length;n++){var o=i[n],r=o.match(/X-Frame-Events_([^=]+)=(.*)/);if(r){var c=r[1],a=r[2].replace(/;$/,"");try{t[c]=JSON.parse(a)}catch(e){}var s="X-Frame-Events_"+c;this.delete_cookie(s)}}return t},delete_cookie:function(e){Cookies.expire(e)},listen_for:function(e,t){var i=this;jQuery(window).bind(e,function(e,n){var o=(n.context,n.id);i.has_received_event(o)||(t.call(i,n),i.received[o]=n)})}},jQuery(function(e){Frame_Event_Publisher.broadcast()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php
index 175f827b508e302fccbb0fb6190c7be071c41da3..1f100817e7a1ca679dd9a53268e36df89f0604f3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php
@@ -12,7 +12,7 @@ class M_Fs extends C_Base_Module
 			'photocrati-fs',
 			'Filesystem',
 			'Provides a filesystem abstraction layer for Pope modules',
-			'0.5',
+			'0.6',
 			'https://www.imagely.com',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php
index ad23fb512665204c990de1bd4a03938800d43bbc..7feca2302c179b81c1d7061a7b971c6d221f8e7c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php
@@ -1,8 +1,13 @@
 <?php
+/**
+ * Class C_Fs
+ * @mixin Mixin_Fs_Instance_Methods
+ * @implements I_Fs
+ */
 class C_Fs extends C_Component
 {
     static $_instances = array();
-    public $_document_root;
+    var $_document_root;
     /**
      * Gets an instance of the FS utility
      * @param mixed $context
@@ -20,13 +25,13 @@ class C_Fs extends C_Component
      * Defines the instance of the FS utility
      * @param mixed $context	the context in this case is the product
      */
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Fs_Instance_Methods');
         $this->implement('I_Fs');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_document_root = $this->set_document_root(ABSPATH);
@@ -34,9 +39,9 @@ class C_Fs extends C_Component
 }
 class Mixin_Fs_Instance_Methods extends Mixin
 {
-    public function add_trailing_slash($path)
+    function add_trailing_slash($path)
     {
-        return rtrim($path, '/\\') . DIRECTORY_SEPARATOR;
+        return rtrim($path, "/\\") . DIRECTORY_SEPARATOR;
     }
     /**
      * Returns a calculated path to a file
@@ -45,7 +50,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param boolean $relpath
      * @returns string
      */
-    public function get_abspath($path, $module = FALSE, $relpath = FALSE)
+    function get_abspath($path, $module = FALSE, $relpath = FALSE)
     {
         // Wel'l assume that we're to calculate the path relative to
         // the site document root
@@ -74,7 +79,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param string $module
      * @return string
      */
-    public function get_relpath($path, $module = FALSE)
+    function get_relpath($path, $module = FALSE)
     {
         return $this->object->get_abspath($path, $module, TRUE);
     }
@@ -84,9 +89,9 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param string $segment
      * @return string
      */
-    public function remove_path_segment($path, $segment)
+    function remove_path_segment($path, $segment)
     {
-        $parts = explode($segment, rtrim($path, '/\\'));
+        $parts = explode($segment, rtrim($path, "/\\"));
         return $this->join_paths($parts);
     }
     /**
@@ -97,7 +102,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param string $module
      * @returns string|NULL
      */
-    public function find_abspath($path, $module = FALSE, $relpath = FALSE, $search_paths = array())
+    function find_abspath($path, $module = FALSE, $relpath = FALSE, $search_paths = array())
     {
         $retval = NULL;
         // Ensure that we weren't passed a module id in the path
@@ -139,7 +144,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param string $module
      * @return array
      */
-    public function get_search_paths($path, $module = FALSE)
+    function get_search_paths($path, $module = FALSE)
     {
         $append_module = FALSE;
         // Ensure that we weren't passed a module id in the path
@@ -177,7 +182,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param string $file
      * @return string
      */
-    public function _rglob($base_path, $file)
+    function _rglob($base_path, $file)
     {
         $retval = NULL;
         $results = @file_exists($this->join_paths($base_path, $file));
@@ -209,11 +214,11 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param type $module
      * @returns string|NULL
      */
-    public function find_relpath($path, $module = FALSE)
+    function find_relpath($path, $module = FALSE)
     {
         return $this->object->find_abspath($path, $module, TRUE);
     }
-    public function delete($abspath)
+    function delete($abspath)
     {
         $retval = FALSE;
         if (file_exists($abspath)) {
@@ -237,7 +242,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * Joins multiple path segments together
      * @return string
      */
-    public function join_paths()
+    function join_paths()
     {
         $segments = array();
         $retval = array();
@@ -245,7 +250,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
         $params = func_get_args();
         $this->_flatten_array($params, $segments);
         foreach ($segments as $segment) {
-            $segment = trim($segment, '/\\');
+            $segment = trim($segment, "/\\");
             $pieces = array_values(preg_split('#[/\\\\]#', $segment));
             // determine if each piece should be appended to $retval
             foreach ($pieces as $ndx => $val) {
@@ -272,7 +277,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
         // Join the paths together
         $retval = implode(DIRECTORY_SEPARATOR, $retval);
         if (strpos($retval, $this->get_document_root()) !== 0 && strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
-            $retval = DIRECTORY_SEPARATOR . trim($retval, '/\\');
+            $retval = DIRECTORY_SEPARATOR . trim($retval, "/\\");
         }
         // Check for and adjust Windows UNC paths (\\server\share\) for network mounted sites
         if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && substr($this->get_document_root(), 0, 2) === '\\\\') {
@@ -280,7 +285,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
         }
         return $retval;
     }
-    public function _flatten_array($obj, &$arr)
+    function _flatten_array($obj, &$arr)
     {
         if (is_array($obj)) {
             foreach ($obj as $inner_obj) {
@@ -294,7 +299,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * Parses the path for a module and filename
      * @param string $str
      */
-    public function parse_formatted_path($str)
+    function parse_formatted_path($str)
     {
         $module = FALSE;
         $path = $str;
@@ -309,7 +314,7 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * Gets the document root for this application
      * @return string
      */
-    public function get_document_root($type = 'root')
+    function get_document_root($type = 'root')
     {
         $retval = NULL;
         switch ($type) {
@@ -358,14 +363,14 @@ class Mixin_Fs_Instance_Methods extends Mixin
      * @param type $value
      * @return type
      */
-    public function set_document_root($value)
+    function set_document_root($value)
     {
         // some web servers like home.pl and PhpStorm put the document root in "/" or (even weirder) "//"
         if ($value == DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) {
             $value = DIRECTORY_SEPARATOR;
         }
         if ($value !== DIRECTORY_SEPARATOR) {
-            $value = rtrim($value, '/\\');
+            $value = rtrim($value, "/\\");
         }
         return $this->_document_root = $value;
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po
index 2d7821fd906cee0ff18380dd9c74ccd2ba20c45f..69164379fad98baf26acb36107117829233b8455 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po
@@ -350,8 +350,12 @@ msgstr ""
 msgid "Custom"
 msgstr ""
 
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:7
+msgid "Leave blank for folder name"
+msgstr ""
+
 #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php:7
-#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:6
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:12
 msgid "Import Folder"
 msgstr ""
 
@@ -400,11 +404,31 @@ msgstr ""
 msgid "Upload Images"
 msgstr ""
 
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:13
+msgid "No images were uploaded successfully."
+msgstr ""
+
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:14
+msgid "1 image was uploaded successfully."
+msgstr ""
+
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:15
+msgid "{count} images were uploaded successfully."
+msgstr ""
+
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:16
+msgid "The following errors occured:"
+msgstr ""
+
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:17
+msgid "Manage gallery {name}"
+msgstr ""
+
 #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:1
 msgid "Select a folder to import. The folder name will be used as the title of the gallery."
 msgstr ""
 
-#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:11
 msgid "Keep images in original location."
 msgstr ""
 
@@ -447,6 +471,10 @@ msgstr[1] ""
 msgid "Create a new gallery"
 msgstr ""
 
+#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:9
+msgid "Gallery title"
+msgstr ""
+
 #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:13
 msgid "Your browser doesn't have Flash, Silverlight, HTML5, or HTML4 support."
 msgstr ""
@@ -1143,6 +1171,10 @@ msgstr ""
 msgid "link text"
 msgstr ""
 
+#: products/photocrati_nextgen/modules/nextgen_gallery_display/templates/no_images_found.php:1
+msgid "no images were found"
+msgstr ""
+
 #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:12
 msgid "Image Options"
 msgstr ""
@@ -3212,4 +3244,4 @@ msgstr ""
 
 #. Author URI of the plugin/theme
 msgid "https://www.imagely.com"
-msgstr ""
\ No newline at end of file
+msgstr ""
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php
index 4a6d561348f7fc253388f5c8a16f4dbde7064bdc..70090345fe58863648eedaae293c3ea85476f418 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php
@@ -13,7 +13,7 @@ class M_I18N extends C_Base_Module
             'photocrati-i18n',
             'Internationalization',
             "Adds I18N resources and methods",
-            '0.1',
+            '0.3',
             'https://www.imagely.com/languages/',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/package.module.i18n.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/package.module.i18n.php
index da6f549e27700519c194166e1bf131e54caeb4d9..888aecc3a735515e361040a76063da901cb42a55 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/package.module.i18n.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/package.module.i18n.php
@@ -1,7 +1,12 @@
 <?php
+/**
+ * Class A_I18N_Album_Translation
+ * @mixin C_Album_Mapper
+ * @adapts I_Album_Mapper
+ */
 class A_I18N_Album_Translation extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (!is_admin()) {
@@ -21,9 +26,14 @@ class A_I18N_Album_Translation extends Mixin
         }
     }
 }
+/**
+ * Class A_I18N_Displayed_Gallery_Translation
+ * @mixin C_Displayed_Gallery
+ * @adapts I_Displayed_Gallery
+ */
 class A_I18N_Displayed_Gallery_Translation extends Mixin
 {
-    public function _get_image_entities($source_obj, $limit, $offset, $id_only, $returns)
+    function _get_image_entities($source_obj, $limit, $offset, $id_only, $returns)
     {
         $results = $this->call_parent('_get_image_entities', $source_obj, $limit, $offset, $id_only, $returns);
         if (!is_admin() && in_array('image', $source_obj->returns)) {
@@ -39,9 +49,14 @@ class A_I18N_Displayed_Gallery_Translation extends Mixin
         return $results;
     }
 }
+/**
+ * Class A_I18N_Gallery_Translation
+ * @mixin C_Gallery_Mapper
+ * @adapts I_Gallery_Mapper
+ */
 class A_I18N_Gallery_Translation extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (!is_admin()) {
@@ -54,9 +69,14 @@ class A_I18N_Gallery_Translation extends Mixin
         }
     }
 }
+/**
+ * Class A_I18N_Image_Translation
+ * @mixin C_Image_Mapper
+ * @adapts I_Image_Mapper
+ */
 class A_I18N_Image_Translation extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (!is_admin()) {
@@ -69,9 +89,14 @@ class A_I18N_Image_Translation extends Mixin
         }
     }
 }
+/**
+ * Class A_I18N_Routing_App
+ * @mixin C_Routing_App
+ * @adapts I_Routing_App
+ */
 class A_I18N_Routing_App extends Mixin
 {
-    public function execute_route_handler($handler)
+    function execute_route_handler($handler)
     {
         if (!empty($GLOBALS['q_config']) && defined('QTRANS_INIT')) {
             global $q_config;
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php
index 06a3b39c6de81b6121ca13eff3529c3f1dbc43c6..cf7f0c62c32d1890e437392930260dd6acfa7c0a 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php
@@ -16,7 +16,7 @@ class M_Lightbox extends C_Base_Module
             'photocrati-lightbox',
             'Lightbox',
             "Provides integration with several JavaScript lightbox effect libraries",
-            '0.15',
+            '0.17',
             'http://leandrovieira.com/projects/jquery/lightbox/',
             'Photocrati Media',
             'https://www.imagely.com'
@@ -49,7 +49,8 @@ class M_Lightbox extends C_Base_Module
     {
         return array(
             'C_Lightbox_Installer'       => 'class.lightbox_legacy_installer.php',
-            'C_Lightbox_Library_Manager' => 'class.lightbox_library_manager.php'
+            'C_Lightbox_Library_Manager' => 'class.lightbox_library_manager.php',
+            'C_NGG_Lightbox'             => 'class.ngg_lightbox.php'
         );
     }
 }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/package.module.lightbox.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/package.module.lightbox.php
index 4b188f05faa6f9de0b1245db9bfe194614559493..95af0d15533013813aff9473ac0170660d845525 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/package.module.lightbox.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/package.module.lightbox.php
@@ -1,7 +1,7 @@
 <?php
 class C_Lightbox_Installer_Mapper
 {
-    public function find_by_name()
+    function find_by_name()
     {
         return NULL;
     }
@@ -12,18 +12,9 @@ class C_Lightbox_Installer
     {
         $this->mapper = new C_Lightbox_Installer_Mapper();
     }
-    public function install_lightbox($name, $title, $code, $stylesheet_paths = array(), $script_paths = array(), $values = array(), $i18n = array())
+    function install_lightbox($name, $title, $code, $stylesheet_paths = array(), $script_paths = array(), $values = array(), $i18n = array())
     {
-        $lightbox = new stdClass();
-        $lightbox->name = $name;
-        $lightbox->title = $title;
-        $lightbox->code = $code;
-        $lightbox->values = $values;
-        $lightbox->i18n = $i18n;
-        $lightbox->styles = implode('
-', $stylesheet_paths);
-        $lightbox->scripts = implode('
-', $script_paths);
+        $lightbox = new C_NGG_Lightbox($name, array('title' => $title, 'code' => $code, 'styles' => is_array($stylesheet_paths) ? implode("\n", $stylesheet_paths) : $stylesheet_paths, 'scripts' => is_array($script_paths) ? implode("\n", $script_paths) : $script_paths, 'values' => $values, 'i18n' => $i18n));
         C_Lightbox_Library_Manager::get_instance()->register($name, $lightbox);
     }
 }
@@ -43,24 +34,24 @@ class C_Lightbox_Library_Manager
         }
         return self::$_instance;
     }
-    public function register_defaults()
+    function register_defaults()
     {
         $settings = C_NextGen_Settings::get_instance();
         $fs = C_Fs::get_instance();
         $router = C_Router::get_instance();
         // Add none as an option
-        $none = new stdClass();
+        $none = new C_NGG_Lightbox('none');
         $none->title = __('None', 'nggallery');
         $this->register('none', $none);
         // Add Fancybox
-        $fancybox = new stdClass();
+        $fancybox = new C_NGG_Lightbox('fancybox');
         $fancybox->title = __('Fancybox', 'nggallery');
         $fancybox->code = 'class="ngg-fancybox" rel="%GALLERY_NAME%"';
         $fancybox->styles = array('photocrati-lightbox#fancybox/jquery.fancybox-1.3.4.css');
         $fancybox->scripts = array('photocrati-lightbox#fancybox/jquery.easing-1.3.pack.js', 'photocrati-lightbox#fancybox/jquery.fancybox-1.3.4.pack.js', 'photocrati-lightbox#fancybox/nextgen_fancybox_init.js');
         $this->register('fancybox', $fancybox);
         // Add Shutter
-        $shutter = new stdClass();
+        $shutter = new C_NGG_Lightbox('shutter');
         $shutter->title = __('Shutter', 'nggallery');
         $shutter->code = 'class="shutterset_%GALLERY_NAME%"';
         $shutter->styles = array('photocrati-lightbox#shutter/shutter.css');
@@ -68,7 +59,7 @@ class C_Lightbox_Library_Manager
         $shutter->values = array('nextgen_shutter_i18n' => array('msgLoading' => __('L O A D I N G', 'nggallery'), 'msgClose' => __('Click to Close', 'nggallery')));
         $this->register('shutter', $shutter);
         // Add shutter reloaded
-        $shutter2 = new stdClass();
+        $shutter2 = new C_NGG_Lightbox('shutter2');
         $shutter2->title = __('Shutter Reloaded', 'nggallery');
         $shutter2->code = 'class="shutterset_%GALLERY_NAME%"';
         $shutter2->styles = array('photocrati-lightbox#shutter_reloaded/shutter.css');
@@ -76,9 +67,9 @@ class C_Lightbox_Library_Manager
         $shutter2->values = array('nextgen_shutter2_i18n' => array(__('Previous', 'nggallery'), __('Next', 'nggallery'), __('Close', 'nggallery'), __('Full Size', 'nggallery'), __('Fit to Screen', 'nggallery'), __('Image', 'nggallery'), __('of', 'nggallery'), __('Loading...', 'nggallery')));
         $this->register('shutter2', $shutter2);
         // Add Thickbox
-        $thickbox = new stdClass();
+        $thickbox = new C_NGG_Lightbox('thickbox');
         $thickbox->title = __('Thickbox', 'nggallery');
-        $thickbox->code = 'class=\'thickbox\' rel=\'%GALLERY_NAME%\'';
+        $thickbox->code = "class='thickbox' rel='%GALLERY_NAME%'";
         $thickbox->styles = array('wordpress#thickbox');
         $thickbox->scripts = array('photocrati-lightbox#thickbox/nextgen_thickbox_init.js', 'wordpress#thickbox');
         $thickbox->values = array('nextgen_thickbox_i18n' => array('next' => __('Next &gt;', 'nggallery'), 'prev' => __('&lt; Prev', 'nggallery'), 'image' => __('Image', 'nggallery'), 'of' => __('of', 'nggallery'), 'close' => __('Close', 'nggallery'), 'noiframes' => __('This feature requires inline frames. You have iframes disabled or your browser does not support them.', 'nggallery')));
@@ -86,7 +77,7 @@ class C_Lightbox_Library_Manager
         // Allow third parties to integrate
         do_action('ngg_registered_default_lightboxes');
         // Add custom option
-        $custom = new stdClass();
+        $custom = new C_NGG_Lightbox('custom');
         $custom->title = __('Custom', 'nggallery');
         $custom->code = $settings->thumbEffectCode;
         $custom->styles = $settings->thumbEffectStyles;
@@ -94,7 +85,7 @@ class C_Lightbox_Library_Manager
         $this->register('custom_lightbox', $custom);
         $this->_registered_defaults = TRUE;
     }
-    public function register($name, $properties)
+    function register($name, $properties)
     {
         // We'll use an object to represent the lightbox
         $object = $properties;
@@ -123,11 +114,11 @@ class C_Lightbox_Library_Manager
         }
         $this->_lightboxes[$name] = $object;
     }
-    public function deregister($name)
+    function deregister($name)
     {
         unset($this->_lightboxes[$name]);
     }
-    public function get($name)
+    function get($name)
     {
         if (!$this->_registered_defaults) {
             $this->register_defaults();
@@ -145,7 +136,7 @@ class C_Lightbox_Library_Manager
      * either of those options we silently make their selection fallback to Fancybox
      * @return null|string
      */
-    public function get_selected()
+    function get_selected()
     {
         $settings = C_NextGen_Settings::get_instance();
         if (in_array($settings->thumbEffect, array('highslide', 'lightbox'))) {
@@ -153,22 +144,22 @@ class C_Lightbox_Library_Manager
         }
         return $this->get($settings->thumbEffect);
     }
-    public function get_selected_context()
+    function get_selected_context()
     {
         return C_NextGen_Settings::get_instance()->thumbEffectContext;
     }
-    public function get_all()
+    function get_all()
     {
         if (!$this->_registered_defaults) {
             $this->register_defaults();
         }
         return array_values($this->_lightboxes);
     }
-    public function is_registered($name)
+    function is_registered($name)
     {
         return !is_null($this->get($name));
     }
-    public function maybe_enqueue()
+    function maybe_enqueue()
     {
         $settings = C_NextGen_Settings::get_instance();
         $thumbEffectContext = isset($settings->thumbEffectContext) ? $settings->thumbEffectContext : '';
@@ -176,7 +167,7 @@ class C_Lightbox_Library_Manager
             $this->enqueue();
         }
     }
-    public function enqueue($lightbox = NULL)
+    function enqueue($lightbox = NULL)
     {
         $router = C_Router::get_instance();
         $settings = C_NextGen_Settings::get_instance();
@@ -208,7 +199,8 @@ class C_Lightbox_Library_Manager
             for ($i = 0; $i < count($lightbox->styles); $i++) {
                 $src = $lightbox->styles[$i];
                 if (strpos($src, 'wordpress#') === 0) {
-                    wp_enqueue_style(@array_pop(explode('wordpress#', $src)));
+                    $parts = explode('wordpress#', $src);
+                    wp_enqueue_style(array_pop($parts));
                 } else {
                     if (!empty($src)) {
                         wp_enqueue_style($lightbox->name . "-{$i}", $this->_handle_url($src), FALSE, NGG_SCRIPT_VERSION);
@@ -220,8 +212,8 @@ class C_Lightbox_Library_Manager
                 $src = $lightbox->scripts[$i];
                 $handle = $lightbox->name . "-{$i}";
                 if (strpos($src, 'wordpress#') === 0) {
-                    $handle = @array_pop(explode('wordpress#', $src));
-                    wp_enqueue_script($handle);
+                    $parts = explode('wordpress#', $src);
+                    wp_enqueue_script(array_pop($parts));
                 } else {
                     if (!empty($src)) {
                         wp_enqueue_script($handle, $this->_handle_url($src), array('ngg_lightbox_context'), NGG_SCRIPT_VERSION, TRUE);
@@ -253,7 +245,7 @@ class C_Lightbox_Library_Manager
      * @param mixed $object_value
      * @param bool $define
      */
-    public function _add_script_data($handle, $object_name, $object_value, $define = TRUE, $override = FALSE)
+    function _add_script_data($handle, $object_name, $object_value, $define = TRUE, $override = FALSE)
     {
         $retval = FALSE;
         // wp_localize_script allows you to add data to the DOM, associated
@@ -291,9 +283,48 @@ class C_Lightbox_Library_Manager
         }
         return $retval;
     }
-    public function deregister_all()
+    function deregister_all()
     {
         $this->_lightboxes = array();
         $this->_registered_defaults = FALSE;
     }
+}
+/**
+ * Represents a lightbox available in NextGEN Gallery
+ * Class C_NGG_Lightbox
+ * @mixin Mixin_NGG_Lightbox_Instance_Methods
+ * @implements I_Lightbox
+ */
+class C_NGG_Lightbox extends C_Component
+{
+    function define($context = FALSE, $properties = array())
+    {
+        parent::define($context);
+        $this->add_mixin('Mixin_NGG_Lightbox_Instance_Methods');
+        $this->implement('I_Lightbox');
+    }
+    function initialize($name = '', $properties = array())
+    {
+        parent::initialize($name);
+        $properties['name'] = $name;
+        foreach ($properties as $k => $v) {
+            $this->{$k} = $v;
+        }
+    }
+}
+class Mixin_NGG_Lightbox_Instance_Methods extends Mixin
+{
+    /**
+     * Returns true/false whether or not the lightbox supports displaying entities from the displayed gallery object
+     * @param $displayed_gallery. By default, lightboxes don't support albums
+     * @return bool
+     */
+    function is_supported($displayed_gallery)
+    {
+        $retval = TRUE;
+        if (in_array($displayed_gallery->source, array('album', 'albums')) && !isset($displayed_gallery->display_settings['open_gallery_in_lightbox'])) {
+            $retval = FALSE;
+        }
+        return $retval;
+    }
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.easing-1.3.pack.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.easing-1.3.pack.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..ace85b70e83fd6399c26f1b217fefc539048d751
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.easing-1.3.pack.min.js
@@ -0,0 +1 @@
+eval(function(t,e,c,b,d,s){if(d=function(t){return(t<e?"":d(parseInt(t/e)))+((t%=e)>35?String.fromCharCode(t+29):t.toString(36))},!"".replace(/^/,String)){for(;c--;)s[d(c)]=b[c]||d(c);b=[function(t){return s[t]}],d=function(){return"\\w+"},c=1}for(;c--;)b[c]&&(t=t.replace(new RegExp("\\b"+d(c)+"\\b","g"),b[c]));return t}("h.i['1a']=h.i['z'];h.O(h.i,{y:'D',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});",62,74,"||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce".split("|"),0,{}));
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.css
index 61a99a4e83c0302fec4f2c9782a735358adeb381..38812912d220f672cd4748d0c17e62ffdfc72083 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.css
@@ -1 +1 @@
-#fancybox-loading{position:fixed;top:50%;left:50%;width:40px;height:40px;margin-top:-20px;margin-left:-20px;cursor:pointer;overflow:hidden;z-index:1104;display:none}#fancybox-loading div{position:absolute;top:0;left:0;width:40px;height:480px;background-image:url('fancybox.png')}#fancybox-overlay{position:absolute;top:0;left:0;width:100%;z-index:1100;display:none}#fancybox-tmp{padding:0;margin:0;border:0;overflow:auto;display:none}#fancybox-wrap{position:absolute;top:0;left:0;padding:20px;z-index:1101;outline:0;display:none}#fancybox-outer{position:relative;width:100%;height:100%;background:#fff}#fancybox-content{width:0;height:0;padding:0;outline:0;position:relative;overflow:hidden;z-index:1102;border:0 solid #fff}#fancybox-hide-sel-frame{position:absolute;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1101}#fancybox-close{position:absolute;top:-15px;right:-15px;width:30px;height:30px;background:transparent url('fancybox.png') -40px 0;cursor:pointer;z-index:1103;display:none}#fancybox-error{color:#444;font:normal 12px/20px Arial;padding:14px;margin:0}#fancybox-img{width:100%;height:100%;padding:0;margin:0;border:0;outline:0;line-height:0;vertical-align:top}#fancybox-frame{width:100%;height:100%;border:0;display:block}#fancybox-left,#fancybox-right{position:absolute;bottom:0;height:100%;width:35%;cursor:pointer;outline:0;background:transparent url('blank.gif');z-index:1102;display:none}#fancybox-left{left:0}#fancybox-right{right:0}#fancybox-left-ico,#fancybox-right-ico{position:absolute;top:50%;left:-9999px;width:30px;height:30px;margin-top:-15px;cursor:pointer;z-index:1102;display:block}#fancybox-left-ico{background-image:url('fancybox.png');background-position:-40px -30px}#fancybox-right-ico{background-image:url('fancybox.png');background-position:-40px -60px}#fancybox-left:hover,#fancybox-right:hover{visibility:visible}#fancybox-left:hover span{left:20px}#fancybox-right:hover span{left:auto;right:20px}.fancybox-bg{position:absolute;padding:0;margin:0;border:0;width:20px;height:20px;z-index:1001}#fancybox-bg-n{top:-20px;left:0;width:100%;background-image:url('fancybox-x.png')}#fancybox-bg-ne{top:-20px;right:-20px;background-image:url('fancybox.png');background-position:-40px -162px}#fancybox-bg-e{top:0;right:-20px;height:100%;background-image:url('fancybox-y.png');background-position:-20px 0}#fancybox-bg-se{bottom:-20px;right:-20px;background-image:url('fancybox.png');background-position:-40px -182px}#fancybox-bg-s{bottom:-20px;left:0;width:100%;background-image:url('fancybox-x.png');background-position:0 -20px}#fancybox-bg-sw{bottom:-20px;left:-20px;background-image:url('fancybox.png');background-position:-40px -142px}#fancybox-bg-w{top:0;left:-20px;height:100%;background-image:url('fancybox-y.png')}#fancybox-bg-nw{top:-20px;left:-20px;background-image:url('fancybox.png');background-position:-40px -122px}#fancybox-title{font-family:Helvetica;font-size:12px;z-index:1102}.fancybox-title-inside{padding-bottom:10px;text-align:center;color:#333;background:#fff;position:relative}.fancybox-title-outside{padding-top:10px;color:#fff}.fancybox-title-over{position:absolute;bottom:0;left:0;color:#FFF;text-align:left}#fancybox-title-over{padding:10px;background-image:url('fancy_title_over.png');display:block}.fancybox-title-float{position:absolute;left:0;bottom:-20px;height:32px}#fancybox-title-float-wrap{border:0;border-collapse:collapse;width:auto}#fancybox-title-float-wrap td{border:0;white-space:nowrap}#fancybox-title-float-left{padding:0 0 0 15px;background:url('fancybox.png') -40px -90px no-repeat}#fancybox-title-float-main{color:#FFF;line-height:29px;font-weight:bold;padding:0 0 3px 0;background:url('fancybox-x.png') 0 -40px}#fancybox-title-float-right{padding:0 0 0 15px;background:url('fancybox.png') -55px -90px no-repeat}.fancybox-ie6 #fancybox-close{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png',sizingMethod='scale')}.fancybox-ie6 #fancybox-left-ico{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png',sizingMethod='scale')}.fancybox-ie6 #fancybox-right-ico{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png',sizingMethod='scale')}.fancybox-ie6 #fancybox-title-over{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png',sizingMethod='scale');zoom:1}.fancybox-ie6 #fancybox-title-float-left{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png',sizingMethod='scale')}.fancybox-ie6 #fancybox-title-float-main{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png',sizingMethod='scale')}.fancybox-ie6 #fancybox-title-float-right{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png',sizingMethod='scale')}.fancybox-ie6 #fancybox-bg-w,.fancybox-ie6 #fancybox-bg-e,.fancybox-ie6 #fancybox-left,.fancybox-ie6 #fancybox-right,#fancybox-hide-sel-frame{height:expression(this.parentNode.clientHeight+"px")}#fancybox-loading.fancybox-ie6{position:absolute;margin-top:0;top:expression((-20+(document.documentElement.clientHeight ? document.documentElement.clientHeight/2:document.body.clientHeight/2)+(ignoreMe=document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop))+'px')}#fancybox-loading.fancybox-ie6 div{background:transparent;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png',sizingMethod='scale')}.fancybox-ie .fancybox-bg{background:transparent !important}.fancybox-ie #fancybox-bg-n{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-ne{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-e{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-se{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-s{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-sw{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-w{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png',sizingMethod='scale')}.fancybox-ie #fancybox-bg-nw{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png',sizingMethod='scale')}#fancybox-wrap,#fancybox-content,#fancybox-outer{box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}
\ No newline at end of file
+#fancybox-loading div,#fancybox-overlay,#fancybox-wrap{position:absolute;top:0;left:0}#fancybox-bg-ne,#fancybox-bg-nw,#fancybox-bg-se,#fancybox-bg-sw,#fancybox-left-ico,#fancybox-loading div,#fancybox-right-ico{background-image:url(fancybox.png)}#fancybox-frame,#fancybox-img{width:100%;border:none;height:100%}#fancybox-loading{position:fixed;top:50%;left:50%;width:40px;height:40px;margin-top:-20px;margin-left:-20px;cursor:pointer;overflow:hidden;z-index:1104;display:none}#fancybox-loading div{width:40px;height:480px}#fancybox-overlay{width:100%;z-index:1100;display:none}#fancybox-tmp{padding:0;margin:0;border:0;overflow:auto;display:none}#fancybox-wrap{padding:20px;z-index:1101;outline:0;display:none}#fancybox-outer{position:relative;width:100%;height:100%;background:#fff}#fancybox-content{width:0;height:0;padding:0;outline:0;position:relative;overflow:hidden;z-index:1102;border:0 solid #fff}#fancybox-hide-sel-frame{position:absolute;top:0;left:0;width:100%;background:0 0;z-index:1101}#fancybox-close{position:absolute;top:-15px;right:-15px;width:30px;height:30px;background:url(fancybox.png) -40px 0;cursor:pointer;z-index:1103;display:none}#fancybox-error{color:#444;font:400 12px/20px Arial;padding:14px;margin:0}#fancybox-img{padding:0;margin:0;outline:0;line-height:0;vertical-align:top}#fancybox-frame{display:block}#fancybox-left,#fancybox-right{position:absolute;bottom:0;height:100%;width:35%;cursor:pointer;outline:0;background:url(blank.gif);z-index:1102;display:none}#fancybox-left{left:0}#fancybox-right{right:0}#fancybox-left-ico,#fancybox-right-ico{position:absolute;top:50%;left:-9999px;width:30px;height:30px;margin-top:-15px;cursor:pointer;z-index:1102;display:block}#fancybox-left-ico{background-position:-40px -30px}#fancybox-right-ico{background-position:-40px -60px}#fancybox-left:hover,#fancybox-right:hover{visibility:visible}#fancybox-left:hover span{left:20px}#fancybox-right:hover span{left:auto;right:20px}.fancybox-bg{position:absolute;padding:0;margin:0;border:0;width:20px;height:20px;z-index:1001}#fancybox-bg-n,#fancybox-bg-s{left:0;width:100%;background-image:url(fancybox-x.png)}#fancybox-bg-e,#fancybox-bg-w{top:0;height:100%;background-image:url(fancybox-y.png)}#fancybox-bg-n{top:-20px}#fancybox-bg-ne{top:-20px;right:-20px;background-position:-40px -162px}#fancybox-bg-e{right:-20px;background-position:-20px 0}#fancybox-bg-se{bottom:-20px;right:-20px;background-position:-40px -182px}#fancybox-bg-s{bottom:-20px;background-position:0 -20px}#fancybox-bg-sw{bottom:-20px;left:-20px;background-position:-40px -142px}#fancybox-bg-w{left:-20px}#fancybox-bg-nw{top:-20px;left:-20px;background-position:-40px -122px}#fancybox-title{font-family:Helvetica;font-size:12px;z-index:1102}.fancybox-title-inside{padding-bottom:10px;text-align:center;color:#333;background:#fff;position:relative}.fancybox-title-outside{padding-top:10px;color:#fff}.fancybox-title-over{position:absolute;bottom:0;left:0;color:#FFF;text-align:left}#fancybox-title-over{padding:10px;background-image:url(fancy_title_over.png);display:block}.fancybox-title-float{position:absolute;left:0;bottom:-20px;height:32px}#fancybox-title-float-wrap{border:none;border-collapse:collapse;width:auto}#fancybox-title-float-wrap td{border:none;white-space:nowrap}#fancybox-title-float-left{padding:0 0 0 15px;background:url(fancybox.png) -40px -90px no-repeat}#fancybox-title-float-main{color:#FFF;line-height:29px;font-weight:700;padding:0 0 3px;background:url(fancybox-x.png) 0 -40px}#fancybox-title-float-right{padding:0 0 0 15px;background:url(fancybox.png) -55px -90px no-repeat}.fancybox-ie6 #fancybox-close{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale')}.fancybox-ie6 #fancybox-left-ico{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale')}.fancybox-ie6 #fancybox-right-ico{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale')}.fancybox-ie6 #fancybox-title-over{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale');zoom:1}.fancybox-ie6 #fancybox-title-float-left{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale')}.fancybox-ie6 #fancybox-title-float-main{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale')}.fancybox-ie6 #fancybox-title-float-right{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale')}#fancybox-hide-sel-frame,.fancybox-ie6 #fancybox-bg-e,.fancybox-ie6 #fancybox-bg-w,.fancybox-ie6 #fancybox-left,.fancybox-ie6 #fancybox-right{height:expression(this.parentNode.clientHeight + "px")}#fancybox-loading.fancybox-ie6{position:absolute;margin-top:0;top:expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px')}#fancybox-loading.fancybox-ie6 div{background:0 0;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale')}.fancybox-ie .fancybox-bg{background:0 0!important}.fancybox-ie #fancybox-bg-n{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-ne{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-e{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-se{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-s{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-sw{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-w{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale')}.fancybox-ie #fancybox-bg-nw{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale')}#fancybox-content,#fancybox-outer,#fancybox-wrap{box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.js
index 9e9df6e67d3a74dfa1ee449153602ab428c16434..ee1a58b05a7f37cf97e0792d987d4629342ba89a 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(d($){P H,X,Y,q,1E,y,11,f,1H,1G,T=0,9={},Q=[],O=0,4={},K=[],29=1L,13=22 2b(),2j=/\\.(58|57|56|59|5a)(.*)?$/i,3z=/[^\\.]\\.(1N)\\s*$/i,2t,2u=1,1s=0,1c=\'\',U,F,D=t,1w=$.1k($(\'<l/>\')[0],{1t:0}),2D=$.34.3L&&$.34.5c<7&&!16.1x,2p=d(){X.L();13.3h=13.3r=1L;6(29){29.5b()}H.1u()},2o=d(){6(t===9.3F(Q,T,9)){X.L();D=t;r}9.30=t;9.b=\'R\';9.c=\'R\';H.17(\'<p z="8-4b">55 54 y 4Z 4Y 4X.<50 />51 53 52 5d.</p>\');1U()},1Y=d(){P g=Q[T],k,E,f,23,2z,1a;2p();9=$.1k({},$.2F.8.4t,(Z $(g).W(\'8\')==\'21\'?9:$(g).W(\'8\')));1a=9.3X(Q,T,9);6(1a===t){D=t;r}A 6(Z 1a==\'1A\'){9=$.1k(9,1a)}f=9.f||(g.3s?$(g).1Q(\'f\'):g.f)||\'\';6(g.3s&&!9.1e){9.1e=$(g).1X("2c:3C").N?$(g).1X("2c:3C"):$(g)}6(f===\'\'&&9.1e&&9.3J){f=9.1e.1Q(\'3Y\')}k=9.k||(g.3s?$(g).1Q(\'k\'):g.k)||1L;6((/^(?:2a)/i).2N(k)||k==\'#\'){k=1L}6(9.E){E=9.E;6(!k){k=9.y}}A 6(9.y){E=\'17\'}A 6(k){6(k.2k(2j)){E=\'32\'}A 6(k.2k(3z)){E=\'1N\'}A 6($(g).5p("1j")){E=\'1j\'}A 6(k.1R("#")===0){E=\'1z\'}A{E=\'15\'}}6(!E){2o();r}6(E==\'1z\'){g=k.5o(k.1R("#"));E=$(g).N>0?\'1z\':\'15\'}9.E=E;9.k=k;9.f=f;6(9.1J){6(9.E==\'17\'||9.E==\'1z\'||9.E==\'15\'){9.b=\'R\';9.c=\'R\'}A{9.1J=t}}6(9.4v){9.31=I;9.2M=t;9.33=t;9.2K=t;9.2S=t}9.v=B(9.v,10);9.1b=B(9.1b,10);H.G(\'v\',(9.v+9.1b));$(\'.8-1z-H\').1r(\'8-1T\').1f(\'8-3R\',d(){$(V).3i(y.1X())});43(E){1m\'17\':H.17(9.y);1U();1g;1m\'1z\':6($(g).5q().1q(\'#8-y\')===I){D=t;r}$(\'<l 18="8-1z-H" />\').L().5r($(g)).1f(\'8-2T\',d(){$(V).3i(y.1X())}).1f(\'8-1T\',d(){$(V).3i(H.1X())});$(g).1i(H);1U();1g;1m\'32\':D=t;$.8.2X();13=22 2b();13.3h=d(){2o()};13.3r=d(){D=I;13.3h=13.3r=1L;3V()};13.1h=k;1g;1m\'1N\':9.1F=\'4q\';23=\'<1A 5n="5m:5h-5g-5f-4W-5j" b="\'+9.b+\'" c="\'+9.c+\'"><2x 1V="5l" 3K="\'+k+\'"></2x>\';2z=\'\';$.5k(9.1N,d(1V,3l){23+=\'<2x 1V="\'+1V+\'" 3K="\'+3l+\'"></2x>\';2z+=\' \'+1V+\'="\'+3l+\'"\'});23+=\'<3A 1h="\'+k+\'" E="4N/x-4L-4K" b="\'+9.b+\'" c="\'+9.c+\'"\'+2z+\'></3A></1A>\';H.17(23);1U();1g;1m\'15\':D=t;$.8.2X();9.15.3j=9.15.41;29=$.15($.1k({},9.15,{4U:k,W:9.15.W||{},4b:d(1x,3w,4Q){6(1x.3S>0){2o()}},41:d(W,3w,1x){P o=Z 1x==\'1A\'?1x:29;6(o.3S==3y){6(Z 9.15.3j==\'d\'){1a=9.15.3j(k,W,3w,1x);6(1a===t){X.L();r}A 6(Z 1a==\'4V\'||Z 1a==\'1A\'){W=1a}}H.17(W);1U()}}}));1g;1m\'1j\':2f();1g}},1U=d(){P w=9.b,h=9.c;6(w.2B().1R(\'%\')>-1){w=B(($(16).b()-(9.1b*2))*2w(w)/2v,10)+\'1Z\'}A{w=w==\'R\'?\'R\':w+\'1Z\'}6(h.2B().1R(\'%\')>-1){h=B(($(16).c()-(9.1b*2))*2w(h)/2v,10)+\'1Z\'}A{h=h==\'R\'?\'R\':h+\'1Z\'}H.4O(\'<l 1I="b:\'+w+\';c:\'+h+\';4T: \'+(9.1F==\'R\'?\'R\':(9.1F==\'4M\'?\'2C\':\'2n\'))+\';38:4R;"></l>\');9.b=H.b();9.c=H.c();2f()},3V=d(){9.b=13.b;9.c=13.c;$("<2c />").1Q({\'z\':\'8-2c\',\'1h\':13.1h,\'3Y\':9.f}).1i(H);2f()},2f=d(){P m,2O;X.L();6(q.1q(":1O")&&t===4.3g(K,O,4)){$.2q.2s(\'8-1T\');D=t;r}D=I;$(y.1S(Y)).1r();$(16).1r("1B.14 2C.14");$(1o).1r(\'2W.14\');6(q.1q(":1O")&&4.1n!==\'5z\'){q.G(\'c\',q.c())}K=Q;O=T;4=9;6(4.31){Y.G({\'62-63\':4.3N,\'19\':4.3H,\'5v\':4.2M?\'64\':\'R\',\'c\':$(1o).c()});6(!Y.1q(\':1O\')){6(2D){$(\'3P:65(#8-H 3P)\').2e(d(){r V.1I.2R!==\'2n\'}).G({\'2R\':\'2n\'}).61(\'8-2T\',d(){V.1I.2R=\'5V\'})}Y.1d()}}A{Y.L()}F=3I();47();6(q.1q(":1O")){$(11.1S(1H).1S(1G)).L();m=q.38(),U={M:m.M,J:m.J,b:q.b(),c:q.c()};2O=(U.b==F.b&&U.c==F.c);y.3Q(4.36,0.3,d(){P 2P=d(){y.17(H.2Q()).3Q(4.36,1,2h)};$.2q.2s(\'8-3R\');y.1u().3e(\'2e\').G({\'26-b\':4.v,\'b\':F.b-4.v*2,\'c\':9.1J?\'R\':F.c-1s-4.v*2});6(2O){2P()}A{1w.1t=0;$(1w).2d({1t:1},{3v:4.3B,3u:4.5Z,3t:2r,3q:2P})}});r}q.3e("1I");y.G(\'26-b\',4.v);6(4.2Z==\'4B\'){U=2V();y.17(H.2Q());q.1d();6(4.19){F.19=0}1w.1t=0;$(1w).2d({1t:1},{3v:4.3c,3u:4.42,3t:2r,3q:2h});r}6(4.1n==\'2U\'&&1s>0){f.1d()}y.G({\'b\':F.b-4.v*2,\'c\':9.1J?\'R\':F.c-1s-4.v*2}).17(H.2Q());q.G(F).67(4.2Z==\'4d\'?0:4.3c,2h)},46=d(f){6(f&&f.N){6(4.1n==\'1D\'){r\'<4a z="8-f-1D-q" 68="0" 6g="0"><49><1P z="8-f-1D-J"></1P><1P z="8-f-1D-6h">\'+f+\'</1P><1P z="8-f-1D-3p"></1P></49></4a>\'}r\'<l z="8-f-\'+4.1n+\'">\'+f+\'</l>\'}r t},47=d(){1c=4.f||\'\';1s=0;f.1u().3e(\'1I\').6f();6(4.30===t){f.L();r}1c=$.6e(4.2Y)?4.2Y(1c,K,O,4):46(1c);6(!1c||1c===\'\'){f.L();r}f.2I(\'8-f-\'+4.1n).17(1c).1i(\'4h\').1d();43(4.1n){1m\'2U\':f.G({\'b\':F.b-(4.v*2),\'44\':4.v,\'69\':4.v});1s=f.5E(I);f.1i(1E);F.c+=1s;1g;1m\'5F\':f.G({\'44\':4.v,\'b\':F.b-(4.v*2),\'5C\':4.v}).1i(1E);1g;1m\'1D\':f.G(\'J\',B((f.b()-F.b-40)/2,10)*-1).1i(q);1g;5x:f.G({\'b\':F.b-(4.v*2),\'4y\':4.v,\'5w\':4.v}).1i(q);1g}f.L()},3D=d(){6(4.2K||4.3o){$(1o).1f(\'2W.14\',d(e){6(e.2g==27&&4.2K){e.1v();$.8.11()}A 6((e.2g==37||e.2g==39)&&4.3o&&e.1M.3a!==\'5A\'&&e.1M.3a!==\'5H\'&&e.1M.3a!==\'5P\'){e.1v();$.8[e.2g==37?\'2L\':\'2J\']()}})}6(!4.3W){1H.L();1G.L();r}6((4.2H&&K.N>1)||O!==0){1H.1d()}6((4.2H&&K.N>1)||O!=(K.N-1)){1G.1d()}},2h=d(){6(!$.4D.19){y.1W(0).1I.3E(\'2e\');q.1W(0).1I.3E(\'2e\')}6(9.1J){y.G(\'c\',\'R\')}q.G(\'c\',\'R\');6(1c&&1c.N){f.1d()}6(4.2S){11.1d()}3D();6(4.33){y.1f(\'1p\',$.8.11)}6(4.2M){Y.1f(\'1p\',$.8.11)}$(16).1f("1B.14",$.8.1B);6(4.4z){$(16).1f("2C.14",$.8.2A)}6(4.E==\'1j\'){$(\'<1j z="8-3f" 1V="8-3f\'+22 5D().5M()+\'" 4n="0" 5K="0" \'+($.34.3L?\'5S="I""\':\'\')+\' 1F="\'+9.1F+\'" 1h="\'+4.k+\'"></1j>\').1i(y)}q.1d();D=t;$.8.2A();4.3O(K,O,4);3M()},3M=d(){P k,25;6((K.N-1)>O){k=K[O+1].k;6(Z k!==\'21\'&&k.2k(2j)){25=22 2b();25.1h=k}}6(O>0){k=K[O-1].k;6(Z k!==\'21\'&&k.2k(2j)){25=22 2b();25.1h=k}}},2r=d(m){P 24={b:B(U.b+(F.b-U.b)*m,10),c:B(U.c+(F.c-U.c)*m,10),M:B(U.M+(F.M-U.M)*m,10),J:B(U.J+(F.J-U.J)*m,10)};6(Z F.19!==\'21\'){24.19=m<0.5?0.5:m}q.G(24);y.G({\'b\':24.b-4.v*2,\'c\':24.c-(1s*m)-4.v*2})},2l=d(){r[$(16).b()-(4.1b*2),$(16).c()-(4.1b*2),$(1o).5U()+4.1b,$(1o).5T()+4.1b]},3I=d(){P u=2l(),C={},1B=4.4x,1C=4.v*2,2m;6(4.b.2B().1R(\'%\')>-1){C.b=B((u[0]*2w(4.b))/2v,10)}A{C.b=4.b+1C}6(4.c.2B().1R(\'%\')>-1){C.c=B((u[1]*2w(4.c))/2v,10)}A{C.c=4.c+1C}6(1B&&(C.b>u[0]||C.c>u[1])){6(9.E==\'32\'||9.E==\'1N\'){2m=(4.b)/(4.c);6((C.b)>u[0]){C.b=u[0];C.c=B(((C.b-1C)/2m)+1C,10)}6((C.c)>u[1]){C.c=u[1];C.b=B(((C.c-1C)*2m)+1C,10)}}A{C.b=1K.3T(C.b,u[0]);C.c=1K.3T(C.c,u[1])}}C.M=B(1K.2i(u[3]-20,u[3]+((u[1]-C.c-40)*0.5)),10);C.J=B(1K.2i(u[2]-20,u[2]+((u[0]-C.b-40)*0.5)),10);r C},4w=d(g){P m=g.5Y();m.M+=B(g.G(\'6d\'),10)||0;m.J+=B(g.G(\'4y\'),10)||0;m.M+=B(g.G(\'26-M-b\'),10)||0;m.J+=B(g.G(\'26-J-b\'),10)||0;m.b=g.b();m.c=g.c();r m},2V=d(){P 1e=9.1e?$(9.1e):t,2y={},m,u;6(1e&&1e.N){m=4w(1e);2y={b:m.b+(4.v*2),c:m.c+(4.v*2),M:m.M-4.v-20,J:m.J-4.v-20}}A{u=2l();2y={b:4.v*2,c:4.v*2,M:B(u[3]+u[1]*0.5,10),J:B(u[2]+u[0]*0.5,10)}}r 2y},4s=d(){6(!X.1q(\':1O\')){4o(2t);r}$(\'l\',X).G(\'M\',(2u*-40)+\'1Z\');2u=(2u+1)%12};$.2F.8=d(4E){6(!$(V).N){r V}$(V).W(\'8\',$.1k({},4E,($.4F?$(V).4F():{}))).1r(\'1p.14\').1f(\'1p.14\',d(e){e.1v();6(D){r}D=I;$(V).5Q();Q=[];T=0;P 1l=$(V).1Q(\'1l\')||\'\';6(!1l||1l==\'\'||1l===\'5R\'){Q.4p(V)}A{Q=$("a[1l="+1l+"], 5N[1l="+1l+"]");T=Q.4e(V)}1Y();r});r V};$.8=d(g){P 1y;6(D){r}D=I;1y=Z 28[1]!==\'21\'?28[1]:{};Q=[];T=B(1y.4e,10)||0;6($.5L(g)){5J(P i=0,j=g.N;i<j;i++){6(Z g[i]==\'1A\'){$(g[i]).W(\'8\',$.1k({},1y,g[i]))}A{g[i]=$({}).W(\'8\',$.1k({y:g[i]},1y))}}Q=4H.5O(Q,g)}A{6(Z g==\'1A\'){$(g).W(\'8\',$.1k({},1y,g))}A{g=$({}).W(\'8\',$.1k({y:g},1y))}Q.4p(g)}6(T>Q.N||T<0){T=0}1Y()};$.8.2X=d(){4o(2t);X.1d();2t=6b(4s,66)};$.8.6c=d(){X.L()};$.8.2J=d(){r $.8.m(O+1)};$.8.2L=d(){r $.8.m(O-1)};$.8.m=d(m){6(D){r}m=B(m);Q=K;6(m>-1&&m<K.N){T=m;1Y()}A 6(4.2H&&K.N>1){T=m>=K.N?0:K.N-1;1Y()}r};$.8.1T=d(){6(D){r}D=I;$.2q.2s(\'8-1T\');2p();9.3Z(Q,T,9);D=t};$.8.11=d(){6(D||q.1q(\':2n\')){r}D=I;6(4&&t===4.3g(K,O,4)){D=t;r}2p();$(11.1S(1H).1S(1G)).L();$(y.1S(Y)).1r();$(16).1r("1B.14 2C.14");$(1o).1r(\'2W.14\');y.60(\'1j\').1Q(\'1h\',2D&&/^4C/i.2N(16.4u.k||\'\')?\'2a:4i(t)\':\'4j:4f\');6(4.1n!==\'2U\'){f.1u()}q.4r();d 3k(){Y.4g(\'45\');f.1u().L();q.L();$.2q.2s(\'8-2T\');y.1u();4.3x(K,O,4);K=9=[];O=T=0;4=9={};D=t}6(4.35==\'4B\'){U=2V();P m=q.38();F={M:m.M,J:m.J,b:q.b(),c:q.c()};6(4.19){F.19=1}f.1u().L();1w.1t=1;$(1w).2d({1t:0},{3v:4.3d,3u:4.48,3t:2r,3q:3k})}A{q.4g(4.35==\'4d\'?0:4.3d,3k)}};$.8.1B=d(){6(Y.1q(\':1O\')){Y.G(\'c\',$(1o).c())}$.8.2A(I)};$.8.2A=d(){P u,3m;6(D){r}3m=28[0]===I?1:0;u=2l();6(!3m&&(q.b()>u[0]||q.c()>u[1])){r}q.4r().2d({\'M\':B(1K.2i(u[3]-20,u[3]+((u[1]-y.c()-40)*0.5)-4.v)),\'J\':B(1K.2i(u[2]-20,u[2]+((u[0]-y.b()-40)*0.5)-4.v))},Z 28[0]==\'5e\'?28[0]:3y)};$.8.3G=d(){6($("#8-q").N){r}$(\'4h\').3n(H=$(\'<l z="8-H"></l>\'),X=$(\'<l z="8-X"><l></l></l>\'),Y=$(\'<l z="8-Y"></l>\'),q=$(\'<l z="8-q"></l>\'));1E=$(\'<l z="8-1E"></l>\').3n(\'<l 18="8-S" z="8-S-n"></l><l 18="8-S" z="8-S-5t"></l><l 18="8-S" z="8-S-e"></l><l 18="8-S" z="8-S-5u"></l><l 18="8-S" z="8-S-s"></l><l 18="8-S" z="8-S-4P"></l><l 18="8-S" z="8-S-w"></l><l 18="8-S" z="8-S-4I"></l>\').1i(q);1E.3n(y=$(\'<l z="8-y"></l>\'),11=$(\'<a z="8-11"></a>\'),f=$(\'<l z="8-f"></l>\'),1H=$(\'<a k="2a:;" z="8-J"><2E 18="4m-2G" z="8-J-2G"></2E></a>\'),1G=$(\'<a k="2a:;" z="8-3p"><2E 18="4m-2G" z="8-3p-2G"></2E></a>\'));11.1p($.8.11);X.1p($.8.1T);1H.1p(d(e){e.1v();$.8.2L()});1G.1p(d(e){e.1v();$.8.2J()});6($.2F.4l){q.1f(\'4l.14\',d(e,4G){6(D){e.1v()}A 6($(e.1M).1W(0).4k==0||$(e.1M).1W(0).4S===$(e.1M).1W(0).4k){e.1v();$.8[4G>0?\'2L\':\'2J\']()}})}6(!$.4D.19){q.2I(\'8-4J\')}6(2D){X.2I(\'8-4A\');q.2I(\'8-4A\');$(\'<1j z="8-L-5i-3f" 1h="\'+(/^4C/i.2N(16.4u.k||\'\')?\'2a:4i(t)\':\'4j:4f\')+\'" 1F="4q" 26="0" 4n="0" 5G="-1"></1j>\').5I(1E)}};$.2F.8.4t={v:10,1b:40,19:t,4v:t,2H:t,1F:\'R\',b:5B,c:6a,4x:I,1J:I,4z:t,15:{},1N:{5W:\'5X\'},2M:I,33:t,31:I,3H:0.7,3N:\'#5y\',30:I,1n:\'1D\',2Y:1L,3J:t,2Z:\'4c\',35:\'4c\',3c:3b,3d:3b,3B:3b,36:\'45\',42:\'3U\',48:\'3U\',2S:I,3W:I,2K:I,3o:I,3X:d(){},3Z:d(){},3O:d(){},3g:d(){},3x:d(){},3F:d(){}};$(1o).5s(d(){$.8.3G()})})(4H);',62,390,'||||currentOpts||if||fancybox|selectedOpts||width|height|function||title|obj||||href|div|pos||||wrap|return||false|view|padding|||content|id|else|parseInt|to|busy|type|final_pos|css|tmp|true|left|currentArray|hide|top|length|currentIndex|var|selectedArray|auto|bg|selectedIndex|start_pos|this|data|loading|overlay|typeof||close||imgPreloader|fb|ajax|window|html|class|opacity|ret|margin|titleStr|show|orig|bind|break|src|appendTo|iframe|extend|rel|case|titlePosition|document|click|is|unbind|titleHeight|prop|empty|preventDefault|fx|XMLHttpRequest|opts|inline|object|resize|double_padding|float|outer|scrolling|nav_right|nav_left|style|autoDimensions|Math|null|target|swf|visible|td|attr|indexOf|add|cancel|_process_inline|name|get|children|_start|px||undefined|new|str|dim|objNext|border||arguments|ajaxLoader|javascript|Image|img|animate|filter|_show|keyCode|_finish|max|imgRegExp|match|_get_viewport|ratio|hidden|_error|_abort|event|_draw|trigger|loadingTimer|loadingFrame|100|parseFloat|param|from|emb|center|toString|scroll|isIE6|span|fn|ico|cyclic|addClass|next|enableEscapeButton|prev|hideOnOverlayClick|test|equal|finish_resizing|contents|visibility|showCloseButton|cleanup|inside|_get_zoom_from|keydown|showActivity|titleFormat|transitionIn|titleShow|overlayShow|image|hideOnContentClick|browser|transitionOut|changeFade||position||tagName|300|speedIn|speedOut|removeAttr|frame|onCleanup|onerror|replaceWith|win|_cleanup|val|align|append|enableKeyboardNav|right|complete|onload|nodeName|step|easing|duration|textStatus|onClosed|200|swfRegExp|embed|changeSpeed|first|_set_navigation|removeAttribute|onError|init|overlayOpacity|_get_zoom_to|titleFromAlt|value|msie|_preload_images|overlayColor|onComplete|select|fadeTo|change|status|min|swing|_process_image|showNavArrows|onStart|alt|onCancel||success|easingIn|switch|marginLeft|fast|_format_title|_process_title|easingOut|tr|table|error|fade|none|index|blank|fadeOut|body|void|about|clientHeight|mousewheel|fancy|frameborder|clearInterval|push|no|stop|_animate_loading|defaults|location|modal|_get_obj_pos|autoScale|paddingLeft|centerOnScroll|ie6|elastic|https|support|options|metadata|delta|jQuery|nw|ie|flash|shockwave|yes|application|wrapInner|sw|errorThrown|relative|scrollHeight|overflow|url|string|96B8|loaded|be|cannot|br|Please|again|try|requested|The|png|gif|jpg|bmp|jpeg|abort|version|later|number|11cf|AE6D|D27CDB6E|sel|444553540000|each|movie|clsid|classid|substr|hasClass|parent|insertBefore|ready|ne|se|cursor|paddingRight|default|777|outside|INPUT|560|bottom|Date|outerHeight|over|tabindex|TEXTAREA|prependTo|for|hspace|isArray|getTime|area|merge|SELECT|blur|nofollow|allowtransparency|scrollTop|scrollLeft|inherit|wmode|transparent|offset|easingChange|find|one|background|color|pointer|not||fadeIn|cellpadding|marginRight|340|setInterval|hideActivity|paddingTop|isFunction|removeClass|cellspacing|main'.split('|'),0,{}))
+!function(t){var e,i,n,a,o,d,c,r,s,h,l,f,p,g=0,b={},u=[],y=0,w={},v=[],x=null,m=new Image,I=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,C=/[^\.]\.(swf)\s*$/i,k=1,O=0,j="",T=!1,S=t.extend(t("<div/>")[0],{prop:0}),A=t.browser.msie&&t.browser.version<7&&!window.XMLHttpRequest,D=function(){i.hide(),m.onerror=m.onload=null,x&&x.abort(),e.empty()},F=function(){return!1===b.onError(u,g,b)?(i.hide(),void(T=!1)):(b.titleShow=!1,b.width="auto",b.height="auto",e.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>'),void N())},E=function(){var n,a,o,c,r,s,h=u[g];if(D(),b=t.extend({},t.fn.fancybox.defaults,"undefined"==typeof t(h).data("fancybox")?b:t(h).data("fancybox")),s=b.onStart(u,g,b),s===!1)return void(T=!1);if("object"==typeof s&&(b=t.extend(b,s)),o=b.title||(h.nodeName?t(h).attr("title"):h.title)||"",h.nodeName&&!b.orig&&(b.orig=t(h).children("img:first").length?t(h).children("img:first"):t(h)),""===o&&b.orig&&b.titleFromAlt&&(o=b.orig.attr("alt")),n=b.href||(h.nodeName?t(h).attr("href"):h.href)||null,(/^(?:javascript)/i.test(n)||"#"==n)&&(n=null),b.type?(a=b.type,n||(n=b.content)):b.content?a="html":n&&(a=n.match(I)?"image":n.match(C)?"swf":t(h).hasClass("iframe")?"iframe":0===n.indexOf("#")?"inline":"ajax"),!a)return void F();switch("inline"==a&&(h=n.substr(n.indexOf("#")),a=t(h).length>0?"inline":"ajax"),b.type=a,b.href=n,b.title=o,b.autoDimensions&&("html"==b.type||"inline"==b.type||"ajax"==b.type?(b.width="auto",b.height="auto"):b.autoDimensions=!1),b.modal&&(b.overlayShow=!0,b.hideOnOverlayClick=!1,b.hideOnContentClick=!1,b.enableEscapeButton=!1,b.showCloseButton=!1),b.padding=parseInt(b.padding,10),b.margin=parseInt(b.margin,10),e.css("padding",b.padding+b.margin),t(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){t(this).replaceWith(d.children())}),a){case"html":e.html(b.content),N();break;case"inline":if(t(h).parent().is("#fancybox-content")===!0)return void(T=!1);t('<div class="fancybox-inline-tmp" />').hide().insertBefore(t(h)).bind("fancybox-cleanup",function(){t(this).replaceWith(d.children())}).bind("fancybox-cancel",function(){t(this).replaceWith(e.children())}),t(h).appendTo(e),N();break;case"image":T=!1,t.fancybox.showActivity(),m=new Image,m.onerror=function(){F()},m.onload=function(){T=!0,m.onerror=m.onload=null,B()},m.src=n;break;case"swf":b.scrolling="no",c='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+b.width+'" height="'+b.height+'"><param name="movie" value="'+n+'"></param>',r="",t.each(b.swf,function(t,e){c+='<param name="'+t+'" value="'+e+'"></param>',r+=" "+t+'="'+e+'"'}),c+='<embed src="'+n+'" type="application/x-shockwave-flash" width="'+b.width+'" height="'+b.height+'"'+r+"></embed></object>",e.html(c),N();break;case"ajax":T=!1,t.fancybox.showActivity(),b.ajax.win=b.ajax.success,x=t.ajax(t.extend({},b.ajax,{url:n,data:b.ajax.data||{},error:function(t,e,i){t.status>0&&F()},success:function(t,a,o){var d="object"==typeof o?o:x;if(200==d.status){if("function"==typeof b.ajax.win){if(s=b.ajax.win(n,t,a,o),s===!1)return void i.hide();"string"!=typeof s&&"object"!=typeof s||(t=s)}e.html(t),N()}}}));break;case"iframe":P()}},N=function(){var i=b.width,n=b.height;i=i.toString().indexOf("%")>-1?parseInt((t(window).width()-2*b.margin)*parseFloat(i)/100,10)+"px":"auto"==i?"auto":i+"px",n=n.toString().indexOf("%")>-1?parseInt((t(window).height()-2*b.margin)*parseFloat(n)/100,10)+"px":"auto"==n?"auto":n+"px",e.wrapInner('<div style="width:'+i+";height:"+n+";overflow: "+("auto"==b.scrolling?"auto":"yes"==b.scrolling?"scroll":"hidden")+';position:relative;"></div>'),b.width=e.width(),b.height=e.height(),P()},B=function(){b.width=m.width,b.height=m.height,t("<img />").attr({id:"fancybox-img",src:m.src,alt:b.title}).appendTo(e),P()},P=function(){var o,l;return i.hide(),a.is(":visible")&&!1===w.onCleanup(v,y,w)?(t.event.trigger("fancybox-cancel"),void(T=!1)):(T=!0,t(d.add(n)).unbind(),t(window).unbind("resize.fb scroll.fb"),t(document).unbind("keydown.fb"),a.is(":visible")&&"outside"!==w.titlePosition&&a.css("height",a.height()),v=u,y=g,w=b,w.overlayShow?(n.css({"background-color":w.overlayColor,opacity:w.overlayOpacity,cursor:w.hideOnOverlayClick?"pointer":"auto",height:t(document).height()}),n.is(":visible")||(A&&t("select:not(#fancybox-tmp select)").filter(function(){return"hidden"!==this.style.visibility}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"}),n.show())):n.hide(),p=q(),M(),a.is(":visible")?(t(c.add(s).add(h)).hide(),o=a.position(),f={top:o.top,left:o.left,width:a.width(),height:a.height()},l=f.width==p.width&&f.height==p.height,void d.fadeTo(w.changeFade,.3,function(){var i=function(){d.html(e.contents()).fadeTo(w.changeFade,1,H)};t.event.trigger("fancybox-change"),d.empty().removeAttr("filter").css({"border-width":w.padding,width:p.width-2*w.padding,height:b.autoDimensions?"auto":p.height-O-2*w.padding}),l?i():(S.prop=0,t(S).animate({prop:1},{duration:w.changeSpeed,easing:w.easingChange,step:K,complete:i}))})):(a.removeAttr("style"),d.css("border-width",w.padding),"elastic"==w.transitionIn?(f=X(),d.html(e.contents()),a.show(),w.opacity&&(p.opacity=0),S.prop=0,void t(S).animate({prop:1},{duration:w.speedIn,easing:w.easingIn,step:K,complete:H})):("inside"==w.titlePosition&&O>0&&r.show(),d.css({width:p.width-2*w.padding,height:b.autoDimensions?"auto":p.height-O-2*w.padding}).html(e.contents()),void a.css(p).fadeIn("none"==w.transitionIn?0:w.speedIn,H))))},L=function(t){return!(!t||!t.length)&&("float"==w.titlePosition?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+t+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+w.titlePosition+'">'+t+"</div>")},M=function(){if(j=w.title||"",O=0,r.empty().removeAttr("style").removeClass(),w.titleShow===!1)return void r.hide();if(j=t.isFunction(w.titleFormat)?w.titleFormat(j,v,y,w):L(j),!j||""===j)return void r.hide();switch(r.addClass("fancybox-title-"+w.titlePosition).html(j).appendTo("body").show(),w.titlePosition){case"inside":r.css({width:p.width-2*w.padding,marginLeft:w.padding,marginRight:w.padding}),O=r.outerHeight(!0),r.appendTo(o),p.height+=O;break;case"over":r.css({marginLeft:w.padding,width:p.width-2*w.padding,bottom:w.padding}).appendTo(o);break;case"float":r.css("left",parseInt((r.width()-p.width-40)/2,10)*-1).appendTo(a);break;default:r.css({width:p.width-2*w.padding,paddingLeft:w.padding,paddingRight:w.padding}).appendTo(a)}r.hide()},z=function(){return(w.enableEscapeButton||w.enableKeyboardNav)&&t(document).bind("keydown.fb",function(e){27==e.keyCode&&w.enableEscapeButton?(e.preventDefault(),t.fancybox.close()):37!=e.keyCode&&39!=e.keyCode||!w.enableKeyboardNav||"INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName||"SELECT"===e.target.tagName||(e.preventDefault(),t.fancybox[37==e.keyCode?"prev":"next"]())}),w.showNavArrows?((w.cyclic&&v.length>1||0!==y)&&s.show(),void((w.cyclic&&v.length>1||y!=v.length-1)&&h.show())):(s.hide(),void h.hide())},H=function(){t.support.opacity||(d.get(0).style.removeAttribute("filter"),a.get(0).style.removeAttribute("filter")),b.autoDimensions&&d.css("height","auto"),a.css("height","auto"),j&&j.length&&r.show(),w.showCloseButton&&c.show(),z(),w.hideOnContentClick&&d.bind("click",t.fancybox.close),w.hideOnOverlayClick&&n.bind("click",t.fancybox.close),t(window).bind("resize.fb",t.fancybox.resize),w.centerOnScroll&&t(window).bind("scroll.fb",t.fancybox.center),"iframe"==w.type&&t('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(t.browser.msie?'allowtransparency="true""':"")+' scrolling="'+b.scrolling+'" src="'+w.href+'"></iframe>').appendTo(d),a.show(),T=!1,t.fancybox.center(),w.onComplete(v,y,w),R()},R=function(){var t,e;v.length-1>y&&(t=v[y+1].href,"undefined"!=typeof t&&t.match(I)&&(e=new Image,e.src=t)),y>0&&(t=v[y-1].href,"undefined"!=typeof t&&t.match(I)&&(e=new Image,e.src=t))},K=function(t){var e={width:parseInt(f.width+(p.width-f.width)*t,10),height:parseInt(f.height+(p.height-f.height)*t,10),top:parseInt(f.top+(p.top-f.top)*t,10),left:parseInt(f.left+(p.left-f.left)*t,10)};"undefined"!=typeof p.opacity&&(e.opacity=t<.5?.5:t),a.css(e),d.css({width:e.width-2*w.padding,height:e.height-O*t-2*w.padding})},W=function(){return[t(window).width()-2*w.margin,t(window).height()-2*w.margin,t(document).scrollLeft()+w.margin,t(document).scrollTop()+w.margin]},q=function(){var t,e=W(),i={},n=w.autoScale,a=2*w.padding;return w.width.toString().indexOf("%")>-1?i.width=parseInt(e[0]*parseFloat(w.width)/100,10):i.width=w.width+a,w.height.toString().indexOf("%")>-1?i.height=parseInt(e[1]*parseFloat(w.height)/100,10):i.height=w.height+a,n&&(i.width>e[0]||i.height>e[1])&&("image"==b.type||"swf"==b.type?(t=w.width/w.height,i.width>e[0]&&(i.width=e[0],i.height=parseInt((i.width-a)/t+a,10)),i.height>e[1]&&(i.height=e[1],i.width=parseInt((i.height-a)*t+a,10))):(i.width=Math.min(i.width,e[0]),i.height=Math.min(i.height,e[1]))),i.top=parseInt(Math.max(e[3]-20,e[3]+.5*(e[1]-i.height-40)),10),i.left=parseInt(Math.max(e[2]-20,e[2]+.5*(e[0]-i.width-40)),10),i},Q=function(t){var e=t.offset();return e.top+=parseInt(t.css("paddingTop"),10)||0,e.left+=parseInt(t.css("paddingLeft"),10)||0,e.top+=parseInt(t.css("border-top-width"),10)||0,e.left+=parseInt(t.css("border-left-width"),10)||0,e.width=t.width(),e.height=t.height(),e},X=function(){var e,i,n=!!b.orig&&t(b.orig),a={};return n&&n.length?(e=Q(n),a={width:e.width+2*w.padding,height:e.height+2*w.padding,top:e.top-w.padding-20,left:e.left-w.padding-20}):(i=W(),a={width:2*w.padding,height:2*w.padding,top:parseInt(i[3]+.5*i[1],10),left:parseInt(i[2]+.5*i[0],10)}),a},$=function(){return i.is(":visible")?(t("div",i).css("top",k*-40+"px"),void(k=(k+1)%12)):void clearInterval(l)};t.fn.fancybox=function(e){return t(this).length?(t(this).data("fancybox",t.extend({},e,t.metadata?t(this).metadata():{})).unbind("click.fb").bind("click.fb",function(e){if(e.preventDefault(),!T){T=!0,t(this).blur(),u=[],g=0;var i=t(this).attr("rel")||"";i&&""!=i&&"nofollow"!==i?(u=t("a[rel="+i+"], area[rel="+i+"]"),g=u.index(this)):u.push(this),E()}}),this):this},t.fancybox=function(e){var i;if(!T){if(T=!0,i="undefined"!=typeof arguments[1]?arguments[1]:{},u=[],g=parseInt(i.index,10)||0,t.isArray(e)){for(var n=0,a=e.length;n<a;n++)"object"==typeof e[n]?t(e[n]).data("fancybox",t.extend({},i,e[n])):e[n]=t({}).data("fancybox",t.extend({content:e[n]},i));u=jQuery.merge(u,e)}else"object"==typeof e?t(e).data("fancybox",t.extend({},i,e)):e=t({}).data("fancybox",t.extend({content:e},i)),u.push(e);(g>u.length||g<0)&&(g=0),E()}},t.fancybox.showActivity=function(){clearInterval(l),i.show(),l=setInterval($,66)},t.fancybox.hideActivity=function(){i.hide()},t.fancybox.next=function(){return t.fancybox.pos(y+1)},t.fancybox.prev=function(){return t.fancybox.pos(y-1)},t.fancybox.pos=function(t){T||(t=parseInt(t),u=v,t>-1&&t<v.length?(g=t,E()):w.cyclic&&v.length>1&&(g=t>=v.length?0:v.length-1,E()))},t.fancybox.cancel=function(){T||(T=!0,t.event.trigger("fancybox-cancel"),D(),b.onCancel(u,g,b),T=!1)},t.fancybox.close=function(){function e(){n.fadeOut("fast"),r.empty().hide(),a.hide(),t.event.trigger("fancybox-cleanup"),d.empty(),w.onClosed(v,y,w),v=b=[],y=g=0,w=b={},T=!1}if(!T&&!a.is(":hidden")){if(T=!0,w&&!1===w.onCleanup(v,y,w))return void(T=!1);if(D(),t(c.add(s).add(h)).hide(),t(d.add(n)).unbind(),t(window).unbind("resize.fb scroll.fb"),t(document).unbind("keydown.fb"),d.find("iframe").attr("src",A&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank"),"inside"!==w.titlePosition&&r.empty(),a.stop(),"elastic"==w.transitionOut){f=X();var i=a.position();p={top:i.top,left:i.left,width:a.width(),height:a.height()},w.opacity&&(p.opacity=1),r.empty().hide(),S.prop=1,t(S).animate({prop:0},{duration:w.speedOut,easing:w.easingOut,step:K,complete:e})}else a.fadeOut("none"==w.transitionOut?0:w.speedOut,e)}},t.fancybox.resize=function(){n.is(":visible")&&n.css("height",t(document).height()),t.fancybox.center(!0)},t.fancybox.center=function(){var t,e;T||(e=arguments[0]===!0?1:0,t=W(),!e&&(a.width()>t[0]||a.height()>t[1])||a.stop().animate({top:parseInt(Math.max(t[3]-20,t[3]+.5*(t[1]-d.height()-40)-w.padding)),left:parseInt(Math.max(t[2]-20,t[2]+.5*(t[0]-d.width()-40)-w.padding))},"number"==typeof arguments[0]?arguments[0]:200))},t.fancybox.init=function(){t("#fancybox-wrap").length||(t("body").append(e=t('<div id="fancybox-tmp"></div>'),i=t('<div id="fancybox-loading"><div></div></div>'),n=t('<div id="fancybox-overlay"></div>'),a=t('<div id="fancybox-wrap"></div>')),o=t('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(a),o.append(d=t('<div id="fancybox-content"></div>'),c=t('<a id="fancybox-close"></a>'),r=t('<div id="fancybox-title"></div>'),s=t('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),h=t('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')),c.click(t.fancybox.close),i.click(t.fancybox.cancel),s.click(function(e){e.preventDefault(),t.fancybox.prev()}),h.click(function(e){e.preventDefault(),t.fancybox.next()}),t.fn.mousewheel&&a.bind("mousewheel.fb",function(e,i){T?e.preventDefault():0!=t(e.target).get(0).clientHeight&&t(e.target).get(0).scrollHeight!==t(e.target).get(0).clientHeight||(e.preventDefault(),t.fancybox[i>0?"prev":"next"]())}),t.support.opacity||a.addClass("fancybox-ie"),A&&(i.addClass("fancybox-ie6"),a.addClass("fancybox-ie6"),t('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(o)))},t.fn.fancybox.defaults={padding:10,margin:40,opacity:!1,modal:!1,cyclic:!1,scrolling:"auto",width:560,height:340,autoScale:!0,autoDimensions:!0,centerOnScroll:!1,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:!0,hideOnContentClick:!1,overlayShow:!0,overlayOpacity:.7,overlayColor:"#777",titleShow:!0,titlePosition:"float",titleFormat:null,titleFromAlt:!1,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:!0,showNavArrows:!0,enableEscapeButton:!0,enableKeyboardNav:!0,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}},t(document).ready(function(){t.fancybox.init()})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.pack.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.pack.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..798906438240a9e8e14b05153b2b901a68baed35
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.pack.min.js
@@ -0,0 +1 @@
+!function(t){var e,i,n,a,o,d,c,s,r,h,l,f,p,g=0,b={},y=[],u=0,w={},x=[],m=null,v=new Image,I=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,C=/[^\.]\.(swf)\s*$/i,k=1,O=0,j="",T=!1,S=t.extend(t("<div/>")[0],{prop:0}),A=t.browser.msie&&t.browser.version<7&&!window.XMLHttpRequest,D=function(){i.hide(),v.onerror=v.onload=null,m&&m.abort(),e.empty()},F=function(){!1===b.onError(y,g,b)?(i.hide(),T=!1):(b.titleShow=!1,b.width="auto",b.height="auto",e.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>'),N())},E=function(){var n,a,o,c,s,r,h=y[g];if(D(),b=t.extend({},t.fn.fancybox.defaults,"undefined"==typeof t(h).data("fancybox")?b:t(h).data("fancybox")),r=b.onStart(y,g,b),r===!1)T=!1;else if("object"==typeof r&&(b=t.extend(b,r)),o=b.title||(h.nodeName?t(h).attr("title"):h.title)||"",h.nodeName&&!b.orig&&(b.orig=t(h).children("img:first").length?t(h).children("img:first"):t(h)),""===o&&b.orig&&b.titleFromAlt&&(o=b.orig.attr("alt")),n=b.href||(h.nodeName?t(h).attr("href"):h.href)||null,(/^(?:javascript)/i.test(n)||"#"==n)&&(n=null),b.type?(a=b.type,n||(n=b.content)):b.content?a="html":n&&(a=n.match(I)?"image":n.match(C)?"swf":t(h).hasClass("iframe")?"iframe":0===n.indexOf("#")?"inline":"ajax"),a)switch("inline"==a&&(h=n.substr(n.indexOf("#")),a=t(h).length>0?"inline":"ajax"),b.type=a,b.href=n,b.title=o,b.autoDimensions&&("html"==b.type||"inline"==b.type||"ajax"==b.type?(b.width="auto",b.height="auto"):b.autoDimensions=!1),b.modal&&(b.overlayShow=!0,b.hideOnOverlayClick=!1,b.hideOnContentClick=!1,b.enableEscapeButton=!1,b.showCloseButton=!1),b.padding=parseInt(b.padding,10),b.margin=parseInt(b.margin,10),e.css("padding",b.padding+b.margin),t(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){t(this).replaceWith(d.children())}),a){case"html":e.html(b.content),N();break;case"inline":if(t(h).parent().is("#fancybox-content")===!0){T=!1;break}t('<div class="fancybox-inline-tmp" />').hide().insertBefore(t(h)).bind("fancybox-cleanup",function(){t(this).replaceWith(d.children())}).bind("fancybox-cancel",function(){t(this).replaceWith(e.children())}),t(h).appendTo(e),N();break;case"image":T=!1,t.fancybox.showActivity(),v=new Image,v.onerror=function(){F()},v.onload=function(){T=!0,v.onerror=v.onload=null,b.width=v.width,b.height=v.height,t("<img />").attr({id:"fancybox-img",src:v.src,alt:b.title}).appendTo(e),B()},v.src=n;break;case"swf":b.scrolling="no",c='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+b.width+'" height="'+b.height+'"><param name="movie" value="'+n+'"></param>',s="",t.each(b.swf,function(t,e){c+='<param name="'+t+'" value="'+e+'"></param>',s+=" "+t+'="'+e+'"'}),c+='<embed src="'+n+'" type="application/x-shockwave-flash" width="'+b.width+'" height="'+b.height+'"'+s+"></embed></object>",e.html(c),N();break;case"ajax":T=!1,t.fancybox.showActivity(),b.ajax.win=b.ajax.success,m=t.ajax(t.extend({},b.ajax,{url:n,data:b.ajax.data||{},error:function(t){t.status>0&&F()},success:function(t,a,o){if(200==("object"==typeof o?o:m).status){if("function"==typeof b.ajax.win){if(r=b.ajax.win(n,t,a,o),r===!1)return void i.hide();"string"!=typeof r&&"object"!=typeof r||(t=r)}e.html(t),N()}}}));break;case"iframe":B()}else F()},N=function(){var i=b.width,n=b.height;i=i.toString().indexOf("%")>-1?parseInt((t(window).width()-2*b.margin)*parseFloat(i)/100,10)+"px":"auto"==i?"auto":i+"px",n=n.toString().indexOf("%")>-1?parseInt((t(window).height()-2*b.margin)*parseFloat(n)/100,10)+"px":"auto"==n?"auto":n+"px",e.wrapInner('<div style="width:'+i+";height:"+n+";overflow: "+("auto"==b.scrolling?"auto":"yes"==b.scrolling?"scroll":"hidden")+';position:relative;"></div>'),b.width=e.width(),b.height=e.height(),B()},B=function(){var l,m;if(i.hide(),a.is(":visible")&&!1===w.onCleanup(x,u,w))t.event.trigger("fancybox-cancel"),T=!1;else{if(T=!0,t(d.add(n)).unbind(),t(window).unbind("resize.fb scroll.fb"),t(document).unbind("keydown.fb"),a.is(":visible")&&"outside"!==w.titlePosition&&a.css("height",a.height()),x=y,u=g,w=b,w.overlayShow?(n.css({"background-color":w.overlayColor,opacity:w.overlayOpacity,cursor:w.hideOnOverlayClick?"pointer":"auto",height:t(document).height()}),n.is(":visible")||(A&&t("select:not(#fancybox-tmp select)").filter(function(){return"hidden"!==this.style.visibility}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"}),n.show())):n.hide(),p=H(),j=w.title||"",O=0,s.empty().removeAttr("style").removeClass(),w.titleShow!==!1&&(l=t.isFunction(w.titleFormat)?w.titleFormat(j,x,u,w):!(!j||!j.length)&&("float"==w.titlePosition?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+j+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+w.titlePosition+'">'+j+"</div>"),j=l,j&&""!==j))switch(s.addClass("fancybox-title-"+w.titlePosition).html(j).appendTo("body").show(),w.titlePosition){case"inside":s.css({width:p.width-2*w.padding,marginLeft:w.padding,marginRight:w.padding}),O=s.outerHeight(!0),s.appendTo(o),p.height+=O;break;case"over":s.css({marginLeft:w.padding,width:p.width-2*w.padding,bottom:w.padding}).appendTo(o);break;case"float":s.css("left",parseInt((s.width()-p.width-40)/2,10)*-1).appendTo(a);break;default:s.css({width:p.width-2*w.padding,paddingLeft:w.padding,paddingRight:w.padding}).appendTo(a)}s.hide(),a.is(":visible")?(t(c.add(r).add(h)).hide(),l=a.position(),f={top:l.top,left:l.left,width:a.width(),height:a.height()},m=f.width==p.width&&f.height==p.height,d.fadeTo(w.changeFade,.3,function(){var i=function(){d.html(e.contents()).fadeTo(w.changeFade,1,L)};t.event.trigger("fancybox-change"),d.empty().removeAttr("filter").css({"border-width":w.padding,width:p.width-2*w.padding,height:b.autoDimensions?"auto":p.height-O-2*w.padding}),m?i():(S.prop=0,t(S).animate({prop:1},{duration:w.changeSpeed,easing:w.easingChange,step:M,complete:i}))})):(a.removeAttr("style"),d.css("border-width",w.padding),"elastic"==w.transitionIn?(f=R(),d.html(e.contents()),a.show(),w.opacity&&(p.opacity=0),S.prop=0,t(S).animate({prop:1},{duration:w.speedIn,easing:w.easingIn,step:M,complete:L})):("inside"==w.titlePosition&&O>0&&s.show(),d.css({width:p.width-2*w.padding,height:b.autoDimensions?"auto":p.height-O-2*w.padding}).html(e.contents()),a.css(p).fadeIn("none"==w.transitionIn?0:w.speedIn,L)))}},P=function(){(w.enableEscapeButton||w.enableKeyboardNav)&&t(document).bind("keydown.fb",function(e){27==e.keyCode&&w.enableEscapeButton?(e.preventDefault(),t.fancybox.close()):37!=e.keyCode&&39!=e.keyCode||!w.enableKeyboardNav||"INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName||"SELECT"===e.target.tagName||(e.preventDefault(),t.fancybox[37==e.keyCode?"prev":"next"]())}),w.showNavArrows?((w.cyclic&&x.length>1||0!==u)&&r.show(),(w.cyclic&&x.length>1||u!=x.length-1)&&h.show()):(r.hide(),h.hide())},L=function(){t.support.opacity||(d.get(0).style.removeAttribute("filter"),a.get(0).style.removeAttribute("filter")),b.autoDimensions&&d.css("height","auto"),a.css("height","auto"),j&&j.length&&s.show(),w.showCloseButton&&c.show(),P(),w.hideOnContentClick&&d.bind("click",t.fancybox.close),w.hideOnOverlayClick&&n.bind("click",t.fancybox.close),t(window).bind("resize.fb",t.fancybox.resize),w.centerOnScroll&&t(window).bind("scroll.fb",t.fancybox.center),"iframe"==w.type&&t('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(t.browser.msie?'allowtransparency="true""':"")+' scrolling="'+b.scrolling+'" src="'+w.href+'"></iframe>').appendTo(d),a.show(),T=!1,t.fancybox.center(),w.onComplete(x,u,w);var e,i;x.length-1>u&&(e=x[u+1].href,"undefined"!=typeof e&&e.match(I)&&(i=new Image,i.src=e)),u>0&&(e=x[u-1].href,"undefined"!=typeof e&&e.match(I)&&(i=new Image,i.src=e))},M=function(t){var e={width:parseInt(f.width+(p.width-f.width)*t,10),height:parseInt(f.height+(p.height-f.height)*t,10),top:parseInt(f.top+(p.top-f.top)*t,10),left:parseInt(f.left+(p.left-f.left)*t,10)};"undefined"!=typeof p.opacity&&(e.opacity=t<.5?.5:t),a.css(e),d.css({width:e.width-2*w.padding,height:e.height-O*t-2*w.padding})},z=function(){return[t(window).width()-2*w.margin,t(window).height()-2*w.margin,t(document).scrollLeft()+w.margin,t(document).scrollTop()+w.margin]},H=function(){var t=z(),e={},i=w.autoScale,n=2*w.padding;return e.width=w.width.toString().indexOf("%")>-1?parseInt(t[0]*parseFloat(w.width)/100,10):w.width+n,e.height=w.height.toString().indexOf("%")>-1?parseInt(t[1]*parseFloat(w.height)/100,10):w.height+n,i&&(e.width>t[0]||e.height>t[1])&&("image"==b.type||"swf"==b.type?(i=w.width/w.height,e.width>t[0]&&(e.width=t[0],e.height=parseInt((e.width-n)/i+n,10)),e.height>t[1]&&(e.height=t[1],e.width=parseInt((e.height-n)*i+n,10))):(e.width=Math.min(e.width,t[0]),e.height=Math.min(e.height,t[1]))),e.top=parseInt(Math.max(t[3]-20,t[3]+.5*(t[1]-e.height-40)),10),e.left=parseInt(Math.max(t[2]-20,t[2]+.5*(t[0]-e.width-40)),10),e},R=function(){var e=!!b.orig&&t(b.orig),i={};return e&&e.length?(i=e.offset(),i.top+=parseInt(e.css("paddingTop"),10)||0,i.left+=parseInt(e.css("paddingLeft"),10)||0,i.top+=parseInt(e.css("border-top-width"),10)||0,i.left+=parseInt(e.css("border-left-width"),10)||0,i.width=e.width(),i.height=e.height(),i={width:i.width+2*w.padding,height:i.height+2*w.padding,top:i.top-w.padding-20,left:i.left-w.padding-20}):(e=z(),i={width:2*w.padding,height:2*w.padding,top:parseInt(e[3]+.5*e[1],10),left:parseInt(e[2]+.5*e[0],10)}),i},K=function(){i.is(":visible")?(t("div",i).css("top",k*-40+"px"),k=(k+1)%12):clearInterval(l)};t.fn.fancybox=function(e){return t(this).length?(t(this).data("fancybox",t.extend({},e,t.metadata?t(this).metadata():{})).unbind("click.fb").bind("click.fb",function(e){e.preventDefault(),T||(T=!0,t(this).blur(),y=[],g=0,e=t(this).attr("rel")||"",e&&""!=e&&"nofollow"!==e?(y=t("a[rel="+e+"], area[rel="+e+"]"),g=y.index(this)):y.push(this),E())}),this):this},t.fancybox=function(e,i){var n;if(!T){if(T=!0,n="undefined"!=typeof i?i:{},y=[],g=parseInt(n.index,10)||0,t.isArray(e)){for(var a=0,o=e.length;a<o;a++)"object"==typeof e[a]?t(e[a]).data("fancybox",t.extend({},n,e[a])):e[a]=t({}).data("fancybox",t.extend({content:e[a]},n));y=jQuery.merge(y,e)}else"object"==typeof e?t(e).data("fancybox",t.extend({},n,e)):e=t({}).data("fancybox",t.extend({content:e},n)),y.push(e);(g>y.length||g<0)&&(g=0),E()}},t.fancybox.showActivity=function(){clearInterval(l),i.show(),l=setInterval(K,66)},t.fancybox.hideActivity=function(){i.hide()},t.fancybox.next=function(){return t.fancybox.pos(u+1)},t.fancybox.prev=function(){return t.fancybox.pos(u-1)},t.fancybox.pos=function(t){T||(t=parseInt(t),y=x,t>-1&&t<x.length?(g=t,E()):w.cyclic&&x.length>1&&(g=t>=x.length?0:x.length-1,E()))},t.fancybox.cancel=function(){T||(T=!0,t.event.trigger("fancybox-cancel"),D(),b.onCancel(y,g,b),T=!1)},t.fancybox.close=function(){function e(){n.fadeOut("fast"),s.empty().hide(),a.hide(),t.event.trigger("fancybox-cleanup"),d.empty(),w.onClosed(x,u,w),x=b=[],u=g=0,w=b={},T=!1}if(!T&&!a.is(":hidden"))if(T=!0,w&&!1===w.onCleanup(x,u,w))T=!1;else if(D(),t(c.add(r).add(h)).hide(),t(d.add(n)).unbind(),t(window).unbind("resize.fb scroll.fb"),t(document).unbind("keydown.fb"),d.find("iframe").attr("src",A&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank"),"inside"!==w.titlePosition&&s.empty(),a.stop(),"elastic"==w.transitionOut){f=R();var i=a.position();p={top:i.top,left:i.left,width:a.width(),height:a.height()},w.opacity&&(p.opacity=1),s.empty().hide(),S.prop=1,t(S).animate({prop:0},{duration:w.speedOut,easing:w.easingOut,step:M,complete:e})}else a.fadeOut("none"==w.transitionOut?0:w.speedOut,e)},t.fancybox.resize=function(){n.is(":visible")&&n.css("height",t(document).height()),t.fancybox.center(!0)},t.fancybox.center=function(t){var e,i;T||(i=t===!0?1:0,e=z(),!i&&(a.width()>e[0]||a.height()>e[1])||a.stop().animate({top:parseInt(Math.max(e[3]-20,e[3]+.5*(e[1]-d.height()-40)-w.padding)),left:parseInt(Math.max(e[2]-20,e[2]+.5*(e[0]-d.width()-40)-w.padding))},"number"==typeof t?t:200))},t.fancybox.init=function(){t("#fancybox-wrap").length||(t("body").append(e=t('<div id="fancybox-tmp"></div>'),i=t('<div id="fancybox-loading"><div></div></div>'),n=t('<div id="fancybox-overlay"></div>'),a=t('<div id="fancybox-wrap"></div>')),o=t('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(a),o.append(d=t('<div id="fancybox-content"></div>'),c=t('<a id="fancybox-close"></a>'),s=t('<div id="fancybox-title"></div>'),r=t('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),h=t('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')),c.click(t.fancybox.close),i.click(t.fancybox.cancel),r.click(function(e){e.preventDefault(),t.fancybox.prev()}),h.click(function(e){e.preventDefault(),t.fancybox.next()}),t.fn.mousewheel&&a.bind("mousewheel.fb",function(e,i){T?e.preventDefault():0!=t(e.target).get(0).clientHeight&&t(e.target).get(0).scrollHeight!==t(e.target).get(0).clientHeight||(e.preventDefault(),t.fancybox[i>0?"prev":"next"]())}),t.support.opacity||a.addClass("fancybox-ie"),A&&(i.addClass("fancybox-ie6"),a.addClass("fancybox-ie6"),t('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(o)))},t.fn.fancybox.defaults={padding:10,margin:40,opacity:!1,modal:!1,cyclic:!1,scrolling:"auto",width:560,height:340,autoScale:!0,autoDimensions:!0,centerOnScroll:!1,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:!0,hideOnContentClick:!1,overlayShow:!0,overlayOpacity:.7,overlayColor:"#777",titleShow:!0,titlePosition:"float",titleFormat:null,titleFromAlt:!1,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:!0,showNavArrows:!0,enableEscapeButton:!0,enableKeyboardNav:!0,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}},t(document).ready(function(){t.fancybox.init()})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.mousewheel-3.0.4.pack.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.mousewheel-3.0.4.pack.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..5169d3b2285485074bbcb1b1536a3f31623a5e69
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.mousewheel-3.0.4.pack.min.js
@@ -0,0 +1 @@
+!function(e){function t(t){var n=t||window.event,l=[].slice.call(arguments,1),i=0,s=0,h=0;return t=e.event.fix(n),t.type="mousewheel",t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),h=i,void 0!==n.axis&&n.axis===n.HORIZONTAL_AXIS&&(h=0,s=-1*i),void 0!==n.wheelDeltaY&&(h=n.wheelDeltaY/120),void 0!==n.wheelDeltaX&&(s=-1*n.wheelDeltaX/120),l.unshift(t,i,s,h),e.event.handle.apply(this,l)}var n=["DOMMouseScroll","mousewheel"];e.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var e=n.length;e;)this.addEventListener(n[--e],t,!1);else this.onmousewheel=t},teardown:function(){if(this.removeEventListener)for(var e=n.length;e;)this.removeEventListener(n[--e],t,!1);else this.onmousewheel=null}},e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.min.js
index 829781f59a378e0fb43e9d505b9062b7aa1f51bc..59b18e926a9819b33ce0909c1b642770779be8e7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('8(0($){3 1=0(){3 4=7($,$(".a-2"));4.2({5:\'6\',9:0(){$(\'#2-h\').f(\'e-c\',d)}})};$(i).g(\'b\',1);1()});',19,19,'function|nextgen_fancybox_init|fancybox|var|selector|titlePosition|inside|nextgen_lightbox_filter_selector|jQuery|onComplete|ngg|refreshed|index|10000|z|css|bind|wrap|this'.split('|'),0,{}))
+jQuery(function(n){var e=function(){var e=nextgen_lightbox_filter_selector(n,n(".ngg-fancybox"));e.fancybox({titlePosition:"inside",onComplete:function(){n("#fancybox-wrap").css("z-index",1e4)}})};n(this).bind("refreshed",e),e()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.min.js
index 29778522612d97f74ff04335c6532d2aafedbb61..011bd6d295640ddce9d425cda4cdd1f2613b78b1 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('h l($,0){5(d&&d.2){7 2=d.2;5(2==\'p\'){0=0.b($(\'a > 8\').c())}f 5(2==\'o\'){0=0.b($(\'a[1] > 8\').c().q(h(){7 1=$(n).m(\'1\').k();7 6=1.g(1.i-3);7 9=1.g(1.i-4);j(6==\'y\'||6==\'z\'||6==\'A\'||9==\'r\'||9==\'B\')}))}f 5(2==\'x\'){0=0.b($(\'a > 8[w*="s-t-"]\').c())}0=0.e(\'.u\');0=0.e(\'.v\')}j 0}',38,38,'selector|href|context|||if|ext|var|img|ext2||add|parent|nextgen_lightbox_settings|not|else|substring|function|length|return|toLowerCase|nextgen_lightbox_filter_selector|attr|this|all_images_direct|all_images|filter|tiff|wp|image|gallery_link|use_imagebrowser_effect|class|nextgen_and_wp_images|jpg|gif|png|jpeg'.split('|'),0,{}))
+function nextgen_lightbox_filter_selector(e,t){if(nextgen_lightbox_settings&&nextgen_lightbox_settings.context){var n=nextgen_lightbox_settings.context;"all_images"==n?t=t.add(e("a > img").parent()):"all_images_direct"==n?t=t.add(e("a[href] > img").parent().filter(function(){var t=e(this).attr("href").toLowerCase(),n=t.substring(t.length-3),g=t.substring(t.length-4);return"jpg"==n||"gif"==n||"png"==n||"tiff"==g||"jpeg"==g})):"nextgen_and_wp_images"==n&&(t=t.add(e('a > img[class*="wp-image-"]').parent())),t=t.not(".gallery_link"),t=t.not(".use_imagebrowser_effect")}return t}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.min.js
index e3d6f9059d9d6188d25b94a1c88ffcbda294a826..196210d89be4937fa72385c4a056257906fa8baf 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('c(a($){0 3=a(){0 7=g($,$([]));7.e(\'f\');1.d={b:9,5:4.5,6:4.6};r.o()};$(p).h(\'q\',3);0 2=\'n\';m(i($(1).8(2))==\'j\'){$(1).8(2,9)}k{l}3()});',28,28,'var|window|flag|callback|nextgen_shutter_i18n|msgLoading|msgClose|selector|data|true|function|imageCount|jQuery|shutterSettings|addClass|shutterset|nextgen_lightbox_filter_selector|bind|typeof|undefined|else|return|if|shutter|init|this|refreshed|shutterReloaded'.split('|'),0,{}))
+jQuery(function(e){var t=function(){var t=nextgen_lightbox_filter_selector(e,e([]));t.addClass("shutterset"),window.shutterSettings={imageCount:!0,msgLoading:nextgen_shutter_i18n.msgLoading,msgClose:nextgen_shutter_i18n.msgClose},shutterReloaded.init()};e(this).bind("refreshed",t);var n="shutter";"undefined"==typeof e(window).data(n)&&(e(window).data(n,!0),t())});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.css
index 310144a149c814cbcda8c7e5921f46ff53cb5223..d2f8a4c76be63df5f555295ea242d50cf903deaa 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.css
@@ -1 +1 @@
-#shDisplay div#shTitle{font:normal 12px/17px 'Lucida Grande',Verdana,sans-serif;color:#fff;text-align:center;margin:0 auto}#shDisplay div#shCount{color:#999;font:normal 10px/12px 'Lucida Grande',Verdana,sans-serif}#shDisplay div#shTitle a{text-decoration:none;font:bold 16pt 'Courier New',Courier,fixed;letter-spacing:-2px;margin:0 10px;width:26px;color:#999}#shDisplay div#shTitle a:hover{color:#fff;border:0}#shDisplay div#shNext{float:right}#shDisplay div#shPrev{float:left}body{height:100%}#shShutter *,#shDisplay *{padding:0;margin:0}div#shShutter,div#shDisplay{top:0;left:0;width:100%;position:absolute}div#shShutter{height:100%;z-index:10000;background-color:#000;opacity:.8;filter:alpha(opacity=80)}div#shDisplay{display:block;background-color:transparent;z-index:10002}div#shDisplay img#shTopImg{margin:0 auto;border:1px solid #555;background:transparent;display:block;max-width:none;max-height:none;float:none;padding:2px;cursor:pointer}div#shDisplay div#shWrap{visibility:hidden}div#shWaitBar{font:bold 32px 'Lucida Grande','Lucida Sans Unicode',Verdana,sans-serif;height:36px;width:100%;left:0;cursor:default;opacity:.999;filter:alpha(opacity=100);z-index:10001;margin-top:160px;color:#ae0a0a;text-align:center}
\ No newline at end of file
+#shDisplay div#shTitle{font:400 12px/17px 'Lucida Grande',Verdana,sans-serif;color:#fff;text-align:center;margin:0 auto}#shDisplay div#shCount{color:#999;font:400 10px/12px 'Lucida Grande',Verdana,sans-serif}#shDisplay div#shTitle a{text-decoration:none;font:700 16pt 'Courier New',Courier,fixed;letter-spacing:-2px;margin:0 10px;width:26px;color:#999}#shDisplay div#shTitle a:hover{color:#fff;border:none}#shDisplay div#shNext{float:right}#shDisplay div#shPrev{float:left}body{height:100%}#shDisplay *,#shShutter *{padding:0;margin:0}div#shDisplay,div#shShutter{top:0;left:0;width:100%;position:absolute}div#shShutter{height:100%;z-index:10000;background-color:#000;opacity:.8;filter:alpha(opacity=80)}div#shDisplay{display:block;background-color:transparent;z-index:10002}div#shDisplay img#shTopImg{margin:0 auto;border:1px solid #555;background:0 0;display:block;max-width:none;max-height:none;float:none;padding:2px;cursor:pointer}div#shDisplay div#shWrap{visibility:hidden}div#shWaitBar{font:700 32px 'Lucida Grande','Lucida Sans Unicode',Verdana,sans-serif;height:36px;width:100%;left:0;cursor:default;opacity:.999;filter:alpha(opacity=100);z-index:10001;margin-top:160px;color:#ae0a0a;text-align:center}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.js
index 527ee92a162b7d6300ad1a25a04160db1291059f..25f9ecb473c79e1ec303cfabfd74bd58ba3e5e0d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/shutter.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('l={I:c(a){q 6.w(a)},2A:c(){7 t=J,s=1J;t.2e=s.2e||0;t.1M=s.1M||\'L O A D I N G\';t.20=s.20||\'3h 3c 33\'},2x:c(a){7 t=J,L,T,11,i,m,z,1F,1O,3j,k,2B;d={},M={};5(\'32\'!=B 1J)1J={};t.2w=B 3b!=\'1a\'?1h:1D;1m(i=0;i<6.2W.R;i++){L=6.2W[i];11=(L.y.12(\'?\')==-1)?L.y.1K(-4).Z():L.y.38(0,L.y.12(\'?\')).1K(-4).Z();5(11!=\'.36\'&&11!=\'.34\'&&11!=\'.35\'&&11!=\'3n\')2l;5(a==\'2t\'&&L.1f.Z().12(\'3k\')==-1)2l;5(a==\'3d\'&&L.1U.Z().12(\'2I\')==-1)2l;5(L.1f.Z().12(\'3m\')!=-1)z=L.1f.2J(/\\s/g,\'2E\');o 5(L.1U.Z().12(\'2I[\')!=-1)z=L.1U.2J(/\\s/g,\'2E\');o z=0,1F=-1;5(z){5(!M[z])M[z]=[];1F=M[z].3a(i)}1O=L.y.1K(L.y.3f(\'/\')+1);T=(L.13&&L.13!=1O)?L.13:\'\';d[i]={1i:L.y,F:1F,1j:z,13:T};L.X=17 1q(\'l.1k("\'+i+\'");q 1D;\')}t.2A()},1k:c(b,2k){7 t=J,1E,1s,U=\'\',V=\'\',2a,24,D,S,W,3l=-1,1W,1V;5(!t.n){5(B 8.2r!=\'1a\')t.n=8.2r;o t.n=(6.v.1z>0)?6.v.1z:6.x.1z}5(8.1x){7 14=8.1x;5(B(14.1y)!=\'1a\'){7 1A=14.1y(8.2F);t.n=t.n+1A.1z}}5(B t.1d==\'1a\')t.1d=2R.3i(6.v.26,6.x.26);5(2k)t.1c=(2k>0)?1:0;o t.1c=1J.1c||0;5(t.1l)t.1l=Q;5(t.2w==1h)8.3g=17 1q(\'l.2g("\'+b+\'");\');o 8.2q=17 1q(\'l.2g("\'+b+\'");\');6.v.9.2f=\'2n\';5(!t.1v){t.2X();t.1v=1h}5(!(S=t.I(\'19\'))){S=6.1Q(\'j\');S.21(\'p\',\'19\');6.K(\'x\')[0].1S(S);t.1X()}5(!(D=t.I(\'1C\'))){D=6.1Q(\'j\');D.21(\'p\',\'1C\');D.9.28=t.n+\'C\';6.K(\'x\')[0].1S(D)}S.9.E=t.1d+\'C\';7 29=t.3x?\' | \':\'\';5(d[b].F>1){1E=M[d[b].1j][d[b].F-2];U=\'<a y="#" p="2H" X="l.1k(\'+1E+\');q 1D">&2v;&2v;</a>\'+29;2a=17 2s();2a.1r=d[1E].1i}o{U=\'\'}5(d[b].F!=-1&&d[b].F<(M[d[b].1j].R)){1s=M[d[b].1j][d[b].F];V=\'<a y="#" p="2K" X="l.1k(\'+1s+\');q 1D">&2u;&2u;</a>\'+29;24=17 2s();24.1r=d[1s].1i}o{V=\'\'}1W=((d[b].F>0)&&t.2e)?\'<j p="3B">&Y;(&Y;\'+d[b].F+\'&Y;/&Y;\'+M[d[b].1j].R+\'&Y;)&Y;</j>\':\'\';1V=\'<j p="2S"><j p="3A">\'+U+\'</j><j p="3D">\'+V+\'</j><j p="3C">\'+d[b].13+\'</j>\'+1W+\'</j>\';D.2p=\'<j p="1t"><2B 1r="\'+d[b].1i+\'" p="1B" 13="\'+t.20+\'" 1b="l.31();" X="l.2o();" />\'+1V+\'</j>\';6.2C=c(2i){l.2M(2i)};6.w(\'1B\').1r=d[b].1i;8.2c(c(){l.2z()},3E)},2z:c(){7 t=J,S,r,W;5((W=t.I(\'1t\'))&&W.9.H==\'1I\')q;5(!(S=t.I(\'19\')))q;5(t.I(\'1T\'))q;r=6.1Q(\'j\');r.21(\'p\',\'1T\');r.9.28=t.n+\'C\';r.9.3y=(t.1d/2)+\'C\';r.2p=t.1M;S.1S(r)},2o:c(){7 t=J,D,S;5(D=t.I(\'1C\'))D.1N.1L(D);5(S=t.I(\'19\'))S.1N.1L(S);t.1X(1h);8.25(0,t.n);8.2q=t.1c=t.n=t.1v=Q;6.v.9.2f=\'\';6.2C=Q},2g:c(b){7 t=J;5(t.1l)q;5(!t.I(\'19\'))q;7 W=t.I(\'1t\');5(W)W.9.H=\'2n\';8.2c(c(){l.1l=Q},3o);8.2c(17 1q(\'l.1v = Q;l.1k("\'+b+\'");\'),3z);t.1l=1h},2X:c(){7 t=J;7 1n=8.2U?8.2U:0;7 1g=6.x.1P?6.x.1P:0;7 15=6.v?6.v.1P:0;5(1n>0){t.u=((1n-1g)>1&&(1n-1g)<30)?1g:1n;t.u=((t.u-15)>1&&(t.u-15)<30)?15:t.u}o t.u=(15>0)?15:1g;5(6.K("x")[0].1f.2Q(/2P-2N/)&&6.w(\'1G\')!==Q){t.u=t.u-6.w(\'1G\').2O}7 1Y=6.v?6.v.2Y:0;7 2Z=8.2V?8.2V:6.x.2Y;t.18=(1Y>1)?1Y:2Z},31:c(){7 t=J,S=t.I(\'19\'),D=t.I(\'1C\'),f=t.I(\'1B\'),T=t.I(\'2S\'),3t=t.I(\'3u\'),W,r,u,18,P,1u,1H,1p,2m=0;5(!S)q;5((W=t.I(\'1t\'))&&W.9.H==\'1I\')q;5(r=t.I(\'1T\'))r.1N.1L(r);S.9.h=D.9.h=\'\';T.9.h=(f.h-4)+\'C\';P=t.u-2G;5(8.1x){7 14=8.1x;5(B(14.1y)!=\'1a\'){7 1A=14.1y(8.2F);P=1A.26-2G}}5(t.1c){5(f.h>(t.18-10))S.9.h=D.9.h=f.h+10+\'C\';6.v.9.2f=\'\'}o{8.25(0,t.n);5(f.E>P){f.h=f.h*(P/f.E);f.E=P;2m=1}5(f.h>(t.18-16)){f.E=f.E*((t.18-16)/f.h);f.h=t.18-16;2m=1}T.9.h=(f.h-4)+\'C\'}1u=t.n+f.E+10;5(1u>t.1d)S.9.E=1u+\'C\';8.25(0,t.n);1H=(P-f.E)*0.3v;1p=(1H>3)?2R.3w(1H):3;5(6.K("x")[0].1f.2Q(/2P-2N/)&&6.w(\'1G\')!==Q){1p=1p+6.w(\'1G\').2O}D.9.28=t.n+1p+\'C\';W.9.H=\'1I\'},1X:c(2y){7 22=6.K(\'3q\');7 2j=6.K(\'32\');7 23=6.K(\'3r\');7 2b=6.K(\'3s\');7 1e=(2y)?\'1I\':\'2n\';1m(i=0;i<22.R;i++)22[i].9.H=1e;1m(i=0;i<2j.R;i++)2j[i].9.H=1e;1m(i=0;i<23.R;i++)23[i].9.H=1e;1m(i=0;i<2b.R;i++)2b[i].9.H=1e},2M:c(e){7 1w=0;5(!e)7 e=8.2i;5(e.2L)1w=e.2L;o 5(e.2T)1w=e.2T;7 V=6.w(\'2H\');7 U=6.w(\'2K\');7 1Z=6.w(\'1B\');3p(1w){1R 39:5(U)U.X();2h;1R 37:5(V)V.X();2h;1R 27:5(1Z)1Z.X();2h}}};1o=c(){l.2x(\'2t\')};5(B 1o==\'c\'){5(\'1a\'!=B 2D)2D(6).3e(c(){1o()});o 5(B 8.1b!=\'c\')8.1b=1o;o{2d=8.1b;8.1b=c(){5(2d){2d()};1o()}}}',62,227,'|||||if|document|var|window|style||ln|function|shutterLinks||TI||width||div||shutterReloaded||Top|else|id|return|WB|||wHeight|documentElement|getElementById|body|href|setid||typeof|px||height|num||visibility||this|getElementsByTagName||shutterSets|||shHeight|null|length|||prevlink|nextlink||onclick|nbsp|toLowerCase||ext|indexOf|title|container|deH||new|wWidth|shShutter|undefined|onload|FS|pgHeight|vis|className|dbH|true|link|set|make|resizing|for|wiH|shutterOnload|mtop|Function|src|next|shWrap|maxHeight|VP|code|parent|ngg_get_measures_for_frame|scrollTop|measures|shTopImg|shDisplay|false|prev|inset|wpadminbar|itop|visible|shutterSettings|slice|removeChild|msgLoading|parentNode|shfile|clientHeight|createElement|case|appendChild|shWaitBar|rel|NavBar|imgNum|hideTags|deW|closelink|msgClose|setAttribute|sel|emb|nextimg|scrollTo|scrollHeight||top|dv|previmg|ifr|setTimeout|oldonld|imageCount|overflowX|resize|break|event|obj|fs|continue|resized|hidden|hideShutter|innerHTML|onresize|pageYOffset|Image|sh|gt|lt|mobileOS|init|arg|loading|settings|img|onkeydown|jQuery|_|frameElement|50|prevpic|lightbox|replace|nextpic|keyCode|handleArrowKeys|bar|offsetHeight|admin|match|Math|shTitle|which|innerHeight|innerWidth|links|_viewPort|clientWidth|dbW||showImg|object|Close|png|gif|jpg||substring||push|orientation|to|lb|ready|lastIndexOf|onorientationchange|Click|max|shMenuPre|shutter|fsarg|shutterset|jpeg|500|switch|select|embed|iframe|NB|shNavBar|45|floor|textBtns|marginTop|100|shPrev|shCount|shName|shNext|1000'.split('|'),0,{}))
+shutterReloaded={I:function(e){return document.getElementById(e)},settings:function(){var e=this,t=shutterSettings;e.imageCount=t.imageCount||0,e.msgLoading=t.msgLoading||"L O A D I N G",e.msgClose=t.msgClose||"Click to Close"},init:function(e){var t,i,n,s,o,d,l,h=this;for(shutterLinks={},shutterSets={},"object"!=typeof shutterSettings&&(shutterSettings={}),h.mobileOS="undefined"!=typeof orientation,s=0;s<document.links.length;s++)t=document.links[s],n=t.href.indexOf("?")==-1?t.href.slice(-4).toLowerCase():t.href.substring(0,t.href.indexOf("?")).slice(-4).toLowerCase(),".jpg"!=n&&".png"!=n&&".gif"!=n&&"jpeg"!=n||"sh"==e&&t.className.toLowerCase().indexOf("shutter")==-1||"lb"==e&&t.rel.toLowerCase().indexOf("lightbox")==-1||(t.className.toLowerCase().indexOf("shutterset")!=-1?o=t.className.replace(/\s/g,"_"):t.rel.toLowerCase().indexOf("lightbox[")!=-1?o=t.rel.replace(/\s/g,"_"):(o=0,d=-1),o&&(shutterSets[o]||(shutterSets[o]=[]),d=shutterSets[o].push(s)),l=t.href.slice(t.href.lastIndexOf("/")+1),i=t.title&&t.title!=l?t.title:"",shutterLinks[s]={link:t.href,num:d,set:o,title:i},t.onclick=new Function('shutterReloaded.make("'+s+'");return false;'));h.settings()},make:function(e,t){var i,n,s,o,d,l,h,r,a=this,u="",m="";if(a.Top||("undefined"!=typeof window.pageYOffset?a.Top=window.pageYOffset:a.Top=document.documentElement.scrollTop>0?document.documentElement.scrollTop:document.body.scrollTop),window.parent){var c=window.parent;if("undefined"!=typeof c.ngg_get_measures_for_frame){var g=c.ngg_get_measures_for_frame(window.frameElement);a.Top=a.Top+g.scrollTop}}"undefined"==typeof a.pgHeight&&(a.pgHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight)),t?a.FS=t>0?1:0:a.FS=shutterSettings.FS||0,a.resizing&&(a.resizing=null),1==a.mobileOS?window.onorientationchange=new Function('shutterReloaded.resize("'+e+'");'):window.onresize=new Function('shutterReloaded.resize("'+e+'");'),document.documentElement.style.overflowX="hidden",a.VP||(a._viewPort(),a.VP=!0),(l=a.I("shShutter"))||(l=document.createElement("div"),l.setAttribute("id","shShutter"),document.getElementsByTagName("body")[0].appendChild(l),a.hideTags()),(d=a.I("shDisplay"))||(d=document.createElement("div"),d.setAttribute("id","shDisplay"),d.style.top=a.Top+"px",document.getElementsByTagName("body")[0].appendChild(d)),l.style.height=a.pgHeight+"px";var w=a.textBtns?" | ":"";shutterLinks[e].num>1?(i=shutterSets[shutterLinks[e].set][shutterLinks[e].num-2],u='<a href="#" id="prevpic" onclick="shutterReloaded.make('+i+');return false">&lt;&lt;</a>'+w,s=new Image,s.src=shutterLinks[i].link):u="",shutterLinks[e].num!=-1&&shutterLinks[e].num<shutterSets[shutterLinks[e].set].length?(n=shutterSets[shutterLinks[e].set][shutterLinks[e].num],m='<a href="#" id="nextpic" onclick="shutterReloaded.make('+n+');return false">&gt;&gt;</a>'+w,o=new Image,o.src=shutterLinks[n].link):m="",h=shutterLinks[e].num>0&&a.imageCount?'<div id="shCount">&nbsp;(&nbsp;'+shutterLinks[e].num+"&nbsp;/&nbsp;"+shutterSets[shutterLinks[e].set].length+"&nbsp;)&nbsp;</div>":"",r='<div id="shTitle"><div id="shPrev">'+u+'</div><div id="shNext">'+m+'</div><div id="shName">'+shutterLinks[e].title+"</div>"+h+"</div>",d.innerHTML='<div id="shWrap"><img src="'+shutterLinks[e].link+'" id="shTopImg" title="'+a.msgClose+'" onload="shutterReloaded.showImg();" onclick="shutterReloaded.hideShutter();" />'+r+"</div>",document.onkeydown=function(e){shutterReloaded.handleArrowKeys(e)},document.getElementById("shTopImg").src=shutterLinks[e].link,window.setTimeout(function(){shutterReloaded.loading()},1e3)},loading:function(){var e,t,i,n=this;(i=n.I("shWrap"))&&"visible"==i.style.visibility||(e=n.I("shShutter"))&&(n.I("shWaitBar")||(t=document.createElement("div"),t.setAttribute("id","shWaitBar"),t.style.top=n.Top+"px",t.style.marginTop=n.pgHeight/2+"px",t.innerHTML=n.msgLoading,e.appendChild(t)))},hideShutter:function(){var e,t,i=this;(e=i.I("shDisplay"))&&e.parentNode.removeChild(e),(t=i.I("shShutter"))&&t.parentNode.removeChild(t),i.hideTags(!0),window.scrollTo(0,i.Top),window.onresize=i.FS=i.Top=i.VP=null,document.documentElement.style.overflowX="",document.onkeydown=null},resize:function(e){var t=this;if(!t.resizing&&t.I("shShutter")){var i=t.I("shWrap");i&&(i.style.visibility="hidden"),window.setTimeout(function(){shutterReloaded.resizing=null},500),window.setTimeout(new Function('shutterReloaded.VP = null;shutterReloaded.make("'+e+'");'),100),t.resizing=!0}},_viewPort:function(){var e=this,t=window.innerHeight?window.innerHeight:0,i=document.body.clientHeight?document.body.clientHeight:0,n=document.documentElement?document.documentElement.clientHeight:0;t>0?(e.wHeight=t-i>1&&t-i<30?i:t,e.wHeight=e.wHeight-n>1&&e.wHeight-n<30?n:e.wHeight):e.wHeight=n>0?n:i,document.getElementsByTagName("body")[0].className.match(/admin-bar/)&&null!==document.getElementById("wpadminbar")&&(e.wHeight=e.wHeight-document.getElementById("wpadminbar").offsetHeight);var s=document.documentElement?document.documentElement.clientWidth:0,o=window.innerWidth?window.innerWidth:document.body.clientWidth;e.wWidth=s>1?s:o},showImg:function(){var e,t,i,n,s,o,d=this,l=d.I("shShutter"),h=d.I("shDisplay"),r=d.I("shTopImg"),a=d.I("shTitle"),u=(d.I("shNavBar"),0);if(l&&(!(e=d.I("shWrap"))||"visible"!=e.style.visibility)){if((t=d.I("shWaitBar"))&&t.parentNode.removeChild(t),l.style.width=h.style.width="",a.style.width=r.width-4+"px",i=d.wHeight-50,window.parent){var m=window.parent;if("undefined"!=typeof m.ngg_get_measures_for_frame){var c=m.ngg_get_measures_for_frame(window.frameElement);i=c.scrollHeight-50}}d.FS?(r.width>d.wWidth-10&&(l.style.width=h.style.width=r.width+10+"px"),document.documentElement.style.overflowX=""):(window.scrollTo(0,d.Top),r.height>i&&(r.width=r.width*(i/r.height),r.height=i,u=1),r.width>d.wWidth-16&&(r.height=r.height*((d.wWidth-16)/r.width),r.width=d.wWidth-16,u=1),a.style.width=r.width-4+"px"),n=d.Top+r.height+10,n>d.pgHeight&&(l.style.height=n+"px"),window.scrollTo(0,d.Top),s=.45*(i-r.height),o=s>3?Math.floor(s):3,document.getElementsByTagName("body")[0].className.match(/admin-bar/)&&null!==document.getElementById("wpadminbar")&&(o+=document.getElementById("wpadminbar").offsetHeight),h.style.top=d.Top+o+"px",e.style.visibility="visible"}},hideTags:function(e){var t=document.getElementsByTagName("select"),n=document.getElementsByTagName("object"),s=document.getElementsByTagName("embed"),o=document.getElementsByTagName("iframe"),d=e?"visible":"hidden";for(i=0;i<t.length;i++)t[i].style.visibility=d;for(i=0;i<n.length;i++)n[i].style.visibility=d;for(i=0;i<s.length;i++)s[i].style.visibility=d;for(i=0;i<o.length;i++)o[i].style.visibility=d},handleArrowKeys:function(e){var t=0;if(!e)var e=window.event;e.keyCode?t=e.keyCode:e.which&&(t=e.which);var i=document.getElementById("prevpic"),n=document.getElementById("nextpic"),s=document.getElementById("shTopImg");switch(t){case 39:n&&n.onclick();break;case 37:i&&i.onclick();break;case 27:s&&s.onclick()}}},shutterOnload=function(){shutterReloaded.init("sh")},"function"==typeof shutterOnload&&("undefined"!=typeof jQuery?jQuery(document).ready(function(){shutterOnload()}):"function"!=typeof window.onload?window.onload=shutterOnload:(oldonld=window.onload,window.onload=function(){oldonld&&oldonld(),shutterOnload()}));
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.min.js
index 0439a22da90101cb2d890850d050974885564083..bdeb491c5ac2e84774855614436ac20a410f6a01 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('e(5($){3 1=5(){3 6=g($,$([]));6.d(\'c\');7(8 4!=\'b\'){0.f=4}0.n()};$(m).h(\'k\',1);3 2=\'0\';7(8($(a).9(2))==\'b\')$(a).9(2,l);j i;1()});',24,24,'shutterReloaded|callback|flag|var|nextgen_shutter2_i18n|function|selector|if|typeof|data|window|undefined|shutterset|addClass|jQuery|L10n|nextgen_lightbox_filter_selector|bind|return|else|refreshed|true|this|Init'.split('|'),0,{}))
+jQuery(function(e){var t=function(){var t=nextgen_lightbox_filter_selector(e,e([]));t.addClass("shutterset"),"undefined"!=typeof nextgen_shutter2_i18n&&(shutterReloaded.L10n=nextgen_shutter2_i18n),shutterReloaded.Init()};e(this).bind("refreshed",t);var n="shutterReloaded";"undefined"==typeof e(window).data(n)&&(e(window).data(n,!0),t())});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.css
index 65afd82881a3c77bc9811bdeb62b3e3124086fa3..d7c50aa414680e25ff374f32f81a24dfd263cfb0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.css
@@ -1 +1 @@
-#shNavBar a{color:#aaf;text-decoration:none}#shNavBar a:hover{color:#fff}#shDisplay div#shTitle{font:normal 12px/17px 'Lucida Grande',Verdana,sans-serif;color:#fff;text-align:center;margin:0 auto}div#shNavBar{font:normal 12px/12px 'Lucida Grande',Verdana,sans-serif;color:#999;position:fixed;left:0;bottom:0;background-color:#2e2e2e;width:100%;padding:4px 0 5px;text-align:center;cursor:pointer;z-index:10011}body{height:100%}#shShutter *,#shDisplay *{padding:0;margin:0}div#shShutter,div#shDisplay{top:0;left:0;width:100%;position:absolute}div#shShutter{height:100%;z-index:10000;background-color:#000;opacity:.8;filter:alpha(opacity=80)}div#shDisplay{display:block;background-color:transparent;z-index:10002}div#shDisplay img#shTopImg{margin:0 auto;border:1px solid #555;background:transparent;display:block;max-width:none;max-height:none}div#shDisplay div#shWrap{visibility:hidden}div#shWaitBar{position:absolute;width:100px;left:50%;margin-left:-50px;margin-top:120px}#shWaitBar img{border:0}#fullSize{display:none}#shNavBar img{border:0;vertical-align:middle;margin:0 2px;opacity:.6;filter:alpha(opacity=60)}#shNavBar img:hover{opacity:.999;filter:alpha(opacity=100)}* html div#shNavBar{_position:absolute;_top:expression(eval(document.compatMode && document.compatMode=='CSS1Compat') ? document.documentElement.scrollTop+document.documentElement.clientHeight-this.clientHeight:document.body.scrollTop+document.body.clientHeight-this.clientHeight);_left:expression(eval(document.compatMode&&document.compatMode=='CSS1Compat') ? document.documentElement.scrollLeft:document.body.scrollLeft)}
\ No newline at end of file
+#shNavBar a{color:#aaf;text-decoration:none}#shNavBar a:hover{color:#fff}#shDisplay div#shTitle{font:400 12px/17px 'Lucida Grande',Verdana,sans-serif;color:#fff;text-align:center;margin:0 auto}div#shNavBar{font:400 12px/12px 'Lucida Grande',Verdana,sans-serif;color:#999;position:fixed;left:0;bottom:0;background-color:#2e2e2e;width:100%;padding:4px 0 5px;text-align:center;cursor:pointer;z-index:10011}body{height:100%}#shDisplay *,#shShutter *{padding:0;margin:0}div#shDisplay,div#shShutter{top:0;left:0;width:100%;position:absolute}div#shShutter{height:100%;z-index:10000;background-color:#000;opacity:.8;filter:alpha(opacity=80)}div#shDisplay{display:block;background-color:transparent;z-index:10002}div#shDisplay img#shTopImg{margin:0 auto;border:1px solid #555;background:0 0;display:block;max-width:none;max-height:none}div#shDisplay div#shWrap{visibility:hidden}div#shWaitBar{position:absolute;width:100px;left:50%;margin-left:-50px;margin-top:120px}#shWaitBar img{border:0}#fullSize{display:none}#shNavBar img{border:0;vertical-align:middle;margin:0 2px;opacity:.6;filter:alpha(opacity=60)}#shNavBar img:hover{opacity:.999;filter:alpha(opacity=100)}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.js
index 96e7665e3759b665a81ff6c71a1d47ddcd027bf2..551488b4b3db2d23b7be5dd7302abb1070b4ef6c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('e 2p=2T.2U+\'/2S/2R/\';q={m:[\'2P\',\'2Q\',\'2V\',\'2W 32\',\'31 2Z 2X\',\'1z\',\'2O\',\'2Y...\'],2j:1e,z:19,F:2p,I:n(a){o b.33(a)},2H:n(a){e L,T,17,i,A,1w,1T,1x,k,u;1j(i=0;i<b.2o.O;i++){L=b.2o[i];17=(L.s.M(\'?\')==-1)?L.s.1u(-4).V():L.s.2F(0,L.s.M(\'?\')).1u(-4).V();9(17!=\'.2I\'&&17!=\'.2M\'&&17!=\'.p\'&&17!=\'2J\')1W;9(a==\'2N\'&&L.12.V().M(\'2K\')==-1)1W;9(a==\'2L\'&&L.1V.V().M(\'2q\')==-1)1W;9(L.12.V().M(\'2G\')!=-1)A=(L.12.M(\' \')!=-1)?L.12.1u(0,L.12.M(\' \')):L.12;B 9(L.1V.V().M(\'2q[\')!=-1)A=L.1V;B A=0,1w=-1;9(A){9(!N[A])N[A]=[];1w=N[A].34(i)}1T=L.s.1u(L.s.3h(\'/\')+1);T=(L.r&&L.r!=1T)?L.r:\'\';h[i]={1A:L.s,J:1w,1c:A,r:T};L.11=U 27(\'q.14("\'+i+\'");o 19;\')}9(!8.z){1x=[\'2k.p\',\'18.p\',\'15.p\',\'2s.p\',\'2i.p\',\'1l.p\'];1j(k=0;k<1x.O;k++){u=U 1z();u.y=8.F+1x[k]}}},14:n(f,2g){e 18,15,1K=\'\',1R=\'\',24,20,1Z,22,D,S,W,j,1Q=\'\',1g,1J,1t,1I;9(!8.t){9(1v g.2t!=\'2v\')8.t=g.2t;B 8.t=(b.v.1Y>0)?b.v.1Y:b.E.1Y}9(1v 8.1H==\'2v\')8.1H=2y.38(b.v.2w,b.E.2w);9(2g)8.1a=1e;B 8.1a=1h;9(8.1d)8.1d=1h;g.2E=U 27(\'q.2A("\'+f+\'");\');b.v.c.1U=\'1L\';9(!8.1o){8.2l();8.1o=1e}9(!(S=8.I(\'Y\'))){S=b.1r(\'K\');S.1m(\'H\',\'Y\');b.Z(\'E\')[0].1n(S);8.1P()}9(!(D=8.I(\'1G\'))){D=b.1r(\'K\');D.1m(\'H\',\'1G\');D.c.21=8.t+\'G\';b.Z(\'E\')[0].1n(D)}S.c.w=8.1H+\'G\';e 13=8.z?\' | \':\'\';9(h[f].J>1){18=N[h[f].1c][h[f].J-2];1Z=8.z?8.m[0]:\'<u y="\'+8.F+\'18.p" r="\'+8.m[0]+\'" />\';1K=\'<a s="#" 11="q.14(\'+18+\');o 19">\'+1Z+\'</a>\'+13;24=U 1z();24.y=h[18].1A}9(h[f].J!=-1&&h[f].J<(N[h[f].1c].O)){15=N[h[f].1c][h[f].J];22=8.z?8.m[1]:\'<u y="\'+8.F+\'15.p" r="\'+8.m[1]+\'" />\';1R=\'<a s="#" 11="q.14(\'+15+\');o 19">\'+22+\'</a>\'+13;20=U 1z();20.y=h[15].1A}1J=8.z?8.m[2]:\'<u y="\'+8.F+\'2k.p" r="\'+8.m[2]+\'" />\';1g=((h[f].J>0)&&8.2j)?\' \'+8.m[5]+\'&26;\'+h[f].J+\'&26;\'+8.m[6]+\'&26;\'+N[h[f].1c].O:\'\';9(1g&&8.z)1g+=\' |\';9(8.1a){1t=8.z?8.m[4]:\'<u y="\'+8.F+\'2i.p" r="\'+8.m[4]+\'" />\'}B{1t=8.z?8.m[3]:\'<u y="\'+8.F+\'2s.p" r="\'+8.m[3]+\'" />\';1Q=\',1\'}1I=\'<2C H="2f"><a s="#" 11="q.14(\'+f+1Q+\');o 19">\'+1t+\'</a>\'+13+\'</2C>\';9(!(j=8.I(\'1C\'))){j=b.1r(\'K\');j.1m(\'H\',\'1C\');b.Z(\'E\')[0].1n(j)}j.1O=13+1K+\'<a s="#" 11="q.2e();o 19">\'+1J+\'</a>\'+13+1I+1R+1g;D.1O=\'<K H="1y"><u y="\'+h[f].1A+\'" H="2z" 1k="q.2n();" 11="q.2e();" /><K H="2D">\'+h[f].r+\'</K></K>\';g.2d(n(){q.1l()},37)},1l:n(){e S,x,W;9((W=8.I(\'1y\'))&&W.c.R==\'1B\')o;9(!(S=8.I(\'Y\')))o;9(8.I(\'2b\'))o;x=b.1r(\'K\');x.1m(\'H\',\'2b\');x.c.21=8.t+\'G\';x.1O=\'<u y="\'+8.F+\'1l.p" r="\'+8.m[7]+\'" />\';S.1n(x)},2e:n(){e D,S,j;9(D=8.I(\'1G\'))D.1F.1E(D);9(S=8.I(\'Y\'))S.1F.1E(S);9(j=8.I(\'1C\'))j.1F.1E(j);8.1P(1e);g.2a(0,8.t);g.2E=8.1a=8.t=8.1o=1h;b.v.c.1U=\'\'},2A:n(f){9(8.1d)o;9(!8.I(\'Y\'))o;e W=8.I(\'1y\');9(W)W.c.R=\'1L\';g.2d(n(){q.1d=1h},3d);g.2d(U 27(\'q.1o = 1h;q.14("\'+f+\'");\'),39);8.1d=1e},2l:n(){e 1b=g.2h?g.2h:0;e 1f=b.E.29?b.E.29:0;e X=b.v?b.v.29:0;9(1b>0){8.C=((1b-1f)>1&&(1b-1f)<30)?1f:1b;8.C=((8.C-X)>1&&(8.C-X)<30)?X:8.C}B 8.C=(X>0)?X:1f;e 28=b.v?b.v.2u:0;e 2r=g.2m?g.2m:b.E.2u;8.P=(28>1)?28:2r},2n:n(){e S,W,x,D,T,d,j,C,P,1D,Q,1p,1s,1N,1q=0;9(!(S=8.I(\'Y\')))o;9((W=8.I(\'1y\'))&&W.c.R==\'1B\')o;9(x=8.I(\'2b\'))x.1F.1E(x);D=8.I(\'1G\');d=8.I(\'2z\');T=8.I(\'2D\');j=8.I(\'1C\');S.c.l=D.c.l=\'\';T.c.l=(d.l-4)+\'G\';1D=j.1M?T.1M+j.1M:30;Q=8.C-7-1D;9(8.1a){9(d.l>(8.P-10))S.c.l=D.c.l=d.l+10+\'G\';b.v.c.1U=\'\'}B{g.2a(0,8.t);9(d.w>Q){d.l=d.l*(Q/d.w);d.w=Q;1q=1}9(d.l>(8.P-16)){d.w=d.w*((8.P-16)/d.l);d.l=8.P-16;1q=1}T.c.l=(d.l-4)+\'G\';j.c.2x=\'3c\'}1p=8.t+d.w+1D+10;9(1p>8.1H)S.c.w=1p+\'G\';g.2a(0,8.t);9((8.1a&&(d.w>Q||d.l>8.P))||1q)8.I(\'2f\').c.3e=\'3f\';1s=(Q-d.w)*0.3b;1N=(1s>3)?2y.3a(1s):3;D.c.21=8.t+1N+\'G\';j.c.2x=\'0\';W.c.R=\'1B\'},1P:n(2B){e 25=b.Z(\'3g\');e 1S=b.Z(\'36\');e 23=b.Z(\'35\');9(2B)e 1i=\'1B\';B e 1i=\'1L\';1j(i=0;i<25.O;i++)25[i].c.R=1i;1j(i=0;i<1S.O;i++)1S[i].c.R=1i;1j(i=0;i<23.O;i++)23[i].c.R=1i}};e h={},N={};9(1v 1X==\'n\'){2c=g.1k;9(1v g.1k!=\'n\')g.1k=1X;B g.1k=n(){1X();9(2c){2c()}}}',62,204,'||||||||this|if||document|style|TI|var|ln|window|shutterLinks||NB||width|L10n|function|return|gif|shutterReloaded|title|href|Top|img|documentElement|height|WB|src|textBtns|setid|else|wHeight||body|shImgDir|px|id||num|div||indexOf|shutterSets|length|wWidth|shHeight|visibility|||new|toLowerCase||deH|shShutter|getElementsByTagName||onclick|className|dv|Make|next||ext|prev|false|FS|wiH|set|resizing|true|dbH|imgNum|null|vis|for|onload|loading|setAttribute|appendChild|VP|maxHeight|resized|createElement|itop|fsbtn|slice|typeof|inset|shMenuPre|shWrap|Image|link|visible|shNavBar|capH|removeChild|parentNode|shDisplay|pgHeight|fsLink|closebtn|prevlink|hidden|offsetHeight|mtop|innerHTML|fixTags|fsarg|nextlink|obj|shfile|overflowX|rel|continue|shutterOnload|scrollTop|prevbtn|nextimg|top|nextbtn|emb|previmg|sel|nbsp|Function|deW|clientHeight|scrollTo|shWaitBar|oldonload|setTimeout|hideShutter|fullSize|fs|innerHeight|resize2|imageCount|close|_viewPort|innerWidth|ShowImg|links|imagePath|lightbox|dbW|resize1|pageYOffset|clientWidth|undefined|scrollHeight|bottom|Math|shTopImg|Resize|arg|span|shTitle|onresize|substring|shutterset|Init|jpg|jpeg|shutter|lb|png|sh|of|Previous|Next|images|shutter_reloaded|nextgen_lightbox_settings|static_path|Close|Full|Screen|Loading|to||Fit|Size|getElementById|push|embed|object|2000|max|100|floor|45|0px|500|display|inline|select|lastIndexOf'.split('|'),0,{}))
+var imagePath=nextgen_lightbox_settings.static_path+"/shutter_reloaded/images/";shutterReloaded={L10n:["Previous","Next","Close","Full Size","Fit to Screen","Image","of","Loading..."],imageCount:!0,textBtns:!1,shImgDir:imagePath,I:function(t){return document.getElementById(t)},Init:function(t){var e,i,s,h,n,o,l,d,r,a;for(h=0;h<document.links.length;h++)e=document.links[h],s=e.href.indexOf("?")==-1?e.href.slice(-4).toLowerCase():e.href.substring(0,e.href.indexOf("?")).slice(-4).toLowerCase(),".jpg"!=s&&".png"!=s&&".gif"!=s&&"jpeg"!=s||"sh"==t&&e.className.toLowerCase().indexOf("shutter")==-1||"lb"==t&&e.rel.toLowerCase().indexOf("lightbox")==-1||(e.className.toLowerCase().indexOf("shutterset")!=-1?n=e.className.indexOf(" ")!=-1?e.className.slice(0,e.className.indexOf(" ")):e.className:e.rel.toLowerCase().indexOf("lightbox[")!=-1?n=e.rel:(n=0,o=-1),n&&(shutterSets[n]||(shutterSets[n]=[]),o=shutterSets[n].push(h)),l=e.href.slice(e.href.lastIndexOf("/")+1),i=e.title&&e.title!=l?e.title:"",shutterLinks[h]={link:e.href,num:o,set:n,title:i},e.onclick=new Function('shutterReloaded.Make("'+h+'");return false;'));if(!this.textBtns)for(d=["close.gif","prev.gif","next.gif","resize1.gif","resize2.gif","loading.gif"],r=0;r<d.length;r++)a=new Image,a.src=this.shImgDir+d[r]},Make:function(t,e){var i,s,h,n,o,l,d,r,a,u,g,m,c,f="",w="",p="";this.Top||("undefined"!=typeof window.pageYOffset?this.Top=window.pageYOffset:this.Top=document.documentElement.scrollTop>0?document.documentElement.scrollTop:document.body.scrollTop),"undefined"==typeof this.pgHeight&&(this.pgHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight)),e?this.FS=!0:this.FS=null,this.resizing&&(this.resizing=null),window.onresize=new Function('shutterReloaded.Resize("'+t+'");'),document.documentElement.style.overflowX="hidden",this.VP||(this._viewPort(),this.VP=!0),(r=this.I("shShutter"))||(r=document.createElement("div"),r.setAttribute("id","shShutter"),document.getElementsByTagName("body")[0].appendChild(r),this.fixTags()),(d=this.I("shDisplay"))||(d=document.createElement("div"),d.setAttribute("id","shDisplay"),d.style.top=this.Top+"px",document.getElementsByTagName("body")[0].appendChild(d)),r.style.height=this.pgHeight+"px";var y=this.textBtns?" | ":"";shutterLinks[t].num>1&&(i=shutterSets[shutterLinks[t].set][shutterLinks[t].num-2],o=this.textBtns?this.L10n[0]:'<img src="'+this.shImgDir+'prev.gif" title="'+this.L10n[0]+'" />',f='<a href="#" onclick="shutterReloaded.Make('+i+');return false">'+o+"</a>"+y,h=new Image,h.src=shutterLinks[i].link),shutterLinks[t].num!=-1&&shutterLinks[t].num<shutterSets[shutterLinks[t].set].length&&(s=shutterSets[shutterLinks[t].set][shutterLinks[t].num],l=this.textBtns?this.L10n[1]:'<img src="'+this.shImgDir+'next.gif" title="'+this.L10n[1]+'" />',w='<a href="#" onclick="shutterReloaded.Make('+s+');return false">'+l+"</a>"+y,n=new Image,n.src=shutterLinks[s].link),g=this.textBtns?this.L10n[2]:'<img src="'+this.shImgDir+'close.gif" title="'+this.L10n[2]+'" />',u=shutterLinks[t].num>0&&this.imageCount?" "+this.L10n[5]+"&nbsp;"+shutterLinks[t].num+"&nbsp;"+this.L10n[6]+"&nbsp;"+shutterSets[shutterLinks[t].set].length:"",u&&this.textBtns&&(u+=" |"),this.FS?m=this.textBtns?this.L10n[4]:'<img src="'+this.shImgDir+'resize2.gif" title="'+this.L10n[4]+'" />':(m=this.textBtns?this.L10n[3]:'<img src="'+this.shImgDir+'resize1.gif" title="'+this.L10n[3]+'" />',p=",1"),c='<span id="fullSize"><a href="#" onclick="shutterReloaded.Make('+t+p+');return false">'+m+"</a>"+y+"</span>",(a=this.I("shNavBar"))||(a=document.createElement("div"),a.setAttribute("id","shNavBar"),document.getElementsByTagName("body")[0].appendChild(a)),a.innerHTML=y+f+'<a href="#" onclick="shutterReloaded.hideShutter();return false">'+g+"</a>"+y+c+w+u,d.innerHTML='<div id="shWrap"><img src="'+shutterLinks[t].link+'" id="shTopImg" onload="shutterReloaded.ShowImg();" onclick="shutterReloaded.hideShutter();" /><div id="shTitle">'+shutterLinks[t].title+"</div></div>",window.setTimeout(function(){shutterReloaded.loading()},2e3)},loading:function(){var t,e,i;(i=this.I("shWrap"))&&"visible"==i.style.visibility||(t=this.I("shShutter"))&&(this.I("shWaitBar")||(e=document.createElement("div"),e.setAttribute("id","shWaitBar"),e.style.top=this.Top+"px",e.innerHTML='<img src="'+this.shImgDir+'loading.gif" title="'+this.L10n[7]+'" />',t.appendChild(e)))},hideShutter:function(){var t,e,i;(t=this.I("shDisplay"))&&t.parentNode.removeChild(t),(e=this.I("shShutter"))&&e.parentNode.removeChild(e),(i=this.I("shNavBar"))&&i.parentNode.removeChild(i),this.fixTags(!0),window.scrollTo(0,this.Top),window.onresize=this.FS=this.Top=this.VP=null,document.documentElement.style.overflowX=""},Resize:function(t){if(!this.resizing&&this.I("shShutter")){var e=this.I("shWrap");e&&(e.style.visibility="hidden"),window.setTimeout(function(){shutterReloaded.resizing=null},500),window.setTimeout(new Function('shutterReloaded.VP = null;shutterReloaded.Make("'+t+'");'),100),this.resizing=!0}},_viewPort:function(){var t=window.innerHeight?window.innerHeight:0,e=document.body.clientHeight?document.body.clientHeight:0,i=document.documentElement?document.documentElement.clientHeight:0;t>0?(this.wHeight=t-e>1&&t-e<30?e:t,this.wHeight=this.wHeight-i>1&&this.wHeight-i<30?i:this.wHeight):this.wHeight=i>0?i:e;var s=document.documentElement?document.documentElement.clientWidth:0,h=window.innerWidth?window.innerWidth:document.body.clientWidth;this.wWidth=s>1?s:h},ShowImg:function(){var t,e,i,s,h,n,o,l,d,r,a,u,g=0;(t=this.I("shShutter"))&&((e=this.I("shWrap"))&&"visible"==e.style.visibility||((i=this.I("shWaitBar"))&&i.parentNode.removeChild(i),s=this.I("shDisplay"),n=this.I("shTopImg"),h=this.I("shTitle"),o=this.I("shNavBar"),t.style.width=s.style.width="",h.style.width=n.width-4+"px",l=o.offsetHeight?h.offsetHeight+o.offsetHeight:30,d=this.wHeight-7-l,this.FS?(n.width>this.wWidth-10&&(t.style.width=s.style.width=n.width+10+"px"),document.documentElement.style.overflowX=""):(window.scrollTo(0,this.Top),n.height>d&&(n.width=n.width*(d/n.height),n.height=d,g=1),n.width>this.wWidth-16&&(n.height=n.height*((this.wWidth-16)/n.width),n.width=this.wWidth-16,g=1),h.style.width=n.width-4+"px",o.style.bottom="0px"),r=this.Top+n.height+l+10,r>this.pgHeight&&(t.style.height=r+"px"),window.scrollTo(0,this.Top),(this.FS&&(n.height>d||n.width>this.wWidth)||g)&&(this.I("fullSize").style.display="inline"),a=.45*(d-n.height),u=a>3?Math.floor(a):3,s.style.top=this.Top+u+"px",o.style.bottom="0",e.style.visibility="visible"))},fixTags:function(t){var e=document.getElementsByTagName("select"),s=document.getElementsByTagName("object"),h=document.getElementsByTagName("embed");if(t)var n="visible";else var n="hidden";for(i=0;i<e.length;i++)e[i].style.visibility=n;for(i=0;i<s.length;i++)s[i].style.visibility=n;for(i=0;i<h.length;i++)h[i].style.visibility=n}};var shutterLinks={},shutterSets={};"function"==typeof shutterOnload&&(oldonload=window.onload,"function"!=typeof window.onload?window.onload=shutterOnload:window.onload=function(){shutterOnload(),oldonload&&oldonload()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.min.js
index 22621d9ba387710b5b3a14f1180d6208d9ab8f98..85fc344bc94b2530970c37956ec2f8303c978d0f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('n(k c.a==\'i\'){n(k 0==\'i\'){c.a={7:9.6+\'/8-4/3/1/7.h\',g:9.6+\'/8-4/3/1/m-2.l\',b:\'v &w;\',e:\'&x; t\',d:\'y\',5:\'5\',2:\'z\',f:\'r o s p q. u P K J L A M O N I H.\'}}C{c.a={7:9.6+\'/8-4/3/1/7.h\',g:9.6+\'/8-4/3/1/m-2.l\',b:0.b,e:0.e,d:0.d,5:0.5,2:0.2,f:0.f}}}F(G($){E j=D($,$([]));j.B(\'1\')});',52,52,'nextgen_thickbox_i18n|thickbox|close|js|includes|of|wp_includes_url|loadingAnimation|wp|photocrati_ajax|thickboxL10n|next|window|image|prev|noiframes|closeImage|gif|undefined|selector|typeof|png|tb|if|feature|inline|frames|This|requires|Prev|You|Next|gt|lt|Image|Close|your|addClass|else|nextgen_lightbox_filter_selector|var|jQuery|function|them|support|disabled|iframes|or|browser|not|does|have'.split('|'),0,{}))
+"undefined"==typeof window.thickboxL10n&&("undefined"==typeof nextgen_thickbox_i18n?window.thickboxL10n={loadingAnimation:photocrati_ajax.wp_includes_url+"/wp-includes/js/thickbox/loadingAnimation.gif",closeImage:photocrati_ajax.wp_includes_url+"/wp-includes/js/thickbox/tb-close.png",next:"Next &gt;",prev:"&lt; Prev",image:"Image",of:"of",close:"Close",noiframes:"This feature requires inline frames. You have iframes disabled or your browser does not support them."}:window.thickboxL10n={loadingAnimation:photocrati_ajax.wp_includes_url+"/wp-includes/js/thickbox/loadingAnimation.gif",closeImage:photocrati_ajax.wp_includes_url+"/wp-includes/js/thickbox/tb-close.png",next:nextgen_thickbox_i18n.next,prev:nextgen_thickbox_i18n.prev,image:nextgen_thickbox_i18n.image,of:nextgen_thickbox_i18n.of,close:nextgen_thickbox_i18n.close,noiframes:nextgen_thickbox_i18n.noiframes}),jQuery(function(e){var i=nextgen_lightbox_filter_selector(e,e([]));i.addClass("thickbox")});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php
index ba9cdd1a799f5095cfcfdb6f88758e82946d3f3e..d7c3c0c874982a320f47948a6520a180ca142288 100755
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php
@@ -20,7 +20,7 @@ class M_MVC extends C_Base_Module
             "photocrati-mvc",
             "MVC Framework",
             "Provides an MVC architecture for the plugin to use",
-            "0.7",
+            "0.8",
             "https://www.imagely.com",
             "Photocrati Media",
             "https://www.imagely.com"
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/package.module.mvc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/package.module.mvc.php
index 7295bd43313756f5c5a697a9f486e02bd0d3f477..11e8cf0c8cb3c98b1e6aecdfd5556a95ff5eb161 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/package.module.mvc.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/package.module.mvc.php
@@ -1,26 +1,36 @@
 <?php
+/**
+ * Class A_MVC_Factory
+ * @mixin C_Component_Factory
+ * @adapts I_Component_Factory
+ */
 class A_MVC_Factory extends Mixin
 {
-    public function mvc_view($template, $params = array(), $engine = 'php', $context = FALSE)
+    function mvc_view($template, $params = array(), $engine = 'php', $context = FALSE)
     {
         return new C_MVC_View($template, $params, $engine, $context);
     }
 }
+/**
+ * Class A_MVC_Fs
+ * @mixin C_Fs
+ * @adapts I_Fs
+ */
 class A_MVC_Fs extends Mixin
 {
     static $_lookups = array();
     static $_non_minified_modules = array();
-    public function _get_cache_key()
+    function _get_cache_key()
     {
         return C_Photocrati_Transient_Manager::create_key('MVC', 'find_static_abspath');
     }
-    public function initialize()
+    function initialize()
     {
         register_shutdown_function(array(&$this, 'cache_lookups'));
         //self::$_lookups = C_Photocrati_Transient_Manager::fetch($this->_get_cache_key(), array());
         self::$_non_minified_modules = apply_filters('ngg_non_minified_modules', array());
     }
-    public function cache_lookups()
+    function cache_lookups()
     {
         C_Photocrati_Transient_Manager::update($this->_get_cache_key(), self::$_lookups);
     }
@@ -32,7 +42,7 @@ class A_MVC_Fs extends Mixin
      * @param string $relative
      * @return string|NULL
      */
-    public function find_static_abspath($path, $module = FALSE, $relative = FALSE, &$found_root = FALSE)
+    function find_static_abspath($path, $module = FALSE, $relative = FALSE, &$found_root = FALSE)
     {
         $retval = NULL;
         $key = $this->_get_static_abspath_key($path, $module, $relative);
@@ -51,7 +61,7 @@ class A_MVC_Fs extends Mixin
                 define('SCRIPT_DEBUG', FALSE);
             }
             if (!SCRIPT_DEBUG && !in_array($module, self::$_non_minified_modules) && strpos($path, 'min.') === FALSE && strpos($path, 'pack.') === FALSE && strpos($path, 'packed.') === FALSE && preg_match('/\\.(js|css)$/', $path) && !$filter) {
-                $path = preg_replace('#\\.[^\\.]+$#', '.min\\0', $path);
+                $path = preg_replace("#\\.[^\\.]+\$#", ".min\\0", $path);
             }
             // In case NextGen is in a symlink we make $mod_dir relative to the NGG root and then rebuild it
             // using WP_PLUGIN_DIR; without this NGG-in-symlink creates URL that reference the file abspath
@@ -78,7 +88,7 @@ class A_MVC_Fs extends Mixin
         }
         return $retval;
     }
-    public function _get_static_abspath_key($path, $module = FALSE, $relative = FALSE)
+    function _get_static_abspath_key($path, $module = FALSE, $relative = FALSE)
     {
         $key = $path;
         if ($module) {
@@ -100,28 +110,33 @@ class A_MVC_Fs extends Mixin
      * @param string $module
      * @return string|NULL
      */
-    public function find_static_relpath($path, $module = FALSE)
+    function find_static_relpath($path, $module = FALSE)
     {
         return $this->object->find_static_abspath($path, $module, TRUE);
     }
 }
+/**
+ * Class A_MVC_Router
+ * @mixin C_Router
+ * @adapts I_Router
+ */
 class A_MVC_Router extends Mixin
 {
     static $_lookups = array();
-    public function initialize()
+    function initialize()
     {
         register_shutdown_function(array(&$this, 'cache_lookups'));
         self::$_lookups = C_Photocrati_Transient_Manager::fetch($this->_get_cache_key(), array());
     }
-    public function _get_cache_key()
+    function _get_cache_key()
     {
         return C_Photocrati_Transient_Manager::create_key('MVC', 'get_static_url');
     }
-    public function cache_lookups()
+    function cache_lookups()
     {
         C_Photocrati_Transient_Manager::update($this->_get_cache_key(), self::$_lookups);
     }
-    public function _get_static_url_key($path, $module = FALSE)
+    function _get_static_url_key($path, $module = FALSE)
     {
         $parts = array($path, $module, $this->object->get_base_url('plugins'), $this->object->get_base_url('plugins_mu'), $this->object->get_base_url('templates'), $this->object->get_base_url('stylesheets'));
         return implode('|', $parts);
@@ -132,7 +147,7 @@ class A_MVC_Router extends Mixin
      * @param string $module
      * @return string
      */
-    public function get_static_url($path, $module = FALSE)
+    function get_static_url($path, $module = FALSE)
     {
         $retval = NULL;
         $key = $this->object->_get_static_url_key($path, $module);
@@ -147,7 +162,7 @@ class A_MVC_Router extends Mixin
             $abspath = $fs->join_paths($this->object->get_static_override_dir($formatted_path[1]), $formatted_path[0]);
             if (@is_file($abspath)) {
                 $abspath = str_replace($fs->get_document_root('content'), '', $abspath);
-                $retval = self::$_lookups[$key] = $this->object->join_paths($this->object->get_base_url('content'), str_replace('\\', '/', $abspath));
+                $retval = self::$_lookups[$key] = $this->object->join_paths($this->object->get_base_url('content'), str_replace("\\", '/', $abspath));
             }
         }
         // We'll have to calculate the url from our own modules
@@ -165,9 +180,9 @@ class A_MVC_Router extends Mixin
             }
             // We found the root so we know what base url to prepend
             if ($found_root) {
-                $retval = self::$_lookups[$key] = $this->object->join_paths($this->object->get_base_url($found_root), str_replace('\\', '/', $path));
+                $retval = self::$_lookups[$key] = $this->object->join_paths($this->object->get_base_url($found_root), str_replace("\\", '/', $path));
             } else {
-                $retval = self::$_lookups[$key] = $this->object->join_paths($this->object->get_base_url('root'), str_replace('\\', '/', $path));
+                $retval = self::$_lookups[$key] = $this->object->join_paths($this->object->get_base_url('root'), str_replace("\\", '/', $path));
             }
         }
         // For the "Sage" theme and others using the "Soil" plugin "Roots" theme was re-branded to "Sage" theme
@@ -182,7 +197,7 @@ class A_MVC_Router extends Mixin
      *
      * @return string $dir
      */
-    public function get_static_override_dir($module_id = NULL)
+    function get_static_override_dir($module_id = NULL)
     {
         $fs = C_Fs::get_instance();
         $dir = $fs->join_paths(WP_CONTENT_DIR, 'ngg');
@@ -212,20 +227,23 @@ if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) {
 class Mixin_MVC_Controller_Defaults extends Mixin
 {
     // Provide a default view
-    public function index_action($return = FALSE)
+    function index_action($return = FALSE)
     {
         return $this->render_view('photocrati-mvc#index', array(), $return);
     }
 }
 /**
  * Provides actions that are executed based on the requested url
+ * @mixin Mixin_MVC_Controller_Defaults
+ * @mixin Mixin_MVC_Controller_Instance_Methods
+ * @implements I_MVC_Controller
  */
 abstract class C_MVC_Controller extends C_Component
 {
-    public $_content_type = 'text/html';
-    public $message = '';
-    public $debug = FALSE;
-    public function define($context = FALSE)
+    var $_content_type = 'text/html';
+    var $message = '';
+    var $debug = FALSE;
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_MVC_Controller_Defaults');
@@ -238,7 +256,7 @@ abstract class C_MVC_Controller extends C_Component
  */
 class Mixin_MVC_Controller_Instance_Methods extends Mixin
 {
-    public function set_content_type($type)
+    function set_content_type($type)
     {
         switch ($type) {
             case 'html':
@@ -285,55 +303,55 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
         $this->object->_content_type = $type;
         return $type;
     }
-    public function do_not_cache()
+    function do_not_cache()
     {
         if (!headers_sent()) {
             header('Cache-Control: no-cache');
             header('Pragma: no-cache');
         }
     }
-    public function expires($time)
+    function expires($time)
     {
         $time = strtotime($time);
         if (!headers_sent()) {
-            header('Expires: ' . strftime('%a, %d %b %Y %H:%M:%S %Z', $time));
+            header('Expires: ' . strftime("%a, %d %b %Y %H:%M:%S %Z", $time));
         }
     }
-    public function http_error($message, $code = 501)
+    function http_error($message, $code = 501)
     {
         $this->message = $message;
         $method = "http_{$code}_action";
         $this->{$method}();
     }
-    public function is_valid_request($method)
+    function is_valid_request($method)
     {
         return TRUE;
     }
-    public function is_post_request()
+    function is_post_request()
     {
-        return 'POST' == $this->object->get_router()->get_request_method();
+        return "POST" == $this->object->get_router()->get_request_method();
     }
-    public function is_get_request()
+    function is_get_request()
     {
-        return 'GET' == $this->object->get_router()->get_request_method();
+        return "GET" == $this->object->get_router()->get_request_method();
     }
-    public function is_delete_request()
+    function is_delete_request()
     {
-        return 'DELETE' == $this->object->get_router()->get_request_method();
+        return "DELETE" == $this->object->get_router()->get_request_method();
     }
-    public function is_put_request()
+    function is_put_request()
     {
-        return 'PUT' == $this->object->get_router()->get_request_method();
+        return "PUT" == $this->object->get_router()->get_request_method();
     }
-    public function is_custom_request($type)
+    function is_custom_request($type)
     {
         return strtolower($type) == strtolower($this->object->get_router()->get_request_method());
     }
-    public function get_router()
+    function get_router()
     {
         return C_Router::get_instance();
     }
-    public function get_routed_app()
+    function get_routed_app()
     {
         return $this->object->get_router()->get_routed_app();
     }
@@ -342,23 +360,23 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
      * @param string $key
      * @return mixed
      */
-    public function param($key, $prefix = NULL, $default = NULL)
+    function param($key, $prefix = NULL, $default = NULL)
     {
         return $this->object->get_routed_app()->get_parameter($key, $prefix, $default);
     }
-    public function set_param($key, $value, $id = NULL, $use_prefix = FALSE)
+    function set_param($key, $value, $id = NULL, $use_prefix = FALSE)
     {
         return $this->object->get_routed_app()->set_parameter($key, $value, $id, $use_prefix);
     }
-    public function set_param_for($url, $key, $value, $id = NULL, $use_prefix = FALSE)
+    function set_param_for($url, $key, $value, $id = NULL, $use_prefix = FALSE)
     {
         return $this->object->get_routed_app()->set_parameter($key, $value, $id, $use_prefix, $url);
     }
-    public function remove_param($key, $id = NULL)
+    function remove_param($key, $id = NULL)
     {
         return $this->object->get_routed_app()->remove_parameter($key, $id);
     }
-    public function remove_param_for($url, $key, $id = NULL)
+    function remove_param_for($url, $key, $id = NULL)
     {
         $app = $this->object->get_routed_app();
         $retval = $app->remove_parameter($key, $id, $url);
@@ -368,7 +386,7 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
      * Gets the routed url, generated by the Routing App
      * @return string
      */
-    public function get_routed_url($with_qs = FALSE)
+    function get_routed_url($with_qs = FALSE)
     {
         return $this->object->get_routed_app()->get_app_url(FALSE, $with_qs);
     }
@@ -379,7 +397,7 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
      * @param boolean $relative
      * @return string
      */
-    public function get_static_abspath($path, $module = FALSE, $relative = FALSE)
+    function get_static_abspath($path, $module = FALSE, $relative = FALSE)
     {
         return C_Fs::get_instance()->find_static_abspath($path, $module);
     }
@@ -389,11 +407,11 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
      * @param string $module
      * @return string
      */
-    public function get_static_relpath($path, $module = FALSE)
+    function get_static_relpath($path, $module = FALSE)
     {
         return C_Fs::get_instance()->find_static_abspath($path, $module, TRUE);
     }
-    public function get_static_url($path, $module = FALSE)
+    function get_static_url($path, $module = FALSE)
     {
         return C_Router::get_instance()->get_static_url($path, $module);
     }
@@ -402,7 +420,7 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
      * @param string $name
      * @param array $vars
      */
-    public function render_view($name, $vars = array(), $return = FALSE)
+    function render_view($name, $vars = array(), $return = FALSE)
     {
         $this->object->render();
         return $this->object->render_partial($name, $vars, $return);
@@ -410,7 +428,7 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
     /**
      * Outputs the response headers
      */
-    public function render()
+    function render()
     {
         if (!headers_sent()) {
             header('Content-Type: ' . $this->object->_content_type . '; charset=' . get_option('blog_charset'), true);
@@ -419,7 +437,7 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
     /**
      * Renders a view
      */
-    public function render_partial($template, $params = array(), $return = FALSE, $context = NULL)
+    function render_partial($template, $params = array(), $return = FALSE, $context = NULL)
     {
         // We'll use the name of the view as the context if one hasn't been provided
         if (is_null($context)) {
@@ -428,27 +446,32 @@ class Mixin_MVC_Controller_Instance_Methods extends Mixin
         $view = $this->object->create_view($template, $params, $context);
         return $view->render($return);
     }
-    public function create_view($template, $params = array(), $context = NULL)
+    function create_view($template, $params = array(), $context = NULL)
     {
         $factory = C_Component_Factory::get_instance();
         $view = $factory->create('mvc_view', $template, $params, NULL, $context);
         return $view;
     }
 }
+/**
+ * Class C_MVC_View
+ * @mixin Mixin_Mvc_View_Instance_Methods
+ * @implements I_MVC_View
+ */
 class C_MVC_View extends C_Component
 {
-    public $_template = '';
-    public $_engine = '';
-    public $_params = array();
-    public $_queue = array();
-    public function __construct($template, $params = array(), $engine = 'php', $context = FALSE)
+    var $_template = '';
+    var $_engine = '';
+    var $_params = array();
+    var $_queue = array();
+    function __construct($template, $params = array(), $engine = 'php', $context = FALSE)
     {
         $this->_template = $template;
         $this->_params = (array) $params;
         $this->_engine = $engine;
         parent::__construct();
     }
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_MVC_View');
@@ -461,7 +484,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * Returns the variables to be used in the template
      * @return array
      */
-    public function get_template_vars()
+    function get_template_vars()
     {
         $retval = array();
         foreach ($this->object->_params as $key => $value) {
@@ -477,12 +500,13 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * @param string $key
      * @return string
      */
-    public function get_template_abspath($value = NULL)
+    function get_template_abspath($value = NULL)
     {
         if (!$value) {
             $value = $this->object->_template;
         }
         if ($value[0] == '/' && @file_exists($value)) {
+            // key is already abspath
         } else {
             $value = $this->object->find_template_abspath($value);
         }
@@ -493,7 +517,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * @param string $__return
      * @return string|NULL
      */
-    public function render($return = FALSE)
+    function render($return = FALSE)
     {
         $element = $this->object->render_object();
         $content = $this->object->rasterize_object($element);
@@ -502,7 +526,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
         }
         return $content;
     }
-    public function render_object()
+    function render_object()
     {
         // We use underscores to prefix local variables to avoid conflicts wth
         // template vars
@@ -512,11 +536,11 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
         $this->end_element();
         return $__element;
     }
-    public function rasterize_object($element)
+    function rasterize_object($element)
     {
         return $element->rasterize();
     }
-    public function start_element($id, $type = null, $context = null)
+    function start_element($id, $type = null, $context = null)
     {
         if ($type == null) {
             $type = 'element';
@@ -542,7 +566,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
         ob_start();
         return $element;
     }
-    public function end_element()
+    function end_element()
     {
         $content = ob_get_clean();
         $element = array_pop($this->object->_queue);
@@ -558,7 +582,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * @param string $__return
      * @return NULL
      */
-    public function include_template($__template, $__params = null, $__return = FALSE)
+    function include_template($__template, $__params = null, $__return = FALSE)
     {
         // We use underscores to prefix local variables to avoid conflicts wth
         // template vars
@@ -596,7 +620,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * @param string $module
      * @return string
      */
-    public function find_template_abspath($path, $module = FALSE)
+    function find_template_abspath($path, $module = FALSE)
     {
         $fs = C_Fs::get_instance();
         $settings = C_NextGen_Settings::get_instance();
@@ -615,7 +639,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
         }
         return $retval;
     }
-    public function get_template_override_dir($module = NULL)
+    function get_template_override_dir($module = NULL)
     {
         $fs = C_Fs::get_instance();
         $dir = $fs->join_paths(WP_CONTENT_DIR, 'ngg');
@@ -638,7 +662,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
         }
         return $dir;
     }
-    public function get_template_override_abspath($module, $filename)
+    function get_template_override_abspath($module, $filename)
     {
         $fs = C_Fs::get_instance();
         $retval = NULL;
@@ -653,7 +677,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * @param $key
      * @param $value
      */
-    public function set_param($key, $value)
+    function set_param($key, $value)
     {
         $this->object->_params[$key] = $value;
     }
@@ -661,7 +685,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * Removes a template parameter
      * @param $key
      */
-    public function remove_param($key)
+    function remove_param($key)
     {
         unset($this->object->_params[$key]);
     }
@@ -671,7 +695,7 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
      * @param null $default
      * @return mixed
      */
-    public function get_param($key, $default = NULL)
+    function get_param($key, $default = NULL)
     {
         if (isset($this->object->_params[$key])) {
             return $this->object->_params[$key];
@@ -682,43 +706,43 @@ class Mixin_Mvc_View_Instance_Methods extends Mixin
 }
 class C_MVC_View_Element
 {
-    public $_id;
-    public $_type;
-    public $_list;
-    public $_context;
-    public function __construct($id, $type = null)
+    var $_id;
+    var $_type;
+    var $_list;
+    var $_context;
+    function __construct($id, $type = null)
     {
         $this->_id = $id;
         $this->_type = $type;
         $this->_list = array();
         $this->_context = array();
     }
-    public function get_id()
+    function get_id()
     {
         return $this->_id;
     }
-    public function append($child)
+    function append($child)
     {
         $this->_list[] = $child;
     }
-    public function insert($child, $position = 0)
+    function insert($child, $position = 0)
     {
         array_splice($this->_list, $position, 0, $child);
     }
-    public function delete($child)
+    function delete($child)
     {
         $index = array_search($child, $this->_list);
         if ($index !== false) {
             array_splice($this->_list, $index, 1);
         }
     }
-    public function find($id, $recurse = false)
+    function find($id, $recurse = false)
     {
         $list = array();
         $this->_find($list, $id, $recurse);
         return $list;
     }
-    public function _find(array &$list, $id, $recurse = false)
+    function _find(array &$list, $id, $recurse = false)
     {
         foreach ($this->_list as $index => $element) {
             if ($element instanceof C_MVC_View_Element) {
@@ -731,26 +755,26 @@ class C_MVC_View_Element
             }
         }
     }
-    public function get_context($name)
+    function get_context($name)
     {
         if (isset($this->_context[$name])) {
             return $this->_context[$name];
         }
         return null;
     }
-    public function set_context($name, $value)
+    function set_context($name, $value)
     {
         $this->_context[$name] = $value;
     }
-    public function get_object()
+    function get_object()
     {
         return $this->get_context('object');
     }
     // XXX not implemented
-    public function parse()
+    function parse()
     {
     }
-    public function rasterize()
+    function rasterize()
     {
         $ret = null;
         foreach ($this->_list as $index => $element) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php
index 15d6eabd004b6e495420a2b5f29ba6bebfbf1761..871958a4f7841717c3e5eaadeb152ccaf1a76c88 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php
@@ -15,7 +15,7 @@ class M_NextGen_AddGallery_Page extends C_Base_Module
             'photocrati-nextgen_addgallery_page',
             'NextGEN Add Gallery Page',
             'Provides admin page for adding a gallery and uploading images',
-            '0.7',
+            '0.9',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/package.module.nextgen_addgallery_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/package.module.nextgen_addgallery_page.php
index 5c42acb154454c16d43ba5ef3aa5eb10953d8e31..12648104f15ba8ee9954aa7be94b94db35fad2d4 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/package.module.nextgen_addgallery_page.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/package.module.nextgen_addgallery_page.php
@@ -1,29 +1,39 @@
 <?php
+/**
+ * Class A_Import_Folder_Form
+ * @mixin C_Form
+ * @adapts I_Form for import_folder context
+ */
 class A_Import_Folder_Form extends Mixin
 {
-    public function get_title()
+    function get_title()
     {
-        return __('Import Folder', 'nggallery');
+        return __("Import Folder", 'nggallery');
     }
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_style('jquery.filetree');
         wp_enqueue_style('ngg_progressbar');
         wp_enqueue_script('jquery.filetree');
         wp_enqueue_script('ngg_progressbar');
     }
-    public function render()
+    function render()
     {
         return $this->object->render_partial('photocrati-nextgen_addgallery_page#import_folder', array('browse_sec_token' => C_WordPress_Security_Manager::get_instance()->get_request_token('nextgen_upload_image'), 'import_sec_token' => C_WordPress_Security_Manager::get_instance()->get_request_token('nextgen_upload_image')), TRUE);
     }
 }
+/**
+ * Class A_Import_Media_Library_Form
+ * @mixin C_Form
+ * @adapts I_Form for import_media_library context
+ */
 class A_Import_Media_Library_Form extends Mixin
 {
-    public function get_title()
+    function get_title()
     {
         return __('Import from WordPress Media Library', 'nggallery');
     }
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_media();
         wp_enqueue_script('nextgen_media_library_import-js');
@@ -35,12 +45,12 @@ class A_Import_Media_Library_Form extends Mixin
         }
         wp_localize_script('nextgen_media_library_import-js', 'ngg_importml_i18n', $i18n_array);
     }
-    public function render()
+    function render()
     {
         $i18n = array('select-images-to-continue' => __('Please make a selection to continue', 'nggallery'), 'select-opener' => __('Select images', 'nggallery'), 'selected-image-import' => __('Import %d image(s)', 'nggallery'));
         return $this->object->render_partial('photocrati-nextgen_addgallery_page#import_media_library', array('i18n' => $i18n, 'galleries' => $this->object->get_galleries()), TRUE);
     }
-    public function get_galleries()
+    function get_galleries()
     {
         $security = $this->get_registry()->get_utility('I_Security_Manager');
         $sec_actor = $security->get_current_actor();
@@ -60,9 +70,14 @@ class A_Import_Media_Library_Form extends Mixin
         return $galleries;
     }
 }
+/**
+ * Class A_NextGen_AddGallery_Ajax
+ * @mixin C_Ajax_Controller
+ * @adapts I_Ajax_Controller
+ */
 class A_NextGen_AddGallery_Ajax extends Mixin
 {
-    public function cookie_dump_action()
+    function cookie_dump_action()
     {
         foreach ($_COOKIE as $key => &$value) {
             if (is_string($value)) {
@@ -71,7 +86,7 @@ class A_NextGen_AddGallery_Ajax extends Mixin
         }
         return array('success' => 1, 'cookies' => $_COOKIE);
     }
-    public function upload_image_action()
+    function upload_image_action()
     {
         $retval = array();
         $created_gallery = FALSE;
@@ -93,7 +108,7 @@ class A_NextGen_AddGallery_Ajax extends Mixin
                     }
                 } else {
                     $error = TRUE;
-                    $retval['error'] = __('No gallery name specified', 'nggallery');
+                    $retval['error'] = __("No gallery name specified", 'nggallery');
                 }
             }
             // Upload the image to the gallery
@@ -136,13 +151,13 @@ class A_NextGen_AddGallery_Ajax extends Mixin
                         $gallery_mapper->destroy($gallery_id);
                     }
                 } catch (Exception $ex) {
-                    $retval['error'] = __('An unexpected error occured.', 'nggallery');
+                    $retval['error'] = __("An unexpected error occured.", 'nggallery');
                     $retval['error_details'] = $ex->getMessage();
                     $error = TRUE;
                 }
             }
         } else {
-            $retval['error'] = __('No permissions to upload images. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.', 'nggallery');
+            $retval['error'] = __("No permissions to upload images. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery');
             $error = TRUE;
         }
         if ($error) {
@@ -152,7 +167,7 @@ class A_NextGen_AddGallery_Ajax extends Mixin
         }
         return $retval;
     }
-    public function get_import_root_abspath()
+    function get_import_root_abspath()
     {
         if (is_multisite()) {
             $root = C_Gallery_Storage::get_instance()->get_upload_abspath();
@@ -162,7 +177,7 @@ class A_NextGen_AddGallery_Ajax extends Mixin
         $root = str_replace('/', DIRECTORY_SEPARATOR, $root);
         return untrailingslashit($root);
     }
-    public function browse_folder_action()
+    function browse_folder_action()
     {
         $retval = array();
         $html = array();
@@ -177,33 +192,32 @@ class A_NextGen_AddGallery_Ajax extends Mixin
                         natcasesort($files);
                         if (count($files) > 2) {
                             /* The 2 accounts for . and .. */
-                            $html[] = '<ul class="jqueryFileTree" style="display: none;">';
+                            $html[] = "<ul class=\"jqueryFileTree\" style=\"display: none;\">";
                             foreach ($files as $file) {
                                 $file_path = $fs->join_paths($browse_path, $file);
                                 $rel_file_path = str_replace($root, '', $file_path);
                                 if (@file_exists($file_path) && $file != '.' && $file != '..' && is_dir($file_path)) {
-                                    $html[] = '<li class="directory collapsed"><a href="#" rel="' . htmlentities($rel_file_path) . '/">' . htmlentities($file) . '</a></li>';
+                                    $html[] = "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . htmlentities($rel_file_path) . "/\">" . htmlentities($file) . "</a></li>";
                                 }
                             }
-                            $html[] = '</ul>';
+                            $html[] = "</ul>";
                         }
-                        $retval['html'] = implode('
-', $html);
+                        $retval['html'] = implode("\n", $html);
                     } else {
-                        $retval['error'] = __('Directory does not exist.', 'nggallery');
+                        $retval['error'] = __("Directory does not exist.", 'nggallery');
                     }
                 } else {
-                    $retval['error'] = __('No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.', 'nggallery');
+                    $retval['error'] = __("No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery');
                 }
             } else {
-                $retval['error'] = __('No directory specified.', 'nggallery');
+                $retval['error'] = __("No directory specified.", 'nggallery');
             }
         } else {
-            $retval['error'] = __('No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.', 'nggallery');
+            $retval['error'] = __("No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery');
         }
         return $retval;
     }
-    public function import_folder_action()
+    function import_folder_action()
     {
         $retval = array();
         if ($this->validate_ajax_request('nextgen_upload_image', TRUE)) {
@@ -212,31 +226,35 @@ class A_NextGen_AddGallery_Ajax extends Mixin
                 $fs = C_Fs::get_instance();
                 try {
                     $keep_files = $this->param('keep_location') == 'on';
+                    $gallery_title = $this->param('gallery_title', NULL);
+                    if (empty($gallery_title)) {
+                        $gallery_title = NULL;
+                    }
                     $root = $this->get_import_root_abspath();
                     $import_path = $fs->join_paths($root, $folder);
                     if (strpos(realpath($import_path), realpath($root)) !== FALSE) {
-                        $retval = $storage->import_gallery_from_fs($import_path, FALSE, !$keep_files);
+                        $retval = $storage->import_gallery_from_fs($import_path, FALSE, !$keep_files, $gallery_title);
                         if (!$retval) {
-                            $retval = array('error' => 'Could not import folder. No images found.');
+                            $retval = array('error' => "Could not import folder. No images found.");
                         }
                     } else {
-                        $retval['error'] = __('No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.', 'nggallery');
+                        $retval['error'] = __("No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery');
                     }
                 } catch (E_NggErrorException $ex) {
                     $retval['error'] = $ex->getMessage();
                 } catch (Exception $ex) {
-                    $retval['error'] = __('An unexpected error occured.', 'nggallery');
+                    $retval['error'] = __("An unexpected error occured.", 'nggallery');
                     $retval['error_details'] = $ex->getMessage();
                 }
             } else {
-                $retval['error'] = __('No folder specified', 'nggallery');
+                $retval['error'] = __("No folder specified", 'nggallery');
             }
         } else {
-            $retval['error'] = __('No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.', 'nggallery');
+            $retval['error'] = __("No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery');
         }
         return $retval;
     }
-    public function import_media_library_action()
+    function import_media_library_action()
     {
         $retval = array();
         $created_gallery = FALSE;
@@ -314,45 +332,60 @@ class A_NextGen_AddGallery_Ajax extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_NextGen_AddGallery_Controller
+ * @mixin C_NextGen_Admin_Page_Controller
+ * @adapts I_NextGen_Admin_Page
+ */
 class A_NextGen_AddGallery_Controller extends Mixin
 {
-    public function get_page_title()
+    function get_page_title()
     {
         return __('Add Gallery / Images', 'nggallery');
     }
-    public function get_required_permission()
+    function get_required_permission()
     {
         return 'NextGEN Upload images';
     }
-    public function enqueue_backend_resources()
+    function enqueue_backend_resources()
     {
         $this->call_parent('enqueue_backend_resources');
         wp_enqueue_style('nextgen_addgallery_page');
         wp_enqueue_script('nextgen_addgallery_page');
         wp_enqueue_script('frame_event_publisher');
     }
-    public function show_save_button()
+    function show_save_button()
     {
         return FALSE;
     }
 }
+/**
+ * Class A_NextGen_AddGallery_Pages
+ * @mixin C_Page_Manager
+ * @adapts I_Page_Manager
+ */
 class A_NextGen_AddGallery_Pages extends Mixin
 {
-    public function setup()
+    function setup()
     {
         $this->object->add(NGG_ADD_GALLERY_SLUG, array('adapter' => 'A_NextGen_AddGallery_Controller', 'parent' => NGGFOLDER, 'add_menu' => TRUE, 'before' => 'nggallery-manage-gallery'));
         return $this->call_parent('setup');
     }
 }
+/**
+ * Class A_Upload_Images_Form
+ * @mixin C_Form
+ * @adapts I_Form for "upload_images" context
+ */
 class A_Upload_Images_Form extends Mixin
 {
-    public function get_title()
+    function get_title()
     {
-        return __('Upload Images', 'nggallery');
+        return __("Upload Images", 'nggallery');
     }
-    public function get_i18n_strings()
+    function get_i18n_strings()
     {
-        return array('no_image_uploaded' => __('No images were uploaded successfully.', 'nggallery'), 'one_image_uploaded' => __('1 image was uploaded successfully.', 'nggallery'), 'x_images_uploaded' => __('{count} images were uploaded successfully.', 'nggallery'), 'image_errors' => __('The following errors occured:', 'nggallery'), 'manage_gallery' => __('Manage gallery', 'nggallery'));
+        return array('no_image_uploaded' => __('No images were uploaded successfully.', 'nggallery'), 'one_image_uploaded' => __('1 image was uploaded successfully.', 'nggallery'), 'x_images_uploaded' => __('{count} images were uploaded successfully.', 'nggallery'), 'image_errors' => __('The following errors occured:', 'nggallery'), 'manage_gallery' => __('Manage gallery {name}', 'nggallery'));
     }
     /**
      * Plupload stores its i18n JS *mostly* as "en.js" or "ar.js" - but some as zh_CN.js so we must check both if the
@@ -360,7 +393,7 @@ class A_Upload_Images_Form extends Mixin
      *
      * @return bool|string
      */
-    public function _find_plupload_i18n()
+    function _find_plupload_i18n()
     {
         $fs = C_Fs::get_instance();
         $router = C_Router::get_instance();
@@ -380,7 +413,7 @@ class A_Upload_Images_Form extends Mixin
         }
         return $retval;
     }
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_style('ngg.plupload.queue');
         wp_enqueue_script('browserplus');
@@ -391,11 +424,11 @@ class A_Upload_Images_Form extends Mixin
             wp_enqueue_script('ngg.plupload.i18n', $i18n, array('ngg.plupload.full'), NGG_SCRIPT_VERSION);
         }
     }
-    public function render()
+    function render()
     {
         return $this->object->render_partial('photocrati-nextgen_addgallery_page#upload_images', array('plupload_options' => json_encode($this->object->get_plupload_options()), 'galleries' => $this->object->get_galleries(), 'sec_token' => C_WordPress_Security_Manager::get_instance()->get_request_token('nextgen_upload_image')), TRUE);
     }
-    public function get_plupload_options()
+    function get_plupload_options()
     {
         $retval = array();
         $retval['runtimes'] = 'gears,browserplus,html5,flash,silverlight,html4';
@@ -407,25 +440,25 @@ class A_Upload_Images_Form extends Mixin
         $retval['prevent_duplicates'] = TRUE;
         return $retval;
     }
-    public function get_plupload_filters()
+    function get_plupload_filters()
     {
         $retval = new stdClass();
         $retval->mime_types = array();
         $imgs = new stdClass();
-        $imgs->title = 'Image files';
-        $imgs->extensions = 'jpg,jpeg,gif,png,JPG,JPEG,GIF,PNG';
+        $imgs->title = "Image files";
+        $imgs->extensions = "jpg,jpeg,gif,png,JPG,JPEG,GIF,PNG";
         $retval->mime_types[] = $imgs;
         $settings = C_NextGen_Settings::get_instance();
         if (!is_multisite() || is_multisite() && $settings->get('wpmuZipUpload')) {
             $zips = new stdClass();
-            $zips->title = 'Zip files';
-            $zips->extensions = 'zip,ZIP';
+            $zips->title = "Zip files";
+            $zips->extensions = "zip,ZIP";
             $retval->mime_types[] = $zips;
         }
         $retval->xss_protection = TRUE;
         return $retval;
     }
-    public function get_galleries()
+    function get_galleries()
     {
         $security = $this->get_registry()->get_utility('I_Security_Manager');
         $sec_actor = $security->get_current_actor();
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.css
index 85f34f9e730acb184f84cf9ebe662e8e35dd1c30..fbc54086268c93933b10b4aef0d8d764398f9501 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.css
@@ -1 +1 @@
-UL.jqueryFileTree{font-family:Verdana,sans-serif;font-size:11px;line-height:18px;padding:0;margin:0}UL.jqueryFileTree LI{list-style:none;padding:0;padding-left:20px;margin:0;white-space:nowrap}UL.jqueryFileTree A{color:#333;text-decoration:none;display:block;padding:0 2px}UL.jqueryFileTree A:hover{background:#BDF}UL.jqueryFileTree A.selected_folder{background-color:#eee}.jqueryFileTree LI.directory{background:url(images/directory.png) left top no-repeat}.jqueryFileTree LI.expanded{background:url(images/folder_open.png) left top no-repeat}.jqueryFileTree LI.file{background:url(images/file.png) left top no-repeat}.jqueryFileTree LI.wait{background:url(images/spinner.gif) left top no-repeat}.jqueryFileTree LI.ext_3gp{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_afp{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_afpa{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_asp{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_aspx{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_avi{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_bat{background:url(images/application.png) left top no-repeat}.jqueryFileTree LI.ext_bmp{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_c{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_cfm{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_cgi{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_com{background:url(images/application.png) left top no-repeat}.jqueryFileTree LI.ext_cpp{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_css{background:url(images/css.png) left top no-repeat}.jqueryFileTree LI.ext_doc{background:url(images/doc.png) left top no-repeat}.jqueryFileTree LI.ext_exe{background:url(images/application.png) left top no-repeat}.jqueryFileTree LI.ext_gif{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_fla{background:url(images/flash.png) left top no-repeat}.jqueryFileTree LI.ext_h{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_htm{background:url(images/html.png) left top no-repeat}.jqueryFileTree LI.ext_html{background:url(images/html.png) left top no-repeat}.jqueryFileTree LI.ext_jar{background:url(images/java.png) left top no-repeat}.jqueryFileTree LI.ext_jpg{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_jpeg{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_js{background:url(images/script.png) left top no-repeat}.jqueryFileTree LI.ext_lasso{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_log{background:url(images/txt.png) left top no-repeat}.jqueryFileTree LI.ext_m4p{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_mov{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_mp3{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_mp4{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_mpg{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_mpeg{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_ogg{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_pcx{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_pdf{background:url(images/pdf.png) left top no-repeat}.jqueryFileTree LI.ext_php{background:url(images/php.png) left top no-repeat}.jqueryFileTree LI.ext_png{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_ppt{background:url(images/ppt.png) left top no-repeat}.jqueryFileTree LI.ext_psd{background:url(images/psd.png) left top no-repeat}.jqueryFileTree LI.ext_pl{background:url(images/script.png) left top no-repeat}.jqueryFileTree LI.ext_py{background:url(images/script.png) left top no-repeat}.jqueryFileTree LI.ext_rb{background:url(images/ruby.png) left top no-repeat}.jqueryFileTree LI.ext_rbx{background:url(images/ruby.png) left top no-repeat}.jqueryFileTree LI.ext_rhtml{background:url(images/ruby.png) left top no-repeat}.jqueryFileTree LI.ext_rpm{background:url(images/linux.png) left top no-repeat}.jqueryFileTree LI.ext_ruby{background:url(images/ruby.png) left top no-repeat}.jqueryFileTree LI.ext_sql{background:url(images/db.png) left top no-repeat}.jqueryFileTree LI.ext_swf{background:url(images/flash.png) left top no-repeat}.jqueryFileTree LI.ext_tif{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_tiff{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_txt{background:url(images/txt.png) left top no-repeat}.jqueryFileTree LI.ext_vb{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_wav{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_wmv{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_xls{background:url(images/xls.png) left top no-repeat}.jqueryFileTree LI.ext_xml{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_zip{background:url(images/zip.png) left top no-repeat}
\ No newline at end of file
+UL.jqueryFileTree{font-family:Verdana,sans-serif;font-size:11px;line-height:18px;padding:0;margin:0}UL.jqueryFileTree LI{list-style:none;padding:0 0 0 20px;margin:0;white-space:nowrap}UL.jqueryFileTree A{color:#333;text-decoration:none;display:block;padding:0 2px}UL.jqueryFileTree A:hover{background:#BDF}UL.jqueryFileTree A.selected_folder{background-color:#EEE}.jqueryFileTree LI.directory{background:url(images/directory.png) left top no-repeat}.jqueryFileTree LI.expanded{background:url(images/folder_open.png) left top no-repeat}.jqueryFileTree LI.file{background:url(images/file.png) left top no-repeat}.jqueryFileTree LI.wait{background:url(images/spinner.gif) left top no-repeat}.jqueryFileTree LI.ext_3gp{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_afp,.jqueryFileTree LI.ext_afpa,.jqueryFileTree LI.ext_asp,.jqueryFileTree LI.ext_aspx{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_avi{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_bat{background:url(images/application.png) left top no-repeat}.jqueryFileTree LI.ext_bmp{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_c,.jqueryFileTree LI.ext_cfm,.jqueryFileTree LI.ext_cgi{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_com{background:url(images/application.png) left top no-repeat}.jqueryFileTree LI.ext_cpp{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_css{background:url(images/css.png) left top no-repeat}.jqueryFileTree LI.ext_doc{background:url(images/doc.png) left top no-repeat}.jqueryFileTree LI.ext_exe{background:url(images/application.png) left top no-repeat}.jqueryFileTree LI.ext_gif{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_fla{background:url(images/flash.png) left top no-repeat}.jqueryFileTree LI.ext_h{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_htm,.jqueryFileTree LI.ext_html{background:url(images/html.png) left top no-repeat}.jqueryFileTree LI.ext_jar{background:url(images/java.png) left top no-repeat}.jqueryFileTree LI.ext_jpeg,.jqueryFileTree LI.ext_jpg{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_js{background:url(images/script.png) left top no-repeat}.jqueryFileTree LI.ext_lasso{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_log{background:url(images/txt.png) left top no-repeat}.jqueryFileTree LI.ext_m4p{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_mov{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_mp3{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_mp4,.jqueryFileTree LI.ext_mpeg,.jqueryFileTree LI.ext_mpg{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_ogg{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_pcx{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_pdf{background:url(images/pdf.png) left top no-repeat}.jqueryFileTree LI.ext_php{background:url(images/php.png) left top no-repeat}.jqueryFileTree LI.ext_png{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_ppt{background:url(images/ppt.png) left top no-repeat}.jqueryFileTree LI.ext_psd{background:url(images/psd.png) left top no-repeat}.jqueryFileTree LI.ext_pl,.jqueryFileTree LI.ext_py{background:url(images/script.png) left top no-repeat}.jqueryFileTree LI.ext_rb,.jqueryFileTree LI.ext_rbx,.jqueryFileTree LI.ext_rhtml{background:url(images/ruby.png) left top no-repeat}.jqueryFileTree LI.ext_rpm{background:url(images/linux.png) left top no-repeat}.jqueryFileTree LI.ext_ruby{background:url(images/ruby.png) left top no-repeat}.jqueryFileTree LI.ext_sql{background:url(images/db.png) left top no-repeat}.jqueryFileTree LI.ext_swf{background:url(images/flash.png) left top no-repeat}.jqueryFileTree LI.ext_tif,.jqueryFileTree LI.ext_tiff{background:url(images/picture.png) left top no-repeat}.jqueryFileTree LI.ext_txt{background:url(images/txt.png) left top no-repeat}.jqueryFileTree LI.ext_vb{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_wav{background:url(images/music.png) left top no-repeat}.jqueryFileTree LI.ext_wmv{background:url(images/film.png) left top no-repeat}.jqueryFileTree LI.ext_xls{background:url(images/xls.png) left top no-repeat}.jqueryFileTree LI.ext_xml{background:url(images/code.png) left top no-repeat}.jqueryFileTree LI.ext_zip{background:url(images/zip.png) left top no-repeat}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.js
index fc89e05b04cf189215e52c9e699a67768a356b60..5e84f61e7a2d2da38d87c397031b18448d95e7b9 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0(S)(5($){$.K($.10,{11:5(o,h){0(!o)L o={};0(o.g==3)o.g=\'/\';0(o.i==3)o.i=\'x.12\';0(o.9==3)o.9=\'B\';0(o.m==3)o.m=F;0(o.e==3)o.e=F;0(o.r==3)o.r=J;0(o.f==3)o.f=J;0(o.p==3)o.p=P;0(o.y==3)o.y=\'13...\';0(o.8==3)o.8={};$(1).Z(5(){5 v(c,t){$(c).b(\'u\');$(".x.z").U();L 8=$.K(o.8,{Y:t});$.X(o.i,8,5(7){0(14(7)!=\'15\')7=1c.1a(7);I=7.w;$(c).4(\'.z\').w(\'\');$(c).a(\'u\').19(I);0(o.g==t)$(c).4(\'6:E\').18();k $(c).4(\'6:E\').16({n:o.m,s:o.r});G(c)})}5 G(t){$(t).4(\'D A\').T(o.9,5(){0($(1).2().H(\'V\')){0($(1).2().H(\'d\')){0(!o.p){$(1).2().2().4(\'6\').W({n:o.e,s:o.f});$(1).2().2().4(\'D.V\').a(\'q\').b(\'d\')}$(1).2().4(\'6\').U();v($(1).2(),N($(1).l(\'j\').17(/.*\\//)));$(1).2().a(\'d\').b(\'q\')}k{$(1).2().4(\'6\').W({n:o.e,s:o.f});$(1).2().a(\'q\').b(\'d\')}h($(1).l(\'j\'),P)}k{h($(1).l(\'j\'),C)}R C});0(o.9.1b!=\'B\')$(t).4(\'D A\').T(\'B\',5(){R C})}$(1).w(\'<M Q="x z"><O Q="u">\'+o.y+\'<O></M>\');v($(1),N(o.g))})}})})(S);',62,75,'if|this|parent|undefined|find|function|UL|response|post_params|folderEvent|removeClass|addClass||collapsed|collapseSpeed|collapseEasing|root||script|rel|else|attr|expandSpeed|duration||multiFolder|expanded|expandEasing|easing||wait|showTree|html|jqueryFileTree|loadMessage|start||click|false|LI|hidden|500|bindTree|hasClass|data|null|extend|var|ul|escape|li|true|class|return|jQuery|bind|remove|directory|slideUp|post|dir|each|fn|fileTree|php|Loading|typeof|object|slideDown|match|show|append|parse|toLowerCase|JSON'.split('|'),0,{}))
+jQuery&&function(e){e.extend(e.fn,{fileTree:function(a,s){if(!a)var a={};void 0==a.root&&(a.root="/"),void 0==a.script&&(a.script="jqueryFileTree.php"),void 0==a.folderEvent&&(a.folderEvent="click"),void 0==a.expandSpeed&&(a.expandSpeed=500),void 0==a.collapseSpeed&&(a.collapseSpeed=500),void 0==a.expandEasing&&(a.expandEasing=null),void 0==a.collapseEasing&&(a.collapseEasing=null),void 0==a.multiFolder&&(a.multiFolder=!0),void 0==a.loadMessage&&(a.loadMessage="Loading..."),void 0==a.post_params&&(a.post_params={}),e(this).each(function(){function i(s,i){e(s).addClass("wait"),e(".jqueryFileTree.start").remove();var d=e.extend(a.post_params,{dir:i});e.post(a.script,d,function(d){"object"!=typeof d&&(d=JSON.parse(d)),data=d.html,e(s).find(".start").html(""),e(s).removeClass("wait").append(data),a.root==i?e(s).find("UL:hidden").show():e(s).find("UL:hidden").slideDown({duration:a.expandSpeed,easing:a.expandEasing}),t(s)})}function t(t){e(t).find("LI A").bind(a.folderEvent,function(){return e(this).parent().hasClass("directory")?(e(this).parent().hasClass("collapsed")?(a.multiFolder||(e(this).parent().parent().find("UL").slideUp({duration:a.collapseSpeed,easing:a.collapseEasing}),e(this).parent().parent().find("LI.directory").removeClass("expanded").addClass("collapsed")),e(this).parent().find("UL").remove(),i(e(this).parent(),escape(e(this).attr("rel").match(/.*\//))),e(this).parent().removeClass("collapsed").addClass("expanded")):(e(this).parent().find("UL").slideUp({duration:a.collapseSpeed,easing:a.collapseEasing}),e(this).parent().removeClass("expanded").addClass("collapsed")),s(e(this).attr("rel"),!0)):s(e(this).attr("rel"),!1),!1}),"click"!=a.folderEvent.toLowerCase&&e(t).find("LI A").bind("click",function(){return!1})}e(this).html('<ul class="jqueryFileTree start"><li class="wait">'+a.loadMessage+"<li></ul>"),i(e(this),escape(a.root))})}})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.css
index 5eee5d64260f67f087e6cc94c395c975c63a2b7b..85a22c3be0ee2b18c1c4166ec9a0dbbdc855a6e9 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.css
@@ -1 +1 @@
-#ngg-importML-selected-image-import.hidden{display:none}#ngg-importML-select-opener.hidden{display:none}#ngg-importML-gallery-selection{display:inline-block}#ngg-importML-selected-image-import{vertical-align:middle}#ngg-importML-select-opener{vertical-align:middle}#ngg-importML-gallery-name{vertical-align:middle}#ngg-importML-gallery-select{vertical-align:middle}
\ No newline at end of file
+#ngg-importML-select-opener.hidden,#ngg-importML-selected-image-import.hidden{display:none}#ngg-importML-gallery-selection{display:inline-block}#ngg-importML-gallery-name,#ngg-importML-gallery-select,#ngg-importML-select-opener,#ngg-importML-selected-image-import{vertical-align:middle}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.js
index 897ffecd6942b8f3a2f9caaee05416ac50fd59b3..feafd27f45fd801fab35e6255bc4479ded05ab6e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/media-library-import.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(5($){q 2={G:1y,b:[],3:{a:$(\'#F-D-S-t-6\'),j:$(\'#F-D-15-1h\'),l:$(\'#F-D-T-17\'),8:$(\'#F-D-T-1u\')},E:5(){H.4.E();H.4.Q()},4:{E:5(){2.r=O.16.12.1v.2=O.16.12({1i:k,w:7.w,1d:{L:7.1l}})},N:5(C){C=(C+\'\').1t();1s 1n(C).e(/!/g,\'%21\').e(/\'/g,\'%27\').e(/\\(/g,\'%28\').e(/\\)/g,\'%29\').e(/\\*/g,\'%1m\').e(/%20/g,\'+\')},6:{x:0,9:{1o:\'1p\'},13:5(){2.3.a.y(\'z\',k);2.3.j.y(\'z\',k);2.4.6.9.h=2.4.N(2.3.l.n());2.4.6.9.8=2.4.N(2.3.8.n());1q.1r(7.X).1w(5(J){2.4.6.9[J]=7.X[J]});2.W=$.1c({w:7.1b,1e:k,1k:7.1f});$(2).M(\'u\')},11:5(){2.W.1g(1j);2.3.a.y(\'z\',V);2.3.j.y(\'z\',V);q d=7.1a;c(2.4.6.x==1){d=7.1x}d=d.e(\'{1G}\',2.4.6.9.h);d=d.e(\'{25}\',2.4.6.x);U 2.4.6.9.h;U 2.4.6.9.8;$.Z.Y({w:7.24,L:d,P:k});2.4.6.x=0;2.r.M(\'26\');2.b=[];2.3.a.m()},u:5(){q 9=2.4.6.9;9.2a=[2.b.2c()];$.1T(2b.1X,9,5(f){c(1Y f.K==\'1W\'){2.4.6.x++;c(2.3.l.1V(\'v[I="\'+f.h+\'"]\').i==0){2.4.6.9.h=f.h;q v=$(\'<v/>\').y(\'I\',f.h).14(f.8);2.3.l.1U(v);2.3.l.n(f.h);v.1Z(\'S\',k);2.3.8.n(\'\').m()}}A{$.Z.Y({w:7.1z,L:f.K,P:k})}c(2.b.i==0){2.4.6.11()}A{$(2).M(\'u\')}},\'23\')}},Q:5(){$(2).p(\'u\',5(){2.4.6.u()});2.r.p(\'15\',5(){2.b=[];2.G=2.r.1S().1Q(\'1F\');2.G.1R(5(t){t=t.1E();2.b.1D(t.17)});q d=7.1A.e(\'%s\',2.b.i);c(2.b.i==1){d=7.1B}2.3.a.14(d);2.3.a.o()});2.3.j.p(\'18\',5(B){B.R();2.r.1C()});2.3.a.p(\'18\',5(B){B.R();2.4.6.13()});2.3.l.p(\'1H\',5(){c(1I(H.I)==0){2.3.8.o().10();c(2.3.8.n().i==0){2.3.a.m();2.3.j.m()}}A{2.3.8.m(1O,5(){2.3.l.10();2.3.j.o();c(2.b.i>0){2.3.a.o()}})}});2.3.8.p(\'1P\',5(){c(2.3.8.n().i>0){2.3.8.1N(\'K\');2.3.j.o();c(2.b.i>0){2.3.a.o()}}A{2.3.a.m();2.3.j.m()}})}}};$(1M).1J(5(){19.2=2;2.E();19.1K.1L()})})(22);',62,137,'||ngg_importml|selectors|methods|function|import|ngg_importml_i18n|gallery_name|params|ml_btn_import|import_ids|if|msg|replace|data||gallery_id|length|ml_btn_select|true|gallery_select|fadeOut|val|fadeIn|on|var|ml_dialog||image|send_ajax|option|title|import_count|attr|disabled|else|event|str|importML|initialize|ngg|ml_data|this|value|key|error|text|trigger|urlencode|top|sticky|set_events|preventDefault|selected|gallery|delete|false|progress_bar|sectoken|add|gritter|focus|done|media|start|html|select|wp|id|click|window|imported_multiple|progress_title|nggProgressBar|button|infinite|in_progress|close|opener|multiple|100|starting_value|button_text|2A|encodeURIComponent|action|import_media_library|Object|keys|return|toString|name|frames|forEach|imported_singular|null|gritter_error|import_multiple|import_singular|open|push|toJSON|selection|gid|change|parseInt|ready|Frame_Event_Publisher|broadcast|document|removeClass|400|keyup|get|map|state|post|append|find|undefined|url|typeof|prop|||jQuery|json|gritter_title|count|reset||||attachment_ids|photocrati_ajax|pop'.split('|'),0,{}))
+!function(e){var t={ml_data:null,import_ids:[],selectors:{ml_btn_import:e("#ngg-importML-selected-image-import"),ml_btn_select:e("#ngg-importML-select-opener"),gallery_select:e("#ngg-importML-gallery-id"),gallery_name:e("#ngg-importML-gallery-name")},initialize:function(){this.methods.initialize(),this.methods.set_events()},methods:{initialize:function(){t.ml_dialog=top.wp.media.frames.ngg_importml=top.wp.media({multiple:!0,title:ngg_importml_i18n.title,button:{text:ngg_importml_i18n.button_text}})},urlencode:function(e){return e=(e+"").toString(),encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A").replace(/%20/g,"+")},import:{import_count:0,params:{action:"import_media_library"},start:function(){t.selectors.ml_btn_import.attr("disabled",!0),t.selectors.ml_btn_select.attr("disabled",!0),t.methods.import.params.gallery_id=t.methods.urlencode(t.selectors.gallery_select.val()),t.methods.import.params.gallery_name=t.methods.urlencode(t.selectors.gallery_name.val()),Object.keys(ngg_importml_i18n.sectoken).forEach(function(e){t.methods.import.params[e]=ngg_importml_i18n.sectoken[e]}),t.progress_bar=e.nggProgressBar({title:ngg_importml_i18n.progress_title,infinite:!0,starting_value:ngg_importml_i18n.in_progress}),e(t).trigger("send_ajax")},done:function(){t.progress_bar.close(100),t.selectors.ml_btn_import.attr("disabled",!1),t.selectors.ml_btn_select.attr("disabled",!1);var l=ngg_importml_i18n.imported_multiple;1==t.methods.import.import_count&&(l=ngg_importml_i18n.imported_singular),l=l.replace("{gid}",t.methods.import.params.gallery_id),l=l.replace("{count}",t.methods.import.import_count),delete t.methods.import.params.gallery_id,delete t.methods.import.params.gallery_name,e.gritter.add({title:ngg_importml_i18n.gritter_title,text:l,sticky:!0}),t.methods.import.import_count=0,t.ml_dialog.trigger("reset"),t.import_ids=[],t.selectors.ml_btn_import.fadeOut()},send_ajax:function(){var l=t.methods.import.params;l.attachment_ids=[t.import_ids.pop()],e.post(photocrati_ajax.url,l,function(l){if("undefined"==typeof l.error){if(t.methods.import.import_count++,0==t.selectors.gallery_select.find('option[value="'+l.gallery_id+'"]').length){t.methods.import.params.gallery_id=l.gallery_id;var r=e("<option/>").attr("value",l.gallery_id).html(l.gallery_name);t.selectors.gallery_select.append(r),t.selectors.gallery_select.val(l.gallery_id),r.prop("selected",!0),t.selectors.gallery_name.val("").fadeOut()}}else e.gritter.add({title:ngg_importml_i18n.gritter_error,text:l.error,sticky:!0});0==t.import_ids.length?t.methods.import.done():e(t).trigger("send_ajax")},"json")}},set_events:function(){e(t).on("send_ajax",function(){t.methods.import.send_ajax()}),t.ml_dialog.on("select",function(){t.import_ids=[],t.ml_data=t.ml_dialog.state().get("selection"),t.ml_data.map(function(e){e=e.toJSON(),t.import_ids.push(e.id)});var e=ngg_importml_i18n.import_multiple.replace("%s",t.import_ids.length);1==t.import_ids.length&&(e=ngg_importml_i18n.import_singular),t.selectors.ml_btn_import.html(e),t.selectors.ml_btn_import.fadeIn()}),t.selectors.ml_btn_select.on("click",function(e){e.preventDefault(),t.ml_dialog.open()}),t.selectors.ml_btn_import.on("click",function(e){e.preventDefault(),t.methods.import.start()}),t.selectors.gallery_select.on("change",function(){0==parseInt(this.value)?(t.selectors.gallery_name.fadeIn().focus(),0==t.selectors.gallery_name.val().length&&(t.selectors.ml_btn_import.fadeOut(),t.selectors.ml_btn_select.fadeOut())):t.selectors.gallery_name.fadeOut(400,function(){t.selectors.gallery_select.focus(),t.selectors.ml_btn_select.fadeIn(),t.import_ids.length>0&&t.selectors.ml_btn_import.fadeIn()})}),t.selectors.gallery_name.on("keyup",function(){t.selectors.gallery_name.val().length>0?(t.selectors.gallery_name.removeClass("error"),t.selectors.ml_btn_select.fadeIn(),t.import_ids.length>0&&t.selectors.ml_btn_import.fadeIn()):(t.selectors.ml_btn_import.fadeOut(),t.selectors.ml_btn_select.fadeOut())})}}};e(document).ready(function(){window.ngg_importml=t,t.initialize(),window.Frame_Event_Publisher.broadcast()})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.min.js
index b2150e3d1411f00e3ab39103887e9b7d76091233..1b1a6371808de44b7038f5cb570ec4d09997966a 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('11.10({"1o c":"1�0�0�1�0� 1�0�3�0�0�0�","c q v J i o 1c\'t K.":"1�0�0�1�0� 1�0�3�0�0�0� 1�1�0�1� 0�0�0�0� 1�1�1�1� 1�0�  8�1� 0�4�0�1�","I":"4�1�1�1�1�0�2","H":"1�0�1�1�0�","E":"1�8�1�0�","F 7.":"1�1�1� 0�0� 4�0�1�1�","n 6 G e L l M S e T R.":"1�1�0� 0�0�0�1�2 1�0�0� 1�0�0�1�1�0�1� 1�0�3�1�1� 1�0�3�0�0�0� 1�0� 1�1�k� 1�0�0� 1�1� 1�0�1�1�1�0�1�","D":"1�1�0� 1�0�0�0�0�","O P U i o u r.":"g�k� 1�0�g�1�1� 1�0�1� 1�1�1�1� 1�0� 8�1� 0�1�1�0�0�0�","B":"1�0�1�1�0�1�","z f.":"1�1�1� 0�0�  1�1�4�0�0�0� 0�0�0� 1�0�0�0�0�1�2","y c":"1�1�1�1� 1�0�3�0�0�0�","x":"0�0�1�1�1�1�0�2","C":"0�0�0�0�1�1�0�2","w 9 7.":"1�1�1�1� 0�0� 4�1�1�1� 1�0�0�0�0�","5 h 7.":"1�1�1� 0�0� 1�1�0� 1�0�0�0�0�","N/A":"0�1� 1�0�","p":"1�0�1�1�1�1�0�2","f: Q 9 m:":"1�1�1�1� : 1�0�3�1�1� 1�0�0�0�0� 8�1� j�0�1� :","1p 6":"1�1�3� 1�0�0�0�0�1�2","%s 1g 1h 1f e l.":"%s 1�0�0�0�0� 0�0�1�0�1� 1�1�0�0�1�0� 0�0� 0�1�1�0�1� 1�0�1�0�3�1�1�","5: %s":"0�0�0�: %s","b":"1�1�0�2","1e %d/%d 6":"3�0�0�0� %d/%d 0�0�0�","c V 1d 1i %d 9(s) 1j a 1n. 1m 6 1k 1l.":"1�0�1�0�1�j� 1�0�0�0�1�0�0�0� 0�3�0�0�0� 0�0� %d 0�0�0� 0�0� 0�1�1� 1�0�0�0�2. 1�0�0�0�0�1�2 1�0�1�1�1�0�0�1� 1�1�0�0�1�.","%d 6 1b":"%d 1�0�0�0�0�1�2 0�0� 0�1�1�0�1� 1�0�1�0�3�1�1�","5: %s, h: %d, 1a 9 h: %d":"0�0�0�: %s, 1�0�g� 1�1�0� 0�0�0�0�0�: %d, 1�1�0�: %d","Z 6 Y.":"1�1�1� 1�0�0�0�0� 0�0�1�","W X 12 13 18 19.":"1�0�1�1�0�1�1� 1�0�0�4�0�1�0� 1�0�4�2 0�0�1�1� 1�0�3�8�0�","5 17 7.":"1�1�1�1� 0�0� 1�1� 1�0�0�0�0�1�2","5 m 7.":"1�1�1� 0�0� 1�0�3�1�1� 1�0�0�0�0�","f: 5 16 14:":" 1�1�1�1� : 1�1�0� 1�0�0�0�0� 0�1�0�1� :","n 15":"1�1�0� 0�0�0�1�2"});',62,88,'�|�|ت|ت�|ت�|File|files|error|غ�|file|||Upload||the|Error|ص�|size|wrong|ص�|غ�|queue|extension|Add|or|gb|URL|supported|||not|might|Duplicate|mb|Start|HTTP||Status|kb|Filename|Close|Init|to|Size|tb|be|exist|upload|and||Image|format|Invalid|button|click|start|either|element|Runtime|ran|here|Drag|addI18n|plupload|out|of|large|Files|too|count|available|memory|max|queued|doesn|accepts|Uploaded|in|already|present|only|at|were|stripped|Extra|time|Stop|Select'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"أيقاف التحميل","Upload URL might be wrong or doesn't exist.":"عنوان التحميل ربما يكون خاطئ أو  غير متوفر",tb:"تيرابايت",Size:"الحجم",Close:"أغلاق","Init error.":"خطأ في تهيئة","Add files to the upload queue and click the start button.":"أضف ملفات إلى القائمة إنتظار التحميل ثم أضغط على زر البداية",Filename:"أسم الملف","Image format either wrong or not supported.":"صيغة الصورة أما خطاء أو غير مدعومه",Status:"الحالة","HTTP Error.":"خطأ في  برتوكول نقل الملفات","Start Upload":"أبدا التحميل",mb:"ميجابايت",kb:"كيلوبايت","Duplicate file error.":"خطاء في تكرار الملف","File size error.":"خطأ في حجم الملف","N/A":"لا شي",gb:"جيجابايت","Error: Invalid file extension:":"خطاء : أمتداد الملف غير صالح :","Select files":"أختر الملفات","%s already present in the queue.":"%s الملف موجود بالفعل في قائمة الانتظار","File: %s":"ملف: %s",b:"بايت","Uploaded %d/%d files":"تحميل %d/%d ملف","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"العناصر المقبوله لتحميل هي %d ملف في هذا الوقت. الملفات الاضافية أزيلة.","%d files queued":"%d الملفات في قائمة الانتظار","File: %s, size: %d, max file size: %d":"ملف: %s, أقصى حجم للملف: %d, حجم: %d","Drag files here.":"سحب الملف هنا","Runtime ran out of available memory.":"الذاكرة المتوفره أنتهت لمدة التشغيل","File count error.":"خطاء في عد الملفات","File extension error.":"خطأ في أمتداد الملف","Error: File too large:":" خطاء : حجم الملف كبير :","Add Files":"أضف ملفات"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.min.js
index 660de7c7d02ac9f710ffefcaf3b4bf67384215eb..0c61ae1da7b1d7eb04d11a730f94339a430f534c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1g.1f({"1h 6":"1i f","6 v 1j 1e p w 1d\'t 19.":"v q f k x B 1a 1b.","r":"r","1k":"1l�9","1u":"1t","1v 4.":"1w y�1.","F 2 1x c 1s D 1r 1n c 1m 1o.":"1p 0 u 1q i 17 12 O q M.","P":"Q 0","L S G p w I J.":"R 16 k x B 13 14�15.","o":"o","z l.":"z y�1.","Z 6":"V�U f","C":"C","m":"m","1z 8 4.":"1I 7.","3 h 4.":"5�1 u g�28 0.","N/A":"N/A","n":"n","l: 2a 8 E:":"5�1! 2b 27 0:","26 2":"22 0","%s 23 24 2d c D.":"%s 2c 2f� 2l u 2k.","3: %s":"j: %s","b":"b","2j %d/%d 2":"2e %d/%d 7","6 2h 2i 2m %d 8(s) 20 a 21. 1H 2 1J 1K.":"1L 1G 1F 1B %d 7 1A. 1C 0 1D 1E.","%d 2 1M":"%d 7 1W�1V","3: %s, h: %d, 1X 8 h: %d":"j: %s, g�9: %d, 1U g�9: %d","1O 2 1R.":"1S 0 1y.","1Q 1P 1T 1Z 1Y 1N.":"2g 25�e 29 Y.","3 X 4.":"5�1 u W 10.","3 E 4.":"5�1 u 11 0.","l: 3 T K:":"5�1! j k H:","F 1c":"18 0"});',62,147,'datoteke|ka|files|File|error|Gre�|Upload|datoteka|file|ina|||the|||dodavanje|veli�|size||Datoteka|je|Error|kb|gb|Status|wrong|za|tb||||URL|or|neispravan|gre�|HTTP||ili|mb|queue|extension|Add|either|prevelika|not|supported|large|Image|pokretanje||dugme|Filename|Naziv|Format|format|too|ni|Zapo�|brojanju|count|memorije|Start|datoeka|ekstenziji|na|nije|podr�|an|slike|kliknite|Dodaj|exist|ne|postoji|Files|doesn|be|addI18n|plupload|Stop|Prekini|might|Size|Veli�|start|click|button|Dodajte|red|and|upload|Zatvori|Close|Init|Inicijalizacijska|to|ovdje|Duplicate|istovremeno|samo|Dodatne|su|uklonjene|dozvoljava|trenutno|Extra|Dupla|were|stripped|Dodavanje|queued|memory|Drag|ran|Runtime|here|Dovucite|out|maksimalna|eka|�|max|available|of|at|time|Odaberite|already|present|vi�|Select|ekstenzija|ini|dostupne|Invalid|Neispravan|se|in|Dodano|ve�|Nema|element|accepts|Uploaded|redu|nalazi|only'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Prekini dodavanje","Upload URL might be wrong or doesn't exist.":"URL za dodavanje je neispravan ili ne postoji.",tb:"tb",Size:"Veličina",Close:"Zatvori","Init error.":"Inicijalizacijska greška.","Add files to the upload queue and click the start button.":"Dodajte datoteke u red i kliknite na dugme za pokretanje.",Filename:"Naziv datoteke","Image format either wrong or not supported.":"Format slike je neispravan ili nije podržan.",Status:"Status","HTTP Error.":"HTTP greška.","Start Upload":"Započni dodavanje",mb:"mb",kb:"kb","Duplicate file error.":"Dupla datoteka.","File size error.":"Greška u veličini datoteke.","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"Greška! Neispravan ekstenzija datoteke:","Select files":"Odaberite datoteke","%s already present in the queue.":"%s se već nalazi u redu.","File: %s":"Datoteka: %s",b:"b","Uploaded %d/%d files":"Dodano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Dodavanje trenutno dozvoljava samo %d datoteka istovremeno. Dodatne datoteke su uklonjene.","%d files queued":"%d datoteka čeka","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje.","Runtime ran out of available memory.":"Nema više dostupne memorije.","File count error.":"Greška u brojanju datoeka.","File extension error.":"Greška u ekstenziji datoteke.","Error: File too large:":"Greška! Datoteka je prevelika:","Add Files":"Dodaj datoteke"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.min.js
index c77fb6e079a865c4421dfd970ecaff5fcf4acb82..32d931317a1ee3d8b93f014a36368d3b8e33c95e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B.C({"z 4":"","4 y v w 8 9 x\'t D.":"","E":"","K":"","L":"","J 2.":"","e 0 u 6 F c G H 6 M h.":"","k":"","j i g 8 9 n r.":"","q":"","o 5.":"","p 4":"","m":"","l":"","I 3 2.":"","1 7 2.":"","N/A":"","1a":"","5: 1b 3 f:":"","19 0":"","%s 18 O 16 6 c.":"","1: %s":"","b":"","1d %d/%d 0":"","4 1c 1f 1g %d 3(s) 1e a 17. 13 0 14 T.":"","%d 0 U":"","1: %s, 7: %d, S 3 7: %d":"","R 0 P.":"","Q V W 11 12 10.":"","1 Z 2.":"","1 f 2.":"","5: 1 X Y:":"","e 15":""});',62,79,'files|File|error|file|Upload|Error|the|size|wrong|or|||queue||Add|extension|either|button|format|Image|Filename|kb|mb|not|HTTP|Start|Status|supported|||to|might|be|doesn|URL|Stop||plupload|addI18n|exist|tb|upload|and|click|Duplicate|Init|Size|Close|start||present|here|Runtime|Drag|max|stripped|queued|ran|out|too|large|count|memory|of|available|Extra|were|Files|in|time|already|Select|gb|Invalid|element|Uploaded|at|accepts|only'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"","Upload URL might be wrong or doesn't exist.":"",tb:"",Size:"",Close:"","Init error.":"","Add files to the upload queue and click the start button.":"",Filename:"","Image format either wrong or not supported.":"",Status:"","HTTP Error.":"","Start Upload":"",mb:"",kb:"","Duplicate file error.":"","File size error.":"","N/A":"",gb:"","Error: Invalid file extension:":"","Select files":"","%s already present in the queue.":"","File: %s":"",b:"","Uploaded %d/%d files":"","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"","File: %s, size: %d, max file size: %d":"","Drag files here.":"","Runtime ran out of available memory.":"","File count error.":"","File extension error.":"","Error: File too large:":"","Add Files":""});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.min.js
index bc5425ed5e4baf32eb9e25a9d80f1dba7fbf8781..1a41c091cbe11666f6b28eea94175e321abc8e79 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('Z.10({"F 3":"F 3","3 V X T 7 c U\'t Q.":"3 V X T 7 c U\'t Q.","17":"","19":"18","C":"C","m 1.":"m 1.","W 2 16 e 14 B 15 1a e 1b 1g.":"R�13 8 1f 1e a 1c 1d�E z�y�n�.","1h":"11�Y 12","v i r 7 c q p.":"v i r 7 c q p.","o":"o","u 5.":"u 5.","1n 3":"1A z�y�n�","1z":"","1y":"","1x 4 1.":"","0 6 1.":"0 6 1.","N/A":"N/A","1B":"","5: w 4 9:":"5: w 4 9:","1C 2":"1D 8","%s 1i 1E 1F e B.":"","0: %s":"0: %s","b":"","1v %d/%d 2":"1w�1m %d/%d 1l�","3 f h l %d 4(s) k a g. j 2 x I.":"3 f h l %d 4(s) k a g. j 2 x I.","%d 2 S":"%d 2 S","0: %s, 6: %d, 1j 4 6: %d":"","1k 2 1o.":"1p 1u�1t�1s�E 8.","H L J K M D.":"H L J K M D.","0 G 1.":"0 G 1.","0 9 1.":"0 9 1.","5: 0 P O:":"5: 0 P O:","W 1q":"R�1r 8"});',62,104,'File|error|files|Upload|file|Error|size|wrong|soubory|extension|||or||the|element|time|accepts|format|Extra|at|only|Init|n�|Status|supported|not|either|||HTTP|Image|Invalid|were|v�|nahr�||queue|Close|memory|te|Stop|count|Runtime|stripped|out|of|ran|available||large|too|exist|P�|queued|be|doesn|URL|Add|might|zev|plupload|addI18n|N�|souboru|idejte|upload|and|to|tb|Velikost|Size|click|start|pak|spus�|fronty|do|button|Filename|already|max|Drag|soubor�|no|Start|here|Sem|Files|idat|hn�|et�|p�|Uploaded|Nahr�|Duplicate|kb|mb|Spustit|gb|Select|Vyberte|present|in'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Velikost",Close:"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Přidejte soubory do fronty a pak spusťte nahrávání.",Filename:"Název souboru","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP Error.","Start Upload":"Spustit nahrávání",mb:"",kb:"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vyberte soubory","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Nahráno %d/%d souborů","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Sem přetáhněte soubory.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Přidat soubory"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.min.js
index 5a12d57ab4129036419406ed5fb731d4e455b7b2..456d0270b3da7361b7ba24a8cbb8da469d04d774 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1d.1c({"1e 7":"1f x","7 v 1g 1b q z 1a\'t 16.":"v y 17 18 w p 19 3 1h.","u":"u","1r":"1q","1s":"1t","1u 6.":"1 1p.","C 4 1o c 1k B 1j 1l c 1m 1n.":"14 5 i\'r h k a Z\'r L M.","O":"K\'r 0","Q J F q z I G.":"P 13 3 w p 11 12 Y.","X":"T","n e.":"1 n.","U 7":"V x","m":"m","l":"l","1w 8 6.":"1 0 1C.","2 g 6.":"1 f 0.","N/A":"22/A","j":"j","e: 20 8 D:":"1: E 0 1Z:","1V 4":"1W 5","%s 1X 1Y 25 c B.":"%s 3 y h 3 2e.","2: %s":"9: %s","b":"b","2g %d/%d 4":"2b  %d/%d 0","7 28 29 2a %d 8(s) 2c a 1D. 1E 4 1F 1G.":"1B\'r 1x k 3 1z %d 0 1A y 1I. 1P 5 1Q 1R 1S.","%d 4 1O":"%d 0 1N h","2: %s, g: %d, 1K 8 g: %d":"9: %s, f: %d, f 1H 0: %d","1U 4 2f.":"23 5 21.","1v 27 1T 1M 1L 1J.":"1y o 26.","2 24 6.":"1 W 5.","2 D 6.":"1 E 0.","e: 2 S 10:":"1: 9 3 R H:","C 1i":"15 2d"});',62,141,'ffeil|Gwall|File|yn|files|ffeiliau|error|Upload|file|Ffeil|||the||Error|maint|size|ciw||gb|lanlwytho|kb|mb|HTTP||neu|wrong||||tb|URL|anghywir|Lanlwytho||or||queue|Add|extension|estyniad|either|supported|fawr|not|format|Enw|botwm|dechrau||Filename|Fformat|Image|rhy|too|Statws|Start|Dechrau|cyfri|Status|gynnal|chlicio|large|heb|ei|delwedd|Ychwanegwch|Ychwanegu|exist|lanlwythiad|ynb|ddim|doesn|be|addI18n|plupload|Stop|Atal|might|bodoli|Files|and|upload|click|start|button|to|cych|Maint|Size|Close|Cau|Init|Runtime|Duplicate|elfen|Allan|derbyn|ar|Mae|ddyblyg|time|Extra|were|stripped|mwyaf|tro|memory|max|available|of|mewn|queued|Caiff|ychwanegol|eu|tynnu|out|Drag|Select|Dewis|already|present|annilys|Invalid|yma|Dd|Llusgwch|count|in|gof|ran|element|accepts|only|Lanlwythwyd|at|Ffeiliau|barod|here|Uploaded'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Atal Lanlwytho","Upload URL might be wrong or doesn't exist.":"URL y lanlwythiad ynb anghywir neu ddim yn bodoli.",tb:"tb",Size:"Maint",Close:"Cau","Init error.":"Gwall cych.","Add files to the upload queue and click the start button.":"Ychwanegwch ffeiliau i'r ciw lanlwytho a chlicio'r botwm dechrau.",Filename:"Enw'r ffeil","Image format either wrong or not supported.":"Fformat delwedd yn anghywir neu heb ei gynnal.",Status:"Statws","HTTP Error.":"Gwall HTTP.","Start Upload":"Dechrau Lanlwytho",mb:"mb",kb:"kb","Duplicate file error.":"Gwall ffeil ddyblyg.","File size error.":"Gwall maint ffeil.","N/A":"Dd/A",gb:"gb","Error: Invalid file extension:":"Gwall: estyniad ffeil annilys:","Select files":"Dewis ffeiliau","%s already present in the queue.":"%s yn y ciw yn barod.","File: %s":"Ffeil: %s",b:"b","Uploaded %d/%d files":"Lanlwythwyd  %d/%d ffeil","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Mae'r elfen lanlwytho yn derbyn %d ffeil ar y tro. Caiff ffeiliau ychwanegol eu tynnu.","%d files queued":"%d ffeil mewn ciw","File: %s, size: %d, max file size: %d":"Ffeil: %s, maint: %d, maint mwyaf ffeil: %d","Drag files here.":"Llusgwch ffeiliau yma.","Runtime ran out of available memory.":"Allan o gof.","File count error.":"Gwall cyfri ffeiliau.","File extension error.":"Gwall estyniad ffeil.","Error: File too large:":"Gwall: Ffeil yn rhy fawr:","Add Files":"Ychwanegu Ffeiliau"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.min.js
index c4860e50fd3ddd8d19e7cbb75c3cdafe440919ae..47a1c5e0c386576daf587a59c11dd2ec6a83f6c0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('10.17({"F 3":"F 3","3 G H W 8 6 X\'t V.":"3 G H W 8 6 X\'t V.","18":"","15":"14�12","g":"g","C 1.":"C 1.","e 2 13 c 11 h 1c 1b c 1a 19.":"1d�j f Z Y�16","1g":"1s","u r q 8 6 p v.":"u r q 8 6 p v.","w":"w","B 5.":"B 5.","o 3":"o 3","1q":"","1u":"","1r 4 1.":"","0 7 1.":"0 7 1.","N/A":"N/A","1t":"","5: y 4 9:":"5: y 4 9:","1p 2":"1e�1n f","%s 1h 1o 1f c h.":"","0: %s":"0: %s","b":"","l %d/%d 2":"l %d/%d 2","3 m i n %d 4(s) D a z. T 2 S R.":"3 m i n %d 4(s) D a z. T 2 S R.","%d 2 U":"%d 2 U","0: %s, 7: %d, 1i 4 7: %d":"","1j 2 1m.":"1l�k f 1k.","K L M O J I.":"K L M O J I.","0 E 1.":"0 E 1.","0 9 1.":"0 9 1.","5: 0 P Q:":"5: 0 P Q:","e x":"e x"});',62,93,'File|error|files|Upload|file|Error|or|size|wrong|extension|||the||Add|filer|Close|queue|accepts|||Uploaded|element|only|Start|not|either|format|||Image|supported|Status|Files|Invalid|time||HTTP|Init|at|count|Stop|URL|might|memory|available|Runtime|ran|out||of|too|large|stripped|were|Extra|queued|exist|be|doesn|k�|til|plupload|upload|rrelse|to|St�|Size|en|addI18n|tb|button|start|click|and|Tilf�|V�|in|Filename|already|max|Drag|her|Tr�|here|lg|present|Select|mb|Duplicate|Filnavn|gb|kb'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Størrelse",Close:"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Tilføj filer til køen",Filename:"Filnavn","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vælg filer","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Træk filer her.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.min.js
index d957f9659152af852fe5dea04480b98d62572529..8f883571de3a4d6d74f42f6fa68b27f542eb7d7b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1d.1c({"1e 4":"q 1f","4 l 1g 1b r u 1a\'t 15.":"4-l 14 o n 16 i.","17":"19","18":"1h&G;&1i;e","1s":"1r�p","1t 2.":"1u","h 3 1v g 1q j 1p 1k g 13 1l.":"0 1m&c;k 1o 1n \'q\' 1w.","Z":"R","S O K r u T U.":"10 o n i X&c;12.","m":"m","x f.":"x-5","11 4":"4 M","P":"V","Q":"L","Y 7 2.":"","1 9 2.":"5 F W&G;8�e","N/A":"1j 2d&c;20","2a":"29","f: 2h 7 H:":"5: 1x�27 w:","28 3":"0 26","%s 25 21 v g j.":"","1: %s":"6: %s","b":"B","24 %d/%d 3":"%d/%d 0 2b 2c","4 2l 2m 2k %d 7(s) 2i a 2e. 2f 3 2g 22.":"1Y 1Z 1G 1F %d 6(p) 1H 1I. 8�1J�1E 0 1D 1z.","%d 3 1y":"%d 0 v 1A 1B","1: %s, 9: %d, 1C 7 9: %d":"6: %s, 1L�8�e: %d, 1U 1T�8�e: %d","1W 3 1S.":"1R 1N 1M 0 1O 1P","I C J z y D.":"I C J z y D.","1 E 2.":"1 E 2.","1 H 2.":"5 F w","f: 1 1Q 1X:":"5: 6 1V 1K�:","h 2j":"0 23�k"});',62,147,'Dateien|File|error|files|Upload|Fehler|Datei|file|�|size|||uuml|||Error|the|Add|nicht|queue|gen|URL|Status|oder|falsch|en|Hochladen|wrong|||or|in|Dateiendung|HTTP|available|of|||ran|memory|count|bei|ouml|extension|Runtime|out|either|kB|beginnen||format|mb|kb|Dateiname|Image|not|supported|MB|Dateigr|unterst|Duplicate|Filename|Bildformat|Start|tzt|start|ist|exist|existiert|tb|Size|TB|doesn|be|addI18n|plupload|Stop|stoppen|might|Gr|szlig|Nicht|click|button|hinzuf|auf|und|and|upload|Schlie�|Close|Init|Initialisierungsfehler|to|klicken|Ung�|queued|abgetrennt|der|Warteschlange|max|wurden|hlige|nur|akzeptiert|pro|Durchgang|berz�|gro�|Gr�|die|Sie|hier|hin|too|Ziehen|here|Dateigr�|maximale|zu|Drag|large|Der|Uploader|gbar|present|stripped|hinzuf�|Uploaded|already|hochladen|ltige|Select|GB|gb|sind|hochgeladen|verf|time|Extra|were|Invalid|at|Files|only|element|accepts'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Hochladen stoppen","Upload URL might be wrong or doesn't exist.":"Upload-URL ist falsch oder existiert nicht.",tb:"TB",Size:"Gr&ouml;&szlig;e",Close:"Schließen","Init error.":"Initialisierungsfehler","Add files to the upload queue and click the start button.":"Dateien hinzuf&uuml;gen und auf 'Hochladen' klicken.",Filename:"Dateiname","Image format either wrong or not supported.":"Bildformat falsch oder nicht unterst&uuml;tzt.",Status:"Status","HTTP Error.":"HTTP-Fehler","Start Upload":"Upload beginnen",mb:"MB",kb:"kB","Duplicate file error.":"","File size error.":"Fehler bei Dateigr&ouml;ße","N/A":"Nicht verf&uuml;gbar",gb:"GB","Error: Invalid file extension:":"Fehler: Ungültige Dateiendung:","Select files":"Dateien hochladen","%s already present in the queue.":"","File: %s":"Datei: %s",b:"B","Uploaded %d/%d files":"%d/%d Dateien sind hochgeladen","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Der Uploader akzeptiert nur %d Datei(en) pro Durchgang. Überzählige Dateien wurden abgetrennt.","%d files queued":"%d Dateien in der Warteschlange","File: %s, size: %d, max file size: %d":"Datei: %s, Größe: %d, maximale Dateigröße: %d","Drag files here.":"Ziehen Sie die Dateien hier hin","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Fehler bei Dateiendung","Error: File too large:":"Fehler: Datei zu groß:","Add Files":"Dateien hinzufügen"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.min.js
index a76be16b11d3b77e8420cb7ce91755dba62966bf..1809e67016d04fa9383cc03ce09f8f4745c10c9c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('15.1a({"w 6":"w 6","6 v u r 9 c x\'t y.":"6 v u r 9 c x\'t y.","16":"","17":"0�0�0�5�0�1�","D":"D","C 3.":"C 3.","J 4 12 i Y F X Z i 10 11.":"0�1�0�1�0�0�p� 0�1�1�5�1�0� 1�1�0�0� 0�1�1�0� 0�g�0�1�1�1�1�1�1�0�1�","19":"0�0�0�0�0� 0�1�1�5�0�1�","B q E 9 c l o.":"B q E 9 c l o.","1g":"0�0�1�0�1�1�0�1�0�","n 7.":"n 7.","1b 6":"0�1d�0�0�1�0� 0�g�0�1�1�1�1�1�1�0�1�","1e":"","1f":"","1n 8 3.":"","2 e 3.":"2 e 3.","N/A":"N/A","14":"","7: m 8 f:":"7: m 8 f:","1i 4":"0�1�0�0�0�0�1�h 0�1�1�5�0�","%s 1j 1c 1m i F.":"","2: %s":"2: %s","b":"","13 %d/%d 4":"0�0�0�0�0�p�0� %d/%d 0�1�1�5�0�","6 k j z %d 8(s) H a U. T 4 V W.":"6 k j z %d 8(s) H a U. T 4 V W.","%d 4 R":"%d 4 R","2: %s, e: %d, 1h 8 e: %d":"","1l 4 1k.":"0�1�1�g�h 0�1�1�5�0� 5�1�","G K L Q P O.":"G K L Q P O.","2 I 3.":"2 I 3.","2 f 3.":"2 f 3.","7: 2 M S:":"7: 2 M S:","J 18":"0�1�0�1�0�0�1�1�h 0�1�1�5�0�"});',62,86,'�|�|File|error|files|ε�|Upload|Error|file|wrong|||or||size|extension|ε�|ε|the|accepts|element|not|Invalid|HTTP|supported|κ�|format|be|||might|URL|Stop|doesn|exist|only||Image|Init|Close|either|queue|Runtime|at|count|Add|ran|out|too||memory|available|of|queued|large|Extra|time|were|stripped|and|upload|click|start|button|to|Uploaded|gb|plupload|tb|Size|Files|Filename|addI18n|Start|present|κκ�|mb|kb|Status|max|Select|already|here|Drag|in|Duplicate'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Μέγεθος",Close:"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Προσθήκη αρχείων στην ουρά μεταφόρτωσης",Filename:"Όνομα αρχείου","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Κατάσταση","HTTP Error.":"HTTP Error.","Start Upload":"Εκκίνηση μεταφόρτωσης",mb:"",kb:"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Επιλέξτε Αρχεία","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Ανέβηκαν %d/%d αρχεία","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Σύρετε αρχεία εδώ","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Προσθέστε αρχεία"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.min.js
index 3b00c5bf51f32006d4a4b86db2039e7e87278911..36ec2bd849055a5581eb2c7fdb2876a87fd03110 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1f.1g({"J 3":"J 3","3 B C z f 9 y\'t v.":"3 B C z f 9 y\'t v.","w":"w","x":"x","D":"D","E 2.":"E 2.","e 0 K 5 I 8 F G 5 u L.":"e 0 K 5 I 8 F G 5 u L.","p":"p","h i g f 9 j r.":"h i g f 9 j r.","k":"k","q 7.":"q 7.","o 3":"o 3","n":"n","l":"l","m 4 2.":"m 4 2.","1 6 2.":"1 6 2.","N/A":"N/A","H":"H","7: S 4 c:":"7: S 4 c:","18 0":"18 0","%s 19 M 16 5 8.":"%s 19 M 16 5 8.","1: %s":"1: %s","b":"b","1b %d/%d 0":"1b %d/%d 0","3 15 1a 1c %d 4(s) 1e a 1d. 14 0 12 13.":"3 15 1a 1c %d 4(s) 1e a 1d. 14 0 12 13.","%d 0 T":"%d 0 T","1: %s, 6: %d, R 4 6: %d":"1: %s, 6: %d, R 4 6: %d","Q 0 O.":"Q 0 O.","P U V 10 11 Z.":"P U V 10 11 Z.","1 Y 2.":"1 Y 2.","1 c 2.":"1 c 2.","7: 1 W X:":"7: 1 W X:","e 17":"e 17"});',62,79,'files|File|error|Upload|file|the|size|Error|queue|or|||extension||Add|wrong|either|Image|format|not|Status|kb|Duplicate|mb|Start|Filename|HTTP|supported|||start|exist|tb|Size|doesn|be||URL|might|Close|Init|and|click|gb|upload|Stop|to|button|present||here|Runtime|Drag|max|Invalid|queued|ran|out|too|large|count|memory|of|available|were|stripped|Extra|element|in|Files|Select|already|accepts|Uploaded|only|time|at|plupload|addI18n'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"tb",Size:"Size",Close:"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Add files to the upload queue and click the start button.",Filename:"Filename","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload",mb:"mb",kb:"kb","Duplicate file error.":"Duplicate file error.","File size error.":"File size error.","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Select files","%s already present in the queue.":"%s already present in the queue.","File: %s":"File: %s",b:"b","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"File: %s, size: %d, max file size: %d","Drag files here.":"Drag files here.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.min.js
index deb975a6073e735caf00b2b7509c4052551ab277..47df010324373d876031c7698a3bc30a68c841f0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('W.10({"G 9":"1q 18.","9 w 1a X j i 1k\'t Z.":"w 0 f E.","J":"1j","1i":"1v�o","1d":"1c","1e 7.":"1 0 1f�n.","m 5 1g c 1b p 15 14 c 16 17.":"19 3 a q r 0 1h y 1s 1t 6 1u 1p�n 0 l f","1o":"1l 0 2","1m 1n 13 j i I K.":"L 0 M k O.","H":"D","h 1.":"1 0 h.","F 9":"l f","12":"P","Y":"11","V 8 7.":"1, 2 R","4 g 7.":"1 0 e�o 0 2.","N/A":"C z","Q":"S","1: T 8 x:":"1: U�n 0 2 1r�1F:","28 5":"27 3","%s 29 2a 2b c p.":"%s 26 v 1w 6 q r.","4: %s":"u: %s","b":"B","25 %d/%d 5":"21 %d/%d 3","9 20 22 23 %d 8(s) 2d a 2c. 2f 5 2j 2l.":"2i 2h 2g�2e %d 2(s) 2m 2k. 24�s, k v 1Y 6 1G.","%d 5 1Z":"%d 3 6 1H.","4: %s, g: %d, 1I 8 g: %d":"u: %s, e�o: %d, e�o 1J�1E 0 2: %d","1D 5 1y.":"1x 3 1z�","1A 1C 1B 1K 1L 1U.":"C 1T 1V z.","4 1W 7.":"1 6 1X 0 3.","4 x 7.":"1 0 1S�n 0 2.","1: 4 1R 1N:":"1: 2 1M 1O:","m 1P":"1Q 3"});',62,147,'de|Error|archivo|archivos|File|files|en|error|file|Upload|||the||tama�|carga|size|HTTP|or|wrong|no|Iniciar|Add|||queue|la|lista|||Archivo|se|URL|extension||disponible|||No|Estado|inexistente|Start|Stop|Status|not|tb|supported|Formato|imagen||soportada|MB|gb|duplicado|GB|Invalid|Extensi�|Duplicate|plupload|be|kb|exist|addI18n|KB|mb|either|click|and|start|button|Subida|Agregue|might|upload|Cerrar|Close|Init|inicializaci�|to|subida|Size|TB|doesn|Nombre|Image|format|Filename|bot�|Detener|inv�|pulse|clic|el|Tama�|encuentra|Arrastre|here|aqu�|Runtime|out|ran|Drag|ximo|lida|cuenta|cola|max|m�|of|available|demasiado|large|grande|Files|Agregar|too|extensi�|hay|memory|memoria|count|contador|tienen|queued|element|Subidos|accepts|only|M�|Uploaded|ya|Elija|Select|already|present|in|time|at|lo|Extra|s�|aceptan|Se|were|tiempo|stripped|al'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Detener Subida.","Upload URL might be wrong or doesn't exist.":"URL de carga inexistente.",tb:"TB",Size:"Tamaño",Close:"Cerrar","Init error.":"Error de inicialización.","Add files to the upload queue and click the start button.":"Agregue archivos a la lista de subida y pulse clic en el botón de Iniciar carga",Filename:"Nombre de archivo","Image format either wrong or not supported.":"Formato de imagen no soportada.",Status:"Estado","HTTP Error.":"Error de HTTP.","Start Upload":"Iniciar carga",mb:"MB",kb:"KB","Duplicate file error.":"Error, archivo duplicado","File size error.":"Error de tamaño de archivo.","N/A":"No disponible",gb:"GB","Error: Invalid file extension:":"Error: Extensión de archivo inválida:","Select files":"Elija archivos","%s already present in the queue.":"%s ya se encuentra en la lista.","File: %s":"Archivo: %s",b:"B","Uploaded %d/%d files":"Subidos %d/%d archivos","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Se aceptan sólo %d archivo(s) al tiempo. Más, no se tienen en cuenta.","%d files queued":"%d archivos en cola.","File: %s, size: %d, max file size: %d":"Archivo: %s, tamaño: %d, tamaño máximo de archivo: %d","Drag files here.":"Arrastre archivos aquí","Runtime ran out of available memory.":"No hay memoria disponible.","File count error.":"Error en contador de archivos.","File extension error.":"Error de extensión de archivo.","Error: File too large:":"Error: archivo demasiado grande:","Add Files":"Agregar archivos"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.min.js
index 3a7b33f2d4bae73074f498113fb313f3e2f3ba1e..0b3d7ac2cffc6176ef22e9ac17e7a8cd29530561 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1d.1e({"q 2":"q 2","2 p 1c 1b e 8 17\'t 18.":"0�9 p 1a 1g 1h 1o 1p 1q.","1n":"","1m":"1i","1j":"1k","1l 4.":"16�15 7.","g 3 Q h R z S T h P O.":"J c 0�9 k�K L M U V.","12":"13","o n r e 8 m x.":"o n r e 8 m x.","1s":"1z","w 6.":"w 0�1S 7.","v 2":"v 2","1Q":"","1P":"","1M 5 4.":"","1 i 4.":"1N 7.","N/A":"N/A","1V":"","6: y 5 f:":"6: y 5 f:","22 3":"20 1Z","%s 1W 1X 1Y h z.":"","1: %s":"1y: %s","b":"","1A %d/%d 3":"0�1x 1w %d/%d","2 l 1u 1v %d 5(s) 1B a 1I. 1J 3 1H 1G.":"0�9 l 1F 23 1E 1C %d u 0�1U 1O. 0�1R�0�21 c k�Z Y.","%d 3 X":"19�1f 1T %d u","1: %s, i: %d, 1r 5 i: %d":"","1D 3 1t.":"1K c 1L.","H I C B D E.":"H I C B D E.","1 W 4.":"10 11 7.","1 f 4.":"14 7.","6: 1 G F:":"6: 1 G F:","g j":"g j"});',62,128,'�|File|Upload|files|error|file|Error|viga|or|leslaadimise|||failid||wrong|extension|Add|the|size|Files|j�|element|not|format|Image|URL|Stop|either|||faili|Start|HTTP|supported|Invalid|queue||of|out|available|memory|large|too|Runtime|ran|Lisa|rjekorda|ja|klõpsa||button|start|to|upload|and|click|alustamise|nupule|count|queued|laadimata|etakse|Failide|arvu|Filename|Failinimi|Faililaiendi|htestamise|L�|doesn|exist|J�|võib|be|might|plupload|addI18n|rjekorras|olla|vale|Suurus|Close|Sulge|Init|Size|tb|või|seda|pole|max|Status|here|accepts|only|laaditud|les|Fail|Olek|Uploaded|at|ainult|Drag|võtta|saab|stripped|were|time|Extra|Lohista|siia|Duplicate|Failisuuruse|korraga|kb|mb|lej�|henduse|on|he|gb|already|present|in|faile|Vali|nud|Select|vastu'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Üleslaadimise URL võib olla vale või seda pole.",tb:"",Size:"Suurus",Close:"Sulge","Init error.":"Lähtestamise viga.","Add files to the upload queue and click the start button.":"Lisa failid üleslaadimise järjekorda ja klõpsa alustamise nupule.",Filename:"Failinimi","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Olek","HTTP Error.":"HTTP ühenduse viga.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"Failisuuruse viga.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vali faile","%s already present in the queue.":"","File: %s":"Fail: %s",b:"","Uploaded %d/%d files":"Üles laaditud %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Üleslaadimise element saab vastu võtta ainult %d faili ühe korraga. Ülejäänud failid jäetakse laadimata.","%d files queued":"Järjekorras on %d faili","File: %s, size: %d, max file size: %d":"","Drag files here.":"Lohista failid siia.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Failide arvu viga.","File extension error.":"Faililaiendi viga.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.min.js
index a5fbea5d18ace8f06bda0dd0f3888233990c1455..4d4a704f1df5e37532128edf2ffb9af0cdb372b7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('17.12({"1l 7":"5�1�1� 0�1�5�0�1�","7 G B n e f r\'t u.":"7 G B n e f r\'t u.","S":"","R":"0�0�2�0�","Q":"0�0�5�","P 9.":"0�0�0� 0�0� 0�0�j�0�g 0�0�3�0�2�1�g","z 6 O h U o Y X h W V.":"0�0�0�1�1� 3�1�2�0� 1�0�2�1� 1�0� 0�0� 0�1� F� 0�1�1�1�0� 1� 0�3�1�1� 0�0�1�0� 0�0� 3�1�2�3� 3�1�2�0�.","Z":"1�0�1� 1�0�2�1�","x q v e f m p.":"x q v e f m p.","L":"1�0�0�2�g","I c.":"I 0�0�0�2�","M 7":"0�0�1�0� 0�1�5�0�1�","T":"","1p":"","1i 8 9.":"","4 i 9.":"0�0�0�2� 0�0�2�0� 1�0�2�1�","N/A":"N/A","1h":"","c: H 8 k:":"c: H 8 k:","1g 6":"0�1�j�0�0� 1�0�2�1�","%s 1e 1f 1j h o.":"","4: %s":" 1�0�2�1� 1�0� : %s","b":"","1k %d/%d 6":"1�1�5�1� 0�0� %d/%d 0�0� 1�0�2�1�1�0�","7 10 1o 1n %d 8(s) 1m a 1d. 1c 6 15 14.":"0�1�13� 0�0�0�3�0�0�0� 1�1�0� %d 1�0�2�1� 0�1� 0�0� 2�3� 0�1�0�1�  1�2� 1�0�2�0�0�. 0�0�2�0� 1�0�2�1� 1�0� 1�0�0�0� 0�0� 0�2�1� 1�1�0�1�0� 1�0�5�0�.","%d 6 11":"%d 1�0�2�1� 0�0� F�","4: %s, i: %d, 16 8 i: %d":"","1b 6 1a.":"0�3�0�2�0� 1�0�2�1� 1�0� 0�1� 0�1� 0�2�1�0�0�","D E w K y l.":"D E w K y l.","4 19 9.":"0�0�0�2� j�0�0�0� 1�0�2�1�","4 k 9.":"0�0�0� 1�2�0�1�1�0� 1�0�2�1�","c: 4 J C:":"c: 4 J C:","z 18":"0�1�0�1�0�1� 1�0�2�1�"});',62,88,'�|�|�|�|File|ت�|files|Upload|file|error|||Error||wrong|or|ت|the|size|ت�|extension|memory|not|be|queue|supported|format|doesn|||exist|either|out|Image|available|Add||might|large|Runtime|ran|ص�|URL|Invalid|HTTP|too|of|Status|Start||to|Init|Close|Size|tb|mb|upload|button|start|click|and|Filename|element|queued|addI18n|ص�|stripped|were|max|plupload|Files|count|here|Drag|Extra|time|already|present|Select|gb|Duplicate|in|Uploaded|Stop|at|only|accepts|kb'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"توقف انتقال","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"سایز",Close:"بستن","Init error.":"خطا در استارت اسکریپت","Add files to the upload queue and click the start button.":"اضافه کنید فایل ها را به صف آپلود و دکمه شروع را کلیک کنید.",Filename:"نام فایل","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"وضعیت","HTTP Error.":"HTTP خطای","Start Upload":"شروع انتقال",mb:"",kb:"","Duplicate file error.":"","File size error.":"خطای سایز فایل","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"انتخاب فایل","%s already present in the queue.":"","File: %s":" فایل ها : %s",b:"","Uploaded %d/%d files":"منتقل شد %d/%d از فایلها","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"عنصر بارگذار فقط %d فایل رو در یک زمان  می پذیرد. سایر فایل ها مجرد از این موضوع هستند.","%d files queued":"%d فایل در صف","File: %s, size: %d, max file size: %d":"","Drag files here.":"بکشید فایل ها رو به اینجا","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"خطای تعداد فایل","File extension error.":"خطا پیشوند فایل","Error: File too large:":"Error: File too large:","Add Files":"افزودن فایل"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.min.js
index 4fd468c47cfbd2018fbe01fac480492fbea85a2d..e7efce57222a764a885add47791f3c20e99652f0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('Z.10({"z 0":"z 0","0 y L J 7 6 F\'t u.":"0 y L J 7 6 F\'t u.","11":"","Y":"X","T":"U","h 4.":"h k.","c 2 S 9 W q 12 13 9 1a 1b.":"1c�8� i 19 18 14 15-16.","17":"1d","G n m 7 6 l o.":"G n m 7 6 l o.","Q":"R","r 3.":"r k.","j 0":"j 0","M":"","P":"","O 5 4.":"","1 e 4.":"V.","N/A":"N/A","1K":"","3: H 5 f:":"3: H 5 f:","1D 2":"1H i","%s 1G 1Q 1F 9 q.":"","1: %s":"1e: %s","b":"","1E %d/%d 2":"1A %d/%d g","0 1C 1I 1J %d 5(s) 1O a 1P. 1N 2 1M 1L.":"1B 1y 1l 1z %d 1m(a) 1n. 1k�8�1j�1f I 1g.","%d 2 1h":"%d g 1i","1: %s, e: %d, 1o 5 e: %d":"","1p 2 1v.":"1w I 1x�1u.","K D E x w v.":"K D E x w v.","1 1t 4.":"1q.","1 f 4.":"1r�8�1s.","3: 1 C B:":"3: 1 C B:","c p":"c p"});',62,115,'Upload|File|files|Error|error|file|or|wrong|�|the|||Add||size|extension|tiedostoa|Init|tiedostoja|Start|virhe|not|either|format|supported|Files|queue|HTTP|||exist|memory|available|of|URL|Stop||large|too|ran|out|doesn|Image|Invalid|tiedostot|be|Runtime|might|mb||Duplicate|kb|Status|Tila|to|Close|Sulje|Tiedostokokovirhe|upload|Koko|Size|plupload|addI18n|tb|and|click|klikkaa|aloita|nappia|Filename|ja|latausjonoon|start|button|Lis�|Tiedostonimi|Tiedosto|iset|ohitettiin|queued|jonossa|r�|Ylim�|ladata|tiedosto|kerrallaan|max|Drag|Tiedostolaskentavirhe|Tiedostop�|tevirhe|count|nne|here|Raahaa|t�|sallii|vain|Ladattu|Latauselementti|element|Select|Uploaded|in|already|Valitse|accepts|only|gb|stripped|were|Extra|at|time|present'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Koko",Close:"Sulje","Init error.":"Init virhe.","Add files to the upload queue and click the start button.":"Lisää tiedostoja latausjonoon ja klikkaa aloita-nappia.",Filename:"Tiedostonimi","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Tila","HTTP Error.":"HTTP virhe.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"Tiedostokokovirhe.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Valitse tiedostoja","%s already present in the queue.":"","File: %s":"Tiedosto: %s",b:"","Uploaded %d/%d files":"Ladattu %d/%d tiedostoa","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Latauselementti sallii ladata vain %d tiedosto(a) kerrallaan. Ylimääräiset tiedostot ohitettiin.","%d files queued":"%d tiedostoa jonossa","File: %s, size: %d, max file size: %d":"","Drag files here.":"Raahaa tiedostot tänne.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Tiedostolaskentavirhe.","File extension error.":"Tiedostopäätevirhe.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.min.js
index a072e630768e9b060a78506e00e5096cd82192b0..53f02ddda6788dd15211ba0ce8fd71215f65f2a7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1l.1k({"1m g":"1n l\'f.","g O 1p 1o J P 1j\'t 1i.":"L\'O d\'f F c B�e c n\'1d D.","1c":"1b","1e":"1f","1h":"1g","1q 8.":"1 d\'1r.","w 6 1B q 1A v 1C 1D q 1F 1E.":"1z C 0 4� k 5 d\'p 2 j�1y�1t 1s 1u z 1a 1x \'m�G l\'f\'","1w":"1G 15 7","Q M R J P S T.":"I M d\'U F c B� c D 19�V�.","14":"4�16","x r.":"1 x.","17 g":"m�G l\'f","13":"12","X":"W","Y 5 8.":"1: 9 4� Z.","3 h 8.":"1 2 i 2 7.","N/A":"11 10","1v":"1S","r: 1H 5 u:":"1: 2m 2 7 2o 2p:","2q 6":"2l�2k y 0","%s 2f 2e 2g q v.":"%s 2j�2i� 2r�2A 2B k 5 d\'p.","3: %s":"9: %s","b":"o","2u %d/%d 6":"%d 0 z %d K 4�j� H�s","g 2v 2t 2y %d 5(s) 2x a 2C. 2w 6 2z 2h.":"2c %d 7(s) 1R 1Q H�(s) 4� k 1T. 1V 0 1U�1P K 4�j� 1I�s.","%d 6 1K":"%d 0 1L p","3: %s, h: %d, E 5 h: %d":"9: %s, i: %d, i E. d\'1M 7: %d","1W 6 27.":"m�28 y 0 29.","2b 2a 25 24 1Z 1Y.":"I 20 a 21� 2 23�22 2n.","3 26 8.":"1: 1X 2 0.","3 u 8.":"1 d\'u 2 7","r: 3 1N 1J:":"1: 9 1O 2d:","w 2s":"18 C 0"});',62,163,'fichiers|Erreur|de|File|�|file|files|fichier|error|Fichier|||soit|||envoi|Upload|size|taille|t�|la||D�|||attente|the|Error|||extension|queue|Add|HTTP|les|sur||erron�|des|pas|max|est|marrer|envoy�|Le|wrong|ont||format||URL|or|Image|either|not|supported|image|r�|Ko|kb|Duplicate|double|applicable|Non|Mo|mb|Status|du|tat|Start|Ajouter|g�|le|To|tb|existe|Size|Taille|Fermer|Close|exist|doesn|addI18n|plupload|Stop|Arrêter|be|might|Init|initialisation|et|chargement|appuyez|gb|Filename|bouton|l�|Ajoutez|upload|to|and|click|button|start|Nom|Invalid|ignor�|large|queued|en|un|too|trop|mentaires|être|peuvent|Go|fois|suppl�|Les|Drag|Nombre|memory|available|traitement|manqu�|moire|m�|of|out|count|here|posez|ici|ran|Runtime|Que|volumineux|present|already|in|stripped|j�|d�|lectionnez|S�|Extension|disponible|non|valide|Select|pr�|Files|accepts|Uploaded|element|Extra|at|only|were|sent|dans|time'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Arrêter l'envoi.","Upload URL might be wrong or doesn't exist.":"L'URL d'envoi est soit erronée soit n'existe pas.",tb:"To",Size:"Taille",Close:"Fermer","Init error.":"Erreur d'initialisation.","Add files to the upload queue and click the start button.":"Ajoutez des fichiers à la file d'attente de téléchargement et appuyez sur le bouton 'Démarrer l'envoi'",Filename:"Nom du fichier","Image format either wrong or not supported.":"Le format d'image est soit erroné soit pas géré.",Status:"État","HTTP Error.":"Erreur HTTP.","Start Upload":"Démarrer l'envoi",mb:"Mo",kb:"Ko","Duplicate file error.":"Erreur: Fichier à double.","File size error.":"Erreur de taille de fichier.","N/A":"Non applicable",gb:"Go","Error: Invalid file extension:":"Erreur: Extension de fichier non valide:","Select files":"Sélectionnez les fichiers","%s already present in the queue.":"%s déjà présent dans la file d'attente.","File: %s":"Fichier: %s",b:"o","Uploaded %d/%d files":"%d fichiers sur %d ont été envoyés","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Que %d fichier(s) peuvent être envoyé(s) à la fois. Les fichiers supplémentaires ont été ignorés.","%d files queued":"%d fichiers en attente","File: %s, size: %d, max file size: %d":"Fichier: %s, taille: %d, taille max. d'un fichier: %d","Drag files here.":"Déposez les fichiers ici.","Runtime ran out of available memory.":"Le traitement a manqué de mémoire disponible.","File count error.":"Erreur: Nombre de fichiers.","File extension error.":"Erreur d'extension de fichier","Error: File too large:":"Erreur: Fichier trop volumineux:","Add Files":"Ajouter des fichiers"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.min.js
index 1b37f58bb9b3abd466a928bd629aa7fd2887764b..6c0ffce68ba1150af6d040f39ea110cdcd693f02 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('H.F({"G 4":"בטל העלאה","4 h E D i 9 y\'t z.":"כ�0וב�0 h שגויה או לא קיימ�0.","g":"g","C":"גודל","I":"סגור","P 3.":"שגיא�0 אי�0חול","e 1 Q 8 M c J x 8 K L.":"הוסף קבצים לרשימה ולחץ על כפ�0ור שליחה לה�0חל�0 פעולו�0 העלאה","R":"שם קובץ","v j k i 9 m w.":"�0מונה פגומה או סוג �0מונה לא נ�0מך","n":"אחוז","r 6.":"שגיא�0 פרוטוקול","q 4":"שליחה","o":"p","u":"l","O 5 3.":"קובץ כפול","2 7 3.":"גודל קובץ חורג מהמו�0ר","N/A":"שגיאה","1g":"1f","6: 1a 5 f:":"שגיאה: סוג קובץ לא נ�0מך:","1c 1":"בחר קבצים","%s 1k S 1d 8 c.":"%sקובץ נמצא כבר ברשימ�0 הקבצים.","2: %s":"קובץ: %s","b":"B","1b %d/%d 1":"מעלה: %d/%d","4 1l 1j 1i %d 5(s) 1h a 18. 19 1 Y Z.":"אלמנטי ההעלאה מקבלים רק %d קובץ(ים) בפעם אח�0. קבצים נוספים הוסרו.","%d 1 X":"%d קבצים נו�0רו","2: %s, 7: %d, W 5 7: %d":"קובץ: %s, גודל: %d, גודל מקסימלי: %d","T 1 U.":"גרור קבצים לכאן","V 10 11 16 17 15.":"שגיא�0 מחסור בזיכרון","2 14 3.":"שגיא�0 מספר קבצים","2 f 3.":"קובץ זה לא נ�0מך","6: 2 12 13:":"שגיאה: קובץ חורג מהגודל המו�0ר:","e 1e":"הוסף קבצים"});',62,84,'�|files|File|error|Upload|file|Error|size|the|or|||queue||Add|extension|tb|URL|wrong|format|either|KB|not|Status|mb|MB|Start|HTTP|||kb|Image|supported|click|doesn|exist|||Size|be|might|addI18n|Stop|plupload|Close|and|start|button|upload||Duplicate|Init|to|Filename|present|Drag|here|Runtime|max|queued|were|stripped|ran|out|too|large|count|memory|of|available|time|Extra|Invalid|Uploaded|Select|in|Files|GB|gb|at|only|accepts|already|element'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"בטל העלאה","Upload URL might be wrong or doesn't exist.":"כתובת URL שגויה או לא קיימת.",tb:"tb",Size:"גודל",Close:"סגור","Init error.":"שגיאת איתחול","Add files to the upload queue and click the start button.":"הוסף קבצים לרשימה ולחץ על כפתור שליחה להתחלת פעולות העלאה",Filename:"שם קובץ","Image format either wrong or not supported.":"תמונה פגומה או סוג תמונה לא נתמך",Status:"אחוז","HTTP Error.":"שגיאת פרוטוקול","Start Upload":"שליחה",mb:"MB",kb:"KB","Duplicate file error.":"קובץ כפול","File size error.":"גודל קובץ חורג מהמותר","N/A":"שגיאה",gb:"GB","Error: Invalid file extension:":"שגיאה: סוג קובץ לא נתמך:","Select files":"בחר קבצים","%s already present in the queue.":"%sקובץ נמצא כבר ברשימת הקבצים.","File: %s":"קובץ: %s",b:"B","Uploaded %d/%d files":"מעלה: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"אלמנטי ההעלאה מקבלים רק %d קובץ(ים) בפעם אחת. קבצים נוספים הוסרו.","%d files queued":"%d קבצים נותרו","File: %s, size: %d, max file size: %d":"קובץ: %s, גודל: %d, גודל מקסימלי: %d","Drag files here.":"גרור קבצים לכאן","Runtime ran out of available memory.":"שגיאת מחסור בזיכרון","File count error.":"שגיאת מספר קבצים","File extension error.":"קובץ זה לא נתמך","Error: File too large:":"שגיאה: קובץ חורג מהגודל המותר:","Add Files":"הוסף קבצים"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.min.js
index 22f2c48424dfa1797d61ff8791072a551c21bd94..4fc365ac63c32a3d8d6b93d915904f0eaeb43279 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('18.19({"1a 3":"17 j.","3 Q S K 8 9 L\'t J.":"3 Q S K 8 9 L\'t J.","I":"I","16":"13�g","14":"15","1b 5.":"v�1 1c.","r 2 1i e j R 1j 1k e 1h 1g.":"1d 0 u 12 i 1e 3.","1f":"1l 0","B z U 8 9 o p.":"B z U 8 9 o p.","E":"E","P k.":"P W�1.","11 3":"10 j.","H":"H","G":"G","Z 7 5.":"6�1 Y 0.","4 f 5.":"v�1 h�X 0.","N/A":"N/A","q":"q","k: 1N 7 V:":"6�1: 1O�1L�i 1H 0:","1I 2":"1J 0:","%s 1P 1Q 1W e R.":"%s  m 1Y� 1m  u 1Z D�1V.","4: %s":"l: %s","b":"b","1R %d/%d 2":"1S %d/%d c","3 C n F %d 7(s) T a O. y 2 x w.":"3 C n F %d 7(s) T a O. y 2 x w.","%d 2 1G":"%d c 1F D�1s.","4: %s, f: %d, 1t 7 f: %d":"l: %s, h�g: %d, 1r h�g: %d","1n 2 1o.":"1p 0 1v","M 1w 1C 1D 1E 1B.":"M 1A  m 1x 1y.","4 1z 5.":"6�1 u 1X c.","4 V 5.":"6�1 u 1q 0.","k: 4 1u 1T:":"6�1: l m 1U:","r 1K":"1M 0"});',62,124,'datoteke|ka|files|Upload|File|error|Pogre�|file|wrong|or|||datoteka||the|size|ina|veli�||upload|Error|Datoteka|je|accepts|not|supported|gb|Add||||Gre�|stripped|were|Extra|format||Image|element|�|Status|only|kb|mb|tb|exist|be|doesn|Runtime||time|HTTP|URL|queue|might|at|either|extension|gre�|ine|dvostruke|Duplicate|Pokreni|Start|listu|Veli�|Close|Zatvori|Size|Zaustavi|plupload|addI18n|Stop|Init|inicijalizacije|Dodajte|kliknite|Filename|button|start|to|and|click|Ime|prisutan|Drag|here|Dovucite|nastavku|maksimalna|ekanju|max|too|ovdje|ran|ponestalo|memorije|count|aplikaciji|memory|out|of|available|na|queued|nastavak|Select|Odaberite|Files|e�|Dodaj|Invalid|Neva�|already|present|Uploaded|Uploadano|large|prevelika|ekanja|in|broju|ve�|listi'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Zaustavi upload.","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"tb",Size:"Veličina",Close:"Zatvori","Init error.":"Greška inicijalizacije.","Add files to the upload queue and click the start button.":"Dodajte datoteke u listu i kliknite Upload.",Filename:"Ime datoteke","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP greška.","Start Upload":"Pokreni upload.",mb:"mb",kb:"kb","Duplicate file error.":"Pogreška dvostruke datoteke.","File size error.":"Greška veličine datoteke.","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"Pogreška: Nevažeći nastavak datoteke:","Select files":"Odaberite datoteke:","%s already present in the queue.":"%s  je već prisutan  u listi čekanja.","File: %s":"Datoteka: %s",b:"b","Uploaded %d/%d files":"Uploadano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d datoteka na čekanju.","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje","Runtime ran out of available memory.":"Runtime aplikaciji  je ponestalo memorije.","File count error.":"Pogreška u broju datoteka.","File extension error.":"Pogreška u nastavku datoteke.","Error: File too large:":"Pogreška: Datoteka je prevelika:","Add Files":"Dodaj datoteke"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.min.js
index e572a91c5f0cbc0f01fe4b524a51cceca49d0bb8..c89d329542de54aa5ed0a45a74d4cc4deb1ff374 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1o.1n({"1m g":"p�5�s 1p�j�4�6","g E 1q 1s J I 1r\'t 1l.":"A h�1k� E 1f�s z k 1e�1d.","1g":"","1h":"1j�c","1i":"1t�1u�s","B 9.":"B f.","u 1 1F l 1E D 1G 1H l 1J 1I.":"A 0�7 h�5�1D 1C 1x� y�K�6 1w�n 1v 1y�4�s 1c 1B 1A.","1K":"8�17�v","M L Q J I O R.":"T z k 4�U P�S�1b.","16":"o�15","C q.":"C-f.","V g":"p�5�s 18�4�6","1a":"","19":"","14 e 9.":"13�Y�2-f.","3 m 9.":"H�s 0�w�c.","N/A":"X W�Z�","10":"","q: 12 e G:":"x: o�11�1z 0�F�s:","1W 1":"8�7 2s�2r�6","%s 1L 2t 2u l D.":"%s i�r 2w a 2v�2q.","3: %s":"8�2: %s","b":"b","2p %d/%d 1":"p�5�2k 0�7: %d/%d","g 2l 2m 2y %d e(s) 2o a 2n. 2x 1 2z 2J.":"A h�5�s 2G 2I %d 0�2H 2E 2A, a 4�2B 0�2 k 2D h�2h.","%d 1 2i":"%d 0�2 1V�j�1X","3: %s, m: %d, 1Y e m: %d":"8�2: %s, i�c: %d, 1Z 0�w�c: %d","1T 1 1O.":"1N 1M 1P a 0�1Q.","1S 1R 21 22 2c 2b.":"2d�2e�2g 2f a 2a�29 o�j� 24�23.","3 25 9.":"A 0�7 26�i�28 27 f.","3 G 9.":"H�s 0�F�s.","q: 3 1U 20:":"x: a 0�2 2C 2F:","u 2j":"8�7 y�K�6"});',62,170,'f�|files|jl|File|t�|lt�|sa|jlok|F�|error|||ret||file|hiba|Upload|felt�|m�|ll�|nem|the|size||�|Felt�|Error||||Add||jlm�|Hiba|hozz�|vagy||Init|HTTP|queue|URL|jlkiterjeszt�|extension|Hib�|or|wrong|ad�|format|Image||not|k�|either|supported|pform�|Rossz|mogatott|Start|el�|Nem|ltf�|rhet�|gb|rv�|Invalid|Duplik�|Duplicate|llapot|Status|jln�|ind�|kb|mb|tum|gombra|tezik|l�|hib�|tb|Size|Close|M�|lt�|exist|Stop|addI18n|plupload|le�|might|doesn|be|Bez�|r�|az|ut�|val�|Ind�|nytelen|kattintani|kell|sorhoz|si|upload|to|and|click|button|start|Filename|already|lehet|Ide|here|húzni|jlokat|ran|Runtime|Drag|too|sorba�|Select|tva|max|legnagyobb|large|out|of|ria|mem�|count|sz�|kapcsolatos|val|sre|rendelkez�|memory|available|Fut�|sid�|elfogyott|ben|ltve|queued|Files|tt|element|accepts|time|at|Uploaded|ban|laszt�|kiv�|present|in|list�|szerepel|Extra|only|were|el|bbi|túl|lesz|fogad|nagy|egyszerre|jlt|csak|stripped'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Feltöltés leállítása","Upload URL might be wrong or doesn't exist.":"A feltöltő URL hibás vagy nem létezik.",tb:"",Size:"Méret",Close:"Bezárás","Init error.":"Init hiba.","Add files to the upload queue and click the start button.":"A fájlok feltöltési sorhoz való hozzáadása után az Indítás gombra kell kattintani.",Filename:"Fájlnév","Image format either wrong or not supported.":"Rossz vagy nem támogatott képformátum.",Status:"Állapot","HTTP Error.":"HTTP-hiba.","Start Upload":"Feltöltés indítása",mb:"",kb:"","Duplicate file error.":"Duplikáltfájl-hiba.","File size error.":"Hibás fájlméret.","N/A":"Nem elérhető",gb:"","Error: Invalid file extension:":"Hiba: érvénytelen fájlkiterjesztés:","Select files":"Fájlok kiválasztása","%s already present in the queue.":"%s már szerepel a listában.","File: %s":"Fájl: %s",b:"b","Uploaded %d/%d files":"Feltöltött fájlok: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.","%d files queued":"%d fájl sorbaállítva","File: %s, size: %d, max file size: %d":"Fájl: %s, méret: %d, legnagyobb fájlméret: %d","Drag files here.":"Ide lehet húzni a fájlokat.","Runtime ran out of available memory.":"Futásidőben elfogyott a rendelkezésre álló memória.","File count error.":"A fájlok számával kapcsolatos hiba.","File extension error.":"Hibás fájlkiterjesztés.","Error: File too large:":"Hiba: a fájl túl nagy:","Add Files":"Fájlok hozzáadása"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.min.js
index a32b66b91c048b6f9f838acbe1515959a6018b6e..772bd801526b91f44a9f5d7e050a3458740162e3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('G.H({"F 7":"6�0�0�0�0�0�1�0�0�0�","7 l E B k j C\'t D.":"6�0�0�1�0�0�0�0� l-0� 0�0�0�0� 0� 0�0�0� 0�0�2�1�0�2�1�0� 0�0�1�0�0�1�","I":"0�0�","J":"0�0�1�","P":"0�0�0�0�0�","Q 5.":"0�0�0�0�0�0�0�0� 0�0�0�0�","f 4 O c M g K z c R q.":"6�0�0�0�0�1�1�0�1� 1�0�2�0�1� 1�0�1�1�0�0�0�1�0� 1� 0�0�0�0�0�1� \\"0�0�1�0�0�0�0�0�0�\\"1�","n":"0�0�2�0� 0�0�0�1�0�","o p m k j y x.":"0�0�0�1�0� 1�0�1�0�0�0�0� 0�0�0�0� 0� 0�0�0� 0�0� 0�0�0�0�1�0�0�0�1�0�1�","w":"","h e.":"h 0�0�0�0�","v 7":"0�0�1�0�0�0�0�0�0�","r":"0�0�","u":"0�0�","L 8 5.":"0�0�2�0� 0�1�0�0�0�0�0� 0�0�0�0�","3 9 5.":"0�0�2�0� 0�0�1�0� 0�0�0�0�","N/A":"N/A","1d":"0�0�","e: S 8 i:":"0�0�0�0�1� 0�0�2�0� 0�0�0�0�0�2�0�1�0�0� 0�0�0�0� 0�1�","1e 4":"6�0�0�1�0�1� 1�0�2�0�1�0�","%s 1c 1b 19 c g.":"%s 1�0�2�0� 0�1�0�0�0� 0�0�0�0�0�1�0�0�0� 0� 1�0�1�1�0�0�0�1�0�.","3: %s":"0�0�2�: %s","b":"0�","1g %d/%d 4":"0�0�1�0�0�0�0�0�0�0� 0�0� %d/%d 1�0�2�0�1�0�","7 1j 1k 1h %d 8(s) 1i a 1f. 17 4 18 X.":"","%d 4 Y":"1�0�1�1�0�0�0�1�0� 0�0� %d 1�0�2�","3: %s, 9: %d, W 8 9: %d":"0�0�2�: %s, 0�0�1�: %d, 1�0�2�0� 0�0�1�0�0�0�0�1�0� 0�0�1�: %d","U 4 Z.":"0�0�0�0�1�0�0�0�1� 1�0�2�0�1�0� 0�2�0�0�0�","10 15 16 14 13 11.":"","3 12 5.":"0�0�2�0�1�0� 1�0�0�0�0�0� 0�0�0�0�","3 i 5.":"0�0�2�0� 0�0�0�0�0�2�0�0�0� 0�0�0�0�","e: 3 T V:":"0�0�0�0�1� 0�0�2�0� 0�0�1�0� 0�0�0� 0�1�","f 1a":"6�0�0�0�0�1�0�0�0� 1�0�2�0�1�"});',62,83,'�|�|յ�|File|files|error|�|Upload|file|size|||the||Error|Add|queue|HTTP|extension|or|wrong|URL|either|Filename|Image|format|button|mb|||kb|Start|Status|supported|not|click||be|doesn|exist|might|Stop|plupload|addI18n|tb|Size|and|Duplicate|upload||to|Close|Init|start|Invalid|too|Drag|large|max|stripped|queued|here|Runtime|memory|count|available|of|ran|out|Extra|were|in|Files|present|already|gb|Select|time|Uploaded|only|at|element|accepts'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Կանգնեցնել","Upload URL might be wrong or doesn't exist.":"Ավեցաված URL-ը սխալ է կամ գոյություն չունի։",tb:"տբ",Size:"Չափ",Close:"Փակել","Init error.":"Ստեղծման սխալ","Add files to the upload queue and click the start button.":'Ավելացրեք ֆայլեր ցուցակում և սեղմեք "Վերբեռնել"։',Filename:"Ֆայլի անուն","Image format either wrong or not supported.":"Նկարի ֆորմատը սխալ է կամ չի ընդունվում։",Status:"","HTTP Error.":"HTTP սխալ","Start Upload":"Վերբեռնել",mb:"մբ",kb:"կբ","Duplicate file error.":"Ֆայլի կրկնման սխալ","File size error.":"Ֆայլի չափի սխալ","N/A":"N/A",gb:"գբ","Error: Invalid file extension:":"Սխալ։ Ֆայլի ընդլայնումը սխալ է։","Select files":"Ընտրեք ֆայլերը","%s already present in the queue.":"%s ֆայլը արդեն ավելացված է ցուցակում.","File: %s":"Ֆայլ: %s",b:"բ","Uploaded %d/%d files":"Վերբեռնվել են %d/%d ֆայլերը","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"ցուցակում կա %d ֆայլ","File: %s, size: %d, max file size: %d":"Ֆայլ: %s, չափ: %d, ֆայլի մաքսիմում չափ: %d","Drag files here.":"Տեղափոխեք ֆայլերը այստեղ","Runtime ran out of available memory.":"","File count error.":"Ֆայլերի քանակի սխալ","File extension error.":"Ֆայլի ընդլայնման սխալ","Error: File too large:":"Սխալ։ Ֆայլի չափը մեծ է։","Add Files":"Ավելացնել ֆայլեր"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.min.js
index ab2593ddbacd1fb2223f05a89663411875d376be..635c04dfaba02acbe6c6e35c0b617296d5a5f588 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('17.18({"19 4":"1a 4","4 p 16 15 m q 11\'t 12.":"13 p j 7 8 1b r 8 z","o":"o","1j":"1k","1l":"1m","n 5.":"2 6 n","B 3 1i h 7 i 1h 1d h 1e 1f.":"10 0 1n e 7 V I J v","K":"L 1","H D G m q M Z.":"2 6 x O r x 0 8 Y","w":"w","l g.":"l T","P 4":"v 4","u":"u","y":"y","1g 0 5.":"1o 1T 0","1 c 5.":"2 6 9 0","N/A":"N/A","k":"k","g: 1V 0 C:":"2: 1S 0 8 1R","1N 3":"1O 0","%s 1P 1Q 1X h i.":"%s 24 z f 22 e","1: %s":"1: %s","b":"b","1Y %d/%d 3":"1 20 %d/%d","4 23 1L 1M %d 0(s) 1v a 1w. 1x 3 1y 1u.":"1t j 7 1q 1r %d 0(s) f 1s 7. 1 1A 8 1I 1J","%d 3 1K":"%d 0 f e","1: %s, c: %d, 1B 0 c: %d":"1: %s, 9: %d, 1D 9 0: %d","1E 3 1C.":"1F 0 1G","1H 1z 1p 21 25 1Z.":"1W 1U S","1 R 5.":"2 6 Q 0","1 C 5.":"2 6 U 0","g: 1 X W:":"2: 1 F E","B 1c":"14 1"});',62,130,'file|File|Kesalahan|files|Upload|error|pada|upload|tidak|ukuran|||size||antrian|dalam|Error|the|queue|untuk|gb|HTTP|wrong|Init|tb|URL|or|atau|||mb|Mulai|Status|jenis|kb|ada||Add|extension|format|besar|terlalu|either|Image|klik|tombol|Filename|Nama|not||gambar|Start|jumlah|count|memori|Bermasalah|ekstensi|dan|large|too|didukung|supported|Tambahkan|doesn|exist|Alamat|Tambah|be|might|plupload|addI18n|Stop|Hentikan|benar|Files|click|start|button|Duplicate|and|to|Size|Ukuran|Close|Tutup|kedalam|Terjadi|out|hanya|menerima|setiap|Tempat|stripped|at|time|Extra|were|ran|lainnya|max|here|maksimum|Drag|Tarik|kesini|Runtime|akan|disertakan|queued|accepts|only|Select|Pilih|already|present|dikenal|Ekstensi|duplikasi|cukup|Invalid|Tidak|in|Uploaded|memory|terupload|of|daftar|element|sudah|available'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Hentikan Upload","Upload URL might be wrong or doesn't exist.":"Alamat URL untuk upload tidak benar atau tidak ada",tb:"tb",Size:"Ukuran",Close:"Tutup","Init error.":"Kesalahan pada Init","Add files to the upload queue and click the start button.":"Tambahkan file kedalam antrian upload dan klik tombol Mulai",Filename:"Nama File","Image format either wrong or not supported.":"Kesalahan pada jenis gambar atau jenis file tidak didukung",Status:"Status","HTTP Error.":"HTTP Bermasalah","Start Upload":"Mulai Upload",mb:"mb",kb:"kb","Duplicate file error.":"Terjadi duplikasi file","File size error.":"Kesalahan pada ukuran file","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"Kesalahan: Ekstensi file tidak dikenal","Select files":"Pilih file","%s already present in the queue.":"%s sudah ada dalam daftar antrian","File: %s":"File: %s",b:"b","Uploaded %d/%d files":"File terupload %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Tempat untuk upload hanya menerima %d file(s) dalam setiap upload. File lainnya tidak akan disertakan","%d files queued":"%d file dalam antrian","File: %s, size: %d, max file size: %d":"File: %s, ukuran: %d, maksimum ukuran file: %d","Drag files here.":"Tarik file kesini","Runtime ran out of available memory.":"Tidak cukup memori","File count error.":"Kesalahan pada jumlah file","File extension error.":"Kesalahan pada ekstensi file","Error: File too large:":"Kesalahan: File terlalu besar","Add Files":"Tambah File"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.min.js
index e014b8f0059ab2dba614cffab9b514ad44e46b38..7a10edb879fac15df90dd4647aba707d40a6bdef 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('V.10({"T 3":"Q 3","3 G M L z w 1k\'t 1m.":"G 7 3 1p o 9 1o","H":"H","1g":"1f","18":"15","19 5.":"4 1e.","E 2 1d 6 1j p 1b 1c 6 1a 17.":"J i 0 1n g 7 1l e 1h 1i 14 7 1q.","13":"P 0","O R S z w 11 12.":"Z Y U o 9 W.","X":"16","u 8.":"4 u.","1M 3":"1U 3","r":"r","q":"q","1V 0 5.":"4 0 1W.","1 c 5.":"4 f 0.","N/A":"N/D","v":"v","8: 1T 0 I:":"4: 1S 0 9 1r:","1O 2":"1P i 2","%s 1Q 1Y C 6 p.":"%s 1R� 1X 1Z g.","1: %s":"1: %s","b":"21","20 %d/%d 2":"22 %d/%d 0","3 x B n %d 0(s) j a h. k 2 l m.":"3 x B n %d 0(s) j a h. k 2 l m.","%d 2 1N":"%d 0 C g","1: %s, c: %d, y 0 c: %d":"1: %s, f: %d, f y 0: %d","1y 2 1z.":"1A i 2 1x.","F 1w 1s 1t 1u 1v.":"F 1B 1C 1J 1K 1L.","1 K 5.":"1 K 5.","1 I 5.":"4 1I 0.","8: 1 1H 1D:":"4: 1 1E 1F:","E 1G":"J 0"});',62,127,'file|File|files|Upload|Errore|error|the|di|Error|non|||size|||dimensione|coda|time||at|Extra|were|stripped|only||queue|kb|mb|||HTTP|gb|or|element|max|wrong||accepts|in||Add|Runtime|URL|tb|extension|Aggiungi|count|be|might||Image|Nome|Ferma|format|either|Stop|errato|plupload|supportato|Status|immagine|Formato|addI18n|not|supported|Filename|pulsante|Chiudi|Stato|button|Close|Init|start|and|click|to|inizializzazione|Dimensione|Size|clicca|il|upload|doesn|caricamento|exist|alla|esistente|errata|avvio|valida|out|of|available|memory|ran|qui|Drag|here|Trascina|ha|esaurito|large|troppo|grande|Files|too|estensione|la|memoria|disponibile|Start|queued|Select|Seleziona|already|gi�|Estensione|Invalid|Inizia|Duplicate|duplicato|presente|present|nella|Uploaded|byte|Caricati'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Ferma Upload","Upload URL might be wrong or doesn't exist.":"URL di Upload errata o non esistente",tb:"tb",Size:"Dimensione",Close:"Chiudi","Init error.":"Errore inizializzazione.","Add files to the upload queue and click the start button.":"Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.",Filename:"Nome file","Image format either wrong or not supported.":"Formato immagine errato o non supportato.",Status:"Stato","HTTP Error.":"Errore HTTP.","Start Upload":"Inizia Upload",mb:"mb",kb:"kb","Duplicate file error.":"Errore file duplicato.","File size error.":"Errore dimensione file.","N/A":"N/D",gb:"gb","Error: Invalid file extension:":"Errore: Estensione file non valida:","Select files":"Seleziona i files","%s already present in the queue.":"%s già presente nella coda.","File: %s":"File: %s",b:"byte","Uploaded %d/%d files":"Caricati %d/%d file","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d file in coda","File: %s, size: %d, max file size: %d":"File: %s, dimensione: %d, dimensione max file: %d","Drag files here.":"Trascina i files qui.","Runtime ran out of available memory.":"Runtime ha esaurito la memoria disponibile.","File count error.":"File count error.","File extension error.":"Errore estensione file.","Error: File too large:":"Errore: File troppo grande:","Add Files":"Aggiungi file"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.min.js
index 98706186d1d193cb1abc332ef0e83876713d7cdc..d454418988bdf8d722e3c8d924e6fb4c1f0e8583 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('V.W({"U 8":"0��0��0��0��0��0��1��4��","8 n T R h g S\'t X.":"0��0��0��0��0��0��1��0�� n 0��1��1��0��0��0��0��","13":"","14":"0�w��0�12","11":"j��0��0��","Z 5.":"0��0��0��0��0��0��0�q��0��0��","B 3 10 f Q x O J f I K.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��9��1��0��0��0��0��0��0��0��0��0��0��0��0�c��0��0��0��0��0��0��0��","L":"0��0��0��0��1��","l k o h g u p.":"l k o h g u p.","15":"0��0��0��0��0��","v 6.":"v 0��0��0��","16 8":"0��0��0��0��0��0��","1l":"","1k":"","1j 7 5.":"","2 e 5.":"0��0��0��0��0�w��0�q��0��0��","N/A":"N/A","1n":"","6: r 7 i:":"6: r 7 i:","1q 3":"0��0��0��0��j��4��","%s 1p 1o 1i f x.":"","2: %s":"0��0��0��0��: %s","b":"","18 %d/%d 3":"0��0��0��0��0��0��m�� %d/%d 0��0��0��0��","8 1b 1c 1g %d 7(s) 1f a 1r. 1d 3 1e 17.":"0��0��0��0��0��0��1��9��0�c��0��0��0��4��0�� %d 0��0��0��m��1��0�c��0��0��0��0��1��j��0��0��0��0��0��","%d 3 19":"%d 0��0��0��0��0��9��1��0��0��0��0��0��","2: %s, e: %d, 1m 7 e: %d":"","1a 3 1h.":"0��0��0��0��0��0��0��0��0��0��0��0��","C E D F H G.":"C E D F H G.","2 P 5.":"0��0��0��0��4��0��0��0��","2 i 5.":"0��0��0��0��4��1�M��0��0��0��","6: 2 y z:":"6: 2 y z:","B Y":"0��0��0��0��0��9��1��"});',62,90,'�|�|File|files|�|error|Error|file|Upload|�|||��||size|the|or|wrong|extension|�|format|Image|�|URL|either|supported|��|Invalid|||not|HTTP|��|queue|too|large||Add|Runtime|out|ran|of|memory|available|start|click|button|Filename|��||and|count|upload|be|doesn|might|Stop|plupload|addI18n|exist|Files|Init|to|Close|�|tb|Size|Status|Start|stripped|Uploaded|queued|Drag|element|accepts|Extra|were|at|only|here|in|Duplicate|kb|mb|max|gb|present|already|Select|time'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"アップロード停止","Upload URL might be wrong or doesn't exist.":"アップロード先の URL が存在しません",tb:"",Size:"サイズ",Close:"閉じる","Init error.":"イニシャライズエラー","Add files to the upload queue and click the start button.":"ファイルをアップロードキューに追加してスタートボタンをクリックしてください",Filename:"ファイル名","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"ステータス","HTTP Error.":"HTTP エラー","Start Upload":"アップロード",mb:"",kb:"","Duplicate file error.":"","File size error.":"ファイルサイズエラー","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"ファイル選択","%s already present in the queue.":"","File: %s":"ファイル: %s",b:"","Uploaded %d/%d files":"アップロード中 %d/%d ファイル","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"アップロード可能なファイル数は %d です。余分なファイルは削除されました","%d files queued":"%d ファイルが追加されました","File: %s, size: %d, max file size: %d":"","Drag files here.":"ここにファイルをドラッグ","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"ファイル数エラー","File extension error.":"ファイル拡張子エラー","Error: File too large:":"Error: File too large:","Add Files":"ファイルを追加"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.min.js
index e0959dab7d04a53ecd3a334ed158c035b21b98be..f01098ffecfd514ee4656d039463fbc54f18bbde 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('q.w({"K 6":"0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��","6 E F D f h C\'t y.":"0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0�� 0��0�� 0��0�� 0��0��0��0��0��0��0��0��.","z":"0��0��","B":"0��0��0��0��","G":"0��0��0��0��0��0��0��0��","H 4.":"0��0��0��0�3��0��0��0��0��0��0�3��0��0�� 0��0��0�3��0��0��0��.","c 1 M 7 O e I J 7 x P.":"0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0�� 0��0�� 0��0��0��0��0��0��0��0�� 0��0��0��0��0��0�� - 0��0��0��0��0��0��0��0��.","n":"0��0��0��0��0��0�� 0��0��0��0��0��0��","l k j f h m u.":"0��0��0��0��0��0�� 0��0��0��0��0��0��0�� 0��0�� 0��0��0��0�� 0��0��0��0��0��0��0��0��0��0��0��0�� 0��0�� 0��0��0��0��0��0��0��0��0��.","r":"0��0��0��0��0��0��0��","g 9.":"g 0��0��0�3��0��0��0��.","o 6":"0��0��0��0��0��0��0��0��","p":"0��0��","v":"0��0��","L 5 4.":"0��0��0��0��0�� 0��0��0��0��0�� 0��0��0��0�� 0��0��0��0��0��0��0��0��0��0��0��.","2 8 4.":"0��0��0��0��0��0�� 0��0��0��0�� 0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��.","N/A":"N/A","1c":"0��0��","9: 1d 5 i:":"0��0��0�3��0��0��0��: 0��0��0��0��0�� 0��0��0��0�� 0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0��0��.","1b 1":"0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��","%s 1a 17 Q 7 e.":"%s 0��0��0��0�� 0��0��0��0��0��0��0��0��0��0��0��.","2: %s":"0��0��0��0��0��: %s","b":"0��","18 %d/%d 1":"0��0��0��0��0��0��0��0��0��0�� %d/%d 0��0��0��0��0��","6 1f 1e 1i %d 5(s) 1h a 1g. 19 1 15 16.":"0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0�� %d 0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��.","%d 1 V":"0��0��0��0��0��0�� %d 0��0��0��0��0��","2: %s, 8: %d, W 5 8: %d":"0��0��0��0��0��: %s, 0��0��0��0��: %d, 0��0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0�� 0��0��0��0��: %d","U 1 T.":"0��0��0��0��0��0��0�� 0��0��0��0��0��0��0�� 0��0��.","R S X Y 13 14.":"0��0��0��0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��.","2 12 4.":"0��0��0��0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��.","2 i 4.":"0��0��0��0��0��0�� 0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��0��0�� 0��0�� 0��0��0��0��.","9: 2 11 Z:":"0��0��0�3��0��0��0��: 0��0��0��0��0�� 0��0��0��0��0��0��0��0�� 0��0��0��0��0��.","c 10":"0��0��0��0��0��0��0��0�� 0��0��0��0��0��0��0��"});',62,81,'�|files|File|��|error|file|Upload|the|size|Error|||Add||queue|wrong|HTTP|or|extension|either|format|Image|not|Filename|Start|mb|plupload|Status|||supported|kb|addI18n|start|exist|tb||Size|doesn|be|URL|might|Close|Init|and|click|Stop|Duplicate|to||upload|button|in|Runtime|ran|here|Drag|queued|max|out|of|large|Files|too|count|available|memory|were|stripped|present|Uploaded|Extra|already|Select|gb|Invalid|accepts|element|time|at|only'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"ატვირთვის შეჩერება","Upload URL might be wrong or doesn't exist.":"ატვირთვის მისამართი არასწორია ან არ არსებობს.",tb:"ტბ",Size:"ზომა",Close:"დავხუროთ","Init error.":"ინიციალიზაციის შეცდომა.","Add files to the upload queue and click the start button.":"დაამატეთ ფაილები და დააჭირეთ ღილაკს - ატვირთვა.",Filename:"ფაილის სახელი","Image format either wrong or not supported.":"ფაილის ფორმატი არ არის მხარდაჭერილი ან არასწორია.",Status:"სტატუსი","HTTP Error.":"HTTP შეცდომა.","Start Upload":"ატვირთვა",mb:"მბ",kb:"კბ","Duplicate file error.":"ესეთი ფაილი უკვე დამატებულია.","File size error.":"ფაილის ზომა დაშვებულზე დიდია.","N/A":"N/A",gb:"გბ","Error: Invalid file extension:":"შეცდომა: ფაილს აქვს არასწორი გაფართოება.","Select files":"ფაილების მონიშვნა","%s already present in the queue.":"%s უკვე დამატებულია.","File: %s":"ფაილი: %s",b:"ბ","Uploaded %d/%d files":"ატვირთულია %d/%d ფაილი","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"ერთდროულად დაშვებულია მხოლოდ %d ფაილის დამატება.","%d files queued":"რიგშია %d ფაილი","File: %s, size: %d, max file size: %d":"ფაილი: %s, ზომა: %d, მაქსიმალური დაშვებული ზომა: %d","Drag files here.":"ჩააგდეთ ფაილები აქ.","Runtime ran out of available memory.":"ხელმისაწვდომი მეხსიერება გადაივსო.","File count error.":"აღმოჩენილია ზედმეტი ფაილები.","File extension error.":"ფაილის ფორმატი დაშვებული არ არის.","Error: File too large:":"შეცდომა: ფაილი ზედმეტად დიდია.","Add Files":"დაამატეთ ფაილები"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.min.js
index 5ef602e642a33011195c23678810a1ddfb94f117..3dabf7e544f0453c9f28aa2e1c23144d9a3edbdc 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('13.15({"1t f":"0�2�6�4�0�1� 1�0�2�1�0�1�1�","f u z y n r 1m\'t M.":"0�2�6�4�0�1� 2�0�0�1�0�0�0�1�1�1� u 2�0�1�5 0�5 0�2�0�0�3� O�1�1�4�1�0�0�3�3�.","L":"1�0�","K":"e�0�1�3�1�","H":"0�0�0�1�","I c.":"0�0�0�1�0�0�0�0�0�0�1�0�1� 2�0�1�4�1�.","o 9 J h P l Q V h G U.":"0�2�6�4� 7�3�1�0�5 1�0�0�0�0�0�1� 2�0�1�1�0�, 0�0�1�1�0�1� j�0�0�j�1�1�0� 0�0�1�1�2�1�0�.","T":"0�0�0�0� 0�1�1�","R S X n r x w.":"0�1�1�4� 1�0�1�0�0�1�1� 2�0�1�5 0�3�4�5 0�0�1�2� 2�0�0�0�0�1�1� 0�0�2�.","v":"0�2�0�1�","p k.":"p 2�0�1�4�1�.","F f":"0�2�6�4�0�1� 0�0�1�1�0�1�","E":"0�0�","D":"j�","C g c.":"0�0�0�0� 2�0�0�1�0�0�0�0�0�1�1�0�1�2� 2�0�1�4�1�.","8 i c.":"0�0�0�0� e�0�1�3�1�0�1�2� 2�0�1�4�1�.","N/A":"2�/0�","B":"0�0�","k: W g q:":"2�0�1�5: 0�0�0�0� m�3�1�1�0�1�1� 2�0�1�5:","1u 9":"0�0�0�0�0�0�1� 1�0�2�0�0�2�1�0�","%s 1k 1l 1j h l.":"%s 1�0�0�0�1� 7�1i�5 0�2�1�1�0�0�0�0� 0�0�1�.","8: %s":"0�0�0�0�: %s","b":"0�","1g %d/%d 9":"0�2�6�3�0�3�: %d/%d 1�0�0�0�","f 1h Y 1n %d g(s) 1s a 1r. 1q 9 1o 1p.":"0�2�6�4� 1�0�3�3�1�1� 0�1�1� 7�0�5 %d 1�0�0�0� 2�0�0�0� 0�2�6�3� 0�0�0�0�1�. 0�1�1�1�2� 1�0�0�0�0�0�1� 0�2�6�3�0�3�0�1�.","%d 9 1f":"%d 1�0�0�0� 7�1e 2�0�0�1�0�0�1�","8: %s, i: %d, 14 g i: %d":"0�0�0�0�: %s, e�0�1�3�1�: %d, 0�0�6�. 1�0�0�0� e�0�1�3�1�: %d","12 9 Z.":"0�0�0�0�0�0�1�0�1� 0�1�0�0� 0�4�0�5 1�0�1�1�0�2�1�0�.","10 11 16 17 1c 1d.":"0�1�1�0�0�0�1� 7�1�0�0�5 0�0�0�1� 0�4�0�3� 2�0�0�0�1�.","8 1b c.":"0�0�0�0� 1�0�0�1�0�1�2� 2�0�1�4�1�.","8 q c.":"0�0�0�0� m�3�1�1�0�1�1�0�1�2� 2�0�1�4�1�.","k: 8 1a 18:":"2�0�1�5: 0�0�0�0� 0�e�0�1�4�1� 1�1�0� 2�0�7�:","o 19":"0�0�0�0� 2�0�1�1�"});',62,93,'�|�|�|е�|е�|е|к�|ке�|File|files|||error||�|Upload|file|the|size|к�|Error|queue|ке�|wrong|Add|HTTP|extension|or|||URL|Status|supported|not|be|might||gb|Duplicate|kb|mb|Start|start|Close|Init|to|Size|tb|exist||к�|upload|and|Image|format|Filename|button|click|Invalid|either|accepts|here|Runtime|ran|Drag|plupload|max|addI18n|out|of|large|Files|too|count|available|memory|екке|queued|Uploaded|element|ек�|in|already|present|doesn|only|were|stripped|Extra|time|at|Stop|Select'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Жүктеуді тоқтату","Upload URL might be wrong or doesn't exist.":"Жүктеуді қабылдаушы URL қате не мүлдем көрсетілмеген.",tb:"тб",Size:"Өлшемі",Close:"Жабу","Init error.":"Инициализация қатесі.","Add files to the upload queue and click the start button.":"Жүктеу кезегіне файлдар қосып, Бастау кнопкасын басыңыз.",Filename:"Файл аты","Image format either wrong or not supported.":"Сурет форматы қате немесе оның қолдауы жоқ.",Status:"Күйі","HTTP Error.":"HTTP қатесі.","Start Upload":"Жүктеуді бастау",mb:"мб",kb:"кб","Duplicate file error.":"Файл қайталамасының қатесі.","File size error.":"Файл өлшемінің қатесі.","N/A":"Қ/Ж",gb:"гб","Error: Invalid file extension:":"Қате: Файл кеңейтілуі қате:","Select files":"Файлдар таңдаңыз","%s already present in the queue.":"%s файлы кезекте бұрыннан бар.","File: %s":"Файл: %s",b:"б","Uploaded %d/%d files":"Жүктелген: %d/%d файл","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Жүктеу элементі бір кезде %d файл ғана жүктей алады. Артық файлдар жүктелмейді.","%d files queued":"%d файл кезекке қойылды","File: %s, size: %d, max file size: %d":"Файл: %s, өлшемі: %d, макс. файл өлшемі: %d","Drag files here.":"Файлдарды мына жерге тастаңыз.","Runtime ran out of available memory.":"Орындау кезінде жады жетпей қалды.","File count error.":"Файл санының қатесі.","File extension error.":"Файл кеңейтілуінің қатесі.","Error: File too large:":"Қате: Файл мөлшері тым үлкен:","Add Files":"Файл қосу"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.min.js
index 6a15a914dba75ac5b1503e5dc5939168086c8651..d6a512c5b6f6a26a2fd6cf7a6992005ceed8304a 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('Q.R({"P 7":"0��1��1�� 0��0��","7 O L M e f S\'t T.":"0��1��1��2�� Y�� 0��0��2��0�� 0��0�9��1��","X":"","W":"2��3��","U":"1��3��","V 6.":"0��3��2�� 0��1��","w 5 Z c K o G C c D E.":"2��0��0�� 0��1��1�� 2��0�� 0��3��2��0�� 0��0�� 1��2��0�� 2��1��2��0��0��0��.","I":"2��0�� 0��1��","i n k e f l j.":"i n k e f l j.","z":"0��2��","m h.":"m 0��1��","1d 7":"0��1��1��","1i":"","10":"","1h 8 6.":"","4 g 6.":"2��0�� 2��3�� 0��1��","N/A":"N/A","1g":"","h: 1k 8 x:":"0��1�� : 2��0��0��3�� 2��0��1��0�� 0��0�9��1�� :","1j 5":"2��0�� 0��2��","%s 1l 1n 1m c o.":"","4: %s":"2��0�� % s","b":"","1f %d/%d 5":"0��1��1�� 0�� % d / % d 2��0��","7 1e 15 14 %d 8(s) 13 a 11. 12 5 16 17.":"0��1��1�� 3��1��2�� 2��0��0�� 0��1�� % 1c��1��1��. 1��2��0��2�� 2��0��0�� 0��0��1��0��0�9��1��","%d 5 1b":"% d 2��0��0�� 0��3��1��0��0�9��1��","4: %s, g: %d, 1a 8 g: %d":"","19 5 18.":"0��3��0�� 2��0��0�� 1��1��3��","v u q p r y.":"v u q p r y.","4 B 6.":"0��1��0�� : 0��1��","4 x 6.":"2��0�� 2��0��0�� 0��1��","h: 4 J F:":"0��1�� : 2��3��3�� 1��1�� 2��1��1��","w H":"2��0�� 0��3��"});',62,86,'�|�|�|�|File|files|error|Upload|file|��|||the||wrong|or|size|Error|Image|supported|either|not|HTTP|format|queue|of|out|available|||ran|Runtime|Add|extension|memory|Status||count|click|start|button|large|and|Files|Filename|too|upload|might|be||URL|Stop|plupload|addI18n|doesn|exist|Close|Init|Size|tb|URL�|to|kb|time|Extra|at|only|accepts|were|stripped|here|Drag|max|queued|d�|Start|element|Uploaded|gb|Duplicate|mb|Select|Invalid|already|in|present'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"업로드 중지","Upload URL might be wrong or doesn't exist.":"업로드할 URL이 존재하지 않습니다",tb:"",Size:"크기",Close:"닫기","Init error.":"초기화 오류","Add files to the upload queue and click the start button.":"파일을 업로드 큐에 추가하여 시작 버튼을 클릭하십시오.",Filename:"파일 이름","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"상태","HTTP Error.":"HTTP 오류","Start Upload":"업로드",mb:"",kb:"","Duplicate file error.":"","File size error.":"파일 크기 오류","N/A":"N/A",gb:"","Error: Invalid file extension:":"오류 : 확장자가 허용되지 않습니다 :","Select files":"파일 선택","%s already present in the queue.":"","File: %s":"파일 % s",b:"","Uploaded %d/%d files":"업로드 중 % d / % d 파일","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"업로드 가능한 파일의 수는 % d입니다. 불필요한 파일은 삭제되었습니다","%d files queued":"% d 파일이 추가되었습니다","File: %s, size: %d, max file size: %d":"","Drag files here.":"여기에 파일을 드래그","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"이미지 : 오류","File extension error.":"파일 확장자 오류","Error: File too large:":"오류 : 크기가 너무 큽니다","Add Files":"파일 추가"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.min.js
index 0e8fc1e5b0e45a8235bb8f742b9ed3fc7bf3d27d..ccff36a6023177ccbcd29710bf1913bf4bd9f7e2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1f.1e({"1g 8":"1h 0�5�v�","8 1i 1d 1c u w 18\'t 17.":"19 r 1a 0�5�y 1b.","m":"m","1j":"1k","1s":"1t�1u","1v 4.":"0�1r p.","D 1 1q g 1m B 1l 1n g 1o 1p.":"E�16 3 0� 0�5�y c� 11 M L O�.","P":"K R","J G I u w Q 15.":"S 10 12 r 14.","Z":"Y","q h.":"q p.","T 8":"V�9 0�5�v�","x":"x","o":"o","26 6 4.":"27 28.","2 k 4.":"7 e i.","N/A":"N/A","z":"z","h: 25 6 F:":"C: 7 e 24�20:","1Z 1":"l�21�9 3","%s 22 2b 23 g B.":"%s 2j 2k c�n.","2: %s":"j: %s","b":"b","2h %d/%d 1":"0�2g f�: %d/%d","8 2e 2f 2l %d 6(s) 2i a 1Y. 1G 1 1F 1H.":"1I 1J 1E 0�1D 1z %d 3(l�). 1A e 1C 1K�1L.","%d 1 1T":"%d f� c�n","2: %s, k: %d, 1W 6 k: %d":"j: %s, i: %d, 1N i: %d","1O 1 1Q.":"1X�9 3 0�1P.","1M 1R 1S 1V 1U 1B.":"1y�2c 2d� 2a.","2 29 4.":"7 f� 1x.","2 F 4.":"7 X.","h: 2 W U:":"C: j 13 H�:","D 1w":"E�9 3"});',62,146,'�|files|File|bylas|error|k�|file|Netinkamas|Upload|ti|||eil�||bylos|byl�|the|Error|dydis|Byla|size|�|tb|je|kb|klaida|HTTP|arba|||wrong|lim�|or|mb|limo|gb||queue|Klaida|Add|Prid�|extension|format|didel�|either|Image|Bylos|starto|paspauskite||mygtuk�|Filename|not|pavadinimas|Paveiksliuko|Start|large|Prad�|too|pletinys|Statusas|Status|formatas|ir|klaidingas|per|nebepalaikomas|supported|kite|exist|doesn|Klaidinga|neegzistuojanti|nuoroda|be|might|addI18n|plupload|Stop|Stabdyti|URL|Size|Dydis|and|upload|click|start|button|to|krovimo|Close|U�|daryti|Init|Files|kiekis|I�|tik|Papildomos|memory|buvo|kelti|galima|were|Extra|stripped|Vienu|metu|pa�|alintos|Runtime|galimas|Drag|ia|here|ran|out|queued|available|of|max|Pad�|time|Select|tinys|ym�|already|in|pl�|Invalid|Duplicate|Pasikartojanti|byla|count|atmintis|present|eikvota|darbin�|element|accepts|kelta|Uploaded|at|jau|yra|only'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stabdyti įkėlimą","Upload URL might be wrong or doesn't exist.":"Klaidinga arba neegzistuojanti įkėlimo nuoroda.",tb:"tb",Size:"Dydis",Close:"Uždaryti","Init error.":"Įkrovimo klaida.","Add files to the upload queue and click the start button.":"Pridėkite bylas į įkėlimo eilę ir paspauskite starto mygtuką.",Filename:"Bylos pavadinimas","Image format either wrong or not supported.":"Paveiksliuko formatas klaidingas arba nebepalaikomas.",Status:"Statusas","HTTP Error.":"HTTP klaida.","Start Upload":"Pradėti įkėlimą",mb:"mb",kb:"kb","Duplicate file error.":"Pasikartojanti byla.","File size error.":"Netinkamas bylos dydis.","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"Klaida: Netinkamas bylos plėtinys:","Select files":"Žymėti bylas","%s already present in the queue.":"%s jau yra eilėje.","File: %s":"Byla: %s",b:"b","Uploaded %d/%d files":"Įkelta bylų: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Vienu metu galima įkelti tik %d bylas(ų). Papildomos bylos buvo pašalintos.","%d files queued":"%d bylų eilėje","File: %s, size: %d, max file size: %d":"Byla: %s, dydis: %d, galimas dydis: %d","Drag files here.":"Padėti bylas čia.","Runtime ran out of available memory.":"Išeikvota darbinė atmintis.","File count error.":"Netinkamas bylų kiekis.","File extension error.":"Netinkamas pletinys.","Error: File too large:":"Klaida: Byla per didelė:","Add Files":"Pridėti bylas"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.min.js
index 38929691d9ccf09fe067358a018864f8bcec6bc2..b4f8847a933897dbd54bad8273c38e3f2ff0de76 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1e.1f({"z 1":"z 1","1 o u P c 9 G\'t M.":"1 o u P c 9 G\'t M.","1g":"1h","1d":"1c�l","16":"17�19","1a 7.":"1b�1i 5�0�4.","j 3 1j i 1q B 1r 1s i 1t 1p.":"1o e p 1k 1l�1m�1n 1u","10":"k V","O S C c 9 x H.":"O S C c 9 x H.","15":"12","D 6.":"D 5�0�4.","w 1":"w 1","13":"14","11":"W","X 8 7.":"Y�Z Q 5�0�4","2 f 7.":"k g�18 5�0�4.","N/A":"N/A","20":"21","6: U 8 m:":"6: U 8 m:","22 3":"23�1Z e","%s 1Y 1U 1V i B.":"%s 1W 1X 25 24�.","2: %s":"r: %s","b":"1v","2c %d/%d 3":"2a�26�y�28 %d/%d h","1 29 2d 27 %d 8(s) 2b a 1S. 1T 3 1C 1D.":"1E�1F 1B�y�t 1A %d e 1w� 1x�. 1y�1z h 1G n","%d 3 1H":"%d h n p","2: %s, f: %d, F 8 f: %d":"r: %s, g�l: %d, F Q g�l: %d","1O 3 1P.":"1Q e 0�1R","I J L K T R.":"I J L K T R.","2 1N 7.":"1M 1I 5�0�4","2 m 7.":"k 1J�1K�1L 5�0�4.","6: 2 q v:":"6: 2 q v:","j E":"j E"});',62,138,'�|Upload|File|files|da|k�|Error|error|file|or|||wrong||failus|size|izm�|faili|the|Add|Faila|rs|extension|pievienoti|URL|rindai|too|Fails|||might|large|Start|not|d�|Stop||queue|either|HTTP|Files|max|doesn|supported|Runtime|ran|of|out|exist||Image|be|faila|memory|format|available|Invalid|nosaukums|kilobaiti|Duplicate|Atk�|rtota|Filename|kb|Statuss|mb|megabaiti|Status|Close|Aizv�|ra|rt|Init|Inicializ�|Izm�|Size|plupload|addI18n|tb|terrabaiti|cijas|to|un|klik�|�|iniet|Pieveinojiet|button|upload|and|click|start|uz|baiti|vien�|reiz�|Atliku�|ie|tikai|iel�|were|stripped|Iesp�|jams|netika|queued|skaita|papla�|in�|juma|Failu|count|Drag|here|Ievelciet|eit|time|Extra|present|in|jau|ir|already|lieties|gb|gigabaiti|Select|Izv�|rind�|atrodams|upiel�|only|ti|element|Aug�|at|Uploaded|accepts'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"terrabaiti",Size:"Izmērs",Close:"Aizvērt","Init error.":"Inicializācijas kļūda.","Add files to the upload queue and click the start button.":"Pieveinojiet failus rindai un klikšķiniet uz",Filename:"Faila nosaukums","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Statuss","HTTP Error.":"HTTP kļūda.","Start Upload":"Start Upload",mb:"megabaiti",kb:"kilobaiti","Duplicate file error.":"Atkārtota faila kļūda","File size error.":"Faila izmēra kļūda.","N/A":"N/A",gb:"gigabaiti","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Izvēlieties failus","%s already present in the queue.":"%s jau ir atrodams rindā.","File: %s":"Fails: %s",b:"baiti","Uploaded %d/%d files":"Augšupielādēti %d/%d faili","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Iespējams ielādēt tikai %d failus vienā reizē. Atlikušie faili netika pievienoti","%d files queued":"%d faili pievienoti rindai","File: %s, size: %d, max file size: %d":"Fails: %s, izmērs: %d, max faila izmērs: %d","Drag files here.":"Ievelciet failus šeit","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Failu skaita kļūda","File extension error.":"Faila paplašinājuma kļūda.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.min.js
index 5981433f021ba18aeb355761083035aa4e75364a..826e4aed617e108d71a7e5de5b6cb683f22b9e5d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('10.11({"H 2":"H 2","2 C M L 7 6 V\'t U.":"2 C M L 7 6 V\'t U.","16":"","17":"15","j":"j","13 3.":"14 3.","g 1 19 9 l n 1a 1f 9 12 1e.":"1d c 1b 1c 1g Z x X W \'e\'.","Y":"18","k h p 7 6 y z.":"k h p 7 6 y z.","u":"u","r 4.":"r 4.","e 2":"e 2","1l":"","1x":"","1w 5 3.":"","0 8 3.":"1v 4.","N/A":"1u 1z","1C":"","4: v 5 f:":"4: v 5 f:","1B 1":"1h 1A(x):","%s 1y 1s 1t 9 n.":"","0: %s":"0: %s","b":"","1k %d/%d 1":"%d/%d c 1j-l","2 m o B %d 5(s) i a q. K 1 Q O.":"2 m o B %d 5(s) i a q. K 1 Q O.","%d 1 T":"%d 1 T","0: %s, 8: %d, 1i 5 8: %d":"","1m 1 1n.":"1r c 1q.","J I G D E F.":"J I G D E F.","0 S 3.":"0 S 3.","0 f 3.":"1p 1o.","4: 0 P R:":"4: 0 P R:","g w":"g w"});',62,101,'File|files|Upload|error|Error|file|or|wrong|size|the|||bestanden||Start|extension|Add|format|at|Close|Image|upload|element|queue|accepts|either|time|HTTP|||Status|Invalid|Files|en|not|supported||only|URL|of|available|memory|out|Stop|ran|Runtime|Extra|be|might||stripped|too|were|large|count|queued|exist|doesn|op|druk|Filename|wachtrij|plupload|addI18n|start|Init|Initialisatie|Grootte|tb|Size|Bestandsnaam|to|and|toe|aan|Voeg|button|click|de|Selecteer|max|ge|Uploaded|mb|Drag|here|bestandstype|Ongeldig|hierheen|Sleep|present|in|Niet|Bestandsgrootte|Duplicate|kb|already|beschikbaar|bestand|Select|gb'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Grootte",Close:"Close","Init error.":"Initialisatie error.","Add files to the upload queue and click the start button.":"Voeg bestanden toe aan de wachtrij en druk op 'Start'.",Filename:"Bestandsnaam","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"Bestandsgrootte Error.","N/A":"Niet beschikbaar",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Selecteer bestand(en):","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"%d/%d bestanden ge-upload","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Sleep bestanden hierheen.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Ongeldig bestandstype.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.min.js
index 17ee721593b147e7a4d6f992de93a7dbe7d5619d..a4ed65d131707a177b39f752e640000707299dd8 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('18.19({"17 1":"16 q.","1 R S T 8 7 U\'t D.":"1 R S T 8 7 U\'t D.","14":"","15":"1a","l":"l","13 3.":"G�F�d 1b.","M 2 1g f 1h p 1f 1e f 1c 1d.":"K 6 i 1i \'10 q\'.","12":"11 E","o c u 8 7 B O.":"o c u 8 7 B O.","V":"V","L 5.":"G�F�d L.","m 1":"m 1","1m":"","1E":"","1F 4 3.":"","0 e 3.":"1D 1C 1A 1B�y.","N/A":"1L 1K�1I","1J":"","5: r 4 9:":"5: r 4 9:","1z 2":"1j 6:","%s 1y 1p 1n f p.":"","0: %s":"0: %s","b":"","1k %d/%d 2":"1l�1q %d/%d j�w","1 v n z %d 4(s) x a C. k 2 g h.":"1 v n z %d 4(s) x a C. k 2 g h.","%d 2 1w":"%d j�w w 1v.","0: %s, e: %d, 1s 4 e: %d":"","1t 2 1u.":"1x�1r 1o 6","Z Y X W Q P.":"Z Y X W Q P.","0 H 3.":"0 H 3.","0 9 3.":"1M�1H c E.","5: 0 I J:":"5: 0 I J:","M 1G":"K 6"});',62,111,'File|Upload|files|error|file|Error|pliki|or|wrong|extension|||format||size|the|were|stripped||plik�|Extra|Close|Start|accepts|Image|queue|transfer|Invalid|||either|element||at||only||not|time|exist|pliku|�|B�|count|too|large|Dodaj|HTTP|Add||supported|memory|available|URL|might|be|doesn|Status|of|out|ran|Runtime|Rozpocznij|Nazwa|Filename|Init|tb|Size|Przerwij|Stop|plupload|addI18n|Rozmiar|inicjalizacji|start|button|click|and|to|upload|kliknij|Wybierz|Uploaded|Wys�|mb|in|tu|present|ano|gnij|max|Drag|here|kolejce|queued|Przeci�|already|Select|zbyt|du�|jest|Plik|kb|Duplicate|Files|ugiwany|pne|gb|dost�|Nie|Nieobs�'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Przerwij transfer.","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Rozmiar",Close:"Close","Init error.":"Błąd inicjalizacji.","Add files to the upload queue and click the start button.":"Dodaj pliki i kliknij 'Rozpocznij transfer'.",Filename:"Nazwa pliku","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"Błąd HTTP.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"Plik jest zbyt duży.","N/A":"Nie dostępne",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Wybierz pliki:","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Wysłano %d/%d plików","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d plików w kolejce.","File: %s, size: %d, max file size: %d":"","Drag files here.":"Przeciągnij tu pliki","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Nieobsługiwany format pliku.","Error: File too large:":"Error: File too large:","Add Files":"Dodaj pliki"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.min.js
index e27391e4808d77248965a00955a3e694b29c305b..c5101540d31313412f84e8c681368c49ece121d3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1z.1n({"1H 8":"23 o 7","8 y 1J P h i R\'t 1e.":"y c 7 14� 15 16 l�o 17","13":"","12":"C","Y":"Z","10 4.":"g 11.","G 1 18 j 19 I 1g X j 1h 1i.":"1j k 5 1f e 1a 1b 1c�o \\"n o 7\\".","1d":"1k W 2","r q u h i v x.":"r q u h i v x.","p":"p","w 3.":"g w.","V 8":"n o 7","T":"","S":"","U 6 4.":"","0 9 4.":"C c 2 l�o B.","N/A":"N/D","Q":"","3: m 6 f:":"3: m 6 f:","1Y 1":"1P k 5","%s 1Q 1R 1O j I.":"","0: %s":"1N: %s","b":"","1K %d/%d 1":"1L(s) %d/%d 2(s)","8 1M 1l 1S %d 6(s) 1T a 20. 22 1 21 1Z.":"1U� 1V�o 1W %d 5 1X 1I. O 1s 1t 1u 1v 1r.","%d 1 1q":"%d 2(s)","0: %s, 9: %d, 1m 6 9: %d":"","1o 1 1p.":"1w k 5 1x 1E�","J M L K z H.":"J M L K z H.","0 1F 4.":"g 1G 1D 1C 5","0 f 4.":"1y c 2 l�o B.","3: 0 E F:":"3: 0 E F:","G 1A":"1B 2(s)"});',62,128,'File|files|arquivo|Error|error|arquivos|file|envio|Upload|size|||de|||extension|Erro|wrong|or|the|os|n�|Invalid|Iniciar||Status|format|Image|||either|not|HTTP|supported|URL|available||permitido|Tamanho||too|large|Add|memory|queue|Runtime|of|out|ran|||be|gb|doesn|kb|mb|Duplicate|Start|do|click|Close|Fechar|Init|inicializando|Size|tb|est�|errada|ou|existe|to|upload|clique|no|bot�|Filename|exist|abaixo|and|start|button|Adicione|Nome|accepts|max|addI18n|Drag|here|queued|descartado|que|passou|disso|foi|Arraste|pra|Tipo|plupload|Files|Adicionar|dos|contagem|c�|count|na|Stop|vez|might|Uploaded|Enviado|element|Arquivo|in|Escolha|already|present|only|at|S�|s�|aceitos|por|Select|stripped|time|were|Extra|Parar'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Parar o envio","Upload URL might be wrong or doesn't exist.":"URL de envio está errada ou não existe",tb:"",Size:"Tamanho",Close:"Fechar","Init error.":"Erro inicializando.","Add files to the upload queue and click the start button.":'Adicione os arquivos abaixo e clique no botão "Iniciar o envio".',Filename:"Nome do arquivo","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"Erro HTTP.","Start Upload":"Iniciar o envio",mb:"",kb:"","Duplicate file error.":"","File size error.":"Tamanho de arquivo não permitido.","N/A":"N/D",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Escolha os arquivos","%s already present in the queue.":"","File: %s":"Arquivo: %s",b:"","Uploaded %d/%d files":"Enviado(s) %d/%d arquivo(s)","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Só são aceitos %d arquivos por vez. O que passou disso foi descartado.","%d files queued":"%d arquivo(s)","File: %s, size: %d, max file size: %d":"","Drag files here.":"Arraste os arquivos pra cá","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Erro na contagem dos arquivos","File extension error.":"Tipo de arquivo não permitido.","Error: File too large:":"Error: File too large:","Add Files":"Adicionar arquivo(s)"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.min.js
index 633893fe1e37d8d210291ce328460713256080c1..fc2103716926148cb00d30443c9db5999f0b36cd 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1l.1m({"1n 4":"1k�1j 1�c�j","4 V T Y h k U\'t H.":"4 V T Y h k U\'t H.","v":"v","1f":"1g�g","1h":"1�1i","1o 7.":"2 1e�1w.","X 3 1x l 1y C 1v 1u l 1q 1r.":"D� 0�9 1�n B 1s 1t� 1z \\"1�Z 1�c�j\\".","17":"12 0�6","13 14 10 h k 1b 15.":"1a z 19 I f 16�18 I 1c f 11.","1p":"1G","P m.":"2 P","20 4":"1�Z 1�c�j","w":"w","u":"u","21 8 7.":"2 22 0�6.","5 i 7.":"2 1Z 0�6.","N/A":"N/A","E":"E","m: 1A 8 W:":"2: 1V 0�1W f 24�:","1X 3":"23� 0�R","%s 2a 28 29 l C.":"%s 26� 27 1�n B z 1T�1U.","5: %s":"e�6: %s","b":"b","1H %d/%d 3":"e�9 1�c�1E %d/%d","4 G F y %d 8(s) x a q. p 3 o r.":"4 G F y %d 8(s) x a q. p 3 o r.","%d 3 1C":"%d 0�9 1D","5: %s, i: %d, 1J 8 i: %d":"e�6: %s, J�g: %d, J�g 1R�: %d","1S 3 1P.":"1O 1L 0�R.","L K S M O Q.":"L K S M O Q.","5 1M 7.":"2 1N�1Y 0�9.","5 W 7.":"2 1Q 0�6.","m: 5 1K 1B:":"2: e�1F f 1I 25:","X 1d":"D� 0�9"});',62,135,'fi�|�|Eroare|files|Upload|File|ier|error|file|iere|||nc�||Fi�|este|rime|wrong|size|rcarea|or|the|Error||were|Extra|time|stripped|||kb|tb|mb|at|only|de||lista|queue|Adaug�|gb|accepts|element|exist|ori|m�|ran|Runtime|of||available|HTTP|memory|ierele|out|might|doesn|URL|extension|Add|be|ncepe|either|suportat|Nume|Image|format|supported|gre�|Filename|it|imagine|Formatul|not|nu|Files|ini�|Size|M�|Close|nchide|te|Opre�|plupload|addI18n|Stop|Init|Status|start|button|apoi|apas�|click|and|ializare|to|upload|butonul|Invalid|large|queued|listate|rcate|ierul|Stare|Uploaded|prea|max|too|aici|count|num�|Trage|here|extensie|maxim�|Drag|a�|teptare|Extensia|ierului|Select|rare|dimensiune|Start|Duplicate|duplicat|Selecteaz�|invalid�|mare|exist�|deja|present|in|already'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Oprește încărcarea","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"tb",Size:"Mărime",Close:"Închide","Init error.":"Eroare inițializare.","Add files to the upload queue and click the start button.":'Adaugă fișiere în lista apoi apasă butonul "Începe încărcarea".',Filename:"Nume fișier","Image format either wrong or not supported.":"Formatul de imagine ori este greșit ori nu este suportat.",Status:"Stare","HTTP Error.":"Eroare HTTP","Start Upload":"Începe încărcarea",mb:"mb",kb:"kb","Duplicate file error.":"Eroare duplicat fișier.","File size error.":"Eroare dimensiune fișier.","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"Eroare: Extensia fișierului este invalidă:","Select files":"Selectează fișierele","%s already present in the queue.":"%s există deja în lista de așteptare.","File: %s":"Fișier: %s",b:"b","Uploaded %d/%d files":"Fișiere încărcate %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d fișiere listate","File: %s, size: %d, max file size: %d":"Fișier: %s, mărime: %d, mărime maximă: %d","Drag files here.":"Trage aici fișierele.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Eroare numărare fișiere.","File extension error.":"Eroare extensie fișier.","Error: File too large:":"Eroare: Fișierul este prea mare:","Add Files":"Adaugă fișiere"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.min.js
index a4cf234d7cf80f97104b63e2981bf6d05a1d169c..45dfb137beefa8a660ebe7e3974f6207029c4f31 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('Z.Y({"1m c":"0�1�1�0�0�0�0�0�1�1� 0�0�0�1�1�0�9�","c u w H k l 1a\'t I.":"0�0�1�2� 0�0�1�0�1�0�5� 0�3�1�0�0�0�0�1�0�1�0� 0�0�0� 0�0� 0�4 1�1�1�2�1�0�1�2�.","G":"1�0�","F":"0�0�0�0�2�","C":"0�0�9�1�1�1�","D 8.":"0�1�0�0�5� 0�0�0�1�0�0�0�0�0�0�1�0�0�.","n 7 E g J m K Q g R B.":"0�0�0�0�0�1�1�4 1�0�0�0�1� 0� 0�1�2�3�1� 0� 0�0�0�0�0�1�4 5�0�0�9� \\"0�0�0�1�1�0�0�1�1� 1�0�0�0�1�\\".","O":"0�0�1� 1�0�0�0�0�","L M S k l q p.":"0�0�1�0�0�1� 5�1�1�0�0�5� 0�3�1�0�0�0�0�1�0�1�0� 0�0�0� 0�0� 0�4 0�0�0�0�2�0�0�0�0�2�1�1�.","o":"0�1�0�1�1�1�","i h.":"0�1�0�0�5� i.","z c":"0�0�1�0�1�1� 0�0�0�1�1�0�9�","y":"0�0�","x":"5�","r e 8.":"0�0�5�0� 1�0�0�0� 1�0�4 0�1�0�1�1�1�1�1�0�1�2� 0� 0�1�2�3�0�.","6 f 8.":"0�3�1�0�0�0�0�1�0�1�0� 1�0�0�0�2� 1�0�0�0�0�.","N/A":"N/A","v":"0�0�","h: P e j:":"0�1�0�0�5�: 0� 1�0�0�0�0� 0�3�1�0�0�0�0�1�0�0�4 1�0�1�1�0�1�3�0�4:","1n 7":"0�1�0�2�0�1�4 1�0�0�0�1�","%s 1e 1f 1d g m.":"%s 1�0�4 0�1�0�1�1�1�1�1�0�1�2� 0� 0�1�2�3�0�.","6: %s":"0�0�0�0�: %s","b":"0�","1c %d/%d 7":"0�0�0�1�1�0�3�0� %d/%d 1�0�0�0�0�0�","c T 1b 1g %d e(s) 1h a 1l. 1k 7 1i 1j.":"0�0�0�1�1�0�0�1�0�1�0� 1�0�3�3�1� 0�0� 1�0�0� 0�1�0�0�0�0�0�2� 1�0�0�1�5� %d 1�0�0�0�(0�0�). 0�0�1�0�0�4 1�0�0�0�1� 0�1�0�0� 0�1�0�1�0�1�3�1�.","%d 7 19":"0� 0�1�2�3�0� %d 1�0�0�0�(0�0�)","6: %s, f: %d, 18 e f: %d":"0�0�0�0�:  %s, 1�0�0�0�2�: %d, 0�0�9�. 1�0�0�0�2� 1�0�0�0�0�: %d","X 7 W.":"0�2�2�0�1�0�1�4 1�0�0�0�1� 1�1�0�0�.","U V 10 11 16 17.":"0�0�0�0�1�0�1� 1�1�3�0� 0�1�3�1�1�0�0�0� 0�0�0�0�1� 0�0�1�1�1�0�0�0� 0�0�0�1�1�0�.","6 15 8.":"0�0�0�1�5�0� 0�0�0�0�0� 1�0�0�0�0�0�.","6 j 8.":"0�3�1�0�0�0�0�1�0�0�4 1�0�1�1�0�1�3�0�4 1�0�0�0�0�.","h: 6 14 12:":"0�1�0�0�5�: 0�0�0�0� 1�0�0�1�5�0� 0�0�0�1�1�0�0�:","n 13":"0�0�0�0�0�1�1�4 1�0�0�0�1�"});',62,86,'�|�|е�|е�|е|к�|File|files|error|к�|||Upload||file|size|the|Error|HTTP|extension|wrong|or|queue|Add|Status|supported|not|Duplicate|||URL|gb|might|kb|mb|Start||button|Close|Init|to|Size|tb|be|exist|upload|and|Image|format||Filename|Invalid|click|start|either|element|Runtime|ran|here|Drag|addI18n|plupload|out|of|large|Files|too|count|available|memory|max|queued|doesn|accepts|Uploaded|in|already|present|only|at|were|stripped|Extra|time|Stop|Select'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Остановить Загрузку","Upload URL might be wrong or doesn't exist.":"Адрес заргузки неправильный или он не существует.",tb:"тб",Size:"Размер",Close:"Закрыть","Init error.":"Ошибка инициализации.","Add files to the upload queue and click the start button.":'Добавьте файлы в очередь и нажмите кнопку "Загрузить файлы".',Filename:"Имя файла","Image format either wrong or not supported.":"Формат картинки неправильный или он не поддерживается.",Status:"Статус","HTTP Error.":"Ошибка HTTP.","Start Upload":"Начать загрузку",mb:"мб",kb:"кб","Duplicate file error.":"Такой файл уже присутствует в очереди.","File size error.":"Неправильный размер файла.","N/A":"N/A",gb:"гб","Error: Invalid file extension:":"Ошибка: У файла неправильное расширение:","Select files":"Выберите файлы","%s already present in the queue.":"%s уже присутствует в очереди.","File: %s":"Файл: %s",b:"б","Uploaded %d/%d files":"Загружено %d/%d файлов","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Загрузочный элемент за раз принимает только %d файл(ов). Лишние файлы были отброшены.","%d files queued":"В очереди %d файл(ов)","File: %s, size: %d, max file size: %d":"Файл:  %s, размер: %d, макс. размер файла: %d","Drag files here.":"Перетащите файлы сюда.","Runtime ran out of available memory.":"Рабочая среда превысила лимит достуной памяти.","File count error.":"Слишком много файлов.","File extension error.":"Неправильное расширение файла.","Error: File too large:":"Ошибка: Файл слишком большой:","Add Files":"Добавьте файлы"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.min.js
index 12b70f7d50260a9f2ff7bc2049632af3437ef7d7..c4a57b609dac64aee977ac891bc230bec5de42ef 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1d.1e({"1c 1":"1b� y�x","1 g j p 7 6 D\'t B.":"1 g j p 7 6 D\'t B.","1f":"","1g":"1l�1m�","C":"C","18 3.":"G 1k�1j.","e 2 1h 8 1i k 1n 14 8 11 10.":"Z c K J a 12 15 y�x.","17":"16�13 R","w u v 7 6 F E.":"w u v 7 6 F E.","1I":"1G","r 5.":"r G.","i 1":"i 1","1K":"","1J":"","1M 4 3.":"","0 9 3.":"1L 1N 1E�1B� 1t�1C�.","N/A":"N/A","1r":"","5: H 4 f:":"5: H 4 f:","1p 2":"1q c","%s 1u 1v 1A 8 k.":"","0: %s":"0: %s","b":"","1z %d/%d 2":"1y�Y %d/%d W","1 o n m %d 4(s) q a l. z 2 I T.":"1 o n m %d 4(s) q a l. z 2 I T.","%d 2 1x":"%d W 1w�Y K J","0: %s, 9: %d, 1D 4 9: %d":"","1F 2 1H.":"1o 1s c.","X S U O L M.":"X S U O L M.","0 P 3.":"0 P 3.","0 f 3.":"1a� 19 R.","5: 0 Q V:":"5: 0 Q V:","e h":"e h"});',62,112,'File|Upload|files|error|file|Error|or|wrong|the|size|||súbory||Add|extension|URL|Files|Start|might|queue|time|only|accepts|element|be|at|HTTP|||format|either|Image|vanie|nahr�|Extra||exist|Close|doesn|supported|not|Chyba|Invalid|were|zoznamu|do|available|memory||of|count|too|súboru|ran|stripped|out|large|súborov|Runtime|ch|Pridajte|button|start|potom|zov|click|spustite|N�|Filename|Init|typ|Chybn�|Zastavi�|Stop|plupload|addI18n|tb|Size|to|upload|cie|inicializ�|Ve�|kos�|and|Sem|Select|Vyberte|gb|pretiahnite|ve�|already|present|pridan�|queued|Nahran�|Uploaded|in|li�|k�|max|pr�|Drag|Stav|here|Status|kb|mb|Súbor|Duplicate|je'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Zastaviť nahrávanie","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Veľkosť",Close:"Close","Init error.":"Chyba inicializácie.","Add files to the upload queue and click the start button.":"Pridajte súbory do zoznamu a potom spustite nahrávanie.",Filename:"Názov súboru","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Stav","HTTP Error.":"HTTP Chyba.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"Súbor je príliš veľký.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vyberte súbory","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Nahraných %d/%d súborov","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d súborov pridaných do zoznamu","File: %s, size: %d, max file size: %d":"","Drag files here.":"Sem pretiahnite súbory.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Chybný typ súboru.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.min.js
index e35a3dcf84f47af47b9538b5e51c3344064f4d4a..6d2d84e8dde0c6f068bb688f18a883dbe4aa2448 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1a.19({"m 3":"m 3","3 l h j 9 8 B\'t E.":"3 l h j 9 8 B\'t E.","1c":"","1g":"1f�1e","x":"x","w 1.":"w 1.","M 2 13 e f n Z Y e X 10.":"11 7 u 15 i 12 14 1i g.","1m":"1x 1v","v r y 9 8 D C.":"v r y 9 8 D C.","q":"q","o 5.":"o 5.","g 3":"1t�1l f","1k":"","1j":"","1n 4 1.":"","0 6 1.":"0 6 1.","N/A":"N/A","1o":"","5: F 4 c:":"5: F 4 c:","1q 2":"1p 7","%s 1d 1r 1u e n.":"","0: %s":"0: %s","b":"","1h %d/%d 2":"16 %d/%d 1b","3 p k z %d 4(s) I a T. W 2 V U.":"3 p k z %d 4(s) I a T. W 2 V U.","%d 2 R":"%d 2 R","0: %s, 6: %d, 1s 4 6: %d":"","1y 2 1z.":"1A 7 1w.","J S H G K L.":"J S H G K L.","0 Q 1.":"0 Q 1.","0 c 1.":"0 c 1.","5: 0 P O:":"5: 0 P O:","M 17":"18 7"});',62,99,'File|error|files|Upload|file|Error|size|fajlove|or|wrong|||extension||the|upload|Start|might||be|accepts|URL|Stop|queue|HTTP|element|Status|format||||Image|Init|Close|either|only||doesn|supported|not|exist|Invalid|of|out|at|Runtime|available|memory|Add||large|too|count|queued|ran|time|stripped|were|Extra|start|click|and|button|Dodajte|kliknite|to|na|listu|Snimljeno|Files|Dodaj|addI18n|plupload|fajlova|tb|already|ina|Veli�|Size|Uploaded|dugme|kb|mb|ni|Filename|Duplicate|gb|Izaberite|Select|present|max|Po�|in|fajla|ovde|Naziv|Drag|here|Prevucite'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Veličina",Close:"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Dodajte fajlove u listu i kliknite na dugme Start.",Filename:"Naziv fajla","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP Error.","Start Upload":"Počni upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Izaberite fajlove","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Snimljeno %d/%d fajlova","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Prevucite fajlove ovde.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Dodaj fajlove"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.min.js
index f3e9caf87db3c6ce6aff13325d123f1eb76801f7..163945c6a38de0ae897d867d4427a8432150e9ae 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('11.1d({"L 3":"L 3","3 G H Q 6 7 W\'t T.":"3 G H Q 6 7 W\'t T.","16":"","15":"14","m":"m","g 2.":"g 2.","e 1 13 c 17 l 18 12 c u 1b.":"1a�19 r f r 10�n Z 1c 1h� u.","1v":"1s","q p v 6 7 w B.":"q p v 6 7 w B.","o":"o","y 5.":"y 5.","x 3":"x 3","1q":"","1u":"","1t 4 2.":"","0 8 2.":"0 8 2.","N/A":"N/A","1r":"","5: C 4 9:":"5: C 4 9:","1e 1":"1o�1i f","%s 1p 1g 1f c l.":"","0: %s":"0: %s","b":"","h %d/%d 1":"h %d/%d 1","3 j i D %d 4(s) z a S. R 1 U V.":"3 j i D %d 4(s) z a S. R 1 U V.","%d 1 Y":"%d 1 Y","0: %s, 8: %d, 1j 4 8: %d":"","1k 1 1n.":"1m f 1l","K M O J I E.":"K M O J I E.","0 F 2.":"0 F 2.","0 9 2.":"0 9 2.","5: 0 P X:":"5: 0 P X:","e k":"e k"});',62,94,'File|files|error|Upload|file|Error|wrong|or|size|extension|||the||Add|filer|Init|Uploaded|accepts|element|Files|queue|Close||Status|format|Image|till|||start|either|not|Start|HTTP|at||supported|Invalid|only|memory|count|URL|might|available|of|Runtime|Stop|ran||out|too|be|Extra|time|exist|were|stripped|doesn|large|queued|och|k�|plupload|click|to|Storlek|Size|tb|upload|and|gg|L�|button|tryck|addI18n|Select|in|present|p�|lj|max|Drag|hit|Dra|here|V�|already|mb|gb|Filnamn|Duplicate|kb|Filename'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.",tb:"",Size:"Storlek",Close:"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Lägg till filer till kön och tryck på start.",Filename:"Filnamn","Image format either wrong or not supported.":"Image format either wrong or not supported.",Status:"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload",mb:"",kb:"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A",gb:"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Välj filer","%s already present in the queue.":"","File: %s":"File: %s",b:"","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Dra filer hit","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.min.js
index 59827c38ee01cbdbdd68f771197c190107925733..fc78131d3a05be59b295f142ea862a9736b2fd63 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('F.G({"E 7":"0��0��0��0��0��0��0��0��0��0��0��","7 k D B i e C\'t H.":"k 0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�1��0��0��0��","I":"0��0��0��0��0��0��0��0��","O":"0��0��0��0��","P":"0��0��0��","h 5.":"h 0��0��0��0��0��0��0��0��0��0��0��0��0��0��","g 4 M 9 L f z K 9 Q y.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�1��0��0��0��0��0��0��0��0��0��","p":"0��0��0��0��0��0��0��0��","o n m i e v x.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�3��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","w":"0�3��0��0��0��","l c.":"l 0��0��0��0��0��0��0��0��0��0��0��0��0��0��","r 7":"0��0��0��0��0��0��0��0��0��0��0��0��","q":"0��0��0��0��0��0��0��0��","u":"0��0��0��0��0��0��0��0��","J 6 5.":"0��0��0��0��0��0�1��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","2 8 5.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","N/A":"N/A","1d":"0��0��0��0��0��0��0��0��","c: R 6 j:":"0��0��0��0��0��0��0��0��0��0��: 0��0��0��0�3��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��:","18 4":"0��0��0��0��0��0��0��0��0��","%s 1c 1i 1b 9 f.":"%s 0��0��0��0��0��0��0��0��0��0��0��0��0��","2: %s":"0��0��0��0��: %s","b":"0��0��0��0��","1e %d/%d 4":"0��0��0��0��0��0��0��0��0��0��0�� %d/%d 0��0��0��0��","7 1j 1h 1g %d 6(s) 1f a 16. 17 4 W X.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�� %d 0��0��0��0��(s) 0��0��0��0��0��0��0��0��0��0��0��0��0�1��0��0��0��0�� 0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","%d 4 V":"%d 0��0��0��0��0��0�1��0��0��0��0��0��0��0��0��0��","2: %s, 8: %d, U 6 8: %d":"0��0��0��0��: %s, 0��0��0��0��: %d, 0��0��0��0��0��0��0��0��0�3��0��0�3��0��: %d","Y 4 Z.":"0��0��0��0��0��0��0��0��0��0��0�1��0��0�1��","14 15 13 12 10 11.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","2 19 5.":"0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","2 j 5.":"0��0��0��0�3��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��","c: 2 T S:":"0��0��0��0��0��0��0��0��0��0��: 0��0��0��0��0��0��0��0��0��0��0��0��0��0��:","g 1a":"0��0��0��0��0��0��0��0��0��"});',62,82,'�|��|File|��|files|error|file|Upload|size|the|||Error||or|queue|Add|Init|wrong|extension|URL|HTTP|either|format|Image|Filename|mb|Start|||kb|not|Status|supported|button|and||be|doesn|might|Stop|plupload|addI18n|exist|tb|Duplicate|click|upload|to||Size|Close|start|Invalid|large|too|max|queued|were|stripped|Drag|here|available|memory|of|out|Runtime|ran|time|Extra|Select|count|Files|in|already|gb|Uploaded|at|only|accepts|present|element'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"หยุดอัพโหลด","Upload URL might be wrong or doesn't exist.":"URL ของการอัพโหลดอาจจะผิดหรือไม่มีอยู่",tb:"เทราไบต์",Size:"ขนาด",Close:"ปิด","Init error.":"Init เกิดข้อผิดพลาด","Add files to the upload queue and click the start button.":"เพิ่มไฟล์ไปยังคิวอัพโหลดและคลิกที่ปุ่มเริ่ม",Filename:"ชื่อไฟล์","Image format either wrong or not supported.":"รูปแบบรูปภาพทั้งสองผิดหรือไม่รองรับ",Status:"สถานะ","HTTP Error.":"HTTP เกิดข้อผิดพลาด","Start Upload":"เริ่มอัพโหลด",mb:"เมกะไบต์",kb:"กิโลไบต์","Duplicate file error.":"ไฟล์ที่ซ้ำกันเกิดข้อผิดพลาด","File size error.":"ขนาดไฟล์เกิดข้อผิดพลาด","N/A":"N/A",gb:"กิกะไบต์","Error: Invalid file extension:":"ข้อผิดพลาด: นามสกุลไฟล์ไม่ถูกต้อง:","Select files":"เลือกไฟล์","%s already present in the queue.":"%s อยู่ในคิวแล้ว","File: %s":"ไฟล์: %s",b:"ไบต์","Uploaded %d/%d files":"อัพโหลดแล้ว %d/%d ไฟล์","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"การอัพโหลดจะยอมรับเฉพาะ %d ไฟล์(s) ในช่วงเวลาเดียวกัน เมื่อไฟล์พิเศษถูกปลดออก","%d files queued":"%d ไฟล์ที่อยู่ในคิว","File: %s, size: %d, max file size: %d":"ไฟล์: %s, ขนาด: %d, ขนาดไฟล์สูงสุด: %d","Drag files here.":"ลากไฟล์มาที่นี่","Runtime ran out of available memory.":"รันไทม์วิ่งออกมาจากหน่วยความจำ","File count error.":"การนับไฟล์เกิดข้อผิดพลาด","File extension error.":"นามสกุลไฟล์เกิดข้อผิดพลาด","Error: File too large:":"ข้อผิดพลาด: ไฟล์ใหญ่เกินไป:","Add Files":"เพิ่มไฟล์"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.min.js
index 692b9667f4d78ce494c14024f7be045f9f857c4b..f45ec3be41cc57c0bcac339ae20c5ab4d9681921 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1N.1A({"1E 7":"8�p 1K","7 J 1F 26 i g 12\'t 2a.":"J D h o 13� S.","I":"I","O":"M","1k":"1l","1t 5.":"1a�1o�r� 1�.","j 2 1e e 1d l 1f 1g e 1h 1c.":"f� 1b�a 17 16 x�18 19 1i�1j�n.","1r":"0 1s�","1u 1q 1p i g 1m 1n.":"15 1v� 14�w� h o P.","Q":"L","y c.":"y 1�.","K 7":"8�p x�R","v":"v","u":"u","10 6 5.":"11 3 1�.","4 9 5.":"0 z 1�.","N/A":"-","q":"q","c: Z 6 E:":"H: Y�U 3 B�F�:","T 2":"f� V�","%s W X G e l.":"%s 2s 2c 2b.","4: %s":"0: %s","b":"2d","2e %d/%d 2":"%d/%d 3 C�2f","7 29 24 23 %d 6(s) 25 a 28. 27 2 2g 2h.":"8�2v 2r� 2q� 2t %d 3 2u 2p. 2o 2j 2i�2k 2l.","%d 2 2n":"2m %d 3 22.","4: %s, 9: %d, 21 6 9: %d":"0: %s, 1H: %d, 1I 3 z: %d","1J 2 1D.":"f� 1y 1x�1z�n.","1C 1B 1L 1M 1W 1V.":"1X�w�1Y 20�G 1Z 1U D.","4 1T 5.":"0 1O�m 1�.","4 E 5.":"0 B�F� 1�.","c: 4 1S 1R:":"H: 0 r�1Q 1P�C�k:","j 1G":"0 1w"});',62,156,'Dosya|hatas�|files|dosya|File|error|file|Upload|Y�|size|||Error||the|Dosyalar�|or|ya|wrong|Add||queue|||da|klemeyi|gb|�|||kb|mb|�|ba�|HTTP|boyutu||uzant�|y�|yok|extension|s�|in|Hata|tb|URL|Start|Durum|Boyut||Size|desteklenmiyor|Status|lat|olabilir|Select|ersiz|se�|already|present|Ge�|Invalid|Duplicate|Yinelenen|doesn|hatal�|yanl�|Resim|ve|ekleyin|latma|butonuna|Ba�|kuyru�|button|upload|to|and|click|start|t�|klay�|Close|Kapat|not|supported|lang�|either|format|Filename|ad�|Init|Image|format�|ekle|b�|buraya|rak�|addI18n|ran|Runtime|here|Stop|might|Files|boyut|maksimum|Drag|durdur|out|of|plupload|say�|b�|ok|large|too|count|bellek|memory|available|�|lem|yeterli|i�|max|var|only|accepts|at|be|Extra|time|element|exist|mevcut|zaten|bayt|Uploaded|klendi|were|stripped|i�|dosyalar|leme|konulmaz|Kuyrukta|queued|Ekstra|eder|ayn�|eleman�|kuyrukta|anda|kabul|kleme'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Yüklemeyi durdur","Upload URL might be wrong or doesn't exist.":"URL yok ya da hatalı olabilir.",tb:"tb",Size:"Boyut",Close:"Kapat","Init error.":"Başlangıç hatası.","Add files to the upload queue and click the start button.":"Dosyaları kuyruğa ekleyin ve başlatma butonuna tıklayın.",Filename:"Dosya adı","Image format either wrong or not supported.":"Resim formatı yanlış ya da desteklenmiyor.",Status:"Durum","HTTP Error.":"HTTP hatası.","Start Upload":"Yüklemeyi başlat",mb:"mb",kb:"kb","Duplicate file error.":"Yinelenen dosya hatası.","File size error.":"Dosya boyutu hatası.","N/A":"-",gb:"gb","Error: Invalid file extension:":"Hata: Geçersiz dosya uzantısı:","Select files":"Dosyaları seç","%s already present in the queue.":"%s kuyrukta zaten mevcut.","File: %s":"Dosya: %s",b:"bayt","Uploaded %d/%d files":"%d/%d dosya yüklendi","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Yükleme elemanı aynı anda %d dosya kabul eder. Ekstra dosyalar işleme konulmaz.","%d files queued":"Kuyrukta %d dosya var.","File: %s, size: %d, max file size: %d":"Dosya: %s, boyut: %d, maksimum dosya boyutu: %d","Drag files here.":"Dosyaları buraya bırakın.","Runtime ran out of available memory.":"İşlem için yeterli bellek yok.","File count error.":"Dosya sayım hatası.","File extension error.":"Dosya uzantısı hatası.","Error: File too large:":"Hata: Dosya çok büyük:","Add Files":"Dosya ekle"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.min.js
index b90682a7f3b8634306fdeced40b17e86e3c13572..a41f9faf79418d42e78ad28172596e29e022b6a0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('L.M({"K c":"0�1�0�0�0�0�1�0� 0�0�0�0�0�1�0�0�2�0�1�","c J G H k h I\'t O.":"0�0�1�5�0� 0�0�0�0�0�1�0�0�2�0�1� 0�2�1�0�0�0�0�1�0�0� 0�0�0� 0�4 1�1�0�1�1�.","P":"","U":"0�0�0�0�1�1�","V":"0�0�j�0�1�0�","T 8.":"0�0�0�0�0�3� 1�0�1�1�1�0�0�1�0�0�1�1�1�.","m 6 S f Q l R F f E r.":"0�0�0�0�0�1�4 1�0�0�0�0� 0� 1�5�0�1� 1�0� 0�0�1�0�1�0�1�1�1� 3�0�0�j� \\"0�0�0�0�0�1�0�0�0�1�0� 1�0�0�0�0�\\".","q":"0�0�0�0�0� 1�0�0�0�1�","v o p k h C D.":"0�0�1�0�0�1� 3�1�1�0�0�3� 0�4 0�1�0�0�0�0�1�0�0�0� 0�0�0� 0�4 0�1�0�1�1�0�0�1�1�1�1�1�1�.","B":"0�1�0�1�1�1�","i g.":"0�0�0�0�0�3� i.","x c":"0�0�1�0�1�0� 0�0�0�0�0�1�0�0�2�0�1�","y":"","W":"","X 9 8.":"","7 e 8.":"0�2�1�0�0�0�0�1�0�0�0� 1�0�0�0�1�1� 1�0�0�0�1�.","N/A":"0�/0�","1f":"","g: 1n 9 n:":"0�0�0�0�0�3�: 0� 1�0�0�0�1� 0�2�1�0�0�0�0�1�0�4 1�0�0�1�0�1�2�0�1�:","1h 6":"0�0�5�1�1�1� 1�0�0�0�0�","%s 1g 1d 1i f l.":"","7: %s":"0�0�0�0�: %s","b":"","1m %d/%d 6":"0�0�0�0�0�1�0�0�2�0� %d/%d 1�0�0�0�1�0�","c 1k 1e 1b %d 9(s) 1c a 13. 11 6 10 Y.":"","%d 6 Z":"0� 1�5�0�1� %d 1�0�0�0�(1�0�)","7: %s, e: %d, 14 9 e: %d":"","19 6 16.":"0�5�5�1�0�0�1�1�1� 1�0�0�0�0� 1�1�0�0�.","17 12 18 1a 15 1l.":"0�0�0�0�1�4 1�5�2�0�0�0�1�4 0�5�2�0�1�0�0�0� 0�1�0�1�1� 0�0�1�1�1�0�0�0�1� 0�0�0�\'1�1�1�.","7 1j 8.":"0�0�0�0�0�1�0� 0�0�0�0�1�0� 1�0�0�0�1�0�.","7 n 8.":"0�2�1�0�0�0�0�1�0�4 1�0�0�1�0�1�2�0�1� 1�0�0�0�1�.","g: 7 z w:":"0�0�0�0�0�3�: 0�0�0�0� 0�0�0�0�0�1�0� 0�2�0�3�0�:","m u":"0�0�0�0�1�0� 1�0�0�0�0�"});',62,86,'�|�|е�|к�|е|е�|files|File|error|file|||Upload||size|the|Error|or|HTTP|к�|wrong|queue|Add|extension|format|either|Filename|button|||Files|Image|large|Start|mb|too||Status|not|supported|start|click|might|be|doesn|URL|Stop|plupload|addI18n||exist|tb|upload|and|to|Init|Size|Close|kb|Duplicate|stripped|queued|were|Extra|ran|time|max|available|here|Runtime|out|Drag|of|only|at|present|accepts|gb|already|Select|in|count|element|memory|Uploaded|Invalid'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"Зупинити завантаження","Upload URL might be wrong or doesn't exist.":"Адреса завантаження неправильна або не існує.",tb:"",Size:"Розмір",Close:"Закрити","Init error.":"Помилка ініціалізації.","Add files to the upload queue and click the start button.":'Додайте файли в чергу та натисніть кнопку "Завантажити файли".',Filename:"Назва файлу","Image format either wrong or not supported.":"Формат картинки не правильний або не підтримується.",Status:"Статус","HTTP Error.":"Помилка HTTP.","Start Upload":"Почати завантаження",mb:"",kb:"","Duplicate file error.":"","File size error.":"Неправильний розмір файлу.","N/A":"Н/Д",gb:"","Error: Invalid file extension:":"Помилка: У файлу неправильне розширення:","Select files":"Оберіть файли","%s already present in the queue.":"","File: %s":"Файл: %s",b:"","Uploaded %d/%d files":"Завантажено %d/%d файлів","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"В черзі %d файл(ів)","File: %s, size: %d, max file size: %d":"","Drag files here.":"Перетягніть файли сюди.","Runtime ran out of available memory.":"Робоче середовище перевищило ліміт доступної пам'яті.","File count error.":"Занадто багато файлів.","File extension error.":"Неправильне розширення файлу.","Error: File too large:":"Помилка: Файл занадто великий:","Add Files":"Додати файли"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.min.js
index ab892e4c09b542b40dd46c9cb583512da00ff2f6..5dc1dc0d96c0bc29e99924b37c485c001b056cf6 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('12.1c({"1q e":"0��1��2��2��","e E z L w n 1f\'t M.":"2��2��6��K��4��1��3��4��6��1��2��0��0��5��","o":"o","J":"0��0��","G":"0��3��","H 9.":"0��0��0��3��4��5��","l 8 I i O r P U i V F.":"0��1��2��1��0��0��2��2��3��0��g��6��0��6��0��k��0��0��2��2��k��1��3��5��","S":"1��2��0��","Q R W w n y x.":"0��6��1��0��3��4��1��4��2��1��1��5��","C":"6��1��","p j.":"p 3��4��5��","D e":"0��0��2��2��","v":"v","u":"u","B c 9.":"3��0��1��2��3��4��5��","7 h 9.":"1��2��0��0��3��4��5��","N/A":"N/A","m":"m","j: T c q:":"3��4��g��1��1��6��1��2��1��0��0��:","1s 8":"3��1��1��2��","%s 1i 1j 1h i r.":"%s 0��6��0��0��0��3��0��3��5��","7: %s":"1��2��: %s","b":"b","1g %d/%d 8":"0��2��2�� %d/%d 2�f��2��","e 1e X 1k %d c(s) 1l a 1r. 1p 8 1o 1m.":"1��1��0�f��0��0��1��2��2�� %d 2�f��2��g��0��2��6��1��2��0��2��4��0��3��5��","%d 8 1n":"%d 2�f��2��0��0��0��3��0��","7: %s, h: %d, 1d c h: %d":"1��2��: %s, 0��0��: %d, 1��0��1��2��0��0��: %d","13 8 11.":"1��1��2��1��0��4��3��5��","10 Y Z 14 15 1a.":"4��4��1��0��1��4��1��1��0��6��0��0��5��","7 1b 9.":"1��2��1��3��3��4��5��","7 q 9.":"1��2��1��0��0��3��4��5��","j: 7 19 18:":"3��4��: 1��2��0�16��:","l 17":"0��0��1��2��"});',62,91,'�|�|�|�|�|�|�|File|files|error|||file||Upload|��|�|size|the|Error|�|Add|gb|or|tb|HTTP|extension|queue|||kb|mb|wrong|supported|not|might||Duplicate|Status|Start|URL|button|Close|Init|to|Size|URL�|be|exist||upload|and|Image|format|Filename|Invalid|click|start|either|accepts|ran|out|Runtime|here|plupload|Drag|of|available|��|Files|large|too|memory|count|addI18n|max|element|doesn|Uploaded|in|already|present|only|at|stripped|queued|were|Extra|Stop|time|Select'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"停止上传","Upload URL might be wrong or doesn't exist.":"上传的URL可能是错误的或不存在。",tb:"tb",Size:"大小",Close:"关闭","Init error.":"初始化错误。","Add files to the upload queue and click the start button.":"将文件添加到上传队列,然后点击”开始上传“按钮。",Filename:"文件名","Image format either wrong or not supported.":"图片格式错误或者不支持。",Status:"状态","HTTP Error.":"HTTP 错误。","Start Upload":"开始上传",mb:"mb",kb:"kb","Duplicate file error.":"重复文件错误。","File size error.":"文件大小错误。","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"错误:无效的文件扩展名:","Select files":"选择文件","%s already present in the queue.":"%s 已经在当前队列里。","File: %s":"文件: %s",b:"b","Uploaded %d/%d files":"已上传 %d/%d 个文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只接受同时上传 %d 个文件,多余的文件将会被删除。","%d files queued":"%d 个文件加入到队列","File: %s, size: %d, max file size: %d":"文件: %s, 大小: %d, 最大文件大小: %d","Drag files here.":"把文件拖到这里。","Runtime ran out of available memory.":"运行时已消耗所有可用内存。","File count error.":"文件数量错误。","File extension error.":"文件扩展名错误。","Error: File too large:":"错误: 文件太大:","Add Files":"增加文件"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.min.js
index 327a76e7ed24a85786aef6c107e74b2f725232f7..5117d73d27ac93e466964feaa8c7ceba881a7ca1 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('Q.R({"P h":"0��1��8��0��","h O K L p o M\'t S.":"3�1��T��6��1��7�1��6��8��0��0��5��","m":"m","Z":"0��0��","10":"2��2��","Y e.":"0��0��0��2��7�5��","u c X k U y J V k W 11.":"0��3�1��0��0��8��0��j�0��f��4��0��2��2��r��2��0��8��0��r��1��2��5��","C":"3�1��0��4��","B z I p o H D.":"0��4��1��0��2��7�1��6��8��1��1��5��","G":"4��1��","x l.":"x 2��7�5��","F h":"2��0��8��0��","v":"v","w":"w","E g e.":"2��7�f��3�1��2��6��5��","9 i e.":"2��7�f��3�1��0��0��6��2��2��0��5��","N/A":"N/A","n":"n","l: 1p g q:":"2��7�f��8��1��0��4��3�1��1��0��:","1q c":"2��1��3�1��","%s 12 1n 1k k y.":"%s 0��4��0��0��4��0��4��3�1��j�0��5��","9: %s":"3�1��: %s","b":"b","1l %d/%d c":"0��8��0�� %d/%d 0��1��8��","h 1s 1w 1v %d g(s) 1u a 1t. 1r c 1i 1j.":"1��1��0�18��8��0�� %d 0��3�1��f��6��2��2��0��1��2��4��3�1��0��6��0��4��5��","%d c 17":"%d 0��3�1��0��0��0��j�0��","9: %s, i: %d, 16 g i: %d":"3�1��: %s, 0��0��: %d, 1��0��3�1��0��0��: %d","14 c 1a.":"1��3�1��1��1��0��2��6��5��","1b 1g 1h 1f 1e 1c.":"0��6��1��6��4��1d�1��1��0��4��4��6��1��2��5��","9 1o e.":"3�1��1��2��2��7�5��","9 q e.":"3�1��0��3�0��2��7�5��","l: 9 15 13:":"2��7�: 3�1��0��0��0�19��:","u 1m":"0��0��3�1��"});',62,95,'�|�|�|�|�|�|�|�|�|File|||files||error|�|file|Upload|size|�|the|Error|tb|gb|or|wrong|extension|�|||Add|mb|kb|HTTP|queue|format||Image|Filename|supported|Duplicate|Start|Status|not|either|and|might|be|doesn||URL|Stop|plupload|addI18n|exist|URL�|upload|click|start|to|Init|Size|Close|button|already|large|Drag|too|max|queued|��|��|here|Runtime|memory|�|available|of|ran|out|were|stripped|in|Uploaded|Files|present|count|Invalid|Select|Extra|element|time|at|only|accepts'.split('|'),0,{}))
+plupload.addI18n({"Stop Upload":"停止上傳","Upload URL might be wrong or doesn't exist.":"檔案URL可能有誤或者不存在。",tb:"tb",Size:"大小",Close:"關閉","Init error.":"初始化錯誤。","Add files to the upload queue and click the start button.":"將檔案加入上傳序列,然後點選”開始上傳“按鈕。",Filename:"檔案名稱","Image format either wrong or not supported.":"圖片格式錯誤或者不支援。",Status:"狀態","HTTP Error.":"HTTP 錯誤。","Start Upload":"開始上傳",mb:"mb",kb:"kb","Duplicate file error.":"錯誤:檔案重複。","File size error.":"錯誤:檔案大小超過限制。","N/A":"N/A",gb:"gb","Error: Invalid file extension:":"錯誤:不接受的檔案格式:","Select files":"選擇檔案","%s already present in the queue.":"%s 已經存在目前的檔案序列。","File: %s":"檔案: %s",b:"b","Uploaded %d/%d files":"已上傳 %d/%d 個文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只能上傳 %d 個檔案,超過限制數量的檔案將被忽略。","%d files queued":"%d 個檔案加入到序列","File: %s, size: %d, max file size: %d":"檔案: %s, 大小: %d, 最大檔案大小: %d","Drag files here.":"把檔案拖曳到這裡。","Runtime ran out of available memory.":"執行時耗盡了所有可用的記憶體。","File count error.":"檔案數量錯誤。","File extension error.":"檔案副檔名錯誤。","Error: File too large:":"錯誤: 檔案大小太大:","Add Files":"增加檔案"});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.min.css
index d969e51b96c5d0825057c7dc7507b605bcd64fb3..4c164a742b135835b255a4dc9c84a97c8b48d206 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.min.css
@@ -1 +1 @@
-.plupload_button{display:-moz-inline-box;display:inline-block;font:normal 12px sans-serif;text-decoration:none;color:#42454a;border:1px solid #bababa;padding:2px 8px 3px 20px;margin-right:4px;background:#f3f3f3 url('../img/buttons.png') no-repeat 0 center;outline:0;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.plupload_button:hover{color:#000;text-decoration:none}.plupload_disabled,a.plupload_disabled:hover{color:#737373;border-color:#c5c5c5;background:#ededed url('../img/buttons-disabled.png') no-repeat 0 center;cursor:default}.plupload_add{background-position:-181px center}.plupload_wrapper{font:normal 11px Verdana,sans-serif;width:100%}.plupload_container{padding:8px;background:url('../img/transp50.png')}.plupload_container input{border:1px solid #DDD;font:normal 11px Verdana,sans-serif;width:98%}.plupload_header{background:#2a2c2e url('../img/backgrounds.gif') repeat-x}.plupload_header_content{background:url('../img/backgrounds.gif') no-repeat 0 -317px;min-height:56px;padding-left:60px;color:#FFF}.plupload_header_title{font:normal 18px sans-serif;padding:6px 0 3px}.plupload_header_text{font:normal 12px sans-serif}.plupload_filelist{margin:0;padding:0;list-style:none}.plupload_scroll .plupload_filelist{height:185px;background:#f5f5f5;overflow-y:scroll}.plupload_filelist li{padding:10px 8px;background:#f5f5f5 url('../img/backgrounds.gif') repeat-x 0 -156px;border-bottom:1px solid #DDD}.plupload_filelist_header,.plupload_filelist_footer{background:#dfdfdf;padding:8px 8px;color:#42454a}.plupload_filelist_header{border-top:1px solid #EEE;border-bottom:1px solid #cdcdcd}.plupload_filelist_footer{border-top:1px solid #FFF;height:22px;line-height:20px;vertical-align:middle}.plupload_file_name{float:left;overflow:hidden}.plupload_file_status{color:#777}.plupload_file_status span{color:#42454a}.plupload_file_size,.plupload_file_status,.plupload_progress{float:right;width:80px}.plupload_file_size,.plupload_file_status,.plupload_file_action{text-align:right}.plupload_filelist .plupload_file_name{width:205px;white-space:nowrap;text-overflow:ellipsis}.plupload_file_action{float:right;width:16px;height:16px;margin-left:15px}.plupload_file_action *{display:none;width:16px;height:16px}li.plupload_uploading{background:#ecf3dc url('../img/backgrounds.gif') repeat-x 0 -238px}li.plupload_done{color:#AAA}li.plupload_delete a{background:url('../img/delete.gif')}li.plupload_failed a{background:url('../img/error.gif');cursor:default}li.plupload_done a{background:url('../img/done.gif');cursor:default}.plupload_progress,.plupload_upload_status{display:none}.plupload_progress_container{margin-top:3px;border:1px solid #CCC;background:#FFF;padding:1px}.plupload_progress_bar{width:0;height:7px;background:#cdeb8b}.plupload_scroll .plupload_filelist_header .plupload_file_action,.plupload_scroll .plupload_filelist_footer .plupload_file_action{margin-right:17px}.plupload_clear,.plupload_clearer{clear:both}.plupload_clearer,.plupload_progress_bar{display:block;font-size:0;line-height:0}li.plupload_droptext{background:transparent;text-align:center;vertical-align:middle;border:0;line-height:165px}
\ No newline at end of file
+.plupload_button{display:-moz-inline-box;display:inline-block;font:400 12px sans-serif;text-decoration:none;color:#42454a;border:1px solid #bababa;padding:2px 8px 3px 20px;margin-right:4px;background:url(../img/buttons.png) 0 center no-repeat #f3f3f3;outline:0;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.plupload_button:hover{color:#000;text-decoration:none}.plupload_disabled,a.plupload_disabled:hover{color:#737373;border-color:#c5c5c5;background:url(../img/buttons-disabled.png) 0 center no-repeat #ededed;cursor:default}.plupload_add{background-position:-181px center}.plupload_wrapper{font:400 11px Verdana,sans-serif;width:100%}.plupload_container{padding:8px;background:url(../img/transp50.png)}.plupload_container input{border:1px solid #DDD;font:400 11px Verdana,sans-serif;width:98%}.plupload_header{background:url(../img/backgrounds.gif) repeat-x #2A2C2E}.plupload_header_content{background:url(../img/backgrounds.gif) 0 -317px no-repeat;min-height:56px;padding-left:60px;color:#FFF}.plupload_header_title{font:400 18px sans-serif;padding:6px 0 3px}.plupload_header_text{font:400 12px sans-serif}.plupload_filelist{margin:0;padding:0;list-style:none}.plupload_scroll .plupload_filelist{height:185px;background:#F5F5F5;overflow-y:scroll}.plupload_filelist li{padding:10px 8px;background:url(../img/backgrounds.gif) 0 -156px repeat-x #F5F5F5;border-bottom:1px solid #DDD}.plupload_filelist_footer,.plupload_filelist_header{background:#DFDFDF;padding:8px;color:#42454A}.plupload_filelist_header{border-top:1px solid #EEE;border-bottom:1px solid #CDCDCD}.plupload_filelist_footer{border-top:1px solid #FFF;height:22px;line-height:20px;vertical-align:middle}.plupload_file_name{float:left;overflow:hidden}.plupload_file_status{color:#777}.plupload_file_status span{color:#42454A}.plupload_file_size,.plupload_file_status,.plupload_progress{float:right;width:80px}.plupload_file_action,.plupload_file_size,.plupload_file_status{text-align:right}.plupload_filelist .plupload_file_name{width:205px;white-space:nowrap;text-overflow:ellipsis}.plupload_file_action{float:right;width:16px;height:16px;margin-left:15px}.plupload_file_action *{display:none;width:16px;height:16px}li.plupload_uploading{background:url(../img/backgrounds.gif) 0 -238px repeat-x #ECF3DC}li.plupload_done{color:#AAA}li.plupload_delete a{background:url(../img/delete.gif)}li.plupload_failed a{background:url(../img/error.gif);cursor:default}li.plupload_done a{background:url(../img/done.gif);cursor:default}.plupload_progress,.plupload_upload_status{display:none}.plupload_progress_container{margin-top:3px;border:1px solid #CCC;background:#FFF;padding:1px}.plupload_progress_bar{width:0;height:7px;background:#CDEB8B}.plupload_scroll .plupload_filelist_footer .plupload_file_action,.plupload_scroll .plupload_filelist_header .plupload_file_action{margin-right:17px}.plupload_clear,.plupload_clearer{clear:both}.plupload_clearer,.plupload_progress_bar{display:block;font-size:0;line-height:0}li.plupload_droptext{background:0 0;text-align:center;vertical-align:middle;border:0;line-height:165px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js
index e143f32d3e57429508d14ae7eaaa4adfa85ab259..e93c82b4ee57eb8f6a9539f4391d28bc3479b5f0 100755
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(c($,o){q X={};c h(1B){1C g.2c(1B)||1B}c 1U(4,8){8.2i().1a(c(i,N){N=$(N);9(!N.2l(\'.g\')){N.1l()}});8.2p(\'<3 7="2n 2O">\'+\'<3 4="\'+4+\'1V" 7="2v">\'+\'<3 7="g">\'+\'<3 7="2s">\'+\'<3 7="2w">\'+\'<3 7="2A">\'+h(\'29 l\')+\'</3>\'+\'<3 7="2e">\'+h(\'1i l 2m 1Y 2a 2k 2q I 1Y 1W 19.\')+\'</3>\'+\'</3>\'+\'</3>\'+\'<3 7="2j">\'+\'<3 7="2o">\'+\'<3 7="R">\'+h(\'2g\')+\'</3>\'+\'<3 7="1f">&14;</3>\'+\'<3 7="T"><f>\'+h(\'2d\')+\'</f></3>\'+\'<3 7="1h">\'+h(\'2b\')+\'</3>\'+\'<3 7="1k">&14;</3>\'+\'</3>\'+\'<1d 4="\'+4+\'v" 7="1N"></1d>\'+\'<3 7="2f">\'+\'<3 7="R">\'+\'<3 7="1w">\'+\'<a 1j="#" 7="19-1Z" 4="\'+4+\'1I">\'+h(\'1i 1T\')+\'</a>\'+\'<a 1j="#" 7="19-1Z M" 4="\'+4+\'2G">\'+h(\'2y 2z\')+\'</a>\'+\'</3>\'+\'<f 7="F"></f>\'+\'</3>\'+\'<3 7="1f"></3>\'+\'<3 7="T"><f 7="12">0%</f></3>\'+\'<3 7="1h"><f 7="11">0 b</f></3>\'+\'<3 7="1s">\'+\'<3 7="2B">\'+\'<3 7="1O"></3>\'+\'</3>\'+\'</3>\'+\'<3 7="1k">&14;</3>\'+\'</3>\'+\'</3>\'+\'</3>\'+\'</3>\'+\'<H J="Z" 4="\'+4+\'1m" j="\'+4+\'1m" V="0" />\'+\'</3>\')}$.2x.2t=c(k){9(k){B.1a(c(){q 6,8,4,S;8=$(B);4=8.t(\'4\');9(!4){4=g.2u();8.t(\'4\',4)}S=8.n();1U(4,8);k=$.2C({z:2D,2K:4+\'1I\',2L:4},k);9(k.z){k.2M=4+\'v\'}6=2N g.2J(k);X[4]=6;c W(5){q w;9(5.C==g.1p){w=\'2I\'}9(5.C==g.2E){w=\'28\'}9(5.C==g.2F){w=\'17\'}9(5.C==g.2r){w=\'2H\'}q 1J=$(\'#\'+5.4).t(\'7\',w).27(\'a\').y(\'K\',\'18\');9(5.1q){1J.t(\'1e\',5.1q)}}c 1t(){$(\'f.12\',8).n(6.m.U+\'%\');$(\'3.1O\',8).y(\'2h\',6.m.U+\'%\');$(\'f.F\',8).n(o.1D(h(\'1F %d/%d l\'),6.m.16,6.l.G))}c Q(){q 10=$(\'1d.1N\',8).n(\'\'),E=0,x;$.1a(6.l,c(i,5){x=\'\';9(5.C==g.1p){9(5.1M){x+=\'<H J="Z" j="\'+4+\'h\'+E+\'3m" V="\'+g.1L(5.1M)+\'" />\'}x+=\'<H J="Z" j="\'+4+\'h\'+E+\'3n" V="\'+g.1L(5.j)+\'" />\';x+=\'<H J="Z" j="\'+4+\'h\'+E+\'3o" V="\'+(5.C==g.1p?\'3p\':\'1v\')+\'" />\';E++;$(\'#\'+4+\'1m\').1o(E)}10.1A(\'<u 4="\'+5.4+\'">\'+\'<3 7="R"><f>\'+5.j+\'</f></3>\'+\'<3 7="1f"><a 1j="#"></a></3>\'+\'<3 7="T">\'+5.U+\'%</3>\'+\'<3 7="1h">\'+g.1S(5.1R)+\'</3>\'+\'<3 7="1k">&14;</3>\'+x+\'</u>\');W(5);$(\'#\'+5.4+\'.17 a\').I(c(e){$(\'#\'+5.4).1l();6.3l(5);e.Y()})});$(\'f.11\',8).n(g.1S(6.m.1R));9(6.m.1g===0){$(\'f.1H\',8).n(h(\'1i 1T\'))}1y{$(\'f.1H\',8).n(o.1D(h(\'%d l 1g\'),6.m.1g))}$(\'a.M\',8).3k(\'P\',6.l.G==(6.m.16+6.m.1v));10[0].O=10[0].3g;1t();9(!6.l.G&&6.21.z&&6.k.z){$(\'#\'+4+\'v\').1A(\'<u 7="1X">\'+h("26 l 1P.")+\'</u>\')}}c 1x(){3f X[4];6.1x();8.n(S);6=8=S=3h}6.p("3i",c(r,5){$(\'#\'+5.4).1u(\'3r\')});6.p(\'3j\',c(r,23){9(!k.3q&&k.3t){8.3y(\'I\',\'#\'+4+\'v 3.R f\',c(e){q D=$(e.8),5,L,j,1n="";5=r.3z(D.3w(\'u\')[0].4);j=5.j;L=/^(.+)(\\.[^.]+)$/.3s(j);9(L){j=L[1];1n=L[2]}D.15().3v(\'<H J="3u" />\');D.1G().1o(j).3x().25(c(){D.1E().1G().1l()}).3d(c(e){q 1c=$(B);9(e.2P==13){e.Y();5.j=1c.1o()+1n;D.n(5.j);1c.25()}})})}$(\'#\'+4+\'1V\').t(\'1e\',\'2X 22: \'+23.22);$(\'a.M\',8).I(c(e){9(!$(B).2Y(\'P\')){6.1W()}e.Y()});$(\'a.1r\',8).I(c(e){e.Y();6.2Z()});$(\'a.M\',8).1u(\'P\')});6.p("1b",c(r,s){q 5=s.5,A;9(5){A=s.A;9(s.20){A+=" ("+s.20+")"}9(s.1z==g.30){24(h("1b: 2W 2V 2R:")+" "+5.j)}9(s.1z==g.2Q){24(h("1b: 2S 5 2T:")+" "+5.j)}5.1q=A;$(\'#\'+5.4).t(\'7\',\'28\').27(\'a\').y(\'K\',\'18\').t(\'1e\',A)}9(s.1z===g.2U){31(c(){1x()},1)}});6.p("32",c(r){9(r.k.z&&r.21.z){$(\'#\'+4+\'v\').1A(\'<u 7="1X">\'+h("26 l 1P.")+\'</u>\')}});6.39();6.p(\'3a\',c(){9(6.3b===g.3c){$(\'u.17 a,3.1w\',8).15();$(\'f.F,3.1s,a.1r\',8).y(\'K\',\'18\');$(\'f.F\',8).n(\'1F \'+6.m.16+\'/\'+6.l.G+\' l\');9(k.1Q){$(\'f.12,f.11\',8).1E()}}1y{Q();$(\'a.1r,3.1s\',8).15();$(\'a.17\',8).y(\'K\',\'18\');9(k.1Q&&6.m.16+6.m.1v==6.l.G){$(".1w,.F",8).y("K","38");$(".M",8).1u("P");$(\'f.12,f.11\',8).15()}}});6.p(\'37\',Q);6.p(\'33\',c(){q O=$(\'#\'+4+\'v\').O();Q();$(\'#\'+4+\'v\').O(O)});6.p(\'34\',c(r,5){W(5)});6.p("35",c(r,5){$(\'#\'+5.4+\' 3.T\',8).n(5.U+\'%\');W(5);1t()});9(k.1K){k.1K(6)}});1C B}1y{1C X[$(B[0]).t(\'4\')]}}})(36,3e);',62,222,'|||div|id|file|uploader|class|target|if|||function|||span|plupload|_||name|settings|files|total|html||bind|var|up|err|attr|li|_filelist|actionClass|inputHTML|css|dragdrop|message|this|status|targetSpan|inputCount|plupload_upload_status|length|input|click|type|display|parts|plupload_start|node|scrollTop|plupload_disabled|updateList|plupload_file_name|contents_bak|plupload_file_status|percent|value|handleStatus|uploaders|preventDefault|hidden|fileList|plupload_total_file_size|plupload_total_status||nbsp|hide|uploaded|plupload_delete|block|button|each|Error|targetInput|ul|title|plupload_file_action|queued|plupload_file_size|Add|href|plupload_clearer|remove|_count|ext|val|DONE|hint|plupload_stop|plupload_progress|updateTotalProgress|addClass|failed|plupload_buttons|destroy|else|code|append|str|return|sprintf|show|Uploaded|next|plupload_add_text|_browse|icon|setup|xmlEncode|target_name|plupload_filelist|plupload_progress_bar|here|multiple_queues|size|formatSize|Files|renderUI|_container|start|plupload_droptext|the|primary|details|features|runtime|res|alert|blur|Drag|find|plupload_failed|Select|upload|Size|translate|Status|plupload_header_text|plupload_filelist_footer|Filename|width|contents|plupload_content|queue|is|to|plupload_wrapper|plupload_filelist_header|prepend|and|UPLOADING|plupload_header|pluploadQueue|guid|plupload_container|plupload_header_content|fn|Start|Upload|plupload_header_title|plupload_progress_container|extend|true|FAILED|QUEUED|_upload|plupload_uploading|plupload_done|Uploader|browse_button|container|drop_element|new|plupload_scroll|keyCode|FILE_EXTENSION_ERROR|large|Invalid|extension|INIT_ERROR|too|File|Using|hasClass|stop|FILE_SIZE_ERROR|setTimeout|PostInit|FilesRemoved|FileUploaded|UploadProgress|jQuery|FilesAdded|inline|init|StateChanged|state|STARTED|keydown|mOxie|delete|scrollHeight|null|UploadFile|Init|toggleClass|removeFile|_tmpname|_name|_status|done|unique_names|plupload_current_file|exec|rename|text|after|parents|focus|on|getFile'.split('|'),0,{}))
+!function(l,a){function d(l){return plupload.translate(l)||l}function e(a,e){e.contents().each(function(a,d){d=l(d),d.is(".plupload")||d.remove()}),e.prepend('<div class="plupload_wrapper plupload_scroll"><div id="'+a+'_container" class="plupload_container"><div class="plupload"><div class="plupload_header"><div class="plupload_header_content"><div class="plupload_header_title">'+d("Select files")+'</div><div class="plupload_header_text">'+d("Add files to the upload queue and click the start button.")+'</div></div></div><div class="plupload_content"><div class="plupload_filelist_header"><div class="plupload_file_name">'+d("Filename")+'</div><div class="plupload_file_action">&nbsp;</div><div class="plupload_file_status"><span>'+d("Status")+'</span></div><div class="plupload_file_size">'+d("Size")+'</div><div class="plupload_clearer">&nbsp;</div></div><ul id="'+a+'_filelist" class="plupload_filelist"></ul><div class="plupload_filelist_footer"><div class="plupload_file_name"><div class="plupload_buttons"><a href="#" class="button-primary" id="'+a+'_browse">'+d("Add Files")+'</a><a href="#" class="button-primary plupload_start" id="'+a+'_upload">'+d("Start Upload")+'</a></div><span class="plupload_upload_status"></span></div><div class="plupload_file_action"></div><div class="plupload_file_status"><span class="plupload_total_status">0%</span></div><div class="plupload_file_size"><span class="plupload_total_file_size">0 b</span></div><div class="plupload_progress"><div class="plupload_progress_container"><div class="plupload_progress_bar"></div></div></div><div class="plupload_clearer">&nbsp;</div></div></div></div></div><input type="hidden" id="'+a+'_count" name="'+a+'_count" value="0" /></div>')}var t={};l.fn.pluploadQueue=function(p){return p?(this.each(function(){function i(a){var d;a.status==plupload.DONE&&(d="plupload_done"),a.status==plupload.FAILED&&(d="plupload_failed"),a.status==plupload.QUEUED&&(d="plupload_delete"),a.status==plupload.UPLOADING&&(d="plupload_uploading");var e=l("#"+a.id).attr("class",d).find("a").css("display","block");a.hint&&e.attr("title",a.hint)}function s(){l("span.plupload_total_status",_).html(n.total.percent+"%"),l("div.plupload_progress_bar",_).css("width",n.total.percent+"%"),l("span.plupload_upload_status",_).html(a.sprintf(d("Uploaded %d/%d files"),n.total.uploaded,n.files.length))}function o(){var e,t=l("ul.plupload_filelist",_).html(""),p=0;l.each(n.files,function(a,d){e="",d.status==plupload.DONE&&(d.target_name&&(e+='<input type="hidden" name="'+r+"_"+p+'_tmpname" value="'+plupload.xmlEncode(d.target_name)+'" />'),e+='<input type="hidden" name="'+r+"_"+p+'_name" value="'+plupload.xmlEncode(d.name)+'" />',e+='<input type="hidden" name="'+r+"_"+p+'_status" value="'+(d.status==plupload.DONE?"done":"failed")+'" />',p++,l("#"+r+"_count").val(p)),t.append('<li id="'+d.id+'"><div class="plupload_file_name"><span>'+d.name+'</span></div><div class="plupload_file_action"><a href="#"></a></div><div class="plupload_file_status">'+d.percent+'%</div><div class="plupload_file_size">'+plupload.formatSize(d.size)+'</div><div class="plupload_clearer">&nbsp;</div>'+e+"</li>"),i(d),l("#"+d.id+".plupload_delete a").click(function(a){l("#"+d.id).remove(),n.removeFile(d),a.preventDefault()})}),l("span.plupload_total_file_size",_).html(plupload.formatSize(n.total.size)),0===n.total.queued?l("span.plupload_add_text",_).html(d("Add Files")):l("span.plupload_add_text",_).html(a.sprintf(d("%d files queued"),n.total.queued)),l("a.plupload_start",_).toggleClass("plupload_disabled",n.files.length==n.total.uploaded+n.total.failed),t[0].scrollTop=t[0].scrollHeight,s(),!n.files.length&&n.features.dragdrop&&n.settings.dragdrop&&l("#"+r+"_filelist").append('<li class="plupload_droptext">'+d("Drag files here.")+"</li>")}function u(){delete t[r],n.destroy(),_.html(c),n=_=c=null}var n,_,r,c;_=l(this),r=_.attr("id"),r||(r=plupload.guid(),_.attr("id",r)),c=_.html(),e(r,_),p=l.extend({dragdrop:!0,browse_button:r+"_browse",container:r},p),p.dragdrop&&(p.drop_element=r+"_filelist"),n=new plupload.Uploader(p),t[r]=n,n.bind("UploadFile",function(a,d){l("#"+d.id).addClass("plupload_current_file")}),n.bind("Init",function(a,d){!p.unique_names&&p.rename&&_.on("click","#"+r+"_filelist div.plupload_file_name span",function(d){var e,t,p,i=l(d.target),s="";e=a.getFile(i.parents("li")[0].id),p=e.name,t=/^(.+)(\.[^.]+)$/.exec(p),t&&(p=t[1],s=t[2]),i.hide().after('<input type="text" />'),i.next().val(p).focus().blur(function(){i.show().next().remove()}).keydown(function(a){var d=l(this);13==a.keyCode&&(a.preventDefault(),e.name=d.val()+s,i.html(e.name),d.blur())})}),l("#"+r+"_container").attr("title","Using runtime: "+d.runtime),l("a.plupload_start",_).click(function(a){l(this).hasClass("plupload_disabled")||n.start(),a.preventDefault()}),l("a.plupload_stop",_).click(function(l){l.preventDefault(),n.stop()}),l("a.plupload_start",_).addClass("plupload_disabled")}),n.bind("Error",function(a,e){var t,p=e.file;p&&(t=e.message,e.details&&(t+=" ("+e.details+")"),e.code==plupload.FILE_SIZE_ERROR&&alert(d("Error: File too large:")+" "+p.name),e.code==plupload.FILE_EXTENSION_ERROR&&alert(d("Error: Invalid file extension:")+" "+p.name),p.hint=t,l("#"+p.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",t)),e.code===plupload.INIT_ERROR&&setTimeout(function(){u()},1)}),n.bind("PostInit",function(a){a.settings.dragdrop&&a.features.dragdrop&&l("#"+r+"_filelist").append('<li class="plupload_droptext">'+d("Drag files here.")+"</li>")}),n.init(),n.bind("StateChanged",function(){n.state===plupload.STARTED?(l("li.plupload_delete a,div.plupload_buttons",_).hide(),l("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",_).css("display","block"),l("span.plupload_upload_status",_).html("Uploaded "+n.total.uploaded+"/"+n.files.length+" files"),p.multiple_queues&&l("span.plupload_total_status,span.plupload_total_file_size",_).show()):(o(),l("a.plupload_stop,div.plupload_progress",_).hide(),l("a.plupload_delete",_).css("display","block"),p.multiple_queues&&n.total.uploaded+n.total.failed==n.files.length&&(l(".plupload_buttons,.plupload_upload_status",_).css("display","inline"),l(".plupload_start",_).addClass("plupload_disabled"),l("span.plupload_total_status,span.plupload_total_file_size",_).hide()))}),n.bind("FilesAdded",o),n.bind("FilesRemoved",function(){var a=l("#"+r+"_filelist").scrollTop();o(),l("#"+r+"_filelist").scrollTop(a)}),n.bind("FileUploaded",function(l,a){i(a)}),n.bind("UploadProgress",function(a,d){l("#"+d.id+" div.plupload_file_status",_).html(d.percent+"%"),i(d),s()}),p.setup&&p.setup(n)}),this):t[l(this[0]).attr("id")]}}(jQuery,mOxie);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js
index c893f09395a946537927269499f6ceb34a0d6ffe..7dd6debc0279a63af86c3db955ff318a642fa054 100755
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js
@@ -1 +1,4 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(c(dO,2A){"i2 hI";u 8y={};c g4(6a,3J){u 5S,dp=[];1B(u i=0;i<6a.T;++i){5S=8y[6a[i]]||gb(6a[i]);if(!5S){26\'5S 63 k2 5n k4: \'+6a[i]}dp.2G(5S)}3J.2v(Q,dp)}c 1v(id,bt,63){if(2J id!==\'2x\'){26\'df 5S 63, 5S id dW be gg lX be a 2x\'}if(bt===2A){26\'df 5S 63, bt dW be fX\'}if(63===2A){26\'df 5S 63, 63 c dW be fX\'}g4(bt,c(){8y[id]=63.2v(Q,1T)})}c gg(id){l!!8y[id]}c gb(id){u 1q=dO;u 52=id.3x(/[.\\/]/);1B(u fi=0;fi<52.T;++fi){if(!1q[52[fi]]){l}1q=1q[52[fi]]}l 1q}c iG(6a){1B(u i=0;i<6a.T;i++){u 1q=dO;u id=6a[i];u 52=id.3x(/[.\\/]/);1B(u fi=0;fi<52.T-1;++fi){if(1q[52[fi]]===2A){1q[52[fi]]={}}1q=1q[52[fi]]}1q[52[52.T-1]]=8y[id]}}1v(\'F/O/1a/G\',[],c(){u 1F=c(o){u 4v;if(o===4v){l\'2A\'}Y if(o===Q){l\'Q\'}Y if(o.cE){l\'3o\'}l({}).7f.V(o).3f(/\\s([a-z|A-Z]+)/)[1].3q()};u 1k=c(1q){u 4v;2f(1T,c(gZ,i){if(i>0){2f(gZ,c(P,2B){if(P!==4v){if(1F(1q[2B])===1F(P)&&!!~2t(1F(P),[\'2D\',\'4y\'])){1k(1q[2B],P)}Y{1q[2B]=P}}})}});l 1q};u 2f=c(1p,3J){u T,2B,i,4v;if(1p){37{T=1p.T}3k(ex){T=4v}if(T===4v){1B(2B in 1p){if(1p.6k(2B)){if(3J(1p[2B],2B)===1f){l}}}}Y{1B(i=0;i<T;i++){if(3J(1p[i],i)===1f){l}}}}};u 6o=c(1p){u 6t;if(!1p||1F(1p)!==\'4y\'){l 1t}1B(6t in 1p){l 1f}l 1t};u 8G=c(3B,cb){u i=0,T=3B.T;if(1F(cb)!==\'c\'){cb=c(){}}if(!3B||!3B.T){cb()}c dL(i){if(1F(3B[i])===\'c\'){3B[i](c(2C){++i<T&&!2C?dL(i):cb(2C)})}}dL(i)};u bK=c(3B,cb){u 3A=0,4M=3B.T,bx=1d e5(4M);2f(3B,c(fn,i){fn(c(2C){if(2C){l cb(2C)}u 2y=[].3h.V(1T);2y.9q();bx[i]=2y;3A++;if(3A===4M){bx.fJ(Q);cb.2v(f,bx)}})})};u 2t=c(dS,2D){if(2D){if(e5.2n.4x){l e5.2n.4x.V(2D,dS)}1B(u i=0,T=2D.T;i<T;i++){if(2D[i]===dS){l i}}}l-1};u 4a=c(6W,2D){u 9w=[];if(1F(6W)!==\'2D\'){6W=[6W]}if(1F(2D)!==\'2D\'){2D=[2D]}1B(u i in 6W){if(2t(6W[i],2D)===-1){9w.2G(6W[i])}}l 9w.T?9w:1f};u bs=c(ea,eB){u 1N=[];2f(ea,c(83){if(2t(83,eB)!==-1){1N.2G(83)}});l 1N.T?1N:Q};u bZ=c(1p){u i,76=[];1B(i=0;i<1p.T;i++){76[i]=1p[i]}l 76};u 2W=(c(){u f1=0;l c(9J){u 2W=1d ar().ca().7f(32),i;1B(i=0;i<5;i++){2W+=39.sl(39.s2()*s3).7f(32)}l(9J||\'oa\')+2W+(f1++).7f(32)}}());u 4H=c(1Q){if(!1Q){l 1Q}l 5T.2n.4H?5T.2n.4H.V(1Q):1Q.7f().3p(/^\\s*/,\'\').3p(/\\s*$/,\'\')};u 9z=c(1z){if(2J(1z)!==\'2x\'){l 1z}u dR={t:ou,g:oC,m:nc,k:bd},av;1z=/^([0-9]+)([ng]?)$/.1C(1z.3q().3p(/[^0-pV]/g,\'\'));av=1z[2];1z=+1z[1];if(dR.6k(av)){1z*=dR[av]}l 1z};l{2W:2W,1F:1F,1k:1k,2f:2f,6o:6o,8G:8G,bK:bK,2t:2t,4a:4a,bs:bs,bZ:bZ,4H:4H,9z:9z}});1v("F/O/55",["F/O/1a/G"],c(G){u c1={};l{pm:c(hR){l G.1k(c1,hR)},54:c(1Q){l c1[1Q]||1Q},6p:c(1Q){l f.54(1Q)},po:c(1Q){u 2y=[].3h.V(1T,1);l 1Q.3p(/%[a-z]/g,c(){u P=2y.9q();l G.1F(P)!==\'2A\'?P:\'\'})}}});1v("F/O/1a/27",["F/O/1a/G","F/O/55"],c(G,55){u aw=""+"2Q/pj,67 pi,"+"2Q/hT,hT,"+"2Q/hN-bA,hN,"+"2Q/pw,ps ai pU,"+"2Q/aR,aR,"+"2Q/5l.ms-nL,nG nC,"+"2Q/5l.ms-nm,oz oD oE,"+"2Q/eP,eP,"+"2Q/x-g5-2c,gI ok,"+"2Q/5l.7V-7N.fo.2j,oo,"+"2Q/5l.7V-7N.fo.bV,oi,"+"2Q/5l.7V-7N.ss.sp,sn,"+"2Q/5l.7V-7N.c5.s5,sj,"+"2Q/5l.7V-7N.c5.bV,rj,"+"2Q/5l.7V-7N.c5.rp,kc,"+"2Q/x-eV,js,"+"2Q/4m,4m,"+"5P/d4,ki kC kz kA,"+"5P/x-fw,fw,"+"5P/x-fv,fv,"+"5P/bU,kI bU,"+"5P/fQ,fQ kp,"+"5P/fK,fK,"+"5P/fL,fL,"+"5P/gP,gP,"+"5P/x-ms-gR,gR,"+"1S/gp,gp,"+"1S/ch,ch,"+"1S/4r,m4 4r m3,"+"1S/m0,m1,"+"1S/8x,8x,"+"1S/gk+hc,gk m7,"+"1S/6H,6H mA,"+"4b/eu,mZ bu 4b 9w mY,"+"4b/6f,l7 6f l4,"+"4b/eI,eI,"+"4b/eU,eU,"+"4b/aR,aR,"+"4o/d4,d4 kW n9 kk,"+"4o/iX,qt ko,"+"4o/i4,i4,"+"4o/x-hO,hO,"+"4o/x-hU,hU,"+"4o/x-ms-fq,fq,"+"4o/hQ,hQ,"+"4o/hP,hP,"+"4o/hS,hS k6,"+"4o/k5,k3,"+"4o/5l.rn-k9,rv,"+"4o/bU,kf,"+"4o/x-ke,kd,"+"2Q/5l.k1.jR.jS-bV,jP,"+"2Q/az-ax,jM";u 27={2O:{},1h:{},hL:c(aw){u 42=aw.3x(/,/),i,ii,44;1B(i=0;i<42.T;i+=2){44=42[i+1].3x(/ /);1B(ii=0;ii<44.T;ii++){f.2O[44[ii]]=42[i]}f.1h[42[i]]=44}},dI:c(c3,hJ){u L=f,44,i,ii,K,2O=[];1B(i=0;i<c3.T;i++){44=c3[i].1h.3x(/\\s*,\\s*/);1B(ii=0;ii<44.T;ii++){if(44[ii]===\'*\'){l[]}K=L.2O[44[ii]];if(!K){if(hJ&&/^\\w+$/.3G(44[ii])){2O.2G(\'.\'+44[ii])}Y{l[]}}Y if(G.2t(K,2O)===-1){2O.2G(K)}}}l 2O},hM:c(2O){u L=f,4i=[];G.2f(2O,c(3I){if(3I===\'*\'){4i=[];l 1f}u m=3I.3f(/^(\\w+)\\/(\\*|\\w+)$/);if(m){if(m[2]===\'*\'){G.2f(L.1h,c(76,3I){if((1d ct(\'^\'+m[1]+\'/\')).3G(3I)){[].2G.2v(4i,L.1h[3I])}})}Y if(L.1h[3I]){[].2G.2v(4i,L.1h[3I])}}});l 4i},c0:c(2O){u 2u=[],4i=[];if(G.1F(2O)===\'2x\'){2O=G.4H(2O).3x(/\\s*,\\s*/)}4i=f.hM(2O);2u.2G({7u:55.54(\'c2\'),1h:4i.T?4i.78(\',\'):\'*\'});2u.2O=2O;l 2u},cg:c(9L){u 3U=9L&&9L.3f(/\\.([^.]+)$/);if(3U){l 3U[1].3q()}l\'\'},by:c(9L){l f.2O[f.cg(9L)]||\'\'}};27.hL(aw);l 27});1v("F/O/1a/1e",["F/O/1a/G"],c(G){u 6Q=(c(2A){u 92=\'\',bL=\'?\',bS=\'c\',i9=\'2A\',am=\'4y\',3E=\'a4\',jW=\'hX\',2s=\'R\',kh=\'K\',kD=\'hZ\',2p=\'1R\',kE=\'kB\',kG=\'kK\',kJ=\'9v\',kH=\'ky\';u bO={bP:c(i8,i7){l i7.3q().4x(i8.3q())!==-1},kx:c(1Q){l 1Q.3q()}};u 62={aD:c(){1B(u 1N,i=0,j,k,p,q,3U,3f,2y=1T;i<2y.T;i+=2){u 8A=2y[i],5p=2y[i+1];if(2J(1N)===i9){1N={};1B(p in 5p){q=5p[p];if(2J(q)===am){1N[q[0]]=2A}Y{1N[q]=2A}}}1B(j=k=0;j<8A.T;j++){3U=8A[j].1C(f.cX());if(!!3U){1B(p=0;p<5p.T;p++){3f=3U[++k];q=5p[p];if(2J(q)===am&&q.T>0){if(q.T==2){if(2J(q[1])==bS){1N[q[0]]=q[1].V(f,3f)}Y{1N[q[0]]=q[1]}}Y if(q.T==3){if(2J(q[1])===bS&&!(q[1].1C&&q[1].3G)){1N[q[0]]=3f?q[1].V(f,3f,q[2]):2A}Y{1N[q[0]]=3f?3f.3p(q[1],q[2]):2A}}Y if(q.T==4){1N[q[0]]=3f?q[3].V(f,3f.3p(q[1],q[2])):2A}}Y{1N[q]=3f?3f:2A}}2l}}if(!!3U)2l}l 1N},1Q:c(1Q,7m){1B(u i in 7m){if(2J(7m[i])===am&&7m[i].T>0){1B(u j=0;j<7m[i].T;j++){if(bO.bP(7m[i][j],1Q)){l(i===bL)?2A:i}}}Y if(bO.bP(7m[i],1Q)){l(i===bL)?2A:i}}l 1Q}};u 9u={1n:{bM:{a4:{\'1\':[\'/8\',\'/1\',\'/3\'],\'2\':\'/4\',\'?\':\'/\'},1R:{\'1.0\':\'/8\',\'1.2\':\'/1\',\'1.3\':\'/3\',\'2.0\':\'/h0\',\'2.0.2\':\'/gY\',\'2.0.3\':\'/gq\',\'2.0.4\':\'/kl\',\'?\':\'/\'}}},kj:{kq:{hX:{\'kr ks 4G\':\'jw\'},hZ:{\'j3\':\'j8\',\'i0\':\'i0\'}}},os:{7k:{1R:{\'jd\':\'4.90\',\'61 3.11\':\'ja.51\',\'61 4.0\':\'jC.0\',\'jF\':\'61 5.0\',\'jk\':[\'61 5.1\',\'61 5.2\'],\'jl\':\'61 6.0\',\'7\':\'61 6.1\',\'8\':\'61 6.2\',\'8.1\':\'61 6.3\',\'jt\':\'jp\'}}}};u aC={1n:[[/(aB\\jB)\\/((\\d+)?[\\w\\.-]+)/i,/(aB\\s[jo]+).+1R\\/((\\d+)?[\\w\\.-]+)/i,/(aB).+1R\\/((\\d+)?[\\w\\.]+)/i,/(aB)[\\/\\s]+((\\d+)?[\\w\\.]+)/i],[2s,2p,3E],[/\\s(jq)\\/((\\d+)?[\\w\\.]+)/i],[[2s,\'a3\'],2p,3E],[/(jr)\\/((\\d+)?[\\w\\.]+)/i,/(jg|jz|iC|j0|iZ)[\\/\\s]?((\\d+)?[\\w\\.]+)*/i,/(iP\\s|iQ|iR|je)(?:1n)?[\\/\\s]?((\\d+)?[\\w\\.]*)/i,/(?:ms|\\()(ie)\\s((\\d+)?[\\w\\.]+)/i,/(mo)((?:\\/)[\\w\\.]+)*/i,/(mp|mk|mq|mr|mw|mt|mh|m5|m6|mg)\\/((\\d+)?[\\w\\.-]+)/i],[2s,2p,3E],[/(iu).+rv[:\\s]((\\d+)?[\\w\\.]+).+mc\\ma/i],[[2s,\'46\'],2p,3E],[/(mb)\\/((\\d+)?[\\w\\.]+)/i],[[2s,\'n0\'],2p,3E],[/(n1)\\/((\\d+)?[\\w\\.]+)/i],[[2s,/6p/g,\' \'],2p,3E],[/(n7|n8|n5|[n3]{5}\\s?1n)\\/v?((\\d+)?[\\w\\.]+)/i],[2s,2p,3E],[/(mS)\\/((\\d+)?[\\w\\.]+)/i],[[2s,\'mH\'],2p,3E],[/((?:cM.+)mI|mG)\\/((\\d+)?[\\w\\.]+)/i],[[2s,\'7D\'],2p,3E],[/((?:cM.+))1R\\/((\\d+)?[\\w\\.]+)\\iM\\mF/i],[[2s,\'ht hr\'],2p,3E],[/1R\\/((\\d+)?[\\w\\.]+).+?9v\\/\\w+\\s(9G)/i],[2p,3E,[2s,\'mC b5\']],[/1R\\/((\\d+)?[\\w\\.]+).+?(9v\\s?9G|9G)/i],[2p,3E,2s],[/bQ.+?(9v\\s?9G|9G)((\\/[\\w\\.]+))/i],[2s,[3E,62.1Q,9u.1n.bM.a4],[2p,62.1Q,9u.1n.bM.1R]],[/(mJ)\\/((\\d+)?[\\w\\.]+)/i,/(bQ|il)\\/((\\d+)?[\\w\\.]+)/i],[2s,2p,3E],[/(89|mK)\\/((\\d+)?[\\w\\.-]+)/i],[[2s,\'mP\'],2p,3E],[/(mL)/i,/(lb|lm|ln|ll|lk|kU\\kV|kT|kS)[\\/\\s]?((\\d+)?[\\w\\.\\+]+)/i,/(ff|kQ|k-l2|lR|lU|lT|lD)\\/((\\d+)?[\\w\\.-]+)/i,/(fs)\\/((\\d+)?[\\w\\.]+).+rv\\:.+cH\\/\\d+/i,/(lA\\s?1n|lB|iD|lC|io|ls|iE|iv|iF|lS)[\\/\\s]?((\\d+)?[\\w\\.]+)/i,/(ig)\\s\\(((\\d+)?[\\w\\.]+)/i,/(lo)\\/?((\\d+)?[\\w\\.]+)*/i,/(kZ\\s?1n)\\/v?((\\d+)?[\\w\\.6p]+)/i,/(lf)[\\/\\s]((\\d+)?[\\w\\.]+)/i],[2s,2p,3E]],d2:[[/(mN)\\/([\\w\\.]+)/i,/(bQ|iu|iC|iF|iE|iD|iv)\\/([\\w\\.]+)/i,/(il|jY|ig)[\\/\\s]\\(?([\\w\\.]+)/i,/(io)[\\/\\s]([23]\\.[\\d\\.]+)/i],[2s,2p],[/rv\\:([\\w\\.]+).*(cH)/i],[2p,2s]],os:[[/(7k)\\kb\\s6\\.2;\\s(kg)/i,/(7k\\k8(?:\\aE)*|7k\\iM|7k)[\\s\\/]?([mB\\d\\.\\s]+\\w)/i],[2s,[2p,62.1Q,9u.os.7k.1R]],[/(gm(?=3|9|n)|gm\\k7\\s)([nt\\d\\.]+)/i],[[2s,\'dc\'],[2p,62.1Q,9u.os.7k.1R]],[/\\((bb)(10);/i],[[2s,\'jV\'],2p],[/(kM)\\w*\\/?([\\w\\.]+)*/i,/(kn)\\/([\\w\\.]+)/i,/(cM|mz|m2\\os|m8|mf|m9\\mD\\aE|mQ)[\\/\\s-]?([\\w\\.]+)*/i],[2s,2p],[/(mR\\s?os|l9|kX(?=;))[\\/\\s-]?([\\w\\.]+)*/i],[[2s,\'l3\'],2p],[/fs.+\\(9v;.+cH.+ff/i],[[2s,\'di 9K\'],2p],[/(lI|lG)\\s([ml]+)/i,/(lE)[\\/\\s\\(]?(\\w+)*/i,/(lF|[lz]?ly|lr|[8M]*lq|lu|lv|lx|lw|lH|lV|lW|lQ|lL)[\\/\\s-]?([\\w\\.-]+)*/i,/(lK|lJ)\\s?([\\w\\.]+)*/i,/(lM)\\s?([\\w\\.]+)*/i],[2s,2p],[/(lN)\\s[\\w]+\\s([\\w\\.]+\\w)/i],[[2s,\'lP 9K\'],2p],[/(lO)\\s?([\\w\\.]+\\d)*/i],[[2s,\'lp\'],2p],[/\\s([l0-]{0,4}kY|l1)\\s?([\\w\\.]+)*/i],[2s,2p],[/(ip[kR]+)(?:.*os\\s*([\\w]+)*\\kP\\l5|;\\l6)/i],[[2s,\'dV\'],[2p,/6p/g,\'.\']],[/(ep\\aE\\sx)\\s?([\\w\\s\\.]+\\w)*/i],[2s,[2p,/6p/g,\'.\']],[/(lj)\\s(\\w+)/i,/(li)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.]*)*/i,/(lh|ep(?=lg)|l8\\s9|la|ld|os\\/2|lc|lY|lZ\\aE)/i,/(mM)\\s?([\\w\\.]+)*/i],[2s,2p]]};u 6Q=c(aI){u 9A=aI||((1A&&1A.89&&1A.89.ew)?1A.89.ew:92);f.gz=c(){l 62.aD.2v(f,aC.1n)};f.gx=c(){l 62.aD.2v(f,aC.d2)};f.gB=c(){l 62.aD.2v(f,aC.os)};f.84=c(){l{9A:f.cX(),1n:f.gz(),d2:f.gx(),os:f.gB()}};f.cX=c(){l 9A};f.gG=c(aI){9A=aI;l f};f.gG(9A)};l 1d 6Q().84()})();c gH(5X,5A,cq){u i=0,x=0,5o=0,gE={\'mV\':-6,\'dK\':-5,\'a\':-5,\'mU\':-4,\'b\':-4,\'mX\':-3,\'rc\':-3,\'#\':-2,\'p\':1,\'pl\':1},co=c(v){v=(\'\'+v).3p(/[6p\\-+]/g,\'.\');v=v.3p(/([^.\\d]+)/g,\'.$1.\').3p(/\\.{2,}/g,\'.\');l(!v.T?[-8]:v.3x(\'.\'))},cp=c(v){l!v?0:(dP(v)?gE[v]||-7:4O(v,10))};5X=co(5X);5A=co(5A);x=39.4L(5X.T,5A.T);1B(i=0;i<x;i++){if(5X[i]==5A[i]){8I}5X[i]=cp(5X[i]);5A[i]=cp(5A[i]);if(5X[i]<5A[i]){5o=-1;2l}Y if(5X[i]>5A[i]){5o=1;2l}}if(!cq){l 5o}4N(cq){1y\'>\':1y\'gt\':l(5o>0);1y\'>=\':1y\'ge\':l(5o>=0);1y\'<=\':1y\'le\':l(5o<=0);1y\'==\':1y\'=\':1y\'eq\':l(5o===0);1y\'<>\':1y\'!=\':1y\'ne\':l(5o!==0);1y\'\':1y\'<\':1y\'lt\':l(5o<0);9r:l Q}}u 1J=(c(){u 3t={cm:(c(){l 1f}()),72:(c(){u el=2j.4h(\'34\');l!!(el.6g&&el.6g(\'2d\'))}()),4U:c(1O){37{if(G.2t(1O,[\'\',\'4b\',\'2j\'])!==-1){l 1t}Y if(1A.1j){u 2g=1d 1j();2g.8M(\'1V\',\'/\');if(\'1O\'in 2g){2g.1O=1O;if(2g.1O!==1O){l 1f}l 1t}}}3k(ex){}l 1f},ae:(c(){u du=1d 1K();du.8B=c(){3t.ae=(du.1g===1&&du.1i===1)};81(c(){du.2L="J:1S/ch;4c,mi=="},1);l 1f}()),b6:c(){l 3t.ae&&(1e.1n!==\'46\'||1e.1R>=9)},fp:c(gu){l(3t.ae&&gu<mx||3t.b6())},dT:c(){u el=2j.4h(\'1P\');el.3n(\'K\',\'1b\');l!el.8V}};l c(3D){u 2y=[].3h.V(1T);2y.9q();l G.1F(3t[3D])===\'c\'?3t[3D].2v(f,2y):!!3t[3D]}}());u 1e={1J:1J,1n:6Q.1n.R,1R:dz(6Q.1n.a4),os:6Q.os.R,eX:6Q.os.1R,eQ:gH,9o:"../2c/dn.gI",as:"../2Y/dn.kO",dQ:"F.O.2q.3Q.31"};1e.9K=1e.os;l 1e});1v(\'F/O/1a/1l\',[\'F/O/1a/1e\'],c(1e){u 1V=c(id){if(2J id!==\'2x\'){l id}l 2j.mj(id)};u bF=c(1p,R){if(!1p.5Z){l 1f}u a9=1d ct("(^|\\\\s+)"+R+"(\\\\s+|$)");l a9.3G(1p.5Z)};u cl=c(1p,R){if(!bF(1p,R)){1p.5Z=!1p.5Z?R:1p.5Z.3p(/\\s+$/,\'\')+\' \'+R}};u ck=c(1p,R){if(1p.5Z){u a9=1d ct("(^|\\\\s+)"+R+"(\\\\s+|$)");1p.5Z=1p.5Z.3p(a9,c($0,$1,$2){l $1===\' \'&&$2===\' \'?\' \':\'\'})}};u 5U=c(1p,R){if(1p.gX){l 1p.gX[R]}Y if(1A.gV){l 1A.gV(1p,Q)[R]}};u bG=c(3o,8f){u x=0,y=0,3C,67=2j,aW,br;3o=3o;8f=8f||67.6N;c cx(3o){u 9Y,ad,x=0,y=0;if(3o){ad=3o.h8();9Y=67.j6==="j7"?67.al:67.6N;x=ad.6C+9Y.gM;y=ad.3r+9Y.gL}l{x:x,y:y}}if(3o&&3o.h8&&1e.1n===\'46\'&&(!67.h6||67.h6<8)){aW=cx(3o);br=cx(8f);l{x:aW.x-br.x,y:aW.y-br.y}}3C=3o;3M(3C&&3C!=8f&&3C.cE){x+=3C.jI||0;y+=3C.jj||0;3C=3C.ju}3C=3o.5g;3M(3C&&3C!=8f&&3C.cE){x-=3C.gM||0;y-=3C.gL||0;3C=3C.5g}l{x:x,y:y}};u 9c=c(3o){l{w:3o.jn||3o.jm,h:3o.jh||3o.ji}};l{1V:1V,bF:bF,cl:cl,ck:ck,5U:5U,bG:bG,9c:9c}});1v(\'F/O/36\',[\'F/O/1a/G\'],c(G){c 9s(1p,P){u 2B;1B(2B in 1p){if(1p[2B]===P){l 2B}}l Q}l{2N:(c(){u 4D={9N:1,8s:9,jv:4};c 2N(2b){f.2b=2b;f.R=9s(4D,2b);f.bE=f.R+": 2N "+f.2b}G.1k(2N,4D);2N.2n=4q.2n;l 2N}()),7C:(c(){c 7C(2b){f.2b=2b;f.R=\'7C\'}G.1k(7C,{jG:1});7C.2n=4q.2n;l 7C}()),2Z:(c(){u 4D={7h:1,ci:2};c 2Z(2b){f.2b=2b;f.R=9s(4D,2b);f.bE=f.R+": 2Z "+f.2b}G.1k(2Z,4D);2Z.2n=4q.2n;l 2Z}()),6h:(c(){u 4D={9I:1,cL:2,gS:3,fB:4,jH:5,gO:6,4p:7,7I:8};c 6h(2b){f.2b=2b;f.R=9s(4D,2b);f.bE=f.R+": 6h "+f.2b}G.1k(6h,4D);6h.2n=4q.2n;l 6h}()),1E:(c(){u 4D={jJ:1,jE:2,jD:3,jy:4,jx:5,jA:6,gO:7,9I:8,8s:9,jf:10,4p:11,7I:12,jK:13,j9:14,cF:15,iV:16,fk:17,cL:18,iW:19,gS:20,iT:21,iU:22,iS:23,fl:24,iY:25};c 1E(2b){f.2b=2b;f.R=9s(4D,2b);f.bE=f.R+": 1E "+f.2b}G.1k(1E,4D);1E.2n=4q.2n;l 1E}()),68:(c(){c 68(2b){f.2b=2b;f.R=\'68\'}G.1k(68,{gh:0});68.2n=4q.2n;l 68}())}});1v(\'F/O/2q\',[\'F/O/36\',\'F/O/1a/G\'],c(x,G){c 2q(){u 3v={};G.1k(f,{M:Q,2h:c(){if(!f.M){f.M=G.2W(\'4k\')}},4e:c(K,fn,66,7b){u L=f,3L;K=G.4H(K);if(/\\s/.3G(K)){G.2f(K.3x(/\\s+/),c(K){L.4e(K,fn,66,7b)});l}K=K.3q();66=4O(66,10)||0;3L=3v[f.M]&&3v[f.M][K]||[];3L.2G({fn:fn,66:66,7b:7b||f});if(!3v[f.M]){3v[f.M]={}}3v[f.M][K]=3L},eD:c(K){l K?!!(3v[f.M]&&3v[f.M][K]):!!3v[f.M]},aF:c(K,fn){K=K.3q();u 3L=3v[f.M]&&3v[f.M][K],i;if(3L){if(fn){1B(i=3L.T-1;i>=0;i--){if(3L[i].fn===fn){3L.ir(i,1);2l}}}Y{3L=[]}if(!3L.T){4S 3v[f.M][K];if(G.6o(3v[f.M])){4S 3v[f.M]}}}},fM:c(){if(3v[f.M]){4S 3v[f.M]}},31:c(K){u M,3L,2y,5J,4f={},1N=1t,4v;if(G.1F(K)!==\'2x\'){5J=K;if(G.1F(5J.K)===\'2x\'){K=5J.K;if(5J.3Y!==4v&&5J.3X!==4v){4f.3Y=5J.3Y;4f.3X=5J.3X}4f.5x=5J.5x||1f}Y{26 1d x.68(x.68.gh)}}if(K.4x(\'::\')!==-1){(c(76){M=76[0];K=76[1]}(K.3x(\'::\')))}Y{M=f.M}K=K.3q();3L=3v[M]&&3v[M][K];if(3L){3L.j5(c(a,b){l b.66-a.66});2y=[].3h.V(1T);2y.9q();4f.K=K;2y.fJ(4f);u 3B=[];G.2f(3L,c(7W){2y[0].1q=7W.7b;if(4f.5x){3B.2G(c(cb){81(c(){cb(7W.fn.2v(7W.7b,2y)===1f)},1)})}Y{3B.2G(c(cb){cb(7W.fn.2v(7W.7b,2y)===1f)})}});if(3B.T){G.8G(3B,c(5t){1N=!5t})}}l 1N},2k:c(){f.4e.2v(f,1T)},dd:c(){f.aF.2v(f,1T)},6X:c(){f.fM.2v(f,1T)},1m:c(){l f.31.2v(f,1T)},6l:c(75){u h;if(G.1F(75)!==\'2D\'){75=[75]}1B(u i=0;i<75.T;i++){h=\'on\'+75[i];if(G.1F(f[h])===\'c\'){f.4e(75[i],f[h])}Y if(G.1F(f[h])===\'2A\'){f[h]=Q}}}})}2q.3Q=1d 2q();l 2q});1v(\'F/O/1a/1X\',[],c(){u 6b=c(1Q){l cc(c4(1Q))};u 9B=c(fN){l kv(fI(fN))};u 43=c(J,7d){if(2J(1A.43)===\'c\'){l 7d?9B(1A.43(J)):1A.43(J)}u 5w="fR+/=";u o1,o2,o3,h1,h2,h3,h4,4W,i=0,ac=0,b4="",69=[];if(!J){l J}J+=\'\';do{h1=5w.4x(J.65(i++));h2=5w.4x(J.65(i++));h3=5w.4x(J.65(i++));h4=5w.4x(J.65(i++));4W=h1<<18|h2<<12|h3<<6|h4;o1=4W>>16&ap;o2=4W>>8&ap;o3=4W&ap;if(h3==64){69[ac++]=5T.6P(o1)}Y if(h4==64){69[ac++]=5T.6P(o1,o2)}Y{69[ac++]=5T.6P(o1,o2,o3)}}3M(i<J.T);b4=69.78(\'\');l 7d?9B(b4):b4};u 5Q=c(J,7d){if(7d){6b(J)}if(2J(1A.5Q)===\'c\'){l 1A.5Q(J)}u 5w="fR+/=";u o1,o2,o3,h1,h2,h3,h4,4W,i=0,ac=0,aV="",69=[];if(!J){l J}do{o1=J.8R(i++);o2=J.8R(i++);o3=J.8R(i++);4W=o1<<16|o2<<8|o3;h1=4W>>18&aZ;h2=4W>>12&aZ;h3=4W>>6&aZ;h4=4W&aZ;69[ac++]=5w.65(h1)+5w.65(h2)+5w.65(h3)+5w.65(h4)}3M(i<J.T);aV=69.78(\'\');u r=J.T%3;l(r?aV.3h(0,r-3):aV)+\'===\'.3h(r||3)};l{6b:6b,9B:9B,43:43,5Q:5Q}});1v(\'F/H/1c\',["F/O/1a/G","F/O/1a/1l","F/O/2q"],c(G,1l,2q){u cr={},9y={};c 1c(X,K,3t,79,g9){u L=f,6w,4X=G.2W(K+\'6p\'),5v=g9||\'1n\';X=X||{};9y[4X]=f;3t=G.1k({5d:1f,6I:1f,7x:1f,7K:1f,82:1f,8W:1t,7U:1f,7P:1f,7R:1f,4U:1f,77:1t,6S:1f,5M:1f,cT:1f,7z:1t,6y:1f,7Q:1t,6V:1t,7y:1f,7A:1f,5m:1f,7X:1t,8t:1t},3t);if(X.g7){5v=1c.d0(79,X.g7,5v)}6w=(c(){u 73={};l{1C:c(M,1o,fn,2y){if(6w[1o]){if(!73[M]){73[M]={fW:f,3Q:1d 6w[1o]()}}if(73[M].3Q[fn]){l 73[M].3Q[fn].2v(f,2y)}}},8U:c(M){4S 73[M]},f6:c(){u L=f;G.2f(73,c(1p,M){if(G.1F(1p.3Q.1x)===\'c\'){1p.3Q.1x.V(1p.fW)}L.8U(M)})}}}());G.1k(f,{aq:1f,M:4X,K:K,1u:1c.d0(79,(X.2V),5v),6n:4X+\'ka\',ba:0,X:X,1J:c(3D,P){u 9x=1T[2]||3t;if(G.1F(3D)===\'2x\'&&G.1F(P)===\'2A\'){3D=1c.8H(3D)}if(G.1F(3D)===\'4y\'){1B(u 2B in 3D){if(!f.1J(2B,3D[2B],9x)){l 1f}}l 1t}if(G.1F(9x[3D])===\'c\'){l 9x[3D].V(f,P)}Y{l(P===9x[3D])}},4w:c(){u 1Z,1I=1l.1V(f.6n);if(!1I){1Z=f.X.1Z?1l.1V(f.X.1Z):2j.6N;1I=2j.4h(\'6G\');1I.id=f.6n;1I.5Z=\'F-6D F-6D-\'+f.K;G.1k(1I.3a,{4z:\'9g\',3r:\'a5\',6C:\'a5\',1g:\'g2\',1i:\'g2\',dC:\'5F\'});1Z.6L(1I);1Z=Q}l 1I},53:c(){l 6w},3j:c(5c,5r){u 2y=[].3h.V(1T,2);l L.53().1C.V(f,f.M,5c,5r,2y)},1C:c(5c,5r){u 2y=[].3h.V(1T,2);if(L[5c]&&L[5c][5r]){l L[5c][5r].2v(f,2y)}l L.3j.2v(f,1T)},1x:c(){if(!L){l}u 1I=1l.1V(f.6n);if(1I){1I.5g.8D(1I)}if(6w){6w.f6()}f.6X();4S 9y[f.M];f.M=Q;4X=L=6w=1I=Q}});if(f.1u&&X.2V&&!f.1J(X.2V)){f.1u=1f}}1c.7M=\'2i,2c,2Y,4Y\';1c.1L=c(M){l 9y[M]?9y[M]:1f};1c.95=c(K,5y){5y.2n=2q.3Q;cr[K]=5y};1c.bJ=c(K){l cr[K]||Q};1c.9D=c(M){u H=1c.1L(M);if(H){l{M:H.M,K:H.K,1u:H.1u,1J:c(){l H.1J.2v(H,1T)}}}l Q};1c.8H=c(bh){u cG={};if(G.1F(bh)!==\'2x\'){l bh||{}}G.2f(bh.3x(\',\'),c(2B){cG[2B]=1t});l cG};1c.1J=c(K,3t){u H,5y=1c.bJ(K),1u;if(5y){H=1d 5y({2V:3t});1u=H.1u;H.1x();l!!1u}l 1f};1c.rr=c(3t,fY){u b8=(fY||1c.7M).3x(/\\s*,\\s*/);1B(u i in b8){if(1c.1J(b8[i],3t)){l b8[i]}}l Q};1c.d0=c(79,cS,5v){u 1u=Q;if(G.1F(5v)===\'2A\'){5v=\'1n\'}if(cS&&!G.6o(79)){G.2f(cS,c(P,3D){if(79.6k(3D)){u 8h=79[3D](P);if(2J(8h)===\'2x\'){8h=[8h]}if(!1u){1u=8h}Y if(!(1u=G.bs(1u,8h))){l(1u=1f)}}});if(1u){l G.2t(5v,1u)!==-1?5v:1u[0]}Y if(1u===1f){l 1f}}l 5v};1c.38=c(){l 1t};1c.rt=c(){l 1f};1c.dB=c(gc){l c(){l!!gc}};l 1c});1v(\'F/H/2U\',[\'F/O/36\',\'F/O/1a/G\',\'F/H/1c\'],c(x,G,1c){l c 2U(){u H;G.1k(f,{40:c(X){u 1o=f,1U;c bk(42){u K,5y;if(!42.T){1o.1m(\'2N\',1d x.2N(x.2N.9N));H=Q;l}K=42.9q();5y=1c.bJ(K);if(!5y){bk(42);l}H=1d 5y(X);H.2k(\'dD\',c(){H.aq=1t;81(c(){H.ba++;1o.1m(\'7e\',H)},1)});H.2k(\'4q\',c(){H.1x();bk(42)});if(!H.1u){H.1m(\'4q\');l}H.2h()}if(G.1F(X)===\'2x\'){1U=X}Y if(G.1F(X.1U)===\'2x\'){1U=X.1U}if(1U){H=1c.1L(1U);if(H){H.ba++;l H}Y{26 1d x.2N(x.2N.9N)}}bk((X.fm||1c.7M).3x(/\\s*,\\s*/))},1L:c(){if(H&&H.M){l H}H=Q;l Q},5B:c(){if(H&&--H.ba<=0){H.1x();H=Q}}})}});1v(\'F/1b/1w\',[\'F/O/1a/G\',\'F/O/1a/1X\',\'F/H/2U\'],c(G,1X,2U){u 5E={};c 1w(1U,U){c ga(2P,3S,K){u U,J=5E[f.M];if(G.1F(J)!==\'2x\'||!J.T){l Q}U=1d 1w(Q,{K:K,1z:3S-2P});U.b9(J.7o(2P,U.1z));l U}2U.V(f);if(1U){f.40(1U)}if(!U){U={}}Y if(G.1F(U)===\'2x\'){U={J:U}}G.1k(f,{M:U.M||G.2W(\'4k\'),1U:1U,1z:U.1z||0,K:U.K||\'\',3h:c(2P,3S,K){if(f.50()){l ga.2v(f,1T)}l f.1L().1C.V(f,\'1w\',\'3h\',f.3H(),2P,3S,K)},3H:c(){if(!5E[f.M]){l Q}l 5E[f.M]},b9:c(J){if(f.1U){f.1L().1C.V(f,\'1w\',\'1x\',5E[f.M]);f.5B();f.1U=Q}J=J||\'\';u 3U=J.3f(/^J:([^;]*);4c,/);if(3U){f.K=3U[1];J=1X.43(J.8w(J.4x(\'4c,\')+7))}f.1z=J.T;5E[f.M]=J},50:c(){l!f.1U&&G.1F(5E[f.M])===\'2x\'},1x:c(){f.b9();4S 5E[f.M]}});if(U.J){f.b9(U.J)}Y{5E[f.M]=U}}l 1w});1v(\'F/1b/1Y\',[\'F/O/1a/G\',\'F/O/1a/27\',\'F/1b/1w\'],c(G,27,1w){c 1Y(1U,1b){u R,K;if(!1b){1b={}}if(1b.K&&1b.K!==\'\'){K=1b.K}Y{K=27.by(1b.R)}if(1b.R){R=1b.R.3p(/\\\\/g,\'/\');R=R.7o(R.ry(\'/\')+1)}Y{u 9J=K.3x(\'/\')[0];R=G.2W((9J!==\'\'?9J:\'1b\')+\'6p\');if(27.1h[K]){R+=\'.\'+27.1h[K][0]}}1w.2v(f,1T);G.1k(f,{K:K||\'\',R:R||G.2W(\'rx\'),fT:1b.fT||(1d ar()).rw()})}1Y.2n=1w.2n;l 1Y});1v(\'F/1b/2F\',[\'F/O/1a/G\',\'F/O/1a/27\',\'F/O/1a/1l\',\'F/O/36\',\'F/O/2q\',\'F/O/55\',\'F/1b/1Y\',\'F/H/1c\',\'F/H/2U\'],c(G,27,1l,x,2q,55,1Y,1c,2U){u 4V=[\'7l\',\'8X\',\'ro\',\'bX\',\'ce\',\'8P\',\'8O\'];c 2F(X){u L=f,1Z,2o,7n;if(G.2t(G.1F(X),[\'2x\',\'3o\'])!==-1){X={6A:X}}2o=1l.1V(X.6A);if(!2o){26 1d x.1E(x.1E.9I)}7n={2u:[{7u:55.54(\'fE c2\'),1h:\'*\'}],R:\'1b\',8a:1f,2V:1f,1Z:2o.5g||2j.6N};X=G.1k({},7n,X);if(2J(X.2V)===\'2x\'){X.2V=1c.8H(X.2V)}if(2J(X.2u)===\'2x\'){X.2u=27.c0(X.2u)}1Z=1l.1V(X.1Z);if(!1Z){1Z=2j.6N}if(1l.5U(1Z,\'4z\')===\'aA\'){1Z.3a.4z=\'8T\'}1Z=2o=Q;2U.V(L);G.1k(L,{M:G.2W(\'4k\'),1U:Q,6n:Q,3e:Q,2h:c(){L.6l(4V);L.2k(\'7e\',c(e,H){L.1U=H.M;L.6n=H.6n;L.2k("rm",c(){L.1m("bY")},6Z);L.2k("rf",c(){u 3e=H.1C.V(L,\'2F\',\'8S\');L.3e=[];G.2f(3e,c(1b){if(1b.1z===0){l 1t}L.3e.2G(1d 1Y(L.1U,1b))})},6Z);L.2k(\'bY\',c(){u bI,1z,2o,1I;2o=1l.1V(X.6A);1I=1l.1V(H.6n);if(2o){bI=1l.bG(2o,1l.1V(X.1Z));1z=1l.9c(2o);if(1I){G.1k(1I.3a,{3r:bI.y+\'px\',6C:bI.x+\'px\',1g:1z.w+\'px\',1i:1z.h+\'px\'})}}1I=2o=Q});H.1C.V(L,\'2F\',\'2h\',X)});L.40(G.1k({},X,{2V:{5M:1t}}))},aN:c(4E){u H=f.1L();if(H){H.1C.V(f,\'2F\',\'aN\',G.1F(4E)===\'2A\'?1t:4E)}},re:c(){L.1m("bY")},1x:c(){u H=f.1L();if(H){H.1C.V(f,\'2F\',\'1x\');f.5B()}if(G.1F(f.3e)===\'2D\'){G.2f(f.3e,c(1b){1b.1x()})}f.3e=Q}})}2F.2n=2q.3Q;l 2F});1v(\'F/1b/3F\',[\'F/O/55\',\'F/O/1a/1l\',\'F/O/36\',\'F/O/1a/G\',\'F/1b/1Y\',\'F/H/2U\',\'F/O/2q\',\'F/O/1a/27\'],c(55,1l,x,G,1Y,2U,2q,27){u 4V=[\'7l\',\'9R\',\'cK\',\'9F\',\'2C\'];c 3F(X){u L=f,7n;if(2J(X)===\'2x\'){X={fF:X}}7n={2u:[{7u:55.54(\'fE c2\'),1h:\'*\'}],2V:{82:1t}};X=2J(X)===\'4y\'?G.1k({},7n,X):7n;X.1Z=1l.1V(X.fF)||2j.6N;if(1l.5U(X.1Z,\'4z\')===\'aA\'){X.1Z.3a.4z=\'8T\'}if(2J(X.2u)===\'2x\'){X.2u=27.c0(X.2u)}2U.V(L);G.1k(L,{M:G.2W(\'4k\'),1U:Q,3e:Q,2h:c(){L.6l(4V);L.2k(\'7e\',c(e,H){L.1U=H.M;L.2k("rd",c(){u 3e=H.1C.V(L,\'3F\',\'8S\');L.3e=[];G.2f(3e,c(1b){L.3e.2G(1d 1Y(L.1U,1b))})},6Z);H.1C.V(L,\'3F\',\'2h\',X);L.31(\'7l\')});L.40(X)},1x:c(){u H=f.1L();if(H){H.1C.V(f,\'3F\',\'1x\');f.5B()}f.3e=Q}})}3F.2n=2q.3Q;l 3F});1v(\'F/H/59\',[\'F/O/1a/G\',\'F/H/2U\',"F/O/2q"],c(G,2U,2q){c 59(){f.M=G.2W(\'4k\');2U.V(f);f.1x=c(){f.5B();f.6X()}}59.2n=2q.3Q;l 59});1v(\'F/1b/1H\',[\'F/O/1a/G\',\'F/O/1a/1X\',\'F/O/36\',\'F/O/2q\',\'F/1b/1w\',\'F/1b/1Y\',\'F/H/59\'],c(G,1X,x,2q,1w,1Y,59){u 4V=[\'9E\',\'5D\',\'4u\',\'3z\',\'2C\',\'8k\'];c 1H(){u L=f,2e;G.1k(f,{M:G.2W(\'4k\'),35:1H.92,1N:Q,2C:Q,5b:c(U){6s.V(f,\'5b\',U)},4l:c(U){6s.V(f,\'4l\',U)},5e:c(U){6s.V(f,\'5e\',U)},3z:c(){f.1N=Q;if(G.2t(f.35,[1H.92,1H.3Z])!==-1){l}Y if(f.35===1H.5C){f.35=1H.3Z}if(2e){2e.1L().1C.V(f,\'1H\',\'3z\')}f.1m(\'3z\');f.1m(\'8k\')},1x:c(){f.3z();if(2e){2e.1L().1C.V(f,\'1H\',\'1x\');2e.5B()}L=2e=Q}});c 6s(op,U){2e=1d 59();c 2C(5t){L.35=1H.3Z;L.2C=5t;L.1m(\'2C\');6m()}c 6m(){2e.1x();2e=Q;L.1m(\'8k\')}c 1C(H){2e.2k(\'4q\',c(e,5t){2C(5t)});2e.2k(\'dt\',c(e){L.1N=H.1C.V(2e,\'1H\',\'84\');L.1m(e)});2e.2k(\'9S\',c(e){L.35=1H.3Z;L.1N=H.1C.V(2e,\'1H\',\'84\');L.1m(e);6m()});H.1C.V(2e,\'1H\',\'2w\',op,U)}f.6l(4V);if(f.35===1H.5C){l 2C(1d x.1E(x.1E.4p))}f.35=1H.5C;f.1m(\'9E\');if(U 3u 1w){if(U.50()){u 2L=U.3H();4N(op){1y\'5e\':1y\'5b\':f.1N=2L;2l;1y\'4l\':f.1N=\'J:\'+U.K+\';4c,\'+1X.5Q(2L);2l}f.35=1H.3Z;f.1m(\'4u\');6m()}Y{1C(2e.40(U.1U))}}Y{2C(1d x.1E(x.1E.9I))}}}1H.92=0;1H.5C=1;1H.3Z=2;1H.2n=2q.3Q;l 1H});1v(\'F/O/1a/4j\',[],c(){u 6u=c(2H,5G){u 2B=[\'d9\',\'6r\',\'rb\',\'rg\',\'6x\',\'e8\',\'7G\',\'5j\',\'8T\',\'41\',\'aJ\',\'1b\',\'c8\',\'rh\'],i=2B.T,bg={fy:80,fz:fG},3w={},8A=/^(?:([^:\\/?#]+):)?(?:\\/\\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?()(?:(()(?:(?:[^?#\\/]*\\/)*)()(?:[^?#]*))(?:\\\\?([^#]*))?(?:#(.*))?)/,m=8A.1C(2H||\'\');3M(i--){if(m[i]){3w[2B[i]]=m[i]}}if(!3w.6r){if(!5G||2J(5G)===\'2x\'){5G=6u(5G||2j.rl.rk)}3w.6r=5G.6r;3w.7G=5G.7G;3w.5j=5G.5j;u 41=\'\';if(/^[^\\/]/.3G(3w.41)){41=5G.41;if(!/(\\/|\\/[^\\.]+)$/.3G(41)){41=41.3p(/\\/[^\\/]+$/,\'/\')}Y{41+=\'/\'}}3w.41=41+(3w.41||\'\')}if(!3w.5j){3w.5j=bg[3w.6r]||80}3w.5j=4O(3w.5j,10);if(!3w.41){3w.41="/"}4S 3w.d9;l 3w};u bl=c(2H){u bg={fy:80,fz:fG},4g=6u(2H);l 4g.6r+\'://\'+4g.7G+(4g.5j!==bg[4g.6r]?\':\'+4g.5j:\'\')+4g.41+(4g.c8?4g.c8:\'\')};u 8g=c(2H){c b7(2H){l[2H.6r,2H.7G,2H.5j].78(\'/\')}if(2J 2H===\'2x\'){2H=6u(2H)}l b7(6u())===b7(2H)};l{6u:6u,bl:bl,8g:8g}});1v(\'F/1b/33\',[\'F/O/1a/G\',\'F/H/2U\',\'F/O/1a/1X\'],c(G,2U,1X){l c(){2U.V(f);G.1k(f,{M:G.2W(\'4k\'),5b:c(U){l 6s.V(f,\'5b\',U)},4l:c(U){l 6s.V(f,\'4l\',U)},5e:c(U){l 6s.V(f,\'5e\',U)}});c 6s(op,U){if(U.50()){u 2L=U.3H();4N(op){1y\'5b\':l 2L;1y\'4l\':l\'J:\'+U.K+\';4c,\'+1X.5Q(2L);1y\'5e\':u bu=\'\';1B(u i=0,T=2L.T;i<T;i++){bu+=5T.6P(2L[i])}l bu}}Y{u 1N=f.40(U.1U).1C.V(f,\'33\',\'2w\',op,U);f.5B();l 1N}}}});1v("F/2g/3i",["F/O/36","F/O/1a/G","F/1b/1w"],c(x,G,1w){c 3i(){u 3m,bo=[];G.1k(f,{6q:c(R,P){u L=f,7B=G.1F(P);if(P 3u 1w){3m={R:R,P:P}}Y if(\'2D\'===7B){R+=\'[]\';G.2f(P,c(P){L.6q(R,P)})}Y if(\'4y\'===7B){G.2f(P,c(P,2B){L.6q(R+\'[\'+2B+\']\',P)})}Y if(\'Q\'===7B||\'2A\'===7B||\'ri\'===7B&&dP(P)){L.6q(R,"1f")}Y{bo.2G({R:R,P:P.7f()})}},8u:c(){l!!f.6F()},6F:c(){l 3m&&3m.P||Q},hf:c(){l 3m&&3m.R||Q},2f:c(cb){G.2f(bo,c(cO){cb(cO.P,cO.R)});if(3m){cb(3m.P,3m.R)}},1x:c(){3m=Q;bo=[]}})}l 3i});1v("F/2g/1j",["F/O/1a/G","F/O/36","F/O/2q","F/O/1a/1X","F/O/1a/4j","F/H/1c","F/H/59","F/1b/1w","F/1b/33","F/2g/3i","F/O/1a/1e","F/O/1a/27"],c(G,x,2q,1X,4j,1c,59,1w,33,3i,1e,27){u ee={48:\'rA\',rQ:\'rP rO\',rN:\'rR\',6K:\'rS\',rV:\'rU\',rT:\'rM\',rL:\'rE-rD rC\',rB:\'hb 5z\',rF:\'rG 5z\',rK:\'hW 5z\',rJ:\'rI-rH\',ra:\'r9 qG\',qF:\'qE qD\',qH:\'qI qL\',qK:\'gK\',qJ:\'qC e0\',qB:\'6v na\',qs:\'qr gT\',qq:\'qv\',qw:\'qA qz\',qy:\'gj bp\',qx:\'qM\',qN:\'r3 bB\',r2:\'r1\',7a:\'6v gK\',r0:\'r4 6v r5\',r8:\'6v r7\',r6:\'gT qZ bB\',qY:\'bp gw\',qR:\'qQ\',qP:\'qO\',qS:\'hB bB\',h0:\'qT cR\',rX:\'bp gs gW qW\',qV:\'bp-qU gW rW\',sc:\'t3 t2 ay\',gY:\'t1 t0 6v t4\',gq:\'t5 cR\',t8:\'t7 gs\',t6:\'sZ\',sY:\'cR sR\',sQ:\'sP bB\',sO:\'sS sT 4q\',sX:\'6v sW\',ta:\'gj gv\',sV:\'sU t9\',tc:\'gv gw\',tp:\'tn ts 6v tt\',tu:\'tl td tb\',tk:\'tj ti\',th:\'6v tf\'};c cI(){f.M=G.2W(\'4k\')}cI.2n=2q.3Q;u 4V=[\'9E\',\'5D\',\'3z\',\'2C\',\'4u\',\'cW\',\'8k\'];u tm=1,tv=2;c 1j(){u L=f,5p={cW:0,35:1j.bw,5W:1f,6e:0,cu:"",1O:"",aj:Q,5Y:Q,6d:Q},91=1t,cs,bH,8q={},cB,cC,cz=Q,8C=Q,97=1f,7F=1f,94=1f,8Z=1f,7E=1f,93=1f,cw,fb,es=Q,ez=Q,1G={},1s,7w=\'\',7c;G.1k(f,5p,{M:G.2W(\'4k\'),4A:1d cI(),8M:c(4n,2H,5x,6x,8N){u 4g;if(!4n||!2H){26 1d x.1E(x.1E.7I)}if(/[\\ei-\\eh]/.3G(4n)||1X.6b(4n)!==4n){26 1d x.1E(x.1E.7I)}if(!!~G.2t(4n.9b(),[\'gA\',\'to\',\'96\',\'tq\',\'sM\',\'98\',\'sf\',\'h9\',\'f5\'])){bH=4n.9b()}if(!!~G.2t(bH,[\'gA\',\'h9\',\'f5\'])){26 1d x.1E(x.1E.cL)}2H=1X.6b(2H);4g=4j.6u(2H);93=4j.8g(4g);cs=4j.bl(2H);if((6x||8N)&&!93){26 1d x.1E(x.1E.cF)}cB=6x||4g.6x;cC=8N||4g.e8;91=5x||1t;if(91===1f&&(2r(\'cW\')||2r(\'5W\')||2r(\'1O\')!=="")){26 1d x.1E(x.1E.cF)}97=!91;7F=1f;8q={};8m.V(f);2r(\'35\',1j.9a);f.6l([\'7g\']);f.31(\'7g\')},9X:c(2S,P){u em=["2u-9j","2u-8i","et-88-eg-2E","et-88-eg-4n","se","dA-T","en","eo","dA-ej-8i","sd","sN","7G","sg-si","b7","sk","te","sb","ej-8i","sa","6x-s1","s0"];if(2r(\'35\')!==1j.9a||7F){26 1d x.1E(x.1E.4p)}if(/[\\ei-\\eh]/.3G(2S)||1X.6b(2S)!==2S){26 1d x.1E(x.1E.7I)}2S=G.4H(2S).3q();if(!!~G.2t(2S,em)||/^(rZ\\-|rY\\-)/.3G(2S)){l 1f}if(!8q[2S]){8q[2S]=P}Y{8q[2S]+=\', \'+P}l 1t},an:c(){l 7w||\'\'},ak:c(2S){2S=2S.3q();if(7E||!!~G.2t(2S,[\'bv-en\',\'bv-eo\'])){l Q}if(7w&&7w!==\'\'){if(!7c){7c={};G.2f(7w.3x(/\\r\\n/),c(ek){u 71=ek.3x(/:\\s+/);if(71.T===2){71[0]=G.4H(71[0]);7c[71[0].3q()]={2S:71[0],P:G.4H(71[1])}}})}if(7c.6k(2S)){l 7c[2S].2S+\': \'+7c[2S].P}}l Q},s8:c(3I){u 3U,9j;if(!!~G.2t(2r(\'35\'),[1j.5C,1j.3Z])){26 1d x.1E(x.1E.4p)}3I=G.4H(3I.3q());if(/;/.3G(3I)&&(3U=3I.3f(/^([^;]+)(?:;\\s7\\=)?(.*)$/))){3I=3U[1];if(3U[2]){9j=3U[2]}}if(!27.2O[3I]){26 1d x.1E(x.1E.7I)}es=3I;ez=9j},3R:c(J,X){if(G.1F(X)===\'2x\'){1G={1U:X}}Y if(!X){1G={}}Y{1G=X}f.6l(4V);f.4A.6l(4V);if(f.35!==1j.9a||7F){26 1d x.1E(x.1E.4p)}if(J 3u 1w){1G.1U=J.1U;8C=J.K||\'2Q/az-ax\'}Y if(J 3u 3i){if(J.8u()){u U=J.6F();1G.1U=U.1U;8C=U.K||\'2Q/az-ax\'}}Y if(2J J===\'2x\'){cz=\'ev-8\';8C=\'4b/eu;9j=ev-8\';J=1X.6b(J)}if(!f.5W){f.5W=(1G.2V&&1G.2V.7Q)&&!93}94=(!97&&f.4A.eD());7E=1f;8Z=!J;if(!97){7F=1t}e9.V(f,J)},3z:c(){7E=1t;97=1f;if(!~G.2t(2r(\'35\'),[1j.bw,1j.9a,1j.3Z])){2r(\'35\',1j.3Z);7F=1f;if(1s){1s.1L().1C.V(1s,\'1j\',\'3z\',8Z)}Y{26 1d x.1E(x.1E.4p)}8Z=1t}Y{2r(\'35\',1j.bw)}},1x:c(){if(1s){if(G.1F(1s.1x)===\'c\'){1s.1x()}1s=Q}f.6X();if(f.4A){f.4A.6X();f.4A=Q}}});c 2r(6t,P){if(!5p.6k(6t)){l}if(1T.T===1){l 1e.1J(\'cm\')?5p[6t]:L[6t]}Y{if(1e.1J(\'cm\')){5p[6t]=P}Y{L[6t]=P}}}c e9(J){u L=f;cw=1d ar().ca();1s=1d 59();c 6m(){1s.1x();1s=Q;L.31(\'8k\');L=Q}c 1C(H){1s.2k(\'sG\',c(e){2r(\'35\',1j.5C);L.31(\'7g\');L.31(e);if(94){L.4A.31(e)}});1s.2k(\'dt\',c(e){if(2r(\'35\')!==1j.5C){2r(\'35\',1j.5C);L.31(\'7g\')}L.31(e)});1s.2k(\'hC\',c(e){if(94){L.4A.31({K:\'5D\',hz:1f,3Y:e.3Y,3X:e.3X})}});1s.2k(\'9S\',c(e){2r(\'35\',1j.3Z);2r(\'6e\',sF(H.1C.V(1s,\'1j\',\'cn\')||0));2r(\'cu\',ee[2r(\'6e\')]||"");2r(\'6d\',H.1C.V(1s,\'1j\',\'b2\',2r(\'1O\')));if(!!~G.2t(2r(\'1O\'),[\'4b\',\'\'])){2r(\'5Y\',2r(\'6d\'))}Y if(2r(\'1O\')===\'2j\'){2r(\'aj\',2r(\'6d\'))}7w=H.1C.V(1s,\'1j\',\'an\');L.31(\'7g\');if(2r(\'6e\')>0){if(94){L.4A.31(e)}L.31(e)}Y{7E=1t;L.31(\'2C\')}6m()});1s.2k(\'sD\',c(e){L.31(e);6m()});1s.2k(\'4q\',c(e){7E=1t;2r(\'35\',1j.3Z);L.31(\'7g\');8Z=1t;L.31(e);6m()});H.1C.V(1s,\'1j\',\'3R\',{2H:cs,4n:bH,5x:91,6x:cB,8N:cC,2E:8q,sq:8C,8i:cz,1O:L.1O,5W:L.5W,X:1G},J)}if(2J(1G.2V)===\'2x\'){1G.2V=1c.8H(1G.2V)}1G.2V=G.1k({},1G.2V,{4U:L.1O});if(J 3u 3i){1G.2V.6V=1t}if(!93){1G.2V.7K=1t}if(1G.1U){1C(1s.40(1G))}Y{1s.2k(\'7e\',c(e,H){1C(H)});1s.2k(\'2N\',c(e,5t){L.31(\'2N\',5t)});1s.40(1G)}}c 8m(){2r(\'5Y\',"");2r(\'aj\',Q);2r(\'6d\',Q);2r(\'6e\',0);2r(\'cu\',"");cw=fb=Q}}1j.bw=0;1j.9a=1;1j.so=2;1j.5C=3;1j.3Z=4;1j.2n=2q.3Q;l 1j});1v("F/H/2a",["F/O/1a/G","F/O/1a/1X","F/H/2U","F/O/2q"],c(G,1X,2U,2q){c 2a(){u cy,70,9f,6T,6R,9e;2U.V(f);G.1k(f,{M:G.2W(\'4k\'),4E:2a.a7,1N:Q,9n:c(J,K,X){u L=f;X=G.1k({9U:st},X);if((cy=X.9U%3)){X.9U+=3-cy}9e=X.9U;8m.V(f);9f=J;6T=J.T;if(G.1F(X)===\'2x\'||X.1U){cv.V(L,K,f.40(X))}Y{u cb=c(e,H){L.dd("7e",cb);cv.V(L,K,H)};f.2k("7e",cb);f.40(X)}},3z:c(){u L=f;L.4E=2a.a7;if(70){70.1C.V(L,\'2a\',\'sv\');L.1m("su")}8m.V(L)},1x:c(){f.6X();70=Q;f.5B();8m.V(f)}});c 8m(){6T=6R=0;9f=f.1N=Q}c cv(K,H){u L=f;70=H;L.2k("qo",c(e){6R=e.3X;if(6R<6T&&G.2t(L.4E,[2a.a7,2a.3Z])===-1){cA.V(L)}},6Z);L.2k("a6",c(){6R=6T;L.4E=2a.3Z;9f=Q;L.1N=70.1C.V(L,\'2a\',\'5H\',K||\'\')},6Z);L.4E=2a.fe;L.1m("oh");cA.V(L)}c cA(){u L=f,74,cD=6T-6R;if(9e>cD){9e=cD}74=1X.5Q(9f.7o(6R,9e));70.1C.V(L,\'2a\',\'of\',74,6T)}}2a.a7=0;2a.fe=1;2a.3Z=2;2a.2n=2q.3Q;l 2a});1v("F/1S/1K",["F/O/1a/G","F/O/1a/1l","F/O/36","F/1b/33","F/2g/1j","F/H/1c","F/H/2U","F/H/2a","F/O/1a/1e","F/O/2q","F/1b/1w","F/1b/1Y","F/O/1a/1X"],c(G,1l,x,33,1j,1c,2U,2a,1e,2q,1w,1Y,1X){u 4V=[\'5D\',\'4u\',\'2C\',\'oj\',\'d5\'];c 1K(){2U.V(f);G.1k(f,{M:G.2W(\'4k\'),1U:Q,R:"",1z:0,1g:0,1i:0,K:"",1D:{},8E:c(){f.4u.2v(f,1T)},4u:c(){f.2k(\'9S bi\',c(){fj.V(f)},6Z);f.6l(4V);8Y.2v(f,1T)},9k:c(1g,1i,49,5a){37{if(!f.1z){26 1d x.1E(x.1E.4p)}if(f.1g>1K.cY||f.1i>1K.cZ){26 1d x.2Z(x.2Z.ci)}if(!1g&&!1i||G.1F(49)===\'2A\'){49=1f}1g=1g||f.1g;1i=1i||f.1i;5a=(G.1F(5a)===\'2A\'?1t:!!5a);f.1L().1C.V(f,\'1K\',\'9k\',1g,1i,49,5a)}3k(ex){f.1m(\'2C\',ex)}},49:c(1g,1i,5a){f.9k(1g,1i,1t,5a)},bq:c(){if(!1e.1J(\'72\')){26 1d x.2N(x.2N.8s)}u H=f.40(f.1U);l H.1C.V(f,\'1K\',\'bq\')},5H:c(K,2R){if(!f.1z){26 1d x.1E(x.1E.4p)}if(!K){K=\'1S/4r\'}if(K===\'1S/4r\'&&!2R){2R=90}l f.1L().1C.V(f,\'1K\',\'5H\',K,2R)},4J:c(K,2R){if(!f.1z){26 1d x.1E(x.1E.4p)}l f.1L().1C.V(f,\'1K\',\'4J\',K,2R)},bC:c(K,2R){u 3O=f.4J(K,2R);l 1X.43(3O.8w(3O.4x(\'4c,\')+7))},om:c(el){u L=f,3P,K,2R,49,X=1T[1]||{},1g=f.1g,1i=f.1i,H;c fg(){if(1e.1J(\'72\')){u 34=3P.bq();if(34){el.6L(34);34=Q;3P.1x();L.1m(\'d5\');l}}u 3O=3P.4J(K,2R);if(!3O){26 1d x.2Z(x.2Z.7h)}if(1e.1J(\'fp\',3O.T)){el.6M=\'<29 2L="\'+3O+\'" 1g="\'+3P.1g+\'" 1i="\'+3P.1i+\'" />\';3P.1x();L.1m(\'d5\')}Y{u tr=1d 2a();tr.2k("a6",c(){H=L.40(f.1N.1U);L.2k("ol",c(){G.1k(H.4w().3a,{3r:\'a5\',6C:\'a5\',1g:3P.1g+\'px\',1i:3P.1i+\'px\'});H=Q},6Z);H.1C.V(L,"od","eH",f.1N.M,1g,1i);3P.1x()});tr.9n(1X.43(3O.8w(3O.4x(\'4c,\')+7)),K,G.1k({},X,{2V:{7x:1t},fm:\'2c,2Y\',1Z:el}))}}37{if(!(el=1l.1V(el))){26 1d x.1E(x.1E.fl)}if(!f.1z){26 1d x.1E(x.1E.4p)}if(f.1g>1K.cY||f.1i>1K.cZ){26 1d x.2Z(x.2Z.ci)}K=X.K||f.K||\'1S/4r\';2R=X.2R||90;49=G.1F(X.49)!==\'2A\'?X.49:1f;if(X.1g){1g=X.1g;1i=X.1i||1g}Y{u 9d=1l.9c(el);if(9d.w&&9d.h){1g=9d.w;1i=9d.h}}3P=1d 1K();3P.2k("bi",c(){fg.V(L)});3P.2k("9S",c(){3P.9k(1g,1i,49,1f)});3P.8E(f,1f);l 3P}3k(ex){f.1m(\'2C\',ex)}},1x:c(){if(f.1U){f.1L().1C.V(f,\'1K\',\'1x\');f.5B()}f.6X()}});c fj(3b){if(!3b){3b=f.1L().1C.V(f,\'1K\',\'9D\')}f.1z=3b.1z;f.1g=3b.1g;f.1i=3b.1i;f.K=3b.K;f.1D=3b.1D;if(f.R===\'\'){f.R=3b.R}}c 8Y(2L){u a2=G.1F(2L);37{if(2L 3u 1K){if(!2L.1z){26 1d x.1E(x.1E.4p)}f2.2v(f,1T)}Y if(2L 3u 1w){if(!~G.2t(2L.K,[\'1S/4r\',\'1S/8x\'])){26 1d x.2Z(x.2Z.7h)}cU.2v(f,1T)}Y if(G.2t(a2,[\'U\',\'1b\'])!==-1){8Y.V(f,1d 1Y(Q,2L),1T[1])}Y if(a2===\'2x\'){if(/^J:[^;]*;4c,/.3G(2L)){8Y.V(f,1d 1w(Q,{J:2L}),1T[1])}Y{eN.2v(f,1T)}}Y if(a2===\'3o\'&&2L.o7.3q()===\'29\'){8Y.V(f,2L.2L,1T[1])}Y{26 1d x.1E(x.1E.fk)}}3k(ex){f.1m(\'2C\',ex)}}c f2(29,8z){u H=f.40(29.1U);f.1U=H.M;H.1C.V(f,\'1K\',\'9T\',29,(G.1F(8z)===\'2A\'?1t:8z))}c cU(U,X){u L=f;L.R=U.R||\'\';c 1C(H){L.1U=H.M;H.1C.V(L,\'1K\',\'aT\',U)}if(U.50()){f.2k(\'7e\',c(e,H){1C(H)});if(X&&2J(X.2V)===\'2x\'){X.2V=1c.8H(X.2V)}f.40(G.1k({2V:{6I:1t,7U:1t}},X))}Y{1C(f.40(U.1U))}}c eN(2H,X){u L=f,2g;2g=1d 1j();2g.8M(\'1V\',2H);2g.1O=\'U\';2g.o9=c(e){L.1m(e)};2g.8B=c(){cU.V(L,2g.6d,1t)};2g.dg=c(e){L.1m(e)};2g.o8=c(){2g.1x()};2g.2k(\'2N\',c(e,5t){L.1m(\'2N\',5t)});2g.3R(Q,X)}}1K.cY=eG;1K.cZ=eG;1K.2n=2q.3Q;l 1K});1v("F/H/2i/1c",["F/O/1a/G","F/O/36","F/H/1c","F/O/1a/1e"],c(G,x,1c,1e){u K="2i",1h={};c f0(X){u I=f,3K=1c.dB,8b=1c.38;u 3t=G.1k({5d:3K(1A.1H||1A.1Y&&1A.1Y.4J),6I:c(){l I.1J(\'5d\')&&!!1h.1K},7x:3K(1e.1J(\'72\')||1e.1J(\'b6\')),7K:3K(1A.1j&&\'5W\'in 1d 1j()),82:3K(c(){u 6G=2j.4h(\'6G\');l((\'oq\'in 6G)||(\'or\'in 6G&&\'oI\'in 6G))&&(1e.1n!==\'46\'||1e.1R>9)}()),8W:3K(c(){l(1e.1n===\'7D\'&&1e.1R>=28)||(1e.1n===\'46\'&&1e.1R>=10)}()),7R:8b,4U:c(1O){if(1O===\'4m\'&&!!1A.5h){l 1t}l 1e.1J(\'4U\',1O)},77:8b,7P:3K(1A.1j&&1d 1j().4A),7U:c(){l I.1J(\'5d\')&&1e.1J(\'72\')},5M:c(){l 1e.1J(\'dT\')&&1A.1Y},cT:c(){l I.1J(\'5M\')&&1e.1n===\'7D\'&&1e.1R>=21},7z:c(){l I.1J(\'5M\')&&!(1e.1n===\'b5\'&&1e.os===\'dc\')&&!(1e.os===\'dV\'&&1e.eQ(1e.eX,"7.0.4",\'<\'))},6y:3K(1A.1j&&(1d 1j().bR||(1A.hq&&1A.oH))),6S:3K(1A.1j),6V:c(){l!!(1A.1j&&1d 1j().4A&&1A.3i)||I.1J(\'6y\')},7y:3K(1A.1Y&&(1Y.2n.eR||1Y.2n.eW||1Y.2n.3h)),7A:c(){l I.1J(\'7y\')&&I.1J(\'6V\')},5m:3K(c(){l(1e.1n===\'di\'&&1e.1R>=4)||(1e.1n===\'a3\'&&1e.1R>=12)||(1e.1n===\'46\'&&1e.1R>=10)||!!~G.2t(1e.1n,[\'7D\',\'b5\'])}()),7X:8b},1T[2]);1c.V(f,X,(1T[1]||K),3t);G.1k(f,{2h:c(){f.1m("dD")},1x:(c(1x){l c(){1x.V(I);1x=I=Q}}(f.1x))});G.1k(f.53(),1h)}1c.95(K,f0);l 1h});1v("F/H/2i/1b/1w",["F/H/2i/1c","F/1b/1w"],c(1h,1w){c eT(){c eS(U,2P,3S){u d3;if(1A.1Y.2n.3h){37{U.3h();l U.3h(2P,3S)}3k(e){l U.3h(2P,3S-2P)}}Y if((d3=1A.1Y.2n.eW||1A.1Y.2n.eR)){l d3.V(U,2P,3S)}Y{l Q}}f.3h=c(){l 1d 1w(f.1L().M,eS.2v(f,1T))}}l(1h.1w=eT)});1v(\'F/O/1a/1W\',[\'F/O/1a/G\'],c(G){u 4T={},M=\'oF\'+G.2W();c 4R(){f.oJ=1f}c 5f(){f.oK=1t}u 3g=c(1p,R,3J,2B){u 5k,85;R=R.3q();if(1p.4e){5k=3J;1p.4e(R,5k,1f)}Y if(1p.iK){5k=c(){u 4f=1A.oN;if(!4f.1q){4f.1q=4f.oM}4f.4R=4R;4f.5f=5f;3J(4f)};1p.iK(\'on\'+R,5k)}if(!1p[M]){1p[M]=G.2W()}if(!4T.6k(1p[M])){4T[1p[M]]={}}85=4T[1p[M]];if(!85.6k(R)){85[R]=[]}85[R].2G({5k:5k,d1:3J,2B:2B})};u 7Y=c(1p,R,3J){u K,4v;R=R.3q();if(1p[M]&&4T[1p[M]]&&4T[1p[M]][R]){K=4T[1p[M]][R]}Y{l}1B(u i=K.T-1;i>=0;i--){if(K[i].d1===3J||K[i].2B===3J){if(1p.aF){1p.aF(R,K[i].5k,1f)}Y if(1p.iO){1p.iO(\'on\'+R,K[i].5k)}K[i].d1=Q;K[i].5k=Q;K.ir(i,1);if(3J!==4v){2l}}}if(!K.T){4S 4T[1p[M]][R]}if(G.6o(4T[1p[M]])){4S 4T[1p[M]];37{4S 1p[M]}3k(e){1p[M]=4v}}};u 5i=c(1p,2B){if(!1p||!1p[M]){l}G.2f(4T[1p[M]],c(85,R){7Y(1p,R,2B)})};l{3g:3g,7Y:7Y,5i:5i}});1v("F/H/2i/1b/2F",["F/H/2i/1c","F/O/1a/G","F/O/1a/1l","F/O/1a/1W","F/O/1a/27","F/O/1a/1e"],c(1h,G,1l,1W,27,1e){c 2F(){u 3y=[],1G;G.1k(f,{2h:c(X){u 1o=f,I=1o.1L(),1P,1I,2O,2o,4C,3r;1G=X;3y=[];2O=1G.2u.2O||27.dI(1G.2u,I.1J(\'8W\'));1I=I.4w();1I.6M=\'<1P id="\'+I.M+\'" K="1b" 3a="ot-1z:ec;da:0;"\'+(1G.8a&&I.1J(\'7z\')?\'8a\':\'\')+(1G.aJ&&I.1J(\'cT\')?\'oy aJ\':\'\')+(2O?\' 2u="\'+2O.78(\',\')+\'"\':\'\')+\' />\';1P=1l.1V(I.M);G.1k(1P.3a,{4z:\'9g\',3r:0,6C:0,1g:\'48%\',1i:\'48%\'});2o=1l.1V(1G.6A);if(I.1J(\'5m\')){if(1l.5U(2o,\'4z\')===\'aA\'){2o.3a.4z=\'8T\'}4C=4O(1l.5U(2o,\'z-7r\'),10)||1;2o.3a.4C=4C;1I.3a.4C=4C-1;1W.3g(2o,\'8K\',c(e){u 1P=1l.1V(I.M);if(1P&&!1P.8V){1P.8K()}e.4R()},1o.M)}3r=I.1J(\'5m\')?2o:1I;1W.3g(3r,\'i1\',c(){1o.1m(\'bX\')},1o.M);1W.3g(3r,\'hj\',c(){1o.1m(\'ce\')},1o.M);1W.3g(3r,\'8P\',c(){1o.1m(\'8P\')},1o.M);1W.3g(1l.1V(1G.1Z),\'8O\',c(){1o.1m(\'8O\')},1o.M);1P.a8=c aa(){3y=[];if(1G.aJ){G.2f(f.3e,c(1b){if(1b.R!=="."){3y.2G(1b)}})}Y{3y=[].3h.V(f.3e)}if(1e.1n!==\'46\'){f.P=\'\'}Y{u 8E=f.oB(1t);f.5g.oA(8E,f);8E.a8=aa}1o.1m(\'8X\')};1o.1m({K:\'7l\',5x:1t});1I=Q},8S:c(){l 3y},aN:c(4E){u I=f.1L(),1P;if((1P=1l.1V(I.M))){1P.8V=!!4E}},1x:c(){u I=f.1L(),6D=I.53(),1I=I.4w();1W.5i(1I,f.M);1W.5i(1G&&1l.1V(1G.1Z),f.M);1W.5i(1G&&1l.1V(1G.6A),f.M);if(1I){1I.6M=\'\'}6D.8U(f.M);3y=1G=1I=6D=Q}})}l(1h.2F=2F)});1v("F/H/2i/1b/3F",["F/H/2i/1c","F/O/1a/G","F/O/1a/1l","F/O/1a/1W","F/O/1a/27"],c(1h,G,1l,1W,27){c 3F(){u 3y=[],8F=[],1G;G.1k(f,{2h:c(X){u 1o=f,57;1G=X;8F=ix(1G.2u);57=1G.1Z;1W.3g(57,\'gn\',c(e){e.4R();e.5f();e.8c.gl=\'go\'},1o.M);1W.3g(57,\'9F\',c(e){e.4R();e.5f();3y=[];if(e.8c.42&&e.8c.42[0].iB){is(e.8c.42,c(){1o.1m("9F")})}Y{G.2f(e.8c.3e,c(1b){if(aK(1b)){3y.2G(1b)}});1o.1m("9F")}},1o.M);1W.3g(57,\'9R\',c(e){e.4R();e.5f();1o.1m("9R")},1o.M);1W.3g(57,\'cK\',c(e){e.4R();e.5f();1o.1m("cK")},1o.M)},8S:c(){l 3y},1x:c(){1W.5i(1G&&1l.1V(1G.1Z),f.M);3y=8F=1G=Q}});c ix(2u){u 4i=[];1B(u i=0;i<2u.T;i++){[].2G.2v(4i,2u[i].1h.3x(/\\s*,\\s*/))}l G.2t(\'*\',4i)===-1?4i:[]}c aK(1b){u 44=27.cg(1b.R);l!44||!8F.T||G.2t(44,8F)!==-1}c is(42,cb){u 5K=[];G.2f(42,c(83){u 4Z=83.iB();if(4Z){if(4Z.ij){u 1b=83.nX();if(aK(1b)){3y.2G(1b)}}Y{5K.2G(4Z)}}});if(5K.T){cP(5K,cb)}Y{cb()}}c cP(5K,cb){u 3B=[];G.2f(5K,c(4Z){3B.2G(c(8r){ik(4Z,8r)})});G.8G(3B,c(){cb()})}c ik(4Z,cb){if(4Z.ij){4Z.1b(c(1b){if(aK(1b)){3y.2G(1b)}cb()},c(){cb()})}Y if(4Z.np){iq(4Z,cb)}Y{cb()}}c iq(iH,cb){u 5K=[],iL=iH.nu();c cQ(8r){iL.nv(c(cN){if(cN.T){[].2G.2v(5K,cN);cQ(8r)}Y{8r()}},8r)}cQ(c(){cP(5K,cb)})}}l(1h.3F=3F)});1v("F/H/2i/1b/1H",["F/H/2i/1c","F/O/1a/1X","F/O/1a/G"],c(1h,1X,G){c 1H(){u 2e,aO=1f;G.1k(f,{2w:c(op,U){u 1q=f;2e=1d 1A.1H();2e.4e(\'5D\',c(e){1q.1m(e)});2e.4e(\'4u\',c(e){1q.1m(e)});2e.4e(\'2C\',c(e){1q.1m(e,2e.2C)});2e.4e(\'8k\',c(){2e=Q});if(G.1F(2e[op])===\'c\'){aO=1f;2e[op](U.3H())}Y if(op===\'5b\'){aO=1t;2e.4l(U.3H())}},84:c(){l 2e&&2e.1N?(aO?7t(2e.1N):2e.1N):Q},3z:c(){if(2e){2e.3z()}},1x:c(){2e=Q}});c 7t(1Q){l 1X.43(1Q.8w(1Q.4x(\'4c,\')+7))}}l(1h.1H=1H)});1v("F/H/2i/2g/1j",["F/H/2i/1c","F/O/1a/G","F/O/1a/27","F/O/1a/4j","F/1b/1Y","F/1b/1w","F/2g/3i","F/O/36","F/O/1a/1e"],c(1h,G,27,4j,1Y,1w,3i,x,1e){c 1j(){u L=f,1s,7O;G.1k(f,{3R:c(1D,J){u 1q=f,hx=(1e.1n===\'nn\'&&1e.1R>=4&&1e.1R<7),hy=1e.1n===\'ht hr\',ao=1f;7O=1D.2H.3p(/^.+?\\/([\\w\\-\\.]+)$/,\'$1\').3q();1s=hg();1s.8M(1D.4n,1D.2H,1D.5x,1D.6x,1D.8N);if(J 3u 1w){if(J.50()){ao=1t}J=J.3H()}Y if(J 3u 3i){if(J.8u()){if(J.6F().50()){J=hi.V(1q,J);ao=1t}Y if((hx||hy)&&G.1F(J.6F().3H())===\'U\'&&1A.1H){hp.V(1q,1D,J);l}}if(J 3u 3i){u fd=1d 1A.3i();J.2f(c(P,R){if(P 3u 1w){fd.6q(R,P.3H())}Y{fd.6q(R,P)}});J=fd}}if(1s.4A){if(1D.5W){1s.5W=1t}1s.4e(\'4u\',c(e){1q.1m(e)});1s.4e(\'2C\',c(e){1q.1m(e)});1s.4e(\'5D\',c(e){1q.1m(e)});1s.4A.4e(\'5D\',c(e){1q.1m({K:\'hC\',3X:e.3X,3Y:e.3Y})})}Y{1s.hA=c nd(){4N(1s.35){1y 1:2l;1y 2:2l;1y 3:u 3Y,3X;37{if(4j.8g(1D.2H)){3Y=1s.ak(\'5z-hB\')||0}if(1s.5Y){3X=1s.5Y.T}}3k(ex){3Y=3X=0}1q.1m({K:\'5D\',hz:!!3Y,3Y:4O(3Y,10),3X:3X});2l;1y 4:1s.hA=c(){};if(1s.6e===0){1q.1m(\'2C\')}Y{1q.1m(\'4u\')}2l}}}if(!G.6o(1D.2E)){G.2f(1D.2E,c(P,2S){1s.9X(2S,P)})}if(""!==1D.1O&&\'1O\'in 1s){if(\'4m\'===1D.1O&&!1e.1J(\'4U\',\'4m\')){1s.1O=\'4b\'}Y{1s.1O=1D.1O}}if(!ao){1s.3R(J)}Y{if(1s.bR){1s.bR(J)}Y{(c(){u bN=1d hq(J.T);1B(u i=0;i<J.T;i++){bN[i]=(J.8R(i)&ap)}1s.3R(bN.nl)}())}}1q.1m(\'9E\')},cn:c(){37{if(1s){l 1s.6e}}3k(ex){}l 0},b2:c(1O){u I=f.1L();37{4N(1O){1y\'U\':u 1b=1d 1Y(I.M,1s.6d);u cf=1s.ak(\'5z-cd\');if(cf){u 3f=cf.3f(/hn=([\\\'\\"\'])([^\\1]+)\\1/);if(3f){7O=3f[2]}}1b.R=7O;if(!1b.K){1b.K=27.by(7O)}l 1b;1y\'4m\':if(!1e.1J(\'4U\',\'4m\')){l 1s.6e===6K&&!!1A.5h?5h.cj(1s.5Y):Q}l 1s.6d;1y\'2j\':l hd(1s);9r:l 1s.5Y!==\'\'?1s.5Y:Q}}3k(ex){l Q}},an:c(){37{l 1s.an()}3k(ex){}l\'\'},3z:c(){if(1s){1s.3z()}},1x:c(){L=7O=Q}});c hp(1D,J){u 1q=f,U,fr;U=J.6F().3H();fr=1d 1A.1H();fr.8B=c(){J.6q(J.hf(),1d 1w(Q,{K:U.K,J:fr.1N}));L.3R.V(1q,1D,J)};fr.5b(U)}c hg(){if(1A.1j&&!(1e.1n===\'46\'&&1e.1R<8)){l 1d 1A.1j()}Y{l(c(){u c7=[\'nR.he.6.0\',\'dG.he\'];1B(u i=0;i<c7.T;i++){37{l 1d aH(c7[i])}3k(ex){}}})()}}c hd(2g){u 4F=2g.aj;u c9=2g.5Y;if(1e.1n===\'46\'&&c9&&4F&&!4F.al&&/[^\\/]+\\/[^\\+]+\\+hc/.3G(2g.ak("5z-ay"))){4F=1d 1A.aH("dG.nS");4F.5x=1f;4F.nT=1f;4F.nW(c9)}if(4F){if((1e.1n===\'46\'&&4F.nU!==0)||!4F.al||4F.al.nM==="nF"){l Q}}l 4F}c hi(fd){u 7H=\'----nD\'+1d ar().ca(),8Q=\'--\',58=\'\\r\\n\',5u=\'\',I=f.1L();if(!I.1J(\'6y\')){26 1d x.2N(x.2N.8s)}1s.9X(\'5z-ay\',\'5u/1M-J; 7H=\'+7H);fd.2f(c(P,R){if(P 3u 1w){5u+=8Q+7H+58+\'5z-cd: 1M-J; R="\'+R+\'"; hn="\'+cc(c4(P.R||\'U\'))+\'"\'+58+\'5z-ay: \'+(P.K||\'2Q/az-ax\')+58+58+P.3H()+58}Y{5u+=8Q+7H+58+\'5z-cd: 1M-J; R="\'+R+\'"\'+58+58+cc(c4(P))+58}});5u+=8Q+7H+8Q+58;l 5u}}l(1h.1j=1j)});1v("F/H/2i/1a/4s",[],c(){l c(){u 6j=1f,56;c 2w(1r,1z){u mv=6j?0:-8*(1z-1),bW=0,i;1B(i=0;i<1z;i++){bW|=(56.8R(1r+i)<<39.hk(mv+i*8))}l bW}c bT(3T,1r,T){T=1T.T===3?T:56.T-1r-1;56=56.7o(0,1r)+3T+56.7o(T+1r)}c hG(1r,4M,1z){u 1Q=\'\',mv=6j?0:-8*(1z-1),i;1B(i=0;i<1z;i++){1Q+=5T.6P((4M>>39.hk(mv+i*8))&dX)}bT(1Q,1r,1z)}l{6j:c(7M){if(7M===2A){l 6j}Y{6j=7M}},2h:c(hF){6j=1f;56=hF},6Y:c(1r,T,3T){4N(1T.T){1y 1:l 56.7o(1r,56.T-1r-1);1y 2:l 56.7o(1r,T);1y 3:bT(3T,1r,T);2l;9r:l 56}},eL:c(1r){l 2w(1r,1)},3d:c(1r){l 2w(1r,2)},3s:c(1r,4M){if(4M===2A){l 2w(1r,4)}Y{hG(1r,4M,4)}},aG:c(1r){u 4M=2w(1r,4);l(4M>pW?4M-q0:4M)},b3:c(1r,1z){u 1Q=\'\';1B(1z+=1r;1r<1z;1r++){1Q+=5T.6P(2w(1r,1))}l 1Q}}}});1v("F/H/2i/1S/8j",["F/H/2i/1a/4s"],c(4s){l c 8j(J){u 2E=[],2w,1r,47,T=0;2w=1d 4s();2w.2h(J);if(2w.3d(0)!==f8){l}1r=2;3M(1r<=J.T){47=2w.3d(1r);if(47>=pZ&&47<=pY){1r+=2;8I}if(47===pX||47===pQ){2l}T=2w.3d(1r+2)+2;if(47>=ha&&47<=pP){2E.2G({a1:47,R:\'pI\'+(47&ib),2P:1r,T:T,3T:2w.6Y(1r,T)})}1r+=T}2w.2h(Q);l{2E:2E,dq:c(J){u 4L,i;2w.2h(J);1r=2w.3d(2)==pH?4+2w.3d(4):2;1B(i=0,4L=2E.T;i<4L;i++){2w.6Y(1r,0,2E[i].3T);1r+=2E[i].T}J=2w.6Y();2w.2h(Q);l J},f9:c(J){u 2E,at,i;at=1d 8j(J);2E=at.2E;at.4Q();2w.2h(J);i=2E.T;3M(i--){2w.6Y(2E[i].2P,2E[i].T,\'\')}J=2w.6Y();2w.2h(Q);l J},1V:c(R){u 2D=[];1B(u i=0,4L=2E.T;i<4L;i++){if(2E[i].R===R.9b()){2D.2G(2E[i].3T)}}l 2D},bv:c(R,3T){u 2D=[],i,ii,4L;if(2J(3T)===\'2x\'){2D.2G(3T)}Y{2D=3T}1B(i=ii=0,4L=2E.T;i<4L;i++){if(2E[i].R===R.9b()){2E[i].3T=2D[ii];2E[i].T=2D[ii].T;ii++}if(ii>=2D.T){2l}}},4Q:c(){2E=[];2w.2h(Q);2w=Q}}}});1v("F/H/2i/1S/99",["F/O/1a/G","F/H/2i/1a/4s"],c(G,4s){l c 99(){u J,8n,5s,3c={},aS;J=1d 4s();8n={6H:{pF:\'fD\',pJ:\'pK\',pO:\'pN\',pM:\'pL\',q1:\'q2\',qi:\'a0\',qh:\'9Q\'},8l:{qg:\'8d\',qf:\'i5\',qj:\'d7\',qk:\'d8\',qn:\'qm\',ql:\'qe\',qd:\'q6\',q5:\'q4\',q3:\'q7\',q8:\'qc\',qb:\'i6\',qa:\'hV\',q9:\'2X\',pE:\'pD\',p5:\'hE\',p4:\'hs\',p3:\'hv\',p2:\'p6\',p7:\'ia\',pb:\'iI\',pa:\'iJ\'},9W:{hl:\'9i\',hm:\'iy\',p9:\'p8\',p1:\'it\',p0:\'oT\'}};aS={\'i5\':{1:\'oS\',0:\'oR\'},\'i6\':{0:\'oQ\',1:\'oU\',2:\'oV\',3:\'oZ\',4:\'oY\',5:\'oX\',6:\'hW\',dX:\'e0\'},\'hV\':{1:\'hH\',2:\'oW\',3:\'pc\',4:\'2X\',9:\'pd hK\',10:\'pv hK\',11:\'pu\',12:\'hH au (D pt - pr)\',13:\'pz aL au (N pC -pB)\',14:\'pA aL au (W pq - pp)\',15:\'ph au (pg pf - pe)\',17:\'aP 3W A\',18:\'aP 3W B\',19:\'aP 3W C\',20:\'qu\',21:\'pk\',22:\'pn\',23:\'pG\',24:\'pR pS pT\',dX:\'e0\'},\'2X\':{hl:\'2X dM 5n dY.\',hm:\'2X 3N.\',oP:\'ho l 3W 5n 4P.\',oO:\'ho l 3W 4P.\',nI:\'2X 3N, 7s 2c 1u\',nJ:\'2X 3N, 7s 2c 1u, l 3W 5n 4P\',ib:\'2X 3N, 7s 2c 1u, l 3W 4P\',nK:\'2X dM 5n dY, 7s 2c 1u\',nH:\'2X dM 5n dY, 7p 1u\',nE:\'2X 3N, 7p 1u\',nN:\'2X 3N, 7p 1u, l 3W 5n 4P\',nV:\'2X 3N, 7p 1u, l 3W 4P\',nO:\'hb 2c c\',nP:\'2X 3N, 5O-5V 5L 1u\',nQ:\'2X 3N, 5O-5V 5L 1u, l 3W 5n 4P\',nB:\'2X 3N, 5O-5V 5L 1u, l 3W 4P\',nA:\'2X 3N, 7s 2c 1u, 5O-5V 5L 1u\',ni:\'2X 3N, 7s 2c 1u, 5O-5V 5L 1u, l 3W 5n 4P\',nj:\'2X 3N, 7s 2c 1u, 5O-5V 5L 1u, l 3W 4P\',nk:\'2X 3N, 7p 1u, 5O-5V 5L 1u\',nh:\'2X 3N, 7p 1u, l 3W 5n 4P, 5O-5V 5L 1u\',nb:\'2X 3N, 7p 1u, l 3W 4P, 5O-5V 5L 1u\'},\'hE\':{0:\'dr hD\',1:\'hu hD\',2:\'dr nf\'},\'hs\':{0:\'dr aL hw\',1:\'hu aL hw\'},\'hv\':{0:\'aP\',1:\'nw\',2:\'nx\',3:\'ny nz\'},\'ia\':{0:\'dZ\',1:\'ic\',2:\'iA\'},\'iI\':{0:\'dZ\',1:\'nr iN\',2:\'nY iN\'},\'iJ\':{0:\'dZ\',1:\'ic\',2:\'iA\'},\'iy\':{N:\'ox im\',S:\'ov im\'},\'it\':{E:\'oL eF\',W:\'oG eF\'}};c ag(dN,eK){u T=J.3d(dN),i,ii,2I,K,3A,7Z,2m,P,5q=[],8J={};1B(i=0;i<T;i++){2m=7Z=dN+12*i+2;2I=eK[J.3d(2m)];if(2I===2A){8I}K=J.3d(2m+=2);3A=J.3s(2m+=2);2m+=4;5q=[];4N(K){1y 1:1y 7:if(3A>4){2m=J.3s(2m)+3c.4B}1B(ii=0;ii<3A;ii++){5q[ii]=J.eL(2m+ii)}2l;1y 2:if(3A>4){2m=J.3s(2m)+3c.4B}8J[2I]=J.b3(2m,3A-1);8I;1y 3:if(3A>2){2m=J.3s(2m)+3c.4B}1B(ii=0;ii<3A;ii++){5q[ii]=J.3d(2m+ii*2)}2l;1y 4:if(3A>1){2m=J.3s(2m)+3c.4B}1B(ii=0;ii<3A;ii++){5q[ii]=J.3s(2m+ii*4)}2l;1y 5:2m=J.3s(2m)+3c.4B;1B(ii=0;ii<3A;ii++){5q[ii]=J.3s(2m+ii*4)/J.3s(2m+ii*4+4)}2l;1y 9:2m=J.3s(2m)+3c.4B;1B(ii=0;ii<3A;ii++){5q[ii]=J.aG(2m+ii*4)}2l;1y 10:2m=J.3s(2m)+3c.4B;1B(ii=0;ii<3A;ii++){5q[ii]=J.aG(2m+ii*4)/J.aG(2m+ii*4+4)}2l;9r:8I}P=(3A==1?5q[0]:5q);if(aS.6k(2I)&&2J P!=\'4y\'){8J[2I]=aS[2I][P]}Y{8J[2I]=P}}l 8J}c eE(){u 1r=3c.4B;J.6j(J.3d(1r)==ob);if(J.3d(1r+=2)!==nZ){l 1f}3c.fh=3c.4B+J.3s(1r+=2);5s=ag(3c.fh,8n.6H);if(\'a0\'in 5s){3c.f4=3c.4B+5s.a0;4S 5s.a0}if(\'9Q\'in 5s){3c.f3=3c.4B+5s.9Q;4S 5s.9Q}l 1t}c f7(dm,2I,P){u 2m,T,7Z,af=0;if(2J(2I)===\'2x\'){u dk=8n[dm.3q()];1B(u a1 in dk){if(dk[a1]===2I){2I=a1;2l}}}2m=3c[dm.3q()+\'oc\'];T=J.3d(2m);1B(u i=0;i<T;i++){7Z=2m+12*i+2;if(J.3d(7Z)==2I){af=7Z+8;2l}}if(!af){l 1f}J.3s(af,P);l 1t}l{2h:c(3T){3c={4B:10};if(3T===2A||!3T.T){l 1f}J.2h(3T);if(J.3d(0)===ha&&J.b3(4,5).9b()==="dv\\0"){l eE()}l 1f},ft:c(){l 5s},dv:c(){u 6i;6i=ag(3c.f4,8n.8l);if(6i.8d&&G.1F(6i.8d)===\'2D\'){1B(u i=0,dH=\'\';i<6i.8d.T;i++){dH+=5T.6P(6i.8d[i])}6i.8d=dH}l 6i},5R:c(){u 5R;5R=ag(3c.f3,8n.9W);if(5R.9i&&G.1F(5R.9i)===\'2D\'){5R.9i=5R.9i.78(\'.\')}l 5R},87:c(2I,P){if(2I!==\'d7\'&&2I!==\'d8\'){l 1f}l f7(\'8l\',2I,P)},fa:c(){l J.6Y()},4Q:c(){J.2h(Q);J=5s=Q;3c={}}}}});1v("F/H/2i/1S/7S",["F/O/1a/G","F/O/36","F/H/2i/1S/8j","F/H/2i/1a/4s","F/H/2i/1S/99"],c(G,x,8j,4s,99){c 7S(5I){u 4t,30,4K,45,4I,bn;c bD(){u 1r=0,47,T;3M(1r<=4t.T){47=30.3d(1r+=2);if(47>=sz&&47<=sA){1r+=5;l{1i:30.3d(1r),1g:30.3d(1r+=2)}}T=30.3d(1r+=2);1r+=T-2}l Q}4t=5I;30=1d 4s();30.2h(4t);if(30.3d(0)!==f8){26 1d x.2Z(x.2Z.7h)}4K=1d 8j(5I);45=1d 99();bn=!!45.2h(4K.1V(\'fc\')[0]);4I=bD.V(f);G.1k(f,{K:\'1S/4r\',1z:4t.T,1g:4I&&4I.1g||0,1i:4I&&4I.1i||0,87:c(2I,P){if(!bn){l 1f}if(G.1F(2I)===\'4y\'){G.2f(2I,c(P,2I){45.87(2I,P)})}Y{45.87(2I,P)}4K.bv(\'fc\',45.fa())},dl:c(){if(!1T.T){l(4t=4K.dq(4t))}l 4K.dq(1T[0])},d6:c(5I){l 4K.f9(5I)},4Q:c(){6c.V(f)}});if(bn){f.1D={6H:45.ft(),8l:45.dv(),9W:45.5R()}}c 6c(){if(!45||!4K||!30){l}45.4Q();4K.4Q();30.2h(Q);4t=4I=4K=45=30=Q}}l 7S});1v("F/H/2i/1S/7T",["F/O/36","F/O/1a/G","F/H/2i/1a/4s"],c(x,G,4s){c 7T(5I){u 4t,30,4K,45,4I;4t=5I;30=1d 4s();30.2h(4t);(c(){u 1r=0,i=0,bA=[sB,sC,sJ,sK];1B(i=0;i<bA.T;i++,1r+=2){if(bA[i]!=30.3d(1r)){26 1d x.2Z(x.2Z.7h)}}}());c bD(){u 74,1r;74=e6.V(f,8);if(74.K==\'sI\'){1r=74.2P;l{1g:30.3s(1r),1i:30.3s(1r+=4)}}l Q}c 6c(){if(!30){l}30.2h(Q);4t=4I=4K=45=30=Q}4I=bD.V(f);G.1k(f,{K:\'1S/8x\',1z:4t.T,1g:4I.1g,1i:4I.1i,4Q:c(){6c.V(f)}});6c.V(f);c e6(1r){u T,K,2P,b0;T=30.3s(1r);K=30.b3(1r+=4,4);2P=1r+=4;b0=30.3s(1r+T);l{T:T,K:K,2P:2P,b0:b0}}}l 7T});1v("F/H/2i/1S/aY",["F/O/1a/G","F/O/36","F/H/2i/1S/7S","F/H/2i/1S/7T"],c(G,x,7S,7T){l c(5I){u dE=[7S,7T],4d;4d=(c(){1B(u i=0;i<dE.T;i++){37{l 1d dE[i](5I)}3k(ex){}}26 1d x.2Z(x.2Z.7h)}());G.1k(f,{K:\'\',1z:0,1g:0,1i:0,87:c(){},dl:c(J){l J},d6:c(J){l J},4Q:c(){}});G.1k(f,4d);f.4Q=c(){4d.4Q();4d=Q}}});1v("F/H/2i/1S/bf",[],c(){c fO(29,34,X){u iw=29.ed,ih=29.eb;u 1g=X.1g,1i=X.1i;u x=X.x||0,y=X.y||0;u 2K=34.6g(\'2d\');if(db(29)){iw/=2;ih/=2}u d=bd;u 7J=2j.4h(\'34\');7J.1g=7J.1i=d;u bc=7J.6g(\'2d\');u de=e7(29,iw,ih);u sy=0;3M(sy<ih){u sh=sy+d>ih?ih-sy:d;u sx=0;3M(sx<iw){u sw=sx+d>iw?iw-sx:d;bc.s4(0,0,d,d);bc.9H(29,-sx,-sy);u dx=(sx*1g/iw+x)<<0;u dw=39.eA(sw*1g/iw);u dy=(sy*1i/ih/de+y)<<0;u dh=39.eA(sh*1i/ih/de);2K.9H(7J,0,0,sw,sh,dx,dy,dw,dh);sx+=d}sy+=d}7J=bc=Q}c db(29){u iw=29.ed,ih=29.eb;if(iw*ih>bd*bd){u 34=2j.4h(\'34\');34.1g=34.1i=1;u 2K=34.6g(\'2d\');2K.9H(29,-iw+1,0);l 2K.gy(0,0,1,1).J[3]===0}Y{l 1f}}c e7(29,iw,ih){u 34=2j.4h(\'34\');34.1g=1;34.1i=ih;u 2K=34.6g(\'2d\');2K.9H(29,0,0);u J=2K.gy(0,0,1,ih).J;u sy=0;u ey=ih;u py=ih;3M(py>sy){u dK=J[(py-1)*4+3];if(dK===0){ey=py}Y{sy=py}py=(ey+sy)>>1}34=Q;u dF=(py/ih);l(dF===0)?1:dF}l{rz:db,g6:fO}});1v("F/H/2i/1S/1K",["F/H/2i/1c","F/O/1a/G","F/O/36","F/O/1a/1X","F/1b/1Y","F/H/2i/1S/aY","F/H/2i/1S/bf","F/O/1a/27","F/O/1a/1e"],c(1h,G,x,1X,1Y,aY,bf,27,1e){c fV(){u me=f,4d,3V,2z,3l,3m,7L=1f,aX=1t;G.1k(f,{aT:c(U){u 1o=f,I=1o.1L(),fH=1T.T>1?1T[1]:1t;if(!I.1J(\'5d\')){26 1d x.2N(x.2N.8s)}3m=U;if(U.50()){3l=U.3H();b1.V(f,3l);l}Y{fA.V(f,U.3H(),c(3O){if(fH){3l=7t(3O)}b1.V(1o,3O)})}},9T:c(29,8z){f.1D=29.1D;3m=1d 1Y(Q,{R:29.R,1z:29.1z,K:29.K});b1.V(f,8z?(3l=29.bC()):29.4J())},9D:c(){u I=f.1L(),3b;if(!3V&&3l&&I.1J(\'6I\')){3V=1d aY(3l)}3b={1g:bm().1g||0,1i:bm().1i||0,K:3m.K||27.by(3m.R),1z:3l&&3l.T||3m.1z||0,R:3m.R||\'\',1D:3V&&3V.1D||f.1D||{}};l 3b},9k:c(){dU.2v(f,1T)},bq:c(){if(2z){2z.id=f.M+\'2z\'}l 2z},5H:c(K,2R){if(K!==f.K){dU.V(f,f.1g,f.1i,1f)}l 1d 1Y(Q,{R:3m.R||\'\',K:K,J:me.bC.V(f,K,2R)})},4J:c(K){u 2R=1T[1]||90;if(!7L){l 4d.2L}if(\'1S/4r\'!==K){l 2z.8v(\'1S/8x\')}Y{37{l 2z.8v(\'1S/4r\',2R/48)}3k(ex){l 2z.8v(\'1S/4r\')}}},bC:c(K,2R){if(!7L){if(!3l){3l=7t(me.4J(K,2R))}l 3l}if(\'1S/4r\'!==K){3l=7t(me.4J(K,2R))}Y{u 3O;if(!2R){2R=90}37{3O=2z.8v(\'1S/4r\',2R/48)}3k(ex){3O=2z.8v(\'1S/4r\')}3l=7t(3O);if(3V){3l=3V.d6(3l);if(aX){if(3V.1D&&3V.1D.8l){3V.87({d7:f.1g,d8:f.1i})}3l=3V.dl(3l)}3V.4Q();3V=Q}}7L=1f;l 3l},1x:c(){me=Q;6c.V(f);f.1L().53().8U(f.M)}});c bm(){if(!2z&&!4d){26 1d x.2Z(x.1E.4p)}l 2z||4d}c 7t(1Q){l 1X.43(1Q.8w(1Q.4x(\'4c,\')+7))}c fx(1Q,K){l\'J:\'+(K||\'\')+\';4c,\'+1X.5Q(1Q)}c b1(1Q){u 1o=f;4d=1d 1K();4d.dg=c(){6c.V(f);1o.1m(\'2C\',1d x.2Z(x.2Z.7h))};4d.8B=c(){1o.1m(\'4u\')};4d.2L=/^J:[^;]*;4c,/.3G(1Q)?1Q:fx(1Q,3m.K)}c fA(1b,3J){u 1o=f,fr;if(1A.1H){fr=1d 1H();fr.8B=c(){3J(f.1N)};fr.dg=c(){1o.1m(\'2C\',1d x.6h(x.6h.fB))};fr.4l(1b)}Y{l 3J(1b.4J())}}c dU(1g,1i,49,5a){u L=f,60,e4,x=0,y=0,29,8p,8e,6O;aX=5a;6O=(f.1D&&f.1D.6H&&f.1D.6H.fD)||1;if(G.2t(6O,[5,6,7,8])!==-1){u fC=1g;1g=1i;1i=fC}29=bm();e4=!49?39.ds:39.4L;60=e4(1g/29.1g,1i/29.1i);if(60>1&&(!49||5a)){f.1m(\'bi\');l}if(!2z){2z=2j.4h("34")}8p=39.aU(29.1g*60);8e=39.aU(29.1i*60);if(49){2z.1g=1g;2z.1i=1i;if(8p>1g){x=39.aU((8p-1g)/2)}if(8e>1i){y=39.aU((8e-1i)/2)}}Y{2z.1g=8p;2z.1i=8e}if(!aX){gd(2z.1g,2z.1i,6O)}g8.V(f,29,2z,-x,-y,8p,8e);f.1g=2z.1g;f.1i=2z.1i;7L=1t;L.1m(\'bi\')}c g8(29,34,x,y,w,h){if(1e.9K===\'dV\'){bf.g6(29,34,{1g:w,1i:h,x:x,y:y})}Y{u 2K=34.6g(\'2d\');2K.9H(29,x,y,w,h)}}c gd(1g,1i,6O){4N(6O){1y 5:1y 6:1y 7:1y 8:2z.1g=1i;2z.1i=1g;2l;9r:2z.1g=1g;2z.1i=1i}u 2K=2z.6g(\'2d\');4N(6O){1y 2:2K.54(1g,0);2K.60(-1,1);2l;1y 3:2K.54(1g,1i);2K.9p(39.9l);2l;1y 4:2K.54(0,1i);2K.60(1,-1);2l;1y 5:2K.9p(0.5*39.9l);2K.60(1,-1);2l;1y 6:2K.9p(0.5*39.9l);2K.54(0,-1i);2l;1y 7:2K.9p(0.5*39.9l);2K.54(1g,-1i);2K.60(-1,1);2l;1y 8:2K.9p(-0.5*39.9l);2K.54(-1g,0);2l}}c 6c(){if(3V){3V.4Q();3V=Q}3l=4d=2z=3m=Q;7L=1f}}l(1h.1K=fV)});1v("F/H/2c/1c",["F/O/1a/G","F/O/1a/1e","F/O/1a/1l","F/O/36","F/H/1c"],c(G,1e,1l,x,1c){u K=\'2c\',1h={};c g0(){u 1R;37{1R=89.gC[\'rq 2X\'];1R=1R.eC}3k(e1){37{1R=1d aH(\'g3.g3\').rs(\'$1R\')}3k(e2){1R=\'0.0\'}}1R=1R.3f(/\\d+/g);l dz(1R[0]+\'.\'+1R[1])}c gN(X){u I=f,6z;X=G.1k({9o:1e.9o},X);1c.V(f,X,K,{5d:c(P){l P&&I.1u===\'1n\'},6I:c(P){l P&&I.1u===\'1n\'},7x:1c.38,7K:1c.38,82:1f,7P:c(){l I.1u===\'2T\'},7U:1c.38,7R:1f,4U:c(1O){if(1O===\'4m\'&&!!1A.5h){l 1t}l!G.4a(1O,[\'\',\'4b\',\'2j\'])||I.1u===\'1n\'},77:c(2b){l I.1u===\'1n\'||!G.4a(2b,[6K,7a])},5M:1c.38,7z:1c.38,6y:c(P){l P&&I.1u===\'1n\'},7Q:c(P){l P&&I.1u===\'1n\'},6S:c(P){l P&&I.1u===\'1n\'},6V:1c.38,7y:1c.38,7A:c(P){l P&&I.1u===\'1n\'},5m:1f,7X:c(1z){l G.9z(1z)<=g1||I.1u===\'2T\'},8t:c(6E){l!G.4a(6E,[\'96\',\'98\'])}},{5d:c(P){l P?\'1n\':\'2T\'},6I:c(P){l P?\'1n\':\'2T\'},7P:c(P){l P?\'1n\':\'2T\'},4U:c(1O){l G.4a(1O,[\'\',\'4b\',\'4m\',\'2j\'])?\'1n\':[\'2T\',\'1n\']},77:c(2b){l G.4a(2b,[6K,7a])?\'1n\':[\'2T\',\'1n\']},6y:c(P){l P?\'1n\':\'2T\'},7Q:c(P){l P?\'1n\':\'2T\'},6S:c(P){l P?\'1n\':\'2T\'},7A:c(P){l P?\'2T\':\'1n\'},7X:c(1z){l G.9z(1z)>=g1?\'2T\':\'1n\'}},\'2T\');if(g0()<10){f.1u=1f}G.1k(f,{53:c(){l 1l.1V(f.M)},3j:c(5c,5r){u 2y=[].3h.V(1T,2);l I.53().1C(f.M,5c,5r,2y)},2h:c(){u 6f,el,1Z;1Z=f.4w();G.1k(1Z.3a,{4z:\'9g\',3r:\'-fZ\',6C:\'-fZ\',1g:\'fU\',1i:\'fU\',dC:\'5F\'});6f=\'<4y id="\'+f.M+\'" K="2Q/x-g5-2c" J="\'+X.9o+\'" \';if(1e.1n===\'46\'){6f+=\'jO="jT:jX-kF-kL-jL-kw" \'}6f+=\'1g="48%" 1i="48%" 3a="i3:0">\'+\'<5N R="ku" P="\'+X.9o+\'" />\'+\'<5N R="kt" P="M=\'+fI(f.M)+\'&1q=\'+1e.dQ+\'" />\'+\'<5N R="kN" P="j4" />\'+\'<5N R="j2" P="jc" />\'+\'</4y>\';if(1e.1n===\'46\'){el=2j.4h(\'6G\');1Z.6L(el);el.j1=6f;el=1Z=Q}Y{1Z.6M=6f}6z=81(c(){if(I&&!I.aq){I.1m("4q",1d x.2N(x.2N.9N))}},hY)},1x:(c(1x){l c(){1x.V(I);hh(6z);X=6z=1x=I=Q}}(f.1x))},1h)}1c.95(K,gN);l 1h});1v("F/H/2c/1b/1w",["F/H/2c/1c","F/1b/1w"],c(1h,1w){u gJ={3h:c(U,2P,3S,K){u L=f.1L();if(2P<0){2P=39.4L(U.1z+2P,0)}Y if(2P>0){2P=39.ds(2P,U.1z)}if(3S<0){3S=39.4L(U.1z+3S,0)}Y if(3S>0){3S=39.ds(3S,U.1z)}U=L.3j.V(f,\'1w\',\'3h\',2P,3S,K||\'\');if(U){U=1d 1w(L.M,U)}l U}};l(1h.1w=gJ)});1v("F/H/2c/1b/2F",["F/H/2c/1c"],c(1h){u 2F={2h:c(X){f.1L().3j.V(f,\'2F\',\'2h\',{R:X.R,2u:X.2u,8a:X.8a});f.1m(\'7l\')}};l(1h.2F=2F)});1v("F/H/2c/1b/1H",["F/H/2c/1c","F/O/1a/1X"],c(1h,1X){u 9M=\'\';c 9V(J,op){4N(op){1y\'5e\':l 1X.43(J,\'7d\');1y\'5b\':l 1X.43(J);1y\'4l\':l J}l Q}u 1H={2w:c(op,U){u 1q=f,L=1q.1L();if(op===\'4l\'){9M=\'J:\'+(U.K||\'\')+\';4c,\'}1q.2k(\'dt\',c(e,J){if(J){9M+=9V(J,op)}});l L.3j.V(f,\'1H\',\'h5\',U.M)},84:c(){l 9M},1x:c(){9M=Q}};l(1h.1H=1H)});1v("F/H/2c/1b/33",["F/H/2c/1c","F/O/1a/1X"],c(1h,1X){c 9V(J,op){4N(op){1y\'5e\':l 1X.43(J,\'7d\');1y\'5b\':l 1X.43(J);1y\'4l\':l J}l Q}u 33={2w:c(op,U){u 1N,L=f.1L();1N=L.3j.V(f,\'33\',\'h5\',U.M);if(!1N){l Q}if(op===\'4l\'){1N=\'J:\'+(U.K||\'\')+\';4c,\'+1N}l 9V(1N,op,U.K)}};l(1h.33=33)});1v("F/H/2c/2g/1j",["F/H/2c/1c","F/O/1a/G","F/1b/1w","F/1b/1Y","F/1b/33","F/2g/3i","F/H/2a"],c(1h,G,1w,1Y,33,3i,2a){u 1j={3R:c(1D,J){u 1q=f,L=1q.1L();c 3R(){1D.9n=L.1u;L.3j.V(1q,\'1j\',\'3R\',1D,J)}c 9P(R,U){L.3j.V(1q,\'1j\',\'9P\',R,U.M);J=Q;3R()}c dJ(U,cb){u tr=1d 2a();tr.2k("a6",c(){cb(f.1N)});tr.9n(U.3H(),U.K,{1U:L.M})}if(!G.6o(1D.2E)){G.2f(1D.2E,c(P,2S){L.3j.V(1q,\'1j\',\'9X\',2S,P.7f())})}if(J 3u 3i){u 9O;J.2f(c(P,R){if(P 3u 1w){9O=R}Y{L.3j.V(1q,\'1j\',\'6q\',R,P)}});if(!J.8u()){J=Q;3R()}Y{u U=J.6F();if(U.50()){dJ(U,c(ab){U.1x();9P(9O,ab)})}Y{9P(9O,U)}}}Y if(J 3u 1w){if(J.50()){dJ(J,c(ab){J.1x();J=ab.M;3R()})}Y{J=J.M;3R()}}Y{3R()}},b2:c(1O){u 6U,U,L=f.1L();U=L.3j.V(f,\'1j\',\'jb\');if(U){U=1d 1Y(L.M,U);if(\'U\'===1O){l U}37{6U=1d 33();if(!!~G.2t(1O,["","4b"])){l 6U.5e(U)}Y if(\'4m\'===1O&&!!1A.5h){l 5h.cj(6U.5e(U))}}mm{U.1x()}}l Q},3z:c(my){u L=f.1L();L.3j.V(f,\'1j\',\'3z\');f.31(\'7g\');f.31(\'3z\')}};l(1h.1j=1j)});1v("F/H/2c/H/2a",["F/H/2c/1c","F/1b/1w"],c(1h,1w){u 2a={5H:c(K){u L=f.1L(),U=L.3j.V(f,\'2a\',\'5H\',K);if(U){l 1d 1w(L.M,U)}l Q}};l(1h.2a=2a)});1v("F/H/2c/1S/1K",["F/H/2c/1c","F/O/1a/G","F/H/2a","F/1b/1w","F/1b/33"],c(1h,G,2a,1w,33){u 1K={aT:c(U){u 1o=f,L=1o.1L();c 1C(gr){L.3j.V(1o,\'1K\',\'aT\',gr.M);1o=L=Q}if(U.50()){u tr=1d 2a();tr.2k("a6",c(){1C(tr.1N.3H())});tr.9n(U.3H(),U.K,{1U:L.M})}Y{1C(U.3H())}},9T:c(29){u L=f.1L();l L.3j.V(f,\'1K\',\'9T\',29.M)},5H:c(K,2R){u L=f.1L(),U=L.3j.V(f,\'1K\',\'5H\',K,2R);if(U){l 1d 1w(L.M,U)}l Q},4J:c(){u L=f.1L(),U=L.1K.5H.2v(f,1T),6U;if(!U){l Q}6U=1d 33();l 6U.4l(U)}};l(1h.1K=1K)});1v("F/H/2Y/1c",["F/O/1a/G","F/O/1a/1e","F/O/1a/1l","F/O/36","F/H/1c"],c(G,1e,1l,x,1c){u K="2Y",1h={};c iz(1R){u 9t=1f,88=Q,9C,7j,8o,9m,aQ,7r=0;37{37{88=1d aH(\'gF.gF\');if(88.mW(1R)){9t=1t}88=Q}3k(e){u e3=89.gC["n2 n6-n4"];if(e3){9C=e3.eC;if(9C==="1.0.er.2"){9C="2.0.er.2"}7j=9C.3x(".");3M(7j.T>3){7j.eY()}3M(7j.T<4){7j.2G(0)}8o=1R.3x(".");3M(8o.T>4){8o.eY()}do{9m=4O(8o[7r],10);aQ=4O(7j[7r],10);7r++}3M(7r<8o.T&&9m===aQ);if(9m<=aQ&&!dP(9m)){9t=1t}}}}3k(e2){9t=1f}l 9t}c eO(X){u I=f,6z;X=G.1k({as:1e.as},X);1c.V(f,X,K,{5d:1c.38,6I:1c.38,7x:1c.38,7K:1c.38,82:1f,7P:1c.38,7U:1c.38,7R:c(P){l P&&I.1u===\'2T\'},4U:c(1O){if(1O!==\'4m\'){l 1t}Y{l!!1A.5h}},77:c(2b){l I.1u===\'2T\'||!G.4a(2b,[6K,7a])},5M:1c.38,7z:1c.38,6y:1c.38,7Q:c(P){l P&&I.1u===\'1n\'},6S:c(P){l P&&I.1u===\'2T\'},6V:1c.38,7y:1c.38,7A:1t,5m:1f,7X:1c.38,8t:c(6E){l I.1u===\'2T\'||!G.4a(6E,[\'96\',\'98\'])}},{7R:c(P){l P?\'2T\':\'1n\'},77:c(2b){l G.4a(2b,[6K,7a])?\'2T\':[\'2T\',\'1n\']},7Q:c(P){l P?\'1n\':\'2T\'},6S:c(P){l P?\'2T\':\'1n\'},8t:c(6E){l G.4a(6E,[\'96\',\'98\'])?\'2T\':[\'2T\',\'1n\']}});if(!iz(\'2.0.mE.0\')||1e.1n===\'a3\'){f.1u=1f}G.1k(f,{53:c(){l 1l.1V(f.M).dA.dn},3j:c(5c,5r){u 2y=[].3h.V(1T,2);l I.53().1C(f.M,5c,5r,2y)},2h:c(){u 1Z;1Z=f.4w();1Z.6M=\'<4y id="\'+f.M+\'" J="J:2Q/x-2Y," K="2Q/x-2Y-2" 1g="48%" 1i="48%" 3a="i3:eJ;">\'+\'<5N R="d9" P="\'+X.as+\'"/>\'+\'<5N R="k0" P="jU"/>\'+\'<5N R="jN" P="1t"/>\'+\'<5N R="jQ" P="1t"/>\'+\'<5N R="sm" P="M=\'+f.M+\',1q=\'+1e.dQ+\'"/>\'+\'</4y>\';6z=81(c(){if(I&&!I.aq){I.1m("4q",1d x.2N(x.2N.9N))}},1e.9K!==\'dc\'?km:hY)},1x:(c(1x){l c(){1x.V(I);hh(6z);X=6z=1x=I=Q}}(f.1x))},1h)}1c.95(K,eO);l 1h});1v("F/H/2Y/1b/1w",["F/H/2Y/1c","F/O/1a/G","F/H/2c/1b/1w"],c(1h,G,1w){l(1h.1w=G.1k({},1w))});1v("F/H/2Y/1b/2F",["F/H/2Y/1c"],c(1h){u 2F={2h:c(X){c gD(2u){u 9h=\'\';1B(u i=0;i<2u.T;i++){9h+=(9h!==\'\'?\'|\':\'\')+2u[i].7u+" | *."+2u[i].1h.3p(/,/g,\';*.\')}l 9h}f.1L().3j.V(f,\'2F\',\'2h\',gD(X.2u),X.R,X.8a);f.1m(\'7l\')}};l(1h.2F=2F)});1v("F/H/2Y/1b/3F",["F/H/2Y/1c","F/O/1a/1l","F/O/1a/1W"],c(1h,1l,1W){u 3F={2h:c(){u 1o=f,L=1o.1L(),57;57=L.4w();1W.3g(57,\'gn\',c(e){e.4R();e.5f();e.8c.gl=\'go\'},1o.M);1W.3g(57,\'9R\',c(e){e.4R();u 9Z=1l.1V(L.M).mu(e);if(9Z){e.5f()}},1o.M);1W.3g(57,\'9F\',c(e){e.4R();u 9Z=1l.1V(L.M).mn(e);if(9Z){e.5f()}},1o.M);l L.3j.V(f,\'3F\',\'2h\')}};l(1h.3F=3F)});1v("F/H/2Y/1b/1H",["F/H/2Y/1c","F/O/1a/G","F/H/2c/1b/1H"],c(1h,G,1H){l(1h.1H=G.1k({},1H))});1v("F/H/2Y/1b/33",["F/H/2Y/1c","F/O/1a/G","F/H/2c/1b/33"],c(1h,G,33){l(1h.33=G.1k({},33))});1v("F/H/2Y/2g/1j",["F/H/2Y/1c","F/O/1a/G","F/H/2c/2g/1j"],c(1h,G,1j){l(1h.1j=G.1k({},1j))});1v("F/H/2Y/H/2a",["F/H/2Y/1c","F/O/1a/G","F/H/2c/H/2a"],c(1h,G,2a){l(1h.2a=G.1k({},2a))});1v("F/H/2Y/1S/1K",["F/H/2Y/1c","F/O/1a/G","F/H/2c/1S/1K"],c(1h,G,1K){l(1h.1K=G.1k({},1K,{9D:c(){u L=f.1L(),gU=[\'6H\',\'8l\',\'9W\'],3b={1D:{}},6B=L.3j.V(f,\'1K\',\'9D\');if(6B.1D){G.2f(gU,c(bz){u 1D=6B.1D[bz],2I,i,T,P;if(1D&&1D.dj){3b.1D[bz]={};1B(i=0,T=1D.dj.T;i<T;i++){2I=1D.dj[i];P=1D[2I];if(P){if(/^(\\d|[1-9]\\d+)$/.3G(P)){P=4O(P,10)}Y if(/^\\d*\\.\\d+$/.3G(P)){P=dz(P)}3b.1D[bz][2I]=P}}}})}3b.1g=4O(6B.1g,10);3b.1i=4O(6B.1i,10);3b.1z=4O(6B.1z,10);3b.K=6B.K;3b.R=6B.R;l 3b}}))});1v("F/H/4Y/1c",["F/O/1a/G","F/O/36","F/H/1c","F/O/1a/1e"],c(G,x,1c,1e){u K=\'4Y\',1h={};c ef(X){u I=f,3K=1c.dB,8b=1c.38;1c.V(f,X,K,{5d:3K(1A.1H||1A.1Y&&1Y.4J),6I:1f,7x:3K(1h.1K&&(1e.1J(\'72\')||1e.1J(\'b6\'))),7K:1f,82:1f,8W:3K(c(){l(1e.1n===\'7D\'&&1e.1R>=28)||(1e.1n===\'46\'&&1e.1R>=10)}()),7U:c(){l 1h.1K&&I.1J(\'5d\')&&1e.1J(\'72\')},7P:1f,7R:1f,4U:c(1O){if(1O===\'4m\'&&!!1A.5h){l 1t}l!!~G.2t(1O,[\'4b\',\'2j\',\'\'])},77:c(2b){l!G.4a(2b,[6K,7a])},5M:c(){l 1e.1J(\'dT\')},7z:1f,6y:1f,6S:1f,6V:1t,7y:1f,7A:c(){l I.1J(\'5M\')},5m:3K(c(){l(1e.1n===\'di\'&&1e.1R>=4)||(1e.1n===\'a3\'&&1e.1R>=12)||!!~G.2t(1e.1n,[\'7D\',\'b5\'])}()),7X:8b,8t:c(6E){l!G.4a(6E,[\'96\',\'98\'])}});G.1k(f,{2h:c(){f.1m("dD")},1x:(c(1x){l c(){1x.V(I);1x=I=Q}}(f.1x))});G.1k(f.53(),1h)}1c.95(K,ef);l 1h});1v("F/H/4Y/1b/2F",["F/H/4Y/1c","F/O/1a/G","F/O/1a/1l","F/O/1a/1W","F/O/1a/27","F/O/1a/1e"],c(1h,G,1l,1W,27,1e){c 2F(){u 4X,3y=[],aM=[],1G;c c6(){u 1o=f,I=1o.1L(),1I,2o,8L,1M,1P,M;M=G.2W(\'4k\');1I=I.4w();if(4X){8L=1l.1V(4X+\'7q\');if(8L){G.1k(8L.3a,{3r:\'48%\'})}}1M=2j.4h(\'1M\');1M.3n(\'id\',M+\'7q\');1M.3n(\'4n\',\'sE\');1M.3n(\'gf\',\'5u/1M-J\');1M.3n(\'8i\',\'5u/1M-J\');G.1k(1M.3a,{dC:\'5F\',4z:\'9g\',3r:0,6C:0,1g:\'48%\',1i:\'48%\'});1P=2j.4h(\'1P\');1P.3n(\'id\',M);1P.3n(\'K\',\'1b\');1P.3n(\'R\',1G.R||\'sH\');1P.3n(\'2u\',aM.78(\',\'));G.1k(1P.3a,{sr:\'ec\',da:0});1M.6L(1P);1I.6L(1M);G.1k(1P.3a,{4z:\'9g\',3r:0,6C:0,1g:\'48%\',1i:\'48%\'});if(1e.1n===\'46\'&&1e.1R<10){G.1k(1P.3a,{9h:"qX:qp.dG.oe(da=0)"})}1P.a8=c(){u 1b;if(!f.P){l}if(f.3e){1b=f.3e[0]}Y{1b={R:f.P}}3y=[1b];f.a8=c(){};c6.V(1o);1o.2k(\'8X\',c aa(){u 1P=1l.1V(M),1M=1l.1V(M+\'7q\'),1b;1o.dd(\'8X\',aa);if(1o.3e.T&&1P&&1M){1b=1o.3e[0];1P.3n(\'id\',1b.M);1M.3n(\'id\',1b.M+\'7q\');1M.3n(\'1q\',1b.M+\'2M\')}1P=1M=Q},o5);1P=1M=Q;1o.1m(\'8X\')};if(I.1J(\'5m\')){2o=1l.1V(1G.6A);1W.7Y(2o,\'8K\',1o.M);1W.3g(2o,\'8K\',c(e){if(1P&&!1P.8V){1P.8K()}e.4R()},1o.M)}4X=M;1I=8L=2o=Q}G.1k(f,{2h:c(X){u 1o=f,I=1o.1L(),1I;1G=X;aM=X.2u.2O||27.dI(X.2u,I.1J(\'8W\'));1I=I.4w();(c(){u 2o,4C,3r;2o=1l.1V(X.6A);if(I.1J(\'5m\')){if(1l.5U(2o,\'4z\')===\'aA\'){2o.3a.4z=\'8T\'}4C=4O(1l.5U(2o,\'z-7r\'),10)||1;2o.3a.4C=4C;1I.3a.4C=4C-1}3r=I.1J(\'5m\')?2o:1I;1W.3g(3r,\'i1\',c(){1o.1m(\'bX\')},1o.M);1W.3g(3r,\'hj\',c(){1o.1m(\'ce\')},1o.M);1W.3g(3r,\'8P\',c(){1o.1m(\'8P\')},1o.M);1W.3g(1l.1V(X.1Z),\'8O\',c(){1o.1m(\'8O\')},1o.M);2o=Q}());c6.V(f);1I=Q;1o.1m({K:\'7l\',5x:1t})},8S:c(){l 3y},aN:c(4E){u 1P;if((1P=1l.1V(4X))){1P.8V=!!4E}},1x:c(){u I=f.1L(),6D=I.53(),1I=I.4w();1W.5i(1I,f.M);1W.5i(1G&&1l.1V(1G.1Z),f.M);1W.5i(1G&&1l.1V(1G.6A),f.M);if(1I){1I.6M=\'\'}6D.8U(f.M);4X=3y=aM=1G=1I=6D=Q}})}l(1h.2F=2F)});1v("F/H/4Y/1b/1H",["F/H/4Y/1c","F/H/2i/1b/1H"],c(1h,1H){l(1h.1H=1H)});1v("F/H/4Y/2g/1j",["F/H/4Y/1c","F/O/1a/G","F/O/1a/1l","F/O/1a/4j","F/O/36","F/O/1a/1W","F/1b/1w","F/2g/3i"],c(1h,G,1l,4j,x,1W,1w,3i){c 1j(){u 7v,6J,2M;c ah(cb){u 1q=f,M,1M,7i,i,cJ=1f;if(!2M){l}M=2M.id.3p(/2M$/,\'\');1M=1l.1V(M+\'7q\');if(1M){7i=1M.no(\'1P\');i=7i.T;3M(i--){4N(7i[i].nq(\'K\')){1y\'5F\':7i[i].5g.8D(7i[i]);2l;1y\'1b\':cJ=1t;2l}}7i=[];if(!cJ){1M.5g.8D(1M)}1M=Q}81(c(){1W.7Y(2M,\'4u\',1q.M);if(2M.5g){2M.5g.8D(2M)}u 1I=1q.1L().4w();if(!1I.ow.T){1I.5g.8D(1I)}1I=2M=Q;cb()},1)}G.1k(f,{3R:c(1D,J){u 1q=f,I=1q.1L(),M,1M,1P,U;7v=6J=Q;c fS(){u 1Z=I.4w()||2j.6N,cV=2j.4h(\'6G\');cV.6M=\'<eM id="\'+M+\'2M" R="\'+M+\'2M" 2L="eV:&eZ;&eZ;" 3a="eH:eJ"></eM>\';2M=cV.o6;1Z.6L(2M);1W.3g(2M,\'4u\',c(){u el;37{el=2M.86.2j||2M.o0||1A.o4[2M.id].2j;if(/^4(0[0-9]|1[0-7]|2[sL])\\s/.3G(el.7u)){7v=el.7u.3p(/^(\\d+).*$/,\'$1\')}Y{7v=6K;6J=G.4H(el.6N.6M);1q.1m({K:\'5D\',3X:6J.T,3Y:6J.T});if(U){1q.1m({K:\'tg\',3X:U.1z||fP,3Y:U.1z||fP})}}}3k(ex){if(4j.8g(1D.2H)){7v=7a}Y{ah.V(1q,c(){1q.1m(\'2C\')});l}}ah.V(1q,c(){1q.1m(\'4u\')})},1q.M)}if(J 3u 3i&&J.8u()){U=J.6F();M=U.M;1P=1l.1V(M);1M=1l.1V(M+\'7q\');if(!1M){26 1d x.1E(x.1E.9I)}}Y{M=G.2W(\'4k\');1M=2j.4h(\'1M\');1M.3n(\'id\',M+\'7q\');1M.3n(\'4n\',1D.4n);1M.3n(\'gf\',\'5u/1M-J\');1M.3n(\'8i\',\'5u/1M-J\');1M.3n(\'1q\',M+\'2M\');I.4w().6L(1M)}if(J 3u 3i){J.2f(c(P,R){if(P 3u 1w){if(1P){1P.3n(\'R\',R)}}Y{u 5F=2j.4h(\'1P\');G.1k(5F,{K:\'5F\',R:R,P:P});if(1P){1M.og(5F,1P)}Y{1M.6L(5F)}}})}1M.3n("5r",1D.2H);fS();1M.jZ();1q.1m(\'9E\')},cn:c(){l 7v},b2:c(1O){if(\'4m\'===1O){if(G.1F(6J)===\'2x\'&&!!1A.5h){37{l 5h.cj(6J.3p(/^\\s*<gi[^>]*>/,\'\').3p(/<\\/gi>\\s*$/,\'\'))}3k(ex){l Q}}}Y if(\'2j\'===1O){}l 6J},3z:c(){u 1q=f;if(2M&&2M.86){if(2M.86.h7){2M.86.h7()}Y if(2M.86.2j.fu){2M.86.2j.fu(\'md\')}Y{2M.2L="mT:mO"}}ah.V(f,c(){1q.31(\'3z\')})}})}l(1h.1j=1j)});1v("F/H/4Y/1S/1K",["F/H/4Y/1c","F/H/2i/1S/1K"],c(1h,1K){l(1h.1K=1K)});iG(["F/O/1a/G","F/O/55","F/O/1a/27","F/O/1a/1e","F/O/1a/1l","F/O/36","F/O/2q","F/O/1a/1X","F/H/1c","F/H/2U","F/1b/1w","F/1b/1Y","F/1b/2F","F/1b/3F","F/H/59","F/1b/1H","F/O/1a/4j","F/1b/33","F/2g/3i","F/2g/1j","F/H/2a","F/1S/1K","F/O/1a/1W"])})(f);(c(){"i2 hI";u o={},2t=F.O.1a.G.2t;(c gQ(ns){u R,bj;1B(R in ns){bj=2J(ns[R]);if(bj===\'4y\'&&!~2t(R,[\'36\',\'1e\',\'27\'])){gQ(ns[R])}Y if(bj===\'c\'){o[R]=ns[R]}}})(1A.F);o.1e=1A.F.O.1a.1e;o.27=1A.F.O.1a.27;o.36=1A.F.O.36;1A.ru=o;if(!1A.o){1A.o=o}l o})();',62,1830,'||||||||||||function|||this||||||return|||||||||var|||||||||||moxie|Basic|runtime||data|type|self|uid||core|value|null|name||length|blob|call||options|else||||||||||||utils|file|Runtime|new|Env|false|width|extensions|height|XMLHttpRequest|extend|Dom|trigger|browser|comp|obj|target|idx|_xhr|true|mode|define|Blob|destroy|case|size|window|for|exec|meta|DOMException|typeOf|_options|FileReader|shimContainer|can|Image|getRuntime|form|result|responseType|input|str|version|image|arguments|ruid|get|Events|Encode|File|container|||||||throw|Mime||img|Transporter|code|flash||_fr|each|xhr|init|html5|document|bind|break|offset|prototype|browseButton|VERSION|EventTarget|_p|NAME|inArray|accept|apply|read|string|args|_canvas|undefined|key|error|array|headers|FileInput|push|url|tag|typeof|ctx|src|_iframe|RuntimeError|mimes|start|application|quality|header|client|RuntimeClient|required_caps|guid|Flash|silverlight|ImageError|_br|dispatchEvent||FileReaderSync|canvas|readyState|Exceptions|try|capTrue|Math|style|info|offsets|SHORT|files|match|addEvent|slice|FormData|shimExec|catch|_binStr|_blob|setAttribute|node|replace|toLowerCase|top|LONG|caps|instanceof|eventpool|uri|split|_files|abort|count|queue|parent|cap|MAJOR|FileDrop|test|getSource|mime|callback|Test|list|while|fired|dataUrl|imgCopy|instance|send|end|segment|matches|_imgInfo|light|loaded|total|DONE|connectRuntime|path|items|atob|ext|_ep|IE|marker|100|crop|arrayDiff|text|base64|_img|addEventListener|evt|urlp|createElement|exts|Url|uid_|readAsDataURL|json|method|video|INVALID_STATE_ERR|Error|jpeg|BinaryReader|_binstr|load|undef|getShimContainer|indexOf|object|position|upload|tiffHeader|zIndex|namecodes|state|rXML||trim|_info|getAsDataURL|_hm|max|num|switch|parseInt|detected|purge|preventDefault|delete|eventhash|return_response_type|dispatches|bits|_uid|html4|entry|isDetached||fragments|getShim|translate|I18n|bin|dropZone|crlf|RuntimeTarget|preserveHeaders|readAsBinaryString|component|access_binary|readAsText|stopPropagation|parentNode|JSON|removeAllEvents|port|func|vnd|summon_file_dialog|not|compare|props|values|action|Tiff|err|multipart|defaultMode|b64|async|constructor|Content|v2|disconnectRuntime|LOADING|progress|blobpool|hidden|currentUrl|getAsBlob|binstr|tmpEvt|entries|reduction|select_file|param|red|audio|btoa|GPS|module|String|getStyle|eye|withCredentials|v1|responseText|className|scale|NT|mapper|definition||charAt|priority|doc|EventException|tmp_arr|ids|utf8_encode|_purge|response|status|html|getContext|FileException|Exif|II|hasOwnProperty|convertEventPropsToHandlers|loadEnd|shimid|isEmptyObj|_|append|scheme|_read|prop|parseUrl|Not|_shim|user|send_binary_string|initTimer|browse_button|rawInfo|left|shim|methods|getBlob|div|tiff|access_image_binary|_response|200|appendChild|innerHTML|body|orientation|fromCharCode|UAParser|_pos|send_custom_headers|_size|frs|send_multipart|needles|unbindAll|SEGMENT|999|_runtime|pair|create_canvas|objpool|chunk|handlers|arr|return_status_code|join|modeCaps|404|scope|_responseHeadersBag|utf8|RuntimeInit|toString|readystatechange|WRONG_FORMAT|inputs|actualVerArray|windows|ready|map|defaults|substr|auto|_form|index|compulsory|_toBinary|title|_status|_responseHeaders|display_media|slice_blob|select_multiple|stream_upload|valueType|OperationNotAllowedException|Chrome|_error_flag|_send_flag|host|boundary|SYNTAX_ERR|tmpCanvas|do_cors|_modified|order|officedocument|_filename|report_upload_progress|send_browser_cookies|return_response_headers|JPEG|PNG|resize_image|openxmlformats|handler|upload_filesize|removeEvent|tagOffset||setTimeout|drag_and_drop|item|getResult|events|contentWindow|setExif|control|navigator|multiple|True|dataTransfer|ExifVersion|destHeight|root|hasSameOrigin|capMode|encoding|JPEGHeaders|loadend|exif|_reset|tags|reqVerArray|destWidth|_headers|cbcb|NOT_SUPPORTED_ERR|use_http_method|hasBlob|toDataURL|substring|png|modules|exact|regex|onload|_mimeType|removeChild|clone|_allowedExts|inSeries|parseCaps|continue|hash|click|currForm|open|password|mouseup|mousedown|dashdash|charCodeAt|getFiles|relative|removeInstance|disabled|filter_by_extension|change|_load|_upload_complete_flag||_async|EMPTY|_same_origin_flag|_upload_events_flag|addConstructor|GET|_sync_flag|POST|ExifParser|OPENED|toUpperCase|getSize|dimensions|_chunk_size|_data|absolute|filter|GPSVersionID|charset|downsize|PI|requiredVersionPart|transport|swf_url|rotate|shift|default|_findKey|isVersionSupported|maps|mobile|diff|refCaps|runtimes|parseSizeStr|ua|utf8_decode|actualVer|getInfo|loadstart|drop|safari|drawImage|NOT_FOUND_ERR|prefix|OS|fileName|_result|NOT_INIT_ERR|blobField|appendBlob|GPSInfoIFDPointer|dragenter|Load|loadFromImage|chunk_size|_formatData|gps|setRequestHeader|bodyElm|flag|ExifIFDPointer|hex|srcType|Opera|major|0px|TransportingComplete|IDLE|onchange|regExp|onChange|attachedBlob||rect|use_data_uri|valueOffset|extractTags|cleanup||responseXML|getResponseHeader|documentElement|OBJ_TYPE|getAllResponseHeaders|mustSendAsBinary|0xff|initialized|Date|xap_url|jpegHeaders|fluorescent|mul|mimeData|stream|Type|octet|static|opera|regexes|rgx|sos|removeEventListener|SLONG|ActiveXObject|uastring|directory|_isAcceptable|white|_mimes|disable|_convertToBinary|Standard|actualVersionPart|rtf|tagDescs|loadFromBlob|round|enc|nodeRect|_preserveHeaders|ImageInfo|0x3f|CRC|_preload|getResponse|STRING|dec|Safari|use_data_uri_over32kb|origin|types|detach|clients||tmpCtx|1024||MegaPixel|ports|capStr|Resize|itemType|initialize|resolveUrl|_getImg|hasExif|_fields|Request|getAsCanvas|rootRect|arrayIntersect|dependencies|txt|set|UNSENT|cbArgs|getFileMime|grp|signature|Required|getAsBinaryString|_getDimensions|message|hasClass|getPos|_method|pos|getConstructor|inParallel|UNKNOWN|oldsafari|ui8a|util|has|webkit|sendAsBinary|FUNC_TYPE|putstr|ogg|template|sum|mouseenter|Refresh|toArray|mimes2extList|i18n|Files|filters|encodeURIComponent|presentationml|addInput|progIDs|query|rText|getTime||unescape|Disposition|mouseleave|disposition|getFileExtension|gif|MAX_RESOLUTION_ERR|parse|removeClass|addClass|define_property|getStatus|prepVersion|numVersion|operator|runtimeConstructors|_url|RegExp|statusText|_run|_start_time|getIEPos|mod|_encoding|_transport|_user|_password|bytesLeft|nodeType|INVALID_ACCESS_ERR|capObj|gecko|XMLHttpRequestUpload|hasFile|dragleave|SECURITY_ERR|android|moreEntries|field|_readEntries|getEntries|Failed|requiredCaps|select_folder|_loadFromBlob|temp|timeout|getUA|MAX_RESIZE_WIDTH|MAX_RESIZE_HEIGHT|getMode|orig|engine|blobSlice|mpeg|embedded|stripHeaders|PixelXDimension|PixelYDimension|source|opacity|detectSubsampling|Windows|unbind|vertSquashRatio|invalid|onerror||Firefox|keys|tmpTags|writeHeaders|ifd|Moxie||defs|restore|Auto|min|Progress||EXIF||||parseFloat|content|capTest|overflow|Init|_cs|ratio|Microsoft|exifVersion|extList2mimes|attachBlob|alpha|callNext|did|IFD_offset|exports|isNaN|global_event_dispatcher|muls|needle|use_fileinput|_downsize|iOS|must|255|fire|Normal|Other|||plugin|mathFn|Array|_getChunkAt|detectVerticalSquash|pass|_doXHR|array1|naturalHeight|999px|naturalWidth|httpCode|Html4Runtime|request|uffff|u0100|transfer|line||uaHeaders|cookie|cookie2|mac||30226|_finalMime|access|plain|UTF|userAgent|||_finalCharset|ceil|array2|description|hasEventListener|getIFDOffsets|longitude|6500|display|css|none|tags2extract|BYTE|iframe|_loadFromUrl|SilverlightRuntime|zip|verComp|mozSlice|w3cBlobSlice|HTML5Blob|csv|javascript|webkitSlice|osVersion|pop|quot|Html5Runtime|counter|_loadFromImage|gpsIFD|exifIFD|TRACK|removeAllInstances|setTag|0xFFD8|strip|getBinary|_timeoutset_time|app1||BUSY|firefox|onResize|IFD0||_updateInfo|TYPE_MISMATCH_ERR|INVALID_NODE_TYPE_ERR|runtime_order||wordprocessingml|use_data_uri_of|wmv||mozilla|TIFF|execCommand|m4a|wav|_toDataUrl|http|https|_readAsDataUrl|NOT_READABLE_ERR|tmp|Orientation|All|drop_zone|443|asBinary|escape|unshift|flac|aac|removeAllEventListeners|str_data|renderImageToCanvas|1025|aiff|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|createIframe|lastModifiedDate|9px|HTML5Image|context|specified|runtimeOrder|8px|getShimVersion|2097152|1px|ShockwaveFlash|require|shockwave|renderTo|preferred_caps|_drawToCanvas|preferredMode|_sliceDetached|resolve|expr|_rotateToOrientaion||enctype|defined|UNSPECIFIED_EVENT_TYPE_ERR|pre|Bad|svg|dropEffect|win|dragover|copy|bmp|417|srcBlob|Entity||bytes|Gateway|Timeout|getEngine|getImageData|getBrowser|CONNECT|getOS|plugins|toFilters|vm|AgControl|setUA|version_compare|swf|FlashBlob|Found|scrollTop|scrollLeft|FlashRuntime|NO_MODIFICATION_ALLOWED_ERR|ac3|addAlias|wma|ABORT_ERR|Proxy|grps|getComputedStyle|Too|currentStyle|416|arg|412|||||readAsBase64|documentMode|stop|getBoundingClientRect|TRACE|0xFFE1|No|xml|_getDocument|XMLHTTP|getBlobName|_getNativeXHR|clearTimeout|_prepareMultipart|mouseout|abs|0x0000|0x0001|filename|Strobe|_preloadAndSend|Uint8Array|Browser|WhiteBalance|Android|Manual|SceneCaptureType|balance|isGecko2_5_6|isAndroidBrowser|lengthComputable|onreadystatechange|Length|UploadProgress|exposure|ExposureMode|binData|write|Daylight|strict|addMissingExtensions|weather|addMimeType|mimes2exts|pgp|m4v|webm|avi|pack|3gpp|pdf|flv|LightSource|Partial|model|5000|vendor|Sprint|mouseover|use|outline|mp4|ColorSpace|MeteringMode|str2|str1|UNDEF_TYPE|Contrast|0x000F|Soft||||links|||isFile|_readEntry|khtml|latitude||icab||_readDirEntry|splice|_readItems|GPSLongitudeRef|trident|w3m||_extractExts|GPSLatitudeRef|isInstalled|Hard|webkitGetAsEntry|netfront|lynx|amaya|netsurf|expose|dirEntry|Saturation|Sharpness|attachEvent|dirReader|smobile|saturation|detachEvent|avant|iemobile|slim|TIMEOUT_ERR|URL_MISMATCH_ERR|QUOTA_EXCEEDED_ERR|VALIDATION_ERR|NETWORK_ERR|quicktime|DATA_CLONE_ERR|blazer|jasmine|outerHTML|allowscriptaccess|HTC|transparent|sort|compatMode|CSS1Compat|APA|NAMESPACE_ERR|NT3|getResponseAsBlob|always|ME|baidu|INUSE_ATTRIBUTE_ERR|lunascape|offsetHeight|clientHeight|offsetTop|XP|Vista|clientWidth|offsetWidth|mobiletab|ARM|opr|kindle||RT|offsetParent|JS_ERR|7373KT|INVALID_CHARACTER_ERR|WRONG_DOCUMENT_ERR|maxthon|NO_DATA_ALLOWED_ERR|smini|NT4|HIERARCHY_REQUEST_ERR|DOMSTRING_SIZE_ERR|2000|NOT_ALLOWED_ERR|ENCODING_ERR|offsetLeft|INDEX_SIZE_ERR|INVALID_MODIFICATION_ERR|96b8|exe|windowless|classid|otf|enablehtmlaccess|opendocument|formula|clsid|Transparent|BlackBerry|MODEL|d27cdb6e|tasman|submit|background|oasis|dependecy|3g2|found|3gpp2|3gp|s9x|sphone|realvideo|_container|snt|ppsx|mkv|matroska|ogv|arm|TYPE|mp3|device|m2v|419|10000|tizen|mov|aif|sprint|Evo|Shift|flashvars|movie|decodeURIComponent|444553540000|lowerize|tablet|mpega|mp2|architecture|mpga|VENDOR|ARCHITECTURE|ae6d|CONSOLE|TABLET|oga|MOBILE|console|11cf|blackberry|wmode|xap|slike|seamonkey|honead|conkeror|minimo|maemo|sbrowser|mpg|s60|bsd|ice|frentopc|dragonfly|meleon|Symbian|xhtml|smac|sopera|htm|plan|symbos|minix|icedragon|amigaos|beos||mosaic|_powerpc|macintosh|aix|haiku|fennec|chimera|iceweasel|camino|gobrowser|Solaris|suse|debian|doris||gentoo|arch|fedora|slackware|ubuntu|kxln|uc|polaris|dillo|phoenix|mint|joli|playstation|mandriva|nintendo|linux|hurd|zenwalk|gnu|cros|sunos|Chromium|redhat|icecat|qqbrowser|firebird|iceape|centos|pclinuxos|and|morphos|risc|photoshop|psd|palm|jpe|jpg|ovibrowser|bolt|svgz|qnx|rim|sgecko|yabrowser|like|Stop||bada|iron|skyfire|R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw|getElementById|flock|wids3portablevu|finally|dragDrop|rekonq|chromium|rockmelt|midori||silk|dragEnter||epiphany|33000|upload_complete_flag|webos|tif|ntce|Mobile|stablet|31005|ssafari|crios|Dolphin|crmo|konqueror|netscape|swiftfox|unix|presto|blank|Netscape|meego|symbian|dolfin|about|beta|dev|IsVersionSupported|RC|log|asc|Yandex|comodo_dragon|Silverlight|tizenoka|In|arora|Plug|chrome|omniweb|mpe|Modified|0x005F|1048576|onReadyStateChange||bracket|mgk|0x005D|0x004D|0x004F|0x0059|buffer|powerpoint|Mozilla|getElementsByTagName|isDirectory|getAttribute|Low|||createReader|readEntries|Landscape|Portrait|Night|scene|0x0049|0x0047|xlb|moxieboundary|0x0019|parsererror|xls|0x0018|0x0009|0x000D|0x0010|excel|tagName|0x001D|0x0020|0x0041|0x0045|Msxml2|XMLDOM|validateOnParse|parseError|0x001F|loadXML|getAsFile|High|0x002A|contentDocument||||frames|998|firstChild|nodeName|onloadend|onprogress|o_|0x4949|IFD|ImageView|Alpha|receive|insertBefore|TransportingStarted|dotx|resize|swfl|Embedded|embed||docx||draggable|ondragstart||font|1099511627776|South|children|North|webkitdirectory|ppt|replaceChild|cloneNode|1073741824|pps|pot|moxie_|West|ArrayBuffer|ondrop|returnValue|cancelBubble|East|srcElement|event|0x0007|0x0005|Unknown|Uncalibrated|sRGB|GPSLongitude|Average|CenterWeightedAverage|Fliorescent|Pattern|MultiSpot|Spot|0x0004|0x0003|0xA404|0xA406|0xA403|0xA402|DigitalZoomRatio|0xA408|GPSLatitude|0x0002|0xA40A|0xA409|Tungsten|Fine|3700K|3200|WW|White|dot|msword|D65||addI18n|D75|sprintf|4500K|3900|7100K||5700|Shade|Cloudy|postscript|||Day|Cool|5400K|4600|FocalLength|0x920A|0x0112|D50|0xFFE0|APP|0x010E|ImageDescription|Model|0x0110|Make|0x010F|0xFFEF|0xFFD9|ISO|studio|tungsten|eps|9mkg|2147483647|0xFFDA|0xFFD7|0xFFD0|4294967296|0x0131|Software|0x9201|ISOSpeedRatings|0x8827|FNumber|ShutterSpeedValue|0x9202|0x9209|0x9208|0x9207|ApertureValue|0x829D|ExposureTime|0xA001|0x9000|0x8825|0x8769|0xA002|0xA003|0x829A|DateTimeOriginal|0x9003|TransportingProgress|DXImageTransform|306|Use|305||D55|Reserved|307|401|400|Redirect|Temporary|304|See|Choices|Multiple|300|Used|301|Moved|303|302|Permanently|Unauthorized|402|Gone|410|Conflict|409|411|Precondition|URI|414|Large|progid|408|Authentication|405|Forbidden|403|Payment|Method|Allowed|407|Acceptable|406|IM|226|authority||Drop|refresh|Change|userInfo|fragment|number|potx|href|location|Ready||cancel|slideshow|Shockwave|thatCan|GetVariable|capFalse|mOxie||toLocaleString|file_|lastIndexOf|isSubsampled|Continue|204|Information|Authoritative|Non|205|Reset|Status|Multi|207|206|203|Accepted|102|Protocols|Switching|101|Processing|OK|202|Created|201|Long|413|sec|proxy|via|agent|random|65535|clearRect|presentation||scharset|overrideMimeType||upgrade|trailer|415|date|connection|PUT|keep||alive|pptx|referer|floor|initParams|xlsx|HEADERS_RECEIVED|sheet|mimeType|fontSize|spreadsheetml|204798|TransportingAborted|clear||||0xFFC0|0xFFC3|0x8950|0x4E47|Abort|post|Number|LoadStart|Filedata|IHDR|0x0D0A|0x1A0A|2346|OPTIONS|expect|500|Upgrade|426|Dependency|Internal|Server|Service|503|Implemented|501|424|Locked|Range|Requested|Media|Unsupported|Satisfiable|Expectation|423|Unprocessable|422|Unavailable|502|Negotiates|504|Also||Extended|uploadprogress|510|Storage|Insufficient|507|Variant|NATIVE|HTTP|DELETE|505|HEAD||Version|Supported|506|RUNTIME'.split('|'),0,{}))
+!function(e,t){"use strict";function i(e,t){for(var i,n=[],o=0;o<e.length;++o){if(i=a[e[o]]||r(e[o]),!i)throw"module definition dependecy not found: "+e[o];n.push(i)}t.apply(null,n)}function n(e,n,r){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(n===t)throw"invalid module definition, dependencies must be specified";if(r===t)throw"invalid module definition, definition function must be specified";i(n,function(){a[e]=r.apply(null,arguments)})}function r(t){for(var i=e,n=t.split(/[.\/]/),r=0;r<n.length;++r){if(!i[n[r]])return;i=i[n[r]]}return i}function o(i){for(var n=0;n<i.length;n++){for(var r=e,o=i[n],s=o.split(/[.\/]/),u=0;u<s.length-1;++u)r[s[u]]===t&&(r[s[u]]={}),r=r[s[u]];r[s[s.length-1]]=a[o]}}var a={};n("moxie/core/utils/Basic",[],function(){var e=function(e){var t;return e===t?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()},t=function(n){var r;return i(arguments,function(o,s){s>0&&i(o,function(i,o){i!==r&&(e(n[o])===e(i)&&~a(e(i),["array","object"])?t(n[o],i):n[o]=i)})}),n},i=function(e,t){var i,n,r,o;if(e){try{i=e.length}catch(e){i=o}if(i===o){for(n in e)if(e.hasOwnProperty(n)&&t(e[n],n)===!1)return}else for(r=0;r<i;r++)if(t(e[r],r)===!1)return}},n=function(t){var i;if(!t||"object"!==e(t))return!0;for(i in t)return!1;return!0},r=function(t,i){function n(r){"function"===e(t[r])&&t[r](function(e){++r<o&&!e?n(r):i(e)})}var r=0,o=t.length;"function"!==e(i)&&(i=function(){}),t&&t.length||i(),n(r)},o=function(e,t){var n=0,r=e.length,o=new Array(r);i(e,function(e,i){e(function(e){if(e)return t(e);var a=[].slice.call(arguments);a.shift(),o[i]=a,n++,n===r&&(o.unshift(null),t.apply(this,o))})})},a=function(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1},s=function(t,i){var n=[];"array"!==e(t)&&(t=[t]),"array"!==e(i)&&(i=[i]);for(var r in t)a(t[r],i)===-1&&n.push(t[r]);return!!n.length&&n},u=function(e,t){var n=[];return i(e,function(e){a(e,t)!==-1&&n.push(e)}),n.length?n:null},c=function(e){var t,i=[];for(t=0;t<e.length;t++)i[t]=e[t];return i},l=function(){var e=0;return function(t){var i,n=(new Date).getTime().toString(32);for(i=0;i<5;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},m=function(e){if("string"!=typeof e)return e;var t,i={t:1099511627776,g:1073741824,m:1048576,k:1024};return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),t=e[2],e=+e[1],i.hasOwnProperty(t)&&(e*=i[t]),e};return{guid:l,typeOf:e,extend:t,each:i,isEmptyObj:n,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,parseSizeStr:m}}),n("moxie/core/I18n",["moxie/core/utils/Basic"],function(e){var t={};return{addI18n:function(i){return e.extend(t,i)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var i=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=i.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),n("moxie/core/utils/Mime",["moxie/core/utils/Basic","moxie/core/I18n"],function(e,t){var i="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",n={mimes:{},extensions:{},addMimeType:function(e){var t,i,n,r=e.split(/,/);for(t=0;t<r.length;t+=2){for(n=r[t+1].split(/ /),i=0;i<n.length;i++)this.mimes[n[i]]=r[t];this.extensions[r[t]]=n}},extList2mimes:function(t,i){var n,r,o,a,s=this,u=[];for(r=0;r<t.length;r++)for(n=t[r].extensions.split(/\s*,\s*/),o=0;o<n.length;o++){if("*"===n[o])return[];if(a=s.mimes[n[o]])e.inArray(a,u)===-1&&u.push(a);else{if(!i||!/^\w+$/.test(n[o]))return[];u.push("."+n[o])}}return u},mimes2exts:function(t){var i=this,n=[];return e.each(t,function(t){if("*"===t)return n=[],!1;var r=t.match(/^(\w+)\/(\*|\w+)$/);r&&("*"===r[2]?e.each(i.extensions,function(e,t){new RegExp("^"+r[1]+"/").test(t)&&[].push.apply(n,i.extensions[t])}):i.extensions[t]&&[].push.apply(n,i.extensions[t]))}),n},mimes2extList:function(i){var n=[],r=[];return"string"===e.typeOf(i)&&(i=e.trim(i).split(/\s*,\s*/)),r=this.mimes2exts(i),n.push({title:t.translate("Files"),extensions:r.length?r.join(","):"*"}),n.mimes=i,n},getFileExtension:function(e){var t=e&&e.match(/\.([^.]+)$/);return t?t[1].toLowerCase():""},getFileMime:function(e){return this.mimes[this.getFileExtension(e)]||""}};return n.addMimeType(i),n}),n("moxie/core/utils/Env",["moxie/core/utils/Basic"],function(e){function t(e,t,i){var n=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),n=0;n<r;n++)if(e[n]!=t[n]){if(e[n]=u(e[n]),t[n]=u(t[n]),e[n]<t[n]){o=-1;break}if(e[n]>t[n]){o=1;break}}if(!i)return o;switch(i){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return o<=0;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return o<0;default:return null}}var i=function(e){var t="",i="?",n="function",r="undefined",o="object",a="major",s="name",u="version",c={has:function(e,t){return t.toLowerCase().indexOf(e.toLowerCase())!==-1},lowerize:function(e){return e.toLowerCase()}},l={rgx:function(){for(var t,i,a,s,u,c,l,d=0,m=arguments;d<m.length;d+=2){var f=m[d],p=m[d+1];if(typeof t===r){t={};for(s in p)u=p[s],typeof u===o?t[u[0]]=e:t[u]=e}for(i=a=0;i<f.length;i++)if(c=f[i].exec(this.getUA())){for(s=0;s<p.length;s++)l=c[++a],u=p[s],typeof u===o&&u.length>0?2==u.length?typeof u[1]==n?t[u[0]]=u[1].call(this,l):t[u[0]]=u[1]:3==u.length?typeof u[1]!==n||u[1].exec&&u[1].test?t[u[0]]=l?l.replace(u[1],u[2]):e:t[u[0]]=l?u[1].call(this,l,u[2]):e:4==u.length&&(t[u[0]]=l?u[3].call(this,l.replace(u[1],u[2])):e):t[u]=l?l:e;break}if(c)break}return t},str:function(t,n){for(var r in n)if(typeof n[r]===o&&n[r].length>0){for(var a=0;a<n[r].length;a++)if(c.has(n[r][a],t))return r===i?e:r}else if(c.has(n[r],t))return r===i?e:r;return t}},d={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2000:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",RT:"ARM"}}}},m={browser:[[/(opera\smini)\/((\d+)?[\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i,/(opera).+version\/((\d+)?[\w\.]+)/i,/(opera)[\/\s]+((\d+)?[\w\.]+)/i],[s,u,a],[/\s(opr)\/((\d+)?[\w\.]+)/i],[[s,"Opera"],u,a],[/(kindle)\/((\d+)?[\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i,/(?:ms|\()(ie)\s((\d+)?[\w\.]+)/i,/(rekonq)((?:\/)[\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron)\/((\d+)?[\w\.-]+)/i],[s,u,a],[/(trident).+rv[:\s]((\d+)?[\w\.]+).+like\sgecko/i],[[s,"IE"],u,a],[/(yabrowser)\/((\d+)?[\w\.]+)/i],[[s,"Yandex"],u,a],[/(comodo_dragon)\/((\d+)?[\w\.]+)/i],[[s,/_/g," "],u,a],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i],[s,u,a],[/(dolfin)\/((\d+)?[\w\.]+)/i],[[s,"Dolphin"],u,a],[/((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i],[[s,"Chrome"],u,a],[/((?:android.+))version\/((\d+)?[\w\.]+)\smobile\ssafari/i],[[s,"Android Browser"],u,a],[/version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i],[u,a,[s,"Mobile Safari"]],[/version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i],[u,a,s],[/webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i],[s,[a,l.str,d.browser.oldsafari.major],[u,l.str,d.browser.oldsafari.version]],[/(konqueror)\/((\d+)?[\w\.]+)/i,/(webkit|khtml)\/((\d+)?[\w\.]+)/i],[s,u,a],[/(navigator|netscape)\/((\d+)?[\w\.-]+)/i],[[s,"Netscape"],u,a],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i,/(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i,/(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|qqbrowser)[\/\s]?((\d+)?[\w\.]+)/i,/(links)\s\(((\d+)?[\w\.]+)/i,/(gobrowser)\/?((\d+)?[\w\.]+)*/i,/(ice\s?browser)\/v?((\d+)?[\w\._]+)/i,/(mosaic)[\/\s]((\d+)?[\w\.]+)/i],[s,u,a]],engine:[[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[s,u],[/rv\:([\w\.]+).*(gecko)/i],[u,s]],os:[[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[s,[u,l.str,d.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[s,"Windows"],[u,l.str,d.os.windows.version]],[/\((bb)(10);/i],[[s,"BlackBerry"],u],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)\/([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i],[s,u],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[s,"Symbian"],u],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[s,"Firefox OS"],u],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[s,u],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[s,"Chromium OS"],u],[/(sunos)\s?([\w\.]+\d)*/i],[[s,"Solaris"],u],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[s,u],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[s,"iOS"],[u,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i],[s,[u,/_/g,"."]],[/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i,/(unix)\s?([\w\.]+)*/i],[s,u]]},f=function(e){var i=e||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:t);this.getBrowser=function(){return l.rgx.apply(this,m.browser)},this.getEngine=function(){return l.rgx.apply(this,m.engine)},this.getOS=function(){return l.rgx.apply(this,m.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS()}},this.getUA=function(){return i},this.setUA=function(e){return i=e,this},this.setUA(i)};return(new f).getResult()}(),n=function(){var t={define_property:function(){return!1}(),create_canvas:function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))}(),return_response_type:function(t){try{if(e.inArray(t,["","text","document"])!==-1)return!0;if(window.XMLHttpRequest){var i=new XMLHttpRequest;if(i.open("get","/"),"responseType"in i)return i.responseType=t,i.responseType===t}}catch(e){}return!1},use_data_uri:function(){var e=new Image;return e.onload=function(){t.use_data_uri=1===e.width&&1===e.height},setTimeout(function(){e.src="data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="},1),!1}(),use_data_uri_over32kb:function(){return t.use_data_uri&&("IE"!==r.browser||r.version>=9)},use_data_uri_of:function(e){return t.use_data_uri&&e<33e3||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(i){var n=[].slice.call(arguments);return n.shift(),"function"===e.typeOf(t[i])?t[i].apply(this,n):!!t[i]}}(),r={can:n,browser:i.browser.name,version:parseFloat(i.browser.major),os:i.os.name,osVersion:i.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return r.OS=r.os,r}),n("moxie/core/utils/Dom",["moxie/core/utils/Env"],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},i=function(e,t){if(!e.className)return!1;var i=new RegExp("(^|\\s+)"+t+"(\\s+|$)");return i.test(e.className)},n=function(e,t){i(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},r=function(e,t){if(e.className){var i=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(i,function(e,t,i){return" "===t&&" "===i?" ":""})}},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,i){function n(e){var t,i,n=0,r=0;return e&&(i=e.getBoundingClientRect(),t="CSS1Compat"===c.compatMode?c.documentElement:c.body,n=i.left+t.scrollLeft,r=i.top+t.scrollTop),{x:n,y:r}}var r,o,a,s=0,u=0,c=document;if(t=t,i=i||c.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!c.documentMode||c.documentMode<8))return o=n(t),a=n(i),{x:o.x-a.x,y:o.y-a.y};for(r=t;r&&r!=i&&r.nodeType;)s+=r.offsetLeft||0,u+=r.offsetTop||0,r=r.offsetParent;for(r=t.parentNode;r&&r!=i&&r.nodeType;)s-=r.scrollLeft||0,u-=r.scrollTop||0,r=r.parentNode;return{x:s,y:u}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:i,addClass:n,removeClass:r,getStyle:o,getPos:a,getSize:s}}),n("moxie/core/Exceptions",["moxie/core/utils/Basic"],function(e){function t(e,t){var i;for(i in e)if(e[i]===t)return i;return null}return{RuntimeError:function(){function i(e){this.code=e,this.name=t(n,e),this.message=this.name+": RuntimeError "+this.code}var n={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(i,n),i.prototype=Error.prototype,i}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function i(e){this.code=e,this.name=t(n,e),this.message=this.name+": ImageError "+this.code}var n={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(i,n),i.prototype=Error.prototype,i}(),FileException:function(){function i(e){this.code=e,this.name=t(n,e),this.message=this.name+": FileException "+this.code}var n={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(i,n),i.prototype=Error.prototype,i}(),DOMException:function(){function i(e){this.code=e,this.name=t(n,e),this.message=this.name+": DOMException "+this.code}var n={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(i,n),i.prototype=Error.prototype,i}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),n("moxie/core/EventTarget",["moxie/core/Exceptions","moxie/core/utils/Basic"],function(e,t){function i(){var i={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,n,r,o){var a,s=this;return e=t.trim(e),/\s/.test(e)?void t.each(e.split(/\s+/),function(e){s.addEventListener(e,n,r,o)}):(e=e.toLowerCase(),r=parseInt(r,10)||0,a=i[this.uid]&&i[this.uid][e]||[],a.push({fn:n,priority:r,scope:o||this}),i[this.uid]||(i[this.uid]={}),void(i[this.uid][e]=a))},hasEventListener:function(e){return e?!(!i[this.uid]||!i[this.uid][e]):!!i[this.uid]},removeEventListener:function(e,n){e=e.toLowerCase();var r,o=i[this.uid]&&i[this.uid][e];if(o){if(n){for(r=o.length-1;r>=0;r--)if(o[r].fn===n){o.splice(r,1);break}}else o=[];o.length||(delete i[this.uid][e],t.isEmptyObj(i[this.uid])&&delete i[this.uid])}},removeAllEventListeners:function(){i[this.uid]&&delete i[this.uid]},dispatchEvent:function(n){var r,o,a,s,u,c={},l=!0;if("string"!==t.typeOf(n)){if(s=n,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);n=s.type,s.total!==u&&s.loaded!==u&&(c.total=s.total,c.loaded=s.loaded),c.async=s.async||!1}if(n.indexOf("::")!==-1?!function(e){r=e[0],n=e[1]}(n.split("::")):r=this.uid,n=n.toLowerCase(),o=i[r]&&i[r][n]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),c.type=n,a.unshift(c);var d=[];t.each(o,function(e){a[0].target=e.scope,c.async?d.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):d.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&t.inSeries(d,function(e){l=!e})}return l},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var i;"array"!==t.typeOf(e)&&(e=[e]);for(var n=0;n<e.length;n++)i="on"+e[n],"function"===t.typeOf(this[i])?this.addEventListener(e[n],this[i]):"undefined"===t.typeOf(this[i])&&(this[i]=null)}})}return i.instance=new i,i}),n("moxie/core/utils/Encode",[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},i=function(e,i){if("function"==typeof window.atob)return i?t(window.atob(e)):window.atob(e);var n,r,o,a,s,u,c,l,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",m=0,f=0,p="",h=[];if(!e)return e;e+="";do a=d.indexOf(e.charAt(m++)),s=d.indexOf(e.charAt(m++)),u=d.indexOf(e.charAt(m++)),c=d.indexOf(e.charAt(m++)),l=a<<18|s<<12|u<<6|c,n=l>>16&255,r=l>>8&255,o=255&l,64==u?h[f++]=String.fromCharCode(n):64==c?h[f++]=String.fromCharCode(n,r):h[f++]=String.fromCharCode(n,r,o);while(m<e.length);return p=h.join(""),i?t(p):p},n=function(t,i){if(i&&e(t),"function"==typeof window.btoa)return window.btoa(t);var n,r,o,a,s,u,c,l,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",m=0,f=0,p="",h=[];if(!t)return t;do n=t.charCodeAt(m++),r=t.charCodeAt(m++),o=t.charCodeAt(m++),l=n<<16|r<<8|o,a=l>>18&63,s=l>>12&63,u=l>>6&63,c=63&l,h[f++]=d.charAt(a)+d.charAt(s)+d.charAt(u)+d.charAt(c);while(m<t.length);p=h.join("");var g=t.length%3;return(g?p.slice(0,g-3):p)+"===".slice(g||3)};return{utf8_encode:e,utf8_decode:t,atob:i,btoa:n}}),n("moxie/runtime/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/EventTarget"],function(e,t,i){function n(i,r,a,s,u){var c,l=this,d=e.guid(r+"_"),m=u||"browser";i=i||{},o[d]=this,a=e.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},a),i.preferred_caps&&(m=n.getMode(s,i.preferred_caps,m)),c=function(){var t={};return{exec:function(e,i,n,r){if(c[i]&&(t[e]||(t[e]={context:this,instance:new c[i]}),t[e].instance[n]))return t[e].instance[n].apply(this,r)},removeInstance:function(e){delete t[e]},removeAllInstances:function(){var i=this;e.each(t,function(t,n){"function"===e.typeOf(t.instance.destroy)&&t.instance.destroy.call(t.context),i.removeInstance(n)})}}}(),e.extend(this,{initialized:!1,uid:d,type:r,mode:n.getMode(s,i.required_caps,m),shimid:d+"_container",clients:0,options:i,can:function(t,i){var r=arguments[2]||a;if("string"===e.typeOf(t)&&"undefined"===e.typeOf(i)&&(t=n.parseCaps(t)),"object"===e.typeOf(t)){for(var o in t)if(!this.can(o,t[o],r))return!1;return!0}return"function"===e.typeOf(r[t])?r[t].call(this,i):i===r[t]},getShimContainer:function(){var i,n=t.get(this.shimid);return n||(i=this.options.container?t.get(this.options.container):document.body,n=document.createElement("div"),n.id=this.shimid,n.className="moxie-shim moxie-shim-"+this.type,e.extend(n.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),i.appendChild(n),i=null),n},getShim:function(){return c},shimExec:function(e,t){var i=[].slice.call(arguments,2);return l.getShim().exec.call(this,this.uid,e,t,i)},exec:function(e,t){var i=[].slice.call(arguments,2);return l[e]&&l[e][t]?l[e][t].apply(this,i):l.shimExec.apply(this,arguments)},destroy:function(){if(l){var e=t.get(this.shimid);e&&e.parentNode.removeChild(e),c&&c.removeAllInstances(),this.unbindAll(),delete o[this.uid],this.uid=null,d=l=c=e=null}}}),this.mode&&i.required_caps&&!this.can(i.required_caps)&&(this.mode=!1)}var r={},o={};return n.order="html5,flash,silverlight,html4",n.getRuntime=function(e){return!!o[e]&&o[e]},n.addConstructor=function(e,t){t.prototype=i.instance,r[e]=t},n.getConstructor=function(e){return r[e]||null},n.getInfo=function(e){var t=n.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},n.parseCaps=function(t){var i={};return"string"!==e.typeOf(t)?t||{}:(e.each(t.split(","),function(e){i[e]=!0}),i)},n.can=function(e,t){var i,r,o=n.getConstructor(e);return!!o&&(i=new o({required_caps:t}),r=i.mode,i.destroy(),!!r)},n.thatCan=function(e,t){var i=(t||n.order).split(/\s*,\s*/);for(var r in i)if(n.can(i[r],e))return i[r];return null},n.getMode=function(t,i,n){var r=null;if("undefined"===e.typeOf(n)&&(n="browser"),i&&!e.isEmptyObj(t)){if(e.each(i,function(i,n){if(t.hasOwnProperty(n)){var o=t[n](i);if("string"==typeof o&&(o=[o]),r){if(!(r=e.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return e.inArray(n,r)!==-1?n:r[0];if(r===!1)return!1}return n},n.capTrue=function(){return!0},n.capFalse=function(){return!1},n.capTest=function(e){return function(){return!!e}},n}),n("moxie/runtime/RuntimeClient",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/Runtime"],function(e,t,i){return function(){var n;t.extend(this,{connectRuntime:function(r){function o(t){var a,u;return t.length?(a=t.shift(),(u=i.getConstructor(a))?(n=new u(r),n.bind("Init",function(){n.initialized=!0,setTimeout(function(){n.clients++,s.trigger("RuntimeInit",n)},1)}),n.bind("Error",function(){n.destroy(),o(t)}),n.mode?void n.init():void n.trigger("Error")):void o(t)):(s.trigger("RuntimeError",new e.RuntimeError(e.RuntimeError.NOT_INIT_ERR)),void(n=null))}var a,s=this;if("string"===t.typeOf(r)?a=r:"string"===t.typeOf(r.ruid)&&(a=r.ruid),a){if(n=i.getRuntime(a))return n.clients++,n;throw new e.RuntimeError(e.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||i.order).split(/\s*,\s*/))},getRuntime:function(){return n&&n.uid?n:(n=null,null)},disconnectRuntime:function(){n&&--n.clients<=0&&(n.destroy(),n=null)}})}}),n("moxie/file/Blob",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient"],function(e,t,i){function n(o,a){function s(t,i,o){var a,s=r[this.uid];return"string"===e.typeOf(s)&&s.length?(a=new n(null,{type:o,size:i-t}),a.detach(s.substr(t,a.size)),a):null}i.call(this),o&&this.connectRuntime(o),a?"string"===e.typeOf(a)&&(a={data:a}):a={},e.extend(this,{uid:a.uid||e.guid("uid_"),ruid:o,size:a.size||0,type:a.type||"",slice:function(e,t,i){return this.isDetached()?s.apply(this,arguments):this.getRuntime().exec.call(this,"Blob","slice",this.getSource(),e,t,i)},getSource:function(){return r[this.uid]?r[this.uid]:null},detach:function(e){this.ruid&&(this.getRuntime().exec.call(this,"Blob","destroy",r[this.uid]),this.disconnectRuntime(),this.ruid=null),e=e||"";var i=e.match(/^data:([^;]*);base64,/);i&&(this.type=i[1],e=t.atob(e.substring(e.indexOf("base64,")+7))),this.size=e.length,r[this.uid]=e},isDetached:function(){return!this.ruid&&"string"===e.typeOf(r[this.uid])},destroy:function(){this.detach(),delete r[this.uid]}}),a.data?this.detach(a.data):r[this.uid]=a}var r={};return n}),n("moxie/file/File",["moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/file/Blob"],function(e,t,i){function n(n,r){var o,a;if(r||(r={}),a=r.type&&""!==r.type?r.type:t.getFileMime(r.name),r.name)o=r.name.replace(/\\/g,"/"),o=o.substr(o.lastIndexOf("/")+1);else{var s=a.split("/")[0];o=e.guid((""!==s?s:"file")+"_"),t.extensions[a]&&(o+="."+t.extensions[a][0])}i.apply(this,arguments),e.extend(this,{type:a||"",name:o||e.guid("file_"),lastModifiedDate:r.lastModifiedDate||(new Date).toLocaleString()})}return n.prototype=i.prototype,n}),n("moxie/file/FileInput",["moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/I18n","moxie/file/File","moxie/runtime/Runtime","moxie/runtime/RuntimeClient"],function(e,t,i,n,r,o,a,s,u){function c(r){var c,d,m,f=this;if(e.inArray(e.typeOf(r),["string","node"])!==-1&&(r={browse_button:r}),d=i.get(r.browse_button),!d)throw new n.DOMException(n.DOMException.NOT_FOUND_ERR);m={accept:[{title:o.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:d.parentNode||document.body},r=e.extend({},m,r),"string"==typeof r.required_caps&&(r.required_caps=s.parseCaps(r.required_caps)),"string"==typeof r.accept&&(r.accept=t.mimes2extList(r.accept)),c=i.get(r.container),c||(c=document.body),"static"===i.getStyle(c,"position")&&(c.style.position="relative"),c=d=null,u.call(f),e.extend(f,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){f.convertEventPropsToHandlers(l),f.bind("RuntimeInit",function(t,n){f.ruid=n.uid,f.shimid=n.shimid,f.bind("Ready",function(){f.trigger("Refresh")},999),f.bind("Change",function(){var t=n.exec.call(f,"FileInput","getFiles");f.files=[],e.each(t,function(e){return 0===e.size||void f.files.push(new a(f.ruid,e))})},999),f.bind("Refresh",function(){var t,o,a,s;a=i.get(r.browse_button),s=i.get(n.shimid),a&&(t=i.getPos(a,i.get(r.container)),o=i.getSize(a),s&&e.extend(s.style,{top:t.y+"px",left:t.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),n.exec.call(f,"FileInput","init",r)}),f.connectRuntime(e.extend({},r,{required_caps:{select_file:!0}}))},disable:function(t){var i=this.getRuntime();i&&i.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)||t)},refresh:function(){f.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null}})}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=r.instance,c}),n("moxie/file/FileDrop",["moxie/core/I18n","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/file/File","moxie/runtime/RuntimeClient","moxie/core/EventTarget","moxie/core/utils/Mime"],function(e,t,i,n,r,o,a,s){function u(i){var a,u=this;"string"==typeof i&&(i={drop_zone:i}),a={accept:[{title:e.translate("All Files"),extensions:"*"}],required_caps:{drag_and_drop:!0}},i="object"==typeof i?n.extend({},a,i):a,i.container=t.get(i.drop_zone)||document.body,"static"===t.getStyle(i.container,"position")&&(i.container.style.position="relative"),"string"==typeof i.accept&&(i.accept=s.mimes2extList(i.accept)),o.call(u),n.extend(u,{uid:n.guid("uid_"),ruid:null,files:null,init:function(){u.convertEventPropsToHandlers(c),u.bind("RuntimeInit",function(e,t){u.ruid=t.uid,u.bind("Drop",function(){var e=t.exec.call(u,"FileDrop","getFiles");u.files=[],n.each(e,function(e){u.files.push(new r(u.ruid,e))})},999),t.exec.call(u,"FileDrop","init",i),u.dispatchEvent("ready")}),u.connectRuntime(i)},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileDrop","destroy"),this.disconnectRuntime()),this.files=null}})}var c=["ready","dragenter","dragleave","drop","error"];return u.prototype=a.instance,u}),n("moxie/runtime/RuntimeTarget",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(e,t,i){function n(){this.uid=e.guid("uid_"),t.call(this),this.destroy=function(){this.disconnectRuntime(),this.unbindAll()}}return n.prototype=i.instance,n}),n("moxie/file/FileReader",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/Exceptions","moxie/core/EventTarget","moxie/file/Blob","moxie/file/File","moxie/runtime/RuntimeTarget"],function(e,t,i,n,r,o,a){function s(){function n(e,n){function l(e){c.readyState=s.DONE,c.error=e,c.trigger("error"),d()}function d(){o.destroy(),o=null,c.trigger("loadend")}function m(t){o.bind("Error",function(e,t){l(t)}),o.bind("Progress",function(e){c.result=t.exec.call(o,"FileReader","getResult"),c.trigger(e)}),o.bind("Load",function(e){c.readyState=s.DONE,c.result=t.exec.call(o,"FileReader","getResult"),c.trigger(e),d()}),t.exec.call(o,"FileReader","read",e,n)}if(o=new a,this.convertEventPropsToHandlers(u),this.readyState===s.LOADING)return l(new i.DOMException(i.DOMException.INVALID_STATE_ERR));if(this.readyState=s.LOADING,this.trigger("loadstart"),n instanceof r)if(n.isDetached()){var f=n.getSource();switch(e){case"readAsText":case"readAsBinaryString":this.result=f;break;case"readAsDataURL":this.result="data:"+n.type+";base64,"+t.btoa(f)}this.readyState=s.DONE,this.trigger("load"),d()}else m(o.connectRuntime(n.ruid));else l(new i.DOMException(i.DOMException.NOT_FOUND_ERR))}var o,c=this;e.extend(this,{uid:e.guid("uid_"),readyState:s.EMPTY,result:null,error:null,readAsBinaryString:function(e){n.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){n.call(this,"readAsDataURL",e)},readAsText:function(e){n.call(this,"readAsText",e)},abort:function(){this.result=null,e.inArray(this.readyState,[s.EMPTY,s.DONE])===-1&&(this.readyState===s.LOADING&&(this.readyState=s.DONE),o&&o.getRuntime().exec.call(this,"FileReader","abort"),this.trigger("abort"),this.trigger("loadend"))},destroy:function(){this.abort(),o&&(o.getRuntime().exec.call(this,"FileReader","destroy"),o.disconnectRuntime()),c=o=null}})}var u=["loadstart","progress","load","abort","error","loadend"];return s.EMPTY=0,s.LOADING=1,s.DONE=2,s.prototype=n.instance,s}),n("moxie/core/utils/Url",[],function(){var e=function(t,i){for(var n=["source","scheme","authority","userInfo","user","pass","host","port","relative","path","directory","file","query","fragment"],r=n.length,o={http:80,https:443},a={},s=/^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,u=s.exec(t||"");r--;)u[r]&&(a[n[r]]=u[r]);
+if(!a.scheme){i&&"string"!=typeof i||(i=e(i||document.location.href)),a.scheme=i.scheme,a.host=i.host,a.port=i.port;var c="";/^[^\/]/.test(a.path)&&(c=i.path,/(\/|\/[^\.]+)$/.test(c)?c+="/":c=c.replace(/\/[^\/]+$/,"/")),a.path=c+(a.path||"")}return a.port||(a.port=o[a.scheme]||80),a.port=parseInt(a.port,10),a.path||(a.path="/"),delete a.source,a},t=function(t){var i={http:80,https:443},n=e(t);return n.scheme+"://"+n.host+(n.port!==i[n.scheme]?":"+n.port:"")+n.path+(n.query?n.query:"")},i=function(t){function i(e){return[e.scheme,e.host,e.port].join("/")}return"string"==typeof t&&(t=e(t)),i(e())===i(t)};return{parseUrl:e,resolveUrl:t,hasSameOrigin:i}}),n("moxie/file/FileReaderSync",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/utils/Encode"],function(e,t,i){return function(){function n(e,t){if(!t.isDetached()){var n=this.connectRuntime(t.ruid).exec.call(this,"FileReaderSync","read",e,t);return this.disconnectRuntime(),n}var r=t.getSource();switch(e){case"readAsBinaryString":return r;case"readAsDataURL":return"data:"+t.type+";base64,"+i.btoa(r);case"readAsText":for(var o="",a=0,s=r.length;a<s;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return n.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return n.call(this,"readAsDataURL",e)},readAsText:function(e){return n.call(this,"readAsText",e)}})}}),n("moxie/xhr/FormData",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/file/Blob"],function(e,t,i){function n(){var e,n=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof i?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):n.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(i){t.each(n,function(e){i(e.value,e.name)}),e&&i(e.value,e.name)},destroy:function(){e=null,n=[]}})}return n}),n("moxie/xhr/XMLHttpRequest",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/core/utils/Url","moxie/runtime/Runtime","moxie/runtime/RuntimeTarget","moxie/file/Blob","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/core/utils/Env","moxie/core/utils/Mime"],function(e,t,i,n,r,o,a,s,u,c,l,d){function m(){this.uid=e.guid("uid_")}function f(){function i(e,t){if(S.hasOwnProperty(e))return 1===arguments.length?l.can("define_property")?S[e]:T[e]:void(l.can("define_property")?S[e]=t:T[e]=t)}function u(t){function n(){_.destroy(),_=null,s.dispatchEvent("loadend"),s=null}function r(r){_.bind("LoadStart",function(e){i("readyState",f.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),M&&s.upload.dispatchEvent(e)}),_.bind("Progress",function(e){i("readyState")!==f.LOADING&&(i("readyState",f.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),_.bind("UploadProgress",function(e){M&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),_.bind("Load",function(t){i("readyState",f.DONE),i("status",Number(r.exec.call(_,"XMLHttpRequest","getStatus")||0)),i("statusText",p[i("status")]||""),i("response",r.exec.call(_,"XMLHttpRequest","getResponse",i("responseType"))),~e.inArray(i("responseType"),["text",""])?i("responseText",i("response")):"document"===i("responseType")&&i("responseXML",i("response")),U=r.exec.call(_,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),i("status")>0?(M&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(F=!0,s.dispatchEvent("error")),n()}),_.bind("Abort",function(e){s.dispatchEvent(e),n()}),_.bind("Error",function(e){F=!0,i("readyState",f.DONE),s.dispatchEvent("readystatechange"),C=!0,s.dispatchEvent(e),n()}),r.exec.call(_,"XMLHttpRequest","send",{url:x,method:v,async:A,user:y,password:w,headers:O,mimeType:D,encoding:I,responseType:s.responseType,withCredentials:s.withCredentials,options:k},t)}var s=this;E=(new Date).getTime(),_=new a,"string"==typeof k.required_caps&&(k.required_caps=o.parseCaps(k.required_caps)),k.required_caps=e.extend({},k.required_caps,{return_response_type:s.responseType}),t instanceof c&&(k.required_caps.send_multipart=!0),B||(k.required_caps.do_cors=!0),k.ruid?r(_.connectRuntime(k)):(_.bind("RuntimeInit",function(e,t){r(t)}),_.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),_.connectRuntime(k))}function g(){i("responseText",""),i("responseXML",null),i("response",null),i("status",0),i("statusText",""),E=R=null}var x,v,y,w,E,R,_,b,T=this,S={timeout:0,readyState:f.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},A=!0,O={},I=null,D=null,N=!1,L=!1,M=!1,C=!1,F=!1,B=!1,H=null,P=null,k={},U="";e.extend(this,S,{uid:e.guid("uid_"),upload:new m,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||n.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(v=o.toUpperCase()),~e.inArray(v,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=n.utf8_encode(a),l=r.parseUrl(a),B=r.hasSameOrigin(l),x=r.resolveUrl(a),(u||c)&&!B)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(y=u||l.user,w=c||l.pass,A=s||!0,A===!1&&(i("timeout")||i("withCredentials")||""!==i("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);N=!A,L=!1,O={},g.call(this),i("readyState",f.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(i("readyState")!==f.OPENED||L)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||n.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),!~e.inArray(r,a)&&!/^(proxy\-|sec\-)/.test(r)&&(O[r]?O[r]+=", "+o:O[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),F||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(b||(b={},e.each(U.split(/\r\n/),function(t){var i=t.split(/:\s+/);2===i.length&&(i[0]=e.trim(i[0]),b[i[0].toLowerCase()]={header:i[0],value:e.trim(i[1])})})),b.hasOwnProperty(t))?b[t].header+": "+b[t].value:null},overrideMimeType:function(n){var r,o;if(~e.inArray(i("readyState"),[f.LOADING,f.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n=e.trim(n.toLowerCase()),/;/.test(n)&&(r=n.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(n=r[1],r[2]&&(o=r[2])),!d.mimes[n])throw new t.DOMException(t.DOMException.SYNTAX_ERR);H=n,P=o},send:function(i,r){if(k="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(h),this.upload.convertEventPropsToHandlers(h),this.readyState!==f.OPENED||L)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i instanceof s)k.ruid=i.ruid,D=i.type||"application/octet-stream";else if(i instanceof c){if(i.hasBlob()){var o=i.getBlob();k.ruid=o.ruid,D=o.type||"application/octet-stream"}}else"string"==typeof i&&(I="UTF-8",D="text/plain;charset=UTF-8",i=n.utf8_encode(i));this.withCredentials||(this.withCredentials=k.required_caps&&k.required_caps.send_browser_cookies&&!B),M=!N&&this.upload.hasEventListener(),F=!1,C=!i,N||(L=!0),u.call(this,i)},abort:function(){if(F=!0,N=!1,~e.inArray(i("readyState"),[f.UNSENT,f.OPENED,f.DONE]))i("readyState",f.UNSENT);else{if(i("readyState",f.DONE),L=!1,!_)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);_.getRuntime().exec.call(_,"XMLHttpRequest","abort",C),C=!0}},destroy:function(){_&&("function"===e.typeOf(_.destroy)&&_.destroy(),_=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var p={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};m.prototype=i.instance;var h=["loadstart","progress","abort","error","load","timeout","loadend"];return f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,f.prototype=i.instance,f}),n("moxie/runtime/Transporter",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(e,t,i,n){function r(){function n(){l=d=0,c=this.result=null}function o(t,i){var n=this;u=i,n.bind("TransportingProgress",function(t){d=t.loaded,d<l&&e.inArray(n.state,[r.IDLE,r.DONE])===-1&&a.call(n)},999),n.bind("TransportingComplete",function(){d=l,n.state=r.DONE,c=null,n.result=u.exec.call(n,"Transporter","getAsBlob",t||"")},999),n.state=r.BUSY,n.trigger("TransportingStarted"),a.call(n)}function a(){var e,i=this,n=l-d;m>n&&(m=n),e=t.btoa(c.substr(d,m)),u.exec.call(i,"Transporter","receive",e,l)}var s,u,c,l,d,m;i.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,i,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),m=r.chunk_size,n.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,i,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,i,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),n.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),n.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=n.instance,r}),n("moxie/image/Image",["moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/file/FileReaderSync","moxie/xhr/XMLHttpRequest","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/runtime/Transporter","moxie/core/utils/Env","moxie/core/EventTarget","moxie/file/Blob","moxie/file/File","moxie/core/utils/Encode"],function(e,t,i,n,r,o,a,s,u,c,l,d,m){function f(){function n(e){e||(e=this.getRuntime().exec.call(this,"Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var n=e.typeOf(t);try{if(t instanceof f){if(!t.size)throw new i.DOMException(i.DOMException.INVALID_STATE_ERR);h.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new i.ImageError(i.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(e.inArray(n,["blob","file"])!==-1)c.call(this,new d(null,t),arguments[1]);else if("string"===n)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):x.apply(this,arguments);else{if("node"!==n||"img"!==t.nodeName.toLowerCase())throw new i.DOMException(i.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(e){this.trigger("error",e)}}function h(t,i){var n=this.connectRuntime(t.ruid);this.ruid=n.uid,n.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(i)||i)}function g(t,i){function n(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){n(t)}),i&&"string"==typeof i.required_caps&&(i.required_caps=o.parseCaps(i.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},i))):n(this.connectRuntime(t.ruid))}function x(e,t){var i,n=this;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){n.call(this)},999),this.convertEventPropsToHandlers(p),c.apply(this,arguments)},downsize:function(t,n,r,o){try{if(!this.size)throw new i.DOMException(i.DOMException.INVALID_STATE_ERR);if(this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT)throw new i.ImageError(i.ImageError.MAX_RESOLUTION_ERR);(t||n)&&"undefined"!==e.typeOf(r)||(r=!1),t=t||this.width,n=n||this.height,o="undefined"===e.typeOf(o)||!!o,this.getRuntime().exec.call(this,"Image","downsize",t,n,r,o)}catch(e){this.trigger("error",e)}},crop:function(e,t,i){this.downsize(e,t,!0,i)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new i.RuntimeError(i.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new i.DOMException(i.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new i.DOMException(i.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var i=this.getAsDataURL(e,t);return m.atob(i.substring(i.indexOf("base64,")+7))},embed:function(n){function r(){if(u.can("create_canvas")){var t=o.getAsCanvas();if(t)return n.appendChild(t),t=null,o.destroy(),void p.trigger("embedded")}var r=o.getAsDataURL(a,c);if(!r)throw new i.ImageError(i.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))n.innerHTML='<img src="'+r+'" width="'+o.width+'" height="'+o.height+'" />',o.destroy(),p.trigger("embedded");else{var l=new s;l.bind("TransportingComplete",function(){d=p.connectRuntime(this.result.ruid),p.bind("Embedded",function(){e.extend(d.getShimContainer().style,{top:"0px",left:"0px",width:o.width+"px",height:o.height+"px"}),d=null},999),d.exec.call(p,"ImageView","display",this.result.uid,g,x),o.destroy()}),l.transport(m.atob(r.substring(r.indexOf("base64,")+7)),a,e.extend({},h,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:n}))}}var o,a,c,l,d,p=this,h=arguments[1]||{},g=this.width,x=this.height;try{if(!(n=t.get(n)))throw new i.DOMException(i.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new i.DOMException(i.DOMException.INVALID_STATE_ERR);if(this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT)throw new i.ImageError(i.ImageError.MAX_RESOLUTION_ERR);if(a=h.type||this.type||"image/jpeg",c=h.quality||90,l="undefined"!==e.typeOf(h.crop)&&h.crop,h.width)g=h.width,x=h.height||g;else{var v=t.getSize(n);v.w&&v.h&&(g=v.w,x=v.h)}return o=new f,o.bind("Resize",function(){r.call(p)}),o.bind("Load",function(){o.downsize(g,x,l,!1)}),o.clone(this,!1),o}catch(e){this.trigger("error",e)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var p=["progress","load","error","resize","embedded"];return f.MAX_RESIZE_WIDTH=6500,f.MAX_RESIZE_HEIGHT=6500,f.prototype=c.instance,f}),n("moxie/runtime/html5/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(e,t,i,n){function r(t){var r=this,s=i.capTest,u=i.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(n.can("create_canvas")||n.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==n.browser||n.version>9)}()),filter_by_extension:s(function(){return"Chrome"===n.browser&&n.version>=28||"IE"===n.browser&&n.version>=10}()),return_response_headers:u,return_response_type:function(e){return!("json"!==e||!window.JSON)||n.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&n.can("create_canvas")},select_file:function(){return n.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===n.browser&&n.version>=21},select_multiple:function(){return r.can("select_file")&&!("Safari"===n.browser&&"Windows"===n.os)&&!("iOS"===n.os&&n.verComp(n.osVersion,"7.0.4","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===n.browser&&n.version>=4||"Opera"===n.browser&&n.version>=12||"IE"===n.browser&&n.version>=10||!!~e.inArray(n.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);i.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return i.addConstructor(o,r),a}),n("moxie/runtime/html5/file/Blob",["moxie/runtime/html5/Runtime","moxie/file/Blob"],function(e,t){function i(){function e(e,t,i){var n;if(!window.File.prototype.slice)return(n=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?n.call(e,t,i):null;try{return e.slice(),e.slice(t,i)}catch(n){return e.slice(t,i-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=i}),n("moxie/core/utils/Events",["moxie/core/utils/Basic"],function(e){function t(){this.returnValue=!1}function i(){this.cancelBubble=!0}var n={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=i,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),n.hasOwnProperty(o[r])||(n[o[r]]={}),l=n[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,i,o){var a,s;if(i=i.toLowerCase(),t[r]&&n[t[r]]&&n[t[r]][i]){a=n[t[r]][i];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(i,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+i,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete n[t[r]][i],e.isEmptyObj(n[t[r]])){delete n[t[r]];try{delete t[r]}catch(e){t[r]=s}}}},s=function(t,i){t&&t[r]&&e.each(n[t[r]],function(e,n){a(t,n,i)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),n("moxie/runtime/html5/file/FileInput",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,t,i,n,r,o){function a(){var e,a=[];t.extend(this,{init:function(s){var u,c,l,d,m,f,p=this,h=p.getRuntime();e=s,a=[],l=e.accept.mimes||r.extList2mimes(e.accept,h.can("filter_by_extension")),c=h.getShimContainer(),c.innerHTML='<input id="'+h.uid+'" type="file" style="font-size:999px;opacity:0;"'+(e.multiple&&h.can("select_multiple")?"multiple":"")+(e.directory&&h.can("select_folder")?"webkitdirectory directory":"")+(l?' accept="'+l.join(",")+'"':"")+" />",u=i.get(h.uid),t.extend(u.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),d=i.get(e.browse_button),h.can("summon_file_dialog")&&("static"===i.getStyle(d,"position")&&(d.style.position="relative"),m=parseInt(i.getStyle(d,"z-index"),10)||1,d.style.zIndex=m,c.style.zIndex=m-1,n.addEvent(d,"click",function(e){var t=i.get(h.uid);t&&!t.disabled&&t.click(),e.preventDefault()},p.uid)),f=h.can("summon_file_dialog")?d:c,n.addEvent(f,"mouseover",function(){p.trigger("mouseenter")},p.uid),n.addEvent(f,"mouseout",function(){p.trigger("mouseleave")},p.uid),n.addEvent(f,"mousedown",function(){p.trigger("mousedown")},p.uid),n.addEvent(i.get(e.container),"mouseup",function(){p.trigger("mouseup")},p.uid),u.onchange=function i(){if(a=[],e.directory?t.each(this.files,function(e){"."!==e.name&&a.push(e)}):a=[].slice.call(this.files),"IE"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=i}p.trigger("change")},p.trigger({type:"ready",async:!0}),c=null},getFiles:function(){return a},disable:function(e){var t,n=this.getRuntime();(t=i.get(n.uid))&&(t.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShim(),o=t.getShimContainer();n.removeAllEvents(o,this.uid),n.removeAllEvents(e&&i.get(e.container),this.uid),n.removeAllEvents(e&&i.get(e.browse_button),this.uid),o&&(o.innerHTML=""),r.removeInstance(this.uid),a=e=o=r=null}})}return e.FileInput=a}),n("moxie/runtime/html5/file/FileDrop",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime"],function(e,t,i,n,r){function o(){function e(e){for(var i=[],n=0;n<e.length;n++)[].push.apply(i,e[n].extensions.split(/\s*,\s*/));return t.inArray("*",i)===-1?i:[]}function o(e){var i=r.getFileExtension(e.name);return!i||!m.length||t.inArray(i,m)!==-1}function a(e,i){var n=[];t.each(e,function(e){var t=e.webkitGetAsEntry();if(t)if(t.isFile){var i=e.getAsFile();o(i)&&d.push(i)}else n.push(t)}),n.length?s(n,i):i()}function s(e,i){var n=[];t.each(e,function(e){n.push(function(t){u(e,t)})}),t.inSeries(n,function(){i()})}function u(e,t){e.isFile?e.file(function(e){o(e)&&d.push(e),t()},function(){t()}):e.isDirectory?c(e,t):t()}function c(e,t){function i(e){r.readEntries(function(t){t.length?([].push.apply(n,t),i(e)):e()},e)}var n=[],r=e.createReader();i(function(){s(n,t)})}var l,d=[],m=[];t.extend(this,{init:function(i){var r,s=this;l=i,m=e(l.accept),r=l.container,n.addEvent(r,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},s.uid),n.addEvent(r,"drop",function(e){e.preventDefault(),e.stopPropagation(),d=[],e.dataTransfer.items&&e.dataTransfer.items[0].webkitGetAsEntry?a(e.dataTransfer.items,function(){s.trigger("drop")}):(t.each(e.dataTransfer.files,function(e){o(e)&&d.push(e)}),s.trigger("drop"))},s.uid),n.addEvent(r,"dragenter",function(e){e.preventDefault(),e.stopPropagation(),s.trigger("dragenter")},s.uid),n.addEvent(r,"dragleave",function(e){e.preventDefault(),e.stopPropagation(),s.trigger("dragleave")},s.uid)},getFiles:function(){return d},destroy:function(){n.removeAllEvents(l&&i.get(l.container),this.uid),d=m=l=null}})}return e.FileDrop=o}),n("moxie/runtime/html5/file/FileReader",["moxie/runtime/html5/Runtime","moxie/core/utils/Encode","moxie/core/utils/Basic"],function(e,t,i){function n(){function e(e){return t.atob(e.substring(e.indexOf("base64,")+7))}var n,r=!1;i.extend(this,{read:function(e,t){var o=this;n=new window.FileReader,n.addEventListener("progress",function(e){o.trigger(e)}),n.addEventListener("load",function(e){o.trigger(e)}),n.addEventListener("error",function(e){o.trigger(e,n.error)}),n.addEventListener("loadend",function(){n=null}),"function"===i.typeOf(n[e])?(r=!1,n[e](t.getSource())):"readAsBinaryString"===e&&(r=!0,n.readAsDataURL(t.getSource()))},getResult:function(){return n&&n.result?r?e(n.result):n.result:null},abort:function(){n&&n.abort()},destroy:function(){n=null}})}return e.FileReader=n}),n("moxie/runtime/html5/xhr/XMLHttpRequest",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/core/utils/Url","moxie/file/File","moxie/file/Blob","moxie/xhr/FormData","moxie/core/Exceptions","moxie/core/utils/Env"],function(e,t,i,n,r,o,a,s,u){function c(){function e(e,t){var i,n,r=this;i=t.getBlob().getSource(),n=new window.FileReader,n.onload=function(){t.append(t.getBlobName(),new o(null,{type:i.type,data:n.result})),p.send.call(r,e,t)},n.readAsBinaryString(i)}function c(){return!window.XMLHttpRequest||"IE"===u.browser&&u.version<8?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}():new window.XMLHttpRequest}function l(e){var t=e.responseXML,i=e.responseText;return"IE"===u.browser&&i&&t&&!t.documentElement&&/[^\/]+\/[^\+]+\+xml/.test(e.getResponseHeader("Content-Type"))&&(t=new window.ActiveXObject("Microsoft.XMLDOM"),t.async=!1,t.validateOnParse=!1,t.loadXML(i)),t&&("IE"===u.browser&&0!==t.parseError||!t.documentElement||"parsererror"===t.documentElement.tagName)?null:t}function d(e){var t="----moxieboundary"+(new Date).getTime(),i="--",n="\r\n",r="",a=this.getRuntime();if(!a.can("send_binary_string"))throw new s.RuntimeError(s.RuntimeError.NOT_SUPPORTED_ERR);return m.setRequestHeader("Content-Type","multipart/form-data; boundary="+t),e.each(function(e,a){r+=e instanceof o?i+t+n+'Content-Disposition: form-data; name="'+a+'"; filename="'+unescape(encodeURIComponent(e.name||"blob"))+'"'+n+"Content-Type: "+(e.type||"application/octet-stream")+n+n+e.getSource()+n:i+t+n+'Content-Disposition: form-data; name="'+a+'"'+n+n+unescape(encodeURIComponent(e))+n}),r+=i+t+i+n}var m,f,p=this;t.extend(this,{send:function(i,r){var s=this,l="Mozilla"===u.browser&&u.version>=4&&u.version<7,p="Android Browser"===u.browser,h=!1;if(f=i.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),m=c(),m.open(i.method,i.url,i.async,i.user,i.password),r instanceof o)r.isDetached()&&(h=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),h=!0;else if((l||p)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return void e.call(s,i,r);if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}m.upload?(i.withCredentials&&(m.withCredentials=!0),m.addEventListener("load",function(e){s.trigger(e)}),m.addEventListener("error",function(e){s.trigger(e)}),m.addEventListener("progress",function(e){s.trigger(e)}),m.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):m.onreadystatechange=function(){switch(m.readyState){case 1:break;case 2:break;case 3:var e,t;try{n.hasSameOrigin(i.url)&&(e=m.getResponseHeader("Content-Length")||0),m.responseText&&(t=m.responseText.length)}catch(i){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:m.onreadystatechange=function(){},0===m.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(i.headers)||t.each(i.headers,function(e,t){m.setRequestHeader(t,e)}),""!==i.responseType&&"responseType"in m&&("json"!==i.responseType||u.can("return_response_type","json")?m.responseType=i.responseType:m.responseType="text"),h?m.sendAsBinary?m.sendAsBinary(r):!function(){for(var e=new Uint8Array(r.length),t=0;t<r.length;t++)e[t]=255&r.charCodeAt(t);m.send(e.buffer)}():m.send(r),s.trigger("loadstart")},getStatus:function(){try{if(m)return m.status}catch(e){}return 0},getResponse:function(e){var t=this.getRuntime();try{switch(e){case"blob":var n=new r(t.uid,m.response),o=m.getResponseHeader("Content-Disposition");if(o){var a=o.match(/filename=([\'\"'])([^\1]+)\1/);a&&(f=a[2])}return n.name=f,n.type||(n.type=i.getFileMime(f)),n;case"json":return u.can("return_response_type","json")?m.response:200===m.status&&window.JSON?JSON.parse(m.responseText):null;case"document":return l(m);default:return""!==m.responseText?m.responseText:null}}catch(e){return null}},getAllResponseHeaders:function(){try{return m.getAllResponseHeaders()}catch(e){}return""},abort:function(){m&&m.abort()},destroy:function(){p=f=null}})}return e.XMLHttpRequest=c}),n("moxie/runtime/html5/utils/BinaryReader",[],function(){return function(){function e(e,t){var i,n=o?0:-8*(t-1),a=0;for(i=0;i<t;i++)a|=r.charCodeAt(e+i)<<Math.abs(n+8*i);return a}function i(e,t,i){i=3===arguments.length?i:r.length-t-1,r=r.substr(0,t)+e+r.substr(i+t)}function n(e,t,n){var r,a="",s=o?0:-8*(n-1);for(r=0;r<n;r++)a+=String.fromCharCode(t>>Math.abs(s+8*r)&255);i(a,e,n)}var r,o=!1;return{II:function(e){return e===t?o:void(o=e)},init:function(e){o=!1,r=e},SEGMENT:function(e,t,n){switch(arguments.length){case 1:return r.substr(e,r.length-e-1);case 2:return r.substr(e,t);case 3:i(n,e,t);break;default:return r}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(i,r){return r===t?e(i,4):void n(i,r,4)},SLONG:function(t){var i=e(t,4);return i>2147483647?i-4294967296:i},STRING:function(t,i){var n="";for(i+=t;t<i;t++)n+=String.fromCharCode(e(t,1));return n}}}}),n("moxie/runtime/html5/image/JPEGHeaders",["moxie/runtime/html5/utils/BinaryReader"],function(e){return function t(i){var n,r,o,a=[],s=0;if(n=new e,n.init(i),65496===n.SHORT(0)){for(r=2;r<=i.length;)if(o=n.SHORT(r),o>=65488&&o<=65495)r+=2;else{if(65498===o||65497===o)break;s=n.SHORT(r+2)+2,o>=65505&&o<=65519&&a.push({hex:o,name:"APP"+(15&o),start:r,length:s,segment:n.SEGMENT(r,s)}),r+=s}return n.init(null),{headers:a,restore:function(e){var t,i;for(n.init(e),r=65504==n.SHORT(2)?4+n.SHORT(4):2,i=0,t=a.length;i<t;i++)n.SEGMENT(r,0,a[i].segment),r+=a[i].length;return e=n.SEGMENT(),n.init(null),e},strip:function(e){var i,r,o;for(r=new t(e),i=r.headers,r.purge(),n.init(e),o=i.length;o--;)n.SEGMENT(i[o].start,i[o].length,"");return e=n.SEGMENT(),n.init(null),e},get:function(e){for(var t=[],i=0,n=a.length;i<n;i++)a[i].name===e.toUpperCase()&&t.push(a[i].segment);return t},set:function(e,t){var i,n,r,o=[];for("string"==typeof t?o.push(t):o=t,i=n=0,r=a.length;i<r&&(a[i].name===e.toUpperCase()&&(a[i].segment=o[n],a[i].length=o[n].length,n++),!(n>=o.length));i++);},purge:function(){a=[],n.init(null),n=null}}}}}),n("moxie/runtime/html5/image/ExifParser",["moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader"],function(e,i){return function(){function n(e,i){var n,r,o,s,u,d,m,f,p=a.SHORT(e),h=[],g={};for(n=0;n<p;n++)if(m=d=e+12*n+2,o=i[a.SHORT(m)],o!==t){switch(s=a.SHORT(m+=2),u=a.LONG(m+=2),m+=4,h=[],s){case 1:case 7:for(u>4&&(m=a.LONG(m)+l.tiffHeader),r=0;r<u;r++)h[r]=a.BYTE(m+r);break;case 2:u>4&&(m=a.LONG(m)+l.tiffHeader),g[o]=a.STRING(m,u-1);continue;case 3:for(u>2&&(m=a.LONG(m)+l.tiffHeader),r=0;r<u;r++)h[r]=a.SHORT(m+2*r);break;case 4:for(u>1&&(m=a.LONG(m)+l.tiffHeader),r=0;r<u;r++)h[r]=a.LONG(m+4*r);break;case 5:for(m=a.LONG(m)+l.tiffHeader,r=0;r<u;r++)h[r]=a.LONG(m+4*r)/a.LONG(m+4*r+4);break;case 9:for(m=a.LONG(m)+l.tiffHeader,r=0;r<u;r++)h[r]=a.SLONG(m+4*r);break;case 10:for(m=a.LONG(m)+l.tiffHeader,r=0;r<u;r++)h[r]=a.SLONG(m+4*r)/a.SLONG(m+4*r+4);break;default:continue}f=1==u?h[0]:h,c.hasOwnProperty(o)&&"object"!=typeof f?g[o]=c[o][f]:g[o]=f;
+}return g}function r(){var e=l.tiffHeader;return a.II(18761==a.SHORT(e)),42===a.SHORT(e+=2)&&(l.IFD0=l.tiffHeader+a.LONG(e+=2),u=n(l.IFD0,s.tiff),"ExifIFDPointer"in u&&(l.exifIFD=l.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(l.gpsIFD=l.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,i){var n,r,o,u=0;if("string"==typeof t){var c=s[e.toLowerCase()];for(var d in c)if(c[d]===t){t=d;break}}n=l[e.toLowerCase()+"IFD"],r=a.SHORT(n);for(var m=0;m<r;m++)if(o=n+12*m+2,a.SHORT(o)==t){u=o+8;break}return!!u&&(a.LONG(u,i),!0)}var a,s,u,c,l={};return a=new i,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},c={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return l={tiffHeader:10},!(e===t||!e.length)&&(a.init(e),65505===a.SHORT(0)&&"EXIF\0"===a.STRING(4,5).toUpperCase()&&r())},TIFF:function(){return u},EXIF:function(){var t;if(t=n(l.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var i=0,r="";i<t.ExifVersion.length;i++)r+=String.fromCharCode(t.ExifVersion[i]);t.ExifVersion=r}return t},GPS:function(){var t;return t=n(l.gpsIFD,s.gps),t.GPSVersionID&&"array"===e.typeOf(t.GPSVersionID)&&(t.GPSVersionID=t.GPSVersionID.join(".")),t},setExif:function(e,t){return("PixelXDimension"===e||"PixelYDimension"===e)&&o("exif",e,t)},getBinary:function(){return a.SEGMENT()},purge:function(){a.init(null),a=u=null,l={}}}}}),n("moxie/runtime/html5/image/JPEG",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEGHeaders","moxie/runtime/html5/utils/BinaryReader","moxie/runtime/html5/image/ExifParser"],function(e,t,i,n,r){function o(o){function a(){for(var e,t,i=0;i<=u.length;){if(e=c.SHORT(i+=2),e>=65472&&e<=65475)return i+=5,{height:c.SHORT(i),width:c.SHORT(i+=2)};t=c.SHORT(i+=2),i+=t-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=m=l=d=c=null)}var u,c,l,d,m,f;if(u=o,c=new n,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new i(o),d=new r,f=!!d.init(l.get("app1")[0]),m=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:m&&m.width||0,height:m&&m.height||0,setExif:function(t,i){return!!f&&("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,i),void l.set("app1",d.getBinary()))},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),f&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),n("moxie/runtime/html5/image/PNG",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader"],function(e,t,i){function n(n){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,i,n,r;return t=u.LONG(e),i=u.STRING(e+=4,4),n=e+=4,r=u.LONG(e+t),{length:t,type:i,start:n,CRC:r}}var s,u,c,l,d;s=n,u=new i,u.init(s),function(){var t=0,i=0,n=[35152,20039,3338,6666];for(i=0;i<n.length;i++,t+=2)if(n[i]!=u.SHORT(t))throw new e.ImageError(e.ImageError.WRONG_FORMAT)}(),d=r.call(this),t.extend(this,{type:"image/png",size:s.length,width:d.width,height:d.height,purge:function(){o.call(this)}}),o.call(this)}return n}),n("moxie/runtime/html5/image/ImageInfo",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEG","moxie/runtime/html5/image/PNG"],function(e,t,i,n){return function(r){var o,a=[i,n];o=function(){for(var e=0;e<a.length;e++)try{return new a[e](r)}catch(e){}throw new t.ImageError(t.ImageError.WRONG_FORMAT)}(),e.extend(this,{type:"",size:0,width:0,height:0,setExif:function(){},writeHeaders:function(e){return e},stripHeaders:function(e){return e},purge:function(){}}),e.extend(this,o),this.purge=function(){o.purge(),o=null}}}),n("moxie/runtime/html5/image/MegaPixel",[],function(){function e(e,n,r){var o=e.naturalWidth,a=e.naturalHeight,s=r.width,u=r.height,c=r.x||0,l=r.y||0,d=n.getContext("2d");t(e)&&(o/=2,a/=2);var m=1024,f=document.createElement("canvas");f.width=f.height=m;for(var p=f.getContext("2d"),h=i(e,o,a),g=0;g<a;){for(var x=g+m>a?a-g:m,v=0;v<o;){var y=v+m>o?o-v:m;p.clearRect(0,0,m,m),p.drawImage(e,-v,-g);var w=v*s/o+c<<0,E=Math.ceil(y*s/o),R=g*u/a/h+l<<0,_=Math.ceil(x*u/a/h);d.drawImage(f,0,0,y,x,w,R,E,_),v+=m}g+=m}f=p=null}function t(e){var t=e.naturalWidth,i=e.naturalHeight;if(t*i>1048576){var n=document.createElement("canvas");n.width=n.height=1;var r=n.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function i(e,t,i){var n=document.createElement("canvas");n.width=1,n.height=i;var r=n.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,i).data,a=0,s=i,u=i;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}n=null;var l=u/i;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),n("moxie/runtime/html5/image/Image",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/utils/Encode","moxie/file/File","moxie/runtime/html5/image/ImageInfo","moxie/runtime/html5/image/MegaPixel","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,t,i,n,r,o,a,s,u){function c(){function e(){if(!y&&!x)throw new i.ImageError(i.DOMException.INVALID_STATE_ERR);return y||x}function c(e){return n.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+n.btoa(e)}function d(e){var t=this;x=new Image,x.onerror=function(){g.call(this),t.trigger("error",new i.ImageError(i.ImageError.WRONG_FORMAT))},x.onload=function(){t.trigger("load")},x.src=/^data:[^;]*;base64,/.test(e)?e:l(e,E.type)}function m(e,t){var n,r=this;return window.FileReader?(n=new FileReader,n.onload=function(){t(this.result)},n.onerror=function(){r.trigger("error",new i.FileException(i.FileException.NOT_READABLE_ERR))},n.readAsDataURL(e),void 0):t(e.getAsDataURL())}function f(i,n,r,o){var a,s,u,c,l,d,m=this,f=0,g=0;if(b=o,d=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,t.inArray(d,[5,6,7,8])!==-1){var x=i;i=n,n=x}return u=e(),s=r?Math.max:Math.min,a=s(i/u.width,n/u.height),a>1&&(!r||o)?void this.trigger("Resize"):(y||(y=document.createElement("canvas")),c=Math.round(u.width*a),l=Math.round(u.height*a),r?(y.width=i,y.height=n,c>i&&(f=Math.round((c-i)/2)),l>n&&(g=Math.round((l-n)/2))):(y.width=c,y.height=l),b||h(y.width,y.height,d),p.call(this,u,y,-f,-g,c,l),this.width=y.width,this.height=y.height,_=!0,void m.trigger("Resize"))}function p(e,t,i,n,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:i,y:n});else{var s=t.getContext("2d");s.drawImage(e,i,n,r,o)}}function h(e,t,i){switch(i){case 5:case 6:case 7:case 8:y.width=t,y.height=e;break;default:y.width=e,y.height=t}var n=y.getContext("2d");switch(i){case 2:n.translate(e,0),n.scale(-1,1);break;case 3:n.translate(e,t),n.rotate(Math.PI);break;case 4:n.translate(0,t),n.scale(1,-1);break;case 5:n.rotate(.5*Math.PI),n.scale(1,-1);break;case 6:n.rotate(.5*Math.PI),n.translate(0,-t);break;case 7:n.rotate(.5*Math.PI),n.translate(e,-t),n.scale(-1,1);break;case 8:n.rotate(-.5*Math.PI),n.translate(-e,0)}}function g(){v&&(v.purge(),v=null),w=x=y=E=null,_=!1}var x,v,y,w,E,R=this,_=!1,b=!0;t.extend(this,{loadFromBlob:function(e){var t=this,n=t.getRuntime(),r=!(arguments.length>1)||arguments[1];if(!n.can("access_binary"))throw new i.RuntimeError(i.RuntimeError.NOT_SUPPORTED_ERR);return E=e,e.isDetached()?(w=e.getSource(),void d.call(this,w)):void m.call(this,e.getSource(),function(e){r&&(w=c(e)),d.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,E=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?w=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t,i=this.getRuntime();return!v&&w&&i.can("access_image_binary")&&(v=new o(w)),t={width:e().width||0,height:e().height||0,type:E.type||s.getFileMime(E.name),size:w&&w.length||E.size||0,name:E.name||"",meta:v&&v.meta||this.meta||{}}},downsize:function(){f.apply(this,arguments)},getAsCanvas:function(){return y&&(y.id=this.uid+"_canvas"),y},getAsBlob:function(e,t){return e!==this.type&&f.call(this,this.width,this.height,!1),new r(null,{name:E.name||"",type:e,data:R.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!_)return x.src;if("image/jpeg"!==e)return y.toDataURL("image/png");try{return y.toDataURL("image/jpeg",t/100)}catch(e){return y.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!_)return w||(w=c(R.getAsDataURL(e,t))),w;if("image/jpeg"!==e)w=c(R.getAsDataURL(e,t));else{var i;t||(t=90);try{i=y.toDataURL("image/jpeg",t/100)}catch(e){i=y.toDataURL("image/jpeg")}w=c(i),v&&(w=v.stripHeaders(w),b&&(v.meta&&v.meta.exif&&v.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),w=v.writeHeaders(w)),v.purge(),v=null)}return _=!1,w},destroy:function(){R=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),n("moxie/runtime/flash/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/runtime/Runtime"],function(e,t,i,n,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(t){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c,l=this;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===l.mode},access_image_binary:function(e){return e&&"browser"===l.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===l.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return!("json"!==t||!window.JSON)||(!e.arrayDiff(t,["","text","document"])||"browser"===l.mode)},return_status_code:function(t){return"browser"===l.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===l.mode},send_browser_cookies:function(e){return e&&"browser"===l.mode},send_custom_headers:function(e){return e&&"browser"===l.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:function(e){return e&&"browser"===l.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===l.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return i.get(this.uid)},shimExec:function(e,t){var i=[].slice.call(arguments,2);return l.getShim().exec(this.uid,e,t,i)},init:function(){var i,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),i='<object id="'+this.uid+'" type="application/x-shockwave-flash" data="'+a.swf_url+'" ',"IE"===t.browser&&(i+='classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '),i+='width="100%" height="100%" style="outline:0"><param name="movie" value="'+a.swf_url+'" /><param name="flashvars" value="uid='+escape(this.uid)+"&target="+t.global_event_dispatcher+'" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>',"IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=i,r=o=null):o.innerHTML=i,c=setTimeout(function(){l&&!l.initialized&&l.trigger("Error",new n.RuntimeError(n.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(l),clearTimeout(c),a=c=e=l=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),n("moxie/runtime/flash/file/Blob",["moxie/runtime/flash/Runtime","moxie/file/Blob"],function(e,t){var i={slice:function(e,i,n,r){var o=this.getRuntime();return i<0?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),n<0?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),e=o.shimExec.call(this,"Blob","slice",i,n,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=i}),n("moxie/runtime/flash/file/FileInput",["moxie/runtime/flash/Runtime"],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),n("moxie/runtime/flash/file/FileReader",["moxie/runtime/flash/Runtime","moxie/core/utils/Encode"],function(e,t){function i(e,i){switch(i){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var n="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(n="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(n+=i(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return n},destroy:function(){n=null}};return e.FileReader=r}),n("moxie/runtime/flash/file/FileReaderSync",["moxie/runtime/flash/Runtime","moxie/core/utils/Encode"],function(e,t){function i(e,i){switch(i){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var n={read:function(e,t){var n,r=this.getRuntime();return(n=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(n="data:"+(t.type||"")+";base64,"+n),i(n,e,t.type)):null}};return e.FileReaderSync=n}),n("moxie/runtime/flash/xhr/XMLHttpRequest",["moxie/runtime/flash/Runtime","moxie/core/utils/Basic","moxie/file/Blob","moxie/file/File","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/runtime/Transporter"],function(e,t,i,n,r,o,a){var s={send:function(e,n){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,n)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),n=null,r()}function u(e,t){var i=new a;i.bind("TransportingComplete",function(){t(this.result)}),i.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),n instanceof o){var d;if(n.each(function(e,t){e instanceof i?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),n.hasBlob()){var m=n.getBlob();m.isDetached()?u(m,function(e){m.destroy(),s(d,e)}):s(d,m)}else n=null,r()}else n instanceof i?n.isDetached()?u(n,function(e){n.destroy(),n=e.uid,r()}):(n=n.uid,r()):r()},getResponse:function(e){var i,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new n(a.uid,o),"blob"===e)return o;try{if(i=new r,~t.inArray(e,["","text"]))return i.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(i.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),n("moxie/runtime/flash/runtime/Transporter",["moxie/runtime/flash/Runtime","moxie/file/Blob"],function(e,t){var i={getAsBlob:function(e){var i=this.getRuntime(),n=i.shimExec.call(this,"Transporter","getAsBlob",e);return n?new t(i.uid,n):null}};return e.Transporter=i}),n("moxie/runtime/flash/image/Image",["moxie/runtime/flash/Runtime","moxie/core/utils/Basic","moxie/runtime/Transporter","moxie/file/Blob","moxie/file/FileReaderSync"],function(e,t,i,n,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(n,"Image","loadFromBlob",e.uid),n=r=null}var n=this,r=n.getRuntime();if(e.isDetached()){var o=new i;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var i=this.getRuntime(),r=i.shimExec.call(this,"Image","getAsBlob",e,t);return r?new n(i.uid,r):null},getAsDataURL:function(){var e,t=this.getRuntime(),i=t.Image.getAsBlob.apply(this,arguments);return i?(e=new r,e.readAsDataURL(i)):null}};return e.Image=o}),n("moxie/runtime/silverlight/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/runtime/Runtime"],function(e,t,i,n,r){function o(e){var t,i,n,r,o,a=!1,s=null,u=0;try{try{s=new ActiveXObject("AgControl.AgControl"),s.IsVersionSupported(e)&&(a=!0),s=null}catch(s){var c=navigator.plugins["Silverlight Plug-In"];if(c){for(t=c.description,"1.0.30226.2"===t&&(t="2.0.30226.2"),i=t.split(".");i.length>3;)i.pop();for(;i.length<4;)i.push(0);for(n=e.split(".");n.length>4;)n.pop();do r=parseInt(n[u],10),o=parseInt(i[u],10),u++;while(u<n.length&&r===o);r<=o&&!isNaN(r)&&(a=!0)}}}catch(e){a=!1}return a}function a(a){var c,l=this;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===l.mode},return_response_type:function(e){return"json"!==e||!!window.JSON},return_status_code:function(t){return"client"===l.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===l.mode},send_custom_headers:function(e){return e&&"client"===l.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===l.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return i.get(this.uid).content.Moxie},shimExec:function(e,t){var i=[].slice.call(arguments,2);return l.getShim().exec(this.uid,e,t,i)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='<object id="'+this.uid+'" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;"><param name="source" value="'+a.xap_url+'"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="uid='+this.uid+",target="+t.global_event_dispatcher+'"/></object>',c=setTimeout(function(){l&&!l.initialized&&l.trigger("Error",new n.RuntimeError(n.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(l),clearTimeout(c),a=c=e=l=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),n("moxie/runtime/silverlight/file/Blob",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/Blob"],function(e,t,i){return e.Blob=t.extend({},i)}),n("moxie/runtime/silverlight/file/FileInput",["moxie/runtime/silverlight/Runtime"],function(e){var t={init:function(e){function t(e){for(var t="",i=0;i<e.length;i++)t+=(""!==t?"|":"")+e[i].title+" | *."+e[i].extensions.replace(/,/g,";*.");return t}this.getRuntime().shimExec.call(this,"FileInput","init",t(e.accept),e.name,e.multiple),this.trigger("ready")}};return e.FileInput=t}),n("moxie/runtime/silverlight/file/FileDrop",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Dom","moxie/core/utils/Events"],function(e,t,i){var n={init:function(){var e,n=this,r=n.getRuntime();return e=r.getShimContainer(),i.addEvent(e,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},n.uid),i.addEvent(e,"dragenter",function(e){e.preventDefault();var i=t.get(r.uid).dragEnter(e);i&&e.stopPropagation()},n.uid),i.addEvent(e,"drop",function(e){e.preventDefault();var i=t.get(r.uid).dragDrop(e);i&&e.stopPropagation()},n.uid),r.shimExec.call(this,"FileDrop","init")}};return e.FileDrop=n}),n("moxie/runtime/silverlight/file/FileReader",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/FileReader"],function(e,t,i){return e.FileReader=t.extend({},i)}),n("moxie/runtime/silverlight/file/FileReaderSync",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/FileReaderSync"],function(e,t,i){return e.FileReaderSync=t.extend({},i)}),n("moxie/runtime/silverlight/xhr/XMLHttpRequest",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/xhr/XMLHttpRequest"],function(e,t,i){return e.XMLHttpRequest=t.extend({},i)}),n("moxie/runtime/silverlight/runtime/Transporter",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/runtime/Transporter"],function(e,t,i){return e.Transporter=t.extend({},i)}),n("moxie/runtime/silverlight/image/Image",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/image/Image"],function(e,t,i){return e.Image=t.extend({},i,{getInfo:function(){var e=this.getRuntime(),i=["tiff","exif","gps"],n={meta:{}},r=e.shimExec.call(this,"Image","getInfo");return r.meta&&t.each(i,function(e){var t,i,o,a,s=r.meta[e];if(s&&s.keys)for(n.meta[e]={},i=0,o=s.keys.length;i<o;i++)t=s.keys[i],a=s[t],a&&(/^(\d|[1-9]\d+)$/.test(a)?a=parseInt(a,10):/^\d*\.\d+$/.test(a)&&(a=parseFloat(a)),n.meta[e][t]=a)}),n.width=parseInt(r.width,10),n.height=parseInt(r.height,10),n.size=parseInt(r.size,10),n.type=r.type,n.name=r.name,n}})}),n("moxie/runtime/html4/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(e,t,i,n){function r(t){var r=this,s=i.capTest,u=i.capTrue;i.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(n.can("create_canvas")||n.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===n.browser&&n.version>=28||"IE"===n.browser&&n.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&n.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return!("json"!==t||!window.JSON)||!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return n.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===n.browser&&n.version>=4||"Opera"===n.browser&&n.version>=12||!!~e.inArray(n.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return i.addConstructor(o,r),a}),n("moxie/runtime/html4/file/FileInput",["moxie/runtime/html4/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,t,i,n,r,o){function a(){function e(){var r,l,d,m,f,p,h=this,g=h.getRuntime();p=t.guid("uid_"),r=g.getShimContainer(),a&&(d=i.get(a+"_form"),d&&t.extend(d.style,{top:"100%"})),m=document.createElement("form"),m.setAttribute("id",p+"_form"),m.setAttribute("method","post"),m.setAttribute("enctype","multipart/form-data"),m.setAttribute("encoding","multipart/form-data"),t.extend(m.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),f=document.createElement("input"),f.setAttribute("id",p),f.setAttribute("type","file"),f.setAttribute("name",s.name||"Filedata"),f.setAttribute("accept",c.join(",")),t.extend(f.style,{fontSize:"999px",opacity:0}),m.appendChild(f),r.appendChild(m),t.extend(f.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(f.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),f.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},u=[t],this.onchange=function(){},e.call(h),h.bind("change",function e(){var t,n=i.get(p),r=i.get(p+"_form");h.unbind("change",e),h.files.length&&n&&r&&(t=h.files[0],n.setAttribute("id",t.uid),r.setAttribute("id",t.uid+"_form"),r.setAttribute("target",t.uid+"_iframe")),n=r=null},998),f=m=null,h.trigger("change"))},g.can("summon_file_dialog")&&(l=i.get(s.browse_button),n.removeEvent(l,"click",h.uid),n.addEvent(l,"click",function(e){f&&!f.disabled&&f.click(),e.preventDefault()},h.uid)),a=p,r=d=l=null}var a,s,u=[],c=[];t.extend(this,{init:function(t){var o,a=this,u=a.getRuntime();s=t,c=t.accept.mimes||r.extList2mimes(t.accept,u.can("filter_by_extension")),o=u.getShimContainer(),function(){var e,r,s;e=i.get(t.browse_button),u.can("summon_file_dialog")&&("static"===i.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(i.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,o.style.zIndex=r-1),s=u.can("summon_file_dialog")?e:o,n.addEvent(s,"mouseover",function(){a.trigger("mouseenter")},a.uid),n.addEvent(s,"mouseout",function(){a.trigger("mouseleave")},a.uid),n.addEvent(s,"mousedown",function(){a.trigger("mousedown")},a.uid),n.addEvent(i.get(t.container),"mouseup",function(){a.trigger("mouseup")},a.uid),e=null}(),e.call(this),o=null,a.trigger({type:"ready",async:!0})},getFiles:function(){return u},disable:function(e){var t;(t=i.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),r=e.getShimContainer();n.removeAllEvents(r,this.uid),n.removeAllEvents(s&&i.get(s.container),this.uid),n.removeAllEvents(s&&i.get(s.browse_button),this.uid),r&&(r.innerHTML=""),t.removeInstance(this.uid),a=u=c=s=r=t=null}})}return e.FileInput=a}),n("moxie/runtime/html4/file/FileReader",["moxie/runtime/html4/Runtime","moxie/runtime/html5/file/FileReader"],function(e,t){return e.FileReader=t}),n("moxie/runtime/html4/xhr/XMLHttpRequest",["moxie/runtime/html4/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Url","moxie/core/Exceptions","moxie/core/utils/Events","moxie/file/Blob","moxie/xhr/FormData"],function(e,t,i,n,r,o,a,s){function u(){function e(e){var t,n,r,a,s=this,u=!1;if(l){if(t=l.id.replace(/_iframe$/,""),n=i.get(t+"_form")){for(r=n.getElementsByTagName("input"),a=r.length;a--;)switch(r[a].getAttribute("type")){case"hidden":r[a].parentNode.removeChild(r[a]);break;case"file":u=!0}r=[],u||n.parentNode.removeChild(n),n=null}setTimeout(function(){o.removeEvent(l,"load",s.uid),l.parentNode&&l.parentNode.removeChild(l);var t=s.getRuntime().getShimContainer();t.children.length||t.parentNode.removeChild(t),t=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,m){function f(){var i=y.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='<iframe id="'+p+'_iframe" name="'+p+'_iframe" src="javascript:&quot;&quot;" style="display:none"></iframe>',l=r.firstChild,i.appendChild(l),o.addEvent(l,"load",function(){var i;try{i=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(i.title)?u=i.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(i.body.innerHTML),v.trigger({type:"progress",loaded:c.length,total:c.length}),x&&v.trigger({type:"uploadprogress",loaded:x.size||1025,total:x.size||1025}))}catch(t){if(!n.hasSameOrigin(d.url))return void e.call(v,function(){v.trigger("error")});u=404}e.call(v,function(){v.trigger("load")})},v.uid)}var p,h,g,x,v=this,y=v.getRuntime();if(u=c=null,m instanceof s&&m.hasBlob()){if(x=m.getBlob(),p=x.uid,g=i.get(p),h=i.get(p+"_form"),!h)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else p=t.guid("uid_"),h=document.createElement("form"),h.setAttribute("id",p+"_form"),h.setAttribute("method",d.method),h.setAttribute("enctype","multipart/form-data"),h.setAttribute("encoding","multipart/form-data"),h.setAttribute("target",p+"_iframe"),y.getShimContainer().appendChild(h);m instanceof s&&m.each(function(e,i){if(e instanceof a)g&&g.setAttribute("name",i);else{var n=document.createElement("input");t.extend(n,{type:"hidden",name:i,value:e}),g?h.insertBefore(n,g):h.appendChild(n)}}),h.setAttribute("action",d.url),f(),h.submit(),v.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{
+return JSON.parse(c.replace(/^\s*<pre[^>]*>/,"").replace(/<\/pre>\s*$/,""))}catch(e){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),n("moxie/runtime/html4/image/Image",["moxie/runtime/html4/Runtime","moxie/runtime/html5/image/Image"],function(e,t){return e.Image=t}),o(["moxie/core/utils/Basic","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/file/File","moxie/file/FileInput","moxie/file/FileDrop","moxie/runtime/RuntimeTarget","moxie/file/FileReader","moxie/core/utils/Url","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"])}(this),function(){"use strict";var e={},t=moxie.core.utils.Basic.inArray;return function i(n){var r,o;for(r in n)o=typeof n[r],"object"!==o||~t(r,["Exceptions","Env","Mime"])?"function"===o&&(e[r]=n[r]):i(n[r])}(window.moxie),e.Env=window.moxie.core.utils.Env,e.Mime=window.moxie.core.utils.Mime,e.Exceptions=window.moxie.core.Exceptions,window.mOxie=e,window.o||(window.o=e),e}();
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.min.js
index 4a7b56480591e4d1893c47c001b1e675e7812a05..a0139aa2734be166e9cd55ff219a19f8513d5d16 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(6(2M,o,1d){j 1F=2M.5h,2F={};6 3o(9){j T=9.1q,1A={};6 2E(1e,l,51){j 3K={2e:\'3d\',5U:\'2g\',5w:\'2g\',5S:\'5Y\',22:\'4q\',4l:\'3t\',2v:\'3t\',31:\'5P\',5K:\'5J\',5H:\'5l\'};7(3K[1e]){1A[3K[1e]]=l}t 7(!51){1A[1e]=l}}7(1C(T)===\'4H\'){8.x(T.3r(/\\s*,\\s*/),6(1e){2E(1e,F)})}t 7(1C(T)===\'41\'){8.x(T,6(l,1e){2E(1e,l)})}t 7(T===F){7(!9.28){1A.2g=F}7(9.2k>0){1A.3d=F}7(9.1w.2r){1A.2g=F}8.x(9,6(l,1e){2E(1e,!!l,F)})}r 1A}j 8={5L:\'2.1.1\',1n:1,1u:2,2D:1,3z:2,2z:4,2w:5,5N:-29,4V:-5M,5X:-43,5u:-4Q,2L:-5b,4f:-5s,4u:-5T,4c:-5z,5I:-5W,5e:-5k,5f:-5d,5r:o.5p,4M:o.4M,1z:o.1z,Z:o.Z,2I:o.2I,2u:6 2u(1S){j 2l=[],18;7(o.1z(1S)!==\'3F\'){1S=[1S]}j i=1S.B;4h(i--){18=o.2u(1S[i]);7(18){2l.1c(18)}}r 2l.B?2l:X},x:o.x,4P:o.4P,4J:o.4J,5C:6(2s){j 3x={\'<\':\'5A\',\'>\':\'5x\',\'&\':\'5F\',\'"\':\'5G\',\'\\\'\':\'#39\'},53=/[<>&\\"\\\']/g;r 2s?(\'\'+2s).1J(53,6(2t){r 3x[2t]?\'&\'+3x[2t]+\';\':2t}):2s},56:o.56,26:o.26,4z:o.4z,S:o.S,4o:o.4o,45:o.45,2p:o.2p,2q:o.2q,44:o.44,3V:o.3V,4v:o.4v,3Q:o.3Q,5y:6(m){j i,2d;2d=[/[\\43-\\5B]/g,\'A\',/[\\5E-\\5D]/g,\'a\',/\\5O/g,\'C\',/\\62/g,\'c\',/[\\61-\\60]/g,\'E\',/[\\63-\\64]/g,\'e\',/[\\66-\\65]/g,\'I\',/[\\5Z-\\5R]/g,\'i\',/\\5Q/g,\'N\',/\\5V/g,\'n\',/[\\67-\\5c]/g,\'O\',/[\\58-\\59]/g,\'o\',/[\\5a-\\5v]/g,\'U\',/[\\5q-\\5o]/g,\'u\'];1E(i=0;i<2d.B;i+=2){m=m.1J(2d[i],2d[i+1])}m=m.1J(/\\s+/g,\'5t\');m=m.1J(/[^a-5n-5m\\-\\.]+/5g,\'\');r m},4K:6(1b,3S){j 2b=\'\';8.x(3S,6(l,m){2b+=(2b?\'&\':\'\')+3N(m)+\'=\'+3N(l)});7(2b){1b+=(1b.5i(\'?\')>0?\'&\':\'?\')+2b}r 1b},5j:6(k){7(k===1d||/\\D/.3q(k)){r 8.S(\'N/A\')}6 1M(4G,3g){r Q.1M(4G*Q.3h(10,3g))/Q.3h(10,3g)}j 1s=Q.3h(2c,4);7(k>1s){r 1M(k/1s,1)+" "+8.S(\'77\')}7(k>(1s/=2c)){r 1M(k/1s,1)+" "+8.S(\'76\')}7(k>(1s/=2c)){r 1M(k/1s,1)+" "+8.S(\'75\')}7(k>2c){r Q.1M(k/2c)+" "+8.S(\'78\')}r k+" "+8.S(\'b\')},3v:o.79,7c:6(3e,1i){j f,R;f=V 8.2J(3e);R=o.1t.7b(f.3X().1q,1i||3e.1i);f.11();r R},2o:6(m,v){2F[m]=v}};8.2o(\'1B\',6(M,3,v){7(M.B&&!M.3T.3q(3.m)){d.q(\'1k\',{1r:8.4u,1v:8.S(\'1x 7a 1l.\'),3:3});v(14)}t{v(F)}});8.2o(\'1R\',6(2a,3,v){j 1d;2a=8.3v(2a);7(3.k!==1d&&2a&&3.k>2a){d.q(\'1k\',{1r:8.4f,1v:8.S(\'1x k 1l.\'),3:3});v(14)}t{v(F)}});8.2o(\'1Z\',6(l,3,v){7(l){j 2n=d.p.B;4h(2n--){7(3.m===d.p[2n].m&&3.k===d.p[2n].k){d.q(\'1k\',{1r:8.4c,1v:8.S(\'74 3 1l.\'),3:3});v(14);r}}}v(F)});8.2J=6(1H){j 1X=8.2I(),9,p=[],1j={},1f=[],1D=[],2m,z,1Q=14,w;6 2O(){j 3,3b=0,i;7(d.12==8.1u){1E(i=0;i<p.B;i++){7(!3&&p[i].H==8.2D){3=p[i];7(d.q("4b",3)){3.H=8.3z;d.q("4j",3)}}t{3b++}}7(3b==p.B){7(d.12!==8.1n){d.12=8.1n;d.q("2H")}d.q("73",p)}}}6 3y(3){3.1N=3.k>0?Q.1W(3.K/3.k*29):29;2i()}6 2i(){j i,3;z.3a();1E(i=0;i<p.B;i++){3=p[i];7(3.k!==1d){z.k+=3.2A;z.K+=3.K*3.2A/3.k}t{z.k=1d}7(3.H==8.2w){z.2B++}t 7(3.H==8.2z){z.3f++}t{z.3j++}}7(z.k===1d){z.1N=p.B>0?Q.1W(z.2B/p.B*29):0}t{z.3i=Q.1W(z.K/((+V 3u()-2m||1)/4X.0));z.1N=z.k>0?Q.1W(z.K/z.k*29):0}}6 2N(){j 3c=1f[0]||1D[0];7(3c){r 3c.6X().1X}r 14}6 3M(3,4a){7(3.19){j 1g=o.1t.2h(3.19);7(1g){r 1g.27(4a)}}r 14}6 3W(){d.J(\'4C\',3Y);d.J(\'3G\',4U);d.J(\'4b\',40);d.J(\'4j\',57);d.J(\'2y\',4y);d.J(\'2H\',4x);d.J(\'32\',2i);d.J(\'1k\',4w);d.J(\'4E\',4Z);d.J(\'2T\',4A)}6 3I(9,v){j h=d,1m=0,1a=[];j 1H={6W:9.M.1B,2W:9.1i,2Y:9.1q,1j:1j,30:9.1Y,3m:9.21};8.x(9.1i.3r(/\\s*,\\s*/),6(R){7(9[R]){1H[R]=9[R]}});7(9.23){8.x(9.23,6(18){1a.1c(6(v){j 13=V o.6V(8.Z({},1H,{m:9.3B,7e:9.22,38:9.38,23:18}));13.4k=6(){j 1g=o.1t.2h(d.19);o.Z(h.T,{2e:1g.27(\'3d\'),28:1g.27(\'6Y\'),22:1g.27(\'4q\')});1m++;1f.1c(d);v()};13.6Z=6(){h.3H(d.p)};13.J(\'4r 4s 4t 4p\',6(e){7(!1Q){7(9.3k){7(\'4r\'===e.W){o.2p(18,9.3k)}t 7(\'4s\'===e.W){o.2q(18,9.3k)}}7(9.3s){7(\'4t\'===e.W){o.2p(18,9.3s)}t 7(\'4p\'===e.W){o.2q(18,9.3s)}}}});13.J(\'1l 4n\',6(){13=X;v()});13.L()})})}7(9.2v){8.x(9.2v,6(18){1a.1c(6(v){j 1o=V o.72(8.Z({},1H,{71:18}));1o.4k=6(){j 1g=o.1t.2h(d.19);h.T.4l=1g.27(\'3t\');1m++;1D.1c(d);v()};1o.70=6(){h.3H(d.p)};1o.J(\'1l 4n\',6(){1o=X;v()});1o.L()})})}o.3C(1a,6(){7(1C(v)===\'6\'){v(1m)}})}6 52(y,1K,v){j 1I=V o.7d();7n{1I.4T=6(){1I.7m(1K.7p,1K.7f,1K.4g,1K.48)};1I.7i=6(){v(d.7k(y.W,1K.7g));d.11()};1I.4D=6(){v(y)};1I.7o(y)}7h(7l){v(y)}}6 2K(G,l,L){j h=d,3p=14;6 3n(G,l,L){j 42=9[G];7j(G){16\'1R\':7(G===\'1R\'){9.1R=9.M.1R=l}1O;16\'2k\':7(l=8.3v(l)){9[G]=l}1O;16\'M\':7(8.1z(l)===\'3F\'){l={1B:l}}7(L){8.Z(9.M,l)}t{9.M=l}7(l.1B){9.M.1B.3T=(6(M){j 2x=[];8.x(M,6(3U){8.x(3U.6T.3r(/,/),6(1P){7(/^\\s*\\*\\s*$/.3q(1P)){2x.1c(\'\\\\.*\')}t{2x.1c(\'\\\\.\'+1P.1J(V 3O(\'[\'+(\'/^$.*+?|()[]{}\\\\\'.1J(/./g,\'\\\\$&\'))+\']\',\'g\'),\'\\\\$&\'))}})});r V 3O(\'(\'+2x.6o(\'|\')+\')$\',\'i\')}(9.M.1B))}1O;16\'1w\':7(L){8.Z(9.1w,l,{2r:F})}t{9.1w=l}1O;16\'1Z\':9.1Z=9.M.1Z=!!l;1O;16\'23\':16\'2v\':l=8.2u(l);16\'38\':16\'1i\':16\'22\':16\'1Y\':16\'21\':9[G]=l;7(!L){3p=F}1O;6U:9[G]=l}7(!L){h.q(\'6n\',G,l,42)}}7(1C(G)===\'41\'){8.x(G,6(l,G){3n(G,l,L)})}t{3n(G,l,L)}7(L){9.1q=3o(8.Z({},9));1j=3o(8.Z({},9,{1q:F}))}t 7(3p){h.q(\'2T\');3I.17(h,9,6(1m){7(1m){h.R=o.1t.2h(2N()).W;h.q(\'20\',{R:h.R});h.q(\'4R\')}t{h.q(\'1k\',{1r:8.2L,1v:8.S(\'20 1l.\')})}})}}6 3Y(f,3Z){[].1c.4B(p,3Z);f.q(\'32\');f.36()}6 40(f,3){7(9.6m){j 3w=3.m.6l(/\\.([^.]+)$/),1P="6p";7(3w){1P=3w[1]}3.35=3.Y+\'.\'+1P}}6 57(f,3){j 1b=f.9.1b,1h=f.9.2k,2U=f.9.3E,T=f.T,P=0,y;7(3.K){P=3.K=1h*Q.6q(3.K/1h)}6 34(){7(2U-->0){1F(2j,4X)}t{3.K=P;f.q(\'1k\',{1r:8.4V,1v:8.S(\'6u 1k.\'),3:3,2Q:w.2P,H:w.H,37:w.33()})}}6 2j(){j 1p,1T,15,1V;7(3.H==8.2w||3.H==8.2z||f.12==8.1n){r}15={m:3.35||3.m};7(1h&&T.2e&&y.k>1h){1V=Q.2S(1h,y.k-P);1p=y.4F(P,P+1V)}t{1V=y.k;1p=y}7(1h&&T.2e){7(f.9.4e){15.6t=Q.1W(P/1h);15.2e=Q.1W(y.k/1h)}t{15.P=P;15.z=y.k}}w=V o.6s();7(w.50){w.50.6r=6(e){3.K=Q.2S(3.k,P+e.K);f.q(\'2y\',3)}}w.4T=6(){7(w.H>=4Q){34();r}2U=f.9.3E;7(1V<y.k){1p.11();P+=1V;3.K=Q.2S(P,y.k);f.q(\'6k\',3,{P:3.K,z:y.k,2Q:w.2P,H:w.H,37:w.33()});7(o.6j.68===\'6b 6a\'){f.q(\'2y\',3)}}t{3.K=3.k}1p=1T=X;7(!P||P>=y.k){7(3.k!=3.2A){y.11();y=X}f.q(\'2y\',3);3.H=8.2w;f.q(\'4E\',3,{2Q:w.2P,H:w.H,37:w.33()})}t{1F(2j,1)}};w.4D=6(){34()};w.69=6(){d.11();w=X};7(f.9.28&&T.28){15.m=3.35||3.m;w.4O("4N",1b,F);8.x(f.9.31,6(l,m){w.2X(m,l)});1T=V o.6d();8.x(8.Z(15,f.9.4L),6(l,m){1T.4I(m,l)});1T.4I(f.9.3B,1p);w.55(1T,{2W:f.9.1i,2Y:f.9.1q,1j:1j,30:f.9.1Y,3m:f.9.21})}t{1b=8.4K(f.9.1b,8.Z(15,f.9.4L));w.4O("4N",1b,F);w.2X(\'6e-6i\',\'6h/6g-6f\');8.x(f.9.31,6(l,m){w.2X(m,l)});w.55(1p,{2W:f.9.1i,2Y:f.9.1q,1j:1j,30:f.9.1Y,3m:f.9.21})}}y=3.1L();7(f.9.1w.2r&&3M(y,\'2g\')&&!!~o.26(y.W,[\'4S/6v\',\'4S/6w\'])){52.17(d,y,f.9.1w,6(3A){y=3A;3.k=3A.k;2j()})}t{2j()}}6 4y(f,3){3y(3)}6 4x(f){7(f.12==8.1u){2m=(+V 3u())}t 7(f.12==8.1n){1E(j i=f.p.B-1;i>=0;i--){7(f.p[i].H==8.3z){f.p[i].H=8.2D;2i()}}}}6 4U(){7(w){w.6M()}}6 4Z(f){2i();1F(6(){2O.17(f)},1)}6 4w(f,1G){7(1G.3){1G.3.H=8.2z;3y(1G.3);7(f.12==8.1u){f.q(\'3G\');1F(6(){2O.17(f)},1)}}}6 4A(f){f.2Z();8.x(p,6(3){3.11()});p=[];7(1f.B){8.x(1f,6(13){13.11()});1f=[]}7(1D.B){8.x(1D,6(1o){1o.11()});1D=[]}1j={};1Q=14;2m=w=X;z.3a()}9={1i:o.1t.6L,3E:0,2k:0,28:F,22:F,3B:\'3\',1Y:\'47/4m.6K\',21:\'47/4m.6J\',M:{1B:[],1Z:14,1R:0},1w:{2r:14,48:F,4g:14},4e:F};2K.17(d,1H,X,F);z=V 8.4d();8.Z(d,{Y:1X,1X:1X,12:8.1n,T:{},R:X,p:p,9:9,z:z,L:6(){j h=d;7(1C(9.3J)=="6"){9.3J(h)}t{8.x(9.3J,6(1U,m){h.J(m,1U)})}7(!9.23||!9.1b){d.q(\'1k\',{1r:8.2L,1v:8.S(\'20 1l.\')});r}3W.17(d);3I.17(d,9,6(1m){7(1C(9.L)=="6"){9.L(h)}t{8.x(9.L,6(1U,m){h.J(m,1U)})}7(1m){h.R=o.1t.2h(2N()).W;h.q(\'20\',{R:h.R});h.q(\'4R\')}t{h.q(\'1k\',{1r:8.2L,1v:8.S(\'20 1l.\')})}})},2K:6(G,l){2K.17(d,G,l,!d.R)},3X:6(G){7(!G){r 9}r 9[G]},36:6(){7(1f.B){8.x(1f,6(13){13.q(\'4i\')})}d.q(\'4i\')},24:6(){7(d.12!=8.1u){d.12=8.1u;d.q(\'2H\');2O.17(d)}},2Z:6(){7(d.12!=8.1n){d.12=8.1n;d.q(\'2H\');d.q(\'3G\')}},6N:6(){1Q=2R[0]!==1d?2R[0]:F;7(1f.B){8.x(1f,6(13){13.6O(1Q)})}d.q(\'6S\',1Q)},6R:6(Y){j i;1E(i=p.B-1;i>=0;i--){7(p[i].Y===Y){r p[i]}}},3H:6(3,2f){j h=d,1a=[],p=[],19;6 4Y(3,v){j 1a=[];o.x(h.9.M,6(3R,m){7(2F[m]){1a.1c(6(v){2F[m].17(h,3R,3,6(3P){v(!3P)})})}});o.3C(1a,v)}6 1y(3){j W=o.1z(3);7(3 3D o.1x){7(!3.19&&!3.6Q()){7(!19){r 14}3.19=19;3.6P(19)}1y(V 8.1x(3))}t 7(3 3D o.6I){1y(3.1L());3.11()}t 7(3 3D 8.1x){7(2f){3.m=2f}1a.1c(6(v){4Y(3,6(1G){7(!1G){p.1c(3);h.q("6H",3)}1F(v,1)})})}t 7(o.26(W,[\'3\',\'y\'])!==-1){1y(V o.1x(X,3))}t 7(W===\'6A\'&&o.1z(3.p)===\'6z\'){o.x(3.p,1y)}t 7(W===\'3F\'){2f=X;o.x(3,1y)}}19=2N();1y(3);7(1a.B){o.3C(1a,6(){7(p.B){h.q("4C",p)}})}},6y:6(3){j Y=1C(3)===\'4H\'?3:3.Y;1E(j i=p.B-1;i>=0;i--){7(p[i].Y===Y){r d.2C(i,1)[0]}}},2C:6(24,B){j 2G=p.2C(24===1d?0:24,B===1d?p.B:B);j 2V=14;7(d.12==8.1u){2V=F;d.2Z()}d.q("6x",2G);8.x(2G,6(3){3.11()});d.q("32");d.36();7(2V){d.24()}r 2G},J:6(m,1U,54){j h=d;8.2J.4W.J.17(d,m,6(){j 15=[].4F.17(2R);15.2C(0,1,h);r 1U.4B(d,15)},0,54)},11:6(){d.q(\'2T\');9=z=X;d.6B()}})};8.2J.4W=o.6C.6G;8.1x=(6(){j 25={};6 49(3){8.Z(d,{Y:8.2I(),m:3.m||3.2f,W:3.W||\'\',k:3.k||3.46,2A:3.k||3.46,K:0,1N:0,H:8.2D,3L:3.3L||(V 3u()).6F(),6E:6(){j 3=d.1L().1L();r o.26(o.1z(3),[\'y\',\'3\'])!==-1?3:X},1L:6(){7(!25[d.Y]){r X}r 25[d.Y]},11:6(){j 3l=d.1L();7(3l){3l.11();6D 25[d.Y]}}});25[d.Y]=3}r 49}());8.4d=6(){j h=d;h.k=0;h.K=0;h.2B=0;h.3f=0;h.3j=0;h.1N=0;h.3i=0;h.3a=6(){h.k=h.K=h.2B=h.3f=h.3j=h.1N=h.3i=0}};2M.8=8}(2M,6c));',62,460,'|||file|||function|if|plupload|settings||||this||up||self||var|size|value|name|||files|trigger|return||else||cb|xhr|each|blob|total||length||||true|option|status||bind|loaded|init|filters|||offset|Math|runtime|translate|features||new|type|null|id|extend||destroy|state|fileInput|false|args|case|call|el|ruid|queue|url|push|undef|feature|fileInputs|info|chunkSize|runtimes|preferred_caps|Error|error|inited|STOPPED|fileDrop|chunkBlob|required_features|code|boundary|Runtime|STARTED|message|resize|File|resolveFile|typeOf|caps|mime_types|typeof|fileDrops|for|delay|err|options|img|replace|params|getSource|round|percent|break|ext|disabled|max_file_size|ids|formData|func|curChunkSize|ceil|uid|flash_swf_url|prevent_duplicates|Init|silverlight_xap_url|multi_selection|browse_button|start|filepool|inArray|can|multipart|100|maxSize|query|1024|lookup|chunks|fileName|send_binary_string|getInfo|calc|uploadNextChunk|chunk_size|els|startTime|ii|addFileFilter|addClass|removeClass|enabled|str|chr|get|drop_element|DONE|extensionsRegExp|UploadProgress|FAILED|origSize|uploaded|splice|QUEUED|resolve|fileFilters|removed|StateChanged|guid|Uploader|setOption|INIT_ERROR|window|getRUID|uploadNext|responseText|response|arguments|min|Destroy|retries|restartRequired|runtime_order|setRequestHeader|required_caps|stop|swf_url|headers|QueueChanged|getAllResponseHeaders|handleError|target_name|refresh|responseHeaders|container||reset|count|ctrl|slice_blob|config|failed|precision|pow|bytesPerSec|queued|browse_button_hover|src|xap_url|_setOption|normalizeCaps|reinitRequired|test|split|browse_button_active|drag_and_drop|Date|parseSize|matches|xmlEncodeChars|calcFile|UPLOADING|resizedBlob|file_data_name|inSeries|instanceof|max_retries|array|CancelUpload|addFile|initControls|preinit|map|lastModifiedDate|runtimeCan|encodeURIComponent|RegExp|res|removeAllEvents|rule|items|regexp|filter|addEvent|bindEventListeners|getOption|onFilesAdded|filteredFiles|onBeforeUpload|object|oldValue|300|getStyle|hasClass|fileSize|js|preserve_headers|PluploadFile|cap|BeforeUpload|FILE_DUPLICATE_ERROR|QueueProgress|send_chunk_number|FILE_SIZE_ERROR|crop|while|Refresh|UploadFile|onready|dragdrop|Moxie|runtimeerror|isEmptyObj|mouseup|select_multiple|mouseenter|mouseleave|mousedown|FILE_EXTENSION_ERROR|removeEvent|onError|onStateChanged|onUploadProgress|addI18n|onDestroy|apply|FilesAdded|onerror|FileUploaded|slice|num|string|append|getSize|buildUrl|multipart_params|ua|post|open|getPos|400|PostInit|image|onload|onCancelUpload|HTTP_ERROR|prototype|1000|filterFile|onFileUploaded|upload|strict|resizeImage|xmlEncodeRegExp|scope|send|toArray|onUploadFile|362|370|331|500|330|702|IMAGE_MEMORY_ERROR|IMAGE_DIMENSIONS_ERROR|gi|setTimeout|indexOf|formatSize|701|summon_file_dialog|9_|z0|374|mimes|371|mimeTypes|600|_|SECURITY_ERROR|334|pngresize|gt|cleanName|602|lt|306|xmlEncode|346|340|amp|quot|triggerDialog|IMAGE_FORMAT_ERROR|send_binary|canSendBinary|VERSION|200|GENERIC_ERROR|307|send_custom_headers|321|357|progress|601|jpgresize|361|700|IO_ERROR|report_upload_progress|354|313|310|347|350|353|317|314|322|browser|onloadend|Browser|Android|mOxie|FormData|Content|stream|octet|application|Type|Env|ChunkUploaded|match|unique_names|OptionChanged|join|part|floor|onprogress|XMLHttpRequest|chunk|HTTP|jpeg|png|FilesRemoved|removeFile|filelist|node|unbindAll|EventTarget|delete|getNative|toLocaleString|instance|FileFiltered|Blob|xap|swf|order|abort|disableBrowse|disable|connectRuntime|isDetached|getFile|DisableBrowse|extensions|default|FileInput|accept|getRuntime|send_multipart|onchange|ondrop|drop_zone|FileDrop|UploadComplete|Duplicate|mb|gb|tb|kb|parseSizeStr|extension|thatCan|predictRuntime|Image|multiple|height|quality|catch|onresize|switch|getAsBlob|ex|downsize|try|load|width'.split('|'),0,{}))
+!function(e,t,i){function n(e){function t(e,t,i){var r={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};r[e]?n[r[e]]=t:i||(n[e]=t)}var i=e.required_features,n={};return"string"==typeof i?a.each(i.split(/\s*,\s*/),function(e){t(e,!0)}):"object"==typeof i?a.each(i,function(e,i){t(i,e)}):i===!0&&(e.multipart||(n.send_binary_string=!0),e.chunk_size>0&&(n.slice_blob=!0),e.resize.enabled&&(n.send_binary_string=!0),a.each(e,function(e,i){t(i,!!e,!0)})),n}var r=e.setTimeout,s={},a={VERSION:"2.1.1",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,get:function(e){var i,n=[];"array"!==t.typeOf(e)&&(e=[e]);for(var r=e.length;r--;)i=t.get(e[r]),i&&n.push(i);return n.length?n:null},each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},i=/[<>&\"\']/g;return e?(""+e).replace(i,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,i;for(i=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"],t=0;t<i.length;t+=2)e=e.replace(i[t],i[t+1]);return e=e.replace(/\s+/g,"_"),e=e.replace(/[^a-z0-9_\-\.]+/gi,"")},buildUrl:function(e,t){var i="";return a.each(t,function(e,t){i+=(i?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),i&&(e+=(e.indexOf("?")>0?"&":"?")+i),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===i||/\D/.test(e))return a.translate("N/A");var n=Math.pow(1024,4);return e>n?t(e/n,1)+" "+a.translate("tb"):e>(n/=1024)?t(e/n,1)+" "+a.translate("gb"):e>(n/=1024)?t(e/n,1)+" "+a.translate("mb"):e>1024?Math.round(e/1024)+" "+a.translate("kb"):e+" "+a.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,i){var n,r;return n=new a.Uploader(e),r=t.Runtime.thatCan(n.getOption().required_features,i||e.runtimes),n.destroy(),r},addFileFilter:function(e,t){s[e]=t}};a.addFileFilter("mime_types",function(e,t,i){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:a.FILE_EXTENSION_ERROR,message:a.translate("File extension error."),file:t}),i(!1)):i(!0)}),a.addFileFilter("max_file_size",function(e,t,i){var n;e=a.parseSize(e),t.size!==n&&e&&t.size>e?(this.trigger("Error",{code:a.FILE_SIZE_ERROR,message:a.translate("File size error."),file:t}),i(!1)):i(!0)}),a.addFileFilter("prevent_duplicates",function(e,t,i){if(e)for(var n=this.files.length;n--;)if(t.name===this.files[n].name&&t.size===this.files[n].size)return this.trigger("Error",{code:a.FILE_DUPLICATE_ERROR,message:a.translate("Duplicate file error."),file:t}),void i(!1);i(!0)}),a.Uploader=function(e){function o(){var e,t,i=0;if(this.state==a.STARTED){for(t=0;t<T.length;t++)e||T[t].status!=a.QUEUED?i++:(e=T[t],this.trigger("BeforeUpload",e)&&(e.status=a.UPLOADING,this.trigger("UploadFile",e)));i==T.length&&(this.state!==a.STOPPED&&(this.state=a.STOPPED,this.trigger("StateChanged")),this.trigger("UploadComplete",T))}}function l(e){e.percent=e.size>0?Math.ceil(e.loaded/e.size*100):100,u()}function u(){var e,t;for(w.reset(),e=0;e<T.length;e++)t=T[e],t.size!==i?(w.size+=t.origSize,w.loaded+=t.loaded*t.origSize/t.size):w.size=i,t.status==a.DONE?w.uploaded++:t.status==a.FAILED?w.failed++:w.queued++;w.size===i?w.percent=T.length>0?Math.ceil(w.uploaded/T.length*100):0:(w.bytesPerSec=Math.ceil(w.loaded/((+new Date-I||1)/1e3)),w.percent=w.size>0?Math.ceil(w.loaded/w.size*100):0)}function d(){var e=A[0]||U[0];return!!e&&e.getRuntime().uid}function c(e,i){if(e.ruid){var n=t.Runtime.getInfo(e.ruid);if(n)return n.can(i)}return!1}function f(){this.bind("FilesAdded",_),this.bind("CancelUpload",v),this.bind("BeforeUpload",m),this.bind("UploadFile",E),this.bind("UploadProgress",R),this.bind("StateChanged",b),this.bind("QueueChanged",u),this.bind("Error",z),this.bind("FileUploaded",y),this.bind("Destroy",S)}function g(e,i){var n=this,r=0,s=[],o={accept:e.filters.mime_types,runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:F,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};a.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(o[t]=e[t])}),e.browse_button&&a.each(e.browse_button,function(i){s.push(function(s){var l=new t.FileInput(a.extend({},o,{name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:i}));l.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(n.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),r++,A.push(this),s()},l.onchange=function(){n.addFile(this.files)},l.bind("mouseenter mouseleave mousedown mouseup",function(n){P||(e.browse_button_hover&&("mouseenter"===n.type?t.addClass(i,e.browse_button_hover):"mouseleave"===n.type&&t.removeClass(i,e.browse_button_hover)),e.browse_button_active&&("mousedown"===n.type?t.addClass(i,e.browse_button_active):"mouseup"===n.type&&t.removeClass(i,e.browse_button_active)))}),l.bind("error runtimeerror",function(){l=null,s()}),l.init()})}),e.drop_element&&a.each(e.drop_element,function(e){s.push(function(i){var s=new t.FileDrop(a.extend({},o,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);n.features.dragdrop=e.can("drag_and_drop"),r++,U.push(this),i()},s.ondrop=function(){n.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,i()}),s.init()})}),t.inSeries(s,function(){"function"==typeof i&&i(r)})}function p(e,i,n){var r=new t.Image;try{r.onload=function(){r.downsize(i.width,i.height,i.crop,i.preserve_headers)},r.onresize=function(){n(this.getAsBlob(e.type,i.quality)),this.destroy()},r.onerror=function(){n(e)},r.load(e)}catch(t){n(e)}}function h(e,i,r){function s(e,t,i){var n=O[e];switch(e){case"max_file_size":"max_file_size"===e&&(O.max_file_size=O.filters.max_file_size=t);break;case"chunk_size":(t=a.parseSize(t))&&(O[e]=t);break;case"filters":"array"===a.typeOf(t)&&(t={mime_types:t}),i?a.extend(O.filters,t):O.filters=t,t.mime_types&&(O.filters.mime_types.regexp=function(e){var t=[];return a.each(e,function(e){a.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(O.filters.mime_types));break;case"resize":i?a.extend(O.resize,t,{enabled:!0}):O.resize=t;break;case"prevent_duplicates":O.prevent_duplicates=O.filters.prevent_duplicates=!!t;break;case"browse_button":case"drop_element":t=a.get(t);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":O[e]=t,i||(l=!0);break;default:O[e]=t}i||o.trigger("OptionChanged",e,t,n)}var o=this,l=!1;"object"==typeof e?a.each(e,function(e,t){s(t,e,r)}):s(e,i,r),r?(O.required_features=n(a.extend({},O)),F=n(a.extend({},O,{required_features:!0}))):l&&(o.trigger("Destroy"),g.call(o,O,function(e){e?(o.runtime=t.Runtime.getInfo(d()).type,o.trigger("Init",{runtime:o.runtime}),o.trigger("PostInit")):o.trigger("Error",{code:a.INIT_ERROR,message:a.translate("Init error.")})}))}function _(e,t){[].push.apply(T,t),e.trigger("QueueChanged"),e.refresh()}function m(e,t){if(O.unique_names){var i=t.name.match(/\.([^.]+)$/),n="part";i&&(n=i[1]),t.target_name=t.id+"."+n}}function E(e,i){function n(){d-- >0?r(s,1e3):(i.loaded=g,e.trigger("Error",{code:a.HTTP_ERROR,message:a.translate("HTTP Error."),file:i,response:D.responseText,status:D.status,responseHeaders:D.getAllResponseHeaders()}))}function s(){var c,p,h,_;i.status!=a.DONE&&i.status!=a.FAILED&&e.state!=a.STOPPED&&(h={name:i.target_name||i.name},u&&f.chunks&&o.size>u?(_=Math.min(u,o.size-g),c=o.slice(g,g+_)):(_=o.size,c=o),u&&f.chunks&&(e.settings.send_chunk_number?(h.chunk=Math.ceil(g/u),h.chunks=Math.ceil(o.size/u)):(h.offset=g,h.total=o.size)),D=new t.XMLHttpRequest,D.upload&&(D.upload.onprogress=function(t){i.loaded=Math.min(i.size,g+t.loaded),e.trigger("UploadProgress",i)}),D.onload=function(){return D.status>=400?void n():(d=e.settings.max_retries,_<o.size?(c.destroy(),g+=_,i.loaded=Math.min(g,o.size),e.trigger("ChunkUploaded",i,{offset:i.loaded,total:o.size,response:D.responseText,status:D.status,responseHeaders:D.getAllResponseHeaders()}),"Android Browser"===t.Env.browser&&e.trigger("UploadProgress",i)):i.loaded=i.size,c=p=null,void(!g||g>=o.size?(i.size!=i.origSize&&(o.destroy(),o=null),e.trigger("UploadProgress",i),i.status=a.DONE,e.trigger("FileUploaded",i,{response:D.responseText,status:D.status,responseHeaders:D.getAllResponseHeaders()})):r(s,1)))},D.onerror=function(){n()},D.onloadend=function(){this.destroy(),D=null},e.settings.multipart&&f.multipart?(h.name=i.target_name||i.name,D.open("post",l,!0),a.each(e.settings.headers,function(e,t){D.setRequestHeader(t,e)}),p=new t.FormData,a.each(a.extend(h,e.settings.multipart_params),function(e,t){p.append(t,e)}),p.append(e.settings.file_data_name,c),D.send(p,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:F,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(l=a.buildUrl(e.settings.url,a.extend(h,e.settings.multipart_params)),D.open("post",l,!0),D.setRequestHeader("Content-Type","application/octet-stream"),a.each(e.settings.headers,function(e,t){D.setRequestHeader(t,e)}),D.send(c,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:F,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})))}var o,l=e.settings.url,u=e.settings.chunk_size,d=e.settings.max_retries,f=e.features,g=0;i.loaded&&(g=i.loaded=u*Math.floor(i.loaded/u)),o=i.getSource(),e.settings.resize.enabled&&c(o,"send_binary_string")&&~t.inArray(o.type,["image/jpeg","image/png"])?p.call(this,o,e.settings.resize,function(e){o=e,i.size=e.size,s()}):s()}function R(e,t){l(t)}function b(e){if(e.state==a.STARTED)I=+new Date;else if(e.state==a.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==a.UPLOADING&&(e.files[t].status=a.QUEUED,u())}function v(){D&&D.abort()}function y(e){u(),r(function(){o.call(e)},1)}function z(e,t){t.file&&(t.file.status=a.FAILED,l(t.file),e.state==a.STARTED&&(e.trigger("CancelUpload"),r(function(){o.call(e)},1)))}function S(e){e.stop(),a.each(T,function(e){e.destroy()}),T=[],A.length&&(a.each(A,function(e){e.destroy()}),A=[]),U.length&&(a.each(U,function(e){e.destroy()}),U=[]),F={},P=!1,I=D=null,w.reset()}var O,I,w,D,x=a.guid(),T=[],F={},A=[],U=[],P=!1;O={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_chunk_number:!0},h.call(this,e,null,!0),w=new a.QueueProgress,a.extend(this,{id:x,uid:x,state:a.STOPPED,features:{},runtime:null,files:T,settings:O,total:w,init:function(){var e=this;return"function"==typeof O.preinit?O.preinit(e):a.each(O.preinit,function(t,i){e.bind(i,t)}),O.browse_button&&O.url?(f.call(this),void g.call(this,O,function(i){"function"==typeof O.init?O.init(e):a.each(O.init,function(t,i){e.bind(i,t)}),i?(e.runtime=t.Runtime.getInfo(d()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:a.INIT_ERROR,message:a.translate("Init error.")})})):void this.trigger("Error",{code:a.INIT_ERROR,message:a.translate("Init error.")})},setOption:function(e,t){h.call(this,e,t,!this.runtime)},getOption:function(e){return e?O[e]:O},refresh:function(){A.length&&a.each(A,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=a.STARTED&&(this.state=a.STARTED,this.trigger("StateChanged"),o.call(this))},stop:function(){this.state!=a.STOPPED&&(this.state=a.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){P=arguments[0]===i||arguments[0],A.length&&a.each(A,function(e){e.disable(P)}),this.trigger("DisableBrowse",P)},getFile:function(e){var t;for(t=T.length-1;t>=0;t--)if(T[t].id===e)return T[t]},addFile:function(e,i){function n(e,i){var n=[];t.each(u.settings.filters,function(t,i){s[i]&&n.push(function(n){s[i].call(u,t,e,function(e){n(!e)})})}),t.inSeries(n,i)}function o(e){var s=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!l)return!1;e.ruid=l,e.connectRuntime(l)}o(new a.File(e))}else e instanceof t.Blob?(o(e.getSource()),e.destroy()):e instanceof a.File?(i&&(e.name=i),c.push(function(t){n(e,function(i){i||(f.push(e),u.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(s,["file","blob"])!==-1?o(new t.File(null,e)):"node"===s&&"filelist"===t.typeOf(e.files)?t.each(e.files,o):"array"===s&&(i=null,t.each(e,o))}var l,u=this,c=[],f=[];l=d(),o(e),c.length&&t.inSeries(c,function(){f.length&&u.trigger("FilesAdded",f)})},removeFile:function(e){for(var t="string"==typeof e?e:e.id,i=T.length-1;i>=0;i--)if(T[i].id===t)return this.splice(i,1)[0]},splice:function(e,t){var n=T.splice(e===i?0:e,t===i?T.length:t),r=!1;return this.state==a.STARTED&&(r=!0,this.stop()),this.trigger("FilesRemoved",n),a.each(n,function(e){e.destroy()}),this.trigger("QueueChanged"),this.refresh(),r&&this.start(),n},bind:function(e,t,i){var n=this;a.Uploader.prototype.bind.call(this,e,function(){var e=[].slice.call(arguments);return e.splice(0,1,n),t.apply(this,e)},0,i)},destroy:function(){this.trigger("Destroy"),O=w=null,this.unbindAll()}})},a.Uploader.prototype=t.EventTarget.instance,a.File=function(){function e(e){a.extend(this,{id:a.guid(),name:e.name||e.fileName,type:e.type||"",size:e.size||e.fileSize,origSize:e.size||e.fileSize,loaded:0,percent:0,status:a.QUEUED,lastModifiedDate:e.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var e=this.getSource().getSource();return t.inArray(t.typeOf(e),["blob","file"])!==-1?e:null},getSource:function(){return i[this.id]?i[this.id]:null},destroy:function(){var e=this.getSource();e&&(e.destroy(),delete i[this.id])}}),i[this.id]=e}var i={};return e}(),a.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=a}(window,mOxie);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/styles.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/styles.min.css
index 68cbd81fdeb062a9cd91370501c0ea7d541b83ad..2d3a31ddd4ec243b5c608cb74fcdde593f1b4b81 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/styles.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/styles.min.css
@@ -1 +1 @@
-#gallery_selection{background-color:#fff;padding:7px}#gallery_selection label{font-weight:600;position:relative;top:-1px}#gallery_selection .plupload_buttons a{margin-right:4px}#gallery_name{width:auto;min-width:200px}#gallery_name.error{border:solid 1px red}#upload_images_content{padding:0}#upload_images_content .plupload_container{padding:0}.plupload_header{display:none}.plupload_buttons{display:inline}.plupload_droptext{font-size:16px;color:silver}#gritter-notice-wrapper a{color:#00b9eb}
\ No newline at end of file
+#gallery_selection{background-color:#fff;padding:7px}#gallery_selection label{font-weight:600;position:relative;top:-1px}#gallery_selection .plupload_buttons a{margin-right:4px}#gallery_name{width:auto;min-width:200px}#gallery_name.error{border:1px solid red}#upload_images_content,#upload_images_content .plupload_container{padding:0}.plupload_header{display:none}.plupload_buttons{display:inline}.plupload_droptext{font-size:16px;color:silver}#gritter-notice-wrapper a{color:#00b9eb}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php
index 5c070524d51703e94dd3bc58b0fac02cc5f2200e..f0e8b91ba8ddf5e6b6297071ebb4e9146aeddc5c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php
@@ -3,7 +3,8 @@
 </div>
 <p>
     <label for="import_gallery_title">
-        <input type="text" name="import_gallery_title" id="import_gallery_title"/>
+        Gallery title
+        <input type="text" name="import_gallery_title" id="import_gallery_title" placeholder="<?php _e('Leave blank for folder name', 'nggallery'); ?>"/>
     </label>
 </p>
 <p>
@@ -55,6 +56,7 @@
 	        post_params.action = 'import_folder';
 	        post_params.folder = selected_folder;
 	        post_params.keep_location =  $('#import_keep_location').is(":checked") ? 'on' : 'off';
+            post_params.gallery_title = $('#import_gallery_title').val();
 
             $.post(photocrati_ajax.url, post_params, function(response){
                 if (typeof(response) != 'object') response = JSON.parse(response);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php
index 7631fefc7c279b48a8a7dd1a71477950a7c99bfb..84c29ba44ae01ba6fedcba83d25d8c2ec94521df 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php
@@ -7,7 +7,7 @@
             <option value="<?php echo esc_attr($gallery->{$gallery->id_field}) ?>"><?php echo esc_attr($gallery->title) ?></option>
         <?php endforeach ?>
     </select>
-    <input type="text" id="ngg-importML-gallery-name" name="gallery_name"/>
+    <input type="text" id="ngg-importML-gallery-name" name="gallery_name" placeholder="<?php _e('Gallery title', 'nggallery'); ?>"/>
 </div>
 
 <button id='ngg-importML-select-opener'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php
index 6cedb5581f918106db1bf47c6688356534b2b5f9..824e47d17ac71be30d0d0468dde01357e2057c44 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php
@@ -6,7 +6,7 @@
             <option value="<?php echo esc_attr($gallery->{$gallery->id_field}) ?>"><?php echo esc_attr($gallery->title) ?></option>
         <?php endforeach ?>
     </select>
-    <input type="text" id="gallery_name" name="gallery_name"/>
+    <input type="text" id="gallery_name" name="gallery_name" placeholder="<?php _e('Gallery title', 'nggallery'); ?>"/>
 </div>
 
 <div id="uploader">
@@ -173,6 +173,8 @@
                                 msg = NggUploadImages_i18n.no_images_uploaded;
                             }
                             else {
+
+
                                 msg = upload_count == 1 ? NggUploadImages_i18n.one_image_uploaded : NggUploadImages_i18n.x_images_uploaded;
                                 msg = msg.replace('{count}', upload_count);
                                 
@@ -192,7 +194,7 @@
                                         href: gallery_url,
                                         target: '_blank'
                                     });
-                                    $link.text(NggUploadImages_i18n.manage_gallery);
+                                    $link.text(NggUploadImages_i18n.manage_gallery.replace('{name}', $gallery_name.val()));
                                     msg = msg + ' ' + $link[0].outerHTML;
                                 }
                             }
@@ -294,6 +296,10 @@
                     uploader.refresh();
                     window.Frame_Event_Publisher.broadcast();
 
+										var evtJq = $;
+										if (window.top.jQuery)
+											evtJq = window.top.jQuery;
+										evtJq(window.top.document).find('body').trigger('nextgen_event', [ 'plupload_init' ]);
                 };
 
                 window.init_plupload();
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php
index 85d6bed829fa095951ca11baf70ff582b6e440c1..67d5b85eb71bfcc4bd6abe84133842c85aba2cf6 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php
@@ -19,7 +19,7 @@ class M_NextGen_Admin extends C_Base_Module
 			'photocrati-nextgen_admin',
 			'NextGEN Administration',
 			'Provides a framework for adding Administration pages',
-			'0.10',
+			'0.15',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
@@ -188,7 +188,223 @@ class M_NextGen_Admin extends C_Base_Module
 	        FALSE,
 	        NGG_SCRIPT_VERSION
         );
-    }
+
+		$this->enqueue_wizard_components();
+	}
+	
+	function init_wizards()
+	{
+		$wizards = C_NextGEN_Wizard_Manager::get_instance();
+		$wizards->set_starter(__('Do you need help with NextGEN?', 'nggallery'));
+		$wizards->set_active(false);
+		
+		// Add gallery creation wizard for new users
+		$wizard = $wizards->add_wizard('nextgen.beginner.gallery_creation');
+		$wizard->add_step('start');
+		$wizard->set_step_text('start', __('Hello, it looks like you don\'t have any galleries, this wizard will guide you through creating your first gallery.', 'nggallery'));
+		$wizard->set_step_view('start', 'a.toplevel_page_nextgen-gallery');
+		$wizard->add_step('gallery_menu');
+		$wizard->set_step_text('gallery_menu', __('Click on the Gallery menu to access NextGEN\'s functionality.', 'nggallery'));
+		$wizard->set_step_target('gallery_menu', 'a.toplevel_page_nextgen-gallery', 'right center', 'left center');
+		$wizard->set_step_view('gallery_menu', 'a.toplevel_page_nextgen-gallery');
+		$wizard->add_step('add_gallery_menu');
+		$wizard->set_step_text('add_gallery_menu', __('Click on the "Add Gallery / Images" menu to create new galleries with images.', 'nggallery'));
+		$wizard->set_step_target('add_gallery_menu', 'a[href*="admin.php?page=ngg_addgallery"]', 'right center', 'left center');
+		$wizard->set_step_view('add_gallery_menu', 'a[href*="admin.php?page=ngg_addgallery"]');
+		$wizard->add_step('input_gallery_name');
+		$wizard->set_step_text('input_gallery_name', __('Select a name for your gallery.', 'nggallery'));
+		$wizard->set_step_target('input_gallery_name', 'input#gallery_name', 'bottom center', 'top center');
+		$wizard->set_step_target_wait('input_gallery_name', '5');
+		$wizard->set_step_view('input_gallery_name', 'input#gallery_name');
+		$wizard->add_step('select_images');
+		$wizard->set_step_text('select_images', __('Now click the "Add Files" button and select some images to add to the gallery.', 'nggallery'));
+		$wizard->set_step_target('select_images', 'a#uploader_browse', 'right center', 'left center');
+		$wizard->set_step_target_wait('select_images', '5');
+		$wizard->set_step_view('select_images', 'a#uploader_browse');
+		$wizard->add_step('upload_images');
+		$wizard->set_step_text('upload_images', __('Now click the "Start Upload" button to begin the upload process.', 'nggallery'));
+		$wizard->set_step_target('upload_images', 'a#uploader_upload', 'right center', 'left center');
+		$wizard->set_step_target_wait('upload_images', '5');
+		$wizard->set_step_view('upload_images', 'a#uploader_upload');
+		$wizard->add_step('finish');
+		$wizard->set_step_text('finish', __('Congratulations! You just created your first gallery.', 'nggallery'));
+		
+		$wizard = $wizards->add_wizard('nextgen.beginner.gallery_creation_igw');
+		$wizard->add_step('start');
+		$wizard->set_step_text('start', __('Hello, this wizard will guide you through creating a NextGEN gallery and inserting it into a page. Click "Next step" to proceed.', 'nggallery'));
+		$wizard->add_step('pages_menu');
+		$wizard->set_step_text('pages_menu', __('Click on "Pages" to access your WordPress pages.', 'nggallery'));
+		$wizard->set_step_target('pages_menu', '#menu-pages a.menu-top', 'right center', 'left center');
+		$wizard->set_step_view('pages_menu', '#menu-pages a.menu-top');
+		$wizard->add_step('add_page_menu');
+		$wizard->set_step_text('add_page_menu', __('Click "Add New" to create a new page.', 'nggallery'));
+		$wizard->set_step_target('add_page_menu', '#menu-pages a[href*="post-new.php?post_type=page"]', 'right center', 'left center');
+		$wizard->set_step_view('add_page_menu', '#menu-pages a[href*="post-new.php?post_type=page"]');
+		$wizard->add_step('input_page_title');
+		$wizard->set_step_text('input_page_title', __('Type in a title for your page.', 'nggallery'));
+		$wizard->set_step_target('input_page_title', 'input#title', 'bottom center', 'top center');
+		$wizard->set_step_view('input_page_title', 'input#title');
+		$wizard->add_step('add_gallery_button');
+		$wizard->set_step_text('add_gallery_button', __('Now click the "Add Gallery" button to open NextGEN\'s Insert Gallery Window (IGW).', 'nggallery'));
+		$wizard->set_step_target('add_gallery_button', 'a#ngg-media-button', 'right center', 'left center');
+		$wizard->set_step_view('add_gallery_button', 'a#ngg-media-button');
+		$wizard->add_step('add_gallery_tab');
+		$wizard->set_step_text('add_gallery_tab', __('Now click the "Add Gallery / Images" tab to add a new gallery.', 'nggallery'));
+		$wizard->set_step_target('add_gallery_tab', '#attach_to_post_tabs a#ui-id-2', 'bottom center', 'top center');
+		$wizard->set_step_view('add_gallery_tab', '#attach_to_post_tabs a#ui-id-2');
+		$wizard->set_step_context('add_gallery_tab', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('add_gallery_tab', true);
+		$wizard->set_step_condition('add_gallery_tab', 'nextgen_event', 'plupload_init', null, 10000);
+		$wizard->add_step('input_gallery_name');
+		$wizard->set_step_text('input_gallery_name', __('Select a name for your gallery.', 'nggallery'));
+		$wizard->set_step_target('input_gallery_name', 'input#gallery_name:visible', 'bottom center', 'top center');
+		$wizard->set_step_view('input_gallery_name', 'input#gallery_name');
+		$wizard->set_step_context('input_gallery_name', array('iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]', 'iframe#ngg-iframe-create_tab'));
+		$wizard->set_step_lazy('input_gallery_name', true);
+		$wizard->add_step('select_images');
+		$wizard->set_step_text('select_images', __('Now click the "Add Files" button and select some images to add to the gallery.', 'nggallery'));
+		$wizard->set_step_target('select_images', 'a#uploader_browse', 'right center', 'left center');
+		$wizard->set_step_view('select_images', 'a#uploader_browse');
+		$wizard->set_step_context('select_images', array('iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]', 'iframe#ngg-iframe-create_tab'));
+		$wizard->set_step_lazy('select_images', true);
+		$wizard->add_step('upload_images');
+		$wizard->set_step_text('upload_images', __('Now click the "Start Upload" button to begin the upload process.', 'nggallery'));
+		$wizard->set_step_target('upload_images', 'a#uploader_upload', 'right center', 'left center');
+		$wizard->set_step_view('upload_images', 'a#uploader_upload');
+		$wizard->set_step_context('upload_images', array('iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]', 'iframe#ngg-iframe-create_tab'));
+		$wizard->set_step_lazy('upload_images', true);
+		$wizard->set_step_condition('upload_images', 'plupload_bind', 'UploadComplete', array('iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]', 'iframe#ngg-iframe-create_tab', '#uploader'));
+		$wizard->add_step('display_gallery_tab');
+		$wizard->set_step_text('display_gallery_tab', __('Congratulations! You just created your first gallery. Now let\'s insert it into the page. Click the "Display Galleries" tab.', 'nggallery'));
+		$wizard->set_step_target('display_gallery_tab', '#attach_to_post_tabs a#ui-id-1', 'bottom center', 'top center');
+		$wizard->set_step_view('display_gallery_tab', '#attach_to_post_tabs a#ui-id-1');
+		$wizard->set_step_context('display_gallery_tab', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('display_gallery_tab', true);
+		$wizard->set_step_condition('display_gallery_tab', 'wait', '500');
+		$wizard->add_step('display_type_select');
+		$wizard->set_step_text('display_type_select', __('Click on the "NextGEN Basic Slideshow" radio button to select the display type for the gallery.', 'nggallery'));
+		$wizard->set_step_target('display_type_select', '.display_type_preview input[value="photocrati-nextgen_basic_slideshow"]', 'bottom center', 'top center');
+		$wizard->set_step_view('display_type_select', '.display_type_preview input[type="radio"]');
+		$wizard->set_step_context('display_type_select', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('display_type_select', true);
+		$wizard->add_step('display_accordion_close');
+		$wizard->set_step_text('display_accordion_close', __('Now let\'s specify which gallery to display. Start by clicking on the "Select a display type" section header to collapse it.', 'nggallery'));
+		$wizard->set_step_target('display_accordion_close', '#displayed_tab #display_type_tab', 'bottom center', 'top center');
+		$wizard->set_step_view('display_accordion_close', '#displayed_tab #display_type_tab');
+		$wizard->set_step_context('display_accordion_close', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('display_accordion_close', true);
+		$wizard->set_step_condition('display_accordion_close', 'wait', '1000');
+		$wizard->add_step('source_accordion_open');
+		$wizard->set_step_text('source_accordion_open', __('Now click on the "What would you like to display?" section\'s header to expand it.', 'nggallery'));
+		$wizard->set_step_target('source_accordion_open', '#displayed_tab #source_tab', 'bottom center', 'top center');
+		$wizard->set_step_view('source_accordion_open', '#displayed_tab #source_tab');
+		$wizard->set_step_context('source_accordion_open', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('source_accordion_open', true);
+		$wizard->set_step_condition('source_accordion_open', 'wait', '1000');
+		$wizard->add_step('source_select');
+		$wizard->set_step_text('source_select', __('Now click inside the "Galleries" field and select your gallery.', 'nggallery'));
+		$wizard->set_step_target('source_select', '#source_configuration .galleries_column .select2-container input', 'right center', 'left center');
+		$wizard->set_step_view('source_select', '#source_configuration .galleries_column select');
+		$wizard->set_step_context('source_select', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('source_select', true);
+		$wizard->add_step('insert_gallery');
+		$wizard->set_step_text('insert_gallery', __('Now click on the "Insert Displayed Gallery" button to insert the gallery in your page.', 'nggallery'));
+		$wizard->set_step_target('insert_gallery', '#displayed_tab #save_displayed_gallery', 'right center', 'left center');
+		$wizard->set_step_view('insert_gallery', '#displayed_tab #save_displayed_gallery');
+		$wizard->set_step_context('insert_gallery', 'iframe[src*="' . NGG_ATTACH_TO_POST_SLUG . '"]');
+		$wizard->set_step_lazy('insert_gallery', true);
+		$wizard->set_step_condition('insert_gallery', 'wait', '1000');
+		$wizard->add_step('finish');
+		$wizard->set_step_text('finish', __('Congratulations! You just created your first gallery. You can now click the "Publish" button on the right to publish your page.', 'nggallery'));
+		
+		// adjust wizards state based on query/parameters
+		$wizards->handle_wizard_query();
+		
+		global $ngg_fs;
+		// make sure we don't trigger the wizards if NGG Fremius is running or this is an AJAX request
+		if (isset($_REQUEST['ngg_dismiss_notice']) || (is_admin() && !M_Attach_To_Post::is_atp_url() && !isset($_REQUEST['attach_to_post']) && (!isset($ngg_fs) || !$ngg_fs->is_activation_mode()) && (!defined('DOING_AJAX') || !DOING_AJAX))) {
+			$wizards->set_active(true);
+		}
+		
+		// before adding notices or activating individual wizards, ensure wizards are globally enabled and no wizard is currently running already
+		if ($wizards->is_active() && $wizards->get_running_wizard() == null) {
+			// add notice for gallery creation wizard
+			$wizard = $wizards->get_wizard('nextgen.beginner.gallery_creation_igw');
+			
+			if (!$wizard->is_completed() && !$wizard->is_cancelled()) {
+				$mapper = C_Gallery_Mapper::get_instance();
+				if ($mapper->count() == 0) {
+					$wizard->set_active(true);
+					$notices = C_Admin_Notification_Manager::get_instance();
+					$notices->add('ngg_wizard_' . $wizard->get_id(), array("message" => __('Thanks for installing NextGEN Gallery! Want help creating your first gallery?', 'nggallery') . ' <a data-ngg-wizard="' . $wizard->get_id() . '" class="ngg-wizard-invoker" href="' . esc_url(add_query_arg('ngg_wizard', $wizard->get_id())) . '">' . __('Launch the Gallery Wizard', 'nggallery') . '</a>. ' . __('If you close this message, you can also launch the Gallery Wizard at any time from the', 'nggallery') . ' <a href="' . esc_url(admin_url('admin.php?page=nextgen-gallery')) . '">' . __('NextGEN Overview page', 'nggallery') . '</a>.'));
+				}
+				else if (isset($_GET['page']) && $_GET['page'] == 'nextgen-gallery') {
+					$wizard->set_active(true);
+				}
+			}
+		}
+	}
+	
+	function enqueue_wizard_components()
+	{
+    $router = C_Router::get_instance();
+        
+		// Wizards related scripts/styles
+			wp_register_style(
+			'bootstrap-tooltip',
+			$router->get_static_url('photocrati-nextgen_admin#bootstrap/css/bootstrap-tooltip.css'),
+				FALSE,
+				NGG_SCRIPT_VERSION
+			);
+		
+		wp_register_script(
+			'tourist',
+			$router->get_static_url('photocrati-nextgen_admin#tourist/tourist.js'),
+			array('jquery', 'backbone'),
+			NGG_SCRIPT_VERSION
+		);
+		wp_register_style(
+			'tourist',
+			$router->get_static_url('photocrati-nextgen_admin#tourist/tourist.css'),
+			array('bootstrap-tooltip'),
+			NGG_SCRIPT_VERSION
+		);
+		wp_register_script(
+			'ngg-wizards',
+			$router->get_static_url('photocrati-nextgen_admin#nextgen_wizards.js'),
+			array('tourist'),
+			NGG_SCRIPT_VERSION,
+			true
+		);
+		wp_register_style(
+			'ngg-wizards',
+			$router->get_static_url('photocrati-nextgen_admin#nextgen_wizards.css'),
+			array('tourist'),
+			NGG_SCRIPT_VERSION
+		);
+        
+		$wizards = C_NextGEN_Wizard_Manager::get_instance();
+		$wizard = $wizards->get_next_wizard();
+		
+		if ($wizards->is_active() && $wizard != null) {
+			$data = array();
+			$data['starter'] = array('text' => $wizards->get_starter(), 'image' => $router->get_static_url('photocrati-nextgen_admin#wizard_starter_icon.png'));
+			$running_wizard = $wizards->get_running_wizard();
+			$data['running_wizard'] = $running_wizard != null ? $running_wizard->get_id() : null;
+			$data['wizard_list'] = array($wizard->toData());
+			wp_localize_script('ngg-wizards', 'NextGEN_Wizard_Manager_State', $data);
+			if (method_exists('M_Gallery_Display', 'enqueue_fontawesome'))
+				M_Gallery_Display::enqueue_fontawesome();
+
+			wp_enqueue_style('ngg-wizards');
+			wp_enqueue_script('ngg-wizards');
+		};
+	}
+
+	function initialize()
+	{
+		$this->init_wizards();
+	}
 
 	/**
 	 * Adds menu pages to manage NextGen Settings
@@ -211,7 +427,8 @@ class M_NextGen_Admin extends C_Base_Module
             'C_Form_Manager' => 'class.form_manager.php',
             'C_Nextgen_Admin_Page_Controller' => 'class.nextgen_admin_page_controller.php',
             'C_Page_Manager' => 'class.page_manager.php',
-	        'C_Admin_Notification_Manager'  =>  'class.admin_notification_manager.php'
+	        'C_Admin_Notification_Manager'  =>  'class.admin_notification_manager.php',
+            'C_NextGEN_Wizard_Manager' => 'class.nextgen_wizard_manager.php',
         );
     }
 }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/package.module.nextgen_admin.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/package.module.nextgen_admin.php
index 0af57519be95ac29784099a84c521c2427fd085e..574a0366cb2bb39ea2cb6d7a394abfcf479442b3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/package.module.nextgen_admin.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/package.module.nextgen_admin.php
@@ -1,8 +1,13 @@
 <?php
-// TODO: Finish the implementation
+/**
+ * Class A_Fs_Access_Page
+ * @todo Finish the implementation
+ * @mixin C_NextGen_Admin_Page_Controller
+ * @adapts I_NextGen_Admin_Page for the "ngg_fs_access" context
+ */
 class A_Fs_Access_Page extends Mixin
 {
-    public function index_action()
+    function index_action()
     {
         $router = C_Router::get_instance();
         $url = $this->param('uri') ? $router->get_url($this->param('uri')) : admin_url('/admin.php?' . $router->get_querystring());
@@ -16,7 +21,7 @@ class A_Fs_Access_Page extends Mixin
      * Determines whether the given paths are writable
      * @return boolean
      */
-    public function are_paths_writable()
+    function are_paths_writable()
     {
         $retval = TRUE;
         $path = $this->object->param('path');
@@ -34,10 +39,12 @@ class A_Fs_Access_Page extends Mixin
 }
 /**
  * Provides validation for datamapper entities within an MVC controller
+ * @mixin C_MVC_Controller
+ * @adapts I_MVC_Controller
  */
 class A_MVC_Validation extends Mixin
 {
-    public function show_errors_for($entity, $return = FALSE)
+    function show_errors_for($entity, $return = FALSE)
     {
         $retval = '';
         if ($entity->is_invalid()) {
@@ -45,7 +52,7 @@ class A_MVC_Validation extends Mixin
         }
         return $retval;
     }
-    public function show_success_for($entity, $message, $return = FALSE)
+    function show_success_for($entity, $message, $return = FALSE)
     {
         $retval = '';
         if ($entity->is_valid()) {
@@ -54,9 +61,14 @@ class A_MVC_Validation extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_NextGen_Admin_Default_Pages
+ * @mixin C_Page_Manager
+ * @adapts I_Page_Manager
+ */
 class A_NextGen_Admin_Default_Pages extends Mixin
 {
-    public function setup()
+    function setup()
     {
         $this->object->add(NGG_FS_ACCESS_SLUG, array('adapter' => 'A_Fs_Access_Page', 'parent' => NGGFOLDER, 'add_menu' => FALSE));
         return $this->call_parent('setup');
@@ -64,31 +76,31 @@ class A_NextGen_Admin_Default_Pages extends Mixin
 }
 class C_Admin_Notification_Wrapper
 {
-    public $_name;
-    public $_data;
-    public function __construct($name, $data)
+    var $_name;
+    var $_data;
+    function __construct($name, $data)
     {
         $this->_name = $name;
         $this->_data = $data;
     }
-    public function is_renderable()
+    function is_renderable()
     {
         return true;
     }
-    public function is_dismissable()
+    function is_dismissable()
     {
         return true;
     }
-    public function render()
+    function render()
     {
-        return $this->_data['message'];
+        return $this->_data["message"];
     }
 }
 class C_Admin_Notification_Manager
 {
-    public $_notifications = array();
-    public $_displayed_notice = FALSE;
-    public $_dismiss_url = NULL;
+    var $_notifications = array();
+    var $_displayed_notice = FALSE;
+    var $_dismiss_url = NULL;
     static $_instance = NULL;
     static function get_instance()
     {
@@ -98,23 +110,23 @@ class C_Admin_Notification_Manager
         }
         return self::$_instance;
     }
-    public function __construct()
+    function __construct()
     {
         $this->_dismiss_url = site_url('/?ngg_dismiss_notice=1');
     }
-    public function has_displayed_notice()
+    function has_displayed_notice()
     {
         return $this->_displayed_notice;
     }
-    public function add($name, $handler)
+    function add($name, $handler)
     {
         $this->_notifications[$name] = $handler;
     }
-    public function remove($name)
+    function remove($name)
     {
         unset($this->_notifications[$name]);
     }
-    public function render()
+    function render()
     {
         $output = array();
         foreach (array_keys($this->_notifications) as $notice) {
@@ -122,10 +134,9 @@ class C_Admin_Notification_Manager
                 $output[] = $html;
             }
         }
-        echo implode('
-', $output);
+        echo implode("\n", $output);
     }
-    public function is_dismissed($name)
+    function is_dismissed($name)
     {
         $retval = FALSE;
         $settings = C_NextGen_Settings::get_instance();
@@ -143,7 +154,7 @@ class C_Admin_Notification_Manager
         }
         return $retval;
     }
-    public function dismiss($name)
+    function dismiss($name)
     {
         $retval = FALSE;
         if ($handler = $this->get_handler_instance($name)) {
@@ -163,7 +174,7 @@ class C_Admin_Notification_Manager
         }
         return $retval;
     }
-    public function get_handler_instance($name)
+    function get_handler_instance($name)
     {
         $retval = NULL;
         if (isset($this->_notifications[$name])) {
@@ -178,7 +189,7 @@ class C_Admin_Notification_Manager
         }
         return $retval;
     }
-    public function enqueue_scripts()
+    function enqueue_scripts()
     {
         if ($this->has_displayed_notice()) {
             $router = C_Router::get_instance();
@@ -186,7 +197,7 @@ class C_Admin_Notification_Manager
             wp_localize_script('ngg_admin_notices', 'ngg_dismiss_url', $this->_dismiss_url);
         }
     }
-    public function serve_ajax_request()
+    function serve_ajax_request()
     {
         $retval = array('failure' => TRUE);
         if (isset($_REQUEST['ngg_dismiss_notice'])) {
@@ -202,7 +213,7 @@ class C_Admin_Notification_Manager
             throw new E_Clean_Exit();
         }
     }
-    public function render_notice($name)
+    function render_notice($name)
     {
         $retval = '';
         if (($handler = $this->get_handler_instance($name)) && !$this->is_dismissed($name)) {
@@ -217,10 +228,16 @@ class C_Admin_Notification_Manager
         return $retval;
     }
 }
+/**
+ * Class C_Form
+ * @mixin Mixin_Form_Instance_Methods
+ * @mixin Mixin_Form_Field_Generators
+ * @implements I_Form
+ */
 class C_Form extends C_MVC_Controller
 {
     static $_instances = array();
-    public $page = NULL;
+    var $page = NULL;
     /**
      * Gets an instance of a form
      * @param string $context
@@ -238,7 +255,7 @@ class C_Form extends C_MVC_Controller
      * Defines the form
      * @param string $context
      */
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Form_Instance_Methods');
@@ -251,22 +268,22 @@ class Mixin_Form_Instance_Methods extends Mixin
     /**
      * Enqueues any static resources required by the form
      */
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
     }
     /**
      * Gets a list of fields to render
      * @return array
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array();
     }
-    public function get_id()
+    function get_id()
     {
         return $this->object->context;
     }
-    public function get_title()
+    function get_title()
     {
         return $this->object->context;
     }
@@ -275,7 +292,7 @@ class Mixin_Form_Instance_Methods extends Mixin
      * @param array $attributes
      * @return type
      */
-    public function save_action($attributes = array())
+    function save_action($attributes = array())
     {
         if (!$attributes) {
             $attributes = array();
@@ -289,7 +306,7 @@ class Mixin_Form_Instance_Methods extends Mixin
     /**
      * Returns the rendered form
      */
-    public function render($wrap = TRUE)
+    function render($wrap = TRUE)
     {
         $fields = array();
         foreach ($this->object->_get_field_names() as $field) {
@@ -300,7 +317,7 @@ class Mixin_Form_Instance_Methods extends Mixin
         }
         return $this->object->render_partial('photocrati-nextgen_admin#form', array('fields' => $fields, 'wrap' => $wrap), TRUE);
     }
-    public function get_model()
+    function get_model()
     {
         return $this->object->page->has_method('get_model') ? $this->object->page->get_model() : NULL;
     }
@@ -310,38 +327,38 @@ class Mixin_Form_Instance_Methods extends Mixin
  */
 class Mixin_Form_Field_Generators extends Mixin
 {
-    public function _render_select_field($display_type, $name, $label, $options = array(), $value, $text = '', $hidden = FALSE)
+    function _render_select_field($display_type, $name, $label, $options = array(), $value, $text = '', $hidden = FALSE)
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_select', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'options' => $options, 'value' => $value, 'text' => $text, 'hidden' => $hidden), True);
     }
-    public function _render_radio_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE)
+    function _render_radio_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE)
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_radio', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden), True);
     }
-    public function _render_number_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE, $placeholder = '', $min = NULL, $max = NULL)
+    function _render_number_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE, $placeholder = '', $min = NULL, $max = NULL)
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_number', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden, 'placeholder' => $placeholder, 'min' => $min, 'max' => $max), True);
     }
-    public function _render_text_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE, $placeholder = '')
+    function _render_text_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE, $placeholder = '')
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_text', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden, 'placeholder' => $placeholder), True);
     }
-    public function _render_textarea_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE, $placeholder = '')
+    function _render_textarea_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE, $placeholder = '')
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_textarea', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden, 'placeholder' => $placeholder), True);
     }
-    public function _render_color_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE)
+    function _render_color_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE)
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_color', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden), True);
     }
-    public function _render_ajax_pagination_field($display_type)
+    function _render_ajax_pagination_field($display_type)
     {
         return $this->object->_render_radio_field($display_type, 'ajax_pagination', __('Enable AJAX pagination', 'nggallery'), isset($display_type->settings['ajax_pagination']) ? $display_type->settings['ajax_pagination'] : FALSE);
     }
-    public function _render_thumbnail_override_settings_field($display_type)
+    function _render_thumbnail_override_settings_field($display_type)
     {
         $hidden = !(isset($display_type->settings['override_thumbnail_settings']) ? $display_type->settings['override_thumbnail_settings'] : FALSE);
-        $override_field = $this->_render_radio_field($display_type, 'override_thumbnail_settings', __('Override thumbnail settings', 'nggallery'), isset($display_type->settings['override_thumbnail_settings']) ? $display_type->settings['override_thumbnail_settings'] : FALSE, __('This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit \'Manage Galleries\' and choose \'Create new thumbnails\' for all images in the gallery.', 'nggallery'));
+        $override_field = $this->_render_radio_field($display_type, 'override_thumbnail_settings', __('Override thumbnail settings', 'nggallery'), isset($display_type->settings['override_thumbnail_settings']) ? $display_type->settings['override_thumbnail_settings'] : FALSE, __("This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit 'Manage Galleries' and choose 'Create new thumbnails' for all images in the gallery.", 'nggallery'));
         $dimensions_field = $this->object->render_partial('photocrati-nextgen_admin#field_generator/thumbnail_settings', array('display_type_name' => $display_type->name, 'name' => 'thumbnail_dimensions', 'label' => __('Thumbnail dimensions', 'nggallery'), 'thumbnail_width' => isset($display_type->settings['thumbnail_width']) ? intval($display_type->settings['thumbnail_width']) : 0, 'thumbnail_height' => isset($display_type->settings['thumbnail_height']) ? intval($display_type->settings['thumbnail_height']) : 0, 'hidden' => $hidden ? 'hidden' : '', 'text' => ''), TRUE);
         /*
         $qualities = array();
@@ -376,7 +393,7 @@ class Mixin_Form_Field_Generators extends Mixin
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_image_override_settings_field($display_type)
+    function _render_image_override_settings_field($display_type)
     {
         $hidden = !(isset($display_type->settings['override_image_settings']) ? $display_type->settings['override_image_settings'] : FALSE);
         $override_field = $this->_render_radio_field($display_type, 'override_image_settings', __('Override image settings', 'nggallery'), isset($display_type->settings['override_image_settings']) ? $display_type->settings['override_image_settings'] : 0, __('Overriding the image settings will create an additional set of images', 'nggallery'));
@@ -396,19 +413,24 @@ class Mixin_Form_Field_Generators extends Mixin
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_width_and_unit_field($display_type)
+    function _render_width_and_unit_field($display_type)
     {
         return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_width_and_unit', array('display_type_name' => $display_type->name, 'name' => 'width', 'label' => __('Gallery width', 'nggallery'), 'value' => $display_type->settings['width'], 'text' => __('An empty or 0 setting will make the gallery full width', 'nggallery'), 'placeholder' => __('(optional)', 'nggallery'), 'unit_name' => 'width_unit', 'unit_value' => $display_type->settings['width_unit'], 'options' => array('px' => __('Pixels', 'nggallery'), '%' => __('Percent', 'nggallery'))), TRUE);
     }
-    public function _get_aspect_ratio_options()
+    function _get_aspect_ratio_options()
     {
         return array('first_image' => __('First Image', 'nggallery'), 'image_average' => __('Average', 'nggallery'), '1.5' => '3:2 [1.5]', '1.333' => '4:3 [1.333]', '1.777' => '16:9 [1.777]', '1.6' => '16:10 [1.6]', '1.85' => '1.85:1 [1.85]', '2.39' => '2.39:1 [2.39]', '1.81' => '1.81:1 [1.81]', '1' => '1:1 (Square) [1]');
     }
 }
+/**
+ * Class C_Form_Manager
+ * @mixin Mixin_Form_Manager
+ * @implements I_Form_Manager
+ */
 class C_Form_Manager extends C_Component
 {
     static $_instances = array();
-    public $_forms = array();
+    var $_forms = array();
     /**
      * Returns an instance of the form manager
      * @returns C_Form_Manager
@@ -425,7 +447,7 @@ class C_Form_Manager extends C_Component
      * Defines the instance
      * @param mixed $context
      */
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Form_Manager');
@@ -440,7 +462,7 @@ class Mixin_Form_Manager extends Mixin
      * @param type $form_names
      * @return type
      */
-    public function add_form($type, $form_names)
+    function add_form($type, $form_names)
     {
         if (!isset($this->object->_forms[$type])) {
             $this->object->_forms[$type] = array();
@@ -459,7 +481,7 @@ class Mixin_Form_Manager extends Mixin
      * @param string|array $form_names
      * @return int
      */
-    public function add_forms($type, $form_names)
+    function add_forms($type, $form_names)
     {
         return $this->object->add_form($type, $form_names);
     }
@@ -469,7 +491,7 @@ class Mixin_Form_Manager extends Mixin
      * @param string|array $form_names
      * @return int	number of forms remaining for the type
      */
-    public function remove_form($type, $form_names)
+    function remove_form($type, $form_names)
     {
         $retval = 0;
         if (isset($this->object->_forms[$type])) {
@@ -488,7 +510,7 @@ class Mixin_Form_Manager extends Mixin
      * @param string|array $form_names
      * @return int
      */
-    public function remove_forms($type, $form_names)
+    function remove_forms($type, $form_names)
     {
         return $this->object->remove_form($type, $form_names);
     }
@@ -496,7 +518,7 @@ class Mixin_Form_Manager extends Mixin
      * Gets known form types
      * @return type
      */
-    public function get_known_types()
+    function get_known_types()
     {
         return array_keys($this->object->_forms);
     }
@@ -505,7 +527,7 @@ class Mixin_Form_Manager extends Mixin
      * @param string $type
      * @return array
      */
-    public function get_forms($type, $instantiate = FALSE)
+    function get_forms($type, $instantiate = FALSE)
     {
         $retval = array();
         if (isset($this->object->_forms[$type])) {
@@ -524,7 +546,7 @@ class Mixin_Form_Manager extends Mixin
      * @param string $type
      * @return int
      */
-    public function get_form_count($type)
+    function get_form_count($type)
     {
         $retval = 0;
         if (isset($this->object->_forms[$type])) {
@@ -538,7 +560,7 @@ class Mixin_Form_Manager extends Mixin
      * @param string $name
      * @return FALSE|int
      */
-    public function get_form_index($type, $name)
+    function get_form_index($type, $name)
     {
         $retval = FALSE;
         if ($this->object->get_form_count($type) > 0) {
@@ -554,7 +576,7 @@ class Mixin_Form_Manager extends Mixin
      * @param int $offset
      * @return int
      */
-    public function add_form_before($type, $before, $form_names, $offset = 0)
+    function add_form_before($type, $before, $form_names, $offset = 0)
     {
         $retval = 0;
         $index = FALSE;
@@ -584,13 +606,18 @@ class Mixin_Form_Manager extends Mixin
      * @param string|array $form_names
      * @return int
      */
-    public function add_form_after($type, $after, $form_names)
+    function add_form_after($type, $after, $form_names)
     {
         return $this->object->add_form_before($type, $after, $form_names, 1);
     }
 }
 if (!class_exists('C_NextGen_Admin_Installer')) {
 }
+/**
+ * Class C_NextGen_Admin_Page_Controller
+ * @mixin Mixin_NextGen_Admin_Page_Instance_Methods
+ * @implements I_NextGen_Admin_Page
+ */
 class C_NextGen_Admin_Page_Controller extends C_MVC_Controller
 {
     static $_instances = array();
@@ -602,7 +629,7 @@ class C_NextGen_Admin_Page_Controller extends C_MVC_Controller
         }
         return self::$_instances[$context];
     }
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         if (is_array($context)) {
             $this->name = $context[0];
@@ -619,14 +646,13 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
     /**
      * Authorizes the request
      */
-    public function is_authorized_request($privilege = NULL)
+    function is_authorized_request($privilege = NULL)
     {
         if (!$privilege) {
             $privilege = $this->object->get_required_permission();
         }
         $security = $this->get_registry()->get_utility('I_Security_Manager');
-        $retval = $sec_token = $security->get_request_token(str_replace(array(' ', '
-', '	'), '_', $privilege));
+        $retval = $sec_token = $security->get_request_token(str_replace(array(' ', "\n", "\t"), '_', $privilege));
         $sec_actor = $security->get_current_actor();
         // Ensure that the user has permission to access this page
         if (!$sec_actor->is_allowed($privilege)) {
@@ -642,14 +668,14 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Returns the permission required to access this page
      * @return string
      */
-    public function get_required_permission()
+    function get_required_permission()
     {
         return $this->object->name;
     }
     /**
      * Enqueues resources required by a NextGEN Admin page
      */
-    public function enqueue_backend_resources()
+    function enqueue_backend_resources()
     {
         wp_enqueue_script('jquery');
         $this->object->enqueue_jquery_ui_theme();
@@ -665,7 +691,7 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
         wp_enqueue_style('ngg_select2');
         wp_enqueue_script('ngg_select2');
     }
-    public function enqueue_jquery_ui_theme()
+    function enqueue_jquery_ui_theme()
     {
         $settings = C_NextGen_Settings::get_instance();
         wp_enqueue_style($settings->jquery_ui_theme, is_ssl() ? str_replace('http:', 'https:', $settings->jquery_ui_theme_url) : $settings->jquery_ui_theme_url, FALSE, $settings->jquery_ui_theme_version);
@@ -674,7 +700,7 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Returns the page title
      * @return string
      */
-    public function get_page_title()
+    function get_page_title()
     {
         return $this->object->name;
     }
@@ -682,7 +708,7 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Returns the page heading
      * @return string
      */
-    public function get_page_heading()
+    function get_page_heading()
     {
         return $this->object->get_page_title();
     }
@@ -690,19 +716,19 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Returns the type of forms to render on this page
      * @return string
      */
-    public function get_form_type()
+    function get_form_type()
     {
         return is_array($this->object->context) ? $this->object->context[0] : $this->object->context;
     }
-    public function get_success_message()
+    function get_success_message()
     {
-        return __('Saved successfully', 'nggallery');
+        return __("Saved successfully", 'nggallery');
     }
     /**
      * Returns an accordion tab, encapsulating the form
      * @param I_Form $form
      */
-    public function to_accordion_tab($form)
+    function to_accordion_tab($form)
     {
         return $this->object->render_partial('photocrati-nextgen_admin#accordion_tab', array('id' => $form->get_id(), 'title' => $form->get_title(), 'content' => $form->render(TRUE)), TRUE);
     }
@@ -710,7 +736,7 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Returns the
      * @return type
      */
-    public function get_forms()
+    function get_forms()
     {
         $forms = array();
         $form_manager = C_Form_Manager::get_instance();
@@ -723,17 +749,17 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Gets the action to be executed
      * @return string
      */
-    public function _get_action()
+    function _get_action()
     {
         $retval = preg_quote($this->object->param('action'), '/');
-        $retval = strtolower(preg_replace('/[^\\w]/', '_', $retval));
-        return preg_replace('/_{2,}/', '_', $retval) . '_action';
+        $retval = strtolower(preg_replace("/[^\\w]/", '_', $retval));
+        return preg_replace("/_{2,}/", "_", $retval) . '_action';
     }
     /**
      * Returns the template to be rendered for the index action
      * @return string
      */
-    public function index_template()
+    function index_template()
     {
         return 'photocrati-nextgen_admin#nextgen_admin_page';
     }
@@ -741,18 +767,18 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
      * Returns a list of parameters to include when rendering the view
      * @return array
      */
-    public function get_index_params()
+    function get_index_params()
     {
         return array();
     }
-    public function show_save_button()
+    function show_save_button()
     {
         return TRUE;
     }
     /**
      * Renders a NextGEN Admin Page using jQuery Accordions
      */
-    public function index_action()
+    function index_action()
     {
         $this->object->enqueue_backend_resources();
         if ($token = $this->object->is_authorized_request()) {
@@ -798,10 +824,395 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
         }
     }
 }
+/**
+ * Class C_NextGEN_Wizard
+ */
+class C_NextGEN_Wizard
+{
+    var $_id = null;
+    var $_active = false;
+    var $_priority = 100;
+    var $_data = array();
+    var $_steps = array();
+    var $_current_step = null;
+    var $_view = null;
+    function __construct($id)
+    {
+        $this->_id = $id;
+    }
+    function get_id()
+    {
+        return $this->_id;
+    }
+    function is_active()
+    {
+        return $this->_active;
+    }
+    function set_active($active)
+    {
+        $this->_active = $active;
+    }
+    function get_priority()
+    {
+        return $this->_priority;
+    }
+    function set_priority($priority)
+    {
+        $this->_priority = $priority;
+    }
+    function is_completed()
+    {
+        if (isset($this->_data['state'])) {
+            return $this->_data['state'] == 'completed';
+        }
+        return false;
+    }
+    function set_completed()
+    {
+        $this->_data['state'] = 'completed';
+    }
+    function is_cancelled()
+    {
+        if (isset($this->_data['state'])) {
+            return $this->_data['state'] == 'cancelled';
+        }
+        return false;
+    }
+    function set_cancelled()
+    {
+        $this->_data['state'] = 'cancelled';
+    }
+    function add_step($step_id, $label = null, $properties = null)
+    {
+        $step = array('label' => $label, 'target_anchor' => 'top center', 'popup_anchor' => 'bottom center', 'target_wait' => '0');
+        if ($properties != null) {
+            $step = array_merge($step, $properties);
+        }
+        $this->_steps[$step_id] = $step;
+    }
+    function get_step_list()
+    {
+        return array_keys($this->_steps);
+    }
+    function get_step_property($step_id, $prop_name)
+    {
+        if (isset($this->_steps[$step_id][$prop_name])) {
+            return $this->_steps[$step_id][$prop_name];
+        }
+        return null;
+    }
+    function set_step_property($step_id, $prop_name, $prop_value)
+    {
+        if (!isset($this->_steps[$step_id])) {
+            $this->add_step($step_id);
+        }
+        if (isset($this->_steps[$step_id])) {
+            $this->_steps[$step_id][$prop_name] = $prop_value;
+        }
+    }
+    function get_step_label($step_id)
+    {
+        return $this->get_step_property($step_id, 'label');
+    }
+    function set_step_label($step_id, $label)
+    {
+        $this->set_step_property($step_id, 'label', $label);
+    }
+    function get_step_text($step_id)
+    {
+        return $this->get_step_property($step_id, 'text');
+    }
+    function set_step_text($step_id, $text)
+    {
+        $this->set_step_property($step_id, 'text', $text);
+    }
+    function get_step_target_anchor($step_id)
+    {
+        return $this->get_step_property($step_id, 'target_anchor');
+    }
+    function set_step_target_anchor($step_id, $anchor)
+    {
+        $this->set_step_property($step_id, 'target_anchor', $anchor);
+    }
+    function get_step_target_wait($step_id)
+    {
+        return $this->get_step_property($step_id, 'target_wait');
+    }
+    function set_step_target_wait($step_id, $wait)
+    {
+        $this->set_step_property($step_id, 'target_wait', $wait);
+    }
+    function get_step_lazy($step_id)
+    {
+        return $this->get_step_property($step_id, 'lazy');
+    }
+    function set_step_lazy($step_id, $lazy)
+    {
+        $this->set_step_property($step_id, 'lazy', $lazy);
+    }
+    function get_step_context($step_id)
+    {
+        return $this->get_step_property($step_id, 'context');
+    }
+    function set_step_context($step_id, $context)
+    {
+        $this->set_step_property($step_id, 'context', $context);
+    }
+    function get_step_popup_anchor($step_id)
+    {
+        return $this->get_step_property($step_id, 'popup_anchor');
+    }
+    function set_step_popup_anchor($step_id, $anchor)
+    {
+        $this->set_step_property($step_id, 'popup_anchor', $anchor);
+    }
+    function get_step_target($step_id)
+    {
+        return $this->get_step_property($step_id, 'target');
+    }
+    function set_step_target($step_id, $target, $target_anchor = null, $popup_anchor = null)
+    {
+        $this->set_step_property($step_id, 'target', $target);
+        if ($target_anchor != null) {
+            $this->set_step_target_anchor($step_id, $target_anchor);
+        }
+        if ($popup_anchor != null) {
+            $this->set_step_popup_anchor($step_id, $popup_anchor);
+        }
+    }
+    function get_step_view($step_id)
+    {
+        return $this->get_step_property($step_id, 'view');
+    }
+    function set_step_view($step_id, $view)
+    {
+        $this->set_step_property($step_id, 'view', $view);
+    }
+    function get_step_condition($step_id)
+    {
+        return $this->get_step_property($step_id, 'condition');
+    }
+    function set_step_condition($step_id, $condition_type, $condition_value, $condition_context = null, $condition_timeout = -1)
+    {
+        $condition = array('type' => $condition_type, 'value' => $condition_value, 'context' => $condition_context, 'timeout' => $condition_timeout);
+        $this->set_step_property($step_id, 'condition', $condition);
+    }
+    function get_current_step()
+    {
+        return $this->_current_step;
+    }
+    function set_current_step($step_id)
+    {
+        $this->_current_step = $step_id;
+    }
+    function get_view()
+    {
+        return $this->_view;
+    }
+    function set_view($view)
+    {
+        $this->_view = $view;
+    }
+    function toData()
+    {
+        $steps = array();
+        $view = $this->_view;
+        $current_step = $this->_current_step;
+        foreach ($this->_steps as $step_id => $step) {
+            if ($current_step == null) {
+                $current_step = $step_id;
+            }
+            if ($current_step == $step_id && isset($step['view'])) {
+                $view = $step['view'];
+            }
+            $step['id'] = $step_id;
+            $steps[] = $step;
+        }
+        $ret = new stdClass();
+        $ret->id = $this->_id;
+        $ret->view = $view;
+        $ret->steps = $steps;
+        $ret->current_step = $this->_current_step;
+        return $ret;
+    }
+    function _set_data($data)
+    {
+        if ($data == null) {
+            $data = array();
+        }
+        $this->_data = $data;
+    }
+}
+/**
+ * Class C_NextGEN_Wizard_Manager
+ * @implements I_NextGEN_Wizard_Manager
+ */
+class C_NextGEN_Wizard_Manager extends C_Component
+{
+    static $_instances = array();
+    var $_active = false;
+    var $_wizards = array();
+    var $_wizards_data = array();
+    var $_starter = null;
+    var $_handled_query = false;
+    /**
+     * Returns an instance of the wizard manager
+     * @returns C_NextGEN_Wizard_Manager
+     */
+    static function get_instance($context = FALSE)
+    {
+        if (!isset(self::$_instances[$context])) {
+            $klass = get_class();
+            self::$_instances[$context] = new $klass($context);
+        }
+        return self::$_instances[$context];
+    }
+    /**
+     * Defines the instance
+     * @param mixed $context
+     */
+    function define($context = FALSE)
+    {
+        parent::define($context);
+        $this->implement('I_NextGEN_Wizard_Manager');
+        $this->_wizards_data = get_option('ngg_wizards');
+    }
+    function add_wizard($id, $active = false, $priority = 100)
+    {
+        $wizard = new C_NextGEN_Wizard($id);
+        $wizard->set_active($active);
+        $wizard->set_priority($priority);
+        if (isset($this->_wizards_data[$id])) {
+            $wizard->_set_data($this->_wizards_data[$id]);
+        }
+        $this->_wizards[$id] = $wizard;
+        return $wizard;
+    }
+    function remove_wizard($id)
+    {
+        if (isset($this->_wizards[$id])) {
+            unset($this->_wizards[$id]);
+        }
+    }
+    function get_wizard($id)
+    {
+        if (isset($this->_wizards[$id])) {
+            return $this->_wizards[$id];
+        }
+        return null;
+    }
+    function _sort_wizards($wizard1, $wizard2)
+    {
+        $diff = $wizard1->get_priority() - $wizard2->get_priority();
+        if ($diff == 0) {
+            $wizard_ids = array_keys($this->_wizards);
+            $index1 = array_search($wizard1->get_id(), $wizard_ids, true);
+            $index2 = array_search($wizard2->get_id(), $wizard_ids, true);
+            if ($index1 !== false && $index2 !== false) {
+                $diff = $index1 - $index2;
+            }
+        }
+        return $diff;
+    }
+    function get_next_wizard()
+    {
+        if (!$this->is_active()) {
+            return null;
+        }
+        $wizards = $this->_wizards;
+        if (count($wizards) > 0) {
+            if (count($wizards) > 1) {
+                uasort($wizards, array($this, '_sort_wizards'));
+            }
+            foreach ($wizards as $id => $wizard) {
+                if ($wizard->is_active()) {
+                    return $wizard;
+                }
+            }
+        }
+        return null;
+    }
+    function get_running_wizard()
+    {
+        if (!$this->is_active()) {
+            return null;
+        }
+        $wizards = $this->_wizards;
+        if (count($wizards) > 0) {
+            if (count($wizards) > 1) {
+                uasort($wizards, array($this, '_sort_wizards'));
+            }
+            foreach ($wizards as $id => $wizard) {
+                if ($wizard->is_active() && $wizard->get_current_step() != null) {
+                    return $wizard;
+                }
+            }
+        }
+        return null;
+    }
+    function get_starter()
+    {
+        return $this->_starter;
+    }
+    function set_starter($starter)
+    {
+        $this->_starter = $starter;
+    }
+    function is_active()
+    {
+        return $this->_active;
+    }
+    function set_active($active)
+    {
+        $this->_active = $active;
+    }
+    function generate_wizard_query($wizard, $action, $params = array())
+    {
+    }
+    function handle_wizard_query($parameters = NULL, $force = false)
+    {
+        if ($this->_handled_query && !$force) {
+            return;
+        }
+        if ($parameters == null) {
+            $parameters = $_REQUEST;
+        }
+        // determine if we're currently in the middle of a wizard (i.e. wizard that involves multiple pages)
+        // if so then determine the current step
+        if (isset($parameters['ngg_wizard'])) {
+            $wizard = $this->get_wizard($parameters['ngg_wizard']);
+            if ($wizard != null) {
+                $wizard->set_active(true);
+                $steps = $wizard->get_step_list();
+                $count = count($steps);
+                $current_step = isset($parameters['ngg_wizard_step']) ? $parameters['ngg_wizard_step'] : null;
+                if ($current_step != null) {
+                    $idx = array_search($current_step, $steps);
+                    if ($idx !== false) {
+                        $idx++;
+                        if ($idx < $count) {
+                            $wizard->set_current_step($steps[$idx]);
+                        }
+                    }
+                } else {
+                    if ($count > 0) {
+                        $wizard->set_current_step($steps[0]);
+                    }
+                }
+            }
+            $this->_handled_query = true;
+        }
+    }
+}
+/**
+ * Class C_Page_Manager
+ * @mixin Mixin_Page_Manager
+ * @implements I_Page_Manager
+ */
 class C_Page_Manager extends C_Component
 {
     static $_instance = NULL;
-    public $_pages = array();
+    var $_pages = array();
     /**
      * Gets an instance of the Page Manager
      * @param string $context
@@ -819,7 +1230,7 @@ class C_Page_Manager extends C_Component
      * Defines the instance of the Page Manager
      * @param type $context
      */
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Page_Manager');
@@ -828,7 +1239,7 @@ class C_Page_Manager extends C_Component
 }
 class Mixin_Page_Manager extends Mixin
 {
-    public function add($slug, $properties = array())
+    function add($slug, $properties = array())
     {
         if (!isset($properties['adapter'])) {
             $properties['adapter'] = NULL;
@@ -847,7 +1258,7 @@ class Mixin_Page_Manager extends Mixin
         }
         $this->object->_pages[$slug] = $properties;
     }
-    public function move_page($slug, $other_slug, $after = false)
+    function move_page($slug, $other_slug, $after = false)
     {
         $page_list = $this->object->_pages;
         if (isset($page_list[$slug]) && isset($page_list[$other_slug])) {
@@ -865,21 +1276,21 @@ class Mixin_Page_Manager extends Mixin
             $this->object->_pages = array_combine($slug_list, $item_list);
         }
     }
-    public function remove($slug)
+    function remove($slug)
     {
         unset($this->object->_pages[$slug]);
     }
-    public function get_all()
+    function get_all()
     {
         return $this->object->_pages;
     }
-    public function setup()
+    function setup()
     {
         $registry = $this->get_registry();
         $controllers = array();
         foreach ($this->object->_pages as $slug => $properties) {
-            $page_title = 'Unnamed Page';
-            $menu_title = 'Unnamed Page';
+            $page_title = "Unnamed Page";
+            $menu_title = "Unnamed Page";
             $permission = NULL;
             $callback = NULL;
             // There's two type of pages we can have. Some are powered by our controllers, and others
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/admin_notices.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/admin_notices.min.js
index dff36997e4f0f7116b14248c3844f1526d5036dc..a5e89a7ea5ac28675ebd79164aa96731ab8539ec 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/admin_notices.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/admin_notices.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('g(3($){$(\'.9 .f\').h(3(e){e.i();4 $5=$(j).d(\'.9\');4 $6=$5.a(\'b-c-7\');2($6.k>0){4 8=v+\'&7=\'+$6;$.u(8,3(1){2(q(1)!=\'m\')1=n.o(1);2(1.t){$5.p()}r l(1.s)})}})});',32,32,'|response|if|function|var|notice|notice_name|name|url|ngg_admin_notice|attr|data|notification|parents||dismiss|jQuery|click|preventDefault|this|length|alert|object|JSON|parse|fadeOut|typeof|else|msg|success|post|ngg_dismiss_url'.split('|'),0,{}))
+jQuery(function(n){n(".ngg_admin_notice .dismiss").click(function(t){t.preventDefault();var i=n(this).parents(".ngg_admin_notice"),e=i.attr("data-notification-name");if(e.length>0){var a=ngg_dismiss_url+"&name="+e;n.post(a,function(n){"object"!=typeof n&&(n=JSON.parse(n)),n.success?i.fadeOut():alert(n.msg)})}})});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-theme.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..31d8882661324aedb8693f8bb7322c4af8374ae0
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-theme.css
@@ -0,0 +1,587 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default.disabled,
+.btn-primary.disabled,
+.btn-success.disabled,
+.btn-info.disabled,
+.btn-warning.disabled,
+.btn-danger.disabled,
+.btn-default[disabled],
+.btn-primary[disabled],
+.btn-success[disabled],
+.btn-info[disabled],
+.btn-warning[disabled],
+.btn-danger[disabled],
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-danger {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+  text-shadow: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+}
+.btn-default {
+  text-shadow: 0 1px 0 #fff;
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #dbdbdb;
+  border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+  background-color: #e0e0e0;
+  background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+  background-color: #e0e0e0;
+  border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+  background-color: #e0e0e0;
+  background-image: none;
+}
+.btn-primary {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+  background-color: #265a88;
+  background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #265a88;
+  border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+  background-color: #265a88;
+  background-image: none;
+}
+.btn-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+  background-color: #419641;
+  background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+  background-color: #419641;
+  border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+  background-color: #419641;
+  background-image: none;
+}
+.btn-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+  background-color: #2aabd2;
+  background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+  background-color: #2aabd2;
+  border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+  background-color: #2aabd2;
+  background-image: none;
+}
+.btn-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #e38d13;
+}
+.btn-warning:hover,
+.btn-warning:focus {
+  background-color: #eb9316;
+  background-position: 0 -15px;
+}
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #eb9316;
+  border-color: #e38d13;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+  background-color: #eb9316;
+  background-image: none;
+}
+.btn-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #b92c28;
+}
+.btn-danger:hover,
+.btn-danger:focus {
+  background-color: #c12e2a;
+  background-position: 0 -15px;
+}
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #c12e2a;
+  border-color: #b92c28;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+  background-color: #c12e2a;
+  background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  background-color: #e8e8e8;
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  background-color: #2e6da4;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.navbar-default {
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+.navbar-inverse {
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  border-radius: 0;
+}
+@media (max-width: 767px) {
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+    background-repeat: repeat-x;
+  }
+}
+.alert {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+}
+.alert-success {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #b2dba1;
+}
+.alert-info {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #9acfea;
+}
+.alert-warning {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #f5e79e;
+}
+.alert-danger {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dca7a7;
+}
+.progress {
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.list-group {
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  text-shadow: 0 -1px 0 #286090;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+  text-shadow: none;
+}
+.panel {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+}
+.panel-default > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.well {
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dcdcdc;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-theme.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-theme.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..a7046af59888307fe92917cc80d9c14ccfbf9f46
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-theme.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */.navbar-default,.navbar-inverse{border-radius:4px;background-repeat:repeat-x}.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-tooltip.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-tooltip.css
new file mode 100644
index 0000000000000000000000000000000000000000..dc93848b73ad5f01336012b8a467f1e47d154678
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-tooltip.css
@@ -0,0 +1,546 @@
+/*!
+ * Bootstrap v3.3.7 (Tooltips) (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.tooltip {
+  position: absolute;
+  z-index: 1070;
+  display: block;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 12px;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  word-spacing: normal;
+  word-wrap: normal;
+  white-space: normal;
+  filter: alpha(opacity=0);
+  opacity: 0;
+
+  line-break: auto;
+}
+.tooltip.in {
+  filter: alpha(opacity=90);
+  opacity: .9;
+}
+.tooltip.top {
+  padding: 5px 0;
+  margin-top: -3px;
+}
+.tooltip.right {
+  padding: 0 5px;
+  margin-left: 3px;
+}
+.tooltip.bottom {
+  padding: 5px 0;
+  margin-top: 3px;
+}
+.tooltip.left {
+  padding: 0 5px;
+  margin-left: -3px;
+}
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #fff;
+  text-align: center;
+  background-color: #000;
+  border-radius: 4px;
+}
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+  right: 5px;
+  bottom: 0;
+  margin-bottom: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+  bottom: 0;
+  left: 5px;
+  margin-bottom: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-width: 5px 5px 5px 0;
+  border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-width: 5px 0 5px 5px;
+  border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+  top: 0;
+  right: 5px;
+  margin-top: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+  top: 0;
+  left: 5px;
+  margin-top: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1060;
+  display: none;
+  max-width: 276px;
+  padding: 1px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  word-spacing: normal;
+  word-wrap: normal;
+  white-space: normal;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+  line-break: auto;
+}
+.popover.top {
+  margin-top: -10px;
+}
+.popover.right {
+  margin-left: 10px;
+}
+.popover.bottom {
+  margin-top: 10px;
+}
+.popover.left {
+  margin-left: -10px;
+}
+.popover-title {
+  padding: 8px 14px;
+  margin: 0;
+  font-size: 14px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  border-radius: 5px 5px 0 0;
+}
+.popover-content {
+  padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.popover > .arrow {
+  border-width: 11px;
+}
+.popover > .arrow:after {
+  content: "";
+  border-width: 10px;
+}
+.popover.top > .arrow {
+  bottom: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-color: #999;
+  border-top-color: rgba(0, 0, 0, .25);
+  border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+  bottom: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+.popover.right > .arrow {
+  top: 50%;
+  left: -11px;
+  margin-top: -11px;
+  border-right-color: #999;
+  border-right-color: rgba(0, 0, 0, .25);
+  border-left-width: 0;
+}
+.popover.right > .arrow:after {
+  bottom: -10px;
+  left: 1px;
+  content: " ";
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+.popover.bottom > .arrow {
+  top: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-width: 0;
+  border-bottom-color: #999;
+  border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+  top: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+  top: 50%;
+  right: -11px;
+  margin-top: -11px;
+  border-right-width: 0;
+  border-left-color: #999;
+  border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+  right: 1px;
+  bottom: -10px;
+  content: " ";
+  border-right-width: 0;
+  border-left-color: #fff;
+}/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.tooltip {
+  position: absolute;
+  z-index: 1070;
+  display: block;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 12px;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  word-spacing: normal;
+  word-wrap: normal;
+  white-space: normal;
+  filter: alpha(opacity=0);
+  opacity: 0;
+
+  line-break: auto;
+}
+.tooltip.in {
+  filter: alpha(opacity=90);
+  opacity: .9;
+}
+.tooltip.top {
+  padding: 5px 0;
+  margin-top: -3px;
+}
+.tooltip.right {
+  padding: 0 5px;
+  margin-left: 3px;
+}
+.tooltip.bottom {
+  padding: 5px 0;
+  margin-top: 3px;
+}
+.tooltip.left {
+  padding: 0 5px;
+  margin-left: -3px;
+}
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #fff;
+  text-align: center;
+  background-color: #000;
+  border-radius: 4px;
+}
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+  right: 5px;
+  bottom: 0;
+  margin-bottom: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+  bottom: 0;
+  left: 5px;
+  margin-bottom: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-width: 5px 5px 5px 0;
+  border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-width: 5px 0 5px 5px;
+  border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+  top: 0;
+  right: 5px;
+  margin-top: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+  top: 0;
+  left: 5px;
+  margin-top: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1060;
+  display: none;
+  max-width: 276px;
+  padding: 1px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  word-spacing: normal;
+  word-wrap: normal;
+  white-space: normal;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+  line-break: auto;
+}
+.popover.top {
+  margin-top: -10px;
+}
+.popover.right {
+  margin-left: 10px;
+}
+.popover.bottom {
+  margin-top: 10px;
+}
+.popover.left {
+  margin-left: -10px;
+}
+.popover-title {
+  padding: 8px 14px;
+  margin: 0;
+  font-size: 14px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  border-radius: 5px 5px 0 0;
+}
+.popover-content {
+  padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.popover > .arrow {
+  border-width: 11px;
+}
+.popover > .arrow:after {
+  content: "";
+  border-width: 10px;
+}
+.popover.top > .arrow {
+  bottom: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-color: #999;
+  border-top-color: rgba(0, 0, 0, .25);
+  border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+  bottom: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+.popover.right > .arrow {
+  top: 50%;
+  left: -11px;
+  margin-top: -11px;
+  border-right-color: #999;
+  border-right-color: rgba(0, 0, 0, .25);
+  border-left-width: 0;
+}
+.popover.right > .arrow:after {
+  bottom: -10px;
+  left: 1px;
+  content: " ";
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+.popover.bottom > .arrow {
+  top: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-width: 0;
+  border-bottom-color: #999;
+  border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+  top: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+  top: 50%;
+  right: -11px;
+  margin-top: -11px;
+  border-right-width: 0;
+  border-left-color: #999;
+  border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+  right: 1px;
+  bottom: -10px;
+  content: " ";
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+.popover .btn {
+display: inline-block;
+padding: 6px 12px;
+margin-bottom: 0;
+font-size: 14px;
+font-weight: normal;
+line-height: 1.428;
+text-align: center;
+white-space: nowrap;
+vertical-align: middle;
+cursor: pointer;
+-webkit-user-select: none;
+-moz-user-select: none;
+-ms-user-select: none;
+user-select: none;
+background-image: none;
+border: 1px solid transparent;
+border-radius: 4px;
+}
+.popover .btn:focus,
+.popover .btn:active:focus,
+.popover .btn.active:focus,
+.popover .btn.focus,
+.popover .btn:active.focus,
+.popover .btn.active.focus {
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.popover .btn:hover,
+.popover .btn:focus,
+.popover .btn.focus {
+  color: #333;
+  text-decoration: none;
+}
+.popover .btn:active,
+.popover .btn.active {
+  background-image: none;
+  outline: 0;
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-tooltip.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-tooltip.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..f3e65876cd10c928a6c15faa326bca586c2cb3fa
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap-tooltip.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap v3.3.7 (Tooltips) (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;border-width:5px 5px 0;border-top-color:#000}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;line-height:1.42857143;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;line-break:auto;position:absolute;font-weight:400;text-decoration:none}.popover,.tooltip,.tooltip-arrow{position:absolute}.popover,.tooltip{text-decoration:none}/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */.tooltip{z-index:1070;display:block;font-size:12px;text-align:left;text-align:start;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.top-left .tooltip-arrow{right:5px;margin-bottom:-5px}.tooltip.top-right .tooltip-arrow{left:5px;margin-bottom:-5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;text-align:left;text-align:start;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.bottom>.arrow:after,.popover.left>.arrow:after,.popover.right>.arrow:after,.popover.top>.arrow:after{content:" "}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;border-right-width:0;border-left-color:#fff}.popover .btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.428;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.popover .btn.active.focus,.popover .btn.active:focus,.popover .btn.focus,.popover .btn:active.focus,.popover .btn:active:focus,.popover .btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.popover .btn.focus,.popover .btn:focus,.popover .btn:hover{color:#333;text-decoration:none}.popover .btn.active,.popover .btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap.css
new file mode 100644
index 0000000000000000000000000000000000000000..6167622cecfb5c0f04156363565e3d4109fc55c5
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap.css
@@ -0,0 +1,6757 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+  font-family: sans-serif;
+  -webkit-text-size-adjust: 100%;
+      -ms-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+  vertical-align: baseline;
+}
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+[hidden],
+template {
+  display: none;
+}
+a {
+  background-color: transparent;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: bold;
+}
+dfn {
+  font-style: italic;
+}
+h1 {
+  margin: .67em 0;
+  font-size: 2em;
+}
+mark {
+  color: #000;
+  background: #ff0;
+}
+small {
+  font-size: 80%;
+}
+sub,
+sup {
+  position: relative;
+  font-size: 75%;
+  line-height: 0;
+  vertical-align: baseline;
+}
+sup {
+  top: -.5em;
+}
+sub {
+  bottom: -.25em;
+}
+img {
+  border: 0;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure {
+  margin: 1em 40px;
+}
+hr {
+  height: 0;
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+}
+pre {
+  overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+  margin: 0;
+  font: inherit;
+  color: inherit;
+}
+button {
+  overflow: visible;
+}
+button,
+select {
+  text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+  -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+fieldset {
+  padding: .35em .625em .75em;
+  margin: 0 2px;
+  border: 1px solid #c0c0c0;
+}
+legend {
+  padding: 0;
+  border: 0;
+}
+textarea {
+  overflow: auto;
+}
+optgroup {
+  font-weight: bold;
+}
+table {
+  border-spacing: 0;
+  border-collapse: collapse;
+}
+td,
+th {
+  padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+  *,
+  *:before,
+  *:after {
+    color: #000 !important;
+    text-shadow: none !important;
+    background: transparent !important;
+    -webkit-box-shadow: none !important;
+            box-shadow: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  pre,
+  blockquote {
+    border: 1px solid #999;
+
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+  .navbar {
+    display: none;
+  }
+  .btn > .caret,
+  .dropup > .btn > .caret {
+    border-top-color: #000 !important;
+  }
+  .label {
+    border: 1px solid #000;
+  }
+  .table {
+    border-collapse: collapse !important;
+  }
+  .table td,
+  .table th {
+    background-color: #fff !important;
+  }
+  .table-bordered th,
+  .table-bordered td {
+    border: 1px solid #ddd !important;
+  }
+}
+@font-face {
+  font-family: 'Glyphicons Halflings';
+
+  src: url('../fonts/glyphicons-halflings-regular.eot');
+  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+  position: relative;
+  top: 1px;
+  display: inline-block;
+  font-family: 'Glyphicons Halflings';
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+  content: "\002a";
+}
+.glyphicon-plus:before {
+  content: "\002b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+  content: "\20ac";
+}
+.glyphicon-minus:before {
+  content: "\2212";
+}
+.glyphicon-cloud:before {
+  content: "\2601";
+}
+.glyphicon-envelope:before {
+  content: "\2709";
+}
+.glyphicon-pencil:before {
+  content: "\270f";
+}
+.glyphicon-glass:before {
+  content: "\e001";
+}
+.glyphicon-music:before {
+  content: "\e002";
+}
+.glyphicon-search:before {
+  content: "\e003";
+}
+.glyphicon-heart:before {
+  content: "\e005";
+}
+.glyphicon-star:before {
+  content: "\e006";
+}
+.glyphicon-star-empty:before {
+  content: "\e007";
+}
+.glyphicon-user:before {
+  content: "\e008";
+}
+.glyphicon-film:before {
+  content: "\e009";
+}
+.glyphicon-th-large:before {
+  content: "\e010";
+}
+.glyphicon-th:before {
+  content: "\e011";
+}
+.glyphicon-th-list:before {
+  content: "\e012";
+}
+.glyphicon-ok:before {
+  content: "\e013";
+}
+.glyphicon-remove:before {
+  content: "\e014";
+}
+.glyphicon-zoom-in:before {
+  content: "\e015";
+}
+.glyphicon-zoom-out:before {
+  content: "\e016";
+}
+.glyphicon-off:before {
+  content: "\e017";
+}
+.glyphicon-signal:before {
+  content: "\e018";
+}
+.glyphicon-cog:before {
+  content: "\e019";
+}
+.glyphicon-trash:before {
+  content: "\e020";
+}
+.glyphicon-home:before {
+  content: "\e021";
+}
+.glyphicon-file:before {
+  content: "\e022";
+}
+.glyphicon-time:before {
+  content: "\e023";
+}
+.glyphicon-road:before {
+  content: "\e024";
+}
+.glyphicon-download-alt:before {
+  content: "\e025";
+}
+.glyphicon-download:before {
+  content: "\e026";
+}
+.glyphicon-upload:before {
+  content: "\e027";
+}
+.glyphicon-inbox:before {
+  content: "\e028";
+}
+.glyphicon-play-circle:before {
+  content: "\e029";
+}
+.glyphicon-repeat:before {
+  content: "\e030";
+}
+.glyphicon-refresh:before {
+  content: "\e031";
+}
+.glyphicon-list-alt:before {
+  content: "\e032";
+}
+.glyphicon-lock:before {
+  content: "\e033";
+}
+.glyphicon-flag:before {
+  content: "\e034";
+}
+.glyphicon-headphones:before {
+  content: "\e035";
+}
+.glyphicon-volume-off:before {
+  content: "\e036";
+}
+.glyphicon-volume-down:before {
+  content: "\e037";
+}
+.glyphicon-volume-up:before {
+  content: "\e038";
+}
+.glyphicon-qrcode:before {
+  content: "\e039";
+}
+.glyphicon-barcode:before {
+  content: "\e040";
+}
+.glyphicon-tag:before {
+  content: "\e041";
+}
+.glyphicon-tags:before {
+  content: "\e042";
+}
+.glyphicon-book:before {
+  content: "\e043";
+}
+.glyphicon-bookmark:before {
+  content: "\e044";
+}
+.glyphicon-print:before {
+  content: "\e045";
+}
+.glyphicon-camera:before {
+  content: "\e046";
+}
+.glyphicon-font:before {
+  content: "\e047";
+}
+.glyphicon-bold:before {
+  content: "\e048";
+}
+.glyphicon-italic:before {
+  content: "\e049";
+}
+.glyphicon-text-height:before {
+  content: "\e050";
+}
+.glyphicon-text-width:before {
+  content: "\e051";
+}
+.glyphicon-align-left:before {
+  content: "\e052";
+}
+.glyphicon-align-center:before {
+  content: "\e053";
+}
+.glyphicon-align-right:before {
+  content: "\e054";
+}
+.glyphicon-align-justify:before {
+  content: "\e055";
+}
+.glyphicon-list:before {
+  content: "\e056";
+}
+.glyphicon-indent-left:before {
+  content: "\e057";
+}
+.glyphicon-indent-right:before {
+  content: "\e058";
+}
+.glyphicon-facetime-video:before {
+  content: "\e059";
+}
+.glyphicon-picture:before {
+  content: "\e060";
+}
+.glyphicon-map-marker:before {
+  content: "\e062";
+}
+.glyphicon-adjust:before {
+  content: "\e063";
+}
+.glyphicon-tint:before {
+  content: "\e064";
+}
+.glyphicon-edit:before {
+  content: "\e065";
+}
+.glyphicon-share:before {
+  content: "\e066";
+}
+.glyphicon-check:before {
+  content: "\e067";
+}
+.glyphicon-move:before {
+  content: "\e068";
+}
+.glyphicon-step-backward:before {
+  content: "\e069";
+}
+.glyphicon-fast-backward:before {
+  content: "\e070";
+}
+.glyphicon-backward:before {
+  content: "\e071";
+}
+.glyphicon-play:before {
+  content: "\e072";
+}
+.glyphicon-pause:before {
+  content: "\e073";
+}
+.glyphicon-stop:before {
+  content: "\e074";
+}
+.glyphicon-forward:before {
+  content: "\e075";
+}
+.glyphicon-fast-forward:before {
+  content: "\e076";
+}
+.glyphicon-step-forward:before {
+  content: "\e077";
+}
+.glyphicon-eject:before {
+  content: "\e078";
+}
+.glyphicon-chevron-left:before {
+  content: "\e079";
+}
+.glyphicon-chevron-right:before {
+  content: "\e080";
+}
+.glyphicon-plus-sign:before {
+  content: "\e081";
+}
+.glyphicon-minus-sign:before {
+  content: "\e082";
+}
+.glyphicon-remove-sign:before {
+  content: "\e083";
+}
+.glyphicon-ok-sign:before {
+  content: "\e084";
+}
+.glyphicon-question-sign:before {
+  content: "\e085";
+}
+.glyphicon-info-sign:before {
+  content: "\e086";
+}
+.glyphicon-screenshot:before {
+  content: "\e087";
+}
+.glyphicon-remove-circle:before {
+  content: "\e088";
+}
+.glyphicon-ok-circle:before {
+  content: "\e089";
+}
+.glyphicon-ban-circle:before {
+  content: "\e090";
+}
+.glyphicon-arrow-left:before {
+  content: "\e091";
+}
+.glyphicon-arrow-right:before {
+  content: "\e092";
+}
+.glyphicon-arrow-up:before {
+  content: "\e093";
+}
+.glyphicon-arrow-down:before {
+  content: "\e094";
+}
+.glyphicon-share-alt:before {
+  content: "\e095";
+}
+.glyphicon-resize-full:before {
+  content: "\e096";
+}
+.glyphicon-resize-small:before {
+  content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+  content: "\e101";
+}
+.glyphicon-gift:before {
+  content: "\e102";
+}
+.glyphicon-leaf:before {
+  content: "\e103";
+}
+.glyphicon-fire:before {
+  content: "\e104";
+}
+.glyphicon-eye-open:before {
+  content: "\e105";
+}
+.glyphicon-eye-close:before {
+  content: "\e106";
+}
+.glyphicon-warning-sign:before {
+  content: "\e107";
+}
+.glyphicon-plane:before {
+  content: "\e108";
+}
+.glyphicon-calendar:before {
+  content: "\e109";
+}
+.glyphicon-random:before {
+  content: "\e110";
+}
+.glyphicon-comment:before {
+  content: "\e111";
+}
+.glyphicon-magnet:before {
+  content: "\e112";
+}
+.glyphicon-chevron-up:before {
+  content: "\e113";
+}
+.glyphicon-chevron-down:before {
+  content: "\e114";
+}
+.glyphicon-retweet:before {
+  content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+  content: "\e116";
+}
+.glyphicon-folder-close:before {
+  content: "\e117";
+}
+.glyphicon-folder-open:before {
+  content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+  content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+  content: "\e120";
+}
+.glyphicon-hdd:before {
+  content: "\e121";
+}
+.glyphicon-bullhorn:before {
+  content: "\e122";
+}
+.glyphicon-bell:before {
+  content: "\e123";
+}
+.glyphicon-certificate:before {
+  content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+  content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+  content: "\e126";
+}
+.glyphicon-hand-right:before {
+  content: "\e127";
+}
+.glyphicon-hand-left:before {
+  content: "\e128";
+}
+.glyphicon-hand-up:before {
+  content: "\e129";
+}
+.glyphicon-hand-down:before {
+  content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+  content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+  content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+  content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+  content: "\e134";
+}
+.glyphicon-globe:before {
+  content: "\e135";
+}
+.glyphicon-wrench:before {
+  content: "\e136";
+}
+.glyphicon-tasks:before {
+  content: "\e137";
+}
+.glyphicon-filter:before {
+  content: "\e138";
+}
+.glyphicon-briefcase:before {
+  content: "\e139";
+}
+.glyphicon-fullscreen:before {
+  content: "\e140";
+}
+.glyphicon-dashboard:before {
+  content: "\e141";
+}
+.glyphicon-paperclip:before {
+  content: "\e142";
+}
+.glyphicon-heart-empty:before {
+  content: "\e143";
+}
+.glyphicon-link:before {
+  content: "\e144";
+}
+.glyphicon-phone:before {
+  content: "\e145";
+}
+.glyphicon-pushpin:before {
+  content: "\e146";
+}
+.glyphicon-usd:before {
+  content: "\e148";
+}
+.glyphicon-gbp:before {
+  content: "\e149";
+}
+.glyphicon-sort:before {
+  content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+  content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+  content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+  content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+  content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+  content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+  content: "\e156";
+}
+.glyphicon-unchecked:before {
+  content: "\e157";
+}
+.glyphicon-expand:before {
+  content: "\e158";
+}
+.glyphicon-collapse-down:before {
+  content: "\e159";
+}
+.glyphicon-collapse-up:before {
+  content: "\e160";
+}
+.glyphicon-log-in:before {
+  content: "\e161";
+}
+.glyphicon-flash:before {
+  content: "\e162";
+}
+.glyphicon-log-out:before {
+  content: "\e163";
+}
+.glyphicon-new-window:before {
+  content: "\e164";
+}
+.glyphicon-record:before {
+  content: "\e165";
+}
+.glyphicon-save:before {
+  content: "\e166";
+}
+.glyphicon-open:before {
+  content: "\e167";
+}
+.glyphicon-saved:before {
+  content: "\e168";
+}
+.glyphicon-import:before {
+  content: "\e169";
+}
+.glyphicon-export:before {
+  content: "\e170";
+}
+.glyphicon-send:before {
+  content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+  content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+  content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+  content: "\e174";
+}
+.glyphicon-floppy-save:before {
+  content: "\e175";
+}
+.glyphicon-floppy-open:before {
+  content: "\e176";
+}
+.glyphicon-credit-card:before {
+  content: "\e177";
+}
+.glyphicon-transfer:before {
+  content: "\e178";
+}
+.glyphicon-cutlery:before {
+  content: "\e179";
+}
+.glyphicon-header:before {
+  content: "\e180";
+}
+.glyphicon-compressed:before {
+  content: "\e181";
+}
+.glyphicon-earphone:before {
+  content: "\e182";
+}
+.glyphicon-phone-alt:before {
+  content: "\e183";
+}
+.glyphicon-tower:before {
+  content: "\e184";
+}
+.glyphicon-stats:before {
+  content: "\e185";
+}
+.glyphicon-sd-video:before {
+  content: "\e186";
+}
+.glyphicon-hd-video:before {
+  content: "\e187";
+}
+.glyphicon-subtitles:before {
+  content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+  content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+  content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+  content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+  content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+  content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+  content: "\e194";
+}
+.glyphicon-registration-mark:before {
+  content: "\e195";
+}
+.glyphicon-cloud-download:before {
+  content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+  content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+  content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+  content: "\e200";
+}
+.glyphicon-cd:before {
+  content: "\e201";
+}
+.glyphicon-save-file:before {
+  content: "\e202";
+}
+.glyphicon-open-file:before {
+  content: "\e203";
+}
+.glyphicon-level-up:before {
+  content: "\e204";
+}
+.glyphicon-copy:before {
+  content: "\e205";
+}
+.glyphicon-paste:before {
+  content: "\e206";
+}
+.glyphicon-alert:before {
+  content: "\e209";
+}
+.glyphicon-equalizer:before {
+  content: "\e210";
+}
+.glyphicon-king:before {
+  content: "\e211";
+}
+.glyphicon-queen:before {
+  content: "\e212";
+}
+.glyphicon-pawn:before {
+  content: "\e213";
+}
+.glyphicon-bishop:before {
+  content: "\e214";
+}
+.glyphicon-knight:before {
+  content: "\e215";
+}
+.glyphicon-baby-formula:before {
+  content: "\e216";
+}
+.glyphicon-tent:before {
+  content: "\26fa";
+}
+.glyphicon-blackboard:before {
+  content: "\e218";
+}
+.glyphicon-bed:before {
+  content: "\e219";
+}
+.glyphicon-apple:before {
+  content: "\f8ff";
+}
+.glyphicon-erase:before {
+  content: "\e221";
+}
+.glyphicon-hourglass:before {
+  content: "\231b";
+}
+.glyphicon-lamp:before {
+  content: "\e223";
+}
+.glyphicon-duplicate:before {
+  content: "\e224";
+}
+.glyphicon-piggy-bank:before {
+  content: "\e225";
+}
+.glyphicon-scissors:before {
+  content: "\e226";
+}
+.glyphicon-bitcoin:before {
+  content: "\e227";
+}
+.glyphicon-btc:before {
+  content: "\e227";
+}
+.glyphicon-xbt:before {
+  content: "\e227";
+}
+.glyphicon-yen:before {
+  content: "\00a5";
+}
+.glyphicon-jpy:before {
+  content: "\00a5";
+}
+.glyphicon-ruble:before {
+  content: "\20bd";
+}
+.glyphicon-rub:before {
+  content: "\20bd";
+}
+.glyphicon-scale:before {
+  content: "\e230";
+}
+.glyphicon-ice-lolly:before {
+  content: "\e231";
+}
+.glyphicon-ice-lolly-tasted:before {
+  content: "\e232";
+}
+.glyphicon-education:before {
+  content: "\e233";
+}
+.glyphicon-option-horizontal:before {
+  content: "\e234";
+}
+.glyphicon-option-vertical:before {
+  content: "\e235";
+}
+.glyphicon-menu-hamburger:before {
+  content: "\e236";
+}
+.glyphicon-modal-window:before {
+  content: "\e237";
+}
+.glyphicon-oil:before {
+  content: "\e238";
+}
+.glyphicon-grain:before {
+  content: "\e239";
+}
+.glyphicon-sunglasses:before {
+  content: "\e240";
+}
+.glyphicon-text-size:before {
+  content: "\e241";
+}
+.glyphicon-text-color:before {
+  content: "\e242";
+}
+.glyphicon-text-background:before {
+  content: "\e243";
+}
+.glyphicon-object-align-top:before {
+  content: "\e244";
+}
+.glyphicon-object-align-bottom:before {
+  content: "\e245";
+}
+.glyphicon-object-align-horizontal:before {
+  content: "\e246";
+}
+.glyphicon-object-align-left:before {
+  content: "\e247";
+}
+.glyphicon-object-align-vertical:before {
+  content: "\e248";
+}
+.glyphicon-object-align-right:before {
+  content: "\e249";
+}
+.glyphicon-triangle-right:before {
+  content: "\e250";
+}
+.glyphicon-triangle-left:before {
+  content: "\e251";
+}
+.glyphicon-triangle-bottom:before {
+  content: "\e252";
+}
+.glyphicon-triangle-top:before {
+  content: "\e253";
+}
+.glyphicon-console:before {
+  content: "\e254";
+}
+.glyphicon-superscript:before {
+  content: "\e255";
+}
+.glyphicon-subscript:before {
+  content: "\e256";
+}
+.glyphicon-menu-left:before {
+  content: "\e257";
+}
+.glyphicon-menu-right:before {
+  content: "\e258";
+}
+.glyphicon-menu-down:before {
+  content: "\e259";
+}
+.glyphicon-menu-up:before {
+  content: "\e260";
+}
+* {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+*:before,
+*:after {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+html {
+  font-size: 10px;
+
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #333;
+  background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+a {
+  color: #337ab7;
+  text-decoration: none;
+}
+a:hover,
+a:focus {
+  color: #23527c;
+  text-decoration: underline;
+}
+a:focus {
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+figure {
+  margin: 0;
+}
+img {
+  vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+.img-rounded {
+  border-radius: 6px;
+}
+.img-thumbnail {
+  display: inline-block;
+  max-width: 100%;
+  height: auto;
+  padding: 4px;
+  line-height: 1.42857143;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: all .2s ease-in-out;
+       -o-transition: all .2s ease-in-out;
+          transition: all .2s ease-in-out;
+}
+.img-circle {
+  border-radius: 50%;
+}
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+[role="button"] {
+  cursor: pointer;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+  font-family: inherit;
+  font-weight: 500;
+  line-height: 1.1;
+  color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+  font-weight: normal;
+  line-height: 1;
+  color: #777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+  margin-top: 20px;
+  margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+  font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+  font-size: 75%;
+}
+h1,
+.h1 {
+  font-size: 36px;
+}
+h2,
+.h2 {
+  font-size: 30px;
+}
+h3,
+.h3 {
+  font-size: 24px;
+}
+h4,
+.h4 {
+  font-size: 18px;
+}
+h5,
+.h5 {
+  font-size: 14px;
+}
+h6,
+.h6 {
+  font-size: 12px;
+}
+p {
+  margin: 0 0 10px;
+}
+.lead {
+  margin-bottom: 20px;
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 1.4;
+}
+@media (min-width: 768px) {
+  .lead {
+    font-size: 21px;
+  }
+}
+small,
+.small {
+  font-size: 85%;
+}
+mark,
+.mark {
+  padding: .2em;
+  background-color: #fcf8e3;
+}
+.text-left {
+  text-align: left;
+}
+.text-right {
+  text-align: right;
+}
+.text-center {
+  text-align: center;
+}
+.text-justify {
+  text-align: justify;
+}
+.text-nowrap {
+  white-space: nowrap;
+}
+.text-lowercase {
+  text-transform: lowercase;
+}
+.text-uppercase {
+  text-transform: uppercase;
+}
+.text-capitalize {
+  text-transform: capitalize;
+}
+.text-muted {
+  color: #777;
+}
+.text-primary {
+  color: #337ab7;
+}
+a.text-primary:hover,
+a.text-primary:focus {
+  color: #286090;
+}
+.text-success {
+  color: #3c763d;
+}
+a.text-success:hover,
+a.text-success:focus {
+  color: #2b542c;
+}
+.text-info {
+  color: #31708f;
+}
+a.text-info:hover,
+a.text-info:focus {
+  color: #245269;
+}
+.text-warning {
+  color: #8a6d3b;
+}
+a.text-warning:hover,
+a.text-warning:focus {
+  color: #66512c;
+}
+.text-danger {
+  color: #a94442;
+}
+a.text-danger:hover,
+a.text-danger:focus {
+  color: #843534;
+}
+.bg-primary {
+  color: #fff;
+  background-color: #337ab7;
+}
+a.bg-primary:hover,
+a.bg-primary:focus {
+  background-color: #286090;
+}
+.bg-success {
+  background-color: #dff0d8;
+}
+a.bg-success:hover,
+a.bg-success:focus {
+  background-color: #c1e2b3;
+}
+.bg-info {
+  background-color: #d9edf7;
+}
+a.bg-info:hover,
+a.bg-info:focus {
+  background-color: #afd9ee;
+}
+.bg-warning {
+  background-color: #fcf8e3;
+}
+a.bg-warning:hover,
+a.bg-warning:focus {
+  background-color: #f7ecb5;
+}
+.bg-danger {
+  background-color: #f2dede;
+}
+a.bg-danger:hover,
+a.bg-danger:focus {
+  background-color: #e4b9b9;
+}
+.page-header {
+  padding-bottom: 9px;
+  margin: 40px 0 20px;
+  border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+  margin-top: 0;
+  margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+  margin-bottom: 0;
+}
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+.list-inline {
+  padding-left: 0;
+  margin-left: -5px;
+  list-style: none;
+}
+.list-inline > li {
+  display: inline-block;
+  padding-right: 5px;
+  padding-left: 5px;
+}
+dl {
+  margin-top: 0;
+  margin-bottom: 20px;
+}
+dt,
+dd {
+  line-height: 1.42857143;
+}
+dt {
+  font-weight: bold;
+}
+dd {
+  margin-left: 0;
+}
+@media (min-width: 768px) {
+  .dl-horizontal dt {
+    float: left;
+    width: 160px;
+    overflow: hidden;
+    clear: left;
+    text-align: right;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  .dl-horizontal dd {
+    margin-left: 180px;
+  }
+}
+abbr[title],
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted #777;
+}
+.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+blockquote {
+  padding: 10px 20px;
+  margin: 0 0 20px;
+  font-size: 17.5px;
+  border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+  margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+  display: block;
+  font-size: 80%;
+  line-height: 1.42857143;
+  color: #777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+  content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+  padding-right: 15px;
+  padding-left: 0;
+  text-align: right;
+  border-right: 5px solid #eee;
+  border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+  content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+  content: '\00A0 \2014';
+}
+address {
+  margin-bottom: 20px;
+  font-style: normal;
+  line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #c7254e;
+  background-color: #f9f2f4;
+  border-radius: 4px;
+}
+kbd {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #fff;
+  background-color: #333;
+  border-radius: 3px;
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+  padding: 0;
+  font-size: 100%;
+  font-weight: bold;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  font-size: 13px;
+  line-height: 1.42857143;
+  color: #333;
+  word-break: break-all;
+  word-wrap: break-word;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+pre code {
+  padding: 0;
+  font-size: inherit;
+  color: inherit;
+  white-space: pre-wrap;
+  background-color: transparent;
+  border-radius: 0;
+}
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+.container {
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-right: auto;
+  margin-left: auto;
+}
+@media (min-width: 768px) {
+  .container {
+    width: 750px;
+  }
+}
+@media (min-width: 992px) {
+  .container {
+    width: 970px;
+  }
+}
+@media (min-width: 1200px) {
+  .container {
+    width: 1170px;
+  }
+}
+.container-fluid {
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-right: auto;
+  margin-left: auto;
+}
+.row {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  padding-right: 15px;
+  padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+  float: left;
+}
+.col-xs-12 {
+  width: 100%;
+}
+.col-xs-11 {
+  width: 91.66666667%;
+}
+.col-xs-10 {
+  width: 83.33333333%;
+}
+.col-xs-9 {
+  width: 75%;
+}
+.col-xs-8 {
+  width: 66.66666667%;
+}
+.col-xs-7 {
+  width: 58.33333333%;
+}
+.col-xs-6 {
+  width: 50%;
+}
+.col-xs-5 {
+  width: 41.66666667%;
+}
+.col-xs-4 {
+  width: 33.33333333%;
+}
+.col-xs-3 {
+  width: 25%;
+}
+.col-xs-2 {
+  width: 16.66666667%;
+}
+.col-xs-1 {
+  width: 8.33333333%;
+}
+.col-xs-pull-12 {
+  right: 100%;
+}
+.col-xs-pull-11 {
+  right: 91.66666667%;
+}
+.col-xs-pull-10 {
+  right: 83.33333333%;
+}
+.col-xs-pull-9 {
+  right: 75%;
+}
+.col-xs-pull-8 {
+  right: 66.66666667%;
+}
+.col-xs-pull-7 {
+  right: 58.33333333%;
+}
+.col-xs-pull-6 {
+  right: 50%;
+}
+.col-xs-pull-5 {
+  right: 41.66666667%;
+}
+.col-xs-pull-4 {
+  right: 33.33333333%;
+}
+.col-xs-pull-3 {
+  right: 25%;
+}
+.col-xs-pull-2 {
+  right: 16.66666667%;
+}
+.col-xs-pull-1 {
+  right: 8.33333333%;
+}
+.col-xs-pull-0 {
+  right: auto;
+}
+.col-xs-push-12 {
+  left: 100%;
+}
+.col-xs-push-11 {
+  left: 91.66666667%;
+}
+.col-xs-push-10 {
+  left: 83.33333333%;
+}
+.col-xs-push-9 {
+  left: 75%;
+}
+.col-xs-push-8 {
+  left: 66.66666667%;
+}
+.col-xs-push-7 {
+  left: 58.33333333%;
+}
+.col-xs-push-6 {
+  left: 50%;
+}
+.col-xs-push-5 {
+  left: 41.66666667%;
+}
+.col-xs-push-4 {
+  left: 33.33333333%;
+}
+.col-xs-push-3 {
+  left: 25%;
+}
+.col-xs-push-2 {
+  left: 16.66666667%;
+}
+.col-xs-push-1 {
+  left: 8.33333333%;
+}
+.col-xs-push-0 {
+  left: auto;
+}
+.col-xs-offset-12 {
+  margin-left: 100%;
+}
+.col-xs-offset-11 {
+  margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+  margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+  margin-left: 75%;
+}
+.col-xs-offset-8 {
+  margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+  margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+  margin-left: 50%;
+}
+.col-xs-offset-5 {
+  margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+  margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+  margin-left: 25%;
+}
+.col-xs-offset-2 {
+  margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+  margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+  margin-left: 0;
+}
+@media (min-width: 768px) {
+  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+    float: left;
+  }
+  .col-sm-12 {
+    width: 100%;
+  }
+  .col-sm-11 {
+    width: 91.66666667%;
+  }
+  .col-sm-10 {
+    width: 83.33333333%;
+  }
+  .col-sm-9 {
+    width: 75%;
+  }
+  .col-sm-8 {
+    width: 66.66666667%;
+  }
+  .col-sm-7 {
+    width: 58.33333333%;
+  }
+  .col-sm-6 {
+    width: 50%;
+  }
+  .col-sm-5 {
+    width: 41.66666667%;
+  }
+  .col-sm-4 {
+    width: 33.33333333%;
+  }
+  .col-sm-3 {
+    width: 25%;
+  }
+  .col-sm-2 {
+    width: 16.66666667%;
+  }
+  .col-sm-1 {
+    width: 8.33333333%;
+  }
+  .col-sm-pull-12 {
+    right: 100%;
+  }
+  .col-sm-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-sm-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-sm-pull-9 {
+    right: 75%;
+  }
+  .col-sm-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-sm-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-sm-pull-6 {
+    right: 50%;
+  }
+  .col-sm-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-sm-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-sm-pull-3 {
+    right: 25%;
+  }
+  .col-sm-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-sm-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-sm-pull-0 {
+    right: auto;
+  }
+  .col-sm-push-12 {
+    left: 100%;
+  }
+  .col-sm-push-11 {
+    left: 91.66666667%;
+  }
+  .col-sm-push-10 {
+    left: 83.33333333%;
+  }
+  .col-sm-push-9 {
+    left: 75%;
+  }
+  .col-sm-push-8 {
+    left: 66.66666667%;
+  }
+  .col-sm-push-7 {
+    left: 58.33333333%;
+  }
+  .col-sm-push-6 {
+    left: 50%;
+  }
+  .col-sm-push-5 {
+    left: 41.66666667%;
+  }
+  .col-sm-push-4 {
+    left: 33.33333333%;
+  }
+  .col-sm-push-3 {
+    left: 25%;
+  }
+  .col-sm-push-2 {
+    left: 16.66666667%;
+  }
+  .col-sm-push-1 {
+    left: 8.33333333%;
+  }
+  .col-sm-push-0 {
+    left: auto;
+  }
+  .col-sm-offset-12 {
+    margin-left: 100%;
+  }
+  .col-sm-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-sm-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-sm-offset-9 {
+    margin-left: 75%;
+  }
+  .col-sm-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-sm-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-sm-offset-6 {
+    margin-left: 50%;
+  }
+  .col-sm-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-sm-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-sm-offset-3 {
+    margin-left: 25%;
+  }
+  .col-sm-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-sm-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-sm-offset-0 {
+    margin-left: 0;
+  }
+}
+@media (min-width: 992px) {
+  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+    float: left;
+  }
+  .col-md-12 {
+    width: 100%;
+  }
+  .col-md-11 {
+    width: 91.66666667%;
+  }
+  .col-md-10 {
+    width: 83.33333333%;
+  }
+  .col-md-9 {
+    width: 75%;
+  }
+  .col-md-8 {
+    width: 66.66666667%;
+  }
+  .col-md-7 {
+    width: 58.33333333%;
+  }
+  .col-md-6 {
+    width: 50%;
+  }
+  .col-md-5 {
+    width: 41.66666667%;
+  }
+  .col-md-4 {
+    width: 33.33333333%;
+  }
+  .col-md-3 {
+    width: 25%;
+  }
+  .col-md-2 {
+    width: 16.66666667%;
+  }
+  .col-md-1 {
+    width: 8.33333333%;
+  }
+  .col-md-pull-12 {
+    right: 100%;
+  }
+  .col-md-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-md-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-md-pull-9 {
+    right: 75%;
+  }
+  .col-md-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-md-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-md-pull-6 {
+    right: 50%;
+  }
+  .col-md-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-md-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-md-pull-3 {
+    right: 25%;
+  }
+  .col-md-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-md-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-md-pull-0 {
+    right: auto;
+  }
+  .col-md-push-12 {
+    left: 100%;
+  }
+  .col-md-push-11 {
+    left: 91.66666667%;
+  }
+  .col-md-push-10 {
+    left: 83.33333333%;
+  }
+  .col-md-push-9 {
+    left: 75%;
+  }
+  .col-md-push-8 {
+    left: 66.66666667%;
+  }
+  .col-md-push-7 {
+    left: 58.33333333%;
+  }
+  .col-md-push-6 {
+    left: 50%;
+  }
+  .col-md-push-5 {
+    left: 41.66666667%;
+  }
+  .col-md-push-4 {
+    left: 33.33333333%;
+  }
+  .col-md-push-3 {
+    left: 25%;
+  }
+  .col-md-push-2 {
+    left: 16.66666667%;
+  }
+  .col-md-push-1 {
+    left: 8.33333333%;
+  }
+  .col-md-push-0 {
+    left: auto;
+  }
+  .col-md-offset-12 {
+    margin-left: 100%;
+  }
+  .col-md-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-md-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+  .col-md-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-md-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+  .col-md-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-md-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+  .col-md-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-md-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-md-offset-0 {
+    margin-left: 0;
+  }
+}
+@media (min-width: 1200px) {
+  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+    float: left;
+  }
+  .col-lg-12 {
+    width: 100%;
+  }
+  .col-lg-11 {
+    width: 91.66666667%;
+  }
+  .col-lg-10 {
+    width: 83.33333333%;
+  }
+  .col-lg-9 {
+    width: 75%;
+  }
+  .col-lg-8 {
+    width: 66.66666667%;
+  }
+  .col-lg-7 {
+    width: 58.33333333%;
+  }
+  .col-lg-6 {
+    width: 50%;
+  }
+  .col-lg-5 {
+    width: 41.66666667%;
+  }
+  .col-lg-4 {
+    width: 33.33333333%;
+  }
+  .col-lg-3 {
+    width: 25%;
+  }
+  .col-lg-2 {
+    width: 16.66666667%;
+  }
+  .col-lg-1 {
+    width: 8.33333333%;
+  }
+  .col-lg-pull-12 {
+    right: 100%;
+  }
+  .col-lg-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-lg-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-lg-pull-9 {
+    right: 75%;
+  }
+  .col-lg-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-lg-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-lg-pull-6 {
+    right: 50%;
+  }
+  .col-lg-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-lg-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-lg-pull-3 {
+    right: 25%;
+  }
+  .col-lg-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-lg-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-lg-pull-0 {
+    right: auto;
+  }
+  .col-lg-push-12 {
+    left: 100%;
+  }
+  .col-lg-push-11 {
+    left: 91.66666667%;
+  }
+  .col-lg-push-10 {
+    left: 83.33333333%;
+  }
+  .col-lg-push-9 {
+    left: 75%;
+  }
+  .col-lg-push-8 {
+    left: 66.66666667%;
+  }
+  .col-lg-push-7 {
+    left: 58.33333333%;
+  }
+  .col-lg-push-6 {
+    left: 50%;
+  }
+  .col-lg-push-5 {
+    left: 41.66666667%;
+  }
+  .col-lg-push-4 {
+    left: 33.33333333%;
+  }
+  .col-lg-push-3 {
+    left: 25%;
+  }
+  .col-lg-push-2 {
+    left: 16.66666667%;
+  }
+  .col-lg-push-1 {
+    left: 8.33333333%;
+  }
+  .col-lg-push-0 {
+    left: auto;
+  }
+  .col-lg-offset-12 {
+    margin-left: 100%;
+  }
+  .col-lg-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-lg-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+  .col-lg-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-lg-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+  .col-lg-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-lg-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+  .col-lg-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-lg-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-lg-offset-0 {
+    margin-left: 0;
+  }
+}
+table {
+  background-color: transparent;
+}
+caption {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  color: #777;
+  text-align: left;
+}
+th {
+  text-align: left;
+}
+.table {
+  width: 100%;
+  max-width: 100%;
+  margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+  padding: 8px;
+  line-height: 1.42857143;
+  vertical-align: top;
+  border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+  vertical-align: bottom;
+  border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+  border-top: 0;
+}
+.table > tbody + tbody {
+  border-top: 2px solid #ddd;
+}
+.table .table {
+  background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+  padding: 5px;
+}
+.table-bordered {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+  border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+  background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+  background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+  position: static;
+  display: table-column;
+  float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+  position: static;
+  display: table-cell;
+  float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+  background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+  background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+  background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+  background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+  background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+  background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+  background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+  background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+  background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+  background-color: #ebcccc;
+}
+.table-responsive {
+  min-height: .01%;
+  overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
+  .table-responsive {
+    width: 100%;
+    margin-bottom: 15px;
+    overflow-y: hidden;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    border: 1px solid #ddd;
+  }
+  .table-responsive > .table {
+    margin-bottom: 0;
+  }
+  .table-responsive > .table > thead > tr > th,
+  .table-responsive > .table > tbody > tr > th,
+  .table-responsive > .table > tfoot > tr > th,
+  .table-responsive > .table > thead > tr > td,
+  .table-responsive > .table > tbody > tr > td,
+  .table-responsive > .table > tfoot > tr > td {
+    white-space: nowrap;
+  }
+  .table-responsive > .table-bordered {
+    border: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:first-child,
+  .table-responsive > .table-bordered > tbody > tr > th:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+  .table-responsive > .table-bordered > thead > tr > td:first-child,
+  .table-responsive > .table-bordered > tbody > tr > td:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+    border-left: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:last-child,
+  .table-responsive > .table-bordered > tbody > tr > th:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+  .table-responsive > .table-bordered > thead > tr > td:last-child,
+  .table-responsive > .table-bordered > tbody > tr > td:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+    border-right: 0;
+  }
+  .table-responsive > .table-bordered > tbody > tr:last-child > th,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+  .table-responsive > .table-bordered > tbody > tr:last-child > td,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+    border-bottom: 0;
+  }
+}
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 20px;
+  font-size: 21px;
+  line-height: inherit;
+  color: #333;
+  border: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+label {
+  display: inline-block;
+  max-width: 100%;
+  margin-bottom: 5px;
+  font-weight: bold;
+}
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9;
+  line-height: normal;
+}
+input[type="file"] {
+  display: block;
+}
+input[type="range"] {
+  display: block;
+  width: 100%;
+}
+select[multiple],
+select[size] {
+  height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+output {
+  display: block;
+  padding-top: 7px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555;
+}
+.form-control {
+  display: block;
+  width: 100%;
+  height: 34px;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+  border-color: #66afe9;
+  outline: 0;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+  color: #999;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #999;
+}
+.form-control::-webkit-input-placeholder {
+  color: #999;
+}
+.form-control::-ms-expand {
+  background-color: transparent;
+  border: 0;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+  background-color: #eee;
+  opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+  cursor: not-allowed;
+}
+textarea.form-control {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+  input[type="date"].form-control,
+  input[type="time"].form-control,
+  input[type="datetime-local"].form-control,
+  input[type="month"].form-control {
+    line-height: 34px;
+  }
+  input[type="date"].input-sm,
+  input[type="time"].input-sm,
+  input[type="datetime-local"].input-sm,
+  input[type="month"].input-sm,
+  .input-group-sm input[type="date"],
+  .input-group-sm input[type="time"],
+  .input-group-sm input[type="datetime-local"],
+  .input-group-sm input[type="month"] {
+    line-height: 30px;
+  }
+  input[type="date"].input-lg,
+  input[type="time"].input-lg,
+  input[type="datetime-local"].input-lg,
+  input[type="month"].input-lg,
+  .input-group-lg input[type="date"],
+  .input-group-lg input[type="time"],
+  .input-group-lg input[type="datetime-local"],
+  .input-group-lg input[type="month"] {
+    line-height: 46px;
+  }
+}
+.form-group {
+  margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+  position: relative;
+  display: block;
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+  min-height: 20px;
+  padding-left: 20px;
+  margin-bottom: 0;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: absolute;
+  margin-top: 4px \9;
+  margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+  margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+  position: relative;
+  display: inline-block;
+  padding-left: 20px;
+  margin-bottom: 0;
+  font-weight: normal;
+  vertical-align: middle;
+  cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+  margin-top: 0;
+  margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+  cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+  cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+  cursor: not-allowed;
+}
+.form-control-static {
+  min-height: 34px;
+  padding-top: 7px;
+  padding-bottom: 7px;
+  margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+  padding-right: 0;
+  padding-left: 0;
+}
+.input-sm {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+select.input-sm {
+  height: 30px;
+  line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+  height: auto;
+}
+.form-group-sm .form-control {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.form-group-sm select.form-control {
+  height: 30px;
+  line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+  height: auto;
+}
+.form-group-sm .form-control-static {
+  height: 30px;
+  min-height: 32px;
+  padding: 6px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+}
+.input-lg {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+select.input-lg {
+  height: 46px;
+  line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+  height: auto;
+}
+.form-group-lg .form-control {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.form-group-lg select.form-control {
+  height: 46px;
+  line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+  height: auto;
+}
+.form-group-lg .form-control-static {
+  height: 46px;
+  min-height: 38px;
+  padding: 11px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+}
+.has-feedback {
+  position: relative;
+}
+.has-feedback .form-control {
+  padding-right: 42.5px;
+}
+.form-control-feedback {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  display: block;
+  width: 34px;
+  height: 34px;
+  line-height: 34px;
+  text-align: center;
+  pointer-events: none;
+}
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
+  width: 46px;
+  height: 46px;
+  line-height: 46px;
+}
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
+  width: 30px;
+  height: 30px;
+  line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+  color: #3c763d;
+}
+.has-success .form-control {
+  border-color: #3c763d;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+  border-color: #2b542c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+  color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+  color: #8a6d3b;
+}
+.has-warning .form-control {
+  border-color: #8a6d3b;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+  border-color: #66512c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+  color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+  color: #a94442;
+}
+.has-error .form-control {
+  border-color: #a94442;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+  border-color: #843534;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #a94442;
+}
+.has-error .form-control-feedback {
+  color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+  top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+  top: 0;
+}
+.help-block {
+  display: block;
+  margin-top: 5px;
+  margin-bottom: 10px;
+  color: #737373;
+}
+@media (min-width: 768px) {
+  .form-inline .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .form-inline .form-control-static {
+    display: inline-block;
+  }
+  .form-inline .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .form-inline .input-group .input-group-addon,
+  .form-inline .input-group .input-group-btn,
+  .form-inline .input-group .form-control {
+    width: auto;
+  }
+  .form-inline .input-group > .form-control {
+    width: 100%;
+  }
+  .form-inline .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio,
+  .form-inline .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio label,
+  .form-inline .checkbox label {
+    padding-left: 0;
+  }
+  .form-inline .radio input[type="radio"],
+  .form-inline .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .form-inline .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+  padding-top: 7px;
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+  min-height: 27px;
+}
+.form-horizontal .form-group {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .control-label {
+    padding-top: 7px;
+    margin-bottom: 0;
+    text-align: right;
+  }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+  right: 15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-lg .control-label {
+    padding-top: 11px;
+    font-size: 18px;
+  }
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-sm .control-label {
+    padding-top: 6px;
+    font-size: 12px;
+  }
+}
+.btn {
+  display: inline-block;
+  padding: 6px 12px;
+  margin-bottom: 0;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: middle;
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+  color: #333;
+  text-decoration: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+  outline: 0;
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+  cursor: not-allowed;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  opacity: .65;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+  pointer-events: none;
+}
+.btn-default {
+  color: #333;
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #8c8c8c;
+}
+.btn-default:hover {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+  color: #333;
+  background-color: #d4d4d4;
+  border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  background-image: none;
+}
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default .badge {
+  color: #fff;
+  background-color: #333;
+}
+.btn-primary {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+  color: #fff;
+  background-color: #286090;
+  border-color: #122b40;
+}
+.btn-primary:hover {
+  color: #fff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  color: #fff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+  color: #fff;
+  background-color: #204d74;
+  border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  background-image: none;
+}
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus {
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.btn-success {
+  color: #fff;
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #255625;
+}
+.btn-success:hover {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+  color: #fff;
+  background-color: #398439;
+  border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  background-image: none;
+}
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus {
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success .badge {
+  color: #5cb85c;
+  background-color: #fff;
+}
+.btn-info {
+  color: #fff;
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #1b6d85;
+}
+.btn-info:hover {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+  color: #fff;
+  background-color: #269abc;
+  border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  background-image: none;
+}
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus {
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info .badge {
+  color: #5bc0de;
+  background-color: #fff;
+}
+.btn-warning {
+  color: #fff;
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #985f0d;
+}
+.btn-warning:hover {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+  color: #fff;
+  background-color: #d58512;
+  border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  background-image: none;
+}
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus {
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning .badge {
+  color: #f0ad4e;
+  background-color: #fff;
+}
+.btn-danger {
+  color: #fff;
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #761c19;
+}
+.btn-danger:hover {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+  color: #fff;
+  background-color: #ac2925;
+  border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  background-image: none;
+}
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus {
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger .badge {
+  color: #d9534f;
+  background-color: #fff;
+}
+.btn-link {
+  font-weight: normal;
+  color: #337ab7;
+  border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+  background-color: transparent;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+  border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+  color: #23527c;
+  text-decoration: underline;
+  background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+  color: #777;
+  text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+  padding: 1px 5px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-block {
+  display: block;
+  width: 100%;
+}
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity .15s linear;
+       -o-transition: opacity .15s linear;
+          transition: opacity .15s linear;
+}
+.fade.in {
+  opacity: 1;
+}
+.collapse {
+  display: none;
+}
+.collapse.in {
+  display: block;
+}
+tr.collapse.in {
+  display: table-row;
+}
+tbody.collapse.in {
+  display: table-row-group;
+}
+.collapsing {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition-timing-function: ease;
+       -o-transition-timing-function: ease;
+          transition-timing-function: ease;
+  -webkit-transition-duration: .35s;
+       -o-transition-duration: .35s;
+          transition-duration: .35s;
+  -webkit-transition-property: height, visibility;
+       -o-transition-property: height, visibility;
+          transition-property: height, visibility;
+}
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-left: 2px;
+  vertical-align: middle;
+  border-top: 4px dashed;
+  border-top: 4px solid \9;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+  position: relative;
+}
+.dropdown-toggle:focus {
+  outline: 0;
+}
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0;
+  font-size: 14px;
+  text-align: left;
+  list-style: none;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .15);
+  border-radius: 4px;
+  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+.dropdown-menu .divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: normal;
+  line-height: 1.42857143;
+  color: #333;
+  white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  color: #262626;
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #fff;
+  text-decoration: none;
+  background-color: #337ab7;
+  outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  cursor: not-allowed;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+  display: block;
+}
+.open > a {
+  outline: 0;
+}
+.dropdown-menu-right {
+  right: 0;
+  left: auto;
+}
+.dropdown-menu-left {
+  right: auto;
+  left: 0;
+}
+.dropdown-header {
+  display: block;
+  padding: 3px 20px;
+  font-size: 12px;
+  line-height: 1.42857143;
+  color: #777;
+  white-space: nowrap;
+}
+.dropdown-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 990;
+}
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+  content: "";
+  border-top: 0;
+  border-bottom: 4px dashed;
+  border-bottom: 4px solid \9;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+  .navbar-right .dropdown-menu {
+    right: 0;
+    left: auto;
+  }
+  .navbar-right .dropdown-menu-left {
+    right: auto;
+    left: 0;
+  }
+}
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+  z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+  margin-left: -1px;
+}
+.btn-toolbar {
+  margin-left: -5px;
+}
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+  float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+  margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+  border-radius: 0;
+}
+.btn-group > .btn:first-child {
+  margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+  float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+  padding-right: 8px;
+  padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+  padding-right: 12px;
+  padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn .caret {
+  margin-left: 0;
+}
+.btn-lg .caret {
+  border-width: 5px 5px 0;
+  border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+  border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+  display: block;
+  float: none;
+  width: 100%;
+  max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+  float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+  margin-top: -1px;
+  margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+  border-top-left-radius: 4px;
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.btn-group-justified {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+  display: table-cell;
+  float: none;
+  width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+  width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+  left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.input-group {
+  position: relative;
+  display: table;
+  border-collapse: separate;
+}
+.input-group[class*="col-"] {
+  float: none;
+  padding-right: 0;
+  padding-left: 0;
+}
+.input-group .form-control {
+  position: relative;
+  z-index: 2;
+  float: left;
+  width: 100%;
+  margin-bottom: 0;
+}
+.input-group .form-control:focus {
+  z-index: 3;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+  height: 46px;
+  line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+  height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+  height: 30px;
+  line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+  height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+  display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+  width: 1%;
+  white-space: nowrap;
+  vertical-align: middle;
+}
+.input-group-addon {
+  padding: 6px 12px;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 1;
+  color: #555;
+  text-align: center;
+  background-color: #eee;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+.input-group-addon.input-sm {
+  padding: 5px 10px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+.input-group-addon.input-lg {
+  padding: 10px 16px;
+  font-size: 18px;
+  border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+  margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+  border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+  border-left: 0;
+}
+.input-group-btn {
+  position: relative;
+  font-size: 0;
+  white-space: nowrap;
+}
+.input-group-btn > .btn {
+  position: relative;
+}
+.input-group-btn > .btn + .btn {
+  margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+  z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+  margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+  z-index: 2;
+  margin-left: -1px;
+}
+.nav {
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+.nav > li {
+  position: relative;
+  display: block;
+}
+.nav > li > a {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+  text-decoration: none;
+  background-color: #eee;
+}
+.nav > li.disabled > a {
+  color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+  color: #777;
+  text-decoration: none;
+  cursor: not-allowed;
+  background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+  background-color: #eee;
+  border-color: #337ab7;
+}
+.nav .nav-divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.nav > li > a > img {
+  max-width: none;
+}
+.nav-tabs {
+  border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+  float: left;
+  margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+  margin-right: 2px;
+  line-height: 1.42857143;
+  border: 1px solid transparent;
+  border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+  border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+  color: #555;
+  cursor: default;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+  width: 100%;
+  border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+  float: none;
+}
+.nav-tabs.nav-justified > li > a {
+  margin-bottom: 5px;
+  text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-tabs.nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs.nav-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs.nav-justified > .active > a,
+  .nav-tabs.nav-justified > .active > a:hover,
+  .nav-tabs.nav-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.nav-pills > li {
+  float: left;
+}
+.nav-pills > li > a {
+  border-radius: 4px;
+}
+.nav-pills > li + li {
+  margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+  color: #fff;
+  background-color: #337ab7;
+}
+.nav-stacked > li {
+  float: none;
+}
+.nav-stacked > li + li {
+  margin-top: 2px;
+  margin-left: 0;
+}
+.nav-justified {
+  width: 100%;
+}
+.nav-justified > li {
+  float: none;
+}
+.nav-justified > li > a {
+  margin-bottom: 5px;
+  text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs-justified {
+  border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs-justified > .active > a,
+  .nav-tabs-justified > .active > a:hover,
+  .nav-tabs-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+.nav-tabs .dropdown-menu {
+  margin-top: -1px;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.navbar {
+  position: relative;
+  min-height: 50px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+  .navbar {
+    border-radius: 4px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-header {
+    float: left;
+  }
+}
+.navbar-collapse {
+  padding-right: 15px;
+  padding-left: 15px;
+  overflow-x: visible;
+  -webkit-overflow-scrolling: touch;
+  border-top: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+  overflow-y: auto;
+}
+@media (min-width: 768px) {
+  .navbar-collapse {
+    width: auto;
+    border-top: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+  }
+  .navbar-collapse.collapse {
+    display: block !important;
+    height: auto !important;
+    padding-bottom: 0;
+    overflow: visible !important;
+  }
+  .navbar-collapse.in {
+    overflow-y: visible;
+  }
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-static-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    padding-right: 0;
+    padding-left: 0;
+  }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+  max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    max-height: 200px;
+  }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+@media (min-width: 768px) {
+  .container > .navbar-header,
+  .container-fluid > .navbar-header,
+  .container > .navbar-collapse,
+  .container-fluid > .navbar-collapse {
+    margin-right: 0;
+    margin-left: 0;
+  }
+}
+.navbar-static-top {
+  z-index: 1000;
+  border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+  .navbar-static-top {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+@media (min-width: 768px) {
+  .navbar-fixed-top,
+  .navbar-fixed-bottom {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top {
+  top: 0;
+  border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+  bottom: 0;
+  margin-bottom: 0;
+  border-width: 1px 0 0;
+}
+.navbar-brand {
+  float: left;
+  height: 50px;
+  padding: 15px 15px;
+  font-size: 18px;
+  line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+  text-decoration: none;
+}
+.navbar-brand > img {
+  display: block;
+}
+@media (min-width: 768px) {
+  .navbar > .container .navbar-brand,
+  .navbar > .container-fluid .navbar-brand {
+    margin-left: -15px;
+  }
+}
+.navbar-toggle {
+  position: relative;
+  float: right;
+  padding: 9px 10px;
+  margin-top: 8px;
+  margin-right: 15px;
+  margin-bottom: 8px;
+  background-color: transparent;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.navbar-toggle:focus {
+  outline: 0;
+}
+.navbar-toggle .icon-bar {
+  display: block;
+  width: 22px;
+  height: 2px;
+  border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+  margin-top: 4px;
+}
+@media (min-width: 768px) {
+  .navbar-toggle {
+    display: none;
+  }
+}
+.navbar-nav {
+  margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+  padding-top: 10px;
+  padding-bottom: 10px;
+  line-height: 20px;
+}
+@media (max-width: 767px) {
+  .navbar-nav .open .dropdown-menu {
+    position: static;
+    float: none;
+    width: auto;
+    margin-top: 0;
+    background-color: transparent;
+    border: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+  }
+  .navbar-nav .open .dropdown-menu > li > a,
+  .navbar-nav .open .dropdown-menu .dropdown-header {
+    padding: 5px 15px 5px 25px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a {
+    line-height: 20px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-nav .open .dropdown-menu > li > a:focus {
+    background-image: none;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-nav {
+    float: left;
+    margin: 0;
+  }
+  .navbar-nav > li {
+    float: left;
+  }
+  .navbar-nav > li > a {
+    padding-top: 15px;
+    padding-bottom: 15px;
+  }
+}
+.navbar-form {
+  padding: 10px 15px;
+  margin-top: 8px;
+  margin-right: -15px;
+  margin-bottom: 8px;
+  margin-left: -15px;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+  .navbar-form .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control-static {
+    display: inline-block;
+  }
+  .navbar-form .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .navbar-form .input-group .input-group-addon,
+  .navbar-form .input-group .input-group-btn,
+  .navbar-form .input-group .form-control {
+    width: auto;
+  }
+  .navbar-form .input-group > .form-control {
+    width: 100%;
+  }
+  .navbar-form .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio,
+  .navbar-form .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio label,
+  .navbar-form .checkbox label {
+    padding-left: 0;
+  }
+  .navbar-form .radio input[type="radio"],
+  .navbar-form .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .navbar-form .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+@media (max-width: 767px) {
+  .navbar-form .form-group {
+    margin-bottom: 5px;
+  }
+  .navbar-form .form-group:last-child {
+    margin-bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-form {
+    width: auto;
+    padding-top: 0;
+    padding-bottom: 0;
+    margin-right: 0;
+    margin-left: 0;
+    border: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+  }
+}
+.navbar-nav > li > .dropdown-menu {
+  margin-top: 0;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+  margin-bottom: 0;
+  border-top-left-radius: 4px;
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.navbar-btn {
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+  margin-top: 14px;
+  margin-bottom: 14px;
+}
+.navbar-text {
+  margin-top: 15px;
+  margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+  .navbar-text {
+    float: left;
+    margin-right: 15px;
+    margin-left: 15px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-left {
+    float: left !important;
+  }
+  .navbar-right {
+    float: right !important;
+    margin-right: -15px;
+  }
+  .navbar-right ~ .navbar-right {
+    margin-right: 0;
+  }
+}
+.navbar-default {
+  background-color: #f8f8f8;
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+  color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+  color: #5e5e5e;
+  background-color: transparent;
+}
+.navbar-default .navbar-text {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+  color: #333;
+  background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+  color: #555;
+  background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+  color: #ccc;
+  background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+  border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+  background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+  background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+  color: #555;
+  background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+    color: #777;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #333;
+    background-color: transparent;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #555;
+    background-color: #e7e7e7;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #ccc;
+    background-color: transparent;
+  }
+}
+.navbar-default .navbar-link {
+  color: #777;
+}
+.navbar-default .navbar-link:hover {
+  color: #333;
+}
+.navbar-default .btn-link {
+  color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+  color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+  color: #ccc;
+}
+.navbar-inverse {
+  background-color: #222;
+  border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+  color: #fff;
+  background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+  color: #444;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+  border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+  background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+  background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+  border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+  color: #fff;
+  background-color: #080808;
+}
+@media (max-width: 767px) {
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+    border-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+    color: #9d9d9d;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #fff;
+    background-color: transparent;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #444;
+    background-color: transparent;
+  }
+}
+.navbar-inverse .navbar-link {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+  color: #fff;
+}
+.navbar-inverse .btn-link {
+  color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+  color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+  color: #444;
+}
+.breadcrumb {
+  padding: 8px 15px;
+  margin-bottom: 20px;
+  list-style: none;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+}
+.breadcrumb > li {
+  display: inline-block;
+}
+.breadcrumb > li + li:before {
+  padding: 0 5px;
+  color: #ccc;
+  content: "/\00a0";
+}
+.breadcrumb > .active {
+  color: #777;
+}
+.pagination {
+  display: inline-block;
+  padding-left: 0;
+  margin: 20px 0;
+  border-radius: 4px;
+}
+.pagination > li {
+  display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+  position: relative;
+  float: left;
+  padding: 6px 12px;
+  margin-left: -1px;
+  line-height: 1.42857143;
+  color: #337ab7;
+  text-decoration: none;
+  background-color: #fff;
+  border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+  margin-left: 0;
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+  z-index: 2;
+  color: #23527c;
+  background-color: #eee;
+  border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+  z-index: 3;
+  color: #fff;
+  cursor: default;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+  color: #777;
+  cursor: not-allowed;
+  background-color: #fff;
+  border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+  border-top-left-radius: 6px;
+  border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+  border-top-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+  border-top-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.pager {
+  padding-left: 0;
+  margin: 20px 0;
+  text-align: center;
+  list-style: none;
+}
+.pager li {
+  display: inline;
+}
+.pager li > a,
+.pager li > span {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+  text-decoration: none;
+  background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+  float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+  float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+  color: #777;
+  cursor: not-allowed;
+  background-color: #fff;
+}
+.label {
+  display: inline;
+  padding: .2em .6em .3em;
+  font-size: 75%;
+  font-weight: bold;
+  line-height: 1;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer;
+}
+.label:empty {
+  display: none;
+}
+.btn .label {
+  position: relative;
+  top: -1px;
+}
+.label-default {
+  background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+  background-color: #5e5e5e;
+}
+.label-primary {
+  background-color: #337ab7;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+  background-color: #286090;
+}
+.label-success {
+  background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+  background-color: #449d44;
+}
+.label-info {
+  background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+  background-color: #31b0d5;
+}
+.label-warning {
+  background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+  background-color: #ec971f;
+}
+.label-danger {
+  background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+  background-color: #c9302c;
+}
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 1;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: middle;
+  background-color: #777;
+  border-radius: 10px;
+}
+.badge:empty {
+  display: none;
+}
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+  top: 0;
+  padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.list-group-item > .badge {
+  float: right;
+}
+.list-group-item > .badge + .badge {
+  margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+  margin-left: 3px;
+}
+.jumbotron {
+  padding-top: 30px;
+  padding-bottom: 30px;
+  margin-bottom: 30px;
+  color: inherit;
+  background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+  color: inherit;
+}
+.jumbotron p {
+  margin-bottom: 15px;
+  font-size: 21px;
+  font-weight: 200;
+}
+.jumbotron > hr {
+  border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
+  padding-right: 15px;
+  padding-left: 15px;
+  border-radius: 6px;
+}
+.jumbotron .container {
+  max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+  .jumbotron {
+    padding-top: 48px;
+    padding-bottom: 48px;
+  }
+  .container .jumbotron,
+  .container-fluid .jumbotron {
+    padding-right: 60px;
+    padding-left: 60px;
+  }
+  .jumbotron h1,
+  .jumbotron .h1 {
+    font-size: 63px;
+  }
+}
+.thumbnail {
+  display: block;
+  padding: 4px;
+  margin-bottom: 20px;
+  line-height: 1.42857143;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: border .2s ease-in-out;
+       -o-transition: border .2s ease-in-out;
+          transition: border .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+  margin-right: auto;
+  margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+  border-color: #337ab7;
+}
+.thumbnail .caption {
+  padding: 9px;
+  color: #333;
+}
+.alert {
+  padding: 15px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.alert h4 {
+  margin-top: 0;
+  color: inherit;
+}
+.alert .alert-link {
+  font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+  margin-bottom: 0;
+}
+.alert > p + p {
+  margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+  padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  color: inherit;
+}
+.alert-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.alert-success hr {
+  border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+  color: #2b542c;
+}
+.alert-info {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.alert-info hr {
+  border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+  color: #245269;
+}
+.alert-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.alert-warning hr {
+  border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+  color: #66512c;
+}
+.alert-danger {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.alert-danger hr {
+  border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+  color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@-o-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+.progress {
+  height: 20px;
+  margin-bottom: 20px;
+  overflow: hidden;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+  float: left;
+  width: 0;
+  height: 100%;
+  font-size: 12px;
+  line-height: 20px;
+  color: #fff;
+  text-align: center;
+  background-color: #337ab7;
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+  -webkit-transition: width .6s ease;
+       -o-transition: width .6s ease;
+          transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  -webkit-background-size: 40px 40px;
+          background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+       -o-animation: progress-bar-stripes 2s linear infinite;
+          animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+  background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+  background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+  background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+  background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media {
+  margin-top: 15px;
+}
+.media:first-child {
+  margin-top: 0;
+}
+.media,
+.media-body {
+  overflow: hidden;
+  zoom: 1;
+}
+.media-body {
+  width: 10000px;
+}
+.media-object {
+  display: block;
+}
+.media-object.img-thumbnail {
+  max-width: none;
+}
+.media-right,
+.media > .pull-right {
+  padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+  padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+  display: table-cell;
+  vertical-align: top;
+}
+.media-middle {
+  vertical-align: middle;
+}
+.media-bottom {
+  vertical-align: bottom;
+}
+.media-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.media-list {
+  padding-left: 0;
+  list-style: none;
+}
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+  border-top-left-radius: 4px;
+  border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+  margin-bottom: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+a.list-group-item,
+button.list-group-item {
+  color: #555;
+}
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+  color: #333;
+}
+a.list-group-item:hover,
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
+  color: #555;
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+button.list-group-item {
+  width: 100%;
+  text-align: left;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+  color: #777;
+  cursor: not-allowed;
+  background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+  color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+  color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  z-index: 2;
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+  color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+  color: #c7ddef;
+}
+.list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+a.list-group-item-success,
+button.list-group-item-success {
+  color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-success:hover,
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
+  color: #3c763d;
+  background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+button.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
+  color: #fff;
+  background-color: #3c763d;
+  border-color: #3c763d;
+}
+.list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7;
+}
+a.list-group-item-info,
+button.list-group-item-info {
+  color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-info:hover,
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
+  color: #31708f;
+  background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+button.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
+  color: #fff;
+  background-color: #31708f;
+  border-color: #31708f;
+}
+.list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+a.list-group-item-warning,
+button.list-group-item-warning {
+  color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-warning:hover,
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
+  color: #8a6d3b;
+  background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+button.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
+  color: #fff;
+  background-color: #8a6d3b;
+  border-color: #8a6d3b;
+}
+.list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede;
+}
+a.list-group-item-danger,
+button.list-group-item-danger {
+  color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-danger:hover,
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
+  color: #a94442;
+  background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+button.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
+  color: #fff;
+  background-color: #a94442;
+  border-color: #a94442;
+}
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.list-group-item-text {
+  margin-bottom: 0;
+  line-height: 1.3;
+}
+.panel {
+  margin-bottom: 20px;
+  background-color: #fff;
+  border: 1px solid transparent;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+  padding: 15px;
+}
+.panel-heading {
+  padding: 10px 15px;
+  border-bottom: 1px solid transparent;
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+  color: inherit;
+}
+.panel-title {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 16px;
+  color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+  color: inherit;
+}
+.panel-footer {
+  padding: 10px 15px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+  margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+  border-width: 1px 0;
+  border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+  border-top: 0;
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+  border-bottom: 0;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+  border-top-width: 0;
+}
+.list-group + .panel-footer {
+  border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+  margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+  padding-right: 15px;
+  padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+  border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+  border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+  border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+  border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+  border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+  border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+  border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+  border-bottom: 0;
+}
+.panel > .table-responsive {
+  margin-bottom: 0;
+  border: 0;
+}
+.panel-group {
+  margin-bottom: 20px;
+}
+.panel-group .panel {
+  margin-bottom: 0;
+  border-radius: 4px;
+}
+.panel-group .panel + .panel {
+  margin-top: 5px;
+}
+.panel-group .panel-heading {
+  border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+  border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+  border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+  border-bottom: 1px solid #ddd;
+}
+.panel-default {
+  border-color: #ddd;
+}
+.panel-default > .panel-heading {
+  color: #333;
+  background-color: #f5f5f5;
+  border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+  color: #f5f5f5;
+  background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ddd;
+}
+.panel-primary {
+  border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #337ab7;
+}
+.panel-success {
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+  color: #dff0d8;
+  background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #d6e9c6;
+}
+.panel-info {
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+  color: #d9edf7;
+  background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #bce8f1;
+}
+.panel-warning {
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+  color: #fcf8e3;
+  background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #faebcc;
+}
+.panel-danger {
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+  color: #f2dede;
+  background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+  position: relative;
+  display: block;
+  height: 0;
+  padding: 0;
+  overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  border: 0;
+}
+.embed-responsive-16by9 {
+  padding-bottom: 56.25%;
+}
+.embed-responsive-4by3 {
+  padding-bottom: 75%;
+}
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+  padding: 24px;
+  border-radius: 6px;
+}
+.well-sm {
+  padding: 9px;
+  border-radius: 3px;
+}
+.close {
+  float: right;
+  font-size: 21px;
+  font-weight: bold;
+  line-height: 1;
+  color: #000;
+  text-shadow: 0 1px 0 #fff;
+  filter: alpha(opacity=20);
+  opacity: .2;
+}
+.close:hover,
+.close:focus {
+  color: #000;
+  text-decoration: none;
+  cursor: pointer;
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+button.close {
+  -webkit-appearance: none;
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+}
+.modal-open {
+  overflow: hidden;
+}
+.modal {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1050;
+  display: none;
+  overflow: hidden;
+  -webkit-overflow-scrolling: touch;
+  outline: 0;
+}
+.modal.fade .modal-dialog {
+  -webkit-transition: -webkit-transform .3s ease-out;
+       -o-transition:      -o-transform .3s ease-out;
+          transition:         transform .3s ease-out;
+  -webkit-transform: translate(0, -25%);
+      -ms-transform: translate(0, -25%);
+       -o-transform: translate(0, -25%);
+          transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+  -webkit-transform: translate(0, 0);
+      -ms-transform: translate(0, 0);
+       -o-transform: translate(0, 0);
+          transform: translate(0, 0);
+}
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 10px;
+}
+.modal-content {
+  position: relative;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  outline: 0;
+  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000;
+}
+.modal-backdrop.fade {
+  filter: alpha(opacity=0);
+  opacity: 0;
+}
+.modal-backdrop.in {
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+.modal-header {
+  padding: 15px;
+  border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+  margin-top: -2px;
+}
+.modal-title {
+  margin: 0;
+  line-height: 1.42857143;
+}
+.modal-body {
+  position: relative;
+  padding: 15px;
+}
+.modal-footer {
+  padding: 15px;
+  text-align: right;
+  border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+  margin-bottom: 0;
+  margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+@media (min-width: 768px) {
+  .modal-dialog {
+    width: 600px;
+    margin: 30px auto;
+  }
+  .modal-content {
+    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+  }
+  .modal-sm {
+    width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg {
+    width: 900px;
+  }
+}
+.tooltip {
+  position: absolute;
+  z-index: 1070;
+  display: block;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 12px;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  word-spacing: normal;
+  word-wrap: normal;
+  white-space: normal;
+  filter: alpha(opacity=0);
+  opacity: 0;
+
+  line-break: auto;
+}
+.tooltip.in {
+  filter: alpha(opacity=90);
+  opacity: .9;
+}
+.tooltip.top {
+  padding: 5px 0;
+  margin-top: -3px;
+}
+.tooltip.right {
+  padding: 0 5px;
+  margin-left: 3px;
+}
+.tooltip.bottom {
+  padding: 5px 0;
+  margin-top: 3px;
+}
+.tooltip.left {
+  padding: 0 5px;
+  margin-left: -3px;
+}
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #fff;
+  text-align: center;
+  background-color: #000;
+  border-radius: 4px;
+}
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+  right: 5px;
+  bottom: 0;
+  margin-bottom: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+  bottom: 0;
+  left: 5px;
+  margin-bottom: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-width: 5px 5px 5px 0;
+  border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-width: 5px 0 5px 5px;
+  border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+  top: 0;
+  right: 5px;
+  margin-top: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+  top: 0;
+  left: 5px;
+  margin-top: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1060;
+  display: none;
+  max-width: 276px;
+  padding: 1px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  word-spacing: normal;
+  word-wrap: normal;
+  white-space: normal;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+  line-break: auto;
+}
+.popover.top {
+  margin-top: -10px;
+}
+.popover.right {
+  margin-left: 10px;
+}
+.popover.bottom {
+  margin-top: 10px;
+}
+.popover.left {
+  margin-left: -10px;
+}
+.popover-title {
+  padding: 8px 14px;
+  margin: 0;
+  font-size: 14px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  border-radius: 5px 5px 0 0;
+}
+.popover-content {
+  padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.popover > .arrow {
+  border-width: 11px;
+}
+.popover > .arrow:after {
+  content: "";
+  border-width: 10px;
+}
+.popover.top > .arrow {
+  bottom: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-color: #999;
+  border-top-color: rgba(0, 0, 0, .25);
+  border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+  bottom: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+.popover.right > .arrow {
+  top: 50%;
+  left: -11px;
+  margin-top: -11px;
+  border-right-color: #999;
+  border-right-color: rgba(0, 0, 0, .25);
+  border-left-width: 0;
+}
+.popover.right > .arrow:after {
+  bottom: -10px;
+  left: 1px;
+  content: " ";
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+.popover.bottom > .arrow {
+  top: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-width: 0;
+  border-bottom-color: #999;
+  border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+  top: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+  top: 50%;
+  right: -11px;
+  margin-top: -11px;
+  border-right-width: 0;
+  border-left-color: #999;
+  border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+  right: 1px;
+  bottom: -10px;
+  content: " ";
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+.carousel {
+  position: relative;
+}
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+.carousel-inner > .item {
+  position: relative;
+  display: none;
+  -webkit-transition: .6s ease-in-out left;
+       -o-transition: .6s ease-in-out left;
+          transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+  line-height: 1;
+}
+@media all and (transform-3d), (-webkit-transform-3d) {
+  .carousel-inner > .item {
+    -webkit-transition: -webkit-transform .6s ease-in-out;
+         -o-transition:      -o-transform .6s ease-in-out;
+            transition:         transform .6s ease-in-out;
+
+    -webkit-backface-visibility: hidden;
+            backface-visibility: hidden;
+    -webkit-perspective: 1000px;
+            perspective: 1000px;
+  }
+  .carousel-inner > .item.next,
+  .carousel-inner > .item.active.right {
+    left: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+            transform: translate3d(100%, 0, 0);
+  }
+  .carousel-inner > .item.prev,
+  .carousel-inner > .item.active.left {
+    left: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+            transform: translate3d(-100%, 0, 0);
+  }
+  .carousel-inner > .item.next.left,
+  .carousel-inner > .item.prev.right,
+  .carousel-inner > .item.active {
+    left: 0;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+  }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  display: block;
+}
+.carousel-inner > .active {
+  left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  position: absolute;
+  top: 0;
+  width: 100%;
+}
+.carousel-inner > .next {
+  left: 100%;
+}
+.carousel-inner > .prev {
+  left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+  left: 0;
+}
+.carousel-inner > .active.left {
+  left: -100%;
+}
+.carousel-inner > .active.right {
+  left: 100%;
+}
+.carousel-control {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 15%;
+  font-size: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+  background-color: rgba(0, 0, 0, 0);
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+.carousel-control.left {
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+  background-repeat: repeat-x;
+}
+.carousel-control.right {
+  right: 0;
+  left: auto;
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+  background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+  color: #fff;
+  text-decoration: none;
+  filter: alpha(opacity=90);
+  outline: 0;
+  opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+  position: absolute;
+  top: 50%;
+  z-index: 5;
+  display: inline-block;
+  margin-top: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+  left: 50%;
+  margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+  right: 50%;
+  margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+  width: 20px;
+  height: 20px;
+  font-family: serif;
+  line-height: 1;
+}
+.carousel-control .icon-prev:before {
+  content: '\2039';
+}
+.carousel-control .icon-next:before {
+  content: '\203a';
+}
+.carousel-indicators {
+  position: absolute;
+  bottom: 10px;
+  left: 50%;
+  z-index: 15;
+  width: 60%;
+  padding-left: 0;
+  margin-left: -30%;
+  text-align: center;
+  list-style: none;
+}
+.carousel-indicators li {
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  margin: 1px;
+  text-indent: -999px;
+  cursor: pointer;
+  background-color: #000 \9;
+  background-color: rgba(0, 0, 0, 0);
+  border: 1px solid #fff;
+  border-radius: 10px;
+}
+.carousel-indicators .active {
+  width: 12px;
+  height: 12px;
+  margin: 0;
+  background-color: #fff;
+}
+.carousel-caption {
+  position: absolute;
+  right: 15%;
+  bottom: 20px;
+  left: 15%;
+  z-index: 10;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+  text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+  .carousel-control .glyphicon-chevron-left,
+  .carousel-control .glyphicon-chevron-right,
+  .carousel-control .icon-prev,
+  .carousel-control .icon-next {
+    width: 30px;
+    height: 30px;
+    margin-top: -10px;
+    font-size: 30px;
+  }
+  .carousel-control .glyphicon-chevron-left,
+  .carousel-control .icon-prev {
+    margin-left: -10px;
+  }
+  .carousel-control .glyphicon-chevron-right,
+  .carousel-control .icon-next {
+    margin-right: -10px;
+  }
+  .carousel-caption {
+    right: 20%;
+    left: 20%;
+    padding-bottom: 30px;
+  }
+  .carousel-indicators {
+    bottom: 20px;
+  }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-header:before,
+.modal-header:after,
+.modal-footer:before,
+.modal-footer:after {
+  display: table;
+  content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-header:after,
+.modal-footer:after {
+  clear: both;
+}
+.center-block {
+  display: block;
+  margin-right: auto;
+  margin-left: auto;
+}
+.pull-right {
+  float: right !important;
+}
+.pull-left {
+  float: left !important;
+}
+.hide {
+  display: none !important;
+}
+.show {
+  display: block !important;
+}
+.invisible {
+  visibility: hidden;
+}
+.text-hide {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+.hidden {
+  display: none !important;
+}
+.affix {
+  position: fixed;
+}
+@-ms-viewport {
+  width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+  display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+  display: none !important;
+}
+@media (max-width: 767px) {
+  .visible-xs {
+    display: block !important;
+  }
+  table.visible-xs {
+    display: table !important;
+  }
+  tr.visible-xs {
+    display: table-row !important;
+  }
+  th.visible-xs,
+  td.visible-xs {
+    display: table-cell !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-block {
+    display: block !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-inline {
+    display: inline !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm {
+    display: block !important;
+  }
+  table.visible-sm {
+    display: table !important;
+  }
+  tr.visible-sm {
+    display: table-row !important;
+  }
+  th.visible-sm,
+  td.visible-sm {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-block {
+    display: block !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md {
+    display: block !important;
+  }
+  table.visible-md {
+    display: table !important;
+  }
+  tr.visible-md {
+    display: table-row !important;
+  }
+  th.visible-md,
+  td.visible-md {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-block {
+    display: block !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg {
+    display: block !important;
+  }
+  table.visible-lg {
+    display: table !important;
+  }
+  tr.visible-lg {
+    display: table-row !important;
+  }
+  th.visible-lg,
+  td.visible-lg {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-block {
+    display: block !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (max-width: 767px) {
+  .hidden-xs {
+    display: none !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .hidden-sm {
+    display: none !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .hidden-md {
+    display: none !important;
+  }
+}
+@media (min-width: 1200px) {
+  .hidden-lg {
+    display: none !important;
+  }
+}
+.visible-print {
+  display: none !important;
+}
+@media print {
+  .visible-print {
+    display: block !important;
+  }
+  table.visible-print {
+    display: table !important;
+  }
+  tr.visible-print {
+    display: table-row !important;
+  }
+  th.visible-print,
+  td.visible-print {
+    display: table-cell !important;
+  }
+}
+.visible-print-block {
+  display: none !important;
+}
+@media print {
+  .visible-print-block {
+    display: block !important;
+  }
+}
+.visible-print-inline {
+  display: none !important;
+}
+@media print {
+  .visible-print-inline {
+    display: inline !important;
+  }
+}
+.visible-print-inline-block {
+  display: none !important;
+}
+@media print {
+  .visible-print-inline-block {
+    display: inline-block !important;
+  }
+}
+@media print {
+  .hidden-print {
+    display: none !important;
+  }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..7076114c8eb0cd8f13ca3d4580420e92d6cab112
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}hr,img{border:0}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.dropdown-menu,.modal-content{-webkit-background-clip:padding-box}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.carousel-inner,.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;line-break:auto;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.carousel-control,.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;text-align:left;text-align:start;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;text-align:left;text-align:start;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.eot b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.eot differ
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.svg b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000000000000000000000000000000000000..94fb5490a2ed10b2c69a4a567a4fd2e4f706d841
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.ttf b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.woff b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.woff differ
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/js/bootstrap.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/js/bootstrap.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a2e99a535d47e5798b167d1074ae2c77cab21e7
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/js/bootstrap.js
@@ -0,0 +1,2377 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+
+if (typeof jQuery === 'undefined') {
+  throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+  'use strict';
+  var version = $.fn.jquery.split(' ')[0].split('.')
+  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
+    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
+  }
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+  // ============================================================
+
+  function transitionEnd() {
+    var el = document.createElement('bootstrap')
+
+    var transEndEventNames = {
+      WebkitTransition : 'webkitTransitionEnd',
+      MozTransition    : 'transitionend',
+      OTransition      : 'oTransitionEnd otransitionend',
+      transition       : 'transitionend'
+    }
+
+    for (var name in transEndEventNames) {
+      if (el.style[name] !== undefined) {
+        return { end: transEndEventNames[name] }
+      }
+    }
+
+    return false // explicit for ie8 (  ._.)
+  }
+
+  // http://blog.alexmaccaw.com/css-transitions
+  $.fn.emulateTransitionEnd = function (duration) {
+    var called = false
+    var $el = this
+    $(this).one('bsTransitionEnd', function () { called = true })
+    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+    setTimeout(callback, duration)
+    return this
+  }
+
+  $(function () {
+    $.support.transition = transitionEnd()
+
+    if (!$.support.transition) return
+
+    $.event.special.bsTransitionEnd = {
+      bindType: $.support.transition.end,
+      delegateType: $.support.transition.end,
+      handle: function (e) {
+        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+      }
+    }
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.7
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // ALERT CLASS DEFINITION
+  // ======================
+
+  var dismiss = '[data-dismiss="alert"]'
+  var Alert   = function (el) {
+    $(el).on('click', dismiss, this.close)
+  }
+
+  Alert.VERSION = '3.3.7'
+
+  Alert.TRANSITION_DURATION = 150
+
+  Alert.prototype.close = function (e) {
+    var $this    = $(this)
+    var selector = $this.attr('data-target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+    }
+
+    var $parent = $(selector === '#' ? [] : selector)
+
+    if (e) e.preventDefault()
+
+    if (!$parent.length) {
+      $parent = $this.closest('.alert')
+    }
+
+    $parent.trigger(e = $.Event('close.bs.alert'))
+
+    if (e.isDefaultPrevented()) return
+
+    $parent.removeClass('in')
+
+    function removeElement() {
+      // detach from parent, fire event then clean up data
+      $parent.detach().trigger('closed.bs.alert').remove()
+    }
+
+    $.support.transition && $parent.hasClass('fade') ?
+      $parent
+        .one('bsTransitionEnd', removeElement)
+        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+      removeElement()
+  }
+
+
+  // ALERT PLUGIN DEFINITION
+  // =======================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.alert')
+
+      if (!data) $this.data('bs.alert', (data = new Alert(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  var old = $.fn.alert
+
+  $.fn.alert             = Plugin
+  $.fn.alert.Constructor = Alert
+
+
+  // ALERT NO CONFLICT
+  // =================
+
+  $.fn.alert.noConflict = function () {
+    $.fn.alert = old
+    return this
+  }
+
+
+  // ALERT DATA-API
+  // ==============
+
+  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.7
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // BUTTON PUBLIC CLASS DEFINITION
+  // ==============================
+
+  var Button = function (element, options) {
+    this.$element  = $(element)
+    this.options   = $.extend({}, Button.DEFAULTS, options)
+    this.isLoading = false
+  }
+
+  Button.VERSION  = '3.3.7'
+
+  Button.DEFAULTS = {
+    loadingText: 'loading...'
+  }
+
+  Button.prototype.setState = function (state) {
+    var d    = 'disabled'
+    var $el  = this.$element
+    var val  = $el.is('input') ? 'val' : 'html'
+    var data = $el.data()
+
+    state += 'Text'
+
+    if (data.resetText == null) $el.data('resetText', $el[val]())
+
+    // push to event loop to allow forms to submit
+    setTimeout($.proxy(function () {
+      $el[val](data[state] == null ? this.options[state] : data[state])
+
+      if (state == 'loadingText') {
+        this.isLoading = true
+        $el.addClass(d).attr(d, d).prop(d, true)
+      } else if (this.isLoading) {
+        this.isLoading = false
+        $el.removeClass(d).removeAttr(d).prop(d, false)
+      }
+    }, this), 0)
+  }
+
+  Button.prototype.toggle = function () {
+    var changed = true
+    var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+    if ($parent.length) {
+      var $input = this.$element.find('input')
+      if ($input.prop('type') == 'radio') {
+        if ($input.prop('checked')) changed = false
+        $parent.find('.active').removeClass('active')
+        this.$element.addClass('active')
+      } else if ($input.prop('type') == 'checkbox') {
+        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+        this.$element.toggleClass('active')
+      }
+      $input.prop('checked', this.$element.hasClass('active'))
+      if (changed) $input.trigger('change')
+    } else {
+      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+      this.$element.toggleClass('active')
+    }
+  }
+
+
+  // BUTTON PLUGIN DEFINITION
+  // ========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.button')
+      var options = typeof option == 'object' && option
+
+      if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+      if (option == 'toggle') data.toggle()
+      else if (option) data.setState(option)
+    })
+  }
+
+  var old = $.fn.button
+
+  $.fn.button             = Plugin
+  $.fn.button.Constructor = Button
+
+
+  // BUTTON NO CONFLICT
+  // ==================
+
+  $.fn.button.noConflict = function () {
+    $.fn.button = old
+    return this
+  }
+
+
+  // BUTTON DATA-API
+  // ===============
+
+  $(document)
+    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+      var $btn = $(e.target).closest('.btn')
+      Plugin.call($btn, 'toggle')
+      if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+        e.preventDefault()
+        // The target component still receive the focus
+        if ($btn.is('input,button')) $btn.trigger('focus')
+        else $btn.find('input:visible,button:visible').first().trigger('focus')
+      }
+    })
+    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+    })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.7
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // CAROUSEL CLASS DEFINITION
+  // =========================
+
+  var Carousel = function (element, options) {
+    this.$element    = $(element)
+    this.$indicators = this.$element.find('.carousel-indicators')
+    this.options     = options
+    this.paused      = null
+    this.sliding     = null
+    this.interval    = null
+    this.$active     = null
+    this.$items      = null
+
+    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+  }
+
+  Carousel.VERSION  = '3.3.7'
+
+  Carousel.TRANSITION_DURATION = 600
+
+  Carousel.DEFAULTS = {
+    interval: 5000,
+    pause: 'hover',
+    wrap: true,
+    keyboard: true
+  }
+
+  Carousel.prototype.keydown = function (e) {
+    if (/input|textarea/i.test(e.target.tagName)) return
+    switch (e.which) {
+      case 37: this.prev(); break
+      case 39: this.next(); break
+      default: return
+    }
+
+    e.preventDefault()
+  }
+
+  Carousel.prototype.cycle = function (e) {
+    e || (this.paused = false)
+
+    this.interval && clearInterval(this.interval)
+
+    this.options.interval
+      && !this.paused
+      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+    return this
+  }
+
+  Carousel.prototype.getItemIndex = function (item) {
+    this.$items = item.parent().children('.item')
+    return this.$items.index(item || this.$active)
+  }
+
+  Carousel.prototype.getItemForDirection = function (direction, active) {
+    var activeIndex = this.getItemIndex(active)
+    var willWrap = (direction == 'prev' && activeIndex === 0)
+                || (direction == 'next' && activeIndex == (this.$items.length - 1))
+    if (willWrap && !this.options.wrap) return active
+    var delta = direction == 'prev' ? -1 : 1
+    var itemIndex = (activeIndex + delta) % this.$items.length
+    return this.$items.eq(itemIndex)
+  }
+
+  Carousel.prototype.to = function (pos) {
+    var that        = this
+    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+    if (pos > (this.$items.length - 1) || pos < 0) return
+
+    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+    if (activeIndex == pos) return this.pause().cycle()
+
+    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+  }
+
+  Carousel.prototype.pause = function (e) {
+    e || (this.paused = true)
+
+    if (this.$element.find('.next, .prev').length && $.support.transition) {
+      this.$element.trigger($.support.transition.end)
+      this.cycle(true)
+    }
+
+    this.interval = clearInterval(this.interval)
+
+    return this
+  }
+
+  Carousel.prototype.next = function () {
+    if (this.sliding) return
+    return this.slide('next')
+  }
+
+  Carousel.prototype.prev = function () {
+    if (this.sliding) return
+    return this.slide('prev')
+  }
+
+  Carousel.prototype.slide = function (type, next) {
+    var $active   = this.$element.find('.item.active')
+    var $next     = next || this.getItemForDirection(type, $active)
+    var isCycling = this.interval
+    var direction = type == 'next' ? 'left' : 'right'
+    var that      = this
+
+    if ($next.hasClass('active')) return (this.sliding = false)
+
+    var relatedTarget = $next[0]
+    var slideEvent = $.Event('slide.bs.carousel', {
+      relatedTarget: relatedTarget,
+      direction: direction
+    })
+    this.$element.trigger(slideEvent)
+    if (slideEvent.isDefaultPrevented()) return
+
+    this.sliding = true
+
+    isCycling && this.pause()
+
+    if (this.$indicators.length) {
+      this.$indicators.find('.active').removeClass('active')
+      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+      $nextIndicator && $nextIndicator.addClass('active')
+    }
+
+    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+    if ($.support.transition && this.$element.hasClass('slide')) {
+      $next.addClass(type)
+      $next[0].offsetWidth // force reflow
+      $active.addClass(direction)
+      $next.addClass(direction)
+      $active
+        .one('bsTransitionEnd', function () {
+          $next.removeClass([type, direction].join(' ')).addClass('active')
+          $active.removeClass(['active', direction].join(' '))
+          that.sliding = false
+          setTimeout(function () {
+            that.$element.trigger(slidEvent)
+          }, 0)
+        })
+        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+    } else {
+      $active.removeClass('active')
+      $next.addClass('active')
+      this.sliding = false
+      this.$element.trigger(slidEvent)
+    }
+
+    isCycling && this.cycle()
+
+    return this
+  }
+
+
+  // CAROUSEL PLUGIN DEFINITION
+  // ==========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.carousel')
+      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+      var action  = typeof option == 'string' ? option : options.slide
+
+      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+      if (typeof option == 'number') data.to(option)
+      else if (action) data[action]()
+      else if (options.interval) data.pause().cycle()
+    })
+  }
+
+  var old = $.fn.carousel
+
+  $.fn.carousel             = Plugin
+  $.fn.carousel.Constructor = Carousel
+
+
+  // CAROUSEL NO CONFLICT
+  // ====================
+
+  $.fn.carousel.noConflict = function () {
+    $.fn.carousel = old
+    return this
+  }
+
+
+  // CAROUSEL DATA-API
+  // =================
+
+  var clickHandler = function (e) {
+    var href
+    var $this   = $(this)
+    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+    if (!$target.hasClass('carousel')) return
+    var options = $.extend({}, $target.data(), $this.data())
+    var slideIndex = $this.attr('data-slide-to')
+    if (slideIndex) options.interval = false
+
+    Plugin.call($target, options)
+
+    if (slideIndex) {
+      $target.data('bs.carousel').to(slideIndex)
+    }
+
+    e.preventDefault()
+  }
+
+  $(document)
+    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+  $(window).on('load', function () {
+    $('[data-ride="carousel"]').each(function () {
+      var $carousel = $(this)
+      Plugin.call($carousel, $carousel.data())
+    })
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.7
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+/* jshint latedef: false */
+
++function ($) {
+  'use strict';
+
+  // COLLAPSE PUBLIC CLASS DEFINITION
+  // ================================
+
+  var Collapse = function (element, options) {
+    this.$element      = $(element)
+    this.options       = $.extend({}, Collapse.DEFAULTS, options)
+    this.$trigger      = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+                           '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+    this.transitioning = null
+
+    if (this.options.parent) {
+      this.$parent = this.getParent()
+    } else {
+      this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+    }
+
+    if (this.options.toggle) this.toggle()
+  }
+
+  Collapse.VERSION  = '3.3.7'
+
+  Collapse.TRANSITION_DURATION = 350
+
+  Collapse.DEFAULTS = {
+    toggle: true
+  }
+
+  Collapse.prototype.dimension = function () {
+    var hasWidth = this.$element.hasClass('width')
+    return hasWidth ? 'width' : 'height'
+  }
+
+  Collapse.prototype.show = function () {
+    if (this.transitioning || this.$element.hasClass('in')) return
+
+    var activesData
+    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+    if (actives && actives.length) {
+      activesData = actives.data('bs.collapse')
+      if (activesData && activesData.transitioning) return
+    }
+
+    var startEvent = $.Event('show.bs.collapse')
+    this.$element.trigger(startEvent)
+    if (startEvent.isDefaultPrevented()) return
+
+    if (actives && actives.length) {
+      Plugin.call(actives, 'hide')
+      activesData || actives.data('bs.collapse', null)
+    }
+
+    var dimension = this.dimension()
+
+    this.$element
+      .removeClass('collapse')
+      .addClass('collapsing')[dimension](0)
+      .attr('aria-expanded', true)
+
+    this.$trigger
+      .removeClass('collapsed')
+      .attr('aria-expanded', true)
+
+    this.transitioning = 1
+
+    var complete = function () {
+      this.$element
+        .removeClass('collapsing')
+        .addClass('collapse in')[dimension]('')
+      this.transitioning = 0
+      this.$element
+        .trigger('shown.bs.collapse')
+    }
+
+    if (!$.support.transition) return complete.call(this)
+
+    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+    this.$element
+      .one('bsTransitionEnd', $.proxy(complete, this))
+      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+  }
+
+  Collapse.prototype.hide = function () {
+    if (this.transitioning || !this.$element.hasClass('in')) return
+
+    var startEvent = $.Event('hide.bs.collapse')
+    this.$element.trigger(startEvent)
+    if (startEvent.isDefaultPrevented()) return
+
+    var dimension = this.dimension()
+
+    this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+    this.$element
+      .addClass('collapsing')
+      .removeClass('collapse in')
+      .attr('aria-expanded', false)
+
+    this.$trigger
+      .addClass('collapsed')
+      .attr('aria-expanded', false)
+
+    this.transitioning = 1
+
+    var complete = function () {
+      this.transitioning = 0
+      this.$element
+        .removeClass('collapsing')
+        .addClass('collapse')
+        .trigger('hidden.bs.collapse')
+    }
+
+    if (!$.support.transition) return complete.call(this)
+
+    this.$element
+      [dimension](0)
+      .one('bsTransitionEnd', $.proxy(complete, this))
+      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+  }
+
+  Collapse.prototype.toggle = function () {
+    this[this.$element.hasClass('in') ? 'hide' : 'show']()
+  }
+
+  Collapse.prototype.getParent = function () {
+    return $(this.options.parent)
+      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+      .each($.proxy(function (i, element) {
+        var $element = $(element)
+        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+      }, this))
+      .end()
+  }
+
+  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+    var isOpen = $element.hasClass('in')
+
+    $element.attr('aria-expanded', isOpen)
+    $trigger
+      .toggleClass('collapsed', !isOpen)
+      .attr('aria-expanded', isOpen)
+  }
+
+  function getTargetFromTrigger($trigger) {
+    var href
+    var target = $trigger.attr('data-target')
+      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+    return $(target)
+  }
+
+
+  // COLLAPSE PLUGIN DEFINITION
+  // ==========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.collapse')
+      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.collapse
+
+  $.fn.collapse             = Plugin
+  $.fn.collapse.Constructor = Collapse
+
+
+  // COLLAPSE NO CONFLICT
+  // ====================
+
+  $.fn.collapse.noConflict = function () {
+    $.fn.collapse = old
+    return this
+  }
+
+
+  // COLLAPSE DATA-API
+  // =================
+
+  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+    var $this   = $(this)
+
+    if (!$this.attr('data-target')) e.preventDefault()
+
+    var $target = getTargetFromTrigger($this)
+    var data    = $target.data('bs.collapse')
+    var option  = data ? 'toggle' : $this.data()
+
+    Plugin.call($target, option)
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.7
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // DROPDOWN CLASS DEFINITION
+  // =========================
+
+  var backdrop = '.dropdown-backdrop'
+  var toggle   = '[data-toggle="dropdown"]'
+  var Dropdown = function (element) {
+    $(element).on('click.bs.dropdown', this.toggle)
+  }
+
+  Dropdown.VERSION = '3.3.7'
+
+  function getParent($this) {
+    var selector = $this.attr('data-target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+    }
+
+    var $parent = selector && $(selector)
+
+    return $parent && $parent.length ? $parent : $this.parent()
+  }
+
+  function clearMenus(e) {
+    if (e && e.which === 3) return
+    $(backdrop).remove()
+    $(toggle).each(function () {
+      var $this         = $(this)
+      var $parent       = getParent($this)
+      var relatedTarget = { relatedTarget: this }
+
+      if (!$parent.hasClass('open')) return
+
+      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+      if (e.isDefaultPrevented()) return
+
+      $this.attr('aria-expanded', 'false')
+      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
+    })
+  }
+
+  Dropdown.prototype.toggle = function (e) {
+    var $this = $(this)
+
+    if ($this.is('.disabled, :disabled')) return
+
+    var $parent  = getParent($this)
+    var isActive = $parent.hasClass('open')
+
+    clearMenus()
+
+    if (!isActive) {
+      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+        // if mobile we use a backdrop because click events don't delegate
+        $(document.createElement('div'))
+          .addClass('dropdown-backdrop')
+          .insertAfter($(this))
+          .on('click', clearMenus)
+      }
+
+      var relatedTarget = { relatedTarget: this }
+      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+      if (e.isDefaultPrevented()) return
+
+      $this
+        .trigger('focus')
+        .attr('aria-expanded', 'true')
+
+      $parent
+        .toggleClass('open')
+        .trigger($.Event('shown.bs.dropdown', relatedTarget))
+    }
+
+    return false
+  }
+
+  Dropdown.prototype.keydown = function (e) {
+    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+    var $this = $(this)
+
+    e.preventDefault()
+    e.stopPropagation()
+
+    if ($this.is('.disabled, :disabled')) return
+
+    var $parent  = getParent($this)
+    var isActive = $parent.hasClass('open')
+
+    if (!isActive && e.which != 27 || isActive && e.which == 27) {
+      if (e.which == 27) $parent.find(toggle).trigger('focus')
+      return $this.trigger('click')
+    }
+
+    var desc = ' li:not(.disabled):visible a'
+    var $items = $parent.find('.dropdown-menu' + desc)
+
+    if (!$items.length) return
+
+    var index = $items.index(e.target)
+
+    if (e.which == 38 && index > 0)                 index--         // up
+    if (e.which == 40 && index < $items.length - 1) index++         // down
+    if (!~index)                                    index = 0
+
+    $items.eq(index).trigger('focus')
+  }
+
+
+  // DROPDOWN PLUGIN DEFINITION
+  // ==========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.dropdown')
+
+      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  var old = $.fn.dropdown
+
+  $.fn.dropdown             = Plugin
+  $.fn.dropdown.Constructor = Dropdown
+
+
+  // DROPDOWN NO CONFLICT
+  // ====================
+
+  $.fn.dropdown.noConflict = function () {
+    $.fn.dropdown = old
+    return this
+  }
+
+
+  // APPLY TO STANDARD DROPDOWN ELEMENTS
+  // ===================================
+
+  $(document)
+    .on('click.bs.dropdown.data-api', clearMenus)
+    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.7
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // MODAL CLASS DEFINITION
+  // ======================
+
+  var Modal = function (element, options) {
+    this.options             = options
+    this.$body               = $(document.body)
+    this.$element            = $(element)
+    this.$dialog             = this.$element.find('.modal-dialog')
+    this.$backdrop           = null
+    this.isShown             = null
+    this.originalBodyPad     = null
+    this.scrollbarWidth      = 0
+    this.ignoreBackdropClick = false
+
+    if (this.options.remote) {
+      this.$element
+        .find('.modal-content')
+        .load(this.options.remote, $.proxy(function () {
+          this.$element.trigger('loaded.bs.modal')
+        }, this))
+    }
+  }
+
+  Modal.VERSION  = '3.3.7'
+
+  Modal.TRANSITION_DURATION = 300
+  Modal.BACKDROP_TRANSITION_DURATION = 150
+
+  Modal.DEFAULTS = {
+    backdrop: true,
+    keyboard: true,
+    show: true
+  }
+
+  Modal.prototype.toggle = function (_relatedTarget) {
+    return this.isShown ? this.hide() : this.show(_relatedTarget)
+  }
+
+  Modal.prototype.show = function (_relatedTarget) {
+    var that = this
+    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+    this.$element.trigger(e)
+
+    if (this.isShown || e.isDefaultPrevented()) return
+
+    this.isShown = true
+
+    this.checkScrollbar()
+    this.setScrollbar()
+    this.$body.addClass('modal-open')
+
+    this.escape()
+    this.resize()
+
+    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+    this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+      that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+      })
+    })
+
+    this.backdrop(function () {
+      var transition = $.support.transition && that.$element.hasClass('fade')
+
+      if (!that.$element.parent().length) {
+        that.$element.appendTo(that.$body) // don't move modals dom position
+      }
+
+      that.$element
+        .show()
+        .scrollTop(0)
+
+      that.adjustDialog()
+
+      if (transition) {
+        that.$element[0].offsetWidth // force reflow
+      }
+
+      that.$element.addClass('in')
+
+      that.enforceFocus()
+
+      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+      transition ?
+        that.$dialog // wait for modal to slide in
+          .one('bsTransitionEnd', function () {
+            that.$element.trigger('focus').trigger(e)
+          })
+          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+        that.$element.trigger('focus').trigger(e)
+    })
+  }
+
+  Modal.prototype.hide = function (e) {
+    if (e) e.preventDefault()
+
+    e = $.Event('hide.bs.modal')
+
+    this.$element.trigger(e)
+
+    if (!this.isShown || e.isDefaultPrevented()) return
+
+    this.isShown = false
+
+    this.escape()
+    this.resize()
+
+    $(document).off('focusin.bs.modal')
+
+    this.$element
+      .removeClass('in')
+      .off('click.dismiss.bs.modal')
+      .off('mouseup.dismiss.bs.modal')
+
+    this.$dialog.off('mousedown.dismiss.bs.modal')
+
+    $.support.transition && this.$element.hasClass('fade') ?
+      this.$element
+        .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+      this.hideModal()
+  }
+
+  Modal.prototype.enforceFocus = function () {
+    $(document)
+      .off('focusin.bs.modal') // guard against infinite focus loop
+      .on('focusin.bs.modal', $.proxy(function (e) {
+        if (document !== e.target &&
+            this.$element[0] !== e.target &&
+            !this.$element.has(e.target).length) {
+          this.$element.trigger('focus')
+        }
+      }, this))
+  }
+
+  Modal.prototype.escape = function () {
+    if (this.isShown && this.options.keyboard) {
+      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+        e.which == 27 && this.hide()
+      }, this))
+    } else if (!this.isShown) {
+      this.$element.off('keydown.dismiss.bs.modal')
+    }
+  }
+
+  Modal.prototype.resize = function () {
+    if (this.isShown) {
+      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+    } else {
+      $(window).off('resize.bs.modal')
+    }
+  }
+
+  Modal.prototype.hideModal = function () {
+    var that = this
+    this.$element.hide()
+    this.backdrop(function () {
+      that.$body.removeClass('modal-open')
+      that.resetAdjustments()
+      that.resetScrollbar()
+      that.$element.trigger('hidden.bs.modal')
+    })
+  }
+
+  Modal.prototype.removeBackdrop = function () {
+    this.$backdrop && this.$backdrop.remove()
+    this.$backdrop = null
+  }
+
+  Modal.prototype.backdrop = function (callback) {
+    var that = this
+    var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+    if (this.isShown && this.options.backdrop) {
+      var doAnimate = $.support.transition && animate
+
+      this.$backdrop = $(document.createElement('div'))
+        .addClass('modal-backdrop ' + animate)
+        .appendTo(this.$body)
+
+      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+        if (this.ignoreBackdropClick) {
+          this.ignoreBackdropClick = false
+          return
+        }
+        if (e.target !== e.currentTarget) return
+        this.options.backdrop == 'static'
+          ? this.$element[0].focus()
+          : this.hide()
+      }, this))
+
+      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+      this.$backdrop.addClass('in')
+
+      if (!callback) return
+
+      doAnimate ?
+        this.$backdrop
+          .one('bsTransitionEnd', callback)
+          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+        callback()
+
+    } else if (!this.isShown && this.$backdrop) {
+      this.$backdrop.removeClass('in')
+
+      var callbackRemove = function () {
+        that.removeBackdrop()
+        callback && callback()
+      }
+      $.support.transition && this.$element.hasClass('fade') ?
+        this.$backdrop
+          .one('bsTransitionEnd', callbackRemove)
+          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+        callbackRemove()
+
+    } else if (callback) {
+      callback()
+    }
+  }
+
+  // these following methods are used to handle overflowing modals
+
+  Modal.prototype.handleUpdate = function () {
+    this.adjustDialog()
+  }
+
+  Modal.prototype.adjustDialog = function () {
+    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+    this.$element.css({
+      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+    })
+  }
+
+  Modal.prototype.resetAdjustments = function () {
+    this.$element.css({
+      paddingLeft: '',
+      paddingRight: ''
+    })
+  }
+
+  Modal.prototype.checkScrollbar = function () {
+    var fullWindowWidth = window.innerWidth
+    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+      var documentElementRect = document.documentElement.getBoundingClientRect()
+      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+    }
+    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+    this.scrollbarWidth = this.measureScrollbar()
+  }
+
+  Modal.prototype.setScrollbar = function () {
+    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+    this.originalBodyPad = document.body.style.paddingRight || ''
+    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+  }
+
+  Modal.prototype.resetScrollbar = function () {
+    this.$body.css('padding-right', this.originalBodyPad)
+  }
+
+  Modal.prototype.measureScrollbar = function () { // thx walsh
+    var scrollDiv = document.createElement('div')
+    scrollDiv.className = 'modal-scrollbar-measure'
+    this.$body.append(scrollDiv)
+    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+    this.$body[0].removeChild(scrollDiv)
+    return scrollbarWidth
+  }
+
+
+  // MODAL PLUGIN DEFINITION
+  // =======================
+
+  function Plugin(option, _relatedTarget) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.modal')
+      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+      if (typeof option == 'string') data[option](_relatedTarget)
+      else if (options.show) data.show(_relatedTarget)
+    })
+  }
+
+  var old = $.fn.modal
+
+  $.fn.modal             = Plugin
+  $.fn.modal.Constructor = Modal
+
+
+  // MODAL NO CONFLICT
+  // =================
+
+  $.fn.modal.noConflict = function () {
+    $.fn.modal = old
+    return this
+  }
+
+
+  // MODAL DATA-API
+  // ==============
+
+  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+    var $this   = $(this)
+    var href    = $this.attr('href')
+    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+    if ($this.is('a')) e.preventDefault()
+
+    $target.one('show.bs.modal', function (showEvent) {
+      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+      $target.one('hidden.bs.modal', function () {
+        $this.is(':visible') && $this.trigger('focus')
+      })
+    })
+    Plugin.call($target, option, this)
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // TOOLTIP PUBLIC CLASS DEFINITION
+  // ===============================
+
+  var Tooltip = function (element, options) {
+    this.type       = null
+    this.options    = null
+    this.enabled    = null
+    this.timeout    = null
+    this.hoverState = null
+    this.$element   = null
+    this.inState    = null
+
+    this.init('tooltip', element, options)
+  }
+
+  Tooltip.VERSION  = '3.3.7'
+
+  Tooltip.TRANSITION_DURATION = 150
+
+  Tooltip.DEFAULTS = {
+    animation: true,
+    placement: 'top',
+    selector: false,
+    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+    trigger: 'hover focus',
+    title: '',
+    delay: 0,
+    html: false,
+    container: false,
+    viewport: {
+      selector: 'body',
+      padding: 0
+    }
+  }
+
+  Tooltip.prototype.init = function (type, element, options) {
+    this.enabled   = true
+    this.type      = type
+    this.$element  = $(element)
+    this.options   = this.getOptions(options)
+    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+    this.inState   = { click: false, hover: false, focus: false }
+
+    if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+    }
+
+    var triggers = this.options.trigger.split(' ')
+
+    for (var i = triggers.length; i--;) {
+      var trigger = triggers[i]
+
+      if (trigger == 'click') {
+        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+      } else if (trigger != 'manual') {
+        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
+        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+      }
+    }
+
+    this.options.selector ?
+      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+      this.fixTitle()
+  }
+
+  Tooltip.prototype.getDefaults = function () {
+    return Tooltip.DEFAULTS
+  }
+
+  Tooltip.prototype.getOptions = function (options) {
+    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+    if (options.delay && typeof options.delay == 'number') {
+      options.delay = {
+        show: options.delay,
+        hide: options.delay
+      }
+    }
+
+    return options
+  }
+
+  Tooltip.prototype.getDelegateOptions = function () {
+    var options  = {}
+    var defaults = this.getDefaults()
+
+    this._options && $.each(this._options, function (key, value) {
+      if (defaults[key] != value) options[key] = value
+    })
+
+    return options
+  }
+
+  Tooltip.prototype.enter = function (obj) {
+    var self = obj instanceof this.constructor ?
+      obj : $(obj.currentTarget).data('bs.' + this.type)
+
+    if (!self) {
+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+      $(obj.currentTarget).data('bs.' + this.type, self)
+    }
+
+    if (obj instanceof $.Event) {
+      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+    }
+
+    if (self.tip().hasClass('in') || self.hoverState == 'in') {
+      self.hoverState = 'in'
+      return
+    }
+
+    clearTimeout(self.timeout)
+
+    self.hoverState = 'in'
+
+    if (!self.options.delay || !self.options.delay.show) return self.show()
+
+    self.timeout = setTimeout(function () {
+      if (self.hoverState == 'in') self.show()
+    }, self.options.delay.show)
+  }
+
+  Tooltip.prototype.isInStateTrue = function () {
+    for (var key in this.inState) {
+      if (this.inState[key]) return true
+    }
+
+    return false
+  }
+
+  Tooltip.prototype.leave = function (obj) {
+    var self = obj instanceof this.constructor ?
+      obj : $(obj.currentTarget).data('bs.' + this.type)
+
+    if (!self) {
+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+      $(obj.currentTarget).data('bs.' + this.type, self)
+    }
+
+    if (obj instanceof $.Event) {
+      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+    }
+
+    if (self.isInStateTrue()) return
+
+    clearTimeout(self.timeout)
+
+    self.hoverState = 'out'
+
+    if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+    self.timeout = setTimeout(function () {
+      if (self.hoverState == 'out') self.hide()
+    }, self.options.delay.hide)
+  }
+
+  Tooltip.prototype.show = function () {
+    var e = $.Event('show.bs.' + this.type)
+
+    if (this.hasContent() && this.enabled) {
+      this.$element.trigger(e)
+
+      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+      if (e.isDefaultPrevented() || !inDom) return
+      var that = this
+
+      var $tip = this.tip()
+
+      var tipId = this.getUID(this.type)
+
+      this.setContent()
+      $tip.attr('id', tipId)
+      this.$element.attr('aria-describedby', tipId)
+
+      if (this.options.animation) $tip.addClass('fade')
+
+      var placement = typeof this.options.placement == 'function' ?
+        this.options.placement.call(this, $tip[0], this.$element[0]) :
+        this.options.placement
+
+      var autoToken = /\s?auto?\s?/i
+      var autoPlace = autoToken.test(placement)
+      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+      $tip
+        .detach()
+        .css({ top: 0, left: 0, display: 'block' })
+        .addClass(placement)
+        .data('bs.' + this.type, this)
+
+      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+      this.$element.trigger('inserted.bs.' + this.type)
+
+      var pos          = this.getPosition()
+      var actualWidth  = $tip[0].offsetWidth
+      var actualHeight = $tip[0].offsetHeight
+
+      if (autoPlace) {
+        var orgPlacement = placement
+        var viewportDim = this.getPosition(this.$viewport)
+
+        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :
+                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :
+                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :
+                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :
+                    placement
+
+        $tip
+          .removeClass(orgPlacement)
+          .addClass(placement)
+      }
+
+      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+      this.applyPlacement(calculatedOffset, placement)
+
+      var complete = function () {
+        var prevHoverState = that.hoverState
+        that.$element.trigger('shown.bs.' + that.type)
+        that.hoverState = null
+
+        if (prevHoverState == 'out') that.leave(that)
+      }
+
+      $.support.transition && this.$tip.hasClass('fade') ?
+        $tip
+          .one('bsTransitionEnd', complete)
+          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+        complete()
+    }
+  }
+
+  Tooltip.prototype.applyPlacement = function (offset, placement) {
+    var $tip   = this.tip()
+    var width  = $tip[0].offsetWidth
+    var height = $tip[0].offsetHeight
+
+    // manually read margins because getBoundingClientRect includes difference
+    var marginTop = parseInt($tip.css('margin-top'), 10)
+    var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+    // we must check for NaN for ie 8/9
+    if (isNaN(marginTop))  marginTop  = 0
+    if (isNaN(marginLeft)) marginLeft = 0
+
+    offset.top  += marginTop
+    offset.left += marginLeft
+
+    // $.fn.offset doesn't round pixel values
+    // so we use setOffset directly with our own function B-0
+    $.offset.setOffset($tip[0], $.extend({
+      using: function (props) {
+        $tip.css({
+          top: Math.round(props.top),
+          left: Math.round(props.left)
+        })
+      }
+    }, offset), 0)
+
+    $tip.addClass('in')
+
+    // check to see if placing tip in new offset caused the tip to resize itself
+    var actualWidth  = $tip[0].offsetWidth
+    var actualHeight = $tip[0].offsetHeight
+
+    if (placement == 'top' && actualHeight != height) {
+      offset.top = offset.top + height - actualHeight
+    }
+
+    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+    if (delta.left) offset.left += delta.left
+    else offset.top += delta.top
+
+    var isVertical          = /top|bottom/.test(placement)
+    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+    $tip.offset(offset)
+    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+  }
+
+  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+    this.arrow()
+      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+      .css(isVertical ? 'top' : 'left', '')
+  }
+
+  Tooltip.prototype.setContent = function () {
+    var $tip  = this.tip()
+    var title = this.getTitle()
+
+    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+    $tip.removeClass('fade in top bottom left right')
+  }
+
+  Tooltip.prototype.hide = function (callback) {
+    var that = this
+    var $tip = $(this.$tip)
+    var e    = $.Event('hide.bs.' + this.type)
+
+    function complete() {
+      if (that.hoverState != 'in') $tip.detach()
+      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+        that.$element
+          .removeAttr('aria-describedby')
+          .trigger('hidden.bs.' + that.type)
+      }
+      callback && callback()
+    }
+
+    this.$element.trigger(e)
+
+    if (e.isDefaultPrevented()) return
+
+    $tip.removeClass('in')
+
+    $.support.transition && $tip.hasClass('fade') ?
+      $tip
+        .one('bsTransitionEnd', complete)
+        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+      complete()
+
+    this.hoverState = null
+
+    return this
+  }
+
+  Tooltip.prototype.fixTitle = function () {
+    var $e = this.$element
+    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+    }
+  }
+
+  Tooltip.prototype.hasContent = function () {
+    return this.getTitle()
+  }
+
+  Tooltip.prototype.getPosition = function ($element) {
+    $element   = $element || this.$element
+
+    var el     = $element[0]
+    var isBody = el.tagName == 'BODY'
+
+    var elRect    = el.getBoundingClientRect()
+    if (elRect.width == null) {
+      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+    }
+    var isSvg = window.SVGElement && el instanceof window.SVGElement
+    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+    // See https://github.com/twbs/bootstrap/issues/20280
+    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
+    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+    return $.extend({}, elRect, scroll, outerDims, elOffset)
+  }
+
+  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :
+           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+  }
+
+  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+    var delta = { top: 0, left: 0 }
+    if (!this.$viewport) return delta
+
+    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+    var viewportDimensions = this.getPosition(this.$viewport)
+
+    if (/right|left/.test(placement)) {
+      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
+      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+      if (topEdgeOffset < viewportDimensions.top) { // top overflow
+        delta.top = viewportDimensions.top - topEdgeOffset
+      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+      }
+    } else {
+      var leftEdgeOffset  = pos.left - viewportPadding
+      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+        delta.left = viewportDimensions.left - leftEdgeOffset
+      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+      }
+    }
+
+    return delta
+  }
+
+  Tooltip.prototype.getTitle = function () {
+    var title
+    var $e = this.$element
+    var o  = this.options
+
+    title = $e.attr('data-original-title')
+      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
+
+    return title
+  }
+
+  Tooltip.prototype.getUID = function (prefix) {
+    do prefix += ~~(Math.random() * 1000000)
+    while (document.getElementById(prefix))
+    return prefix
+  }
+
+  Tooltip.prototype.tip = function () {
+    if (!this.$tip) {
+      this.$tip = $(this.options.template)
+      if (this.$tip.length != 1) {
+        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+      }
+    }
+    return this.$tip
+  }
+
+  Tooltip.prototype.arrow = function () {
+    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+  }
+
+  Tooltip.prototype.enable = function () {
+    this.enabled = true
+  }
+
+  Tooltip.prototype.disable = function () {
+    this.enabled = false
+  }
+
+  Tooltip.prototype.toggleEnabled = function () {
+    this.enabled = !this.enabled
+  }
+
+  Tooltip.prototype.toggle = function (e) {
+    var self = this
+    if (e) {
+      self = $(e.currentTarget).data('bs.' + this.type)
+      if (!self) {
+        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+        $(e.currentTarget).data('bs.' + this.type, self)
+      }
+    }
+
+    if (e) {
+      self.inState.click = !self.inState.click
+      if (self.isInStateTrue()) self.enter(self)
+      else self.leave(self)
+    } else {
+      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+    }
+  }
+
+  Tooltip.prototype.destroy = function () {
+    var that = this
+    clearTimeout(this.timeout)
+    this.hide(function () {
+      that.$element.off('.' + that.type).removeData('bs.' + that.type)
+      if (that.$tip) {
+        that.$tip.detach()
+      }
+      that.$tip = null
+      that.$arrow = null
+      that.$viewport = null
+      that.$element = null
+    })
+  }
+
+
+  // TOOLTIP PLUGIN DEFINITION
+  // =========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.tooltip')
+      var options = typeof option == 'object' && option
+
+      if (!data && /destroy|hide/.test(option)) return
+      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.tooltip
+
+  $.fn.tooltip             = Plugin
+  $.fn.tooltip.Constructor = Tooltip
+
+
+  // TOOLTIP NO CONFLICT
+  // ===================
+
+  $.fn.tooltip.noConflict = function () {
+    $.fn.tooltip = old
+    return this
+  }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.7
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // POPOVER PUBLIC CLASS DEFINITION
+  // ===============================
+
+  var Popover = function (element, options) {
+    this.init('popover', element, options)
+  }
+
+  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+  Popover.VERSION  = '3.3.7'
+
+  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+    placement: 'right',
+    trigger: 'click',
+    content: '',
+    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+  })
+
+
+  // NOTE: POPOVER EXTENDS tooltip.js
+  // ================================
+
+  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+  Popover.prototype.constructor = Popover
+
+  Popover.prototype.getDefaults = function () {
+    return Popover.DEFAULTS
+  }
+
+  Popover.prototype.setContent = function () {
+    var $tip    = this.tip()
+    var title   = this.getTitle()
+    var content = this.getContent()
+
+    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+    ](content)
+
+    $tip.removeClass('fade top bottom left right in')
+
+    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+    // this manually by checking the contents.
+    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+  }
+
+  Popover.prototype.hasContent = function () {
+    return this.getTitle() || this.getContent()
+  }
+
+  Popover.prototype.getContent = function () {
+    var $e = this.$element
+    var o  = this.options
+
+    return $e.attr('data-content')
+      || (typeof o.content == 'function' ?
+            o.content.call($e[0]) :
+            o.content)
+  }
+
+  Popover.prototype.arrow = function () {
+    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+  }
+
+
+  // POPOVER PLUGIN DEFINITION
+  // =========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.popover')
+      var options = typeof option == 'object' && option
+
+      if (!data && /destroy|hide/.test(option)) return
+      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.popover
+
+  $.fn.popover             = Plugin
+  $.fn.popover.Constructor = Popover
+
+
+  // POPOVER NO CONFLICT
+  // ===================
+
+  $.fn.popover.noConflict = function () {
+    $.fn.popover = old
+    return this
+  }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.7
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // SCROLLSPY CLASS DEFINITION
+  // ==========================
+
+  function ScrollSpy(element, options) {
+    this.$body          = $(document.body)
+    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
+    this.selector       = (this.options.target || '') + ' .nav li > a'
+    this.offsets        = []
+    this.targets        = []
+    this.activeTarget   = null
+    this.scrollHeight   = 0
+
+    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+    this.refresh()
+    this.process()
+  }
+
+  ScrollSpy.VERSION  = '3.3.7'
+
+  ScrollSpy.DEFAULTS = {
+    offset: 10
+  }
+
+  ScrollSpy.prototype.getScrollHeight = function () {
+    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+  }
+
+  ScrollSpy.prototype.refresh = function () {
+    var that          = this
+    var offsetMethod  = 'offset'
+    var offsetBase    = 0
+
+    this.offsets      = []
+    this.targets      = []
+    this.scrollHeight = this.getScrollHeight()
+
+    if (!$.isWindow(this.$scrollElement[0])) {
+      offsetMethod = 'position'
+      offsetBase   = this.$scrollElement.scrollTop()
+    }
+
+    this.$body
+      .find(this.selector)
+      .map(function () {
+        var $el   = $(this)
+        var href  = $el.data('target') || $el.attr('href')
+        var $href = /^#./.test(href) && $(href)
+
+        return ($href
+          && $href.length
+          && $href.is(':visible')
+          && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+      })
+      .sort(function (a, b) { return a[0] - b[0] })
+      .each(function () {
+        that.offsets.push(this[0])
+        that.targets.push(this[1])
+      })
+  }
+
+  ScrollSpy.prototype.process = function () {
+    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
+    var scrollHeight = this.getScrollHeight()
+    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()
+    var offsets      = this.offsets
+    var targets      = this.targets
+    var activeTarget = this.activeTarget
+    var i
+
+    if (this.scrollHeight != scrollHeight) {
+      this.refresh()
+    }
+
+    if (scrollTop >= maxScroll) {
+      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+    }
+
+    if (activeTarget && scrollTop < offsets[0]) {
+      this.activeTarget = null
+      return this.clear()
+    }
+
+    for (i = offsets.length; i--;) {
+      activeTarget != targets[i]
+        && scrollTop >= offsets[i]
+        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+        && this.activate(targets[i])
+    }
+  }
+
+  ScrollSpy.prototype.activate = function (target) {
+    this.activeTarget = target
+
+    this.clear()
+
+    var selector = this.selector +
+      '[data-target="' + target + '"],' +
+      this.selector + '[href="' + target + '"]'
+
+    var active = $(selector)
+      .parents('li')
+      .addClass('active')
+
+    if (active.parent('.dropdown-menu').length) {
+      active = active
+        .closest('li.dropdown')
+        .addClass('active')
+    }
+
+    active.trigger('activate.bs.scrollspy')
+  }
+
+  ScrollSpy.prototype.clear = function () {
+    $(this.selector)
+      .parentsUntil(this.options.target, '.active')
+      .removeClass('active')
+  }
+
+
+  // SCROLLSPY PLUGIN DEFINITION
+  // ===========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.scrollspy')
+      var options = typeof option == 'object' && option
+
+      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.scrollspy
+
+  $.fn.scrollspy             = Plugin
+  $.fn.scrollspy.Constructor = ScrollSpy
+
+
+  // SCROLLSPY NO CONFLICT
+  // =====================
+
+  $.fn.scrollspy.noConflict = function () {
+    $.fn.scrollspy = old
+    return this
+  }
+
+
+  // SCROLLSPY DATA-API
+  // ==================
+
+  $(window).on('load.bs.scrollspy.data-api', function () {
+    $('[data-spy="scroll"]').each(function () {
+      var $spy = $(this)
+      Plugin.call($spy, $spy.data())
+    })
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // TAB CLASS DEFINITION
+  // ====================
+
+  var Tab = function (element) {
+    // jscs:disable requireDollarBeforejQueryAssignment
+    this.element = $(element)
+    // jscs:enable requireDollarBeforejQueryAssignment
+  }
+
+  Tab.VERSION = '3.3.7'
+
+  Tab.TRANSITION_DURATION = 150
+
+  Tab.prototype.show = function () {
+    var $this    = this.element
+    var $ul      = $this.closest('ul:not(.dropdown-menu)')
+    var selector = $this.data('target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+    }
+
+    if ($this.parent('li').hasClass('active')) return
+
+    var $previous = $ul.find('.active:last a')
+    var hideEvent = $.Event('hide.bs.tab', {
+      relatedTarget: $this[0]
+    })
+    var showEvent = $.Event('show.bs.tab', {
+      relatedTarget: $previous[0]
+    })
+
+    $previous.trigger(hideEvent)
+    $this.trigger(showEvent)
+
+    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+    var $target = $(selector)
+
+    this.activate($this.closest('li'), $ul)
+    this.activate($target, $target.parent(), function () {
+      $previous.trigger({
+        type: 'hidden.bs.tab',
+        relatedTarget: $this[0]
+      })
+      $this.trigger({
+        type: 'shown.bs.tab',
+        relatedTarget: $previous[0]
+      })
+    })
+  }
+
+  Tab.prototype.activate = function (element, container, callback) {
+    var $active    = container.find('> .active')
+    var transition = callback
+      && $.support.transition
+      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+    function next() {
+      $active
+        .removeClass('active')
+        .find('> .dropdown-menu > .active')
+          .removeClass('active')
+        .end()
+        .find('[data-toggle="tab"]')
+          .attr('aria-expanded', false)
+
+      element
+        .addClass('active')
+        .find('[data-toggle="tab"]')
+          .attr('aria-expanded', true)
+
+      if (transition) {
+        element[0].offsetWidth // reflow for transition
+        element.addClass('in')
+      } else {
+        element.removeClass('fade')
+      }
+
+      if (element.parent('.dropdown-menu').length) {
+        element
+          .closest('li.dropdown')
+            .addClass('active')
+          .end()
+          .find('[data-toggle="tab"]')
+            .attr('aria-expanded', true)
+      }
+
+      callback && callback()
+    }
+
+    $active.length && transition ?
+      $active
+        .one('bsTransitionEnd', next)
+        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+      next()
+
+    $active.removeClass('in')
+  }
+
+
+  // TAB PLUGIN DEFINITION
+  // =====================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.tab')
+
+      if (!data) $this.data('bs.tab', (data = new Tab(this)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.tab
+
+  $.fn.tab             = Plugin
+  $.fn.tab.Constructor = Tab
+
+
+  // TAB NO CONFLICT
+  // ===============
+
+  $.fn.tab.noConflict = function () {
+    $.fn.tab = old
+    return this
+  }
+
+
+  // TAB DATA-API
+  // ============
+
+  var clickHandler = function (e) {
+    e.preventDefault()
+    Plugin.call($(this), 'show')
+  }
+
+  $(document)
+    .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+    .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.7
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // AFFIX CLASS DEFINITION
+  // ======================
+
+  var Affix = function (element, options) {
+    this.options = $.extend({}, Affix.DEFAULTS, options)
+
+    this.$target = $(this.options.target)
+      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
+
+    this.$element     = $(element)
+    this.affixed      = null
+    this.unpin        = null
+    this.pinnedOffset = null
+
+    this.checkPosition()
+  }
+
+  Affix.VERSION  = '3.3.7'
+
+  Affix.RESET    = 'affix affix-top affix-bottom'
+
+  Affix.DEFAULTS = {
+    offset: 0,
+    target: window
+  }
+
+  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+    var scrollTop    = this.$target.scrollTop()
+    var position     = this.$element.offset()
+    var targetHeight = this.$target.height()
+
+    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+    if (this.affixed == 'bottom') {
+      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+    }
+
+    var initializing   = this.affixed == null
+    var colliderTop    = initializing ? scrollTop : position.top
+    var colliderHeight = initializing ? targetHeight : height
+
+    if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+    return false
+  }
+
+  Affix.prototype.getPinnedOffset = function () {
+    if (this.pinnedOffset) return this.pinnedOffset
+    this.$element.removeClass(Affix.RESET).addClass('affix')
+    var scrollTop = this.$target.scrollTop()
+    var position  = this.$element.offset()
+    return (this.pinnedOffset = position.top - scrollTop)
+  }
+
+  Affix.prototype.checkPositionWithEventLoop = function () {
+    setTimeout($.proxy(this.checkPosition, this), 1)
+  }
+
+  Affix.prototype.checkPosition = function () {
+    if (!this.$element.is(':visible')) return
+
+    var height       = this.$element.height()
+    var offset       = this.options.offset
+    var offsetTop    = offset.top
+    var offsetBottom = offset.bottom
+    var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
+    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
+    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+    if (this.affixed != affix) {
+      if (this.unpin != null) this.$element.css('top', '')
+
+      var affixType = 'affix' + (affix ? '-' + affix : '')
+      var e         = $.Event(affixType + '.bs.affix')
+
+      this.$element.trigger(e)
+
+      if (e.isDefaultPrevented()) return
+
+      this.affixed = affix
+      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+      this.$element
+        .removeClass(Affix.RESET)
+        .addClass(affixType)
+        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+    }
+
+    if (affix == 'bottom') {
+      this.$element.offset({
+        top: scrollHeight - height - offsetBottom
+      })
+    }
+  }
+
+
+  // AFFIX PLUGIN DEFINITION
+  // =======================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.affix')
+      var options = typeof option == 'object' && option
+
+      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.affix
+
+  $.fn.affix             = Plugin
+  $.fn.affix.Constructor = Affix
+
+
+  // AFFIX NO CONFLICT
+  // =================
+
+  $.fn.affix.noConflict = function () {
+    $.fn.affix = old
+    return this
+  }
+
+
+  // AFFIX DATA-API
+  // ==============
+
+  $(window).on('load', function () {
+    $('[data-spy="affix"]').each(function () {
+      var $spy = $(this)
+      var data = $spy.data()
+
+      data.offset = data.offset || {}
+
+      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+      if (data.offsetTop    != null) data.offset.top    = data.offsetTop
+
+      Plugin.call($spy, data)
+    })
+  })
+
+}(jQuery);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/js/bootstrap.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/js/bootstrap.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..bcd13acfc6d28fe62f6cff827f12a75f54c46bd1
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,2 @@
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.7",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===s?[]:s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target).closest(".btn");e.call(o,"toggle"),t(i.target).is('input[type="radio"], input[type="checkbox"]')||(i.preventDefault(),o.is("input,button")?o.trigger("focus"):o.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e),o="prev"==t&&0===i||"next"==t&&i==this.$items.length-1;if(o&&!this.options.wrap)return e;var n="prev"==t?-1:1,s=(i+n)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){if(!this.sliding)return this.slide("next")},i.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.7",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=" li:not(.disabled):visible a",l=n.find(".dropdown-menu"+r);if(l.length){var h=l.index(i.target);38==i.which&&h>0&&h--,40==i.which&&h<l.length-1&&h++,~h||(h=0),l.eq(h).trigger("focus")}}}};var r=t.fn.dropdown;t.fn.dropdown=o,t.fn.dropdown.Constructor=a,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=r,this},t(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",s,a.prototype.toggle).on("keydown.bs.dropdown.data-api",s,a.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",a.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,o){return this.each(function(){var n=t(this),s=n.data("bs.modal"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);s||n.data("bs.modal",s=new i(this,a)),"string"==typeof e?s[e](o):a.show&&s.show(o)})}var i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var o=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var n=t.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),n&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var s=t.Event("shown.bs.modal",{relatedTarget:e});n?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(s)}).emulateTransitionEnd(i.TRANSITION_DURATION):o.$element.trigger("focus").trigger(s)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=function(e){var o=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&n;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+n).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){o.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},i.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var o=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var o=t(this),n=o.attr("href"),s=t(o.attr("data-target")||n&&n.replace(/.*(?=#[^\s]+$)/,"")),a=s.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(n)&&n},s.data(),o.data());o.is("a")&&i.preventDefault(),s.one("show.bs.modal",function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",function(){o.is(":visible")&&o.trigger("focus")})}),e.call(s,a,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tooltip"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.tooltip",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue())return clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide()},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-c<u.top?"bottom":"right"==r&&d.right+p>u.width?"left":"left"==r&&d.left-p<u.left?"right":r,s.removeClass(f).addClass(r)}var g=this.getCalculatedOffset(r,d,p,c);this.applyPlacement(g,r);var m=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",m).emulateTransitionEnd(i.TRANSITION_DURATION):m()}},i.prototype.applyPlacement=function(e,i){var o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight,a=parseInt(o.css("margin-top"),10),r=parseInt(o.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top+=a,e.left+=r,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var l=o[0].offsetWidth,h=o[0].offsetHeight;"top"==i&&h!=s&&(e.top=e.top+s-h);var d=this.getViewportAdjustedDelta(i,e,l,h);d.left?e.left+=d.left:e.top+=d.top;var p=/top|bottom/.test(i),c=p?2*d.left-n+l:2*d.top-s+h,f=p?"offsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][f],p)},i.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},i.prototype.hide=function(e){function o(){"in"!=n.hoverState&&s.detach(),n.$element&&n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),e&&e()}var n=this,s=t(this.$tip),a=t.Event("hide.bs."+this.type);if(this.$element.trigger(a),!a.isDefaultPrevented())return s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),this.hoverState=null,this},i.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},i.prototype.hasContent=function(){return this.getTitle()},i.prototype.getPosition=function(e){e=e||this.$element;var i=e[0],o="BODY"==i.tagName,n=i.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var s=window.SVGElement&&i instanceof window.SVGElement,a=o?{top:0,left:0}:s?null:e.offset(),r={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=o?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,r,l,a)},i.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},i.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.7",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(void 0===n[t+1]||e<n[t+1])&&this.activate(s[t])},e.prototype.activate=function(e){
+this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new i(this)),"string"==typeof e&&n[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n<i&&"top";if("bottom"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&"bottom":!(n+a<=t-o)&&"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&n<=i?"top":null!=o&&l+h>=t-o&&"bottom"},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/css/gritter.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/css/gritter.min.css
index 0b5b793f63a44c6ccfc51fabb7b9d31ec845be00..348e1cf448a3ae7feed3134c94b78bfe5a6780cb 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/css/gritter.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/css/gritter.min.css
@@ -1 +1 @@
-#gritter-notice-wrapper{position:fixed;top:30px;right:20px;width:301px;z-index:999999}#gritter-notice-wrapper.top-left{left:20px;right:auto}#gritter-notice-wrapper.bottom-right{top:auto;left:auto;bottom:20px;right:20px}#gritter-notice-wrapper.bottom-left{top:auto;right:auto;bottom:20px;left:20px}.gritter-item-wrapper{position:relative;margin:0 0 10px 0;background:url('../images/ie-spacer.gif')}.gritter-top{background:url(../images/gritter.png) no-repeat left -30px;height:10px}.hover .gritter-top{background-position:right -30px}.gritter-bottom{background:url(../images/gritter.png) no-repeat left bottom;height:8px;margin:0}.hover .gritter-bottom{background-position:bottom right}.gritter-item{display:block;background:url(../images/gritter.png) no-repeat left -40px;color:#eee;padding:2px 11px 8px 11px;font-size:11px;font-family:verdana}.hover .gritter-item{background-position:right -40px}.gritter-item p{padding:0;margin:0;word-wrap:break-word}.gritter-close{display:none;position:absolute;top:5px;right:3px;background:url(../images/gritter.png) no-repeat left top;cursor:pointer;width:30px;height:30px}.gritter-title{font-size:14px;font-weight:bold;padding:0 0 7px 0;display:block;text-shadow:1px 1px 0 #000}.gritter-image{width:48px;height:48px;float:left}.gritter-with-image,.gritter-without-image{padding:0}.gritter-with-image{width:220px;float:right}.gritter-light .gritter-item,.gritter-light .gritter-bottom,.gritter-light .gritter-top,.gritter-light .gritter-close{background-image:url(../images/gritter-light.png);color:#222}.gritter-light .gritter-title{text-shadow:none}
\ No newline at end of file
+#gritter-notice-wrapper{position:fixed;top:30px;right:20px;width:301px;z-index:999999}#gritter-notice-wrapper.top-left{left:20px;right:auto}#gritter-notice-wrapper.bottom-right{top:auto;left:auto;bottom:20px;right:20px}#gritter-notice-wrapper.bottom-left{top:auto;right:auto;bottom:20px;left:20px}.gritter-item-wrapper{position:relative;margin:0 0 10px;background:url(../images/ie-spacer.gif)}.gritter-top{background:url(../images/gritter.png) left -30px no-repeat;height:10px}.hover .gritter-top{background-position:right -30px}.gritter-bottom{background:url(../images/gritter.png) left bottom no-repeat;height:8px;margin:0}.hover .gritter-bottom{background-position:bottom right}.gritter-item{display:block;background:url(../images/gritter.png) left -40px no-repeat;color:#eee;padding:2px 11px 8px;font-size:11px;font-family:verdana}.hover .gritter-item{background-position:right -40px}.gritter-item p{padding:0;margin:0;word-wrap:break-word}.gritter-close{display:none;position:absolute;top:5px;right:3px;background:url(../images/gritter.png) left top no-repeat;cursor:pointer;width:30px;height:30px}.gritter-title{font-size:14px;font-weight:700;padding:0 0 7px;display:block;text-shadow:1px 1px 0 #000}.gritter-image{width:48px;height:48px;float:left}.gritter-with-image,.gritter-without-image{padding:0}.gritter-with-image{width:220px;float:right}.gritter-light .gritter-bottom,.gritter-light .gritter-close,.gritter-light .gritter-item,.gritter-light .gritter-top{background-image:url(../images/gritter-light.png);color:#222}.gritter-light .gritter-title{text-shadow:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.min.css
index 1f243285c4abce4c893a0e2d3e66d8cff334f8bd..69aa87791dde3efb1a8324c4cc71f622c310c9d3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.min.css
@@ -2,5 +2,4 @@
  * * http://jqueryui.com
  * * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
  * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=%22Open%20Sans%22%2C%20sans-serif&fwDefault=normal&fsDefault=13px&cornerRadius=0&bgColorHeader=%23333&bgTextureHeader=flat&bgImgOpacityHeader=0&borderColorHeader=%23333&fcHeader=%23eee&iconColorHeader=%23eee&bgColorContent=%23fff&bgTextureContent=flat&bgImgOpacityContent=0&borderColorContent=%23eee&fcContent=%23333333&iconColorContent=%23cccccc&bgColorDefault=%23f5f5f5&bgTextureDefault=flat&bgImgOpacityDefault=0&borderColorDefault=%23dfdfdf&fcDefault=%23222&iconColorDefault=%23222&bgColorHover=%23e1e1e1&bgTextureHover=flat&bgImgOpacityHover=0&borderColorHover=%23dfdfdf&fcHover=%23222&iconColorHover=%23222&bgColorActive=%23e1e1e1&bgTextureActive=flat&bgImgOpacityActive=65&borderColorActive=%23dfdfdf&fcActive=%23222&iconColorActive=%23222&bgColorHighlight=%23e1e1e1&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=%23dfdfdf&fcHighlight=%23222&iconColorHighlight=%23222&bgColorError=%23D54E21&bgTextureError=flat&bgImgOpacityError=0&borderColorError=%23D54E21&fcError=%23eee&iconColorError=%23eee&bgColorOverlay=%23333&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=2px&offsetTopShadow=-2px&offsetLeftShadow=-2px&cornerRadiusShadow=2px
- * * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:10px;padding:.5em .5em .5em .7em;border:1px solid #e5e5e5;min-height:0}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;right:.5em;left:initial;top:50%;margin-top:-8px;color:#a0a5aa}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border:1px solid #e5e5e5;border-top:0;overflow:auto;margin:0 0 10px 0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04) box-shadow:0 1px 1px rgba(0,0,0,.04)}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:"Open Sans",sans-serif;font-size:13px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:"Open Sans",sans-serif;font-size:1em}.ui-widget-content{border:1px solid #eee;background:#fff url(images/ui-bg_flat_0_fff_40x100.png) 50% 50% repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #333;background:#333 url(images/ui-bg_flat_0_333_40x100.png) 50% 50% repeat-x;color:#eee;font-weight:bold}.ui-widget-header a{color:#eee}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background:#fff;font-weight:normal;color:#222}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#222;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{font-weight:normal;color:#222}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#222;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{background:#fff;font-weight:normal;color:#222}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#222;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dfdfdf;background:#e1e1e1 url(images/ui-bg_flat_55_e1e1e1_40x100.png) 50% 50% repeat-x;color:#222}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#222}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #d54e21;background:#d54e21 url(images/ui-bg_flat_0_D54E21_40x100.png) 50% 50% repeat-x;color:#eee}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#eee}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#eee}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_cccccc_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_eee_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_999999_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_222_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_222_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_222_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_eee_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:0}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:0}.ui-widget-overlay{background:#333 url(images/ui-bg_flat_0_333_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-2px 0 0 -2px;padding:2px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:2px}.ui-tabs-nav .ui-corner-top{-khtml-border-top-left-radius:4px;-khtml-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-left-radius:4px;border-top-right-radius:4px;border:1px solid #dfdfdf}.ngg_settings_template_wrapper .ui-combobox-input{padding:0 !important}.ui-tabs .ui-tabs-nav li{background:white;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;margin-bottom:-1px;margin-right:.5em}.ui-tabs .ui-tabs-nav li a{color:#aaa;outline:0;font-size:120%}.ui-tabs .ui-tabs-nav li a:hover{color:#d54e21}.ui-tabs .ui-tabs-nav li.ui-tabs-active{padding-bottom:-1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{color:#464646}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{border-top:1px solid #8a8a8a;border-right:1px solid #8a8a8a;border-left:1px solid #8a8a8a;border-bottom:1px solid #fff}.ui-tabs-icon+ul.ui-tabs-nav{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-tabs-icon{float:left;background:url('images/nextgen-logo-small.jpg') no-repeat left center;font-size:18px;font-family:HelveticaNeue-Light,'Helvetica Neue Light','Helvetica Neue',sans-serif;width:200px;height:40px}.ui-tabs-icon .nextgen_logo{display:none}.ui-tabs-icon .nextgen_logo_sub{display:none;font-size:14px}.ui-widget-overlay{background:#000 50% 50% repeat-x;opacity:.4;filter:Alpha(Opacity=40);filter:-\9}.ui-widget select{height:2em}.ui-autocomplete{z-index:250}h3.ui-accordion-header.ui-state-default,h3.ui-accordion-header{margin:3px 0 0 0;font-size:14px;font-weight:600;line-height:20px}h3.ui-accordion-header a:focus,h3.ui-accordion-header:focus{outline:0;box-shadow:none}h3.ui-accordion-header.ui-state-active{border-bottom:1px solid #eee}div.accordion{margin-top:10px}
\ No newline at end of file
+ * * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */.ui-button,.ui-spinner,.ui-spinner-input{vertical-align:middle}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:10px;padding:.5em .5em .5em .7em;border:1px solid #e5e5e5;min-height:0}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;right:.5em;left:initial;top:50%;margin-top:-8px;color:#a0a5aa}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border:1px solid #e5e5e5;border-top:0;overflow:auto;margin:0 0 10px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04) box-shadow: 0 1px 1px rgba(0,0,0,.04)}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;text-align:center;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em}.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-multi .ui-datepicker-group,.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-slider-vertical .ui-slider-range-min,.ui-spinner-down{bottom:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0}.ui-spinner-input{border:none;background:0 0;color:inherit;padding:0;margin:.2em 22px .2em .4em}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:"Open Sans",sans-serif;font-size:13px}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:"Open Sans",sans-serif;font-size:1em}.ui-widget-content{border:1px solid #eee;background:url(images/ui-bg_flat_0_fff_40x100.png) 50% 50% repeat-x #fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #333;background:url(images/ui-bg_flat_0_333_40x100.png) 50% 50% repeat-x #333;color:#eee;font-weight:700}.ui-widget-header a{color:#eee}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background:#fff;font-weight:400;color:#222}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#222;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{font-weight:400;color:#222}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#222;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{background:#fff;font-weight:400;color:#222}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#222;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dfdfdf;background:url(images/ui-bg_flat_55_e1e1e1_40x100.png) 50% 50% repeat-x #e1e1e1;color:#222}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#222}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #D54E21;background:url(images/ui-bg_flat_0_D54E21_40x100.png) 50% 50% repeat-x #D54E21;color:#eee}.ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error a,.ui-widget-header .ui-state-error-text{color:#eee}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_cccccc_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_eee_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_999999_256x240.png)}.ui-state-active .ui-icon,.ui-state-focus .ui-icon,.ui-state-highlight .ui-icon,.ui-state-hover .ui-icon{background-image:url(images/ui-icons_222_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_eee_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:0}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:0}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:0}.ui-widget-shadow{margin:-2px 0 0 -2px;padding:2px;background:url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x #aaa;opacity:.3;filter:Alpha(Opacity=30);border-radius:2px}.ui-tabs-nav .ui-corner-top{-khtml-border-top-left-radius:4px;-khtml-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-left-radius:4px;border-top-right-radius:4px;border:1px solid #dfdfdf}.ngg_settings_template_wrapper .ui-combobox-input{padding:0!important}.ui-tabs .ui-tabs-nav li{background:#fff;font-family:HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",sans-serif;margin-bottom:-1px;margin-right:.5em}.ui-tabs .ui-tabs-nav li a{color:#aaa;outline:0;font-size:120%}.ui-tabs .ui-tabs-nav li a:hover{color:#d54e21}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{color:#464646}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{border-top:1px solid #8a8a8a;border-right:1px solid #8a8a8a;border-left:1px solid #8a8a8a;border-bottom:1px solid #fff}.ui-tabs-icon+ul.ui-tabs-nav{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-tabs-icon{float:left;background:url(images/nextgen-logo-small.jpg) left center no-repeat;font-size:18px;font-family:HelveticaNeue-Light,'Helvetica Neue Light','Helvetica Neue',sans-serif;width:200px;height:40px}.ui-tabs-icon .nextgen_logo{display:none}.ui-tabs-icon .nextgen_logo_sub{display:none;font-size:14px}.ui-widget-overlay{background:50% 50% repeat-x #000;opacity:.4;filter:Alpha(Opacity=40);filter:-\9}.ui-widget select{height:2em}.ui-autocomplete{z-index:250}h3.ui-accordion-header,h3.ui-accordion-header.ui-state-default{margin:3px 0 0;font-size:14px;font-weight:600;line-height:20px}h3.ui-accordion-header a:focus,h3.ui-accordion-header:focus{outline:0;box-shadow:none}h3.ui-accordion-header.ui-state-active{border-bottom:1px solid #eee}div.accordion{margin-top:10px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.min.css
index 01b096090ff51444f51f8a87b5a37b5f94c1f443..20d9dd2b2ba063732d4d9b1619d25c1c65fce40a 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.min.css
@@ -2,5 +2,4 @@
 * http://jqueryui.com
 * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
 * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=sans-serif&fwDefault=normal&fsDefault=12px&cornerRadius=4px&bgColorHeader=ececec&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=dfdfdf&fcHeader=333333&iconColorHeader=999999&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=dfdfdf&fcContent=333333&iconColorContent=333333&bgColorDefault=ececec&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=75&borderColorDefault=dfdfdf&fcDefault=333333&iconColorDefault=333333&bgColorHover=ececec&bgTextureHover=06_inset_hard.png&bgImgOpacityHover=75&borderColorHover=cccccc&fcHover=000000&iconColorHover=333333&bgColorActive=ececec&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=dfdfdf&fcActive=333333&iconColorActive=333333&bgColorHighlight=ffffe0&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=e6db55&fcHighlight=333333&iconColorHighlight=21759b&bgColorError=ffebe8&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cc0000&fcError=cc0000&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=3px
-* Copyright (c) 2012 jQuery Foundation and other contributors Licensed MIT */
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute !important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;zoom:1}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto;zoom:1}.ui-autocomplete{position:absolute;top:0;cursor:default}* html .ui-autocomplete{width:1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;zoom:1;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:none;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}* html .ui-tooltip{background-image:none}body .ui-tooltip{border-width:2px}.ui-widget{font-family:sans-serif;font-size:12px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:sans-serif;font-size:1em}.ui-widget-content{border:1px solid #dfdfdf;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #dfdfdf;background:#ececec url(images/ui-bg_highlight-soft_75_ececec_1x100.png) 50% 50% repeat-x;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #dfdfdf;background:#ececec url(images/ui-bg_highlight-hard_75_ececec_1x100.png) 50% 50% repeat-x;font-weight:normal;color:#333}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ccc;background:#ececec url(images/ui-bg_inset-hard_75_ececec_1x100.png) 50% 50% repeat-x;font-weight:normal;color:#000}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #dfdfdf;background:#ececec url(images/ui-bg_flat_65_ececec_40x100.png) 50% 50% repeat-x;font-weight:normal;color:#333}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#333;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #e6db55;background:#ffffe0 url(images/ui-bg_glass_55_ffffe0_1x400.png) 50% 50% repeat-x;color:#333}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#333}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #c00;background:#ffebe8 url(images/ui-bg_glass_95_ffebe8_1x400.png) 50% 50% repeat-x;color:#c00}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#c00}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#c00}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_333333_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_333333_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_999999_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_333333_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_333333_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_333333_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_21759b_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cc0000_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.ui-icon{float:left}.ui-accordion .ui-accordion-header{font-size:1.17em;text-shadow:#fff 0 1px 0;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;line-height:1}.ui-tabs .ui-tabs-nav li{background:white;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;margin-bottom:-1px;margin-right:.5em}.ui-tabs .ui-tabs-nav li a{color:#aaa;outline:0;font-size:120%}.ui-tabs .ui-tabs-nav li a:hover{color:#d54e21}.ui-tabs .ui-tabs-nav li.ui-tabs-active{padding-bottom:-1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{color:#464646}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{border-top:1px solid #8a8a8a;border-right:1px solid #8a8a8a;border-left:1px solid #8a8a8a;border-bottom:1px solid #fff}.ui-tabs-icon+ul.ui-tabs-nav{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-tabs-icon{float:left;background:url('images/nextgen-logo-small.jpg') no-repeat left center;font-size:18px;font-family:HelveticaNeue-Light,'Helvetica Neue Light','Helvetica Neue',sans-serif;width:200px;height:40px}.ui-tabs-icon .nextgen_logo{display:none}.ui-tabs-icon .nextgen_logo_sub{display:none;font-size:14px}.ui-widget-overlay{background:#000 50% 50% repeat-x;opacity:.4;filter:Alpha(Opacity=40);filter:-\9}.ui-widget select{height:2em}
\ No newline at end of file
+* Copyright (c) 2012 jQuery Foundation and other contributors Licensed MIT */.ui-spinner,.ui-spinner-input{vertical-align:middle;padding:0}.ui-helper-reset,.ui-menu{list-style:none;outline:0}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-helper-zfix,.ui-widget-overlay{position:absolute;top:0;height:100%;width:100%;left:0}.ui-helper-reset{margin:0;padding:0;border:0;line-height:1.3;text-decoration:none;font-size:100%}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;zoom:1}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto;zoom:1}.ui-autocomplete{position:absolute;top:0;cursor:default}* html .ui-autocomplete{width:1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em}.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-multi .ui-datepicker-group,.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin:.5em 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-slider-vertical .ui-slider-range-min,.ui-spinner-down{bottom:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{padding:2px;margin:0;display:block}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;zoom:1;font-weight:400}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden}.ui-spinner-input{border:none;background:0 0;margin:.2em 22px .2em .4em}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}* html .ui-tooltip{background-image:none}body .ui-tooltip{border-width:2px}.ui-widget{font-family:sans-serif;font-size:12px}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:sans-serif;font-size:1em}.ui-widget-content{border:1px solid #dfdfdf;background:url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x #fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #dfdfdf;background:url(images/ui-bg_highlight-soft_75_ececec_1x100.png) 50% 50% repeat-x #ececec;color:#333;font-weight:700}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #dfdfdf;background:url(images/ui-bg_highlight-hard_75_ececec_1x100.png) 50% 50% repeat-x #ececec;font-weight:400;color:#333}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #ccc;background:url(images/ui-bg_inset-hard_75_ececec_1x100.png) 50% 50% repeat-x #ececec;font-weight:400;color:#000}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #dfdfdf;background:url(images/ui-bg_flat_65_ececec_40x100.png) 50% 50% repeat-x #ececec;font-weight:400;color:#333}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#333;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #e6db55;background:url(images/ui-bg_glass_55_ffffe0_1x400.png) 50% 50% repeat-x #ffffe0;color:#333}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#333}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #c00;background:url(images/ui-bg_glass_95_ffebe8_1x400.png) 50% 50% repeat-x #ffebe8;color:#c00}.ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error a,.ui-widget-header .ui-state-error-text{color:#c00}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_333333_256x240.png)}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px;float:left}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_999999_256x240.png)}.ui-state-active .ui-icon,.ui-state-default .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(images/ui-icons_333333_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_21759b_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cc0000_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x #aaa;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.ui-accordion .ui-accordion-header{font-size:1.17em;text-shadow:#fff 0 1px 0;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;line-height:1}.ui-tabs .ui-tabs-nav li{background:#fff;font-family:HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",sans-serif;margin-bottom:-1px;margin-right:.5em}.ui-tabs .ui-tabs-nav li a{color:#aaa;outline:0;font-size:120%}.ui-tabs .ui-tabs-nav li a:hover{color:#d54e21}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{color:#464646}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{border-top:1px solid #8a8a8a;border-right:1px solid #8a8a8a;border-left:1px solid #8a8a8a;border-bottom:1px solid #fff}.ui-tabs-icon+ul.ui-tabs-nav{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-tabs-icon{float:left;background:url(images/nextgen-logo-small.jpg) left center no-repeat;font-size:18px;font-family:HelveticaNeue-Light,'Helvetica Neue Light','Helvetica Neue',sans-serif;width:200px;height:40px}.ui-tabs-icon .nextgen_logo{display:none}.ui-tabs-icon .nextgen_logo_sub{display:none;font-size:14px}.ui-widget-overlay{background:50% 50% repeat-x #000;opacity:.4;filter:Alpha(Opacity=40);filter:-\9}.ui-widget select{height:2em}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.min.js
index 06460c0926a160860d97ea6b660a67e28671a40a..38e8fe1417b3e80119bcfe53a8ce22567576fa9c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(1($){$.8.9=1(2,3){7 0.5(1(){6 $0=$(0);$0.a(\'g\',1(){b($0.2()==2){3.e(\'4\')}d{3.c(\'4\')}})})}})(f);',17,17,'this|function|val|target|slow|each|var|return|fn|nextgen_radio_toggle_tr|bind|if|hide|else|show|jQuery|change'.split('|'),0,{}))
+!function(n){n.fn.nextgen_radio_toggle_tr=function(t,i){return this.each(function(){var o=n(this);o.bind("change",function(){o.val()==t?i.show("slow"):i.hide("slow")})})}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.css
index 7fab7d9ae47662b9344ea5d23d0a7131313e3aa8..2c1626ca6fd734354b26e41396d30154dca61712 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.css
@@ -1 +1 @@
-.hidden{display:none}.nextgen_advanced_toggle_link{font-size:11px;position:relative;bottom:5px;color:#444}.url_field{width:400px}.nextgen_settings_colorpicker{width:85px !important;text-align:center;margin-left:50px}#nextgen_settings_wmXpos,#nextgen_settings_wmYpos{width:65px !important}table.nextgen_settings_position{width:auto !important}span.tooltip,label.tooltip{outline:0;background-image:url('information.png');background-repeat:no-repeat;padding-left:18px;padding-bottom:4px}#poststuff .ui-accordion h3{padding-left:25px}#lightbox_effects_content table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;padding-top:5px}#lightbox_effects_content tr{height:28px}
\ No newline at end of file
+.hidden{display:none}.nextgen_advanced_toggle_link{font-size:11px;position:relative;bottom:5px;color:#444}.url_field{width:400px}.nextgen_settings_colorpicker{width:85px!important;text-align:center;margin-left:50px}#nextgen_settings_wmXpos,#nextgen_settings_wmYpos{width:65px!important}table.nextgen_settings_position{width:auto!important}label.tooltip,span.tooltip{outline:0;background-image:url(information.png);background-repeat:no-repeat;padding-left:18px;padding-bottom:4px}#poststuff .ui-accordion h3{padding-left:25px}#lightbox_effects_content table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;padding-top:5px}#lightbox_effects_content tr{height:28px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.js
index 66e0eba555d143e44ceed3a88670b708fc70e766..c477e605fd2ff4be0aed8f7167895ce3b7a69b7e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('C(a($){$(\'.t\').t({z:x,A:p,E:\'L\',J:x,I:{G:\'r-v-j-1-s\',H:\'r-v-j-1-n\'}});$(\'d[f="q"], 4[f="q"]\').l(a(e){5 $4=$(6);5 g=p;7((g=$4.2(\'i-o\'))){7(!o(g)){e.k();F}}7($4.2(\'c\').K(\'y\')!=-1){5 3=$4.2(\'i-D-3\');7(!3)3=$4.2(\'3\');5 h=$4.2(\'c\').B(\'y\',\'\');5 $8=$(\'d[c="\'+h+\'"]\');7($8.14>0)$8.13(3);w{$8=$(\'<d/>\').2({f:\'b\',c:h,3:3});$4.M(\'11\').10($8)}}});$(\'.15\').16(\'l\',a(e){e.k();5 m=\'#\'+$(6).2(\'17\');5 9=$(6);$(m).Z(Y,\'R\',a(){7($(6).Q(\'b\')){$(6).P(\'b\');9.u(9.2(\'N\'))}w{$(6).O(\'b\');9.u(9.2(\'S\'))}})});$(\'d.T\').X();$(\'#W\').V(\'U\',\'12\')});',62,70,'||attr|value|button|var|this|if|field|btn|function|hidden|name|input||type|message|field_name|data|triangle|preventDefault|click|form_id||confirm|false|submit|ui||accordion|text|icon|else|true|_proxy|clearStyle|autoHeight|replace|jQuery|proxy|heightStyle|return|header|activeHeader|icons|collapsible|indexOf|content|parents|active_label|addClass|removeClass|hasClass|swing|hidden_label|nextgen_settings_field_colorpicker|visibility|css|ngg_page_content|wpColorPicker|500|toggle|append|form|visible|val|length|nextgen_advanced_toggle_link|on|rel'.split('|'),0,{}))
+jQuery(function(t){t(".accordion").accordion({clearStyle:!0,autoHeight:!1,heightStyle:"content",collapsible:!0,icons:{header:"ui-icon-triangle-1-s",activeHeader:"ui-icon-triangle-1-n"}}),t('input[type="submit"], button[type="submit"]').click(function(e){var i=t(this),n=!1;if((n=i.attr("data-confirm"))&&!confirm(n))return void e.preventDefault();if(i.attr("name").indexOf("_proxy")!=-1){var a=i.attr("data-proxy-value");a||(a=i.attr("value"));var r=i.attr("name").replace("_proxy",""),l=t('input[name="'+r+'"]');l.length>0?l.val(a):(l=t("<input/>").attr({type:"hidden",name:r,value:a}),i.parents("form").append(l))}}),t(".nextgen_advanced_toggle_link").on("click",function(e){e.preventDefault();var i="#"+t(this).attr("rel"),n=t(this);t(i).toggle(500,"swing",function(){t(this).hasClass("hidden")?(t(this).removeClass("hidden"),n.text(n.attr("active_label"))):(t(this).addClass("hidden"),n.text(n.attr("hidden_label")))})}),t("input.nextgen_settings_field_colorpicker").wpColorPicker(),t("#ngg_page_content").css("visibility","visible")});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.css
new file mode 100644
index 0000000000000000000000000000000000000000..38bec514a32e5bae790718fe4631c6b33ae6b0b1
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.css
@@ -0,0 +1,79 @@
+.ngg-wizard-starter {
+width: 250px;
+}
+.ngg-wizard-starter .starter-wrap {
+}
+.ngg-wizard-starter .starter-wrap-top {
+width: 180px;
+margin: 0 auto;
+}
+.ngg-wizard-starter .starter-wrap-icon {
+background: white;
+border-radius: 50%;
+border: 2px solid #ccc;
+border-top-width: 4px;
+padding: 1.2em;
+cursor: pointer;
+}
+.ngg-wizard-starter img.starter-icon {
+max-width: 100%;
+z-index: 10000;
+}
+.ngg-wizard-starter .starter-wrap-bottom {
+background: white;
+border-radius: 1em;
+border: 2px solid #ccc;
+border-top-width: 1px;
+padding: 0.8em;
+text-align: center;
+line-height: 1.5em;
+position: relative;
+margin-top: -2.2em;
+cursor: pointer;
+}
+#ngg-wizard-starter {
+position: fixed;
+bottom: 0;
+left: 10%;
+}
+
+.ngg-wizard-anchor {
+background: transparent;
+width: 50px;
+height: 50px;
+}
+#ngg-wizard-anchor {
+position: fixed;
+top: 50%;
+left: 50%;
+margin-left: -25px;
+margin-top: -25px;
+}
+
+.tourist-popover {
+z-index: 100100 !important;
+}
+.tourist-popover .arrow {
+margin-left: 0;
+bottom: auto;
+overflow: visible;
+}
+.tourist-popover .arrow:after {
+background-color: transparent;
+box-shadow: none;
+margin-left: 0;
+bottom: auto;
+left: auto;
+top: auto;
+overflow: visible;
+transform: none;
+}
+.tourist-popover .ngg-wizard-text {
+margin: 1em 1.4em 1em 1.1em;
+}
+.tourist-popover .ngg-wizard-loading {
+text-align: center;
+margin: 5px 0 0 0;
+clear: both;
+font-style: italic;
+}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ce77d95b9959dfec8eec4c0c8c3ebe3eefe6b18
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.js
@@ -0,0 +1,893 @@
+
+if (typeof(NextGEN_Wizard_Manager) === 'undefined') {
+	function NextGEN_Wizard(id, manager) {
+		this.id = id;
+		this.manager = manager;
+		this.data = {};
+		this.steps = [];
+		this.status = null;
+		this.tour = null;
+		this.created = Math.floor(Date.now() / 1000);
+	};
+	
+	NextGEN_Wizard.prototype.start = function () {
+		if (this.tour != null)
+			this.tour.start();
+	};
+	
+	NextGEN_Wizard.prototype.getNextStep = function (stepId) {
+		var index = 0;
+		for (; index < this.steps.length; index++) {
+			var step = this.steps[index];
+			
+			if (step['id'] == stepId)
+				break;
+		}
+		
+		index++;
+		
+		if (index < this.steps.length)
+			return this.steps[index];
+		
+		return null;
+	};
+	
+	NextGEN_Wizard.prototype.setState = function (state) {
+	};
+	
+	var manager = {
+		state : [],
+		wizards : [],
+		runningWizard : null,
+		views : [],
+		starter : null,
+		anchor : null,
+		events : {},
+		targetWatchers : {},
+		refreshTimer : null,
+		nggEvents : [],
+		
+		init : function () {
+			if (typeof(NextGEN_Wizard_Manager_State) !== 'undefined') {
+				this.state = NextGEN_Wizard_Manager_State;
+			}
+			
+			var manager = this;
+			jQuery(window.top.document).find('body').on('nextgen_event', function (e, type) {
+				manager.nggEvents.push({ type: type });
+			});
+			
+			function BaseView(el) {
+				var self = this;
+				this.itemSelector = '.view-item';
+				this.currentWizard = null;
+				this.currentStep = null;
+				this.doneFlag = false;
+				
+				this.init = function () {
+				};
+				this.disable = function() {
+				  el.addClass('ngg-wizard-disabled');
+				};
+				this.enable = function() {
+				  el.removeClass('ngg-wizard-disabled');
+				};
+				this.reset = function() {
+				  el.removeClass('ngg-wizard-has-selection');
+				  el.find(this.itemSelector).removeClass('ngg-wizard-selected');
+				};
+				this.done = function(child) {
+					if (!this.doneFlag) {
+						this.doneFlag = true;
+						this.trigger('done', this, child);
+					}
+				};
+			}
+			_.extend(BaseView.prototype, Backbone.Events);
+			
+			function GenericView(el) {
+				BaseView.call(this, el);
+				
+				var self = this;
+				
+				jQuery(el.get(0).ownerDocument).on('click', el.selector, function (e) {
+					self.done(el);
+				});
+			}
+			_.extend(GenericView.prototype, BaseView.prototype);
+			
+			function ButtonView(el) {
+				BaseView.call(this, el);
+				
+				var self = this;
+				
+				el.click(function (e) {
+					// here we only trigger done() if anchor is page-local (i.e. JS button) because for normal anchors this step is only "done" when reaching the new page
+					if (!el.is('a') || (el.attr("href").startsWith("#") || el.hasClass("thickbox"))) {
+						self.done(el);
+					}
+				});
+				
+				this.reset = function() {
+					if (!el.is('a'))
+						return;
+					
+					var href = el.attr("href");
+					
+					if (!href.startsWith("#")) {
+						if (href.indexOf("?") == -1)
+							href = href + "?";
+						else
+							href = href + "&";
+					
+						href = href + "ngg_wizard=" + this.currentWizard + "&ngg_wizard_step=" + this.currentStep;
+				
+						el.attr("href", href);
+					}
+				};
+			}
+			_.extend(ButtonView.prototype, BaseView.prototype);
+			
+			function TextView(el) {
+				BaseView.call(this, el);
+				
+				var self = this;
+				
+				el.on('input', function (e) {
+					if (jQuery(this).val().length >= 3)
+						self.done(el);
+				});
+				
+				this.reset = function() {
+					// in here we can support wizards steps after a post is submitted by editing the form's URL
+				};
+			}
+			_.extend(TextView.prototype, BaseView.prototype);
+			
+			function RadioView(el) {
+				BaseView.call(this, el);
+				
+				var self = this;
+				
+				jQuery(el.get(0).ownerDocument).on('change', el.selector, function (e) {
+					if (jQuery(this).is(':checked'))
+						self.done(el);
+				});
+				
+				this.reset = function() {
+					// in here we can support wizards steps after a post is submitted by editing the form's URL
+				};
+			}
+			_.extend(RadioView.prototype, BaseView.prototype);
+			
+			function SelectView(el) {
+				BaseView.call(this, el);
+				
+				var self = this;
+				
+				el.on('change', function (e) {
+					self.done(el);
+				});
+			}
+			_.extend(SelectView.prototype, BaseView.prototype);
+			
+			var view = null;
+			
+			view = {
+				handler : SelectView,
+				name : "SelectView",
+				selector : "select"
+			};
+			this.views.push(view);
+			
+			view = {
+				handler : RadioView,
+				name : "RadioView",
+				selector : "input[type='radio']"
+			};
+			this.views.push(view);
+			
+			view = {
+				handler : TextView,
+				name : "TextView",
+				selector : "input[type='text']"
+			};
+			this.views.push(view);
+			
+			view = {
+				handler : ButtonView,
+				name : "ButtonView",
+				selector : "a, input[type='button'], input[type='submit']"
+			};
+			this.views.push(view);
+			
+			view = {
+				handler : GenericView,
+				name : "GenericView",
+				selector : "*"
+			};
+			this.views.push(view);
+			
+			// override close button template
+    	Tourist.Tip.Base.prototype.nextButtonTemplate = '<a class="button-primary pull-right tour-next">Next step →</a>';
+    	Tourist.Tip.Base.prototype.finalButtonTemplate = '<button class="button-primary pull-right tour-next">Finish up</button>';
+			// override close button template
+			Tourist.Tip.Base.prototype.closeButtonTemplate = '<a class="btn btn-close tour-close" href="#"><i class="icon icon-remove fa fa-close"></i></a>';
+			
+			// override Tourist's BootstrapTip logic to retrieve target bounds
+		  Tourist.Tip.BootstrapTip.prototype._getTargetBounds = function(target) {
+		    var el, size;
+		    el = target[0];
+		    if (typeof el.getBoundingClientRect === 'function') {
+		      size = el.getBoundingClientRect();
+		    } else {
+		      size = {
+		        width: el.offsetWidth,
+		        height: el.offsetHeight
+		      };
+		    }
+		    
+		    var offset = target.offset();
+		    if (target.ownerDocument != document) {
+		    	var findFrameHierarchy = function (root, targetDoc) {
+				  	var iframes = root.find("iframe");
+				  	var ret = [];
+				  	for (var i = 0; i < iframes.size(); i++) {
+				  		var iframe = jQuery(iframes.get(i));
+				  		try {
+								if (iframe.prop("contentWindow").document == targetDoc)
+									return [ iframe ];
+				  		}
+				  		catch (ex) {
+				  			continue;
+				  		}
+				  		
+				  		var iframeNested = findFrameHierarchy(iframe.contents(), targetDoc);
+				  		if (iframeNested.length > 0) {
+				  			ret.push(iframe);
+				  			for (var l = 0; l < iframeNested.length; l++) {
+				  				ret.push(iframeNested[l]);
+				  			}
+				  			break;
+				  		}
+				  	}
+				  	return ret;
+		    	};
+		    	
+		    	var iframes = findFrameHierarchy(jQuery(document), target.get(0).ownerDocument);
+		    	for (var i = 0; i < iframes.length; i++) {
+		    		var iframe = iframes[i];
+		    		var iframeOff = iframe.offset();
+		    		offset.left += iframeOff.left;
+		    		offset.top += iframeOff.top;
+		    	}
+		    }
+		    
+		    return jQuery.extend({}, size, offset);
+		  };
+		  
+		  jQuery('.ngg-wizard-invoker').on('click', function (e) {
+		  	e.preventDefault();
+		  	
+		  	var manager = NextGEN_Wizard_Manager;
+		  	var wizardId = jQuery(this).data('ngg-wizard');
+		  	var wizardFound = null;
+		  	
+		  	for (var i = 0; i < manager.wizards.length; i++) {
+					var wizard = manager.wizards[i];
+					
+					if (wizard.id == wizardId) {
+						wizardFound = wizard;
+						break;
+					}
+		  	}
+		  	
+		  	if (wizardFound != null && this.runningWizard == null)
+		  		wizardFound.start();
+		  	
+		  	return false;
+		  });
+		},
+		
+		bind: function (eventName, handler) {
+			if (!(eventName in this.events))
+				this.events[eventName] = [];
+				
+			var evtOb = { 'handler' : handler };
+			
+			this.events[eventName].push(evtOb);
+		},
+		
+		trigger: function (eventName, params) {
+			if (typeof(params) === "undefined")
+				params = {};
+			
+			if (eventName in this.events) {
+				var evtList = this.events[eventName];
+				
+				for (var i = 0; i < evtList.length; i++) {
+					var evt = evtList[i];
+					
+					if (evt.handler)
+						evt.handler(this, params);
+				}
+			}
+		},
+		
+		didNextgenEventFire: function (type) {
+			for (var i = 0; i < this.nggEvents.length; i++)
+			{
+				var evt = this.nggEvents[i];
+				
+				if (evt.type == type)
+					return true;
+			}
+			
+			return false;
+		},
+		
+		getViewForSelector: function (jquerySet, init) {
+			var handler = null;
+			
+			if (typeof(init) === "undefined")
+				init = true;
+			
+			for (var i = 0; i < this.views.length; i++) {
+				var view = this.views[i];
+				
+				if (jquerySet.is(view.selector)) {
+					handler = view.handler;
+					break;
+				}
+			}
+			
+			if (handler != null) {
+				var view = new handler(jquerySet);
+				
+				if (init)
+					view.init();
+				
+				return view;
+			}
+			
+			return null;
+		},
+		
+		getViewFor: function (jquerySet, wizardId, stepId) {
+			var view = this.getViewForSelector(jquerySet, false);
+			
+			if (view != null) {
+				view.currentWizard = wizardId;
+				view.currentStep = stepId;
+				
+				view.init();
+			}
+			
+			return view;
+		},
+		
+		generateQueue : function ($) {
+			var self = this;
+			var state = this.state;
+			var wizard_count = state.wizard_list.length;
+			var starter = state.starter;
+			var runningWizardId = state.running_wizard;
+		
+			// create a starter for the wizards, a call to attention
+			if (wizard_count > 0) {
+				var $starter = $('<div id="ngg-wizard-starter" class="ngg-wizard-starter"></div>');
+				$starter.append('<div class="starter-wrap-top"><div class="starter-wrap-icon"><img class="starter-icon" src="' + starter['image'] + '" /></div></div>');
+				$starter.append('<div class="starter-wrap-bottom"><div class="starter-wrap-text">' + starter['text'] + '</div></div>');
+			
+				$starter.on("click", ".starter-wrap-icon, starter-wrap-bottom", function () {
+					self.startQueue();	
+				});
+				
+				$starter.hide();
+				$starter.appendTo('body');
+				this.starter = $starter;
+				
+				var $anchor = $('<div id="ngg-wizard-anchor" class="ngg-wizard-anchor"></div>');
+				$anchor.appendTo('body');
+				this.anchor = $anchor;
+				
+				var waitCount = 0;
+	
+				for (var i = 0; i < wizard_count; i++) {
+					var wizardData = state.wizard_list[i];
+					var wizard = new NextGEN_Wizard(wizardData['id'], this);
+					wizard.data = wizardData;
+					wizard.steps = wizardData['steps'];
+					
+					var result = this.generateTour(wizard);
+					
+					if (result.result == "ok") {
+						wizard.status = "ready";
+						wizard.tour = result.tour;
+					}
+					else if (result.result == "wait_element") {
+						wizard.status = "wait";
+						waitCount++;
+					}
+					
+					if (wizard.id == runningWizardId) {
+						this.wizards.unshift(wizard);
+						this.runningWizard = wizard;
+					}
+					else
+						this.wizards.push(wizard);
+				}
+				
+				if (waitCount > 0)
+					this.enqueueRefreshOperation();
+				else
+					this.trigger('ready');
+			}
+		},
+		
+		getContextObject : function (context) {
+			var jContext = null;
+			
+			if (context != null) {
+				if (typeof(context) !== "object")
+					context = [ context ];
+				
+				for (var i = 0; i < context.length; i++) {
+					var contextIt = context[i];
+					
+					if (jContext == null)
+						jContext = jQuery(contextIt);
+					else
+						jContext = jContext.find(contextIt);
+						
+					if (jContext.is("iframe")) {
+						//jContext = jContext.contents().find("body");
+						var iframeWin = jContext.prop("contentWindow");
+						if (iframeWin.document.readyState == 'interactive' || iframeWin.document.readyState == 'complete') {
+							if (iframeWin.jQuery)
+								jContext = iframeWin.jQuery("body");
+							else
+								jContext = jContext.contents().find("body");
+						}
+						else {
+							jContext = jQuery([]);
+							
+							break;
+						}
+					}
+				}
+				
+				if (jContext.size() == 0)
+					jContext = jQuery([]);
+			}
+			else
+				jContext = jQuery(document);
+				
+			return jContext;
+		},
+		
+		computeStepTarget : function (wizard, step, stepOb) {
+			var targetWait = step['target_wait'];
+			var target = step['target'];
+			var view = step['view'];
+			var jTarget = null;
+			var jView = null;
+			var viewOb = null;
+			var jContext = this.getContextObject(step['context']);
+			var isTargeted = false;
+		
+			if (target != null) {
+				jTarget = jContext.find(target);
+				
+				if (jTarget.size() > 0)
+					isTargeted = true;
+				else
+					jTarget = this.anchor;
+				
+				// if we couldn't locate the target but the step is specified to wait for it, then return
+				if (!isTargeted && targetWait != null) {
+					if ((Math.floor(Date.now() / 1000) - wizard.created) <= targetWait)
+						return false;
+				}
+			}
+			else
+				jTarget = this.anchor;
+			
+			if (view != null) {
+				jView = jContext.find(view);
+				
+				if (jView.size() > 0)
+					viewOb = this.getViewFor(jView, wizard.id, step['id']);
+			}
+			
+			stepOb.highlightTarget = isTargeted;
+			stepOb.nextButton = !isTargeted;
+			stepOb.target = jTarget;
+			stepOb.ngg_view = viewOb;
+				
+			return true;
+		},
+		
+		scrollIntoView : function (target) {
+			
+		},
+		
+		generateTour : function (wizard) {
+			// return if we already generated it
+			if (wizard.tour != null)
+				return;
+		
+			var wizardData = wizard.data;
+			var steps = wizardData['steps'];
+			var currentStep = wizardData['current_step'];
+			var skipSteps = 0;
+			var tourSteps = [];
+			var tourView = null;
+			
+			if (wizardData['view'] != null) {
+				tourView = this.getViewFor(jQuery(wizardData['view']), wizard.id);
+			
+				if (tourView == null)
+					return { result: "wait_element", element: wizardData['view'] };
+			}
+			
+			for (var l = 0; l < steps.length; l++) {
+				var step = steps[l];
+				
+				if (currentStep != null) {
+					if (currentStep == step['id'])
+						skipSteps = l;
+				}
+				
+				var tourStep = {
+					ngg_step_id: step['id'],
+					ngg_step_data: step,
+					viewport: jQuery(window),
+					closeButton: true,
+					content: '<div class="ngg-wizard-text">' + step['text'] + '</div>',
+					my: step['popup_anchor'],
+					at: step['target_anchor'],
+				  // a function name in bind allows you to reference
+				  // it with `this` in setup and teardown
+				  bind: ['onDone'],
+				  onDone: function(tour, options, view, el) {
+						var wizard = tour.ngg_wizard;
+						var step = this.ngg_step_data;
+						var canNext = true;
+						
+						if (step['condition'] != null) {
+							if (!this.condition_met) {
+								canNext = false;
+								
+								if (!this.condition_setup)
+									this.setupCondition(tour, options);
+							}
+						}
+						
+						if (canNext && wizard != null) {
+							var stepNext = wizard.getNextStep(this.ngg_step_id);
+							
+							if (stepNext != null && stepNext['lazy']) {
+								canNext = false;
+								var tourStep = null;
+								
+								for (var i = 0; i < tour.options.steps.length; i++) {
+									var step2 = tour.options.steps[i];
+									if (step2.ngg_step_id == stepNext['id']) {
+										tourStep = step2;
+										break;
+									}
+								}
+								
+								if (tourStep != null) {
+									if (tourStep.target == null || tourStep.target.size() == 0 || tourStep.target.attr('id') == 'ngg-wizard-anchor') {
+										canNext = wizard.manager.computeStepTarget(wizard, stepNext, tourStep);
+										
+										if (canNext && (tourStep.target == null || tourStep.target.size() == 0 || tourStep.target.attr('id') == 'ngg-wizard-anchor'))
+											canNext = false;
+									}
+									else
+										canNext = true;
+										
+//									if (canNext)
+//										tourStep.target[0].scrollIntoView();
+								}
+							}
+						}
+						
+						if (canNext) {
+				    	tour.next();
+						}
+						else {
+							if (this.lazyTimeout != null) {
+								clearTimeout(this.lazyTimeout);
+								this.lazyTimeout = null;
+							}
+							
+							var stepOb = this;
+							this.lazyTimeout = setTimeout(function () { stepOb.lazyTimeout = null; stepOb.onDone(tour, options, view, el); }, 500);
+						}
+				  }
+				};
+				
+				var ready = this.computeStepTarget(wizard, step, tourStep);
+				
+				if (!ready)
+					return { result: "wait_element", element: step['target'] };
+					
+				tourStep.setupCondition = function (tour, options) {
+					var wizard = tour.ngg_wizard;
+					var step = this.ngg_step_data;
+					
+					if (!this.condition_setup && step['condition'] != null) {
+						var condition = step['condition'];
+						var condType = condition['type'];
+						var condValue = condition['value'];
+						var condCtx = condition['context'];
+						var condTimeout = condition['timeout'];
+						this.condition_met = false;
+						this.condition_setup = false;
+
+						if (condCtx && typeof(condCtx) !== "object")
+							condCtx = [ condCtx ];
+						
+						var $ob = jQuery([]);
+						var obWin = null;
+						if (condCtx) {
+							// clone array
+							condCtx = condCtx.slice(0);
+							var condOb = condCtx.pop();
+							$ob = wizard.manager.getContextObject(condCtx).find(condOb);
+						}
+						
+						if ($ob.size() > 0) {
+							var doc = $ob.get(0).ownerDocument;
+							obWin = doc.defaultView || doc.parentWindow;
+						}
+						
+						switch (condType) {
+							case 'frame_event': {
+								if (window.Frame_Event_Publisher) {
+									this.condition_setup = true;
+									var tourStep = this;
+									Frame_Event_Publisher.listen_for(condValue, function() {
+										tourStep.condition_met = true;
+									});
+								}
+								
+								break;
+							}
+							case 'event_bind':
+							case 'plupload_bind': {
+								var doBind = $ob.size() > 0;
+							
+								if (condType == 'plupload_bind') {
+									if (typeof($ob.pluploadQueue) !== 'undefined')
+										$ob = $ob.pluploadQueue();
+									else
+										doBind = false;
+								}
+								
+								if (doBind) {
+									this.condition_setup = true;
+									var tourStep = this;
+									$ob.bind(condValue, function () {
+										tourStep.condition_met = true;
+									});
+								}
+								
+								break;
+							}
+							case 'nextgen_event': {
+								this.condition_setup = true;
+								if (wizard.manager.didNextgenEventFire(condValue))
+									this.condition_met = true;
+								else {
+									var tourStep = this;
+									jQuery(window.top.document).find('body').bind('nextgen_event', function (e, type) {
+										if (type == condValue)
+											tourStep.condition_met = true;
+									});
+								}
+								
+								break;
+							}
+							case 'wait': {
+								this.condition_setup = true;
+								var tourStep = this;
+								setTimeout(function () {
+									tourStep.condition_met = true;
+								}, condValue);
+								
+								break;
+							}
+						}
+					}
+					
+					var $content = jQuery('.tourist-popover .ngg-wizard-text');
+					var $mark = $content.find('.ngg-wizard-loading');
+					$mark.hide();
+					
+					if (this.condition_setup && !this.condition_met && condTimeout > 0) {
+						this.condition_timeout = 0;
+						if ($mark.length == 0) {
+							$mark = jQuery('<div class="ngg-wizard-loading"></div>');
+							$content.append($mark);
+						}
+						$mark.html('Loading... (' + Math.ceil(condTimeout / 1000).toString() + ')');
+						$mark.show();
+						
+						var smallTimeout = 1000;
+						var tourStep = this;
+						tourStep.condition_timer = setInterval(function () {
+							tourStep.condition_timeout += smallTimeout;
+							if (tourStep.condition_timeout >= condTimeout)
+								tourStep.condition_met = true;
+							var secsIn = Math.floor(tourStep.condition_timeout / 1000);
+							var secsTot = Math.ceil(condTimeout / 1000);
+							var secsDiff = Math.floor((condTimeout - tourStep.condition_timeout) / 1000);
+							//$mark.html('Loading... (' + secsIn.toString() + '/' + secsTot.toString());
+							$mark.html('Loading... (' + secsDiff.toString() + ')');
+							if (tourStep.condition_met) {
+								$mark.hide();
+								clearInterval(tourStep.condition_timer);
+								tourStep.condition_timer = null;
+							}
+						}, smallTimeout);
+					}
+					
+					return this.condition_setup;
+				};
+				
+				tourStep.setup = function(tour, options) {
+					var view = options.view;
+					
+					if (this.ngg_view != null)
+						view = this.ngg_view;
+					
+					if (view != null) {
+					  view.currentWizard = tour.ngg_wizard_id;
+					  view.currentStep = this.ngg_step_id;
+					  view.reset();
+					  view.bind('done', this.onDone);
+					  view.enable();
+					}
+			  };
+			  
+				tourStep.teardown = function(tour, options) {
+					var view = options.view;
+					
+					if (this.ngg_view != null)
+						view = this.ngg_view;
+						
+					if (view != null) {
+					  view.disable();
+					  view.unbind('done', this.onDone);
+					}
+			  };
+				
+				tourSteps.push(tourStep);
+			}
+			
+			var tourOpts = {
+				steps: tourSteps,
+				tipClass: 'Bootstrap',
+				tipOptions: { showEffect: 'slidein' },
+				stepOptions: { }
+			};
+			
+			if (tourView != null)
+				tourOpts.stepOptions.view = tourView;
+
+			var tour = new Tourist.Tour(tourOpts);
+			tour.ngg_wizard_id = wizard.id;
+			tour.ngg_wizard = wizard;
+			
+			while (skipSteps > 0) {
+				tour.next();
+				skipSteps--;
+			}
+			
+			return { result: "ok", tour: tour };
+		},
+		
+		enqueueRefreshOperation : function () {
+			if (this.refreshTimer != null) {
+				clearTimeout(this.refreshTimer);
+				this.refreshTimer = null;
+			}
+			
+			this.refreshTimer = setTimeout(function (manager) { NextGEN_Wizard_Manager.refreshQueue(); }, 500);
+		},
+		
+		refreshQueue : function () {
+			this.refreshTimer = null;
+		
+			var waitCount = 0;
+
+			for (var i = 0; i < this.wizards.length; i++) {
+				var wizard = this.wizards[i];
+				
+				if (wizard.status == "wait") {
+					var result = this.generateTour(wizard);
+					
+					if (result.result == "ok") {
+						wizard.status = "ready";
+						wizard.tour = result.tour;
+					}
+					else if (result.result == "wait_element") {
+						wizard.status = "wait";
+						waitCount++;
+					}
+				}
+			}
+			
+			if (waitCount > 0)
+				this.enqueueRefreshOperation();
+			else
+				this.trigger('ready');
+		},
+		
+		start : function () {
+			if (this.runningWizard != null) {
+				this.runningWizard.start();
+			}
+			else
+				this.showStarter();
+		},
+		
+		showStarter : function () {
+			// XXX starter disabled for now
+			return;
+			this.starter.fadeIn();
+		},
+		
+		startQueue : function () {
+			if (this.starter != null) {
+				var self = this;
+				this.starter.fadeOut(function () {
+					self.nextTour();
+				});
+			}
+			else
+				this.nextTour();
+		},
+		
+		nextTour : function () {
+			var index = 0;
+			
+			for (var i = 0; i < this.wizards.length; i++) {
+				var wizard = this.wizards[i];
+				
+				if (wizard.status == "ready" && wizard.tour != null) {
+					index = i;
+					break;
+				}
+			}
+			
+			if (index < this.wizards.length) {
+				var wizard = this.wizards[index];
+				wizard.tour.start();
+			}
+		},
+		
+		updateWizardState : function (wizard) {
+			
+		}
+	};
+
+	manager.init();
+	
+	window.NextGEN_Wizard_Manager = manager;
+}
+
+
+jQuery(function($){
+	if (typeof(NextGEN_Wizard_Manager) !== 'undefined') {
+		NextGEN_Wizard_Manager.bind('ready', function () {
+			NextGEN_Wizard_Manager.start();
+		});
+		
+		NextGEN_Wizard_Manager.generateQueue($);
+	}
+});
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..0bb87fd6a265d2b947bebd8959380ec5765f5c4b
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.min.css
@@ -0,0 +1 @@
+.ngg-wizard-starter{width:250px}.ngg-wizard-starter .starter-wrap-top{width:180px;margin:0 auto}.ngg-wizard-starter .starter-wrap-icon{background:#fff;border-radius:50%;border:2px solid #ccc;border-top-width:4px;padding:1.2em;cursor:pointer}.ngg-wizard-starter img.starter-icon{max-width:100%;z-index:10000}.ngg-wizard-starter .starter-wrap-bottom{background:#fff;border-radius:1em;border:2px solid #ccc;border-top-width:1px;padding:.8em;text-align:center;line-height:1.5em;position:relative;margin-top:-2.2em;cursor:pointer}#ngg-wizard-starter{position:fixed;bottom:0;left:10%}.ngg-wizard-anchor{background:0 0;width:50px;height:50px}#ngg-wizard-anchor{position:fixed;top:50%;left:50%;margin-left:-25px;margin-top:-25px}.tourist-popover .arrow,.tourist-popover .arrow:after{margin-left:0;bottom:auto;overflow:visible}.tourist-popover{z-index:100100!important}.tourist-popover .arrow:after{background-color:transparent;box-shadow:none;left:auto;top:auto;transform:none}.tourist-popover .ngg-wizard-text{margin:1em 1.4em 1em 1.1em}.tourist-popover .ngg-wizard-loading{text-align:center;margin:5px 0 0;clear:both;font-style:italic}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d93cb91d8a082d50906f1d3d66cd75cba7a1b58
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_wizards.min.js
@@ -0,0 +1 @@
+function NextGEN_Wizard(t,e){this.id=t,this.manager=e,this.data={},this.steps=[],this.status=null,this.tour=null,this.created=Math.floor(Date.now()/1e3)}if("undefined"==typeof NextGEN_Wizard_Manager){NextGEN_Wizard.prototype.start=function(){null!=this.tour&&this.tour.start()},NextGEN_Wizard.prototype.getNextStep=function(t){for(var e=0;e<this.steps.length;e++){var i=this.steps[e];if(i.id==t)break}return e++,e<this.steps.length?this.steps[e]:null},NextGEN_Wizard.prototype.setState=function(t){};var manager={state:[],wizards:[],runningWizard:null,views:[],starter:null,anchor:null,events:{},targetWatchers:{},refreshTimer:null,nggEvents:[],init:function(){function t(t){this.itemSelector=".view-item",this.currentWizard=null,this.currentStep=null,this.doneFlag=!1,this.init=function(){},this.disable=function(){t.addClass("ngg-wizard-disabled")},this.enable=function(){t.removeClass("ngg-wizard-disabled")},this.reset=function(){t.removeClass("ngg-wizard-has-selection"),t.find(this.itemSelector).removeClass("ngg-wizard-selected")},this.done=function(t){this.doneFlag||(this.doneFlag=!0,this.trigger("done",this,t))}}function e(e){t.call(this,e);var i=this;jQuery(e.get(0).ownerDocument).on("click",e.selector,function(t){i.done(e)})}function i(e){t.call(this,e);var i=this;e.click(function(t){(!e.is("a")||e.attr("href").startsWith("#")||e.hasClass("thickbox"))&&i.done(e)}),this.reset=function(){if(e.is("a")){var t=e.attr("href");t.startsWith("#")||(t+=t.indexOf("?")==-1?"?":"&",t=t+"ngg_wizard="+this.currentWizard+"&ngg_wizard_step="+this.currentStep,e.attr("href",t))}}}function n(e){t.call(this,e);var i=this;e.on("input",function(t){jQuery(this).val().length>=3&&i.done(e)}),this.reset=function(){}}function r(e){t.call(this,e);var i=this;jQuery(e.get(0).ownerDocument).on("change",e.selector,function(t){jQuery(this).is(":checked")&&i.done(e)}),this.reset=function(){}}function o(e){t.call(this,e);var i=this;e.on("change",function(t){i.done(e)})}"undefined"!=typeof NextGEN_Wizard_Manager_State&&(this.state=NextGEN_Wizard_Manager_State);var a=this;jQuery(window.top.document).find("body").on("nextgen_event",function(t,e){a.nggEvents.push({type:e})}),_.extend(t.prototype,Backbone.Events),_.extend(e.prototype,t.prototype),_.extend(i.prototype,t.prototype),_.extend(n.prototype,t.prototype),_.extend(r.prototype,t.prototype),_.extend(o.prototype,t.prototype);var s=null;s={handler:o,name:"SelectView",selector:"select"},this.views.push(s),s={handler:r,name:"RadioView",selector:"input[type='radio']"},this.views.push(s),s={handler:n,name:"TextView",selector:"input[type='text']"},this.views.push(s),s={handler:i,name:"ButtonView",selector:"a, input[type='button'], input[type='submit']"},this.views.push(s),s={handler:e,name:"GenericView",selector:"*"},this.views.push(s),Tourist.Tip.Base.prototype.nextButtonTemplate='<a class="button-primary pull-right tour-next">Next step →</a>',Tourist.Tip.Base.prototype.finalButtonTemplate='<button class="button-primary pull-right tour-next">Finish up</button>',Tourist.Tip.Base.prototype.closeButtonTemplate='<a class="btn btn-close tour-close" href="#"><i class="icon icon-remove fa fa-close"></i></a>',Tourist.Tip.BootstrapTip.prototype._getTargetBounds=function(t){var e,i;e=t[0],i="function"==typeof e.getBoundingClientRect?e.getBoundingClientRect():{width:e.offsetWidth,height:e.offsetHeight};var n=t.offset();if(t.ownerDocument!=document)for(var r=function(t,e){for(var i=t.find("iframe"),n=[],o=0;o<i.size();o++){var a=jQuery(i.get(o));try{if(a.prop("contentWindow").document==e)return[a]}catch(t){continue}var s=r(a.contents(),e);if(s.length>0){n.push(a);for(var u=0;u<s.length;u++)n.push(s[u]);break}}return n},o=r(jQuery(document),t.get(0).ownerDocument),a=0;a<o.length;a++){var s=o[a],u=s.offset();n.left+=u.left,n.top+=u.top}return jQuery.extend({},i,n)},jQuery(".ngg-wizard-invoker").on("click",function(t){t.preventDefault();for(var e=NextGEN_Wizard_Manager,i=jQuery(this).data("ngg-wizard"),n=null,r=0;r<e.wizards.length;r++){var o=e.wizards[r];if(o.id==i){n=o;break}}return null!=n&&null==this.runningWizard&&n.start(),!1})},bind:function(t,e){t in this.events||(this.events[t]=[]);var i={handler:e};this.events[t].push(i)},trigger:function(t,e){if("undefined"==typeof e&&(e={}),t in this.events)for(var i=this.events[t],n=0;n<i.length;n++){var r=i[n];r.handler&&r.handler(this,e)}},didNextgenEventFire:function(t){for(var e=0;e<this.nggEvents.length;e++){var i=this.nggEvents[e];if(i.type==t)return!0}return!1},getViewForSelector:function(t,e){var i=null;"undefined"==typeof e&&(e=!0);for(var n=0;n<this.views.length;n++){var r=this.views[n];if(t.is(r.selector)){i=r.handler;break}}if(null!=i){var r=new i(t);return e&&r.init(),r}return null},getViewFor:function(t,e,i){var n=this.getViewForSelector(t,!1);return null!=n&&(n.currentWizard=e,n.currentStep=i,n.init()),n},generateQueue:function(t){var e=this,i=this.state,n=i.wizard_list.length,r=i.starter,o=i.running_wizard;if(n>0){var a=t('<div id="ngg-wizard-starter" class="ngg-wizard-starter"></div>');a.append('<div class="starter-wrap-top"><div class="starter-wrap-icon"><img class="starter-icon" src="'+r.image+'" /></div></div>'),a.append('<div class="starter-wrap-bottom"><div class="starter-wrap-text">'+r.text+"</div></div>"),a.on("click",".starter-wrap-icon, starter-wrap-bottom",function(){e.startQueue()}),a.hide(),a.appendTo("body"),this.starter=a;var s=t('<div id="ngg-wizard-anchor" class="ngg-wizard-anchor"></div>');s.appendTo("body"),this.anchor=s;for(var u=0,l=0;l<n;l++){var d=i.wizard_list[l],h=new NextGEN_Wizard(d.id,this);h.data=d,h.steps=d.steps;var c=this.generateTour(h);"ok"==c.result?(h.status="ready",h.tour=c.tour):"wait_element"==c.result&&(h.status="wait",u++),h.id==o?(this.wizards.unshift(h),this.runningWizard=h):this.wizards.push(h)}u>0?this.enqueueRefreshOperation():this.trigger("ready")}},getContextObject:function(t){var e=null;if(null!=t){"object"!=typeof t&&(t=[t]);for(var i=0;i<t.length;i++){var n=t[i];if(e=null==e?jQuery(n):e.find(n),e.is("iframe")){var r=e.prop("contentWindow");if("interactive"!=r.document.readyState&&"complete"!=r.document.readyState){e=jQuery([]);break}e=r.jQuery?r.jQuery("body"):e.contents().find("body")}}0==e.size()&&(e=jQuery([]))}else e=jQuery(document);return e},computeStepTarget:function(t,e,i){var n=e.target_wait,r=e.target,o=e.view,a=null,s=null,u=null,l=this.getContextObject(e.context),d=!1;if(null!=r){if(a=l.find(r),a.size()>0?d=!0:a=this.anchor,!d&&null!=n&&Math.floor(Date.now()/1e3)-t.created<=n)return!1}else a=this.anchor;return null!=o&&(s=l.find(o),s.size()>0&&(u=this.getViewFor(s,t.id,e.id))),i.highlightTarget=d,i.nextButton=!d,i.target=a,i.ngg_view=u,!0},scrollIntoView:function(t){},generateTour:function(t){if(null==t.tour){var e=t.data,i=e.steps,n=e.current_step,r=0,o=[],a=null;if(null!=e.view&&(a=this.getViewFor(jQuery(e.view),t.id),null==a))return{result:"wait_element",element:e.view};for(var s=0;s<i.length;s++){var u=i[s];null!=n&&n==u.id&&(r=s);var l={ngg_step_id:u.id,ngg_step_data:u,viewport:jQuery(window),closeButton:!0,content:'<div class="ngg-wizard-text">'+u.text+"</div>",my:u.popup_anchor,at:u.target_anchor,bind:["onDone"],onDone:function(t,e,i,n){var r=t.ngg_wizard,o=this.ngg_step_data,a=!0;if(null!=o.condition&&(this.condition_met||(a=!1,this.condition_setup||this.setupCondition(t,e))),a&&null!=r){var s=r.getNextStep(this.ngg_step_id);if(null!=s&&s.lazy){a=!1;for(var u=null,l=0;l<t.options.steps.length;l++){var d=t.options.steps[l];if(d.ngg_step_id==s.id){u=d;break}}null!=u&&(null==u.target||0==u.target.size()||"ngg-wizard-anchor"==u.target.attr("id")?(a=r.manager.computeStepTarget(r,s,u),!a||null!=u.target&&0!=u.target.size()&&"ngg-wizard-anchor"!=u.target.attr("id")||(a=!1)):a=!0)}}if(a)t.next();else{null!=this.lazyTimeout&&(clearTimeout(this.lazyTimeout),this.lazyTimeout=null);var h=this;this.lazyTimeout=setTimeout(function(){h.lazyTimeout=null,h.onDone(t,e,i,n)},500)}}},d=this.computeStepTarget(t,u,l);if(!d)return{result:"wait_element",element:u.target};l.setupCondition=function(t,e){var i=t.ngg_wizard,n=this.ngg_step_data;if(!this.condition_setup&&null!=n.condition){var r=n.condition,o=r.type,a=r.value,s=r.context,u=r.timeout;this.condition_met=!1,this.condition_setup=!1,s&&"object"!=typeof s&&(s=[s]);var l=jQuery([]),d=null;if(s){s=s.slice(0);var h=s.pop();l=i.manager.getContextObject(s).find(h)}if(l.size()>0){var c=l.get(0).ownerDocument;d=c.defaultView||c.parentWindow}switch(o){case"frame_event":if(window.Frame_Event_Publisher){this.condition_setup=!0;var g=this;Frame_Event_Publisher.listen_for(a,function(){g.condition_met=!0})}break;case"event_bind":case"plupload_bind":var p=l.size()>0;if("plupload_bind"==o&&("undefined"!=typeof l.pluploadQueue?l=l.pluploadQueue():p=!1),p){this.condition_setup=!0;var g=this;l.bind(a,function(){g.condition_met=!0})}break;case"nextgen_event":if(this.condition_setup=!0,i.manager.didNextgenEventFire(a))this.condition_met=!0;else{var g=this;jQuery(window.top.document).find("body").bind("nextgen_event",function(t,e){e==a&&(g.condition_met=!0)})}break;case"wait":this.condition_setup=!0;var g=this;setTimeout(function(){g.condition_met=!0},a)}}var f=jQuery(".tourist-popover .ngg-wizard-text"),v=f.find(".ngg-wizard-loading");if(v.hide(),this.condition_setup&&!this.condition_met&&u>0){this.condition_timeout=0,0==v.length&&(v=jQuery('<div class="ngg-wizard-loading"></div>'),f.append(v)),v.html("Loading... ("+Math.ceil(u/1e3).toString()+")"),v.show();var w=1e3,g=this;g.condition_timer=setInterval(function(){g.condition_timeout+=w,g.condition_timeout>=u&&(g.condition_met=!0);var t=(Math.floor(g.condition_timeout/1e3),Math.ceil(u/1e3),Math.floor((u-g.condition_timeout)/1e3));v.html("Loading... ("+t.toString()+")"),g.condition_met&&(v.hide(),clearInterval(g.condition_timer),g.condition_timer=null)},w)}return this.condition_setup},l.setup=function(t,e){var i=e.view;null!=this.ngg_view&&(i=this.ngg_view),null!=i&&(i.currentWizard=t.ngg_wizard_id,i.currentStep=this.ngg_step_id,i.reset(),i.bind("done",this.onDone),i.enable())},l.teardown=function(t,e){var i=e.view;null!=this.ngg_view&&(i=this.ngg_view),null!=i&&(i.disable(),i.unbind("done",this.onDone))},o.push(l)}var h={steps:o,tipClass:"Bootstrap",tipOptions:{showEffect:"slidein"},stepOptions:{}};null!=a&&(h.stepOptions.view=a);var c=new Tourist.Tour(h);for(c.ngg_wizard_id=t.id,c.ngg_wizard=t;r>0;)c.next(),r--;return{result:"ok",tour:c}}},enqueueRefreshOperation:function(){null!=this.refreshTimer&&(clearTimeout(this.refreshTimer),this.refreshTimer=null),this.refreshTimer=setTimeout(function(t){NextGEN_Wizard_Manager.refreshQueue()},500)},refreshQueue:function(){this.refreshTimer=null;for(var t=0,e=0;e<this.wizards.length;e++){var i=this.wizards[e];if("wait"==i.status){var n=this.generateTour(i);"ok"==n.result?(i.status="ready",i.tour=n.tour):"wait_element"==n.result&&(i.status="wait",t++)}}t>0?this.enqueueRefreshOperation():this.trigger("ready")},start:function(){null!=this.runningWizard?this.runningWizard.start():this.showStarter()},showStarter:function(){},startQueue:function(){if(null!=this.starter){var t=this;this.starter.fadeOut(function(){t.nextTour()})}else this.nextTour()},nextTour:function(){for(var t=0,e=0;e<this.wizards.length;e++){var i=this.wizards[e];if("ready"==i.status&&null!=i.tour){t=e;break}}if(t<this.wizards.length){var i=this.wizards[t];i.tour.start()}},updateWizardState:function(t){}};manager.init(),window.NextGEN_Wizard_Manager=manager}jQuery(function(t){"undefined"!=typeof NextGEN_Wizard_Manager&&(NextGEN_Wizard_Manager.bind("ready",function(){NextGEN_Wizard_Manager.start()}),NextGEN_Wizard_Manager.generateQueue(t))});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.css
index 6386ae1135189c6de312c35b4167aa82691c94b6..263241ba33c2843de0af9671d1003422e332c509 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.css
@@ -1 +1 @@
-.ngg_progressbar{width:100%;background:#292929;border:1px solid #111;border-radius:5px;overflow:hidden;box-shadow:0 0 5px #333;height:25px}.ngg_progressbar div{width:0;text-align:right;color:white;background-image:url('animation.gif');border:solid 1px darkolivegreen;overflow:hidden;border-radius:5px;height:100%;font-size:12px;padding-top:3px;font-family:Helvetica,Arial}.ngg_progressbar.infinite div{width:100%;text-align:center}
\ No newline at end of file
+.ngg_progressbar{width:100%;background:#292929;border:1px solid #111;border-radius:5px;overflow:hidden;box-shadow:0 0 5px #333;height:25px}.ngg_progressbar div{width:0;text-align:right;color:#fff;background-image:url(animation.gif);border:1px solid #556b2f;overflow:hidden;border-radius:5px;height:100%;font-size:12px;padding-top:3px;font-family:Helvetica,Arial}.ngg_progressbar.infinite div{width:100%;text-align:center}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.js
index 8508887d68848fdb29f16e6dc116f150d6bfded8..6af5bbe1dcbc689d3e952107f9806d840de2e577 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/ngg_progressbar.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2($){$.z=2(4){c g={s:{q:0,j:G,D:\'N L...\',I:\'J!\'},B:2(4){1.4=$.K(1.s,4);1.b=1.n(l).M({g:1,H:O,r:1.4.r,6:"<a F=\'i\'><a></a></a>",});1.v(l);8(1.4.j){1.5.w(\'.i\').E(\'j\')}1.A(1.4.q)},A:2(3,6){8(13(3)){6=3;3=Z}3=3+"%";8(o(6)==\'m\')6=3;1.x.Y({10:3}).6(6)},11:2(e){8(o(e)==\'m\')e=12;c f=1.n(l);c b=1.b;14(2(){f.X(b)},e)},h:2(9){c 7=9;W{R(7.t!==7.u.t)7=7.u}P(C){8(o(y)!="m")y.Q(C)}d 7},n:2(9){d 1.h(9).k.f},v:2(9){c p=\'#f-S-\'+1.b;1.5=$(p);8(1.5.T==0){1.5=1.h(9).k(p)}1.x=1.5.w(\'.i:V a\');1.5.U(\'z\',1);d 1.5}};g.B(4);d g}})(k);',62,67,'|this|function|percent|options|gritter_el|text|retval|if|win|div|gritter_id|var|return|delay|gritter|progressBar|find_parent|ngg_progressbar|infinite|jQuery|window|undefined|find_gritter|typeof|selector|starting_value|title|defaults|document|parent|find_gritter_el|find|status_el|console|nggProgressBar|set|init|ex|in_progress_text|addClass|class|false|sticky|finished_text|Done|extend|progress|add|In|true|catch|log|while|item|length|data|first|try|remove|animate|100|width|close|1000|isNaN|setTimeout'.split('|'),0,{}))
+!function(t){t.nggProgressBar=function(i){var e={defaults:{starting_value:0,infinite:!1,in_progress_text:"In progress...",finished_text:"Done!"},init:function(i){this.options=t.extend(this.defaults,i),this.gritter_id=this.find_gritter(window).add({progressBar:this,sticky:!0,title:this.options.title,text:"<div class='ngg_progressbar'><div></div></div>"}),this.find_gritter_el(window),this.options.infinite&&this.gritter_el.find(".ngg_progressbar").addClass("infinite"),this.set(this.options.starting_value)},set:function(t,i){isNaN(t)&&(i=t,t=100),t+="%","undefined"==typeof i&&(i=t),this.status_el.animate({width:t}).text(i)},close:function(t){"undefined"==typeof t&&(t=1e3);var i=this.find_gritter(window),e=this.gritter_id;setTimeout(function(){i.remove(e)},t)},find_parent:function(t){var i=t;try{for(;i.document!==i.parent.document;)i=i.parent}catch(t){"undefined"!=typeof console&&console.log(t)}return i},find_gritter:function(t){return this.find_parent(t).jQuery.gritter},find_gritter_el:function(i){var e="#gritter-item-"+this.gritter_id;return this.gritter_el=t(e),0==this.gritter_el.length&&(this.gritter_el=this.find_parent(i).jQuery(e)),this.status_el=this.gritter_el.find(".ngg_progressbar:first div"),this.gritter_el.data("nggProgressBar",this),this.gritter_el}};return e.init(i),e}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.min.css
index d118e5c09e65a785f938fb4aeb06ce4be9b5e6af..610d8668af2619a42ab68119a981dc947fc201aa 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.min.css
@@ -1 +1 @@
-.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#eeeeee',GradientType=0);background-image:linear-gradient(to top,#eee 0,#fff 50%)}html[dir="rtl"] .select2-container .select2-choice{padding:0 8px 0 0}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#eeeeee',GradientType=0);background-image:linear-gradient(to bottom,#eee 0,#fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir="rtl"] .select2-container .select2-choice>.select2-chosen{margin-left:26px;margin-right:0}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url('select2.png') right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop-active{border:1px solid #5897fb;border-top:0}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background-clip:padding-box;background:#ccc;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(0.6,#eee));background-image:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%);background-image:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#cccccc',GradientType=0);background-image:linear-gradient(to top,#ccc 0,#eee 60%)}html[dir="rtl"] .select2-container .select2-choice .select2-arrow{left:0;right:auto;border-left:0;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url('select2.png') no-repeat 0 1px}html[dir="rtl"] .select2-container .select2-choice .select2-arrow b{background-position:2px 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto !important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:#fff url('select2.png') no-repeat 100% -22px;background:url('select2.png') no-repeat 100% -22px,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url('select2.png') no-repeat 100% -22px,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url('select2.png') no-repeat 100% -22px,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url('select2.png') no-repeat 100% -22px,linear-gradient(to bottom,#fff 85%,#eee 99%) 0 0}html[dir="rtl"] .select2-search input{padding:4px 5px 4px 20px;background:#fff url('select2.png') no-repeat -37px -22px;background:url('select2.png') no-repeat -37px -22px,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url('select2.png') no-repeat -37px -22px,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url('select2.png') no-repeat -37px -22px,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url('select2.png') no-repeat -37px -22px,linear-gradient(to bottom,#fff 85%,#eee 99%) 0 0}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url('select2-spinner.gif') no-repeat 100%;background:url('select2-spinner.gif') no-repeat 100%,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url('select2-spinner.gif') no-repeat 100%,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url('select2-spinner.gif') no-repeat 100%,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url('select2-spinner.gif') no-repeat 100%,linear-gradient(to bottom,#fff 85%,#eee 99%) 0 0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#ffffff',GradientType=0);background-image:linear-gradient(to top,#fff 0,#eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center top,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#ffffff',GradientType=0);background-image:linear-gradient(to bottom,#fff 0,#eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:transparent;border-left:0;filter:none}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow{border-right:0}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b{background-position:-16px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:rgba(0,0,0,0)}html[dir="rtl"] .select2-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:bold}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results-dept-1 .select2-result-label{padding-left:20px}.select2-results-dept-2 .select2-result-label{padding-left:40px}.select2-results-dept-3 .select2-result-label{padding-left:60px}.select2-results-dept-4 .select2-result-label{padding-left:80px}.select2-results-dept-5 .select2-result-label{padding-left:100px}.select2-results-dept-6 .select2-result-label{padding-left:110px}.select2-results-dept-7 .select2-result-label{padding-left:120px}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:transparent}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-ajax-error,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url('select2-spinner.gif') no-repeat 100%}.select2-results .select2-ajax-error{background:rgba(255,50,50,.2)}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto !important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(top,#eee 1%,#fff 15%);background-image:-moz-linear-gradient(top,#eee 1%,#fff 15%);background-image:linear-gradient(to bottom,#eee 1%,#fff 15%)}html[dir="rtl"] .select2-container-multi .select2-choices{padding:0 0 0 5px}.select2-locked{padding:3px 5px 3px 5px !important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir="rtl"] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:transparent !important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url('select2-spinner.gif') no-repeat 100% !important}.select2-default{color:#999 !important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#f4f4f4',GradientType=0);background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(to bottom,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%)}html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:0;background:url('select2.png') right top no-repeat}html[dir="rtl"] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-search-choice-close{left:3px}html[dir="rtl"] .select2-container-multi .select2-search-choice-close{left:auto;right:2px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px 3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;position:absolute !important;outline:0 !important;left:0 !important;top:0 !important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select2-search input,.select2-search-choice-close,.select2-container .select2-choice abbr,.select2-container .select2-choice .select2-arrow b{background-image:url('select2x2.png') !important;background-repeat:no-repeat !important;background-size:60px 40px !important}.select2-search input{background-position:100% -21px !important}}
\ No newline at end of file
+.select2-container .select2-choice,.select2-results .select2-result-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to top,#eee 0,#fff 50%)}html[dir=rtl] .select2-container .select2-choice{padding:0 8px 0 0}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom,#eee 0,#fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir=rtl] .select2-container .select2-choice>.select2-chosen{margin-left:26px;margin-right:0}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(select2.png) right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop-active{border:1px solid #5897fb;border-top:none}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background:#ccc;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(.6,#eee));background-image:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%);background-image:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background-image:linear-gradient(to top,#ccc 0,#eee 60%)}.select2-dropdown-open .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0)}html[dir=rtl] .select2-container .select2-choice .select2-arrow{left:0;right:auto;border-left:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url(select2.png) 0 1px no-repeat}html[dir=rtl] .select2-container .select2-choice .select2-arrow b{background-position:2px 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto!important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:url(select2.png) 100% -22px no-repeat #fff;background:url(select2.png) 100% -22px no-repeat,-webkit-gradient(linear,left bottom,left top,color-stop(.85,#fff),color-stop(.99,#eee));background:url(select2.png) 100% -22px no-repeat,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) 100% -22px no-repeat,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) 100% -22px no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}html[dir=rtl] .select2-search input{padding:4px 5px 4px 20px;background:url(select2.png) -37px -22px no-repeat #fff;background:url(select2.png) -37px -22px no-repeat,-webkit-gradient(linear,left bottom,left top,color-stop(.85,#fff),color-stop(.99,#eee));background:url(select2.png) -37px -22px no-repeat,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) -37px -22px no-repeat,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) -37px -22px no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:url(select2-spinner.gif) 100% no-repeat #fff;background:url(select2-spinner.gif) 100% no-repeat,-webkit-gradient(linear,left bottom,left top,color-stop(.85,#fff),color-stop(.99,#eee));background:url(select2-spinner.gif) 100% no-repeat,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) 100% no-repeat,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) 100% no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:linear-gradient(to top,#fff 0,#eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(.5,#eee));background-image:-webkit-linear-gradient(center top,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:0 0;border-left:none;filter:none}html[dir=rtl] .select2-dropdown-open .select2-choice .select2-arrow{border-right:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}html[dir=rtl] .select2-dropdown-open .select2-choice .select2-arrow b{background-position:-16px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:transparent}html[dir=rtl] .select2-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;user-select:none}.select2-results-dept-1 .select2-result-label{padding-left:20px}.select2-results-dept-2 .select2-result-label{padding-left:40px}.select2-results-dept-3 .select2-result-label{padding-left:60px}.select2-results-dept-4 .select2-result-label{padding-left:80px}.select2-results-dept-5 .select2-result-label{padding-left:100px}.select2-results-dept-6 .select2-result-label{padding-left:110px}.select2-results-dept-7 .select2-result-label{padding-left:120px}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:0 0}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-ajax-error,.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:url(select2-spinner.gif) 100% no-repeat #f4f4f4}.select2-results .select2-ajax-error{background:rgba(255,50,50,.2)}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto!important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(top,#eee 1%,#fff 15%);background-image:-moz-linear-gradient(top,#eee 1%,#fff 15%);background-image:linear-gradient(to bottom,#eee 1%,#fff 15%);min-height:26px}html[dir=rtl] .select2-container-multi .select2-choices{padding:0 0 0 5px}.select2-locked{padding:3px 5px!important}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir=rtl] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:0 0!important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:url(select2-spinner.gif) 100% no-repeat #fff!important}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(to bottom,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%)}html[dir=rtl] .select2-container-multi .select2-choices .select2-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:0;background:url(select2.png) right top no-repeat}html[dir=rtl] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-search-choice-close{left:3px}html[dir=rtl] .select2-container-multi .select2-search-choice-close{left:auto;right:2px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover,.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:0 0}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice abbr,.select2-search input,.select2-search-choice-close{background-image:url(select2x2.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-search input{background-position:100% -21px!important}}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.modded.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.modded.min.js
index 3e5adad15feaea34b4fcbc6a66af6defb4d60261..18c62dcb11df86a7583a2d0a5fba06f94dcfad9e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.modded.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/select2/select2.modded.min.js
@@ -1 +1,2 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(5($){if(3i $.fn.2D=="1h"){$.3a($.fn,{2D:5(c){14 j=$([0]),i=-1,l=3.1d;6N(++i<l&&(j.21=j[0]=3[i])&&c.1Z(j[0],i,j)!==1e);11 3}})}})(8F);(5($,1h){"9I g1";if(1J.4m!==1h){11}14 5C,7R,79,4A,3F,6s={x:0,y:0},$1X,68,1m={5h:9,3u:13,5m:27,fd:32,5o:37,4t:38,5Y:39,5j:40,aL:16,9Q:17,9N:18,82:33,86:34,fE:36,gY:35,4D:8,6i:46,gU:5(k){k=k.1x?k.1x:k;6k(k){2d 1m.5o:2d 1m.5Y:2d 1m.4t:2d 1m.5j:11 1l}11 1e},7W:5(e){14 k=e.1x;6k(k){2d 1m.aL:2d 1m.9Q:2d 1m.9N:11 1l}if(e.7Y)11 1l;11 1e},84:5(k){k=k.1x?k.1x:k;11 k>=gP&&k<=gQ}},8K="<1U 1t=\'6-gS-gR\'></1U>",8L={"\\h1":"A","\\h2":"A","\\he":"A","\\hh":"A","\\ha":"A","\\h9":"A","\\h6":"A","\\h8":"A","\\h7":"A","\\gM":"A","\\gL":"A","\\gp":"A","\\go":"A","\\gr":"A","\\gn":"A","\\gg":"A","\\gj":"A","\\gv":"A","\\gw":"A","\\gI":"A","\\gD":"A","\\gy":"A","\\gx":"A","\\gz":"A","\\gA":"A","\\gB":"A","\\gC":"A","\\gE":"A","\\gJ":"A","\\gK":"A","\\gH":"A","\\gF":"A","\\gG":"A","\\gk":"gl","\\gi":"8h","\\gf":"8h","\\gh":"8h","\\gm":"gs","\\gu":"gq","\\h5":"9F","\\h3":"9F","\\h4":"hg","\\hf":"B","\\hc":"B","\\hd":"B","\\gN":"B","\\gO":"B","\\gT":"B","\\gZ":"B","\\h0":"B","\\gX":"C","\\gV":"C","\\gW":"C","\\ge":"C","\\gd":"C","\\fx":"C","\\fy":"C","\\fw":"C","\\fv":"C","\\ft":"C","\\fu":"C","\\fz":"D","\\fA":"D","\\fF":"D","\\fG":"D","\\fD":"D","\\fB":"D","\\fC":"D","\\fs":"D","\\fr":"D","\\fg":"D","\\fh":"D","\\ff":"D","\\fe":"D","\\fb":"8M","\\fc":"8M","\\fi":"96","\\fp":"96","\\fq":"E","\\fo":"E","\\fm":"E","\\fk":"E","\\fl":"E","\\fH":"E","\\fI":"E","\\g3":"E","\\g4":"E","\\g2":"E","\\fZ":"E","\\g0":"E","\\g5":"E","\\g6":"E","\\gb":"E","\\gc":"E","\\ga":"E","\\g9":"E","\\g7":"E","\\g8":"E","\\fY":"E","\\fX":"E","\\fN":"E","\\fa":"E","\\fO":"E","\\fM":"E","\\fL":"E","\\fJ":"E","\\fK":"E","\\fP":"F","\\fQ":"F","\\fV":"F","\\fW":"F","\\fU":"F","\\fT":"G","\\fR":"G","\\fS":"G","\\hi":"G","\\hj":"G","\\iO":"G","\\iP":"G","\\iN":"G","\\iM":"G","\\iK":"G","\\iL":"G","\\iQ":"G","\\iR":"G","\\iW":"G","\\iX":"H","\\iV":"H","\\iU":"H","\\iS":"H","\\iT":"H","\\iJ":"H","\\iI":"H","\\iy":"H","\\iz":"H","\\ix":"H","\\iw":"H","\\ir":"H","\\iu":"H","\\iv":"I","\\iA":"I","\\iB":"I","\\iG":"I","\\iH":"I","\\iF":"I","\\iE":"I","\\iC":"I","\\iD":"I","\\iY":"I","\\iZ":"I","\\jk":"I","\\jl":"I","\\jj":"I","\\ji":"I","\\jg":"I","\\jh":"I","\\jm":"I","\\jn":"I","\\js":"J","\\jt":"J","\\jr":"J","\\jq":"J","\\jo":"K","\\jp":"K","\\jf":"K","\\je":"K","\\j4":"K","\\j5":"K","\\j3":"K","\\j2":"K","\\j0":"K","\\j1":"K","\\j6":"K","\\j7":"K","\\jc":"K","\\jd":"L","\\jb":"L","\\ja":"L","\\j8":"L","\\j9":"L","\\iq":"L","\\ip":"L","\\hG":"L","\\hH":"L","\\hF":"L","\\hE":"L","\\hC":"L","\\hD":"L","\\hI":"L","\\hJ":"L","\\hO":"L","\\hP":"L","\\hN":"hM","\\hK":"hL","\\hB":"M","\\hA":"M","\\hp":"M","\\hq":"M","\\ho":"M","\\hn":"M","\\hk":"M","\\hl":"N","\\hm":"N","\\hr":"N","\\hs":"N","\\hy":"N","\\hz":"N","\\hx":"N","\\hw":"N","\\ht":"N","\\hu":"N","\\hQ":"N","\\hR":"N","\\ic":"N","\\ie":"N","\\ib":"N","\\ia":"i8","\\i9":"ig","\\ih":"O","\\im":"O","\\io":"O","\\il":"O","\\ik":"O","\\ii":"O","\\ij":"O","\\i7":"O","\\i6":"O","\\hW":"O","\\hX":"O","\\hV":"O","\\hU":"O","\\hS":"O","\\hT":"O","\\hY":"O","\\hZ":"O","\\i4":"O","\\i5":"O","\\i3":"O","\\i2":"O","\\i0":"O","\\i1":"O","\\ju":"O","\\dA":"O","\\bt":"O","\\bw":"O","\\bl":"O","\\bk":"O","\\bm":"O","\\bn":"O","\\bp":"O","\\bx":"O","\\bI":"O","\\bK":"O","\\bF":"O","\\bz":"O","\\bB":"O","\\bD":"O","\\aY":"O","\\aW":"O","\\aU":"O","\\b3":"b5","\\b4":"b9","\\cw":"cr","\\cM":"P","\\cE":"P","\\cG":"P","\\cF":"P","\\c1":"P","\\c0":"P","\\bV":"P","\\bO":"P","\\bN":"P","\\cd":"Q","\\cc":"Q","\\cb":"Q","\\c8":"Q","\\c9":"Q","\\c7":"R","\\c6":"R","\\c4":"R","\\c5":"R","\\ca":"R","\\cg":"R","\\ch":"R","\\cf":"R","\\ce":"R","\\c3":"R","\\c2":"R","\\bS":"R","\\bT":"R","\\bR":"R","\\bQ":"R","\\bP":"R","\\bU":"S","\\bZ":"S","\\bY":"S","\\bW":"S","\\bX":"S","\\ci":"S","\\cj":"S","\\cD":"S","\\cB":"S","\\cC":"S","\\cH":"S","\\cI":"S","\\cN":"S","\\cO":"S","\\cL":"S","\\cJ":"S","\\cK":"T","\\cA":"T","\\cz":"T","\\cp":"T","\\cq":"T","\\co":"T","\\cn":"T","\\ck":"T","\\cl":"T","\\cs":"T","\\cx":"T","\\cy":"T","\\bM":"T","\\cv":"T","\\ct":"cu","\\cP":"U","\\bA":"U","\\b7":"U","\\b6":"U","\\ba":"U","\\bb":"U","\\bg":"U","\\bf":"U","\\bc":"U","\\bd":"U","\\bi":"U","\\aZ":"U","\\aS":"U","\\aV":"U","\\aX":"U","\\b1":"U","\\b0":"U","\\b2":"U","\\aT":"U","\\bh":"U","\\bL":"U","\\bC":"U","\\bj":"U","\\bE":"U","\\bJ":"U","\\bH":"U","\\by":"U","\\bo":"U","\\bq":"U","\\br":"U","\\bs":"U","\\f9":"U","\\eq":"U","\\er":"V","\\ep":"V","\\es":"V","\\et":"V","\\eh":"V","\\eg":"V","\\e5":"V","\\e6":"e4","\\e3":"W","\\cQ":"W","\\e2":"W","\\ef":"W","\\eb":"W","\\f0":"W","\\eX":"W","\\eU":"W","\\f5":"W","\\f3":"X","\\f4":"X","\\eT":"X","\\eI":"X","\\eJ":"Y","\\eH":"Y","\\eF":"Y","\\eN":"Y","\\dZ":"Y","\\de":"Y","\\df":"Y","\\dd":"Y","\\dc":"Y","\\d9":"Y","\\da":"Y","\\dh":"Y","\\dm":"Y","\\dn":"Y","\\dl":"Z","\\dk":"Z","\\di":"Z","\\d8":"Z","\\d7":"Z","\\cX":"Z","\\cR":"Z","\\cS":"Z","\\cT":"Z","\\d5":"Z","\\d6":"Z","\\d4":"Z","\\d3":"Z","\\dM":"a","\\dL":"a","\\dT":"a","\\dG":"a","\\dB":"a","\\dC":"a","\\dD":"a","\\dE":"a","\\dF":"a","\\dy":"a","\\dx":"a","\\ds":"a","\\dr":"a","\\dq":"a","\\dt":"a","\\du":"a","\\dw":"a","\\dv":"a","\\dH":"a","\\dI":"a","\\dS":"a","\\dU":"a","\\dV":"a","\\dX":"a","\\dW":"a","\\dR":"a","\\dQ":"a","\\dK":"a","\\dJ":"a","\\dN":"a","\\dP":"a","\\dO":"a","\\dp":"a","\\do":"a","\\d2":"aa","\\d1":"ae","\\d0":"ae","\\cZ":"ae","\\cY":"ao","\\cU":"au","\\cV":"av","\\cW":"av","\\dj":"ay","\\dg":"b","\\db":"b","\\dY":"b","\\eM":"b","\\eO":"b","\\eP":"b","\\eR":"b","\\eQ":"b","\\eL":"c","\\eK":"c","\\eE":"c","\\eD":"c","\\eG":"c","\\eS":"c","\\f6":"c","\\f8":"c","\\f7":"c","\\f2":"c","\\f1":"c","\\eW":"c","\\eV":"d","\\eY":"d","\\eZ":"d","\\eC":"d","\\eB":"d","\\ea":"d","\\e9":"d","\\ec":"d","\\ed":"d","\\ee":"d","\\e8":"d","\\e7":"d","\\e1":"d","\\e0":"dz","\\ev":"dz","\\eu":"e","\\ew":"e","\\ey":"e","\\eA":"e","\\ez":"e","\\ek":"e","\\ej":"e","\\ei":"e","\\eo":"e","\\bu":"e","\\bv":"e","\\bG":"e","\\b8":"e","\\fj":"e","\\lq":"e","\\oX":"e","\\oY":"e","\\oW":"e","\\oV":"e","\\oT":"e","\\oU":"e","\\oZ":"e","\\p0":"e","\\p5":"e","\\p4":"e","\\p3":"e","\\p1":"e","\\p2":"e","\\oS":"e","\\oR":"e","\\oI":"f","\\oJ":"f","\\oH":"f","\\oG":"f","\\oE":"f","\\oF":"g","\\oK":"g","\\oL":"g","\\oQ":"g","\\oP":"g","\\oO":"g","\\oM":"g","\\oN":"g","\\p6":"g","\\p7":"g","\\ps":"g","\\pr":"g","\\pq":"g","\\po":"g","\\pp":"h","\\pu":"h","\\pv":"h","\\pB":"h","\\pA":"h","\\pz":"h","\\pw":"h","\\py":"h","\\pn":"h","\\pm":"h","\\pd":"h","\\pe":"h","\\pb":"h","\\pa":"h","\\p8":"hv","\\p9":"i","\\pf":"i","\\pg":"i","\\pl":"i","\\pk":"i","\\pj":"i","\\ph":"i","\\pi":"i","\\oD":"i","\\oC":"i","\\nU":"i","\\nV":"i","\\nT":"i","\\nS":"i","\\nQ":"i","\\nR":"i","\\nW":"i","\\nX":"i","\\o2":"i","\\o1":"j","\\o0":"j","\\nY":"j","\\nZ":"j","\\nP":"j","\\nO":"k","\\nF":"k","\\nG":"k","\\nE":"k","\\nD":"k","\\nB":"k","\\nC":"k","\\nH":"k","\\nI":"k","\\nN":"k","\\pD":"k","\\nM":"k","\\nL":"k","\\nJ":"l","\\nK":"l","\\o3":"l","\\o4":"l","\\ot":"l","\\os":"l","\\oq":"l","\\om":"l","\\op":"l","\\ov":"l","\\ow":"l","\\oB":"l","\\oA":"l","\\oz":"l","\\ox":"l","\\oy":"l","\\ol":"l","\\ok":"l","\\o9":"lj","\\oa":"m","\\o8":"m","\\o7":"m","\\o5":"m","\\o6":"m","\\ob":"m","\\oc":"m","\\oj":"n","\\oh":"n","\\og":"n","\\od":"n","\\oe":"n","\\pC":"n","\\qn":"n","\\qO":"n","\\qN":"n","\\qM":"n","\\qQ":"n","\\qV":"n","\\qU":"n","\\qT":"n","\\qS":"n","\\qL":"n","\\qK":"nj","\\qD":"o","\\qC":"o","\\qB":"o","\\qz":"o","\\qX":"o","\\qE":"o","\\qF":"o","\\qJ":"o","\\qI":"o","\\qH":"o","\\qG":"o","\\qW":"o","\\r7":"o","\\r8":"o","\\r6":"o","\\r5":"o","\\qZ":"o","\\r2":"o","\\qY":"o","\\r4":"o","\\r9":"o","\\pX":"o","\\pW":"o","\\pV":"o","\\pU":"o","\\pY":"o","\\pZ":"o","\\q4":"o","\\qy":"o","\\q3":"o","\\q2":"o","\\q1":"o","\\pS":"o","\\pR":"o","\\pI":"o","\\pJ":"o","\\pE":"o","\\pF":"o","\\pK":"o","\\pQ":"o","\\pP":"o","\\pO":"o","\\pM":"oi","\\qw":"ou","\\qt":"oo","\\qk":"p","\\qj":"p","\\qb":"p","\\qa":"p","\\q9":"p","\\q7":"p","\\q8":"p","\\qd":"p","\\qi":"p","\\qh":"q","\\qg":"q","\\qe":"q","\\qf":"q","\\qc":"q","\\qs":"r","\\qu":"r","\\qv":"r","\\qr":"r","\\qq":"r","\\qm":"r","\\ql":"r","\\qo":"r","\\qp":"r","\\q6":"r","\\q5":"r","\\pN":"r","\\pL":"r","\\pG":"r","\\pH":"r","\\q0":"r","\\pT":"s","\\qx":"s","\\qA":"s","\\r0":"s","\\r1":"s","\\r3":"s","\\qR":"s","\\qP":"s","\\nz":"s","\\kQ":"s","\\kR":"s","\\kP":"s","\\kO":"s","\\kM":"s","\\kN":"s","\\kS":"s","\\kT":"s","\\kY":"t","\\kX":"t","\\kW":"t","\\kU":"t","\\kV":"t","\\kL":"t","\\kK":"t","\\kA":"t","\\kB":"t","\\kz":"t","\\ky":"t","\\kw":"t","\\kx":"t","\\kC":"t","\\kD":"t","\\kI":"kJ","\\kH":"u","\\kG":"u","\\kE":"u","\\kF":"u","\\kZ":"u","\\l0":"u","\\ln":"u","\\lo":"u","\\lm":"u","\\ll":"u","\\lh":"u","\\lk":"u","\\lp":"u","\\nA":"u","\\lw":"u","\\jv":"u","\\lv":"u","\\lu":"u","\\lr":"u","\\ls":"u","\\lg":"u","\\lf":"u","\\l5":"u","\\l6":"u","\\l4":"u","\\l3":"u","\\l1":"u","\\l2":"u","\\l7":"u","\\l8":"u","\\ld":"u","\\le":"u","\\lc":"u","\\lb":"v","\\l9":"v","\\la":"v","\\kv":"v","\\ku":"v","\\jQ":"v","\\jR":"v","\\jP":"jO","\\jM":"w","\\jN":"w","\\jS":"w","\\jT":"w","\\jY":"w","\\jX":"w","\\jW":"w","\\jU":"w","\\jV":"w","\\jL":"w","\\jK":"x","\\jA":"x","\\jB":"x","\\jz":"x","\\jy":"y","\\jw":"y","\\jx":"y","\\jC":"y","\\jD":"y","\\jI":"y","\\jJ":"y","\\jH":"y","\\jG":"y","\\jE":"y","\\jF":"y","\\jZ":"y","\\k0":"y","\\kl":"y","\\km":"y","\\kk":"z","\\kj":"z","\\kh":"z","\\ki":"z","\\kn":"z","\\ko":"z","\\kt":"z","\\ks":"z","\\kr":"z","\\kp":"z","\\kq":"z","\\kg":"z","\\kf":"z","\\k5":"\\k6","\\k4":"\\k3","\\k1":"\\k2","\\k7":"\\8E","\\k8":"\\8E","\\kd":"\\ke","\\kc":"\\8D","\\kb":"\\8D","\\k9":"\\ka","\\lx":"\\ly","\\mU":"\\mV","\\mT":"\\mS","\\mQ":"\\7v","\\mR":"\\7v","\\mW":"\\7v","\\mX":"\\n2","\\n1":"\\7w","\\n0":"\\7w","\\mY":"\\7w","\\8B":"\\8B","\\mZ":"\\mP"};$1X=$(1X);4A=(5(){14 8C=1;11 5(){11 8C++}}());5 7g(12){14 2k=$(1X.mO(\'\'));12.6u(2k);2k.6u(12);2k.3r()}5 4i(8J){5 26(a){11 8L[a]||a}11 8J.5i(/[^\\mE-\\mF]/g,26)}5 2m(25,7o){14 i=0,l=7o.1d;1N(;i<l;i=i+1){if(2s(25,7o[i]))11 i}11-1}5 8N(){14 $4v=$(8K);$4v.4T(1X.2V);14 8w={1r:$4v.1r()-$4v[0].mD,3l:$4v.3l()-$4v[0].8S};$4v.3r();11 8w}5 2s(a,b){if(a===b)11 1l;if(a===1h||b===1h)11 1e;if(a===1o||b===1o)11 1e;if(a.3f===7c)11 a+\'\'===b+\'\';if(b.3f===7c)11 b+\'\'===a+\'\';11 1e}5 6Z(4o,3e,8v){14 19,i,l;if(4o===1o||4o.1d<1)11[];19=4o.5O(3e);1N(i=0,l=19.1d;i<l;i=i+1)19[i]=8v(19[i]);11 19}5 7T(12){11 12.2I(1e)-12.1r()}5 75(12){14 5k="4F-2W-25";12.on("6o",5(){if($.7(12,5k)===1h){$.7(12,5k,12.19())}});12.on("4F",5(){14 19=$.7(12,5k);if(19!==1h&&12.19()!==19){$.7e(12,5k);12.1L("4F-2W")}})}5 9j(12){12.on("5f",5(e){14 6y=6s;if(6y===1h||6y.x!==e.9d||6y.y!==e.9i){$(e.4C).1L("5f-2X",e)}})}5 6g(5r,fn,6F){6F=6F||1h;14 4y;11 5(){14 28=1K;1J.97(4y);4y=1J.51(5(){fn.2h(6F,28)},5r)}}5 8r(9l,12){14 9h=6g(9l,5(e){12.1L("3y-8s",e)});12.on("3y",5(e){if(2m(e.4C,12.2r())>=0)9h(e)})}5 1s($el){if($el[0]===1X.69)11;1J.51(5(){14 el=$el[0],4J=$el.19().1d,3Z;$el.1s();14 9f=(el.mC>0||el.mA>0);if(9f&&el===1X.69){if(el.63){el.63(4J,4J)}1k if(el.64){3Z=el.64();3Z.aA(1e);3Z.1A()}}},0)}5 9Y(el){el=$(el)[0];14 1I=0;14 1d=0;if(\'8P\'in el){1I=el.8P;1d=el.mB-1I}1k if(\'1q\'in 1X){el.1s();14 7B=1X.1q.9n();1d=1X.1q.9n().1j.1d;7B.mG(\'7X\',-el.25.1d);1I=7B.1j.1d-1d}11{1I:1I,1d:1d}}5 1O(2p){2p.5Q();2p.4Q()}5 aH(2p){2p.5Q();2p.9M()}5 a0(e){if(!3F){14 2c=e[0].mH||1J.mM(e[0],1o);3F=$(1X.5v("1U")).1Y({8U:"mN",2Q:"-9w",23:"-9w",62:"65",9t:2c.9t,9p:2c.9p,9q:2c.9q,9r:2c.9r,9b:2c.9b,8W:2c.8W,mL:"mK"});3F.1f("1t","6-3F");$(1X.2V).48(3F)}3F.1j(e.19());11 3F.1r()}5 5l(73,8V,8R){14 3d,6A=[],6H;3d=$.4W(73.1f("1t"));if(3d){3d=\'\'+3d;$(3d.5O(/\\s+/)).2D(5(){if(3.2m("6-")===0){6A.1Q(3)}})}3d=$.4W(8V.1f("1t"));if(3d){3d=\'\'+3d;$(3d.5O(/\\s+/)).2D(5(){if(3.2m("6-")!==0){6H=8R(3);if(6H){6A.1Q(6H)}}})}73.1f("1t",6A.5p(" "))}5 6r(1j,1C,2L,2a){14 26=4i(1j.6L()).2m(4i(1C.6L())),7d=1C.1d;if(26<0){2L.1Q(2a(1j));11}2L.1Q(2a(1j.56(0,26)));2L.1Q("<45 1t=\'6-26\'>");2L.1Q(2a(1j.56(26,26+7d)));2L.1Q("</45>");2L.1Q(2a(1j.56(26+7d,1j.1d)))}5 8k(2L){14 99={\'\\\\\':\'&#92;\',\'&\':\'&mI;\',\'<\':\'&lt;\',\'>\':\'&gt;\',\'"\':\'&mJ;\',"\'":\'&#39;\',"/":\'&#47;\'};11 7c(2L).5i(/[&<>"\'\\/\\\\]/g,5(26){11 99[26]})}5 2Y(1H){14 4y,5w=1o,5r=1H.5r||n3,4p=1H.3o,1c=3;11 5(1p){1J.97(4y);4y=1J.51(5(){14 7=1H.7,3o=4p,5c=1H.5c||$.fn.6.7F.5c,93={2o:1H.2o||\'aE\',7n:1H.7n||1e,91:1H.91||1h,5J:1H.5J||"aR"},31=$.3a({},$.fn.6.7F.31,93);7=7?7.1Z(1c,1p.1C,1p.2M,1p.21):1o;3o=(3i 3o===\'5\')?3o.1Z(1c,1p.1C,1p.2M,1p.21):3o;if(5w&&3i 5w.95==="5"){5w.95()}if(1H.31){if($.2N(1H.31)){$.3a(31,1H.31.1Z(1c))}1k{$.3a(31,1H.31)}}$.3a(31,{3o:3o,5J:1H.5J,7:7,n4:5(7){14 1b=1H.1b(7,1p.2M,1p);1p.1V(1b)},9y:5(5d,5b,58){14 1b={aB:1l,5d:5d,5b:5b,58:58};1p.1V(1b)}});5w=5c.1Z(1c,31)},5r)}}5 5R(1H){14 7=1H,8f,5t,1j=5(2J){11""+2J.1j};if($.5S(7)){5t=7;7={1b:5t}}if($.2N(7)===1e){5t=7;7=5(){11 5t}}14 6O=7();if(6O.1j){1j=6O.1j;if(!$.2N(1j)){8f=6O.1j;1j=5(2J){11 2J[8f]}}}11 5(1p){14 t=1p.1C,2X={1b:[]},3X;if(t===""){1p.1V(7());11}3X=5(2A,4E){14 2F,1f;2A=2A[0];if(2A.1F){2F={};1N(1f in 2A){if(2A.nq(1f))2F[1f]=2A[1f]}2F.1F=[];$(2A.1F).2D(5(i,94){3X(94,2F.1F)});if(2F.1F.1d||1p.30(t,1j(2F),2A)){4E.1Q(2F)}}1k{if(1p.30(t,1j(2A),2A)){4E.1Q(2A)}}};$(7().1b).2D(5(i,2A){3X(2A,2X.1b)});1p.1V(2X)}}5 29(7){14 9a=$.2N(7);11 5(1p){14 t=1p.1C,2X={1b:[]};14 1y=9a?7(1p):7;if($.5S(1y)){$(1y).2j(5(){14 8c=3.1j!==1h,1j=8c?3.1j:3;if(t===""||1p.30(t,1j)){2X.1b.1Q(8c?3:{id:3,1j:3})}});1p.1V(2X)}}}5 3N(6E,90){if($.2N(6E))11 1l;if(!6E)11 1e;if(3i(6E)===\'4o\')11 1l;3b 3q 5z(90+" 8y be a 4o, 5, or nr 25")}5 2b(19,21){if($.2N(19)){14 28=9B.3J.59.1Z(1K,2);11 19.2h(21,28)}11 19}5 7h(1b){14 6z=0;$.2j(1b,5(i,2J){if(2J.1F){6z+=7h(2J.1F)}1k{6z++}});11 6z}5 a8(1z,1q,8Z,4){14 8Y=1z,6G=1e,3c,1E,i,l,3e;if(!4.3K||!4.57||4.57.1d<1)11 1h;6N(1l){1E=-1;1N(i=0,l=4.57.1d;i<l;i++){3e=4.57[i];1E=1z.2m(3e);if(1E>=0)54}if(1E<0)54;3c=1z.56(0,1E);1z=1z.56(1E+3e.1d);if(3c.1d>0){3c=4.3K.1Z(3,3c,1q);if(3c!==1h&&3c!==1o&&4.id(3c)!==1h&&4.id(3c)!==1o){6G=1e;1N(i=0,l=1q.1d;i<l;i++){if(2s(4.id(3c),4.id(1q[i]))){6G=1l;54}}if(!6G)8Z(3c)}}}if(8Y!==1z)11 1z}5 6p(){14 1c=3;$.2j(1K,5(i,12){1c[12].3r();1c[12]=1o})}5 61(83,9o){14 3f=5(){};3f.3J=3q 83;3f.3J.3f=3f;3f.3J.2w=83.3J;3f.3J=$.3a(3f.3J,9o);11 3f}5C=61(np,{1w:5(9u){14 1c=3;11 5(){9u.2h(1c,1K)}},aq:5(4){14 1b,15,3O=".6-1b";3.4=4=3.4M(4);3.id=4.id;if(4.12.7("6")!==1h&&4.12.7("6")!==1o){4.12.7("6").4d()}3.1a=3.74();3.2Z=$(\'.6-6J-9m\');if(3.2Z.1d==0){3.2Z=$("<45>",{3H:"nn","4b-nl":"nm"}).1v("6-6J-9m").4T(1X.2V)}3.7Q="ns"+(4.12.1f("id")||"nt"+4A());3.7A=3.7Q.5i(/([.])/g,\'ny\').5i(/([;&,\\-\\.\\+\\*\\~\':"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g,\'\\\\$1\');3.1a.1f("id",3.7Q);3.1a.1f("6c",4.12.1f("6c"));3.2V=$(1X.2V);5l(3.1a,3.4.12,3.4.7E);3.1a.1f("2c",4.12.1f("2c"));3.1a.1Y(2b(4.9H,3.4.12));3.1a.1v(2b(4.7l,3.4.12));3.55=3.4.12.1f("3R");3.4.12.7("6",3).1f("3R","-1").6u(3.1a).on("3n.6",1O);3.1a.7("6",3);3.1i=3.1a.1u(".6-1R");5l(3.1i,3.4.12,3.4.7D);3.1i.1v(2b(4.7k,3.4.12));3.1i.7("6",3);3.1i.on("3n",1O);3.1b=1b=3.1a.1u(3O);3.15=15=3.1a.1u("1z.6-1z");3.7q=0;3.4h=0;3.21=1o;3.7U();3.1a.on("3n",1O);9j(3.1b);3.1i.on("5f-2X",3O,3.1w(3.5K));3.1i.on("4k 9x 85",3O,3.1w(5(2p){3.7P=1l;3.5K(2p)}));3.1i.on("9x",3O,3.1w(3.aw));3.1i.on("4k 85",3O,3.1w(3.7I));3.1i.on(\'3n\',3.1w(5(2p){if(3.7P){3.7P=1e;3.3t()}}));8r(80,3.1b);3.1i.on("3y-8s",3O,3.1w(3.5V));$(3.1a).on("2W",".6-1z",5(e){e.4Q()});$(3.1i).on("2W",".6-1z",5(e){e.4Q()});if($.fn.8u){1b.8u(5(e,7t,nx,5g){14 23=1b.2K();if(5g>0&&23-5g<=0){1b.2K(0);1O(e)}1k if(5g<0&&1b.2r(0).7a-1b.2K()+5g<=1b.3l()){1b.2K(1b.2r(0).7a-1b.3l());1O(e)}})}75(15);15.on("4F-2W 1z 9T",3.1w(3.3V));15.on("1s",5(){15.1v("6-5y")});15.on("3v",5(){15.1W("6-5y")});3.1i.on("8q",3O,3.1w(5(e){if($(e.4C).5e(".6-1y-2S").1d>0){3.5K(e);3.3t(e)}}));3.1i.on("3n 8q 4B 4k 85 nw",5(e){e.4Q()});3.2t=1h;if($.2N(3.4.1T)){3.1T();3.9k()}if(4.4Y!==1o){3.15.1f("nu",4.4Y)}14 1B=4.12.24("1B");if(1B===1h)1B=1e;3.5a(!1B);14 2q=4.12.24("2q");if(2q===1h)2q=1e;3.2q(2q);68=68||8N();3.4H=4.12.24("4H");4.12.24("4H",1e);if(3.4H)3.1s();3.15.1f("2k",4.ad)},4d:5(){14 12=3.4.12,6=12.7("6"),1c=3;3.1D();if(12.1d&&12[0].8I&&1c.42){12.2j(5(){if(1c.42){3.8I("8Q",1c.42)}})}if(3.3I){3.3I.nv();3.3I=1o}3.42=1o;if(6!==1h){6.1a.3r();6.2Z.3r();6.1i.3r();12.4U().7e("6").2O(".6").24("4H",3.4H||1e);if(3.55){12.1f({3R:3.55})}1k{12.7J("3R")}12.4U()}6p.1Z(3,"1a","2Z","1i","1b","15")},4L:5(12){if(12.is("3W")){11{id:12.24("25"),1j:12.1j(),12:12.2r(),1Y:12.1f("1t"),1B:12.24("1B"),3k:2s(12.1f("3k"),"3k")||2s(12.7("3k"),1l)}}1k if(12.is("8H")){11{1j:12.1f("1P"),1F:[],12:12.2r(),1Y:12.1f("1t")}}},4M:5(4){14 12,1A,8i,4p,1c=3;12=4.12;if(12.2r(0).6D.6C()==="1A"){3.1A=1A=4.12}if(1A){$.2j(["id","3B","2Y","1p","3K","1T","7","29"],5(){if(3 in 4){3b 3q 5z("nk \'"+3+"\' is 2g ni 1N 4m a4 a3 4I a <1A> 12.")}})}4=$.3a({},{7p:5(1a,1b,1p){14 6U,id=3.4.id,2Z=3.2Z;6U=5(1b,1a,7O){14 i,l,1y,2S,1B,4P,2E,1P,5F,2P;1b=4.ag(1b,1a,1p);14 89=[];1N(i=0,l=1b.1d;i<l;i=i+1){1y=1b[i];1B=(1y.1B===1l);2S=(!1B)&&(id(1y)!==1h);4P=1y.1F&&1y.1F.1d>0;2E=$("<li></li>");2E.1v("6-1b-n9-"+7O);2E.1v("6-1y");2E.1v(2S?"6-1y-2S":"6-1y-na");if(1B){2E.1v("6-1B")}if(4P){2E.1v("6-1y-7Z-1F")}2E.1v(1c.4.af(1y));2E.1f("3H","7z");1P=$(1X.5v("1U"));1P.1v("6-1y-1P");1P.1f("id","6-1y-1P-"+4A());1P.1f("3H","3W");2P=4.at(1y,1P,1p,1c.4.2a);if(2P!==1h){1P.3w(2P);2E.48(1P)}if(4P){5F=$("<3S></3S>");5F.1v("6-1y-n8");6U(1y.1F,5F,7O+1);2E.48(5F)}2E.7("6-7",1y);89.1Q(2E[0])}1a.48(89);2Z.1j(4.8o(1b.1d))};6U(1b,1a,0)}},$.fn.6.7b,4);if(3i(4.id)!=="5"){8i=4.id;4.id=5(e){11 e[8i]}}if($.5S(4.12.7("8A"))){if("29"in 4){3b"29 n7 as n5 an n6 \'7-6-29\' 9J in 1H of 4m "+4.12.1f("id")}4.29=4.12.7("8A")}if(1A){4.1p=3.1w(5(1p){14 7={1b:[],20:1e},1C=1p.1C,1F,2e,3X;3X=5(12,4E){14 2F;if(12.is("3W")){if(1p.30(1C,12.1j(),12)){4E.1Q(1c.4L(12))}}1k if(12.is("8H")){2F=1c.4L(12);12.1F().2D(5(i,3j){3X(3j,2F.1F)});if(2F.1F.1d>0){4E.1Q(2F)}}};1F=12.1F();if(3.3Y()!==1h&&1F.1d>0){2e=3.4f();if(2e){1F=1F.2g(2e)}}1F.2D(5(i,3j){3X(3j,7.1b)});1p.1V(7)});4.id=5(e){11 e.id}}1k{if(!("1p"in 4)){if("2Y"in 4){4p=4.12.7("2Y-3o");if(4p&&4p.1d>0){4.2Y.3o=4p}4.1p=2Y.1Z(4.12,4.2Y)}1k if("7"in 4){4.1p=5R(4.7)}1k if("29"in 4){4.1p=29(4.29);if(4.3K===1h){4.3K=5(1C){11{id:$.4W(1C),1j:$.4W(1C)}}}if(4.1T===1h){4.1T=5(12,1V){14 7=[];$(6Z(12.19(),4.3e,4.6P)).2j(5(){14 5X={id:3,1j:3},29=4.29;if($.2N(29))29=29();$(29).2j(5(){if(2s(3.id,5X.id)){5X=3;11 1e}});7.1Q(5X)});1V(7)}}}}}if(3i(4.1p)!=="5"){3b"1p 5 2g 7N 1N 4m "+4.12.1f("id")}if(4.3Q===\'23\'){4.3Q=5(5u,2J){5u.nb(2J)}}1k if(4.3Q===\'6e\'){4.3Q=5(5u,2J){5u.1Q(2J)}}1k if(3i(4.3Q)!=="5"){3b"nc 3Q 3W 8y be \'23\', \'6e\' or a nh 5"}11 4},9k:5(){14 el=3.4.12,6t,1c=3;el.on("2W.6",3.1w(5(e){if(3.4.12.7("6-2W-87")!==1l){3.1T()}}));3.42=3.1w(5(){14 1B=el.24("1B");if(1B===1h)1B=1e;3.5a(!1B);14 2q=el.24("2q");if(2q===1h)2q=1e;3.2q(2q);if(3.1a){5l(3.1a,3.4.12,3.4.7E);3.1a.1v(2b(3.4.7l,3.4.12))}if(3.1i){5l(3.1i,3.4.12,3.4.7D);3.1i.1v(2b(3.4.7k,3.4.12))}});if(el.1d&&el[0].9s){el.2j(5(){3.9s("8Q",1c.42)})}6t=1J.ng||1J.nf||1J.nd;if(6t!==1h){if(3.3I){9V 3.3I;3.3I=1o}3.3I=3q 6t(5(8T){$.2j(8T,1c.42)});3.3I.ne(el.2r(0),{mz:1l,my:1e})}},8m:5(7){14 2U=$.2x("6-lT",{19:3.id(7),a5:7,1g:7});3.4.12.1L(2U);11!2U.6M()},1G:5(4N){4N=4N||{};4N=$.3a({},4N,{2o:"2W",19:3.19()});3.4.12.7("6-2W-87",1l);3.4.12.1L(4N);3.4.12.7("6-2W-87",1e);3.4.12.3n();if(3.4.ab)3.4.12.3v()},2B:5(){11 3.8l===1l},4l:5(){14 2n=3.6f&&!3.6q,1B=!2n;if(2n===3.8l)11 1e;3.1a.6b("6-1a-1B",1B);3.1D();3.8l=2n;11 1l},5a:5(2n){if(2n===1h)2n=1l;if(3.6f===2n)11;3.6f=2n;3.4.12.24("1B",!2n);3.4l()},a6:5(){3.5a(1e)},2q:5(2n){if(2n===1h)2n=1e;if(3.6q===2n)11;3.6q=2n;3.4.12.24("2q",2n);3.4l()},22:5(){11(3.1a)?3.1a.2y("6-1i-2l"):1e},3L:5(){14 $1i=3.1i,1a=3.1a,1I=1a.1I(),3l=1a.3D(1e),1r=1a.2I(1e),52=$1i.3D(1e),$1J=$(1J),7i=$1J.1r(),7f=$1J.3l(),60=$1J.9g()+7i,77=$1J.2K()+7f,5I=1I.23+3l,4X=1I.2Q,8d=5I+52<=77,8e=(1I.23-52)>=$1J.2K(),3C=$1i.2I(1e),8X=5(){11 4X+3C<=60},9c=5(){11 1I.2Q+60+1a.2I(1e)>3C},98=$1i.2y("6-1R-2C"),6a,2C,5Z,1Y,6n;if(98){2C=1l;if(!8e&&8d){5Z=1l;2C=1e}}1k{2C=1e;if(!8d&&8e){5Z=1l;2C=1l}}if(5Z){$1i.4q();1I=3.1a.1I();3l=3.1a.3D(1e);1r=3.1a.2I(1e);52=$1i.3D(1e);60=$1J.9g()+7i;77=$1J.2K()+7f;5I=1I.23+3l;4X=1I.2Q;3C=$1i.2I(1e);$1i.4U();3.4w()}if(3.4.lU){6n=$(\'.6-1b\',$1i)[0];$1i.1v(\'6-1R-4Z-1r\');$1i.1Y(\'1r\',\'\');3C=$1i.2I(1e)+(6n.7a===6n.8S?0:68.1r);3C>1r?1r=3C:3C=1r;52=$1i.3D(1e)}1k{3.1a.1W(\'6-1R-4Z-1r\')}if(3.2V.1Y(\'8U\')!==\'lS\'){6a=3.2V.1I();5I-=6a.23;4X-=6a.2Q}if(!8X()&&9c()){4X=1I.2Q+3.1a.2I(1e)-3C}1Y={2Q:4X,1r:1r};if(2C){1Y.23=1I.23-52;1Y.6e=\'4Z\';3.1a.1v("6-1R-2C");$1i.1v("6-1R-2C")}1k{1Y.23=5I;1Y.6e=\'4Z\';3.1a.1W("6-1R-2C");$1i.1W("6-1R-2C")}1Y=$.3a(1Y,2b(3.4.ai,3.4.12));$1i.1Y(1Y)},9e:5(){14 2p;if(3.22())11 1e;if(3.6f===1e||3.6q===1l)11 1e;2p=$.2x("6-4a");3.4.12.1L(2p);11!2p.6M()},7K:5(){3.1a.1W("6-1R-2C");3.1i.1W("6-1R-2C")},2l:5(){if(!3.9e())11 1e;3.4a();$1X.on("5f.8O",5(e){6s.x=e.9d;6s.y=e.9i});11 1l},4a:5(){14 3G=3.7A,3y="3y."+3G,50="50."+3G,6m="8p."+3G,2i;3.1a.1v("6-1i-2l").1v("6-1a-1S");3.7K();if(3.1i[0]!==3.2V.1F().6j()[0]){3.1i.aC().4T(3.2V)}2i=$("#6-1R-2i");if(2i.1d===0){2i=$(1X.5v("1U"));2i.1f("id","6-1R-2i").1f("1t","6-1R-2i");2i.4q();2i.4T(3.2V);2i.on("4B 4k 3n",5(e){7g(2i);14 1i=$("#6-1R"),1c;if(1i.1d>0){1c=1i.7("6");if(1c.4.7C){1c.3t({4n:1l})}1c.1D();e.5Q();e.4Q()}})}if(3.1i.3m()[0]!==2i[0]){3.1i.6u(2i)}$("#6-1R").7J("id");3.1i.1f("id","6-1R");2i.4U();3.3L();3.1i.4U();3.3L();3.1i.1v("6-1R-1S");14 7j=3;3.1a.8x().8z(1J).2j(5(){$(3).on(50+" "+3y+" "+6m,5(e){if(7j.22())7j.3L()})})},1D:5(){if(!3.22())11;14 3G=3.7A,3y="3y."+3G,50="50."+3G,6m="8p."+3G;3.1a.8x().8z(1J).2j(5(){$(3).2O(3y).2O(50).2O(6m)});3.7K();$("#6-1R-2i").4q();3.1i.7J("id");3.1i.4q();3.1a.1W("6-1i-2l").1W("6-1a-1S");3.1b.67();$1X.2O("5f.8O");3.2v();3.15.1W("6-1S");3.4.12.1L($.2x("6-1D"))},a1:5(1C){3.2l();3.15.19(1C);3.3V(1e)},2v:5(){},6S:5(){11 2b(3.4.a2,3.4.12)},8G:5(){14 1b=3.1b,1F,1E,5H,hb,5U,y,20,5W;1E=3.2R();if(1E<0)11;if(1E==0){1b.2K(0);11}1F=3.41().1u(\'.6-1y-1P\');5H=$(1F[1E]);5W=(5H.1I()||{}).23||0;hb=5W+5H.3D(1l);if(1E===1F.1d-1){20=1b.1u("li.6-20-1b");if(20.1d>0){hb=20.1I().23+20.3D(1l)}}5U=1b.1I().23+1b.3D(1e);if(hb>5U){1b.2K(1b.2K()+(hb-5U))}y=5W-1b.1I().23;if(y<0&&5H.1Y(\'62\')!=\'65\'){1b.2K(1b.2K()+y)}},41:5(){11 3.1b.1u(".6-1y-2S:2g(.6-1B):2g(.6-1n)")},8b:5(7t){14 2f=3.41(),1E=3.2R();6N(1E>-1&&1E<2f.1d){1E+=7t;14 1g=$(2f[1E]);if(1g.2y("6-1y-2S")&&!1g.2y("6-1B")&&!1g.2y("6-1n")){3.2R(1E);54}}},2R:5(1E){14 2f=3.41(),1g,7;if(1K.1d===0){11 2m(2f.4O(".6-3E")[0],2f.2r())}if(1E>=2f.1d)1E=2f.1d-1;if(1E<0)1E=0;3.5N();1g=$(2f[1E]);1g.1v("6-3E");3.15.1f("4b-lR",1g.1u(".6-1y-1P").1f("id"));3.8G();3.2Z.1j(1g.1j());7=1g.7("6-7");if(7){3.4.12.1L({2o:"6-2R",19:3.id(7),1g:7})}},5N:5(){3.1b.1u(".6-3E").1W("6-3E")},aw:5(){3.7y=1l},7I:5(){3.7y=1e},az:5(){11 3.41().1d},5K:5(2p){14 el=$(2p.4C).5e(".6-1y-2S");if(el.1d>0&&!el.is(".6-3E")){14 2f=3.41();3.2R(2f.1E(el))}1k if(el.1d==0){3.5N()}},5V:5(){14 1b=3.1b,20=1b.1u("li.6-20-1b"),7s,2M=3.4h+1,1c=3,1C=3.15.19(),21=3.21;if(20.1d===0)11;7s=20.1I().23-1b.1I().23-1b.3l();if(7s<=3.4.aG){20.1v("6-1S");3.4.1p({12:3.4.12,1C:1C,2M:2M,21:21,30:3.4.30,1V:3.1w(5(7){if(!1c.22())11;1c.4.7p.1Z(3,1b,7.1b,{1C:1C,2M:2M,21:21});1c.4x(7,1e,1e);if(7.20===1l){20.aC().4T(1b).3w(1c.4.2a(2b(1c.4.5q,1c.4.12,2M+1)));1J.51(5(){1c.5V()},10)}1k{20.3r()}1c.3L();1c.4h=2M;1c.21=7.21;3.4.12.1L({2o:"6-aF",aI:7})})})}},8a:5(){},3V:5(3z){14 15=3.15,1b=3.1b,4=3.4,7,1c=3,1z,1C=15.19(),7u=$.7(3.1a,"6-6j-1C"),7r;if(3z!==1l&&7u&&2s(1C,7u))11;$.7(3.1a,"6-6j-1C",1C);if(3z!==1l&&(3.3g===1e||!3.22())){11}5 7x(){15.1W("6-1S");1c.3L();if(1b.1u(\'.6-no-1b,.6-1q-53,.6-aK\').1d){1c.2Z.1j(1b.1j())}1k{1c.2Z.1j(1c.4.8o(1b.1u(\'.6-1y-2S:2g(".6-1n")\').1d))}}5 3A(3w){1b.3w(3w);7x()}7r=++3.7q;14 5T=3.6S();if(5T>=1){7=3.7();if($.5S(7)&&7.1d>=5T&&3N(4.6l,"6l")){3A("<li 1t=\'6-1q-53\'>"+2b(4.6l,4.12,5T)+"</li>");11}}if(15.19().1d<4.7G){if(3N(4.6V,"6V")){3A("<li 1t=\'6-no-1b\'>"+2b(4.6V,4.12,15.19(),4.7G)+"</li>")}1k{3A("")}if(3z&&3.4g)3.4g(1l);11}if(4.4Y&&15.19().1d>4.4Y){if(3N(4.6w,"6w")){3A("<li 1t=\'6-no-1b\'>"+2b(4.6w,4.12,15.19(),4.4Y)+"</li>")}1k{3A("")}11}if(4.71&&3.41().1d===0){3A("<li 1t=\'6-aK\'>"+2b(4.71,4.12)+"</li>")}15.1v("6-1S");3.5N();1z=3.8a();if(1z!=1h&&1z!=1o){15.19(1z)}3.4h=1;4.1p({12:4.12,1C:15.19(),2M:3.4h,21:1o,30:4.30,1V:3.1w(5(7){14 3T;if(7r!=3.7q){11}if(!3.22()){3.15.1W("6-1S");11}if(7.aB!==1h&&3N(4.6Q,"6Q")){3A("<li 1t=\'6-2Y-9y\'>"+2b(4.6Q,4.12,7.5d,7.5b,7.58)+"</li>");11}3.21=(7.21===1h)?1o:7.21;if(3.4.3K&&15.19()!==""){3T=3.4.3K.1Z(1c,15.19(),7.1b);if(3T!==1h&&3T!==1o&&1c.id(3T)!==1h&&1c.id(3T)!==1o){if($(7.1b).4O(5(){11 2s(1c.id(3),1c.id(3T))}).1d===0){3.4.3Q(7.1b,3T)}}}if(7.1b.1d===0&&3N(4.4u,"4u")){3A("<li 1t=\'6-no-1b\'>"+2b(4.4u,4.12,15.19())+"</li>");11}1b.67();1c.4.7p.1Z(3,1b,7.1b,{1C:15.19(),2M:3.4h,21:1o});if(7.20===1l&&3N(4.5q,"5q")){1b.48("<li 1t=\'6-20-1b\'>"+4.2a(2b(4.5q,4.12,3.4h))+"</li>");1J.51(5(){1c.5V()},10)}3.4x(7,3z);7x();3.4.12.1L({2o:"6-aF",aI:7})})})},4G:5(){3.1D()},3v:5(){if(3.4.7C)3.3t({4n:1l});3.1D();3.1a.1W("6-1a-1S");if(3.15[0]===1X.69){3.15.3v()}3.2v();3.1q.1u(".6-15-1g-1s").1W("6-15-1g-1s")},4w:5(){1s(3.15)},3t:5(1H){if(3.7y){3.7I();11}14 1E=3.2R(),3E=3.1b.1u(".6-3E"),7=3E.5e(\'.6-1y\').7("6-7");if(7){3.2R(1E);3.6W(7,1H)}1k if(1H&&1H.4n){3.1D()}},3Y:5(){14 2e;11 3.4.12.1f("2k")||3.4.12.1f("7-2k")||3.4.12.7("2k")||3.4.2k||((2e=3.4f())!==1h?2e.1j():1h)},4f:5(){if(3.1A){14 5n=3.1A.1F(\'3W\').6h();if(3.4.2e!==1h){11(3.4.2e==="6h"&&5n)||(3i 3.4.2e==="5"&&3.4.2e(3.1A))}1k if($.4W(5n.1j())===""&&5n.19()===""){11 5n}}},8n:5(){5 aP(){14 2c,6v,2z,i,l,1f;if(3.4.1r==="2O"){11 1o}1k if(3.4.1r==="12"){11 3.4.12.2I(1e)===0?\'4Z\':3.4.12.2I(1e)+\'px\'}1k if(3.4.1r==="8t"||3.4.1r==="aM"){2c=3.4.12.1f(\'2c\');if(2c!==1h){6v=2c.5O(\';\');1N(i=0,l=6v.1d;i<l;i=i+1){1f=6v[i].5i(/\\s/g,\'\');2z=1f.26(/^1r:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);if(2z!==1o&&2z.1d>=1)11 2z[1]}}if(3.4.1r==="aM"){2c=3.4.12.1Y(\'1r\');if(2c.2m("%")>0)11 2c;11(3.4.12.2I(1e)===0?\'4Z\':3.4.12.2I(1e)+\'px\')}11 1o}1k if($.2N(3.4.1r)){11 3.4.1r()}1k{11 3.4.1r}};14 1r=aP.1Z(3);if(1r!==1o){3.1a.1Y("1r",1r)}}});7R=61(5C,{74:5(){14 1a=$(1X.5v("1U")).1f({"1t":"6-1a"}).3w(["<a 9z=\'lP:lQ(0)\' 1t=\'6-1g\' 3R=\'-1\'>","   <45 1t=\'6-4e\'>&#lV;</45><72 1t=\'6-15-1g-1D\'></72>","   <45 1t=\'6-9K\' 3H=\'7z\'><b 3H=\'7z\'></b></45>","</a>","<1P 1N=\'\' 1t=\'6-5D\'></1P>","<1z 1t=\'6-1M 6-5D\' 2o=\'1j\' 4b-lW=\'1l\' 3H=\'m1\' />","<1U 1t=\'6-1R 6-62-65\'>","   <1U 1t=\'6-15\'>","       <1P 1N=\'\' 1t=\'6-5D\'></1P>","       <1z 2o=\'1j\' 8g=\'2O\' aN=\'2O\' aQ=\'2O\' 9R=\'1e\' 1t=\'6-1z\' 3H=\'m0\' 4b-lZ=\'1l\'","       4b-8g=\'5u\' />","   </1U>","   <3S 1t=\'6-1b\' 3H=\'lX\'>","   </3S>","</1U>"].5p(""));11 1a},4l:5(){if(3.2w.4l.2h(3,1K)){3.1M.24("1B",!3.2B())}},4a:5(){14 el,3Z,66;if(3.4.4z>=0){3.4g(1l)}3.2w.4a.2h(3,1K);if(3.3g!==1e){3.15.19(3.1M.19())}if(3.4.3M(3)){3.15.1s();el=3.15.2r(0);if(el.64){3Z=el.64();3Z.aA(1e);3Z.1A()}1k if(el.63){66=3.15.19().1d;el.63(66,66)}}if(3.15.19()===""){if(3.2t!=1h){3.15.19(3.2t);3.15.1A()}}3.1M.24("1B",1l).19("");3.3V(1l);3.4.12.1L($.2x("6-2l"))},1D:5(){if(!3.22())11;3.2w.1D.2h(3,1K);3.1M.24("1B",1e);if(3.4.3M(3)){3.1M.1s()}},1s:5(){if(3.22()){3.1D()}1k{3.1M.24("1B",1e);if(3.4.3M(3)){3.1M.1s()}}},6x:5(){11 3.1a.2y("6-1a-1S")},4G:5(){3.2w.4G.2h(3,1K);3.1M.24("1B",1e);if(3.4.3M(3)){3.1M.1s()}},4d:5(){$("1P[1N=\'"+3.1M.1f(\'id\')+"\']").1f(\'1N\',3.4.12.1f("id"));3.2w.4d.2h(3,1K);6p.1Z(3,"1q","1M")},7U:5(){14 1q,1a=3.1a,1i=3.1i,4V=4A(),6d;if(3.4.4z<0){3.4g(1e)}1k{3.4g(1l)}3.1q=1q=1a.1u(".6-1g");3.1M=1a.1u(".6-1M");1q.1u(".6-4e").1f("id","6-4e-"+4V);3.1M.1f("4b-lY","6-4e-"+4V);3.1b.1f("id","6-1b-"+4V);3.15.1f("4b-lO","6-1b-"+4V);3.1M.1f("id","9S"+4V);6d=$("1P[1N=\'"+3.4.12.1f("id")+"\']");3.4.12.1s(3.1w(5(){3.1s()}));3.1M.3m().1j(6d.1j()).1f(\'1N\',3.1M.1f(\'id\'));14 aD=3.4.12.1f("6c");3.4.12.1f("6c",(aD||6d.1j()));3.1M.1f("3R",3.55);3.15.1f("id",3.1M.1f(\'id\')+\'lN\');3.15.3m().1j($("1P[1N=\'"+3.1M.1f(\'id\')+"\']").1j()).1f(\'1N\',3.15.1f(\'id\'));3.15.on("6o",3.1w(5(e){if(!3.2B())11;if(lD==e.lE)11;if(e.1x===1m.82||e.1x===1m.86){1O(e);11}6k(e.1x){2d 1m.4t:2d 1m.5j:3.8b((e.1x===1m.4t)?-1:1);1O(e);11;2d 1m.3u:3.3t();1O(e);11;2d 1m.5h:3.3t({4n:1l});11;2d 1m.5m:3.4G(e);1O(e);11}}));3.15.on("3v",3.1w(5(e){if(1X.69===3.2V.2r(0)){1J.51(3.1w(5(){if(3.22()){3.15.1s()}}),0)}}));3.1M.on("6o",3.1w(5(e){if(!3.2B())11;if(e.1x===1m.5h||1m.7W(e)||1m.84(e)||e.1x===1m.5m){11}if(3.4.6Y===1e&&e.1x===1m.3u){1O(e);11}if(e.1x==1m.5j||e.1x==1m.4t||(e.1x==1m.3u&&3.4.6Y)){if(e.9X||e.9W||e.9U||e.7Y)11;3.2l();1O(e);11}if(e.1x==1m.6i||e.1x==1m.4D){if(3.4.aJ){3.5s()}1O(e);11}}));75(3.1M);3.1M.on("4F-2W 1z",3.1w(5(e){if(3.4.4z>=0){e.4Q();if(3.22())11;3.2l()}}));1q.on("4B 4k","72",3.1w(5(e){if(!3.2B()){11}3.5s();aH(e);3.1D();if(3.1q){3.1q.1s()}}));1q.on("4B 4k",3.1w(5(e){7g(1q);if(!3.1a.2y("6-1a-1S")){3.4.12.1L($.2x("6-1s"))}if(3.22()){3.1D()}1k if(3.2B()){3.2l()}1O(e)}));1i.on("4B 4k",3.1w(5(){if(3.4.3M(3)){3.15.1s()}}));1q.on("1s",3.1w(5(e){1O(e)}));3.1M.on("1s",3.1w(5(){if(!3.1a.2y("6-1a-1S")){3.4.12.1L($.2x("6-1s"))}3.1a.1v("6-1a-1S")})).on("3v",3.1w(5(){if(!3.22()){3.1a.1W("6-1a-1S");3.4.12.1L($.2x("6-3v"))}}));3.15.on("1s",3.1w(5(){if(!3.1a.2y("6-1a-1S")){3.4.12.1L($.2x("6-1s"))}3.1a.1v("6-1a-1S")}));3.8n();3.4.12.4q();3.4r()},5s:5(1G){14 7=3.1q.7("6-7");if(7){14 2U=$.2x("6-lC");3.4.12.1L(2U);if(2U.6M()){11}14 2e=3.4f();3.4.12.19(2e?2e.19():"");3.1q.1u(".6-4e").67();3.1q.7e("6-7");3.4r();if(1G!==1e){3.4.12.1L({2o:"6-3h",19:3.id(7),1g:7});3.1G({3h:7})}}},1T:5(){14 1n;if(3.78()){3.2u(1o);3.1D();3.4r()}1k{14 1c=3;3.4.1T.1Z(1o,3.4.12,5(1n){if(1n!==1h&&1n!==1o){1c.2u(1n);1c.1D();1c.4r();1c.2t=1c.4.2t(1n,1c.15.19())}})}},78:5(){14 2e;if(3.3Y()===1h)11 1e;11((2e=3.4f())!==1h&&2e.24("1n"))||(3.4.12.19()==="")||(3.4.12.19()===1h)||(3.4.12.19()===1o)},4M:5(){14 4=3.2w.4M.2h(3,1K),1c=3;if(4.12.2r(0).6D.6C()==="1A"){4.1T=5(12,1V){14 1n=12.1u("3W").4O(5(){11 3.1n&&!3.1B});1V(1c.4L(1n))}}1k if("7"in 4){4.1T=4.1T||5(12,1V){14 id=12.19();14 26=1o;4.1p({30:5(1C,1j,el){14 4K=2s(id,4.id(el));if(4K){26=el}11 4K},1V:!$.2N(1V)?$.9P:5(){1V(26)}})}}11 4},3Y:5(){if(3.1A){if(3.4f()===1h){11 1h}}11 3.2w.3Y.2h(3,1K)},4r:5(){14 2k=3.3Y();if(3.78()&&2k!==1h){if(3.1A&&3.4f()===1h)11;3.1q.1u(".6-4e").3w(3.4.2a(2k));3.1q.1v("6-5A");3.1a.1W("6-aO")}},4x:5(7,3z,6I){14 1n=0,1c=3,3g=1l;3.41().2D(5(i,3j){if(2s(1c.id(3j.7("6-7")),1c.4.12.19())){1n=i;11 1e}});if(6I!==1e){if(3z===1l&&1n>=0){3.2R(1n)}1k{3.2R(0)}}if(3z===1l){14 5E=3.4.4z;if(5E>=0){3.4g(7h(7.1b)>=5E)}}},4g:5(3g){if(3.3g===3g)11;3.3g=3g;3.1i.1u(".6-15").6b("6-15-6J",!3g);3.1i.1u(".6-15").6b("6-5D",!3g);$(3.1i,3.1a).6b("6-7Z-lB",3g)},6W:5(7,1H){if(!3.8m(7)){11}14 2H=3.4.12.19(),2T=3.7();3.4.12.19(3.id(7));3.2u(7);3.4.12.1L({2o:"6-1n",19:3.id(7),1g:7});3.2t=3.4.2t(7,3.15.19());3.1D();if((!1H||!1H.4n)&&3.4.3M(3)){3.1M.1s()}if(!2s(2H,3.id(7))){3.1G({44:7,3h:2T})}},2u:5(7){14 1a=3.1q.1u(".6-4e"),2P,3P;3.1q.7("6-7",7);1a.67();if(7!==1o){2P=3.4.7H(7,1a,3.4.2a)}if(2P!==1h){1a.48(2P)}3P=3.4.7L(7,1a);if(3P!==1h){1a.1v(3P)}3.1q.1W("6-5A");if(3.4.aJ&&3.3Y()!==1h){3.1a.1v("6-aO")}},19:5(){14 19,1G=1e,7=1o,1c=3,2T=3.7();if(1K.1d===0){11 3.4.12.19()}19=1K[0];if(1K.1d>1){1G=1K[1]}if(3.1A){3.1A.19(19).1u("3W").4O(5(){11 3.1n}).2D(5(i,3j){7=1c.4L(3j);11 1e});3.2u(7);3.4r();if(1G){3.1G({44:7,3h:2T})}}1k{if(!19&&19!==0){3.5s(1G);11}if(3.4.1T===1h){3b 3q 5z("ah 1Z 19() if 1T() is 2g 7N")}3.4.12.19(19);3.4.1T(3.4.12,5(7){1c.4.12.19(!7?"":1c.id(7));1c.2u(7);1c.4r();if(1G){1c.1G({44:7,3h:2T})}})}},2v:5(){3.15.19("");3.1M.19("")},7:5(25){14 7,1G=1e;if(1K.1d===0){7=3.1q.7("6-7");if(7==1h)7=1o;11 7}1k{if(1K.1d>1){1G=1K[1]}if(!25){3.5s(1G)}1k{7=3.7();3.4.12.19(!25?"":3.id(25));3.2u(25);if(1G){3.1G({44:25,3h:7})}}}}});79=61(5C,{74:5(){14 1a=$(1X.5v("1U")).1f({"1t":"6-1a 6-1a-6T"}).3w(["<3S 1t=\'6-2f\'>","  <li 1t=\'6-15-9O\'>","    <1P 1N=\'\' 1t=\'6-5D\'></1P>","    <1z 2o=\'1j\' 8g=\'2O\' aN=\'2O\' aQ=\'2O\' 9R=\'1e\' 1t=\'6-1z\'>","  </li>","</3S>","<1U 1t=\'6-1R 6-1R-6T 6-62-65\'>","   <3S 1t=\'6-1b\'>","   </3S>","</1U>"].5p(""));11 1a},4M:5(){14 4=3.2w.4M.2h(3,1K),1c=3;if(4.12.2r(0).6D.6C()==="1A"){4.1T=5(12,1V){14 7=[];12.1u("3W").4O(5(){11 3.1n&&!3.1B}).2D(5(i,3j){7.1Q(1c.4L(3j))});1V(7)}}1k if("7"in 4){4.1T=4.1T||5(12,1V){14 2G=6Z(12.19(),4.3e,4.6P);14 2z=[];4.1p({30:5(1C,1j,el){14 4K=$.lz(2G,5(id){11 2s(id,4.id(el))}).1d;if(4K){2z.1Q(el)}11 4K},1V:!$.2N(1V)?$.9P:5(){14 88=[];1N(14 i=0;i<2G.1d;i++){14 id=2G[i];1N(14 j=0;j<2z.1d;j++){14 26=2z[j];if(2s(id,4.id(26))){88.1Q(26);2z.6R(j,1);54}}}1V(88)}})}}11 4},4j:5(1g){14 1n=3.1a.1u(".6-15-1g-1s");if(1n.1d&&1g&&1g[0]==1n[0]){}1k{if(1n.1d){3.4.12.1L("1g-lA",1n)}1n.1W("6-15-1g-1s");if(1g&&1g.1d){3.1D();1g.1v("6-15-1g-1s");3.4.12.1L("1g-1n",1g)}}},4d:5(){$("1P[1N=\'"+3.15.1f(\'id\')+"\']").1f(\'1N\',3.4.12.1f("id"));3.2w.4d.2h(3,1K);6p.1Z(3,"43","1q")},7U:5(){14 5P=".6-2f",1q;3.43=3.1a.1u(".6-15-9O");3.1q=1q=3.1a.1u(5P);14 7V=3;3.1q.on("3n",".6-1a:2g(.6-1a-1B) .6-15-1g:2g(.6-3k)",5(e){7V.15[0].1s();7V.4j($(3))});3.15.1f("id","9S"+4A());3.15.3m().1j($("1P[1N=\'"+3.4.12.1f("id")+"\']").1j()).1f(\'1N\',3.15.1f(\'id\'));3.4.12.1s(3.1w(5(){3.1s()}));3.15.on("1z 9T",3.1w(5(){if(3.15.1f(\'2k\')&&3.15.19().1d==0)11;if(!3.2B())11;if(!3.22()){3.2l()}}));3.15.1f("3R",3.55);3.5M=0;3.15.on("6o",3.1w(5(e){if(!3.2B())11;++3.5M;14 1n=1q.1u(".6-15-1g-1s");14 3m=1n.3m(".6-15-1g:2g(.6-3k)");14 4s=1n.4s(".6-15-1g:2g(.6-3k)");14 4J=9Y(3.15);if(1n.1d&&(e.1x==1m.5o||e.1x==1m.5Y||e.1x==1m.4D||e.1x==1m.6i||e.1x==1m.3u)){14 3s=1n;if(e.1x==1m.5o&&3m.1d){3s=3m}1k if(e.1x==1m.5Y){3s=4s.1d?4s:1o}1k if(e.1x===1m.4D){if(3.6B(1n.6h())){3.15.1r(10);3s=3m.1d?3m:4s}}1k if(e.1x==1m.6i){if(3.6B(1n.6h())){3.15.1r(10);3s=4s.1d?4s:1o}}1k if(e.1x==1m.3u){3s=1o}3.4j(3s);1O(e);if(!3s||!3s.1d){3.2l()}11}1k if(((e.1x===1m.4D&&3.5M==1)||e.1x==1m.5o)&&(4J.1I==0&&!4J.1d)){3.4j(1q.1u(".6-15-1g:2g(.6-3k)").6j());1O(e);11}1k{3.4j(1o)}if(3.22()){6k(e.1x){2d 1m.4t:2d 1m.5j:3.8b((e.1x===1m.4t)?-1:1);1O(e);11;2d 1m.3u:3.3t();1O(e);11;2d 1m.5h:3.3t({4n:1l});3.1D();11;2d 1m.5m:3.4G(e);1O(e);11}}if(e.1x===1m.5h||1m.7W(e)||1m.84(e)||e.1x===1m.4D||e.1x===1m.5m){11}if(e.1x===1m.3u){if(3.4.6Y===1e){11}1k if(e.9X||e.9W||e.9U||e.7Y){11}}3.2l();if(e.1x===1m.82||e.1x===1m.86){1O(e)}if(e.1x===1m.3u){1O(e)}}));3.15.on("4F",3.1w(5(e){3.5M=0;3.5x()}));3.15.on("3v",3.1w(5(e){3.1a.1W("6-1a-1S");3.15.1W("6-5y");3.4j(1o);if(!3.22())3.2v();e.9M();3.4.12.1L($.2x("6-3v"))}));3.1a.on("3n",5P,3.1w(5(e){if(!3.2B())11;if($(e.4C).5e(".6-15-1g").1d>0){11}3.4j(1o);3.5L();if(!3.1a.2y("6-1a-1S")){3.4.12.1L($.2x("6-1s"))}3.2l();3.4w();e.5Q()}));3.1a.on("1s",5P,3.1w(5(){if(!3.2B())11;if(!3.1a.2y("6-1a-1S")){3.4.12.1L($.2x("6-1s"))}3.1a.1v("6-1a-1S");3.1i.1v("6-1R-1S");3.5L()}));3.8n();3.4.12.4q();3.2v()},4l:5(){if(3.2w.4l.2h(3,1K)){3.15.24("1B",!3.2B())}},1T:5(){14 7;if(3.4.12.19()===""&&3.4.12.1j()===""){3.2u([]);3.1D();3.2v()}if(3.1A||3.4.12.19()!==""){14 1c=3;3.4.1T.1Z(1o,3.4.12,5(7){if(7!==1h&&7!==1o){1c.2u(7);1c.1D();1c.2v()}})}},2v:5(){14 2k=3.3Y(),3U=3.9Z();if(2k!==1h&&3.4S().1d===0&&3.15.2y("6-5y")===1e){3.15.19(2k).1v("6-5A");3.15.1r(3U>0?3U:3.1a.1Y("1r"))}1k{3.15.19("").1r(10)}},5L:5(){if(3.15.2y("6-5A")){3.15.19("").1W("6-5A")}},4a:5(){3.5L();3.5x();3.2w.4a.2h(3,1K);3.4w();if(3.15.19()===""){if(3.2t!=1h){3.15.19(3.2t);3.15.1A()}}3.3V(1l);if(3.4.3M(3)){3.15.1s()}3.4.12.1L($.2x("6-2l"))},1D:5(){if(!3.22())11;3.2w.1D.2h(3,1K)},1s:5(){3.1D();3.15.1s()},6x:5(){11 3.15.2y("6-5y")},2u:5(7){14 2G=[],2X=[],1c=3;$(7).2j(5(){if(2m(1c.id(3),2G)<0){2G.1Q(1c.id(3));2X.1Q(3)}});7=2X;3.1q.1u(".6-15-1g").3r();$(7).2j(5(){1c.7S(3)});1c.4x()},8a:5(){14 1z=3.15.19();1z=3.4.a9.1Z(3,1z,3.7(),3.1w(3.6W),3.4);if(1z!=1o&&1z!=1h){3.15.19(1z);if(1z.1d>0){3.2l()}}},6W:5(7,1H){if(!3.8m(7)||7.1j===""){11}3.7S(7);3.4.12.1L({2o:"1n",19:3.id(7),1g:7});3.2t=3.4.2t(7,3.15.19());3.2v();3.3V();if(3.1A||!3.4.5B)3.4x(7,1e,3.4.5B===1l);if(3.4.5B){3.1D();3.15.1r(10)}1k{if(3.az()>0){3.15.1r(10);3.5x();if(3.6S()>0&&3.19().1d>=3.6S()){3.3V(1l)}1k{if(3.2t!=1h){3.15.19(3.2t);3.3V();3.15.1A()}}3.3L()}1k{3.1D();3.15.1r(10)}}3.1G({44:7});if(!1H||!1H.4n)3.4w()},4G:5(){3.1D();3.4w()},7S:5(7){14 81=!7.3k,9A=$("<li 1t=\'6-15-1g\'>"+"    <1U></1U>"+"    <a 9z=\'#\' 1t=\'6-15-1g-1D\' 3R=\'-1\'></a>"+"</li>"),9E=$("<li 1t=\'6-15-1g 6-3k\'>"+"<1U></1U>"+"</li>");14 1g=81?9A:9E,id=3.id(7),19=3.4S(),2P,3P;2P=3.4.7H(7,1g.1u("1U"),3.4.2a);if(2P!=1h){1g.1u("1U").lF($("<1U></1U>").3w(2P))}3P=3.4.7L(7,1g.1u("1U"));if(3P!=1h){1g.1v(3P)}if(81){1g.1u(".6-15-1g-1D").on("4B",1O).on("3n lG",3.1w(5(e){if(!3.2B())11;3.6B($(e.4C));3.1q.1u(".6-15-1g-1s").1W("6-15-1g-1s");1O(e);3.1D();3.4w()})).on("1s",3.1w(5(){if(!3.2B())11;3.1a.1v("6-1a-1S");3.1i.1v("6-1R-1S")}))}1g.7("6-7",7);1g.lL(3.43);19.1Q(id);3.4c(19)},6B:5(1n){14 19=3.4S(),7,1E;1n=1n.5e(".6-15-1g");if(1n.1d===0){3b"al lM: "+1n+". lK be .6-15-1g"}7=1n.7("6-7");if(!7){11}14 2U=$.2x("6-lJ");2U.19=3.id(7);2U.1g=7;3.4.12.1L(2U);if(2U.6M()){11 1e}6N((1E=2m(3.id(7),19))>=0){19.6R(1E,1);3.4c(19);if(3.1A)3.4x()}1n.3r();3.4.12.1L({2o:"6-3h",19:3.id(7),1g:7});3.1G({3h:7});11 1l},4x:5(7,3z,6I){14 19=3.4S(),2f=3.1b.1u(".6-1y"),4P=3.1b.1u(".6-1y-7Z-1F"),1c=3;2f.2D(5(i,1g){14 id=1c.id(1g.7("6-7"));if(2m(id,19)>=0){1g.1v("6-1n");1g.1u(".6-1y-2S").1v("6-1n")}});4P.2D(5(i,1g){if(!1g.is(\'.6-1y-2S\')&&1g.1u(".6-1y-2S:2g(.6-1n)").1d===0){1g.1v("6-1n")}});if(3.2R()==-1&&6I!==1e&&3.4.5B===1l){1c.2R(0)}if(!3.4.3K&&!2f.4O(\'.6-1y:2g(.6-1n)\').1d>0){if(!7||7&&!7.20&&3.1b.1u(".6-no-1b").1d===0){if(3N(1c.4.4u,"4u")){3.1b.48("<li 1t=\'6-no-1b\'>"+2b(1c.4.4u,1c.4.12,1c.15.19())+"</li>")}}}},9Z:5(){11 3.1q.1r()-7T(3.15)},5x:5(){14 6X,2Q,3U,8j,3x,70=7T(3.15);6X=a0(3.15)+10;2Q=3.15.1I().2Q;3U=3.1q.1r();8j=3.1q.1I().2Q;3x=3U-(2Q-8j)-70;if(3x<6X){3x=3U-70}if(3x<40){3x=3U-70}if(3x<=0){3x=6X}3.15.1r(lH.lI(3x))},4S:5(){14 19;if(3.1A){19=3.1A.19();11 19===1o?[]:19}1k{19=3.4.12.19();11 6Z(19,3.4.3e,3.4.6P)}},4c:5(19){14 4R;if(3.1A){3.1A.19(19)}1k{4R=[];$(19).2j(5(){if(2m(3,4R)<0)4R.1Q(3)});3.4.12.19(4R.1d===0?"":4R.5p(3.4.3e))}},6K:5(2H,49){14 49=49.59(0),2H=2H.59(0);1N(14 i=0;i<49.1d;i++){1N(14 j=0;j<2H.1d;j++){if(2s(3.4.id(49[i]),3.4.id(2H[j]))){49.6R(i,1);if(i>0){i--}2H.6R(j,1);j--}}}11{44:49,3h:2H}},19:5(19,1G){14 2T,1c=3;if(1K.1d===0){11 3.4S()}2T=3.7();if(!2T.1d)2T=[];if(!19&&19!==0){3.4.12.19("");3.2u([]);3.2v();if(1G){3.1G({44:3.7(),3h:2T})}11}3.4c(19);if(3.1A){3.4.1T(3.1A,3.1w(3.2u));if(1G){3.1G(3.6K(2T,3.7()))}}1k{if(3.4.1T===1h){3b 3q 5z("19() ah be m2 if 1T() is 2g 7N")}3.4.1T(3.4.12,5(7){14 2G=$.7M(7,1c.id);1c.4c(2G);1c.2u(7);1c.2v();if(1G){1c.1G(1c.6K(2T,1c.7()))}})}3.2v()},ac:5(){if(3.1A){3b 3q 5z("m3 of mp is 2g mq a4 a3 4I <1A>. mo 4I <1z 2o=\'6J\'/> mn.")}3.15.1r(0);3.43.4q()},a7:5(){14 19=[],1c=3;3.43.4U();3.43.4T(3.43.2w());3.5x();3.1q.1u(".6-15-1g").2j(5(){19.1Q(1c.4.id($(3).7("6-7")))});3.4c(19);3.1G()},7:5(5G,1G){14 1c=3,2G,2H;if(1K.1d===0){11 3.1q.1F(".6-15-1g").7M(5(){11 $(3).7("6-7")}).2r()}1k{2H=3.7();if(!5G){5G=[]}2G=$.7M(5G,5(e){11 1c.4.id(e)});3.4c(2G);3.2u(5G);3.2v();if(1G){3.1G(3.6K(2H,3.7()))}}}});$.fn.6=5(){14 28=9B.3J.59.1Z(1K,0),4,6,3p,25,3B,ar=["19","4d","22","2l","1D","1s","6x","1a","1i","ac","a7","5a","a6","2q","3L","7","15"],ap=["22","6x","1a","1i"],am=["19","7"],7m={15:"a1"};3.2j(5(){if(28.1d===0||3i(28[0])==="a5"){4=28.1d===0?{}:$.3a({},28[0]);4.12=$(3);if(4.12.2r(0).6D.6C()==="1A"){3B=4.12.24("3B")}1k{3B=4.3B||1e;if("29"in 4){4.3B=3B=1l}}6=3B?3q 1J.4m["1t"].6T():3q 1J.4m["1t"].9v();6.aq(4)}1k if(3i(28[0])==="4o"){if(2m(28[0],ar)<0){3b"mk 3p: "+28[0]}25=1h;6=$(3).7("6");if(6===1h)11;3p=28[0];if(3p==="1a"){25=6.1a}1k if(3p==="1i"){25=6.1i}1k{if(7m[3p])3p=7m[3p];25=6[3p].2h(6,28.59(1))}if(2m(28[0],ap)>=0||(2m(28[0],am)>=0&&28.1d==1)){11 1e}}1k{3b"al 1K 4I 6 ml: "+28}});11(25===1h)?3:25};$.fn.6.7b={1r:"8t",aG:0,5B:1l,6Y:1l,9H:{},ai:{},7l:"",7k:"",at:5(1y,1a,1p,2a){14 2L=[];6r(3.1j(1y),1p.1C,2L,2a);11 2L.5p("")},6P:5(19){11 $.4W(19)},7H:5(7,1a,2a){11 7?2a(3.1j(7)):1h},ag:5(1b,1a,1p){11 1b},af:5(7){11 7.1Y},7L:5(7,1a){11 1h},4z:0,7G:0,4Y:1o,a2:0,id:5(e){11 e==1h?1o:e.id},1j:5(e){if(e&&3.7&&3.7.1j){if($.2N(3.7.1j)){11 3.7.1j(e)}1k{11 e[3.7.1j]}}1k{11 e.1j}},30:5(1C,1j){11 4i(\'\'+1j).6L().2m(4i(\'\'+1C).6L())>=0},3e:",",57:[],a9:a8,2a:8k,ab:1e,7C:1e,7E:5(c){11 c},7D:5(c){11 1o},2t:5(mr,ms){11 1h},ad:\'\',3Q:\'23\',3M:5(ak){14 aj=((\'mx\'in 1J)||(mw.mv>0));if(!aj){11 1l}if(ak.4.4z<0){11 1e}11 1l}};$.fn.6.76=[];$.fn.6.76[\'en\']={8o:5(2z){if(2z===1){11"mt 1y is 9G, mu 9C 4I 1A it."}11 2z+" 1b mj 9G, 9I mi 9J m8 9K m9 4I m7."},4u:5(){11"m6 2z m4"},6Q:5(5d,5b,58){11"ax m5"},6V:5(1z,5E){14 n=5E-1z.1d;11"9L 9C "+n+" or 20 7X"+(n==1?"":"s")},6w:5(1z,9D){14 n=1z.1d-9D;11"9L 9V "+n+" 7X"+(n==1?"":"s")},6l:5(53){11"ma mb mg 1A "+53+" 2J"+(53==1?"":"s")},5q:5(mh){11"ax 20 mf��"},71:5(){11"me��"}};$.3a($.fn.6.7b,$.fn.6.76[\'en\']);$.fn.6.7F={5c:$.2Y,31:{2o:"aE",7n:1e,5J:"aR"}};1J.4m={1p:{2Y:2Y,5R:5R,29:29},mc:{6g:6g,6r:6r,2a:8k,4i:4i},"1t":{"md":5C,"9v":7R,"6T":79}}}(8F));',62,1684,'|||this|opts|function|select2|data||||||||||||||||||||||||||||||||||||||||||||||||||||||||return|element||var|search||||val|container|results|self|length|false|attr|choice|undefined|dropdown|text|else|true|KEY|selected|null|query|selection|width|focus|class|find|addClass|bind|which|result|input|select|disabled|term|close|index|children|triggerChange|options|offset|window|arguments|trigger|focusser|for|killEvent|label|push|drop|active|initSelection|div|callback|removeClass|document|css|call|more|context|opened|top|prop|value|match||args|tags|escapeMarkup|evaluate|style|case|placeholderOption|choices|not|apply|mask|each|placeholder|open|indexOf|enabled|type|event|readonly|get|equal|nextSearchTerm|updateSelection|clearSearch|parent|Event|hasClass|matches|datum|isInterfaceEnabled|above|each2|node|group|ids|old|outerWidth|item|scrollTop|markup|page|isFunction|off|formatted|left|highlight|selectable|oldData|evt|body|change|filtered|ajax|liveRegion|matcher|params|||||||||extend|throw|token|classes|separator|constructor|showSearchInput|removed|typeof|elm|locked|height|prev|click|url|method|new|remove|selectedChoice|selectHighlighted|ENTER|blur|html|searchWidth|scroll|initial|render|multiple|dropWidth|outerHeight|highlighted|sizer|cid|role|propertyObserver|prototype|createSearchChoice|positionDropdown|shouldFocusInput|checkFormatter|resultsSelector|cssClass|createSearchChoicePosition|tabindex|ul|def|maxWidth|updateResults|option|process|getPlaceholder|range||findHighlightableChoices|_sync|searchContainer|added|span|||append|current|opening|aria|setVal|destroy|chosen|getPlaceholderOption|showSearch|resultsPage|stripDiacritics|selectChoice|touchstart|enableInterface|Select2|noFocus|string|ajaxUrl|hide|setPlaceholder|next|UP|formatNoMatches|template|focusSearch|postprocessResults|timeout|minimumResultsForSearch|nextUid|mousedown|target|BACKSPACE|collection|keyup|cancel|autofocus|to|pos|is_match|optionToData|prepareOpts|details|filter|compound|stopPropagation|unique|getVal|appendTo|show|idSuffix|trim|dropLeft|maximumInputLength|auto|resize|setTimeout|dropHeight|limit|break|elementTabIndex|substring|tokenSeparators|errorThrown|slice|enable|textStatus|transport|jqXHR|closest|mousemove|deltaY|TAB|replace|DOWN|key|syncCssClasses|ESC|firstOption|LEFT|join|formatLoadMore|quietMillis|clear|tmp|list|createElement|handler|resizeSearch|focused|Error|default|closeOnSelect|AbstractSelect2|offscreen|min|innerContainer|values|child|dropTop|dataType|highlightUnderEvent|clearPlaceholder|keydowns|removeHighlight|split|selector|preventDefault|local|isArray|maxSelSize|rb|loadMoreIfNeeded|topOffset|obj|RIGHT|changeDirection|viewPortRight|clazz|display|setSelectionRange|createTextRange|none|len|empty|scrollBarDimensions|activeElement|bodyOffset|toggleClass|title|elementLabel|bottom|_enabled|debounce|first|DELETE|last|switch|formatSelectionTooBig|orient|resultsListNode|keydown|cleanupJQueryElements|_readonly|markMatch|lastMousePosition|observer|before|attrs|formatInputTooLong|isFocused|lastpos|count|replacements|unselect|toLowerCase|tagName|formatter|ctx|dupe|adapted|noHighlightUpdate|hidden|buildChangeDetails|toUpperCase|isDefaultPrevented|while|dataItem|transformVal|formatAjaxError|splice|getMaximumSelectionSize|multi|populate|formatInputTooShort|onSelect|minimumWidth|openOnEnter|splitVal|sideBorderPadding|formatSearching|abbr|dest|createContainer|installKeyUpChangeEvent|locales|viewportBottom|isPlaceholderOptionSelected|MultiSelect2|scrollHeight|defaults|String|tl|removeData|windowHeight|reinsertElement|countResults|windowWidth|that|dropdownCssClass|containerCssClass|methodsMap|cache|array|populateResults|queryCount|queryNumber|below|delta|lastTerm|u03B9|u03C5|postRender|_touchMoved|presentation|containerEventName|sel|selectOnBlur|adaptDropdownCssClass|adaptContainerCssClass|ajaxDefaults|minimumInputLength|formatSelection|clearTouchMoved|removeAttr|clearDropdownAlignmentPreference|formatSelectionCssClass|map|defined|depth|_touchEvent|containerId|SingleSelect2|addSelectedChoice|getSideBorderPadding|initContainer|_this|isControl|character|metaKey|with||enableChoice|PAGE_UP|SuperClass|isFunctionKey|touchend|PAGE_DOWN|triggered|ordered|nodes|tokenize|moveHighlight|isObject|enoughRoomBelow|enoughRoomAbove|dataText|autocomplete|AE|idKey|containerLeft|defaultEscapeMarkup|enabledInterface|triggerSelect|initContainerWidth|formatMatches|orientationchange|mouseup|installDebouncedScroll|debounced|copy|mousewheel|transform|dim|parents|must|add|select2Tags|u03C9|counter|u03A5|u0399|jQuery|ensureHighlightVisible|optgroup|detachEvent|str|MEASURE_SCROLLBAR_TEMPLATE|DIACRITICS|DZ|measureScrollbar|select2Event|selectionStart|onpropertychange|adapter|clientHeight|mutations|position|src|textTransform|enoughRoomOnRight|original|selectCallback|formatterName|jsonpCallback||deprecated|childDatum|abort|Dz|clearTimeout|aboveNow|replace_map|isFunc|letterSpacing|enoughRoomOnLeft|pageX|shouldOpen|isVisible|scrollLeft|notify|pageY|installFilteredMouseMove|monitorSource|threshold|accessible|createRange|methods|fontFamily|fontStyle|fontWeight|attachEvent|fontSize|func|single|10000px|touchmove|error|href|enabledItem|Array|enter|max|disabledItem|AV|available|containerCss|use|and|arrow|Please|stopImmediatePropagation|ALT|field|noop|CTRL|spellcheck|s2id_autogen|paste|shiftKey|delete|ctrlKey|altKey|getCursorInfo|getMaxSearchWidth|measureTextWidth|externalSearch|maximumSelectionSize|attached|when|object|disable|onSortEnd|defaultTokenizer|tokenizer||blurOnChange|onSortStart|searchInputPlaceholder||formatResultCssClass|sortResults|cannot|dropdownCss|supportsTouchEvents|instance|Invalid|propertyMethods|||valueMethods|init|allowedMethods||formatResult|||touchMoved|Loading||countSelectableResults|collapse|hasError|detach|originalTitle|GET|loaded|loadMorePadding|killEventImmediately|items|allowClear|searching|SHIFT|resolve|autocorrect|allowclear|resolveContainerWidth|autocapitalize|json|u01D7|u01D3|uA74C|u01D5|uA74A|u01D9|u019F|u01DB|u016E|u1EE6|u0170|u01A2|uA74E|OI|u00DA|u00D9|u1E17|OO|u00DB|u0168|u1E7A|u016C||u016A|u1E78|u0214|u00DC|u1EEA|u1EDA|u1EDC|u1EE0|u1EDE|u1EE4|u1EE2|u1E72|u0172|u1E76|u020E|u1EBD|u0113|u01A0|u1ECC|u1EF0|u00D8|uFF35|u01FE|u01AF|u0186|u1EE8|u01EC|u1E15|u1EEC|u1ED8|u1EEE|u01EA|u0216|u023E|uA754|uA752|uA782|uA7A6|uA75A|u024C|u2C64|u24C8|uA750|u015A|u1E64|u1E9E|uFF33|u2C63|u01A4|u1E5E|u0156|u0154|u1E58|uFF32|u24C7|uA758|u024A|u0158|uA756|uFF31|u24C6|u1E5C|u1E5A|u0210|u0212|u015C|u1E60|u1E70|u1E6E||u0162|u021A|u0164|u1E6C|OU|u0166|uA728|TZ|uA786|u0222|u01AC|u01AE|u1E6A|uFF34|u1E66|u1E62|u0160|uFF30|u1E56|u1E54|u1E68|u0218|uA784|u24C9|uA7A8|u24C5|u015E|u2C7E|u24CA|uFF37|u1E92|u1E94|u01B5|uA737|uA739|uA73B|u017D|uA735|u01E3|u01FD|u00E6|uA733|uA762|u2C6B|u0224|u2C7F|u017B|u1E90|u1EF6|u1EF4|uFF42|u0178|u1E8E|u1EF8|u0232|u24D1|u01B3|u0179|uA73D|uFF3A|u24CF|u024E|u1EFE|u0250|u2C65|u1EB1|u0103|u0101|u1EAF|u1EB5|u0227|u1EB3|u00E3|u1EA9||u020C|u00E1|u00E2|u1EA7|u1EA5|u1EAB|u00E0|u01E1|u00E4|u1EAD|u1EA1|uFF41|u24D0|u1EB7|u0105|u1E01|u0203|u0201|u01DF|u1E9A|u1EA3|u00E5|u01CE|u01FB|u1E03|u0176|u01F3|uA77A|u1E80|u24CC|VY|u0245|uA760|u0257|u0256|u1E13|u1E11|u0174|u1E0F|u0111|u018C|u1E82|uA75E|u01B2|u1EC5|u1EBF|u1EC1||||u1EC3|uFF36|u0244|u24CB|u1E7C|u1E7E|u24D4|u01C6|uFF45||u00E8|u00EA|u00E9|u1E0D|u010F|u0109|u0107|u1EF2|u010B|uFF39|u1E8C|u24CE|uFF43|u24D2|u1E05|u00DD|u1E07|u0180|u0253|u0183|u010D|u1E8A|u1E88|u24D3|u2184|u1E84|uFF44|u1E0B|u1E86|uA73F|u023C|u24CD|uFF38|u2C72|u00E7|u0188|u1E09|u1E74|u1E1C|u01F1|u01C4|SPACE|uA779|u0189|u018B|u018A|u01F2|u0115|u00C9|u00CA|u00C8||uFF25|u01C5|u24BA|u0110|u1E0E|u023B|uA73E|u0187|u1E08|u010C|u00C7|u24B9|uFF24|u1E10|u1E12|u1E0C|HOME|u1E0A|u010E|u1EC0|u1EBE|u0190|u018E|u1E1A|u1E18|u0228|u0118|u24BB|uFF26|uFF27|u01F4|u24BC|uA77B|u1E1E|u0191|u1EC6|u1EB8|u0112|u1E14|strict|u1EBC|u1EC4|u1EC2|u1E16|u0114|u0204|u0206|u011A|u1EBA|u0116|u00CB|u010A|u0108|u01FC|u1EB2|u01E2|u00C6|u0226|uA732|AA|uA734|u1EB4|u1EB0|u0102|AU|u1EAE|AO||uA736|u01E0|u00C4|u01FA|u00C5|u01CD|u0200|u0202|u1EA0|u1EA2|u1EAC|u023A|u2C6F|u0104|u01DE|u1EB6|u1E00|u0100|u00C3|u1E04|u1E06|112|123|scrollbar|measure|u0243|isArrow|uFF23|u0106|u24B8|END|u0182|u0181|u24B6|uFF21|uA73A|uA73C|uA738|u1EA4|u1EA8|u1EAA|u1EA6|u00C2||uFF22|u1E02|u00C0|u24B7|AY|u00C1|u011C|u1E20|u019C|u24C3|uFF2E|u2C6E|u1E42|u1E3E|u1E40|u01F8|u0143|u0145|u1E4A||u1E46|u0147|u00D1|u1E44|uFF2D|u24C2|u023D|u2C62|u0141|u1E3A|u013B|u1E3C|u2C60|uA748|u01C8|Lj|LJ|u01C7|uA746|uA780|u1E48|u0220|u014C|u1E50|u1E4E|u022C|u00D5|u1E4C|u1E52|u014E|u1ECE|u0150|u022A|u00D6|u022E|u0230|u1ED4|u1ED6|NJ|u01CB|u01CA|uA7A4|u019D||uA790||Nj|u24C4|u1ED2|u1ED0|u00D4|u00D3|uFF2F||u00D2|u1E38|u1E36|u2C75|||uA78D|u24BE|u2C67|u0126|u1E28|u1E2A|uFF29|u00CC|u012C|u0130|u012A|u0128|u00CD|u00CE|u1E24|u021E|u01E4|u0193|u0122|u01E6|u011E|u0120|uA7A0|uA77D|u1E22|u1E26|u0124|uFF28|uA77E|u24BD|u00CF|u1E2E|u2C69|uA740|u0198|u1E34|u1E32|u0136|uA742|uA744|u0139|u013D|u013F|uFF2C|uA7A2|u24C1|u01E8|u1E30|u1ECA|u012E|u020A|u0208|u1EC8|u01CF|u1E2C|u0197|u24C0|uFF2B|u0248|u0134|u24BF|uFF2A|u01D1|u1EE7|uFF59|u1EF3|u24E8|u1E8D|uFF58|u1E8B|u00FD|u0177|u1EF7|u1E99|u00FF|u1E8F|u1EF9|u0233|u24E7|u2C73|u24E6|uFF57|vy|uA761|uA75F|u028C|u1E81|u1E83|u1E98|u1E89|u1E85|u1E87|u0175|u1EF5|u01B4|u0389|u0397|u0395|u0388|u0386|u0391|u038A|u03AA|u038F|u03A9|u03AB|u038E|u038C|u039F|uA763|u2C6C|u017A|u1E91|uFF5A|u24E9|u024F|u1EFF|u017C|u017E|u0225|u0240|u01B6|u1E95|u1E93|u028B|u1E7F|u01AD|u0288|u0167|u1E6F|u0163|u1E71|u2C66|uA787|u00F9|u00FA|uFF55|u24E4|uA729|tz|u021B|u1E6D|u023F|uA7A9|u015F|u0219|u1E63|u1E69|uA785|u1E9B|u1E97|u0165|u1E6B|uFF54|u24E3|u00FB|u0169|u1EF1|u1EE5|u1EED|u1EEF|u1EEB|u1EE9|u1E73|u0173|uFF56|u1E7D|u24E5|u0289|u1E77|u1E75|u01B0|u0217|u00FC|||u01DC|u016D|u1E7B|u1E79|u016B|u01D8|u0117|u01D4|u0215||u0171|u016F|u01DA|u03AC|u03B1|grep|deselected|searchbox|clearing|229|keyCode|replaceWith|dblclick|Math|floor|removing|Must|insertBefore|argument|_search|owns|javascript|void|activedescendant|static|selecting|dropdownAutoWidth|160|haspopup|listbox|labelledby|expanded|combobox|button|called|Sorting|found|failed|No|navigate|down|keys|You|can|util|abstract|Searching�|results�|only|pageNumber|up|are|Unknown|plugin||instead|Attach|elements|supported|selectedObject|currentSearchTerm|One|press|msMaxTouchPoints|navigator|ontouchstart|subtree|attributes|offsetHeight|selectionEnd|offsetWidth|clientWidth|u0000|u007E|moveStart|currentStyle|amp|quot|nowrap|whiteSpace|getComputedStyle|absolute|createTextNode|u03C3|u03AF|u03CA|u03B7|u03AE|u03AD|u03B5|u0390|u03CC|u03B0|u03C2|u03CB|u03CD|u03BF|100|success|both|attribute|specified|sub|dept|unselectable|unshift|invalid|MozMutationObserver|observe|WebKitMutationObserver|MutationObserver|custom|allowed||Option|live|polite|status||Object|hasOwnProperty|falsy|s2id_|autogen|maxlength|disconnect|focusin|deltaX|_|u1E67|u01D6|u0137|u1E35|u1E33|u01E9|uFF4B|u1E31|u0199|u2C6A|u24DB|uFF4C|uA7A3|uA745|uA741|u24DA|u0249|u1ECB|u012F|u020B|u0209|u1EC9|u01D0|u1E2D|u0268|u0135|u01F0|uFF4A|u24D9|u0131|u0140|u013A|u1E41|u1E43|u1E3F|uFF4D|u01C9|u24DC|u0271|u026F|u0144|u00F1||u01F9|uFF4E||u24DD|uA747|uA781|u013C|||u1E3D|u1E39||u1E37|u013E||u1E3B|u017F|u2C61|uA749|u026B|u019A|u0142|u1E2F|u00EF|uA77C|u24D6|u0192|u1E1F|u24D5|uFF46|uFF47|u01F5|u0121|u01E7|u011F|u1E21|u011D|u01DD|u025B|u0207|u1EB9|u0205|u011B|u00EB|u1EBB|u1EC7|u0229|u1E1B|u0247|u1E19|u0119|u1E1D|u0123|u01E5|u0195|u24D8|u0265|u2C76||u0127|u2C68|uFF49|u00EC|u012B|u012D|u0129|u00EE|u00ED|u1E96|u1E2B|uA77F|u24D7|u1D79|uA7A1|u0260||uFF48|u0125|u1E25||u1E29|u021F|u1E27|u1E23|u1E45|uA743|u00F8|u01FF|uA75B|uA7A7|u01EB|u01ED|u0254|u027D|u01A3|u024D|u0275|uA74D|uA74B|u1ED9|u1ECD|u24E2|u020D|u01D2|u0151|u1ECF|u020F|u01A1|uA783|u1EE3|u1EDF|u1EE1|u1EDD|u1E5F|u0157|u1D7D|uA751|u01A5|u1E57|u1E55|uA759|uA753|u024B|uA757|uFF51|u24E0|uA755|uFF50|u24DF|u0213|u0211|u0148|u1E5B|u1E5D|u0159|u1E59|u24E1|uA74F|uFF52|u0155|u0223|uFF53|u1EDB|u00F3|u00DF|u00F2|uFF4F|u24DE|u1ED3|u1ED1|u1E4D|u00F5|u1ED5|u1ED7|u01CC|uA7A5|u1E4B|u0146|u1E47|u0161|u1E49|u1E61|uA791|u0149|u0272|u019E|u022D|u00F4|u0231|u014F|u015B|u1E65|u022F|u015D|u00F6|u1E53|u1E51|u1E4F|u014D|u022B'.split('|'),0,{}))
+!function(e){"undefined"==typeof e.fn.each2&&e.extend(e.fn,{each2:function(t){for(var s=e([0]),i=-1,n=this.length;++i<n&&(s.context=s[0]=this[i])&&t.call(s[0],i,s)!==!1;);return this}})}(jQuery),function(e,t){"use strict";function s(t){var s=e(document.createTextNode(""));t.before(s),s.before(t),s.remove()}function i(e){function t(e){return j[e]||e}return e.replace(/[^\u0000-\u007E]/g,t)}function n(e,t){for(var s=0,i=t.length;s<i;s+=1)if(a(e,t[s]))return s;return-1}function o(){var t=e(z);t.appendTo(document.body);var s={width:t.width()-t[0].clientWidth,height:t.height()-t[0].clientHeight};return t.remove(),s}function a(e,s){return e===s||e!==t&&s!==t&&(null!==e&&null!==s&&(e.constructor===String?e+""==s+"":s.constructor===String&&s+""==e+""))}function r(e,t,s){var i,n,o;if(null===e||e.length<1)return[];for(i=e.split(t),n=0,o=i.length;n<o;n+=1)i[n]=s(i[n]);return i}function c(e){return e.outerWidth(!1)-e.width()}function l(s){var i="keyup-change-value";s.on("keydown",function(){e.data(s,i)===t&&e.data(s,i,s.val())}),s.on("keyup",function(){var n=e.data(s,i);n!==t&&s.val()!==n&&(e.removeData(s,i),s.trigger("keyup-change"))})}function h(s){s.on("mousemove",function(s){var i=F;i!==t&&i.x===s.pageX&&i.y===s.pageY||e(s.target).trigger("mousemove-filtered",s)})}function u(e,s,i){i=i||t;var n;return function(){var t=arguments;window.clearTimeout(n),n=window.setTimeout(function(){s.apply(i,t)},e)}}function d(e,t){var s=u(e,function(e){t.trigger("scroll-debounced",e)});t.on("scroll",function(e){n(e.target,t.get())>=0&&s(e)})}function p(e){e[0]!==document.activeElement&&window.setTimeout(function(){var t,s=e[0],i=e.val().length;e.focus();var n=s.offsetWidth>0||s.offsetHeight>0;n&&s===document.activeElement&&(s.setSelectionRange?s.setSelectionRange(i,i):s.createTextRange&&(t=s.createTextRange(),t.collapse(!1),t.select()))},0)}function f(t){t=e(t)[0];var s=0,i=0;if("selectionStart"in t)s=t.selectionStart,i=t.selectionEnd-s;else if("selection"in document){t.focus();var n=document.selection.createRange();i=document.selection.createRange().text.length,n.moveStart("character",-t.value.length),s=n.text.length-i}return{offset:s,length:i}}function g(e){e.preventDefault(),e.stopPropagation()}function m(e){e.preventDefault(),e.stopImmediatePropagation()}function v(t){if(!M){var s=t[0].currentStyle||window.getComputedStyle(t[0],null);M=e(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:s.fontSize,fontFamily:s.fontFamily,fontStyle:s.fontStyle,fontWeight:s.fontWeight,letterSpacing:s.letterSpacing,textTransform:s.textTransform,whiteSpace:"nowrap"}),M.attr("class","select2-sizer"),e(document.body).append(M)}return M.text(t.val()),M.width()}function w(t,s,i){var n,o,a=[];n=e.trim(t.attr("class")),n&&(n=""+n,e(n.split(/\s+/)).each2(function(){0===this.indexOf("select2-")&&a.push(this)})),n=e.trim(s.attr("class")),n&&(n=""+n,e(n.split(/\s+/)).each2(function(){0!==this.indexOf("select2-")&&(o=i(this),o&&a.push(o))})),t.attr("class",a.join(" "))}function b(e,t,s,n){var o=i(e.toUpperCase()).indexOf(i(t.toUpperCase())),a=t.length;return o<0?void s.push(n(e)):(s.push(n(e.substring(0,o))),s.push("<span class='select2-match'>"),s.push(n(e.substring(o,o+a))),s.push("</span>"),void s.push(n(e.substring(o+a,e.length))))}function C(e){var t={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})}function S(s){var i,n=null,o=s.quietMillis||100,a=s.url,r=this;return function(c){window.clearTimeout(i),i=window.setTimeout(function(){var i=s.data,o=a,l=s.transport||e.fn.select2.ajaxDefaults.transport,h={type:s.type||"GET",cache:s.cache||!1,jsonpCallback:s.jsonpCallback||t,dataType:s.dataType||"json"},u=e.extend({},e.fn.select2.ajaxDefaults.params,h);i=i?i.call(r,c.term,c.page,c.context):null,o="function"==typeof o?o.call(r,c.term,c.page,c.context):o,n&&"function"==typeof n.abort&&n.abort(),s.params&&(e.isFunction(s.params)?e.extend(u,s.params.call(r)):e.extend(u,s.params)),e.extend(u,{url:o,dataType:s.dataType,data:i,success:function(e){var t=s.results(e,c.page,c);c.callback(t)},error:function(e,t,s){var i={hasError:!0,jqXHR:e,textStatus:t,errorThrown:s};c.callback(i)}}),n=l.call(r,u)},o)}}function y(t){var s,i,n=t,o=function(e){return""+e.text};e.isArray(n)&&(i=n,n={results:i}),e.isFunction(n)===!1&&(i=n,n=function(){return i});var a=n();return a.text&&(o=a.text,e.isFunction(o)||(s=a.text,o=function(e){return e[s]})),function(t){var s,i=t.term,a={results:[]};return""===i?void t.callback(n()):(s=function(n,a){var r,c;if(n=n[0],n.children){r={};for(c in n)n.hasOwnProperty(c)&&(r[c]=n[c]);r.children=[],e(n.children).each2(function(e,t){s(t,r.children)}),(r.children.length||t.matcher(i,o(r),n))&&a.push(r)}else t.matcher(i,o(n),n)&&a.push(n)},e(n().results).each2(function(e,t){s(t,a.results)}),void t.callback(a))}}function x(s){var i=e.isFunction(s);return function(n){var o=n.term,a={results:[]},r=i?s(n):s;e.isArray(r)&&(e(r).each(function(){var e=this.text!==t,s=e?this.text:this;(""===o||n.matcher(o,s))&&a.results.push(e?this:{id:this,text:this})}),n.callback(a))}}function E(t,s){if(e.isFunction(t))return!0;if(!t)return!1;if("string"==typeof t)return!0;throw new Error(s+" must be a string, function, or falsy value")}function T(t,s){if(e.isFunction(t)){var i=Array.prototype.slice.call(arguments,2);return t.apply(s,i)}return t}function O(t){var s=0;return e.each(t,function(e,t){t.children?s+=O(t.children):s++}),s}function P(e,s,i,n){var o,r,c,l,h,u=e,d=!1;if(!n.createSearchChoice||!n.tokenSeparators||n.tokenSeparators.length<1)return t;for(;;){for(r=-1,c=0,l=n.tokenSeparators.length;c<l&&(h=n.tokenSeparators[c],r=e.indexOf(h),!(r>=0));c++);if(r<0)break;if(o=e.substring(0,r),e=e.substring(r+h.length),o.length>0&&(o=n.createSearchChoice.call(this,o,s),o!==t&&null!==o&&n.id(o)!==t&&null!==n.id(o))){for(d=!1,c=0,l=s.length;c<l;c++)if(a(n.id(o),n.id(s[c]))){d=!0;break}d||i(o)}}return u!==e?e:void 0}function I(){var t=this;e.each(arguments,function(e,s){t[s].remove(),t[s]=null})}function k(t,s){var i=function(){};return i.prototype=new t,i.prototype.constructor=i,i.prototype.parent=t.prototype,i.prototype=e.extend(i.prototype,s),i}if(window.Select2===t){var A,R,D,H,M,L,N,F={x:0,y:0},U={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(e){switch(e=e.which?e.which:e){case U.LEFT:case U.RIGHT:case U.UP:case U.DOWN:return!0}return!1},isControl:function(e){var t=e.which;switch(t){case U.SHIFT:case U.CTRL:case U.ALT:return!0}return!!e.metaKey},isFunctionKey:function(e){return e=e.which?e.which:e,e>=112&&e<=123}},z="<div class='select2-measure-scrollbar'></div>",j={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};L=e(document),H=function(){var e=1;return function(){return e++}}(),A=k(Object,{bind:function(e){var t=this;return function(){e.apply(t,arguments)}},init:function(s){var i,n,a=".select2-results";this.opts=s=this.prepareOpts(s),this.id=s.id,s.element.data("select2")!==t&&null!==s.element.data("select2")&&s.element.data("select2").destroy(),this.container=this.createContainer(),this.liveRegion=e(".select2-hidden-accessible"),0==this.liveRegion.length&&(this.liveRegion=e("<span>",{role:"status","aria-live":"polite"}).addClass("select2-hidden-accessible").appendTo(document.body)),this.containerId="s2id_"+(s.element.attr("id")||"autogen"+H()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",s.element.attr("title")),this.body=e(document.body),w(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",s.element.attr("style")),this.container.css(T(s.containerCss,this.opts.element)),this.container.addClass(T(s.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container).on("click.select2",g),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),w(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(T(s.dropdownCssClass,this.opts.element)),this.dropdown.data("select2",this),this.dropdown.on("click",g),this.results=i=this.container.find(a),this.search=n=this.container.find("input.select2-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",g),h(this.results),this.dropdown.on("mousemove-filtered",a,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",a,this.bind(function(e){this._touchEvent=!0,this.highlightUnderEvent(e)})),this.dropdown.on("touchmove",a,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",a,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(e){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),d(80,this.results),this.dropdown.on("scroll-debounced",a,this.bind(this.loadMoreIfNeeded)),e(this.container).on("change",".select2-input",function(e){e.stopPropagation()}),e(this.dropdown).on("change",".select2-input",function(e){e.stopPropagation()}),e.fn.mousewheel&&i.mousewheel(function(e,t,s,n){var o=i.scrollTop();n>0&&o-n<=0?(i.scrollTop(0),g(e)):n<0&&i.get(0).scrollHeight-i.scrollTop()+n<=i.height()&&(i.scrollTop(i.get(0).scrollHeight-i.height()),g(e))}),l(n),n.on("keyup-change input paste",this.bind(this.updateResults)),n.on("focus",function(){n.addClass("select2-focused")}),n.on("blur",function(){n.removeClass("select2-focused")}),this.dropdown.on("mouseup",a,this.bind(function(t){e(t.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(t),this.selectHighlighted(t))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(e){e.stopPropagation()}),this.nextSearchTerm=t,e.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==s.maximumInputLength&&this.search.attr("maxlength",s.maximumInputLength);var r=s.element.prop("disabled");r===t&&(r=!1),this.enable(!r);var c=s.element.prop("readonly");c===t&&(c=!1),this.readonly(c),N=N||o(),this.autofocus=s.element.prop("autofocus"),s.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",s.searchInputPlaceholder)},destroy:function(){var e=this.opts.element,s=e.data("select2"),i=this;this.close(),e.length&&e[0].detachEvent&&i._sync&&e.each(function(){i._sync&&this.detachEvent("onpropertychange",i._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,s!==t&&(s.container.remove(),s.liveRegion.remove(),s.dropdown.remove(),e.show().removeData("select2").off(".select2").prop("autofocus",this.autofocus||!1),this.elementTabIndex?e.attr({tabindex:this.elementTabIndex}):e.removeAttr("tabindex"),e.show()),I.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(e){return e.is("option")?{id:e.prop("value"),text:e.text(),element:e.get(),css:e.attr("class"),disabled:e.prop("disabled"),locked:a(e.attr("locked"),"locked")||a(e.data("locked"),!0)}:e.is("optgroup")?{text:e.attr("label"),children:[],element:e.get(),css:e.attr("class")}:void 0},prepareOpts:function(s){var i,n,o,c,l=this;if(i=s.element,"select"===i.get(0).tagName.toLowerCase()&&(this.select=n=s.element),n&&e.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in s)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),s=e.extend({},{populateResults:function(i,n,o){var a,r=this.opts.id,c=this.liveRegion;(a=function(i,n,h){var u,d,p,f,g,m,v,w,b,C;i=s.sortResults(i,n,o);var S=[];for(u=0,d=i.length;u<d;u+=1)p=i[u],g=p.disabled===!0,f=!g&&r(p)!==t,m=p.children&&p.children.length>0,v=e("<li></li>"),v.addClass("select2-results-dept-"+h),v.addClass("select2-result"),v.addClass(f?"select2-result-selectable":"select2-result-unselectable"),g&&v.addClass("select2-disabled"),m&&v.addClass("select2-result-with-children"),v.addClass(l.opts.formatResultCssClass(p)),v.attr("role","presentation"),w=e(document.createElement("div")),w.addClass("select2-result-label"),w.attr("id","select2-result-label-"+H()),w.attr("role","option"),C=s.formatResult(p,w,o,l.opts.escapeMarkup),C!==t&&(w.html(C),v.append(w)),m&&(b=e("<ul></ul>"),b.addClass("select2-result-sub"),a(p.children,b,h+1),v.append(b)),v.data("select2-data",p),S.push(v[0]);n.append(S),c.text(s.formatMatches(i.length))})(n,i,0)}},e.fn.select2.defaults,s),"function"!=typeof s.id&&(o=s.id,s.id=function(e){return e[o]}),e.isArray(s.element.data("select2Tags"))){if("tags"in s)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+s.element.attr("id");s.tags=s.element.data("select2Tags")}if(n?(s.query=this.bind(function(e){var s,n,o,a={results:[],more:!1},r=e.term;o=function(t,s){var i;t.is("option")?e.matcher(r,t.text(),t)&&s.push(l.optionToData(t)):t.is("optgroup")&&(i=l.optionToData(t),t.children().each2(function(e,t){o(t,i.children)}),i.children.length>0&&s.push(i))},s=i.children(),this.getPlaceholder()!==t&&s.length>0&&(n=this.getPlaceholderOption(),n&&(s=s.not(n))),s.each2(function(e,t){o(t,a.results)}),e.callback(a)}),s.id=function(e){return e.id}):"query"in s||("ajax"in s?(c=s.element.data("ajax-url"),c&&c.length>0&&(s.ajax.url=c),s.query=S.call(s.element,s.ajax)):"data"in s?s.query=y(s.data):"tags"in s&&(s.query=x(s.tags),s.createSearchChoice===t&&(s.createSearchChoice=function(t){return{id:e.trim(t),text:e.trim(t)}}),s.initSelection===t&&(s.initSelection=function(t,i){var n=[];e(r(t.val(),s.separator,s.transformVal)).each(function(){var t={id:this,text:this},i=s.tags;e.isFunction(i)&&(i=i()),e(i).each(function(){if(a(this.id,t.id))return t=this,!1}),n.push(t)}),i(n)}))),"function"!=typeof s.query)throw"query function not defined for Select2 "+s.element.attr("id");if("top"===s.createSearchChoicePosition)s.createSearchChoicePosition=function(e,t){e.unshift(t)};else if("bottom"===s.createSearchChoicePosition)s.createSearchChoicePosition=function(e,t){e.push(t)};else if("function"!=typeof s.createSearchChoicePosition)throw"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";return s},monitorSource:function(){var s,i=this.opts.element,n=this;i.on("change.select2",this.bind(function(e){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),this._sync=this.bind(function(){var e=i.prop("disabled");e===t&&(e=!1),this.enable(!e);var s=i.prop("readonly");s===t&&(s=!1),this.readonly(s),this.container&&(w(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(T(this.opts.containerCssClass,this.opts.element))),this.dropdown&&(w(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(T(this.opts.dropdownCssClass,this.opts.element)))}),i.length&&i[0].attachEvent&&i.each(function(){this.attachEvent("onpropertychange",n._sync)}),s=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,s!==t&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new s(function(t){e.each(t,n._sync)}),this.propertyObserver.observe(i.get(0),{attributes:!0,subtree:!1}))},triggerSelect:function(t){var s=e.Event("select2-selecting",{val:this.id(t),object:t,choice:t});return this.opts.element.trigger(s),!s.isDefaultPrevented()},triggerChange:function(t){t=t||{},t=e.extend({},t,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(t),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},isInterfaceEnabled:function(){return this.enabledInterface===!0},enableInterface:function(){var e=this._enabled&&!this._readonly,t=!e;return e!==this.enabledInterface&&(this.container.toggleClass("select2-container-disabled",t),this.close(),this.enabledInterface=e,!0)},enable:function(e){e===t&&(e=!0),this._enabled!==e&&(this._enabled=e,this.opts.element.prop("disabled",!e),this.enableInterface())},disable:function(){this.enable(!1)},readonly:function(e){e===t&&(e=!1),this._readonly!==e&&(this._readonly=e,this.opts.element.prop("readonly",e),this.enableInterface())},opened:function(){return!!this.container&&this.container.hasClass("select2-dropdown-open")},positionDropdown:function(){var t,s,i,n,o,a=this.dropdown,r=this.container,c=r.offset(),l=r.outerHeight(!1),h=r.outerWidth(!1),u=a.outerHeight(!1),d=e(window),p=d.width(),f=d.height(),g=d.scrollLeft()+p,m=d.scrollTop()+f,v=c.top+l,w=c.left,b=v+u<=m,C=c.top-u>=d.scrollTop(),S=a.outerWidth(!1),y=function(){return w+S<=g},x=function(){return c.left+g+r.outerWidth(!1)>S},E=a.hasClass("select2-drop-above");E?(s=!0,!C&&b&&(i=!0,s=!1)):(s=!1,!b&&C&&(i=!0,s=!0)),i&&(a.hide(),c=this.container.offset(),l=this.container.outerHeight(!1),h=this.container.outerWidth(!1),u=a.outerHeight(!1),g=d.scrollLeft()+p,m=d.scrollTop()+f,v=c.top+l,w=c.left,S=a.outerWidth(!1),a.show(),this.focusSearch()),this.opts.dropdownAutoWidth?(o=e(".select2-results",a)[0],a.addClass("select2-drop-auto-width"),a.css("width",""),S=a.outerWidth(!1)+(o.scrollHeight===o.clientHeight?0:N.width),S>h?h=S:S=h,u=a.outerHeight(!1)):this.container.removeClass("select2-drop-auto-width"),"static"!==this.body.css("position")&&(t=this.body.offset(),v-=t.top,w-=t.left),!y()&&x()&&(w=c.left+this.container.outerWidth(!1)-S),n={left:w,width:h},s?(n.top=c.top-u,n.bottom="auto",this.container.addClass("select2-drop-above"),a.addClass("select2-drop-above")):(n.top=v,n.bottom="auto",this.container.removeClass("select2-drop-above"),a.removeClass("select2-drop-above")),n=e.extend(n,T(this.opts.dropdownCss,this.opts.element)),a.css(n)},shouldOpen:function(){var t;return!this.opened()&&(this._enabled!==!1&&this._readonly!==!0&&(t=e.Event("select2-opening"),this.opts.element.trigger(t),!t.isDefaultPrevented()))},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return!!this.shouldOpen()&&(this.opening(),L.on("mousemove.select2Event",function(e){F.x=e.pageX,F.y=e.pageY}),!0)},opening:function(){var t,i=this.containerEventName,n="scroll."+i,o="resize."+i,a="orientationchange."+i;this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.clearDropdownAlignmentPreference(),this.dropdown[0]!==this.body.children().last()[0]&&this.dropdown.detach().appendTo(this.body),t=e("#select2-drop-mask"),0===t.length&&(t=e(document.createElement("div")),t.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),t.hide(),t.appendTo(this.body),t.on("mousedown touchstart click",function(i){s(t);var n,o=e("#select2-drop");o.length>0&&(n=o.data("select2"),n.opts.selectOnBlur&&n.selectHighlighted({noFocus:!0}),n.close(),i.preventDefault(),i.stopPropagation())})),this.dropdown.prev()[0]!==t[0]&&this.dropdown.before(t),e("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),t.show(),this.positionDropdown(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active");var r=this;this.container.parents().add(window).each(function(){e(this).on(o+" "+n+" "+a,function(e){r.opened()&&r.positionDropdown()})})},close:function(){if(this.opened()){var t=this.containerEventName,s="scroll."+t,i="resize."+t,n="orientationchange."+t;this.container.parents().add(window).each(function(){e(this).off(s).off(i).off(n)}),this.clearDropdownAlignmentPreference(),e("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"),this.results.empty(),L.off("mousemove.select2Event"),this.clearSearch(),this.search.removeClass("select2-active"),this.opts.element.trigger(e.Event("select2-close"))}},externalSearch:function(e){this.open(),this.search.val(e),this.updateResults(!1)},clearSearch:function(){},getMaximumSelectionSize:function(){return T(this.opts.maximumSelectionSize,this.opts.element)},ensureHighlightVisible:function(){var t,s,i,n,o,a,r,c,l=this.results;if(s=this.highlight(),!(s<0)){if(0==s)return void l.scrollTop(0);t=this.findHighlightableChoices().find(".select2-result-label"),i=e(t[s]),c=(i.offset()||{}).top||0,n=c+i.outerHeight(!0),s===t.length-1&&(r=l.find("li.select2-more-results"),r.length>0&&(n=r.offset().top+r.outerHeight(!0))),o=l.offset().top+l.outerHeight(!1),n>o&&l.scrollTop(l.scrollTop()+(n-o)),a=c-l.offset().top,a<0&&"none"!=i.css("display")&&l.scrollTop(l.scrollTop()+a)}},findHighlightableChoices:function(){return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)")},moveHighlight:function(t){for(var s=this.findHighlightableChoices(),i=this.highlight();i>-1&&i<s.length;){i+=t;var n=e(s[i]);if(n.hasClass("select2-result-selectable")&&!n.hasClass("select2-disabled")&&!n.hasClass("select2-selected")){this.highlight(i);break}}},highlight:function(t){var s,i,o=this.findHighlightableChoices();return 0===arguments.length?n(o.filter(".select2-highlighted")[0],o.get()):(t>=o.length&&(t=o.length-1),t<0&&(t=0),this.removeHighlight(),s=e(o[t]),s.addClass("select2-highlighted"),this.search.attr("aria-activedescendant",s.find(".select2-result-label").attr("id")),this.ensureHighlightVisible(),this.liveRegion.text(s.text()),i=s.data("select2-data"),void(i&&this.opts.element.trigger({type:"select2-highlight",val:this.id(i),choice:i})))},removeHighlight:function(){this.results.find(".select2-highlighted").removeClass("select2-highlighted")},touchMoved:function(){this._touchMoved=!0},clearTouchMoved:function(){this._touchMoved=!1},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(t){var s=e(t.target).closest(".select2-result-selectable");if(s.length>0&&!s.is(".select2-highlighted")){var i=this.findHighlightableChoices();this.highlight(i.index(s))}else 0==s.length&&this.removeHighlight()},loadMoreIfNeeded:function(){var e,t=this.results,s=t.find("li.select2-more-results"),i=this.resultsPage+1,n=this,o=this.search.val(),a=this.context;0!==s.length&&(e=s.offset().top-t.offset().top-t.height(),e<=this.opts.loadMorePadding&&(s.addClass("select2-active"),this.opts.query({element:this.opts.element,term:o,page:i,context:a,matcher:this.opts.matcher,callback:this.bind(function(e){n.opened()&&(n.opts.populateResults.call(this,t,e.results,{term:o,page:i,context:a}),n.postprocessResults(e,!1,!1),e.more===!0?(s.detach().appendTo(t).html(n.opts.escapeMarkup(T(n.opts.formatLoadMore,n.opts.element,i+1))),window.setTimeout(function(){n.loadMoreIfNeeded()},10)):s.remove(),n.positionDropdown(),n.resultsPage=i,n.context=e.context,this.opts.element.trigger({type:"select2-loaded",items:e}))})})))},tokenize:function(){},updateResults:function(s){function i(){l.removeClass("select2-active"),d.positionDropdown(),h.find(".select2-no-results,.select2-selection-limit,.select2-searching").length?d.liveRegion.text(h.text()):d.liveRegion.text(d.opts.formatMatches(h.find('.select2-result-selectable:not(".select2-selected")').length))}function n(e){h.html(e),i()}var o,r,c,l=this.search,h=this.results,u=this.opts,d=this,p=l.val(),f=e.data(this.container,"select2-last-term");if((s===!0||!f||!a(p,f))&&(e.data(this.container,"select2-last-term",p),s===!0||this.showSearchInput!==!1&&this.opened())){c=++this.queryCount;var g=this.getMaximumSelectionSize();if(g>=1&&(o=this.data(),e.isArray(o)&&o.length>=g&&E(u.formatSelectionTooBig,"formatSelectionTooBig")))return void n("<li class='select2-selection-limit'>"+T(u.formatSelectionTooBig,u.element,g)+"</li>");if(l.val().length<u.minimumInputLength)return n(E(u.formatInputTooShort,"formatInputTooShort")?"<li class='select2-no-results'>"+T(u.formatInputTooShort,u.element,l.val(),u.minimumInputLength)+"</li>":""),void(s&&this.showSearch&&this.showSearch(!0));if(u.maximumInputLength&&l.val().length>u.maximumInputLength)return void n(E(u.formatInputTooLong,"formatInputTooLong")?"<li class='select2-no-results'>"+T(u.formatInputTooLong,u.element,l.val(),u.maximumInputLength)+"</li>":"");u.formatSearching&&0===this.findHighlightableChoices().length&&n("<li class='select2-searching'>"+T(u.formatSearching,u.element)+"</li>"),l.addClass("select2-active"),this.removeHighlight(),r=this.tokenize(),r!=t&&null!=r&&l.val(r),this.resultsPage=1,u.query({element:u.element,term:l.val(),page:this.resultsPage,context:null,matcher:u.matcher,callback:this.bind(function(o){var r;if(c==this.queryCount){if(!this.opened())return void this.search.removeClass("select2-active");if(o.hasError!==t&&E(u.formatAjaxError,"formatAjaxError"))return void n("<li class='select2-ajax-error'>"+T(u.formatAjaxError,u.element,o.jqXHR,o.textStatus,o.errorThrown)+"</li>");if(this.context=o.context===t?null:o.context,this.opts.createSearchChoice&&""!==l.val()&&(r=this.opts.createSearchChoice.call(d,l.val(),o.results),r!==t&&null!==r&&d.id(r)!==t&&null!==d.id(r)&&0===e(o.results).filter(function(){
+return a(d.id(this),d.id(r))}).length&&this.opts.createSearchChoicePosition(o.results,r)),0===o.results.length&&E(u.formatNoMatches,"formatNoMatches"))return void n("<li class='select2-no-results'>"+T(u.formatNoMatches,u.element,l.val())+"</li>");h.empty(),d.opts.populateResults.call(this,h,o.results,{term:l.val(),page:this.resultsPage,context:null}),o.more===!0&&E(u.formatLoadMore,"formatLoadMore")&&(h.append("<li class='select2-more-results'>"+u.escapeMarkup(T(u.formatLoadMore,u.element,this.resultsPage))+"</li>"),window.setTimeout(function(){d.loadMoreIfNeeded()},10)),this.postprocessResults(o,s),i(),this.opts.element.trigger({type:"select2-loaded",items:o})}})})}},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){p(this.search)},selectHighlighted:function(e){if(this._touchMoved)return void this.clearTouchMoved();var t=this.highlight(),s=this.results.find(".select2-highlighted"),i=s.closest(".select2-result").data("select2-data");i?(this.highlight(t),this.onSelect(i,e)):e&&e.noFocus&&this.close()},getPlaceholder:function(){var e;return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder||((e=this.getPlaceholderOption())!==t?e.text():t)},getPlaceholderOption:function(){if(this.select){var s=this.select.children("option").first();if(this.opts.placeholderOption!==t)return"first"===this.opts.placeholderOption&&s||"function"==typeof this.opts.placeholderOption&&this.opts.placeholderOption(this.select);if(""===e.trim(s.text())&&""===s.val())return s}},initContainerWidth:function(){function s(){var s,i,n,o,a,r;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){if(s=this.opts.element.attr("style"),s!==t)for(i=s.split(";"),o=0,a=i.length;o<a;o+=1)if(r=i[o].replace(/\s/g,""),n=r.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i),null!==n&&n.length>=1)return n[1];return"resolve"===this.opts.width?(s=this.opts.element.css("width"),s.indexOf("%")>0?s:0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px"):null}return e.isFunction(this.opts.width)?this.opts.width():this.opts.width}var i=s.call(this);null!==i&&this.container.css("width",i)}}),R=k(A,{createContainer:function(){var t=e(document.createElement("div")).attr({class:"select2-container"}).html(["<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>","   <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>","   <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>","</a>","<label for='' class='select2-offscreen'></label>","<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />","<div class='select2-drop select2-display-none'>","   <div class='select2-search'>","       <label for='' class='select2-offscreen'></label>","       <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'","       aria-autocomplete='list' />","   </div>","   <ul class='select2-results' role='listbox'>","   </ul>","</div>"].join(""));return t},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var s,i,n;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),s=this.search.get(0),s.createTextRange?(i=s.createTextRange(),i.collapse(!1),i.select()):s.setSelectionRange&&(n=this.search.val().length,s.setSelectionRange(n,n))),""===this.search.val()&&this.nextSearchTerm!=t&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(e.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){e("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),I.call(this,"selection","focusser")},initContainer:function(){var t,i,n=this.container,o=this.dropdown,a=H();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=t=n.find(".select2-choice"),this.focusser=n.find(".select2-focusser"),t.find(".select2-chosen").attr("id","select2-chosen-"+a),this.focusser.attr("aria-labelledby","select2-chosen-"+a),this.results.attr("id","select2-results-"+a),this.search.attr("aria-owns","select2-results-"+a),this.focusser.attr("id","s2id_autogen"+a),i=e("label[for='"+this.opts.element.attr("id")+"']"),this.opts.element.focus(this.bind(function(){this.focus()})),this.focusser.prev().text(i.text()).attr("for",this.focusser.attr("id"));var r=this.opts.element.attr("title");this.opts.element.attr("title",r||i.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(e("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(e){if(this.isInterfaceEnabled()&&229!=e.keyCode){if(e.which===U.PAGE_UP||e.which===U.PAGE_DOWN)return void g(e);switch(e.which){case U.UP:case U.DOWN:return this.moveHighlight(e.which===U.UP?-1:1),void g(e);case U.ENTER:return this.selectHighlighted(),void g(e);case U.TAB:return void this.selectHighlighted({noFocus:!0});case U.ESC:return this.cancel(e),void g(e)}}})),this.search.on("blur",this.bind(function(e){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(e){if(this.isInterfaceEnabled()&&e.which!==U.TAB&&!U.isControl(e)&&!U.isFunctionKey(e)&&e.which!==U.ESC){if(this.opts.openOnEnter===!1&&e.which===U.ENTER)return void g(e);if(e.which==U.DOWN||e.which==U.UP||e.which==U.ENTER&&this.opts.openOnEnter){if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return;return this.open(),void g(e)}return e.which==U.DELETE||e.which==U.BACKSPACE?(this.opts.allowClear&&this.clear(),void g(e)):void 0}})),l(this.focusser),this.focusser.on("keyup-change input",this.bind(function(e){if(this.opts.minimumResultsForSearch>=0){if(e.stopPropagation(),this.opened())return;this.open()}})),t.on("mousedown touchstart","abbr",this.bind(function(e){this.isInterfaceEnabled()&&(this.clear(),m(e),this.close(),this.selection&&this.selection.focus())})),t.on("mousedown touchstart",this.bind(function(i){s(t),this.container.hasClass("select2-container-active")||this.opts.element.trigger(e.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),g(i)})),o.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),t.on("focus",this.bind(function(e){g(e)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(e.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(e.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(e.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.hide(),this.setPlaceholder()},clear:function(t){var s=this.selection.data("select2-data");if(s){var i=e.Event("select2-clearing");if(this.opts.element.trigger(i),i.isDefaultPrevented())return;var n=this.getPlaceholderOption();this.opts.element.val(n?n.val():""),this.selection.find(".select2-chosen").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),t!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(s),choice:s}),this.triggerChange({removed:s}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var e=this;this.opts.initSelection.call(null,this.opts.element,function(s){s!==t&&null!==s&&(e.updateSelection(s),e.close(),e.setPlaceholder(),e.nextSearchTerm=e.opts.nextSearchTerm(s,e.search.val()))})}},isPlaceholderOptionSelected:function(){var e;return this.getPlaceholder()!==t&&((e=this.getPlaceholderOption())!==t&&e.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===t||null===this.opts.element.val())},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments),s=this;return"select"===t.element.get(0).tagName.toLowerCase()?t.initSelection=function(e,t){var i=e.find("option").filter(function(){return this.selected&&!this.disabled});t(s.optionToData(i))}:"data"in t&&(t.initSelection=t.initSelection||function(s,i){var n=s.val(),o=null;t.query({matcher:function(e,s,i){var r=a(n,t.id(i));return r&&(o=i),r},callback:e.isFunction(i)?function(){i(o)}:e.noop})}),t},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===t?t:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var e=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&e!==t){if(this.select&&this.getPlaceholderOption()===t)return;this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(e)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(e,t,s){var i=0,n=this;if(this.findHighlightableChoices().each2(function(e,t){if(a(n.id(t.data("select2-data")),n.opts.element.val()))return i=e,!1}),s!==!1&&(t===!0&&i>=0?this.highlight(i):this.highlight(0)),t===!0){var o=this.opts.minimumResultsForSearch;o>=0&&this.showSearch(O(e.results)>=o)}},showSearch:function(t){this.showSearchInput!==t&&(this.showSearchInput=t,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!t),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!t),e(this.dropdown,this.container).toggleClass("select2-with-searchbox",t))},onSelect:function(e,t){if(this.triggerSelect(e)){var s=this.opts.element.val(),i=this.data();this.opts.element.val(this.id(e)),this.updateSelection(e),this.opts.element.trigger({type:"select2-selected",val:this.id(e),choice:e}),this.nextSearchTerm=this.opts.nextSearchTerm(e,this.search.val()),this.close(),t&&t.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),a(s,this.id(e))||this.triggerChange({added:e,removed:i})}},updateSelection:function(e){var s,i,n=this.selection.find(".select2-chosen");this.selection.data("select2-data",e),n.empty(),null!==e&&(s=this.opts.formatSelection(e,n,this.opts.escapeMarkup)),s!==t&&n.append(s),i=this.opts.formatSelectionCssClass(e,n),i!==t&&n.addClass(i),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==t&&this.container.addClass("select2-allowclear")},val:function(){var e,s=!1,i=null,n=this,o=this.data();if(0===arguments.length)return this.opts.element.val();if(e=arguments[0],arguments.length>1&&(s=arguments[1]),this.select)this.select.val(e).find("option").filter(function(){return this.selected}).each2(function(e,t){return i=n.optionToData(t),!1}),this.updateSelection(i),this.setPlaceholder(),s&&this.triggerChange({added:i,removed:o});else{if(!e&&0!==e)return void this.clear(s);if(this.opts.initSelection===t)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(e),this.opts.initSelection(this.opts.element,function(e){n.opts.element.val(e?n.id(e):""),n.updateSelection(e),n.setPlaceholder(),s&&n.triggerChange({added:e,removed:o})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(e){var s,i=!1;return 0===arguments.length?(s=this.selection.data("select2-data"),s==t&&(s=null),s):(arguments.length>1&&(i=arguments[1]),void(e?(s=this.data(),this.opts.element.val(e?this.id(e):""),this.updateSelection(e),i&&this.triggerChange({added:e,removed:s})):this.clear(i)))}}),D=k(A,{createContainer:function(){var t=e(document.createElement("div")).attr({class:"select2-container select2-container-multi"}).html(["<ul class='select2-choices'>","  <li class='select2-search-field'>","    <label for='' class='select2-offscreen'></label>","    <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>","  </li>","</ul>","<div class='select2-drop select2-drop-multi select2-display-none'>","   <ul class='select2-results'>","   </ul>","</div>"].join(""));return t},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments),s=this;return"select"===t.element.get(0).tagName.toLowerCase()?t.initSelection=function(e,t){var i=[];e.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(e,t){i.push(s.optionToData(t))}),t(i)}:"data"in t&&(t.initSelection=t.initSelection||function(s,i){var n=r(s.val(),t.separator,t.transformVal),o=[];t.query({matcher:function(s,i,r){var c=e.grep(n,function(e){return a(e,t.id(r))}).length;return c&&o.push(r),c},callback:e.isFunction(i)?function(){for(var e=[],s=0;s<n.length;s++)for(var r=n[s],c=0;c<o.length;c++){var l=o[c];if(a(r,t.id(l))){e.push(l),o.splice(c,1);break}}i(e)}:e.noop})}),t},selectChoice:function(e){var t=this.container.find(".select2-search-choice-focus");t.length&&e&&e[0]==t[0]||(t.length&&this.opts.element.trigger("choice-deselected",t),t.removeClass("select2-search-choice-focus"),e&&e.length&&(this.close(),e.addClass("select2-search-choice-focus"),this.opts.element.trigger("choice-selected",e)))},destroy:function(){e("label[for='"+this.search.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),I.call(this,"searchContainer","selection")},initContainer:function(){var t,s=".select2-choices";this.searchContainer=this.container.find(".select2-search-field"),this.selection=t=this.container.find(s);var i=this;this.selection.on("click",".select2-container:not(.select2-container-disabled) .select2-search-choice:not(.select2-locked)",function(t){i.search[0].focus(),i.selectChoice(e(this))}),this.search.attr("id","s2id_autogen"+H()),this.search.prev().text(e("label[for='"+this.opts.element.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.opts.element.focus(this.bind(function(){this.focus()})),this.search.on("input paste",this.bind(function(){this.search.attr("placeholder")&&0==this.search.val().length||this.isInterfaceEnabled()&&(this.opened()||this.open())})),this.search.attr("tabindex",this.elementTabIndex),this.keydowns=0,this.search.on("keydown",this.bind(function(e){if(this.isInterfaceEnabled()){++this.keydowns;var s=t.find(".select2-search-choice-focus"),i=s.prev(".select2-search-choice:not(.select2-locked)"),n=s.next(".select2-search-choice:not(.select2-locked)"),o=f(this.search);if(s.length&&(e.which==U.LEFT||e.which==U.RIGHT||e.which==U.BACKSPACE||e.which==U.DELETE||e.which==U.ENTER)){var a=s;return e.which==U.LEFT&&i.length?a=i:e.which==U.RIGHT?a=n.length?n:null:e.which===U.BACKSPACE?this.unselect(s.first())&&(this.search.width(10),a=i.length?i:n):e.which==U.DELETE?this.unselect(s.first())&&(this.search.width(10),a=n.length?n:null):e.which==U.ENTER&&(a=null),this.selectChoice(a),g(e),void(a&&a.length||this.open())}if((e.which===U.BACKSPACE&&1==this.keydowns||e.which==U.LEFT)&&0==o.offset&&!o.length)return this.selectChoice(t.find(".select2-search-choice:not(.select2-locked)").last()),void g(e);if(this.selectChoice(null),this.opened())switch(e.which){case U.UP:case U.DOWN:return this.moveHighlight(e.which===U.UP?-1:1),void g(e);case U.ENTER:return this.selectHighlighted(),void g(e);case U.TAB:return this.selectHighlighted({noFocus:!0}),void this.close();case U.ESC:return this.cancel(e),void g(e)}if(e.which!==U.TAB&&!U.isControl(e)&&!U.isFunctionKey(e)&&e.which!==U.BACKSPACE&&e.which!==U.ESC){if(e.which===U.ENTER){if(this.opts.openOnEnter===!1)return;if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return}this.open(),e.which!==U.PAGE_UP&&e.which!==U.PAGE_DOWN||g(e),e.which===U.ENTER&&g(e)}}})),this.search.on("keyup",this.bind(function(e){this.keydowns=0,this.resizeSearch()})),this.search.on("blur",this.bind(function(t){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.selectChoice(null),this.opened()||this.clearSearch(),t.stopImmediatePropagation(),this.opts.element.trigger(e.Event("select2-blur"))})),this.container.on("click",s,this.bind(function(t){this.isInterfaceEnabled()&&(e(t.target).closest(".select2-search-choice").length>0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(e.Event("select2-focus")),this.open(),this.focusSearch(),t.preventDefault()))})),this.container.on("focus",s,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(e.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.hide(),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var e=this;this.opts.initSelection.call(null,this.opts.element,function(s){s!==t&&null!==s&&(e.updateSelection(s),e.close(),e.clearSearch())})}},clearSearch:function(){var e=this.getPlaceholder(),s=this.getMaxSearchWidth();e!==t&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(e).addClass("select2-default"),this.search.width(s>0?s:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=t&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(e.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(t){var s=[],i=[],o=this;e(t).each(function(){n(o.id(this),s)<0&&(s.push(o.id(this)),i.push(this))}),t=i,this.selection.find(".select2-search-choice").remove(),e(t).each(function(){o.addSelectedChoice(this)}),o.postprocessResults()},tokenize:function(){var e=this.search.val();e=this.opts.tokenizer.call(this,e,this.data(),this.bind(this.onSelect),this.opts),null!=e&&e!=t&&(this.search.val(e),e.length>0&&this.open())},onSelect:function(e,s){this.triggerSelect(e)&&""!==e.text&&(this.addSelectedChoice(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),this.nextSearchTerm=this.opts.nextSearchTerm(e,this.search.val()),this.clearSearch(),this.updateResults(),!this.select&&this.opts.closeOnSelect||this.postprocessResults(e,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=t&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:e}),s&&s.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(s){var i,n,o=!s.locked,a=e("<li class='select2-search-choice'>    <div></div>    <a href='#' class='select2-search-choice-close' tabindex='-1'></a></li>"),r=e("<li class='select2-search-choice select2-locked'><div></div></li>"),c=o?a:r,l=this.id(s),h=this.getVal();i=this.opts.formatSelection(s,c.find("div"),this.opts.escapeMarkup),i!=t&&c.find("div").replaceWith(e("<div></div>").html(i)),n=this.opts.formatSelectionCssClass(s,c.find("div")),n!=t&&c.addClass(n),o&&c.find(".select2-search-choice-close").on("mousedown",g).on("click dblclick",this.bind(function(t){this.isInterfaceEnabled()&&(this.unselect(e(t.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),g(t),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),c.data("select2-data",s),c.insertBefore(this.searchContainer),h.push(l),this.setVal(h)},unselect:function(t){var s,i,o=this.getVal();if(t=t.closest(".select2-search-choice"),0===t.length)throw"Invalid argument: "+t+". Must be .select2-search-choice";if(s=t.data("select2-data")){var a=e.Event("select2-removing");if(a.val=this.id(s),a.choice=s,this.opts.element.trigger(a),a.isDefaultPrevented())return!1;for(;(i=n(this.id(s),o))>=0;)o.splice(i,1),this.setVal(o),this.select&&this.postprocessResults();return t.remove(),this.opts.element.trigger({type:"select2-removed",val:this.id(s),choice:s}),this.triggerChange({removed:s}),!0}},postprocessResults:function(e,t,s){var i=this.getVal(),o=this.results.find(".select2-result"),a=this.results.find(".select2-result-with-children"),r=this;o.each2(function(e,t){var s=r.id(t.data("select2-data"));n(s,i)>=0&&(t.addClass("select2-selected"),t.find(".select2-result-selectable").addClass("select2-selected"))}),a.each2(function(e,t){t.is(".select2-result-selectable")||0!==t.find(".select2-result-selectable:not(.select2-selected)").length||t.addClass("select2-selected")}),this.highlight()==-1&&s!==!1&&this.opts.closeOnSelect===!0&&r.highlight(0),!this.opts.createSearchChoice&&!o.filter(".select2-result:not(.select2-selected)").length>0&&(!e||e&&!e.more&&0===this.results.find(".select2-no-results").length)&&E(r.opts.formatNoMatches,"formatNoMatches")&&this.results.append("<li class='select2-no-results'>"+T(r.opts.formatNoMatches,r.opts.element,r.search.val())+"</li>")},getMaxSearchWidth:function(){return this.selection.width()-c(this.search)},resizeSearch:function(){var e,t,s,i,n,o=c(this.search);e=v(this.search)+10,t=this.search.offset().left,s=this.selection.width(),i=this.selection.offset().left,n=s-(t-i)-o,n<e&&(n=s-o),n<40&&(n=s-o),n<=0&&(n=e),this.search.width(Math.floor(n))},getVal:function(){var e;return this.select?(e=this.select.val(),null===e?[]:e):(e=this.opts.element.val(),r(e,this.opts.separator,this.opts.transformVal))},setVal:function(t){var s;this.select?this.select.val(t):(s=[],e(t).each(function(){n(this,s)<0&&s.push(this)}),this.opts.element.val(0===s.length?"":s.join(this.opts.separator)))},buildChangeDetails:function(e,t){for(var t=t.slice(0),e=e.slice(0),s=0;s<t.length;s++)for(var i=0;i<e.length;i++)a(this.opts.id(t[s]),this.opts.id(e[i]))&&(t.splice(s,1),s>0&&s--,e.splice(i,1),i--);return{added:t,removed:e}},val:function(s,i){var n,o=this;if(0===arguments.length)return this.getVal();if(n=this.data(),n.length||(n=[]),!s&&0!==s)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),void(i&&this.triggerChange({added:this.data(),removed:n}));if(this.setVal(s),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),i&&this.triggerChange(this.buildChangeDetails(n,this.data()));else{if(this.opts.initSelection===t)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(t){var s=e.map(t,o.id);o.setVal(s),o.updateSelection(t),o.clearSearch(),i&&o.triggerChange(o.buildChangeDetails(n,o.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var t=[],s=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){t.push(s.opts.id(e(this).data("select2-data")))}),this.setVal(t),this.triggerChange()},data:function(t,s){var i,n,o=this;return 0===arguments.length?this.selection.children(".select2-search-choice").map(function(){return e(this).data("select2-data")}).get():(n=this.data(),t||(t=[]),i=e.map(t,function(e){return o.opts.id(e)}),this.setVal(i),this.updateSelection(t),this.clearSearch(),s&&this.triggerChange(this.buildChangeDetails(n,this.data())),void 0)}}),e.fn.select2=function(){var s,i,o,a,r,c=Array.prototype.slice.call(arguments,0),l=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],h=["opened","isFocused","container","dropdown"],u=["val","data"],d={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])s=0===c.length?{}:e.extend({},c[0]),s.element=e(this),"select"===s.element.get(0).tagName.toLowerCase()?r=s.element.prop("multiple"):(r=s.multiple||!1,"tags"in s&&(s.multiple=r=!0)),i=r?new window.Select2.class.multi:new window.Select2.class.single,i.init(s);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(n(c[0],l)<0)throw"Unknown method: "+c[0];if(a=t,i=e(this).data("select2"),i===t)return;if(o=c[0],"container"===o?a=i.container:"dropdown"===o?a=i.dropdown:(d[o]&&(o=d[o]),a=i[o].apply(i,c.slice(1))),n(c[0],h)>=0||n(c[0],u)>=0&&1==c.length)return!1}}),a===t?this:a},e.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(e,t,s,i){var n=[];return b(this.text(e),s.term,n,i),n.join("")},transformVal:function(t){return e.trim(t)},formatSelection:function(e,s,i){return e?i(this.text(e)):t},sortResults:function(e,t,s){return e},formatResultCssClass:function(e){return e.css},formatSelectionCssClass:function(e,s){return t},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(e){return e==t?null:e.id},text:function(t){return t&&this.data&&this.data.text?e.isFunction(this.data.text)?this.data.text(t):t[this.data.text]:t.text},matcher:function(e,t){return i(""+t).toUpperCase().indexOf(i(""+e).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:P,escapeMarkup:C,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(e){return e},adaptDropdownCssClass:function(e){return null},nextSearchTerm:function(e,s){return t},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(e){var t="ontouchstart"in window||navigator.msMaxTouchPoints>0;return!t||!(e.opts.minimumResultsForSearch<0)}},e.fn.select2.locales=[],e.fn.select2.locales.en={formatMatches:function(e){return 1===e?"One result is available, press enter to select it.":e+" results are available, use up and down arrow keys to navigate."},formatNoMatches:function(){return"No matches found"},formatAjaxError:function(e,t,s){return"Loading failed"},formatInputTooShort:function(e,t){var s=t-e.length;return"Please enter "+s+" or more character"+(1==s?"":"s")},formatInputTooLong:function(e,t){var s=e.length-t;return"Please delete "+s+" character"+(1==s?"":"s")},formatSelectionTooBig:function(e){return"You can only select "+e+" item"+(1==e?"":"s")},formatLoadMore:function(e){return"Loading more results…"},formatSearching:function(){return"Searching…"}},e.extend(e.fn.select2.defaults,e.fn.select2.locales.en),e.fn.select2.ajaxDefaults={transport:e.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:S,local:y,tags:x},util:{debounce:u,markMatch:b,escapeMarkup:C,stripDiacritics:i},class:{abstract:A,single:R,multi:D}}}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/LICENSE b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..819bae4e70ada1c80a40aa91134129c1f086e605
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2013 Ben Ogle, Easel Inc.
+
+MIT LICENSE
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.css
new file mode 100644
index 0000000000000000000000000000000000000000..fdfcd00987d6f065b647e4747ef5aba10b19b382
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.css
@@ -0,0 +1,77 @@
+.tour-highlight{
+  background: transparent;
+  -moz-box-shadow: 0px 0px 7px 0px rgba(0, 241, 255, 0.701961);
+  -webkit-box-shadow: 0px 0px 7px 0px rgba(0, 241, 255, 0.701961);
+  -o-box-shadow: 0px 0px 7px 0px rgba(0, 241, 255, 0.701961);
+  box-shadow: 0px 0px 7px 0px rgba(0, 241, 255, 0.701961);
+  border-radius: 2px;
+}
+
+/* bootstrap styles */
+.tourist-popover{
+  padding: 0;
+}
+.tourist-popover .popover-content{
+  padding: 10px 0 0 0;
+  min-width: 200px;
+}
+.tourist-popover .popover-content p{
+  margin: 0 8px 10px 8px;
+}
+.tourist-popover .popover-content .action-label{
+  background: rgba(0, 111, 255, 0.168627);
+  font-size: 14px;
+  padding: 3px 10px;
+}
+.tourist-popover .popover-content .tour-counter{
+  margin: 0; padding: 0;
+  position: absolute;
+  left: 10px; bottom: 14px;
+  font-size: 11px;
+  color: #acacac;
+}
+.tourist-popover .tour-buttons{
+  padding: 8px 10px;
+  min-height: 28px;
+  background: #f5f5f5;
+  border-radius: 0px 0px 6px 6px;
+  box-sizing: content-box;
+}
+.tourist-popover .btn-close{
+  background: none;
+  border: none;
+  position: absolute;
+  top: 4px; right: 7px;
+  padding: 0;
+  opacity: .3;
+}
+.tourist-popover .btn-close:hover{
+  opacity: .5;
+}
+
+/* qtip2 styles */
+.qtip-tour, .qtip-tour .qtip-content{
+  padding: 0;
+}
+.qtip-tour .qtip-content{
+  padding-top: 10px;
+}
+.qtip-tour .qtip-content p{
+  margin: 0 8px 10px 8px;
+}
+.qtip-tour .qtip-content .action-label{
+  background: rgba(0, 111, 255, 0.168627);
+  font-size: 14px;
+  padding: 3px 10px;
+}
+.qtip-tour .qtip-content .tour-counter{
+  font-size: 11px;
+  color: #acacac;
+}
+.qtip-tour .tour-buttons{
+  padding: 8px 10px;
+  min-height: 28px;
+  background: #f5f5f5;
+  border-radius: 0px 0px 6px 6px;
+  box-sizing: content-box;
+}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.js
new file mode 100644
index 0000000000000000000000000000000000000000..03bd4a19cea86f4656953cab9b4537686eed042b
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.js
@@ -0,0 +1,1030 @@
+(function($) {
+  var _ref, _ref1, _ref2, _ref3,
+    __hasProp = {}.hasOwnProperty,
+    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  window.Tourist = window.Tourist || {};
+
+  /*
+  A model for the Tour. We'll only use the 'current_step' property.
+  */
+
+
+  Tourist.Model = (function(_super) {
+    __extends(Model, _super);
+
+    function Model() {
+      _ref = Model.__super__.constructor.apply(this, arguments);
+      return _ref;
+    }
+
+    Model.prototype._module = 'Tourist';
+
+    return Model;
+
+  })(Backbone.Model);
+
+  window.Tourist.Tip = window.Tourist.Tip || {};
+
+  /*
+  The flyout showing the content of each step.
+  
+  This is the base class containing most of the logic. Can extend for different
+  tooltip implementations.
+  */
+
+
+  Tourist.Tip.Base = (function() {
+    Base.prototype._module = 'Tourist';
+
+    _.extend(Base.prototype, Backbone.Events);
+
+    Base.prototype.skipButtonTemplate = '<button class="btn btn-default btn-sm pull-right tour-next">Skip this step →</button>';
+
+    Base.prototype.nextButtonTemplate = '<button class="btn btn-primary btn-sm pull-right tour-next">Next step →</button>';
+
+    Base.prototype.finalButtonTemplate = '<button class="btn btn-primary btn-sm pull-right tour-next">Finish up</button>';
+
+    Base.prototype.closeButtonTemplate = '<a class="btn btn-close tour-close" href="#"><i class="icon icon-remove"></i></a>';
+
+    Base.prototype.okButtonTemplate = '<button class="btn btn-sm tour-close btn-primary">Okay</button>';
+
+    Base.prototype.actionLabelTemplate = _.template('<h4 class="action-label"><%= label %></h4>');
+
+    Base.prototype.actionLabels = ['Do this:', 'Then this:', 'Next this:'];
+
+    Base.prototype.highlightClass = 'tour-highlight';
+
+    Base.prototype.template = _.template('<div>\n  <div class="tour-container">\n    <%= close_button %>\n    <%= content %>\n    <p class="tour-counter <%= counter_class %>"><%= counter%></p>\n  </div>\n  <div class="tour-buttons">\n    <%= buttons %>\n  </div>\n</div>');
+
+    function Base(options) {
+      this.options = options != null ? options : {};
+      this.onClickNext = __bind(this.onClickNext, this);
+      this.onClickClose = __bind(this.onClickClose, this);
+      this.el = $('<div/>');
+      this.initialize(options);
+      this._bindClickEvents();
+      Tourist.Tip.Base._cacheTip(this);
+    }
+
+    Base.prototype.destroy = function() {
+      return this.el.remove();
+    };
+
+    Base.prototype.render = function(step) {
+      this.hide();
+      if (step) {
+        this._setTarget(step.target || false, step);
+        this._setZIndex('');
+        this._renderContent(step, this._buildContentElement(step));
+        if (step.target) {
+          this.show();
+        }
+        if (step.zIndex) {
+          this._setZIndex(step.zIndex, step);
+        }
+      }
+      return this;
+    };
+
+    Base.prototype.show = function() {};
+
+    Base.prototype.hide = function() {};
+
+    Base.prototype.setTarget = function(targetElement, step) {
+      return this._setTarget(targetElement, step);
+    };
+
+    Base.prototype.cleanupCurrentTarget = function() {
+      if (this.target && this.target.removeClass) {
+        this.target.removeClass(this.highlightClass);
+      }
+      return this.target = null;
+    };
+
+    /*
+    Event Handlers
+    */
+
+
+    Base.prototype.onClickClose = function(event) {
+      this.trigger('click:close', this, event);
+      return false;
+    };
+
+    Base.prototype.onClickNext = function(event) {
+      this.trigger('click:next', this, event);
+      return false;
+    };
+
+    /*
+    Private
+    */
+
+
+    Base.prototype._getTipElement = function() {};
+
+    Base.prototype._renderContent = function(step, contentElement) {};
+
+    Base.prototype._bindClickEvents = function() {
+      var el;
+      el = this._getTipElement();
+      el.delegate('.tour-close', 'click', this.onClickClose);
+      return el.delegate('.tour-next', 'click', this.onClickNext);
+    };
+
+    Base.prototype._setTarget = function(target, step) {
+      this.cleanupCurrentTarget();
+      if (target && step && step.highlightTarget) {
+        target.addClass(this.highlightClass);
+      }
+      return this.target = target;
+    };
+
+    Base.prototype._setZIndex = function(zIndex) {
+      var el;
+      el = this._getTipElement();
+      return el.css('z-index', zIndex || '');
+    };
+
+    Base.prototype._buildContentElement = function(step) {
+      var buttons, content;
+      buttons = this._buildButtons(step);
+      content = $($.parseHTML(this.template({
+        content: step.content,
+        buttons: buttons,
+        close_button: this._buildCloseButton(step),
+        counter: step.final ? '' : "step " + (step.index + 1) + " of " + step.total,
+        counter_class: step.final ? 'final' : ''
+      })));
+      if (!buttons) {
+        content.find('.tour-buttons').addClass('no-buttons');
+      }
+      this._renderActionLabels(content);
+      return content;
+    };
+
+    Base.prototype._buildButtons = function(step) {
+      var buttons;
+      buttons = '';
+      if (step.okButton) {
+        buttons += this.okButtonTemplate;
+      }
+      if (step.skipButton) {
+        buttons += this.skipButtonTemplate;
+      }
+      if (step.nextButton) {
+        buttons += step.final ? this.finalButtonTemplate : this.nextButtonTemplate;
+      }
+      return buttons;
+    };
+
+    Base.prototype._buildCloseButton = function(step) {
+      if (step.closeButton) {
+        return this.closeButtonTemplate;
+      } else {
+        return '';
+      }
+    };
+
+    Base.prototype._renderActionLabels = function(el) {
+      var action, actionIndex, actions, label, _i, _len, _results;
+      actions = el.find('.action');
+      actionIndex = 0;
+      _results = [];
+      for (_i = 0, _len = actions.length; _i < _len; _i++) {
+        action = actions[_i];
+        label = $($.parseHTML(this.actionLabelTemplate({
+          label: this.actionLabels[actionIndex]
+        })));
+        label.insertBefore(action);
+        _results.push(actionIndex++);
+      }
+      return _results;
+    };
+
+    Base._cacheTip = function(tip) {
+      if (!Tourist.Tip.Base._cachedTips) {
+        Tourist.Tip.Base._cachedTips = [];
+      }
+      return Tourist.Tip.Base._cachedTips.push(tip);
+    };
+
+    Base.destroy = function() {
+      var tip, _i, _len, _ref1;
+      if (!Tourist.Tip.Base._cachedTips) {
+        return;
+      }
+      _ref1 = Tourist.Tip.Base._cachedTips;
+      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+        tip = _ref1[_i];
+        tip.destroy();
+      }
+      return Tourist.Tip.Base._cachedTips = null;
+    };
+
+    return Base;
+
+  })();
+
+  /*
+  Bootstrap based tip implementation
+  */
+
+
+  Tourist.Tip.Bootstrap = (function(_super) {
+    __extends(Bootstrap, _super);
+
+    function Bootstrap() {
+      _ref1 = Bootstrap.__super__.constructor.apply(this, arguments);
+      return _ref1;
+    }
+
+    Bootstrap.prototype.initialize = function(options) {
+      var defs;
+      defs = {
+        showEffect: null,
+        hideEffect: null
+      };
+      this.options = _.extend(defs, options);
+      return this.tip = new Tourist.Tip.BootstrapTip(this.options);
+    };
+
+    Bootstrap.prototype.destroy = function() {
+      this.tip.destroy();
+      return Bootstrap.__super__.destroy.call(this);
+    };
+
+    Bootstrap.prototype.show = function() {
+      var fn;
+      if (this.options.showEffect) {
+        fn = Tourist.Tip.Bootstrap.effects[this.options.showEffect];
+        return fn.call(this, this.tip, this.tip.el);
+      } else {
+        return this.tip.show();
+      }
+    };
+
+    Bootstrap.prototype.hide = function() {
+      var fn;
+      if (this.options.hideEffect) {
+        fn = Tourist.Tip.Bootstrap.effects[this.options.hideEffect];
+        return fn.call(this, this.tip, this.tip.el);
+      } else {
+        return this.tip.hide();
+      }
+    };
+
+    /*
+    Private
+    */
+
+
+    Bootstrap.prototype._getTipElement = function() {
+      return this.tip.el;
+    };
+
+    Bootstrap.prototype._setTarget = function(target, step) {
+      Bootstrap.__super__._setTarget.call(this, target, step);
+      return this.tip.setTarget(target);
+    };
+
+    Bootstrap.prototype._renderContent = function(step, contentElement) {
+      var at, my;
+      my = step.my || 'left center';
+      at = step.at || 'right center';
+      this.tip.setContainer(step.container || $('body'));
+      this.tip.setContent(contentElement);
+      return this.tip.setPosition(step.target || false, my, at);
+    };
+
+    return Bootstrap;
+
+  })(Tourist.Tip.Base);
+
+  Tourist.Tip.Bootstrap.effects = {
+    slidein: function(tip, element) {
+      var OFFSETS, css, easing, easings, offset, side, value, _i, _len;
+      OFFSETS = {
+        top: 80,
+        left: 80,
+        right: -80,
+        bottom: -80
+      };
+      side = tip.my.split(' ')[0];
+      side = side || 'top';
+      offset = OFFSETS[side];
+      if (side === 'bottom') {
+        side = 'top';
+      }
+      if (side === 'right') {
+        side = 'left';
+      }
+      value = parseInt(element.css(side));
+      element.stop();
+      css = {};
+      css[side] = value + offset;
+      element.css(css);
+      element.show();
+      css[side] = value;
+      easings = ['easeOutCubic', 'swing', 'linear'];
+      for (_i = 0, _len = easings.length; _i < _len; _i++) {
+        easing = easings[_i];
+        if ($.easing[easing]) {
+          break;
+        }
+      }
+      element.animate(css, 300, easing);
+      return null;
+    }
+  };
+
+  /*
+  Simple implementation of tooltip with bootstrap markup.
+  
+  Almost entirely deals with positioning. Uses the similar method for
+  positioning as qtip2:
+  
+    my: 'top center'
+    at: 'bottom center'
+  */
+
+
+  Tourist.Tip.BootstrapTip = (function() {
+    BootstrapTip.prototype.template = '<div class="popover tourist-popover">\n  <div class="arrow"></div>\n  <div class="popover-content"></div>\n</div>';
+
+    BootstrapTip.prototype.FLIP_POSITION = {
+      bottom: 'top',
+      top: 'bottom',
+      left: 'right',
+      right: 'left'
+    };
+
+    function BootstrapTip(options) {
+      var defs;
+      defs = {
+        offset: 10,
+        tipOffset: 10
+      };
+      this.options = _.extend(defs, options);
+      this.el = $($.parseHTML(this.template));
+      this.hide();
+    }
+
+    BootstrapTip.prototype.destroy = function() {
+      return this.el.remove();
+    };
+
+    BootstrapTip.prototype.show = function() {
+      return this.el.show().addClass('visible');
+    };
+
+    BootstrapTip.prototype.hide = function() {
+      return this.el.hide().removeClass('visible');
+    };
+
+    BootstrapTip.prototype.setTarget = function(target) {
+      this.target = target;
+      return this._setPosition(this.target, this.my, this.at);
+    };
+
+    BootstrapTip.prototype.setPosition = function(target, my, at) {
+      this.target = target;
+      this.my = my;
+      this.at = at;
+      return this._setPosition(this.target, this.my, this.at);
+    };
+
+    BootstrapTip.prototype.setContainer = function(container) {
+      return container.append(this.el);
+    };
+
+    BootstrapTip.prototype.setContent = function(content) {
+      return this._getContentElement().html(content);
+    };
+
+    /*
+    Private
+    */
+
+
+    BootstrapTip.prototype._getContentElement = function() {
+      return this.el.find('.popover-content');
+    };
+
+    BootstrapTip.prototype._getTipElement = function() {
+      return this.el.find('.arrow');
+    };
+
+    BootstrapTip.prototype._setPosition = function(target, my, at) {
+      var clas, css, originalDisplay, position, shift, targetPosition, tip, tipOffset, tipPosition, _ref2;
+      if (my == null) {
+        my = 'left center';
+      }
+      if (at == null) {
+        at = 'right center';
+      }
+      if (!target) {
+        return;
+      }
+      _ref2 = my.split(' '), clas = _ref2[0], shift = _ref2[1];
+      originalDisplay = this.el.css('display');
+      this.el.css({
+        top: 0,
+        left: 0,
+        margin: 0,
+        display: 'block'
+      }).removeClass('top').removeClass('bottom').removeClass('left').removeClass('right').addClass(this.FLIP_POSITION[clas]);
+      if (!target) {
+        return;
+      }
+      tip = this._getTipElement().css({
+        left: '',
+        right: '',
+        top: '',
+        bottom: ''
+      });
+      if (shift !== 'center') {
+        tipOffset = {
+          left: tip[0].offsetWidth / 2,
+          right: 0,
+          top: tip[0].offsetHeight / 2,
+          bottom: 0
+        };
+        css = {};
+        css[shift] = tipOffset[shift] + this.options.tipOffset;
+        css[this.FLIP_POSITION[shift]] = 'auto';
+        tip.css(css);
+      }
+      targetPosition = this._caculateTargetPosition(at, target);
+      tipPosition = this._caculateTipPosition(my, targetPosition);
+      position = this._adjustForArrow(my, tipPosition);
+      this.el.css(position);
+      return this.el.css({
+        display: originalDisplay
+      });
+    };
+
+    BootstrapTip.prototype._caculateTargetPosition = function(atPosition, target) {
+      var bounds, pos;
+      if (Object.prototype.toString.call(target) === '[object Array]') {
+        return {
+          left: target[0],
+          top: target[1]
+        };
+      }
+      bounds = this._getTargetBounds(target);
+      pos = this._lookupPosition(atPosition, bounds.width, bounds.height);
+      return {
+        left: bounds.left + pos[0],
+        top: bounds.top + pos[1]
+      };
+    };
+
+    BootstrapTip.prototype._caculateTipPosition = function(myPosition, targetPosition) {
+      var height, pos, width;
+      width = this.el[0].offsetWidth;
+      height = this.el[0].offsetHeight;
+      pos = this._lookupPosition(myPosition, width, height);
+      return {
+        left: targetPosition.left - pos[0],
+        top: targetPosition.top - pos[1]
+      };
+    };
+
+    BootstrapTip.prototype._adjustForArrow = function(myPosition, tipPosition) {
+      var clas, height, position, shift, tip, width, _ref2;
+      _ref2 = myPosition.split(' '), clas = _ref2[0], shift = _ref2[1];
+      tip = this._getTipElement();
+      width = tip[0].offsetWidth;
+      height = tip[0].offsetHeight;
+      position = {
+        top: tipPosition.top,
+        left: tipPosition.left
+      };
+      switch (clas) {
+        case 'top':
+          position.top += height + this.options.offset;
+          break;
+        case 'bottom':
+          position.top -= height + this.options.offset;
+          break;
+        case 'left':
+          position.left += width + this.options.offset;
+          break;
+        case 'right':
+          position.left -= width + this.options.offset;
+      }
+      switch (shift) {
+        case 'left':
+          position.left -= width / 2 + this.options.tipOffset;
+          break;
+        case 'right':
+          position.left += width / 2 + this.options.tipOffset;
+          break;
+        case 'top':
+          position.top -= height / 2 + this.options.tipOffset;
+          break;
+        case 'bottom':
+          position.top += height / 2 + this.options.tipOffset;
+      }
+      return position;
+    };
+
+    BootstrapTip.prototype._lookupPosition = function(position, width, height) {
+      var height2, posLookup, width2;
+      width2 = width / 2;
+      height2 = height / 2;
+      posLookup = {
+        'top left': [0, 0],
+        'left top': [0, 0],
+        'top right': [width, 0],
+        'right top': [width, 0],
+        'bottom left': [0, height],
+        'left bottom': [0, height],
+        'bottom right': [width, height],
+        'right bottom': [width, height],
+        'top center': [width2, 0],
+        'left center': [0, height2],
+        'right center': [width, height2],
+        'bottom center': [width2, height]
+      };
+      return posLookup[position];
+    };
+
+    BootstrapTip.prototype._getTargetBounds = function(target) {
+      var el, size;
+      el = target[0];
+      if (typeof el.getBoundingClientRect === 'function') {
+        size = el.getBoundingClientRect();
+      } else {
+        size = {
+          width: el.offsetWidth,
+          height: el.offsetHeight
+        };
+      }
+      return $.extend({}, size, target.offset());
+    };
+
+    return BootstrapTip;
+
+  })();
+
+  /*
+  Qtip based tip implementation
+  */
+
+
+  Tourist.Tip.QTip = (function(_super) {
+    var ADJUST, OFFSETS, TIP_HEIGHT, TIP_WIDTH;
+
+    __extends(QTip, _super);
+
+    function QTip() {
+      this._renderTipBackground = __bind(this._renderTipBackground, this);
+      _ref2 = QTip.__super__.constructor.apply(this, arguments);
+      return _ref2;
+    }
+
+    TIP_WIDTH = 6;
+
+    TIP_HEIGHT = 14;
+
+    ADJUST = 10;
+
+    OFFSETS = {
+      top: 80,
+      left: 80,
+      right: -80,
+      bottom: -80
+    };
+
+    QTip.prototype.QTIP_DEFAULTS = {
+      content: {
+        text: ' '
+      },
+      show: {
+        ready: false,
+        delay: 0,
+        effect: function(qtip) {
+          var css, el, offset, side, value;
+          el = $(this);
+          side = qtip.options.position.my;
+          if (side) {
+            side = side[side.precedance];
+          }
+          side = side || 'top';
+          offset = OFFSETS[side];
+          if (side === 'bottom') {
+            side = 'top';
+          }
+          if (side === 'right') {
+            side = 'left';
+          }
+          value = parseInt(el.css(side));
+          css = {};
+          css[side] = value + offset;
+          el.css(css);
+          el.show();
+          css[side] = value;
+          el.animate(css, 300, 'easeOutCubic');
+          return null;
+        },
+        autofocus: false
+      },
+      hide: {
+        event: null,
+        delay: 0,
+        effect: false
+      },
+      position: {
+        adjust: {
+          method: 'shift shift',
+          scroll: false
+        }
+      },
+      style: {
+        classes: 'ui-tour-tip',
+        tip: {
+          height: TIP_WIDTH,
+          width: TIP_HEIGHT
+        }
+      },
+      events: {},
+      zindex: 2000
+    };
+
+    QTip.prototype.initialize = function(options) {
+      options = $.extend(true, {}, this.QTIP_DEFAULTS, options);
+      this.el.qtip(options);
+      this.qtip = this.el.qtip('api');
+      return this.qtip.render();
+    };
+
+    QTip.prototype.destroy = function() {
+      if (this.qtip) {
+        this.qtip.destroy();
+      }
+      return QTip.__super__.destroy.call(this);
+    };
+
+    QTip.prototype.show = function() {
+      return this.qtip.show();
+    };
+
+    QTip.prototype.hide = function() {
+      return this.qtip.hide();
+    };
+
+    /*
+    Private
+    */
+
+
+    QTip.prototype._getTipElement = function() {
+      return $('#qtip-' + this.qtip.id);
+    };
+
+    QTip.prototype._setTarget = function(targetElement, step) {
+      QTip.__super__._setTarget.call(this, targetElement, step);
+      return this.qtip.set('position.target', targetElement || false);
+    };
+
+    QTip.prototype._renderContent = function(step, contentElement) {
+      var at, my,
+        _this = this;
+      my = step.my || 'left center';
+      at = step.at || 'right center';
+      this._adjustPlacement(my, at);
+      this.qtip.set('content.text', contentElement);
+      this.qtip.set('position.container', step.container || $('body'));
+      this.qtip.set('position.my', my);
+      this.qtip.set('position.at', at);
+      this.qtip.set('position.viewport', step.viewport || false);
+      this.qtip.set('position.target', step.target || false);
+      return setTimeout(function() {
+        return _this._renderTipBackground(my.split(' ')[0]);
+      }, 10);
+    };
+
+    QTip.prototype._adjustPlacement = function(my, at) {
+      if (my.indexOf('top') === 0) {
+        return this._adjust(0, ADJUST);
+      } else if (my.indexOf('bottom') === 0) {
+        return this._adjust(0, -ADJUST);
+      } else if (my.indexOf('right') === 0) {
+        return this._adjust(-ADJUST, 0);
+      } else {
+        return this._adjust(ADJUST, 0);
+      }
+    };
+
+    QTip.prototype._adjust = function(adjustX, adjusty) {
+      this.qtip.set('position.adjust.x', adjustX);
+      return this.qtip.set('position.adjust.y', adjusty);
+    };
+
+    QTip.prototype._renderTipBackground = function(direction) {
+      var bg, el;
+      el = $('#qtip-' + this.qtip.id + ' .qtip-tip');
+      bg = el.find('.qtip-tip-bg');
+      if (!bg.length) {
+        bg = $('<div/>', {
+          'class': 'icon icon-tip qtip-tip-bg'
+        });
+        el.append(bg);
+      }
+      bg.removeClass('top left right bottom');
+      return bg.addClass(direction);
+    };
+
+    return QTip;
+
+  })(Tourist.Tip.Base);
+
+  /*
+  Simplest implementation of a tooltip. Used in the tests. Useful as an example
+  as well.
+  */
+
+
+  Tourist.Tip.Simple = (function(_super) {
+    __extends(Simple, _super);
+
+    function Simple() {
+      _ref3 = Simple.__super__.constructor.apply(this, arguments);
+      return _ref3;
+    }
+
+    Simple.prototype.initialize = function(options) {
+      return $('body').append(this.el);
+    };
+
+    Simple.prototype.show = function() {
+      return this.el.show();
+    };
+
+    Simple.prototype.hide = function() {
+      return this.el.hide();
+    };
+
+    Simple.prototype._getTipElement = function() {
+      return this.el;
+    };
+
+    Simple.prototype._renderContent = function(step, contentElement) {
+      return this.el.html(contentElement);
+    };
+
+    return Simple;
+
+  })(Tourist.Tip.Base);
+
+  /*
+  
+  A way to make a tour. Basically, you specify a series of steps which explain
+  elements to point at and what to say. This class manages moving between those
+  steps.
+  
+  The 'step object' is a simple js obj that specifies how the step will behave.
+  
+  A simple Example of a step object:
+    {
+      content: '<p>Welcome to my step</p>'
+      target: $('#something-to-point-at')
+      closeButton: true
+      highlightTarget: true
+      setup: (tour, options) ->
+        # do stuff in the interface/bind
+      teardown: (tour, options) ->
+        # remove stuff/unbind
+    }
+  
+  Basic Step object options:
+  
+    content - a string of html to put into the step.
+    target - jquery object or absolute point: [10, 30]
+    highlightTarget - optional bool, true will outline the target with a bright color.
+    container - optional jquery element that should contain the step flyout.
+                default: $('body')
+    viewport - optional jquery element that the step flyout should stay within.
+               $(window) is commonly used. default: false
+  
+    my - string position of the pointer on the tip. default: 'left center'
+    at - string position on the element the tip points to. default: 'right center'
+    see http://craigsworks.com/projects/qtip2/docs/position/#basics
+  
+  Step object button options:
+  
+    okButton - optional bool, true will show a red ok button
+    closeButton - optional bool, true will show a grey close button
+    skipButton - optional bool, true will show a grey skip button
+    nextButton - optional bool, true will show a red next button
+  
+  Step object function options:
+  
+    All functions on the step will have the signature '(tour, options) ->'
+  
+      tour - the Draw.Tour object. Handy to call tour.next()
+      options - the step options. An object passed into the tour when created.
+                It has the environment that the fns can use to manipulate the
+                interface, bind to events, etc. The same object is passed to all
+                of a step object's functions, so it is handy for passing data
+                between steps.
+  
+    setup - called before step is shown. Use to scroll to your target, hide/show things, ...
+  
+      'this' is the step object itself.
+  
+      MUST return an object. Properties in the returned object will override
+      properties in the step object.
+  
+      i.e. the target might be dynamic so you would specify:
+  
+      setup: (tour, options) ->
+        return { target: $('#point-to-me') }
+  
+    teardown - function called right before hiding the step. Use to unbind from
+      things you bound to in setup().
+  
+      'this' is the step object itself.
+  
+      Return nothing.
+  
+    bind - an array of function names to bind. Use this for event handlers you use in setup().
+  
+      Will bind functions to the step object as this, and the first 2 args as tour and options.
+  
+      i.e.
+  
+      bind: ['onChangeSomething']
+      setup: (tour, options) ->
+        options.document.bind('change:something', @onChangeSomething)
+      onChangeSomething: (tour, options, model, value) ->
+        tour.next()
+      teardown: (tour, options) ->
+        options.document.unbind('change:something', @onChangeSomething)
+  */
+
+
+  Tourist.Tour = (function() {
+    _.extend(Tour.prototype, Backbone.Events);
+
+    function Tour(options) {
+      var defs, tipOptions;
+      this.options = options != null ? options : {};
+      this.onChangeCurrentStep = __bind(this.onChangeCurrentStep, this);
+      this.next = __bind(this.next, this);
+      defs = {
+        tipClass: 'Bootstrap'
+      };
+      this.options = _.extend(defs, this.options);
+      this.model = new Tourist.Model({
+        current_step: null
+      });
+      tipOptions = _.extend({
+        model: this.model
+      }, this.options.tipOptions);
+      this.view = new Tourist.Tip[this.options.tipClass](tipOptions);
+      this.view.bind('click:close', _.bind(this.stop, this, true));
+      this.view.bind('click:next', this.next);
+      this.model.bind('change:current_step', this.onChangeCurrentStep);
+    }
+
+    /*
+    Public
+    */
+
+
+    Tour.prototype.start = function() {
+      this.trigger('start', this);
+      return this.next();
+    };
+
+    Tour.prototype.stop = function(doFinalStep) {
+      if (doFinalStep) {
+        return this._showCancelFinalStep();
+      } else {
+        return this._stop();
+      }
+    };
+
+    Tour.prototype.next = function() {
+      var currentStep, index;
+      currentStep = this._teardownCurrentStep();
+      index = 0;
+      if (currentStep) {
+        index = currentStep.index + 1;
+      }
+      if (index < this.options.steps.length) {
+        return this._showStep(this.options.steps[index], index);
+      } else if (index === this.options.steps.length) {
+        return this._showSuccessFinalStep();
+      } else {
+        return this._stop();
+      }
+    };
+
+    Tour.prototype.setStepOptions = function(stepOptions) {
+      return this.options.stepOptions = stepOptions;
+    };
+
+    /*
+    Handlers
+    */
+
+
+    Tour.prototype.onChangeCurrentStep = function(model, step) {
+      return this.view.render(step);
+    };
+
+    /*
+    Private
+    */
+
+
+    Tour.prototype._showCancelFinalStep = function() {
+      return this._showFinalStep(false);
+    };
+
+    Tour.prototype._showSuccessFinalStep = function() {
+      return this._showFinalStep(true);
+    };
+
+    Tour.prototype._teardownCurrentStep = function() {
+      var currentStep;
+      currentStep = this.model.get('current_step');
+      this._teardownStep(currentStep);
+      return currentStep;
+    };
+
+    Tour.prototype._stop = function() {
+      this._teardownCurrentStep();
+      this.model.set({
+        current_step: null
+      });
+      return this.trigger('stop', this);
+    };
+
+    Tour.prototype._showFinalStep = function(success) {
+      var currentStep, finalStep;
+      currentStep = this._teardownCurrentStep();
+      finalStep = success ? this.options.successStep : this.options.cancelStep;
+      if (_.isFunction(finalStep)) {
+        finalStep.call(this, this, this.options.stepOptions);
+        finalStep = null;
+      }
+      if (!finalStep) {
+        return this._stop();
+      }
+      if (currentStep && currentStep.final) {
+        return this._stop();
+      }
+      finalStep.final = true;
+      return this._showStep(finalStep, this.options.steps.length);
+    };
+
+    Tour.prototype._showStep = function(step, index) {
+      if (!step) {
+        return;
+      }
+      step = _.clone(step);
+      step.index = index;
+      step.total = this.options.steps.length;
+      if (!step.final) {
+        step.final = this.options.steps.length === index + 1 && !this.options.successStep;
+      }
+      step = _.extend(step, this._setupStep(step));
+      return this.model.set({
+        current_step: step
+      });
+    };
+
+    Tour.prototype._setupStep = function(step) {
+      var fn, _i, _len, _ref4;
+      if (!(step && step.setup)) {
+        return {};
+      }
+      if (step.bind) {
+        _ref4 = step.bind;
+        for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
+          fn = _ref4[_i];
+          step[fn] = _.bind(step[fn], step, this, this.options.stepOptions);
+        }
+      }
+      return step.setup.call(step, this, this.options.stepOptions) || {};
+    };
+
+    Tour.prototype._teardownStep = function(step) {
+      if (step && step.teardown) {
+        step.teardown.call(step, this, this.options.stepOptions);
+      }
+      return this.view.cleanupCurrentTarget();
+    };
+
+    return Tour;
+
+  })();
+
+}).call(this, jQuery);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..590498fff5fd515c6c61d4f7dd682a2f132b5f4b
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.min.css
@@ -0,0 +1 @@
+.tour-highlight{background:0 0;-moz-box-shadow:0 0 7px 0 rgba(0,241,255,.701961);-webkit-box-shadow:0 0 7px 0 rgba(0,241,255,.701961);-o-box-shadow:0 0 7px 0 rgba(0,241,255,.701961);box-shadow:0 0 7px 0 rgba(0,241,255,.701961);border-radius:2px}.tourist-popover{padding:0}.tourist-popover .popover-content{padding:10px 0 0;min-width:200px}.tourist-popover .popover-content p{margin:0 8px 10px}.tourist-popover .popover-content .action-label{background:rgba(0,111,255,.168627);font-size:14px;padding:3px 10px}.tourist-popover .popover-content .tour-counter{margin:0;padding:0;position:absolute;left:10px;bottom:14px;font-size:11px;color:#acacac}.tourist-popover .tour-buttons{padding:8px 10px;min-height:28px;background:#f5f5f5;border-radius:0 0 6px 6px;box-sizing:content-box}.tourist-popover .btn-close{background:0 0;border:none;position:absolute;top:4px;right:7px;padding:0;opacity:.3}.tourist-popover .btn-close:hover{opacity:.5}.qtip-tour,.qtip-tour .qtip-content{padding:0}.qtip-tour .qtip-content{padding-top:10px}.qtip-tour .qtip-content p{margin:0 8px 10px}.qtip-tour .qtip-content .action-label{background:rgba(0,111,255,.168627);font-size:14px;padding:3px 10px}.qtip-tour .qtip-content .tour-counter{font-size:11px;color:#acacac}.qtip-tour .tour-buttons{padding:8px 10px;min-height:28px;background:#f5f5f5;border-radius:0 0 6px 6px;box-sizing:content-box}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af7909bbdb0645e7e58d121121aff88dedde0bc
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/tourist/tourist.min.js
@@ -0,0 +1 @@
+(function(t){var e,o,i,n,s={}.hasOwnProperty,r=function(t,e){function o(){this.constructor=t}for(var i in e)s.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},p=function(t,e){return function(){return t.apply(e,arguments)}};window.Tourist=window.Tourist||{},Tourist.Model=function(t){function o(){return e=o.__super__.constructor.apply(this,arguments)}return r(o,t),o.prototype._module="Tourist",o}(Backbone.Model),window.Tourist.Tip=window.Tourist.Tip||{},Tourist.Tip.Base=function(){function e(e){this.options=null!=e?e:{},this.onClickNext=p(this.onClickNext,this),this.onClickClose=p(this.onClickClose,this),this.el=t("<div/>"),this.initialize(e),this._bindClickEvents(),Tourist.Tip.Base._cacheTip(this)}return e.prototype._module="Tourist",_.extend(e.prototype,Backbone.Events),e.prototype.skipButtonTemplate='<button class="btn btn-default btn-sm pull-right tour-next">Skip this step →</button>',e.prototype.nextButtonTemplate='<button class="btn btn-primary btn-sm pull-right tour-next">Next step →</button>',e.prototype.finalButtonTemplate='<button class="btn btn-primary btn-sm pull-right tour-next">Finish up</button>',e.prototype.closeButtonTemplate='<a class="btn btn-close tour-close" href="#"><i class="icon icon-remove"></i></a>',e.prototype.okButtonTemplate='<button class="btn btn-sm tour-close btn-primary">Okay</button>',e.prototype.actionLabelTemplate=_.template('<h4 class="action-label"><%= label %></h4>'),e.prototype.actionLabels=["Do this:","Then this:","Next this:"],e.prototype.highlightClass="tour-highlight",e.prototype.template=_.template('<div>\n  <div class="tour-container">\n    <%= close_button %>\n    <%= content %>\n    <p class="tour-counter <%= counter_class %>"><%= counter%></p>\n  </div>\n  <div class="tour-buttons">\n    <%= buttons %>\n  </div>\n</div>'),e.prototype.destroy=function(){return this.el.remove()},e.prototype.render=function(t){return this.hide(),t&&(this._setTarget(t.target||!1,t),this._setZIndex(""),this._renderContent(t,this._buildContentElement(t)),t.target&&this.show(),t.zIndex&&this._setZIndex(t.zIndex,t)),this},e.prototype.show=function(){},e.prototype.hide=function(){},e.prototype.setTarget=function(t,e){return this._setTarget(t,e)},e.prototype.cleanupCurrentTarget=function(){return this.target&&this.target.removeClass&&this.target.removeClass(this.highlightClass),this.target=null},e.prototype.onClickClose=function(t){return this.trigger("click:close",this,t),!1},e.prototype.onClickNext=function(t){return this.trigger("click:next",this,t),!1},e.prototype._getTipElement=function(){},e.prototype._renderContent=function(t,e){},e.prototype._bindClickEvents=function(){var t;return t=this._getTipElement(),t.delegate(".tour-close","click",this.onClickClose),t.delegate(".tour-next","click",this.onClickNext)},e.prototype._setTarget=function(t,e){return this.cleanupCurrentTarget(),t&&e&&e.highlightTarget&&t.addClass(this.highlightClass),this.target=t},e.prototype._setZIndex=function(t){var e;return e=this._getTipElement(),e.css("z-index",t||"")},e.prototype._buildContentElement=function(e){var o,i;return o=this._buildButtons(e),i=t(t.parseHTML(this.template({content:e.content,buttons:o,close_button:this._buildCloseButton(e),counter:e.final?"":"step "+(e.index+1)+" of "+e.total,counter_class:e.final?"final":""}))),o||i.find(".tour-buttons").addClass("no-buttons"),this._renderActionLabels(i),i},e.prototype._buildButtons=function(t){var e;return e="",t.okButton&&(e+=this.okButtonTemplate),t.skipButton&&(e+=this.skipButtonTemplate),t.nextButton&&(e+=t.final?this.finalButtonTemplate:this.nextButtonTemplate),e},e.prototype._buildCloseButton=function(t){return t.closeButton?this.closeButtonTemplate:""},e.prototype._renderActionLabels=function(e){var o,i,n,s,r,p,h;for(n=e.find(".action"),i=0,h=[],r=0,p=n.length;r<p;r++)o=n[r],s=t(t.parseHTML(this.actionLabelTemplate({label:this.actionLabels[i]}))),s.insertBefore(o),h.push(i++);return h},e._cacheTip=function(t){return Tourist.Tip.Base._cachedTips||(Tourist.Tip.Base._cachedTips=[]),Tourist.Tip.Base._cachedTips.push(t)},e.destroy=function(){var t,e,o,i;if(Tourist.Tip.Base._cachedTips){for(i=Tourist.Tip.Base._cachedTips,e=0,o=i.length;e<o;e++)t=i[e],t.destroy();return Tourist.Tip.Base._cachedTips=null}},e}(),Tourist.Tip.Bootstrap=function(e){function i(){return o=i.__super__.constructor.apply(this,arguments)}return r(i,e),i.prototype.initialize=function(t){var e;return e={showEffect:null,hideEffect:null},this.options=_.extend(e,t),this.tip=new Tourist.Tip.BootstrapTip(this.options)},i.prototype.destroy=function(){return this.tip.destroy(),i.__super__.destroy.call(this)},i.prototype.show=function(){var t;return this.options.showEffect?(t=Tourist.Tip.Bootstrap.effects[this.options.showEffect],t.call(this,this.tip,this.tip.el)):this.tip.show()},i.prototype.hide=function(){var t;return this.options.hideEffect?(t=Tourist.Tip.Bootstrap.effects[this.options.hideEffect],t.call(this,this.tip,this.tip.el)):this.tip.hide()},i.prototype._getTipElement=function(){return this.tip.el},i.prototype._setTarget=function(t,e){return i.__super__._setTarget.call(this,t,e),this.tip.setTarget(t)},i.prototype._renderContent=function(e,o){var i,n;return n=e.my||"left center",i=e.at||"right center",this.tip.setContainer(e.container||t("body")),this.tip.setContent(o),this.tip.setPosition(e.target||!1,n,i)},i}(Tourist.Tip.Base),Tourist.Tip.Bootstrap.effects={slidein:function(e,o){var i,n,s,r,p,h,u,l,a;for(i={top:80,left:80,right:-80,bottom:-80},h=e.my.split(" ")[0],h=h||"top",p=i[h],"bottom"===h&&(h="top"),"right"===h&&(h="left"),u=parseInt(o.css(h)),o.stop(),n={},n[h]=u+p,o.css(n),o.show(),n[h]=u,r=["easeOutCubic","swing","linear"],l=0,a=r.length;l<a&&(s=r[l],!t.easing[s]);l++);return o.animate(n,300,s),null}},Tourist.Tip.BootstrapTip=function(){function e(e){var o;o={offset:10,tipOffset:10},this.options=_.extend(o,e),this.el=t(t.parseHTML(this.template)),this.hide()}return e.prototype.template='<div class="popover tourist-popover">\n  <div class="arrow"></div>\n  <div class="popover-content"></div>\n</div>',e.prototype.FLIP_POSITION={bottom:"top",top:"bottom",left:"right",right:"left"},e.prototype.destroy=function(){return this.el.remove()},e.prototype.show=function(){return this.el.show().addClass("visible")},e.prototype.hide=function(){return this.el.hide().removeClass("visible")},e.prototype.setTarget=function(t){return this.target=t,this._setPosition(this.target,this.my,this.at)},e.prototype.setPosition=function(t,e,o){return this.target=t,this.my=e,this.at=o,this._setPosition(this.target,this.my,this.at)},e.prototype.setContainer=function(t){return t.append(this.el)},e.prototype.setContent=function(t){return this._getContentElement().html(t)},e.prototype._getContentElement=function(){return this.el.find(".popover-content")},e.prototype._getTipElement=function(){return this.el.find(".arrow")},e.prototype._setPosition=function(t,e,o){var i,n,s,r,p,h,u,l,a,c;if(null==e&&(e="left center"),null==o&&(o="right center"),t&&(c=e.split(" "),i=c[0],p=c[1],s=this.el.css("display"),this.el.css({top:0,left:0,margin:0,display:"block"}).removeClass("top").removeClass("bottom").removeClass("left").removeClass("right").addClass(this.FLIP_POSITION[i]),t))return u=this._getTipElement().css({left:"",right:"",top:"",bottom:""}),"center"!==p&&(l={left:u[0].offsetWidth/2,right:0,top:u[0].offsetHeight/2,bottom:0},n={},n[p]=l[p]+this.options.tipOffset,n[this.FLIP_POSITION[p]]="auto",u.css(n)),h=this._caculateTargetPosition(o,t),a=this._caculateTipPosition(e,h),r=this._adjustForArrow(e,a),this.el.css(r),this.el.css({display:s})},e.prototype._caculateTargetPosition=function(t,e){var o,i;return"[object Array]"===Object.prototype.toString.call(e)?{left:e[0],top:e[1]}:(o=this._getTargetBounds(e),i=this._lookupPosition(t,o.width,o.height),{left:o.left+i[0],top:o.top+i[1]})},e.prototype._caculateTipPosition=function(t,e){var o,i,n;return n=this.el[0].offsetWidth,o=this.el[0].offsetHeight,i=this._lookupPosition(t,n,o),{left:e.left-i[0],top:e.top-i[1]}},e.prototype._adjustForArrow=function(t,e){var o,i,n,s,r,p,h;switch(h=t.split(" "),o=h[0],s=h[1],r=this._getTipElement(),p=r[0].offsetWidth,i=r[0].offsetHeight,n={top:e.top,left:e.left},o){case"top":n.top+=i+this.options.offset;break;case"bottom":n.top-=i+this.options.offset;break;case"left":n.left+=p+this.options.offset;break;case"right":n.left-=p+this.options.offset}switch(s){case"left":n.left-=p/2+this.options.tipOffset;break;case"right":n.left+=p/2+this.options.tipOffset;break;case"top":n.top-=i/2+this.options.tipOffset;break;case"bottom":n.top+=i/2+this.options.tipOffset}return n},e.prototype._lookupPosition=function(t,e,o){var i,n,s;return s=e/2,i=o/2,n={"top left":[0,0],"left top":[0,0],"top right":[e,0],"right top":[e,0],"bottom left":[0,o],"left bottom":[0,o],"bottom right":[e,o],"right bottom":[e,o],"top center":[s,0],"left center":[0,i],"right center":[e,i],"bottom center":[s,o]},n[t]},e.prototype._getTargetBounds=function(e){var o,i;return o=e[0],i="function"==typeof o.getBoundingClientRect?o.getBoundingClientRect():{width:o.offsetWidth,height:o.offsetHeight},t.extend({},i,e.offset())},e}(),Tourist.Tip.QTip=function(e){function o(){return this._renderTipBackground=p(this._renderTipBackground,this),i=o.__super__.constructor.apply(this,arguments)}var n,s,h,u;return r(o,e),u=6,h=14,n=10,s={top:80,left:80,right:-80,bottom:-80},o.prototype.QTIP_DEFAULTS={content:{text:" "},show:{ready:!1,delay:0,effect:function(e){var o,i,n,r,p;return i=t(this),r=e.options.position.my,r&&(r=r[r.precedance]),r=r||"top",n=s[r],"bottom"===r&&(r="top"),"right"===r&&(r="left"),p=parseInt(i.css(r)),o={},o[r]=p+n,i.css(o),i.show(),o[r]=p,i.animate(o,300,"easeOutCubic"),null},autofocus:!1},hide:{event:null,delay:0,effect:!1},position:{adjust:{method:"shift shift",scroll:!1}},style:{classes:"ui-tour-tip",tip:{height:u,width:h}},events:{},zindex:2e3},o.prototype.initialize=function(e){return e=t.extend(!0,{},this.QTIP_DEFAULTS,e),this.el.qtip(e),this.qtip=this.el.qtip("api"),this.qtip.render()},o.prototype.destroy=function(){return this.qtip&&this.qtip.destroy(),o.__super__.destroy.call(this)},o.prototype.show=function(){return this.qtip.show()},o.prototype.hide=function(){return this.qtip.hide()},o.prototype._getTipElement=function(){return t("#qtip-"+this.qtip.id)},o.prototype._setTarget=function(t,e){return o.__super__._setTarget.call(this,t,e),this.qtip.set("position.target",t||!1)},o.prototype._renderContent=function(e,o){var i,n,s=this;return n=e.my||"left center",i=e.at||"right center",this._adjustPlacement(n,i),this.qtip.set("content.text",o),this.qtip.set("position.container",e.container||t("body")),this.qtip.set("position.my",n),this.qtip.set("position.at",i),this.qtip.set("position.viewport",e.viewport||!1),this.qtip.set("position.target",e.target||!1),setTimeout(function(){return s._renderTipBackground(n.split(" ")[0])},10)},o.prototype._adjustPlacement=function(t,e){return 0===t.indexOf("top")?this._adjust(0,n):0===t.indexOf("bottom")?this._adjust(0,-n):0===t.indexOf("right")?this._adjust(-n,0):this._adjust(n,0)},o.prototype._adjust=function(t,e){return this.qtip.set("position.adjust.x",t),this.qtip.set("position.adjust.y",e)},o.prototype._renderTipBackground=function(e){var o,i;return i=t("#qtip-"+this.qtip.id+" .qtip-tip"),o=i.find(".qtip-tip-bg"),o.length||(o=t("<div/>",{class:"icon icon-tip qtip-tip-bg"}),i.append(o)),o.removeClass("top left right bottom"),o.addClass(e)},o}(Tourist.Tip.Base),Tourist.Tip.Simple=function(e){function o(){return n=o.__super__.constructor.apply(this,arguments)}return r(o,e),o.prototype.initialize=function(e){return t("body").append(this.el)},o.prototype.show=function(){return this.el.show()},o.prototype.hide=function(){return this.el.hide()},o.prototype._getTipElement=function(){return this.el},o.prototype._renderContent=function(t,e){return this.el.html(e)},o}(Tourist.Tip.Base),Tourist.Tour=function(){function t(t){var e,o;this.options=null!=t?t:{},this.onChangeCurrentStep=p(this.onChangeCurrentStep,this),this.next=p(this.next,this),e={tipClass:"Bootstrap"},this.options=_.extend(e,this.options),this.model=new Tourist.Model({current_step:null}),o=_.extend({model:this.model},this.options.tipOptions),this.view=new Tourist.Tip[this.options.tipClass](o),this.view.bind("click:close",_.bind(this.stop,this,!0)),this.view.bind("click:next",this.next),this.model.bind("change:current_step",this.onChangeCurrentStep)}return _.extend(t.prototype,Backbone.Events),t.prototype.start=function(){return this.trigger("start",this),this.next()},t.prototype.stop=function(t){return t?this._showCancelFinalStep():this._stop()},t.prototype.next=function(){var t,e;return t=this._teardownCurrentStep(),e=0,t&&(e=t.index+1),e<this.options.steps.length?this._showStep(this.options.steps[e],e):e===this.options.steps.length?this._showSuccessFinalStep():this._stop()},t.prototype.setStepOptions=function(t){return this.options.stepOptions=t},t.prototype.onChangeCurrentStep=function(t,e){return this.view.render(e)},t.prototype._showCancelFinalStep=function(){return this._showFinalStep(!1)},t.prototype._showSuccessFinalStep=function(){return this._showFinalStep(!0)},t.prototype._teardownCurrentStep=function(){var t;return t=this.model.get("current_step"),this._teardownStep(t),t},t.prototype._stop=function(){return this._teardownCurrentStep(),this.model.set({current_step:null}),this.trigger("stop",this)},t.prototype._showFinalStep=function(t){var e,o;return e=this._teardownCurrentStep(),o=t?this.options.successStep:this.options.cancelStep,_.isFunction(o)&&(o.call(this,this,this.options.stepOptions),o=null),o?e&&e.final?this._stop():(o.final=!0,this._showStep(o,this.options.steps.length)):this._stop()},t.prototype._showStep=function(t,e){if(t)return t=_.clone(t),t.index=e,t.total=this.options.steps.length,t.final||(t.final=this.options.steps.length===e+1&&!this.options.successStep),t=_.extend(t,this._setupStep(t)),this.model.set({current_step:t})},t.prototype._setupStep=function(t){var e,o,i,n;if(!t||!t.setup)return{};if(t.bind)for(n=t.bind,o=0,i=n.length;o<i;o++)e=n[o],t[e]=_.bind(t[e],t,this,this.options.stepOptions);return t.setup.call(t,this,this.options.stepOptions)||{}},t.prototype._teardownStep=function(t){return t&&t.teardown&&t.teardown.call(t,this,this.options.stepOptions),this.view.cleanupCurrentTarget()},t}()}).call(this,jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/wizard_starter_icon.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/wizard_starter_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fa3754bfa04fb2899c2ad7f1c44b1ae3757e1a9
Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/wizard_starter_icon.png differ
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php
index 416c3cc3aa4241044bdea75766b7bf3c02126fe0..04332e2ad41f8d792213c79e54fca08a0b0e4b80 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php
@@ -18,7 +18,7 @@ class M_NextGen_Basic_Album extends C_Base_Module
             'photocrati-nextgen_basic_album',
             'NextGEN Basic Album',
             "Provides support for NextGEN's Basic Album",
-            '0.12',
+            '0.17',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
@@ -191,6 +191,12 @@ class C_NextGen_Basic_Album_Installer extends C_Gallery_Display_Installer
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_album#compact_preview.jpg',
 				'default_source'		=>	'albums',
 				'view_order'            => NGG_DISPLAY_PRIORITY_BASE + 200,
+                'aliases'               =>  array(
+                    'basic_compact_album',
+                    'nextgen_basic_album',
+                    'basic_album_compact',
+                    'compact_album'
+                )
 			));
 
 		$this->install_display_type(
@@ -199,7 +205,12 @@ class C_NextGen_Basic_Album_Installer extends C_Gallery_Display_Installer
 				'entity_types'			=>	array('album', 'gallery'),
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_album#extended_preview.jpg',
 				'default_source'		=>	'albums',
-				'view_order' => NGG_DISPLAY_PRIORITY_BASE + 210
+				'view_order'            => NGG_DISPLAY_PRIORITY_BASE + 210,
+                'aliases'               =>  array(
+                    'basic_extended_album',
+                    'nextgen_basic_extended_album',
+                    'extended_album'
+                )
 			));
 	}
 }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php
index 8c7b466c8560850ea19df80696b7e3f21ac6ee2a..dae7f1ddf08fbab6aca35e376c2b8a7a3b766976 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php
@@ -1,8 +1,13 @@
 <?php
+/**
+ * Class A_NextGen_Album_Breadcrumbs
+ * @mixin C_MVC_View
+ * @adapts I_MVC_View
+ */
 class A_NextGen_Album_Breadcrumbs extends Mixin
 {
     public $breadcrumb_cache = array();
-    public function are_breadcrumbs_enabled($display_settings)
+    function are_breadcrumbs_enabled($display_settings)
     {
         $retval = FALSE;
         if (isset($display_settings['enable_breadcrumbs']) && $display_settings['enable_breadcrumbs']) {
@@ -12,7 +17,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
         }
         return $retval;
     }
-    public function get_original_album_entities($display_settings)
+    function get_original_album_entities($display_settings)
     {
         $retval = array();
         if (isset($display_settings['original_album_entities'])) {
@@ -22,7 +27,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
         }
         return $retval;
     }
-    public function render_object()
+    function render_object()
     {
         $root_element = $this->call_parent('render_object');
         if ($displayed_gallery = $this->object->get_param('displayed_gallery')) {
@@ -42,7 +47,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
         }
         return $root_element;
     }
-    public function render_legacy_template_breadcrumbs($displayed_gallery, $entities, $gallery_id = FALSE)
+    function render_legacy_template_breadcrumbs($displayed_gallery, $entities, $gallery_id = FALSE)
     {
         $ds = $displayed_gallery->display_settings;
         if (!empty($entities) && !empty($ds['template']) && $this->are_breadcrumbs_enabled($ds)) {
@@ -67,7 +72,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
             return '';
         }
     }
-    public function find_gallery_parent($gallery_id, $sortorder)
+    function find_gallery_parent($gallery_id, $sortorder)
     {
         $map = C_Album_Mapper::get_instance();
         $found = array();
@@ -92,7 +97,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
         }
         return $found;
     }
-    public function generate_breadcrumb($gallery_id = NULL, $entities)
+    function generate_breadcrumb($gallery_id = NULL, $entities)
     {
         $found = array();
         $router = C_Router::get_instance();
@@ -147,8 +152,10 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
             }
             if (!$gallery_found) {
                 $gallery = C_Gallery_Mapper::get_instance()->find($gallery_id);
-                $found[] = $gallery;
-                $this->breadcrumb_cache[$gallery->{$gallery->id_field}] = $gallery;
+                if ($gallery != null) {
+                    $found[] = $gallery;
+                    $this->breadcrumb_cache[$gallery->{$gallery->id_field}] = $gallery;
+                }
             }
         }
         $crumbs = array();
@@ -182,12 +189,17 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
         return $view->render(TRUE);
     }
 }
+/**
+ * Class A_NextGen_Album_Descriptions
+ * @mixin C_MVC_View
+ * @adapts I_MVC_View
+ */
 class A_NextGen_Album_Descriptions extends Mixin
 {
     // When viewing a child gallery the album controller's add_description_to_legacy_templates() method will be
     // called for the gallery and then again for the root album; we only want to run once
     public static $_description_added_once = FALSE;
-    public function are_descriptions_enabled($display_settings)
+    function are_descriptions_enabled($display_settings)
     {
         $retval = FALSE;
         if (isset($display_settings['enable_descriptions']) && $display_settings['enable_descriptions']) {
@@ -197,7 +209,7 @@ class A_NextGen_Album_Descriptions extends Mixin
         }
         return $retval;
     }
-    public function render_object()
+    function render_object()
     {
         $root_element = $this->call_parent('render_object');
         if ($displayed_gallery = $this->object->get_param('displayed_gallery')) {
@@ -220,7 +232,7 @@ class A_NextGen_Album_Descriptions extends Mixin
         }
         return $root_element;
     }
-    public function render_legacy_template_description($displayed_gallery)
+    function render_legacy_template_description($displayed_gallery)
     {
         if (!empty($displayed_gallery->display_settings['template']) && $this->are_descriptions_enabled($displayed_gallery->display_settings)) {
             return $this->object->generate_description($displayed_gallery);
@@ -228,7 +240,7 @@ class A_NextGen_Album_Descriptions extends Mixin
             return '';
         }
     }
-    public function generate_description($displayed_gallery)
+    function generate_description($displayed_gallery)
     {
         if (self::$_description_added_once) {
             return '';
@@ -238,7 +250,7 @@ class A_NextGen_Album_Descriptions extends Mixin
         $view = new C_MVC_View('photocrati-nextgen_basic_album#descriptions', array('description' => $description));
         return $view->render(TRUE);
     }
-    public function get_description($displayed_gallery)
+    function get_description($displayed_gallery)
     {
         $description = '';
         // Important: do not array_shift() $displayed_gallery->container_ids as it will affect breadcrumbs
@@ -263,10 +275,12 @@ class A_NextGen_Album_Descriptions extends Mixin
 }
 /**
  * Provides validation for NextGen Basic Albums
+ * @mixin C_Album_Mapper
+ * @adapts I_Album_Mapper
  */
 class A_NextGen_Basic_Album extends Mixin
 {
-    public function validation()
+    function validation()
     {
         $ngglegacy_albums = array(NGG_BASIC_COMPACT_ALBUM, NGG_BASIC_EXTENDED_ALBUM);
         if (in_array($this->object->name, $ngglegacy_albums)) {
@@ -275,22 +289,31 @@ class A_NextGen_Basic_Album extends Mixin
         }
         return $this->call_parent('validation');
     }
-    public function get_order()
+    function get_order()
     {
         return NGG_DISPLAY_PRIORITY_BASE + NGG_DISPLAY_PRIORITY_STEP;
     }
 }
+/**
+ * Class A_NextGen_Basic_Album_Controller
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller
+ */
 class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
 {
-    public $albums = array();
+    var $albums = array();
     /**
      * Renders the front-end for the NextGen Basic Album display type
      *
      * @param $displayed_gallery
      * @param bool $return
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
+        // Ensure that the open_gallery_in_lightbox setting is present
+        if (!array_key_exists('open_gallery_in_lightbox', $displayed_gallery->display_settings)) {
+            $displayed_gallery->display_settings['open_gallery_in_lightbox'] = 0;
+        }
         $display_settings = $displayed_gallery->display_settings;
         // We need to fetch the album containers selected in the Attach
         // to Post interface. We need to do this, because once we fetch the
@@ -383,6 +406,27 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
                 $params['pagination'] = $pagination_result['output'];
                 $params['image_gen_params'] = $albums['image_gen_params'];
                 $params['galleries'] = $albums['galleries'];
+                foreach ($params['galleries'] as &$gallery) {
+                    $gallery->entity_type = isset($gallery->is_gallery) && intval($gallery->is_gallery) ? 'gallery' : 'album';
+                    // If we're to open a gallery in a lightbox, we need to expose it to the lightbox
+                    // as a displayed gallery
+                    if (isset($params['open_gallery_in_lightbox']) && $gallery->entity_type == 'gallery') {
+                        $gallery->displayed_gallery = new C_Displayed_Gallery();
+                        $gallery->displayed_gallery->container_ids = array($gallery->{$gallery->id_field});
+                        $gallery->displayed_gallery->display_settings = $displayed_gallery->display_settings;
+                        $gallery->displayed_gallery->returns = 'included';
+                        $gallery->displayed_gallery->source = 'galleries';
+                        $gallery->displayed_gallery->images_list_count = $gallery->displayed_gallery->get_entity_count();
+                        $gallery->displayed_gallery->is_album_gallery = TRUE;
+                        $gallery->displayed_gallery->to_transient();
+                        if ($this->does_lightbox_support_displayed_gallery($displayed_gallery)) {
+                            $gallery->displayed_gallery->effect_code = $this->object->get_effect_code($gallery->displayed_gallery);
+                        }
+                        // Add "galleries.gallery_1 = {};"
+                        $this->object->_add_script_data('ngg_common', 'galleries.gallery_' . $gallery->displayed_gallery->id(), (array) $gallery->displayed_gallery->get_entity(), FALSE);
+                        $this->object->_add_script_data('ngg_common', 'galleries.gallery_' . $gallery->displayed_gallery->id() . '.wordpress_page_root', get_permalink(), FALSE);
+                    }
+                }
                 $params['displayed_gallery'] = $displayed_gallery;
                 $params = $this->object->prepare_display_parameters($displayed_gallery, $params);
                 switch ($displayed_gallery->display_type) {
@@ -399,7 +443,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
             return $this->object->render_partial('photocrati-nextgen_gallery_display#no_images_found', array(), $return);
         }
     }
-    public function add_breadcrumbs_to_legacy_templates($html, $displayed_gallery)
+    function add_breadcrumbs_to_legacy_templates($html, $displayed_gallery)
     {
         $this->object->add_mixin('A_NextGen_Album_Breadcrumbs');
         $original_album_entities = array();
@@ -414,7 +458,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
         }
         return $html;
     }
-    public function add_description_to_legacy_templates($html, $displayed_gallery)
+    function add_description_to_legacy_templates($html, $displayed_gallery)
     {
         $this->object->add_mixin('A_NextGen_Album_Descriptions');
         $description = $this->object->render_legacy_template_description($displayed_gallery);
@@ -428,7 +472,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
      * @param int $entity_id
      * @return stdClass (album)
      */
-    public function get_parent_album_for($entity_id)
+    function get_parent_album_for($entity_id)
     {
         $retval = NULL;
         foreach ($this->albums as $album) {
@@ -439,7 +483,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
         }
         return $retval;
     }
-    public function prepare_legacy_album_params($displayed_gallery, $params)
+    function prepare_legacy_album_params($displayed_gallery, $params)
     {
         $image_mapper = C_Image_Mapper::get_instance();
         $storage = C_Gallery_Storage::get_instance();
@@ -461,6 +505,8 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
             $gallery->previewurl = '';
             if ($gallery->previewpic && $gallery->previewpic > 0) {
                 if ($image = $image_mapper->find(intval($gallery->previewpic))) {
+                    $gallery->previewpic_image = $image;
+                    $gallery->previewpic_fullsized_url = $storage->get_image_url($image, 'full');
                     $gallery->previewurl = $storage->get_image_url($image, $image_gen->get_size_name($image_gen_params), TRUE);
                     $gallery->previewname = $gallery->name;
                 }
@@ -514,7 +560,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
         unset($image_gen_params);
         return $params;
     }
-    public function _get_js_lib_url()
+    function _get_js_lib_url()
     {
         return $this->object->get_static_url('photocrati-nextgen_basic_album#init.js');
     }
@@ -523,7 +569,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
      *
      * @param C_Displayed_Gallery $displayed_gallery
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
         wp_enqueue_style('nextgen_basic_album_style', $this->object->get_static_url('photocrati-nextgen_basic_album#nextgen_basic_album.css'), FALSE, NGG_SCRIPT_VERSION);
@@ -536,9 +582,14 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
         $this->enqueue_ngg_styles();
     }
 }
+/**
+ * Class A_NextGen_Basic_Album_Mapper
+ * @mixin C_Display_Type_Mapper
+ * @adapts I_Display_Type_Mapper
+ */
 class A_NextGen_Basic_Album_Mapper extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (isset($entity->name) && in_array($entity->name, array(NGG_BASIC_COMPACT_ALBUM, NGG_BASIC_EXTENDED_ALBUM))) {
@@ -549,6 +600,7 @@ class A_NextGen_Basic_Album_Mapper extends Mixin
             $this->object->_set_default_value($entity, 'settings', 'disable_pagination', 0);
             $this->object->_set_default_value($entity, 'settings', 'enable_descriptions', 0);
             $this->object->_set_default_value($entity, 'settings', 'template', '');
+            $this->object->_set_default_value($entity, 'settings', 'open_gallery_in_lightbox', 0);
             // Thumbnail dimensions -- only used by extended albums
             if ($entity->name == NGG_BASIC_EXTENDED_ALBUM) {
                 $this->_set_default_value($entity, 'settings', 'override_thumbnail_settings', 0);
@@ -566,9 +618,14 @@ class A_NextGen_Basic_Album_Mapper extends Mixin
         }
     }
 }
+/**
+ * Class A_NextGen_Basic_Album_Routes
+ * @mixin C_Displayed_Gallery_Renderer
+ * @adapts I_Displayed_Gallery_Renderer
+ */
 class A_NextGen_Basic_Album_Routes extends Mixin
 {
-    public function render($displayed_gallery, $return = FALSE, $mode = NULL)
+    function render($displayed_gallery, $return = FALSE, $mode = NULL)
     {
         $do_rewrites = FALSE;
         $app = NULL;
@@ -576,7 +633,7 @@ class A_NextGen_Basic_Album_Routes extends Mixin
         $original_display_type = isset($displayed_gallery->display_settings['original_display_type']) ? $displayed_gallery->display_settings['original_display_type'] : '';
         $display_type = $displayed_gallery->display_type;
         // If we're viewing an album, rewrite the urls
-        $regex = '/photocrati-nextgen_basic_\\w+_album/';
+        $regex = "/photocrati-nextgen_basic_\\w+_album/";
         if (preg_match($regex, $display_type)) {
             $do_rewrites = TRUE;
             // Get router
@@ -588,6 +645,9 @@ class A_NextGen_Basic_Album_Routes extends Mixin
             // avoid conflicts with imagebrowser
             $app->rewrite("{*}{$slug}/{\\w}/{\\w}/{\\w}{*}", "{1}{$slug}/album--{2}/gallery--{3}/{4}{5}", FALSE, TRUE);
             $app->rewrite("{*}{$slug}/{\\w}/{\\w}", "{1}{$slug}/album--{2}/gallery--{3}", FALSE, TRUE);
+            // TODO: We're commenting this out as it was causing a problem with sub-album requests not
+            // working when placed beside paginated galleries. But we still need to figure out why, and fix that
+            // $app->rewrite("{*}{$slug}/{\\w}", "{1}{$slug}/album--{2}", FALSE, TRUE);
         } elseif (preg_match($regex, $original_display_type)) {
             $do_rewrites = TRUE;
             // Get router
@@ -605,9 +665,14 @@ class A_NextGen_Basic_Album_Routes extends Mixin
         return $this->call_parent('render', $displayed_gallery, $return, $mode);
     }
 }
+/**
+ * Class A_NextGen_Basic_Album_Urls
+ * @mixin C_Routing_App
+ * @adapts I_Routing_App
+ */
 class A_NextGen_Basic_Album_Urls extends Mixin
 {
-    public function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
+    function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
     {
         if ($key == 'nggpage') {
             return 'page/' . $value;
@@ -619,7 +684,7 @@ class A_NextGen_Basic_Album_Urls extends Mixin
             return $this->call_parent('create_parameter_segment', $key, $value, $id, $use_prefix);
         }
     }
-    public function remove_parameter($key, $id = NULL, $url = FALSE)
+    function remove_parameter($key, $id = NULL, $url = FALSE)
     {
         $retval = $this->call_parent('remove_parameter', $key, $id, $url);
         $settings = C_NextGen_Settings::get_instance();
@@ -633,9 +698,13 @@ class A_NextGen_Basic_Album_Urls extends Mixin
         return $retval;
     }
 }
+/**
+ * Class Mixin_NextGen_Basic_Album_Form
+ * @mixin C_Form
+ */
 class Mixin_NextGen_Basic_Album_Form extends Mixin_Display_Type_Form
 {
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('nextgen_basic_album_gallery_display_type', 'nextgen_basic_album_galleries_per_page', 'nextgen_basic_album_enable_breadcrumbs', 'nextgen_basic_templates_template', 'nextgen_basic_album_enable_descriptions');
     }
@@ -643,7 +712,7 @@ class Mixin_NextGen_Basic_Album_Form extends Mixin_Display_Type_Form
      * Renders the Gallery Display Type field
      * @param C_Display_Type $display_type
      */
-    public function _render_nextgen_basic_album_gallery_display_type_field($display_type)
+    function _render_nextgen_basic_album_gallery_display_type_field($display_type)
     {
         $mapper = C_Display_Type_Mapper::get_instance();
         return $this->render_partial('photocrati-nextgen_basic_album#nextgen_basic_album_gallery_display_type', array('display_type_name' => $display_type->name, 'gallery_display_type_label' => __('Display galleries as', 'nggallery'), 'gallery_display_type_help' => __('How would you like galleries to be displayed?', 'nggallery'), 'gallery_display_type' => $display_type->settings['gallery_display_type'], 'galleries_per_page_label' => __('Galleries per page', 'nggallery'), 'galleries_per_page' => $display_type->settings['galleries_per_page'], 'display_types' => $mapper->find_by_entity_type('image')), TRUE);
@@ -652,29 +721,34 @@ class Mixin_NextGen_Basic_Album_Form extends Mixin_Display_Type_Form
      * Renders the Galleries Per Page field
      * @param C_Display_Type $display_type
      */
-    public function _render_nextgen_basic_album_galleries_per_page_field($display_type)
+    function _render_nextgen_basic_album_galleries_per_page_field($display_type)
     {
         return $this->_render_number_field($display_type, 'galleries_per_page', __('Items per page', 'nggallery'), $display_type->settings['galleries_per_page'], __('Maximum number of galleries or sub-albums to appear on a single page', 'nggallery'), FALSE, '', 0);
     }
-    public function _render_nextgen_basic_album_enable_breadcrumbs_field($display_type)
+    function _render_nextgen_basic_album_enable_breadcrumbs_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'enable_breadcrumbs', __('Enable breadcrumbs', 'nggallery'), isset($display_type->settings['enable_breadcrumbs']) ? $display_type->settings['enable_breadcrumbs'] : FALSE);
     }
-    public function _render_nextgen_basic_album_enable_descriptions_field($display_type)
+    function _render_nextgen_basic_album_enable_descriptions_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'enable_descriptions', __('Display descriptions', 'nggallery'), $display_type->settings['enable_descriptions']);
     }
 }
+/**
+ * Class A_NextGen_Basic_Extended_Album_Form
+ * @mixin C_Form
+ * @adapts I_Form for the "photocrati-nextgen_basic_extended_album" context
+ */
 class A_NextGen_Basic_Extended_Album_Form extends Mixin_NextGen_Basic_Album_Form
 {
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_EXTENDED_ALBUM;
     }
     /**
      * Returns a list of fields to render on the settings page
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         $fields = parent::_get_field_names();
         $fields[] = 'thumbnail_override_settings';
@@ -683,7 +757,7 @@ class A_NextGen_Basic_Extended_Album_Form extends Mixin_NextGen_Basic_Album_Form
     /**
      * Enqueues static resources required by this form
      */
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_script('nextgen_basic_extended_albums_settings_script', $this->object->get_static_url('photocrati-nextgen_basic_album#extended_settings.js'), array('jquery.nextgen_radio_toggle'), NGG_SCRIPT_VERSION);
         $atp = C_Attach_Controller::get_instance();
@@ -692,16 +766,21 @@ class A_NextGen_Basic_Extended_Album_Form extends Mixin_NextGen_Basic_Album_Form
         }
     }
 }
+/**
+ * Class A_NextGen_Basic_Compact_Album_Form
+ * @mixin C_Form
+ * @adapts I_Form for the "photocrati-nextgen_basic_compact_album" context
+ */
 class A_NextGen_Basic_Compact_Album_Form extends Mixin_NextGen_Basic_Album_Form
 {
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_COMPACT_ALBUM;
     }
     /**
      * Returns a list of fields to render on the settings page
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         $fields = parent::_get_field_names();
         $fields[] = 'thumbnail_override_settings';
@@ -710,7 +789,7 @@ class A_NextGen_Basic_Compact_Album_Form extends Mixin_NextGen_Basic_Album_Form
     /**
      * Enqueues static resources required by this form
      */
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_script('nextgen_basic_compact_albums_settings_script', $this->object->get_static_url('photocrati-nextgen_basic_album#compact_settings.js'), array('jquery.nextgen_radio_toggle'), NGG_SCRIPT_VERSION);
         $atp = C_Attach_Controller::get_instance();
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/breadcrumbs.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/breadcrumbs.min.css
index 6aaaadbbaa989a9ce7fa6ba35f0141b35e8ac1ee..f4cf50063fef4e498619c8fb34d066a43a235379 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/breadcrumbs.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/breadcrumbs.min.css
@@ -1 +1 @@
-.ngg-breadcrumbs{list-style:none;overflow:hidden;margin:0;padding:.5em 0 .5em 0}ul.ngg-breadcrumbs>li{float:left;padding:0 .3em 0 .15em;margin:0;vertical-align:middle;border:0;list-style-type:none}.ngg-breadcrumbs .ngg-breadcrumb-divisor{margin:0;padding:0 0 0 .15em}
\ No newline at end of file
+.ngg-breadcrumbs{list-style:none;overflow:hidden;margin:0;padding:.5em 0}ul.ngg-breadcrumbs>li{float:left;padding:0 .3em 0 .15em;margin:0;vertical-align:middle;border:none;list-style-type:none}.ngg-breadcrumbs .ngg-breadcrumb-divisor{margin:0;padding:0 0 0 .15em}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.min.js
index 5eeee88221626fbfe6f7bb885828d1c53f1b4720..f1ad3452a4dca38f4eebb6eb92a861be27cc8849 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(5($){$(\'4[3="6-b[8]"]\').2(\'1\',$(\'#0-9\')).2(\'1\',$(\'#0-a\'))});',12,12,'tr_photocrati||nextgen_radio_toggle_tr|name|input|function|photocrati|jQuery|override_thumbnail_settings|nextgen_basic_compact_album_thumbnail_dimensions|nextgen_basic_compact_album_thumbnail_crop|nextgen_basic_compact_album'.split('|'),0,{}))
+jQuery(function(t){t('input[name="photocrati-nextgen_basic_compact_album[override_thumbnail_settings]"]').nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_basic_compact_album_thumbnail_dimensions")).nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_basic_compact_album_thumbnail_crop"))});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.min.js
index 1fd68e07e15f753018bbd1f63cca8e62262c8d6d..8fb354cb84fcea41e68f5e359fe612e8e9be8ec7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(5($){$(\'4[3="6-b[8]"]\').2(\'1\',$(\'#0-9\')).2(\'1\',$(\'#0-a\'))});',12,12,'tr_photocrati||nextgen_radio_toggle_tr|name|input|function|photocrati|jQuery|override_thumbnail_settings|nextgen_basic_extended_album_thumbnail_dimensions|nextgen_basic_extended_album_thumbnail_crop|nextgen_basic_extended_album'.split('|'),0,{}))
+jQuery(function(e){e('input[name="photocrati-nextgen_basic_extended_album[override_thumbnail_settings]"]').nextgen_radio_toggle_tr("1",e("#tr_photocrati-nextgen_basic_extended_album_thumbnail_dimensions")).nextgen_radio_toggle_tr("1",e("#tr_photocrati-nextgen_basic_extended_album_thumbnail_crop"))});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/init.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/init.min.js
index 55495b756ea0a16946bc8fb707150d136ee19689..ccafef435052822e6884f88d16a380a0082ba323 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/init.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/init.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('6(2($){$(\'.3-7-5\').4();$(\'.3-8\').9(2(){$(c).b(\'a\',1.0)})});',13,13,'||function|ngg|dotdotdot|desc|jQuery|album|albumoverview|each|opacity|css|this'.split('|'),0,{}))
+jQuery(function(o){o(".ngg-album-desc").dotdotdot(),o(".ngg-albumoverview").each(function(){o(this).css("opacity",1)})});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec4aead84fb63641edfa6f02063d26dde6d4e984
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.min.js
@@ -0,0 +1 @@
+!function(t){function e(t,e,n){var o=t.children(),r=!1;t.empty();for(var a=0,d=o.length;d>a;a++){var l=o.eq(a);if(t.append(l),n&&t.append(n),i(t,e)){l.remove(),r=!0;break}n&&n.remove()}return r}function n(e,r,a,d,l){var u=e.contents(),c=!1;e.empty();for(var s="table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, select, optgroup, option, textarea, script, style",f=0,h=u.length;h>f&&!c;f++){var p=u[f],v=t(p);void 0!==p&&(e.append(v),l&&e[e.is(s)?"after":"append"](l),3==p.nodeType?i(a,d)&&(c=o(v,r,a,d,l)):c=n(v,r,a,d,l),c||l&&l.remove())}return c}function o(t,e,n,a,u){var c=!1,s=t[0];if(void 0===s)return!1;for(var f="letter"==a.wrap?"":" ",h=l(s).split(f),p=-1,v=-1,g=0,w=h.length-1;w>=g;){var m=Math.floor((g+w)/2);if(m==v)break;v=m,d(s,h.slice(0,v+1).join(f)+a.ellipsis),i(n,a)?w=v:(p=v,g=v)}if(-1==p||1==h.length&&0==h[0].length){var b=t.parent();t.remove();var y=u?u.length:0;if(b.contents().size()>y){var x=b.contents().eq(-1-y);c=o(x,e,n,a,u)}else{var s=b.prev().contents().eq(-1)[0];if(void 0!==s){var T=r(l(s),a);d(s,T),b.remove(),c=!0}}}else{var T=r(h.slice(0,p+1).join(f),a);c=!0,d(s,T)}return c}function i(t,e){return t.innerHeight()>e.maxHeight}function r(e,n){for(;t.inArray(e.slice(-1),n.lastCharacter.remove)>-1;)e=e.slice(0,-1);return 0>t.inArray(e.slice(-1),n.lastCharacter.noEllipsis)&&(e+=n.ellipsis),e}function a(t){return{width:t.innerWidth(),height:t.innerHeight()}}function d(t,e){t.innerText?t.innerText=e:t.nodeValue?t.nodeValue=e:t.textContent&&(t.textContent=e)}function l(t){return t.innerText?t.innerText:t.nodeValue?t.nodeValue:t.textContent?t.textContent:""}function u(e,n){return void 0!==e&&(!!e&&("string"==typeof e?(e=t(e,n),!!e.length&&e):"object"==typeof e&&(void 0!==e.jquery&&e)))}function c(t){for(var e=t.innerHeight(),n=["paddingTop","paddingBottom"],o=0,i=n.length;i>o;o++){var r=parseInt(t.css(n[o]),10);isNaN(r)&&(r=0),e-=r}return e}function s(t,e){return!!t&&(e="string"==typeof e?"dotdotdot: "+e:["dotdotdot:",e],void 0!==window.console&&void 0!==window.console.log&&window.console.log(e),!1)}if(!t.fn.dotdotdot){t.fn.dotdotdot=function(o){if(0==this.length)return o&&o.debug===!1||s(!0,'No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){t(this).dotdotdot(o)});var r=this;r.data("dotdotdot")&&r.trigger("destroy.dot"),r.bind_events=function(){return r.bind("update.dot",function(o,a){o.preventDefault(),o.stopPropagation(),l.maxHeight="number"==typeof l.height?l.height:c(r),l.maxHeight+=l.tolerance,void 0!==a&&(("string"==typeof a||a instanceof HTMLElement)&&(a=t("<div />").append(a).contents()),a instanceof t&&(d=a)),g=r.wrapInner('<div class="dotdotdot" />').children(),g.empty().append(d.clone(!0)).css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var u=!1,s=!1;return h.afterElement&&(u=h.afterElement.clone(!0),h.afterElement.remove()),i(g,l)&&(s="children"==l.wrap?e(g,l,u):n(g,r,g,l,u)),g.replaceWith(g.contents()),g=null,t.isFunction(l.callback)&&l.callback.call(r[0],s,d),h.isTruncated=s,s}).bind("isTruncated.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(r[0],h.isTruncated),h.isTruncated}).bind("originalContent.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(r[0],d),d}).bind("destroy.dot",function(t){t.preventDefault(),t.stopPropagation(),r.unwatch().unbind_events().empty().append(d).data("dotdotdot",!1)}),r},r.unbind_events=function(){return r.unbind(".dot"),r},r.watch=function(){if(r.unwatch(),"window"==l.watch){var e=t(window),n=e.width(),o=e.height();e.bind("resize.dot"+h.dotId,function(){n==e.width()&&o==e.height()&&l.windowResizeFix||(n=e.width(),o=e.height(),v&&clearInterval(v),v=setTimeout(function(){r.trigger("update.dot")},10))})}else p=a(r),v=setInterval(function(){var t=a(r);(p.width!=t.width||p.height!=t.height)&&(r.trigger("update.dot"),p=a(r))},100);return r},r.unwatch=function(){return t(window).unbind("resize.dot"+h.dotId),v&&clearInterval(v),r};var d=r.contents(),l=t.extend(!0,{},t.fn.dotdotdot.defaults,o),h={},p={},v=null,g=null;return h.afterElement=u(l.after,r),h.isTruncated=!1,h.dotId=f++,r.data("dotdotdot",!0).bind_events().trigger("update.dot"),l.watch&&r.watch(),r},t.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",lastCharacter:{remove:[" ",",",";",".","!","?"],noEllipsis:[]},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0,debug:!1};var f=1,h=t.fn.html;t.fn.html=function(t){return void 0!==t?this.data("dotdotdot")&&"function"!=typeof t?this.trigger("update",[t]):h.call(this,t):h.call(this)};var p=t.fn.text;t.fn.text=function(e){if(void 0!==e){if(this.data("dotdotdot")){var n=t("<div />");return n.text(e),e=n.html(),n.remove(),this.trigger("update",[e])}return p.call(this,e)}return p.call(this)}}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.min.css
index b00b2709825b0d2f51f1a0eca0de79bdd1af0e2e..e488d85cfd6621dc82149abe9e5f5e3764c345b4 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.min.css
@@ -1 +1 @@
-.ngg-albumoverview{margin-top:10px;width:100%;clear:both;display:block !important}.ngg-album{height:100%;overflow:hidden;padding:5px;margin-bottom:5px;border:1px solid #ccc}.ngg-albumtitle{text-align:left;font-weight:bold;margin:0;padding:0;font-size:1.4em;margin-bottom:10px}.ngg-thumbnail{float:left;margin-right:12px}.ngg-thumbnail img{background-color:#fff;border:1px solid #a9a9a9;margin:4px 0 4px 5px;padding:4px;position:relative}.ngg-thumbnail img:hover{background-color:#a9a9a9}.ngg-description{text-align:left}.ngg-album-compact{float:left;padding:0 12px 4px 0 !important;margin:0 !important;text-align:left}.ngg-album-compact a{border:0}.ngg-album-compactbox{margin:0 !important;padding:8px !important;box-sizing:border-box;-moz-box-sizing:border-box;position:relative;border:1px solid gray;border-radius:6px;z-index:1}.ngg-album-compactbox:before{content:' ';position:absolute;top:0;left:0;right:0;bottom:-7px;border-bottom:1px solid gray;border-radius:6px;z-index:-1}.ngg-album-compactbox:after{content:' ';position:absolute;top:0;left:0;right:0;bottom:-4px;border-bottom:1px solid gray;border-radius:6px;z-index:-1}.ngg-album-compactbox .Thumb{margin:0 !important;padding:0 !important;border:1px solid black !important}.ngg-album-compact h4{font-size:15px;font-weight:bold;margin:0;margin-top:10px}.ngg-album-compact h4 .ngg-album-desc{overflow:hidden;display:block;height:54px}.ngg-album-compact p{font-size:11px;margin:0}.ngg-clear{clear:both;float:none}
\ No newline at end of file
+.ngg-albumtitle,.ngg-description{text-align:left}.ngg-albumoverview{margin-top:10px;width:100%;clear:both;display:block!important}.ngg-album{height:100%;overflow:hidden;padding:5px;margin-bottom:5px;border:1px solid #ccc}.ngg-albumtitle{font-weight:700;margin:0 0 10px;padding:0;font-size:1.4em}.ngg-thumbnail{float:left;margin-right:12px}.ngg-thumbnail img{background-color:#FFF;border:1px solid #A9A9A9;margin:4px 0 4px 5px;padding:4px;position:relative}.ngg-thumbnail img:hover{background-color:#A9A9A9}.ngg-album-compact{float:left;padding:0 12px 4px 0!important;margin:0!important;text-align:left}.ngg-album-compact a{border:none}.ngg-album-compactbox{margin:0!important;padding:8px!important;box-sizing:border-box;-moz-box-sizing:border-box;position:relative;border:1px solid gray;border-radius:6px;z-index:1}.ngg-album-compactbox:after,.ngg-album-compactbox:before{content:' ';position:absolute;top:0;left:0;right:0;border-bottom:1px solid gray;border-radius:6px;z-index:-1}.ngg-album-compactbox:before{bottom:-7px}.ngg-album-compactbox:after{bottom:-4px}.ngg-album-compactbox .Thumb{margin:0!important;padding:0!important;border:1px solid #000!important}.ngg-album-compact h4{font-size:15px;font-weight:700;margin:10px 0 0}.ngg-album-compact h4 .ngg-album-desc{overflow:hidden;display:block;height:54px}.ngg-album-compact p{font-size:11px;margin:0}.ngg-clear{clear:both;float:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php
index dedf96d6a44dc8bdda7ab45e0613c2dc079387a3..20e5c85d0b3bd86a522844b9feee6cc6ee5ed26f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php
@@ -4,11 +4,30 @@
         <div class="ngg-album-compact">
             <div class="ngg-album-compactbox">
                 <div class="ngg-album-link">
-                    <a class="Link gallery_link" href="<?php echo nextgen_esc_url($gallery->pagelink); ?>">
-                        <img class="Thumb"
-                             alt="<?php echo esc_attr($gallery->title); ?>"
-                             src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/>
-                    </a>
+                    <?php $this->start_element('nextgen_gallery.album_gallery', 'item', $gallery); ?>
+                    <?php if ($open_gallery_in_lightbox AND $gallery->entity_type == 'gallery'): ?>
+                        <a
+                            <?php echo $gallery->displayed_gallery->effect_code ?>
+                            href="<?php echo esc_attr($gallery->previewpic_fullsized_url)?>"
+                            data-fullsize="<?php echo esc_attr($gallery->previewpic_fullsized_url) ?>"
+                            data-src="<?php echo esc_attr($gallery->previewpic_fullsized_url) ?>"
+                            data-thumbnail="<?php echo esc_attr($gallery->previewurl)?>"
+                            data-title="<?php echo esc_attr($gallery->previewpic_image->alttext)?>"
+                            data-description="<?php echo esc_attr(stripslashes($gallery->previewpic_image->description))?>"
+                            data-image-id="<?php echo esc_attr($gallery->previewpic)?>"
+                        >
+                            <img class="Thumb"
+                                 alt="<?php echo esc_attr($gallery->title); ?>"
+                                 src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/>
+                        </a>
+                    <?php else: ?>
+                        <a class="Link gallery_link" href="<?php echo nextgen_esc_url($gallery->pagelink); ?>">
+                            <img class="Thumb"
+                                 alt="<?php echo esc_attr($gallery->title); ?>"
+                                 src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/>
+                        </a>
+                    <?php endif ?>
+                    <?php $this->end_element(); ?>
                 </div>
             </div>
             <?php if (!empty($image_gen_params)) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php
index 543570846f9c6fc5b8f07a344d86b2096c4f2864..ea091c5b95cf416dea1a333def7f8364659dcb40 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php
@@ -7,7 +7,33 @@
             </div>
             <div class="ngg-albumcontent">
                 <div class="ngg-thumbnail">
-                    <a class="gallery_link" href="<?php echo nextgen_esc_url($gallery->pagelink); ?>"><img class="Thumb" alt="<?php echo esc_attr($gallery->title); ?>" src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/></a>
+                <?php if ($open_gallery_in_lightbox AND $gallery->entity_type == 'gallery'): ?>
+                    <a
+                        <?php echo $gallery->displayed_gallery->effect_code ?>
+                        href="<?php echo esc_attr($gallery->previewpic_fullsized_url)?>"
+                        data-fullsize="<?php echo esc_attr($gallery->previewpic_fullsized_url) ?>"
+                        data-src="http://sandbox.dev/wp-content/gallery/wood-cutting/DSC_0236.JPG"
+                        data-thumbnail="<?php echo esc_attr($gallery->previewurl)?>"
+                        data-title="<?php echo esc_attr($gallery->previewpic_image->alttext)?>"
+                        data-description="<?php echo esc_attr(stripslashes($gallery->previewpic_image->description))?>"
+                        data-image-id="<?php echo esc_attr($gallery->previewpic)?>"
+                    >
+                        <img class="Thumb"
+                             alt="<?php echo esc_attr($gallery->title); ?>"
+                             src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/>
+                    </a>
+                <?php else: ?>
+                        <a
+                            class="gallery_link"
+                            href="<?php echo nextgen_esc_url($gallery->pagelink); ?>"
+                        >
+                            <img
+                                class="Thumb"
+                                alt="<?php echo esc_attr($gallery->title); ?>"
+                                src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"
+                            />
+                        </a>
+                <?php endif ?>
                 </div>
                 <div class="ngg-description">
                     <p><?php echo_safe_html($gallery->galdesc); ?></p>
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php
index 04aeaf3a1d206445ecfa4c11a89c4a49182c8ed4..9b1c3ffbd1c8630b219d17eafa2e294ce72a9a61 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php
@@ -25,7 +25,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module
             'photocrati-nextgen_basic_gallery',
             'NextGEN Basic Gallery',
             "Provides NextGEN Gallery's basic thumbnail/slideshow integrated gallery",
-            '0.14',
+            '0.16',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
@@ -342,7 +342,12 @@ class C_NextGen_Basic_Gallery_Installer extends C_Gallery_Display_Installer
 				'entity_types'			=>	array('image'),
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_gallery#thumb_preview.jpg',
 				'default_source'		=>	'galleries',
-				'view_order' => NGG_DISPLAY_PRIORITY_BASE
+				'view_order'            =>  NGG_DISPLAY_PRIORITY_BASE,
+                'aliases'               =>  array(
+                    'basic_thumbnail',
+                    'basic_thumbnails',
+                    'nextgen_basic_thumbnails',
+                )
 			)
 		);
 
@@ -352,7 +357,11 @@ class C_NextGen_Basic_Gallery_Installer extends C_Gallery_Display_Installer
 				'entity_types'			=>	array('image'),
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_gallery#slideshow_preview.jpg',
 				'default_source'		=>	'galleries',
-				'view_order' => NGG_DISPLAY_PRIORITY_BASE + 10
+				'view_order'            => NGG_DISPLAY_PRIORITY_BASE + 10,
+                'aliases'               =>  array(
+                    'basic_slideshow',
+                    'nextgen_basic_slideshow'
+                )
 			)
 		);
 	}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/package.module.nextgen_basic_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/package.module.nextgen_basic_gallery.php
index 5b0d5272e2e4a87bf8ca5ff5c62ec6878cc8601e..3b5c1cc9373cc31de2374925fa3f36f4d7e75d10 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/package.module.nextgen_basic_gallery.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/package.module.nextgen_basic_gallery.php
@@ -1,7 +1,12 @@
 <?php
+/**
+ * Class A_NextGen_Basic_Gallery_Controller
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller for both "photocrati-nextgen_basic_slideshow" and "photocrati-nextgen_basic_thumbnails" contexts
+ */
 class A_NextGen_Basic_Gallery_Controller extends Mixin
 {
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         $retval = '';
         $call_parent = TRUE;
@@ -35,7 +40,7 @@ class A_NextGen_Basic_Gallery_Controller extends Mixin
      * @param string $display_type
      * @return string
      */
-    public function get_url_for_alternate_display_type($displayed_gallery, $display_type, $origin_url = FALSE)
+    function get_url_for_alternate_display_type($displayed_gallery, $display_type, $origin_url = FALSE)
     {
         if (!$origin_url && !empty($displayed_gallery->display_settings['original_display_type']) && !empty($_SERVER['ORIG_REQUEST_URI'])) {
             $origin_url = $_SERVER['ORIG_REQUEST_URI'];
@@ -48,10 +53,12 @@ class A_NextGen_Basic_Gallery_Controller extends Mixin
 }
 /**
  * Sets default values for the NextGen Basic Slideshow display type
+ * @mixin C_Display_Type_Mapper
+ * @adapts I_Display_Type_Mapper
  */
 class A_NextGen_Basic_Gallery_Mapper extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (isset($entity->name)) {
@@ -64,7 +71,7 @@ class A_NextGen_Basic_Gallery_Mapper extends Mixin
             }
         }
     }
-    public function set_slideshow_defaults($entity)
+    function set_slideshow_defaults($entity)
     {
         $settings = C_NextGen_Settings::get_instance();
         $this->object->_set_default_value($entity, 'settings', 'gallery_width', $settings->irWidth);
@@ -72,7 +79,7 @@ class A_NextGen_Basic_Gallery_Mapper extends Mixin
         $this->object->_set_default_value($entity, 'settings', 'thumbnail_width', $settings->thumbwidth);
         $this->object->_set_default_value($entity, 'settings', 'thumbnail_height', $settings->thumbheight);
         $this->object->_set_default_value($entity, 'settings', 'cycle_interval', $settings->irRotatetime);
-        $this->object->_set_default_value($entity, 'settings', 'cycle_effect', $settings->slideFx);
+        $this->object->_set_default_value($entity, 'settings', 'cycle_effect', $settings->slideFX);
         $this->object->_set_default_value($entity, 'settings', 'effect_code', $settings->thumbCode);
         $this->object->_set_default_value($entity, 'settings', 'show_thumbnail_link', $settings->galShowSlide ? 1 : 0);
         $this->object->_set_default_value($entity, 'settings', 'thumbnail_link_text', $settings->galTextGallery);
@@ -80,7 +87,7 @@ class A_NextGen_Basic_Gallery_Mapper extends Mixin
         // Part of the pro-modules
         $this->object->_set_default_value($entity, 'settings', 'ngg_triggers_display', 'never');
     }
-    public function set_thumbnail_defaults($entity)
+    function set_thumbnail_defaults($entity)
     {
         $settings = C_NextGen_Settings::get_instance();
         $this->object->_set_default_value($entity, 'settings', 'images_per_page', $settings->galImages);
@@ -106,9 +113,14 @@ class A_NextGen_Basic_Gallery_Mapper extends Mixin
         $this->object->_set_default_value($entity, 'settings', 'ngg_triggers_display', 'never');
     }
 }
+/**
+ * Class A_NextGen_Basic_Gallery_Urls
+ * @mixin C_Routing_App
+ * @adapts I_Routing_App
+ */
 class A_NextGen_Basic_Gallery_Urls extends Mixin
 {
-    public function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
+    function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
     {
         if ($key == 'show') {
             if ($value == NGG_BASIC_SLIDESHOW) {
@@ -125,12 +137,12 @@ class A_NextGen_Basic_Gallery_Urls extends Mixin
             return $this->call_parent('create_parameter_segment', $key, $value, $id, $use_prefix);
         }
     }
-    public function set_parameter_value($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
+    function set_parameter_value($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
     {
         $retval = $this->call_parent('set_parameter_value', $key, $value, $id, $use_prefix, $url);
         return $this->_set_ngglegacy_page_parameter($retval, $key, $value, $id, $use_prefix);
     }
-    public function remove_parameter($key, $id = NULL, $url = FALSE)
+    function remove_parameter($key, $id = NULL, $url = FALSE)
     {
         $retval = $this->call_parent('remove_parameter', $key, $id, $url);
         $retval = $this->_set_ngglegacy_page_parameter($retval, $key);
@@ -148,7 +160,7 @@ class A_NextGen_Basic_Gallery_Urls extends Mixin
         }
         return $retval;
     }
-    public function _set_ngglegacy_page_parameter($retval, $key, $value = NULL, $id = NULL, $use_prefix = NULL)
+    function _set_ngglegacy_page_parameter($retval, $key, $value = NULL, $id = NULL, $use_prefix = NULL)
     {
         // Get the settings manager
         $settings = C_NextGen_Settings::get_instance();
@@ -157,17 +169,17 @@ class A_NextGen_Basic_Gallery_Urls extends Mixin
         if ($key == 'nggpage') {
             $regex = "#(/{$param_slug}/.*)(/?page/\\d+/?)(.*)#";
             if (preg_match($regex, $retval, $matches)) {
-                $new_segment = $value ? "/page/{$value}" : '';
-                $retval = rtrim(str_replace($matches[0], rtrim($matches[1], '/') . $new_segment . ltrim($matches[3], '/'), $retval), '/');
+                $new_segment = $value ? "/page/{$value}" : "";
+                $retval = rtrim(str_replace($matches[0], rtrim($matches[1], "/") . $new_segment . ltrim($matches[3], "/"), $retval), "/");
             }
         }
         # Convert the nggpage parameter to a slug
         if (preg_match("#(/{$param_slug}/.*)nggpage--(.*)#", $retval, $matches)) {
-            $retval = rtrim(str_replace($matches[0], rtrim($matches[1], '/') . '/page/' . ltrim($matches[2], '/'), $retval), '/');
+            $retval = rtrim(str_replace($matches[0], rtrim($matches[1], "/") . "/page/" . ltrim($matches[2], "/"), $retval), "/");
         }
         # Convert the show parameter to a slug
         if (preg_match("#(/{$param_slug}/.*)show--(.*)#", $retval, $matches)) {
-            $retval = rtrim(str_replace($matches[0], rtrim($matches[1], '/') . '/' . $matches[2], $retval), '/');
+            $retval = rtrim(str_replace($matches[0], rtrim($matches[1], "/") . '/' . $matches[2], $retval), "/");
             $retval = str_replace(NGG_BASIC_SLIDESHOW, 'slideshow', $retval);
             $retval = str_replace(NGG_BASIC_THUMBNAILS, 'thumbnails', $retval);
             $retval = str_replace(NGG_BASIC_IMAGEBROWSER, 'imagebrowser', $retval);
@@ -175,9 +187,14 @@ class A_NextGen_Basic_Gallery_Urls extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_NextGen_Basic_Gallery_Validation
+ * @mixin C_Display_Type
+ * @adapts I_Display_Type
+ */
 class A_NextGen_Basic_Gallery_Validation extends Mixin
 {
-    public function validation()
+    function validation()
     {
         if ($this->object->name == NGG_BASIC_THUMBNAILS) {
             $this->object->validates_presence_of('thumbnail_width');
@@ -196,6 +213,11 @@ class A_NextGen_Basic_Gallery_Validation extends Mixin
         return $this->call_parent('validation');
     }
 }
+/**
+ * Class A_NextGen_Basic_Slideshow_Controller
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller for "photocrati-nextgen_basic_slideshow" context
+ */
 class A_NextGen_Basic_Slideshow_Controller extends Mixin
 {
     /**
@@ -203,7 +225,7 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin
      * This method deprecates the use of the nggShowGallery() function.
      * @param stdClass|C_Displayed_Gallery|C_DataMapper_Model $displayed_gallery
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         // Get the images to be displayed
         $current_page = (int) $this->param('nggpage', 1);
@@ -222,6 +244,11 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin
             $gallery_height = $displayed_gallery->display_settings['gallery_height'];
             $params['aspect_ratio'] = $gallery_width / $gallery_height;
             $params['placeholder'] = $this->object->get_static_url('photocrati-nextgen_basic_gallery#slideshow/placeholder.gif');
+            // There was a problem with the slideFX/cycle_effect parameter not getting set
+            // correctly in previous versions
+            if (!isset($params['display_settings']['cycle_effect']) or !$params['cycle_effect']) {
+                $params['cycle_effect'] = 'fade';
+            }
             // Are we to generate a thumbnail link?
             if ($displayed_gallery->display_settings['show_thumbnail_link']) {
                 $params['thumbnail_link'] = $this->object->get_url_for_alternate_display_type($displayed_gallery, NGG_BASIC_THUMBNAILS);
@@ -237,9 +264,9 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin
      * Enqueues all static resources required by this display type
      * @param C_Displayed_Gallery $displayed_gallery
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
-        wp_register_script('jquery-cycle', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/jquery.cycle.all.js'), array('jquery'), NGG_SCRIPT_VERSION);
+        wp_register_script('jquery-cycle', $this->get_static_url("photocrati-nextgen_basic_gallery#slideshow/jquery.cycle.all.js"), array('jquery'), NGG_SCRIPT_VERSION);
         wp_enqueue_script('jquery-cycle');
         wp_enqueue_style('nextgen_basic_slideshow_style', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow.css'), FALSE, NGG_SCRIPT_VERSION);
         wp_enqueue_script('waitforimages', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/jquery.waitforimages.js'), array('jquery'), NGG_SCRIPT_VERSION);
@@ -251,21 +278,23 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin
      * NextGEN Basic Slideshow to display
      * @return string
      */
-    public function _get_js_lib_url()
+    function _get_js_lib_url()
     {
         return $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow.js');
     }
 }
 /**
  * Provides the display settings form for the NextGen Basic Slideshow
+ * @mixin C_Form
+ * @adapts I_Form for "photocrati-nextgen_basic_slideshow" context
  */
 class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form
 {
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_SLIDESHOW;
     }
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_script('nextgen_basic_slideshow_settings-js', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow_settings.js'), array('jquery.nextgen_radio_toggle'), NGG_SCRIPT_VERSION);
         $atp = C_Attach_Controller::get_instance();
@@ -276,19 +305,19 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form
     /**
      * Returns a list of fields to render on the settings page
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('nextgen_basic_slideshow_gallery_dimensions', 'nextgen_basic_slideshow_cycle_effect', 'nextgen_basic_slideshow_cycle_interval', 'nextgen_basic_slideshow_show_thumbnail_link', 'nextgen_basic_slideshow_thumbnail_link_text');
     }
-    public function _render_nextgen_basic_slideshow_cycle_interval_field($display_type)
+    function _render_nextgen_basic_slideshow_cycle_interval_field($display_type)
     {
         return $this->_render_number_field($display_type, 'cycle_interval', __('Interval', 'nggallery'), $display_type->settings['cycle_interval'], '', FALSE, __('# of seconds', 'nggallery'), 1);
     }
-    public function _render_nextgen_basic_slideshow_cycle_effect_field($display_type)
+    function _render_nextgen_basic_slideshow_cycle_effect_field($display_type)
     {
         return $this->_render_select_field($display_type, 'cycle_effect', 'Effect', array('fade' => 'fade', 'blindX' => 'blindX', 'cover' => 'cover', 'scrollUp' => 'scrollUp', 'scrollDown' => 'scrollDown', 'shuffle' => 'shuffle', 'toss' => 'toss', 'wipe' => 'wipe'), $display_type->settings['cycle_effect'], '', FALSE);
     }
-    public function _render_nextgen_basic_slideshow_gallery_dimensions_field($display_type)
+    function _render_nextgen_basic_slideshow_gallery_dimensions_field($display_type)
     {
         return $this->render_partial('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow_settings_gallery_dimensions', array('display_type_name' => $display_type->name, 'gallery_dimensions_label' => __('Maximum dimensions', 'nggallery'), 'gallery_dimensions_tooltip' => __('Certain themes may allow images to flow over their container if this setting is too large', 'nggallery'), 'gallery_width' => $display_type->settings['gallery_width'], 'gallery_height' => $display_type->settings['gallery_height']), True);
     }
@@ -298,7 +327,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_slideshow_show_thumbnail_link_field($display_type)
+    function _render_nextgen_basic_slideshow_show_thumbnail_link_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'show_thumbnail_link', __('Show thumbnail link', 'nggallery'), $display_type->settings['show_thumbnail_link']);
     }
@@ -308,21 +337,26 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_slideshow_thumbnail_link_text_field($display_type)
+    function _render_nextgen_basic_slideshow_thumbnail_link_text_field($display_type)
     {
         return $this->_render_text_field($display_type, 'thumbnail_link_text', __('Thumbnail link text', 'nggallery'), $display_type->settings['thumbnail_link_text'], '', !empty($display_type->settings['show_thumbnail_link']) ? FALSE : TRUE);
     }
 }
+/**
+ * Class A_NextGen_Basic_Thumbnail_Form
+ * @mixin C_Form
+ * @adapts I_Form for photocrati-nextgen_basic_thumbnails context
+ */
 class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
 {
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_THUMBNAILS;
     }
     /**
      * Enqueues static resources required by this form
      */
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_style('nextgen_basic_thumbnails_settings', $this->object->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails_settings.css'), FALSE, NGG_SCRIPT_VERSION);
         wp_enqueue_script('nextgen_basic_thumbnails_settings', $this->object->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails_settings.js'), array('jquery.nextgen_radio_toggle'), NGG_SCRIPT_VERSION);
@@ -334,7 +368,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
     /**
      * Returns a list of fields to render on the settings page
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('thumbnail_override_settings', 'nextgen_basic_thumbnails_images_per_page', 'nextgen_basic_thumbnails_number_of_columns', 'nextgen_basic_thumbnails_ajax_pagination', 'nextgen_basic_thumbnails_hidden', 'nextgen_basic_thumbnails_imagebrowser_effect', 'nextgen_basic_thumbnails_show_slideshow_link', 'nextgen_basic_thumbnails_slideshow_link_text', 'nextgen_basic_templates_template');
     }
@@ -344,7 +378,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_thumbnails_images_per_page_field($display_type)
+    function _render_nextgen_basic_thumbnails_images_per_page_field($display_type)
     {
         return $this->_render_number_field($display_type, 'images_per_page', __('Images per page', 'nggallery'), $display_type->settings['images_per_page'], __('0 will display all images at once', 'nggallery'), FALSE, '# of images', 0);
     }
@@ -354,7 +388,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_thumbnails_number_of_columns_field($display_type)
+    function _render_nextgen_basic_thumbnails_number_of_columns_field($display_type)
     {
         return $this->_render_number_field($display_type, 'number_of_columns', __('Number of columns to display', 'nggallery'), $display_type->settings['number_of_columns'], '', FALSE, __('# of columns', 'nggallery'), 0);
     }
@@ -364,11 +398,11 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_thumbnails_hidden_field($display_type)
+    function _render_nextgen_basic_thumbnails_hidden_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'show_all_in_lightbox', __('Add Hidden Images', 'nggallery'), $display_type->settings['show_all_in_lightbox'], __('If pagination is used this option will show all images in the modal window (Thickbox, Lightbox etc.) This increases page load.', 'nggallery'));
     }
-    public function _render_nextgen_basic_thumbnails_imagebrowser_effect_field($display_type)
+    function _render_nextgen_basic_thumbnails_imagebrowser_effect_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'use_imagebrowser_effect', __('Use imagebrowser effect', 'nggallery'), $display_type->settings['use_imagebrowser_effect'], __('When active each image in the gallery will link to an imagebrowser display and lightbox effects will not be applied.', 'nggallery'));
     }
@@ -378,7 +412,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_thumbnails_ajax_pagination_field($display_type)
+    function _render_nextgen_basic_thumbnails_ajax_pagination_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'ajax_pagination', __('Enable AJAX pagination', 'nggallery'), $display_type->settings['ajax_pagination'], __('Browse images without reloading the page.', 'nggallery'));
     }
@@ -388,7 +422,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_thumbnails_show_slideshow_link_field($display_type)
+    function _render_nextgen_basic_thumbnails_show_slideshow_link_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'show_slideshow_link', __('Show slideshow link', 'nggallery'), $display_type->settings['show_slideshow_link']);
     }
@@ -398,17 +432,21 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form
      * @param C_Display_Type $display_type
      * @return string
      */
-    public function _render_nextgen_basic_thumbnails_slideshow_link_text_field($display_type)
+    function _render_nextgen_basic_thumbnails_slideshow_link_text_field($display_type)
     {
         return $this->_render_text_field($display_type, 'slideshow_link_text', __('Slideshow link text', 'nggallery'), $display_type->settings['slideshow_link_text'], '', !empty($display_type->settings['show_slideshow_link']) ? FALSE : TRUE);
     }
 }
+/**
+ * Class A_NextGen_Basic_Thumbnails_Controller
+ * @mixin Mixin_NextGen_Basic_Pagination
+ */
 class A_NextGen_Basic_Thumbnails_Controller extends Mixin
 {
     /**
      * Adds framework support for thumbnails
      */
-    public function initialize()
+    function initialize()
     {
         $this->add_mixin('Mixin_NextGen_Basic_Pagination');
     }
@@ -417,7 +455,7 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
      * This method deprecates the use of the nggShowGallery() function.
      * @param stdClass|C_Displayed_Gallery|C_DataMapper_Model $displayed_gallery
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         $display_settings = $displayed_gallery->display_settings;
         $gallery_id = $displayed_gallery->id();
@@ -496,7 +534,7 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
                 //                    'get_image_url'
                 //                );
                 //                $effect_code = '';
-                $effect_code = 'class=\'use_imagebrowser_effect\'';
+                $effect_code = "class='use_imagebrowser_effect'";
             } else {
                 $effect_code = $this->object->get_effect_code($displayed_gallery);
             }
@@ -522,7 +560,7 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
             return $output;
         } else {
             if ($display_settings['display_no_images_error']) {
-                return $this->object->render_partial('photocrati-nextgen_gallery_display#no_images_found', array(), $return);
+                return $this->object->render_partial("photocrati-nextgen_gallery_display#no_images_found", array(), $return);
             }
         }
     }
@@ -530,7 +568,7 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
      * Enqueues all static resources required by this display type
      * @param C_Displayed_Gallery $displayed_gallery
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
         wp_enqueue_style('nextgen_basic_thumbnails_style', $this->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails.css'), FALSE, NGG_SCRIPT_VERSION);
@@ -545,7 +583,7 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
      * NextGEN Basic Thumbnails to display
      * @return string
      */
-    public function _get_js_lib_url()
+    function _get_js_lib_url()
     {
         return $this->object->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails.js');
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.cycle.all.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.cycle.all.min.js
index fdd67797e972ba854b70168709720b5053796a5a..f93683cfdf12dd82ec66643de9bc5d4cca4ecfba 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.cycle.all.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.cycle.all.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(8($,1R){"4t 4v";q 3m=\'2.5q.6\';7($.24===1R){$.24={18:!($.2R.4l)}}8 1I(s){7($.A.u.1I)1m(s)}8 1m(){7(5X.3n&&3n.1m)3n.1m(\'[u] \'+5A.5B.5K.4d(5L,\' \'))}$.5S[\':\'].2k=8(1e){J 1e.1p};$.A.u=8(S,1L){q o={s:G.4H,c:G.5R};7(G.Q===0&&S!=\'31\'){7(!$.4G&&o.s){1m(\'4I 1n 4O, 5N 32\');$(8(){$(o.s,o.c).u(S,1L)});J G}1m(\'2O; 5O 1y 39 5P 4H\'+($.4G?\'\':\' (4I 1n 4O)\'));J G}J G.1h(8(){q 4=4u(G,S,1L);7(4===K)J;4.29=4.29||$.A.u.29;7(G.1c)2c(G.1c);G.1c=G.1p=0;G.1M=0;q $9=$(G);q $I=4.3L?$(4.3L,G):$9.4f();q C=$I.5r();7(C.Q<2){1m(\'2O; 5e 5h I: \'+C.Q);J}q 1N=57($9,$I,C,4,o);7(1N===K)J;q 2b=1N.2C?10:3I(C[1N.11],C[1N.T],1N,!1N.1t);7(2b){2b+=(1N.59||0);7(2b<10)2b=10;1I(\'1l 1f: \'+2b);G.1c=2M(8(){1P(C,1N,0,!4.1t)},2b)}})};8 1V(9,3g,3j){q 4=$(9).1Q(\'u.4\');q 2k=!!9.1p;7(2k&&4.2k)4.2k(9,4,3g,3j);N 7(!2k&&4.55)4.55(9,4,3g,3j)}8 4u(9,S,1L){7(9.1M===1R)9.1M=0;7(S===1R||S===Y)S={};7(S.3Q==4q){5s(S){1Z\'2i\':1Z\'31\':q 4=$(9).1Q(\'u.4\');7(!4)J K;9.1M++;7(9.1c)2c(9.1c);9.1c=0;7(4.1y)$(4.1y).31();$(9).5p(\'u.4\');7(S==\'2i\')2i(9,4);J K;1Z\'5o\':9.1p=(9.1p===1)?0:1;3q(9.1p,1L,9);1V(9);J K;1Z\'3E\':9.1p=1;1V(9);J K;1Z\'4F\':9.1p=0;3q(K,1L,9);1V(9);J K;1Z\'1Y\':1Z\'m\':4=$(9).1Q(\'u.4\');7(!4){1m(\'S 1n 39, "1Y/m" 5v\');J K}$.A.u[S](4);J K;5t:S={Z:S}}J S}N 7(S.3Q==5w){q 2o=S;S=$(9).1Q(\'u.4\');7(!S){1m(\'S 1n 39, 4N 1n 2h 1b\');J K}7(2o<0||2o>=S.1y.Q){1m(\'5g 1b 2y: \'+2o);J K}S.T=2o;7(9.1c){2c(9.1c);9.1c=0}7(3l 1L==\'5j\')S.35=1L;1P(S.1y,S,1,2o>=S.11);J K}J S;8 3q(4L,1L,9){7(!4L&&1L===H){q S=$(9).1Q(\'u.4\');7(!S){1m(\'S 1n 39, 4N 1n 4F\');J K}7(9.1c){2c(9.1c);9.1c=0}1P(S.1y,S,1,!S.1t)}}}8 3p(1e,4){7(!$.24.18&&4.2F&&1e.4x.4w){5x{1e.4x.5W(\'4w\')}5V(5U){}}}8 2i(9,4){7(4.m)$(4.m).3e(4.2x);7(4.1Y)$(4.1Y).3e(4.2x);7(4.1E||4.21)$.1h(4.2v||[],8(){G.3e().5T()});4.2v=Y;$(9).3e(\'3G.u 50.u\');7(4.2i)4.2i(4)}8 57($9,$I,C,S,o){q 3v;q 4=$.1i({},$.A.u.56,S||{},$.5b?$9.5b():$.2X?$9.1Q():{});q 2X=$.1K($9.1Q)?$9.1Q(4.4X):Y;7(2X)4=$.1i(4,2X);7(4.3h)4.3D=4.3z||C.Q;q 9=$9[0];$9.1Q(\'u.4\',4);4.$9=$9;4.38=9.1M;4.1y=C;4.R=4.R?[4.R]:[];4.1a=4.1a?[4.1a]:[];7(!$.24.18&&4.2F)4.1a.O(8(){3p(G,4)});7(4.2C)4.1a.O(8(){1P(C,4,0,!4.1t)});45(4);7(!$.24.18&&4.2F&&!4.3V)3A($I);7($9.P(\'3c\')==\'5y\')$9.P(\'3c\',\'5z\');7(4.F)$9.F(4.F);7(4.D&&4.D!=\'2S\')$9.D(4.D);7(4.1d!==1R){4.1d=1k(4.1d,10);7(4.1d>=C.Q||4.5J<0)4.1d=0;N 3v=H}N 7(4.1t)4.1d=C.Q-1;N 4.1d=0;7(4.1s){4.1z=[];1C(q i=0;i<C.Q;i++)4.1z.O(i);4.1z.3J(8(a,b){J 22.1s()-0.5});7(3v){1C(q 2E=0;2E<C.Q;2E++){7(4.1d==4.1z[2E]){4.1o=2E}}}N{4.1o=1;4.1d=4.1z[1]}}N 7(4.1d>=C.Q)4.1d=0;4.11=4.1d||0;q 1l=4.1d;$I.P({3c:\'41\',E:0,B:0}).2e().1h(8(i){q z;7(4.1t)z=1l?i<=1l?C.Q+(i-1l):1l-i:C.Q-i;N z=1l?i>=1l?C.Q-(i-1l):1l-i:C.Q-i;$(G).P(\'z-2y\',z)});$(C[1l]).P(\'18\',1).3f();3p(C[1l],4);7(4.1H){7(!4.2G){7(4.F)$I.F(4.F);7(4.D&&4.D!=\'2S\')$I.D(4.D)}N{$I.1h(8(){q $1b=$(G);q 3r=(4.2G===H)?$1b.F()/$1b.D():4.2G;7(4.F&&$1b.F()!=4.F){$1b.F(4.F);$1b.D(4.F/3r)}7(4.D&&$1b.D()<4.D){$1b.D(4.D);$1b.F(4.D*3r)}})}}7(4.3W&&((!4.1H)||4.2G)){$I.1h(8(){q $1b=$(G);$1b.P({"2I-B":4.F?((4.F-$1b.F())/2)+"14":0,"2I-E":4.D?((4.D-$1b.D())/2)+"14":0})})}7(4.3W&&!4.1H&&!4.2L){$I.1h(8(){q $1b=$(G);$1b.P({"2I-B":4.F?((4.F-$1b.F())/2)+"14":0,"2I-E":4.D?((4.D-$1b.D())/2)+"14":0})})}q 4Y=(4.3R||4.3S)&&!$9.5H();7(4Y){q 2q=0,1W=0;1C(q j=0;j<C.Q;j++){q $e=$(C[j]),e=$e[0],w=$e.5F(),h=$e.5G();7(!w)w=e.46||e.F||$e.2P(\'F\');7(!h)h=e.4E||e.D||$e.2P(\'D\');2q=w>2q?w:2q;1W=h>1W?h:1W}7(4.3R&&2q>0&&1W>0)$9.P({F:2q+\'14\',D:1W+\'14\'});7(4.3S&&1W>0)$9.P({D:1W+\'14\'})}q 2u=K;7(4.3E)$9.2s(\'3G.u\',8(){2u=H;G.1p++;1V(9,H)}).2s(\'50.u\',8(){7(2u)G.1p--;1V(9,H)});7(48(4)===K)J K;q 3B=K;S.3b=S.3b||0;$I.1h(8(){q $1e=$(G);G.U=(4.1H&&4.D)?4.D:($1e.D()||G.4E||G.D||$1e.2P(\'D\')||0);G.V=(4.1H&&4.F)?4.F:($1e.F()||G.46||G.F||$1e.2P(\'F\')||0);7($1e.5I(\'4i\')){q 4p=($.2R.4l&&G.V==28&&G.U==30&&!G.2N);q 4c=($.2R.5E&&G.V==34&&G.U==19&&!G.2N);q 4e=($.2R.5D&&((G.V==42&&G.U==19)||(G.V==37&&G.U==17))&&!G.2N);q 4h=(G.U===0&&G.V===0&&!G.2N);7(4p||4c||4e||4h){7(o.s&&4.4z&&++S.3b<5C){1m(S.3b,\' - 4i 1b 1n 5M, 5Q 32: \',G.3Y,G.V,G.U);2M(8(){$(o.s,o.c).u(S)},4.4S);3B=H;J K}N{1m(\'5i 1n 5f 5k 5m 5n: \'+G.3Y,G.V,G.U)}}}J H});7(3B)J K;4.y=4.y||{};4.1w=4.1w||{};4.1v=4.1v||{};4.M=4.M||{};4.L=4.L||{};$I.1n(\':33(\'+1l+\')\').P(4.y);$($I[1l]).P(4.1v);7(4.1f){4.1f=1k(4.1f,10);7(4.1g.3Q==4q)4.1g=$.Z.5u[4.1g]||1k(4.1g,10);7(!4.3d)4.1g=4.1g/2;q 4k=4.Z==\'2w\'?0:4.Z==\'26\'?5l:3N;4a((4.1f-4.1g)<4k)4.1f+=4.1g}7(4.3U)4.25=4.2f=4.3U;7(!4.1F)4.1F=4.1g;7(!4.1G)4.1G=4.1g;4.1B=C.Q;4.11=4.3y=1l;7(4.1s){7(++4.1o==C.Q)4.1o=0;4.T=4.1z[4.1o]}N 7(4.1t)4.T=4.1d===0?(C.Q-1):4.1d-1;N 4.T=4.1d>=(C.Q-1)?0:4.1d+1;7(!4.2m){q 2r=$.A.u.W[4.Z];7($.1K(2r))2r($9,$I,4);N 7(4.Z!=\'3C\'&&!4.2m){1m(\'4o 2Z: \'+4.Z,\'; 32 2O\');J K}}q 2d=$I[1l];7(!4.4y){7(4.R.Q)4.R[0].36(2d,[2d,2d,4,H]);7(4.1a.Q)4.1a[0].36(2d,[2d,2d,4,H])}7(4.m)$(4.m).2s(4.2x,8(){J 2h(4,1)});7(4.1Y)$(4.1Y).2s(4.2x,8(){J 2h(4,0)});7(4.1E||4.21)4n(C,4);44(4,C);J 4}8 45(4){4.1u={R:[],1a:[]};4.1u.y=$.1i({},4.y);4.1u.1w=$.1i({},4.1w);4.1u.M=$.1i({},4.M);4.1u.L=$.1i({},4.L);$.1h(4.R,8(){4.1u.R.O(G)});$.1h(4.1a,8(){4.1u.1a.O(G)})}8 48(4){q i,1T,2a=$.A.u.W;7(4.Z.4V(\',\')>0){4.2m=H;4.1q=4.Z.6i(/\\s*/g,\'\').6P(\',\');1C(i=0;i<4.1q.Q;i++){q Z=4.1q[i];1T=2a[Z];7(!1T||!2a.3F(Z)||!$.1K(1T)){1m(\'6O 4o 2Z: \',Z);4.1q.40(i,1);i--}}7(!4.1q.Q){1m(\'6R 6H W 6Y; 32 2O.\');J K}}N 7(4.Z==\'6M\'){4.2m=H;4.1q=[];1C(q p 4m 2a){7(2a.3F(p)){1T=2a[p];7(2a.3F(p)&&$.1K(1T))4.1q.O(p)}}}7(4.2m&&4.4D){q 4j=22.4g(22.1s()*20)+30;1C(i=0;i<4j;i++){q 47=22.4g(22.1s()*4.1q.Q);4.1q.O(4.1q.40(47,1)[0])}1I(\'6X Z 6V: \',4.1q)}J H}8 44(4,C){4.6W=8(43,2z){q $s=$(43),s=$s[0];7(!4.3z)4.3D++;C[2z?\'3s\':\'O\'](s);7(4.C)4.C[2z?\'3s\':\'O\'](s);4.1B=C.Q;7(4.1s){4.1z.O(4.1B-1);4.1z.3J(8(a,b){J 22.1s()-0.5})}$s.P(\'3c\',\'41\');$s[2z?\'76\':\'3Z\'](4.$9);7(2z){4.11++;4.T++}7(!$.24.18&&4.2F&&!4.3V)3A($s);7(4.1H&&4.F)$s.F(4.F);7(4.1H&&4.D&&4.D!=\'2S\')$s.D(4.D);s.U=(4.1H&&4.D)?4.D:$s.D();s.V=(4.1H&&4.F)?4.F:$s.F();$s.P(4.y);7(4.1E||4.21)$.A.u.3w(C.Q-1,s,$(4.1E),C,4);7($.1K(4.4r))4.4r($s);N $s.2e()}}$.A.u.4b=8(4,Z){Z=Z||4.Z;4.R=[];4.1a=[];4.y=$.1i({},4.1u.y);4.1w=$.1i({},4.1u.1w);4.M=$.1i({},4.1u.M);4.L=$.1i({},4.1u.L);4.2n=Y;$.1h(4.1u.R,8(){4.R.O(G)});$.1h(4.1u.1a,8(){4.1a.O(G)});q 2r=$.A.u.W[Z];7($.1K(2r))2r(4.$9,$(4.1y),4)};8 1P(C,4,1U,X){q p=4.$9[0],x=C[4.11],m=C[4.T];7(1U&&4.2B&&4.3P){1I(\'3P 4m 1P(), 75 49 2Z\');$(C).31(H,H);4.2B=0;2c(p.1c)}7(4.2B){1I(\'2Z 49, 74 6U 1T 6K\');J}7(p.1M!=4.38||p.1c===0&&!1U)J;7(!1U&&!p.1p&&!4.3M&&((4.3h&&(--4.3D<=0))||(4.2T&&!4.1s&&4.T<4.11))){7(4.3T)4.3T(4);J}q 2J=K;7((1U||!p.1p)&&(4.T!=4.11)){2J=H;q Z=4.Z;x.U=x.U||$(x).D();x.V=x.V||$(x).F();m.U=m.U||$(m).D();m.V=m.V||$(m).F();7(4.2m){7(X&&(4.23===1R||++4.23>=4.1q.Q))4.23=0;N 7(!X&&(4.23===1R||--4.23<0))4.23=4.1q.Q-1;Z=4.1q[4.23]}7(4.35){Z=4.35;4.35=Y}$.A.u.4b(4,Z);7(4.R.Q)$.1h(4.R,8(i,o){7(p.1M!=4.38)J;o.36(m,[x,m,4,X])});q 1a=8(){4.2B=0;$.1h(4.1a,8(i,o){7(p.1M!=4.38)J;o.36(m,[x,m,4,X])});7(!p.1M){3O()}};1I(\'1T 6J(\'+Z+\'); 11: \'+4.11+\'; T: \'+4.T);4.2B=1;7(4.2n)4.2n(x,m,4,1a,X,1U&&4.2Q);N 7($.1K($.A.u[4.Z]))$.A.u[4.Z](x,m,4,1a,X,1U&&4.2Q);N $.A.u.3C(x,m,4,1a,X,1U&&4.2Q)}N{3O()}7(2J||4.T==4.11){q 1S;4.3y=4.11;7(4.1s){4.11=4.T;7(++4.1o==C.Q){4.1o=0;4.1z.3J(8(a,b){J 22.1s()-0.5})}4.T=4.1z[4.1o];7(4.T==4.11)4.T=(4.11==4.1B-1)?0:4.11+1}N 7(4.1t){1S=(4.T-1)<0;7(1S&&4.3M){4.1t=!4.1t;4.T=1;4.11=0}N{4.T=1S?(C.Q-1):4.T-1;4.11=1S?0:4.T+1}}N{1S=(4.T+1)==C.Q;7(1S&&4.3M){4.1t=!4.1t;4.T=C.Q-2;4.11=C.Q-1}N{4.T=1S?0:4.T+1;4.11=1S?C.Q-1:4.T-1}}}7(2J&&4.1E)4.29(4.1E,4.11,4.3i);8 3O(){q 2j=0,1f=4.1f;7(4.1f&&!4.2C){2j=3I(C[4.11],C[4.T],4,X);7(4.Z==\'26\')2j-=4.1G}N 7(4.2C&&p.1p)2j=10;7(2j>0)p.1c=2M(8(){1P(C,4,0,!4.1t)},2j)}}$.A.u.29=8(1E,11,3H){$(1E).1h(8(){$(G).4f().6N(3H).33(11).6S(3H)})};8 3I(x,m,4,X){7(4.3K){q t=4.3K.4d(x,x,m,4,X);4a(4.Z!=\'2w\'&&(t-4.1g)<3N)t+=4.1g;1I(\'77 1f: \'+t+\'; 1g: \'+4.1g);7(t!==K)J t}J 4.1f}$.A.u.m=8(4){2h(4,1)};$.A.u.1Y=8(4){2h(4,0)};8 2h(4,3k){q 2W=3k?1:-1;q C=4.1y;q p=4.$9[0],1f=p.1c;7(1f){2c(1f);p.1c=0}7(4.1s&&2W<0){4.1o--;7(--4.1o==-2)4.1o=C.Q-2;N 7(4.1o==-1)4.1o=C.Q-1;4.T=4.1z[4.1o]}N 7(4.1s){4.T=4.1z[4.1o]}N{4.T=4.11+2W;7(4.T<0){7(4.2T)J K;4.T=C.Q-1}N 7(4.T>=C.Q){7(4.2T)J K;4.T=0}}q 1D=4.4A||4.6Q;7($.1K(1D))1D(2W>0,4.T,C[4.T]);1P(C,4,1,3k);J K}8 4n(C,4){q $p=$(4.1E);$.1h(C,8(i,o){$.A.u.3w(i,o,$p,C,4)});4.29(4.1E,4.1d,4.3i)}$.A.u.3w=8(i,1e,$p,C,4){q a;7($.1K(4.21)){a=4.21(i,1e);1I(\'21(\'+i+\', 1e) 6G: \'+a)}N a=\'<a 6I="#">\'+(i+1)+\'</a>\';7(!a)J;q $a=$(a);7($a.6L(\'6T\').Q===0){q 3t=[];7($p.Q>1){$p.1h(8(){q $2U=$a.2U(H);$(G).73($2U);3t.O($2U[0])});$a=$(3t)}N{$a.3Z($p)}}4.2v=4.2v||[];4.2v.O($a);q 3X=8(e){e.72();4.T=i;q p=4.$9[0],1f=p.1c;7(1f){2c(1f);p.1c=0}q 1D=4.4R||4.71;7($.1K(1D))1D(4.T,C[4.T]);1P(C,4,1,4.11<i)};7(/3G|70/i.2g(4.2Y)){$a.51(3X,8(){})}N{$a.2s(4.2Y,3X)}7(!/^2H/.2g(4.2Y)&&!4.58)$a.2s(\'2H.u\',8(){J K});q 9=4.$9[0];q 2u=K;7(4.4C){$a.51(8(){2u=H;9.1p++;1V(9,H,H)},8(){7(2u)9.1p--;1V(9,H,H)})}};$.A.u.4Q=8(4,X){q 2l,l=4.3y,c=4.11;7(X)2l=c>l?c-l:4.1B-l;N 2l=c<l?l-c:l+4.1B-c;J 2l};8 3A($I){1I(\'5Y 6Z 3o-3x 6E\');8 2K(s){s=1k(s,10).6d(16);J s.Q<2?\'0\'+s:s}8 4s(e){1C(;e&&e.6c.6b()!=\'6a\';e=e.6e){q v=$.P(e,\'3o-3x\');7(v&&v.4V(\'2D\')>=0){q 2D=v.4J(/\\d+/g);J\'#\'+2K(2D[0])+2K(2D[1])+2K(2D[2])}7(v&&v!=\'6f\')J v}J\'#6F\'}$I.1h(8(){$(G).P(\'3o-3x\',4s(G))})}$.A.u.12=8(x,m,4,w,h,1J){$(4.1y).1n(x).2e();7(3l 4.y.18==\'1R\')4.y.18=1;4.y.1X=\'2p\';7(4.2L&&w!==K&&m.V>0)4.y.F=m.V;7(4.2L&&h!==K&&m.U>0)4.y.D=m.U;4.1w=4.1w||{};4.1w.1X=\'2w\';$(x).P(\'2A\',4.1B+(1J===H?1:0));$(m).P(\'2A\',4.1B+(1J===H?0:1))};$.A.u.3C=8(x,m,4,1D,X,2V){q $l=$(x),$n=$(m);q 1F=4.1F,1G=4.1G,25=4.25,2f=4.2f;$n.P(4.y);7(2V){7(3l 2V==\'6h\')1F=1G=2V;N 1F=1G=1;25=2f=Y}q A=8(){$n.3a(4.M,1F,25,8(){1D()})};$l.3a(4.L,1G,2f,8(){$l.P(4.1w);7(!4.3d)A()});7(4.3d)A()};$.A.u.W={5d:8($9,$I,4){$I.1n(\':33(\'+4.11+\')\').P(\'18\',0);4.R.O(8(x,m,4){$.A.u.12(x,m,4);4.y.18=0});4.M={18:1};4.L={18:0};4.y={E:0,B:0}}};$.A.u.3m=8(){J 3m};$.A.u.56={3i:\'6g\',1a:Y,58:K,M:Y,L:Y,2G:K,3h:0,3z:0,1t:K,R:Y,3W:Y,2F:!$.24.18,3V:K,3R:1,3S:0,2C:0,1w:Y,y:Y,59:0,25:Y,2f:Y,3U:Y,3T:Y,2Q:0,1H:0,Z:\'5d\',2n:Y,D:\'2S\',3P:H,4X:\'u\',m:Y,2T:0,4R:Y,4A:Y,1E:Y,21:Y,2Y:\'2H.u\',3E:0,4C:0,1Y:Y,2x:\'2H.u\',1s:0,4D:1,4z:H,4S:3N,1J:0,26:Y,4y:K,3L:Y,2L:1,1g:69,1F:Y,1G:Y,1d:1R,3d:1,1f:68,3K:Y,29:Y,F:Y}})(52);(8($){"4t 4v";$.A.u.W.2w=8($9,$I,4){4.2n=8(x,m,4,1a){$(m).3f();$(x).2e();1a()}};$.A.u.W.62=8($9,$I,4){$I.1n(\':33(\'+4.11+\')\').P({1X:\'2p\',\'18\':1});4.R.O(8(x,m,4,w,h,1J){$(x).P(\'2A\',4.1B+(1J!==H?1:0));$(m).P(\'2A\',4.1B+(1J!==H?0:1))});4.M.18=1;4.L.18=0;4.y.18=1;4.y.1X=\'2p\';4.1w.2A=0};$.A.u.W.61=8($9,$I,4){$9.P(\'1r\',\'1x\');4.R.O($.A.u.12);q h=$9.D();4.y.E=h;4.y.B=0;4.1v.E=0;4.M.E=0;4.L.E=-h};$.A.u.W.60=8($9,$I,4){$9.P(\'1r\',\'1x\');4.R.O($.A.u.12);q h=$9.D();4.1v.E=0;4.y.E=-h;4.y.B=0;4.M.E=0;4.L.E=h};$.A.u.W.5Z=8($9,$I,4){$9.P(\'1r\',\'1x\');4.R.O($.A.u.12);q w=$9.F();4.1v.B=0;4.y.B=w;4.y.E=0;4.M.B=0;4.L.B=0-w};$.A.u.W.63=8($9,$I,4){$9.P(\'1r\',\'1x\');4.R.O($.A.u.12);q w=$9.F();4.1v.B=0;4.y.B=-w;4.y.E=0;4.M.B=0;4.L.B=w};$.A.u.W.64=8($9,$I,4){$9.P(\'1r\',\'1x\').F();4.R.O(8(x,m,4,X){7(4.1J)X=!X;$.A.u.12(x,m,4);4.y.B=X?(m.V-1):(1-m.V);4.L.B=X?-x.V:x.V});4.1v.B=0;4.y.E=0;4.M.B=0;4.L.E=0};$.A.u.W.67=8($9,$I,4){$9.P(\'1r\',\'1x\');4.R.O(8(x,m,4,X){7(4.1J)X=!X;$.A.u.12(x,m,4);4.y.E=X?(1-m.U):(m.U-1);4.L.E=X?x.U:-x.U});4.1v.E=0;4.y.B=0;4.M.E=0;4.L.B=0};$.A.u.W.66=8($9,$I,4){4.R.O(8(x,m,4){$(4.1y).1n(x).2e();$.A.u.12(x,m,4,K,H);4.M.F=m.V});4.y.B=0;4.y.E=0;4.y.F=0;4.M.F=\'3f\';4.L.F=0};$.A.u.W.65=8($9,$I,4){4.R.O(8(x,m,4){$(4.1y).1n(x).2e();$.A.u.12(x,m,4,H,K);4.M.D=m.U});4.y.B=0;4.y.E=0;4.y.D=0;4.M.D=\'3f\';4.L.D=0};$.A.u.W.26=8($9,$I,4){q i,w=$9.P(\'1r\',\'53\').F();$I.P({B:0,E:0});4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,H,H)});7(!4.4P){4.1g=4.1g/2; 4.4P=H}4.1s=0;4.26=4.26||{B:-w,E:15};4.C=[];1C(i=0;i<$I.Q;i++)4.C.O($I[i]);1C(i=0;i<4.11;i++)4.C.O(4.C.4M());4.2n=8(x,m,4,1D,X){7(4.1J)X=!X;q $1e=X?$(x):$(m);$(m).P(4.y);q 1O=4.1B;$1e.3a(4.26,4.1F,4.25,8(){q 2l=$.A.u.4Q(4,X);1C(q k=0;k<2l;k++){7(X)4.C.O(4.C.4M());N 4.C.3s(4.C.6j())}7(X){1C(q i=0,3u=4.C.Q;i<3u;i++)$(4.C[i]).P(\'z-2y\',3u-i+1O)}N{q z=$(x).P(\'z-2y\');$1e.P(\'z-2y\',1k(z,10)+1+1O)}$1e.3a({B:0,E:0},4.1G,4.2f,8(){$(X?G:x).2e();7(1D)1D()})})};$.1i(4.y,{1X:\'2p\',18:1,E:0,B:0})};$.A.u.W.6k=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,K);4.y.E=m.U;4.M.D=m.U;4.L.F=m.V});4.1v.E=0;4.y.B=0;4.y.D=0;4.M.E=0;4.L.D=0};$.A.u.W.6y=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,K);4.M.D=m.U;4.L.E=x.U});4.1v.E=0;4.y.B=0;4.y.E=0;4.y.D=0;4.L.D=0};$.A.u.W.6x=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,K,H);4.y.B=m.V;4.M.F=m.V});4.y.E=0;4.y.F=0;4.M.B=0;4.L.F=0};$.A.u.W.6w=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,K,H);4.M.F=m.V;4.L.B=x.V});$.1i(4.y,{E:0,B:0,F:0});4.M.B=0;4.L.F=0};$.A.u.W.4K=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,K,K,H);4.y.E=m.U/2;4.y.B=m.V/2;$.1i(4.M,{E:0,B:0,F:m.V,D:m.U});$.1i(4.L,{F:0,D:0,E:x.U/2,B:x.V/2})});4.1v.E=0;4.1v.B=0;4.y.F=0;4.y.D=0};$.A.u.W.6z=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,K,K);4.y.B=m.V/2;4.y.E=m.U/2;$.1i(4.M,{E:0,B:0,F:m.V,D:m.U})});4.y.F=0;4.y.D=0;4.L.18=0};$.A.u.W.6A=8($9,$I,4){q w=$9.P(\'1r\',\'1x\').F();4.R.O(8(x,m,4){$.A.u.12(x,m,4);4.M.F=m.V;4.L.B=x.V});4.y.B=w;4.y.E=0;4.M.B=0;4.L.B=w};$.A.u.W.6D=8($9,$I,4){q h=$9.P(\'1r\',\'1x\').D();4.R.O(8(x,m,4){$.A.u.12(x,m,4);4.M.D=m.U;4.L.E=x.U});4.y.E=h;4.y.B=0;4.M.E=0;4.L.E=h};$.A.u.W.6C=8($9,$I,4){q h=$9.P(\'1r\',\'1x\').D();q w=$9.F();4.R.O(8(x,m,4){$.A.u.12(x,m,4);4.M.D=m.U;4.L.E=x.U});4.y.E=h;4.y.B=w;4.M.E=0;4.M.B=0;4.L.E=h;4.L.B=w};$.A.u.W.6B=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,K,H);4.y.B=G.V/2;4.M.B=0;4.M.F=G.V;4.L.B=0});4.y.E=0;4.y.F=0};$.A.u.W.6v=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,K);4.y.E=G.U/2;4.M.E=0;4.M.D=G.U;4.L.E=0});4.y.D=0;4.y.B=0};$.A.u.W.6u=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,K,H,H);4.y.B=m.V/2;4.M.B=0;4.M.F=G.V;4.L.B=x.V/2;4.L.F=0});4.y.E=0;4.y.F=0};$.A.u.W.6o=8($9,$I,4){4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,K,H);4.y.E=m.U/2;4.M.E=0;4.M.D=m.U;4.L.E=x.U/2;4.L.D=0});4.y.D=0;4.y.B=0};$.A.u.W.6n=8($9,$I,4){q d=4.4W||\'B\';q w=$9.P(\'1r\',\'1x\').F();q h=$9.D();4.R.O(8(x,m,4){$.A.u.12(x,m,4);7(d==\'4T\')4.y.B=-w;N 7(d==\'4U\')4.y.E=h;N 7(d==\'4Z\')4.y.E=-h;N 4.y.B=w});4.M.B=0;4.M.E=0;4.y.E=0;4.y.B=0};$.A.u.W.6m=8($9,$I,4){q d=4.4W||\'B\';q w=$9.P(\'1r\',\'1x\').F();q h=$9.D();4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,H,H);7(d==\'4T\')4.L.B=w;N 7(d==\'4U\')4.L.E=-h;N 7(d==\'4Z\')4.L.E=h;N 4.L.B=-w});4.M.B=0;4.M.E=0;4.y.E=0;4.y.B=0};$.A.u.W.6l=8($9,$I,4){q w=$9.P(\'1r\',\'53\').F();q h=$9.D();4.R.O(8(x,m,4){$.A.u.12(x,m,4,H,H,H);7(!4.L.B&&!4.L.E)$.1i(4.L,{B:w*2,E:-h/2,18:0});N 4.L.18=0});4.y.B=0;4.y.E=0;4.M.B=0};$.A.u.W.6p=8($9,$I,4){q w=$9.P(\'1r\',\'1x\').F();q h=$9.D();4.y=4.y||{};q 1j;7(4.1j){7(/6q/.2g(4.1j))1j=\'27(1A 1A \'+h+\'14 1A)\';N 7(/6t/.2g(4.1j))1j=\'27(1A \'+w+\'14 \'+h+\'14 \'+w+\'14)\';N 7(/6s/.2g(4.1j))1j=\'27(1A \'+w+\'14 1A 1A)\';N 7(/6r/.2g(4.1j))1j=\'27(\'+h+\'14 \'+w+\'14 \'+h+\'14 1A)\';N 7(/4K/.2g(4.1j)){q E=1k(h/2,10);q B=1k(w/2,10);1j=\'27(\'+E+\'14 \'+B+\'14 \'+E+\'14 \'+B+\'14)\'}}4.y.1j=4.y.1j||1j||\'27(1A 1A 1A 1A)\';q d=4.y.1j.4J(/(\\d+)/g);q t=1k(d[0],10),r=1k(d[1],10),b=1k(d[2],10),l=1k(d[3],10);4.R.O(8(x,m,4){7(x==m)J;q $x=$(x),$m=$(m);$.A.u.12(x,m,4,H,H,K);4.1w.1X=\'2p\';q 2t=1,1O=1k((4.1F/13),10)-1;(8 f(){q 4B=t?t-1k(2t*(t/1O),10):0;q 54=l?l-1k(2t*(l/1O),10):0;q 5a=b<h?b+1k(2t*((h-b)/1O||1),10):h;q 5c=r<w?r+1k(2t*((w-r)/1O||1),10):w;$m.P({1j:\'27(\'+4B+\'14 \'+5c+\'14 \'+5a+\'14 \'+54+\'14)\'});(2t++<=1O)?2M(f,13):$x.P(\'1X\',\'2w\')})()});$.1i(4.y,{1X:\'2p\',18:1,E:0,B:0});4.M={B:0};4.L={B:0}}})(52);',62,442,'||||opts|||if|function|cont|||||||||||||next||||var||||cycle|||curr|cssBefore||fn|left|els|height|top|width|this|true|slides|return|false|animOut|animIn|else|push|css|length|before|options|nextSlide|cycleH|cycleW|transitions|fwd|null|fx||currSlide|commonReset||px||||opacity||after|slide|cycleTimeout|startingSlide|el|timeout|speed|each|extend|clip|parseInt|first|log|not|randomIndex|cyclePause|fxs|overflow|random|backwards|original|cssFirst|cssAfter|hidden|elements|randomMap|0px|slideCount|for|cb|pager|speedIn|speedOut|fit|debug|rev|isFunction|arg2|cycleStop|opts2|count|go|data|undefined|roll|tx|manual|triggerPause|maxh|display|prev|case||pagerAnchorBuilder|Math|lastFx|support|easeIn|shuffle|rect||updateActivePagerLink|txs|startTime|clearTimeout|e0|hide|easeOut|test|advance|destroy|ms|paused|hops|multiFx|fxFn|num|block|maxw|init|bind|step|pauseFlag|pagerAnchors|none|prevNextEvent|index|prepend|zIndex|busy|continuous|rgb|cnt|cleartype|aspect|click|margin|changed|hex|slideResize|setTimeout|complete|terminating|attr|fastOnEvent|browser|auto|nowrap|clone|speedOverride|val|meta|pagerEvent|transition||stop|slideshow|eq||oneTimeFx|apply||stopCount|found|animate|requeueAttempts|position|sync|unbind|show|byHover|autostop|activePagerClass|onPager|moveForward|typeof|ver|console|background|removeFilter|checkInstantResume|ratio|unshift|arr|len|startingSlideSpecified|createPagerAnchor|color|lastSlide|autostopCount|clearTypeFix|requeue|custom|countdown|pause|hasOwnProperty|mouseenter|clsName|getTimeout|sort|timeoutFn|slideExpr|bounce|250|queueNext|manualTrump|constructor|containerResize|containerResizeHeight|end|easing|cleartypeNoBg|center|pagerFn|src|appendTo|splice|absolute||newSlide|exposeAddSlide|saveOriginalOpts|offsetWidth|r2|supportMultiTransitions|active|while|resetState|loadingFF|call|loadingOp|children|floor|loadingOther|img|r1|buffer|msie|in|buildPager|unknown|loadingIE|String|onAddSlide|getBg|use|handleArguments|strict|filter|style|skipInitializationCallbacks|requeueOnImageNotLoaded|onPrevNextEvent|tt|pauseOnPagerHover|randomizeEffects|offsetHeight|resume|isReady|selector|DOM|match|zoom|isPaused|shift|can|ready|speedAdjusted|hopsFromLast|onPagerEvent|requeueTimeout|right|up|indexOf|direction|metaAttr|reshape|down|mouseleave|hover|jQuery|visible|ll|resumed|defaults|buildOptions|allowPagerClickBubble|delay|bb|metadata|rr|fade|too|determine|invalid|few|could|string|size|500|of|image|toggle|removeData|9999|get|switch|default|speeds|ignored|Number|try|static|relative|Array|prototype|100|opera|mozilla|outerWidth|outerHeight|innerHeight|is|startSlide|join|arguments|loaded|queuing|zero|by|requeuing|context|expr|remove|smother|catch|removeAttribute|window|applying|scrollLeft|scrollDown|scrollUp|fadeout|scrollRight|scrollHorz|slideY|slideX|scrollVert|4000|1000|html|toLowerCase|nodeName|toString|parentNode|transparent|activeSlide|number|replace|pop|turnUp|toss|uncover|cover|curtainY|wipe|l2r|b2t|t2b|r2l|curtainX|growY|turnRight|turnLeft|turnDown|fadeZoom|blindX|growX|blindZ|blindY|hack|ffffff|returned|valid|href|firing|request|parents|all|removeClass|discarding|split|prevNextClick|No|addClass|body|new|sequence|addSlide|randomized|named|clearType|mouseover|pagerClick|preventDefault|append|ignoring|stopping|prependTo|calculated'.split('|'),0,{}))
+!function(e,t){"use strict";function n(t){e.fn.cycle.debug&&i(t)}function i(){window.console&&console.log&&console.log("[cycle] "+Array.prototype.join.call(arguments," "))}function c(t,n,i){var c=e(t).data("cycle.opts"),s=!!t.cyclePause;s&&c.paused?c.paused(t,c,n,i):!s&&c.resumed&&c.resumed(t,c,n,i)}function s(n,s,o){function l(t,n,c){if(!t&&n===!0){var s=e(c).data("cycle.opts");if(!s)return i("options not found, can not resume"),!1;c.cycleTimeout&&(clearTimeout(c.cycleTimeout),c.cycleTimeout=0),d(s.elements,s,1,!s.backwards)}}if(n.cycleStop===t&&(n.cycleStop=0),s!==t&&null!==s||(s={}),s.constructor==String){switch(s){case"destroy":case"stop":var a=e(n).data("cycle.opts");return!!a&&(n.cycleStop++,n.cycleTimeout&&clearTimeout(n.cycleTimeout),n.cycleTimeout=0,a.elements&&e(a.elements).stop(),e(n).removeData("cycle.opts"),"destroy"==s&&r(n,a),!1);case"toggle":return n.cyclePause=1===n.cyclePause?0:1,l(n.cyclePause,o,n),c(n),!1;case"pause":return n.cyclePause=1,c(n),!1;case"resume":return n.cyclePause=0,l(!1,o,n),c(n),!1;case"prev":case"next":return(a=e(n).data("cycle.opts"))?(e.fn.cycle[s](a),!1):(i('options not found, "prev/next" ignored'),!1);default:s={fx:s}}return s}if(s.constructor==Number){var f=s;return(s=e(n).data("cycle.opts"))?f<0||f>=s.elements.length?(i("invalid slide index: "+f),!1):(s.nextSlide=f,n.cycleTimeout&&(clearTimeout(n.cycleTimeout),n.cycleTimeout=0),"string"==typeof o&&(s.oneTimeFx=o),d(s.elements,s,1,f>=s.currSlide),!1):(i("options not found, can not advance slide"),!1)}return s}function o(t,n){if(!e.support.opacity&&n.cleartype&&t.style.filter)try{t.style.removeAttribute("filter")}catch(e){}}function r(t,n){n.next&&e(n.next).unbind(n.prevNextEvent),n.prev&&e(n.prev).unbind(n.prevNextEvent),(n.pager||n.pagerAnchorBuilder)&&e.each(n.pagerAnchors||[],function(){this.unbind().remove()}),n.pagerAnchors=null,e(t).unbind("mouseenter.cycle mouseleave.cycle"),n.destroy&&n.destroy(n)}function l(n,s,r,l,h){var g,x=e.extend({},e.fn.cycle.defaults,l||{},e.metadata?n.metadata():e.meta?n.data():{}),v=e.isFunction(n.data)?n.data(x.metaAttr):null;v&&(x=e.extend(x,v)),x.autostop&&(x.countdown=x.autostopCount||r.length);var w=n[0];if(n.data("cycle.opts",x),x.$cont=n,x.stopCount=w.cycleStop,x.elements=r,x.before=x.before?[x.before]:[],x.after=x.after?[x.after]:[],!e.support.opacity&&x.cleartype&&x.after.push(function(){o(this,x)}),x.continuous&&x.after.push(function(){d(r,x,0,!x.backwards)}),a(x),e.support.opacity||!x.cleartype||x.cleartypeNoBg||y(s),"static"==n.css("position")&&n.css("position","relative"),x.width&&n.width(x.width),x.height&&"auto"!=x.height&&n.height(x.height),x.startingSlide!==t?(x.startingSlide=parseInt(x.startingSlide,10),x.startingSlide>=r.length||x.startSlide<0?x.startingSlide=0:g=!0):x.backwards?x.startingSlide=r.length-1:x.startingSlide=0,x.random){x.randomMap=[];for(var b=0;b<r.length;b++)x.randomMap.push(b);if(x.randomMap.sort(function(e,t){return Math.random()-.5}),g)for(var S=0;S<r.length;S++)x.startingSlide==x.randomMap[S]&&(x.randomIndex=S);else x.randomIndex=1,x.startingSlide=x.randomMap[1]}else x.startingSlide>=r.length&&(x.startingSlide=0);x.currSlide=x.startingSlide||0;var B=x.startingSlide;s.css({position:"absolute",top:0,left:0}).hide().each(function(t){var n;n=x.backwards?B?t<=B?r.length+(t-B):B-t:r.length-t:B?t>=B?r.length-(t-B):B-t:r.length-t,e(this).css("z-index",n)}),e(r[B]).css("opacity",1).show(),o(r[B],x),x.fit&&(x.aspect?s.each(function(){var t=e(this),n=x.aspect===!0?t.width()/t.height():x.aspect;x.width&&t.width()!=x.width&&(t.width(x.width),t.height(x.width/n)),x.height&&t.height()<x.height&&(t.height(x.height),t.width(x.height*n))}):(x.width&&s.width(x.width),x.height&&"auto"!=x.height&&s.height(x.height))),!x.center||x.fit&&!x.aspect||s.each(function(){var t=e(this);t.css({"margin-left":x.width?(x.width-t.width())/2+"px":0,"margin-top":x.height?(x.height-t.height())/2+"px":0})}),!x.center||x.fit||x.slideResize||s.each(function(){var t=e(this);t.css({"margin-left":x.width?(x.width-t.width())/2+"px":0,"margin-top":x.height?(x.height-t.height())/2+"px":0})});var I=(x.containerResize||x.containerResizeHeight)&&!n.innerHeight();if(I){for(var O=0,F=0,H=0;H<r.length;H++){var A=e(r[H]),k=A[0],T=A.outerWidth(),R=A.outerHeight();T||(T=k.offsetWidth||k.width||A.attr("width")),R||(R=k.offsetHeight||k.height||A.attr("height")),O=T>O?T:O,F=R>F?R:F}x.containerResize&&O>0&&F>0&&n.css({width:O+"px",height:F+"px"}),x.containerResizeHeight&&F>0&&n.css({height:F+"px"})}var W=!1;if(x.pause&&n.bind("mouseenter.cycle",function(){W=!0,this.cyclePause++,c(w,!0)}).bind("mouseleave.cycle",function(){W&&this.cyclePause--,c(w,!0)}),f(x)===!1)return!1;var P=!1;if(l.requeueAttempts=l.requeueAttempts||0,s.each(function(){var t=e(this);if(this.cycleH=x.fit&&x.height?x.height:t.height()||this.offsetHeight||this.height||t.attr("height")||0,this.cycleW=x.fit&&x.width?x.width:t.width()||this.offsetWidth||this.width||t.attr("width")||0,t.is("img")){var n=e.browser.msie&&28==this.cycleW&&30==this.cycleH&&!this.complete,c=e.browser.mozilla&&34==this.cycleW&&19==this.cycleH&&!this.complete,s=e.browser.opera&&(42==this.cycleW&&19==this.cycleH||37==this.cycleW&&17==this.cycleH)&&!this.complete,o=0===this.cycleH&&0===this.cycleW&&!this.complete;if(n||c||s||o){if(h.s&&x.requeueOnImageNotLoaded&&++l.requeueAttempts<100)return i(l.requeueAttempts," - img slide not loaded, requeuing slideshow: ",this.src,this.cycleW,this.cycleH),setTimeout(function(){e(h.s,h.c).cycle(l)},x.requeueTimeout),P=!0,!1;i("could not determine size of image: "+this.src,this.cycleW,this.cycleH)}}return!0}),P)return!1;if(x.cssBefore=x.cssBefore||{},x.cssAfter=x.cssAfter||{},x.cssFirst=x.cssFirst||{},x.animIn=x.animIn||{},x.animOut=x.animOut||{},s.not(":eq("+B+")").css(x.cssBefore),e(s[B]).css(x.cssFirst),x.timeout){x.timeout=parseInt(x.timeout,10),x.speed.constructor==String&&(x.speed=e.fx.speeds[x.speed]||parseInt(x.speed,10)),x.sync||(x.speed=x.speed/2);for(var z="none"==x.fx?0:"shuffle"==x.fx?500:250;x.timeout-x.speed<z;)x.timeout+=x.speed}if(x.easing&&(x.easeIn=x.easeOut=x.easing),x.speedIn||(x.speedIn=x.speed),x.speedOut||(x.speedOut=x.speed),x.slideCount=r.length,x.currSlide=x.lastSlide=B,x.random?(++x.randomIndex==r.length&&(x.randomIndex=0),x.nextSlide=x.randomMap[x.randomIndex]):x.backwards?x.nextSlide=0===x.startingSlide?r.length-1:x.startingSlide-1:x.nextSlide=x.startingSlide>=r.length-1?0:x.startingSlide+1,!x.multiFx){var C=e.fn.cycle.transitions[x.fx];if(e.isFunction(C))C(n,s,x);else if("custom"!=x.fx&&!x.multiFx)return i("unknown transition: "+x.fx,"; slideshow terminating"),!1}var E=s[B];return x.skipInitializationCallbacks||(x.before.length&&x.before[0].apply(E,[E,E,x,!0]),x.after.length&&x.after[0].apply(E,[E,E,x,!0])),x.next&&e(x.next).bind(x.prevNextEvent,function(){return p(x,1)}),x.prev&&e(x.prev).bind(x.prevNextEvent,function(){return p(x,0)}),(x.pager||x.pagerAnchorBuilder)&&m(r,x),u(x,r),x}function a(t){t.original={before:[],after:[]},t.original.cssBefore=e.extend({},t.cssBefore),t.original.cssAfter=e.extend({},t.cssAfter),t.original.animIn=e.extend({},t.animIn),t.original.animOut=e.extend({},t.animOut),e.each(t.before,function(){t.original.before.push(this)}),e.each(t.after,function(){t.original.after.push(this)})}function f(t){var c,s,o=e.fn.cycle.transitions;if(t.fx.indexOf(",")>0){for(t.multiFx=!0,t.fxs=t.fx.replace(/\s*/g,"").split(","),c=0;c<t.fxs.length;c++){var r=t.fxs[c];s=o[r],s&&o.hasOwnProperty(r)&&e.isFunction(s)||(i("discarding unknown transition: ",r),t.fxs.splice(c,1),c--)}if(!t.fxs.length)return i("No valid transitions named; slideshow terminating."),!1}else if("all"==t.fx){t.multiFx=!0,t.fxs=[];for(var l in o)o.hasOwnProperty(l)&&(s=o[l],o.hasOwnProperty(l)&&e.isFunction(s)&&t.fxs.push(l))}if(t.multiFx&&t.randomizeEffects){var a=Math.floor(20*Math.random())+30;for(c=0;c<a;c++){var f=Math.floor(Math.random()*t.fxs.length);t.fxs.push(t.fxs.splice(f,1)[0])}n("randomized fx sequence: ",t.fxs)}return!0}function u(t,n){t.addSlide=function(i,c){var s=e(i),o=s[0];t.autostopCount||t.countdown++,n[c?"unshift":"push"](o),t.els&&t.els[c?"unshift":"push"](o),t.slideCount=n.length,t.random&&(t.randomMap.push(t.slideCount-1),t.randomMap.sort(function(e,t){return Math.random()-.5})),s.css("position","absolute"),s[c?"prependTo":"appendTo"](t.$cont),c&&(t.currSlide++,t.nextSlide++),e.support.opacity||!t.cleartype||t.cleartypeNoBg||y(s),t.fit&&t.width&&s.width(t.width),t.fit&&t.height&&"auto"!=t.height&&s.height(t.height),o.cycleH=t.fit&&t.height?t.height:s.height(),o.cycleW=t.fit&&t.width?t.width:s.width(),s.css(t.cssBefore),(t.pager||t.pagerAnchorBuilder)&&e.fn.cycle.createPagerAnchor(n.length-1,o,e(t.pager),n,t),e.isFunction(t.onAddSlide)?t.onAddSlide(s):s.hide()}}function d(i,c,s,o){function r(){var e=0;c.timeout;c.timeout&&!c.continuous?(e=h(i[c.currSlide],i[c.nextSlide],c,o),"shuffle"==c.fx&&(e-=c.speedOut)):c.continuous&&l.cyclePause&&(e=10),e>0&&(l.cycleTimeout=setTimeout(function(){d(i,c,0,!c.backwards)},e))}var l=c.$cont[0],a=i[c.currSlide],f=i[c.nextSlide];if(s&&c.busy&&c.manualTrump&&(n("manualTrump in go(), stopping active transition"),e(i).stop(!0,!0),c.busy=0,clearTimeout(l.cycleTimeout)),c.busy)return void n("transition active, ignoring new tx request");if(l.cycleStop==c.stopCount&&(0!==l.cycleTimeout||s)){if(!s&&!l.cyclePause&&!c.bounce&&(c.autostop&&--c.countdown<=0||c.nowrap&&!c.random&&c.nextSlide<c.currSlide))return void(c.end&&c.end(c));var u=!1;if(!s&&l.cyclePause||c.nextSlide==c.currSlide)r();else{u=!0;var p=c.fx;a.cycleH=a.cycleH||e(a).height(),a.cycleW=a.cycleW||e(a).width(),f.cycleH=f.cycleH||e(f).height(),f.cycleW=f.cycleW||e(f).width(),c.multiFx&&(o&&(c.lastFx===t||++c.lastFx>=c.fxs.length)?c.lastFx=0:!o&&(c.lastFx===t||--c.lastFx<0)&&(c.lastFx=c.fxs.length-1),p=c.fxs[c.lastFx]),c.oneTimeFx&&(p=c.oneTimeFx,c.oneTimeFx=null),e.fn.cycle.resetState(c,p),c.before.length&&e.each(c.before,function(e,t){l.cycleStop==c.stopCount&&t.apply(f,[a,f,c,o])});var m=function(){c.busy=0,e.each(c.after,function(e,t){l.cycleStop==c.stopCount&&t.apply(f,[a,f,c,o])}),l.cycleStop||r()};n("tx firing("+p+"); currSlide: "+c.currSlide+"; nextSlide: "+c.nextSlide),c.busy=1,c.fxFn?c.fxFn(a,f,c,m,o,s&&c.fastOnEvent):e.isFunction(e.fn.cycle[c.fx])?e.fn.cycle[c.fx](a,f,c,m,o,s&&c.fastOnEvent):e.fn.cycle.custom(a,f,c,m,o,s&&c.fastOnEvent)}if(u||c.nextSlide==c.currSlide){var y;c.lastSlide=c.currSlide,c.random?(c.currSlide=c.nextSlide,++c.randomIndex==i.length&&(c.randomIndex=0,c.randomMap.sort(function(e,t){return Math.random()-.5})),c.nextSlide=c.randomMap[c.randomIndex],c.nextSlide==c.currSlide&&(c.nextSlide=c.currSlide==c.slideCount-1?0:c.currSlide+1)):c.backwards?(y=c.nextSlide-1<0,y&&c.bounce?(c.backwards=!c.backwards,c.nextSlide=1,c.currSlide=0):(c.nextSlide=y?i.length-1:c.nextSlide-1,c.currSlide=y?0:c.nextSlide+1)):(y=c.nextSlide+1==i.length,y&&c.bounce?(c.backwards=!c.backwards,c.nextSlide=i.length-2,c.currSlide=i.length-1):(c.nextSlide=y?0:c.nextSlide+1,c.currSlide=y?i.length-1:c.nextSlide-1))}u&&c.pager&&c.updateActivePagerLink(c.pager,c.currSlide,c.activePagerClass)}}function h(e,t,i,c){if(i.timeoutFn){for(var s=i.timeoutFn.call(e,e,t,i,c);"none"!=i.fx&&s-i.speed<250;)s+=i.speed;if(n("calculated timeout: "+s+"; speed: "+i.speed),s!==!1)return s}return i.timeout}function p(t,n){var i=n?1:-1,c=t.elements,s=t.$cont[0],o=s.cycleTimeout;if(o&&(clearTimeout(o),s.cycleTimeout=0),t.random&&i<0)t.randomIndex--,--t.randomIndex==-2?t.randomIndex=c.length-2:t.randomIndex==-1&&(t.randomIndex=c.length-1),t.nextSlide=t.randomMap[t.randomIndex];else if(t.random)t.nextSlide=t.randomMap[t.randomIndex];else if(t.nextSlide=t.currSlide+i,t.nextSlide<0){if(t.nowrap)return!1;t.nextSlide=c.length-1}else if(t.nextSlide>=c.length){if(t.nowrap)return!1;t.nextSlide=0}var r=t.onPrevNextEvent||t.prevNextClick;return e.isFunction(r)&&r(i>0,t.nextSlide,c[t.nextSlide]),d(c,t,1,n),!1}function m(t,n){var i=e(n.pager);e.each(t,function(c,s){e.fn.cycle.createPagerAnchor(c,s,i,t,n)}),n.updateActivePagerLink(n.pager,n.startingSlide,n.activePagerClass)}function y(t){function i(e){return e=parseInt(e,10).toString(16),e.length<2?"0"+e:e}function c(t){for(;t&&"html"!=t.nodeName.toLowerCase();t=t.parentNode){var n=e.css(t,"background-color");if(n&&n.indexOf("rgb")>=0){var c=n.match(/\d+/g);return"#"+i(c[0])+i(c[1])+i(c[2])}if(n&&"transparent"!=n)return n}return"#ffffff"}n("applying clearType background-color hack"),t.each(function(){e(this).css("background-color",c(this))})}var g="2.9999.6";e.support===t&&(e.support={opacity:!e.browser.msie}),e.expr[":"].paused=function(e){return e.cyclePause},e.fn.cycle=function(t,c){var o={s:this.selector,c:this.context};return 0===this.length&&"stop"!=t?!e.isReady&&o.s?(i("DOM not ready, queuing slideshow"),e(function(){e(o.s,o.c).cycle(t,c)}),this):(i("terminating; zero elements found by selector"+(e.isReady?"":" (DOM not ready)")),this):this.each(function(){var r=s(this,t,c);if(r!==!1){r.updateActivePagerLink=r.updateActivePagerLink||e.fn.cycle.updateActivePagerLink,this.cycleTimeout&&clearTimeout(this.cycleTimeout),this.cycleTimeout=this.cyclePause=0,this.cycleStop=0;var a=e(this),f=r.slideExpr?e(r.slideExpr,this):a.children(),u=f.get();if(u.length<2)return void i("terminating; too few slides: "+u.length);var p=l(a,f,u,r,o);if(p!==!1){var m=p.continuous?10:h(u[p.currSlide],u[p.nextSlide],p,!p.backwards);m&&(m+=p.delay||0,m<10&&(m=10),n("first timeout: "+m),this.cycleTimeout=setTimeout(function(){d(u,p,0,!r.backwards)},m))}}})},e.fn.cycle.resetState=function(t,n){n=n||t.fx,t.before=[],t.after=[],t.cssBefore=e.extend({},t.original.cssBefore),t.cssAfter=e.extend({},t.original.cssAfter),t.animIn=e.extend({},t.original.animIn),t.animOut=e.extend({},t.original.animOut),t.fxFn=null,e.each(t.original.before,function(){t.before.push(this)}),e.each(t.original.after,function(){t.after.push(this)});var i=e.fn.cycle.transitions[n];e.isFunction(i)&&i(t.$cont,e(t.elements),t)},e.fn.cycle.updateActivePagerLink=function(t,n,i){e(t).each(function(){e(this).children().removeClass(i).eq(n).addClass(i)})},e.fn.cycle.next=function(e){p(e,1)},e.fn.cycle.prev=function(e){p(e,0)},e.fn.cycle.createPagerAnchor=function(t,i,s,o,r){var l;if(e.isFunction(r.pagerAnchorBuilder)?(l=r.pagerAnchorBuilder(t,i),n("pagerAnchorBuilder("+t+", el) returned: "+l)):l='<a href="#">'+(t+1)+"</a>",l){var a=e(l);if(0===a.parents("body").length){var f=[];s.length>1?(s.each(function(){var t=a.clone(!0);e(this).append(t),f.push(t[0])}),a=e(f)):a.appendTo(s)}r.pagerAnchors=r.pagerAnchors||[],r.pagerAnchors.push(a);var u=function(n){n.preventDefault(),r.nextSlide=t;var i=r.$cont[0],c=i.cycleTimeout;c&&(clearTimeout(c),i.cycleTimeout=0);var s=r.onPagerEvent||r.pagerClick;e.isFunction(s)&&s(r.nextSlide,o[r.nextSlide]),d(o,r,1,r.currSlide<t)};/mouseenter|mouseover/i.test(r.pagerEvent)?a.hover(u,function(){}):a.bind(r.pagerEvent,u),/^click/.test(r.pagerEvent)||r.allowPagerClickBubble||a.bind("click.cycle",function(){return!1});var h=r.$cont[0],p=!1;r.pauseOnPagerHover&&a.hover(function(){p=!0,h.cyclePause++,c(h,!0,!0)},function(){p&&h.cyclePause--,c(h,!0,!0)})}},e.fn.cycle.hopsFromLast=function(e,t){var n,i=e.lastSlide,c=e.currSlide;return n=t?c>i?c-i:e.slideCount-i:c<i?i-c:i+e.slideCount-c},e.fn.cycle.commonReset=function(t,n,i,c,s,o){e(i.elements).not(t).hide(),"undefined"==typeof i.cssBefore.opacity&&(i.cssBefore.opacity=1),i.cssBefore.display="block",i.slideResize&&c!==!1&&n.cycleW>0&&(i.cssBefore.width=n.cycleW),i.slideResize&&s!==!1&&n.cycleH>0&&(i.cssBefore.height=n.cycleH),i.cssAfter=i.cssAfter||{},i.cssAfter.display="none",e(t).css("zIndex",i.slideCount+(o===!0?1:0)),e(n).css("zIndex",i.slideCount+(o===!0?0:1))},e.fn.cycle.custom=function(t,n,i,c,s,o){var r=e(t),l=e(n),a=i.speedIn,f=i.speedOut,u=i.easeIn,d=i.easeOut;l.css(i.cssBefore),o&&(a=f="number"==typeof o?o:1,u=d=null);var h=function(){l.animate(i.animIn,a,u,function(){c()})};r.animate(i.animOut,f,d,function(){r.css(i.cssAfter),i.sync||h()}),i.sync&&h()},e.fn.cycle.transitions={fade:function(t,n,i){n.not(":eq("+i.currSlide+")").css("opacity",0),i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.cssBefore.opacity=0}),i.animIn={opacity:1},i.animOut={opacity:0},i.cssBefore={top:0,left:0}}},e.fn.cycle.ver=function(){return g},e.fn.cycle.defaults={activePagerClass:"activeSlide",after:null,allowPagerClickBubble:!1,animIn:null,animOut:null,aspect:!1,autostop:0,autostopCount:0,backwards:!1,before:null,center:null,cleartype:!e.support.opacity,cleartypeNoBg:!1,containerResize:1,containerResizeHeight:0,continuous:0,cssAfter:null,cssBefore:null,delay:0,easeIn:null,easeOut:null,easing:null,end:null,fastOnEvent:0,fit:0,fx:"fade",fxFn:null,height:"auto",manualTrump:!0,metaAttr:"cycle",next:null,nowrap:0,onPagerEvent:null,onPrevNextEvent:null,pager:null,pagerAnchorBuilder:null,pagerEvent:"click.cycle",pause:0,pauseOnPagerHover:0,prev:null,prevNextEvent:"click.cycle",random:0,randomizeEffects:1,requeueOnImageNotLoaded:!0,requeueTimeout:250,rev:0,shuffle:null,skipInitializationCallbacks:!1,slideExpr:null,slideResize:1,speed:1e3,speedIn:null,speedOut:null,startingSlide:t,sync:1,timeout:4e3,timeoutFn:null,updateActivePagerLink:null,width:null}}(jQuery),function(e){"use strict";e.fn.cycle.transitions.none=function(t,n,i){i.fxFn=function(t,n,i,c){e(n).show(),e(t).hide(),c()}},e.fn.cycle.transitions.fadeout=function(t,n,i){n.not(":eq("+i.currSlide+")").css({display:"block",opacity:1}),i.before.push(function(t,n,i,c,s,o){e(t).css("zIndex",i.slideCount+(o!==!0?1:0)),e(n).css("zIndex",i.slideCount+(o!==!0?0:1))}),i.animIn.opacity=1,i.animOut.opacity=0,i.cssBefore.opacity=1,i.cssBefore.display="block",i.cssAfter.zIndex=0},e.fn.cycle.transitions.scrollUp=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.height();i.cssBefore.top=c,i.cssBefore.left=0,i.cssFirst.top=0,i.animIn.top=0,i.animOut.top=-c},e.fn.cycle.transitions.scrollDown=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.height();i.cssFirst.top=0,i.cssBefore.top=-c,i.cssBefore.left=0,i.animIn.top=0,i.animOut.top=c},e.fn.cycle.transitions.scrollLeft=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.width();i.cssFirst.left=0,i.cssBefore.left=c,i.cssBefore.top=0,i.animIn.left=0,i.animOut.left=0-c},e.fn.cycle.transitions.scrollRight=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.width();i.cssFirst.left=0,i.cssBefore.left=-c,i.cssBefore.top=0,i.animIn.left=0,i.animOut.left=c},e.fn.cycle.transitions.scrollHorz=function(t,n,i){t.css("overflow","hidden").width(),i.before.push(function(t,n,i,c){i.rev&&(c=!c),e.fn.cycle.commonReset(t,n,i),i.cssBefore.left=c?n.cycleW-1:1-n.cycleW,i.animOut.left=c?-t.cycleW:t.cycleW}),i.cssFirst.left=0,i.cssBefore.top=0,i.animIn.left=0,i.animOut.top=0},e.fn.cycle.transitions.scrollVert=function(t,n,i){t.css("overflow","hidden"),i.before.push(function(t,n,i,c){i.rev&&(c=!c),e.fn.cycle.commonReset(t,n,i),i.cssBefore.top=c?1-n.cycleH:n.cycleH-1,i.animOut.top=c?t.cycleH:-t.cycleH}),i.cssFirst.top=0,i.cssBefore.left=0,i.animIn.top=0,i.animOut.left=0},e.fn.cycle.transitions.slideX=function(t,n,i){i.before.push(function(t,n,i){e(i.elements).not(t).hide(),e.fn.cycle.commonReset(t,n,i,!1,!0),i.animIn.width=n.cycleW}),i.cssBefore.left=0,i.cssBefore.top=0,i.cssBefore.width=0,i.animIn.width="show",i.animOut.width=0},e.fn.cycle.transitions.slideY=function(t,n,i){i.before.push(function(t,n,i){e(i.elements).not(t).hide(),e.fn.cycle.commonReset(t,n,i,!0,!1),i.animIn.height=n.cycleH}),i.cssBefore.left=0,i.cssBefore.top=0,i.cssBefore.height=0,i.animIn.height="show",i.animOut.height=0},e.fn.cycle.transitions.shuffle=function(t,n,i){var c,s=t.css("overflow","visible").width();for(n.css({left:0,top:0}),i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!0,!0)}),i.speedAdjusted||(i.speed=i.speed/2,i.speedAdjusted=!0),i.random=0,i.shuffle=i.shuffle||{left:-s,top:15},i.els=[],c=0;c<n.length;c++)i.els.push(n[c]);for(c=0;c<i.currSlide;c++)i.els.push(i.els.shift());i.fxFn=function(t,n,i,c,s){i.rev&&(s=!s);var o=e(s?t:n);e(n).css(i.cssBefore);var r=i.slideCount;o.animate(i.shuffle,i.speedIn,i.easeIn,function(){for(var n=e.fn.cycle.hopsFromLast(i,s),l=0;l<n;l++)s?i.els.push(i.els.shift()):i.els.unshift(i.els.pop());if(s)for(var a=0,f=i.els.length;a<f;a++)e(i.els[a]).css("z-index",f-a+r);else{var u=e(t).css("z-index");o.css("z-index",parseInt(u,10)+1+r)}o.animate({left:0,top:0},i.speedOut,i.easeOut,function(){e(s?this:t).hide(),c&&c()})})},e.extend(i.cssBefore,{display:"block",opacity:1,top:0,left:0})},e.fn.cycle.transitions.turnUp=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1),i.cssBefore.top=n.cycleH,i.animIn.height=n.cycleH,i.animOut.width=n.cycleW}),i.cssFirst.top=0,i.cssBefore.left=0,i.cssBefore.height=0,i.animIn.top=0,i.animOut.height=0},e.fn.cycle.transitions.turnDown=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1),i.animIn.height=n.cycleH,i.animOut.top=t.cycleH}),i.cssFirst.top=0,i.cssBefore.left=0,i.cssBefore.top=0,i.cssBefore.height=0,i.animOut.height=0},e.fn.cycle.transitions.turnLeft=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0),i.cssBefore.left=n.cycleW,i.animIn.width=n.cycleW}),i.cssBefore.top=0,i.cssBefore.width=0,i.animIn.left=0,i.animOut.width=0},e.fn.cycle.transitions.turnRight=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0),i.animIn.width=n.cycleW,i.animOut.left=t.cycleW}),e.extend(i.cssBefore,{top:0,left:0,width:0}),i.animIn.left=0,i.animOut.width=0},e.fn.cycle.transitions.zoom=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!1,!0),i.cssBefore.top=n.cycleH/2,i.cssBefore.left=n.cycleW/2,e.extend(i.animIn,{top:0,left:0,width:n.cycleW,height:n.cycleH}),e.extend(i.animOut,{width:0,height:0,top:t.cycleH/2,left:t.cycleW/2})}),i.cssFirst.top=0,i.cssFirst.left=0,i.cssBefore.width=0,i.cssBefore.height=0},e.fn.cycle.transitions.fadeZoom=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!1),i.cssBefore.left=n.cycleW/2,i.cssBefore.top=n.cycleH/2,e.extend(i.animIn,{top:0,left:0,width:n.cycleW,height:n.cycleH})}),i.cssBefore.width=0,i.cssBefore.height=0,i.animOut.opacity=0},e.fn.cycle.transitions.blindX=function(t,n,i){var c=t.css("overflow","hidden").width();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.animIn.width=n.cycleW,i.animOut.left=t.cycleW}),i.cssBefore.left=c,i.cssBefore.top=0,i.animIn.left=0,i.animOut.left=c},e.fn.cycle.transitions.blindY=function(t,n,i){var c=t.css("overflow","hidden").height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.animIn.height=n.cycleH,i.animOut.top=t.cycleH}),i.cssBefore.top=c,i.cssBefore.left=0,i.animIn.top=0,i.animOut.top=c},e.fn.cycle.transitions.blindZ=function(t,n,i){var c=t.css("overflow","hidden").height(),s=t.width();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.animIn.height=n.cycleH,i.animOut.top=t.cycleH}),i.cssBefore.top=c,i.cssBefore.left=s,i.animIn.top=0,i.animIn.left=0,i.animOut.top=c,i.animOut.left=s},e.fn.cycle.transitions.growX=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0),i.cssBefore.left=this.cycleW/2,i.animIn.left=0,i.animIn.width=this.cycleW,i.animOut.left=0}),i.cssBefore.top=0,i.cssBefore.width=0},e.fn.cycle.transitions.growY=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1),i.cssBefore.top=this.cycleH/2,i.animIn.top=0,i.animIn.height=this.cycleH,i.animOut.top=0}),i.cssBefore.height=0,i.cssBefore.left=0},e.fn.cycle.transitions.curtainX=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0,!0),i.cssBefore.left=n.cycleW/2,i.animIn.left=0,i.animIn.width=this.cycleW,i.animOut.left=t.cycleW/2,i.animOut.width=0}),i.cssBefore.top=0,i.cssBefore.width=0},e.fn.cycle.transitions.curtainY=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1,!0),i.cssBefore.top=n.cycleH/2,i.animIn.top=0,i.animIn.height=n.cycleH,i.animOut.top=t.cycleH/2,i.animOut.height=0}),i.cssBefore.height=0,i.cssBefore.left=0},e.fn.cycle.transitions.cover=function(t,n,i){var c=i.direction||"left",s=t.css("overflow","hidden").width(),o=t.height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),"right"==c?i.cssBefore.left=-s:"up"==c?i.cssBefore.top=o:"down"==c?i.cssBefore.top=-o:i.cssBefore.left=s}),i.animIn.left=0,i.animIn.top=0,i.cssBefore.top=0,i.cssBefore.left=0},e.fn.cycle.transitions.uncover=function(t,n,i){var c=i.direction||"left",s=t.css("overflow","hidden").width(),o=t.height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!0,!0),"right"==c?i.animOut.left=s:"up"==c?i.animOut.top=-o:"down"==c?i.animOut.top=o:i.animOut.left=-s}),i.animIn.left=0,i.animIn.top=0,i.cssBefore.top=0,i.cssBefore.left=0},e.fn.cycle.transitions.toss=function(t,n,i){var c=t.css("overflow","visible").width(),s=t.height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!0,!0),i.animOut.left||i.animOut.top?i.animOut.opacity=0:e.extend(i.animOut,{left:2*c,top:-s/2,opacity:0})}),i.cssBefore.left=0,i.cssBefore.top=0,i.animIn.left=0},e.fn.cycle.transitions.wipe=function(t,n,i){var c=t.css("overflow","hidden").width(),s=t.height();i.cssBefore=i.cssBefore||{};var o;if(i.clip)if(/l2r/.test(i.clip))o="rect(0px 0px "+s+"px 0px)";else if(/r2l/.test(i.clip))o="rect(0px "+c+"px "+s+"px "+c+"px)";else if(/t2b/.test(i.clip))o="rect(0px "+c+"px 0px 0px)";else if(/b2t/.test(i.clip))o="rect("+s+"px "+c+"px "+s+"px 0px)";else if(/zoom/.test(i.clip)){var r=parseInt(s/2,10),l=parseInt(c/2,10);o="rect("+r+"px "+l+"px "+r+"px "+l+"px)"}i.cssBefore.clip=i.cssBefore.clip||o||"rect(0px 0px 0px 0px)";var a=i.cssBefore.clip.match(/(\d+)/g),f=parseInt(a[0],10),u=parseInt(a[1],10),d=parseInt(a[2],10),h=parseInt(a[3],10);i.before.push(function(t,n,i){if(t!=n){var o=e(t),r=e(n);e.fn.cycle.commonReset(t,n,i,!0,!0,!1),i.cssAfter.display="block";var l=1,a=parseInt(i.speedIn/13,10)-1;!function e(){var t=f?f-parseInt(l*(f/a),10):0,n=h?h-parseInt(l*(h/a),10):0,i=d<s?d+parseInt(l*((s-d)/a||1),10):s,p=u<c?u+parseInt(l*((c-u)/a||1),10):c;r.css({clip:"rect("+t+"px "+p+"px "+i+"px "+n+"px)"}),l++<=a?setTimeout(e,13):o.css("display","none")}()}}),e.extend(i.cssBefore,{display:"block",opacity:1,top:0,left:0}),i.animIn={left:0},i.animOut={left:0}}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.waitforimages.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.waitforimages.min.js
index 7fe2fc1722aab214265c0fd75d2eed5dfee9bbe0..148a48346fefdaa5c43d08d284bdec3439ccc0c2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.waitforimages.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/jquery.waitforimages.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(6($){3 v=\'l\';$.l={D:[\'11\',\'X\',\'15\',\'1a\']};$.Q[\':\'].o=6(8){9(!$(8).B(\'7[5!=""]\')){k w}3 7=n F();7.5=8.5;k!7.16};$.O.l=6(a,b,c){3 h=0;3 j=0;9($.N(m[0])){a=m[0].M;b=m[0].e;c=m[0].c}a=a||$.H;b=b||$.H;c=!!c;9(!$.x(a)||!$.x(b)){P n L(\'S R T I K.\')}k f.e(6(){3 8=$(f);3 d=[];3 y=$.l.D||[];3 z=/J\\(\\s*([\'"]?)(.*?)\\1\\s*\\)/g;9(c){8.A(\'*\').14().e(6(){3 4=$(f);9(4.B(\'7:o\')){d.p({5:4.U(\'5\'),4:4[0]})}$.e(y,6(i,E){3 r=4.17(E);3 q;9(!r){k 19}18(q=z.13(r)){d.p({5:q[2],4:4[0]})}})})}W{8.A(\'7:o\').e(6(){d.p({5:f.5,4:f})})}h=d.Y;j=0;9(h===0){a.t(8[0])}$.e(d,6(i,7){3 u=n F();$(u).10(\'C.\'+v+\' Z.\'+v,6(G){j++;b.t(7.4,j,h,G.V==\'C\');9(j==h){a.t(8[0]);k w}});u.5=7.5})})}}(12));',62,73,'|||var|element|src|function|img|obj|if|finishedCallback|eachCallback|waitForAll|allImgs|each|this||allImgsLength||allImgsLoaded|return|waitForImages|arguments|new|uncached|push|match|propertyValue||call|image|eventNamespace|false|isFunction|hasImgProperties|matchUrl|find|is|load|hasImageProperties|property|Image|event|noop|was|url|supplied|TypeError|finished|isPlainObject|fn|throw|expr|invalid|An|callback|attr|type|else|listStyleImage|length|error|bind|backgroundImage|jQuery|exec|andSelf|borderImage|complete|css|while|true|borderCornerImage'.split('|'),0,{}))
+!function(e){var r="waitForImages";e.waitForImages={hasImageProperties:["backgroundImage","listStyleImage","borderImage","borderCornerImage"]},e.expr[":"].uncached=function(r){if(!e(r).is('img[src!=""]'))return!1;var n=new Image;return n.src=r.src,!n.complete},e.fn.waitForImages=function(n,a,i){var c=0,t=0;if(e.isPlainObject(arguments[0])&&(n=arguments[0].finished,a=arguments[0].each,i=arguments[0].waitForAll),n=n||e.noop,a=a||e.noop,i=!!i,!e.isFunction(n)||!e.isFunction(a))throw new TypeError("An invalid callback was supplied.");return this.each(function(){var s=e(this),o=[],u=e.waitForImages.hasImageProperties||[],l=/url\(\s*(['"]?)(.*?)\1\s*\)/g;i?s.find("*").andSelf().each(function(){var r=e(this);r.is("img:uncached")&&o.push({src:r.attr("src"),element:r[0]}),e.each(u,function(e,n){var a,i=r.css(n);if(!i)return!0;for(;a=l.exec(i);)o.push({src:a[2],element:r[0]})})}):s.find("img:uncached").each(function(){o.push({src:this.src,element:this})}),c=o.length,t=0,0===c&&n.call(s[0]),e.each(o,function(i,o){var u=new Image;e(u).bind("load."+r+" error."+r,function(e){if(t++,a.call(o.element,t,c,"load"==e.type),t==c)return n.call(s[0]),!1}),u.src=o.src})})}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.css
index a83415d8811014638aa555a42598e0c448c74cd3..b7d03fc71756bb84ed0d3772197271aed972337d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.css
@@ -1 +1 @@
-#page{overflow:visible}.slideshow{margin-left:auto;margin-right:auto;text-align:center;outline:0}.ngg-slideshow{overflow:hidden;position:relative;margin-left:auto;margin-right:auto;text-align:center;clear:both;z-index:0}.ngg-slideshow *{vertical-align:middle}.ngg-slideshow img{max-width:100% !important;max-height:100%;width:auto;height:auto;border:0}.ngg-slideshow .ngg-gallery-slideshow-image{position:relative;width:100% !important;height:100% !important;max-width:100% !important;max-height:100% !important}.ngg-slideshow .image-placeholder{visibility:hidden}.ngg-slideshow-loader{display:table-cell;text-align:center;vertical-align:middle}.ngg-slideshow-loader img{background:none !important;border:0 none !important;margin:auto !important}
\ No newline at end of file
+.ngg-slideshow,.slideshow{margin-left:auto;margin-right:auto;text-align:center}.ngg-slideshow *,.ngg-slideshow-loader{vertical-align:middle}#page{overflow:visible}.slideshow{outline:0}.ngg-slideshow{overflow:hidden;position:relative;clear:both;z-index:0}.ngg-slideshow img{max-width:100%!important;max-height:100%;width:auto;height:auto;border:none}.ngg-slideshow .ngg-gallery-slideshow-image{position:relative;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important}.ngg-slideshow .image-placeholder{visibility:hidden}.ngg-slideshow-loader{display:table-cell;text-align:center}.ngg-slideshow-loader img{background:0 0!important;border:0!important;margin:auto!important}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.js
index 03ee290b1c961b1289367fc399c1e6772a075ade..e90791a7c67db74189ea99dd8acf22af68db45a5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0.D.C=4(j){2 t={h:1,5:B,a:z,d:\'A\',E:\'\',g:F};2 s=0.K({},t,j);2 6=b.6;0(6+\'-y\').I().k();2 p=0(6);2 9=0(6+\'-7-c\');2 3=b;0(9).G(4(){2 c=9.H().L();2 8=p.x(\'f-8\');9.k();c.u(3);3.w();q(8){3.v(\'<n J="7-8" W="\'+8+\'" 5="\'+s.5+\'" a="\'+s.a+\'" 11="5: \'+s.5+\'10; a: Z;" />\')}q(3.Y().12>1){3.M({d:s.d,13:\'.l-9-17-7\',16:r,14:r,X:1,g:s.g,Q:3,P:4(O,e,N,R){0(e).S().V(\'U.l-T-15\').o(4(){0(b).m(\'i\').o(4(){0(b).f(\'7-h\',0(e).m(\'n\').f(\'7-h\'))})})}})}})};',62,70,'jQuery||var|self|function|width|selector|image|placeholder|gallery|height|this|list|fx|nextSlideElement|data|timeout|id||args|remove|ngg|find|img|each|container|if|false||defaults|appendTo|prepend|show|attr|loader|400|fade|600|nggShowSlideshow|fn|domain|5000|waitForImages|contents|empty|class|extend|detach|cycle|options|currSlideElement|after|next|forwardFlag|parent|trigger|div|siblings|src|fit|children|auto|px|style|length|slideExpr|containerResize|buttons|slideResize|slideshow'.split('|'),0,{}))
+jQuery.fn.nggShowSlideshow=function(e){var i={id:1,width:600,height:400,fx:"fade",domain:"",timeout:5e3},t=jQuery.extend({},i,e),a=this.selector;jQuery(a+"-loader").empty().remove();var r=jQuery(a),n=jQuery(a+"-image-list"),d=this;jQuery(n).waitForImages(function(){var e=n.contents().detach(),i=r.attr("data-placeholder");n.remove(),e.appendTo(d),d.show(),i&&d.prepend('<img class="image-placeholder" src="'+i+'" width="'+t.width+'" height="'+t.height+'" style="width: '+t.width+'px; height: auto;" />'),d.children().length>1&&d.cycle({fx:t.fx,slideExpr:".ngg-gallery-slideshow-image",slideResize:!1,containerResize:!1,fit:1,timeout:t.timeout,next:d,after:function(e,i,t,a){jQuery(i).parent().siblings("div.ngg-trigger-buttons").each(function(){jQuery(this).find("i").each(function(){jQuery(this).data("image-id",jQuery(i).find("img").data("image-id"))})})}})})};
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow_settings.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow_settings.min.js
index fb8b81c615917e58aca2347a56fdeac3336a4103..9367796ba159a44df57207072db1f04e2bc85a1f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow_settings.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/slideshow/nextgen_basic_slideshow_settings.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4(3($){$(\'2[0="5-6[a]"]\').9(\'1\',$(\'#7-8\'))});',11,11,'name||input|function|jQuery|photocrati|nextgen_basic_slideshow|tr_photocrati|nextgen_basic_slideshow_thumbnail_link_text|nextgen_radio_toggle_tr|show_thumbnail_link'.split('|'),0,{}))
+jQuery(function(t){t('input[name="photocrati-nextgen_basic_slideshow[show_thumbnail_link]"]').nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_basic_slideshow_thumbnail_link_text"))});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.min.js
index 9a739aa1600ffa726350336a78c2ed242af3b783..9be20b26babd86ec9fce637971c70303f284c585 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('H(4($){s={G:F,m:4(){3 b=7;$(\'u\').E(\'I\',\'a.J-N, a.M, a.L\',4(e){3 $7=$(7);3 $5=$7.K(\'.9-D:w\');3 p=$5.j(\'o\').i(\'9-5-\',\'\').i(/-\\d+$/,\'\');h($5.x(\'9-C-B-y\'))v;e.A();b.g(z);$.O($7.j(\'Z\'),4(l){3 n=$(l);$5.11(n.12(\'13[o*="9-5-\'+p+\'"]\'));$(Y).S(\'R\')}).Q(4(){b.g(T)})})},U:4(k){3 f={};3 6=k.c(\'?\');h(6.q==2){6=6[1].c(\'&\');W(3 t V 6){3 8=6[t].c(\'=\');f[8[0]]=8.q==2?8[1]:\'\'}}v f},g:4(r){$(\'u, a\').14(\'10\',r?\'P\':\'X\')}};s.m()});',62,67,'|||var|function|gallery|url_parts|this|param|ngg||self|split|||url_params|toggle_busy|if|replace|attr|url|response|init|html|id|gallery_id|length|busy|NggAjaxNavigation|key|body|return|first|hasClass|none|true|preventDefault|pagination|ajax|galleryoverview|on|null|loading_image|jQuery|click|page|parents|next|prev|numbers|get|wait|always|refreshed|trigger|false|get_querystring_params_from_url|in|for|auto|document|href|cursor|replaceWith|find|div|css'.split('|'),0,{}))
+jQuery(function(a){NggAjaxNavigation={loading_image:null,init:function(){var n=this;a("body").on("click","a.page-numbers, a.prev, a.next",function(t){var e=a(this),i=e.parents(".ngg-galleryoverview:first"),r=i.attr("id").replace("ngg-gallery-","").replace(/-\d+$/,"");i.hasClass("ngg-ajax-pagination-none")||(t.preventDefault(),n.toggle_busy(!0),a.get(e.attr("href"),function(n){var t=a(n);i.replaceWith(t.find('div[id*="ngg-gallery-'+r+'"]')),a(document).trigger("refreshed")}).always(function(){n.toggle_busy(!1)}))})},get_querystring_params_from_url:function(a){var n={},t=a.split("?");if(2==t.length){t=t[1].split("&");for(var e in t){var i=t[e].split("=");n[i[0]]=2==i.length?i[1]:""}}return n},toggle_busy:function(n){a("body, a").css("cursor",n?"wait":"auto")}},NggAjaxNavigation.init()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.css
index 529a3598f386d2699a70fc423ac2ac45dd431408..bc640c38ce1359b618c876d280f4f0585de66511 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.css
@@ -16,7 +16,7 @@
 
 .ngg-gallery-thumbnail-box {
     float: left;
-    margin-right: 5px;
+    max-width: 100% !important;
 }
 
 .ngg-template-caption .ngg-gallery-thumbnail-box {
@@ -24,17 +24,32 @@
 }
 
 .ngg-gallery-thumbnail {
-    float: left;
     text-align: center;
+    max-width: 100% !important;
+    background-color: #FFFFFF;
+    border: 1px solid #A9A9A9;
+    margin-right: 5px;
+    margin: 5px;
+}
+
+.ngg-template-caption .ngg-gallery-thumbnail {
+    margin-right: 0px;
+}
+
+.ngg-gallery-thumbnail a {
+		display: block;
+    margin: 4px;
+    border: none;
+    box-shadow: none;
 }
 
 .ngg-gallery-thumbnail img {
-    background-color: #FFFFFF;
-    border: 1px solid #A9A9A9;
     display: block;
-    margin: 4px 0px 4px 4px;
-    padding: 4px;
+    margin: 0;
+    padding: 0;
     position: relative;
+    max-width: 100% !important;
+    height: auto;
 }
 
 .ngg-gallery-thumbnail img:hover {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.css
index 74feefb5d6fc27a03ae6369391d32e90827965d2..a2c0a8af45a3b5e314b22bc8d6b47b082ce39caa 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.css
@@ -1 +1 @@
-.ngg-galleryoverview{overflow:hidden;margin-top:10px;width:100%;clear:both;display:block !important}.ngg-galleryoverview .desc{margin:0 10px 10px 0;padding:5px}.ngg-gallery-thumbnail-box{float:left;margin-right:5px}.ngg-template-caption .ngg-gallery-thumbnail-box{margin-right:0}.ngg-gallery-thumbnail{float:left;text-align:center}.ngg-gallery-thumbnail img{background-color:#fff;border:1px solid #a9a9a9;display:block;margin:4px 0 4px 4px;padding:4px;position:relative}.ngg-gallery-thumbnail img:hover{background-color:#a9a9a9}.ngg-gallery-thumbnail span{font-size:90%;padding-left:5px;display:block}.ngg-galleryoverview ul li:before{content:'' !important}.ngg-gallery-list{list-style-type:none;padding:0 !important;text-indent:0 !important}.ngg-galleryoverview div.pic img{width:100%;border:0;border-radius:0}.ngg-gallery-list li{float:left;margin:0 2px 0 2px !important;overflow:hidden}.ngg-gallery-list li a{border:1px solid #ccc;display:block;padding:2px}.ngg-gallery-list li.selected a{-moz-background-inline-policy:continuous;-moz-background-origin:padding;background:#000 none repeat scroll 0 0}.ngg-gallery-list li img{height:40px;width:40px}li.ngg-next,li.ngg-prev{height:40px;width:40px;font-size:3.5em}li.ngg-next a,li.ngg-prev a{padding-top:10px;border:0;text-decoration:none}
\ No newline at end of file
+.ngg-galleryoverview{overflow:hidden;margin-top:10px;width:100%;clear:both;display:block!important}.ngg-galleryoverview .desc{margin:0 10px 10px 0;padding:5px}.ngg-gallery-thumbnail-box{float:left;max-width:100%!important}.ngg-template-caption .ngg-gallery-thumbnail-box{margin-right:0}.ngg-gallery-thumbnail{text-align:center;max-width:100%!important;background-color:#FFF;border:1px solid #A9A9A9;margin:5px}.ngg-template-caption .ngg-gallery-thumbnail{margin-right:0}.ngg-gallery-thumbnail a{display:block;margin:4px;border:none;box-shadow:none}.ngg-gallery-thumbnail img{display:block;margin:0;padding:0;position:relative;max-width:100%!important;height:auto}.ngg-gallery-thumbnail img:hover{background-color:#A9A9A9}.ngg-gallery-thumbnail span{font-size:90%;padding-left:5px;display:block}.ngg-galleryoverview ul li:before{content:''!important}.ngg-gallery-list{list-style-type:none;padding:0!important;text-indent:0!important}.ngg-galleryoverview div.pic img{width:100%;border:0;border-radius:0}.ngg-gallery-list li{float:left;margin:0 2px!important;overflow:hidden}.ngg-gallery-list li a{border:1px solid #CCC;display:block;padding:2px}.ngg-gallery-list li.selected a{-moz-background-inline-policy:continuous;-moz-background-origin:padding;background:#000}.ngg-gallery-list li img{height:40px;width:40px}li.ngg-next,li.ngg-prev{height:40px;width:40px;font-size:3.5em}li.ngg-next a,li.ngg-prev a{padding-top:10px;border:none;text-decoration:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.js
index 3f33ef6696a3e52a40024b7908ce5591373e32f8..84096cebbd64c7d717d0998036139787361c6df2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('C(8($){4 i=8(){4 f=$(\'a.B\');f.A(8(e){e.D();4 l=E;4 $5=$(5);4 3=$5.k(\'m-c-r\');4 h=$5.k(\'m-c-z\');4 2=b.9.g();2=2.q(\'/\'+7.j+\'/\').H();6(2.p(-1)==\'/\')2=2.p(0,2.s-1);3=h?h:3;t{6(!3)3=v($5.x(\'.y-w-G-L\').k(\'r\').T(/\\d+/).V(\'\'))}U(W){l=S}6(l){6(7.o.n(\'R.K\')>=0){2=7.o+"/"+7.j+"/c/"+3;6(b.9.g().n(\'?\')>=0)2+=\'?\'+b.9.g().q(\'?\').M()}N{2+="/"+7.j+"/c/"+3}b.9=2}});6(f.s>0){O(8(){f.P(8(){5.J=Q})},I)}};$(5).u(\'F\',i);i()});',59,59,'||url|image_id|var|this|if|photocrati_ajax|function|location||window|image|||imagebrowser_links|toString|image_slug|ngg_imagebrowser_init|ngg_param_slug|attr|success|data|indexOf|wp_root_url|substr|split|id|length|try|bind|parseInt|gallery|parents|ngg|slug|click|use_imagebrowser_effect|jQuery|preventDefault|true|refreshed|thumbnail|shift|200|onclick|php|box|pop|else|setTimeout|each|null|index|false|match|catch|join|ex'.split('|'),0,{}))
+jQuery(function(t){var a=function(){var a=t("a.use_imagebrowser_effect");a.click(function(a){a.preventDefault();var i=!0,o=t(this),n=o.attr("data-image-id"),r=o.attr("data-image-slug"),e=window.location.toString();e=e.split("/"+photocrati_ajax.ngg_param_slug+"/").shift(),"/"==e.substr(-1)&&(e=e.substr(0,e.length-1)),n=r?r:n;try{n||(n=parseInt(o.parents(".ngg-gallery-thumbnail-box").attr("id").match(/\d+/).join("")))}catch(t){i=!1}i&&(photocrati_ajax.wp_root_url.indexOf("index.php")>=0?(e=photocrati_ajax.wp_root_url+"/"+photocrati_ajax.ngg_param_slug+"/image/"+n,window.location.toString().indexOf("?")>=0&&(e+="?"+window.location.toString().split("?").pop())):e+="/"+photocrati_ajax.ngg_param_slug+"/image/"+n,window.location=e)}),a.length>0&&setTimeout(function(){a.each(function(){this.onclick=null})},200)};t(this).bind("refreshed",a),a()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.min.js
index fc249d4b83e221a5fdf16bc43c8d33b03ec827af..7048f840bebee2fe4e48d298934960b1ec31d7df 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('9(8($){$(\'4[3="6-5[7]"]\').0(\'1\',$(\'#2-a\')).0(\'1\',$(\'#2-b\'));$(\'4[3="6-5[d]"]\').0(\'1\',$(\'#2-c\'))});',14,14,'nextgen_radio_toggle_tr||tr_photocrati|name|input|nextgen_basic_thumbnails|photocrati|override_thumbnail_settings|function|jQuery|nextgen_basic_thumbnails_thumbnail_dimensions|nextgen_basic_thumbnails_thumbnail_crop|nextgen_basic_thumbnails_slideshow_link_text|show_slideshow_link'.split('|'),0,{}))
+jQuery(function(t){t('input[name="photocrati-nextgen_basic_thumbnails[override_thumbnail_settings]"]').nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_basic_thumbnails_thumbnail_dimensions")).nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_basic_thumbnails_thumbnail_crop")),t('input[name="photocrati-nextgen_basic_thumbnails[show_slideshow_link]"]').nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_basic_thumbnails_slideshow_link_text"))});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php
index 95aee3d1445a373ba7988982cae99857aa8acdb0..3a31a3ec42c9f9721925b55b5de7c80bd92d66c2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php
@@ -55,7 +55,7 @@ $this->start_element('nextgen_gallery.gallery_container', 'container', $displaye
                     src="<?php echo esc_attr($storage->get_image_url($image, $thumbnail_size_name, TRUE))?>"
                     width="<?php echo esc_attr($thumb_size['width'])?>"
                     height="<?php echo esc_attr($thumb_size['height'])?>"
-                    style="max-width:none;"
+                    style="max-width:100%;"
                 />
             </a>
         </div>
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php
index 9d8a220678df7a02903a01d1c6b8977c2027af39..70214ada224ecb7834bf2355ee4b037b3f0fb28f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php
@@ -19,7 +19,7 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module
 			'photocrati-nextgen_basic_imagebrowser',
 			'NextGEN Basic ImageBrowser',
 			'Provides the NextGEN Basic ImageBrowser Display Type',
-            '0.11',
+            '0.13',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
@@ -179,7 +179,12 @@ class C_NextGen_Basic_ImageBrowser_Installer extends C_Gallery_Display_Installer
 				'entity_types'			=>	array('image'),
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_imagebrowser#preview.jpg',
 				'default_source'		=>	'galleries',
-				'view_order' => NGG_DISPLAY_PRIORITY_BASE + 20
+				'view_order' 			=> NGG_DISPLAY_PRIORITY_BASE + 20,
+				'aliases'				=> array(
+					'basic_imagebrowser',
+					'imagebrowser',
+					'nextgen_basic_imagebrowser'
+				)
 			)
 		);
 	}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php
index 44100644591b5a360ee01780af68269480d39ea8..1c1fe5cc3c8b377b248490be7149267edc907606 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php
@@ -1,16 +1,20 @@
 <?php
 /**
  * Adds validation for the NextGen Basic ImageBrowser display type
+ * @mixin C_Display_Type
+ * @adapts I_Display_Type
  */
 class A_NextGen_Basic_ImageBrowser extends Mixin
 {
-    public function validation()
+    function validation()
     {
         return $this->call_parent('validation');
     }
 }
 /**
  * Provides rendering logic for the NextGen Basic ImageBrowser
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller for "photocrati-nextgen_basic_imagebrowser" context
  */
 class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
 {
@@ -21,7 +25,7 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
      * @param bool $return
      * @return string
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         $picture_list = array();
         foreach ($displayed_gallery->get_included_entities() as $image) {
@@ -45,7 +49,7 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
      * @param array $picture_list
      * @return string Rendered HTML (probably)
      */
-    public function render_image_browser($displayed_gallery, $picture_list)
+    function render_image_browser($displayed_gallery, $picture_list)
     {
         $display_settings = $displayed_gallery->display_settings;
         $storage = C_Gallery_Storage::get_instance();
@@ -145,30 +149,40 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
      *
      * @param C_Displayed_Gallery $displayed_gallery
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
         wp_enqueue_style('nextgen_basic_imagebrowser_style', $this->get_static_url('photocrati-nextgen_basic_imagebrowser#style.css'), FALSE, NGG_SCRIPT_VERSION);
         $this->enqueue_ngg_styles();
     }
 }
+/**
+ * Class A_NextGen_Basic_ImageBrowser_Form
+ * @mixin C_Form
+ * @adapts I_Form for "photocrati-nextgen_basic_imagebrowser" context
+ */
 class A_NextGen_Basic_ImageBrowser_Form extends Mixin_Display_Type_Form
 {
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_IMAGEBROWSER;
     }
     /**
      * Returns a list of fields to render on the settings page
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('ajax_pagination', 'nextgen_basic_templates_template');
     }
 }
+/**
+ * Class A_NextGen_Basic_ImageBrowser_Mapper
+ * @mixin C_Display_Type_Mapper
+ * @adapts I_Display_Type_Mapper
+ */
 class A_NextGen_Basic_ImageBrowser_Mapper extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (isset($entity->name) && $entity->name == NGG_BASIC_IMAGEBROWSER) {
@@ -178,9 +192,14 @@ class A_NextGen_Basic_ImageBrowser_Mapper extends Mixin
         }
     }
 }
+/**
+ * Class A_NextGen_Basic_ImageBrowser_Urls
+ * @mixin C_Routing_App
+ * @adapts I_Routing_App
+ */
 class A_NextGen_Basic_ImageBrowser_Urls extends Mixin
 {
-    public function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
+    function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
     {
         if ($key == 'pid') {
             return "image/{$value}";
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.min.css
index 5fc11c692a6705734f3507da902d5b1ebbab867d..3591d5576bc2ffe09f0fc4aa125b645c41c9191d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.min.css
@@ -1 +1 @@
-.ngg-imagebrowser h3{text-align:center}.ngg-imagebrowser-desc{clear:both}.ngg-imagebrowser .pic{max-width:100%;margin-top:10px;margin-bottom:10px;border:1px solid #a9a9a9}.ngg-imagebrowser .pic a{display:block !important;font-size:0;margin:5px;text-align:center}.ngg-imagebrowser img{max-width:100%;margin:0 auto;padding:0;border:0}.ngg-imagebrowser-nav{padding:5px}.ngg-imagebrowser-nav .back{float:left;border:1px solid #ddd;padding:3px 7px}.ngg-imagebrowser-nav .next{float:right;border:1px solid #ddd;padding:3px 7px}.ngg-imagebrowser-nav .counter{text-align:center;font-size:.9em !important}.exif-data{margin-left:auto !important;margin-right:auto !important}
\ No newline at end of file
+.ngg-imagebrowser h3{text-align:center}.ngg-imagebrowser-desc{clear:both}.ngg-imagebrowser .pic{max-width:100%;margin-top:10px;margin-bottom:10px;border:1px solid #A9A9A9}.ngg-imagebrowser .pic a{display:block!important;font-size:0;margin:5px;text-align:center}.ngg-imagebrowser img{max-width:100%;margin:0 auto;padding:0;border:none}.ngg-imagebrowser-nav{padding:5px}.ngg-imagebrowser-nav .back{float:left;border:1px solid #DDD;padding:3px 7px}.ngg-imagebrowser-nav .next{float:right;border:1px solid #DDD;padding:3px 7px}.ngg-imagebrowser-nav .counter{text-align:center;font-size:.9em!important}.exif-data{margin-left:auto!important;margin-right:auto!important}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php
index a5ecaf4cb0ea168227954cb629983b2d4ffc21e9..8d328698ffda4e25cef710518fa5e30da5667d40 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php
@@ -17,7 +17,7 @@ class M_NextGen_Basic_Singlepic extends C_Base_Module
             NGG_BASIC_SINGLEPIC,
             'NextGen Basic Singlepic',
             'Provides a singlepic gallery for NextGEN Gallery',
-            '0.12',
+            '0.14',
             'https://www.imagely.com',
             'Photocrati Media',
             'https://www.imagely.com'
@@ -146,8 +146,14 @@ class C_NextGen_Basic_SinglePic_Installer extends C_Gallery_Display_Installer
 				'entity_types'			=>	array('image'),
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_singlepic#preview.gif',
 				'default_source'		=>	'galleries',
-				'view_order' => NGG_DISPLAY_PRIORITY_BASE + 60,
-				'hidden_from_ui'        =>  TRUE
+				'view_order'            => NGG_DISPLAY_PRIORITY_BASE + 60,
+				'hidden_from_ui'        =>  TRUE, // todo remove this, use hidden_from_igw instead
+                'hidden_from_igw'       =>  TRUE,
+                'aliases'               =>  array(
+                    'basic_singlepic',
+                    'singlepic',
+                    'nextgen_basic_singlepic'
+                )
 			));
 	}
 }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/package.module.nextgen_basic_singlepic.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/package.module.nextgen_basic_singlepic.php
index 54a0b61768a4e6fda0fdc9ff2b9a5d5099255eae..c0138868e73939aaf0b420196f6daa2a3924cb2a 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/package.module.nextgen_basic_singlepic.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/package.module.nextgen_basic_singlepic.php
@@ -1,13 +1,23 @@
 <?php
+/**
+ * Class A_NextGen_Basic_Singlepic
+ * @mixin C_Display_Type
+ * @adapts I_Display_Type
+ */
 class A_NextGen_Basic_Singlepic extends Mixin
 {
-    public function validation()
+    function validation()
     {
         if ($this->object->name == NGG_BASIC_SINGLEPIC) {
         }
         return $this->call_parent('validation');
     }
 }
+/**
+ * Class A_NextGen_Basic_Singlepic_Controller
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller for "photocrati-nextgen_basic_singlepic" context
+ */
 class A_NextGen_Basic_Singlepic_Controller extends Mixin
 {
     /**
@@ -15,7 +25,7 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin
      *
      * @param stdClass|C_Displayed_Gallery|C_DataMapper_Model $displayed_gallery
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         $storage = C_Gallery_Storage::get_instance();
         $dynthumbs = C_Dynamic_Thumbnails_Manager::get_instance();
@@ -24,7 +34,7 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin
         $displayed_gallery->skip_excluding_globally_excluded_images = TRUE;
         $image = array_shift($displayed_gallery->get_entities(1, FALSE, FALSE, 'included'));
         if (!$image) {
-            return $this->object->render_partial('photocrati-nextgen_gallery_display#no_images_found', array(), $return);
+            return $this->object->render_partial("photocrati-nextgen_gallery_display#no_images_found", array(), $return);
         }
         switch ($display_settings['float']) {
             case 'left':
@@ -126,7 +136,7 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin
     /**
      * Intentionally disable the application of the effect code
      */
-    public function strip_thumbcode($thumbcode)
+    function strip_thumbcode($thumbcode)
     {
         return '';
     }
@@ -135,70 +145,80 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin
      *
      * @param C_Displayed_Gallery $displayed_gallery
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
         wp_enqueue_style('nextgen_basic_singlepic_style', $this->get_static_url('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic.css'), FALSE, NGG_SCRIPT_VERSION);
         $this->enqueue_ngg_styles();
     }
 }
+/**
+ * Class A_NextGen_Basic_SinglePic_Form
+ * @mixin C_Form
+ * @adapts I_Form for "photocrati-nextgen_basic_singlepic" context
+ */
 class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form
 {
     /**
      * Returns the name of the display type
      * @return string
      */
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_SINGLEPIC;
     }
     /**
      * Returns the name of the fields to render for the SinglePic
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('nextgen_basic_singlepic_dimensions', 'nextgen_basic_singlepic_link', 'nextgen_basic_singlepic_link_target', 'nextgen_basic_singlepic_float', 'nextgen_basic_singlepic_quality', 'nextgen_basic_singlepic_crop', 'nextgen_basic_singlepic_display_watermark', 'nextgen_basic_singlepic_display_reflection', 'nextgen_basic_templates_template');
     }
-    public function _render_nextgen_basic_singlepic_dimensions_field($display_type)
+    function _render_nextgen_basic_singlepic_dimensions_field($display_type)
     {
         return $this->object->render_partial('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic_settings_dimensions', array('display_type_name' => $display_type->name, 'dimensions_label' => __('Thumbnail dimensions', 'nggallery'), 'width_label' => __('Width'), 'width' => $display_type->settings['width'], 'height_label' => __('Height'), 'height' => $display_type->settings['height']), True);
     }
-    public function _render_nextgen_basic_singlepic_link_field($display_type)
+    function _render_nextgen_basic_singlepic_link_field($display_type)
     {
         return $this->object->render_partial('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic_settings_link', array('display_type_name' => $display_type->name, 'link_label' => __('Link'), 'link' => $display_type->settings['link']), True);
     }
-    public function _render_nextgen_basic_singlepic_link_target_field($display_type)
+    function _render_nextgen_basic_singlepic_link_target_field($display_type)
     {
         return $this->_render_select_field($display_type, 'link_target', __('Link target', 'nggallery'), array('_self' => __('Self', 'nggallery'), '_blank' => __('Blank', 'nggallery'), '_parent' => __('Parent', 'nggallery'), '_top' => __('Top', 'nggallery')), $display_type->settings['link_target']);
     }
-    public function _render_nextgen_basic_singlepic_quality_field($display_type)
+    function _render_nextgen_basic_singlepic_quality_field($display_type)
     {
         return $this->object->render_partial('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic_settings_quality', array('display_type_name' => $display_type->name, 'quality_label' => __('Image quality', 'nggallery'), 'quality' => $display_type->settings['quality']), True);
     }
-    public function _render_nextgen_basic_singlepic_display_watermark_field($display_type)
+    function _render_nextgen_basic_singlepic_display_watermark_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'display_watermark', __('Display watermark', 'nggallery'), $display_type->settings['display_watermark']);
     }
-    public function _render_nextgen_basic_singlepic_display_reflection_field($display_type)
+    function _render_nextgen_basic_singlepic_display_reflection_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'display_reflection', __('Display reflection', 'nggallery'), $display_type->settings['display_reflection']);
     }
-    public function _render_nextgen_basic_singlepic_crop_field($display_type)
+    function _render_nextgen_basic_singlepic_crop_field($display_type)
     {
         return $this->_render_radio_field($display_type, 'crop', __('Crop thumbnail', 'nggallery'), $display_type->settings['crop']);
     }
-    public function _render_nextgen_basic_singlepic_float_field($display_type)
+    function _render_nextgen_basic_singlepic_float_field($display_type)
     {
         return $this->_render_select_field($display_type, 'float', __('Float', 'nggallery'), array('' => __('None', 'nggallery'), 'left' => __('Left', 'nggallery'), 'right' => __('Right', 'nggallery')), $display_type->settings['float']);
     }
 }
+/**
+ * Class A_NextGen_Basic_SinglePic_Mapper
+ * @mixin C_Display_Type_Mapper
+ * @adapts I_Display_Type_Mapper
+ */
 class A_NextGen_Basic_SinglePic_Mapper extends Mixin
 {
     /**
      * Sets default values for SinglePic settings
      * @param stdClass|C_DataMapper_Model $entity
      */
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (isset($entity->name) && $entity->name == NGG_BASIC_SINGLEPIC) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/static/nextgen_basic_singlepic.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/static/nextgen_basic_singlepic.min.css
index 37404e947f34cb4790955c20c3aade3c96a9dd99..db8229f3c31d3521a703ed0e464c86fc8a9d73d3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/static/nextgen_basic_singlepic.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/static/nextgen_basic_singlepic.min.css
@@ -1 +1 @@
-.ngg-gallery-singlepic-image{margin:0 auto 1em auto}.ngg-gallery-singlepic-image a{max-width:100%}.ngg-gallery-singlepic-image img{margin:0;max-width:100%;border:0}.ngg-singlepic{background-color:#fff;display:block;padding:4px}.ngg-left{float:left;margin-right:10px}.ngg-right{float:right;margin-left:10px}.ngg-center{margin-left:auto !important;margin-right:auto !important}.ngg-gallery-singlepic-image .ngg-trigger-buttons{margin:5px 0 0 0}
\ No newline at end of file
+.ngg-gallery-singlepic-image{margin:0 auto 1em}.ngg-gallery-singlepic-image a{max-width:100%}.ngg-gallery-singlepic-image img{margin:0;max-width:100%;border:none}.ngg-singlepic{background-color:#FFF;display:block;padding:4px}.ngg-left{float:left;margin-right:10px}.ngg-right{float:right;margin-left:10px}.ngg-center{margin-left:auto!important;margin-right:auto!important}.ngg-gallery-singlepic-image .ngg-trigger-buttons{margin:5px 0 0}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php
index 833ee35bdb10816127935e03dc7c24b10166accc..97a63f70579e33b57075d70d48ae5fc5f2883737 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php
@@ -17,7 +17,7 @@ class M_NextGen_Basic_Tagcloud extends C_Base_Module
 			NGG_BASIC_TAGCLOUD,
             'NextGen Basic Tagcloud',
             'Provides a tagcloud for NextGEN Gallery',
-            '0.11',
+            '0.15',
             'https://www.imagely.com',
             'Photocrati Media',
             'https://www.imagely.com'
@@ -168,7 +168,12 @@ class C_NextGen_Basic_Tagcloud_Installer extends C_Gallery_Display_Installer
 				'entity_types'			=>	array('image'),
 				'preview_image_relpath'	=>	'photocrati-nextgen_basic_tagcloud#preview.gif',
 				'default_source'		=>	'tags',
-				'view_order' => NGG_DISPLAY_PRIORITY_BASE + 100
+				'view_order'            => NGG_DISPLAY_PRIORITY_BASE + 100,
+                'aliases'               => array(
+                    'basic_tagcloud',
+                    'tagcloud',
+                    'nextgen_basic_tagcloud'
+                )
 			)
 
 		);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php
index 9d3fa0e7ee18b94c4fa6003843482784b9251ab6..1b1c7c164c8c17e8d01d0d86e0f60046e0acc962 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php
@@ -1,14 +1,28 @@
 <?php
+/**
+ * Class A_NextGen_Basic_Tagcloud
+ * @mixin C_Display_Type
+ * @adapts I_Display_Type
+ */
 class A_NextGen_Basic_Tagcloud extends Mixin
 {
-    public function validation()
+    function validation()
     {
         if ($this->object->name == NGG_BASIC_TAGCLOUD) {
-            $this->object->validates_presence_of('display_type');
+            $this->object->validates_presence_of('gallery_display_type');
+        }
+        // If we have a "gallery_display_type", we don't need a "display_type" setting
+        if (isset($this->object->settings['display_type']) && isset($this->object->settings['gallery_display_type'])) {
+            unset($this->object->settings['display_type']);
         }
         return $this->call_parent('validation');
     }
 }
+/**
+ * Class A_NextGen_Basic_Tagcloud_Controller
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller for "photocrati-nextgen_basic_tagcloud" context
+ */
 class A_NextGen_Basic_Tagcloud_Controller extends Mixin
 {
     /**
@@ -16,14 +30,19 @@ class A_NextGen_Basic_Tagcloud_Controller extends Mixin
      *
      * @param stdClass|C_Displayed_Gallery|C_DataMapper_Model $displayed_gallery
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         $display_settings = $displayed_gallery->display_settings;
         $application = C_Router::get_instance()->get_routed_app();
         $tag = urldecode($this->param('gallerytag'));
+        // The display setting 'display_type' has been removed to 'gallery_display_type'
+        if (isset($display_settings['display_type'])) {
+            $display_settings['gallery_display_type'] = $display_settings['display_type'];
+            unset($display_settings['display_type']);
+        }
         // we're looking at a tag, so show images w/that tag as a thumbnail gallery
         if (!is_home() && !empty($tag)) {
-            return C_Displayed_Gallery_Renderer::get_instance()->display_images(array('source' => 'tags', 'container_ids' => array(esc_attr($tag)), 'display_type' => $display_settings['display_type'], 'original_display_type' => $displayed_gallery->display_type, 'original_settings' => $display_settings));
+            return C_Displayed_Gallery_Renderer::get_instance()->display_images(array('source' => 'tags', 'container_ids' => array(esc_attr($tag)), 'display_type' => $display_settings['gallery_display_type'], 'original_display_type' => $displayed_gallery->display_type, 'original_settings' => $display_settings));
         }
         $defaults = array('exclude' => '', 'format' => 'list', 'include' => $displayed_gallery->get_term_ids_for_tags(), 'largest' => 22, 'link' => 'view', 'number' => $display_settings['number'], 'order' => 'ASC', 'orderby' => 'name', 'smallest' => 8, 'taxonomy' => 'ngg_tag', 'unit' => 'pt');
         $args = wp_parse_args('', $defaults);
@@ -46,24 +65,29 @@ class A_NextGen_Basic_Tagcloud_Controller extends Mixin
      *
      * @param C_Displayed_Gallery $displayed_gallery
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
         wp_enqueue_style('photocrati-nextgen_basic_tagcloud-style', $this->get_static_url('photocrati-nextgen_basic_tagcloud#nextgen_basic_tagcloud.css'), FALSE, NGG_SCRIPT_VERSION);
         $this->enqueue_ngg_styles();
     }
 }
+/**
+ * Class A_NextGen_Basic_Tagcloud_Form
+ * @mixin C_Form
+ * @adapts I_Form for "photocrati-nextgen_basic_tagcloud" context
+ */
 class A_NextGen_Basic_Tagcloud_Form extends Mixin_Display_Type_Form
 {
-    public function get_display_type_name()
+    function get_display_type_name()
     {
         return NGG_BASIC_TAGCLOUD;
     }
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('nextgen_basic_tagcloud_number', 'nextgen_basic_tagcloud_display_type');
     }
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         $path = 'photocrati-nextgen_basic_tagcloud#settings.css';
         wp_enqueue_style('nextgen_basic_tagcloud_settings-css', $this->get_static_url($path), FALSE, NGG_SCRIPT_VERSION);
@@ -72,14 +96,17 @@ class A_NextGen_Basic_Tagcloud_Form extends Mixin_Display_Type_Form
             $atp->mark_script($path);
         }
     }
-    public function _render_nextgen_basic_tagcloud_number_field($display_type)
+    function _render_nextgen_basic_tagcloud_number_field($display_type)
     {
         return $this->_render_number_field($display_type, 'number', __('Maximum number of tags', 'nggallery'), $display_type->settings['number']);
     }
-    public function _render_nextgen_basic_tagcloud_display_type_field($display_type)
+    function _render_nextgen_basic_tagcloud_display_type_field($display_type)
     {
         $types = array();
         $skip_types = array(NGG_BASIC_TAGCLOUD, NGG_BASIC_SINGLEPIC, NGG_BASIC_COMPACT_ALBUM, NGG_BASIC_EXTENDED_ALBUM);
+        if (!isset($display_type->settings['gallery_type'])) {
+            $display_type->settings['gallery_display_type'] = isset($display_type->settings['display_type']) ? $display_type->settings['display_type'] : '';
+        }
         $skip_types = apply_filters('ngg_basic_tagcloud_excluded_display_types', $skip_types);
         $mapper = C_Display_Type_Mapper::get_instance();
         $display_types = $mapper->find_all();
@@ -89,24 +116,41 @@ class A_NextGen_Basic_Tagcloud_Form extends Mixin_Display_Type_Form
             }
             $types[$dt->name] = $dt->title;
         }
-        return $this->_render_select_field($display_type, 'display_type', __('Display type', 'nggallery'), $types, $display_type->settings['display_type'], __('The display type that the tagcloud will point its results to', 'nggallery'));
+        return $this->_render_select_field($display_type, 'gallery_display_type', __('Display type', 'nggallery'), $types, $display_type->settings['gallery_display_type'], __('The display type that the tagcloud will point its results to', 'nggallery'));
     }
 }
+/**
+ * Class A_NextGen_Basic_TagCloud_Mapper
+ *
+ * @mixin C_Display_Type_Mapper
+ * @adapts I_Display_Type_Mapper
+ */
 class A_NextGen_Basic_TagCloud_Mapper extends Mixin
 {
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->call_parent('set_defaults', $entity);
         if (isset($entity->name) && $entity->name == NGG_BASIC_TAGCLOUD) {
-            $this->object->_set_default_value($entity, 'settings', 'display_type', NGG_BASIC_THUMBNAILS);
+            if (isset($entity->display_settings) && is_array($entity->display_settings) && isset($entity->display_settings['display_type'])) {
+                if (!isset($entity->display_settings['gallery_display_type'])) {
+                    $entity->display_settings['gallery_display_type'] = $entity->display_settings['display_type'];
+                }
+                unset($entity->display_settings['display_type']);
+            }
+            $this->object->_set_default_value($entity, 'settings', 'gallery_display_type', NGG_BASIC_THUMBNAILS);
             $this->object->_set_default_value($entity, 'settings', 'number', 45);
             $this->object->_set_default_value($entity, 'settings', 'ngg_triggers_display', 'never');
         }
     }
 }
+/**
+ * Class A_NextGen_Basic_TagCloud_Urls
+ * @mixin C_Routing_App
+ * @adapts I_Routing_App
+ */
 class A_NextGen_Basic_TagCloud_Urls extends Mixin
 {
-    public function create_parameter_segment($key, $value, $id, $use_prefix)
+    function create_parameter_segment($key, $value, $id, $use_prefix)
     {
         if ($key == 'gallerytag') {
             return 'tags/' . $value;
@@ -114,18 +158,18 @@ class A_NextGen_Basic_TagCloud_Urls extends Mixin
             return $this->call_parent('create_parameter_segment', $key, $value, $id, $use_prefix);
         }
     }
-    public function set_parameter_value($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
+    function set_parameter_value($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
     {
         $retval = $this->call_parent('set_parameter_value', $key, $value, $id, $use_prefix, $url);
         return $this->_set_tag_cloud_parameters($retval, $key, $id);
     }
-    public function remove_parameter($key, $id = NULL, $url = FALSE)
+    function remove_parameter($key, $id = NULL, $url = FALSE)
     {
         $retval = $this->call_parent('remove_parameter', $key, $id, $url);
         $retval = $this->_set_tag_cloud_parameters($retval, $key, $id);
         return $retval;
     }
-    public function _set_tag_cloud_parameters($retval, $key, $id = NULL)
+    function _set_tag_cloud_parameters($retval, $key, $id = NULL)
     {
         // Get the settings manager
         $settings = C_NextGen_Settings::get_instance();
@@ -138,11 +182,15 @@ class A_NextGen_Basic_TagCloud_Urls extends Mixin
         $regex = implode('', array('#//?', $id ? "({$id})?" : "(\\w+{$sep})?", "({$prefix})?gallerytag{$sep}([\\w-_]+)/?#"));
         // Replace any page parameters with the ngglegacy equivalent
         if (preg_match($regex, $retval, $matches)) {
-            $retval = rtrim(str_replace($matches[0], "/tags/{$matches[3]}/", $retval), '/');
+            $retval = rtrim(str_replace($matches[0], "/tags/{$matches[3]}/", $retval), "/");
         }
         return $retval;
     }
 }
+/**
+ * Class C_Taxonomy_Controller
+ * @implements I_Taxonomy_Controller
+ */
 class C_Taxonomy_Controller extends C_MVC_Controller
 {
     static $_instances = array();
@@ -161,7 +209,7 @@ class C_Taxonomy_Controller extends C_MVC_Controller
         }
         return self::$_instances[$context];
     }
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Taxonomy_Controller');
@@ -172,12 +220,12 @@ class C_Taxonomy_Controller extends C_MVC_Controller
      * @param string $tag
      * @return string
      */
-    public function index_action($tag)
+    function index_action($tag)
     {
         $mapper = C_Display_Type_Mapper::get_instance();
         // Respect the global display type setting
         $display_type = $mapper->find_by_name(NGG_BASIC_TAGCLOUD, TRUE);
-        $display_type = !empty($display_type->settings['display_type']) ? $display_type->settings['display_type'] : NGG_BASIC_THUMBNAILS;
+        $display_type = !empty($display_type->settings['gallery_display_type']) ? $display_type->settings['gallery_display_type'] : NGG_BASIC_THUMBNAILS;
         return "[ngg_images source='tags' container_ids='{$tag}' slug='{$tag}' display_type='{$display_type}']";
     }
     /**
@@ -186,7 +234,7 @@ class C_Taxonomy_Controller extends C_MVC_Controller
      * @param $posts Wordpress post objects
      * @return array Wordpress post objects
      */
-    public function detect_ngg_tag($posts, $wp_query_local)
+    function detect_ngg_tag($posts, $wp_query_local)
     {
         global $wp;
         global $wp_query;
@@ -222,7 +270,7 @@ class C_Taxonomy_Controller extends C_MVC_Controller
         }
         return $posts;
     }
-    public function create_ngg_tag_post($tag)
+    function create_ngg_tag_post($tag)
     {
         $title = sprintf(__('Images tagged &quot;%s&quot;', 'nggallery'), $tag);
         $title = apply_filters('ngg_basic_tagcloud_title', $title, $tag);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php
index 27ed32e094d3aff18733e5bdb899e19c07386c04..9026042fc61a2b0dfe97c9d90578038e7ca06282 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php
@@ -15,7 +15,7 @@ class M_NextGen_Basic_Templates extends C_Base_Module
 			'photocrati-nextgen_basic_templates',
 			'NextGen Basic Templates',
 			'Provides a NextGen-Legacy compatible thumbnail gallery for NextGEN Gallery',
-			'0.6',
+			'0.7',
 			'https://www.imagely.com',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/package.module.nextgen_basic_templates.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/package.module.nextgen_basic_templates.php
index b90c819c881a82c3f755565a419ef1912ad29481..3681a40fbaaf653cfda6f953c6894b66690d2e90 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/package.module.nextgen_basic_templates.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/package.module.nextgen_basic_templates.php
@@ -1,4 +1,9 @@
 <?php
+/**
+ * Class A_NextGen_Basic_Template_Form
+ * @mixin C_Form
+ * @adapts I_Form
+ */
 class A_NextGen_Basic_Template_Form extends Mixin
 {
     /**
@@ -7,7 +12,7 @@ class A_NextGen_Basic_Template_Form extends Mixin
      * @param $display_type
      * @return mixed
      */
-    public function _render_nextgen_basic_templates_template_field($display_type)
+    function _render_nextgen_basic_templates_template_field($display_type)
     {
         switch ($display_type->name) {
             case 'photocrati-nextgen_basic_singlepic':
@@ -48,7 +53,7 @@ class A_NextGen_Basic_Template_Form extends Mixin
      * is array(file_abspath => label)
      * @return array
      */
-    public function _get_available_templates($prefix = FALSE)
+    function _get_available_templates($prefix = FALSE)
     {
         $templates = array();
         foreach (C_Legacy_Template_Locator::get_instance()->find_all($prefix) as $label => $files) {
@@ -69,7 +74,7 @@ class A_NextGen_Basic_Template_Form extends Mixin
      *
      * @return array
      */
-    public function prepare_legacy_parameters($images, $displayed_gallery, $params = array())
+    function prepare_legacy_parameters($images, $displayed_gallery, $params = array())
     {
         // setup
         $image_map = C_Image_Mapper::get_instance();
@@ -161,7 +166,7 @@ class A_NextGen_Basic_Template_Form extends Mixin
         }
         return $return;
     }
-    public function enqueue_static_resources()
+    function enqueue_static_resources()
     {
         wp_enqueue_style('ngg_template_settings', $this->get_static_url('photocrati-nextgen_basic_templates#ngg_template_settings.css'), FALSE, NGG_SCRIPT_VERSION);
         wp_enqueue_script('ngg_template_settings', $this->get_static_url('photocrati-nextgen_basic_templates#ngg_template_settings.js'), array('ngg_select2'), NGG_SCRIPT_VERSION, TRUE);
@@ -174,11 +179,13 @@ class A_NextGen_Basic_Template_Form extends Mixin
 }
 /**
  * Provides a utility to locate legacy templates
+ * @mixin Mixin_Legacy_Template_Locator
+ * @implements I_Legacy_Template_Locator
  */
 class C_Legacy_Template_Locator extends C_Component
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Legacy_Template_Locator');
@@ -203,7 +210,7 @@ class Mixin_Legacy_Template_Locator extends Mixin
      *
      * @return array Template storing directories
      */
-    public function get_template_directories()
+    function get_template_directories()
     {
         return apply_filters('ngg_legacy_template_directories', array('Child Theme' => get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'nggallery' . DIRECTORY_SEPARATOR, 'Parent Theme' => get_template_directory() . DIRECTORY_SEPARATOR . 'nggallery' . DIRECTORY_SEPARATOR, 'NextGEN Legacy' => NGGALLERY_ABSPATH . 'view' . DIRECTORY_SEPARATOR, 'NextGEN Overrides' => implode(DIRECTORY_SEPARATOR, array(WP_CONTENT_DIR, 'ngg', 'legacy', 'templates'))));
     }
@@ -212,7 +219,7 @@ class Mixin_Legacy_Template_Locator extends Mixin
      *
      * @return array All available template files
      */
-    public function find_all($prefix = FALSE)
+    function find_all($prefix = FALSE)
     {
         $files = array();
         foreach ($this->object->get_template_directories() as $label => $dir) {
@@ -230,7 +237,7 @@ class Mixin_Legacy_Template_Locator extends Mixin
      * @param string $dir Directory
      * @return array All php files in $dir
      */
-    public function get_templates_from_dir($dir, $prefix = FALSE)
+    function get_templates_from_dir($dir, $prefix = FALSE)
     {
         if (!is_dir($dir)) {
             return;
@@ -260,7 +267,7 @@ class Mixin_Legacy_Template_Locator extends Mixin
      * Find a particular template by name
      * @param $template
      */
-    public function find($template_name)
+    function find($template_name)
     {
         $template_abspath = FALSE;
         // hook into the render feature to allow other plugins to include templates
@@ -278,11 +285,11 @@ class Mixin_Legacy_Template_Locator extends Mixin
                 if ($template_abspath) {
                     break;
                 }
-                $filename = implode(DIRECTORY_SEPARATOR, array(rtrim($dir, '/\\'), $custom_template));
+                $filename = implode(DIRECTORY_SEPARATOR, array(rtrim($dir, "/\\"), $custom_template));
                 if (@file_exists($filename)) {
                     $template_abspath = $filename;
                 } elseif (strpos($custom_template, '-template') === FALSE) {
-                    $filename = implode(DIRECTORY_SEPARATOR, array(rtrim($dir, '/\\'), str_replace('.php', '', $custom_template) . '-template.php'));
+                    $filename = implode(DIRECTORY_SEPARATOR, array(rtrim($dir, "/\\"), str_replace('.php', '', $custom_template) . '-template.php'));
                     if (@file_exists($filename)) {
                         $template_abspath = $filename;
                     }
@@ -295,6 +302,12 @@ class Mixin_Legacy_Template_Locator extends Mixin
         return $template_abspath;
     }
 }
+/**
+ * Class Mixin_NextGen_Basic_Templates
+ * @mixin C_Display_Type_Controller
+ *
+ * Provides a mixin that other display type controllers can use to render the ngglegacy templates
+ */
 class Mixin_NextGen_Basic_Templates extends Mixin
 {
     /**
@@ -305,9 +318,9 @@ class Mixin_NextGen_Basic_Templates extends Mixin
      * @param bool $callback
      * @param bool $return
      */
-    public function legacy_render($template_name, $vars = array(), $return = FALSE, $prefix = NULL)
+    function legacy_render($template_name, $vars = array(), $return = FALSE, $prefix = NULL)
     {
-        $retval = '[Not a valid template]';
+        $retval = "[Not a valid template]";
         $template_locator = C_Legacy_Template_Locator::get_instance();
         // search first for files with their prefix
         $template_abspath = $template_locator->find($prefix . '-' . $template_name);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/static/ngg_template_settings.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/static/ngg_template_settings.min.js
index ebb576dfa5d9fefc6c83f7ca0629d19020df973e..2ea014c3bb031624901c984e17a5eff2143b7322 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/static/ngg_template_settings.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/static/ngg_template_settings.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('3(2($){$(\'.1\').0({4:5.9,8:7,6:a})});',11,11,'select2|ngg_settings_template|function|jQuery|placeholder|ngg_template_settings|width|true|allowClear|placeholder_text|350'.split('|'),0,{}))
+jQuery(function(e){e(".ngg_settings_template").select2({placeholder:ngg_template_settings.placeholder_text,allowClear:!0,width:350})});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php
index a9331c35eaa2314abd8b0df993b3e44b7a788308..8b60bd29f3e6eda08f0f1973efe36aae7369d36d 100755
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php
@@ -15,7 +15,7 @@ class M_NextGen_Data extends C_Base_Module
             'photocrati-nextgen-data',
             'NextGEN Data Tier',
             "Provides a data tier for NextGEN gallery based on the DataMapper module",
-            '0.11',
+            '0.14',
             'https://www.imagely.com',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php
index e1094f7a75cef6eb31700315becee87bcd8f58e3..67fe6541122b88c5bd3f21bbb40c1cf5c912319f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php
@@ -2,10 +2,12 @@
 /**
  * Modifies a custom post datamapper to use the WordPress built-in 'attachment'
  * custom post type, as used by the Media Library
+ *
+ * @todo Not used yet
  */
 class A_Attachment_DataMapper extends Mixin
 {
-    public function initialize()
+    function initialize()
     {
         $this->object->_object_name = 'attachment';
     }
@@ -14,7 +16,7 @@ class A_Attachment_DataMapper extends Mixin
      * instead of the wp_insert_post
      * @param stdObject $entity
      */
-    public function _save_entity($entity)
+    function _save_entity($entity)
     {
         $post = $this->object->_convert_entity_to_post($entity);
         $filename = property_exists($entity, 'filename') ? $entity->filename : FALSE;
@@ -38,56 +40,66 @@ class A_Attachment_DataMapper extends Mixin
         }
         return $attachment_id;
     }
-    public function select($fields = '*')
+    function select($fields = '*')
     {
         $ret = $this->call_parent('select', $fields);
         $this->object->_query_args['datamapper_attachment'] = true;
         return $ret;
     }
 }
+/**
+ * Class A_NextGen_Data_Factory
+ * @mixin C_Component_Factory
+ * @adapts I_Component_Factory
+ */
 class A_NextGen_Data_Factory extends Mixin
 {
-    public function gallery($properties = array(), $mapper = FALSE, $context = FALSE)
+    function gallery($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Gallery($properties, $mapper, $context);
     }
-    public function gallery_image($properties = array(), $mapper = FALSE, $context = FALSE)
+    function gallery_image($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Image($properties, $mapper, $context);
     }
-    public function image($properties = array(), $mapper = FALSE, $context = FALSE)
+    function image($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Image($properties, $mapper, $context);
     }
-    public function album($properties = array(), $mapper = FALSE, $context = FALSE)
+    function album($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Album($properties, $mapper, $context);
     }
-    public function ngglegacy_gallery_storage($context = FALSE)
+    function ngglegacy_gallery_storage($context = FALSE)
     {
         return new C_NggLegacy_GalleryStorage_Driver($context);
     }
-    public function wordpress_gallery_storage($context = FALSE)
+    function wordpress_gallery_storage($context = FALSE)
     {
         return new C_WordPress_GalleryStorage_Driver($context);
     }
-    public function gallery_storage($context = FALSE)
+    function gallery_storage($context = FALSE)
     {
         return new C_Gallery_Storage($context);
     }
-    public function extra_fields($properties = array(), $mapper = FALSE, $context = FALSE)
+    function extra_fields($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Datamapper_Model($mapper, $properties, $context);
     }
-    public function gallerystorage($context = FALSE)
+    function gallerystorage($context = FALSE)
     {
         return $this->object->gallery_storage($context);
     }
 }
+/**
+ * Class C_Album
+ * @mixin Mixin_NextGen_Album_Instance_Methods
+ * @implements I_Album
+ */
 class C_Album extends C_DataMapper_Model
 {
-    public $_mapper_interface = 'I_Album_Mapper';
-    public function define($properties = array(), $mapper = FALSE, $context = FALSE)
+    var $_mapper_interface = 'I_Album_Mapper';
+    function define($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         parent::define($mapper, $properties, $context);
         $this->add_mixin('Mixin_NextGen_Album_Instance_Methods');
@@ -98,7 +110,7 @@ class C_Album extends C_DataMapper_Model
      * @param bool|\C_DataMapper|\FALSE $mapper
      * @param array $properties
      */
-    public function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
+    function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         // Get the mapper is not specified
         if (!$mapper) {
@@ -113,7 +125,7 @@ class C_Album extends C_DataMapper_Model
  */
 class Mixin_NextGen_Album_Instance_Methods extends Mixin
 {
-    public function validation()
+    function validation()
     {
         $this->validates_presence_of('name');
         $this->validates_numericality_of('previewpic');
@@ -122,7 +134,7 @@ class Mixin_NextGen_Album_Instance_Methods extends Mixin
     /**
      * Gets all galleries associated with the album
      */
-    public function get_galleries($models = FALSE)
+    function get_galleries($models = FALSE)
     {
         $retval = array();
         $mapper = C_Gallery_Mapper::get_instance();
@@ -131,14 +143,20 @@ class Mixin_NextGen_Album_Instance_Methods extends Mixin
         return $retval;
     }
 }
+/**
+ * Class C_Album_Mapper
+ * @mixin Mixin_NextGen_Table_Extras
+ * @mixin Mixin_Album_Mapper
+ * @implements I_Album_Mapper
+ */
 class C_Album_Mapper extends C_CustomTable_DataMapper_Driver
 {
     static $_instance = NULL;
-    public function initialize($object_name = FALSE)
+    function initialize($object_name = FALSE)
     {
         parent::initialize('ngg_album');
     }
-    public function define($context = FALSE, $not_used = FALSE)
+    function define($context = FALSE, $not_used = FALSE)
     {
         // Define the context
         if (!is_array($context)) {
@@ -188,11 +206,11 @@ class Mixin_Album_Mapper extends Mixin
      * @param C_DataMapper_Model|C_Album|stdClass $entity
      * @return string
      */
-    public function get_post_title($entity)
+    function get_post_title($entity)
     {
         return $entity->name;
     }
-    public function _save_entity($entity)
+    function _save_entity($entity)
     {
         $retval = $this->call_parent('_save_entity', $entity);
         if ($retval) {
@@ -205,7 +223,7 @@ class Mixin_Album_Mapper extends Mixin
      * Sets the defaults for an album
      * @param C_DataMapper_Model|C_Album|stdClass $entity
      */
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         $this->object->_set_default_value($entity, 'name', '');
         $this->object->_set_default_value($entity, 'albumdesc', '');
@@ -222,7 +240,7 @@ class Mixin_NextGen_Gallery_Validation
     /**
      * Validates whether the gallery can be saved
      */
-    public function validation()
+    function validation()
     {
         // If a title is present, we can auto-populate some other properties
         if ($this->object->title) {
@@ -249,7 +267,7 @@ class Mixin_NextGen_Gallery_Validation
             unset($storage);
         } else {
             $this->object->path = M_NextGen_Data::strip_html($this->object->path);
-            $this->object->path = str_replace(array('"', '\'\'', '>', '<'), array('', '', '', ''), $this->object->path);
+            $this->object->path = str_replace(array('"', "''", ">", "<"), array('', '', '', ''), $this->object->path);
         }
         $this->object->validates_presence_of('title');
         $this->object->validates_presence_of('name');
@@ -260,15 +278,17 @@ class Mixin_NextGen_Gallery_Validation
 }
 /**
  * Creates a model representing a NextGEN Gallery object
+ * @mixin Mixin_NextGen_Gallery_Validation
+ * @implements I_Gallery
  */
 class C_Gallery extends C_DataMapper_Model
 {
-    public $_mapper_interface = 'I_Gallery_Mapper';
+    var $_mapper_interface = 'I_Gallery_Mapper';
     /**
      * Defines the interfaces and methods (through extensions and hooks)
      * that this class provides
      */
-    public function define($properties = array(), $mapper = FALSE, $context = FALSE)
+    function define($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         parent::define($mapper, $properties, $context);
         $this->add_mixin('Mixin_NextGen_Gallery_Validation');
@@ -280,7 +300,7 @@ class C_Gallery extends C_DataMapper_Model
      * @param C_DataMapper $mapper
      * @param string $context
      */
-    public function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
+    function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         // Get the mapper is not specified
         if (!$mapper) {
@@ -289,7 +309,7 @@ class C_Gallery extends C_DataMapper_Model
         // Initialize
         parent::initialize($mapper, $properties);
     }
-    public function get_images()
+    function get_images()
     {
         $mapper = C_Image_Mapper::get_instance();
         return $mapper->select()->where(array('galleryid = %d', $this->gid))->order_by('sortorder')->run_query();
@@ -297,6 +317,9 @@ class C_Gallery extends C_DataMapper_Model
 }
 /**
  * Provides a datamapper for galleries
+ * @mixin Mixin_NextGen_Table_Extras
+ * @mixin Mixin_Gallery_Mapper
+ * @implements I_Gallery_Mapper
  */
 class C_Gallery_Mapper extends C_CustomTable_DataMapper_Driver
 {
@@ -305,7 +328,7 @@ class C_Gallery_Mapper extends C_CustomTable_DataMapper_Driver
      * Define the object
      * @param string $context
      */
-    public function define($context = FALSE, $not_used = FALSE)
+    function define($context = FALSE, $not_used = FALSE)
     {
         // Add 'gallery' context
         if (!is_array($context)) {
@@ -330,7 +353,7 @@ class C_Gallery_Mapper extends C_CustomTable_DataMapper_Driver
         $this->define_column('author', 'INT', 0);
         $this->define_column('extras_post_id', 'BIGINT', 0);
     }
-    public function initialize($object_name = FALSE)
+    function initialize($object_name = FALSE)
     {
         parent::initialize('ngg_gallery');
     }
@@ -354,11 +377,11 @@ class Mixin_Gallery_Mapper extends Mixin
      * Uses the title property as the post title when the Custom Post driver
      * is used
      */
-    public function get_post_title($entity)
+    function get_post_title($entity)
     {
         return $entity->title;
     }
-    public function _save_entity($entity)
+    function _save_entity($entity)
     {
         // A bug in NGG 2.1.24 allowed galleries to be created with spaces in the directory name, unreplaced by dashes
         // This causes a few problems everywhere, so we here allow users a way to fix those galleries by just re-saving
@@ -397,7 +420,7 @@ class Mixin_Gallery_Mapper extends Mixin
         }
         return $retval;
     }
-    public function destroy($gallery, $with_dependencies = FALSE)
+    function destroy($gallery, $with_dependencies = FALSE)
     {
         $retval = FALSE;
         if ($gallery) {
@@ -412,7 +435,7 @@ class Mixin_Gallery_Mapper extends Mixin
                     $storage->delete_gallery($gallery);
                 }
                 // Delete the image records from the DB
-                $image_mapper->delete()->where(array('galleryid = %d', $gallery_id))->run_query();
+                $image_mapper->delete()->where(array("galleryid = %d", $gallery_id))->run_query();
                 $image_key = $image_mapper->get_primary_key_column();
                 $image_table = $image_mapper->get_table_name();
                 // Delete tag associations no longer needed. The following SQL statement
@@ -428,7 +451,7 @@ class Mixin_Gallery_Mapper extends Mixin
         }
         return $retval;
     }
-    public function set_preview_image($gallery, $image, $only_if_empty = FALSE)
+    function set_preview_image($gallery, $image, $only_if_empty = FALSE)
     {
         $retval = FALSE;
         // We need the gallery object
@@ -454,7 +477,7 @@ class Mixin_Gallery_Mapper extends Mixin
     /**
      * Sets default values for the gallery
      */
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         // If author is missing, then set to the current user id
         // TODO: Using wordpress function. Should use abstraction
@@ -463,10 +486,10 @@ class Mixin_Gallery_Mapper extends Mixin
 }
 class GalleryStorageDriverNotSelectedException extends RuntimeException
 {
-    public function __construct($message = '', $code = NULL, $previous = NULL)
+    function __construct($message = '', $code = NULL, $previous = NULL)
     {
         if (!$message) {
-            $message = 'No gallery storage driver selected.';
+            $message = "No gallery storage driver selected.";
         }
         parent::__construct($message, $code, $previous);
     }
@@ -478,7 +501,7 @@ class Mixin_GalleryStorage extends Mixin
      * implementation
      * @return string
      */
-    public function _get_driver_factory_method($context = FALSE)
+    function _get_driver_factory_method($context = FALSE)
     {
         $factory_method = '';
         // No constant has been defined to establish a global gallerystorage driver
@@ -503,9 +526,9 @@ class C_GalleryStorage_Base extends C_Component
      * @param string $method
      * @param array $args
      */
-    public function __call($method, $args)
+    function __call($method, $args)
     {
-        if (preg_match('/^get_(\\w+)_(abspath|url|dimensions|html|size_params)$/', $method, $match)) {
+        if (preg_match("/^get_(\\w+)_(abspath|url|dimensions|html|size_params)\$/", $method, $match)) {
             if (isset($match[1]) && isset($match[2]) && !$this->has_method($method)) {
                 $method = 'get_image_' . $match[2];
                 $args[] = $match[1];
@@ -516,10 +539,15 @@ class C_GalleryStorage_Base extends C_Component
         return parent::__call($method, $args);
     }
 }
+/**
+ * Class C_Gallery_Storage
+ * @mixin Mixin_GalleryStorage
+ * @implements I_Gallery_Storage
+ */
 class C_Gallery_Storage extends C_GalleryStorage_Base
 {
     public static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_GalleryStorage');
@@ -538,7 +566,7 @@ class C_Gallery_Storage extends C_GalleryStorage_Base
      * @param array $args
      * @return mixed
      */
-    public function _get_driver($context)
+    function _get_driver($context)
     {
         $factory_method = $this->_get_driver_factory_method($context);
         $factory = C_Component_Factory::get_instance();
@@ -547,10 +575,10 @@ class C_Gallery_Storage extends C_GalleryStorage_Base
 }
 class E_UploadException extends E_NggErrorException
 {
-    public function __construct($message = '', $code = NULL, $previous = NULL)
+    function __construct($message = '', $code = NULL, $previous = NULL)
     {
         if (!$message) {
-            $message = 'There was a problem uploading the file.';
+            $message = "There was a problem uploading the file.";
         }
         if (PHP_VERSION_ID >= 50300) {
             parent::__construct($message, $code, $previous);
@@ -561,10 +589,10 @@ class E_UploadException extends E_NggErrorException
 }
 class E_InsufficientWriteAccessException extends E_NggErrorException
 {
-    public function __construct($message = FALSE, $filename = NULL, $code = NULL, $previous = NULL)
+    function __construct($message = FALSE, $filename = NULL, $code = NULL, $previous = NULL)
     {
         if (!$message) {
-            $message = 'Could not write to file. Please check filesystem permissions.';
+            $message = "Could not write to file. Please check filesystem permissions.";
         }
         if ($filename) {
             $message .= " Filename: {$filename}";
@@ -578,10 +606,10 @@ class E_InsufficientWriteAccessException extends E_NggErrorException
 }
 class E_NoSpaceAvailableException extends E_NggErrorException
 {
-    public function __construct($message = '', $code = NULL, $previous = NULL)
+    function __construct($message = '', $code = NULL, $previous = NULL)
     {
         if (!$message) {
-            $message = 'You have exceeded your storage capacity. Please remove some files and try again.';
+            $message = "You have exceeded your storage capacity. Please remove some files and try again.";
         }
         if (PHP_VERSION_ID >= 50300) {
             parent::__construct($message, $code, $previous);
@@ -592,10 +620,10 @@ class E_NoSpaceAvailableException extends E_NggErrorException
 }
 class E_No_Image_Library_Exception extends E_NggErrorException
 {
-    public function __construct($message = '', $code = NULL, $previous = NULL)
+    function __construct($message = '', $code = NULL, $previous = NULL)
     {
         if (!$message) {
-            $message = 'The site does not support the GD Image library. Please ask your hosting provider to enable it.';
+            $message = "The site does not support the GD Image library. Please ask your hosting provider to enable it.";
         }
         if (PHP_VERSION_ID >= 50300) {
             parent::__construct($message, $code, $previous);
@@ -614,10 +642,10 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param string $filename
      * @return bool $result
      */
-    public function _chmod($filename = '')
+    function _chmod($filename = '')
     {
         $stat = @stat(dirname($filename));
-        $perms = $stat['mode'] & 438;
+        $perms = $stat['mode'] & 0666;
         // Remove execute bits for files
         if (@chmod($filename, $perms)) {
             return TRUE;
@@ -629,7 +657,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * or object was passed as an argument
      * @param mixed $gallery_obj_or_id
      */
-    public function _get_gallery_id($gallery_obj_or_id)
+    function _get_gallery_id($gallery_obj_or_id)
     {
         $retval = NULL;
         $gallery_key = $this->object->_gallery_mapper->get_primary_key_column();
@@ -647,7 +675,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * or object was passed as an argument
      * @param type $image_obj_or_id
      */
-    public function _get_image_id($image_obj_or_id)
+    function _get_image_id($image_obj_or_id)
     {
         $retval = NULL;
         $image_key = $this->object->_image_mapper->get_primary_key_column();
@@ -660,13 +688,13 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function convert_slashes($path)
+    function convert_slashes($path)
     {
-        $search = array('/', '\\');
+        $search = array('/', "\\");
         $replace = array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR);
         return str_replace($search, $replace, $path);
     }
-    public function delete_directory($abspath)
+    function delete_directory($abspath)
     {
         $retval = FALSE;
         if (@file_exists($abspath)) {
@@ -674,7 +702,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
             array_shift($files);
             array_shift($files);
             foreach ($files as $file) {
-                $file_abspath = implode(DIRECTORY_SEPARATOR, array(rtrim($abspath, '/\\'), $file));
+                $file_abspath = implode(DIRECTORY_SEPARATOR, array(rtrim($abspath, "/\\"), $file));
                 if (is_dir($file_abspath)) {
                     $this->object->delete_directory($file_abspath);
                 } else {
@@ -691,7 +719,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      *
      * @param int|object $image
      */
-    public function backup_image($image)
+    function backup_image($image)
     {
         $retval = FALSE;
         $image_path = $this->object->get_image_abspath($image);
@@ -722,7 +750,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param boolean $db optionally only copy the image files
      * @param boolean $move move the image instead of copying
      */
-    public function copy_images($images, $gallery, $db = TRUE, $move = FALSE)
+    function copy_images($images, $gallery, $db = TRUE, $move = FALSE)
     {
         $retval = FALSE;
         // Ensure we have a valid gallery
@@ -756,7 +784,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
     /**
      * Empties the gallery cache directory of content
      */
-    public function flush_cache($gallery)
+    function flush_cache($gallery)
     {
         $cache = C_Cache::get_instance();
         $cache->flush_directory($this->object->get_cache_abspath($gallery));
@@ -765,7 +793,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * Gets the absolute path of the backup of an original image
      * @param string $image
      */
-    public function get_backup_abspath($image)
+    function get_backup_abspath($image)
     {
         $retval = null;
         if ($image_path = $this->object->get_image_abspath($image)) {
@@ -773,11 +801,11 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function get_backup_dimensions($image)
+    function get_backup_dimensions($image)
     {
         return $this->object->get_image_dimensions($image, 'backup');
     }
-    public function get_backup_url($image)
+    function get_backup_url($image)
     {
         return $this->object->get_image_url($image, 'backup');
     }
@@ -789,17 +817,17 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|stdClass|C_Gallery $gallery (optional)
      * @return string Absolute path to cache directory
      */
-    public function get_cache_abspath($gallery = FALSE)
+    function get_cache_abspath($gallery = FALSE)
     {
         $retval = NULL;
         if (FALSE == $gallery) {
             $gallerypath = C_NextGen_Settings::get_instance()->gallerypath;
-            $retval = implode(DIRECTORY_SEPARATOR, array(rtrim(C_Fs::get_instance()->get_document_root('gallery'), '/\\'), rtrim($gallerypath, '/\\'), 'cache'));
+            $retval = implode(DIRECTORY_SEPARATOR, array(rtrim(C_Fs::get_instance()->get_document_root('gallery'), "/\\"), rtrim($gallerypath, "/\\"), 'cache'));
         } else {
             if (is_numeric($gallery)) {
                 $gallery = $this->object->_gallery_mapper->find($gallery);
             }
-            $retval = rtrim(implode(DIRECTORY_SEPARATOR, array($this->object->get_gallery_abspath($gallery), 'dynamic')), '/\\');
+            $retval = rtrim(implode(DIRECTORY_SEPARATOR, array($this->object->get_gallery_abspath($gallery), 'dynamic')), "/\\");
         }
         return $retval;
     }
@@ -807,7 +835,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * Gets the absolute path where the full-sized image is stored
      * @param int|object $image
      */
-    public function get_full_abspath($image)
+    function get_full_abspath($image)
     {
         return $this->object->get_image_abspath($image, 'full');
     }
@@ -816,7 +844,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|object $image
      * @return array
      */
-    public function get_full_dimensions($image)
+    function get_full_dimensions($image)
     {
         return $this->object->get_image_dimensions($image, 'full');
     }
@@ -825,7 +853,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|object $image
      * @return string
      */
-    public function get_full_html($image)
+    function get_full_html($image)
     {
         return $this->object->get_image_html($image, 'full');
     }
@@ -835,7 +863,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|stdClass|C_Image $image
      * @return string
      */
-    public function get_full_url($image, $check_existance = FALSE)
+    function get_full_url($image, $check_existance = FALSE)
     {
         return $this->object->get_image_url($image, 'full', $check_existance);
     }
@@ -846,7 +874,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param string $size
      * @return array
      */
-    public function get_image_dimensions($image, $size = 'full')
+    function get_image_dimensions($image, $size = 'full')
     {
         $retval = NULL;
         // If an image id was provided, get the entity
@@ -892,9 +920,9 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param string $size
      * @return string
      */
-    public function get_image_html($image, $size = 'full', $attributes = array())
+    function get_image_html($image, $size = 'full', $attributes = array())
     {
-        $retval = '';
+        $retval = "";
         if (is_numeric($image)) {
             $image = $this->object->_image_mapper->find($image);
         }
@@ -926,7 +954,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
             foreach ($attributes as $attrib => $value) {
                 $attribs[] = "{$attrib}=\"{$value}\"";
             }
-            $attribs = implode(' ', $attribs);
+            $attribs = implode(" ", $attribs);
             // Return HTML string
             $retval = "<img {$attribs} />";
         }
@@ -936,7 +964,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * An alias for get_full_abspath()
      * @param int|object $image
      */
-    public function get_original_abspath($image, $check_existance = FALSE)
+    function get_original_abspath($image, $check_existance = FALSE)
     {
         return $this->object->get_image_abspath($image, 'full', $check_existance);
     }
@@ -945,7 +973,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|object $image
      * @return array
      */
-    public function get_original_dimensions($image)
+    function get_original_dimensions($image)
     {
         return $this->object->get_image_dimensions($image, 'full');
     }
@@ -954,7 +982,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|object $image
      * @return string
      */
-    public function get_original_html($image)
+    function get_original_html($image)
     {
         return $this->object->get_image_html($image, 'full');
     }
@@ -963,7 +991,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param int|stdClass|C_Image $image
      * @return string
      */
-    public function get_original_url($image, $check_existance = FALSE)
+    function get_original_url($image, $check_existance = FALSE)
     {
         return $this->object->get_image_url($image, 'full', $check_existance);
     }
@@ -971,11 +999,11 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * Gets the upload path, optionally for a particular gallery
      * @param int|C_Gallery|stdClass $gallery
      */
-    public function get_upload_relpath($gallery = FALSE)
+    function get_upload_relpath($gallery = FALSE)
     {
         $fs = C_Fs::get_instance();
         $retval = str_replace($fs->get_document_root('gallery'), '', $this->object->get_upload_abspath($gallery));
-        return DIRECTORY_SEPARATOR . ltrim($retval, '/\\');
+        return DIRECTORY_SEPARATOR . ltrim($retval, "/\\");
     }
     /**
      * Moves images from to another gallery
@@ -984,11 +1012,11 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param boolean $db optionally only move the image files, not the db entries
      * @return boolean
      */
-    public function move_images($images, $gallery, $db = TRUE)
+    function move_images($images, $gallery, $db = TRUE)
     {
         return $this->object->copy_images($images, $gallery, $db, TRUE);
     }
-    public function is_image_file($filename = NULL)
+    function is_image_file($filename = NULL)
     {
         $retval = FALSE;
         if (!$filename && isset($_FILES['file']) && $_FILES['file']['error'] == 0) {
@@ -1008,7 +1036,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function is_zip()
+    function is_zip()
     {
         $retval = FALSE;
         if (isset($_FILES['file']) && $_FILES['file']['error'] == 0) {
@@ -1028,7 +1056,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function upload_zip($gallery_id)
+    function upload_zip($gallery_id)
     {
         $memory_limit = intval(ini_get('memory_limit'));
         if (!extension_loaded('suhosin') && $memory_limit < 256) {
@@ -1043,7 +1071,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
             // Ensure that we truly have the gallery id
             $gallery_id = $this->_get_gallery_id($gallery_id);
             $zipfile = $_FILES['file']['tmp_name'];
-            $dest_path = implode(DIRECTORY_SEPARATOR, array(rtrim(get_temp_dir(), '/\\'), 'unpacked-' . M_I18n::mb_basename($zipfile)));
+            $dest_path = implode(DIRECTORY_SEPARATOR, array(rtrim(get_temp_dir(), "/\\"), 'unpacked-' . M_I18n::mb_basename($zipfile)));
             wp_mkdir_p($dest_path);
             if (unzip_file($zipfile, $dest_path) === TRUE) {
                 $dest_dir = $dest_path . DIRECTORY_SEPARATOR;
@@ -1058,7 +1086,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
                     $this->object->delete_directory($dest_path);
                     $destination = wp_upload_dir();
                     $destination_path = $destination['basedir'];
-                    $dest_path = implode(DIRECTORY_SEPARATOR, array(rtrim($destination_path, '/\\'), 'unpacked-' . M_I18n::mb_basename($zipfile)));
+                    $dest_path = implode(DIRECTORY_SEPARATOR, array(rtrim($destination_path, "/\\"), 'unpacked-' . M_I18n::mb_basename($zipfile)));
                     wp_mkdir_p($dest_path);
                     if (unzip_file($zipfile, $dest_path) === TRUE) {
                         $retval = $this->object->import_gallery_from_fs($dest_path, $gallery_id);
@@ -1074,7 +1102,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function is_current_user_over_quota()
+    function is_current_user_over_quota()
     {
         $retval = FALSE;
         $settings = C_NextGen_Settings::get_instance();
@@ -1091,7 +1119,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param type $filename specifies the name of the file
      * @return C_Image
      */
-    public function upload_base64_image($gallery, $data, $filename = FALSE, $image_id = FALSE, $override = FALSE)
+    function upload_base64_image($gallery, $data, $filename = FALSE, $image_id = FALSE, $override = FALSE)
     {
         $settings = C_NextGen_Settings::get_instance();
         $memory_limit = intval(ini_get('memory_limit'));
@@ -1110,7 +1138,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
             // function should perhaps be used
             $upload_dir = $this->object->get_upload_abspath($gallery);
             // Perhaps a filename was given instead of base64 data?
-            if (preg_match('#/\\\\#', $data[0]) && @file_exists($data)) {
+            if (preg_match("#/\\\\#", $data[0]) && @file_exists($data)) {
                 if (!$filename) {
                     $filename = M_I18n::mb_basename($data);
                 }
@@ -1119,12 +1147,12 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
             // Determine filenames
             $original_filename = $filename;
             $filename = $filename ? sanitize_file_name($original_filename) : uniqid('nextgen-gallery');
-            if (preg_match('/\\-(png|jpg|gif|jpeg)$/i', $filename, $match)) {
+            if (preg_match("/\\-(png|jpg|gif|jpeg)\$/i", $filename, $match)) {
                 $filename = str_replace($match[0], '.' . $match[1], $filename);
             }
             $abs_filename = implode(DIRECTORY_SEPARATOR, array($upload_dir, $filename));
             // Ensure that the filename is valid
-            if (!preg_match('/(png|jpeg|jpg|gif)$/i', $abs_filename)) {
+            if (!preg_match("/(png|jpeg|jpg|gif)\$/i", $abs_filename)) {
                 throw new E_UploadException(__('Invalid image file. Acceptable formats: JPG, GIF, and PNG.', 'nggallery'));
             }
             // Prevent duplicate filenames: check if the filename exists and
@@ -1204,6 +1232,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
                 } catch (E_No_Image_Library_Exception $ex) {
                     throw $ex;
                 } catch (E_Clean_Exit $ex) {
+                    // pass
                 } catch (Exception $ex) {
                     throw new E_InsufficientWriteAccessException(FALSE, $abs_filename, FALSE, $ex);
                 }
@@ -1218,7 +1247,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function import_gallery_from_fs($abspath, $gallery_id = FALSE, $create_new_gallerypath = TRUE, $gallery_title = NULL, $filenames = array())
+    function import_gallery_from_fs($abspath, $gallery_id = FALSE, $create_new_gallerypath = TRUE, $gallery_title = NULL, $filenames = array())
     {
         $retval = FALSE;
         if (@file_exists($abspath)) {
@@ -1268,7 +1297,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
                 if ($gallery_id) {
                     $retval = array('gallery_id' => $gallery_id, 'image_ids' => array());
                     foreach ($files as $file_abspath) {
-                        if (!preg_match('/\\.(jpg|jpeg|gif|png)$/i', $file_abspath)) {
+                        if (!preg_match("/\\.(jpg|jpeg|gif|png)\$/i", $file_abspath)) {
                             continue;
                         }
                         $image = null;
@@ -1331,7 +1360,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         }
         return $retval;
     }
-    public function get_image_format_list()
+    function get_image_format_list()
     {
         $format_list = array(IMAGETYPE_GIF => 'gif', IMAGETYPE_JPEG => 'jpg', IMAGETYPE_PNG => 'png');
         return $format_list;
@@ -1343,7 +1372,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param array $params
      * @return array
      */
-    public function calculate_image_clone_result($image_path, $clone_path, $params)
+    function calculate_image_clone_result($image_path, $clone_path, $params)
     {
         $width = isset($params['width']) ? $params['width'] : NULL;
         $height = isset($params['height']) ? $params['height'] : NULL;
@@ -1487,6 +1516,9 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
                         $crop_ratio_x = $crop_width / $width;
                         $crop_ratio_y = $crop_height / $height;
                         if ($algo == 'adapt') {
+                            // XXX not sure about this...don't use for now
+                            #							$crop_width = (int) round($width * $crop_factor_x);
+                            #							$crop_height = (int) round($height * $crop_factor_y);
                         } else {
                             if ($algo == 'shrink') {
                                 if ($crop_ratio_x < $crop_ratio_y) {
@@ -1577,7 +1609,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param array $params
      * @return array
      */
-    public function calculate_image_clone_dimensions($image_path, $clone_path, $params)
+    function calculate_image_clone_dimensions($image_path, $clone_path, $params)
     {
         $retval = null;
         $result = $this->object->calculate_image_clone_result($image_path, $clone_path, $params);
@@ -1593,7 +1625,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
      * @param array $params
      * @return object
      */
-    public function generate_image_clone($image_path, $clone_path, $params)
+    function generate_image_clone($image_path, $clone_path, $params)
     {
         $crop = isset($params['crop']) ? $params['crop'] : NULL;
         $watermark = isset($params['watermark']) ? $params['watermark'] : NULL;
@@ -1737,16 +1769,21 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
         return $thumbnail;
     }
 }
+/**
+ * Class C_GalleryStorage_Driver_Base
+ * @mixin Mixin_GalleryStorage_Driver_Base
+ * @implements I_GalleryStorage_Driver
+ */
 class C_GalleryStorage_Driver_Base extends C_GalleryStorage_Base
 {
     public static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_GalleryStorage_Driver_Base');
         $this->implement('I_GalleryStorage_Driver');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_gallery_mapper = C_Gallery_Mapper::get_instance();
@@ -1763,14 +1800,14 @@ class C_GalleryStorage_Driver_Base extends C_GalleryStorage_Base
      * Gets the class name of the driver used
      * @return string
      */
-    public function get_driver_class_name()
+    function get_driver_class_name()
     {
         return get_called_class();
     }
 }
 class Mixin_NextGen_Gallery_Image_Validation extends Mixin
 {
-    public function validation()
+    function validation()
     {
         // Additional checks...
         if (isset($this->object->description)) {
@@ -1788,11 +1825,13 @@ class Mixin_NextGen_Gallery_Image_Validation extends Mixin
 }
 /**
  * Model for NextGen Gallery Images
+ * @mixin Mixin_NextGen_Gallery_Image_Validation
+ * @implements I_Image
  */
 class C_Image extends C_DataMapper_Model
 {
-    public $_mapper_interface = 'I_Image_Mapper';
-    public function define($properties = array(), $mapper = FALSE, $context = FALSE)
+    var $_mapper_interface = 'I_Image_Mapper';
+    function define($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         parent::define($mapper, $properties, $context);
         $this->add_mixin('Mixin_NextGen_Gallery_Image_Validation');
@@ -1804,7 +1843,7 @@ class C_Image extends C_DataMapper_Model
      * @param C_DataMapper $mapper
      * @param string $context
      */
-    public function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
+    function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         // Get the mapper is not specified
         if (!$mapper) {
@@ -1817,12 +1856,18 @@ class C_Image extends C_DataMapper_Model
      * Returns the model representing the gallery associated with this image
      * @return C_Gallery|stdClass
      */
-    public function get_gallery($model = FALSE)
+    function get_gallery($model = FALSE)
     {
         $gallery_mapper = C_Gallery_Mapper::get_instance();
         return $gallery_mapper->find($this->galleryid, $model);
     }
 }
+/**
+ * Class C_Image_Mapper
+ * @mixin Mixin_NextGen_Table_Extras
+ * @mixin Mixin_Gallery_Image_Mapper
+ * @implements I_Image_Mapper
+ */
 class C_Image_Mapper extends C_CustomTable_DataMapper_Driver
 {
     public static $_instance = NULL;
@@ -1830,7 +1875,7 @@ class C_Image_Mapper extends C_CustomTable_DataMapper_Driver
      * Defines the gallery image mapper
      * @param type $context
      */
-    public function define($context = FALSE, $not_used = FALSE)
+    function define($context = FALSE, $not_used = FALSE)
     {
         // Add 'attachment' context
         if (!is_array($context)) {
@@ -1861,7 +1906,7 @@ class C_Image_Mapper extends C_CustomTable_DataMapper_Driver
         // Mark the columns which should be unserialized
         $this->add_serialized_column('meta_data');
     }
-    public function initialize($object_name = FALSE)
+    function initialize($object_name = FALSE)
     {
         parent::initialize('ngg_pictures');
     }
@@ -1879,7 +1924,7 @@ class C_Image_Mapper extends C_CustomTable_DataMapper_Driver
  */
 class Mixin_Gallery_Image_Mapper extends Mixin
 {
-    public function destroy($image)
+    function destroy($image)
     {
         $retval = $this->call_parent('destroy', $image);
         // Delete tag associations with the image
@@ -1890,7 +1935,7 @@ class Mixin_Gallery_Image_Mapper extends Mixin
         C_Photocrati_Transient_Manager::flush('displayed_gallery_rendering');
         return $retval;
     }
-    public function _save_entity($entity)
+    function _save_entity($entity)
     {
         $entity->updated_at = time();
         // If successfully saved, then import metadata and
@@ -1905,7 +1950,7 @@ class Mixin_Gallery_Image_Mapper extends Mixin
         }
         return $retval;
     }
-    public function reimport_metadata($image_or_id)
+    function reimport_metadata($image_or_id)
     {
         // Get the image
         $image = NULL;
@@ -1929,7 +1974,7 @@ class Mixin_Gallery_Image_Mapper extends Mixin
      * @param $image
      * @return bool
      */
-    public function get_id($image)
+    function get_id($image)
     {
         $retval = FALSE;
         // Have we been passed an entity and is the id_field set?
@@ -1948,11 +1993,11 @@ class Mixin_Gallery_Image_Mapper extends Mixin
         }
         return $retval;
     }
-    public function get_post_title($entity)
+    function get_post_title($entity)
     {
         return $entity->alttext;
     }
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         // If not set already, we'll add an exclude property. This is used
         // by NextGEN Gallery itself, as well as the Attach to Post module
@@ -1963,7 +2008,7 @@ class Mixin_Gallery_Image_Mapper extends Mixin
         $this->object->_set_default_value($entity, 'sortorder', 0);
         // The imagedate must be set
         if (!isset($entity->imagedate) or is_null($entity->imagedate) or $entity->imagedate == '0000-00-00 00:00:00') {
-            $entity->imagedate = date('Y-m-d H:i:s');
+            $entity->imagedate = date("Y-m-d H:i:s");
         }
         // If a filename is set, and no alttext is set, then set the alttext
         // to the basename of the filename (legacy behavior)
@@ -1992,7 +2037,7 @@ class Mixin_Gallery_Image_Mapper extends Mixin
      *
      * @return array
      */
-    public function find_all_for_gallery($gallery, $model = FALSE)
+    function find_all_for_gallery($gallery, $model = FALSE)
     {
         $retval = array();
         $gallery_id = 0;
@@ -2005,9 +2050,11 @@ class Mixin_Gallery_Image_Mapper extends Mixin
                     $gallery_id = $gallery->{$key};
                 }
             }
+        } elseif (is_numeric($gallery)) {
+            $gallery_id = $gallery;
         }
         if ($gallery_id) {
-            $retval = $this->object->select()->where(array('galleryid = %s'), $gallery_id)->run_query(FALSE, $model);
+            $retval = $this->object->select()->where(array("galleryid = %s", $gallery_id))->run_query(FALSE, $model);
         }
         return $retval;
     }
@@ -2248,7 +2295,7 @@ class C_Image_Wrapper
         }
     }
     // called on initial nggLegacy image at construction. not sure what to do with it now.
-    public function construct_ngg_Image($gallery)
+    function construct_ngg_Image($gallery)
     {
         do_action_ref_array('ngg_get_image', array(&$this));
         unset($this->tags);
@@ -2258,7 +2305,7 @@ class C_Image_Wrapper
      *
      * @return mixed
      */
-    public function get_settings()
+    function get_settings()
     {
         if (is_null($this->_settings)) {
             $this->_settings = C_NextGen_Settings::get_instance();
@@ -2270,7 +2317,7 @@ class C_Image_Wrapper
      *
      * @return mixed
      */
-    public function get_storage()
+    function get_storage()
     {
         if (is_null($this->_storage)) {
             $this->_storage = C_Gallery_Storage::get_instance();
@@ -2283,7 +2330,7 @@ class C_Image_Wrapper
      * @param int $gallery_id Gallery ID
      * @return mixed
      */
-    public function get_gallery($gallery_id)
+    function get_gallery($gallery_id)
     {
         if (isset($this->container) && method_exists($this->container, 'get_gallery')) {
             return $this->container->get_gallery($gallery_id);
@@ -2296,7 +2343,7 @@ class C_Image_Wrapper
      * @param int $gallery_id Gallery ID
      * @return mixed
      */
-    public function get_legacy_gallery($gallery_id)
+    function get_legacy_gallery($gallery_id)
     {
         return C_Gallery_Mapper::get_instance()->find($gallery_id);
     }
@@ -2305,7 +2352,7 @@ class C_Image_Wrapper
      *
      * Applies the filter 'ngg_get_thumbcode'
      */
-    public function get_thumbcode($gallery_name = '')
+    function get_thumbcode($gallery_name = '')
     {
         if (empty($this->_displayed_gallery)) {
             $effect_code = C_NextGen_Settings::get_instance()->thumbCode;
@@ -2336,7 +2383,7 @@ class C_Image_Wrapper
      *
      * @return mixed
      */
-    public function get_href_link()
+    function get_href_link()
     {
         return $this->__get('imageHTML');
     }
@@ -2345,7 +2392,7 @@ class C_Image_Wrapper
      *
      * @return mixed
      */
-    public function get_href_thumb_link()
+    function get_href_thumb_link()
     {
         return $this->__get('thumbHTML');
     }
@@ -2357,7 +2404,7 @@ class C_Image_Wrapper
      * @param string $mode could be watermark | web20 | crop
      * @return the url for the image or false if failed
      */
-    public function cached_singlepic_file($width = '', $height = '', $mode = '')
+    function cached_singlepic_file($width = '', $height = '', $mode = '')
     {
         $dynthumbs = C_Dynamic_Thumbnails_Manager::get_instance();
         $storage = $this->get_storage();
@@ -2380,7 +2427,7 @@ class C_Image_Wrapper
     /**
      * Get the tags associated to this image
      */
-    public function get_tags()
+    function get_tags()
     {
         return $this->__get('tags');
     }
@@ -2389,7 +2436,7 @@ class C_Image_Wrapper
      *
      * TODO: Get a permalink to a page presenting the image
      */
-    public function get_permalink()
+    function get_permalink()
     {
         return $this->__get('permalink');
     }
@@ -2397,7 +2444,7 @@ class C_Image_Wrapper
      * Returns the _cache array; used by nggImage
      * @return array
      */
-    public function _get_image()
+    function _get_image()
     {
         return $this->_cache;
     }
@@ -2445,24 +2492,41 @@ class C_Image_Wrapper_Collection implements ArrayAccess
 }
 class C_NextGen_Data_Installer extends C_NggLegacy_Installer
 {
-    public function get_registry()
+    function get_registry()
     {
         return C_Component_Registry::get_instance();
     }
-    public function install()
+    function install()
     {
         $this->remove_table_extra_options();
     }
-    public function remove_table_extra_options()
+    function remove_table_extra_options()
     {
         global $wpdb;
-        $likes = array('option_name LIKE \'%ngg_gallery%\'', 'option_name LIKE \'%ngg_pictures%\'', 'option_name LIKE \'%ngg_album%\'');
-        $sql = "DELETE FROM {$wpdb->options} WHERE " . implode(' OR ', $likes);
+        $likes = array("option_name LIKE '%ngg_gallery%'", "option_name LIKE '%ngg_pictures%'", "option_name LIKE '%ngg_album%'");
+        $sql = "DELETE FROM {$wpdb->options} WHERE " . implode(" OR ", $likes);
         $wpdb->query($sql);
     }
-    public function uninstall($hard = FALSE)
+    function uninstall($hard = FALSE)
     {
         if ($hard) {
+            /* Yes: this is commented twice.
+            		// TODO for now never delete galleries/albums/content
+            #			$mappers = array(
+            #				$this->get_registry()->get_utility('I_Album_Mapper'),
+            #				$this->get_registry()->get_utility('I_Gallery_Mapper'),
+            #				$this->get_registry()->get_utility('I_Image_Mapper'),
+            #			);
+            
+            #			foreach ($mappers as $mapper) {
+            #				$mapper->delete()->run_query();
+            #			}
+            
+            #			// Remove ngg tags
+            #			global $wpdb;
+            #			$wpdb->query("DELETE FROM {$wpdb->terms} WHERE term_id IN (SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='ngg_tag')");
+            #			$wpdb->query("DELETE FROM {$wpdb->term_taxonomy} WHERE taxonomy='ngg_tag'");
+                        */
         }
     }
 }
@@ -2536,7 +2600,7 @@ class C_NextGen_Metadata extends C_Component
      * @param string $object (optional)
      * @return array|mixed return either the complete array or the single object
      */
-    public function get_saved_meta($object = false)
+    function get_saved_meta($object = false)
     {
         $meta = $this->image->meta_data;
         if (!isset($meta['saved'])) {
@@ -2570,7 +2634,7 @@ class C_NextGen_Metadata extends C_Component
      *
      * @return structured EXIF data
      */
-    public function get_EXIF($object = false)
+    function get_EXIF($object = false)
     {
         if (!$this->exif_data) {
             return false;
@@ -2661,7 +2725,7 @@ class C_NextGen_Metadata extends C_Component
         return $this->exif_array;
     }
     // convert a fraction string to a decimal
-    public function exif_frac2dec($str)
+    function exif_frac2dec($str)
     {
         @(list($n, $d) = explode('/', $str));
         if (!empty($d)) {
@@ -2670,7 +2734,7 @@ class C_NextGen_Metadata extends C_Component
         return $str;
     }
     // convert the exif date format to a unix timestamp
-    public function exif_date2ts($str)
+    function exif_date2ts($str)
     {
         $retval = is_numeric($str) ? $str : @strtotime($str);
         if (!$retval && $str) {
@@ -2686,18 +2750,18 @@ class C_NextGen_Metadata extends C_Component
      * @param mixed $output_tag
      * @return IPTC-tags
      */
-    public function get_IPTC($object = false)
+    function get_IPTC($object = false)
     {
         if (!$this->iptc_data) {
             return false;
         }
         if (!is_array($this->iptc_array)) {
             // --------- Set up Array Functions --------- //
-            $iptcTags = array('2#005' => 'title', '2#007' => 'status', '2#012' => 'subject', '2#015' => 'category', '2#025' => 'keywords', '2#055' => 'created_date', '2#060' => 'created_time', '2#080' => 'author', '2#085' => 'position', '2#090' => 'city', '2#092' => 'location', '2#095' => 'state', '2#100' => 'country_code', '2#101' => 'country', '2#105' => 'headline', '2#110' => 'credit', '2#115' => 'source', '2#116' => 'copyright', '2#118' => 'contact', '2#120' => 'caption');
+            $iptcTags = array("2#005" => 'title', "2#007" => 'status', "2#012" => 'subject', "2#015" => 'category', "2#025" => 'keywords', "2#055" => 'created_date', "2#060" => 'created_time', "2#080" => 'author', "2#085" => 'position', "2#090" => 'city', "2#092" => 'location', "2#095" => 'state', "2#100" => 'country_code', "2#101" => 'country', "2#105" => 'headline', "2#110" => 'credit', "2#115" => 'source', "2#116" => 'copyright', "2#118" => 'contact', "2#120" => 'caption');
             $meta = array();
             foreach ($iptcTags as $key => $value) {
                 if (isset($this->iptc_data[$key])) {
-                    $meta[$value] = trim($this->utf8_encode(implode(', ', $this->iptc_data[$key])));
+                    $meta[$value] = trim($this->utf8_encode(implode(", ", $this->iptc_data[$key])));
                 }
             }
             $this->iptc_array = $meta;
@@ -2720,15 +2784,15 @@ class C_NextGen_Metadata extends C_Component
      * @param mixed $filename
      * @return XML data
      */
-    public function extract_XMP($filename)
+    function extract_XMP($filename)
     {
         //TODO:Require a lot of memory, could be better
         ob_start();
         @readfile($filename);
         $source = ob_get_contents();
         ob_end_clean();
-        $start = strpos($source, '<x:xmpmeta');
-        $end = strpos($source, '</x:xmpmeta>');
+        $start = strpos($source, "<x:xmpmeta");
+        $end = strpos($source, "</x:xmpmeta>");
         if (!$start === false && !$end === false) {
             $lenght = $end - $start;
             $xmp_data = substr($source, $start, $lenght + 12);
@@ -2746,7 +2810,7 @@ class C_NextGen_Metadata extends C_Component
      * @return XML Array or object
      *
      */
-    public function get_XMP($object = false)
+    function get_XMP($object = false)
     {
         if (!$this->xmp_data) {
             return false;
@@ -2770,9 +2834,9 @@ class C_NextGen_Metadata extends C_Component
             $list_element = false;
             // rdf:li indicator
             foreach ($values as $val) {
-                if ($val['type'] == 'open') {
+                if ($val['type'] == "open") {
                     array_push($stack, $val['tag']);
-                } elseif ($val['type'] == 'close') {
+                } elseif ($val['type'] == "close") {
                     // reset the compared stack
                     if ($list_element == false) {
                         array_pop($stack);
@@ -2780,8 +2844,8 @@ class C_NextGen_Metadata extends C_Component
                     // reset the rdf:li indicator & array
                     $list_element = false;
                     $list_array = array();
-                } elseif ($val['type'] == 'complete') {
-                    if ($val['tag'] == 'rdf:li') {
+                } elseif ($val['type'] == "complete") {
+                    if ($val['tag'] == "rdf:li") {
                         // first go one element back
                         if ($list_element == false) {
                             array_pop($stack);
@@ -2794,7 +2858,7 @@ class C_NextGen_Metadata extends C_Component
                         // save it in our temp array
                         $list_array[] = $val['value'];
                         // in the case it's a list element we seralize it
-                        $value = implode(',', $list_array);
+                        $value = implode(",", $list_array);
                         $this->setArrayValue($xmlarray, $stack, $value);
                     } else {
                         array_push($stack, $val['tag']);
@@ -2839,7 +2903,7 @@ class C_NextGen_Metadata extends C_Component
         }
         return $this->xmp_array;
     }
-    public function setArrayValue(&$array, $stack, $value)
+    function setArrayValue(&$array, $stack, $value)
     {
         if ($stack) {
             $key = array_shift($stack);
@@ -2855,7 +2919,7 @@ class C_NextGen_Metadata extends C_Component
      * @param string $object
      * @return mixed $value
      */
-    public function get_META($object = false)
+    function get_META($object = false)
     {
         // defined order first look into database, then XMP, IPTC and EXIF.
         if ($value = $this->get_saved_meta($object)) {
@@ -2882,7 +2946,7 @@ class C_NextGen_Metadata extends C_Component
      * @param mixed $key
      * @return translated $key
      */
-    public function i18n_name($key)
+    function i18n_name($key)
     {
         $tagnames = array('aperture' => __('Aperture', 'nggallery'), 'credit' => __('Credit', 'nggallery'), 'camera' => __('Camera', 'nggallery'), 'caption' => __('Caption', 'nggallery'), 'created_timestamp' => __('Date/Time', 'nggallery'), 'copyright' => __('Copyright', 'nggallery'), 'focal_length' => __('Focal length', 'nggallery'), 'iso' => __('ISO', 'nggallery'), 'shutter_speed' => __('Shutter speed', 'nggallery'), 'title' => __('Title', 'nggallery'), 'author' => __('Author', 'nggallery'), 'tags' => __('Tags', 'nggallery'), 'subject' => __('Subject', 'nggallery'), 'make' => __('Make', 'nggallery'), 'status' => __('Edit Status', 'nggallery'), 'category' => __('Category', 'nggallery'), 'keywords' => __('Keywords', 'nggallery'), 'created_date' => __('Date Created', 'nggallery'), 'created_time' => __('Time Created', 'nggallery'), 'position' => __('Author Position', 'nggallery'), 'city' => __('City', 'nggallery'), 'location' => __('Location', 'nggallery'), 'state' => __('Province/State', 'nggallery'), 'country_code' => __('Country code', 'nggallery'), 'country' => __('Country', 'nggallery'), 'headline' => __('Headline', 'nggallery'), 'credit' => __('Credit', 'nggallery'), 'source' => __('Source', 'nggallery'), 'copyright' => __('Copyright Notice', 'nggallery'), 'contact' => __('Contact', 'nggallery'), 'last_modfied' => __('Last modified', 'nggallery'), 'tool' => __('Program tool', 'nggallery'), 'format' => __('Format', 'nggallery'), 'width' => __('Image Width', 'nggallery'), 'height' => __('Image Height', 'nggallery'), 'flash' => __('Flash', 'nggallery'));
         if (isset($tagnames[$key])) {
@@ -2894,7 +2958,7 @@ class C_NextGen_Metadata extends C_Component
      * Return the Timestamp from the image , if possible it's read from exif data
      * @return int
      */
-    public function get_date_time()
+    function get_date_time()
     {
         $date = time();
         // Try getting the created_timestamp field
@@ -2918,7 +2982,7 @@ class C_NextGen_Metadata extends C_Component
      * @since V1.4.0
      * @return void
      */
-    public function get_common_meta()
+    function get_common_meta()
     {
         global $wpdb;
         $meta = array('aperture' => 0, 'credit' => '', 'camera' => '', 'caption' => '', 'created_timestamp' => 0, 'copyright' => '', 'focal_length' => 0, 'iso' => 0, 'shutter_speed' => 0, 'flash' => 0, 'title' => '', 'keywords' => '');
@@ -2940,7 +3004,7 @@ class C_NextGen_Metadata extends C_Component
      *
      * @return void
      */
-    public function sanitize()
+    function sanitize()
     {
         $this->sanitize = true;
     }
@@ -2954,7 +3018,7 @@ class C_NextGen_Metadata extends C_Component
      * @param string $str
      * @return string
      */
-    public function utf8_encode($str)
+    function utf8_encode($str)
     {
         $is_utf8 = preg_match('%^(?:
               [\\x09\\x0A\\x0D\\x20-\\x7E]            # ASCII
@@ -2978,11 +3042,11 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * Returns the named sizes available for images
      * @return array
      */
-    public function get_image_sizes()
+    function get_image_sizes()
     {
         return array('full', 'thumbnail');
     }
-    public function get_upload_abspath($gallery = FALSE)
+    function get_upload_abspath($gallery = FALSE)
     {
         // Base upload path
         $retval = C_NextGen_Settings::get_instance()->gallerypath;
@@ -2994,7 +3058,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         }
         // We need to make this an absolute path
         if (strpos($retval, $fs->get_document_root('gallery')) !== 0) {
-            $retval = rtrim($fs->join_paths($fs->get_document_root('gallery'), $retval), '/\\');
+            $retval = rtrim($fs->join_paths($fs->get_document_root('gallery'), $retval), "/\\");
         }
         // Convert slashes
         return $this->object->convert_slashes($retval);
@@ -3003,7 +3067,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * Get the gallery path persisted in the database for the gallery
      * @param int|stdClass|C_NextGen_Gallery $gallery
      */
-    public function get_gallery_abspath($gallery)
+    function get_gallery_abspath($gallery)
     {
         $retval = NULL;
         $fs = C_Fs::get_instance();
@@ -3046,15 +3110,15 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         }
         // Ensure that the path is absolute
         if (strpos($retval, $fs->get_document_root('gallery')) !== 0) {
-            $retval = rtrim($fs->join_paths($fs->get_document_root('gallery'), $retval), '/\\');
+            $retval = rtrim($fs->join_paths($fs->get_document_root('gallery'), $retval), "/\\");
         }
-        return $this->object->convert_slashes(rtrim($retval, '/\\'));
+        return $this->object->convert_slashes(rtrim($retval, "/\\"));
     }
     /**
      * Gets the absolute path where the image is stored
      * Can optionally return the path for a particular sized image
      */
-    public function get_image_abspath($image, $size = 'full', $check_existance = FALSE)
+    function get_image_abspath($image, $size = 'full', $check_existance = FALSE)
     {
         $retval = NULL;
         $fs = C_Fs::get_instance();
@@ -3091,6 +3155,10 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
                         $size = 'thumbnail';
                         $folder = 'thumbs';
                         $prefix = 'thumbs';
+                        // deliberately no break here
+                        // We assume any other size of image is stored in the a
+                        //subdirectory of the same name within the gallery folder
+                        // gallery folder, but with the size appended to the filename
                     // deliberately no break here
                     // We assume any other size of image is stored in the a
                     //subdirectory of the same name within the gallery folder
@@ -3116,7 +3184,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
                 $retval = NULL;
             }
         }
-        return $retval ? rtrim($retval, '/\\') : $retval;
+        return $retval ? rtrim($retval, "/\\") : $retval;
     }
     /**
      * Gets the url of a particular-sized image
@@ -3124,7 +3192,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param string $size
      * @returns array
      */
-    public function get_image_url($image, $size = 'full', $check_existance = FALSE, $image_abspath = FALSE)
+    function get_image_url($image, $size = 'full', $check_existance = FALSE, $image_abspath = FALSE)
     {
         $retval = NULL;
         $fs = C_Fs::get_instance();
@@ -3138,7 +3206,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
             $image_abspath = $parts['dirname'] . DIRECTORY_SEPARATOR . $parts['basename'];
             $doc_root = $fs->get_document_root('gallery');
             if ($doc_root != null) {
-                $doc_root = rtrim($doc_root, '/\\') . DIRECTORY_SEPARATOR;
+                $doc_root = rtrim($doc_root, "/\\") . DIRECTORY_SEPARATOR;
             }
             // if docroot is "/" we would generate urls like /wp-contentpluginsnextgen-galleryetcetc
             if ($doc_root !== '/') {
@@ -3146,7 +3214,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
             } else {
                 $request_uri = $image_abspath;
             }
-            $request_uri = '/' . ltrim(str_replace('\\', '/', $request_uri), '/');
+            $request_uri = '/' . ltrim(str_replace("\\", '/', $request_uri), "/");
             // Because like%@this.jpg is a valid directory and filename
             $request_uri = explode('/', $request_uri);
             foreach ($request_uri as $ndx => $segment) {
@@ -3164,7 +3232,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param type $data if specified, expects base64 encoded string of data
      * @return C_Image
      */
-    public function upload_image($gallery, $filename = FALSE, $data = FALSE)
+    function upload_image($gallery, $filename = FALSE, $data = FALSE)
     {
         $retval = NULL;
         // Ensure that we have the data present that we require
@@ -3200,7 +3268,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         }
         return $retval;
     }
-    public function get_image_size_params($image, $size, $params = null, $skip_defaults = false)
+    function get_image_size_params($image, $size, $params = null, $skip_defaults = false)
     {
         // Get the image entity
         if (is_numeric($image)) {
@@ -3224,6 +3292,10 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
                         $params['quality'] = $settings->thumbquality;
                     }
                 }
+                // Not sure why this was here... commenting out for now, always require watermark parameters to be explicit
+                #				if (!isset($params['watermark'])) {
+                #					$params['watermark'] = $settings->wmType;
+                #				}
             }
             // width and height when omitted make generate_image_clone create a clone with original size, so try find defaults regardless of $skip_defaults
             if (!isset($params['width']) || !isset($params['height'])) {
@@ -3293,7 +3365,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param array $params
      * @return array
      */
-    public function calculate_image_size_dimensions($image, $size, $params = null, $skip_defaults = false)
+    function calculate_image_size_dimensions($image, $size, $params = null, $skip_defaults = false)
     {
         $retval = FALSE;
         // Get the image entity
@@ -3315,7 +3387,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param int|stdClass|C_Image $image
      * @return bool|object
      */
-    public function generate_image_size($image, $size, $params = null, $skip_defaults = false)
+    function generate_image_size($image, $size, $params = null, $skip_defaults = false)
     {
         $retval = FALSE;
         // Get the image entity
@@ -3341,6 +3413,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
             $existing_image_dir = dirname($existing_image_abpath);
             // removing the old thumbnail is actually not needed as generate_image_clone() will replace it, leaving commented in as reminder in case there are issues in the future
             if (@file_exists($existing_image_abpath)) {
+                //unlink($existing_image_abpath);
             }
             wp_mkdir_p($existing_image_dir);
             $clone_path = $existing_image_abpath;
@@ -3374,6 +3447,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
                     $retval = $thumbnail;
                 }
             } else {
+                // Something went wrong. Thumbnail generation failed!
             }
         }
         return $retval;
@@ -3383,7 +3457,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param int|stdClass|C_Image $image
      * @return bool
      */
-    public function generate_thumbnail($image, $params = null, $skip_defaults = false)
+    function generate_thumbnail($image, $params = null, $skip_defaults = false)
     {
         $sized_image = $this->object->generate_image_size($image, 'thumbnail', $params, $skip_defaults);
         $retval = false;
@@ -3398,7 +3472,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param int|stdClass|C_NextGen_Gallery_Image $image
      * @return bool
      */
-    public function render_image($image, $size = FALSE)
+    function render_image($image, $size = FALSE)
     {
         $format_list = $this->object->get_image_format_list();
         $abspath = $this->get_image_abspath($image, $size, true);
@@ -3427,7 +3501,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         }
         return false;
     }
-    public function delete_gallery($gallery)
+    function delete_gallery($gallery)
     {
         $retval = FALSE;
         $fs = C_Fs::get_instance();
@@ -3449,7 +3523,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         }
         return $retval;
     }
-    public function delete_image($image, $size = FALSE)
+    function delete_image($image, $size = FALSE)
     {
         $retval = FALSE;
         // Ensure that we have the image entity
@@ -3490,7 +3564,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         }
         return $retval;
     }
-    public function set_post_thumbnail($post, $image)
+    function set_post_thumbnail($post, $image)
     {
         $attachment_id = null;
         // Get the post id
@@ -3558,6 +3632,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
                     $target_path = path_join($dirname, $basename);
                 }
                 if (@file_exists($target_path)) {
+                    // XXX handle very rare case in which $max_count wasn't enough?
                 }
                 $target_dir = dirname($target_path);
                 wp_mkdir_p($target_dir);
@@ -3587,7 +3662,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param boolean $move move the image instead of copying
      * @return mixed NULL on failure, array|image-ids on success
      */
-    public function copy_images($images, $gallery, $db = TRUE, $move = FALSE)
+    function copy_images($images, $gallery, $db = TRUE, $move = FALSE)
     {
         $new_image_pids = array();
         // the return value
@@ -3645,8 +3720,11 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
                 echo sprintf(__('Failed to copy database row for picture %s', 'nggallery'), $old_pid) . '<br />';
                 continue;
             }
+            // 'backup' is not included in get_image_sizes()
+            $sizes = $this->object->get_image_sizes();
+            $sizes[] = 'backup';
             // Copy each image size
-            foreach ($this->object->get_image_sizes() as $size) {
+            foreach ($sizes as $size) {
                 // if backups are off there's no backup file to copy
                 if (!C_NextGen_Settings::get_instance()->imgBackup && $size == 'backup') {
                     continue;
@@ -3717,7 +3795,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
      * @param int|stdClass|C_Image $image
      * @return string result code
      */
-    public function recover_image($image)
+    function recover_image($image)
     {
         $retval = FALSE;
         if (is_numeric($image)) {
@@ -3747,9 +3825,13 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin
         return $retval;
     }
 }
+/**
+ * Class C_NggLegacy_GalleryStorage_Driver
+ * @mixin Mixin_NggLegacy_GalleryStorage_Driver
+ */
 class C_NggLegacy_GalleryStorage_Driver extends C_GalleryStorage_Driver_Base
 {
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_NggLegacy_GalleryStorage_Driver');
@@ -3775,105 +3857,104 @@ class C_NggLegacy_Thumbnail
      *
      * @var string
      */
-    public $errmsg;
+    var $errmsg;
     /**
      * Whether or not there is an error
      *
      * @var boolean
      */
-    public $error;
+    var $error;
     /**
      * Format of the image file
      *
      * @var string
      */
-    public $format;
+    var $format;
     /**
      * File name and path of the image file
      *
      * @var string
      */
-    public $fileName;
+    var $fileName;
     /**
      * Current dimensions of working image
      *
      * @var array
      */
-    public $currentDimensions;
+    var $currentDimensions;
     /**
      * New dimensions of working image
      *
      * @var array
      */
-    public $newDimensions;
+    var $newDimensions;
     /**
      * Image resource for newly manipulated image
      *
      * @var resource
      * @access private
      */
-    public $newImage;
+    var $newImage;
     /**
      * Image resource for image before previous manipulation
      *
      * @var resource
      * @access private
      */
-    public $oldImage;
+    var $oldImage;
     /**
      * Image resource for image being currently manipulated
      *
      * @var resource
      * @access private
      */
-    public $workingImage;
+    var $workingImage;
     /**
      * Percentage to resize image by
      *
      * @var int
      * @access private
      */
-    public $percent;
+    var $percent;
     /**
      * Maximum width of image during resize
      *
      * @var int
      * @access private
      */
-    public $maxWidth;
+    var $maxWidth;
     /**
      * Maximum height of image during resize
      *
      * @var int
      * @access private
      */
-    public $maxHeight;
+    var $maxHeight;
     /**
      * Image for Watermark
      *
      * @var string
      * 
      */
-    public $watermarkImgPath;
+    var $watermarkImgPath;
     /**
      * Text for Watermark
      *
      * @var string
      * 
      */
-    public $watermarkText;
+    var $watermarkText;
     /**
      * Image Resource ID for Watermark
      *
      * @var string
      * 
      */
-    public function __construct($fileName, $no_ErrorImage = false)
+    function __construct($fileName, $no_ErrorImage = false)
     {
         //make sure the GD library is installed
-        if (!function_exists('gd_info')) {
-            echo 'You do not have the GD Library installed.  This class requires the GD library to function properly.' . '
-';
+        if (!function_exists("gd_info")) {
+            echo 'You do not have the GD Library installed.  This class requires the GD library to function properly.' . "\n";
             echo 'visit http://us2.php.net/manual/en/ref.image.php for more information';
             throw new E_No_Image_Library_Exception();
         }
@@ -3971,7 +4052,7 @@ class C_NggLegacy_Thumbnail
      * Calculate the memory limit
      *
      */
-    public function checkMemoryForImage($filename)
+    function checkMemoryForImage($filename)
     {
         if (function_exists('memory_get_usage') && ini_get('memory_limit')) {
             $imageInfo = getimagesize($filename);
@@ -4011,14 +4092,14 @@ class C_NggLegacy_Thumbnail
                 }
                 if ($memoryNeeded > $memory_limit) {
                     $memoryNeeded = round($memoryNeeded / 1024 / 1024, 2);
-                    $this->errmsg = 'Exceed Memory limit. Require : ' . $memoryNeeded . ' MByte';
+                    $this->errmsg = 'Exceed Memory limit. Require : ' . $memoryNeeded . " MByte";
                     $this->error = true;
                 }
             }
         }
         return;
     }
-    public function __destruct()
+    function __destruct()
     {
         $this->destruct();
     }
@@ -4026,7 +4107,7 @@ class C_NggLegacy_Thumbnail
      * Must be called to free up allocated memory after all manipulations are done
      *
      */
-    public function destruct()
+    function destruct()
     {
         if (is_resource($this->newImage)) {
             @ImageDestroy($this->newImage);
@@ -4043,7 +4124,7 @@ class C_NggLegacy_Thumbnail
      *
      * @return int
      */
-    public function getCurrentWidth()
+    function getCurrentWidth()
     {
         return $this->currentDimensions['width'];
     }
@@ -4052,7 +4133,7 @@ class C_NggLegacy_Thumbnail
      *
      * @return int
      */
-    public function getCurrentHeight()
+    function getCurrentHeight()
     {
         return $this->currentDimensions['height'];
     }
@@ -4063,7 +4144,7 @@ class C_NggLegacy_Thumbnail
      * @param int $height
      * @return array
      */
-    public function calcWidth($width, $height)
+    function calcWidth($width, $height)
     {
         $newWp = 100 * $this->maxWidth / $width;
         $newHeight = $height * $newWp / 100;
@@ -4079,7 +4160,7 @@ class C_NggLegacy_Thumbnail
      * @param int $height
      * @return array
      */
-    public function calcHeight($width, $height)
+    function calcHeight($width, $height)
     {
         $newHp = 100 * $this->maxHeight / $height;
         $newWidth = $width * $newHp / 100;
@@ -4095,7 +4176,7 @@ class C_NggLegacy_Thumbnail
      * @param int $height
      * @return array
      */
-    public function calcPercent($width, $height)
+    function calcPercent($width, $height)
     {
         $newWidth = $width * $this->percent / 100;
         $newHeight = $height * $this->percent / 100;
@@ -4107,7 +4188,7 @@ class C_NggLegacy_Thumbnail
      * @param int $width
      * @param int $height
      */
-    public function calcImageSize($width, $height)
+    function calcImageSize($width, $height)
     {
         // $width and $height are the CURRENT image resolutions
         $ratio_w = $this->maxWidth / $width;
@@ -4127,7 +4208,7 @@ class C_NggLegacy_Thumbnail
      * @param int $width
      * @param int $height
      */
-    public function calcImageSizePercent($width, $height)
+    function calcImageSizePercent($width, $height)
     {
         if ($this->percent > 0) {
             $this->newDimensions = $this->calcPercent($width, $height);
@@ -4137,7 +4218,7 @@ class C_NggLegacy_Thumbnail
      * Displays error image
      *
      */
-    public function showErrorImage()
+    function showErrorImage()
     {
         header('Content-type: image/png');
         $errImg = ImageCreate(220, 25);
@@ -4155,11 +4236,11 @@ class C_NggLegacy_Thumbnail
      * @param int $Width
      * @param int $Height
      */
-    public function resizeFix($Width = 0, $Height = 0, $deprecated = 3)
+    function resizeFix($Width = 0, $Height = 0, $deprecated = 3)
     {
         $this->newWidth = $Width;
         $this->newHeight = $Height;
-        if (function_exists('ImageCreateTrueColor')) {
+        if (function_exists("ImageCreateTrueColor")) {
             $this->workingImage = ImageCreateTrueColor($this->newWidth, $this->newHeight);
         } else {
             $this->workingImage = ImageCreate($this->newWidth, $this->newHeight);
@@ -4177,12 +4258,12 @@ class C_NggLegacy_Thumbnail
      * @param int $maxWidth
      * @param int $maxHeight
      */
-    public function resize($maxWidth = 0, $maxHeight = 0, $deprecated = 3)
+    function resize($maxWidth = 0, $maxHeight = 0, $deprecated = 3)
     {
         $this->maxWidth = $maxWidth;
         $this->maxHeight = $maxHeight;
         $this->calcImageSize($this->currentDimensions['width'], $this->currentDimensions['height']);
-        if (function_exists('ImageCreateTrueColor')) {
+        if (function_exists("ImageCreateTrueColor")) {
             $this->workingImage = ImageCreateTrueColor($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
         } else {
             $this->workingImage = ImageCreate($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
@@ -4199,11 +4280,11 @@ class C_NggLegacy_Thumbnail
      *
      * @param int $percent
      */
-    public function resizePercent($percent = 0)
+    function resizePercent($percent = 0)
     {
         $this->percent = $percent;
         $this->calcImageSizePercent($this->currentDimensions['width'], $this->currentDimensions['height']);
-        if (function_exists('ImageCreateTrueColor')) {
+        if (function_exists("ImageCreateTrueColor")) {
             $this->workingImage = ImageCreateTrueColor($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
         } else {
             $this->workingImage = ImageCreate($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
@@ -4219,7 +4300,7 @@ class C_NggLegacy_Thumbnail
      *
      * @param int $cropSize
      */
-    public function cropFromCenter($cropSize)
+    function cropFromCenter($cropSize)
     {
         if ($cropSize > $this->currentDimensions['width']) {
             $cropSize = $this->currentDimensions['width'];
@@ -4229,7 +4310,7 @@ class C_NggLegacy_Thumbnail
         }
         $cropX = intval(($this->currentDimensions['width'] - $cropSize) / 2);
         $cropY = intval(($this->currentDimensions['height'] - $cropSize) / 2);
-        if (function_exists('ImageCreateTrueColor')) {
+        if (function_exists("ImageCreateTrueColor")) {
             $this->workingImage = ImageCreateTrueColor($cropSize, $cropSize);
         } else {
             $this->workingImage = ImageCreate($cropSize, $cropSize);
@@ -4248,7 +4329,7 @@ class C_NggLegacy_Thumbnail
      * @param int $width
      * @param int $height
      */
-    public function crop($startX, $startY, $width, $height)
+    function crop($startX, $startY, $width, $height)
     {
         //make sure the cropped area is not greater than the size of the image
         if ($width > $this->currentDimensions['width']) {
@@ -4270,7 +4351,7 @@ class C_NggLegacy_Thumbnail
         if ($startY < 0) {
             $startY = 0;
         }
-        if (function_exists('ImageCreateTrueColor')) {
+        if (function_exists("ImageCreateTrueColor")) {
             $this->workingImage = ImageCreateTrueColor($width, $height);
         } else {
             $this->workingImage = ImageCreate($width, $height);
@@ -4287,7 +4368,7 @@ class C_NggLegacy_Thumbnail
      * @param int $quality
      * @param string $name
      */
-    public function show($quality = 100, $name = '')
+    function show($quality = 100, $name = '')
     {
         switch ($this->format) {
             case 'GIF':
@@ -4323,7 +4404,7 @@ class C_NggLegacy_Thumbnail
      * @param int $quality
      * @return bool errorstate
      */
-    public function save($name, $quality = 100)
+    function save($name, $quality = 100)
     {
         $this->show($quality, $name);
         if ($this->error == true) {
@@ -4344,7 +4425,7 @@ class C_NggLegacy_Thumbnail
      * @param bool $border
      * @param string $borderColor
      */
-    public function createReflection($percent, $reflection, $white, $border = true, $borderColor = '#a4a4a4')
+    function createReflection($percent, $reflection, $white, $border = true, $borderColor = '#a4a4a4')
     {
         $width = $this->currentDimensions['width'];
         $height = $this->currentDimensions['height'];
@@ -4373,6 +4454,7 @@ class C_NggLegacy_Thumbnail
             imageline($this->workingImage, 0, 0, 0, $height, $colorToPaint);
             //left line
             imageline($this->workingImage, $width - 1, 0, $width - 1, $height, $colorToPaint);
+            //right line
         }
         $this->oldImage = $this->workingImage;
         $this->newImage = $this->workingImage;
@@ -4385,7 +4467,7 @@ class C_NggLegacy_Thumbnail
      * @param bool $horz flip the image in horizontal mode
      * @param bool $vert flip the image in vertical mode
      */
-    public function flipImage($horz = false, $vert = false)
+    function flipImage($horz = false, $vert = false)
     {
         $sx = $vert ? $this->currentDimensions['width'] - 1 : 0;
         $sy = $horz ? $this->currentDimensions['height'] - 1 : 0;
@@ -4402,7 +4484,7 @@ class C_NggLegacy_Thumbnail
      *
      * @param string $direction could be CW or CCW
      */
-    public function rotateImage($dir = 'CW')
+    function rotateImage($dir = 'CW')
     {
         $angle = $dir == 'CW' ? 90 : -90;
         return $this->rotateImageAngle($angle);
@@ -4412,7 +4494,7 @@ class C_NggLegacy_Thumbnail
      *
      * @param string $direction could be CW or CCW
      */
-    public function rotateImageAngle($angle = 90)
+    function rotateImageAngle($angle = 90)
     {
         if (function_exists('imagerotate')) {
             $this->workingImage = imagerotate($this->oldImage, 360 - $angle, 0);
@@ -4459,7 +4541,7 @@ class C_NggLegacy_Thumbnail
      * 
      * @access	private
      */
-    public function imageFlipVertical()
+    function imageFlipVertical()
     {
         $x_i = imagesx($this->workingImage);
         $y_i = imagesy($this->workingImage);
@@ -4476,7 +4558,7 @@ class C_NggLegacy_Thumbnail
      * @param bool $asString
      * @return array|string
      */
-    public function hex2rgb($hex, $asString = false)
+    function hex2rgb($hex, $asString = false)
     {
         // strip off any leading #
         if (0 === strpos($hex, '#')) {
@@ -4504,10 +4586,10 @@ class C_NggLegacy_Thumbnail
      * @param int $wmSize
      * @param int $wmOpaque
      */
-    public function watermarkCreateText($color = '000000', $wmFont, $wmSize = 10, $wmOpaque = 90)
+    function watermarkCreateText($color = '000000', $wmFont, $wmSize = 10, $wmOpaque = 90)
     {
         // set font path
-        $wmFontPath = NGGALLERY_ABSPATH . 'fonts/' . $wmFont;
+        $wmFontPath = NGGALLERY_ABSPATH . "fonts/" . $wmFont;
         if (!is_readable($wmFontPath)) {
             return;
         }
@@ -4522,7 +4604,7 @@ class C_NggLegacy_Thumbnail
         // attempt adding a new word until the width is too large; then start a new line and start again
         foreach ($words as $word) {
             // sanitize the text being input; imagettftext() can be sensitive
-            $TextSize = $this->ImageTTFBBoxDimensions($wmSize, 0, $this->correct_gd_unc_path($wmFontPath), $line . preg_replace('~^(&([a-zA-Z0-9]);)~', htmlentities('${1}'), mb_convert_encoding($word, 'HTML-ENTITIES', 'UTF-8')));
+            $TextSize = $this->ImageTTFBBoxDimensions($wmSize, 0, $this->correct_gd_unc_path($wmFontPath), $line . preg_replace('~^(&([a-zA-Z0-9]);)~', htmlentities('${1}'), mb_convert_encoding($word, "HTML-ENTITIES", "UTF-8")));
             if ($watermark_image_width == 0) {
                 $watermark_image_width = $TextSize['width'];
             }
@@ -4584,16 +4666,16 @@ class C_NggLegacy_Thumbnail
      * @param $text
      * @return array
      */
-    public function ImageTTFBBoxDimensions($wmSize, $fontAngle, $wmFontPath, $text)
+    function ImageTTFBBoxDimensions($wmSize, $fontAngle, $wmFontPath, $text)
     {
         $box = @ImageTTFBBox($wmSize, $fontAngle, $this->correct_gd_unc_path($wmFontPath), $text);
         $max_x = max(array($box[0], $box[2], $box[4], $box[6]));
         $max_y = max(array($box[1], $box[3], $box[5], $box[7]));
         $min_x = min(array($box[0], $box[2], $box[4], $box[6]));
         $min_y = min(array($box[1], $box[3], $box[5], $box[7]));
-        return array('width' => $max_x - $min_x, 'height' => $max_y - $min_y);
+        return array("width" => $max_x - $min_x, "height" => $max_y - $min_y);
     }
-    public function applyFilter($filterType)
+    function applyFilter($filterType)
     {
         $args = func_get_args();
         array_unshift($args, $this->newImage);
@@ -4607,7 +4689,7 @@ class C_NggLegacy_Thumbnail
      * @param int $xPOS
      * @param int $yPOS
      */
-    public function watermarkImage($relPOS = 'botRight', $xPOS = 0, $yPOS = 0)
+    function watermarkImage($relPOS = 'botRight', $xPOS = 0, $yPOS = 0)
     {
         // if it's a resource ID take it as watermark text image
         if (is_resource($this->watermarkImgPath)) {
@@ -4675,7 +4757,7 @@ class C_NggLegacy_Thumbnail
     /**
      * Wrapper to imagecopymerge() that allows PNG transparency
      */
-    public function imagecopymerge_alpha($destination_image, $source_image, $destination_x, $destination_y, $source_x, $source_y, $source_w, $source_h, $pct)
+    function imagecopymerge_alpha($destination_image, $source_image, $destination_x, $destination_y, $source_x, $source_y, $source_w, $source_h, $pct)
     {
         $cut = imagecreatetruecolor($source_w, $source_h);
         imagecopy($cut, $destination_image, 0, 0, $destination_x, $destination_y, $source_w, $source_h);
@@ -4699,7 +4781,7 @@ class C_NggLegacy_Thumbnail
      * @param int $src_h
      * @return bool
      */
-    public function imagecopyresampled(&$dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)
+    function imagecopyresampled(&$dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)
     {
         // Check if this image is PNG or GIF, then set if Transparent
         if ($this->format == 'GIF' || $this->format == 'PNG') {
@@ -4719,7 +4801,7 @@ class Mixin_WordPress_GalleryStorage_Driver extends Mixin
      * @global array $_wp_additional_image_sizese
      * @return array
      */
-    public function get_image_sizes()
+    function get_image_sizes()
     {
         global $_wp_additional_image_sizes;
         $_wp_additional_image_sizes[] = 'full';
@@ -4731,7 +4813,7 @@ class Mixin_WordPress_GalleryStorage_Driver extends Mixin
      * @param type $gallery
      * @return type
      */
-    public function get_upload_abspath($gallery = FALSE)
+    function get_upload_abspath($gallery = FALSE)
     {
         // Gallery is used for this driver, as the upload path is
         // the same, regardless of what gallery is used
@@ -4747,7 +4829,7 @@ class Mixin_WordPress_GalleryStorage_Driver extends Mixin
      * WordPress storage is not organized by gallery but by date
      * @param int|object $gallery
      */
-    public function get_gallery_abspath($gallery = FALSE)
+    function get_gallery_abspath($gallery = FALSE)
     {
         return $this->object->get_upload_abspath();
     }
@@ -4757,7 +4839,7 @@ class Mixin_WordPress_GalleryStorage_Driver extends Mixin
      * @param type $size
      * @return string
      */
-    public function get_image_url($image = FALSE, $size = 'full')
+    function get_image_url($image = FALSE, $size = 'full')
     {
         $retval = NULL;
         $image_key = C_Displayed_Gallery_Mapper::get_instance()->get_primary_key_column();
@@ -4770,18 +4852,26 @@ class Mixin_WordPress_GalleryStorage_Driver extends Mixin
         return apply_filters('ngg_get_image_url', $retval, $image, $size);
     }
 }
+/**
+ * Class C_WordPress_GalleryStorage_Driver
+ * @mixin Mixin_WordPress_GalleryStorage_Driver
+ */
 class C_WordPress_GalleryStorage_Driver extends C_GalleryStorage_Driver_Base
 {
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_WordPress_GalleryStorage_Driver');
     }
 }
+/**
+ * Class Mixin_NextGen_Table_Extras
+ * @mixin C_CustomPost_DataMapper_Driver
+ */
 class Mixin_NextGen_Table_Extras extends Mixin
 {
     const CUSTOM_POST_NAME = __CLASS__;
-    public function initialize()
+    function initialize()
     {
         // Each record in a NextGEN Gallery table has an associated custom post in the wp_posts table
         $this->object->_custom_post_mapper = new C_CustomPost_DataMapper_Driver($this->object->get_object_name());
@@ -4794,7 +4884,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
      * @param null $default_value
      * @param bool $extra
      */
-    public function define_column($name, $data_type, $default_value = NULL, $extra = FALSE)
+    function define_column($name, $data_type, $default_value = NULL, $extra = FALSE)
     {
         $this->call_parent('define_column', $name, $data_type, $default_value);
         if ($extra) {
@@ -4807,7 +4897,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
      * Gets a list of all the extra columns defined for this table
      * @return array
      */
-    public function get_extra_columns()
+    function get_extra_columns()
     {
         $retval = array();
         foreach ($this->object->_columns as $key => $properties) {
@@ -4823,7 +4913,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
      * @param $datatype
      * @param null $default_value
      */
-    public function _add_column($column_name, $datatype, $default_value = NULL)
+    function _add_column($column_name, $datatype, $default_value = NULL)
     {
         $skip = FALSE;
         if (isset($this->object->_columns[$column_name]) and $this->object->_columns[$column_name]['extra']) {
@@ -4834,7 +4924,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
         }
         return !$skip;
     }
-    public function create_custom_post_entity($entity)
+    function create_custom_post_entity($entity)
     {
         $custom_post_entity = new stdClass();
         // If the custom post entity already exists then it needs
@@ -4860,7 +4950,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
      * Creates a new record in the custom table, as well as a custom post record
      * @param $entity
      */
-    public function _create($entity)
+    function _create($entity)
     {
         $retval = FALSE;
         $custom_post_entity = $this->create_custom_post_entity($entity);
@@ -4877,7 +4967,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
         return $retval;
     }
     // Updates a custom table record and it's associated custom post type record in the database
-    public function _update($entity)
+    function _update($entity)
     {
         $retval = FALSE;
         $custom_post_entity = $this->create_custom_post_entity($entity);
@@ -4891,25 +4981,25 @@ class Mixin_NextGen_Table_Extras extends Mixin
         }
         return $retval;
     }
-    public function destroy($entity)
+    function destroy($entity)
     {
         if (isset($entity->extras_post_id)) {
             wp_delete_post($entity->extras_post_id, TRUE);
         }
         return $this->call_parent('destroy', $entity);
     }
-    public function _regex_replace($in)
+    function _regex_replace($in)
     {
         global $wpdb;
         $from = 'FROM `' . $this->object->get_table_name() . '`';
-        $out = str_replace('FROM', ', GROUP_CONCAT(CONCAT_WS(\'@@\', meta_key, meta_value)) AS \'extras\' FROM', $in);
+        $out = str_replace('FROM', ", GROUP_CONCAT(CONCAT_WS('@@', meta_key, meta_value)) AS 'extras' FROM", $in);
         $out = str_replace($from, "{$from} LEFT OUTER JOIN `{$wpdb->postmeta}` ON `{$wpdb->postmeta}`.`post_id` = `extras_post_id` ", $out);
         return $out;
     }
     /**
      * Gets the generated query
      */
-    public function get_generated_query()
+    function get_generated_query()
     {
         // Add extras column
         if ($this->object->is_select_statement() && stripos($this->object->_select_clause, 'count(') === FALSE) {
@@ -4938,7 +5028,7 @@ class Mixin_NextGen_Table_Extras extends Mixin
         }
         return $sql;
     }
-    public function _convert_to_entity($entity)
+    function _convert_to_entity($entity)
     {
         // Add extra columns to entity
         if (isset($entity->extras)) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php
index f0b2ef747291bfb672f455b608a4366d151dc18f..8b77d9753133c0211918a2c0ced2b476655a8969 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php
@@ -1,11 +1,5 @@
 <?php
 
-/***
-	{
-		Module: photocrati-nextgen_gallery_display
-	}
-***/
-
 define('NGG_DISPLAY_SETTINGS_SLUG', 'ngg_display_settings');
 define('NGG_DISPLAY_PRIORITY_BASE', 10000);
 define('NGG_DISPLAY_PRIORITY_STEP', 2000);
@@ -22,7 +16,7 @@ class M_Gallery_Display extends C_Base_Module
 			'photocrati-nextgen_gallery_display',
 			'Gallery Display',
 			'Provides the ability to display gallery of images',
-			'0.13',
+			'0.16',
 			'https://www.imagely.com',
 			'Photocrati Media',
 			'https://www.imagely.com'
@@ -226,26 +220,51 @@ class M_Gallery_Display extends C_Base_Module
         }
     }
 
+	/**
+	 * Enqueues fontawesome. First checks to see if fontawesome is provided by another plugin or already enqueued,
+	 * and if not, enqueues a version of fontawesome that will work with or without IIS
+	 */
     static function enqueue_fontawesome()
     {
         if (!wp_style_is('fontawesome', 'registered'))
         {
-            if (strpos(strtolower($_SERVER['SERVER_SOFTWARE']), 'microsoft-iis') !== FALSE) {
-                wp_register_style('fontawesome', site_url('/?ngg_serve_fontawesome_css=1'), FALSE, NGG_SCRIPT_VERSION);
-            } else {
-                $router = C_Router::get_instance();
-                wp_register_style(
-	                'fontawesome',
-	                $router->get_static_url('photocrati-nextgen_gallery_display#fontawesome/font-awesome.css'),
-	                FALSE,
-	                NGG_SCRIPT_VERSION
-                );
-            }
+			wp_enqueue_style(
+				'fontawesome',
+				self::get_fontawesome_url(TRUE),
+				FALSE,
+				'4.6.1'
+			);
         }
 
         wp_enqueue_style('fontawesome');
     }
 
+	/**
+	 * Gets the src url for the registered fontawesome handler
+	 * @param bool $ngg_provided_only
+	 * @return null|string|void
+	 */
+	static function get_fontawesome_url($ngg_provided_only=FALSE)
+	{
+		$retval = NULL;
+
+		if (wp_style_is('fontawesome', 'registered') && !$ngg_provided_only) {
+			$style = wp_styles()->registered['fontawesome'];
+			$retval = $style->src;
+		}
+		else {
+			if (strpos(strtolower($_SERVER['SERVER_SOFTWARE']), 'microsoft-iis') !== FALSE) {
+				$retval = site_url('/?ngg_serve_fontawesome_css=1');
+			}
+			else {
+				$router = C_Router::get_instance();
+				$retval = $router->get_static_url('photocrati-nextgen_gallery_display#fontawesome/font-awesome.css');
+			}
+		}
+
+		return $retval;
+	}
+
 	function no_resources_mode($valid_request=TRUE)
 	{
 		if (isset($_REQUEST['ngg_no_resources'])) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php
index 6543a050bad4c00014a35eaad2ce0f657eab715b..ed6a9f2fdec4cff87b3c446aabb5ca09321ed295 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php
@@ -1,35 +1,50 @@
 <?php
+/**
+ * Class A_Display_Settings_Controller
+ * @mixin C_NextGen_Admin_Page_Controller
+ * @adapts I_NextGen_Admin_Page using "ngg_display_settings" context
+ */
 class A_Display_Settings_Controller extends Mixin
 {
     /**
      * Static resources required for the Display Settings page
      */
-    public function enqueue_backend_resources()
+    function enqueue_backend_resources()
     {
         $this->call_parent('enqueue_backend_resources');
         wp_enqueue_style('nextgen_gallery_display_settings');
         wp_enqueue_script('nextgen_gallery_display_settings');
     }
-    public function get_page_title()
+    function get_page_title()
     {
         return __('Gallery Settings', 'nggallery');
     }
-    public function get_required_permission()
+    function get_required_permission()
     {
         return 'NextGEN Change options';
     }
 }
+/**
+ * Class A_Display_Settings_Page
+ * @mixin C_Page_Manager
+ * @adapts I_Page_Manager
+ */
 class A_Display_Settings_Page extends Mixin
 {
-    public function setup()
+    function setup()
     {
         $this->object->add(NGG_DISPLAY_SETTINGS_SLUG, array('adapter' => 'A_Display_Settings_Controller', 'parent' => NGGFOLDER, 'before' => 'ngg_other_options'));
         return $this->call_parent('setup');
     }
 }
+/**
+ * Class A_Displayed_Gallery_Trigger_Element
+ * @mixin C_MVC_View
+ * @adapts I_MVC_View
+ */
 class A_Displayed_Gallery_Trigger_Element extends Mixin
 {
-    public function render_object()
+    function render_object()
     {
         $root_element = $this->call_parent('render_object');
         if (($displayed_gallery = $this->object->get_param('displayed_gallery')) && $this->object->get_param('display_type_rendering')) {
@@ -39,15 +54,20 @@ class A_Displayed_Gallery_Trigger_Element extends Mixin
         return $root_element;
     }
 }
+/**
+ * Class A_Displayed_Gallery_Trigger_Resources
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller
+ */
 class A_Displayed_Gallery_Trigger_Resources extends Mixin
 {
     protected $run_once = FALSE;
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
         return $this->enqueue_displayed_gallery_trigger_buttons_resources($displayed_gallery);
     }
-    public function enqueue_displayed_gallery_trigger_buttons_resources($displayed_gallery = FALSE)
+    function enqueue_displayed_gallery_trigger_buttons_resources($displayed_gallery = FALSE)
     {
         $retval = FALSE;
         M_Gallery_Display::enqueue_fontawesome();
@@ -71,6 +91,11 @@ class A_Displayed_Gallery_Trigger_Resources extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_Gallery_Display_Factory
+ * @mixin C_Component_Factory
+ * @adapts I_Component_Factory
+ */
 class A_Gallery_Display_Factory extends Mixin
 {
     /**
@@ -79,7 +104,7 @@ class A_Gallery_Display_Factory extends Mixin
      * @param array|stdClass|C_DataMapper_Model $properties
      * @param string|array|FALSE $context
      */
-    public function display_type($properties = array(), $mapper = FALSE, $context = FALSE)
+    function display_type($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Display_Type($properties, $mapper, $context);
     }
@@ -89,11 +114,16 @@ class A_Gallery_Display_Factory extends Mixin
      * @param array|stdClass|C_DataMapper_Model $properties
      * @param string|array|FALSE $context
      */
-    public function displayed_gallery($properties = array(), $mapper = FALSE, $context = FALSE)
+    function displayed_gallery($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         return new C_Displayed_Gallery($properties, $mapper, $context);
     }
 }
+/**
+ * Class A_Gallery_Display_View
+ * @mixin C_MVC_View
+ * @adapts I_MVC_View
+ */
 class A_Gallery_Display_View extends Mixin
 {
     /**
@@ -104,7 +134,7 @@ class A_Gallery_Display_View extends Mixin
      * @param string $addition_type what kind of addition is being made 'layout', 'decoration', 'style', 'logic' etc.
      * @return string|NULL
      */
-    public function _check_addition_rendering($displayed_gallery, $template_id, $root_element, $addition_type)
+    function _check_addition_rendering($displayed_gallery, $template_id, $root_element, $addition_type)
     {
         $view = $root_element->get_object();
         $mode = $view->get_param('render_mode');
@@ -131,11 +161,16 @@ class A_Gallery_Display_View extends Mixin
  * - entity_types (gallery, album)
  * - name		 (nextgen_basic-thumbnails)
  * - title		 (NextGEN Basic Thumbnails)
+ * - aliases	[basic_thumbnail, basic_thumbnails]
+ *
+ * @mixin Mixin_Display_Type_Validation
+ * @mixin Mixin_Display_Type_Instance_Methods
+ * @implements I_Display_Type
  */
 class C_Display_Type extends C_DataMapper_Model
 {
-    public $_mapper_interface = 'I_Display_Type_Mapper';
-    public function define($properties = array(), $mapper = FALSE, $context = FALSE)
+    var $_mapper_interface = 'I_Display_Type_Mapper';
+    function define($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         parent::define($mapper, $properties, $context);
         $this->add_mixin('Mixin_Display_Type_Validation');
@@ -148,7 +183,7 @@ class C_Display_Type extends C_DataMapper_Model
      * @param array|stdClass|C_Display_Type $properties
      * @param FALSE|string|array $context
      */
-    public function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
+    function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         // If no mapper was specified, then get the mapper
         if (!$mapper) {
@@ -163,7 +198,7 @@ class C_Display_Type extends C_DataMapper_Model
      * @param string $property
      * @return mixed
      */
-    public function &__get($property)
+    function &__get($property)
     {
         if (isset($this->settings) && isset($this->settings[$property])) {
             $retval =& $this->settings[$property];
@@ -175,7 +210,7 @@ class C_Display_Type extends C_DataMapper_Model
 }
 class Mixin_Display_Type_Validation extends Mixin
 {
-    public function validation()
+    function validation()
     {
         $this->object->validates_presence_of('entity_types');
         $this->object->validates_presence_of('name');
@@ -194,11 +229,11 @@ class Mixin_Display_Type_Instance_Methods extends Mixin
      * @param stdClass
      * @return bool
      */
-    public function is_compatible_with_source($source)
+    function is_compatible_with_source($source)
     {
         return C_Displayed_Gallery_Source_Manager::get_instance()->is_compatible($source, $this);
     }
-    public function get_order()
+    function get_order()
     {
         return NGG_DISPLAY_PRIORITY_BASE;
     }
@@ -207,10 +242,15 @@ class Mixin_Display_Type_Instance_Methods extends Mixin
  * A Controller which displays the settings form for the display type, as
  * well as the front-end display
  */
+/**
+ * Class C_Display_Type_Controller
+ * @mixin Mixin_Display_Type_Controller
+ * @implements I_Display_Type_Controller
+ */
 class C_Display_Type_Controller extends C_MVC_Controller
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Display_Type_Controller');
@@ -234,16 +274,16 @@ class C_Display_Type_Controller extends C_MVC_Controller
  */
 class Mixin_Display_Type_Controller extends Mixin
 {
-    public $_render_mode;
+    var $_render_mode;
     /**
      * Enqueues static resources required for lightbox effects
      * @param type $displayed_gallery
      */
-    public function enqueue_lightbox_resources($displayed_gallery)
+    function enqueue_lightbox_resources($displayed_gallery)
     {
         C_Lightbox_Library_Manager::get_instance()->enqueue();
     }
-    public function is_cachable()
+    function is_cachable()
     {
         return TRUE;
     }
@@ -251,7 +291,7 @@ class Mixin_Display_Type_Controller extends Mixin
      * This method should be overwritten by other adapters/mixins, and call
      * wp_enqueue_script() / wp_enqueue_style()
      */
-    public function enqueue_frontend_resources($displayed_gallery)
+    function enqueue_frontend_resources($displayed_gallery)
     {
         // This script provides common JavaScript among all display types
         wp_enqueue_script('ngg_common');
@@ -267,18 +307,18 @@ class Mixin_Display_Type_Controller extends Mixin
         // Enqueue lightbox library
         $this->object->enqueue_lightbox_resources($displayed_gallery);
     }
-    public function enqueue_ngg_styles()
+    function enqueue_ngg_styles()
     {
         $settings = C_NextGen_Settings::get_instance();
         if ((!is_multisite() || is_multisite() && $settings->wpmuStyle) && $settings->activateCSS) {
             wp_enqueue_style('nggallery', C_NextGen_Style_Manager::get_instance()->get_selected_stylesheet_url(), FALSE, NGG_SCRIPT_VERSION);
         }
     }
-    public function get_render_mode()
+    function get_render_mode()
     {
         return $this->object->_render_mode;
     }
-    public function set_render_mode($mode)
+    function set_render_mode($mode)
     {
         $this->object->_render_mode = $mode;
     }
@@ -288,7 +328,7 @@ class Mixin_Display_Type_Controller extends Mixin
      * @param null $params
      * @return array|null
      */
-    public function prepare_display_parameters($displayed_gallery, $params = null)
+    function prepare_display_parameters($displayed_gallery, $params = null)
     {
         if ($params == null) {
             $params = array();
@@ -301,7 +341,7 @@ class Mixin_Display_Type_Controller extends Mixin
     /**
      * Renders the frontend display of the display type
      */
-    public function index_action($displayed_gallery, $return = FALSE)
+    function index_action($displayed_gallery, $return = FALSE)
     {
         return $this->object->render_partial('photocrati-nextgen_gallery_display#index', array(), $return);
     }
@@ -309,24 +349,46 @@ class Mixin_Display_Type_Controller extends Mixin
      * Returns the url for the JavaScript library required
      * @return null|string
      */
-    public function _get_js_lib_url()
+    function _get_js_lib_url()
     {
         return NULL;
     }
+    function does_lightbox_support_displayed_gallery($displayed_gallery, $lightbox = NULL)
+    {
+        if (!$lightbox) {
+            $lightbox = C_Lightbox_Library_Manager::get_instance()->get_selected();
+        }
+        $retval = FALSE;
+        if ($lightbox) {
+            // HANDLE COMPATIBILITY BREAK
+            // In NGG 2.1.48 and earlier, lightboxes were stdClass objects, and it was assumed
+            // that they only supported galleries that contained images, not albums that contained galleries.
+            // After NGG 2.1.48, lightboxes are now C_NGG_Lightbox instances which have a 'is_supported()' method
+            // to test if the lightbox can work with the displayed gallery settings
+            if (get_class($lightbox) == 'stdClass') {
+                $retval = !in_array($displayed_gallery->source, array('album', 'albums'));
+            } else {
+                $retval = $lightbox->is_supported($displayed_gallery);
+            }
+        }
+        return $retval;
+    }
     /**
      * Returns the effect HTML code for the displayed gallery
      * @param type $displayed_gallery
      */
-    public function get_effect_code($displayed_gallery)
+    function get_effect_code($displayed_gallery)
     {
         $retval = '';
         if ($lightbox = C_Lightbox_Library_Manager::get_instance()->get_selected()) {
-            $retval = $lightbox->code;
-            $retval = str_replace('%GALLERY_ID%', $displayed_gallery->id(), $retval);
-            $retval = str_replace('%GALLERY_NAME%', $displayed_gallery->id(), $retval);
-            global $post;
-            if ($post && isset($post->ID) && $post->ID) {
-                $retval = str_replace('%PAGE_ID%', $post->ID, $retval);
+            if ($this->does_lightbox_support_displayed_gallery($displayed_gallery, $lightbox)) {
+                $retval = $lightbox->code;
+                $retval = str_replace('%GALLERY_ID%', $displayed_gallery->id(), $retval);
+                $retval = str_replace('%GALLERY_NAME%', $displayed_gallery->id(), $retval);
+                global $post;
+                if ($post && isset($post->ID) && $post->ID) {
+                    $retval = str_replace('%PAGE_ID%', $post->ID, $retval);
+                }
             }
         }
         // allow for customization
@@ -340,7 +402,7 @@ class Mixin_Display_Type_Controller extends Mixin
      * @param mixed $object_value
      * @param bool $define
      */
-    public function _add_script_data($handle, $object_name, $object_value, $define = TRUE, $override = FALSE)
+    function _add_script_data($handle, $object_name, $object_value, $define = TRUE, $override = FALSE)
     {
         $retval = FALSE;
         // wp_localize_script allows you to add data to the DOM, associated
@@ -379,7 +441,7 @@ class Mixin_Display_Type_Controller extends Mixin
         return $retval;
     }
     // Returns the longest and widest dimensions from a list of entities
-    public function get_entity_statistics($entities, $named_size, $style_images = FALSE)
+    function get_entity_statistics($entities, $named_size, $style_images = FALSE)
     {
         $longest = $widest = 0;
         $storage = C_Gallery_Storage::get_instance();
@@ -432,11 +494,14 @@ class Mixin_Display_Type_Controller extends Mixin
 }
 /**
  * Provides a datamapper to perform CRUD operations for Display Types
+ *
+ * @mixin Mixin_Display_Type_Mapper
+ * @implements I_Display_Type_Mapper
  */
 class C_Display_Type_Mapper extends C_CustomPost_DataMapper_Driver
 {
     public static $_instances = array();
-    public function define($context = FALSE, $not_used = FALSE)
+    function define($context = FALSE, $not_used = FALSE)
     {
         $object_name = 'display_type';
         // Add the object name to the context of the object as well
@@ -459,7 +524,7 @@ class C_Display_Type_Mapper extends C_CustomPost_DataMapper_Driver
         $this->add_serialized_column('settings');
         $this->add_serialized_column('entity_types');
     }
-    public function initialize($context = FALSE)
+    function initialize($context = FALSE)
     {
         parent::initialize('display_type');
     }
@@ -485,13 +550,20 @@ class Mixin_Display_Type_Mapper extends Mixin
      * Locates a Display Type by names
      * @param string $name
      */
-    public function find_by_name($name, $model = FALSE)
+    function find_by_name($name, $model = FALSE)
     {
         $retval = NULL;
         $this->object->select();
         $this->object->where(array('name = %s', $name));
         $results = $this->object->run_query(FALSE, $model);
-        if ($results) {
+        if (!$results) {
+            foreach ($this->object->find_all(FALSE, $model) as $entity) {
+                if ($entity->name == $name || isset($entity->aliases) && is_array($entity->aliases) && in_array($name, $entity->aliases)) {
+                    $retval = $entity;
+                    break;
+                }
+            }
+        } else {
             $retval = $results[0];
         }
         return $retval;
@@ -501,11 +573,11 @@ class Mixin_Display_Type_Mapper extends Mixin
      * @param string|array $entity_type e.g. image, gallery, album
      * @return array
      */
-    public function find_by_entity_type($entity_type, $model = FALSE)
+    function find_by_entity_type($entity_type, $model = FALSE)
     {
         $find_entity_types = is_array($entity_type) ? $entity_type : array($entity_type);
         $retval = NULL;
-        foreach ($this->object->find_all($model) as $display_type) {
+        foreach ($this->object->find_all(FALSE, $model) as $display_type) {
             foreach ($find_entity_types as $entity_type) {
                 if (isset($display_type->entity_types) && in_array($entity_type, $display_type->entity_types)) {
                     $retval[] = $display_type;
@@ -520,14 +592,14 @@ class Mixin_Display_Type_Mapper extends Mixin
      * @param stdClass $entity
      * @return string
      */
-    public function get_post_title($entity)
+    function get_post_title($entity)
     {
         return $entity->title;
     }
     /**
      * Sets default values needed for display types
      */
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         if (!isset($entity->settings)) {
             $entity->settings = array();
@@ -537,6 +609,9 @@ class Mixin_Display_Type_Mapper extends Mixin
         $this->_set_default_value($entity, 'view_order', NGG_DISPLAY_PRIORITY_BASE);
         $this->_set_default_value($entity, 'settings', 'use_lightbox_effect', TRUE);
         $this->_set_default_value($entity, 'hidden_from_ui', FALSE);
+        // todo remove later
+        $this->_set_default_value($entity, 'hidden_from_igw', FALSE);
+        $this->_set_default_value($entity, 'aliases', array());
         return $this->call_parent('set_defaults', $entity);
     }
 }
@@ -552,11 +627,16 @@ class Mixin_Display_Type_Mapper extends Mixin
  * - entity_ids			(specific images/galleries to include, sorted)
  * - order_by
  * - order_direction
+ *
+ * @mixin Mixin_Displayed_Gallery_Validation
+ * @mixin Mixin_Displayed_Gallery_Instance_Methods
+ * @mixin Mixin_Displayed_Gallery_Queries
+ * @implements I_Displayed_Gallery
  */
 class C_Displayed_Gallery extends C_DataMapper_Model
 {
-    public $_mapper_interface = 'I_Displayed_Gallery_Mapper';
-    public function define($properties = array(), $mapper = FALSE, $context = FALSE)
+    var $_mapper_interface = 'I_Displayed_Gallery_Mapper';
+    function define($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         parent::define($mapper, $properties, $context);
         $this->add_mixin('Mixin_Displayed_Gallery_Validation');
@@ -570,7 +650,7 @@ class C_Displayed_Gallery extends C_DataMapper_Model
      * @param array|stdClass|C_Displayed_Gallery $properties
      * @param FALSE|string|array $context
      */
-    public function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
+    function initialize($properties = array(), $mapper = FALSE, $context = FALSE)
     {
         if (!$mapper) {
             $mapper = $this->get_registry()->get_utility($this->_mapper_interface);
@@ -584,7 +664,7 @@ class C_Displayed_Gallery extends C_DataMapper_Model
  */
 class Mixin_Displayed_Gallery_Validation extends Mixin
 {
-    public function validation()
+    function validation()
     {
         // Valid sources
         $this->object->validates_presence_of('source');
@@ -602,6 +682,7 @@ class Mixin_Displayed_Gallery_Validation extends Mixin
                     }
                 }
             }
+            $this->object->display_type = $display_type->name;
             // Is the display type compatible with the source? E.g., if we're
             // using a display type that expects images, we can't be feeding it
             // galleries and albums
@@ -627,7 +708,7 @@ class Mixin_Displayed_Gallery_Validation extends Mixin
 }
 class Mixin_Displayed_Gallery_Queries extends Mixin
 {
-    public function select_random_variation()
+    function select_random_variation()
     {
         $retval = FALSE;
         $source_obj = $this->object->get_source();
@@ -645,7 +726,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
         }
         return $retval;
     }
-    public function get_entities($limit = FALSE, $offset = FALSE, $id_only = FALSE, $returns = 'included')
+    function get_entities($limit = FALSE, $offset = FALSE, $id_only = FALSE, $returns = 'included')
     {
         $retval = array();
         $source_obj = $this->object->get_source();
@@ -672,7 +753,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param boolean $id_only
      * @param string $returns
      */
-    public function _get_image_entities($source_obj, $limit, $offset, $id_only, $returns)
+    function _get_image_entities($source_obj, $limit, $offset, $id_only, $returns)
     {
         // TODO: This method is very long, and therefore more difficult to read
         // Find a way to minimalize or segment
@@ -741,7 +822,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
             }
             // Ensure that no images marked as excluded at the gallery level are returned
             if (empty($this->object->skip_excluding_globally_excluded_images)) {
-                $mapper->where(array('exclude = %d', 0));
+                $mapper->where(array("exclude = %d", 0));
             }
         } elseif ($returns == 'excluded') {
             // If the sortorder propery is available, then we need to override
@@ -752,7 +833,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
                 $sort_by = 'new_sortorder';
             }
             // Mark each result as excluded
-            $select .= ', 1 AS exclude';
+            $select .= ", 1 AS exclude";
             $mapper->select($select);
             // Is this case, entity_ids become the exclusions
             $exclusions = $this->object->entity_ids;
@@ -774,7 +855,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
                 }
             }
             // Ensure that images marked as excluded are returned as well
-            $mapper->where(array('exclude = 1'));
+            $mapper->where(array("exclude = 1"));
         }
         // Filter based on containers_ids. Container ids is a little more
         // complicated as it can contain gallery ids or tags
@@ -784,7 +865,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
                 $term_ids = $this->object->get_term_ids_for_tags($this->object->container_ids);
                 $mapper->where(array("{$image_key} IN %s", get_objects_in_term($term_ids, 'ngg_tag')));
             } else {
-                $mapper->where(array('galleryid IN %s', $this->object->container_ids));
+                $mapper->where(array("galleryid IN %s", $this->object->container_ids));
             }
         }
         // Filter based on excluded container ids
@@ -794,7 +875,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
                 $term_ids = $this->object->get_term_ids_for_tags($this->object->excluded_container_ids);
                 $mapper->where(array("{$image_key} NOT IN %s", get_objects_in_term($term_ids, 'ngg_tag')));
             } else {
-                $mapper->where(array('galleryid NOT IN %s', $this->object->excluded_container_ids));
+                $mapper->where(array("galleryid NOT IN %s", $this->object->excluded_container_ids));
             }
         }
         // Adjust the query more based on what source was selected
@@ -836,7 +917,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param boolean $id_only
      * @param array $returns
      */
-    public function _get_album_and_gallery_entities($source_obj, $limit = FALSE, $offset = FALSE, $id_only = FALSE, $returns = 'included')
+    function _get_album_and_gallery_entities($source_obj, $limit = FALSE, $offset = FALSE, $id_only = FALSE, $returns = 'included')
     {
         // Albums queries and difficult and inefficient to perform due to the
         // database schema. To complicate things, we're returning two different
@@ -847,7 +928,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
         $album_key = $album_mapper->get_primary_key_column();
         $gallery_mapper = C_Gallery_Mapper::get_instance();
         $gallery_key = $gallery_mapper->get_primary_key_column();
-        $select = $id_only ? $album_key . ', sortorder' : $album_mapper->get_table_name() . '.*';
+        $select = $id_only ? $album_key . ", sortorder" : $album_mapper->get_table_name() . '.*';
         $retval = array();
         // If no exclusions are specified, are entity_ids are specified,
         // and we're to return is "included", then we have a relatively easy
@@ -924,7 +1005,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param int $offset
      * @return array
      */
-    public function _entities_to_galleries_and_albums($entity_ids, $id_only = FALSE, $exclusions = array(), $limit = FALSE, $offset = FALSE)
+    function _entities_to_galleries_and_albums($entity_ids, $id_only = FALSE, $exclusions = array(), $limit = FALSE, $offset = FALSE)
     {
         $retval = array();
         $gallery_ids = array();
@@ -934,8 +1015,8 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
         $gallery_mapper = C_Gallery_Mapper::get_instance();
         $image_mapper = C_Image_Mapper::get_instance();
         $gallery_key = $gallery_mapper->get_primary_key_column();
-        $album_select = ($id_only ? $album_key : $album_mapper->get_table_name() . '.*') . ', 1 AS is_album, 0 AS is_gallery, name AS title, albumdesc AS galdesc';
-        $gallery_select = ($id_only ? $gallery_key : $gallery_mapper->get_table_name() . '.*') . ', 1 AS is_gallery, 0 AS is_album';
+        $album_select = ($id_only ? $album_key : $album_mapper->get_table_name() . '.*') . ", 1 AS is_album, 0 AS is_gallery, name AS title, albumdesc AS galdesc";
+        $gallery_select = ($id_only ? $gallery_key : $gallery_mapper->get_table_name() . '.*') . ", 1 AS is_gallery, 0 AS is_album";
         // Modify the sort order of the entities
         if ($this->object->sortorder) {
             $sortorder = array_intersect($this->object->sortorder, $entity_ids);
@@ -960,16 +1041,16 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
         if ($gallery_ids) {
             $gallery_select = $this->object->_add_find_in_set_column($gallery_select, $gallery_key, $gallery_ids, 'ordered_by', TRUE);
         } else {
-            $gallery_select .= ', 0 AS ordered_by';
+            $gallery_select .= ", 0 AS ordered_by";
         }
         if ($album_ids) {
             $album_select = $this->object->_add_find_in_set_column($album_select, $album_key, $album_ids, 'ordered_by', TRUE);
         } else {
-            $album_select .= ', 0 AS ordered_by';
+            $album_select .= ", 0 AS ordered_by";
         }
         // Fetch entities
         $galleries = $gallery_mapper->select($gallery_select)->where(array("{$gallery_key} IN %s", $gallery_ids))->order_by('ordered_by', 'DESC')->run_query();
-        $counts = $image_mapper->select('galleryid, COUNT(*) as counter')->where(array(array('galleryid IN %s', $gallery_ids), array('exclude = %d', 0)))->group_by('galleryid')->run_query(FALSE, FALSE, TRUE);
+        $counts = $image_mapper->select('galleryid, COUNT(*) as counter')->where(array(array("galleryid IN %s", $gallery_ids), array('exclude = %d', 0)))->group_by('galleryid')->run_query(FALSE, FALSE, TRUE);
         $albums = $album_mapper->select($album_select)->where(array("{$album_key} IN %s", $album_ids))->order_by('ordered_by', 'DESC')->run_query();
         // Reorder entities according to order specified in entity_ids
         foreach ($entity_ids as $entity_id) {
@@ -1009,7 +1090,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param string $returns
      * @returns int
      */
-    public function get_entity_count($returns = 'included')
+    function get_entity_count($returns = 'included')
     {
         $retval = 0;
         // Is this an image query?
@@ -1027,7 +1108,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
     }
     // Honor the gallery 'maximum_entity_count' setting ONLY when dealing with random & recent galleries. All
     // others will always obey the *global* 'maximum_entity_count' setting.
-    public function get_maximum_entity_count()
+    function get_maximum_entity_count()
     {
         $max = intval(C_NextGen_Settings::get_instance()->get('maximum_entity_count', 500));
         $sources = C_Displayed_Gallery_Source_Manager::get_instance();
@@ -1044,7 +1125,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param boolean $id_only
      * @return array
      */
-    public function get_included_entities($limit = FALSE, $offset = FALSE, $id_only = FALSE)
+    function get_included_entities($limit = FALSE, $offset = FALSE, $id_only = FALSE)
     {
         return $this->object->get_entities($limit, $offset, $id_only, 'included');
     }
@@ -1058,12 +1139,12 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param boolean $add_column
      * @return string
      */
-    public function _add_find_in_set_column($select, $key, $array, $alias, $add_column = FALSE)
+    function _add_find_in_set_column($select, $key, $array, $alias, $add_column = FALSE)
     {
         $array = array_map('intval', $array);
-        $set = implode(',', array_reverse($array));
+        $set = implode(",", array_reverse($array));
         if (!$select) {
-            $select = '1';
+            $select = "1";
         }
         $select .= ", @{$alias} := FIND_IN_SET({$key}, '{$set}')";
         if ($add_column) {
@@ -1071,10 +1152,10 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
         }
         return $select;
     }
-    public function _add_if_column($select, $alias, $true = 1, $false = 0)
+    function _add_if_column($select, $alias, $true = 1, $false = 0)
     {
         if (!$select) {
-            $select = '1';
+            $select = "1";
         }
         $select .= ", IF(@{$alias} = 0, {$true}, {$false}) AS {$alias}";
         return $select;
@@ -1084,7 +1165,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * ensures everything meets expectations
      * @return boolean
      */
-    public function _parse_parameters()
+    function _parse_parameters()
     {
         $valid = FALSE;
         // Ensure that the source is valid
@@ -1111,7 +1192,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param array $tags
      * @return array
      */
-    public function get_term_ids_for_tags($tags = FALSE)
+    function get_term_ids_for_tags($tags = FALSE)
     {
         global $wpdb;
         // If no tags were provided, get them from the container_ids
@@ -1148,7 +1229,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
      * @param stdClass $a
      * @param stdClass $b
      */
-    public function _sort_album_result($a, $b)
+    function _sort_album_result($a, $b)
     {
         $key = $this->object->order_by;
         return strcmp($a->{$key}, $b->{$key});
@@ -1160,7 +1241,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
  */
 class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
 {
-    public function get_entity()
+    function get_entity()
     {
         $entity = $this->call_parent('get_entity');
         unset($entity->post_author);
@@ -1189,7 +1270,7 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
      * Gets the display type object used in this displayed gallery
      * @return C_Display_Type
      */
-    public function get_display_type()
+    function get_display_type()
     {
         return C_Display_Type_Mapper::get_instance()->find_by_name($this->object->display_type, TRUE);
     }
@@ -1197,7 +1278,7 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
      * Gets the corresponding source instance
      * @return stdClass
      */
-    public function get_source()
+    function get_source()
     {
         return C_Displayed_Gallery_Source_Manager::get_instance()->get($this->object->source);
     }
@@ -1205,7 +1286,7 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
      * Returns the galleries queries in this displayed gallery
      * @return array
      */
-    public function get_galleries()
+    function get_galleries()
     {
         $retval = array();
         if ($source = $this->object->get_source()) {
@@ -1225,7 +1306,7 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
      * Gets albums queried in this displayed gallery
      * @return array
      */
-    public function get_albums()
+    function get_albums()
     {
         $retval = array();
         if ($source = $this->object->get_source()) {
@@ -1244,7 +1325,7 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
      * Returns a transient for the displayed gallery
      * @return string
      */
-    public function to_transient()
+    function to_transient()
     {
         $params = $this->object->get_entity();
         unset($params->transient_id);
@@ -1262,7 +1343,7 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
      * Applies the values of a transient to this object
      * @param string $transient_id
      */
-    public function apply_transient($transient_id = NULL)
+    function apply_transient($transient_id = NULL)
     {
         $retval = FALSE;
         if (!$transient_id && isset($this->object->transient_id)) {
@@ -1309,21 +1390,31 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin
         return $retval;
     }
 }
+/**
+ * Class C_Displayed_Gallery_Mapper
+ * @mixin Mixin_Displayed_Gallery_Defaults
+ * @implements I_Displayed_Gallery_Mapper
+ */
 class C_Displayed_Gallery_Mapper extends C_CustomPost_DataMapper_Driver
 {
     static $_instances = array();
-    public function define($context = FALSE, $not_used = FALSE)
+    function define($context = FALSE, $not_used = FALSE)
     {
         parent::define('displayed_gallery', array($context, 'displayed_gallery', 'display_gallery'));
         $this->add_mixin('Mixin_Displayed_Gallery_Defaults');
         $this->implement('I_Displayed_Gallery_Mapper');
         $this->set_model_factory_method('displayed_gallery');
+        //		$this->add_post_hook(
+        //			'save',
+        //			'Propagate thumbnail dimensions',
+        //			'Hook_Propagate_Thumbnail_Dimensions_To_Settings'
+        //		);
     }
     /**
      * Initializes the mapper
      * @param string|array|FALSE $context
      */
-    public function initialize()
+    function initialize()
     {
         parent::initialize('displayed_gallery');
     }
@@ -1350,7 +1441,7 @@ class Mixin_Displayed_Gallery_Defaults extends Mixin
      * @param stdClass|C_DataMapper_Model $entity
      * @return null|stdClass
      */
-    public function get_display_type($entity)
+    function get_display_type($entity)
     {
         $mapper = C_Display_Type_Mapper::get_instance();
         return $mapper->find_by_name($entity->display_type);
@@ -1359,7 +1450,7 @@ class Mixin_Displayed_Gallery_Defaults extends Mixin
      * Sets defaults needed for the entity
      * @param type $entity
      */
-    public function set_defaults($entity)
+    function set_defaults($entity)
     {
         // Ensure that we have a settings array
         if (!isset($entity->display_settings)) {
@@ -1389,6 +1480,11 @@ class Mixin_Displayed_Gallery_Defaults extends Mixin
         $this->object->_set_default_value($entity, 'maximum_entity_count', $settings->maximum_entity_count);
     }
 }
+/**
+ * Class C_Displayed_Gallery_Renderer
+ * @mixin Mixin_Displayed_Gallery_Renderer
+ * @implements I_Displayed_Gallery_Renderer
+ */
 class C_Displayed_Gallery_Renderer extends C_Component
 {
     static $_instances = array();
@@ -1409,7 +1505,7 @@ class C_Displayed_Gallery_Renderer extends C_Component
      * Defines the object
      * @param bool $context
      */
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Displayed_Gallery_Renderer');
@@ -1421,68 +1517,20 @@ class C_Displayed_Gallery_Renderer extends C_Component
  */
 class Mixin_Displayed_Gallery_Renderer extends Mixin
 {
-    /**
-     * Displays a "displayed gallery" instance
-     *
-     * Alias Properties:
-     * gallery_ids/album_ids/tag_ids == container_ids
-     * image_ids/gallery_ids		 == entity_ids
-     *
-     * Default Behavior:
-     * - if order_by and order_direction are missing, the default settings
-     *   are used from the "Other Options" page. The exception to this is
-     *   when entity_ids are selected, in which the order is custom unless
-     *   specified.
-     *
-     * How to use:
-     *
-     * To retrieve images from gallery 1 & 3, but exclude images 4 & 6:
-     * [ngg_images gallery_ids="1,3" exclusions="4,6" display_type="photocrati-nextgen_basic_thumbnails"]
-     *
-     * To retrieve images 1 & 2 from gallery 1:
-     * [ngg_images gallery_ids="1" image_ids="1,2" display_type="photocrati-nextgen_basic_thumbnails"]
-     *
-     * To retrieve images matching tags "landscapes" and "wedding shoots":
-     * [ngg_images tag_ids="landscapes,wedding shoots" display_type="photocrati-nextgen_basic_thumbnails"]
-     *
-     * To retrieve galleries from albums 1 & #, but exclude sub-album 1:
-     * [ngg_images album_ids="1,2" exclusions="a1" display_type="photocrati-nextgen_basic_compact_album"]
-     *
-     * To retrieve galleries from albums 1 & 2, but exclude gallery 1:
-     * [ngg_images album_ids="1,2" exclusions="1" display_type="photocrati-nextgen_basic_compact_album"]
-     *
-     * To retrieve image 2, 3, and 5 - independent of what container is used
-     * [ngg_images image_ids="2,3,5" display_type="photocrati-nextgen_basic_thumbnails"]
-     *
-     * To retrieve galleries 3 & 5, custom sorted, in album view
-     * [ngg_images source="albums" gallery_ids="3,5" display_type="photocrati-nextgen_basic_compact_album"]
-     *
-     * To retrieve recent images, sorted by alt/title text
-     * [ngg_images source="recent" order_by="alttext" display_type="photocrati-nextgen_basic_thumbnails"]
-     *
-     * To retrieve random image
-     * [ngg_images source="random" display_type="photocrati-nextgen_basic_thumbnails"]
-     *
-     * To retrieve a single image
-     * [ngg_images image_ids='8' display_type='photocrati-nextgen_basic_singlepic']
-     *
-     * To retrieve a tag cloud
-     * [ngg_images tagcloud=yes display_type='photocrati-nextgen_basic_tagcloud']
-     */
-    public function display_images($params, $inner_content = NULL, $mode = NULL)
+    function params_to_displayed_gallery($params)
     {
-        $retval = '';
         $displayed_gallery = NULL;
         // Get the NextGEN settings to provide some defaults
         $settings = C_NextGen_Settings::get_instance();
         // Configure the arguments
-        $defaults = array('id' => NULL, 'source' => '', 'container_ids' => array(), 'gallery_ids' => array(), 'album_ids' => array(), 'tag_ids' => array(), 'display_type' => '', 'exclusions' => array(), 'order_by' => $settings->galSort, 'order_direction' => $settings->galSortOrder, 'image_ids' => array(), 'entity_ids' => array(), 'tagcloud' => FALSE, 'inner_content' => $inner_content, 'returns' => 'included', 'slug' => NULL);
+        $defaults = array('id' => NULL, 'source' => '', 'container_ids' => array(), 'gallery_ids' => array(), 'album_ids' => array(), 'tag_ids' => array(), 'display_type' => '', 'exclusions' => array(), 'order_by' => $settings->galSort, 'order_direction' => $settings->galSortOrder, 'image_ids' => array(), 'entity_ids' => array(), 'tagcloud' => FALSE, 'returns' => 'included', 'slug' => NULL, 'sortorder' => array());
         $args = shortcode_atts($defaults, $params);
         // Are we loading a specific displayed gallery that's persisted?
         $mapper = C_Displayed_Gallery_Mapper::get_instance();
         if (!is_null($args['id'])) {
-            $displayed_gallery = $mapper->find($args['id']);
+            $displayed_gallery = $mapper->find($args['id'], TRUE);
             unset($mapper);
+            // no longer needed
         } else {
             // Perform some conversions...
             // Galleries?
@@ -1514,13 +1562,16 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
             }
             // Convert strings to arrays
             if (!is_array($args['container_ids'])) {
-                $args['container_ids'] = preg_split('/,|\\|/', $args['container_ids']);
+                $args['container_ids'] = preg_split("/,|\\|/", $args['container_ids']);
             }
             if (!is_array($args['exclusions'])) {
-                $args['exclusions'] = preg_split('/,|\\|/', $args['exclusions']);
+                $args['exclusions'] = preg_split("/,|\\|/", $args['exclusions']);
             }
             if (!is_array($args['entity_ids'])) {
-                $args['entity_ids'] = preg_split('/,|\\|/', $args['entity_ids']);
+                $args['entity_ids'] = preg_split("/,|\\|/", $args['entity_ids']);
+            }
+            if (!is_array($args['sortorder'])) {
+                $args['sortorder'] = preg_split("/,|\\|/", $args['sortorder']);
             }
             // Get the display settings
             foreach (array_keys($defaults) as $key) {
@@ -1534,9 +1585,66 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
         }
         // Validate the displayed gallery
         if ($displayed_gallery) {
+            $displayed_gallery->validate();
+        }
+        return $displayed_gallery;
+    }
+    /**
+     * Displays a "displayed gallery" instance
+     *
+     * Alias Properties:
+     * gallery_ids/album_ids/tag_ids == container_ids
+     * image_ids/gallery_ids		 == entity_ids
+     *
+     * Default Behavior:
+     * - if order_by and order_direction are missing, the default settings
+     *   are used from the "Other Options" page. The exception to this is
+     *   when entity_ids are selected, in which the order is custom unless
+     *   specified.
+     *
+     * How to use:
+     *
+     * To retrieve images from gallery 1 & 3, but exclude images 4 & 6:
+     * [ngg_images gallery_ids="1,3" exclusions="4,6" display_type="photocrati-nextgen_basic_thumbnails"]
+     *
+     * To retrieve images 1 & 2 from gallery 1:
+     * [ngg_images gallery_ids="1" image_ids="1,2" display_type="photocrati-nextgen_basic_thumbnails"]
+     *
+     * To retrieve images matching tags "landscapes" and "wedding shoots":
+     * [ngg_images tag_ids="landscapes,wedding shoots" display_type="photocrati-nextgen_basic_thumbnails"]
+     *
+     * To retrieve galleries from albums 1 & #, but exclude sub-album 1:
+     * [ngg_images album_ids="1,2" exclusions="a1" display_type="photocrati-nextgen_basic_compact_album"]
+     *
+     * To retrieve galleries from albums 1 & 2, but exclude gallery 1:
+     * [ngg_images album_ids="1,2" exclusions="1" display_type="photocrati-nextgen_basic_compact_album"]
+     *
+     * To retrieve image 2, 3, and 5 - independent of what container is used
+     * [ngg_images image_ids="2,3,5" display_type="photocrati-nextgen_basic_thumbnails"]
+     *
+     * To retrieve galleries 3 & 5, custom sorted, in album view
+     * [ngg_images source="albums" gallery_ids="3,5" display_type="photocrati-nextgen_basic_compact_album"]
+     *
+     * To retrieve recent images, sorted by alt/title text
+     * [ngg_images source="recent" order_by="alttext" display_type="photocrati-nextgen_basic_thumbnails"]
+     *
+     * To retrieve random image
+     * [ngg_images source="random" display_type="photocrati-nextgen_basic_thumbnails"]
+     *
+     * To retrieve a single image
+     * [ngg_images image_ids='8' display_type='photocrati-nextgen_basic_singlepic']
+     *
+     * To retrieve a tag cloud
+     * [ngg_images tagcloud=yes display_type='photocrati-nextgen_basic_tagcloud']
+     */
+    function display_images($params, $inner_content = NULL, $mode = NULL)
+    {
+        $retval = '';
+        // Validate the displayed gallery
+        if ($displayed_gallery = $this->object->params_to_displayed_gallery($params)) {
             if ($displayed_gallery->validate()) {
                 // Display!
-                return $this->object->render($displayed_gallery, TRUE, $mode);
+                $retval = $this->object->render($displayed_gallery, TRUE, $mode);
             } else {
                 if (C_NextGEN_Bootstrap::$debug) {
                     $retval = __('We cannot display this gallery', 'nggallery') . $this->debug_msg($displayed_gallery->get_errors()) . $this->debug_msg($displayed_gallery->get_entity());
@@ -1549,7 +1657,7 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
         }
         return $retval;
     }
-    public function debug_msg($msg, $print_r = FALSE)
+    function debug_msg($msg, $print_r = FALSE)
     {
         $retval = '';
         if (C_NextGEN_Bootstrap::$debug) {
@@ -1569,7 +1677,7 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
      * Renders a displayed gallery on the frontend
      * @param C_Displayed_Gallery|stdClass $displayed_gallery
      */
-    public function render($displayed_gallery, $return = FALSE, $mode = null)
+    function render($displayed_gallery, $return = FALSE, $mode = null)
     {
         $retval = '';
         $lookup = TRUE;
@@ -1623,7 +1731,7 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
                 $retval = $controller->cache_action($displayed_gallery);
             }
             // Output debug message
-            $retval .= $this->debug_msg('Lookup!');
+            $retval .= $this->debug_msg("Lookup!");
             // Some settings affect display types
             $settings = C_NextGen_Settings::get_instance();
             $key_params = apply_filters('ngg_displayed_gallery_cache_params', array($displayed_gallery->get_entity(), $url, $mode, $settings->activateTags, $settings->appendType, $settings->maxImages, $settings->thumbEffect, $settings->thumbCode, $settings->galSort, $settings->galSortDir));
@@ -1637,16 +1745,17 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
             $html = C_Photocrati_Transient_Manager::fetch($key, FALSE);
             // Output debug messages
             if ($html) {
-                $retval .= $this->debug_msg('HIT!');
+                $retval .= $this->debug_msg("HIT!");
             } else {
-                $retval .= $this->debug_msg('MISS!');
+                $retval .= $this->debug_msg("MISS!");
             }
             // TODO: This is hack. We need to figure out a more uniform way of detecting dynamic image urls
             if (strpos($html, C_Photocrati_Settings_Manager::get_instance()->dynamic_thumbnail_slug . '/') !== FALSE) {
                 $html = FALSE;
+                // forces the cache to be re-generated
             }
         } else {
-            $retval .= $this->debug_msg('Not looking up in cache as per rules');
+            $retval .= $this->debug_msg("Not looking up in cache as per rules");
         }
         // If we're displaying a variant, I want to know it
         if (isset($displayed_gallery->variation) && is_numeric($displayed_gallery->variation) && $displayed_gallery->variation > 0) {
@@ -1654,7 +1763,7 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin
         }
         // If a cached version doesn't exist, then create the cache
         if (!$html) {
-            $retval .= $this->debug_msg('Rendering displayed gallery');
+            $retval .= $this->debug_msg("Rendering displayed gallery");
             $current_mode = $controller->get_render_mode();
             $controller->set_render_mode($mode);
             $html = apply_filters('ngg_displayed_gallery_rendering', $controller->index_action($displayed_gallery, TRUE), $displayed_gallery);
@@ -1684,7 +1793,7 @@ class C_Displayed_Gallery_Source_Manager
         }
         return self::$_instance;
     }
-    public function register_defaults()
+    function register_defaults()
     {
         // Entity types must be registered first!!!
         // ----------------------------------------
@@ -1729,7 +1838,7 @@ class C_Displayed_Gallery_Source_Manager
         $this->register($recent->name, $recent);
         $this->_registered_defaults = TRUE;
     }
-    public function register($name, $properties)
+    function register($name, $properties)
     {
         // We'll use an object to represent the source
         $object = $properties;
@@ -1759,7 +1868,7 @@ class C_Displayed_Gallery_Source_Manager
             $this->_sources[$name] = $object;
         }
     }
-    public function register_entity_type()
+    function register_entity_type()
     {
         $aliases = func_get_args();
         $name = array_shift($aliases);
@@ -1768,7 +1877,7 @@ class C_Displayed_Gallery_Source_Manager
             $this->_entity_types[$alias] = $name;
         }
     }
-    public function deregister($name)
+    function deregister($name)
     {
         if ($source = $this->get($name)) {
             unset($this->_sources[$name]);
@@ -1777,11 +1886,11 @@ class C_Displayed_Gallery_Source_Manager
             }
         }
     }
-    public function deregister_entity_type($name)
+    function deregister_entity_type($name)
     {
         unset($this->_entity_types[$name]);
     }
-    public function get($name_or_alias)
+    function get($name_or_alias)
     {
         if (!$this->_registered_defaults) {
             $this->register_defaults();
@@ -1792,7 +1901,7 @@ class C_Displayed_Gallery_Source_Manager
         }
         return $retval;
     }
-    public function get_entity_type($name)
+    function get_entity_type($name)
     {
         if (!$this->_registered_defaults) {
             $this->register_defaults();
@@ -1804,7 +1913,7 @@ class C_Displayed_Gallery_Source_Manager
             return NULL;
         }
     }
-    public function get_all()
+    function get_all()
     {
         if (!$this->_registered_defaults) {
             $this->register_defaults();
@@ -1818,32 +1927,32 @@ class C_Displayed_Gallery_Source_Manager
         usort($retval, array(&$this, '__sort_by_name'));
         return $retval;
     }
-    public function __sort_by_name($a, $b)
+    function __sort_by_name($a, $b)
     {
         return strcmp($a->name, $b->name);
     }
-    public function get_all_entity_types()
+    function get_all_entity_types()
     {
         if (!$this->_registered_defaults) {
             $this->register_defaults();
         }
         return array_unique(array_values($this->_entity_types));
     }
-    public function is_registered($name)
+    function is_registered($name)
     {
         return !is_null($this->get($name));
     }
-    public function is_valid_entity_type($name)
+    function is_valid_entity_type($name)
     {
         return !is_null($this->get_entity_type($name));
     }
-    public function deregister_all()
+    function deregister_all()
     {
         $this->_sources = array();
         $this->_entity_types = array();
         $this->_registered_defaults = FALSE;
     }
-    public function is_compatible($source, $display_type)
+    function is_compatible($source, $display_type)
     {
         $retval = FALSE;
         if ($source = $this->get($source->name)) {
@@ -1871,15 +1980,15 @@ abstract class C_Displayed_Gallery_Trigger
     {
         return TRUE;
     }
-    public function get_css_class()
+    function get_css_class()
     {
         return 'fa fa-circle';
     }
-    public function get_attributes()
+    function get_attributes()
     {
         return array('class' => $this->get_css_class());
     }
-    public function render()
+    function render()
     {
         $attributes = array();
         foreach ($this->get_attributes() as $k => $v) {
@@ -1887,7 +1996,7 @@ abstract class C_Displayed_Gallery_Trigger
             $v = esc_attr($v);
             $attributes[] = "{$k}='{$v}'";
         }
-        $attributes = implode(' ', $attributes);
+        $attributes = implode(" ", $attributes);
         return "<i {$attributes}></i>";
     }
 }
@@ -1920,28 +2029,28 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return self::$_instance;
     }
-    public function __construct()
+    function __construct()
     {
         $this->_default_display_type_handler = 'C_Displayed_Gallery_Trigger_Handler';
         foreach ($this->_default_image_types as $display_type) {
             $this->register_display_type_handler($display_type, 'C_Displayed_Gallery_Image_Trigger_Handler');
         }
     }
-    public function register_display_type_handler($display_type, $klass)
+    function register_display_type_handler($display_type, $klass)
     {
         $this->_display_type_handlers[$display_type] = $klass;
     }
-    public function deregister_display_type_handler($display_type)
+    function deregister_display_type_handler($display_type)
     {
         unset($this->_display_type_handlers[$display_type]);
     }
-    public function add($name, $handler)
+    function add($name, $handler)
     {
         $this->_triggers[$name] = $handler;
         $this->_trigger_order[] = $name;
         return $this;
     }
-    public function remove($name)
+    function remove($name)
     {
         $order = array();
         unset($this->_triggers[$name]);
@@ -1953,7 +2062,7 @@ class C_Displayed_Gallery_Trigger_Manager
         $this->_trigger_order = $order;
         return $this;
     }
-    public function _rebuild_index()
+    function _rebuild_index()
     {
         $order = array();
         foreach ($this->_trigger_order as $name) {
@@ -1962,7 +2071,7 @@ class C_Displayed_Gallery_Trigger_Manager
         $this->_trigger_order = $order;
         return $this;
     }
-    public function increment_position($name)
+    function increment_position($name)
     {
         if (($current_index = array_search($name, $this->_trigger_order)) !== FALSE) {
             $next_index = $current_index += 1;
@@ -1975,7 +2084,7 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $this->position_of($name);
     }
-    public function decrement_position($name)
+    function decrement_position($name)
     {
         if (($current_index = array_search($name, $this->_trigger_order)) !== FALSE) {
             $previous_index = $current_index -= 1;
@@ -1987,11 +2096,11 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $this->position_of($name);
     }
-    public function position_of($name)
+    function position_of($name)
     {
         return array_search($name, $this->_trigger_order);
     }
-    public function move_to_position($name, $position_index)
+    function move_to_position($name, $position_index)
     {
         if (($current_index = $this->position_of($name)) !== FALSE) {
             $func = 'increment_position';
@@ -2004,7 +2113,7 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $this->position_of($name);
     }
-    public function move_to_start($name)
+    function move_to_start($name)
     {
         if ($index = $this->position_of($name)) {
             unset($this->_trigger_order[$index]);
@@ -2013,11 +2122,11 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $this->position_of($name);
     }
-    public function count()
+    function count()
     {
         return count($this->_trigger_order);
     }
-    public function move_to_end($name)
+    function move_to_end($name)
     {
         $index = $this->position_of($name);
         if ($index !== FALSE or $index != $this->count() - 1) {
@@ -2027,7 +2136,7 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $this->position_of($name);
     }
-    public function get_handler_for_displayed_gallery($displayed_gallery)
+    function get_handler_for_displayed_gallery($displayed_gallery)
     {
         // Find the trigger handler for the current display type.
         // First, check the display settings for the displayed gallery. Some third-party
@@ -2043,7 +2152,7 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $klass;
     }
-    public function render($view, $displayed_gallery)
+    function render($view, $displayed_gallery)
     {
         if ($klass = $this->get_handler_for_displayed_gallery($displayed_gallery)) {
             $handler = new $klass();
@@ -2056,7 +2165,7 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $view;
     }
-    public function render_trigger($name, $view, $displayed_gallery)
+    function render_trigger($name, $view, $displayed_gallery)
     {
         $retval = '';
         if (isset($this->_triggers[$name])) {
@@ -2071,7 +2180,7 @@ class C_Displayed_Gallery_Trigger_Manager
         }
         return $retval;
     }
-    public function render_triggers($view, $displayed_gallery)
+    function render_triggers($view, $displayed_gallery)
     {
         $output = FALSE;
         $css_class = esc_attr($this->css_class);
@@ -2083,15 +2192,14 @@ class C_Displayed_Gallery_Trigger_Manager
             }
         }
         if ($output) {
-            $retval[] = '</div>';
-            $retval = implode('
-', $retval);
+            $retval[] = "</div>";
+            $retval = implode("\n", $retval);
         } else {
             $retval = '';
         }
         return $retval;
     }
-    public function enqueue_resources($displayed_gallery)
+    function enqueue_resources($displayed_gallery)
     {
         if ($handler = $this->get_handler_for_displayed_gallery($displayed_gallery)) {
             wp_enqueue_style('fontawesome');
@@ -2114,7 +2222,7 @@ class C_Displayed_Gallery_Trigger_Manager
 }
 class C_Displayed_Gallery_Image_Trigger_Handler
 {
-    public function render()
+    function render()
     {
         foreach ($this->view->find('nextgen_gallery.image', true) as $image_element) {
             $image_element->append($this->manager->render_triggers($image_element, $this->displayed_gallery));
@@ -2123,15 +2231,19 @@ class C_Displayed_Gallery_Image_Trigger_Handler
 }
 class C_Displayed_Gallery_Trigger_Handler
 {
-    public function render()
+    function render()
     {
         $this->view->append($this->manager->render_triggers($this->view, $this->displayed_gallery));
     }
 }
+/**
+ * Class Mixin_Display_Type_Form
+ * @mixin C_Form
+ */
 class Mixin_Display_Type_Form extends Mixin
 {
-    public $_model = null;
-    public function initialize()
+    var $_model = null;
+    function initialize()
     {
         $this->object->implement('I_Display_Type_Form');
     }
@@ -2140,15 +2252,15 @@ class Mixin_Display_Type_Form extends Mixin
      * @throws Exception
      * @returns string
      */
-    public function get_display_type_name()
+    function get_display_type_name()
     {
-        throw new Exception(__METHOD__ . ' not implemented');
+        throw new Exception(__METHOD__ . " not implemented");
     }
     /**
      * Returns the model (display type) used in the form
      * @return stdClass
      */
-    public function get_model()
+    function get_model()
     {
         if ($this->_model == null) {
             $mapper = C_Display_Type_Mapper::get_instance();
@@ -2160,7 +2272,7 @@ class Mixin_Display_Type_Form extends Mixin
      * Returns the title of the form, which is the title of the display type
      * @returns string
      */
-    public function get_title()
+    function get_title()
     {
         return __($this->object->get_model()->title, 'nggallery');
     }
@@ -2169,7 +2281,7 @@ class Mixin_Display_Type_Form extends Mixin
      * @param array $attributes
      * @return boolean
      */
-    public function save_action($attributes = array())
+    function save_action($attributes = array())
     {
         return $this->object->get_model()->save(array('settings' => $attributes));
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.min.js
index fc1a60a358dcc6631baeb64269f2437aa52b88de..a47f5ba3299704dd4f7efa665fe905241e127274 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(4($){3.I=4(6,b){1.6=6;1.b=$(b);1.y=b;1.w=4(){9 l=\'J\'+1.6;2(r(3.z[l])==\'j\'){5 q}D{5 3.z[l]}};1.A=4(){9 8=1;$(\'m\').K(\'H\',\'a.v-C-L, a.v-C-E\',4(t){9 k=7;$(1).F(b).p(4(){2($(1).i(\'g-h-o\')!=8.6){5 7}k=q});2(!k){t.S()}D{5}3[\'c\']++;$(\'m, a\').u(\'s\',\'V\');$.U($(1).M(\'X\'),4(n){3[\'c\']--;2(3[\'c\']<=0){3[\'c\']=0;$(\'m, a\').u(\'s\',\'T\')}2(n){9 f=$(n);9 d=q;f.O(8.y).p(4(){2(d){5 7}2($(1).i(\'g-h-o\')!=8.6){5 7}d=$(1)});2(d){8.b.p(4(){2($(1).i(\'g-h-o\')!=8.6){5 7}$(1).f(d.f());5 7});$(R).P(\'N\')}}})})};9 e=1.w();2(e){2(r(e.B[\'x\'])!=\'j\'){2(G(e.B[\'x\'])){1.A()}}}2(r(3[\'W\'])==\'j\'){3[\'c\']=0}}})(Q);',60,60,'|this|if|window|function|return|displayed_gallery_id|true|self|var||container|ngg_ajax_operaton_count|replacement|displayed_gallery|html|nextgen|gallery|data|undefined|skip|index|body|response|id|each|false|typeof|cursor|event|css|ngg|get_displayed_gallery_obj|ajax_pagination|container_name|galleries|enable_ajax_pagination|display_settings|browser|else|next|parents|parseInt|click|NggPaginatedGallery|gallery_|on|prev|attr|refreshed|find|trigger|jQuery|document|preventDefault|auto|get|wait|ngg_ajax_operation_count|href'.split('|'),0,{}))
+!function(n){window.NggPaginatedGallery=function(a,e){this.displayed_gallery_id=a,this.container=n(e),this.container_name=e,this.get_displayed_gallery_obj=function(){var n="gallery_"+this.displayed_gallery_id;return"undefined"!=typeof window.galleries[n]&&window.galleries[n]},this.enable_ajax_pagination=function(){var a=this;n("body").on("click","a.ngg-browser-prev, a.ngg-browser-next",function(i){var t=!0;n(this).parents(e).each(function(){return n(this).data("nextgen-gallery-id")!=a.displayed_gallery_id||void(t=!1)}),t||(i.preventDefault(),window.ngg_ajax_operaton_count++,n("body, a").css("cursor","wait"),n.get(n(this).attr("href"),function(e){if(window.ngg_ajax_operaton_count--,window.ngg_ajax_operaton_count<=0&&(window.ngg_ajax_operaton_count=0,n("body, a").css("cursor","auto")),e){var i=n(e),t=!1;i.find(a.container_name).each(function(){return!!t||(n(this).data("nextgen-gallery-id")!=a.displayed_gallery_id||void(t=n(this)))}),t&&(a.container.each(function(){return n(this).data("nextgen-gallery-id")!=a.displayed_gallery_id||(n(this).html(t.html()),!0)}),n(document).trigger("refreshed"))}}))})};var i=this.get_displayed_gallery_obj();i&&"undefined"!=typeof i.display_settings.ajax_pagination&&parseInt(i.display_settings.ajax_pagination)&&this.enable_ajax_pagination(),"undefined"==typeof window.ngg_ajax_operation_count&&(window.ngg_ajax_operaton_count=0)}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.min.css
index 703ec6184741311a350a15f768384ee214e2ff88..f00bb5fac7a028dff256e12de1cb5d8161bd684d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.min.css
@@ -1,5 +1,4 @@
 /*!
  *  Font Awesome 4.6.1 by @davegandy - http://fontawesome.io - @fontawesome
  *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
- @font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.1');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.1') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.1') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.1') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.1') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.1#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
\ No newline at end of file
+ */.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.fa,.fa-stack{display:inline-block}.fa-fw,.fa-li{text-align:center}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.6.1);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.6.1) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff2?v=4.6.1) format('woff2'),url(../fonts/fontawesome-webfont.woff?v=4.6.1) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.6.1) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.6.1#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.css
index 1cb86a6371d1e690eb4b37ee110f142d709cfc48..f71cbc627d4f419d9a997d7ff6bfc8dd81305000 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.css
@@ -1 +1 @@
-.gallery_page_ngg_display_settings table{height:100%}.gallery_page_ngg_display_settings table tr{height:28px}.gallery_page_ngg_display_settings table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;padding-top:5px}.gallery_page_ngg_display_settings textarea{height:60px}.gallery_page_ngg_display_settings textarea,.gallery_page_ngg_display_settings input[type=text]{width:155px}.gallery_page_ngg_display_settings input[type=number]{width:75px;text-align:center}.gallery_page_ngg_display_settings select{width:155px;text-align:center}.gallery_page_ngg_display_settings select.nextgen_settings_field_width_and_unit,.gallery_page_ngg_display_settings input.nextgen_settings_field_width_and_unit{text-align:center;width:75px}.gallery_page_ngg_display_settings input.nextgen_settings_field_width_and_height{width:65px}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}
\ No newline at end of file
+.gallery_page_ngg_display_settings table{height:100%}.gallery_page_ngg_display_settings table tr{height:28px}.gallery_page_ngg_display_settings table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;padding-top:5px}.gallery_page_ngg_display_settings textarea{height:60px}.gallery_page_ngg_display_settings input[type=text],.gallery_page_ngg_display_settings textarea{width:155px}.gallery_page_ngg_display_settings input[type=number]{width:75px;text-align:center}.gallery_page_ngg_display_settings select{width:155px;text-align:center}.gallery_page_ngg_display_settings input.nextgen_settings_field_width_and_unit,.gallery_page_ngg_display_settings select.nextgen_settings_field_width_and_unit{text-align:center;width:75px}.gallery_page_ngg_display_settings input.nextgen_settings_field_width_and_height{width:65px}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.js
index fcf9098f993745ef5afd3d4c918cca6773b882ab..d3006dddb7087f33ef02b0cedd48c3163ca8e45f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('3(7($){$(\'.1\').1({5:4,2:6,8:\'e\'});$(\'d, c\').b();$(\'9.0, a.0\').0()});',15,15,'tooltip|accordion|autoHeight|jQuery|true|clearStyle|false|function|heightStyle|label|span|placeholder|textarea|input|content'.split('|'),0,{}))
+jQuery(function(t){t(".accordion").accordion({clearStyle:!0,autoHeight:!1,heightStyle:"content"}),t("input, textarea").placeholder(),t("label.tooltip, span.tooltip").tooltip()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_related_images.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_related_images.min.css
index b5700d3788b66ab5e8276b1a3ead70da506c99e1..18f55b568921cc8fb9aa57f9589927dbc36c7c3c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_related_images.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_related_images.min.css
@@ -1 +1 @@
-.ngg-related-gallery{background:#f9f9f9;border:1px solid #e0e0e0;overflow:hidden;margin-bottom:1em;margin-top:1em;padding:5px}.ngg-related-gallery img{border:1px solid #ddd;float:left;margin:0 3px;padding:2px;height:50px;width:50px}.ngg-related-gallery img:hover{border:1px solid #000}
\ No newline at end of file
+.ngg-related-gallery{background:#F9F9F9;border:1px solid #E0E0E0;overflow:hidden;margin-bottom:1em;margin-top:1em;padding:5px}.ngg-related-gallery img{border:1px solid #DDD;float:left;margin:0 3px;padding:2px;height:50px;width:50px}.ngg-related-gallery img:hover{border:1px solid #000}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.min.css
index 7a6a76173d67fb7fa1a0fdcfaa4edc0043f30354..9c65c44e46a5b3ec7b72df58571b3d51d4a62ed2 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.min.css
@@ -1 +1 @@
-.ngg-trigger-buttons{clear:both;text-align:right;font-size:12px;line-height:1em;margin:0}.ngg-trigger-buttons.hidden{display:none}.ngg-trigger-large{font-size:16px;margin:0 10px}.ngg-trigger-buttons .ngg-trigger{margin-left:.3em;cursor:pointer}.ngg-trigger-buttons .ngg-trigger:active,.ngg-trigger-buttons .ngg-trigger:focus,.ngg-trigger-buttons .ngg-trigger:visited,.ngg-trigger-buttons .ngg-trigger{color:#999}.ngg-trigger-buttons .ngg-trigger:hover{color:#333}.galleria.photocrati-nextgen_pro_horizontal_filmstrip{margin-bottom:5px}@media screen and (min-width:0) and (max-width:1024px){.ngg-trigger-buttons.mobile-hide{display:none}}
\ No newline at end of file
+.ngg-trigger-buttons{clear:both;text-align:right;font-size:12px;line-height:1em;margin:0}.ngg-trigger-buttons.hidden{display:none}.ngg-trigger-large{font-size:16px;margin:0 10px}.ngg-trigger-buttons .ngg-trigger{margin-left:.3em;cursor:pointer}.ngg-trigger-buttons .ngg-trigger,.ngg-trigger-buttons .ngg-trigger:active,.ngg-trigger-buttons .ngg-trigger:focus,.ngg-trigger-buttons .ngg-trigger:visited{color:#999}.ngg-trigger-buttons .ngg-trigger:hover{color:#333}.galleria.photocrati-nextgen_pro_horizontal_filmstrip{margin-bottom:5px}@media screen and (min-width:0px) and (max-width:1024px){.ngg-trigger-buttons.mobile-hide{display:none}}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/no_images_found.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/no_images_found.php
index 1c719662da13da2c5f088124763640b8e81e31e5..2fb202056352fc7f34a730b35ea60581d429cc3b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/no_images_found.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/no_images_found.php
@@ -1 +1 @@
-<p>no images were found</p>
+<p><?php esc_html_e('no images were found', 'nextgen-gallery'); ?></p>
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_altview_link.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_altview_link.php
index 59dfeea797d336b6615fd07038b5ed3e725e0717..cd188b0c2e11852e22c0af70caf91d5d21bd6353 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_altview_link.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_altview_link.php
@@ -13,7 +13,7 @@
 			name='<?php echo esc_attr($display_type_name); ?>[show_alternative_view_link]'
 			class='show_altview_link'
 			value='1'
-			<?php echo checked(1, intval($show_alternative_view_link)); ?>'>
+			<?php echo checked(1, intval($show_alternative_view_link)); ?>>
 		<label for='<?php echo esc_attr($display_type_name); ?>_show_altview_link'>Yes</label>
 		&nbsp;
 		<input type="radio"
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_return_link.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_return_link.php
index a19c8e69d5fc46c065a22a084445ffa015b7dd24..ac9f22d28f8983b58182572055cb090bbe7d7abc 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_return_link.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/templates/show_return_link.php
@@ -13,7 +13,7 @@
 			name='<?php echo esc_attr($display_type_name); ?>[show_return_link]'
 			class='show_return_link'
 			value='1'
-			<?php echo checked(1, intval($show_return_link)); ?>'>
+			<?php echo checked(1, intval($show_return_link)); ?>>
 		<label for='<?php echo esc_attr($display_type_name); ?>_show_return_link'>Yes</label>
 		&nbsp;
 		<input type="radio"
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php
index 9e01c4138c4e3c94235400326939e59c757843d9..9f7423764ea63a033e6b0ef1b09521196128a9af 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php
@@ -16,7 +16,7 @@ class M_NextGen_Other_Options extends C_Base_Module
 			'photocrati-nextgen_other_options',
 			'Other Options',
 			'NextGEN Gallery Others Options Page',
-			'0.8',
+			'0.9',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php
index 38549b1db72b09be849aea4d30d78617aa28d3c6..f7285194b8475c257442eb596f224d9a040a3b6f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php
@@ -1,14 +1,19 @@
 <?php
+/**
+ * Class A_Custom_Lightbox_Form
+ * @mixin C_Form
+ * @adapts I_Form using "custom_lightbox" context
+ */
 class A_Custom_Lightbox_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Lightbox_Library_Manager::get_instance()->get('custom_lightbox');
     }
     /**
      * Returns a list of fields to render on the settings page
      */
-    public function _get_field_names()
+    function _get_field_names()
     {
         return array('lightbox_library_code', 'lightbox_library_styles', 'lightbox_library_scripts');
     }
@@ -16,7 +21,7 @@ class A_Custom_Lightbox_Form extends Mixin
      * @param $lightbox
      * @return mixed
      */
-    public function _render_lightbox_library_code_field($lightbox)
+    function _render_lightbox_library_code_field($lightbox)
     {
         return $this->_render_text_field($lightbox, 'code', __('Code', 'nggallery'), $lightbox->code);
     }
@@ -24,25 +29,22 @@ class A_Custom_Lightbox_Form extends Mixin
      * @param $lightbox
      * @return mixed
      */
-    public function _render_lightbox_library_styles_field($lightbox)
+    function _render_lightbox_library_styles_field($lightbox)
     {
-        return $this->_render_textarea_field($lightbox, 'styles', __('Stylesheet URL', 'nggallery'), implode('
-', $lightbox->styles));
+        return $this->_render_textarea_field($lightbox, 'styles', __('Stylesheet URL', 'nggallery'), implode("\n", $lightbox->styles));
     }
     /**
      * @param $lightbox
      * @return mixed
      */
-    public function _render_lightbox_library_scripts_field($lightbox)
+    function _render_lightbox_library_scripts_field($lightbox)
     {
-        return $this->_render_textarea_field($lightbox, 'scripts', __('Javascript URL', 'nggallery'), implode('
-', $lightbox->scripts));
+        return $this->_render_textarea_field($lightbox, 'scripts', __('Javascript URL', 'nggallery'), implode("\n", $lightbox->scripts));
     }
-    public function _convert_to_urls($input)
+    function _convert_to_urls($input)
     {
         $retval = array();
-        $urls = explode('
-', $input);
+        $urls = explode("\n", $input);
         foreach ($urls as $url) {
             if (strpos($url, home_url()) === 0) {
                 $url = str_replace(home_url(), '', $url);
@@ -54,7 +56,7 @@ class A_Custom_Lightbox_Form extends Mixin
         }
         return $retval;
     }
-    public function save_action()
+    function save_action()
     {
         $settings = C_NextGen_Settings::get_instance();
         $modified = FALSE;
@@ -77,13 +79,18 @@ class A_Custom_Lightbox_Form extends Mixin
         }
     }
 }
+/**
+ * Class A_Image_Options_Form
+ * @mixin C_Form
+ * @adapts I_Form using "image_options" context
+ */
 class A_Image_Options_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Settings_Model::get_instance();
     }
-    public function get_title()
+    function get_title()
     {
         return __('Image Options', 'nggallery');
     }
@@ -91,7 +98,7 @@ class A_Image_Options_Form extends Mixin
      * Returns the options available for sorting images
      * @return array
      */
-    public function _get_image_sorting_options()
+    function _get_image_sorting_options()
     {
         return array(__('Custom', 'nggallery') => 'sortorder', __('Image ID', 'nggallery') => 'pid', __('Filename', 'nggallery') => 'filename', __('Alt/Title Text', 'nggallery') => 'alttext', __('Date/Time', 'nggallery') => 'imagedate');
     }
@@ -99,14 +106,14 @@ class A_Image_Options_Form extends Mixin
      * Returns the options available for sorting directions
      * @return array
      */
-    public function _get_sorting_direction_options()
+    function _get_sorting_direction_options()
     {
         return array(__('Ascending', 'nggallery') => 'ASC', __('Descending', 'nggallery') => 'DESC');
     }
     /**
      * Returns the options available for matching related images
      */
-    public function _get_related_image_match_options()
+    function _get_related_image_match_options()
     {
         return array(__('Categories', 'nggallery') => 'category', __('Tags', 'nggallery') => 'tags');
     }
@@ -115,7 +122,7 @@ class A_Image_Options_Form extends Mixin
      * already
      * @return string
      */
-    public function _create_gallery_storage_dir($gallerypath = NULL)
+    function _create_gallery_storage_dir($gallerypath = NULL)
     {
         $retval = TRUE;
         if (!$gallerypath) {
@@ -132,15 +139,15 @@ class A_Image_Options_Form extends Mixin
     /*
      * Renders the form
      */
-    public function render()
+    function render()
     {
         if (!$this->object->_create_gallery_storage_dir()) {
             $this->object->get_model()->add_error(__('Gallery path does not exist and could not be created', 'nggallery'), 'gallerypath');
         }
         $settings = $this->object->get_model();
-        return $this->render_partial('photocrati-nextgen_other_options#image_options_tab', array('gallery_path_label' => __('Where would you like galleries stored?', 'nggallery'), 'gallery_path_help' => __('Where galleries and their images are stored', 'nggallery'), 'gallery_path' => $settings->gallerypath, 'delete_image_files_label' => __('Delete Image Files?', 'nggallery'), 'delete_image_files_help' => __('When enabled, image files will be removed after a Gallery has been deleted', 'nggallery'), 'delete_image_files' => $settings->deleteImg, 'show_related_images_label' => __('Show Related Images on Posts?', 'nggallery'), 'show_related_images_help' => __('When enabled, related images will be appended to each post by matching the posts tags/categories to image tags', 'nggallery'), 'show_related_images' => $settings->activateTags, 'related_images_hidden_label' => __('(Show Customization Settings)', 'nggallery'), 'related_images_active_label' => __('(Hide Customization Settings)', 'nggallery'), 'match_related_images_label' => __('How should related images be match?', 'nggallery'), 'match_related_images' => $settings->appendType, 'match_related_image_options' => $this->object->_get_related_image_match_options(), 'max_related_images_label' => __('Maximum # of related images to display', 'nggallery'), 'max_related_images' => $settings->maxImages, 'related_images_heading_label' => __('Heading for related images', 'nggallery'), 'related_images_heading' => $settings->relatedHeading, 'sorting_order_label' => __('What\'s the default sorting method?', 'nggallery'), 'sorting_order_options' => $this->object->_get_image_sorting_options(), 'sorting_order' => $settings->galSort, 'sorting_direction_label' => __('Sort in what direction?', 'nggallery'), 'sorting_direction_options' => $this->object->_get_sorting_direction_options(), 'sorting_direction' => $settings->galSortDir, 'automatic_resize_label' => __('Automatically resize images after upload', 'nggallery'), 'automatic_resize_help' => __('It is recommended that your images be resized to be web friendly', 'nggallery'), 'automatic_resize' => $settings->imgAutoResize, 'resize_images_label' => __('What should images be resized to?', 'nggallery'), 'resize_images_help' => __('After images are uploaded, they will be resized to the above dimensions and quality', 'nggallery'), 'resized_image_width_label' => __('Width:', 'nggallery'), 'resized_image_height_label' => __('Height:', 'nggallery'), 'resized_image_quality_label' => __('Quality:', 'nggallery'), 'resized_image_width' => $settings->imgWidth, 'resized_image_height' => $settings->imgHeight, 'resized_image_quality' => $settings->imgQuality, 'backup_images_label' => __('Backup the original images?', 'nggallery'), 'backup_images_yes_label' => __('Yes'), 'backup_images_no_label' => __('No'), 'backup_images' => $settings->imgBackup), TRUE);
+        return $this->render_partial('photocrati-nextgen_other_options#image_options_tab', array('gallery_path_label' => __('Where would you like galleries stored?', 'nggallery'), 'gallery_path_help' => __('Where galleries and their images are stored', 'nggallery'), 'gallery_path' => $settings->gallerypath, 'delete_image_files_label' => __('Delete Image Files?', 'nggallery'), 'delete_image_files_help' => __('When enabled, image files will be removed after a Gallery has been deleted', 'nggallery'), 'delete_image_files' => $settings->deleteImg, 'show_related_images_label' => __('Show Related Images on Posts?', 'nggallery'), 'show_related_images_help' => __('When enabled, related images will be appended to each post by matching the posts tags/categories to image tags', 'nggallery'), 'show_related_images' => $settings->activateTags, 'related_images_hidden_label' => __('(Show Customization Settings)', 'nggallery'), 'related_images_active_label' => __('(Hide Customization Settings)', 'nggallery'), 'match_related_images_label' => __('How should related images be match?', 'nggallery'), 'match_related_images' => $settings->appendType, 'match_related_image_options' => $this->object->_get_related_image_match_options(), 'max_related_images_label' => __('Maximum # of related images to display', 'nggallery'), 'max_related_images' => $settings->maxImages, 'related_images_heading_label' => __('Heading for related images', 'nggallery'), 'related_images_heading' => $settings->relatedHeading, 'sorting_order_label' => __("What's the default sorting method?", 'nggallery'), 'sorting_order_options' => $this->object->_get_image_sorting_options(), 'sorting_order' => $settings->galSort, 'sorting_direction_label' => __('Sort in what direction?', 'nggallery'), 'sorting_direction_options' => $this->object->_get_sorting_direction_options(), 'sorting_direction' => $settings->galSortDir, 'automatic_resize_label' => __('Automatically resize images after upload', 'nggallery'), 'automatic_resize_help' => __('It is recommended that your images be resized to be web friendly', 'nggallery'), 'automatic_resize' => $settings->imgAutoResize, 'resize_images_label' => __('What should images be resized to?', 'nggallery'), 'resize_images_help' => __('After images are uploaded, they will be resized to the above dimensions and quality', 'nggallery'), 'resized_image_width_label' => __('Width:', 'nggallery'), 'resized_image_height_label' => __('Height:', 'nggallery'), 'resized_image_quality_label' => __('Quality:', 'nggallery'), 'resized_image_width' => $settings->imgWidth, 'resized_image_height' => $settings->imgHeight, 'resized_image_quality' => $settings->imgQuality, 'backup_images_label' => __('Backup the original images?', 'nggallery'), 'backup_images_yes_label' => __('Yes'), 'backup_images_no_label' => __('No'), 'backup_images' => $settings->imgBackup), TRUE);
     }
-    public function save_action($image_options)
+    function save_action($image_options)
     {
         $save = TRUE;
         if ($image_options) {
@@ -150,6 +157,27 @@ class A_Image_Options_Form extends Mixin
                 $original_dir = $fs->get_abspath($this->object->get_model()->get('gallerypath'));
                 $new_dir = $fs->get_abspath($image_options['gallerypath']);
                 $image_options['gallerypath'] = $fs->add_trailing_slash($image_options['gallerypath']);
+                // Note: the below file move is disabled because it's quite unreliable as it doesn't perform any checks
+                //       For instance changing gallery path from /wp-content to /wp-content/gallery would attempt a recursive copy and then delete ALL files under wp-content, which would be disastreus
+                #				// If the gallery path has changed...
+                #				if ($original_dir != $new_dir) {
+                #                    // Try creating the new directory
+                #                    if ($this->object->_create_gallery_storage_dir($new_dir) AND is_writable($new_dir)) {
+                #					    // Try moving files
+                #						$this->object->recursive_copy($original_dir, $new_dir);
+                #						$this->object->recursive_delete($original_dir);
+                #						// Update gallery paths
+                #						$mapper = $this->get_registry()->get_utility('I_Gallery_Mapper');
+                #						foreach ($mapper->find_all() as $gallery) {
+                #							$gallery->path = $image_options['gallerypath'] . $gallery->name;
+                #							$mapper->save($gallery);
+                #						}
+                #					}
+                #					else {
+                #						$this->get_model()->add_error("Unable to change gallery path. Insufficient filesystem permissions");
+                #						$save = FALSE;
+                #					}
+                #				}
             } elseif (isset($image_options['gallerypath'])) {
                 unset($image_options['gallerypath']);
             }
@@ -165,7 +193,7 @@ class A_Image_Options_Form extends Mixin
      * @param string $dst
      * @return boolean
      */
-    public function recursive_copy($src, $dst)
+    function recursive_copy($src, $dst)
     {
         $retval = TRUE;
         $dir = opendir($src);
@@ -193,7 +221,7 @@ class A_Image_Options_Form extends Mixin
      * @param string $dir
      * @return boolean
      */
-    public function recursive_delete($dir)
+    function recursive_delete($dir)
     {
         $retval = FALSE;
         $fp = opendir($dir);
@@ -212,17 +240,22 @@ class A_Image_Options_Form extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_Lightbox_Manager_Form
+ * @mixin C_Form
+ * @adapts I_Form using "lightbox_effects" context
+ */
 class A_Lightbox_Manager_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Settings_Model::get_instance();
     }
-    public function get_title()
+    function get_title()
     {
         return __('Lightbox Effects', 'nggallery');
     }
-    public function render()
+    function render()
     {
         $form_manager = C_Form_Manager::get_instance();
         // retrieve and render the settings forms for each library
@@ -241,7 +274,7 @@ class A_Lightbox_Manager_Form extends Mixin
         // Render container tab
         return $this->render_partial('photocrati-nextgen_other_options#lightbox_library_tab', array('lightbox_library_label' => __('What effect would you like to use?', 'nggallery'), 'libs' => C_Lightbox_Library_Manager::get_instance()->get_all(), 'selected' => $selected, 'sub_fields' => $sub_fields, 'lightbox_global' => $this->object->get_model()->thumbEffectContext), TRUE);
     }
-    public function save_action()
+    function save_action()
     {
         $settings = $this->object->get_model();
         // Ensure that a lightbox library was selected
@@ -268,30 +301,32 @@ class A_Lightbox_Manager_Form extends Mixin
         }
     }
 }
+/**
+ * Class A_Miscellaneous_Form
+ * @mixin C_Form
+ * @adapts I_Form using "miscellaneous" context
+ */
 class A_Miscellaneous_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Settings_Model::get_instance('global');
     }
-    public function get_title()
+    function get_title()
     {
         return __('Miscellaneous', 'nggallery');
     }
-    public function render()
+    function render()
     {
-        return $this->object->render_partial('photocrati-nextgen_other_options#misc_tab', array('mediarss_activated' => C_NextGen_Settings::get_instance()->useMediaRSS, 'mediarss_activated_label' => __('Add MediaRSS link?', 'nggallery'), 'mediarss_activated_help' => __('When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries', 'nggallery'), 'mediarss_activated_no' => __('No'), 'mediarss_activated_yes' => __('Yes'), 'galleries_in_feeds' => C_NextGen_Settings::get_instance()->galleries_in_feeds, 'galleries_in_feeds_label' => __('Display galleries in feeds', 'nggallery'), 'galleries_in_feeds_help' => __('NextGEN hides its gallery displays in feeds other than MediaRSS. This enables image galleries in feeds.', 'nggallery'), 'galleries_in_feeds_no' => __('No'), 'galleries_in_feeds_yes' => __('Yes'), 'cache_label' => __('Clear image cache', 'nggallery'), 'cache_confirmation' => __('Completely clear the NextGEN cache of all image modifications?
-
-Choose [Cancel] to Stop, [OK] to proceed.', 'nggallery'), 'slug_field' => $this->_render_text_field((object) array('name' => 'misc_settings'), 'router_param_slug', __('Permalink slug', 'nggallery'), $this->object->get_model()->router_param_slug), 'maximum_entity_count_field' => $this->_render_number_field((object) array('name' => 'misc_settings'), 'maximum_entity_count', __('Maximum image count', 'nggallery'), $this->object->get_model()->maximum_entity_count, __('This is the maximum limit of images that NextGEN will restrict itself to querying', 'nggallery') . ' 
- ' . __('Note: This limit will not apply to slideshow widgets or random galleries if/when those galleries specify their own image limits', 'nggallery'), FALSE, '', 1)), TRUE);
+        return $this->object->render_partial('photocrati-nextgen_other_options#misc_tab', array('mediarss_activated' => C_NextGen_Settings::get_instance()->useMediaRSS, 'mediarss_activated_label' => __('Add MediaRSS link?', 'nggallery'), 'mediarss_activated_help' => __('When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries', 'nggallery'), 'mediarss_activated_no' => __('No'), 'mediarss_activated_yes' => __('Yes'), 'galleries_in_feeds' => C_NextGen_Settings::get_instance()->galleries_in_feeds, 'galleries_in_feeds_label' => __('Display galleries in feeds', 'nggallery'), 'galleries_in_feeds_help' => __('NextGEN hides its gallery displays in feeds other than MediaRSS. This enables image galleries in feeds.', 'nggallery'), 'galleries_in_feeds_no' => __('No'), 'galleries_in_feeds_yes' => __('Yes'), 'cache_label' => __('Clear image cache', 'nggallery'), 'cache_confirmation' => __("Completely clear the NextGEN cache of all image modifications?\n\nChoose [Cancel] to Stop, [OK] to proceed.", 'nggallery'), 'slug_field' => $this->_render_text_field((object) array('name' => 'misc_settings'), 'router_param_slug', __('Permalink slug', 'nggallery'), $this->object->get_model()->router_param_slug), 'maximum_entity_count_field' => $this->_render_number_field((object) array('name' => 'misc_settings'), 'maximum_entity_count', __('Maximum image count', 'nggallery'), $this->object->get_model()->maximum_entity_count, __('This is the maximum limit of images that NextGEN will restrict itself to querying', 'nggallery') . " \n " . __('Note: This limit will not apply to slideshow widgets or random galleries if/when those galleries specify their own image limits', 'nggallery'), FALSE, '', 1)), TRUE);
     }
-    public function cache_action()
+    function cache_action()
     {
         $cache = C_Cache::get_instance();
         $cache->flush_galleries();
         C_Photocrati_Transient_Manager::flush();
     }
-    public function save_action()
+    function save_action()
     {
         if ($settings = $this->object->param('misc_settings')) {
             // The Media RSS setting is actually a local setting, not a global one
@@ -316,44 +351,57 @@ Choose [Cancel] to Stop, [OK] to proceed.', 'nggallery'), 'slug_field' => $this-
         }
     }
 }
+/**
+ * Class A_Other_Options_Controller
+ * @mixin C_NextGen_Admin_Page_Controller
+ * @adapts I_NextGen_Admin_Page using "ngg_other_options" context
+ */
 class A_Other_Options_Controller extends Mixin
 {
-    public function enqueue_backend_resources()
+    function enqueue_backend_resources()
     {
         $this->call_parent('enqueue_backend_resources');
         wp_enqueue_script('nextgen_settings_page', $this->get_static_url('photocrati-nextgen_other_options#nextgen_settings_page.js'), array('jquery-ui-accordion', 'jquery-ui-tooltip', 'wp-color-picker', 'jquery.nextgen_radio_toggle'), NGG_SCRIPT_VERSION);
         wp_enqueue_style('nextgen_settings_page', $this->get_static_url('photocrati-nextgen_other_options#nextgen_settings_page.css'), FALSE, NGG_SCRIPT_VERSION);
     }
-    public function get_page_title()
+    function get_page_title()
     {
         return __('Other Options', 'nggallery');
     }
-    public function get_required_permission()
+    function get_required_permission()
     {
         return 'NextGEN Change options';
     }
 }
+/**
+ * Class A_Other_Options_Page
+ * @mixin C_Page_Manager
+ * @adapts I_Page_Manager
+ */
 class A_Other_Options_Page extends Mixin
 {
-    public function setup()
+    function setup()
     {
         $this->object->add(NGG_OTHER_OPTIONS_SLUG, array('adapter' => 'A_Other_Options_Controller', 'parent' => NGGFOLDER, 'before' => 'ngg_pro_upgrade'));
         return $this->call_parent('setup');
     }
 }
+/**
+ * Class A_Reset_Form
+ * @mixin C_Form
+ * @adapts I_Form using "reset" context
+ */
 class A_Reset_Form extends Mixin
 {
-    public function get_title()
+    function get_title()
     {
         return __('Reset Options', 'nggallery');
     }
-    public function render()
+    function render()
     {
-        return $this->object->render_partial('photocrati-nextgen_other_options#reset_tab', array('reset_value' => __('Reset all options to default settings', 'nggallery'), 'reset_warning' => __('Replace all existing options and gallery options with their default settings', 'nggallery'), 'reset_label' => __('Reset settings', 'nggallery'), 'reset_confirmation' => __('Reset all options to default settings?
-
-Choose [Cancel] to Stop, [OK] to proceed.', 'nggallery')), TRUE);
+        return $this->object->render_partial('photocrati-nextgen_other_options#reset_tab', array('reset_value' => __('Reset all options to default settings', 'nggallery'), 'reset_warning' => __('Replace all existing options and gallery options with their default settings', 'nggallery'), 'reset_label' => __('Reset settings', 'nggallery'), 'reset_confirmation' => __("Reset all options to default settings?\n\nChoose [Cancel] to Stop, [OK] to proceed.", 'nggallery')), TRUE);
     }
-    public function reset_action()
+    function reset_action()
     {
         global $wpdb;
         // Flush the cache
@@ -368,8 +416,8 @@ Choose [Cancel] to Stop, [OK] to proceed.', 'nggallery')), TRUE);
         $settings->reset();
         $settings->destroy();
         // clear NextGEN's capabilities from the roles system
-        $capabilities = array('NextGEN Gallery overview', 'NextGEN Use TinyMCE', 'NextGEN Upload images', 'NextGEN Manage gallery', 'NextGEN Manage others gallery', 'NextGEN Manage tags', 'NextGEN Edit album', 'NextGEN Change style', 'NextGEN Change options', 'NextGEN Attach Interface');
-        $roles = array('subscriber', 'contributor', 'author', 'editor', 'administrator');
+        $capabilities = array("NextGEN Gallery overview", "NextGEN Use TinyMCE", "NextGEN Upload images", "NextGEN Manage gallery", "NextGEN Manage others gallery", "NextGEN Manage tags", "NextGEN Edit album", "NextGEN Change style", "NextGEN Change options", "NextGEN Attach Interface");
+        $roles = array("subscriber", "contributor", "author", "editor", "administrator");
         foreach ($roles as $role) {
             $role = get_role($role);
             foreach ($capabilities as $capability) {
@@ -385,19 +433,24 @@ Choose [Cancel] to Stop, [OK] to proceed.', 'nggallery')), TRUE);
         $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_type = %s", 'lightbox_library'));
         // the installation will run on the next page load; so make our own request before reloading the browser
         wp_remote_get(admin_url('plugins.php'), array('timeout' => 180, 'blocking' => true, 'sslverify' => false));
-        header('Location: ' . $_SERVER['REQUEST_URI']);
+        header('Location: ' . get_admin_url());
         throw new E_Clean_Exit();
     }
 }
+/**
+ * Class A_Roles_Form
+ * @mixin C_Form
+ * @adapts I_Form using "roles_and_capabilities" context
+ */
 class A_Roles_Form extends Mixin
 {
-    public function get_title()
+    function get_title()
     {
         return __('Roles & Capabilities', 'nggallery');
     }
-    public function render()
+    function render()
     {
-        $view = implode(DIRECTORY_SEPARATOR, array(rtrim(NGGALLERY_ABSPATH, '/\\'), 'admin', 'roles.php'));
+        $view = implode(DIRECTORY_SEPARATOR, array(rtrim(NGGALLERY_ABSPATH, "/\\"), 'admin', 'roles.php'));
         include_once $view;
         ob_start();
         nggallery_admin_roles();
@@ -406,27 +459,41 @@ class A_Roles_Form extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_Styles_Form
+ * @mixin C_Form
+ * @adapts I_Form using "styles" context
+ */
 class A_Styles_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Settings_Model::get_instance();
     }
-    public function get_title()
+    function get_title()
     {
         return __('Styles', 'nggallery');
     }
-    public function render()
+    function render()
     {
         return $this->object->render_partial('photocrati-nextgen_other_options#styling_tab', array('activateCSS_label' => __('Enable custom CSS', 'nggallery'), 'activateCSS' => $this->object->get_model()->activateCSS, 'select_stylesheet_label' => __('What stylesheet would you like to use?', 'nggallery'), 'stylesheets' => C_NextGen_Style_Manager::get_instance()->find_all_stylesheets(), 'activated_stylesheet' => $this->object->get_model()->CSSfile, 'hidden_label' => __('(Show Customization Options)', 'nggallery'), 'active_label' => __('(Hide Customization Options)', 'nggallery'), 'cssfile_contents_label' => __('File Content:', 'nggallery'), 'writable_label' => __('Changes you make to the contents will be saved to', 'nggallery'), 'readonly_label' => __('You could edit this file if it were writable', 'nggallery')), TRUE);
     }
-    public function save_action()
+    function save_action()
     {
         // Ensure that we have
         if ($settings = $this->object->param('style_settings')) {
-            $this->object->get_model()->set($settings)->save();
+            $valid = TRUE;
+            // the desired file, but users shouldn't use this to write files that don't end in .css anyway
+            $file_info = pathinfo($settings['CSSfile']);
+            if (strpos($file_info['extension'], 'css') === FALSE) {
+                $valid = FALSE;
+            }
+            // TODO: C_Page's add_error() doesn't seem to work here so we should report that we aren't saving
+            if ($valid) {
+                $this->object->get_model()->set($settings)->save();
+            }
             // Are we to modify the CSS file?
-            if ($contents = $this->object->param('cssfile_contents')) {
+            if ($valid && ($contents = $this->object->param('cssfile_contents'))) {
                 // Find filename
                 $css_file = $settings['CSSfile'];
                 $styles = C_NextGen_Style_Manager::get_instance();
@@ -438,18 +505,22 @@ class A_Styles_Form extends Mixin
 /**
  * Registers new AJAX functions for retrieving/updating
  * the contents of CSS stylesheets
+ *
+ * @mixin C_Ajax_Controller
+ * @adapts I_Ajax_Controller
  */
 class A_Stylesheet_Ajax_Actions extends Mixin
 {
     /**
      * Retrieves the contents of the CSS stylesheet specified
      */
-    public function get_stylesheet_contents_action()
+    function get_stylesheet_contents_action()
     {
         $retval = array();
         if ($this->object->_authorized_for_stylesheet_action()) {
             $styles = C_NextGen_Style_Manager::get_instance();
-            $abspath = $styles->find_selected_stylesheet_abspath($this->object->param('cssfile'));
+            $cssfile = str_replace('..', '', $this->object->param('cssfile'));
+            $abspath = $styles->find_selected_stylesheet_abspath($cssfile);
             $writepath = $styles->get_selected_stylesheet_saved_abspath($this->object->param('cssfile'));
             if (is_readable($abspath)) {
                 $retval['contents'] = file_get_contents($abspath);
@@ -457,7 +528,7 @@ class A_Stylesheet_Ajax_Actions extends Mixin
                 $retval['abspath'] = $abspath;
                 $retval['writepath'] = $writepath;
             } else {
-                $retval['error'] = 'Could not find stylesheet';
+                $retval['error'] = "Could not find stylesheet";
             }
         } else {
             $retval['error'] = 'Unauthorized';
@@ -468,42 +539,52 @@ class A_Stylesheet_Ajax_Actions extends Mixin
      * Determines if the request is authorized
      * @return boolean
      */
-    public function _authorized_for_stylesheet_action()
+    function _authorized_for_stylesheet_action()
     {
         $security = $this->get_registry()->get_utility('I_Security_Manager');
         $sec_actor = $security->get_current_actor();
         return $sec_actor->is_allowed('nextgen_edit_style');
     }
 }
+/**
+ * Class A_Thumbnail_Options_Form
+ * @mixin C_Form
+ * @adapts I_Form using "thumbnail_options" context
+ */
 class A_Thumbnail_Options_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Settings_Model::get_instance();
     }
-    public function get_title()
+    function get_title()
     {
         return __('Thumbnail Options', 'nggallery');
     }
-    public function render()
+    function render()
     {
         $settings = $this->object->get_model();
         return $this->render_partial('photocrati-nextgen_other_options#thumbnail_options_tab', array('thumbnail_dimensions_label' => __('Default thumbnail dimensions:', 'nggallery'), 'thumbnail_dimensions_help' => __('When generating thumbnails, what image dimensions do you desire?', 'nggallery'), 'thumbnail_dimensions_width' => $settings->thumbwidth, 'thumbnail_dimensions_height' => $settings->thumbheight, 'thumbnail_crop_label' => __('Set fix dimension?', 'nggallery'), 'thumbnail_crop_help' => __('Ignore the aspect ratio, no portrait thumbnails?', 'nggallery'), 'thumbnail_crop' => $settings->thumbfix, 'thumbnail_quality_label' => __('Adjust Thumbnail Quality?', 'nggallery'), 'thumbnail_quality_help' => __('When generating thumbnails, what image quality do you desire?', 'nggallery'), 'thumbnail_quality' => $settings->thumbquality, 'size_list_label' => __('Size List', 'nggallery'), 'size_list_help' => __('List of default sizes used for thumbnails and images', 'nggallery'), 'size_list' => $settings->thumbnail_dimensions), TRUE);
     }
-    public function save_action()
+    function save_action()
     {
         if ($settings = $this->object->param('thumbnail_settings')) {
             $this->object->get_model()->set($settings)->save();
         }
     }
 }
+/**
+ * Class A_Watermarking_Ajax_Actions
+ * @mixin C_Ajax_Controller
+ * @adapts I_Ajax_Controller
+ */
 class A_Watermarking_Ajax_Actions extends Mixin
 {
     /**
      * Gets the new watermark preview url based on the new settings
      * @return array
      */
-    public function get_watermark_preview_url_action()
+    function get_watermark_preview_url_action()
     {
         $security = $this->get_registry()->get_utility('I_Security_Manager');
         $sec_actor = $security->get_current_actor();
@@ -531,13 +612,18 @@ class A_Watermarking_Ajax_Actions extends Mixin
         }
     }
 }
+/**
+ * Class A_Watermarks_Form
+ * @mixin C_Form
+ * @adapts I_Form using "watermarks" context
+ */
 class A_Watermarks_Form extends Mixin
 {
-    public function get_model()
+    function get_model()
     {
         return C_Settings_Model::get_instance();
     }
-    public function get_title()
+    function get_title()
     {
         return __('Watermarks', 'nggallery');
     }
@@ -545,10 +631,10 @@ class A_Watermarks_Form extends Mixin
      * Gets all fonts installed for watermarking
      * @return array
      */
-    public function _get_watermark_fonts()
+    function _get_watermark_fonts()
     {
         $retval = array();
-        $path = implode(DIRECTORY_SEPARATOR, array(rtrim(NGGALLERY_ABSPATH, '/\\'), 'fonts'));
+        $path = implode(DIRECTORY_SEPARATOR, array(rtrim(NGGALLERY_ABSPATH, "/\\"), 'fonts'));
         foreach (scandir($path) as $filename) {
             if (strpos($filename, '.') === 0) {
                 continue;
@@ -562,7 +648,7 @@ class A_Watermarks_Form extends Mixin
      * Gets watermark sources, along with their respective fields
      * @return array
      */
-    public function _get_watermark_sources()
+    function _get_watermark_sources()
     {
         // We do this so that an adapter can add new sources
         return array(__('Using an Image', 'nggallery') => 'image', __('Using Text', 'nggallery') => 'text');
@@ -571,7 +657,7 @@ class A_Watermarks_Form extends Mixin
      * Renders the fields for a watermark source (image, text)
      * @return string
      */
-    public function _get_watermark_source_fields()
+    function _get_watermark_source_fields()
     {
         $retval = array();
         foreach ($this->object->_get_watermark_sources() as $label => $value) {
@@ -587,7 +673,7 @@ class A_Watermarks_Form extends Mixin
      * source
      * @return string
      */
-    public function _render_watermark_image_fields()
+    function _render_watermark_image_fields()
     {
         $message = __('An absolute or relative (to the site document root) file system path', 'nggallery');
         if (ini_get('allow_url_fopen')) {
@@ -600,12 +686,12 @@ class A_Watermarks_Form extends Mixin
      * source
      * @return string
      */
-    public function _render_watermark_text_fields()
+    function _render_watermark_text_fields()
     {
         $settings = $this->object->get_model();
         return $this->object->render_partial('photocrati-nextgen_other_options#watermark_text_fields', array('fonts' => $this->object->_get_watermark_fonts($settings), 'font_family_label' => __('Font Family:', 'nggallery'), 'font_family' => $settings->wmFont, 'font_size_label' => __('Font Size:', 'nggallery'), 'font_size' => $settings->wmSize, 'font_color_label' => __('Font Color:', 'nggallery'), 'font_color' => strpos($settings->wmColor, '#') === 0 ? $settings->wmColor : "#{$settings->wmColor}", 'watermark_text_label' => __('Text:', 'nggallery'), 'watermark_text' => $settings->wmText, 'opacity_label' => __('Opacity:', 'nggallery'), 'opacity' => $settings->wmOpaque), TRUE);
     }
-    public function _get_preview_image()
+    function _get_preview_image()
     {
         $registry = $this->object->get_registry();
         $storage = C_Gallery_Storage::get_instance();
@@ -616,13 +702,13 @@ class A_Watermarks_Form extends Mixin
         $abspath = $image ? $storage->get_image_abspath($image, $size) : NULL;
         return array('url' => $url, 'abspath' => $abspath);
     }
-    public function render()
+    function render()
     {
         $settings = $this->get_model();
         $image = $this->object->_get_preview_image();
         return $this->render_partial('photocrati-nextgen_other_options#watermarks_tab', array('notice' => __('Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone.', 'nggallery'), 'watermark_source_label' => __('How will you generate a watermark?', 'nggallery'), 'watermark_sources' => $this->object->_get_watermark_sources(), 'watermark_fields' => $this->object->_get_watermark_source_fields($settings), 'watermark_source' => $settings->wmType, 'position_label' => __('Position:', 'nggallery'), 'position' => $settings->wmPos, 'offset_label' => __('Offset:', 'nggallery'), 'offset_x' => $settings->wmXpos, 'offset_y' => $settings->wmYpos, 'hidden_label' => __('(Show Customization Options)', 'nggallery'), 'active_label' => __('(Hide Customization Options)', 'nggallery'), 'thumbnail_url' => $image['url'], 'preview_label' => __('Preview of saved settings:', 'nggallery'), 'refresh_label' => __('Refresh preview image', 'nggallery'), 'refresh_url' => $settings->ajax_url), TRUE);
     }
-    public function save_action()
+    function save_action()
     {
         if ($settings = $this->object->param('watermark_options')) {
             $this->object->get_model()->set($settings)->save();
@@ -633,12 +719,16 @@ class A_Watermarks_Form extends Mixin
         }
     }
 }
+/**
+ * Class C_Settings_Model
+ * @mixin Mixin_Validation
+ */
 class C_Settings_Model extends C_Component
 {
     /**
      * @var C_NextGen_Settings_Base
      */
-    public $wrapper = NULL;
+    var $wrapper = NULL;
     static $_instances = array();
     static function get_instance($context = FALSE)
     {
@@ -648,7 +738,7 @@ class C_Settings_Model extends C_Component
         }
         return self::$_instances[$context];
     }
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Validation');
@@ -658,20 +748,20 @@ class C_Settings_Model extends C_Component
             $this->wrapper = C_NextGen_Settings::get_instance();
         }
     }
-    public function __get($key)
+    function __get($key)
     {
         return $this->wrapper->get($key);
     }
-    public function __set($key, $value)
+    function __set($key, $value)
     {
         $this->wrapper->set($key, $value);
         return $this;
     }
-    public function __isset($key)
+    function __isset($key)
     {
         return $this->wrapper->is_set($key);
     }
-    public function __call($method, $args)
+    function __call($method, $args)
     {
         if (!$this->get_mixin_providing($method)) {
             return call_user_func_array(array(&$this->wrapper, $method), $args);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.css
index f1295d3248a29f58997024d96b906740a157af29..a3e1f096f5b85b20fd51d74ad8130d74da65725e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.css
@@ -1 +1 @@
-.gallery_page_ngg_other_options table{width:80%;height:100%}.gallery_page_ngg_other_options table tr td:first-child{vertical-align:top}.gallery_page_ngg_other_options table.image_options{width:100%}.gallery_page_ngg_other_options table td.column1{width:240px}.gallery_page_ngg_other_options table td.column2{width:200px}.gallery_page_ngg_other_options textarea{height:100px}.gallery_page_ngg_other_options textarea,.gallery_page_ngg_other_options input[type=text]{width:100%}.gallery_page_ngg_other_options .image_options td{padding-bottom:8px}.column_wrapper{width:100%;padding-right:7px}#max_related_images{width:auto}#image_width,#image_height{width:40px}#thumbnail_dimensions_width,#thumbnail_dimensions_height{width:100px}.nextgen-thumb-size-custom br{display:none}.gallery_page_ngg_other_options select.thumbnail_dimensions{width:300px}.description_row{position:relative}.description_row .description{width:auto;position:absolute;margin-top:-10px;margin-bottom:5px;z-index:10}.full-width{width:100%}.right-aligned{text-align:right}label.align-to-top,td.align-to-top{vertical-align:top}#lightbox_library_advanced_settings td{text-align:right}#cssfile_contents{background:#f9f9f9;font-family:Consolas,Monaco,monospace;font-size:12px;width:100%;height:300px;outline:0}#writable_identicator{display:inline}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#nextgen_settings_preview_refresh{display:block}
\ No newline at end of file
+.gallery_page_ngg_other_options table tr td:first-child,label.align-to-top,td.align-to-top{vertical-align:top}#lightbox_library_advanced_settings td,.right-aligned{text-align:right}.gallery_page_ngg_other_options table{width:80%;height:100%}.gallery_page_ngg_other_options table.image_options{width:100%}.gallery_page_ngg_other_options table td.column1{width:240px}.gallery_page_ngg_other_options table td.column2{width:200px}.gallery_page_ngg_other_options textarea{height:100px}.gallery_page_ngg_other_options input[type=text],.gallery_page_ngg_other_options textarea{width:100%}.gallery_page_ngg_other_options .image_options td{padding-bottom:8px}.column_wrapper{width:100%;padding-right:7px}#max_related_images{width:auto}#image_height,#image_width{width:40px}#thumbnail_dimensions_height,#thumbnail_dimensions_width{width:100px}.nextgen-thumb-size-custom br{display:none}.gallery_page_ngg_other_options select.thumbnail_dimensions{width:300px}.description_row{position:relative}.description_row .description{width:auto;position:absolute;margin-top:-10px;margin-bottom:5px;z-index:10}.full-width{width:100%}#cssfile_contents{background:#F9F9F9;font-family:Consolas,Monaco,monospace;font-size:12px;width:100%;height:300px;outline:0}#writable_identicator{display:inline}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#nextgen_settings_preview_refresh{display:block}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.js
index 07e72bfd8943531a1d7a0868377e447ef010dd8e..8c45e9245f76164fbd097f24a95d09087f943e13 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1b(4($){$(\'1c.z\').z();$(\'19.s, 16.s\').s();$(\'#17\').8(4(){3 k=$(2).P(\':i\').6();3 j=\'18\'+k;$(\'.1d\').E(4(){9($(2).5(\'j\')!=j)$(2).D(\'1e\')});$(\'#\'+j).G()}).8();$(\'#u\').5(\'v\',\'I\'+$(\'#l\').6()+\'y\');$(\'#l\').8(4(){$(\'#\'+$(\'#u\').5(\'v\')).g(\'1l\',\'\').F(\'f\');9(!$(\'#\'+$(2).6()).1j(\'f\')){$(\'#\'+$(2).6()).J(\'f\')}$(\'#u\').5(\'v\',\'I\'+$(\'#l\').6()+\'y\').B()});$(\'#l\').8(4(){3 k=$(2).6();$(\'.13\').E(4(){9(k==0){$(2).D().F(\'f\')}o{$(2).G().J(\'f\')}})}).8();$(\'#X\').B(4(H){H.11();3 m=$(2).10(\'m:Y\');3 b=$(2);3 q=$(b).h();$(b).5(\'a\',\'a\').h(\'Z...\');$(\'r\').g(\'t\',\'1h\');$.1C({1n:m.5(\'1S\'),w:$(2).d(\'1I-w\'),d:m.1H()+"&N=1E",1F:\'1L\',1Q:4(d){3 K=b.1R();3 c=d.1P;n=c.1O(\'?\');9(n!=-1){c=c.1M(0,n)}K.5(\'c\',c+\'?\'+1K 1D().1s());$(b).L(\'a\').h(q);$(\'r\').g(\'t\',\'A\')},p:4(1t,1r,1q){$(b).L(\'a\').h(q);$(\'r\').g(\'t\',\'A\')}});1B R});$(\'1z[1y="1w[1x]"]\').C(\'1\',$(\'#M-1G\')).C(\'1\',$(\'#M-1A\')).1v(\'8\',4(){3 $2=$(2);9($2.6()==\'0\'){$(\'#x\').Q(\'a\',1u);$(\'#1p\').1o(\'1N\')}o{$(\'#x\').Q(\'a\',R)}});$(\'#1J\').8(4(){3 i=$(2).P(\':i\');3 d={N:\'12\',14:i.6()};$.U(S.w,d,4(7){9(T 7!==\'V\')7=W.1m(7);$(\'#x\').6(7.p?7.p:7.15);3 e=$(\'#1g\');9(7.1f)e.O(e.5(\'1i\')+\' \'+7.1k);o e.O(e.5(\'1a\'))})}).8()});',62,117,'||this|var|function|attr|val|res|change|if|disabled|self|src|data|status|hidden|css|html|selected|id|value|watermark_source|form|queryPos|else|error|orig_html|body|tooltip|cursor|watermark_customization|rel|url|cssfile_contents|_source|select2|default|click|nextgen_radio_toggle_tr|fadeOut|each|addClass|fadeIn|event|watermark_|removeClass|img|removeAttr|tr_photocrati|action|text|find|prop|false|photocrati_ajax|typeof|post|object|JSON|nextgen_settings_preview_refresh|first|Processing|parents|preventDefault|get_stylesheet_contents|watermark_field|cssfile|contents|span|lightbox_library|lightbox_library_|label|readonly_label|jQuery|select|lightbox_library_settings|fast|writable|writable_identicator|wait|writable_label|hasClass|writepath|display|parse|type|hide|advanced_stylesheet_form|code|err|getTime|xob|true|bind|style_settings|activateCSS|name|input|nextgen_styles_show_more|return|ajax|Date|get_watermark_preview_url|dataType|nextgen_styles_activated_stylesheet|serialize|refresh|activated_stylesheet|new|json|substring|slow|indexOf|thumbnail_url|success|prev|method'.split('|'),0,{}))
+jQuery(function(t){t("select.select2").select2(),t("label.tooltip, span.tooltip").tooltip(),t("#lightbox_library").change(function(){var e=t(this).find(":selected").val(),a="lightbox_library_"+e;t(".lightbox_library_settings").each(function(){t(this).attr("id")!=a&&t(this).fadeOut("fast")}),t("#"+a).fadeIn()}).change(),t("#watermark_customization").attr("rel","watermark_"+t("#watermark_source").val()+"_source"),t("#watermark_source").change(function(){t("#"+t("#watermark_customization").attr("rel")).css("display","").addClass("hidden"),t("#"+t(this).val()).hasClass("hidden")||t("#"+t(this).val()).removeClass("hidden"),t("#watermark_customization").attr("rel","watermark_"+t("#watermark_source").val()+"_source").click()}),t("#watermark_source").change(function(){var e=t(this).val();t(".watermark_field").each(function(){0==e?t(this).fadeOut().addClass("hidden"):t(this).fadeIn().removeClass("hidden")})}).change(),t("#nextgen_settings_preview_refresh").click(function(e){e.preventDefault();var a=t(this).parents("form:first"),r=t(this),s=t(r).html();return t(r).attr("disabled","disabled").html("Processing..."),t("body").css("cursor","wait"),t.ajax({type:a.attr("method"),url:t(this).data("refresh-url"),data:a.serialize()+"&action=get_watermark_preview_url",dataType:"json",success:function(e){var a=r.prev(),i=e.thumbnail_url;queryPos=i.indexOf("?"),queryPos!=-1&&(i=i.substring(0,queryPos)),a.attr("src",i+"?"+(new Date).getTime()),t(r).removeAttr("disabled").html(s),t("body").css("cursor","default")},error:function(e,a,i){t(r).removeAttr("disabled").html(s),t("body").css("cursor","default")}}),!1}),t('input[name="style_settings[activateCSS]"]').nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_styles_activated_stylesheet")).nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_styles_show_more")).bind("change",function(){var e=t(this);"0"==e.val()?(t("#cssfile_contents").prop("disabled",!0),t("#advanced_stylesheet_form").hide("slow")):t("#cssfile_contents").prop("disabled",!1)}),t("#activated_stylesheet").change(function(){var e=t(this).find(":selected"),a={action:"get_stylesheet_contents",cssfile:e.val()};t.post(photocrati_ajax.url,a,function(e){"object"!=typeof e&&(e=JSON.parse(e)),t("#cssfile_contents").val(e.error?e.error:e.contents);var a=t("#writable_identicator");e.writable?a.text(a.attr("writable_label")+" "+e.writepath):a.text(a.attr("readonly_label"))})}).change()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermarks_tab.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermarks_tab.php
index d48cb9b94428a17e01389605c2aa3e860bf2fb2f..54b6fb6c6bcf9030f32775d97fe6eade541b05c7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermarks_tab.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermarks_tab.php
@@ -41,7 +41,7 @@
                     <td><input type="radio" name="watermark_options[wmPos]" value="botRight"  <?php checked('botRight',  $position); ?>/></td>
                 </tr>
             </table>
-        </td
+        </td>
     </tr>
 
     <tr class="watermark_field hidden">
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php
index c76b67adb2f25cd76f368bcf7e3586d77a28bc9f..fa7d2710399781804ed6c0df02f156cb6cb47551 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php
@@ -12,7 +12,7 @@ class M_NextGen_Pagination extends C_Base_Module
             'photocrati-nextgen_pagination',
             "Pagination",
             "Provides pagination for display types",
-            '0.3',
+            '0.4',
             "https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/",
             "Photocrati Media",
             "https://www.imagely.com"
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/package.module.nextgen_pagination.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/package.module.nextgen_pagination.php
index fec3e048f592132b4cc198c76851d4ad8b9e8cd8..777cb0984ee2e9b3e1817df3d27104c5e5a2443b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/package.module.nextgen_pagination.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/package.module.nextgen_pagination.php
@@ -31,7 +31,7 @@ class Mixin_NextGen_Basic_Pagination extends Mixin
         }
         $return = array('prev' => '', 'next' => '', 'output' => '');
         if ($maxElement <= 0) {
-            $return['output'] = '<div class=\'ngg-clear\'></div>';
+            $return['output'] = "<div class='ngg-clear'></div>";
             return $return;
         }
         $total = $totalElement;
@@ -64,7 +64,7 @@ class Mixin_NextGen_Basic_Pagination extends Mixin
             }
             $return['output'] = "<div class='ngg-navigation'>{$r}</div>";
         } else {
-            $return['output'] = '<div class=\'ngg-clear\'></div>';
+            $return['output'] = "<div class='ngg-clear'></div>";
         }
         return $return;
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/static/style.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/static/style.min.css
index 1f90793f311d2ac9ca917bc551a20fc32b14af57..fcbae4b6e2348274a3f1318e22db9b7de8d9ec71 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/static/style.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/static/style.min.css
@@ -1 +1 @@
-.ngg-navigation{font-size:.9em !important;clear:both !important;display:block !important;padding-top:15px;padding-bottom:3px;text-align:center}.ngg-navigation span{font-weight:bold;margin:0 6px}.ngg-navigation a.page-numbers,.ngg-navigation a.next,.ngg-navigation a.prev,.ngg-navigation span.page-numbers,.ngg-navigation span.next,.ngg-navigation span.prev{border:1px solid #ddd;margin-right:3px;padding:3px 8px;text-decoration:none}.ngg-navigation a.page-numbers:hover,.ngg-navigation a.next:hover,.ngg-navigation a.prev:hover,.ngg-navigation span.page-numbers:hover,.ngg-navigation span.next:hover,.ngg-navigation span.prev:hover{background-color:#06c;color:#fff !important;text-decoration:none !important}.ngg-clear{clear:both}
\ No newline at end of file
+.ngg-navigation{font-size:.9em!important;clear:both!important;display:block!important;padding-top:15px;padding-bottom:3px;text-align:center}.ngg-navigation span{font-weight:700;margin:0 6px}.ngg-navigation a.next,.ngg-navigation a.page-numbers,.ngg-navigation a.prev,.ngg-navigation span.next,.ngg-navigation span.page-numbers,.ngg-navigation span.prev{border:1px solid #DDD;margin-right:3px;padding:3px 8px;text-decoration:none}.ngg-navigation a.next:hover,.ngg-navigation a.page-numbers:hover,.ngg-navigation a.prev:hover,.ngg-navigation span.next:hover,.ngg-navigation span.page-numbers:hover,.ngg-navigation span.prev:hover{background-color:#06C;color:#FFF!important;text-decoration:none!important}.ngg-clear{clear:both}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php
index 5580a128b3bfd5f1c80db096a605cae6520950cc..fef37a231f08e01a8893d66b45f5b2f083e6cd9e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php
@@ -14,7 +14,7 @@ class M_NextGen_Pro_Upgrade extends C_Base_Module
             'photocrati-nextgen_pro_upgrade',
             'NextGEN Pro Page',
             'NextGEN Gallery Pro Upgrade Page',
-            '0.5',
+            '0.6',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/package.module.nextgen_pro_upgrade.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/package.module.nextgen_pro_upgrade.php
index 832125d22c9fb9472aafcbeb2be295252f3bc6bd..06297b45eedeabce52595915444f7c813684b491 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/package.module.nextgen_pro_upgrade.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/package.module.nextgen_pro_upgrade.php
@@ -1,7 +1,13 @@
 <?php
+/**
+ * Class A_NextGen_Pro_Plus_Upgrade_Page
+ * @mixin C_Page_Manager
+ * @adapts I_Page_Manager
+ * @todo merge with A_NextGen_Pro_Upgrade_Page class
+ */
 class A_NextGen_Pro_Plus_Upgrade_Page extends Mixin
 {
-    public function setup()
+    function setup()
     {
         // Using include() to retrieve the is_plugin_active() is apparently The WordPress Way(tm)..
         include_once ABSPATH . 'wp-admin/includes/plugin.php';
@@ -19,22 +25,27 @@ class A_NextGen_Pro_Plus_Upgrade_Page extends Mixin
         return $this->call_parent('setup');
     }
 }
+/**
+ * Class A_NextGen_Pro_Upgrade_Controller
+ * @mixin C_NextGen_Admin_Page_Controller
+ * @adapts I_NextGen_Admin_Page_Controller using "ngg_pro_upgrade" context
+ */
 class A_NextGen_Pro_Upgrade_Controller extends Mixin
 {
-    public function enqueue_backend_resources()
+    function enqueue_backend_resources()
     {
         $this->call_parent('enqueue_backend_resources');
         wp_enqueue_style('nextgen_pro_upgrade_page', $this->get_static_url('photocrati-nextgen_pro_upgrade#style.css'), FALSE, NGG_SCRIPT_VERSION);
     }
-    public function get_page_title()
+    function get_page_title()
     {
         return __('Upgrade to Pro', 'nggallery');
     }
-    public function get_required_permission()
+    function get_required_permission()
     {
         return 'NextGEN Change options';
     }
-    public function get_i18n_strings()
+    function get_i18n_strings()
     {
         $i18n = new stdClass();
         $i18n->plus_title = __('Upgrade to NextGEN Plus or Pro!', 'nggallery');
@@ -47,7 +58,7 @@ class A_NextGen_Pro_Upgrade_Controller extends Mixin
         $i18n->click = __('CLICK TO LEARN MORE:', 'nggallery');
         return $i18n;
     }
-    public function index_action()
+    function index_action()
     {
         $this->object->enqueue_backend_resources();
         $key = C_Photocrati_Transient_Manager::create_key('nextgen_pro_upgrade_page', 'html');
@@ -67,9 +78,15 @@ class A_NextGen_Pro_Upgrade_Controller extends Mixin
         }
     }
 }
+/**
+ * Class A_NextGen_Pro_Upgrade_Page
+ * @mixin C_NextGen_Admin_Page_Controller
+ * @adapts I_NextGen_Admin_Page_Controller
+ * @todo merge with A_NextGen_Pro_Plus_Upgrade_Page class
+ */
 class A_NextGen_Pro_Upgrade_Page extends Mixin
 {
-    public function setup()
+    function setup()
     {
         // Using include() to retrieve the is_plugin_active() is apparently The WordPress Way(tm)..
         include_once ABSPATH . 'wp-admin/includes/plugin.php';
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/static/style.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/static/style.min.css
index 94c2652f228ce2f7012148e6b04addb1a1c85fb7..4fd65c729d11b25858f0b4f1e4a306bf0f431eed 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/static/style.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/static/style.min.css
@@ -1 +1 @@
-#nextgen_pro_upgrade_page.wrap.about-wrap{margin:60px auto}#nextgen_pro_upgrade_page .centered{text-align:center;margin:1em}#nextgen_pro_upgrade_page img{width:600px;max-width:100%}#nextgen_pro_upgrade_page a.button-primary{font-size:.8em;height:2.8em;line-height:1.6em;padding:.5em 1em .5em 1em}
\ No newline at end of file
+#nextgen_pro_upgrade_page.wrap.about-wrap{margin:60px auto}#nextgen_pro_upgrade_page .centered{text-align:center;margin:1em}#nextgen_pro_upgrade_page img{width:600px;max-width:100%}#nextgen_pro_upgrade_page a.button-primary{font-size:.8em;height:2.8em;line-height:1.6em;padding:.5em 1em}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php
index 4ffbd9786cdb0bda46ed80e0c04ad0e610913f67..66d88af6150db587b06b06c471c214e5a40a639b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php
@@ -1,11 +1,5 @@
 <?php
 
-/***
-{
-	Module:	photocrati-nextgen_settings
-}
-***/
-
 class M_NextGen_Settings extends C_Base_Module
 {
 	/**
@@ -17,7 +11,7 @@ class M_NextGen_Settings extends C_Base_Module
 			'photocrati-nextgen_settings',
 			'NextGEN Gallery Settings',
 			'Provides central management for NextGEN Gallery settings',
-			'0.9',
+			'0.15',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/package.module.nextgen_settings.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/package.module.nextgen_settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3d9bbc7f3711e882119cd6b3af051245d859d04
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/package.module.nextgen_settings.php
@@ -0,0 +1 @@
+<?php
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php
index a52c83dac4476f26ba9e35d02b4d00d042e4bce4..eb29b7452a888e7fc4af0cbba1ca7337e9d99d28 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php
@@ -14,7 +14,7 @@ class M_NextGen_XmlRpc extends C_Base_Module
 			'photocrati-nextgen_xmlrpc',
 			'NextGEN Gallery XML-RPC',
 			'Provides an XML-RPC API for NextGEN Gallery',
-			'0.4',
+			'0.6',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/package.module.nextgen_xmlrpc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/package.module.nextgen_xmlrpc.php
index 820dbcbee769f21a873d7bf137e1cdc06f47bb39..16fc2dcd37111bd03493da8ca3b08628716d8226 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/package.module.nextgen_xmlrpc.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/package.module.nextgen_xmlrpc.php
@@ -1,18 +1,20 @@
 <?php
 /**
  * Provides AJAX actions for JSON API interface
+ * @mixin C_Ajax_Controller
+ * @adapts I_Ajax_Controller
  */
 class A_NextGen_API_Ajax extends Mixin
 {
-    public $nextgen_api = NULL;
-    public function get_nextgen_api()
+    var $nextgen_api = NULL;
+    function get_nextgen_api()
     {
         if (is_null($this->nextgen_api)) {
             $this->nextgen_api = C_NextGen_API::get_instance();
         }
         return $this->nextgen_api;
     }
-    public function get_nextgen_api_path_list_action()
+    function get_nextgen_api_path_list_action()
     {
         $api = $this->get_nextgen_api();
         $username = $this->object->param('q');
@@ -73,7 +75,7 @@ class A_NextGen_API_Ajax extends Mixin
         }
         return $response;
     }
-    public function enqueue_nextgen_api_task_list_action()
+    function enqueue_nextgen_api_task_list_action()
     {
         $api = $this->get_nextgen_api();
         $username = $this->object->param('q');
@@ -160,7 +162,7 @@ class A_NextGen_API_Ajax extends Mixin
         }
         return $response;
     }
-    public function execute_nextgen_api_task_list_action()
+    function execute_nextgen_api_task_list_action()
     {
         $api = $this->get_nextgen_api();
         $job_list = $api->get_job_list();
@@ -198,6 +200,10 @@ class A_NextGen_API_Ajax extends Mixin
         return $response;
     }
 }
+/**
+ * Class C_NextGen_API
+ * @implements I_NextGen_API
+ */
 class C_NextGen_API extends C_Component
 {
     const CRON_KEY = 'nextgen.api.task_list';
@@ -214,7 +220,7 @@ class C_NextGen_API extends C_Component
     const INFO_JOB_LIST_UNFINISHED = 6003;
     const INFO_EXECUTION_LOCKED = 6004;
     public static $_instances = array();
-    public $_start_time;
+    var $_start_time;
     public static function get_instance($context = false)
     {
         if (!isset(self::$_instances[$context])) {
@@ -222,20 +228,20 @@ class C_NextGen_API extends C_Component
         }
         return self::$_instances[$context];
     }
-    public function define($context = false)
+    function define($context = false)
     {
         parent::define($context);
         $this->implement('I_NextGen_API');
         $this->_start_time = time();
     }
-    public function should_stop_execution()
+    function should_stop_execution()
     {
         $timeout = defined('NGG_API_JOB_HANDLER_TIMEOUT') ? intval(NGG_API_JOB_HANDLER_TIMEOUT) : intval(ini_get('max_execution_time')) - 3;
         $timeout = $timeout > 0 ? $timeout : 27;
         /* most hosts have a limit of 30 seconds execution time, so 27 should be a safe default */
         return time() - $this->_start_time >= $timeout;
     }
-    public function is_execution_locked()
+    function is_execution_locked()
     {
         $lock_time = get_option('ngg_api_execution_lock', 0);
         if ($lock_time == 0) {
@@ -250,7 +256,7 @@ class C_NextGen_API extends C_Component
         }
         return true;
     }
-    public function set_execution_locked($locked)
+    function set_execution_locked($locked)
     {
         if ($locked) {
             update_option('ngg_api_execution_lock', time());
@@ -258,11 +264,11 @@ class C_NextGen_API extends C_Component
             update_option('ngg_api_execution_lock', 0);
         }
     }
-    public function get_job_list()
+    function get_job_list()
     {
         return get_option('ngg_api_job_list');
     }
-    public function add_job($job_data, $app_config, $task_list)
+    function add_job($job_data, $app_config, $task_list)
     {
         $job_list = $this->get_job_list();
         $job_id = uniqid();
@@ -274,7 +280,7 @@ class C_NextGen_API extends C_Component
         update_option('ngg_api_job_list', $job_list);
         return $job_id;
     }
-    public function _update_job($job_id, $job)
+    function _update_job($job_id, $job)
     {
         $job_list = $this->get_job_list();
         if (isset($job_list[$job_id])) {
@@ -282,7 +288,7 @@ class C_NextGen_API extends C_Component
             update_option('ngg_api_job_list', $job_list);
         }
     }
-    public function remove_job($job_id)
+    function remove_job($job_id)
     {
         $job_list = $this->get_job_list();
         if (isset($job_list[$job_id])) {
@@ -290,7 +296,7 @@ class C_NextGen_API extends C_Component
             update_option('ngg_api_job_list', $job_list);
         }
     }
-    public function get_job($job_id)
+    function get_job($job_id)
     {
         $job_list = $this->get_job_list();
         if (isset($job_list[$job_id])) {
@@ -298,7 +304,7 @@ class C_NextGen_API extends C_Component
         }
         return null;
     }
-    public function get_job_data($job_id)
+    function get_job_data($job_id)
     {
         $job = $this->get_job($job_id);
         if ($job != null) {
@@ -306,7 +312,7 @@ class C_NextGen_API extends C_Component
         }
         return null;
     }
-    public function get_job_task_list($job_id)
+    function get_job_task_list($job_id)
     {
         $job = $this->get_job($job_id);
         if ($job != null) {
@@ -314,7 +320,7 @@ class C_NextGen_API extends C_Component
         }
         return null;
     }
-    public function set_job_task_list($job_id, $task_list)
+    function set_job_task_list($job_id, $task_list)
     {
         $job = $this->get_job($job_id);
         if ($job != null) {
@@ -324,7 +330,7 @@ class C_NextGen_API extends C_Component
         }
         return false;
     }
-    public function get_job_status_file($job_id)
+    function get_job_status_file($job_id)
     {
         $job = $this->get_job($job_id);
         if ($job != null) {
@@ -332,7 +338,7 @@ class C_NextGen_API extends C_Component
         }
         return null;
     }
-    public function create_filesystem_access($args, $method = null)
+    function create_filesystem_access($args, $method = null)
     {
         // taken from wp-admin/includes/file.php but with modifications
         if (!$method && isset($args['connection_type']) && 'ssh' == $args['connection_type'] && extension_loaded('ssh2') && function_exists('stream_get_contents')) {
@@ -384,18 +390,19 @@ class C_NextGen_API extends C_Component
                 return $this->create_filesystem_access($args, 'ftpsockets');
             }
             return false;
+            //There was an error connecting to the server.
         }
         // Set the permission constants if not already set.
         if (!defined('FS_CHMOD_DIR')) {
-            define('FS_CHMOD_DIR', fileperms(ABSPATH) & 511 | 493);
+            define('FS_CHMOD_DIR', fileperms(ABSPATH) & 0777 | 0755);
         }
         if (!defined('FS_CHMOD_FILE')) {
-            define('FS_CHMOD_FILE', fileperms(ABSPATH . 'index.php') & 511 | 420);
+            define('FS_CHMOD_FILE', fileperms(ABSPATH . 'index.php') & 0777 | 0644);
         }
         return $wp_filesystem;
     }
     // returns an actual scalar ID based on parametric ID (e.g. a parametric ID could represent the query ID from another task)
-    public function get_query_id($id, &$task_list)
+    function get_query_id($id, &$task_list)
     {
         $task_id = $id;
         if (is_object($task_id) || is_array($task_id)) {
@@ -413,7 +420,7 @@ class C_NextGen_API extends C_Component
         return $id;
     }
     // returns an actual scalar ID based on parametric ID (e.g. a parametric ID could represent the resulting object ID from another task)
-    public function get_object_id($id, &$result_list)
+    function get_object_id($id, &$result_list)
     {
         $task_id = $id;
         if (is_object($task_id) || is_array($task_id)) {
@@ -430,7 +437,7 @@ class C_NextGen_API extends C_Component
         }
         return $id;
     }
-    public function handle_job($job_id, $job_data, $app_config, $task_list)
+    function handle_job($job_id, $job_data, $app_config, $task_list)
     {
         $job_user = $job_data['user'];
         $task_count = count($task_list);
@@ -529,7 +536,7 @@ class C_NextGen_API extends C_Component
                         $error = null;
                         if ($gallery != null) {
                             if ($task_type == 'gallery_remove') {
-                                if (!$gallery->destroy()) {
+                                if (!$mapper->destroy($gallery, true)) {
                                     $error = __('Failed to remove gallery (%1$s).', 'nggallery');
                                 }
                             } else {
@@ -583,7 +590,7 @@ class C_NextGen_API extends C_Component
                                                 $image_id = null;
                                             }
                                             $image_error = null;
-                                            if ($image_action == 'delete') {
+                                            if ($image_action == "delete") {
                                                 // image was deleted
                                                 if ($ngg_image != null) {
                                                     $settings = C_NextGen_Settings::get_instance();
@@ -620,11 +627,13 @@ class C_NextGen_API extends C_Component
                                                         $image_error = $e->getMessage . __(' (%1$s).', 'nggallery');
                                                     } catch (E_No_Image_Library_Exception $e) {
                                                         $error = __('No image library present, image uploads will fail (%1$s).', 'nggallery');
+                                                        // no point in continuing if the image library is not present but we don't break here to ensure that all images are processed (otherwise they'd be processed in further fruitless handle_job calls)
                                                     } catch (E_InsufficientWriteAccessException $e) {
                                                         $image_error = __('Inadequate system permissions to write image (%1$s).', 'nggallery');
                                                     } catch (E_InvalidEntityException $e) {
                                                         $image_error = __('Requested image with id (%2$s) doesn\'t exist (%1$s).', 'nggallery');
                                                     } catch (E_EntityNotFoundException $e) {
+                                                        // gallery doesn't exist - already checked above so this should never happen
                                                     }
                                                     // delete temporary image
                                                     $wp_fs->delete($image_path);
@@ -839,10 +848,14 @@ class C_NextGen_API extends C_Component
         }
     }
 }
+/**
+ * Class C_NextGen_API_XMLRPC
+ * @implements I_NextGen_API_XMLRPC
+ */
 class C_NextGen_API_XMLRPC extends C_Component
 {
     public static $_instances = array();
-    public function define($context = false)
+    function define($context = false)
     {
         parent::define($context);
         $this->implement('I_NextGen_API_XMLRPC');
@@ -858,7 +871,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Gets the version of NextGEN Gallery installed
      * @return string
      */
-    public function get_version()
+    function get_version()
     {
         return array('version' => NGG_PLUGIN_VERSION);
     }
@@ -868,7 +881,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * @param $password
      * @return bool|WP_Error|WP_User
      */
-    public function _login($username, $password, $blog_id = 1)
+    function _login($username, $password, $blog_id = 1)
     {
         $retval = FALSE;
         if (!is_a($user_obj = wp_authenticate($username, $password), 'WP_Error')) {
@@ -880,7 +893,7 @@ class C_NextGen_API_XMLRPC extends C_Component
         }
         return $retval;
     }
-    public function _can_manage_gallery($gallery_id_or_obj, $check_upload_capability = FALSE)
+    function _can_manage_gallery($gallery_id_or_obj, $check_upload_capability = FALSE)
     {
         $retval = FALSE;
         // Get the gallery object, if we don't have it already
@@ -906,7 +919,7 @@ class C_NextGen_API_XMLRPC extends C_Component
         }
         return $retval;
     }
-    public function _add_gallery_properties($gallery)
+    function _add_gallery_properties($gallery)
     {
         if (is_object($gallery)) {
             $image_mapper = C_Image_Mapper::get_instance();
@@ -916,7 +929,7 @@ class C_NextGen_API_XMLRPC extends C_Component
             // his plugin
             $gallery->gid = (string) $gallery->gid;
             // Set other gallery properties
-            $image_counter = array_pop($image_mapper->select('DISTINCT COUNT(*) as counter')->where(array('galleryid = %d', $gallery->gid))->run_query(FALSE, FALSE, TRUE));
+            $image_counter = array_pop($image_mapper->select('DISTINCT COUNT(*) as counter')->where(array("galleryid = %d", $gallery->gid))->run_query(FALSE, FALSE, TRUE));
             $gallery->counter = $image_counter->counter;
             $gallery->abspath = $storage->get_gallery_abspath($gallery);
         } else {
@@ -928,7 +941,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Returns a single image object
      * @param $args (blog_id, username, password, pid)
      */
-    public function get_image($args, $return_model = FALSE)
+    function get_image($args, $return_model = FALSE)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -969,7 +982,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Returns a collection of images
      * @param $args (blog_id, username, password, gallery_id
      */
-    public function get_images($args)
+    function get_images($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1006,7 +1019,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      *			  o int image_id  (optional)
      * @return image
      */
-    public function upload_image($args)
+    function upload_image($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1039,7 +1052,7 @@ class C_NextGen_API_XMLRPC extends C_Component
                         $image->thumbPath = $storage->get_thumb_abspath($image);
                         $retval = $image->get_entity();
                     } else {
-                        $retval = new IXR_Error(500, 'Could not upload image');
+                        $retval = new IXR_Error(500, "Could not upload image");
                     }
                 } else {
                     $retval = new IXR_Error(403, "You don't have permission to upload to gallery #{$image->galleryid}");
@@ -1054,7 +1067,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Edits an image object
      * @param $args (blog_id, username, password, image_id, alttext, description, exclude, other_properties
      */
-    public function edit_image($args)
+    function edit_image($args)
     {
         $alttext = strval($args[4]);
         $description = strval($args[5]);
@@ -1081,7 +1094,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Deletes an existing image from a gallery
      * @param $args (blog_id, username, password, image_id)
      */
-    public function delete_image($args)
+    function delete_image($args)
     {
         $retval = $this->get_image($args, TRUE);
         if (!$retval instanceof IXR_Error) {
@@ -1093,7 +1106,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Creates a new gallery
      * @param $args (blog_id, username, password, title)
      */
-    public function create_gallery($args)
+    function create_gallery($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1108,10 +1121,10 @@ class C_NextGen_API_XMLRPC extends C_Component
                 if (($gallery = $mapper->create(array('title' => $title))) && $gallery->save()) {
                     $retval = $gallery->id();
                 } else {
-                    $retval = new IXR_Error(500, 'Unable to create gallery');
+                    $retval = new IXR_Error(500, "Unable to create gallery");
                 }
             } else {
-                $retval = new IXR_Error(403, 'Sorry, but you must be able to manage galleries. Check your roles/capabilities.');
+                $retval = new IXR_Error(403, "Sorry, but you must be able to manage galleries. Check your roles/capabilities.");
             }
         }
         return $retval;
@@ -1120,7 +1133,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Edits an existing gallery
      * @param $args (blog_id, username, password, gallery_id, name, title, description, preview_pic_id)
      */
-    public function edit_gallery($args)
+    function edit_gallery($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1149,7 +1162,7 @@ class C_NextGen_API_XMLRPC extends C_Component
                     unset($gallery->abspath);
                     $retval = $gallery->save();
                 } else {
-                    $retval = new IXR_Error(403, 'You don\'t have permission to modify this gallery');
+                    $retval = new IXR_Error(403, "You don't have permission to modify this gallery");
                 }
             } else {
                 $retval = new IXR_Error(404, "Gallery #{$gallery_id} doesn't exist");
@@ -1161,7 +1174,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Returns all galleries
      * @param $args (blog_id, username, password)
      */
-    public function get_galleries($args)
+    function get_galleries($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1188,7 +1201,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Gets a single gallery instance
      * @param $args (blog_id, username, password, gallery_id)
      */
-    public function get_gallery($args, $return_model = FALSE)
+    function get_gallery($args, $return_model = FALSE)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1215,7 +1228,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Deletes a gallery
      * @param $args (blog_id, username, password, gallery_id)
      */
-    public function delete_gallery($args)
+    function delete_gallery($args)
     {
         $retval = $this->get_gallery($args, TRUE);
         if (!$retval instanceof IXR_Error and is_object($retval)) {
@@ -1227,7 +1240,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Creates a new album
      * @param $args (blog_id, username, password, title, previewpic, description, galleries
      */
-    public function create_album($args)
+    function create_album($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1248,7 +1261,7 @@ class C_NextGen_API_XMLRPC extends C_Component
                 if ($album->save()) {
                     $retval = $album->id();
                 } else {
-                    $retval = new IXR_Error(500, 'Unable to create album');
+                    $retval = new IXR_Error(500, "Unable to create album");
                 }
             }
         }
@@ -1259,7 +1272,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * @param $args (blog_id, username, password)
      * @return IXR_Error
      */
-    public function get_albums($args)
+    function get_albums($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1282,7 +1295,7 @@ class C_NextGen_API_XMLRPC extends C_Component
                     $retval[$album->{$album->id_field}] = (array) $album;
                 }
             } else {
-                $retval = new IXR_Error(403, 'Sorry, you must be able to manage albums');
+                $retval = new IXR_Error(403, "Sorry, you must be able to manage albums");
             }
         }
         return $retval;
@@ -1291,7 +1304,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Gets a single album
      * @param $args (blog_id, username, password, album_id)
      */
-    public function get_album($args, $return_model = FALSE)
+    function get_album($args, $return_model = FALSE)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1315,7 +1328,7 @@ class C_NextGen_API_XMLRPC extends C_Component
                     $retval = FALSE;
                 }
             } else {
-                $retval = new IXR_Error(403, 'Sorry, you must be able to manage albums');
+                $retval = new IXR_Error(403, "Sorry, you must be able to manage albums");
             }
         }
         return $retval;
@@ -1324,7 +1337,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Deletes an existing album
      * @param $args (blog_id, username, password, album_id)
      */
-    public function delete_album($args)
+    function delete_album($args)
     {
         $retval = $this->get_album($args, TRUE);
         if (!$retval instanceof IXR_Error) {
@@ -1336,7 +1349,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      * Edit an existing album
      * @param $args (blog_id, username, password, album_id, name, preview pic id, description, galleries)
      */
-    public function edit_album($args)
+    function edit_album($args)
     {
         $retval = $this->get_album($args, TRUE);
         if (!$retval instanceof IXR_Error) {
@@ -1359,7 +1372,7 @@ class C_NextGen_API_XMLRPC extends C_Component
      *
      * @return IXR_Error|int attachment id
      */
-    public function set_post_thumbnail($args)
+    function set_post_thumbnail($args)
     {
         $retval = new IXR_Error(403, 'Invalid username or password');
         $blog_id = intval($args[0]);
@@ -1372,15 +1385,9 @@ class C_NextGen_API_XMLRPC extends C_Component
             if (current_user_can('edit_post', $post_ID)) {
                 $retval = C_Gallery_Storage::get_instance()->set_post_thumbnail($post_ID, $image_id);
             } else {
-                $retval = new IXR_Error(403, 'Sorry but you need permission to do this');
+                $retval = new IXR_Error(403, "Sorry but you need permission to do this");
             }
         }
         return $retval;
     }
-}
-interface I_NextGen_API
-{
-}
-interface I_NextGen_API_XMLRPC
-{
 }
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/jquery.ui.tabs.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/jquery.ui.tabs.min.css
index 0586303c354b2ac583935d8f70a6fa2534b783a8..024ff0be775bad493bc4863c340aca1e288b45b7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/jquery.ui.tabs.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/jquery.ui.tabs.min.css
@@ -1 +1 @@
-@media projection,screen{.ui-tabs-hide{display:none}}@media print{.ui-tabs-nav{display:none}}#slider{border-color:#ebebeb #ccc #ccc #ebebeb;border-style:solid;border-width:1px;margin:15px 15% 0 15px;padding:2px}#tabs{display:block;background:#f1f1f1 none repeat scroll 0;font-size:14px;overflow:hidden}.ui-tabs-nav{list-style:none;margin:0;padding:0 0 0 10px}.ui-tabs-nav:after{display:block;clear:both;content:" "}.ui-tabs-nav li{float:left;padding:6px 5px;min-width:84px;margin:2px 2px 0 1px !important;text-decoration:none;list-style:none}.ui-tabs-nav a,.ui-tabs-nav a span{display:block;padding:0 1px}.ui-tabs-nav a{margin:1px 0 0;padding-left:0;color:#2583ad;line-height:1.2;text-align:center;text-decoration:none;white-space:nowrap;outline:0}.ui-tabs-nav .ui-tabs-selected{background:#6d6d6d url(../images/menu-bits.gif) repeat-x scroll left top;border-color:#6d6d6d;color:#fff;text-shadow:0 -1px 0 #666;-moz-border-radius-topright:6px;-khtml-border-top-right-radius:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-topleft:6px;-khtml-border-top-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px}.ui-tabs-selected a,.ui-tabs-selected a:hover{color:#fff !important}.ui-tabs-nav .ui-tabs-selected a,.ui-tabs-nav .ui-tabs-selected a:hover{position:relative;top:1px;z-index:2;margin-top:0}.ui-tabs-nav li a:hover{color:#d54e21}.ui-tabs-nav a span{width:64px;min-width:64px;height:18px;min-height:18px;padding-top:6px;padding-right:0}*>.ui-tabs-nav a span{width:auto;height:auto}.ui-tabs-nav .ui-tabs-selected a span{padding-bottom:1px}.ui-tabs-nav .ui-tabs-selected a,.ui-tabs-nav a:hover,.ui-tabs-nav a:focus,.ui-tabs-nav a:active{background-position:100% -150px}.ui-tabs-nav a,.ui-tabs-nav .ui-tabs-disabled a:hover,.ui-tabs-nav .ui-tabs-disabled a:focus,.ui-tabs-nav .ui-tabs-disabled a:active{background-position:100% -100px}.ui-tabs-nav .ui-tabs-selected a span,.ui-tabs-nav a:hover span,.ui-tabs-nav a:focus span,.ui-tabs-nav a:active span{background-position:0 -50px}.ui-tabs-nav a span,.ui-tabs-nav .ui-tabs-disabled a:hover span,.ui-tabs-nav .ui-tabs-disabled a:focus span,.ui-tabs-nav .ui-tabs-disabled a:active span{background-position:0 0}.ui-tabs-nav .ui-tabs-selected a:link,.ui-tabs-nav .ui-tabs-selected a:visited,.ui-tabs-nav .ui-tabs-disabled a:link,.ui-tabs-nav .ui-tabs-disabled a:visited{cursor:text}.ui-tabs-nav a:hover,.ui-tabs-nav a:focus,.ui-tabs-nav a:active,.ui-tabs-nav .ui-tabs-unselect a:hover,.ui-tabs-nav .ui-tabs-unselect a:focus,.ui-tabs-nav .ui-tabs-unselect a:active{cursor:pointer}.ui-tabs-disabled{opacity:.4;filter:alpha(opacity=40)}.ui-tabs-panel{border-top:1px solid #97a5b0 !important;padding:1em 8px;background:#fff;border:0 !important;height:100% !important;margin:0 !important;overflow:visible !important}.ui-tabs-panel a{display:inline}* html .ui-tabs-nav{display:inline-block}*:first-child+html .ui-tabs-nav{display:inline-block}
\ No newline at end of file
+@media projection,screen{.ui-tabs-hide{display:none}}@media print{.ui-tabs-nav{display:none}}#slider{border-color:#EBEBEB #ccc #ccc #ebebeb;border-style:solid;border-width:1px;margin:15px 15% 0 15px;padding:2px}#tabs{display:block;background:0 #F1F1F1;font-size:14px;overflow:hidden}.ui-tabs-nav{list-style:none;margin:0;padding:0 0 0 10px}.ui-tabs-nav:after{display:block;clear:both;content:" "}.ui-tabs-nav li{float:left;padding:6px 5px;min-width:84px;margin:2px 2px 0 1px!important;text-decoration:none;list-style:none}.ui-tabs-nav a,.ui-tabs-nav a span{display:block;padding:0 1px}.ui-tabs-nav a{margin:1px 0 0;padding-left:0;color:#2583AD;line-height:1.2;text-align:center;text-decoration:none;white-space:nowrap;outline:0}.ui-tabs-nav .ui-tabs-selected{background:url(../images/menu-bits.gif) left top repeat-x #6D6D6D;border-color:#6D6D6D;color:#FFF;text-shadow:0 -1px 0 #666;-moz-border-radius-topright:6px;-khtml-border-top-right-radius:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-topleft:6px;-khtml-border-top-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px}.ui-tabs-selected a,.ui-tabs-selected a:hover{color:#FFF!important}.ui-tabs-nav .ui-tabs-selected a,.ui-tabs-nav .ui-tabs-selected a:hover{position:relative;top:1px;z-index:2;margin-top:0}.ui-tabs-nav li a:hover{color:#D54E21}.ui-tabs-nav a span{width:64px;min-width:64px;height:18px;min-height:18px;padding-top:6px;padding-right:0}*>.ui-tabs-nav a span{width:auto;height:auto}.ui-tabs-nav .ui-tabs-selected a span{padding-bottom:1px}.ui-tabs-nav .ui-tabs-selected a,.ui-tabs-nav a:active,.ui-tabs-nav a:focus,.ui-tabs-nav a:hover{background-position:100% -150px}.ui-tabs-nav .ui-tabs-disabled a:active,.ui-tabs-nav .ui-tabs-disabled a:focus,.ui-tabs-nav .ui-tabs-disabled a:hover,.ui-tabs-nav a{background-position:100% -100px}.ui-tabs-nav .ui-tabs-selected a span,.ui-tabs-nav a:active span,.ui-tabs-nav a:focus span,.ui-tabs-nav a:hover span{background-position:0 -50px}.ui-tabs-nav .ui-tabs-disabled a:active span,.ui-tabs-nav .ui-tabs-disabled a:focus span,.ui-tabs-nav .ui-tabs-disabled a:hover span,.ui-tabs-nav a span{background-position:0 0}.ui-tabs-nav .ui-tabs-disabled a:link,.ui-tabs-nav .ui-tabs-disabled a:visited,.ui-tabs-nav .ui-tabs-selected a:link,.ui-tabs-nav .ui-tabs-selected a:visited{cursor:text}.ui-tabs-nav .ui-tabs-unselect a:active,.ui-tabs-nav .ui-tabs-unselect a:focus,.ui-tabs-nav .ui-tabs-unselect a:hover,.ui-tabs-nav a:active,.ui-tabs-nav a:focus,.ui-tabs-nav a:hover{cursor:pointer}.ui-tabs-disabled{opacity:.4;filter:alpha(opacity=40)}.ui-tabs-panel{border-top:1px solid #97a5b0!important;padding:1em 8px;background:#fff;border:none!important;height:100%!important;margin:0!important;overflow:visible!important}.ui-tabs-panel a{display:inline}* html .ui-tabs-nav{display:inline-block}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.min.css
index aa416894540cd87d36b56a488ab474307e38ab39..93a9ace78cfa00067d1dd54186ff2e18e3570dd5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.min.css
@@ -1 +1 @@
-#icon-nextgen-gallery{background:url("../images/nextgen_32_grey.png") no-repeat scroll 1px 1px transparent}
\ No newline at end of file
+#icon-nextgen-gallery{background:url(../images/nextgen_32_grey.png) 1px 1px no-repeat}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.min.css
index c8123e475dbab50828ae5bb93a8cd7841bb78924..f7d06471488ff78fdf5c7d1b0cb90c111940b12e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.min.css
@@ -1 +1 @@
-#colorSelector{background:transparent url(../images/select.png) repeat scroll 0 0;height:36px;position:relative;width:36px}#colorSelector div{background:transparent url(../images/select.png) repeat scroll center center;height:30px;left:3px;position:absolute;top:3px;width:30px}
\ No newline at end of file
+#colorSelector{background:url(../images/select.png);height:36px;position:relative;width:36px}#colorSelector div{background:url(../images/select.png) center center;height:30px;left:3px;position:absolute;top:3px;width:30px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.min.css
index 548f5ac5e50aac5745477e17584660b8bc0058ea..e6c8036e240ec4bd395247129726fbc9c2238b35 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.min.css
@@ -1 +1 @@
-.imageBox,.imageBoxHighlighted{width:130px;height:160px;float:left}.imageBox_theImage{width:110px;height:125px;background-position:center;background-repeat:no-repeat;margin:0 auto;margin-bottom:2px}.imageBox .imageBox_theImage{border:1px solid #DDD;padding:2px}.imageBoxHighlighted .imageBox_theImage{border:3px solid #316ac5;padding:0}.imageBoxHighlighted span{background-color:#316ac5;color:#fff;padding:2px}.imageBox_label{text-align:center;font-family:arial;font-size:11px;padding-top:2px;margin:0 auto}#insertionMarker{height:150px;width:6px;position:absolute}#insertionMarkerLine{width:6px;height:145px}#insertionMarker img{float:left}#dragDropContent{opacity:.4;filter:alpha(opacity=40);position:absolute;z-index:10;display:none}
\ No newline at end of file
+.imageBox,.imageBoxHighlighted{width:130px;height:160px;float:left}.imageBox_theImage{width:110px;height:125px;background-position:center;background-repeat:no-repeat;margin:0 auto 2px}.imageBox .imageBox_theImage{border:1px solid #DDD;padding:2px}.imageBoxHighlighted .imageBox_theImage{border:3px solid #316AC5;padding:0}.imageBoxHighlighted span{background-color:#316AC5;color:#FFF;padding:2px}.imageBox_label{text-align:center;font-family:arial;font-size:11px;padding-top:2px;margin:0 auto}#insertionMarker{height:150px;width:6px;position:absolute}#insertionMarkerLine{width:6px;height:145px}#insertionMarker img{float:left}#dragDropContent{opacity:.4;filter:alpha(opacity=40);position:absolute;z-index:10;display:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css
index fdb0ca935e9c1b141a7eb0e4eac2961678e37325..ab4174e037a71c32719df2014640f3874d459a6d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css
@@ -29,6 +29,14 @@
 	width:24px;
 }
 
+#ngg-gallery-wizard {
+	min-height: auto;
+}
+
+#ngg-gallery-wizard a {
+	font-weight: bold;
+}
+
 #gallerydiv h3 {
 	margin-left: 10px;
 }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..eb5f286c7027d5ae686358e284b29f456d643e97
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.min.css
@@ -0,0 +1 @@
+#gallerydiv span.toggle-indicator:hover,.show_details,div#poststuff #gallerydiv{cursor:pointer}#iframely h2.title{display:none}#newversion{border-color:#CCC;border-style:solid;border-width:1px;margin-right:7px;margin-top:10px;padding:2px}.ngg-dashboard-widget ul.settings span{padding-left:10px;color:#2583AD;font-weight:700}.ngg-overview .postbox .handlediv{float:right;height:24px;width:24px}#ngg-gallery-wizard{min-height:auto}#ngg-gallery-wizard a{font-weight:700}#gallerydiv h3{margin-left:10px}#gallerydiv span.toggle-indicator{font-size:2em;line-height:2em}.warning{color:#9F6000;background-color:#FEEFB3;border:1px solid;margin:5px 0;padding:5px}#donator_message,#wm-preview{border-style:solid;border-width:1px}#donator_message{background-color:#BDE5F8;border-color:#00529B;-moz-border-radius-bottomleft:3px;-moz-border-radius-bottomright:3px;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;margin:5px 15px 2px;padding:0 .6em}#wm-preview h3,.wm-table tr{background:0 #F9F9F9}#donator_message p{line-height:1;margin:.5em 0;padding:2px 2px 10px}#donator_message span{padding-top:10px;float:right}#plugin_check img{float:right}#plugin_check p.message{font-size:90%;color:#666}.swfupload{position:absolute;z-index:1;vertical-align:top}.ngg-options th{width:22%}a.switch-expert{text-decoration:none}#wm-preview{float:right;font-size:90%;width:35%;border-color:#EBEBEB #ccc #ccc #ebebeb;margin-bottom:10px;margin-left:10px;margin-right:8px;padding:2px}#wm-preview h3{font-size:14px;font-weight:700;margin:0 0 10px;padding:8px 5px}.wm-table td,.wm-table th{border-bottom:8px solid #FFF;padding:10px}#wm-position{width:100%;margin-left:40px}.wm-table{border-collapse:collapse;margin-top:1em;width:60%;clear:none}.wm-table td{line-height:20px;margin-bottom:9px}.wm-table th{text-align:left}p#ngg-inlinebutton{float:right;margin:0;position:relative;top:-25pt}#gallery_fields{width:100%}#gallery_fields td{padding:5px;min-width:105px}#gallery_fields input[type=text],#gallery_fields select,#gallery_fields textarea{min-width:220px;width:99%}#ngg-listimages .row_actions,#ngg-listimages .row_actions td{border-top:none;padding-top:0;padding-bottom:0}#ngg-listimages .row-actions{padding-left:0;margin-bottom:-2px;position:relative;bottom:4px}#ngg-listimages .iedit,#ngg-listimages .iedit td,#ngg-listimages .iedit th{border:none}#ngg-listimages .iedit td{padding-top:8px}#ngg-listimages .column select{width:100%}#ngg-listimages .column-1 input{margin:0 0 0 8px}#ngg-listimages .column-1,#ngg-listimages .column-2{width:4%;min-width:33px}#ngg-listimages .column-3{min-width:80px;width:10%}#ngg-listimages .column-3 .thumb{max-height:80px;max-width:80px}#ngg-listimages .column-4{width:22%;max-width:220px}#ngg-listimages .column-4 .meta{font-size:11px}#ngg-listimages .column-4 label input[type=checkbox]{position:relative;top:-2px}#ngg-listimages .column-5 input[type=text],#ngg-listimages .column-5 textarea,#ngg-listimages .column-6 textarea{width:100%}#ngg-listimages .column-5 textarea{height:57px}#ngg-listimages .column-6 textarea{height:80px}div .progressborder{border:1px solid #DDD;display:block;height:30px;background-color:#464646;width:100%;margin-top:15px;margin-bottom:15px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div .progressbar{border:none;display:block;height:30px;background-color:#D54E21;width:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div .progressbar span{display:inline;position:absolute;color:#fff;font-weight:700;padding:5px 0 0 5px}.show_details{height:16px;line-height:20px;overflow:hidden;min-width:8em;padding:3px}.show_details span{border-bottom:1px solid #999;white-space:pre}.show_details:hover{height:auto;overflow:visible;border:1px solid #999}.albumnav select[name=act_album]{width:150px}.albumnav span{padding-left:50px}#editalbum select[name=pageid]{width:95%}div .groupItem{cursor:move;width:295px;padding:5px;line-height:1.5}div .innerhandle{background-color:#FBFBFB}.groupItem .item_top{background-color:#2683AE;color:#FFF;font-weight:700;line-height:28px;height:28px;padding:0 5px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.groupItem .album_obj{background-color:#D54E21}.groupItem .item_top a{color:#FFF;float:right;text-decoration:none}.groupItem .item_top a:hover{color:#FFF}.itemContent{border-color:#DFDFDF;border-style:none solid solid;border-width:0 1px 1px;padding:2px 0 20px 2px}.itemContent p{border:0;margin:0;padding:0}.inlinepicture{float:left;display:inline;margin:0;padding:0 3px 1px}.inlinepicture img{margin:3px;max-height:60px}.sort_placeholder{border:1px dashed #bba!important;margin:5px;background:#F9F9F9}.container{margin-top:10px}.target-album{margin:10px 685px 10px 10px}.widget-right{float:right;margin:0 10px;width:315px}.widget-holder{min-height:400px;padding-top:1px}.target{background-color:#F1F1F1}div.widget-top h3{text-align:center;line-height:25px;margin:0;padding:5px 12px;font-size:13px}div.widget-top{text-shadow:0 1px 0 #FFF;background-repeat:repeat-x;background-position:0 0;font-size:13px}.ui-autocomplete-start{background-position:99% center}#sortGallery{position:relative}p#sortButton{margin:0;position:absolute;right:0;top:0}.imageBox,.imageBoxHighlighted{width:130px;height:160px;float:left;overflow:hidden;text-overflow:ellipsis;padding:5px}.imageBox_theImage{width:110px;height:125px;background-position:center;background-repeat:no-repeat;margin:0 auto 2px}.imageBox_label{text-align:center;font-family:arial;font-size:11px;padding-top:2px;margin:0 auto}#insertionMarker{height:150px;width:6px;position:absolute}#insertionMarkerLine{width:6px;height:145px}#insertionMarker img{float:left}#dragDropContent{opacity:.4;filter:alpha(opacity=40);position:absolute;z-index:10;display:none}.error_inline{background:0 #FFEBE8;border:1px solid #C00;margin:5px auto;padding:10px}.ngg-list{font-size:11px;margin-left:15px;list-style-position:inside;list-style-type:disc}#ngg-manage-images-items-per-page-label{float:right;line-height:30px;margin-right:5px}#ngg-manage-images-items-per-page{float:right;margin-right:5px}#adminmenu .wp-submenu a[href*=ngg_pro_upgrade]{color:#76a934}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..a2b9cf64037cd131ebd6bb5b96d1ffa585fc4a6b
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.min.css
@@ -0,0 +1 @@
+.ngg_wrap .auto_list{width:98%;margin:3px 0;padding:3px 5px}.ngg_wrap .list_tags{width:240px;vertical-align:top}.ngg_wrap .forms_manage{vertical-align:top}.ngg_wrap .forms_manage h3{margin-bottom:5px}.ngg_wrap .forms_manage .form-table{margin-top:0}.ngg_wrap .sort_order h3{margin:0}.ngg_wrap #ajax_area_tagslist ul{list-style:square;margin:10px 0 10px 20px;padding:0}.ngg_wrap #ajax_area_tagslist ul li{margin:0;padding:0;line-height:1.4}.ngg_wrap #ajax_area_tagslist ul li span{cursor:pointer}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/css/jquery.Jcrop.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/css/jquery.Jcrop.min.css
index d04dbd7b2f7b402db30f51a35b5b5e040b48b55f..70dd7006939db0ba3ac0844a77ed9d2973e0b2be 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/css/jquery.Jcrop.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/css/jquery.Jcrop.min.css
@@ -1 +1 @@
-.jcrop-holder{text-align:left}.jcrop-vline,.jcrop-hline{font-size:0;position:absolute;background:white url('Jcrop.gif') top left repeat}.jcrop-vline{height:100%;width:1px !important}.jcrop-hline{width:100%;height:1px !important}.jcrop-handle{font-size:1px;width:7px !important;height:7px !important;border:1px #eee solid;background-color:#333;*width:9px;*height:9px;}.jcrop-tracker{width:100%;height:100%}.custom .jcrop-vline,.custom .jcrop-hline{background:yellow}.custom .jcrop-handle{border-color:black;background-color:#c7bb00;-moz-border-radius:3px;-webkit-border-radius:3px}
\ No newline at end of file
+.jcrop-holder{text-align:left}.jcrop-hline,.jcrop-vline{font-size:0;position:absolute;background:url(Jcrop.gif) top left #fff}.jcrop-vline{height:100%;width:1px!important}.jcrop-hline{width:100%;height:1px!important}.jcrop-handle{font-size:1px;width:7px!important;height:7px!important;border:1px solid #eee;background-color:#333}.jcrop-tracker{width:100%;height:100%}.custom .jcrop-hline,.custom .jcrop-vline{background:#ff0}.custom .jcrop-handle{border-color:#000;background-color:#C7BB00;-moz-border-radius:3px;-webkit-border-radius:3px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/js/jquery.Jcrop.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/js/jquery.Jcrop.min.js
index 2058c750b4c9f6c7cb21075c8caddb865f9840a0..2cc8bfc4053388c8c29ead2f154167c7ac3f2cb6 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/js/jquery.Jcrop.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/Jcrop/js/jquery.Jcrop.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(7($){$.1B=7(M,P){g M=M,P=P;d(1G(M)!==\'2P\')M=$(M)[0];d(1G(P)!==\'2P\')P={};d(!(\'2p\'1j P)){P.2p=$.1X.2b?O:F;d($.1X.2b&&$.1X.5r.5u(\'.\')[0]==\'8\')P.2p=F}d(!(\'2z\'1j P))P.2z=$.1X.2b?O:F;g 46={2p:O,4x:\'5z\',1p:3w,3g:\'5w\',3Q:.6,4g:.4,4c:.5,5y:5,4d:9,4b:5,5A:14,2I:0,2z:F,4h:F,4l:F,3J:F,4k:F,47:0,48:0,49:8,4J:20,4I:3,2Y:F,2V:F,3G:F,3B:[0,0],2v:[0,0],2i:[0,0],30:7(){},2W:7(){}};g j=46;2y(P);g $1t=$(M);g $J=$1t.5s().5B(\'5N\').B({1a:\'1c\'});$J.R($1t.R());$J.V($1t.V());$1t.5O($J).2l();4E($J,j.47,j.48);g L=$J.R(),K=$J.V(),$12=$(\'<12 />\').R(L).V(K).1p(2g(\'4Z\')).B({1a:\'52\',3i:j.3g}).4W($1t).1A($J);d(j.1p)$12.1p(j.1p);g $3k=$(\'<J />\').3q(\'2d\',$J.3q(\'2d\')).B(\'1a\',\'1c\').R(L).V(K);g $2S=$(\'<12 />\').R(1D(11)).V(1D(11)).B({1r:4T,1a:\'1c\',4O:\'4P\'}).1A($3k);g $1u=$(\'<12 />\').R(1D(11)).V(1D(11)).B(\'1r\',54);g $2n=$(\'<12 />\').B({1a:\'1c\',1r:5h}).4w($J).1A($2S,$1u);g 1Z=j.49;g $1i=3A().R(L+(1Z*2)).V(K+(1Z*2)).B({1a:\'1c\',T:E(-1Z),S:E(-1Z),1r:3T}).3e(4B);g 1W,1U,1S,1O;g 13,Z,5b=F;g 21=2D($J),1R,34,5t,3x,3b;g G=7(){g m=0,q=0,A=0,u=0,18,17;7 1z(z){g z=3M(z);A=m=z[0];u=q=z[1]};7 1s(z){g z=3M(z);18=z[0]-A;17=z[1]-u;A=z[0];u=z[1]};7 3c(){k[18,17]};7 1Y(2T){g 18=2T[0],17=2T[1];d(0>m+18)18-=18+m;d(0>q+17)17-=17+q;d(K<u+17)17+=K-(u+17);d(L<A+18)18+=L-(A+18);m+=18;A+=18;q+=17;u+=17};7 23(U){g c=Y();1K(U){D\'1w\':k[c.A,c.y];D\'16\':k[c.x,c.y];D\'2e\':k[c.A,c.u];D\'1M\':k[c.x,c.u]}};7 Y(){d(!j.2I)k 43();g 15=j.2I,24=j.2i[0]/13,5a=j.2i[1]/Z,1C=j.2v[0]/13,3y=j.2v[1]/Z,2a=A-m,28=u-q,3u=Q.1h(2a),3t=Q.1h(28),44=3u/3t,C,I;d(1C==0){1C=L*10}d(3y==0){3y=K*10}d(44<15){I=u;w=3t*15;C=2a<0?m-w:w+m;d(C<0){C=0;h=Q.1h((C-m)/15);I=28<0?q-h:h+q}X d(C>L){C=L;h=Q.1h((C-m)/15);I=28<0?q-h:h+q}}X{C=A;h=3u/15;I=28<0?q-h:q+h;d(I<0){I=0;w=Q.1h((I-q)*15);C=2a<0?m-w:w+m}X d(I>K){I=K;w=Q.1h(I-q)*15;C=2a<0?m-w:w+m}}d(C>m){d(C-m<24){C=m+24}X d(C-m>1C){C=m+1C}d(I>q){I=q+(C-m)/15}X{I=q-(C-m)/15}}X d(C<m){d(m-C<24){C=m-24}X d(m-C>1C){C=m-1C}d(I>q){I=q+(m-C)/15}X{I=q-(m-C)/15}}d(C<0){m-=C;C=0}X d(C>L){m-=C-L;C=L}d(I<0){q-=I;I=0}X d(I>K){q-=I-K;I=K}k 5i=3o(1N(m,q,C,I))};7 3M(p){d(p[0]<0)p[0]=0;d(p[1]<0)p[1]=0;d(p[0]>L)p[0]=L;d(p[1]>K)p[1]=K;k[p[0],p[1]]};7 1N(m,q,A,u){g 3O=m,3K=A,3N=q,3L=u;d(A<m){3O=A;3K=m}d(u<q){3N=u;3L=q}k[Q.1P(3O),Q.1P(3N),Q.1P(3K),Q.1P(3L)]};7 43(){g 2m=A-m;g 29=u-q;d(1W&&(Q.1h(2m)>1W))A=(2m>0)?(m+1W):(m-1W);d(1U&&(Q.1h(29)>1U))u=(29>0)?(q+1U):(q-1U);d(1O&&(Q.1h(29)<1O))u=(29>0)?(q+1O):(q-1O);d(1S&&(Q.1h(2m)<1S))A=(2m>0)?(m+1S):(m-1S);d(m<0){A-=m;m-=m}d(q<0){u-=q;q-=q}d(A<0){m-=A;A-=A}d(u<0){q-=u;u-=u}d(A>L){g 19=A-L;m-=19;A-=19}d(u>K){g 19=u-K;q-=19;u-=19}d(m>L){g 19=m-K;u-=19;q-=19}d(q>K){g 19=q-K;u-=19;q-=19}k 3o(1N(m,q,A,u))};7 3o(a){k{x:a[0],y:a[1],A:a[2],u:a[3],w:a[2]-a[0],h:a[3]-a[1]}};k{1N:1N,1z:1z,1s:1s,3c:3c,1Y:1Y,23:23,Y:Y}}();g H=7(){g 53,51,50,2r,3n=4X;g 2E={};g N={};g 1J=O;g 1k=j.4b;d(j.3J){2E={T:2t(\'4i\').B(\'T\',$.1X.2b?E(-1):E(0)),3V:2t(\'4i\'),S:2t(\'4j\'),3R:2t(\'4j\')}}d(j.4k){N.t=2o(\'n\');N.b=2o(\'s\');N.r=2o(\'e\');N.l=2o(\'w\')}j.4l&&3f([\'n\',\'s\',\'e\',\'w\']);j.4h&&3f([\'1M\',\'16\',\'1w\',\'2e\']);7 2t(1F){g 1L=$(\'<12 />\').B({1a:\'1c\',26:j.4g}).1p(2g(1F));$2S.1A(1L);k 1L};7 3r(U,3X){g 1L=$(\'<12 />\').3e(3E(U)).B({1I:U+\'-2J\',1a:\'1c\',1r:3X});$1u.1A(1L);k 1L};7 4e(U){k 3r(U,3n++).B({T:E(-1k+1),S:E(-1k+1),26:j.4c}).1p(2g(\'N\'))};7 2o(U){g s=j.4d,o=1k,h=s,w=s,t=o,l=o;1K(U){D\'n\':D\'s\':w=1D(11);W;D\'e\':D\'w\':h=1D(11);W}k 3r(U,3n++).R(w).V(h).B({T:E(-t+1),S:E(-l+1)})};7 3f(2F){5L(i 1j 2F)N[2F[i]]=4e(2F[i])};7 2C(c){g 3m=Q.1P((c.h/2)-1k),3l=Q.1P((c.w/2)-1k),5q=5p=-1k+1,2s=c.w-1k,2w=c.h-1k,x,y;\'e\'1j N&&N.e.B({T:E(3m),S:E(2s)})&&N.w.B({T:E(3m)})&&N.s.B({T:E(2w),S:E(3l)})&&N.n.B({S:E(3l)});\'1w\'1j N&&N.1w.B({S:E(2s)})&&N.2e.B({T:E(2w),S:E(2s)})&&N.1M.B({T:E(2w)});\'b\'1j N&&N.b.B({T:E(2w)})&&N.r.B({S:E(2s)})};7 4m(x,y){$3k.B({T:E(-y),S:E(-x)});$2n.B({T:E(y),S:E(x)})};7 2J(w,h){$2n.R(w).V(h)};7 2q(){g c=G.Y();G.1z([c.x,c.y]);G.1s([c.A,c.u]);2A()};7 2A(){d(2r)k 1m()};7 1m(){g c=G.Y();2J(c.w,c.h);4m(c.x,c.y);j.3J&&2E[\'3R\'].B({S:E(c.w-1)})&&2E[\'3V\'].B({T:E(c.h-1)});1J&&2C(c);2r||1y();j.30(31(c))};7 1y(){$2n.1y();$J.B(\'26\',j.3Q);2r=F};7 1E(){1l();$2n.2l();$J.B(\'26\',1);2r=O};7 3s(){d(1J){2C(G.Y());$1u.1y()}};7 1V(){1J=F;d(j.3G){2C(G.Y());$1u.1y();k F}};7 1l(){1J=O;$1u.2l()};7 25(v){(3x=v)?1l():1V()};7 1n(){25(O);2q()};g $3a=3A().3e(3E(\'1o\')).B({1I:\'1o\',1a:\'1c\',1r:5M})$2S.1A($3a);1l();k{2A:2A,1m:1m,1E:1E,2q:2q,1b:7(1I){$3a.B(\'1I\',1I)},1V:1V,4n:7(){1J=F},3s:3s,1l:1l,25:25,1n:1n}}();g 1d=7(){g 2R=7(){},2N=7(){},2O=j.2p;d(!2O){$1i.3v(2Q).3C(2j).4Y(2j)}7 4q(){$1i.B({1r:4R});d(2O){$(3U).3v(2Q).3C(2j)}}7 3S(){$1i.B({1r:3T});d(2O){$(3U).3W(\'3v\',2Q).3W(\'3C\',2j)}}7 2Q(e){2R(22(e))};7 2j(e){e.32();e.2H();d(1R){1R=O;2N(22(e));j.2W(31(G.Y()));3S();2R=7(){};2N=7(){}}k O};7 1x(1o,1n){1R=F;2R=1o;2N=1n;4q();k O};7 1b(t){$1i.B(\'1I\',t)};$J.5H($1i);k{1x:1x,1b:1b}}();g 2U=7(){g $2B=$(\'<57 1F="5d" />\').B({1a:\'1c\',S:\'-5j\'}).5g(4M).5m(4N),$4v=$(\'<12 />\').B({1a:\'1c\',4O:\'4P\'}).1A($2B);7 1Q(){d(j.2z){$2B.1y();$2B.45()}};7 4N(e){$2B.2l()};7 2h(e,x,y){d(j.2V){G.1Y([x,y]);H.2A()};e.32();e.2H()};7 4M(e){d(e.5x)k F;3b=e.4V?F:O;g 2x=3b?10:1;1K(e.5o){D 37:2h(e,-2x,0);W;D 39:2h(e,2x,0);W;D 38:2h(e,0,-2x);W;D 40:2h(e,0,2x);W;D 27:H.1E();W;D 9:k F}k 5v(e)};d(j.2z)$4v.4w($J);k{1Q:1Q}}();7 E(n){k\'\'+1q(n)+\'E\'};7 1D(n){k\'\'+1q(n)+\'%\'};7 2g(4t){k j.4x+\'-\'+4t};7 2D(M){g z=$(M).2T();k[z.S,z.T]};7 22(e){k[(e.5E-21[0]),(e.5D-21[1])]};7 4D(1F){d(1F!=34){1d.1b(1F);34=1F}};7 4F(1f,z){21=2D($J);1d.1b(1f==\'1o\'?1f:1f+\'-2J\');d(1f==\'1o\')k 1d.1x(4z(z),2G);g 4L=G.Y();g 3d=3F(1f);g 4p=G.23(3F(3d));G.1z(G.23(3d));G.1s(4p);1d.1x(4r(1f,4L),2G)};7 4r(1f,f){k 7(z){d(!j.2I)1K(1f){D\'e\':z[1]=f.u;W;D\'w\':z[1]=f.u;W;D\'n\':z[0]=f.A;W;D\'s\':z[0]=f.A;W}X 1K(1f){D\'e\':z[1]=f.y+1;W;D\'w\':z[1]=f.y+1;W;D\'n\':z[0]=f.x+1;W;D\'s\':z[0]=f.x+1;W}G.1s(z);H.1m()}};7 4z(z){g 2M=z;2U.1Q();k 7(z){G.1Y([z[0]-2M[0],z[1]-2M[1]]);2M=z;H.1m()}};7 3F(U){1K(U){D\'n\':k\'1M\';D\'s\':k\'16\';D\'e\':k\'16\';D\'w\':k\'1w\';D\'1w\':k\'1M\';D\'16\':k\'2e\';D\'2e\':k\'16\';D\'1M\':k\'1w\'}};7 3E(U){k 7(e){d(j.2Z)k O;d((U==\'1o\')&&!j.2V)k O;1R=F;4F(U,22(e));e.2H();e.32();k O}};7 4E($M,w,h){g 16=$M.R(),1T=$M.V();d((16>w)&&w>0){16=w;1T=(w/$M.R())*$M.V()}d((1T>h)&&h>0){1T=h;16=(h/$M.V())*$M.R()}13=$M.R()/16;Z=$M.V()/1T;$M.R(16).V(1T)};7 31(c){k{x:1q(c.x*13),y:1q(c.y*Z),A:1q(c.A*13),u:1q(c.u*Z),w:1q(c.w*13),h:1q(c.h*Z)}};7 2G(z){g c=G.Y();d(c.w>j.3B[0]&&c.h>j.3B[1]){H.1V();H.1n()}X{H.1E()}1d.1b(j.2Y?\'35\':\'2k\')};7 4B(e){d(j.2Z)k O;d(!j.2Y)k O;1R=F;21=2D($J);H.1l();4D(\'35\');g z=22(e);G.1z(z);1d.1x(4C,2G);2U.1Q();H.1m();e.2H();e.32();k O};7 4C(z){G.1s(z);H.1m()};7 3A(){g 1i=$(\'<12></12>\').1p(2g(\'5c\'));$.1X.2b&&1i.B({26:0,3i:\'59\'});k 1i};7 3D(a){g m=a[0]/13,q=a[1]/Z,A=a[2]/13,u=a[3]/Z;d(3x)k;g 2c=G.1N(m,q,A,u);g c=G.Y();g 1e=2f=[c.x,c.y,c.A,c.u];g 4K=j.4J;g x=1e[0];g y=1e[1];g A=1e[2];g u=1e[3];g 4G=2c[0]-2f[0];g 4y=2c[1]-2f[1];g 4o=2c[2]-2f[2];g 4s=2c[3]-2f[3];g 1g=0;g 4H=j.4I;H.25(F);g 4u=7(){k 7(){1g+=(11-1g)/4H;1e[0]=x+((1g/11)*4G);1e[1]=y+((1g/11)*4y);1e[2]=A+((1g/11)*4o);1e[3]=u+((1g/11)*4s);d(1g<11)3j();X H.1n();d(1g>=5J.8)1g=11;36(1e)}}();7 3j(){5K.5C(4u,4K)};3j()};7 1v(2u){36([2u[0]/13,2u[1]/Z,2u[2]/13,2u[3]/Z])};7 36(l){G.1z([l[0],l[1]]);G.1s([l[2],l[3]]);H.1m()};7 2y(P){d(1G(P)!=\'2P\')P={};j=$.4S(j,P);d(1G(j.30)!==\'7\')j.30=7(){};d(1G(j.2W)!==\'7\')j.2W=7(){}};7 3I(){k 31(G.Y())};7 3H(){k G.Y()};7 4a(P){2y(P);2X()};7 41(){j.2Z=F;H.1l();H.1b(\'2k\');1d.1b(\'2k\')};7 3Y(){j.2Z=O;2X()};7 3Z(){H.1n();1d.1x(3w,3w)};7 3p(){$12.4Q();$1t.1y()};7 2X(3P){j.3G?3P?H.4n():H.1V():H.1l();1d.1b(j.2Y?\'35\':\'2k\');H.1b(j.2V?\'1o\':\'2k\');$12.B(\'3i\',j.3g);d(\'1v\'1j j){1v(P.1v);H.1n();4f(j.1v)}d(\'3h\'1j j){13=j.3h[0]/L;Z=j.3h[1]/K}1W=j.2v[0]||0;1U=j.2v[1]||0;1S=j.2i[0]||0;1O=j.2i[1]||0;d(\'33\'1j j){$J.3q(\'2d\',j.33);4f(j.33)}H.2q()};$1u.2l();2X(F);g 2K={3D:3D,1v:1v,2y:4a,3I:3I,3H:3H,5f:41,5l:3Y,5e:3Z,45:2U.1Q,56:7(){k[L*13,K*Z]},5G:7(){k[L,K]},1E:H.1E,3p:3p};$1t.2L(\'1B\',2K);k 2K};$.5I.1B=7(j){7 42(3z){g 4A=j.5F||3z.2d;g J=5n 5k();J.58=7(){$.1B(3z,j)};J.2d=4A};d(1G(j)!==\'2P\')j={};1H.55(7(){d($(1H).2L(\'1B\')){d(j==\'2K\')k $(1H).2L(\'1B\');X $(1H).2L(\'1B\').2y(j)}X 42(1H)});k 1H}})(4U);',62,361,'|||||||function||||||if|||var|||options|return||x1||||y1||||y2|||||pos|x2|css|xx|case|px|true|Coords|Selection|yy|img|boundy|boundx|obj|handle|false|opt|Math|width|left|top|ord|height|break|else|getFixed|yscale||100|div|xscale||aspect|nw|oy|ox|delta|position|setCursor|absolute|Tracker|animat|mode|pcent|abs|trk|in|hhs|disableHandles|update|done|move|addClass|parseInt|zIndex|setCurrent|origimg|hdl_holder|setSelect|ne|activateHandlers|show|setPressed|append|Jcrop|max_x|pct|release|type|typeof|this|cursor|seehandles|switch|jq|sw|flipCoords|ymin|round|watchKeys|btndown|xmin|nh|ylimit|enableHandles|xlimit|browser|moveOffset|bound||docOffset|mouseAbs|getCorner|min_x|animMode|opacity||rh|ysize|rw|msie|animto|src|se|initcr|cssClass|doNudge|minSize|trackUp|default|hide|xsize|sel|insertDragbar|trackDocument|refresh|awake|east|insertBorder|rect|maxSize|south|nudge|setOptions|keySupport|updateVisible|keymgr|moveHandles|getPos|borders|li|doneSelect|stopPropagation|aspectRatio|resize|api|data|lloc|onDone|trackDoc|object|trackMove|onMove|img_holder|offset|KeyManager|allowMove|onSelect|interfaceUpdate|allowSelect|disabled|onChange|unscale|preventDefault|outerImage|lastcurs|crosshair|setSelectRaw||||track|shift_down|getOffset|opp|mousedown|createHandles|bgColor|trueSize|backgroundColor|animateStart|img2|midhoriz|midvert|hdep|makeObj|destroy|attr|dragDiv|showHandles|rha|rwa|mousemove|null|animating|max_y|from|newTracker|minSelect|mouseup|animateTo|createDragger|oppLockCorner|allowResize|tellScaled|tellSelect|drawBorders|xb|yb|rebound|ya|xa|alt|bgOpacity|right|toBack|290|document|bottom|unbind|zi|enableCrop|cancelCrop||disableCrop|attachWhenDone|getRect|real_ratio|focus|defaults|boxWidth|boxHeight|boundary|setOptionsNew|handleOffset|handleOpacity|handleSize|insertHandle|delete|borderOpacity|cornerHandles|hline|vline|dragEdges|sideHandles|moveto|enableOnly|ix2|opc|toFront|dragmodeHandler|iy2|cl|animator|keywrap|insertBefore|baseClass|iy1|createMover|loadsrc|newSelection|selectDrag|myCursor|presize|startDragMode|ix1|velocity|swingSpeed|animationDelay|interv|fc|parseKey|onBlur|overflow|hidden|remove|450|extend|310|jQuery|shiftKey|insertAfter|370|mouseout|holder|dragmode|end|relative|start|320|each|getBounds|input|onload|white|min_y|enabled|tracker|radio|cancel|disable|keypress|300|last|30px|Image|enable|blur|new|keyCode|west|north|version|clone|dimmed|split|nothing|black|ctrlKey|handlePad|jcrop|edgeMargin|removeAttr|setTimeout|pageY|pageX|useImg|getWidgetSize|before|fn|99|window|for|360|id|after'.split('|'),0,{}))
+!function(e){e.Jcrop=function(t,n){function r(e){return""+parseInt(e)+"px"}function s(e){return""+parseInt(e)+"%"}function o(e){return B.baseClass+"-"+e}function a(t){var n=e(t).offset();return[n.left,n.top]}function c(e){return[e.pageX-se[0],e.pageY-se[1]]}function u(e){e!=N&&(ae.setCursor(e),N=e)}function d(e,t){if(se=a(W),ae.setCursor("move"==e?e:e+"-resize"),"move"==e)return ae.activateHandlers(f(t),m);var n=oe.getFixed(),r=p(e),s=oe.getCorner(p(r));oe.setPressed(oe.getCorner(r)),oe.setCurrent(s),ae.activateHandlers(l(e,n),m)}function l(e,t){return function(n){if(B.aspectRatio)switch(e){case"e":n[1]=t.y+1;break;case"w":n[1]=t.y+1;break;case"n":n[0]=t.x+1;break;case"s":n[0]=t.x+1}else switch(e){case"e":n[1]=t.y2;break;case"w":n[1]=t.y2;break;case"n":n[0]=t.x2;break;case"s":n[0]=t.x2}oe.setCurrent(n),ie.update()}}function f(e){var t=e;return ce.watchKeys(),function(e){oe.moveOffset([e[0]-t[0],e[1]-t[1]]),t=e,ie.update()}}function p(e){switch(e){case"n":return"sw";case"s":return"nw";case"e":return"nw";case"w":return"ne";case"ne":return"sw";case"nw":return"se";case"se":return"nw";case"sw":return"ne"}}function b(e){return function(t){return!B.disabled&&(!("move"==e&&!B.allowMove)&&(L=!0,d(e,c(t)),t.stopPropagation(),t.preventDefault(),!1))}}function v(e,t,n){var r=e.width(),s=e.height();r>t&&t>0&&(r=t,s=t/e.width()*e.height()),s>n&&n>0&&(s=n,r=n/e.height()*e.width()),q=e.width()/r,G=e.height()/s,e.width(r).height(s)}function g(e){return{x:parseInt(e.x*q),y:parseInt(e.y*G),x2:parseInt(e.x2*q),y2:parseInt(e.y2*G),w:parseInt(e.w*q),h:parseInt(e.h*G)}}function m(e){var t=oe.getFixed();t.w>B.minSelect[0]&&t.h>B.minSelect[1]?(ie.enableHandles(),ie.done()):ie.release(),ae.setCursor(B.allowSelect?"crosshair":"default")}function y(e){if(B.disabled)return!1;if(!B.allowSelect)return!1;L=!0,se=a(W),ie.disableHandles(),u("crosshair");var t=c(e);return oe.setPressed(t),ae.activateHandlers(x,m),ce.watchKeys(),ie.update(),e.stopPropagation(),e.preventDefault(),!1}function x(e){oe.setCurrent(e),ie.update()}function C(){var t=e("<div></div>").addClass(o("tracker"));return e.browser.msie&&t.css({opacity:0,backgroundColor:"white"}),t}function S(e){function t(){window.setTimeout(g,u)}var n=e[0]/q,r=e[1]/G,s=e[2]/q,o=e[3]/G;if(!U){var i=oe.flipCoords(n,r,s,o),a=oe.getFixed(),c=initcr=[a.x,a.y,a.x2,a.y2],u=B.animationDelay,d=c[0],l=c[1],s=c[2],o=c[3],f=i[0]-initcr[0],h=i[1]-initcr[1],p=i[2]-initcr[2],w=i[3]-initcr[3],b=0,v=B.swingSpeed;ie.animMode(!0);var g=function(){return function(){b+=(100-b)/v,c[0]=d+b/100*f,c[1]=l+b/100*h,c[2]=s+b/100*p,c[3]=o+b/100*w,b<100?t():ie.done(),b>=99.8&&(b=100),z(c)}}();t()}}function k(e){z([e[0]/q,e[1]/G,e[2]/q,e[3]/G])}function z(e){oe.setPressed([e[0],e[1]]),oe.setCurrent([e[2],e[3]]),ie.update()}function M(t){"object"!=typeof t&&(t={}),B=e.extend(B,t),"function"!=typeof B.onChange&&(B.onChange=function(){}),"function"!=typeof B.onSelect&&(B.onSelect=function(){})}function I(){return g(oe.getFixed())}function H(){return oe.getFixed()}function O(e){M(e),R()}function D(){B.disabled=!0,ie.disableHandles(),ie.setCursor("default"),ae.setCursor("default")}function F(){B.disabled=!1,R()}function P(){ie.done(),ae.activateHandlers(null,null)}function J(){T.remove(),K.show()}function R(e){B.allowResize?e?ie.enableOnly():ie.enableHandles():ie.disableHandles(),ae.setCursor(B.allowSelect?"crosshair":"default"),ie.setCursor(B.allowMove?"move":"default"),T.css("backgroundColor",B.bgColor),"setSelect"in B&&(k(n.setSelect),ie.done(),delete B.setSelect),"trueSize"in B&&(q=B.trueSize[0]/A,G=B.trueSize[1]/E),V=B.maxSize[0]||0,Q=B.maxSize[1]||0,X=B.minSize[0]||0,Y=B.minSize[1]||0,"outerImage"in B&&(W.attr("src",B.outerImage),delete B.outerImage),ie.refresh()}var t=t,n=n;"object"!=typeof t&&(t=e(t)[0]),"object"!=typeof n&&(n={}),"trackDocument"in n||(n.trackDocument=!e.browser.msie,e.browser.msie&&"8"==e.browser.version.split(".")[0]&&(n.trackDocument=!0)),"keySupport"in n||(n.keySupport=!e.browser.msie);var j={trackDocument:!1,baseClass:"jcrop",addClass:null,bgColor:"black",bgOpacity:.6,borderOpacity:.4,handleOpacity:.5,handlePad:5,handleSize:9,handleOffset:5,edgeMargin:14,aspectRatio:0,keySupport:!0,cornerHandles:!0,sideHandles:!0,drawBorders:!0,dragEdges:!0,boxWidth:0,boxHeight:0,boundary:8,animationDelay:20,swingSpeed:3,allowSelect:!0,allowMove:!0,allowResize:!0,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){}},B=j;M(n);var K=e(t),W=K.clone().removeAttr("id").css({position:"absolute"});W.width(K.width()),W.height(K.height()),K.after(W).hide(),v(W,B.boxWidth,B.boxHeight);var A=W.width(),E=W.height(),T=e("<div />").width(A).height(E).addClass(o("holder")).css({position:"relative",backgroundColor:B.bgColor}).insertAfter(K).append(W);B.addClass&&T.addClass(B.addClass);var V,Q,X,Y,q,G,L,N,U,Z,$=e("<img />").attr("src",W.attr("src")).css("position","absolute").width(A).height(E),_=e("<div />").width(s(100)).height(s(100)).css({zIndex:310,position:"absolute",overflow:"hidden"}).append($),ee=e("<div />").width(s(100)).height(s(100)).css("zIndex",320),te=e("<div />").css({position:"absolute",zIndex:300}).insertBefore(W).append(_,ee),ne=B.boundary,re=C().width(A+2*ne).height(E+2*ne).css({position:"absolute",top:r(-ne),left:r(-ne),zIndex:290}).mousedown(y),se=a(W),oe=function(){function e(e){var e=i(e);b=f=e[0],v=p=e[1]}function t(e){var e=i(e);d=e[0]-b,l=e[1]-v,b=e[0],v=e[1]}function n(){return[d,l]}function r(e){var t=e[0],n=e[1];0>f+t&&(t-=t+f),0>p+n&&(n-=n+p),E<v+n&&(n+=E-(v+n)),A<b+t&&(t+=A-(b+t)),f+=t,b+=t,p+=n,v+=n}function s(e){var t=o();switch(e){case"ne":return[t.x2,t.y];case"nw":return[t.x,t.y];case"se":return[t.x2,t.y2];case"sw":return[t.x,t.y2]}}function o(){if(!B.aspectRatio)return c();var e,t,n=B.aspectRatio,r=B.minSize[0]/q,s=(B.minSize[1]/G,B.maxSize[0]/q),o=B.maxSize[1]/G,i=b-f,d=v-p,l=Math.abs(i),g=Math.abs(d),m=l/g;return 0==s&&(s=10*A),0==o&&(o=10*E),m<n?(t=v,w=g*n,e=i<0?f-w:w+f,e<0?(e=0,h=Math.abs((e-f)/n),t=d<0?p-h:h+p):e>A&&(e=A,h=Math.abs((e-f)/n),t=d<0?p-h:h+p)):(e=b,h=l/n,t=d<0?p-h:p+h,t<0?(t=0,w=Math.abs((t-p)*n),e=i<0?f-w:w+f):t>E&&(t=E,w=Math.abs(t-p)*n,e=i<0?f-w:w+f)),e>f?(e-f<r?e=f+r:e-f>s&&(e=f+s),t=t>p?p+(e-f)/n:p-(e-f)/n):e<f&&(f-e<r?e=f-r:f-e>s&&(e=f-s),t=t>p?p+(f-e)/n:p-(f-e)/n),e<0?(f-=e,e=0):e>A&&(f-=e-A,e=A),t<0?(p-=t,t=0):t>E&&(p-=t-E,t=E),last=u(a(f,p,e,t))}function i(e){return e[0]<0&&(e[0]=0),e[1]<0&&(e[1]=0),e[0]>A&&(e[0]=A),e[1]>E&&(e[1]=E),[e[0],e[1]]}function a(e,t,n,r){var s=e,o=n,i=t,a=r;return n<e&&(s=n,o=e),r<t&&(i=r,a=t),[Math.round(s),Math.round(i),Math.round(o),Math.round(a)]}function c(){var e=b-f,t=v-p;if(V&&Math.abs(e)>V&&(b=e>0?f+V:f-V),Q&&Math.abs(t)>Q&&(v=t>0?p+Q:p-Q),Y&&Math.abs(t)<Y&&(v=t>0?p+Y:p-Y),X&&Math.abs(e)<X&&(b=e>0?f+X:f-X),f<0&&(b-=f,f-=f),p<0&&(v-=p,p-=p),b<0&&(f-=b,b-=b),v<0&&(p-=v,v-=v),b>A){var n=b-A;f-=n,b-=n}if(v>E){var n=v-E;p-=n,v-=n}if(f>A){var n=f-E;v-=n,p-=n}if(p>E){var n=p-E;v-=n,p-=n}return u(a(f,p,b,v))}function u(e){return{x:e[0],y:e[1],x2:e[2],y2:e[3],w:e[2]-e[0],h:e[3]-e[1]}}var d,l,f=0,p=0,b=0,v=0;return{flipCoords:a,setPressed:e,setCurrent:t,getOffset:n,moveOffset:r,getCorner:s,getFixed:o}}(),ie=function(){function t(t){var n=e("<div />").css({position:"absolute",opacity:B.borderOpacity}).addClass(o(t));return _.append(n),n}function n(t,n){var r=e("<div />").mousedown(b(t)).css({cursor:t+"-resize",position:"absolute",zIndex:n});return ee.append(r),r}function a(e){return n(e,I++).css({top:r(-F+1),left:r(-F+1),opacity:B.handleOpacity}).addClass(o("handle"))}function c(e){var t=B.handleSize,o=F,i=t,a=t,c=o,u=o;switch(e){case"n":case"s":a=s(100);break;case"e":case"w":i=s(100)}return n(e,I++).width(a).height(i).css({top:r(-c+1),left:r(-u+1)})}function u(e){for(i in e)O[e[i]]=a(e[i])}function d(e){var t=Math.round(e.h/2-F),n=Math.round(e.w/2-F),s=(west=-F+1,e.w-F),o=e.h-F;"e"in O&&O.e.css({top:r(t),left:r(s)})&&O.w.css({top:r(t)})&&O.s.css({top:r(o),left:r(n)})&&O.n.css({left:r(n)}),"ne"in O&&O.ne.css({left:r(s)})&&O.se.css({top:r(o),left:r(s)})&&O.sw.css({top:r(o)}),"b"in O&&O.b.css({top:r(o)})&&O.r.css({left:r(s)})}function l(e,t){$.css({top:r(-t),left:r(-e)}),te.css({top:r(t),left:r(e)})}function f(e,t){te.width(e).height(t)}function h(){var e=oe.getFixed();oe.setPressed([e.x,e.y]),oe.setCurrent([e.x2,e.y2]),p()}function p(){if(M)return w()}function w(){var e=oe.getFixed();f(e.w,e.h),l(e.x,e.y),B.drawBorders&&H.right.css({left:r(e.w-1)})&&H.bottom.css({top:r(e.h-1)}),D&&d(e),M||v(),B.onChange(g(e))}function v(){te.show(),W.css("opacity",B.bgOpacity),M=!0}function m(){S(),te.hide(),W.css("opacity",1),M=!1}function y(){D&&(d(oe.getFixed()),ee.show())}function x(){if(D=!0,B.allowResize)return d(oe.getFixed()),ee.show(),!0}function S(){D=!1,ee.hide()}function k(e){(U=e)?S():x()}function z(){k(!1),h()}var M,I=370,H={},O={},D=!1,F=B.handleOffset;B.drawBorders&&(H={top:t("hline").css("top",r(e.browser.msie?-1:0)),bottom:t("hline"),left:t("vline"),right:t("vline")}),B.dragEdges&&(O.t=c("n"),O.b=c("s"),O.r=c("e"),O.l=c("w")),B.sideHandles&&u(["n","s","e","w"]),B.cornerHandles&&u(["sw","nw","ne","se"]);var P=C().mousedown(b("move")).css({cursor:"move",position:"absolute",zIndex:360});return _.append(P),S(),{updateVisible:p,update:w,release:m,refresh:h,setCursor:function(e){P.css("cursor",e)},enableHandles:x,enableOnly:function(){D=!0},showHandles:y,disableHandles:S,animMode:k,done:z}}(),ae=function(){function t(){re.css({zIndex:450}),d&&e(document).mousemove(r).mouseup(s)}function n(){re.css({zIndex:290}),d&&e(document).unbind("mousemove",r).unbind("mouseup",s)}function r(e){a(c(e))}function s(e){return e.preventDefault(),e.stopPropagation(),L&&(L=!1,u(c(e)),B.onSelect(g(oe.getFixed())),n(),a=function(){},u=function(){}),!1}function o(e,n){return L=!0,a=e,u=n,t(),!1}function i(e){re.css("cursor",e)}var a=function(){},u=function(){},d=B.trackDocument;return d||re.mousemove(r).mouseup(s).mouseout(s),W.before(re),{activateHandlers:o,setCursor:i}}(),ce=function(){function t(){B.keySupport&&(o.show(),o.focus())}function n(e){o.hide()}function r(e,t,n){B.allowMove&&(oe.moveOffset([t,n]),ie.updateVisible()),e.preventDefault(),e.stopPropagation()}function s(e){if(e.ctrlKey)return!0;Z=!!e.shiftKey;var t=Z?10:1;switch(e.keyCode){case 37:r(e,-t,0);break;case 39:r(e,t,0);break;case 38:r(e,0,-t);break;case 40:r(e,0,t);break;case 27:ie.release();break;case 9:return!0}return nothing(e)}var o=e('<input type="radio" />').css({position:"absolute",left:"-30px"}).keypress(s).blur(n),i=e("<div />").css({position:"absolute",overflow:"hidden"}).append(o);return B.keySupport&&i.insertBefore(W),{watchKeys:t}}();ee.hide(),R(!0);var ue={animateTo:S,setSelect:k,setOptions:O,tellSelect:I,tellScaled:H,disable:D,enable:F,cancel:P,focus:ce.watchKeys,getBounds:function(){return[A*q,E*G]},getWidgetSize:function(){return[A,E]},release:ie.release,destroy:J};return K.data("Jcrop",ue),ue},e.fn.Jcrop=function(t){function n(n){var r=t.useImg||n.src,s=new Image;s.onload=function(){e.Jcrop(n,t)},s.src=r}return"object"!=typeof t&&(t={}),this.each(function(){if(e(this).data("Jcrop")){if("api"==t)return e(this).data("Jcrop");e(this).data("Jcrop").setOptions(t)}else n(this)}),this}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.min.js
index 3e3228c2d4f6a2213343b8eabc573a26087f11aa..d497ccb340288769e376473a3834d3989c616a5c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(a($){3={2:{h:e.h,y:"D",k:e.k,c:e.c,r:e.r,9:e.9,A:e.A,m:e.m,o:e.o,x:16,i:0,P:5,C:G},f:a(4){s=b.2;j J=$.K({y:"D",h:s.h,L:"k="+s.k+"&c="+s.c+"&Q="+s.r+"&W="+s.9[4]+"&i="+3.2.i,T:F,x:G,U:a(6){15(17(6)){z-1:7.l(3.2.A);w;z 0:7.l(3.2.m);w;z 1:w;14:7.l("<d>v "+3.2.9[4]+":</d> "+3.2.o,6);w}},m:a(E,t,u){3.2.u=u},X:a(E,t){4++;g(4<3.2.9.q){j f=O;g(t==\'m\'||t==\'Z\'){3.2.i+=1;g(3.2.i<=3.2.P){j B=3.2.C/13;4--;f=F;7.l("<d>v "+3.2.9[q]+":</d> "+"10 11 "+B+" B; 1b 1h 1m 1l.");1k(a(){3.f(4)},3.2.C)}p{j 6=E.N;g(6==\'\'){6=\'( \'+3.2.u+\' )\'}7.l("<d>v "+3.2.9[4]+":</d> "+3.2.o,6);7.I(4)}}p{3.2.i=0;7.I(4)}g(f)3.f(4)}p{7.1d()}}})},H:a(4){s=b.2;j J=$.K({y:"D",h:s.h,L:"k="+s.k+"&c="+s.c+"&Q="+s.r+"&W="+s.9[4],1e:"1c",T:F,x:G,U:a(6){n=n.18(6)},m:a(6){7.l("<d>v "+3.2.9[4]+":</d> "+3.2.o,6.N)},X:a(){4++;7.I(4);g(4<3.2.9.q)3.H(4);p{4=0;3.2.9=n;3.2.c=M;3.2.1j=n.q;7.V(3.2);3.f(4)}}})},V:a(s){g(b.R)1g;j 4=0;b.2=$.1f({},b.2,{},s||{});g(b.2.c.S(0,8)==\'1i\'){M=b.2.c.S(8);b.2.c=\'19\';n=12 1a();b.H(4)}p{b.f(4)}b.R=O}}}(Y));',62,85,'||settings|nggAjax|index||msg|nggProgressBar||ids|function|this|operation|strong|nggAjaxSetup|run|if|url|retries|var|action|addNote|error|imageIDS|failure|else|length|nonce||textStatus|errorThrown|ID|break|timeout|type|case|permission|seconds|retry_delay|POST|jqXHR|false|30000|readIDs|increase|req|ajax|data|nextOperation|responseText|true|max_retries|_wpnonce|inited|substring|cache|success|init|image|complete|jQuery|abort|Retrying|in|new|1000|default|switch|20000|parseInt|concat|get_image_ids|Array|host|json|finished|dataType|extend|return|might|gallery_|maxStep|setTimeout|throttling|be'.split('|'),0,{}))
+!function(e){nggAjax={settings:{url:nggAjaxSetup.url,type:"POST",action:nggAjaxSetup.action,operation:nggAjaxSetup.operation,nonce:nggAjaxSetup.nonce,ids:nggAjaxSetup.ids,permission:nggAjaxSetup.permission,error:nggAjaxSetup.error,failure:nggAjaxSetup.failure,timeout:2e4,retries:0,max_retries:5,retry_delay:3e4},run:function(t){s=this.settings;e.ajax({type:"POST",url:s.url,data:"action="+s.action+"&operation="+s.operation+"&_wpnonce="+s.nonce+"&image="+s.ids[t]+"&retries="+nggAjax.settings.retries,cache:!1,timeout:3e4,success:function(e){switch(parseInt(e)){case-1:nggProgressBar.addNote(nggAjax.settings.permission);break;case 0:nggProgressBar.addNote(nggAjax.settings.error);break;case 1:break;default:nggProgressBar.addNote("<strong>ID "+nggAjax.settings.ids[t]+":</strong> "+nggAjax.settings.failure,e)}},error:function(e,t,n){nggAjax.settings.errorThrown=n},complete:function(e,n){if(t++,t<nggAjax.settings.ids.length){var s=!0;if("error"==n||"abort"==n)if(nggAjax.settings.retries+=1,nggAjax.settings.retries<=nggAjax.settings.max_retries){var g=nggAjax.settings.retry_delay/1e3;t--,s=!1,nggProgressBar.addNote("<strong>ID "+nggAjax.settings.ids[length]+":</strong> Retrying in "+g+" seconds; host might be throttling."),setTimeout(function(){nggAjax.run(t)},nggAjax.settings.retry_delay)}else{var r=e.responseText;""==r&&(r="( "+nggAjax.settings.errorThrown+" )"),nggProgressBar.addNote("<strong>ID "+nggAjax.settings.ids[t]+":</strong> "+nggAjax.settings.failure,r),nggProgressBar.increase(t)}else nggAjax.settings.retries=0,nggProgressBar.increase(t);s&&nggAjax.run(t)}else nggProgressBar.finished()}})},readIDs:function(t){s=this.settings;e.ajax({type:"POST",url:s.url,data:"action="+s.action+"&operation="+s.operation+"&_wpnonce="+s.nonce+"&image="+s.ids[t],dataType:"json",cache:!1,timeout:3e4,success:function(e){imageIDS=imageIDS.concat(e)},error:function(e){nggProgressBar.addNote("<strong>ID "+nggAjax.settings.ids[t]+":</strong> "+nggAjax.settings.failure,e.responseText)},complete:function(){t++,nggProgressBar.increase(t),t<nggAjax.settings.ids.length?nggAjax.readIDs(t):(t=0,nggAjax.settings.ids=imageIDS,nggAjax.settings.operation=nextOperation,nggAjax.settings.maxStep=imageIDS.length,nggProgressBar.init(nggAjax.settings),nggAjax.run(t))}})},init:function(t){if(!this.inited){var n=0;this.settings=e.extend({},this.settings,{},t||{}),"gallery_"==this.settings.operation.substring(0,8)?(nextOperation=this.settings.operation.substring(8),this.settings.operation="get_image_ids",imageIDS=new Array,this.readIDs(n)):this.run(n),this.inited=!0}}}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.progressbar.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.progressbar.min.js
index 742a576c12289dc0fd9e1e79f0e765fc313bbea1..30fc213fdf8c99fd22433963b50c105b647939eb 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.progressbar.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.progressbar.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(6($){12={a:{2:\'11\',X:e,C:E,l:\'\',b:E},b:6(s){s=5.a=$.10({},5.a,{},s||{});d=R.K((e/s.X)*e)/e;7($("#"+s.2+"c").n==0){s.l=(s.l.n>0)?s.l:\'\';$("1i").i(\'<4 2="\'+s.2+\'c"><4 2="\'+s.2+\'" o="1e"><4 o="\'+s.2+\'"><9>0%</9></4></4></4>\');$("#"+s.2+"c").w({d:1d,1c:h,18:h,1f:s.l,1b:{1a:\'Q\',19:\'Q\',1h:5.u(q)}})}5.4=$(\'#\'+s.2+\'c\');s.b=h},u:6(M){8 f=M;1g{7(f&&f.y)f=f.y}17(15){}Z f},Y:6(F){s=5.a;7(!s.b)5.b();8 4=5.4;7(4.O("#"+s.2+"m").n==0)4.i(\'<4 o="\'+s.2+\'m"><9 16="14:13" 2="\'+s.2+\'m">\'+F+\'</9></4>\');k $("#"+s.2+"m").A(F)},W:6(x,I){s=5.a;7(!s.b)5.b();8 4=5.4;s.C=h;7(4.O("#"+s.2+"r").n==0)4.i(\'<P 2="\'+s.2+\'r">&1y;</P>\');7(I)$("#"+s.2+"r").i("<p>"+x+"<4 o=\'1w\'><9>[1B]</9><1G />"+I+"</4></p>");k $("#"+s.2+"r").i("<p>"+x+"</p>");4.w("1C","1D",1A)},1u:6(B){s=5.a;8 j=B*d+"%";8 L=R.K(B*d)+"%";$("#"+s.2+" 4").d(j);$("#"+s.2+" 9").A(L);$(5.u(q).1v).1m(0);8 t=$(5.u(q).1k).y();8 T=t.G(\'H\');D(6(){t.G(\'H\',0)},1);D(6(){t.G(\'H\',T)},3)},1p:6(){s=5.a;$("#"+s.2+" 4").d(\'e%\');$("#"+s.2+" 9").A(\'e%\');8 4=5.4;8 v=5;7(s.C){$("#"+s.2).g(U).1t("1s");v.W("1r!");4.1q(6(){v.z(E,0)})}k{q.D(6(){v.z(h,1)},U)}},z:6(g,j){7(g)$("#"+s.2+"c").g(N).w("V");k $("#"+s.2+"c").w("V");$("#"+s.2+"c").1o();$(\'.J\').1E("<1j 1F=\\"1x\\" 1z=\\"1n\\" j=\\""+j+"\\">");7(g)$(\'.J\').g(N).S();k $(\'.J\').S()}}})(1l);',62,105,'||id||div|this|function|if|var|span|settings|init|_dialog|width|100|retval|delay|true|append|value|else|header|_message|length|class|li|window|_note||tinymce_frame|find_parent|progressBar|dialog|note|parent|remove_dialog|html|step|wait|setTimeout|false|message|css|top|detail|nggform|round|rvalue|child|4000|find|ul|center|Math|submit|css_top|1000|destroy|addNote|maxStep|addMessage|return|extend|progressbar|nggProgressBar|block|display|Exception|style|catch|modal|at|my|position|resizable|640|progressborder|title|try|of|body|input|frameElement|jQuery|scrollTop|ajax_callback|remove|finished|click|Done|slow|hide|increase|document|show_details|hidden|nbsp|name|220|more|option|height|prepend|type|br'.split('|'),0,{}))
+!function(i){nggProgressBar={settings:{id:"progressbar",maxStep:100,wait:!1,header:"",init:!1},init:function(t){t=this.settings=i.extend({},this.settings,{},t||{}),width=Math.round(100/t.maxStep*100)/100,0==i("#"+t.id+"_dialog").length&&(t.header=t.header.length>0?t.header:"",i("body").append('<div id="'+t.id+'_dialog"><div id="'+t.id+'" class="progressborder"><div class="'+t.id+'"><span>0%</span></div></div></div>'),i("#"+t.id+"_dialog").dialog({width:640,resizable:!0,modal:!0,title:t.header,position:{my:"center",at:"center",of:this.find_parent(window)}})),this.div=i("#"+t.id+"_dialog"),t.init=!0},find_parent:function(i){var t=i;try{t&&t.parent&&(t=t.parent)}catch(i){}return t},addMessage:function(t){s=this.settings,s.init||this.init();var d=this.div;0==d.find("#"+s.id+"_message").length?d.append('<div class="'+s.id+'_message"><span style="display:block" id="'+s.id+'_message">'+t+"</span></div>"):i("#"+s.id+"_message").html(t)},addNote:function(t,d){s=this.settings,s.init||this.init();var e=this.div;s.wait=!0,0==e.find("#"+s.id+"_note").length&&e.append('<ul id="'+s.id+'_note">&nbsp;</ul>'),d?i("#"+s.id+"_note").append("<li>"+t+"<div class='show_details'><span>[more]</span><br />"+d+"</div></li>"):i("#"+s.id+"_note").append("<li>"+t+"</li>"),e.dialog("option","height",220)},increase:function(t){s=this.settings;var d=t*width+"%",e=Math.round(t*width)+"%";i("#"+s.id+" div").width(d),i("#"+s.id+" span").html(e),i(this.find_parent(window).document).scrollTop(0);var n=i(this.find_parent(window).frameElement).parent(),a=n.css("top");setTimeout(function(){n.css("top",0)},1),setTimeout(function(){n.css("top",a)},3)},finished:function(){s=this.settings,i("#"+s.id+" div").width("100%"),i("#"+s.id+" span").html("100%");var t=this.div,d=this;s.wait?(i("#"+s.id).delay(1e3).hide("slow"),d.addNote("Done!"),t.click(function(){d.remove_dialog(!1,0)})):window.setTimeout(function(){d.remove_dialog(!0,1)},1e3)},remove_dialog:function(t,d){t?i("#"+s.id+"_dialog").delay(4e3).dialog("destroy"):i("#"+s.id+"_dialog").dialog("destroy"),i("#"+s.id+"_dialog").remove(),i(".nggform").prepend('<input type="hidden" name="ajax_callback" value="'+d+'">'),t?i(".nggform").delay(4e3).submit():i(".nggform").submit()}}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php
index 8597ee93dd10720b289b744c34a0b5f0eb5fa002..353253d724ed8d6bd66160d4c6db4459c1434a0c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php
@@ -163,7 +163,7 @@ jQuery(function (){
       jQuery('#spinner').fadeIn();
       jQuery('#spinner').position({ my: "center", at: "center", of: container });
 
-      var dialog = jQuery('<div class="ngg-overlay-dialog" style="display:hidden"></div>').appendTo('body');
+      var dialog = jQuery('<div class="ngg-overlay-dialog"></div>').appendTo('body');
       // load the remote content
       dialog.load(
           this.href,
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php
index e683e9d5bafc33d5b4d56c9863c15cba1a7d3d3e..4f35741e77244ac3f97442fd963b0094aaa1203e 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php
@@ -238,7 +238,9 @@ class nggManageGallery {
 
 	function render_image_column_6($output='', $picture=array())
 	{
-		$tags = wp_get_object_terms($picture->pid, 'ngg_tag', 'fields=names');
+        global $wp_version;
+        $fields = version_compare($wp_version, '4.6', '<=') ? 'fields=names' : array('fields' => 'names');
+        $tags = wp_get_object_terms($picture->pid, 'ngg_tag', $fields);
 		if (is_array($tags)) $tags = implode(', ', $tags);
 		$tags = esc_html($tags);
 
@@ -797,16 +799,16 @@ class nggManageGallery {
 			if ( nggGallery::current_user_can( 'NextGEN Edit gallery options' )  && !isset ($_GET['s']) ) {
                 $tags = array('<a>', '<abbr>', '<acronym>', '<address>', '<b>', '<base>', '<basefont>', '<big>', '<blockquote>', '<br>', '<br/>', '<caption>', '<center>', '<cite>', '<code>', '<col>', '<colgroup>', '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', '<em>', '<fieldset>', '<font>', '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<hr>', '<i>', '<img>', '<ins>', '<label>', '<legend>', '<li>', '<menu>', '<noframes>', '<noscript>', '<ol>', '<optgroup>', '<option>', '<p>', '<pre>', '<q>', '<s>', '<samp>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<sub>', '<sup>', '<table>', '<tbody>', '<td>', '<tfoot>', '<th>', '<thead>', '<tr>', '<tt>', '<u>', '<ul>');
 				$fields = array('title', 'galdesc');
-
+				
 				// Sanitize fields
 				foreach ($fields as $field) {
-					$html = $_POST[$field];
+					$html = stripslashes($_POST[$field]);
 					$html = preg_replace('/\\s+on\\w+=(["\']).*?\\1/i', '', $html);
 					$html = preg_replace('/(<\/[^>]+?>)(<[^>\/][^>]*?>)/', '$1 $2', $html);
 					$html = strip_tags($html, implode('', $tags));
 					$_POST[$field] = $html;
 				}
-
+				
 				// Update the gallery
 				$mapper = C_Gallery_Mapper::get_instance();
 				if ($entity = $mapper->find($this->gid)) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php
index 40a010602ebb8462c37e6f57e0a3c8d59456617d..093519bf8091ec6c991d4992340c38dcd7c41fa7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php
@@ -190,7 +190,7 @@ if ($chromeless)
 	?>
 	
 	<div class="alignleft actions">
-		<select id="select_gal" name="select_gal" style="width:120px;">;
+		<select id="select_gal" name="select_gal" style="width:120px;">
 			<option value="0" <?php selected('0', $galleryID); ?> ><?php esc_attr( _e('No gallery',"nggallery") ); ?></option>
 			<?php
 			// Show gallery selection
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php
index 9980964b6bb5e4b6fdbbfffb6a124022ca776e2a..4d933908e987de74b9ea4b97cb41028a67eda19b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php
@@ -169,6 +169,7 @@ function nggallery_admin_overview()
         <h1><?php _e( 'Welcome to NextGEN Gallery', 'nggallery' ); ?></h1>
 
         <div class="about-text"><?php printf( __( "Congrats! You're now running the most popular WordPress gallery plugin of all time. So far you've added %s images, %s galleries, and %s albums." ), $images, $galleries, $albums); ?></div>
+        <div class="about-text" id="ngg-gallery-wizard"><?php echo __("Need help setting up a gallery? Launch the ", 'nggallery') . ' <a data-ngg-wizard="nextgen.beginner.gallery_creation_igw" class="ngg-wizard-invoker" href="' . esc_url(add_query_arg('ngg_wizard', 'nextgen.beginner.gallery_creation_igw')) . '">' . __('Gallery Wizard.', 'nggallery') . '</a>'; ?></div>
         <div class="wp-badge"></div>
 
         <h2 class="nav-tab-wrapper wp-clearfix" id="ngg-tabs-wrapper">
@@ -202,7 +203,7 @@ function nggallery_admin_overview()
                 <div class="col">
                     <a href="https://www.imagely.com/team-member/tamara-lackey/" target="_blank"><img src="https://f001.backblaze.com/file/nextgen-gallery/TamaraLackey-ngg.jpg" alt="Tamara Lackey" /></a>
                     <h3><?php _e( 'Tamara Lackey' ); ?></h3>
-                    <p><?php _e( 'Tamara Lackey is a renowned professional photographer, speaker, and author. Her authentic lifestyle photography, from children’s portraits to celebrity portraits, is praised within her industry and published internationally. She is also founder of the charitable project, Beautiful Together.', 'nggallery' ); ?></p>
+                    <p><?php _e( 'Tamara Lackey is a renowned professional photographer, speaker, and author. Her authentic lifestyle photography, from children’s portraits to celebrity portraits, is praised within her industry and published internationally. She is a Nikon USA Ambassador, the host of The reDefine Show web series, and the co-founder of the non-profit charitable organization, Beautiful Together, in support of children waiting for families.', 'nggallery' ); ?></p>
                 </div>
                 <div class="col">
                     <a href="https://www.imagely.com/team-member/colby-brown/" target="_blank"><img src="https://f001.backblaze.com/file/nextgen-gallery/colby-brown-ngg.jpg" alt="Colby Brown" /></a>
@@ -400,4 +401,4 @@ function nggallery_admin_overview()
     </div>
 
     <?php
-}
\ No newline at end of file
+}
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/css/nggallery.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/css/nggallery.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php
index 1467ccfe08a86a0212bb360b6f1dcf40ad88a18c..5a71b593f8a000e85a93559cf0caf29351abfce4 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php
@@ -1,11 +1,5 @@
 <?php
 
-/***
-	{
-		Module: photocrati-nextgen-legacy
-	}
- ***/
-
 define(
 	'NGG_LEGACY_MOD_DIR',
     implode(DIRECTORY_SEPARATOR, array(
@@ -22,7 +16,7 @@ class M_NggLegacy extends C_Base_Module
 			'photocrati-nextgen-legacy',
 			'NextGEN Legacy',
 			'Embeds the original version of NextGEN 1.9.3 by Alex Rabe',
-			'0.15',
+			'0.19',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/package.module.ngglegacy.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/package.module.ngglegacy.php
new file mode 100644
index 0000000000000000000000000000000000000000..4cece7bcaf5cac6dbac8bd85650f0159c0b6fa16
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/package.module.ngglegacy.php
@@ -0,0 +1,3 @@
+<?php
+
+// This file is intentionally empty
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/Black_Minimalism.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/Black_Minimalism.min.css
index b52d8328d79a44082734eddbe6614b3561405d29..e045db2b9195a095e789c905dd76650679046147 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/Black_Minimalism.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/Black_Minimalism.min.css
@@ -1 +1 @@
-.ngg-thumbnail{margin:0 !important;margin-right:12px !important}.ngg-gallery-thumbnail-box{width:20%}.ngg-gallery-thumbnail{background:url('shadowAlpha.png') no-repeat bottom right !important;background:url('shadow.gif') no-repeat bottom right;margin:10px 0 0 10px !important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-navigation a.page-numbers,.ngg-navigation a.next,.ngg-navigation a.prev,.ngg-navigation span.page-numbers,.ngg-navigation span.next,.ngg-navigation span.prev{border:1px solid #600;padding:3px 7px}.ngg-related-gallery img{margin:0 2px}
\ No newline at end of file
+.ngg-thumbnail{margin:0 12px 0 0!important}.ngg-gallery-thumbnail-box{width:20%}.ngg-gallery-thumbnail{background:url(shadowAlpha.png) bottom right no-repeat!important;margin:10px 0 0 10px!important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-navigation a.next,.ngg-navigation a.page-numbers,.ngg-navigation a.prev,.ngg-navigation span.next,.ngg-navigation span.page-numbers,.ngg-navigation span.prev{border:1px solid #600;padding:3px 7px}.ngg-related-gallery img{margin:0 2px}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.min.css
index b5700d3788b66ab5e8276b1a3ead70da506c99e1..18f55b568921cc8fb9aa57f9589927dbc36c7c3c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.min.css
@@ -1 +1 @@
-.ngg-related-gallery{background:#f9f9f9;border:1px solid #e0e0e0;overflow:hidden;margin-bottom:1em;margin-top:1em;padding:5px}.ngg-related-gallery img{border:1px solid #ddd;float:left;margin:0 3px;padding:2px;height:50px;width:50px}.ngg-related-gallery img:hover{border:1px solid #000}
\ No newline at end of file
+.ngg-related-gallery{background:#F9F9F9;border:1px solid #E0E0E0;overflow:hidden;margin-bottom:1em;margin-top:1em;padding:5px}.ngg-related-gallery img{border:1px solid #DDD;float:left;margin:0 3px;padding:2px;height:50px;width:50px}.ngg-related-gallery img:hover{border:1px solid #000}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.min.css
index 668ad6e6810ad3299016d50be347b3246c0c16b6..addb2da7df3fb10b02776a348f510edaae026996 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.min.css
@@ -1 +1 @@
-.ngg-albumtitle{border-bottom:1px dashed #aaa;padding-bottom:3px}.ngg-thumbnail{background:#eee none repeat scroll 0 50%;border-color:#ddd #bbb #aaa #ccc;border-style:solid;border-width:1px;color:inherit;margin-right:5px;padding:5px}.ngg-thumbnail img{filter:alpha(opacity=100);-moz-opacity:.99;opacity:.99;background:#fff none repeat scroll 0;border-color:#aaa #ccc #ddd #bbb;border-style:solid;border-width:1px;color:inherit;padding:2px;vertical-align:top}.ngg-thumbnail img:hover{filter:alpha(opacity=90);-moz-opacity:.9;opacity:.9;border-color:#000}.ngg-galleryoverview{overflow:hidden;margin-top:10px;width:100%;clear:both;display:block !important}.ngg-gallery-thumbnail-box{background:#eee none repeat scroll 0 50%;border-color:#ddd #bbb #aaa #ccc;border-style:solid;border-width:1px;color:inherit;display:inline;margin:3px;padding:5px;position:relative}.ngg-gallery-thumbnail img{filter:alpha(opacity=100);-moz-opacity:.99;opacity:.99;background:#fff none repeat scroll 0;border-color:#aaa #ccc #ddd #bbb;border-style:solid;border-width:1px;color:inherit;padding:2px;vertical-align:top}.ngg-gallery-thumbnail img:hover{filter:alpha(opacity=90);-moz-opacity:.9;opacity:.9;border-color:#000}.ngg-navigation a.page-numbers,.ngg-navigation a.next,.ngg-navigation a.prev,.ngg-navigation span.page-numbers,.ngg-navigation span.next,.ngg-navigation span.prev{padding:3px 7px}.ngg-imagebrowser h3{text-align:center;padding-bottom:10px}.ngg-imagebrowser .pic{background:#eee none repeat scroll 0 50%;border-color:#ddd #bbb #aaa #ccc;border-style:solid;border-width:1px;color:inherit;display:block;padding:10px}.ngg-imagebrowser img{margin:-3px;background:#fff none repeat scroll 0;border-color:#aaa #ccc #ddd #bbb;border-style:solid;border-width:1px;color:inherit;padding:2px;vertical-align:top}.ngg-imagebrowser-nav{padding:10px}.ngg-imagebrowser-nav .back:hover,.ngg-imagebrowser-nav .next:hover{border:1px solid #000}.ngg-imagebrowser-nav .back a:hover,.ngg-imagebrowser-nav .next a:hover{text-decoration:none !important}
\ No newline at end of file
+.ngg-albumtitle{border-bottom:1px dashed #AAA;padding-bottom:3px}.ngg-gallery-thumbnail img,.ngg-gallery-thumbnail-box,.ngg-imagebrowser .pic,.ngg-imagebrowser img,.ngg-thumbnail,.ngg-thumbnail img{border-style:solid;border-width:1px;color:inherit}.ngg-thumbnail{background:0 50% #EEE;border-color:#DDD #bbb #aaa #ccc;margin-right:5px;padding:5px}.ngg-thumbnail img{filter:alpha(opacity=100);-moz-opacity:.99;opacity:.99;background:0 #FFF;border-color:#AAA #ccc #ddd #bbb;padding:2px;vertical-align:top}.ngg-thumbnail img:hover{filter:alpha(opacity=90);-moz-opacity:.9;opacity:.9;border-color:#000}.ngg-galleryoverview{overflow:hidden;margin-top:10px;width:100%;clear:both;display:block!important}.ngg-gallery-thumbnail-box{background:0 50% #EEE;border-color:#DDD #bbb #aaa #ccc;display:inline;margin:3px;padding:5px;position:relative}.ngg-gallery-thumbnail img{filter:alpha(opacity=100);-moz-opacity:.99;opacity:.99;background:0 #FFF;border-color:#AAA #ccc #ddd #bbb;padding:2px;vertical-align:top}.ngg-gallery-thumbnail img:hover{filter:alpha(opacity=90);-moz-opacity:.9;opacity:.9;border-color:#000}.ngg-navigation a.next,.ngg-navigation a.page-numbers,.ngg-navigation a.prev,.ngg-navigation span.next,.ngg-navigation span.page-numbers,.ngg-navigation span.prev{padding:3px 7px}.ngg-imagebrowser h3{text-align:center;padding-bottom:10px}.ngg-imagebrowser .pic{background:0 50% #EEE;border-color:#DDD #bbb #aaa #ccc;display:block;padding:10px}.ngg-imagebrowser img{margin:-3px;background:0 #FFF;border-color:#AAA #ccc #ddd #bbb;padding:2px;vertical-align:top}.ngg-imagebrowser-nav{padding:10px}.ngg-imagebrowser-nav .back:hover,.ngg-imagebrowser-nav .next:hover{border:1px solid #000}.ngg-imagebrowser-nav .back a:hover,.ngg-imagebrowser-nav .next a:hover{text-decoration:none!important}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_dkret3.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_dkret3.min.css
index f0dfe257672abe78d3639b0de1e826250b343f2d..26f822f9756887849737aedbb914c3762e0923c7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_dkret3.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_dkret3.min.css
@@ -1 +1 @@
-.ngg-gallery-thumbnail{background:url('shadowAlpha.png') no-repeat bottom right !important;background:url('shadow.gif') no-repeat bottom right;margin:10px 0 0 10px !important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-gallery-thumbnail span{display:none}.ngg-navigation a.page-numbers,.ngg-navigation a.next,.ngg-navigation a.prev,.ngg-navigation span.page-numbers,.ngg-navigation span.next,.ngg-navigation span.prev{padding:3px 7px}.ngg-widget,.ngg-widget-slideshow{text-align:center}
\ No newline at end of file
+.ngg-gallery-thumbnail{background:url(shadowAlpha.png) bottom right no-repeat!important;margin:10px 0 0 10px!important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-gallery-thumbnail span{display:none}.ngg-navigation a.next,.ngg-navigation a.page-numbers,.ngg-navigation a.prev,.ngg-navigation span.next,.ngg-navigation span.page-numbers,.ngg-navigation span.prev{padding:3px 7px}.ngg-widget,.ngg-widget-slideshow{text-align:center}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.min.css
index d7417232712bffb79527ef96a0c0d2a241f7df8f..ca2f30b2fbad965965f109fb4763095c827fda13 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.min.css
@@ -1 +1 @@
-.ngg-albumoverview{margin:10px 0 0 0 !important}.ngg-album{margin:0 0 5px !important}.ngg-albumtitle{margin:0 0 10px 0 !important}.ngg-albumcontent{margin:0 !important}.ngg-thumbnail{float:left;margin:0 12px 0 0 !important}.ngg-thumbnail img{margin:4px 0 4px 5px !important}.ngg-album-link{margin:0 !important}.ngg-album-compact h4{margin-bottom:0 !important;margin-top:0 !important;padding:0 !important}.ngg-gallery-thumbnail-box{margin:0 !important}.ngg-gallery-thumbnail{background:url('shadowAlpha.png') no-repeat bottom right !important;background:url('shadow.gif') no-repeat bottom right;margin:10px 0 0 10px !important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px !important}.ngg-navigation a.page-numbers,.ngg-navigation a.next,.ngg-navigation a.prev,.ngg-navigation span.page-numbers,.ngg-navigation span.next,.ngg-navigation span.prev{padding:3px 7px}.ngg-related-gallery img{margin:0 2px}.ngg-related-gallery img:hover{border:1px solid #000}
\ No newline at end of file
+.ngg-albumoverview{margin:10px 0 0!important}.ngg-album{margin:0 0 5px!important}.ngg-albumtitle{margin:0 0 10px!important}.ngg-albumcontent{margin:0!important}.ngg-thumbnail{float:left;margin:0 12px 0 0!important}.ngg-thumbnail img{margin:4px 0 4px 5px!important}.ngg-album-link,.ngg-gallery-thumbnail-box{margin:0!important}.ngg-album-compact h4{margin-bottom:0!important;margin-top:0!important;padding:0!important}.ngg-gallery-thumbnail{background:url(shadowAlpha.png) bottom right no-repeat!important;margin:10px 0 0 10px!important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px!important}.ngg-navigation a.next,.ngg-navigation a.page-numbers,.ngg-navigation a.prev,.ngg-navigation span.next,.ngg-navigation span.page-numbers,.ngg-navigation span.prev{padding:3px 7px}.ngg-related-gallery img{margin:0 2px}.ngg-related-gallery img:hover{border:1px solid #000}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.min.css
index f545d4688d146ebd494794b220c3d49a337b8fa8..2893db927fbcca1439b38da84aca586f9b265e02 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.min.css
@@ -1 +1 @@
-.ngg-gallery-thumbnail{background:url('shadowAlpha.png') no-repeat bottom right !important;background:url('shadow.gif') no-repeat bottom right;margin:10px 0 0 10px !important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-gallery-thumbnail span{display:none}
\ No newline at end of file
+.ngg-gallery-thumbnail{background:url(shadowAlpha.png) bottom right no-repeat!important;margin:10px 0 0 10px!important}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-gallery-thumbnail span{display:none}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.min.css
index 4913b2e69b78171629d0e03fe908b93246c9235b..ab87df0d7971fab2d72e06c3d5e3bc563f02ae39 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.min.css
@@ -1 +1 @@
-.ngg-gallery-thumbnail{background:url('shadowAlpha.png') no-repeat bottom right !important;background:url('shadow.gif') no-repeat bottom right;margin:10px 0 0 10px !important;padding:10px 15px 10px 15px;border-color:#eee;border-style:solid none none solid;border-width:1px medium medium 1px}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-gallery-thumbnail span{margin:-6px 6px 6px -6px;text-align:center;color:gray}
\ No newline at end of file
+.ngg-gallery-thumbnail{background:url(shadowAlpha.png) bottom right no-repeat!important;margin:10px 0 0 10px!important;padding:10px 15px;border-color:#EEE;border-style:solid none none solid;border-width:1px medium medium 1px}.ngg-gallery-thumbnail img{margin:-6px 6px 6px -6px}.ngg-gallery-thumbnail span{margin:-6px 6px 6px -6px;text-align:center;color:grey}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.css
index 28d8dc1c8c2b472bed52e9622c4dc7454fc84965..74ab3df06c3debefe35e58af81010e2839c31c70 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.css
@@ -1 +1 @@
-.toplevel_page_nextgen-gallery .wp-badge{border:0;background:url('https://www.imagely.com/wp-content/uploads/2016/06/on-white-icon.png') no-repeat;background-size:140px 140px;box-shadow:none}.ngg-tab{display:none}.ngg-tab.active{display:block}#ngg-server-settings{float:left}#ngg-server-settings p{margin:0 0 .5em 0}#ngg-server-settings:nth-of-type(2){margin-left:20px}.about-text.centered{text-align:center;margin:1em}.feature-video iframe,.feature-video object,.feature-video embed{position:absolute;top:0;left:0;width:100%;height:100%}.ngg-theme-image{box-shadow:0 0 8px #888}@media only screen and (max-width:700px){#ngg-server-settings:nth-of-type(2){margin-left:0}}
\ No newline at end of file
+.toplevel_page_nextgen-gallery .wp-badge{border:none;background:url(https://www.imagely.com/wp-content/uploads/2016/06/on-white-icon.png) no-repeat;background-size:140px 140px;box-shadow:none}.ngg-tab{display:none}.ngg-tab.active{display:block}#ngg-server-settings{float:left}#ngg-server-settings p{margin:0 0 .5em}#ngg-server-settings:nth-of-type(2){margin-left:20px}.about-text.centered{text-align:center;margin:1em}.feature-video embed,.feature-video iframe,.feature-video object{position:absolute;top:0;left:0;width:100%;height:100%}.ngg-theme-image{box-shadow:0 0 8px #888}@media only screen and (max-width:700px){#ngg-server-settings:nth-of-type(2){margin-left:0}}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.js
index f1d9983bff1380436b658bcfb4cca3464d77951b..0a2e09a2a7ab29076ad5e832a6f60c3a1160a2f0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.js
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/overview.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('f(j).k(i($){$(\'#4-7-b\').g(\'a\').c(i(){$(\'#4-7-b\').g(\'a\').h(\'6-0-1\');$(\'.4-0\').h(\'1\');8 3=f(9).e(\'3\').d(\'-q\',\'\');$(\'#\'+3).5(\'1\');$(9).5(\'6-0-1\')});8 2=p.l.o.d(\'#m#\',\'\');n(\'\'===2){2=$(\'.4-0\').e(\'3\')}$(\'#\'+2).5(\'1\');$(\'#\'+2+\'-0\').5(\'6-0-1\');$(\'.6-0-1\').c()});',27,27,'tab|active|activeTab|id|ngg|addClass|nav|tabs|var|this||wrapper|click|replace|attr|jQuery|find|removeClass|function|document|ready|location|top|if|hash|window|link'.split('|'),0,{}))
+jQuery(document).ready(function(a){a("#ngg-tabs-wrapper").find("a").click(function(){a("#ngg-tabs-wrapper").find("a").removeClass("nav-tab-active"),a(".ngg-tab").removeClass("active");var t=jQuery(this).attr("id").replace("-link","");a("#"+t).addClass("active"),a(this).addClass("nav-tab-active")});var t=window.location.hash.replace("#top#","");""===t&&(t=a(".ngg-tab").attr("id")),a("#"+t).addClass("active"),a("#"+t+"-tab").addClass("nav-tab-active"),a(".nav-tab-active").click()});
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php
index 53862fb65254405951712d4c0246efab0de381e8..4906aaea2ee55b81c2e76ff4bc1fd1be1a173cf7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php
@@ -1,10 +1,5 @@
 <?php
-/*
-{
-	Module: photocrati-router,
-	Depends: { photocrati-fs }
-}
- */
+
 class M_Router extends C_Base_Module
 {
 	function define()
@@ -13,7 +8,7 @@ class M_Router extends C_Base_Module
 			'photocrati-router',
 			'Router for Pope',
 			'Provides routing capabilities for Pope modules',
-			'0.7',
+			'0.9',
 			'https://www.imagely.com',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/package.module.router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/package.module.router.php
index ee78d6b38d108b5dfeac5b7c115d00cdb809715e..ac80a65bc8906f5f015f5a26de4d485a5e25c7e3 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/package.module.router.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/package.module.router.php
@@ -1,11 +1,21 @@
 <?php
+/**
+ * Class A_Routing_App_Factory
+ * @mixin C_Component_Factory
+ * @adapts I_Component_Factory
+ */
 class A_Routing_App_Factory extends Mixin
 {
-    public function routing_app($context = FALSE, $router = FALSE)
+    function routing_app($context = FALSE, $router = FALSE)
     {
         return new C_Routing_App($context, $router);
     }
 }
+/**
+ * Class C_Http_Response_Controller
+ * @mixin Mixin_Http_Response_Actions
+ * @implements I_Http_Response
+ */
 class C_Http_Response_Controller extends C_Component
 {
     static $_instance = NULL;
@@ -17,7 +27,7 @@ class C_Http_Response_Controller extends C_Component
         }
         return self::$_instance;
     }
-    public function define()
+    function define()
     {
         $this->add_mixin('Mixin_Http_Response_Actions');
         $this->implement('I_Http_Response');
@@ -25,41 +35,41 @@ class C_Http_Response_Controller extends C_Component
 }
 class Mixin_Http_Response_Actions extends Mixin
 {
-    public function http_301_action()
+    function http_301_action()
     {
         header('HTTP/1.1 301 Permanent Redirect');
         header("Location: {$this->object->get_routed_url()}");
     }
-    public function http_302_action()
+    function http_302_action()
     {
         header('HTTP/1.1 302 Temporary Redirect');
         header("Location: {$this->object->get_routed_url()}");
     }
-    public function http_501_action()
+    function http_501_action()
     {
         header('HTTP/1.1 501 Not Implemented');
     }
-    public function http_404_action()
+    function http_404_action()
     {
         header('HTTP/1.1 404 Not found');
     }
-    public function http_202_action()
+    function http_202_action()
     {
         header('HTTP/1.1 202 Accepted');
     }
 }
 class Mixin_Router extends Mixin
 {
-    public function set_routed_app($app)
+    function set_routed_app($app)
     {
         $this->object->_routed_app = $app;
     }
-    public function &get_routed_app()
+    function &get_routed_app()
     {
         $retval = $this->object->_routed_app ? $this->object->_routed_app : $this->object->get_default_app();
         return $retval;
     }
-    public function &get_default_app()
+    function &get_default_app()
     {
         if (is_null($this->object->_default_app)) {
             $this->object->_default_app = $this->object->create_app();
@@ -67,27 +77,27 @@ class Mixin_Router extends Mixin
         $retval = $this->object->_default_app;
         return $retval;
     }
-    public function route($patterns, $handler = FALSE)
+    function route($patterns, $handler = FALSE)
     {
         $this->object->get_default_app()->route($patterns, $handler);
     }
-    public function rewrite($src, $dst, $redirect = FALSE)
+    function rewrite($src, $dst, $redirect = FALSE)
     {
         $this->object->get_default_app()->rewrite($src, $dst, $redirect);
     }
-    public function get_parameter($key, $prefix = NULL, $default = NULL)
+    function get_parameter($key, $prefix = NULL, $default = NULL)
     {
         return $this->object->get_routed_app()->get_parameter($key, $prefix, $default);
     }
-    public function param($key, $prefix = NULL, $default = NULL)
+    function param($key, $prefix = NULL, $default = NULL)
     {
         return $this->object->get_parameter($key, $prefix, $default);
     }
-    public function has_parameter_segments()
+    function has_parameter_segments()
     {
         return $this->object->get_routed_app()->has_parameter_segments();
     }
-    public function passthru()
+    function passthru()
     {
         return $this->object->get_default_app()->passthru();
     }
@@ -96,7 +106,7 @@ class Mixin_Router extends Mixin
      * @param string $uri
      * @return string
      */
-    public function get_url($uri = '/', $with_qs = TRUE, $site_url = FALSE)
+    function get_url($uri = '/', $with_qs = TRUE, $site_url = FALSE)
     {
         $retval = $this->object->join_paths($this->object->get_base_url($site_url), $uri);
         if ($with_qs) {
@@ -108,7 +118,7 @@ class Mixin_Router extends Mixin
             }
             $retval = $this->object->construct_url_from_parts($parts);
         }
-        return str_replace('\\', '/', $retval);
+        return str_replace("\\", "/", $retval);
     }
     /**
      * Currents the relative url
@@ -116,7 +126,7 @@ class Mixin_Router extends Mixin
      * @param boolean $with_qs
      * @return string
      */
-    public function get_relative_url($uri = '/', $with_qs = TRUE)
+    function get_relative_url($uri = '/', $with_qs = TRUE)
     {
         $url = $this->object->get_url($uri, $with_qs = TRUE);
         if ($url !== '/') {
@@ -130,7 +140,7 @@ class Mixin_Router extends Mixin
      * @param string $module
      * @return string
      */
-    public function get_static_url($path, $module = FALSE)
+    function get_static_url($path, $module = FALSE)
     {
         $fs = C_Fs::get_instance();
         $path = $fs->find_abspath($path, $module);
@@ -138,13 +148,13 @@ class Mixin_Router extends Mixin
         $base_url = $this->object->remove_url_segment('/index.php', $base_url);
         $path = str_replace($fs->get_document_root('plugins'), $base_url, $path);
         // adjust for possible windows hosts
-        return str_replace('\\', '/', $path);
+        return str_replace("\\", '/', $path);
     }
     /**
      * Gets the routed url
      * @returns string
      */
-    public function get_routed_url()
+    function get_routed_url()
     {
         $retval = $this->object->get_url($this->object->get_request_uri());
         if ($app = $this->object->get_routed_app()) {
@@ -158,16 +168,16 @@ class Mixin_Router extends Mixin
      * @param bool $site_url Unused
      * @return string
      */
-    public function get_base_url($site_url = FALSE)
+    function get_base_url($site_url = FALSE)
     {
         $protocol = $this->object->is_https() ? 'https://' : 'http://';
         $retval = "{$protocol}{$_SERVER['SERVER_NAME']}{$this->object->context}";
-        return str_replace('\\', '/', rtrim($retval, '/\\'));
+        return str_replace("\\", "/", rtrim($retval, "/\\"));
     }
     /**
      * Determines if the current request is over HTTPs or not
      */
-    public function is_https()
+    function is_https()
     {
         return !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' || !empty($_SERVER['HTTP_USESSL']) && strtolower($_SERVER['HTTP_USESSL']) !== 'off' || !empty($_SERVER['REDIRECT_HTTPS']) && strtolower($_SERVER['REDIRECT_HTTPS']) !== 'off' || !empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443;
     }
@@ -176,7 +186,7 @@ class Mixin_Router extends Mixin
      *
      * @param string|FALSE $request_uri
      */
-    public function serve_request()
+    function serve_request()
     {
         $served = FALSE;
         // iterate over all apps, and serve the route
@@ -191,11 +201,11 @@ class Mixin_Router extends Mixin
      * Gets the querystring of the current request
      * @return string
      */
-    public function get_querystring()
+    function get_querystring()
     {
         return isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;
     }
-    public function set_querystring($value)
+    function set_querystring($value)
     {
         $_SERVER['QUERY_STRING'] = $value;
     }
@@ -203,7 +213,7 @@ class Mixin_Router extends Mixin
      * Gets the request for the router
      * @return string
      */
-    public function get_request_uri($with_params = TRUE)
+    function get_request_uri($with_params = TRUE)
     {
         if (!empty($_SERVER['ORIG_REQUEST_URI'])) {
             $retval = $_SERVER['ORIG_REQUEST_URI'];
@@ -232,11 +242,11 @@ class Mixin_Router extends Mixin
      * Gets the method of the HTTP request
      * @return string
      */
-    public function get_request_method()
+    function get_request_method()
     {
         return $this->object->_request_method;
     }
-    public function &create_app($name = '/')
+    function &create_app($name = '/')
     {
         $factory = C_Component_Factory::get_instance();
         $app = $factory->create('routing_app', $name);
@@ -248,7 +258,7 @@ class Mixin_Router extends Mixin
      *
      * @return array
      */
-    public function get_apps()
+    function get_apps()
     {
         usort($this->object->_apps, array(&$this, '_sort_apps'));
         return array_reverse($this->object->_apps);
@@ -260,20 +270,23 @@ class Mixin_Router extends Mixin
      * @param C_Routed_App $b
      * @return int
      */
-    public function _sort_apps($a, $b)
+    function _sort_apps($a, $b)
     {
         return strnatcmp($a->context, $b->context);
     }
 }
 /**
  * A router is configured to match patterns against a url and route the request to a particular controller and action
+ * @mixin Mixin_Url_Manipulation
+ * @mixin Mixin_Router
+ * @implements I_Router
  */
 class C_Router extends C_Component
 {
     static $_instances = array();
-    public $_apps = array();
-    public $_default_app = NULL;
-    public function define($context = FALSE)
+    var $_apps = array();
+    var $_default_app = NULL;
+    function define($context = FALSE)
     {
         if (!$context or $context == 'all') {
             $context = '/';
@@ -283,7 +296,7 @@ class C_Router extends C_Component
         $this->add_mixin('Mixin_Router');
         $this->implement('I_Router');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_request_method = !empty($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : null;
@@ -305,7 +318,7 @@ class Mixin_Routing_App extends Mixin
      * @param array $routes URL to route, eg /page/{page}/
      * @param array $handler Formatted array
      */
-    public function route($routes, $handler)
+    function route($routes, $handler)
     {
         // ensure that the routing patterns array exists
         if (!is_array($this->object->_routing_patterns)) {
@@ -330,7 +343,7 @@ class Mixin_Routing_App extends Mixin
      * @param string $dst Destination URL
      * @param bool $redirect FALSE for internal handling, otherwise the HTTP code to send
      */
-    public function rewrite($src, $dst, $redirect = FALSE, $stop = FALSE)
+    function rewrite($src, $dst, $redirect = FALSE, $stop = FALSE)
     {
         // ensure that rewrite patterns array exists
         if (!is_array($this->object->_rewrite_patterns)) {
@@ -341,7 +354,7 @@ class Mixin_Routing_App extends Mixin
         // Assign rewrite definition
         $definition = array('dst' => $dst, 'redirect' => $redirect, 'stop' => $stop);
         // We treat wildcards much differently than normal rewrites
-        if (preg_match('/\\{[\\.\\\\*]/', $src)) {
+        if (preg_match("/\\{[\\.\\\\*]/", $src)) {
             $pattern = str_replace('{*}', '(.*?)', $src);
             $pattern = str_replace('{.*}', '(.*?)', $pattern);
             $pattern = str_replace('{\\w}', '([^/]*)', $pattern);
@@ -360,26 +373,26 @@ class Mixin_Routing_App extends Mixin
      * Gets an instance of the router
      * @return type
      */
-    public function get_router()
+    function get_router()
     {
         return C_Router::get_instance();
     }
-    public function get_app_url($request_uri = FALSE, $with_qs = FALSE)
+    function get_app_url($request_uri = FALSE, $with_qs = FALSE)
     {
         return $this->object->get_router()->get_url($this->object->get_app_uri($request_uri), $with_qs);
     }
-    public function get_routed_url($with_qs = TRUE)
+    function get_routed_url($with_qs = TRUE)
     {
         return $this->object->get_app_url(FALSE, $with_qs);
     }
-    public function get_app_uri($request_uri = FALSE)
+    function get_app_uri($request_uri = FALSE)
     {
         if (!$request_uri) {
             $request_uri = $this->object->get_app_request_uri();
         }
         return $this->object->join_paths($this->object->context, $request_uri);
     }
-    public function get_app_request_uri()
+    function get_app_request_uri()
     {
         $retval = FALSE;
         if ($this->object->_request_uri) {
@@ -398,7 +411,7 @@ class Mixin_Routing_App extends Mixin
      * Sets the application request uri
      * @param type $uri
      */
-    public function set_app_request_uri($uri)
+    function set_app_request_uri($uri)
     {
         $this->object->_request_uri = $uri;
     }
@@ -406,7 +419,7 @@ class Mixin_Routing_App extends Mixin
      * Gets the application's routing regex pattern
      * @return string
      */
-    public function get_app_routing_pattern()
+    function get_app_routing_pattern()
     {
         return $this->object->_route_to_regex($this->object->context);
     }
@@ -414,7 +427,7 @@ class Mixin_Routing_App extends Mixin
      * Determines whether this app serves the request
      * @return boolean|string
      */
-    public function does_app_serve_request()
+    function does_app_serve_request()
     {
         $retval = FALSE;
         $request_uri = $this->object->get_router()->get_request_uri(TRUE);
@@ -442,7 +455,7 @@ class Mixin_Routing_App extends Mixin
      * redirect, if we're to do so. Otherwise FALSE
      * @return int|bool
      */
-    public function do_rewrites($request_uri = FALSE)
+    function do_rewrites($request_uri = FALSE)
     {
         $redirect = FALSE;
         static $stop_processing = FALSE;
@@ -521,7 +534,7 @@ class Mixin_Routing_App extends Mixin
      *
      * @return bool
      */
-    public function serve_request()
+    function serve_request()
     {
         $served = FALSE;
         // ensure that the routing patterns array exists
@@ -583,7 +596,7 @@ class Mixin_Routing_App extends Mixin
      * Executes an action of a particular controller
      * @param array $handler
      */
-    public function execute_route_handler($handler)
+    function execute_route_handler($handler)
     {
         // Get action
         $action = $handler['action'];
@@ -599,7 +612,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $handler
      * @return array
      */
-    public function parse_route_handler($handler)
+    function parse_route_handler($handler)
     {
         if (is_string($handler)) {
             $handler = array_combine(array('controller', 'action'), explode('#', $handler));
@@ -614,7 +627,7 @@ class Mixin_Routing_App extends Mixin
         }
         return $handler;
     }
-    public function add_placeholder_params_from_matches($matches)
+    function add_placeholder_params_from_matches($matches)
     {
         // Add the placeholder parameter values to the _params array
         foreach ($matches as $key => $value) {
@@ -627,7 +640,7 @@ class Mixin_Routing_App extends Mixin
     /**
      * Used to pass execution to PHP and perhaps an above framework
      */
-    public function passthru()
+    function passthru()
     {
     }
     /**
@@ -636,7 +649,7 @@ class Mixin_Routing_App extends Mixin
      * @param stirng $value
      * @param string $source
      */
-    public function add_placeholder_param($name, $value, $source = NULL)
+    function add_placeholder_param($name, $value, $source = NULL)
     {
         if (!is_array($this->object->_parameters)) {
             $this->object->_parameters = array('global');
@@ -652,7 +665,7 @@ class Mixin_Routing_App extends Mixin
      * @param string $route
      * @return string
      */
-    public function _route_to_regex($route)
+    function _route_to_regex($route)
     {
         // Get the settings manager
         $settings = $this->object->_settings;
@@ -673,10 +686,10 @@ class Mixin_Routing_App extends Mixin
         }
         // If parameters come after a slug, it might appear as well
         if ($param_slug) {
-            $route_regex .= '(' . preg_quote($param_slug, '#') . '/)?';
+            $route_regex .= "(" . preg_quote($param_slug, '#') . '/)?';
         }
         // Parameter might follow the request uri
-        $route_regex .= '(/?([^/]+\\-\\-)?[^/]+\\-\\-[^/]+/?){0,}';
+        $route_regex .= "(/?([^/]+\\-\\-)?[^/]+\\-\\-[^/]+/?){0,}";
         // Create the regex
         $route_regex = '#' . $route_regex . '/?$#i';
         // convert placeholders to regex as well
@@ -702,12 +715,12 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $default
      * @return mixed
      */
-    public function get_parameter($key, $id = NULL, $default = NULL, $segment = FALSE, $url = FALSE)
+    function get_parameter($key, $id = NULL, $default = NULL, $segment = FALSE, $url = FALSE)
     {
         $retval = $default;
         $settings = $this->object->_settings;
         $quoted_key = preg_quote($key, '#');
-        $id = $id ? preg_quote($id, '#') : '[^/]+';
+        $id = $id ? preg_quote($id, '#') : "[^/]+";
         $param_prefix = preg_quote($settings->router_param_prefix, '#');
         $param_sep = preg_quote($settings->router_param_separator, '#');
         $param_regex = "#/((?P<id>{$id}){$param_sep})?({$param_prefix}[-_]?)?{$quoted_key}{$param_sep}(?P<value>[^/\\?]+)/?#i";
@@ -718,7 +731,7 @@ class Mixin_Routing_App extends Mixin
                 if ($segment) {
                     $retval = array('segment' => $matches[0], 'source' => $source_name);
                 } else {
-                    $retval = $matches['value'];
+                    $retval = $this->object->recursive_stripslashes($matches['value']);
                 }
                 $found = TRUE;
                 break;
@@ -756,7 +769,7 @@ class Mixin_Routing_App extends Mixin
      * @param string $_context Private. Use esc_url_raw() for database usage.
      * @return string The cleaned $url after the 'clean_url' filter is applied.
      */
-    public function esc_url($url, $protocols = null, $_context = 'display')
+    function esc_url($url, $protocols = null, $_context = 'display')
     {
         $original_url = $url;
         $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\\|*\'()\\x80-\\xff]|i', '', $url);
@@ -767,7 +780,7 @@ class Mixin_Routing_App extends Mixin
         if ('display' == $_context) {
             $url = wp_kses_normalize_entities($url);
             $url = str_replace('&amp;', '&#038;', $url);
-            $url = str_replace('\'', '&#039;', $url);
+            $url = str_replace("'", '&#039;', $url);
         }
         if (!empty($url[0]) && '/' === $url[0]) {
             $good_protocol_url = $url;
@@ -797,7 +810,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $value
      * @param mixed $id
      */
-    public function set_parameter_value($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
+    function set_parameter_value($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
     {
         // Remove the parameter from both the querystring and request uri
         $retval = $this->object->remove_parameter($key, $id, $url);
@@ -827,7 +840,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $id
      * @return string
      */
-    public function remove_param($key, $id = NULL, $url = FALSE)
+    function remove_param($key, $id = NULL, $url = FALSE)
     {
         return $this->object->remove_parameter($key, $id, $url);
     }
@@ -838,7 +851,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $id
      * @return string
      */
-    public function remove_parameter($key, $id = NULL, $url = FALSE)
+    function remove_parameter($key, $id = NULL, $url = FALSE)
     {
         $retval = $url;
         $settings = $this->object->_settings;
@@ -882,7 +895,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $value
      * @param mixed $id
      */
-    public function add_parameter_to_app_request_uri($key, $value, $id = NULL, $use_prefix = FALSE)
+    function add_parameter_to_app_request_uri($key, $value, $id = NULL, $use_prefix = FALSE)
     {
         $settings = $this->object->_settings;
         $param_slug = $settings->router_param_slug;
@@ -902,7 +915,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $id
      * @return string
      */
-    public function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
+    function create_parameter_segment($key, $value, $id = NULL, $use_prefix = FALSE)
     {
         $settings = $this->object->_settings;
         if ($use_prefix) {
@@ -926,7 +939,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $value
      * @param mixed $id
      */
-    public function set_parameter($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
+    function set_parameter($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
     {
         return $this->object->set_parameter_value($key, $value, $id, $use_prefix, $url);
     }
@@ -936,7 +949,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $value
      * @param mixed $id
      */
-    public function set_param($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
+    function set_param($key, $value, $id = NULL, $use_prefix = FALSE, $url = FALSE)
     {
         return $this->object->set_parameter_value($key, $value, $id, $use_prefix = FALSE, $url);
     }
@@ -947,7 +960,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $default
      * @return mixed
      */
-    public function get_parameter_value($key, $id = NULL, $default = NULL, $url = FALSE)
+    function get_parameter_value($key, $id = NULL, $default = NULL, $url = FALSE)
     {
         return $this->object->get_parameter($key, $id, $default, FALSE, $url);
     }
@@ -958,7 +971,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $default
      * @return mixed
      */
-    public function get_parameter_segment($key, $id = NULL, $url = FALSE)
+    function get_parameter_segment($key, $id = NULL, $url = FALSE)
     {
         return $this->object->get_parameter($key, $id, NULL, TRUE, $url);
     }
@@ -966,25 +979,25 @@ class Mixin_Routing_App extends Mixin
      * Gets sources used for parsing and extracting parameters
      * @return array
      */
-    public function get_parameter_sources()
+    function get_parameter_sources()
     {
         return array('querystring' => $this->object->get_formatted_querystring(), 'request_uri' => $this->object->get_app_request_uri());
     }
-    public function get_postdata()
+    function get_postdata()
     {
-        $retval = '/' . urldecode(file_get_contents('php://input'));
+        $retval = '/' . urldecode(file_get_contents("php://input"));
         $settings = $this->object->_settings;
         $retval = str_replace(array('&', '='), array('/', $settings->router_param_separator), $retval);
         return $retval;
     }
-    public function get_formatted_querystring()
+    function get_formatted_querystring()
     {
         $retval = '/' . $this->object->get_router()->get_querystring();
         $settings = $this->object->_settings;
         $retval = str_replace(array('&', '='), array('/', $settings->router_param_separator), $retval);
         return $retval;
     }
-    public function has_parameter_segments()
+    function has_parameter_segments()
     {
         $retval = FALSE;
         $settings = $this->object->_settings;
@@ -1008,7 +1021,7 @@ class Mixin_Routing_App extends Mixin
      * @param mixed $value Value to be processed
      * @return mixed Resulting value
      */
-    public function recursive_stripslashes($value)
+    function recursive_stripslashes($value)
     {
         if (is_string($value)) {
             $value = stripslashes($value);
@@ -1024,24 +1037,30 @@ class Mixin_Routing_App extends Mixin
         return $value;
     }
 }
+/**
+ * Class C_Routing_App
+ * @mixin Mixin_Url_Manipulation
+ * @mixin Mixin_Routing_App
+ * @implements I_Routing_App
+ */
 class C_Routing_App extends C_Component
 {
     static $_instances = array();
-    public $_request_uri = FALSE;
-    public $_settings = null;
-    public function define($context = FALSE)
+    var $_request_uri = FALSE;
+    var $_settings = null;
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Url_Manipulation');
         $this->add_mixin('Mixin_Routing_App');
         $this->implement('I_Routing_App');
     }
-    public function initialize()
+    function initialize()
     {
         parent::initialize();
         $this->_settings = $this->object->get_routing_settings();
     }
-    public function get_routing_settings()
+    function get_routing_settings()
     {
         $settings = C_NextGen_Settings::get_instance();
         $object = new stdClass();
@@ -1060,12 +1079,12 @@ class C_Routing_App extends C_Component
 }
 class Mixin_Url_Manipulation extends Mixin
 {
-    public function join_paths()
+    function join_paths()
     {
         $args = func_get_args();
         $parts = $this->_flatten_array($args);
         foreach ($parts as &$part) {
-            $part = trim(str_replace('\\', '/', $part), '/');
+            $part = trim(str_replace("\\", '/', $part), "/");
         }
         return implode('/', $parts);
     }
@@ -1075,7 +1094,7 @@ class Mixin_Url_Manipulation extends Mixin
      * @param string $url
      * @return string
      */
-    public function remove_url_segment($segment, $url)
+    function remove_url_segment($segment, $url)
     {
         $retval = $url;
         $parts = parse_url($url);
@@ -1099,7 +1118,7 @@ class Mixin_Url_Manipulation extends Mixin
      * @param bool $exclude_duplicates (optional - defaults to TRUE)
      * @return array
      */
-    public function _flatten_array($array, $parent = NULL, $exclude_duplicates = TRUE)
+    function _flatten_array($array, $parent = NULL, $exclude_duplicates = TRUE)
     {
         if (is_array($array)) {
             // We're to add each element to the parent array
@@ -1133,16 +1152,16 @@ class Mixin_Url_Manipulation extends Mixin
         }
         return $array;
     }
-    public function join_querystrings()
+    function join_querystrings()
     {
         $parts = array();
         $retval = array();
         $params = func_get_args();
         $parts = $this->_flatten_array($params);
         foreach ($parts as $part) {
-            $part = explode('&', $part);
+            $part = explode("&", $part);
             foreach ($part as $segment) {
-                $segment = explode('=', $segment);
+                $segment = explode("=", $segment);
                 $key = $segment[0];
                 $value = isset($segment[1]) ? $segment[1] : '';
                 $retval[$key] = $value;
@@ -1150,7 +1169,7 @@ class Mixin_Url_Manipulation extends Mixin
         }
         return $this->object->assoc_array_to_querystring($retval);
     }
-    public function assoc_array_to_querystring($arr)
+    function assoc_array_to_querystring($arr)
     {
         $retval = array();
         foreach ($arr as $key => $val) {
@@ -1158,14 +1177,14 @@ class Mixin_Url_Manipulation extends Mixin
                 $retval[] = strlen($val) ? "{$key}={$val}" : $key;
             }
         }
-        return implode('&', $retval);
+        return implode("&", $retval);
     }
     /**
      * Constructs a url from individual parts, created by parse_url
      * @param array $parts
      * @return string
      */
-    public function construct_url_from_parts($parts)
+    function construct_url_from_parts($parts)
     {
         // let relative paths be relative, and full paths full
         $prefix = '';
@@ -1181,7 +1200,7 @@ class Mixin_Url_Manipulation extends Mixin
         }
         return $retval;
     }
-    public function get_parameter_segments($request_uri)
+    function get_parameter_segments($request_uri)
     {
         return str_replace($this->strip_param_segments($request_uri), '', $request_uri);
     }
@@ -1190,7 +1209,7 @@ class Mixin_Url_Manipulation extends Mixin
      * @param string $request_uri
      * @return string
      */
-    public function strip_param_segments($request_uri, $remove_slug = TRUE)
+    function strip_param_segments($request_uri, $remove_slug = TRUE)
     {
         $retval = $request_uri ? $request_uri : '/';
         $settings = C_NextGen_Settings::get_instance();
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php
index 8de617bad8dc57607bca6d778e6bd87c42c8933a..9c2d2de7e44b97993970b51b59014de81dffc45c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php
@@ -1,11 +1,4 @@
 <?php
-
-/***
- {
-	Module: photocrati-security
- }
- ***/
-
 class M_Security extends C_Base_Module
 {
 	function define()
@@ -14,7 +7,7 @@ class M_Security extends C_Base_Module
 			'photocrati-security',
 			'Security',
 			'Provides utilities to check for credentials and security',
-			'0.2',
+			'0.3',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/package.module.security.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/package.module.security.php
index 9fd779efacdde2f4b6bfff9e39b89dbb26b7fd42..3fdb34fa9198de7a8e14d0cf21f3ee3af8a00f8c 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/package.module.security.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/package.module.security.php
@@ -1,57 +1,62 @@
 <?php
+/**
+ * Class A_Security_Factory
+ * @mixin C_Component_Factory
+ * @adapts I_Component_Factory
+ */
 class A_Security_Factory extends Mixin
 {
-    public function wordpress_security_manager($context = FALSE)
+    function wordpress_security_manager($context = FALSE)
     {
         return new C_WordPress_Security_Manager($context);
     }
-    public function security_manager($context = FALSE)
+    function security_manager($context = FALSE)
     {
         return $this->object->wordpress_security_manager($context);
     }
-    public function wordpress_security_actor($context = FALSE)
+    function wordpress_security_actor($context = FALSE)
     {
         return new C_WordPress_Security_Actor($context);
     }
-    public function wordpress_security_token($context = FALSE)
+    function wordpress_security_token($context = FALSE)
     {
         return new C_Wordpress_Security_Token($context);
     }
-    public function security_token($context)
+    function security_token($context)
     {
         return $this->object->wordpress_security_token($context);
     }
 }
 class Mixin_Security_Actor extends Mixin
 {
-    public function add_capability($capability_name)
+    function add_capability($capability_name)
     {
         return false;
     }
-    public function remove_capability($capability_name)
+    function remove_capability($capability_name)
     {
         return false;
     }
-    public function is_allowed($capability_name, $args = null)
+    function is_allowed($capability_name, $args = null)
     {
         return false;
     }
-    public function is_user()
+    function is_user()
     {
         return false;
     }
 }
 class Mixin_Security_Actor_Entity extends Mixin
 {
-    public $entity_object = null;
-    public $entity_props = null;
+    var $entity_object = null;
+    var $entity_props = null;
     // Note, an Actor with null $entity is considered a "Guest", i.e. no privileges
-    public function set_entity($entity, $entity_props = null)
+    function set_entity($entity, $entity_props = null)
     {
         $this->object->entity_object = $entity;
         $this->object->entity_props = $entity_props;
     }
-    public function get_entity($entity = null)
+    function get_entity($entity = null)
     {
         if ($entity == null) {
             $entity = $this->object->entity_object;
@@ -61,7 +66,7 @@ class Mixin_Security_Actor_Entity extends Mixin
         }
         return null;
     }
-    public function get_entity_id($entity = null)
+    function get_entity_id($entity = null)
     {
         $entity = $this->object->get_entity($entity);
         if ($entity != null) {
@@ -72,7 +77,7 @@ class Mixin_Security_Actor_Entity extends Mixin
         }
         return null;
     }
-    public function get_entity_type($entity = null)
+    function get_entity_type($entity = null)
     {
         $entity = $this->object->get_entity($entity);
         if ($entity != null) {
@@ -87,38 +92,44 @@ class Mixin_Security_Actor_Entity extends Mixin
 // XXX not used yet
 class Mixin_Security_Entity_List extends Mixin
 {
-    public $_entity_list;
-    public function add_entity($entity, $entity_props = null)
+    var $_entity_list;
+    function add_entity($entity, $entity_props = null)
     {
         if (!$this->object->is_entity($entity)) {
             $entity_props = array_merge((array) $entity_props, array('object' => $entity));
             $this->object->_entity_list[] = $entity_props;
         }
     }
-    public function remove_entity($entity)
+    function remove_entity($entity)
     {
         if ($this->object->is_entity($entity)) {
         }
     }
-    public function is_entity($entity)
+    function is_entity($entity)
     {
         return $this->object->get_entity_set($entity);
     }
-    public function get_entity_set($entity)
+    function get_entity_set($entity)
     {
         foreach ($this->_entity_list as $entity_set) {
         }
     }
-    public function get_entity_id($entity)
+    function get_entity_id($entity)
     {
     }
-    public function get_entity_type($entity)
+    function get_entity_type($entity)
     {
     }
 }
+/**
+ * Class C_Security_Actor
+ * @mixin Mixin_Security_Actor
+ * @mixin Mixin_Security_Actor_Entity
+ * @implements I_Security_Actor
+ */
 class C_Security_Actor extends C_Component
 {
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Security_Actor');
@@ -128,7 +139,7 @@ class C_Security_Actor extends C_Component
 }
 class Mixin_Security_Manager extends Mixin
 {
-    public function is_allowed($capability_name, $args = null)
+    function is_allowed($capability_name, $args = null)
     {
         $actor = $this->object->get_current_actor();
         if ($actor != null) {
@@ -136,26 +147,32 @@ class Mixin_Security_Manager extends Mixin
         }
         return false;
     }
-    public function get_actor($actor_id, $actor_type = null, $args = null)
+    function get_actor($actor_id, $actor_type = null, $args = null)
     {
         return null;
     }
-    public function get_current_actor()
+    function get_current_actor()
     {
         return null;
     }
 }
 class Mixin_Security_Manager_Request extends Mixin
 {
-    public function get_request_token($action_name, $args = null)
+    function get_request_token($action_name, $args = null)
     {
         return null;
     }
 }
+/**
+ * Class C_Security_Manager
+ * @mixin Mixin_Security_Manager
+ * @mixin Mixin_Security_Manager_Request
+ * @implements I_Security_Manager
+ */
 class C_Security_Manager extends C_Component
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Security_Manager');
@@ -172,51 +189,57 @@ class C_Security_Manager extends C_Component
 }
 class Mixin_Security_Token extends Mixin
 {
-    public function get_request_list($args = null)
+    function get_request_list($args = null)
     {
         return array();
     }
-    public function get_form_html($args = null)
+    function get_form_html($args = null)
     {
         return null;
     }
-    public function check_request($request_values)
+    function check_request($request_values)
     {
         return false;
     }
-    public function check_current_request()
+    function check_current_request()
     {
         return $this->object->check_request($_REQUEST);
     }
 }
 class Mixin_Security_Token_Property extends Mixin
 {
-    public $_action_name;
-    public $_args;
-    public function init_token($action_name, $args = null)
+    var $_action_name;
+    var $_args;
+    function init_token($action_name, $args = null)
     {
         $this->object->_action_name = $action_name;
         $this->object->_args = $args;
     }
-    public function get_action_name()
+    function get_action_name()
     {
         return $this->object->_action_name;
     }
-    public function get_property($name)
+    function get_property($name)
     {
         if (isset($this->object->_args[$name])) {
             return $this->object->_args[$name];
         }
         return null;
     }
-    public function get_property_list()
+    function get_property_list()
     {
         return array_keys((array) $this->object->_args);
     }
 }
+/**
+ * Class C_Security_Token
+ * @mixin Mixin_Security_Token
+ * @mixin Mixin_Security_Token_Property
+ * @implements I_Security_Token
+ */
 class C_Security_Token extends C_Component
 {
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->implement('I_Security_Token');
@@ -226,7 +249,7 @@ class C_Security_Token extends C_Component
 }
 class Mixin_WordPress_Security_Actor extends Mixin
 {
-    public function add_capability($capability_name)
+    function add_capability($capability_name)
     {
         $entity = $this->object->get_entity();
         if ($entity != null) {
@@ -236,7 +259,7 @@ class Mixin_WordPress_Security_Actor extends Mixin
         }
         return false;
     }
-    public function remove_capability($capability_name)
+    function remove_capability($capability_name)
     {
         $entity = $this->object->get_entity();
         if ($entity != null && $this->object->is_allowed($capability_name)) {
@@ -246,7 +269,7 @@ class Mixin_WordPress_Security_Actor extends Mixin
         }
         return false;
     }
-    public function is_allowed($capability_name, $args = null)
+    function is_allowed($capability_name, $args = null)
     {
         $entity = $this->object->get_entity();
         if ($entity != null) {
@@ -255,18 +278,18 @@ class Mixin_WordPress_Security_Actor extends Mixin
         }
         return false;
     }
-    public function is_user()
+    function is_user()
     {
         return $this->object->get_entity_type() == 'user';
     }
-    public function get_native_action($capability_name, $args = null)
+    function get_native_action($capability_name, $args = null)
     {
         return $capability_name;
     }
 }
 class Mixin_WordPress_Security_Action_Converter extends Mixin
 {
-    public function get_native_action($capability_name, $args = null)
+    function get_native_action($capability_name, $args = null)
     {
         switch ($capability_name) {
             case 'nextgen_edit_settings':
@@ -300,9 +323,14 @@ class Mixin_WordPress_Security_Action_Converter extends Mixin
         return $capability_name;
     }
 }
+/**
+ * Class C_WordPress_Security_Actor
+ * @mixin Mixin_WordPress_Security_Actor
+ * @mixin Mixin_WordPress_Security_Action_Converter
+ */
 class C_WordPress_Security_Actor extends C_Security_Actor
 {
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_WordPress_Security_Actor');
@@ -311,7 +339,7 @@ class C_WordPress_Security_Actor extends C_Security_Actor
 }
 class Mixin_WordPress_Security_Manager extends Mixin
 {
-    public function get_actor($actor_id, $actor_type = null, $args = null)
+    function get_actor($actor_id, $actor_type = null, $args = null)
     {
         if ($actor_type == null) {
             $actor_type = 'user';
@@ -342,7 +370,7 @@ class Mixin_WordPress_Security_Manager extends Mixin
         }
         return $this->object->get_guest_actor();
     }
-    public function get_current_actor()
+    function get_current_actor()
     {
         // If the current_user has an id of 0, then perhaps something went wrong
         // with trying to parse the cookie. In that case, we'll force WordPress to try
@@ -360,7 +388,7 @@ class Mixin_WordPress_Security_Manager extends Mixin
         }
         return $this->object->get_actor(get_current_user_id(), 'user');
     }
-    public function get_guest_actor()
+    function get_guest_actor()
     {
         $factory = C_Component_Factory::get_instance();
         $actor = $factory->create('wordpress_security_actor', 'user');
@@ -371,7 +399,7 @@ class Mixin_WordPress_Security_Manager extends Mixin
 }
 class Mixin_WordPress_Security_Manager_Request extends Mixin
 {
-    public function get_request_token($action_name, $args = null)
+    function get_request_token($action_name, $args = null)
     {
         $factory = C_Component_Factory::get_instance();
         $token = $factory->create('wordpress_security_token');
@@ -379,10 +407,15 @@ class Mixin_WordPress_Security_Manager_Request extends Mixin
         return $token;
     }
 }
+/**
+ * Class C_WordPress_Security_Manager
+ * @mixin Mixin_WordPress_Security_Manager
+ * @mixin Mixin_WordPress_Security_Manager_Request
+ */
 class C_WordPress_Security_Manager extends C_Security_Manager
 {
     static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_WordPress_Security_Manager');
@@ -399,7 +432,7 @@ class C_WordPress_Security_Manager extends C_Security_Manager
 }
 class Mixin_Wordpress_Security_Token extends Mixin
 {
-    public function get_request_list($args = null)
+    function get_request_list($args = null)
     {
         $prefix = isset($args['prefix']) ? $args['prefix'] : null;
         $action_name = $this->object->get_action_name();
@@ -411,7 +444,7 @@ class Mixin_Wordpress_Security_Token extends Mixin
         $list[$prefix . $action_name . '_sec'] = wp_create_nonce($action);
         return $list;
     }
-    public function get_form_html($args = null)
+    function get_form_html($args = null)
     {
         $list = $this->object->get_request_list($args);
         $out = null;
@@ -420,12 +453,12 @@ class Mixin_Wordpress_Security_Token extends Mixin
         }
         return $out;
     }
-    public function get_json($args = null)
+    function get_json($args = null)
     {
         $list = $this->object->get_request_list($args);
         return json_encode($list);
     }
-    public function check_request($request_values)
+    function check_request($request_values)
     {
         $action_name = $this->object->get_action_name();
         $action = $this->object->get_nonce_name();
@@ -439,7 +472,7 @@ class Mixin_Wordpress_Security_Token extends Mixin
         }
         return false;
     }
-    public function get_nonce_name()
+    function get_nonce_name()
     {
         $action_name = $this->object->get_action_name();
         $prop_list = $this->object->get_property_list();
@@ -453,16 +486,21 @@ class Mixin_Wordpress_Security_Token extends Mixin
 }
 class Mixin_Wordpress_Security_Token_MVC extends Mixin
 {
-    public function check_request($request_values)
+    function check_request($request_values)
     {
         // XXX check URL parameters passed with the MVC module
         //
         return $this->call_parent('check_request', $request_values);
     }
 }
+/**
+ * Class C_Wordpress_Security_Token
+ * @mixin Mixin_Wordpress_Security_Token
+ * @mixin Mixin_Wordpress_Security_Token_MVC
+ */
 class C_Wordpress_Security_Token extends C_Security_Token
 {
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Wordpress_Security_Token');
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/package.module.simple_html_dom.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/package.module.simple_html_dom.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3d9bbc7f3711e882119cd6b3af051245d859d04
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/package.module.simple_html_dom.php
@@ -0,0 +1 @@
+<?php
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php
index 9f562ce3ca79156557a8b91be96cf586d00636d6..3c593869ecb46bac551b9de4e1cc4628b42e5af5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php
@@ -1,11 +1,4 @@
 <?php
-
-/***
-{
-Module: photocrati-third_party_compat,
-Depends: {}
-}
- ***/
 class M_Third_Party_Compat extends C_Base_Module
 {
     function define()
@@ -14,7 +7,7 @@ class M_Third_Party_Compat extends C_Base_Module
             'photocrati-third_party_compat',
             'Third Party Compatibility',
             "Adds Third party compatibility hacks, adjustments, and modifications",
-            '0.4',
+            '0.6',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
@@ -104,6 +97,8 @@ class M_Third_Party_Compat extends C_Base_Module
         add_action('init', array(&$this, 'flattr'),     PHP_INT_MAX);
         add_action('wp',   array(&$this, 'bjlazyload'), PHP_INT_MAX);
 
+        add_action('admin_init', array($this, 'excellent_themes_admin'), -10);
+
         add_action('plugins_loaded', array(&$this, 'wpml'), PHP_INT_MAX);
         add_action('plugins_loaded', array(&$this, 'wpml_translation_management'), PHP_INT_MAX);
 
@@ -116,11 +111,8 @@ class M_Third_Party_Compat extends C_Base_Module
         add_filter('get_the_excerpt', array($this, 'enable_galleries_in_excerpts'), PHP_INT_MAX-1);
 	    add_action('debug_bar_enqueue_scripts', array($this, 'no_debug_bar'));
         add_filter('ngg_non_minified_modules', array($this, 'dont_minify_nextgen_pro_cssjs'));
-        add_filter('run_ngg_resource_manager', array($this, 'check_woocommerce_download'));
-        add_filter('run_ngg_resource_manager', array($this, 'check_wpecommerce_download'));
-        add_filter('run_ngg_resource_manager', array($this, 'check_mafs_download'));
-        add_filter('run_ngg_resource_manager', array($this, 'check_wps_download'));
         add_filter('ngg_atp_show_display_type', array($this, 'atp_check_pro_albums'), 10, 2);
+        add_filter('run_ngg_resource_manager', array($this, 'run_ngg_resource_manager'));
 
         // WPML fix
         if (class_exists('SitePress')) {
@@ -133,70 +125,64 @@ class M_Third_Party_Compat extends C_Base_Module
         add_action('the_post', array(&$this, 'add_ngg_pro_page_parameter'));
     }
 
-    function atp_check_pro_albums($available, $display_type)
-    {
-        if (!defined('NGG_PRO_ALBUMS'))
-            return $available;
-
-        if (in_array($display_type->name, array(NGG_PRO_LIST_ALBUM, NGG_PRO_GRID_ALBUM))
-        &&  $this->get_registry()->is_module_loaded(NGG_PRO_ALBUMS))
-            $available = TRUE;
-
-        return $available;
-    }
-
     /**
-     * Determine if the requested URL is a WP-Photo-Seller download and adjust the resource manager
+     * Some other plugins output content and die(); this causes problems with our resource manager which uses output buffering
      *
      * @param bool $valid_request
      * @return bool
      */
-    function check_wps_download($valid_request = TRUE)
+    function run_ngg_resource_manager($valid_request = TRUE)
     {
+        // WP-Post-To-PDF-Enhanced
+        if (class_exists('wpptopdfenh') && !empty($_GET['format']))
+            $valid_request = FALSE;
+
+        // WP-Photo-Seller download
         if (class_exists('WPS') && isset($_REQUEST['wps_file_dl']) && $_REQUEST['wps_file_dl'] == '1')
             $valid_request = FALSE;
-        return $valid_request;
-    }
 
-    /**
-     * Determine if the requested URL is a Multiverso Advanced File Sharing download and adjust the resource manager
-     *
-     * @param bool $valid_request
-     * @return bool
-     */
-    function check_mafs_download($valid_request = TRUE)
-    {
+        // Multiverso Advanced File Sharing download
         if (function_exists('mv_install') && isset($_GET['upf']) && isset($_GET['id']))
             $valid_request = FALSE;
-        return $valid_request;
-    }
 
-    /**
-     * Determine if the requested URL is a WooCommerce download and adjust the resource manager
-     *
-     * Our resource manager's output buffers conflict with Woo's use of output buffers to handle chunked reading of
-     * large files in WC_Download_Handler::readfile_chunked()
-     * @param bool $valid_request
-     * @return bool
-     */
-    function check_woocommerce_download($valid_request = TRUE)
-    {
+        // WooCommerce downloads
         if (class_exists('WC_Download_Handler') && isset($_GET['download_file']) && isset($_GET['order']) && isset($_GET['email']))
             $valid_request = FALSE;
+
+        // WP-E-Commerce
+        if (isset($_GET['wpsc_download_id']) || (function_exists('wpsc_download_file') && isset($_GET['downloadid'])))
+            $valid_request = FALSE;
+
+        // Easy Digital Downloads
+        if (function_exists('edd_process_download') && (isset($_GET['download_id']) || isset($_GET['download'])))
+            $valid_request = FALSE;
+
         return $valid_request;
     }
 
     /**
-     * Determine if the requested URL is a WPE-Commerce download and adjust the resource manager
-     *
-     * @param bool $valid_request
-     * @return bool
+     * This style causes problems with Excellent Themes admin settings
      */
-    function check_wpecommerce_download($valid_request = TRUE)
+    function excellent_themes_admin()
     {
-        if (function_exists('wpsc_download_file') && isset($_GET['downloadid']))
-            $valid_request = FALSE;
-        return $valid_request;
+        if (is_admin()
+        &&  defined('ET_TAXONOMY_META_OPTION_KEY')
+        &&  (!empty($_GET['page']) && strpos($_GET['page'], 'et_') == 0))
+        {
+            wp_deregister_style('ngg-jquery-ui');
+        }
+    }
+
+    function atp_check_pro_albums($available, $display_type)
+    {
+        if (!defined('NGG_PRO_ALBUMS'))
+            return $available;
+
+        if (in_array($display_type->name, array(NGG_PRO_LIST_ALBUM, NGG_PRO_GRID_ALBUM))
+        &&  $this->get_registry()->is_module_loaded(NGG_PRO_ALBUMS))
+            $available = TRUE;
+
+        return $available;
     }
 
     function no_debug_bar()
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/package.module.third_party_compat.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/package.module.third_party_compat.php
index 30d786aa1d5b74eb5545f0562378c4f16e25ee90..5298fed4a9c7c0856672f92a05d70d5635d5c7d7 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/package.module.third_party_compat.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/package.module.third_party_compat.php
@@ -1,7 +1,12 @@
 <?php
+/**
+ * Class A_Non_Cachable_Pro_Film_Controller
+ * @mixin C_Display_Type_Controller
+ * @adapts I_Display_Type_Controller using "photocrati-nextgen_pro_film" context
+ */
 class A_Non_Cachable_Pro_Film_Controller extends Mixin
 {
-    public function is_cachable()
+    function is_cachable()
     {
         return FALSE;
     }
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/module.validation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/module.validation.php
index 5dde561e95179fb6861cc0af4bd7e013bbb020a0..784ee27ebeb6a6c71115a670793f61cee6b380a0 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/module.validation.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/module.validation.php
@@ -1,11 +1,4 @@
 <?php
-
-/***
-{
-	Module: photocrati-validation
-}
-***/
-
 class M_Validation extends C_Base_Module
 {
 	function define()
@@ -14,7 +7,7 @@ class M_Validation extends C_Base_Module
 			'photocrati-validation',
 			'Validation',
 			'Provides validation support for objects',
-			'0.1',
+			'0.2',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/package.module.validation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/package.module.validation.php
index 7b2cf3558aa0b386191a45a17029017feed9da3e..421f11769aef9d997c17d97bf1afaecf8f8ad23f 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/package.module.validation.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/package.module.validation.php
@@ -1,12 +1,12 @@
 <?php
 class Mixin_Validation extends Mixin
 {
-    public $_default_msgs = array('validates_presence_of' => '%s should be present', 'validates_presence_with' => '%s should be present with %s', 'validates_uniqueness_of' => '%s should be unique', 'validates_confirmation_of' => '%s should match confirmation', 'validates_exclusion_of' => '%s is reserved', 'validates_format_of' => '%s is invalid', 'validates_inclusion_of' => '%s is not included in the list', 'validates_numericality_of' => '%s is not numeric', 'validates_less_than' => '%s is too small', 'validates_greater_than' => '%s is too large', 'validates_equals' => '%s is invalid');
-    public $_default_patterns = array('email_address' => '//');
+    var $_default_msgs = array("validates_presence_of" => "%s should be present", "validates_presence_with" => "%s should be present with %s", "validates_uniqueness_of" => "%s should be unique", "validates_confirmation_of" => "%s should match confirmation", "validates_exclusion_of" => "%s is reserved", "validates_format_of" => "%s is invalid", "validates_inclusion_of" => "%s is not included in the list", "validates_numericality_of" => "%s is not numeric", "validates_less_than" => "%s is too small", "validates_greater_than" => "%s is too large", "validates_equals" => "%s is invalid");
+    var $_default_patterns = array('email_address' => "//");
     /**
      * Clears all errors for the object
      */
-    public function clear_errors()
+    function clear_errors()
     {
         $this->object->_errors = array();
     }
@@ -15,7 +15,7 @@ class Mixin_Validation extends Mixin
      * @param string $property
      * @return array|null
      */
-    public function errors_for($property)
+    function errors_for($property)
     {
         $errors = $this->object->_errors;
         if (isset($errors[$property])) {
@@ -29,7 +29,7 @@ class Mixin_Validation extends Mixin
      * @param string $property
      * @param string $msg
      */
-    public function add_error($msg, $property = '*')
+    function add_error($msg, $property = '*')
     {
         if (!isset($this->object->_errors)) {
             $this->object->_errors = array();
@@ -46,7 +46,7 @@ class Mixin_Validation extends Mixin
      * @param string $validator
      * @return string
      */
-    public function _get_default_error_message_for($validator)
+    function _get_default_error_message_for($validator)
     {
         $retval = FALSE;
         // The $validator variable is often set to __METHOD__, and many
@@ -68,7 +68,7 @@ class Mixin_Validation extends Mixin
      * @param string $formatter
      * @return string
      */
-    public function get_default_pattern_for($formatter)
+    function get_default_pattern_for($formatter)
     {
         $retval = FALSE;
         if (isset($this->_default_patterns[$formatter])) {
@@ -80,10 +80,10 @@ class Mixin_Validation extends Mixin
      * Gets all of the errors for the object
      * @return type
      */
-    public function get_errors($property = FALSE)
+    function get_errors($property = FALSE)
     {
         $retval = $property ? $this->object->errors_for($property) : $this->object->_errors;
-        if (!$retval) {
+        if (!$retval || is_array($retval)) {
             $retval = array();
         }
         return $retval;
@@ -94,7 +94,7 @@ class Mixin_Validation extends Mixin
      * @param string $property
      * @return boolean
      */
-    public function is_valid($property = FALSE)
+    function is_valid($property = FALSE)
     {
         $valid = TRUE;
         $errors = $this->object->get_errors();
@@ -112,14 +112,14 @@ class Mixin_Validation extends Mixin
      * @param type $property
      * @return type
      */
-    public function is_invalid($property = FALSE)
+    function is_invalid($property = FALSE)
     {
         return !$this->object->is_valid($property);
     }
     /**
      * Calls the validation method for a record, clearing the previous errors
      */
-    public function validate()
+    function validate()
     {
         $this->clear_errors();
         if ($this->object->has_method('validation')) {
@@ -133,7 +133,7 @@ class Mixin_Validation extends Mixin
      * @param string $str
      * @return string
      */
-    public function humanize_string($str)
+    function humanize_string($str)
     {
         $retval = array();
         if (is_array($str)) {
@@ -151,7 +151,7 @@ class Mixin_Validation extends Mixin
      * @param type $length
      * @param type $msg
      */
-    public function validates_length_of($property, $length, $comparison_operator = '=', $msg = FALSE)
+    function validates_length_of($property, $length, $comparison_operator = '=', $msg = FALSE)
     {
         $valid = TRUE;
         $value = $this->object->{$property};
@@ -205,7 +205,7 @@ class Mixin_Validation extends Mixin
      * @param string $comparison_operator
      * @param type $msg
      */
-    public function validates_numericality_of($property, $comparison = FALSE, $comparison_operator = FALSE, $int_only = FALSE, $msg = FALSE)
+    function validates_numericality_of($property, $comparison = FALSE, $comparison_operator = FALSE, $int_only = FALSE, $msg = FALSE)
     {
         $properties = is_array($property) ? $property : array($property);
         foreach ($properties as $property) {
@@ -268,7 +268,7 @@ class Mixin_Validation extends Mixin
      * @param array $values
      * @param string $msg
      */
-    public function validates_inclusion_of($property, $values = array(), $msg = FALSE)
+    function validates_inclusion_of($property, $values = array(), $msg = FALSE)
     {
         if (!is_array($values)) {
             $values = array($values);
@@ -287,7 +287,7 @@ class Mixin_Validation extends Mixin
      * @param string $pattern
      * @param string $msg
      */
-    public function validates_format_of($property, $pattern, $msg = FALSE)
+    function validates_format_of($property, $pattern, $msg = FALSE)
     {
         if (!is_array($property)) {
             $property = array($property);
@@ -319,7 +319,7 @@ class Mixin_Validation extends Mixin
      * @param array $exclusions
      * @param string $msg
      */
-    public function validates_exclusion_of($property, $exclusions = array(), $msg = FALSE)
+    function validates_exclusion_of($property, $exclusions = array(), $msg = FALSE)
     {
         $invalid = FALSE;
         if (!is_array($exclusions)) {
@@ -345,7 +345,7 @@ class Mixin_Validation extends Mixin
      * @param string $confirmation
      * @param string $msg
      */
-    public function validates_confirmation_of($property, $confirmation, $msg = FALSE)
+    function validates_confirmation_of($property, $confirmation, $msg = FALSE)
     {
         if ($this->object->{$property} != $this->object->{$confirmation}) {
             if (!$msg) {
@@ -361,7 +361,7 @@ class Mixin_Validation extends Mixin
      * @param array $scope
      * @param string $msg
      */
-    public function validates_uniqueness_of($property, $scope = array(), $msg = FALSE)
+    function validates_uniqueness_of($property, $scope = array(), $msg = FALSE)
     {
         // Get any entities that have the same property
         $mapper = $this->object->get_mapper();
@@ -392,7 +392,7 @@ class Mixin_Validation extends Mixin
      * @param string $property
      * @param string $msg
      */
-    public function validates_presence_of($properties, $with = array(), $msg = FALSE)
+    function validates_presence_of($properties, $with = array(), $msg = FALSE)
     {
         $missing = array();
         if (!is_array($properties)) {
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php
index e3bfd88d114ab19d00e6b53053cf90ea08a1a615..87803491c446c3506cc967f3f2daa3edb9938a18 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php
@@ -1,9 +1,4 @@
 <?php
-/***
-{
-        Module: photocrati-widget
-}
-***/
 class M_Widget extends C_Base_Module
 {
     /**
@@ -15,7 +10,7 @@ class M_Widget extends C_Base_Module
             'photocrati-widget',
             'Widget',
             'Handles clearing of NextGen Widgets',
-            '0.5',
+            '0.6',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php
index 059ebbc376761f86ce7a705e36f41c1f336fe97b..3060ea1d80b7f19a486cbd21d67cfbbd41680f43 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php
@@ -1,8 +1,13 @@
 <?php
+/**
+ * Class C_Widget
+ * @mixin Mixin_Widget
+ * @implements I_Widget
+ */
 class C_Widget extends C_MVC_Controller
 {
     public static $_instances = array();
-    public function define($context = FALSE)
+    function define($context = FALSE)
     {
         parent::define($context);
         $this->add_mixin('Mixin_Widget');
@@ -23,7 +28,7 @@ class Mixin_Widget extends Mixin
      *
      * @return echo the widget content
      */
-    public function echo_widget_random($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail')
+    function echo_widget_random($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail')
     {
         $options = array('title' => FALSE, 'items' => $number, 'show' => $show, 'type' => 'random', 'width' => $width, 'height' => $height, 'exclude' => $exclude, 'list' => $list, 'webslice' => FALSE);
         $widget = new C_Widget_Gallery();
@@ -34,7 +39,7 @@ class Mixin_Widget extends Mixin
      *
      * @return echo the widget content
      */
-    public function echo_widget_recent($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail')
+    function echo_widget_recent($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail')
     {
         $options = array('title' => FALSE, 'items' => $number, 'show' => $show, 'type' => 'recent', 'width' => $width, 'height' => $height, 'exclude' => $exclude, 'list' => $list, 'webslice' => FALSE);
         $widget = new C_Widget_Gallery();
@@ -48,7 +53,7 @@ class Mixin_Widget extends Mixin
      * @param string $height
      * @return echo the widget content
      */
-    public function echo_widget_slideshow($galleryID, $width = '', $height = '')
+    function echo_widget_slideshow($galleryID, $width = '', $height = '')
     {
         $widget = new C_Widget_Slideshow();
         $widget->render_slideshow($galleryID, $width, $height);
@@ -56,12 +61,12 @@ class Mixin_Widget extends Mixin
 }
 class C_Widget_Gallery extends WP_Widget
 {
-    public function __construct()
+    function __construct()
     {
         $widget_ops = array('classname' => 'ngg_images', 'description' => __('Add recent or random images from the galleries', 'nggallery'));
         parent::__construct('ngg-images', __('NextGEN Widget', 'nggallery'), $widget_ops);
     }
-    public function form($instance)
+    function form($instance)
     {
         // used for rendering utilities
         $parent = C_Widget::get_instance();
@@ -69,7 +74,7 @@ class C_Widget_Gallery extends WP_Widget
         $instance = wp_parse_args((array) $instance, array('exclude' => 'all', 'height' => '75', 'items' => '4', 'list' => '', 'show' => 'thumbnail', 'title' => 'Gallery', 'type' => 'recent', 'webslice' => TRUE, 'width' => '100'));
         $parent->render_partial('photocrati-widget#form_gallery', array('self' => $this, 'instance' => $instance, 'title' => esc_attr($instance['title']), 'items' => intval($instance['items']), 'height' => esc_attr($instance['height']), 'width' => esc_attr($instance['width'])));
     }
-    public function update($new_instance, $old_instance)
+    function update($new_instance, $old_instance)
     {
         $instance = $old_instance;
         // do not allow 0 or less
@@ -107,7 +112,7 @@ class C_Widget_Gallery extends WP_Widget
         $instance['webslice'] = (bool) $new_instance['webslice'];
         return $instance;
     }
-    public function widget($args, $instance)
+    function widget($args, $instance)
     {
         $router = C_Router::get_instance();
         wp_enqueue_style('nextgen_widgets_style', $router->get_static_url('photocrati-widget#widgets.css'), FALSE, NGG_SCRIPT_VERSION);
@@ -155,13 +160,13 @@ class C_Widget_Gallery extends WP_Widget
 }
 class C_Widget_MediaRSS extends WP_Widget
 {
-    public $options;
-    public function __construct()
+    var $options;
+    function __construct()
     {
         $widget_ops = array('classname' => 'ngg_mrssw', 'description' => __('Widget that displays Media RSS links for NextGEN Gallery.', 'nggallery'));
         parent::__construct('ngg-mrssw', __('NextGEN Media RSS', 'nggallery'), $widget_ops);
     }
-    public function form($instance)
+    function form($instance)
     {
         // used for rendering utilities
         $parent = C_Widget::get_instance();
@@ -169,7 +174,7 @@ class C_Widget_MediaRSS extends WP_Widget
         $instance = wp_parse_args((array) $instance, array('mrss_text' => __('Media RSS', 'nggallery'), 'mrss_title' => __('Link to the main image feed', 'nggallery'), 'show_global_mrss' => TRUE, 'show_icon' => TRUE, 'title' => 'Media RSS'));
         $parent->render_partial('photocrati-widget#form_mediarss', array('self' => $this, 'instance' => $instance, 'title' => esc_attr($instance['title']), 'mrss_text' => esc_attr($instance['mrss_text']), 'mrss_title' => esc_attr($instance['mrss_title'])));
     }
-    public function update($new_instance, $old_instance)
+    function update($new_instance, $old_instance)
     {
         $instance = $old_instance;
         $instance['title'] = strip_tags($new_instance['title']);
@@ -179,7 +184,7 @@ class C_Widget_MediaRSS extends WP_Widget
         $instance['mrss_title'] = $new_instance['mrss_title'];
         return $instance;
     }
-    public function widget($args, $instance)
+    function widget($args, $instance)
     {
         // these are handled by extract() but I want to silence my IDE warnings that these vars don't exist
         $before_widget = NULL;
@@ -193,31 +198,31 @@ class C_Widget_MediaRSS extends WP_Widget
         $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title'], $instance, $this->id_base);
         $parent->render_partial('photocrati-widget#display_mediarss', array('self' => $this, 'instance' => $instance, 'title' => $title, 'settings' => $settings, 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id));
     }
-    public function get_mrss_link($mrss_url, $show_icon = TRUE, $title, $text)
+    function get_mrss_link($mrss_url, $show_icon = TRUE, $title, $text)
     {
         $out = '';
         if ($show_icon) {
             $icon_url = NGGALLERY_URLPATH . 'images/mrss-icon.gif';
             $out .= "<a href='{$mrss_url}' title='{$title}' class='ngg-media-rss-link'>";
-            $out .= "<img src='{$icon_url}' alt='MediaRSS Icon' title='" . $title . '\' class=\'ngg-media-rss-icon\' />';
-            $out .= '</a> ';
+            $out .= "<img src='{$icon_url}' alt='MediaRSS Icon' title='" . $title . "' class='ngg-media-rss-icon' />";
+            $out .= "</a> ";
         }
         if ($text != '') {
             $out .= "<a href='{$mrss_url}' title='{$title}' class='ngg-media-rss-link'>";
             $out .= $text;
-            $out .= '</a>';
+            $out .= "</a>";
         }
         return $out;
     }
 }
 class C_Widget_Slideshow extends WP_Widget
 {
-    public function __construct()
+    function __construct()
     {
         $widget_ops = array('classname' => 'widget_slideshow', 'description' => __('Show a NextGEN Gallery Slideshow', 'nggallery'));
         parent::__construct('slideshow', __('NextGEN Slideshow', 'nggallery'), $widget_ops);
     }
-    public function form($instance)
+    function form($instance)
     {
         global $wpdb;
         // used for rendering utilities
@@ -226,7 +231,7 @@ class C_Widget_Slideshow extends WP_Widget
         $instance = wp_parse_args((array) $instance, array('galleryid' => '0', 'height' => '120', 'title' => 'Slideshow', 'width' => '160', 'limit' => '10'));
         $parent->render_partial('photocrati-widget#form_slideshow', array('self' => $this, 'instance' => $instance, 'title' => esc_attr($instance['title']), 'height' => esc_attr($instance['height']), 'width' => esc_attr($instance['width']), 'limit' => esc_attr($instance['limit']), 'tables' => $wpdb->get_results("SELECT * FROM {$wpdb->nggallery} ORDER BY 'name' ASC")));
     }
-    public function update($new_instance, $old_instance)
+    function update($new_instance, $old_instance)
     {
         $nh = $new_instance['height'];
         $nw = $new_instance['width'];
@@ -247,7 +252,7 @@ class C_Widget_Slideshow extends WP_Widget
         $instance['limit'] = (int) $new_instance['limit'];
         return $instance;
     }
-    public function widget($args, $instance)
+    function widget($args, $instance)
     {
         $router = C_Router::get_instance();
         wp_enqueue_style('nextgen_widgets_style', $router->get_static_url('photocrati-widget#widgets.css'), FALSE, NGG_SCRIPT_VERSION);
@@ -267,7 +272,7 @@ class C_Widget_Slideshow extends WP_Widget
         $out = $this->render_slideshow($instance['galleryid'], $instance['width'], $instance['height'], $instance['limit'], $args);
         $parent->render_partial('photocrati-widget#display_slideshow', array('self' => $this, 'instance' => $instance, 'title' => $title, 'out' => $out, 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id));
     }
-    public function render_slideshow($galleryID, $irWidth = '', $irHeight = '', $limit = 10, $args)
+    function render_slideshow($galleryID, $irWidth = '', $irHeight = '', $limit = 10, $args)
     {
         $registry = C_Component_Registry::get_instance();
         $renderer = C_Displayed_Gallery_Renderer::get_instance();
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/static/widgets.min.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/static/widgets.min.css
index a25d3062a0ac76af3ee1e4e816ecf3385f9bb039..c2e4fd238989d424ae0f3f0a4f89965b1e3f1dac 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/static/widgets.min.css
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/static/widgets.min.css
@@ -1 +1 @@
-.ngg-widget,.ngg-widget-slideshow{overflow:hidden;margin:0;padding:5px 0 0 0;text-align:left}.ngg-widget img{border:2px solid #a9a9a9;margin:0 2px 2px 0;padding:1px;height:auto;float:left}
\ No newline at end of file
+.ngg-widget,.ngg-widget-slideshow{overflow:hidden;margin:0;padding:5px 0 0;text-align:left}.ngg-widget img{border:2px solid #A9A9A9;margin:0 2px 2px 0;padding:1px;height:auto;float:left}
\ No newline at end of file
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php
index ab568cef6eca663e14a24bcc4a17e85cf3439bb0..6010d54e71c95fd8f6111264c8cc9793bfb888c5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php
@@ -1,11 +1,5 @@
 <?php
 
-/***
- {
-	Module: photocrati-wordpress_routing,
-	Depends: { photocrati-router }
- }
- ***/
 class M_WordPress_Routing extends C_Base_Module
 {
 	static $_use_canonical_redirect = TRUE;
@@ -17,7 +11,7 @@ class M_WordPress_Routing extends C_Base_Module
 			'photocrati-wordpress_routing',
 			'WordPress Routing',
 			"Integrates the MVC module's routing implementation with WordPress",
-			'0.6',
+			'0.8',
 			'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
 			'Photocrati Media',
 			'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/package.module.wordpress_routing.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/package.module.wordpress_routing.php
index 0be40e7ff38124994796cd6b40527d74cbc233e7..2a99d0012dfc8166e42fb55b6df98d2dba77fca8 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/package.module.wordpress_routing.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/package.module.wordpress_routing.php
@@ -1,7 +1,12 @@
 <?php
+/**
+ * Class A_WordPress_Base_Url
+ * @mixin C_Router
+ * @adapts I_Router
+ */
 class A_WordPress_Base_Url extends Mixin
 {
-    public function _add_index_dot_php_to_url($url)
+    function _add_index_dot_php_to_url($url)
     {
         if (strpos($url, '/index.php') === FALSE) {
             $pattern = get_option('permalink_structure');
@@ -11,7 +16,7 @@ class A_WordPress_Base_Url extends Mixin
         }
         return $url;
     }
-    public function get_base_url($site_url = FALSE)
+    function get_base_url($site_url = FALSE)
     {
         $retval = NULL;
         $add_index_dot_php = TRUE;
@@ -64,9 +69,14 @@ class A_WordPress_Base_Url extends Mixin
         return $retval;
     }
 }
+/**
+ * Class A_WordPress_Router
+ * @mixin C_Router
+ * @adapts I_Router
+ */
 class A_WordPress_Router extends Mixin
 {
-    public function get_url($uri = '/', $with_qs = TRUE, $site_url = FALSE)
+    function get_url($uri = '/', $with_qs = TRUE, $site_url = FALSE)
     {
         static $cache = array();
         $key = implode('|', array($uri, $with_qs, $site_url));
@@ -89,15 +99,20 @@ class A_WordPress_Router extends Mixin
         }
     }
 }
+/**
+ * Class A_WordPress_Routing_App
+ * @mixin C_Routing_App
+ * @adapts I_Routing_App
+ */
 class A_WordPress_Routing_App extends Mixin
 {
-    public function remove_parameter($key, $id = NULL, $url = FALSE)
+    function remove_parameter($key, $id = NULL, $url = FALSE)
     {
         $generated_url = $this->call_parent('remove_parameter', $key, $id, $url);
         $generated_url = $this->object->add_post_permalink_to_url($generated_url);
         return $generated_url;
     }
-    public function parse_url($url)
+    function parse_url($url)
     {
         $parts = parse_url($url);
         if (!isset($parts['path'])) {
@@ -116,7 +131,7 @@ class A_WordPress_Routing_App extends Mixin
      * @param $generated_url
      * @return mixed
      */
-    public function add_post_permalink_to_url($generated_url)
+    function add_post_permalink_to_url($generated_url)
     {
         if (!apply_filters('ngg_wprouting_add_post_permalink', TRUE)) {
             return $generated_url;
@@ -129,7 +144,11 @@ class A_WordPress_Routing_App extends Mixin
         $original_url = $generated_url;
         $generated_parts = explode($settings->router_param_slug, $generated_url);
         $generated_url = $generated_parts[0];
-        $ngg_parameters = isset($generated_parts[1]) ? @array_shift(explode('?', $generated_parts[1])) : '/';
+        $ngg_parameters = '/';
+        if (isset($generated_parts[1])) {
+            $parts = explode('?', $generated_parts[1]);
+            $ngg_parameters = array_shift($parts);
+        }
         $post_permalink = get_permalink(isset($_REQUEST['p']) ? $_REQUEST['p'] : 0);
         if ($post_permalink == '/') {
             $post_permalink = $base_url;
@@ -175,12 +194,12 @@ class A_WordPress_Routing_App extends Mixin
         }
         return $generated_url;
     }
-    public function join_paths()
+    function join_paths()
     {
         $args = func_get_args();
         return $this->get_router()->join_paths($args);
     }
-    public function passthru()
+    function passthru()
     {
         $router = C_Router::get_instance();
         $_SERVER['ORIG_REQUEST_URI'] = $_SERVER['REQUEST_URI'];
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/module.wpcli.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/module.wpcli.php
index 78513049b7495eedc408f86154f27244dd864678..9d37b0c73b7400696efd5570b67d97f61154a45d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/module.wpcli.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/module.wpcli.php
@@ -1,10 +1,5 @@
 <?php
 
-/***
-{
-Module: photocrati-wpcli
-}
- ***/
 class M_WPCLI extends C_Base_Module
 {
     function define()
@@ -13,7 +8,7 @@ class M_WPCLI extends C_Base_Module
             'photocrati-wpcli',
             'WP-CLI Integration',
             "Provides additional commands for WP-CLI (https://github.com/wp-cli/wp-cli",
-            '0.1',
+            '0.2',
             'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
             'Photocrati Media',
             'https://www.imagely.com'
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/package.module.wpcli.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/package.module.wpcli.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3d9bbc7f3711e882119cd6b3af051245d859d04
--- /dev/null
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wpcli/package.module.wpcli.php
@@ -0,0 +1 @@
+<?php
diff --git a/wp-content/plugins/nextgen-gallery/readme.txt b/wp-content/plugins/nextgen-gallery/readme.txt
index 9e781fae018363dd5d1981772aeb5a2fdc9ca4b1..acdbda944e1043155fb4806d19144937be407cad 100644
--- a/wp-content/plugins/nextgen-gallery/readme.txt
+++ b/wp-content/plugins/nextgen-gallery/readme.txt
@@ -1,12 +1,12 @@
-=== NextGEN Gallery ===
+=== NextGEN Gallery - WordPress Gallery Plugin ===
 Contributors: photocrati, imagely
-Tags: nextgen, nextgen gallery, gallery, galleries, image, images, image gallery, photo, photos, photo gallery, picture, pictures, picture gallery, album, albums, photo albums, image album, media, media gallery, thumbnails, thumbnail gallery, thumbnail galleries, slideshow, slideshows, slideshow gallery, slideshow galleries, fancybox, lightbox, responsive, responsive gallery, responsive galleries, wordpress responsive gallery, nextcellent, wordpress gallery plugin, wordpress photo gallery plugin, wp gallery, wp gallery plugins, best gallery plugin, free photo gallery, singlepic, image captions imagebrowser, watermarks, watermarking, photography, photographer
+Tags: gallery, wordpress gallery plugin, nextgen, nextgen gallery, photo gallery, photo album, photos, image gallery, image, images, photography, photographer, watermarking, responsive gallery, slideshow, thumbnail gallery, watermarking, watermark
 Requires at least: 4.0.0
-Stable tag: 2.1.49
-Tested up to: 4.6.0
+Stable tag: 2.1.62
+Tested up to: 4.7.0
 License: GPLv2
 
-The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 15 million downloads.
+The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 16 million downloads.
 
 == Description ==
 
@@ -187,6 +187,72 @@ For more information, feel free to visit the official website for the NextGEN Ga
 
 == Changelog ==
 
+= V2.1.62 - 12.15.2016 =
+* Fixed:   Typo in notice for launching the gallery wizard
+* Fixed:   The ability to dismiss the gallery wizard notice
+
+= V2.1.61 - 12.14.2016 =
+* NEW:     Gallery creation wizard for new users
+* Fixed:   Shortcodes in widgets not getting substituted in Divi
+* Fixed:   Ensure that NGG placeholder text doesn't get styled incorrectly by other themes
+* Fixed:   Various thickbox issues on custom post type pages
+* Fixed:   Hide IGW placeholder images in Yoast feed
+
+= V2.1.60 - 11.22.2016 =
+* Secured: Ensure that only .css files can be edited using Styles tab
+
+= V2.1.59 - 11.22.2016 =
+* Secured: Ability to customize CSS Styles
+* Changed: readme.txt improvements
+* Fixed:   Compatibility with WordPress 4.7.0
+* Fixed:   IGW-inserted tagclouds are incorrect
+
+= V2.1.57 - 11.14.2016 =
+* Secured: Custom Styles may only be written to specific directories
+* Secured: SQL injection vulnerability for gallery names
+* Changed: Display type icons are now clickable in the Insert Gallery Window
+* Changed: Include backup image files when coping/moving a gallery
+* Changed: Show gallery name in upload notification
+* Changed: Added placeholder text to gallery name field on Add Gallery / Upload Images page
+* Fixed:   Custom sortorder not preserved in shortcode
+* Fixed:   Shortcodes added via Insert Gallery Window displayed as []
+* Fixed:   Uncaught TypeError: Cannot read property 'replace' of undefined
+* Fixed:   Use of deprecated Yoast SEO (aka WPSEO) filter
+* Fixed:   Conflict with Easy Digital Downloads
+* Fixed:   Misc invalid HTML tags in admin pages (thanks to kniebremser)
+* Fixed:   Change display:hidden to visibility:hidden in various places
+* Fixed:   Escaping of quotes in gallery titles and urls
+* Fixed:   Untranslatable strings
+
+
+= V2.1.56 - 10.27.2016 =
+* Fixed:   Shortcode parsing was affecting third-party shortcodes
+
+= V2.1.54 - 10.25.2016 =
+* NEW:     Added php docblock directives for code hinting/completion
+* NEW:     Display types can have aliases
+* NEW:     Visual Shortcodes
+* Changed: Now uses gulp for package compilation & JS/CSS minification
+* Changed: Updated Freemius SDK to 1.2.1
+* Fixed:   Extraneous backslashes being added to gallery titles & descriptions
+* Fixed:   Import folder 'gallery title' field wasn't being used for new gallery titles
+* Fixed:   Settings reset will now redirect to /wp-admin/ to avoid potential activation-related errors
+* Fixed:   Table columns cache becomes out of date between versions
+* Fixed:   Various issues with shortcodes when used in widgets
+* Fixed:   Warnings caused by calls to non-existent module package files
+* Fixed:   nextgen_admin's jquery-ui breaking Elegant Themes admin pages
+
+= V2.1.50 - 08.30.2016 =
+* NEW:     Added the ability to open galleries within albums using a lightbox
+* Changed: Increased freemius opt-in to 100%
+* Changed: Tamara Lackey's biography on the overview page
+* Fixed:   Images not responsive for all display types
+* Fixed:   Compatibility with the Imagely Lightroom plugin
+* Fixed:   Removed Pope tests folder
+* Fixed:   Maximum function nesting level fatal error when displaying two or more albums
+* Fixed:   Ensure Insert Gallery Window background stays white
+* Fixed:   PHP warning for C_NGG_Lightbox class using incompatible constructor
+
 = V2.1.49 - 07.26.2016 =
 * NEW:     Add a "Default" template option to override ATP settings when a global setting is used
 * NEW:     Added "generic" error reporting back during image upload.