Version Description
- Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info).
- Added: Filter
wpforms_emails_summaries_is_disabled
to easily disable Email Summaries functionality. - Added: New smart tag:
{field_html_id="42"}
- that will postprocess field value and display its HTML representation. - Changed: Improve
wpforms_get_ip()
IP detection and related{user_ip}
smart-tag value. - Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well.
- Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields.
- Fixed: Various typos.
- Fixed: WP Mail SMTP plugin description on About us page.
Download this release
Release Info
Developer | jaredatch |
Plugin | Contact Form by WPForms – Drag & Drop Form Builder for WordPress |
Version | 1.5.5 |
Comparing to | |
See all releases |
Code changes from version 1.5.4.2 to 1.5.5
- assets/css/admin-builder-fields.css +4 -0
- assets/css/admin.css +254 -5
- assets/css/admin.min.css +1 -1
- assets/css/wpforms-base.css +8 -0
- assets/css/wpforms-full.css +8 -0
- assets/js/admin-builder.js +4 -4
- assets/js/admin.js +2 -2
- assets/js/admin.min.js +1 -1
- changelog.txt +10 -0
- includes/admin/admin.php +3 -0
- includes/admin/builder/panels/class-setup.php +1 -1
- includes/admin/class-about.php +2 -2
- includes/admin/class-settings.php +0 -28
- includes/admin/class-tools.php +4 -0
- includes/admin/settings-api.php +9 -7
- includes/class-form.php +9 -6
- includes/class-license.php +0 -830
- includes/class-smart-tags.php +27 -7
- includes/class-updater.php +0 -315
- includes/fields/class-checkbox.php +2 -1
- includes/fields/class-gdpr-checkbox.php +2 -1
- includes/fields/class-radio.php +2 -1
- includes/functions.php +77 -8
- languages/wpforms-lite.pot +334 -314
- lite/assets/js/admin/builder-education.js +1 -1
- lite/assets/js/admin/builder-education.min.js +1 -1
- lite/assets/js/admin/connect.js +172 -0
- lite/assets/js/admin/connect.min.js +1 -0
- lite/assets/js/admin/settings-education.js +125 -0
- lite/assets/js/admin/settings-education.min.js +1 -0
- lite/assets/js/admin/upgrade.js +0 -299
- lite/assets/js/admin/upgrade.min.js +0 -1
- lite/wpforms-lite.php +1 -1
- readme.txt +55 -51
- src/Admin/Loader.php +4 -0
- src/Emails/Summaries.php +9 -5
- src/Integrations/Gutenberg/FormSelector.php +1 -1
- src/Integrations/Loader.php +1 -0
- src/Integrations/SiteHealth/SiteHealth.php +144 -0
- src/Lite/Admin/Builder/Education.php +30 -33
- src/Lite/Admin/Connect.php +301 -0
- includes/class-upgrader-skin.php → src/Lite/Admin/ConnectSkin.php +27 -25
- src/Lite/Admin/DashboardWidget.php +12 -1
- src/Lite/Admin/Settings/Education.php +134 -0
- src/WPForms.php +0 -26
- vendor/composer/autoload_files.php +10 -0
- vendor/composer/autoload_namespaces.php +1 -0
- vendor/composer/autoload_psr4.php +1 -0
- vendor/composer/autoload_real.php +18 -0
- vendor/composer/autoload_static.php +20 -0
- vendor/composer/installed.json +120 -0
- vendor/goodby/csv/.gitignore +5 -0
- vendor/goodby/csv/.travis.yml +14 -0
- vendor/goodby/csv/LICENSE +8 -0
- vendor/goodby/csv/README.md +327 -0
- vendor/goodby/csv/composer.json +36 -0
- vendor/goodby/csv/example/export_from_database_via_pdo.php +24 -0
- vendor/goodby/csv/example/import_from_database_via_pdo.php +29 -0
- vendor/goodby/csv/example/insert-or-update-user-for-mysql.php +22 -0
- vendor/goodby/csv/example/sample.php +34 -0
- vendor/goodby/csv/example/temperature.tsv +4 -0
- vendor/goodby/csv/example/tsv-sample.php +30 -0
- vendor/goodby/csv/example/user.csv +3 -0
- vendor/goodby/csv/phpunit-bootstrap.php +28 -0
- vendor/goodby/csv/phpunit.xml.dist +50 -0
- vendor/goodby/csv/scripts/bundle-devtools.sh +36 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/Exception/IOException.php +10 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/ExporterInterface.php +22 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/CallbackCollection.php +88 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/PdoCollection.php +82 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Standard/CsvFileObject.php +85 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exception/StrictViolationException.php +7 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exporter.php +110 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Standard/ExporterConfig.php +218 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Protocol/ExporterInterfaceTest.php +39 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/Collection/PdoCollectionTest.php +68 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/ExporterTest.php +188 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/UsageTest.php +95 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/euc-jp.csv +1 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/multiple-lines.csv +9 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/utf-8.csv +2 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/CallbackCollectionTest.php +50 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/SampleAggIterator.php +19 -0
- vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/ExporterConfigTest.php +63 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/CsvFileNotFoundException.php +10 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/InvalidLexicalException.php +10 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/InterpreterInterface.php +15 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/LexerInterface.php +20 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Exception/StrictViolationException.php +7 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Interpreter.php +120 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Lexer.php +69 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/LexerConfig.php +185 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/PdoObserver.php +71 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/SqlObserver.php +62 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Standard/StreamFilter/ConvertMbstringEncoding.php +110 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/InterpreterTest.php +42 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/LexerTest.php +41 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/CSVFiles.php +69 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/LexerTest.php +156 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/Observer/PdoObserverTest.php +86 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/colon-separated.csv +2 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/issue-5.csv +5 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/mac-excel.csv +1 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/sjis.csv +4 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/tab-separated.csv +7 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/utf-8.csv +3 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/SandboxDirectoryManager.php +45 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/InterpreterTest.php +132 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/LexerConfigTest.php +61 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/Observer/SqlObserverTest.php +51 -0
- vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/StreamFilter/ConvertMbstringEncodingTest.php +64 -0
- vendor/goodby/csv/src/Goodby/CSV/TestHelper/DbManager.php +54 -0
- vendor/symfony/polyfill-mbstring/LICENSE +19 -0
- vendor/symfony/polyfill-mbstring/Mbstring.php +800 -0
- vendor/symfony/polyfill-mbstring/README.md +13 -0
- vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +509 -0
assets/css/admin-builder-fields.css
CHANGED
@@ -334,6 +334,10 @@
|
|
334 |
outline: 0;
|
335 |
}
|
336 |
|
|
|
|
|
|
|
|
|
337 |
#wpforms-panel-fields .wpforms-field-option-group-toggle span {
|
338 |
color: #888;
|
339 |
font-weight: 300;
|
334 |
outline: 0;
|
335 |
}
|
336 |
|
337 |
+
#wpforms-panel-fields .wpforms-field-option-group-toggle.upgrade-modal {
|
338 |
+
opacity: 0.6;
|
339 |
+
}
|
340 |
+
|
341 |
#wpforms-panel-fields .wpforms-field-option-group-toggle span {
|
342 |
color: #888;
|
343 |
font-weight: 300;
|
assets/css/admin.css
CHANGED
@@ -2412,6 +2412,145 @@ body .choices input[type=text].choices__input {
|
|
2412 |
color: #666;
|
2413 |
}
|
2414 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2415 |
@media screen and (max-width: 782px) {
|
2416 |
.wpforms-admin-content {
|
2417 |
padding-left: 10px;
|
@@ -3548,6 +3687,12 @@ body .choices input[type=text].choices__input {
|
|
3548 |
border-radius: 2px;
|
3549 |
}
|
3550 |
|
|
|
|
|
|
|
|
|
|
|
|
|
3551 |
.wpforms-admin-settings .wpforms-setting-row h4 {
|
3552 |
font-size: 20px;
|
3553 |
font-weight: 700;
|
@@ -3585,8 +3730,9 @@ body .choices input[type=text].choices__input {
|
|
3585 |
}
|
3586 |
|
3587 |
.wpforms-admin-settings .wpforms-setting-row input[type=text],
|
|
|
3588 |
.wpforms-admin-settings .wpforms-setting-row input[type=number],
|
3589 |
-
.wpforms-admin-settings .wpforms-setting-row
|
3590 |
background-color: #fff;
|
3591 |
border: 1px solid #ddd;
|
3592 |
border-radius: 3px;
|
@@ -3602,15 +3748,17 @@ body .choices input[type=text].choices__input {
|
|
3602 |
|
3603 |
@media (max-width: 959px) {
|
3604 |
.wpforms-admin-settings .wpforms-setting-row input[type=text],
|
|
|
3605 |
.wpforms-admin-settings .wpforms-setting-row input[type=number],
|
3606 |
-
.wpforms-admin-settings .wpforms-setting-row
|
3607 |
width: 300px;
|
3608 |
}
|
3609 |
}
|
3610 |
|
3611 |
.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,
|
|
|
3612 |
.wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,
|
3613 |
-
.wpforms-admin-settings .wpforms-setting-row
|
3614 |
border-color: #bbb;
|
3615 |
}
|
3616 |
|
@@ -3917,6 +4065,107 @@ body .choices input[type=text].choices__input {
|
|
3917 |
font-weight: 700;
|
3918 |
}
|
3919 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3920 |
.wpforms-admin-settings #wpforms-importer-process {
|
3921 |
display: none;
|
3922 |
}
|
@@ -3981,7 +4230,7 @@ body .choices input[type=text].choices__input {
|
|
3981 |
}
|
3982 |
|
3983 |
.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times, .wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle {
|
3984 |
-
color:
|
3985 |
}
|
3986 |
|
3987 |
.wpforms-admin-settings #wpforms-importer-process .status .item .name {
|
@@ -4243,4 +4492,4 @@ body .choices input[type=text].choices__input {
|
|
4243 |
font-size: 14px;
|
4244 |
}
|
4245 |
|
4246 |
-
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2Nzcy9hZG1pbi5jc3MiLCJzb3VyY2VzIjpbImFzc2V0cy9zY3NzL2FkbWluLnNjc3MiLCJhc3NldHMvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvX2luY2x1ZGUtbWVkaWEuc2NzcyIsImFzc2V0cy9zY3NzL3ZlbmRvci9wYXJ0aWFscy9fY2hvaWNlcy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX2J1dHRvbnMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19jb25maXJtLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fYWxlcnRzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZmxhZ3Muc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19oZWFkZXIuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL190aXRsZS10YWJzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZ2VuZXJhbC5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtZm9ybXMtb3ZlcnZpZXcuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWVudHJpZXMtc2luZ2xlLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1lbnRyaWVzLWxpc3Quc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXdlbGNvbWUuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWFkZG9ucy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtYWJvdXQuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXNldHRpbmdzLXRvb2xzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1zZXR0aW5ncy1pbnRlZ3JhdGlvbnMuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXUEZvcm1zIGFkbWluIHN0eWxlcy5cbi8vIFRoZXNlIHN0eWxlcyBhcmUgbG9hZGVkIG9uIGFsbCBXUEZvcm1zIHJlbGF0ZWQgYWRtaW4gcGFnZXMuXG5cbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvaW5jbHVkZS1tZWRpYSc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvY2hvaWNlcyc7XG5cbiRicmVha3BvaW50czogKFxuXHQneHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbik7XG5cbkBpbXBvcnQgJ2FkbWluL2J1dHRvbnMnO1xuQGltcG9ydCAnYWRtaW4vY29uZmlybSc7XG5AaW1wb3J0ICdhZG1pbi9hbGVydHMnO1xuQGltcG9ydCAnYWRtaW4vZmxhZ3MnO1xuQGltcG9ydCAnYWRtaW4vaGVhZGVyJztcbkBpbXBvcnQgJ2FkbWluL3RpdGxlLXRhYnMnO1xuQGltcG9ydCAnYWRtaW4vZ2VuZXJhbCc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLWZvcm1zLW92ZXJ2aWV3JztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtZW50cmllcy1zaW5nbGUnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1lbnRyaWVzLWxpc3QnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS13ZWxjb21lJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWRkb25zJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWJvdXQnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1zZXR0aW5ncy10b29scyc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLXNldHRpbmdzLWludGVncmF0aW9ucyc7XG4iLCIkb3JhbmdlOiAjZTI3NzMwO1xuJGRhcmtvcmFuZ2U6ICNiODVhMWI7XG4kZ3JlZW46ICMyYTliMzk7XG4kYmx1ZTogIzBlNmNhZDtcbiRsaWdodEJsdWU6ICNlYmYzZmI7XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vICAgICBfICAgICAgICAgICAgXyAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gX1xuLy8gICAgKF8pICAgICAgICAgIHwgfCAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChfKVxuLy8gICAgIF8gXyBfXyAgIF9fX3wgfF8gICBfICBfX3wgfCBfX18gICBfIF9fIF9fXyAgIF9fXyAgX198IHxfICBfXyBfXG4vLyAgICB8IHwgJ18gXFwgLyBfX3wgfCB8IHwgfC8gX2AgfC8gXyBcXCB8ICdfIGAgXyBcXCAvIF8gXFwvIF9gIHwgfC8gX2AgfFxuLy8gICAgfCB8IHwgfCB8IChfX3wgfCB8X3wgfCAoX3wgfCAgX18vIHwgfCB8IHwgfCB8ICBfXy8gKF98IHwgfCAoX3wgfFxuLy8gICAgfF98X3wgfF98XFxfX198X3xcXF9fLF98XFxfXyxffFxcX19ffCB8X3wgfF98IHxffFxcX19ffFxcX18sX3xffFxcX18sX3xcbi8vXG4vLyAgICAgIFNpbXBsZSwgZWxlZ2FudCBhbmQgbWFpbnRhaW5hYmxlIG1lZGlhIHF1ZXJpZXMgaW4gU2Fzc1xuLy8gICAgICAgICAgICAgICAgICAgICAgICB2MS40Ljlcbi8vXG4vLyAgICAgICAgICAgICAgICBodHRwOi8vaW5jbHVkZS1tZWRpYS5jb21cbi8vXG4vLyAgICAgICAgIEF1dGhvcnM6IEVkdWFyZG8gQm91Y2FzIChAZWR1YXJkb2JvdWNhcylcbi8vICAgICAgICAgICAgICAgICAgSHVnbyBHaXJhdWRlbCAoQGh1Z29naXJhdWRlbClcbi8vXG4vLyAgICAgIFRoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlXG5cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgbGlicmFyeSBwdWJsaWMgY29uZmlndXJhdGlvblxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIGdsb2JhbCBicmVha3BvaW50c1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgYnJlYWtwb2ludCB3aXRoIHRoZSBsYWJlbCBgcGhvbmVgXG4vLy8gICRicmVha3BvaW50czogKCdwaG9uZSc6IDMyMHB4KTtcbi8vL1xuJGJyZWFrcG9pbnRzOiAoXG4gICdwaG9uZSc6IDMyMHB4LFxuICAndGFibGV0JzogNzY4cHgsXG4gICdkZXNrdG9wJzogMTAyNHB4XG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIHN0YXRpYyBleHByZXNzaW9ucyBvciBtZWRpYSB0eXBlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgbWVkaWEgdHlwZSAoc2NyZWVuKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJzogJ3NjcmVlbicpO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzdGF0aWMgZXhwcmVzc2lvbiB3aXRoIGxvZ2ljYWwgZGlzanVuY3Rpb24gKE9SIG9wZXJhdG9yKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6IChcbi8vLyAgICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSdcbi8vLyAgKTtcbi8vL1xuJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4gICdzY3JlZW4nOiAnc2NyZWVuJyxcbiAgJ3ByaW50JzogJ3ByaW50JyxcbiAgJ2hhbmRoZWxkJzogJ2hhbmRoZWxkJyxcbiAgJ2xhbmRzY2FwZSc6ICcob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICAncG9ydHJhaXQnOiAnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknLFxuICAncmV0aW5hM3gnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMyksIChtaW4tcmVzb2x1dGlvbjogMzUwZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAzZHBweCknXG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIERlZmluZXMgYSBudW1iZXIgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIGVhY2ggdW5pdCB3aGVuIGRlY2xhcmluZyBicmVha3BvaW50cyB3aXRoIGV4Y2x1c2l2ZSBpbnRlcnZhbHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcGl4ZWxzIGlzIGRlZmluZWQgYXMgYDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4xMjhweCcpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMTI5cHgpIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIGVtcyBpcyBkZWZpbmVkIGFzIGAwLjAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MjBlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMjAuMDFlbSkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcmVtcyBpcyBkZWZpbmVkIGFzIGAwLjFgIGJ5IGRlZmF1bHQsIHRvIGJlIHVzZWQgd2l0aCBgZm9udC1zaXplOiA2Mi41JTtgXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+Mi4wcmVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyLjFyZW0pIHt9XG4vLy9cbiR1bml0LWludGVydmFsczogKFxuICAncHgnOiAxLFxuICAnZW0nOiAwLjAxLFxuICAncmVtJzogMC4xLFxuICAnJzogMFxuKSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gRGVmaW5lcyB3aGV0aGVyIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgYXZhaWxhYmxlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHNlcGFyYXRlIHN0eWxlc2hlZXRzXG4vLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtZWRpYSBxdWVyaWVzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIERpc2FibGVzIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4kaW0tbWVkaWEtc3VwcG9ydDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBicmVha3BvaW50IHRvIGVtdWxhdGUgd2hlbiBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGRpc2FibGVkLiBNZWRpYSBxdWVyaWVzIHRoYXQgc3RhcnQgYXQgb3Jcbi8vLyBpbnRlcmNlcHQgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFueSBvdGhlcnMgd2lsbCBiZSBpZ25vcmVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGRvZXMgbm90IGludGVyY2VwdCB0aGUgZGVza3RvcCBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICd0YWJsZXQnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj1kZXNrdG9wJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJyAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBtZWRpYSBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBhbiBleHByZXNzaW9uIGZvciBpdCB0byBiZSB1c2VkIHdoZW4gbWVkaWEgcXVlcmllc1xuLy8vIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYW5kIGNvbnRhaW5zIG9ubHkgYWNjZXB0ZWQgbWVkaWEgZXhwcmVzc2lvbnNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdzY3JlZW4nKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBidXQgY29udGFpbnMgYSBtZWRpYSBleHByZXNzaW9uIHRoYXQgaXMgbm90IGFjY2VwdGVkXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAncmV0aW5hMngnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJywgJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZScpICFkZWZhdWx0O1xuXG4vLy8vXG4vLy8gQ3Jvc3MtZW5naW5lIGxvZ2dpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gTG9nIGEgbWVzc2FnZSBlaXRoZXIgd2l0aCBgQGVycm9yYCBpZiBzdXBwb3J0ZWRcbi8vLyBlbHNlIHdpdGggYEB3YXJuYCwgdXNpbmcgYGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpYFxuLy8vIHRvIGRldGVjdCBzdXBwb3J0LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQGZ1bmN0aW9uIGltLWxvZygkbWVzc2FnZSkge1xuICBAaWYgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJykge1xuXHRAZXJyb3IgJG1lc3NhZ2U7XG4gIH0gQGVsc2Uge1xuXHRAd2FybiAkbWVzc2FnZTtcblx0JF86IG5vb3AoKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1lc3NhZ2U7XG59XG5cblxuLy8vXG4vLy8gV3JhcHBlciBtaXhpbiBmb3IgdGhlIGxvZyBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGEgbW9yZSBmcmllbmRseVxuLy8vIEFQSSB0aGFuIGBAaWYgaW0tbG9nKCcuLicpIHt9YCBvciBgJF86IGltLWxvZygnLi4nKWAuIEJhc2ljYWxseSwgdXNlIHRoZSBmdW5jdGlvblxuLy8vIHdpdGhpbiBmdW5jdGlvbnMgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluIGEgZnVuY3Rpb25cbi8vLyBhbmQgdXNlIHRoZSBtaXhpbiBldmVyeXdoZXJlIGVsc2UgYmVjYXVzZSBpdCdzIG11Y2ggbW9yZSBlbGVnYW50LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQG1peGluIGxvZygkbWVzc2FnZSkge1xuICBAaWYgaW0tbG9nKCRtZXNzYWdlKSB7fVxufVxuXG5cbi8vL1xuLy8vIEZ1bmN0aW9uIHdpdGggbm8gYEByZXR1cm5gIGNhbGxlZCBuZXh0IHRvIGBAd2FybmAgaW4gU2FzcyAzLjNcbi8vLyB0byB0cmlnZ2VyIGEgY29tcGlsaW5nIGVycm9yIGFuZCBzdG9wIHRoZSBwcm9jZXNzLlxuLy8vXG5AZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vL1xuLy8vIERldGVybWluZXMgd2hldGhlciBhIGxpc3Qgb2YgY29uZGl0aW9ucyBpcyBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnQuXG4vLy9cbi8vLyBAcGFyYW0ge0FyZ2xpc3R9ICAgJGNvbmRpdGlvbnMgIC0gTWVkaWEgcXVlcnkgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHJldHVybiB7Qm9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vXG5AZnVuY3Rpb24gaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikge1xuICAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRpbS1uby1tZWRpYS1icmVha3BvaW50KTtcblxuICBAaWYgbm90ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlIHtcblx0QGlmIGltLWxvZygnYCN7JGltLW5vLW1lZGlhLWJyZWFrcG9pbnR9YCBpcyBub3QgYSB2YWxpZCBicmVha3BvaW50LicpIHt9XG4gIH1cblxuICBAZWFjaCAkY29uZGl0aW9uIGluICRjb25kaXRpb25zIHtcblx0QGlmIG5vdCBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcblx0ICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRjb25kaXRpb24pO1xuXHQgICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuXHQgICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGNvbmRpdGlvbiwgJG9wZXJhdG9yKTtcblxuXHQgIEBpZiAoJHByZWZpeCA9PSAnbWF4JyBhbmQgJHZhbHVlIDw9ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSBvclxuXHRcdCAgKCRwcmVmaXggPT0gJ21pbicgYW5kICR2YWx1ZSA+ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSB7XG5cdFx0QHJldHVybiBmYWxzZTtcblx0ICB9XG5cdH0gQGVsc2UgaWYgbm90IGluZGV4KCRpbS1uby1tZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgIEByZXR1cm4gZmFsc2U7XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vL1xuLy8vIFBhcnNpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuXHRAaWYgc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcblx0ICBAcmV0dXJuICRvcGVyYXRvcjtcblx0fVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG5cdCRkaW1lbnNpb246ICRwYXJzZWQtZGltZW5zaW9uO1xuICB9XG5cbiAgQHJldHVybiAkZGltZW5zaW9uO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gcHJlZml4IGJhc2VkIG9uIGFuIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3Jcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBgbWluYCBvciBgbWF4YFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcikge1xuICBAcmV0dXJuIGlmKGluZGV4KCgnPCcsICc8PScsICfiiaQnKSwgJG9wZXJhdG9yKSwgJ21heCcsICdtaW4nKTtcbn1cblxuXG4vLy9cbi8vLyBHZXQgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IHZhbHVlIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gQSBudW1lcmljIHZhbHVlXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkdmFsdWU6IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yLWluZGV4ICsgc3RyLWxlbmd0aCgkb3BlcmF0b3IpKTtcblxuICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkdmFsdWUpIHtcblx0JHZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJHZhbHVlKTtcbiAgfSBAZWxzZSB7XG5cdCR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcblx0Ly8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuXHQvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuXHQvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cblx0Ly8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcblx0Ly8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuXHQkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG5cdCR2YWx1ZTogJHZhbHVlICsgJGludGVydmFsO1xuICB9IEBlbHNlIGlmICRvcGVyYXRvciA9PSAnPCcge1xuXHQkdmFsdWU6ICR2YWx1ZSAtICRpbnRlcnZhbDtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlO1xufVxuXG5cbi8vL1xuLy8vIFBhcnNlIGFuIGV4cHJlc3Npb24gdG8gcmV0dXJuIGEgdmFsaWQgbWVkaWEtcXVlcnkgZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBwYXJzZVxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIFZhbGlkIG1lZGlhIHF1ZXJ5XG4vLy9cbkBmdW5jdGlvbiBwYXJzZS1leHByZXNzaW9uKCRleHByZXNzaW9uKSB7XG4gIC8vIElmIGl0IGlzIHBhcnQgb2YgJG1lZGlhLWV4cHJlc3Npb25zLCBpdCBoYXMgbm8gb3BlcmF0b3JcbiAgLy8gdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGdvIGFueSBmdXJ0aGVyLCBqdXN0IHJldHVybiB0aGUgdmFsdWVcbiAgQGlmIG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pIHtcblx0QHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG5cdEByZXR1cm4gKCk7XG4gIH1cblxuICAkcmVzdWx0OiAoKTtcblxuICBAZm9yICRpIGZyb20gJHN0YXJ0IHRocm91Z2ggJGVuZCB7XG5cdCRyZXN1bHQ6IGFwcGVuZCgkcmVzdWx0LCBudGgoJGxpc3QsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vLy9cbi8vLyBTdHJpbmcgdG8gbnVtYmVyIGNvbnZlcnRlclxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIENhc3RzIGEgc3RyaW5nIGludG8gYSBudW1iZXJcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBiZSBwYXJzZWRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn1cbi8vL1xuQGZ1bmN0aW9uIHRvLW51bWJlcigkdmFsdWUpIHtcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG5cdEByZXR1cm4gJHZhbHVlO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSAhPSAnc3RyaW5nJyB7XG5cdCRfOiBpbS1sb2coJ1ZhbHVlIGZvciBgdG8tbnVtYmVyYCBzaG91bGQgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gIH1cblxuICAkZmlyc3QtY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAxLCAxKTtcbiAgJHJlc3VsdDogMDtcbiAgJGRpZ2l0czogMDtcbiAgJG1pbnVzOiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpO1xuICAkbnVtYmVyczogKCcwJzogMCwgJzEnOiAxLCAnMic6IDIsICczJzogMywgJzQnOiA0LCAnNSc6IDUsICc2JzogNiwgJzcnOiA3LCAnOCc6IDgsICc5JzogOSk7XG5cbiAgLy8gUmVtb3ZlICsvLSBzaWduIGlmIHByZXNlbnQgYXQgZmlyc3QgY2hhcmFjdGVyXG4gIEBpZiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnKycgb3IgJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpIHtcblx0JHZhbHVlOiBzdHItc2xpY2UoJHZhbHVlLCAyKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggc3RyLWxlbmd0aCgkdmFsdWUpIHtcblx0JGNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgJGksICRpKTtcblxuXHRAaWYgbm90IChpbmRleChtYXAta2V5cygkbnVtYmVycyksICRjaGFyYWN0ZXIpIG9yICRjaGFyYWN0ZXIgPT0gJy4nKSB7XG5cdCAgQHJldHVybiB0by1sZW5ndGgoaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCksIHN0ci1zbGljZSgkdmFsdWUsICRpKSlcblx0fVxuXG5cdEBpZiAkY2hhcmFjdGVyID09ICcuJyB7XG5cdCAgJGRpZ2l0czogMTtcblx0fSBAZWxzZSBpZiAkZGlnaXRzID09IDAge1xuXHQgICRyZXN1bHQ6ICRyZXN1bHQgKiAxMCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpO1xuXHR9IEBlbHNlIHtcblx0ICAkZGlnaXRzOiAkZGlnaXRzICogMTA7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpIC8gJGRpZ2l0cztcblx0fVxuICB9XG5cbiAgQHJldHVybiBpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KTtcbn1cblxuXG4vLy9cbi8vLyBBZGQgYCR1bml0YCB0byBgJHZhbHVlYFxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGFkZCB1bml0IHRvXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICR1bml0IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gYCR2YWx1ZWAgZXhwcmVzc2VkIGluIGAkdW5pdGBcbi8vL1xuQGZ1bmN0aW9uIHRvLWxlbmd0aCgkdmFsdWUsICR1bml0KSB7XG4gICR1bml0czogKCdweCc6IDFweCwgJ2NtJzogMWNtLCAnbW0nOiAxbW0sICclJzogMSUsICdjaCc6IDFjaCwgJ3BjJzogMXBjLCAnaW4nOiAxaW4sICdlbSc6IDFlbSwgJ3JlbSc6IDFyZW0sICdwdCc6IDFwdCwgJ2V4JzogMWV4LCAndncnOiAxdncsICd2aCc6IDF2aCwgJ3ZtaW4nOiAxdm1pbiwgJ3ZtYXgnOiAxdm1heCk7XG5cbiAgQGlmIG5vdCBpbmRleChtYXAta2V5cygkdW5pdHMpLCAkdW5pdCkge1xuXHQkXzogaW0tbG9nKCdJbnZhbGlkIHVuaXQgYCN7JHVuaXR9YC4nKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlICogbWFwLWdldCgkdW5pdHMsICR1bml0KTtcbn1cblxuLy8vXG4vLy8gVGhpcyBtaXhpbiBhaW1zIGF0IHJlZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24ganVzdCBmb3IgdGhlIHNjb3BlIG9mXG4vLy8gdGhlIGNhbGwuIEl0IGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgYSBjb21wb25lbnQgbmVlZGluZyBhbiBleHRlbmRlZFxuLy8vIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBjdXN0b20gYnJlYWtwb2ludHMgKHJlZmVycmVkIHRvIGFzIHR3ZWFrcG9pbnRzKVxuLy8vIGZvciBpbnN0YW5jZS5cbi8vL1xuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vha3BvaW50cyBbKCldIC0gTWFwIG9mIHR3ZWFrcG9pbnRzIHRvIGJlIG1lcmdlZCB3aXRoIGAkYnJlYWtwb2ludHNgXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucyBbKCldIC0gTWFwIG9mIHR3ZWFrZWQgbWVkaWEgZXhwcmVzc2lvbnMgdG8gYmUgbWVyZ2VkIHdpdGggYCRtZWRpYS1leHByZXNzaW9uYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIGJyZWFrcG9pbnRzIHdpdGggYSB0d2Vha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCkpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgbWVkaWEgZXhwcmVzc2lvbnMgd2l0aCBhIGN1c3RvbSBvbmVcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgYm90aCBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSwgKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG5AbWl4aW4gbWVkaWEtY29udGV4dCgkdHdlYWtwb2ludHM6ICgpLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgpKSB7XG4gIC8vIFNhdmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGdsb2JhbC1icmVha3BvaW50czogJGJyZWFrcG9pbnRzO1xuICAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zOiAkbWVkaWEtZXhwcmVzc2lvbnM7XG5cbiAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogbWFwLW1lcmdlKCRicmVha3BvaW50cywgJHR3ZWFrcG9pbnRzKSAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6IG1hcC1tZXJnZSgkbWVkaWEtZXhwcmVzc2lvbnMsICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucykgIWdsb2JhbDtcblxuICBAY29udGVudDtcblxuICAvLyBSZXN0b3JlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogJGdsb2JhbC1icmVha3BvaW50cyAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6ICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnMgIWdsb2JhbDtcbn1cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgcHVibGljIGV4cG9zZWQgQVBJXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgYmFzZWQgb24gYSBsaXN0IG9mIGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHNpbmdsZSBzZXQgYnJlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCB0d28gc2V0IGJyZWFrcG9pbnRzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD10YWJsZXQnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzU4cHgnLCAnPDg1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBzZXQgYnJlYWtwb2ludHMgd2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+ZGVza3RvcCcsICc8PTEzNTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzdGF0aWMgZXhwcmVzc2lvblxuLy8vICBAaW5jbHVkZSBtZWRpYSgncmV0aW5hMngnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBNaXhpbmcgZXZlcnl0aGluZ1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNTBweCcsICc8dGFibGV0JywgJ3JldGluYTN4JykgeyB9XG4vLy9cbkBtaXhpbiBtZWRpYSgkY29uZGl0aW9ucy4uLikge1xuICBAaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID09IDApIG9yXG5cdCAgKG5vdCAkaW0tbWVkaWEtc3VwcG9ydCBhbmQgaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikpIHtcblx0QGNvbnRlbnQ7XG4gIH0gQGVsc2UgaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID4gMCkge1xuXHRAbWVkaWEgI3t1bnF1b3RlKHBhcnNlLWV4cHJlc3Npb24obnRoKCRjb25kaXRpb25zLCAxKSkpfSB7XG5cdCAgLy8gUmVjdXJzaXZlIGNhbGxcblx0ICBAaW5jbHVkZSBtZWRpYShzbGljZSgkY29uZGl0aW9ucywgMikuLi4pIHtcblx0XHRAY29udGVudDtcblx0ICB9XG5cdH1cbiAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49ICAgICAgICAgICAgQ2hvaWNlcyAgICAgICAgICAgID1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY2hvaWNlcy1zZWxlY3RvcjogJ2Nob2ljZXMnICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLWxnOiAxNnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLW1kOiAxNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLXNtOiAxMnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZ3V0dGVyaW5nOiAyNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1czogM3B4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtOiAzcHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRjaG9pY2VzLWJnLWNvbG9yLWRpc2FibGVkOiAjRUFFQUVBICFkZWZhdWx0O1xuJGNob2ljZXMtYmctY29sb3ItZHJvcGRvd246ICNGRkZGRkYgIWRlZmF1bHQ7XG4kY2hvaWNlcy10ZXh0LWNvbG9yOiAjMzMzMzMzICFkZWZhdWx0O1xuJGNob2ljZXMta2V5bGluZS1jb2xvcjogI0RERERERCAhZGVmYXVsdDtcbiRjaG9pY2VzLXByaW1hcnktY29sb3I6ICRibHVlICFkZWZhdWx0O1xuJGNob2ljZXMtZGlzYWJsZWQtY29sb3I6ICNlYWVhZWEgIWRlZmF1bHQ7XG4kY2hvaWNlcy1oaWdobGlnaHQtY29sb3I6ICRjaG9pY2VzLXByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24taWNvbi1wYXRoOiAnLi4vaW1hZ2VzJyAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb246IDhweCAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQ6IDhweCAhZGVmYXVsdDtcblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAkY2hvaWNlcy1ndXR0ZXJpbmc7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLWxnO1xuICAmOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuICAmOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICYuaXMtZGlzYWJsZWQge1xuXHQuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lubmVyLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvci1kaXNhYmxlZDtcblx0ICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHQgIHVzZXItc2VsZWN0OiBub25lO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInNlbGVjdC1vbmVcIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8vIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIgeyBwYWRkaW5nLWJvdHRvbTogNy41cHg7IH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IHBhZGRpbmctYm90dG9tOiAzLjBweDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3IgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJGNob2ljZXMtYnV0dG9uLWljb24tcGF0aCArICcvY3Jvc3MtaW52ZXJzZS5zdmcnKTtcblx0cGFkZGluZzogMDtcblx0YmFja2dyb3VuZC1zaXplOiA4cHg7XG5cdGhlaWdodDogMTAwJTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0cmlnaHQ6IDA7XG5cdG1hcmdpbi10b3A6IC0xMHB4O1xuXHRtYXJnaW4tcmlnaHQ6IDI1cHg7XG5cdGhlaWdodDogMjBweDtcblx0d2lkdGg6IDIwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEwZW07XG5cdG9wYWNpdHk6IC41O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuXHQmOmZvY3VzIHsgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMnB4ICRjaG9pY2VzLWhpZ2hsaWdodC1jb2xvcjsgfVxuICB9XG4gICY6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRoZWlnaHQ6IDA7XG5cdHdpZHRoOiAwO1xuXHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRib3JkZXItY29sb3I6ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci13aWR0aDogNXB4O1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAxMS41cHg7XG5cdHRvcDogNTAlO1xuXHRtYXJnaW4tdG9wOiAtMi41cHg7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gICYuaXMtb3BlbjphZnRlciB7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudDtcblx0bWFyZ2luLXRvcDogLTcuNXB4O1xuICB9XG4gICZbZGlyPVwicnRsXCJdIHtcblx0JjphZnRlciB7XG5cdCAgbGVmdDogMTEuNXB4O1xuXHQgIHJpZ2h0OiBhdXRvO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcblx0ICByaWdodDogYXV0bztcblx0ICBsZWZ0OiAwO1xuXHQgIG1hcmdpbi1sZWZ0OiAyNXB4O1xuXHQgIG1hcmdpbi1yaWdodDogMDtcblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJde1xuXHQmOmFmdGVyIHtcblx0ICBjb250ZW50OiBcIlwiO1xuXHQgIGhlaWdodDogMDtcblx0ICB3aWR0aDogMDtcblx0ICBib3JkZXItc3R5bGU6IHNvbGlkO1xuXHQgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcblx0ICBib3JkZXItd2lkdGg6IDVweDtcblx0ICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cdCAgcmlnaHQ6IDExLjVweDtcblx0Ly8gICB0b3A6IDUwJTtcblx0IHRvcDogMThweDtcblx0ICBtYXJnaW4tdG9wOiAtMi41cHg7XG5cdCAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cdH1cblx0Ji5pcy1vcGVuOmFmdGVyIHtcblx0ICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQ7XG5cdCAgbWFyZ2luLXRvcDogLTcuNXB4O1xuXHR9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJdLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInRleHRcIl0gIHtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IGN1cnNvcjogdGV4dDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2J1dHRvbiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tcmlnaHQ6IC0kY2hvaWNlcy1idXR0b24tb2Zmc2V0LzI7XG5cdG1hcmdpbi1ib3R0b206IDA7XG5cdG1hcmdpbi1sZWZ0OiAkY2hvaWNlcy1idXR0b24tb2Zmc2V0O1xuXHRwYWRkaW5nLWxlZnQ6ICRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQqMjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgMTAlKTtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCRjaG9pY2VzLWJ1dHRvbi1pY29uLXBhdGggKyAnL2Nyb3NzLnN2ZycpO1xuXHRiYWNrZ3JvdW5kLXNpemU6ICRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb247XG5cdHdpZHRoOiAkY2hvaWNlcy1idXR0b24tZGltZW5zaW9uO1xuXHRsaW5lLWhlaWdodDogMTtcblx0b3BhY2l0eTogLjc1O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvcjtcbiAgLy9wYWRkaW5nOiA3LjVweCA3LjVweCAzLjc1cHg7XG4gIHBhZGRpbmc6IDRweCA3LjVweCAxcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLW1kO1xuICBtaW4taGVpZ2h0OiAzNXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAuaXMtZm9jdXNlZCAmLCAuaXMtb3BlbiAmIHsgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTUlKTsgfVxuICAuaXMtb3BlbiAmIHsgYm9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzIDAgMDsgfVxuICAuaXMtZmxpcHBlZC5pcy1vcGVuICYgeyBib3JkZXItcmFkaXVzOiAwIDAgJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3QtLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNHB4IDE2cHggNHB4IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIFtkaXI9XCJydGxcIl0gJiB7XG5cdHBhZGRpbmctcmlnaHQ6IDRweDtcblx0cGFkZGluZy1sZWZ0OiAxNnB4O1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IHdpZHRoOiAxMDAlOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tbXVsdGlwbGUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0Ym9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtO1xuXHRwYWRkaW5nOiAzcHggMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtc207XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdG1hcmdpbi1yaWdodDogNHB4O1xuXHRtYXJnaW4tdG9wOiAwcHg7XG5cdG1hcmdpbi1ib3R0b206IDNweDtcblx0YmFja2dyb3VuZC1jb2xvcjogJGNob2ljZXMtcHJpbWFyeS1jb2xvcjtcblx0Ym9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLXByaW1hcnktY29sb3IsIDUlKTtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcblx0JltkYXRhLWRlbGV0YWJsZV0geyBwYWRkaW5nLXJpZ2h0OiA1cHg7IH1cblx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0ICBtYXJnaW4tcmlnaHQ6IDA7XG5cdCAgbWFyZ2luLWxlZnQ6IDMuNzVweDtcblx0fVxuXHQmLmlzLWhpZ2hsaWdodGVkIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgNSUpO1xuXHQgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1wcmltYXJ5LWNvbG9yLCAxMCUpO1xuXHR9XG5cdC5pcy1kaXNhYmxlZCAmIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtZGlzYWJsZWQtY29sb3IsIDI1JSk7XG5cdCAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLWRpc2FibGVkLWNvbG9yLCAzNSUpO1xuXHR9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuICBib3JkZXI6IDFweCBzb2xpZCAkY2hvaWNlcy1rZXlsaW5lLWNvbG9yO1xuICB0b3A6IDEwMCU7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICYuaXMtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLmlzLW9wZW4gJiB7IGJvcmRlci1jb2xvcjogZGFya2VuKCRjaG9pY2VzLWtleWxpbmUtY29sb3IsIDE1JSk7IH1cbiAgLmlzLWZsaXBwZWQgJiB7XG5cdHRvcDogYXV0bztcblx0Ym90dG9tOiAxMDAlO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tYm90dG9tOiAtMXB4O1xuXHRib3JkZXItcmFkaXVzOiAuMjVyZW0gLjI1cmVtIDAgMDtcbiAgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3Qge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1heC1oZWlnaHQ6IDMwMHB4O1xuXHRvdmVyZmxvdzogYXV0bztcblx0LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXHR3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG5cdFtkaXI9XCJydGxcIl0gJiB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHtcblx0QG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG5cdCAgcGFkZGluZy1yaWdodDogMTAwcHg7XG5cdCAgJjphZnRlciB7XG5cdFx0Y29udGVudDogYXR0cihkYXRhLXNlbGVjdC10ZXh0KTtcblx0XHRmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRyaWdodDogMTBweDtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdCAgfVxuXHQgIFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XG5cdFx0cGFkZGluZy1sZWZ0OiAxMDBweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuXHRcdCY6YWZ0ZXIge1xuXHRcdCAgcmlnaHQ6IGF1dG87XG5cdFx0ICBsZWZ0OiAxMHB4O1xuXHRcdH1cblx0ICB9XG5cdH1cblx0Ji5pcy1oaWdobGlnaHRlZCB7XG5cdCAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCMwMDAwMDAsICNGRkZGRkYsIDUlKTtcblx0ICAmOmFmdGVyIHsgb3BhY2l0eTogLjU7IH1cblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogZGVmYXVsdDsgfVxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHsgY3Vyc29yOiBwb2ludGVyOyB9XG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2l0ZW0tLWRpc2FibGVkIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIG9wYWNpdHk6IC41O1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2hlYWRpbmcge1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcbiAgcGFkZGluZzogMTBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTAlKTtcbiAgY29sb3I6IGxpZ2h0ZW4oIzMzMywgMzAlKTtcbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgJjpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IG1peCgjMDAwMDAwLCAjRkZGRkZGLCAyLjUlKTtcbiAgZm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgcGFkZGluZzogNHB4IDAgNHB4IDJweCAhaW1wb3J0YW50O1xuICAmOmZvY3VzIHsgb3V0bGluZTogMDsgfVxuICBbZGlyPVwicnRsXCJdICYge1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMDtcbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX3BsYWNlaG9sZGVyIHsgb3BhY2l0eTogLjU7IH1cblxuLyo9PT09PSAgRW5kIG9mIENob2ljZXMgID09PT09PSovXG4iLCIvLyBCdXR0b24gc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4tcGFnZSB7XG5cblx0LndwZm9ybXMtYnRuIHtcblx0XHRib3JkZXI6IDA7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tYmxvY2sge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLW1kIHtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLWxnIHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiAxNnB4IDI4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tb3JhbmdlIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkb3JhbmdlO1xuXHRcdGJvcmRlci1jb2xvcjogJG9yYW5nZTtcblx0XHRjb2xvcjogI2ZmZjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRib3JkZXItY29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRjb2xvcjogIzY2NjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNztcblx0XHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRcdGNvbG9yOiAjNDQ0O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1saWdodC1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0Y29sb3I6ICM2NjY7XG5cblx0XHQmOmhvdmVyIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG5cdFx0XHRjb2xvcjogIzQ0NDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tdHJhbnMtZ3JlZW4ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG5cdFx0Y29sb3I6ICRncmVlbjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGdyZWVuO1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0fVxuXG5cdFx0LnVuZGVybGluZSB7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAkZ3JlZW47XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0Ym90dG9tOiAtNXB4O1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZGFzaGljb25zIHtcblx0XHRcdGhlaWdodDogMThweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFsZXJ0IHN0eWxlcy5cbi8vIFN0eWxpbmcgdHdlYWtzIGZvciBqUXVlcnktY29uZmlybSBKUyBhbGVydCBsaWJyYXJ5LlxuYm9keSB7XG5cblx0ZGl2Lmpjb25maXJtIHtcblxuXHRcdCosXG5cdFx0Kjo6YmVmb3JlLFxuXHRcdCo6OmFmdGVyIHtcblx0XHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0fVxuXG5cdFx0ZGl2Lmpjb25maXJtLWJveC1jb250YWluZXIge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tYm94IHtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuXHRcdFx0XHRkaXYuamNvbmZpcm0tY2xvc2VJY29uIHtcblx0XHRcdFx0XHRjb2xvcjogcmdiYSgwLDAsMCwwLjQpO1xuXHRcdFx0XHRcdHRvcDogOHB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA4cHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiByZ2JhKDAsMCwwLDAuODApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRpdi5qY29uZmlybS1ib3gge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tdGl0bGUtYyB7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDI2cHggMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cblx0XHRcdFx0c3Bhbi5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHRcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdGNvbG9yOiAjYzRjNGM0ICFpbXBvcnRhbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuLmpjb25maXJtLXRpdGxlIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNwYW4uamNvbmZpcm0taWNvbi1jICsgc3Bhbi5qY29uZmlybS10aXRsZSB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAyNnB4O1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblxuXHRcdFx0XHQuamNvbmZpcm0tY29udGVudCB7XG5cdFx0XHRcdFx0b3ZlcmZsb3c6IGluaGVyaXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGl2Lmpjb25maXJtLWNvbnRlbnQge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMS40O1xuXG5cdFx0XHRcdCYubGl0ZS11cGdyYWRlIHtcblx0XHRcdFx0XHRwIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYubGFyZ2Uge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuc21hbGwge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5hbHJlYWR5LXB1cmNoYXNlZCB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1idXR0b25zIHtcblxuXHRcdFx0XHQuYWxyZWFkeS1wdXJjaGFzZWQge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRjb2xvcjogI2FhYTtcblx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5kaXNjb3VudC1ub3RlIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDMwcHggMCAwO1xuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmYWZmYWM7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIC0zMHB4O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDI0cHggNjBweCAyMHB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdFx0XHRjb2xvcjogIzRkNGQ0ZDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6ICdcXGYwNTgnO1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMjZweDtcblx0XHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDVweCA2cHg7XG5cdFx0XHRcdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdFx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0XHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogLTIwcHg7O1xuXHRcdFx0XHRcdFx0cmlnaHQ6IDUwJTtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogLTE4cHg7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzNhYmMwMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuIHtcblx0XHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRcdGNvbG9yOiAjM2FiYzAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YSB7XG5cdFx0XHRcdFx0Y29sb3I6ICNhYWE7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMTJweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dFt0eXBlPXRleHRdIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA5OSU7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNmQ2ZDY7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdG1hcmdpbjogMjBweCBhdXRvIDAgYXV0bztcblx0XHRcdH1cblxuXHRcdFx0I3dwZm9ybXMtZW1iZWQtc2hvcnRjb2RlIHtcblx0XHRcdFx0bWFyZ2luOiAyMHB4IDA7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQjd3Bmb3Jtcy1lbWJlZC1zaG9ydGNvZGU6ZGlzYWJsZWQge1xuXHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdH1cblxuXHRcdFx0YnV0dG9uLmJ0bi1jb25maXJtIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZTtcblx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdG91dGxpbmU6IG5vbmU7XG5cblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAkZGFya29yYW5nZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRidXR0b24uYnRuLWRlZmF1bHQge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0LmVycm9yIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZXJyb3Ige1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZWJjY2QxICFpbXBvcnRhbnQ7XG5cdFx0XHR9XG5cblx0XHRcdC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtbXMtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRmb250LXNpemU6IDQ1cHggIWltcG9ydGFudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuY2hvaWNlcyB7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblxuXHRcdGlucHV0W3R5cGU9dGV4dF0uY2hvaWNlc19faW5wdXQge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBBbGVydCBzdHlsZXMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQud3Bmb3Jtcy1hbGVydCB7XG5cdFx0cGFkZGluZzogMTZweDtcblx0XHRtYXJnaW4tYm90dG9tOiAxOHB4O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXG5cdFx0aDQge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdGNvbG9yOiBpbmhlcml0O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTVweCAwO1xuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtbm9tYXJnaW4ge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1zbWFsbCB7XG5cdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LXN1Y2Nlc3Mge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcblx0XHRcdGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcblx0XHRcdGNvbG9yOiAjM2M3NjNkO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1pbmZvIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHRib3JkZXItY29sb3I6ICNiY2U4ZjE7XG5cdFx0XHRjb2xvcjogIzMxNzA4Zjtcblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtd2FybmluZyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZmFlYmNjO1xuXHRcdFx0Y29sb3I6ICM4YTZkM2I7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LWRhbmdlciB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuXHRcdFx0Y29sb3I6ICNhOTQ0NDI7XG5cdFx0fVxuXHR9XG59IiwiLy8gRmxhZyBpY29ucy5cbi53cGZvcm1zLWZsYWcge1xuXHR3aWR0aDogMTZweDtcblx0aGVpZ2h0OiAxNnB4O1xuXHRiYWNrZ3JvdW5kOnVybCguLi9pbWFnZXMvZmxhZ3MucG5nKSBuby1yZXBlYXQ7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWQge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWcge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1haSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXMge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXQge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXUge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXoge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iaCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYmkge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ibSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYm4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJ0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYncge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnkge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnoge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Qge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Yge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2cge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2sge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY24ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jciB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN2IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1kbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZG8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWR6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1laCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZXIge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lcyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ldCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Ege2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdiIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1naCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2kge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ20ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ24ge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Age2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ige2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Qge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWd3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1neSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaGsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWhuIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ociB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaHQge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWh1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWllIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWltIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWluIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlxIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctamUge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWptIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1qbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctanAge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2gge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2kge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWttIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3Age2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3kge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1reiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGsge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sdSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHYge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWMge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1kIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1oIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1tIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tcSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXIge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1zIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXUge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW12IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW14IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXkge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1teiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5hIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5nIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmkge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmwge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5vIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ucCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbnIge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW56IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1vbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGEge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGcge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1waCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGwge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXB0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcHkge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXFhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1yZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcm8ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXJzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcnUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ydyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Ige2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2sge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc24ge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc3Yge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zeSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGgge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10bSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdG4ge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHQge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10diB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXR3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11YSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdXMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11eSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXV6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12YyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdmUge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12aSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdm4ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZ1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctd3Mge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy15ZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXphIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctem0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy16dyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0yMjRweH1cbiIsIi8vIEhlYWRlciBzdHlsZXMuXG5cbiN3cGZvcm1zLWhlYWRlci10ZW1wIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRtYXJnaW46IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAtMXB4O1xuXHRsZWZ0OiAyMHB4O1xuXHRyaWdodDogMjBweDtcblx0ei1pbmRleDogOTk7XG59XG5cbiN3cGZvcm1zLWhlYWRlciB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCAkb3JhbmdlO1xuXHRwYWRkaW5nOiAyMnB4IDIwcHg7XG5cblx0aW1nIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW46IDA7XG5cdFx0bWF4LXdpZHRoOiAyMzVweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0bWF4LXdpZHRoOiAyMDBweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIFBhZ2UgdGl0bGUgYW5kIHRhYnMgc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4td3JhcCB7XG5cblx0Ly8gVGl0bGUgYXJlYS5cblx0LnBhZ2UtdGl0bGUge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdHBhZGRpbmc6IDE1cHggMjBweDtcblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdG1hcmdpbi1sZWZ0OiAyOHB4O1xuXHRcdH1cblx0fVxufVxuXG4vLyBUYWIgbmF2aWdhdGlvbi5cbi53cGZvcm1zLWFkbWluLXRhYnMge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdHBhZGRpbmc6IDAgMjBweDtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0b3ZlcmZsb3c6IGF1dG87XG5cdGZvbnQtc2l6ZTogMTRweDtcblxuXHRsaSB7XG5cdFx0bWFyZ2luOiAwIDMwcHggMCAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cblx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0YSB7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0cGFkZGluZzogMjBweCAwIDE4cHggMDtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZmZmO1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdH1cblxuXHRcdFx0Ji5hY3RpdmUge1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBHZW5lcmFsIGFkbWluIHN0eWxpbmcuXG5cbi8vIENvcmUgYWRtaW4gc3R5bGUgb3ZlcnJpZGVzLlxuI3dwY29udGVudCB7XG5cdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNDZweDtcblx0fVxufVxuXG4jd3Bib2R5IHtcblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogMDtcblx0fVxufVxuXG4vLyBUaGlzIGNsYXNzIGlzIGF1dG8gYXBwbGllZCB0byBfYWxsXyBXUEZvcm1zIGFkbWluIHBhZ2VzL3NjcmVlbnMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQvLyBUaGlzIGlzIGhpZGRlbiBvbiBsb2FkLCB0aGVuIG1hZGUgdmlzaWJsZSB3aXRoIEpTLCB0b1xuXHQvLyBwcmV2ZW50IGl0IGZyb20gXCJqdW1waW5nXCIuXG5cdCNzY3JlZW4tbWV0YS1saW5rcyxcblx0I3NjcmVlbi1tZXRhIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0Ly8gUmVzcG9uc2l2ZSB2aWRlbyBjb250YWluZXIsIHJlcGxhY2VzIEpTIG1ldGhvZC5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctYm90dG9tOiA1Ni4xJTtcblx0XHQvLyBwYWRkaW5nLXRvcDogMzBweDtcblx0XHRoZWlnaHQ6IDA7XG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0fVxuXG5cdC52aWRlby1jb250YWluZXIgaWZyYW1lLFxuXHQudmlkZW8tY29udGFpbmVyIG9iamVjdCxcblx0LnZpZGVvLWNvbnRhaW5lciBlbWJlZCB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblx0fVxuXG5cdC8vIEZhbmN5IGZpbGUgdXBsb2FkLlxuXHQud3Bmb3Jtcy1maWxlLXVwbG9hZCB7XG5cblx0XHRpbnB1dFt0eXBlPWZpbGVdIHtcblx0XHRcdHdpZHRoOiAwLjFweDtcblx0XHRcdGhlaWdodDogMC4xcHg7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHotaW5kZXg6IC0xO1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdH1cblxuXHRcdGlucHV0W3R5cGU9ZmlsZV06Zm9jdXMgKyBsYWJlbCxcblx0XHRpbnB1dFt0eXBlPWZpbGVdLmhhcy1mb2N1cyArIGxhYmVsIHtcblx0XHRcdG91dGxpbmU6IDFweCBkb3R0ZWQgIzAwMDtcblx0XHRcdG91dGxpbmU6IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBhdXRvIDVweDtcblx0XHR9XG5cblx0XHQuZmxkIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdC5wbGFjZWhvbGRlciB7XG5cdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0cm9uZyAuZmEge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cdFx0fVxuXHR9XG5cblx0Ly8gR2VucmljIGNsYXNzIGZvciBoaWRpbmcgZGlzcGxheTtcblx0LndwZm9ybXMtaGlkZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIFBsYWNlaG9sZGVyIGgxIGZvciBhZG1pbiBub3RpY2VzLlxuXHQud3Bmb3Jtcy1oMS1wbGFjZWhvbGRlciB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIEhpZGUgbm90aWNlcyBvbiBsb2FkIHRvIHByZXZlbnQganVtcGluZy4gSlMgd2lsbCByZXZlYWwgdGhlbS5cblx0Lm5vdGljZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuXG4vLyBBZG1pbiB3cmFwIC0gY29udGFpbnMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGhlYWRlci5cbi53cGZvcm1zLWFkbWluLXdyYXAge1xuXG5cdG1hcmdpbjogMDtcblxuXHQubm90aWNlIHtcblx0XHRtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xuXHRcdG1hcmdpbi1yaWdodDogMjBweCAhaW1wb3J0YW50O1xuXHR9XG59XG5cbi8vIEFkbWluIGNvbnRlbnQuXG4ud3Bmb3Jtcy1hZG1pbi1jb250ZW50IHtcblx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXHRwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuXG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNsZWFyOiBib3RoO1xuXHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHR9XG5cblx0aHIge1xuXHRcdGJvcmRlcjogbm9uZTtcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRtYXJnaW46IDIwcHggMDtcblx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHR9XG59XG5cbi53cGZvcm1zLWNsZWFyIHtcblxuXHQmOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCIgXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdH1cblxuXHQmOmFmdGVyIHtcblx0XHRjbGVhcjogYm90aDtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxufVxuXG4ud3Bmb3Jtcy1hZG1pbi1jb2x1bW5zIHtcblxuXHQmID4gZGl2W2NsYXNzKj1cIi1jb2x1bW4tXCJdIHtcblx0XHRmbG9hdDogbGVmdDtcblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi0yMCB7d2lkdGg6IDIwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTMzIHt3aWR0aDogMzMuMzMzMzMlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNDAge3dpZHRoOiA0MCV9XG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi01MCB7d2lkdGg6IDUwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTYwIHt3aWR0aDogNjAlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tODAge3dpZHRoOiA4MCV9XG5cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLWxhc3Qge2Zsb2F0OiByaWdodCAhaW1wb3J0YW50fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdFx0Y2xlYXI6IGJvdGg7XG5cdH1cbn1cblxuXG5cbiIsIi8vIEZvcm0gT3ZlcnZpZXcgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLW92ZXJ2aWV3XG4jd3Bmb3Jtcy1vdmVydmlldyB7XG5cblx0Ly8gUmVtb3ZlIHRoZSB0b3AgbWFyZ2luIHNvIGl0IGRpc3BsYXlzIDIwcHggYmV0d2VlbiB0aGUgaGVhZGVyIGFyZWFcblx0Ly8gYW5kIHRoZSBjb250ZW50LCBjb25zaXN0ZW50IHdpdGggb3VyIG90aGVyIGFkbWluIHBhZ2VzLlxuXHQudGFibGVuYXYudG9wIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHR9XG5cblx0Ly8gU2V0IGNlcnRhaW4gY29sdW1uIHdpZHRocy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0LmNvbHVtbi1pZCB7XG5cdFx0XHR3aWR0aDogMzBweDtcblx0XHR9XG5cblx0XHQuY29sdW1uLWVudHJpZXMge1xuXHRcdFx0d2lkdGg6IDcwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1zaG9ydGNvZGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tY3JlYXRlZCB7XG5cdFx0XHR3aWR0aDogMTQ1cHg7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBFbnRyaWVzIFNpbmdsZSAoRGV0YWlscykgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWVudHJpZXMmdmlldz1kZXRhaWxzXG4jd3Bmb3Jtcy1lbnRyaWVzLXNpbmdsZSB7XG5cblx0I3Bvc3RzdHVmZiB7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC8vIE1ldGFib3hlcyBhcmUgbm90IG1vdmFibGUgc28gZG9uJ3QgbGV0IHRoZSB1c2VyIHRoaW5rIHNvLlxuXHQucG9zdGJveCAuaG5kbGUge1xuXHRcdGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuXHR9XG5cblx0Ly8gRW50cnkgbmF2aWdhdGlvbiAtIG5leHQvcHJldi5cblx0LndwZm9ybXMtZW50cnktbmF2aWdhdGlvbiB7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDJweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxcHg7XG5cdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdHRvcDogYXV0bztcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDRweCAwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHR9XG5cblx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGhlaWdodDogYXV0bztcblx0XHRcdFx0d2lkdGg6IDI4cHg7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmluYWN0aXZlIHtcblx0XHRcdFx0b3BhY2l0eTogMC41O1xuXHRcdFx0XHRwb2ludGVyLWV2ZW50czogbm9uZTtcblx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5hdmlnYXRpb24tdGV4dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZW50cnktY3VycmVudCB7XG5cdFx0XHR0b3A6IGF1dG87XG5cdFx0XHRtYXJnaW46IDAgLTVweCAwIC0zcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRwYWRkaW5nOiA0cHggMTBweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0XHQtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMjlweDtcblx0XHRcdHRleHQtdHJhbnNmb3JtOiBjZW50ZXI7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBFbnRyeSBmaWVsZHMgbWV0YWJveC5cblx0I3dwZm9ybXMtZW50cnktZmllbGRzIHtcblxuXHRcdGgyLmhuZGxlIHtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblxuXHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHR3aWR0aDogMTZweDtcblx0XHRcdFx0bWFyZ2luOiA0cHggNHB4IDAgMDtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Lm5vLWZpZWxkcyB7XG5cdFx0XHRwYWRkaW5nOiAxMnB4O1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0cCB7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZW50cnktZmllbGQtbmFtZSB7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNlYmYzZmI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1lbnRyeS1maWVsZC12YWx1ZSB7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQuZW1wdHkgLndwZm9ybXMtZW50cnktZmllbGQtdmFsdWUge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVtcHR5LWZpZWxkLXRvZ2dsZSB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRwYWRkaW5nOiA1cHggMCAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEVudHJ5IE5vdGVzIG1ldGFib3guXG5cdCN3cGZvcm1zLWVudHJ5LW5vdGVzIHtcblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1uZXcge1xuXHRcdFx0cGFkZGluZzogMTBweDtcblx0XHR9XG5cblx0XHRmb3JtIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LmJ0bnMge1xuXHRcdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0XHRwYWRkaW5nOiA4cHggMDtcblx0XHR9XG5cblx0XHQubm8tbm90ZXMge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogNHB4IDEwcHggOHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5vdGVzLXNpbmdsZSB7XG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlM2UxZTM7XG5cblx0XHRcdHA6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblxuXHRcdFx0Ji5ldmVuIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1ieWxpbmUge1xuXHRcdFx0Y29sb3I6ICM4ODg7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXG5cdFx0XHQuc2VwIHtcblx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHR9XG5cblx0XHRcdC5ub3Rlcy11c2VyIHtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0fVxuXG5cdFx0XHQubm90ZS1kZWxldGUge1xuXHRcdFx0XHRjb2xvcjogI2EwMDtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gRW50cnkgRGV0YWlscywgQWN0aW9ucywgYW5kIFBheW1lbnRzLlxuXHQjd3Bmb3Jtcy1lbnRyeS1kZXRhaWxzIC5pbnNpZGUsXG5cdCN3cGZvcm1zLWVudHJ5LXBheW1lbnQgLmluc2lkZSxcblx0I3dwZm9ybXMtZW50cnktYWN0aW9ucyAuaW5zaWRlIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhICB7XG5cdFx0cGFkZGluZzogNnB4IDAgMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBwLFxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIHAge1xuXHRcdHBhZGRpbmc6IDZweCAxMHB4IDhweDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEge1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG5cdFx0cGFkZGluZzogMTBweDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LXBheW1lbnQtbWV0YSBwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBzdHJvbmcsXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBzdHJvbmcge1xuXHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1kZXRhaWxzLW1ldGEgLmRhc2hpY29ucyxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIC5kYXNoaWNvbnMge1xuXHRcdHBhZGRpbmc6IDAgMnB4IDAgMDtcblx0XHRjb2xvcjogIzgyODc4QTtcblx0XHR0b3A6IC0xcHg7XG5cdFx0bGVmdDogLTFweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR9XG5cblx0I3dwZm9ybXMtZW50cnktZGV0YWlscyAuc3VibWl0ZGVsZXRlIHtcblx0XHRjb2xvcjogI2EwMDtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0cGFkZGluZzogMXB4IDJweDtcblx0fVxuXG5cdCN3cGZvcm1zLWVudHJ5LWRldGFpbHMgLnN1Ym1pdGRlbGV0ZTpob3ZlciB7XG5cdFx0Y29sb3I6IHJlZDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBhIHtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1hY3Rpb25zLW1ldGEgYTpob3ZlciB7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdH1cblxuXHQvLyBFbnRyeSBMb2NhdGlvbi5cblx0I3dwZm9ybXMtZW50cnktZ2VvbG9jYXRpb24ge1xuXG5cdFx0Lmluc2lkZSB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLW1ldGEge1xuXHRcdFx0d2lkdGg6IDg1cHg7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxMnB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLXZhbHVlIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBhZGRpbmc6IDEwcHggMTJweCAxMHB4IDIwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZmxhZyB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDRweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEVudHJpZXMgTGlzdCAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtZW50cmllcyZ2aWV3PWxpc3RcbiN3cGZvcm1zLWVudHJpZXMtbGlzdCB7XG5cblx0LmZvcm0tZGV0YWlscyB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0bWFyZ2luOiAwIDAgMTBweDtcblxuXHRcdC5mb3JtLWRldGFpbHMtc3ViIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXNpemU6IDEwcHg7XG5cdFx0XHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRcdFx0bWFyZ2luOiAwIDAgOHB4IDA7XG5cdFx0fVxuXG5cdFx0LmZvcm0tZGV0YWlscy10aXRsZSB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyMDBweFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5mb3JtLXNlbGVjdG9yIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0LnRvZ2dsZSB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0Y29sb3I6ICM0NDQ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0XHQmOmhvdmVyLFxuXHRcdFx0XHQmLmFjdGl2ZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2UzZTNlMztcblx0XHRcdFx0XHRvdXRsaW5lOiBub25lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmZvcm0tbGlzdCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggOHB4IDAgcmdiYSgwLDAsMCwwLjEpO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRvcDogMjdweDtcblx0XHRcdFx0bGVmdDogLTEwOHB4O1xuXHRcdFx0XHR3aWR0aDogMjMwcHg7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHggMDtcblx0XHRcdFx0ei1pbmRleDogOTk5MTtcblxuXHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHRvcDogLTEwcHg7XG5cdFx0XHRcdFx0bGVmdDogMTEwcHg7XG5cdFx0XHRcdFx0d2lkdGg6IDA7XG5cdFx0XHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0XHRcdFx0Ym9yZGVyLXdpZHRoOiAwIDhweCAxMHB4IDhweDtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxOTZweDtcblx0XHRcdFx0b3ZlcmZsb3cteDogaGlkZGVuO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblxuXHRcdFx0XHRcdGEge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiA1cHggMTVweDtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDQ0O1xuXG5cdFx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZm9ybS1kZXRhaWxzLWFjdGlvbnMge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjwxMjAwcHhcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdH1cblxuXHRcdFx0YSB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRtYXJnaW46IDAgMTJweCAwIDA7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbjogMFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNlYXJjaC5cblx0LnNlYXJjaC1ib3gge1xuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1maWVsZCB7XG5cdFx0XHRtYXgtd2lkdGg6IDE4MHB4O1xuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdG1hcmdpbjogMCAycHggMCAwO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1jb21wYXJpc29uIHtcblx0XHRcdG1heC13aWR0aDogOTBweDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mb3JtLXNlYXJjaC1ib3gtdGVybSB7XG5cdFx0XHRoZWlnaHQ6IDI4cHg7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBGaWx0ZXJpbmcuXG5cdC53cGZvcm1zLWZpbHRlci1kYXRlIHtcblxuXHRcdC53cGZvcm1zLWZpbHRlci1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdGhlaWdodDogMjhweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0bWF4LXdpZHRoOiAyMTBweDtcblx0XHR9XG5cblx0XHRidXR0b24ge1xuXHRcdFx0bWFyZ2luOiAxcHggOHB4IDAgMDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV1AgVGFibGUgc3R5bGluZy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0Lm5ldy1lbnRyaWVzLW5vdGlmaWNhdGlvbiB0ZCB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0YSB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIHtcblx0XHRcdHdpZHRoOiAzNXB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRhOmZvY3VzIHtcblx0XHRcdFx0LXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5jb2x1bW4taW5kaWNhdG9ycyAuZGFzaGljb25zIHtcblx0XHRcdHdpZHRoOiAxNHB4O1xuXHRcdFx0aGVpZ2h0OiAxNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luLXRvcDogM3B4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciAuZGFzaGljb25zIHtcblx0XHRcdG1hcmdpbi1yaWdodDogNnB4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciB7XG5cdFx0XHRjb2xvcjogI2U0ZTRlNDtcblxuXHRcdFx0Jjpob3Zlcixcblx0XHRcdCYudW5zdGFyIHtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvci1yZWFkIHtcblx0XHRcdGNvbG9yOiAjOWVkZTg0O1xuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0Ji51bnJlYWQge1xuXHRcdFx0XHRjb2xvcjogI2U0ZTRlNDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLWRhdGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tc3RhdHVzIHtcblx0XHRcdHdpZHRoOiAxMjBweDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRoZWlnaHQ6IDEycHg7XG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRtYXJnaW46IDAgMCAwIDNweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLXBheW1lbnRfdG90YWwge1xuXHRcdFx0d2lkdGg6IDEwMHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tYWN0aW9ucyB7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0fVxuXG5cdFx0LnNlcCB7XG5cdFx0XHRjb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuZGVsZXRlOmhvdmVyIHtcblx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtZW50cmllcy10YWJsZS1lZGl0LWNvbHVtbnMge1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRjb2xvcjogI2NjYztcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0fVxuXHR9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XG5cblx0LndwZm9ybXMtYWRtaW4tY29udGVudCB7XG5cdFx0cGFkZGluZy1sZWZ0OiAxMHB4O1xuXHRcdHBhZGRpbmctcmlnaHQ6IDEwcHg7XG5cdH1cblxuXHQud3AtbGlzdC10YWJsZSB7XG5cdFx0bWFyZ2luOiAwIC0xMHB4IDAgLTEwcHg7XG5cdFx0d2lkdGg6IDEwMHZ3O1xuXHRcdHRhYmxlLWxheW91dDogYXV0bztcblx0fVxuXG5cdC53cC1saXN0LXRhYmxlLmVudHJpZXMge1xuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIHtcblx0XHRcdHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvcnMge1xuXHRcdFx0LmluZGljYXRvci1zdGFyIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdH1cblx0XHRcdC5pbmRpY2F0b3ItcmVhZCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHI6bm90KC5pbmxpbmUtZWRpdC1yb3cpOm5vdCgubm8taXRlbXMpIHRkLmNvbHVtbi1wcmltYXJ5IHtcblx0XHRcdGhlaWdodDogOHB4O1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdHotaW5kZXg6ICsxO1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdFx0fVxuXG5cdFx0LnRvZ2dsZS1yb3cge1xuXHRcdFx0cmlnaHQ6IDVweDtcblx0XHRcdHRvcDogMTVweDtcblx0XHR9XG5cblx0XHR0cjpub3QoLmlubGluZS1lZGl0LXJvdyk6bm90KC5uby1pdGVtcykgdGQuY29sdW1uLXByaW1hcnkrdGQge1xuXHRcdFx0ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHR0cjpub3QoLmlubGluZS1lZGl0LXJvdyk6bm90KC5uby1pdGVtcykgdGQuY29sdW1uLXByaW1hcnl+dGQge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA1cHg7XG5cdFx0XHRtaW4td2lkdGg6IDUwdnc7XG5cdFx0fVxuXG5cblx0fVxuXG5cdHAuc2VhcmNoLWJveCB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0aW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dIHtcblx0XHRoZWlnaHQ6IDE2cHg7XG5cdFx0d2lkdGg6IDE2cHg7XG5cdH1cblxufSIsIi8vIFdlbGNvbWUgQWN0aXZhdGlvbiAtIGluZGV4LnBocD9wYWdlPXdwZm9ybXMtZ2V0dGluZy1zdGFydGVkXG4jd3Bmb3Jtcy13ZWxjb21lIHtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkICRvcmFuZ2U7XG5cdGNvbG9yOiAjNTU1O1xuXHRwYWRkaW5nLXRvcDogMTEwcHg7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0cGFkZGluZy10b3A6IDY0cHg7XG5cdH1cblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQuY29udGFpbmVyIHtcblx0XHRtYXJnaW46IDAgYXV0bztcblx0XHRtYXgtd2lkdGg6IDcyMHB4O1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQuYmxvY2sge1xuXHRcdHBhZGRpbmc6IDQwcHg7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0fVxuXHR9XG5cblx0aW1nIHtcblx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHR9XG5cblx0aDEge1xuXHRcdGNvbG9yOiAjMjIyO1xuXHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXHR9XG5cblx0aDUge1xuXHRcdGNvbG9yOiAjMjIyO1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRtYXJnaW46IDAgMCA4cHggMDtcblx0fVxuXG5cdGg2IHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0XHRsaW5lLWhlaWdodDogMS42O1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHRwIHtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHR9XG5cblx0LmJ1dHRvbi13cmFwIHtcblx0XHRtYXgtd2lkdGg6IDU5MHB4O1xuXHRcdG1hcmdpbjogMCBhdXRvIDAgYXV0bztcblxuXHRcdC5sZWZ0IHtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnJpZ2h0IHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmludHJvIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHRcdG1hcmdpbi1ib3R0b206IDMwcHg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctdG9wOiA0MHB4O1xuXG5cdFx0LnN1bGxpZSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdGhlaWdodDogMTEwcHg7XG5cdFx0XHR3aWR0aDogMTEwcHg7XG5cdFx0XHRwYWRkaW5nOiAxOHB4IDE0cHggMCAxNHB4O1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAtNThweDtcblx0XHRcdGxlZnQ6IDUwJTtcblx0XHRcdG1hcmdpbi1sZWZ0OiAtNTVweDtcblx0XHR9XG5cblx0XHQudmlkZW8tdGh1bWJuYWlsIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0bWFyZ2luOiAwIGF1dG87XG5cdFx0fVxuXG5cdFx0LmJ1dHRvbi13cmFwIHtcblx0XHRcdG1hcmdpbi10b3A6IDI1cHg7XG5cdFx0fVxuXHR9XG5cblx0LmZlYXR1cmVzIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cdFx0cGFkZGluZy1ib3R0b206IDIwcHg7XG5cblx0XHQuZmVhdHVyZS1saXN0IHtcblx0XHRcdG1hcmdpbi10b3A6IDYwcHg7XG5cdFx0fVxuXG5cdFx0LmZlYXR1cmUtYmxvY2sge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0cGFkZGluZy1ib3R0b206IDM1cHg7XG5cdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblxuXHRcdFx0Ji5maXJzdCB7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cdFx0XHRcdGNsZWFyOiBib3RoO1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ji5sYXN0IHtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdFx0bWF4LXdpZHRoOiA0NnB4O1xuXHRcdFx0fVxuXG5cdFx0XHRoNSB7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiA2OHB4XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiA2OHB4XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmJ1dHRvbi13cmFwIHtcblx0XHRcdG1hcmdpbi10b3A6IDI1cHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXHR9XG5cblx0LnVwZ3JhZGUtY3RhIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGNvbG9yOiAjZmZmO1xuXG5cdFx0aDIge1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRtYXJnaW46IDAgMCAzMHB4IDA7XG5cdFx0fVxuXG5cdFx0dWwge1xuXHRcdFx0ZGlzcGxheTogLW1zLWZsZXg7XG5cdFx0XHRkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG5cdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0LXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7XG5cdFx0XHRmbGV4LXdyYXA6IHdyYXA7XG5cdFx0XHRmb250LXNpemU6IDE1cHg7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0XHRtYXJnaW46IDAgMCA4cHggMDtcblx0XHRcdFx0cGFkZGluZzogMDtcblxuXHRcdFx0XHQuZGFzaGljb25zIHtcblx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogNXB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmxlZnQge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNjYuNjY2NjY2JTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDA7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnJpZ2h0IHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHRcdHdpZHRoOiAzMy4zMzMzMzMlO1xuXHRcdFx0cGFkZGluZzogMjBweCAwIDAgMjBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRoMiB7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRcdHNwYW4ge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzU1NTtcblx0XHRcdFx0XHRwYWRkaW5nOiAwIDE1cHggMTJweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQucHJpY2Uge1xuXHRcdFx0XHRwYWRkaW5nOiAyNnB4IDA7XG5cblx0XHRcdFx0LmFtb3VudCB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiA0OHB4O1xuXHRcdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuXHRcdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6ICckJztcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogLThweDtcblx0XHRcdFx0XHRcdGxlZnQ6IC0xNnB4O1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC50ZXJtIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cblx0fVxuXG5cdC50ZXN0aW1vbmlhbHMge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItdG9wOiAwO1xuXHRcdHBhZGRpbmc6IDIwcHggMDtcblxuXHRcdC50ZXN0aW1vbmlhbC1ibG9jayB7XG5cdFx0XHRtYXJnaW46IDUwcHggMCAwIDA7O1xuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMHB4O1xuXHRcdFx0XHRib3gtc2hhZG93OiAwIDAgMThweCByZ2JhKDAsMCwwLC4yKTtcblxuXHRcdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0XHR3aWR0aDogNjVweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwIHtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRtYXJnaW46IDAgMCAxMnB4IDE0MHB4O1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAxMDBweDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmZvb3RlciB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcblx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdFx0Ym9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XG5cdH1cblxuXHQvLyBDaGFuZ2VzIGZvciBwYWlkIHZlcnNpb24uXG5cdCYucHJvIHtcblxuXHRcdC5mZWF0dXJlcyB7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHR9XG5cblx0XHQudXBncmFkZSxcblx0XHQuZm9vdGVyIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnRlc3RpbW9uaWFscyB7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdH1cblx0fVxufVxuXG4uZGFzaGJvYXJkX3BhZ2Vfd3Bmb3Jtcy1nZXR0aW5nLXN0YXJ0ZWQge1xuXG5cdC52aWRlby1jb250YWluZXIge1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdH1cblxuXHQvLyBIaWRlIGFkbWluIGZvb3Rlci5cblx0I3dwZm9vdGVyLFxuXHRkaXYubm90aWNlIHtcblx0XHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cdH1cbn1cbiIsIi8vIEFkZG9ucyBMaXN0IC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1hZGRvbnNcbiN3cGZvcm1zLWFkbWluLWFkZG9ucyB7XG5cblx0Kixcblx0Kjo6YmVmb3JlLFxuXHQqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0LmFkZG9ucy1jb250YWluZXIge1xuXHRcdG1hcmdpbi1sZWZ0OiAtMjBweDtcblx0XHRtYXJnaW4tcmlnaHQ6IC0yMHB4O1xuXHR9XG5cblx0LnVubG9jay1tc2cge1xuXHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRtYXJnaW4tdG9wOiAtMjBweDtcblx0XHRjbGVhcjogYm90aDtcblx0fVxuXG5cdCN3cGZvcm1zLWFkbWluLWFkZG9ucy1zZWFyY2gge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRjb2xvcjogIzMzMztcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdHBhZGRpbmc6IDdweCAxMnB4O1xuXHRcdG1hcmdpbjogLTNweCAxMHB4IDAgMDtcblx0XHR3aWR0aDogMjAwcHg7XG5cdFx0bWluLWhlaWdodDogMzVweDtcblx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHQmOmZvY3VzIHtcblx0XHRcdGJvcmRlci1jb2xvcjogI2JiYjtcblx0XHR9XG5cdH1cblxuXHQuYWRkb24tY29udGFpbmVyIHtcblx0XHRwYWRkaW5nOiAwIDIwcHg7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0d2lkdGg6IDMzLjMzMzMzMyU7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjwxMjUwcHhcIikge1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHR9XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHR9XG5cdH1cblxuXHRoNCB7XG5cdFx0Zm9udC1zaXplOiAxN3B4O1xuXHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdH1cblxuXHQuYWRkb24taXRlbSB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRtYXJnaW46IDAgMCA0MHB4IDA7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdG1hcmdpbjogMCAwXG5cdFx0fVxuXG5cdFx0aW1nIHtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdG1heC13aWR0aDogNzVweDtcblx0XHR9XG5cblx0XHRoNSB7XG5cdFx0XHRtYXJnaW46IDAgMCAxMHB4IDEwMHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwIDAgMCAxMDBweDtcblx0XHR9XG5cblx0XHQuZGV0YWlscyB7XG5cdFx0XHRwYWRkaW5nOiAzMHB4IDIwcHg7XG5cblx0XHR9XG5cblx0XHQuYWN0aW9ucyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuXHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHQubXNnIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0ei1pbmRleDogOTk7XG5cdFx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0XHRcdGRpc3BsYXk6IC13ZWJraXQtYm94O1xuXHRcdFx0XHRkaXNwbGF5OiAtbW96LWJveDtcblx0XHRcdFx0ZGlzcGxheTogLW1zLWZsZXhib3g7XG5cdFx0XHRcdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0LXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHQtbXMtYWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cblx0XHRcdFx0Ji5zdWNjZXNzIHtcblx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5lcnJvciB7XG5cdFx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5zdGF0dXMge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXG5cdFx0XHQuc3RhdHVzLWluYWN0aXZlIHtcblx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdH1cblxuXHRcdFx0LnN0YXR1cy1kb3dubG9hZCB7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0fVxuXG5cdFx0XHQuc3RhdHVzLWFjdGl2ZSB7XG5cdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnVwZ3JhZGUtYnV0dG9uIHtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblxuXHRcdFx0YSB7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHdpZHRoOiAxNDBweDtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5hY3Rpb24tYnV0dG9uIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblxuXHRcdFx0YnV0dG9uIHtcblx0XHRcdFx0YmFja2dyb3VuZDogbm9uZTtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHdpZHRoOiAxNDBweDtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXG5cdFx0XHRcdCY6aG92ZXIsXG5cdFx0XHRcdCYubG9hZGluZyB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2U5ZTllOTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cblx0XHRcdFx0XHQmLmZhLXNwaW5uZXIge1xuXHRcdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuc3RhdHVzLWFjdGl2ZSB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICRncmVlbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLnN0YXR1cy1pbmFjdGl2ZSB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLnN0YXR1cy1kb3dubG9hZCB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5kaXNhYmxlZCB7XG5cdFx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5sb2FkaW5nIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFib3V0IFdQRm9ybXMgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWFib3V0XG5cbiRwYWRkaW5nLWRlZmF1bHQ6IDMwcHg7XG4kYm9yZGVyOiAxcHggc29saWQgI0RERERERDtcblxuLy8gQGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG4vLyBcdHdpZHRoOiA1MCU7XG4vLyB9XG5cbi8qXG4neHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbiovXG5cbiN3cGZvcm1zLWFkbWluLWFib3V0IHtcblxuXHQqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uIHtcblx0XHRtYXJnaW46IDAgMjBweCAyMHB4O1xuXHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRib3JkZXI6ICRib3JkZXI7XG5cdFx0bGluZS1oZWlnaHQ6IDI7XG5cblx0XHRoMSwgaDIsIGgzLCBoNCwgaDUge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdHBhZGRpbmctdG9wOiAwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNjtcblx0XHR9XG5cblx0XHRoMiB7XG5cdFx0XHRmb250LXNpemU6IDI0cHg7XG5cdFx0fVxuXG5cdFx0aDMge1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHRcdGNvbG9yOiAjMjMyODJDO1xuXHRcdH1cblxuXHRcdHVsLCBwIHtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cblx0XHRcdCYuYmlnZ2Vye1xuXHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHR9XG5cdFx0XHQmLnNtYWxsZXIge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHR9XG5cblx0XHRcdCY6bGFzdC1jaGlsZCB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aHIge1xuXHRcdFx0bWFyZ2luOiAkcGFkZGluZy1kZWZhdWx0IDA7XG5cdFx0fVxuXG5cdFx0ZmlndXJlIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHR9XG5cblx0XHRcdGZpZ2NhcHRpb24ge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdGNvbG9yOiAjODg4ODg4O1xuXHRcdFx0XHRtYXJnaW4tdG9wOiA1cHg7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IGluaXRpYWw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTQwIHtcblx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdC8yO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi02MCB7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1kZWZhdWx0LzI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bC5saXN0LXBsYWluIHtcblx0XHRcdG1hcmdpbi10b3A6IDA7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwubGlzdC1mZWF0dXJlcyB7XG5cdFx0XHRsaSAuZmEge1xuXHRcdFx0XHRjb2xvcjogIzJhOWIzOTtcblx0XHRcdFx0bWFyZ2luOiAwIDhweCAwIDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmZhLXN0YXIge2NvbG9yOiBnb2xkfVxuXG5cdFx0Lm5vLW1hcmdpbiB7bWFyZ2luOiAwICFpbXBvcnRhbnR9XG5cdFx0Lm5vLXBhZGRpbmcge3BhZGRpbmc6IDAgIWltcG9ydGFudH1cblx0XHQuY2VudGVyZWQge3RleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1maXJzdC1mb3JtIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tZmlyc3QtZm9ybS10ZXh0IHtcblx0XHRcdGZsZXg6IDE7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1kZWZhdWx0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxleDogbm9uZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWZpcnN0LWZvcm0tdmlkZW8ge1xuXHRcdFx0aWZyYW1lIHtcblx0XHRcdFx0Ym9yZGVyOiAkYm9yZGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvIHtcblx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLW1haW4sXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLWV4dHJhIHtcblx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLWV4dHJhIHtcblxuXHRcdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTUwIHtcblxuXHRcdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1tYWluIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNGQUZBRkE7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuXG5cdFx0XHQmLm5vLWJvcmRlciB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoMy5jYWxsLXRvLWFjdGlvbiB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAtMTBweDtcblx0XHR9XG5cblx0XHRzcGFuLnByaWNlLTIwLW9mZiB7XG5cdFx0XHRjb2xvcjogIzZBQjI1NTtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXNxdWFzaGVkIHtcblx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXG5cdFx0Jjpub3QoOmxhc3Qtb2YtdHlwZSkge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXBvc3Qge1xuXG5cdFx0aDIge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogLTEwcHg7XG5cdFx0fVxuXG5cdFx0aDMge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMTVweDtcblx0XHR9XG5cblx0XHRwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi0yMCB7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuXHRcdFx0d2lkdGg6IGF1dG87XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdHdpZHRoOiAyNzBweDtcblx0XHRcdH1cblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAyMCU7XG5cdFx0XHRcdGltZyB7XG5cdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTgwIHtcblx0XHRcdHBhZGRpbmctbGVmdDogMjBweDtcblx0XHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4IC0gMjcwcHgpO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDgwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXBvc3QtbGluayB7XG5cdFx0XHRwYWRkaW5nOiAxMHB4ICRwYWRkaW5nLWRlZmF1bHQvMjtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNERjc3Mzk7XG5cdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdG1hcmdpbi10b3A6IDE1cHg7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjQjg1QTFCO1xuXHRcdFx0fVxuXG5cdFx0XHQuZmEge1xuXHRcdFx0XHRjb2xvcjogI0VEQkE5RTtcblx0XHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDhweDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXRhYmxlIHtcblxuXHRcdHRhYmxlIHtcblx0XHRcdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cblx0XHRcdHRyIHtcblx0XHRcdFx0dGQge1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206ICRib3JkZXI7XG5cdFx0XHRcdFx0Ym9yZGVyLXJpZ2h0OiAkYm9yZGVyO1xuXHRcdFx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblxuXHRcdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRcdGJvcmRlci1yaWdodDogMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmOmxhc3QtY2hpbGQgdGQge1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206IG5vbmU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdFx0XHRcdGJhY2tncm91bmQtc2l6ZTogMTVweCBhdXRvO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDZweDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRcdCYuZmVhdHVyZXMtZnVsbCB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvYWJvdXQvaWNvbi1mdWxsLnN2Zyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ji5mZWF0dXJlcy1ub25lIHtcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9hYm91dC9pY29uLW5vbmUuc3ZnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQmLmZlYXR1cmVzLXBhcnRpYWwge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtM3B4IDA7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1zaXplOiAyM3B4IGF1dG87XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9hYm91dC9pY29uLXBhcnRpYWwuc3ZnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1tYWluIHtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRoMyB7XG5cdFx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQgJHBhZGRpbmctZGVmYXVsdCAkcGFkZGluZy1kZWZhdWx0ICRwYWRkaW5nLWRlZmF1bHQqMjtcblx0XHRcdH1cblx0XHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi0zMzpmaXJzdC1jaGlsZCBoMyB7XG5cdFx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtYWRtaW4tYWRkb25zIHtcblx0XHRwYWRkaW5nOiAwICRwYWRkaW5nLWRlZmF1bHQ7XG5cblx0XHQuYWRkb24tY29udGFpbmVyIHtcblx0XHRcdHBhZGRpbmc6IDAgMTBweDtcblx0XHR9XG5cblx0XHQuYWRkb24taXRlbSB7XG5cblx0XHRcdC5kZXRhaWxzIHtcblx0XHRcdFx0cGFkZGluZzogMjBweDtcblx0XHRcdH1cblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0cGFkZGluZzogMTBweDtcblxuXHRcdFx0XHQmW3NyYyo9XCItbWlcIl0ge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDEzcHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmFjdGlvbi1idXR0b24gLmJ1dHRvbiB7XG5cdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAyNnB4O1xuXHRcdFx0XHRoZWlnaHQ6IDI4cHg7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0cGFkZGluZzogMCAxMHB4IDFweDtcblx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcblx0XHRcdFx0YmFja2dyb3VuZDogI2Y3ZjdmNztcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAxcHggMCAjY2NjY2NjO1xuXHRcdFx0XHRmb250LXdlaWdodDogbm9ybWFsO1xuXG5cdFx0XHRcdCY6aG92ZXIsICY6Zm9jdXMgIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuXHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdFx0XHRjb2xvcjogIzIzMjgyZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuYnV0dG9uLXByaW1hcnkge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICMwMDg1YmE7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjMDA3M2FhICMwMDY3OTkgIzAwNjc5OTtcblx0XHRcdFx0XHRib3gtc2hhZG93OiAwIDFweCAwICMwMDY3OTk7XG5cdFx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdFx0dGV4dC1zaGFkb3c6IDAgLTFweCAxcHggIzAwNjc5OSwgMXB4IDAgMXB4ICMwMDY3OTksIDAgMXB4IDFweCAjMDA2Nzk5LCAtMXB4IDAgMXB4ICMwMDY3OTk7XG5cblx0XHRcdFx0XHQmOmhvdmVyLCAmOmZvY3VzIHtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICMwMDhlYzI7XG5cdFx0XHRcdFx0XHRib3JkZXItY29sb3I6ICMwMDY3OTk7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQuZmEtc3Bpbm5lciB7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmJ1dHRvbi1zZWNvbmRhcnkge1xuXHRcdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRcdGJvcmRlci1jb2xvcjogI2NjY2NjYztcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xuXHRcdFx0XHRcdGJveC1zaGFkb3c6IDAgMXB4IDAgI2NjY2NjYztcblxuXHRcdFx0XHRcdCY6aG92ZXIsICY6Zm9jdXMgIHtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmYWZhZmE7XG5cdFx0XHRcdFx0XHRib3JkZXItY29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzIzMjgyZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmRpc2FibGVkIHtcblx0XHRcdFx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsIi8vIFNldHRpbmdzIC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1zZXR0aW5nc1xuLy8gVG9vbHMgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLXRvb2xzXG4ud3Bmb3Jtcy1hZG1pbi1zZXR0aW5ncyB7XG5cblx0Kixcblx0Kjo6YmVmb3JlLFxuXHQqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0Ly8gU2V0dGluZyByb3dzLCBlZyBmaWVsZCByb3cuXG5cdC53cGZvcm1zLXNldHRpbmctcm93IHtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRwYWRkaW5nOiAzMHB4IDA7XG5cdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjM7XG5cblx0XHQmOmZpcnN0LW9mLXR5cGUge1xuXHRcdFx0cGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjx0YWJsZXRcIikge1xuXHRcdFx0cGFkZGluZzogMjBweCAwO1xuXHRcdH1cblxuXHRcdC8vIFNlY3Rpb24gaGVhZGluZy5cblx0XHQmLnNlY3Rpb24taGVhZGluZyB7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDA7XG5cblx0XHRcdCYubm8tZGVzYyB7XG5cdFx0XHRcdGg0IHtcblx0XHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVG9vbHMgZnVsbCB3aWR0aCBmaWVsZHMuXG5cdFx0Ji50b29scyB7XG5cblx0XHRcdHAsXG5cdFx0XHRwOmZpcnN0LW9mLXR5cGV7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDE2cHggMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDaGVja2JveCBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctY2hlY2tib3gge1xuXG5cdFx0XHRpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXJnaW46IDFweCAwIDAgMDtcblx0XHRcdH1cblxuXHRcdFx0LmRlc2Mge1xuXHRcdFx0XHRtYXJnaW46IDAgMCAwIDMwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTGljZW5zZSBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctbGljZW5zZSB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXHRcdFx0fVxuXG5cdFx0XHRwLnR5cGUge1xuXHRcdFx0XHRtYXJnaW4tdG9wOiAxMnB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRleHQvbnVtYmVyIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy10ZXh0LFxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1udW1iZXIge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWxhYmVsIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDhweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZWxlY3Qgc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LXNlbGVjdCB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJhZGlvIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1yYWRpbyB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXG5cdFx0XHRcdGlucHV0W3R5cGU9cmFkaW9dIHtcblx0XHRcdFx0XHRtYXJnaW46IC0zcHggMTBweCAwIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYWJlbCB7XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAzMHB4O1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gRW1haWwgVGVtcGxhdGUgc2V0dGluZyBmaWVsZC5cblx0XHQmI3dwZm9ybXMtc2V0dGluZy1yb3ctZW1haWwtdGVtcGxhdGUge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblxuXHRcdFx0XHRsYWJlbDpiZWZvcmUge1xuXHRcdFx0XHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdHdpZHRoOiAxNTVweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDE4MHB4O1xuXHRcdFx0XHRcdG1hcmdpbjogMCAwIDEwcHggMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5vcHRpb24tZGVmYXVsdDpiZWZvcmUge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvc2V0dGluZ3MtZW1haWwtaHRtbC5wbmcpIGNlbnRlciBjZW50ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQub3B0aW9uLW5vbmU6YmVmb3JlIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL3NldHRpbmdzLWVtYWlsLXBsYWludGV4dC5wbmcpIGNlbnRlciBjZW50ZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSYWRpbyBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctaW1hZ2Uge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblxuXHRcdFx0XHRpbWcge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbjogMCAwIDIwcHggMDtcblx0XHRcdFx0XHRtYXgtd2lkdGg6IDQwMHB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29sb3IgcGlja2VyIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1jb2xvciB7XG5cblx0XHRcdC53cGZvcm1zLWNvbG9yLXBpY2tlciB7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogNDBweDtcblx0XHRcdH1cblxuXHRcdFx0Lm1pbmljb2xvcnMtaW5wdXQtc3dhdGNoIHtcblx0XHRcdFx0dG9wOiA3cHg7XG5cdFx0XHRcdGxlZnQ6IDdweDtcblx0XHRcdFx0aGVpZ2h0OiAyMXB4O1xuXHRcdFx0XHR3aWR0aDogMjFweDtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYWwgZWxlbWVudHMuXG5cdFx0aDQge1xuXHRcdFx0Zm9udC1zaXplOiAyMHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdG1hcmdpbjogMCAwIDZweCAwO1xuXHRcdH1cblxuXHRcdGgzIHtcblx0XHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW46IDEycHggMCAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuMztcblxuXHRcdFx0JjpmaXJzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luOiA4cHggMCAwO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmRlc2Mge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmRpc2NvdW50LW5vdGUge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXG5cdFx0XHRcdHN0cm9uZyB7XG5cdFx0XHRcdFx0Y29sb3I6IGdyZWVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRm9ybSBlbGVtZW50cy5cblx0XHRpbnB1dFt0eXBlPXRleHRdLFxuXHRcdGlucHV0W3R5cGU9bnVtYmVyXSxcblx0XHRpbnB1dFt0eXBlPXBhc3N3b3JkXSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGRlc2t0b3BcIikge1xuXHRcdFx0XHR3aWR0aDogMzAwcHg7XG5cdFx0XHR9XG5cblx0XHRcdCY6Zm9jdXMge1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICNiYmI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aW5wdXRbdHlwZT1udW1iZXJdIHtcblx0XHRcdHdpZHRoOiAxMDBweDtcblx0XHR9XG5cblx0XHR0ZXh0YXJlYSB7XG5cblx0XHR9XG5cblx0XHRidXR0b24ge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAxMHB4O1xuXHRcdH1cblxuXHRcdC5jaG9pY2VzanMtc2VsZWN0LXdyYXAge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXgtd2lkdGg6IDQwMHB4O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxkZXNrdG9wXCIpIHtcblx0XHRcdFx0d2lkdGg6IDMwMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5wcm9ncmVzcy1iYXIge1xuXHRcdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRvcmFuZ2U7XG5cdFx0XHRoZWlnaHQ6IDMwcHg7XG5cdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHggMDtcblxuXHRcdFx0Ji5jb21wbGV0ZSB7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRncmVlbjtcblxuXHRcdFx0XHQuYmFyIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkZ3JlZW47XG5cblx0XHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IG5vbmU7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQuYmFyIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICRvcmFuZ2U7XG5cdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZS1pbi1vdXQ7XG5cdFx0XHRcdC1tb3otdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblx0XHRcdFx0LW8tdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblx0XHRcdFx0dHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblxuXHRcdFx0XHRALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3Mge1xuXHRcdFx0XHRcdHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNjBweCAwOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRALW1vei1rZXlmcmFtZXMgcHJvZ3Jlc3Mge1xuXHRcdFx0XHQgIHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNjBweCAwOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRAa2V5ZnJhbWVzIHByb2dyZXNzIHtcblx0XHRcdFx0ICB0byB7IGJhY2tncm91bmQtcG9zaXRpb246IDYwcHggMDsgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjphZnRlciB7XG5cdFx0XHRcdFx0Y29udGVudDogJyc7XG5cdFx0XHRcdFx0ZGlzcGxheTpibG9jaztcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0dG9wOiAwO1xuXHRcdFx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcyAxcyBsaW5lYXIgaW5maW5pdGU7XG5cdFx0XHRcdFx0LW1vei1hbmltYXRpb246IHByb2dyZXNzIDFzIGxpbmVhciBpbmZpbml0ZTtcblx0XHRcdFx0XHRhbmltYXRpb246IHByb2dyZXNzIDFzIGxpbmVhciBpbmZpbml0ZTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1zaXplOiA2MHB4IDYwcHg7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSb3cgbGFiZWwgKGxlZnQpLlxuXHQud3Bmb3Jtcy1zZXR0aW5nLWxhYmVsIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRmbG9hdDogbGVmdDtcblx0XHR3aWR0aDogMjAwcHg7XG5cdFx0cGFkZGluZzogMDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPHRhYmxldFwiKSB7XG5cdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0fVxuXG5cdFx0bGFiZWwge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJvdyBmaWVsZCAocmlnaHQpLlxuXHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW46IDAgMCAwIDIwMHB4O1xuXHRcdG1heC13aWR0aDogODAwcHg7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjx0YWJsZXRcIikge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblx0fVxuXG5cdHAuc3VibWl0IHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMjVweCAwO1xuXHR9XG5cblx0Ly8gR2VuZXJpYyBpbmZvL2NvZGUgaW5mb3JtYXRpb24uXG5cdC5pbmZvLWFyZWEsXG5cdC5wcmUtZXJyb3Ige1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdG1heC13aWR0aDogMTAwMHB4O1xuXHRcdGhlaWdodDogNDUwcHg7XG5cdFx0Zm9udC1mYW1pbHk6IE1lbmxvLE1vbmFjbyxtb25vc3BhY2U7XG5cdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdHdoaXRlLXNwYWNlOiBwcmU7XG5cdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0cGFkZGluZzogMjBweDtcblx0fVxuXG5cdC5wcmUtZXJyb3Ige1xuXHRcdGhlaWdodDogYXV0bztcblx0XHRtYXgtaGVpZ2h0OiAyNTBweDtcblx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXHR9XG5cblx0Ly8gQ2hlY2tib3ggbXVsdGktc2VsZWN0IGNvbHVtbnMuXG5cdC5jaGVja2JveC1tdWx0aXNlbGVjdC1jb2x1bW5zIHtcblx0XHRtYXgtd2lkdGg6IDYwMHB4O1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdCY6YWZ0ZXIge1xuXHRcdFx0Y29udGVudDogXCIuXCI7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGhlaWdodDogMDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAwO1xuXHRcdFx0Zm9udC1zaXplOiAwO1xuXHRcdFx0Y2xlYXI6IGJvdGg7XG5cdFx0XHRtaW4taGVpZ2h0OiAwO1xuXHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdH1cblxuXHRcdCY6YmVmb3JlIHtcblx0XHRcdGNvbnRlbnQ6IFwiXFxmMGVjXCI7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDIwcHgvMSBGb250QXdlc29tZTtcblx0XHRcdHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuXHRcdFx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdFx0XHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAxMzBweDtcblx0XHRcdGxlZnQ6IDUwJTtcblx0XHRcdG1hcmdpbjogMCAwIDAgLTEwcHg7XG5cdFx0fVxuXG5cdFx0LmhlYWRlciB7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMCAwIDVweCAwO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdH1cblxuXHRcdC5maXJzdC1jb2x1bW4sXG5cdFx0LnNlY29uZC1jb2x1bW4ge1xuXHRcdFx0d2lkdGg6IDQ1JTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdH1cblxuXHRcdC5maXJzdC1jb2x1bW4ge1xuXG5cdFx0fVxuXG5cdFx0LnNlY29uZC1jb2x1bW4ge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHR1bCB7XG5cdFx0XHRcdGxpIHtcblx0XHRcdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRoZWlnaHQ6IDI1MHB4O1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdG92ZXJmbG93LXk6IGF1dG87XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4ICNlZWUgc29saWQ7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdFx0XHRcdGxhYmVsIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAzMnB4O1xuXHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0XHRjb250ZW50OiBcIlxcZjBjOFwiO1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHRcdFx0XHRmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNnB4LzEgRm9udEF3ZXNvbWU7XG5cdFx0XHRcdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdFx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0XHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogMTJweDtcblx0XHRcdFx0XHRcdGxlZnQ6IDEwcHg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5jaGVja2VkIHtcblx0XHRcdFx0XHRcdG9wYWNpdHk6IDAuNjtcblxuXHRcdFx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBcIlxcZjE0YVwiO1xuXHRcdFx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlucHV0IHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmFsbCB7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdG1hcmdpbjogMTBweCAwIDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gT3RoZXIgSW1wb3J0ZXJzLiAoVG9vbHMpXG5cdCN3cGZvcm1zLWltcG9ydGVyLWFuYWx5emUge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHQucHJvY2Vzcy1jb3VudCxcblx0XHRwIHtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHR9XG5cblx0XHQudXBncmFkZSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdFx0XHRoNSB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luOiAzMHB4IDAgMjBweCAwO1xuXHRcdFx0fVxuXG5cdFx0XHRociB7XG5cdFx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNGU0ZTQ7XG5cdFx0XHRcdG1hcmdpbjogNDBweCAwO1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1idG4ge1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0XHR9XG5cblx0XHRcdHVsIHtcblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcblx0XHRcdFx0XHRtYXJnaW4tbGVmdDogMTRweDtcblxuXHRcdFx0XHRcdCYuZm9ybSB7XG5cdFx0XHRcdFx0XHRsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cdFx0XHRcdFx0XHRtYXJnaW4tbGVmdDogMDtcblx0XHRcdFx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtaW1wb3J0ZXItcHJvY2VzcyB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblxuXHRcdC5wcm9jZXNzLWNvdW50LFxuXHRcdC5wcm9jZXNzLWNvbXBsZXRlZCB7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0fVxuXG5cdFx0LnByb2Nlc3MtY29tcGxldGVkIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnN0YXR1cyB7XG5cdFx0XHRtYXJnaW46IDIwcHggMCAzMHB4O1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRtYXgtaGVpZ2h0OiA4MDBweDtcblx0XHRcdG92ZXJmbG93LXk6IHNjcm9sbDtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHRcdC5pdGVtLXdyYXAge1xuXG5cdFx0XHR9XG5cblx0XHRcdC5pdGVtIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRtYXJnaW46IDEycHggMCAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dWwge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRtYXJnaW46IDEycHggMCAwIDE2cHg7XG5cblx0XHRcdFx0XHRsaSB7XG5cdFx0XHRcdFx0XHRsaXN0LXN0eWxlOiBkaXNjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5zdGF0dXMtaWNvbiB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblxuXHRcdFx0XHRcdCYuZmEtaW5mby1jaXJjbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICMwMGEwZDJcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmZhLWNoZWNrIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDZiNDUwXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5mYS1leGNsYW1hdGlvbi10cmlhbmdsZSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmYjkwMFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuZmEtdGltZXMsXG5cdFx0XHRcdFx0Ji5mYS1leGNsYW1hdGlvbi1jaXJjbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQubmFtZSB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmFjdGlvbnMge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHRcdFx0XHQuc2VwIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZGRkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIExpdGUgdXBncmFkZS5cblx0LnNldHRpbmdzLWxpdGUtY3Rhe1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2RhZGFkYTtcblx0XHRwYWRkaW5nOiAyNXB4IDIwcHg7XG5cdFx0bWFyZ2luOiAxMHB4IDAgMCAwO1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdC5kaXNtaXNzIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMTBweDtcblx0XHRcdHJpZ2h0OiAxMHB4O1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0fVxuXG5cdFx0aDUge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0fVxuXG5cdFx0aDYge1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHg7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRjb2xvcjogIzU1NTtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHg7XG5cblx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRhIHtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0Y29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRmbG9hdDogbGVmdDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0fVxuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0cGFkZGluZzogMCAwIDJweCAxNnB4O1xuXHRcdFx0XHRjb2xvcjogIzU1NTtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdGNvbnRlbnQ6ICcrJztcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0dG9wOiAtMXB4O1xuXHRcdFx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQubGlzdCB7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cdFx0XHRvdmVyZmxvdzogYXV0bztcblx0XHRcdG1heC13aWR0aDogOTAwcHg7XG5cdFx0fVxuXG5cdFx0LmdyZWVuIHtcblx0XHRcdGNvbG9yOiAjMjE4OTAwO1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHR9XG5cblx0XHQuZmEtc3RhciB7XG5cdFx0XHRjb2xvcjogI2ZmOTgyZDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEludGVncmF0aW9ucyB0YWIgY29udGVudC5cbi8vIExlZ2FjeSBDU1MgYW5kIHNob3VsZCBiZSBjbGVhbmVkIHVwIHdoZW4gdGltZSBwZXJtaXRzLlxuI3dwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXJzIHtcblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlciB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZzogMzBweCAwO1xuXG5cdFx0Ji5mb2N1cy1vdXQge1xuXHRcdFx0b3BhY2l0eTogMC40O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWhlYWRlciB7XG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdG1heC13aWR0aDogMTAwMHB4O1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItbG9nbyB7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0LmZhIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogNTAlO1xuXHRcdFx0bWFyZ2luOiAtOXB4IDAgMCAwO1xuXHRcdFx0bGVmdDogMTBweDtcblx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdH1cblxuXHRcdGltZyB7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdG1heC13aWR0aDogOTBweDtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0bWFyZ2luOiAwIDAgMCA0MHB4O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWluZm8ge1xuXHRcdG1hcmdpbjogMCAwIDAgMTYwcHg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmc6IDIwcHggMCAwO1xuXG5cdFx0aDMge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTBweCAwO1xuXHRcdFx0Zm9udC1zaXplOiAyMHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHR9XG5cblx0XHQuY29ubmVjdGVkLWluZGljYXRvciB7XG5cdFx0XHRjb2xvcjogIzgzYzExZjtcblx0XHRcdHdpZHRoOiAxMzVweDtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICM4M2MxMWY7XG5cdFx0XHRib3JkZXItcmFkaXVzOiA0cHg7XG5cdFx0XHRwYWRkaW5nOiA4cHggMTRweDtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMjhweDtcblx0XHRcdHJpZ2h0OiAwO1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cdH1cblxuXHQuY29ubmVjdGVkIC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWluZm8gLmNvbm5lY3RlZC1pbmRpY2F0b3Ige1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMge1xuXHRcdG1hcmdpbjogMCAwIDAgMTYwcHg7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRtYXgtd2lkdGg6IDg0MHB4O1xuXHR9XG5cblx0LmZvY3VzLWluIC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWxpc3QgdWwge1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0bWFyZ2luOiAwO1xuXG5cdFx0bGkge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDA7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdCY6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0fVxuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDE2cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c3Bhbi5sYWJlbCB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0fVxuXG5cdFx0c3Bhbi5kYXRlIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogMzUlO1xuXHRcdH1cblxuXHRcdHNwYW4ucmVtb3ZlIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHRcdHdpZHRoOiAxNSU7XG5cdFx0XHR0ZXh0LWFsaWduOiByaWdodFxuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWNvbm5lY3Qge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0cGFkZGluZzogMjBweDtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkbGlnaHRCbHVlO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICRibHVlO1xuXG5cdFx0aW5wdXRbdHlwZT10ZXh0XSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0cGFkZGluZzogN3B4IDEycHg7XG5cdFx0XHRtYXJnaW46IDVweCAwO1xuXHRcdFx0d2lkdGg6IDQwMHB4O1xuXHRcdFx0bWluLWhlaWdodDogMzVweDtcblxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogI2JiYjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuZm9jdXMtaW4gLndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCAge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCAuZmEge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0IHAsXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzIHAge1xuXHRcdG1hcmdpbjogMCAwIDE1cHggMDtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUdBQTs7aUNBRWlDO0FBcUJqQyxBQUFBLFFBQVEsQ0FBYztFQUNwQixRQUFRLEVBQUUsUUFBUTtFQUNsQixhQUFhLEVBakJLLElBQUk7RUFrQnRCLFNBQVMsRUFyQlksSUFBSTtDQWdDMUI7O0FBZEQsQUFJRSxRQUpNLEFBSUwsTUFBTSxDQUFDO0VBQUUsT0FBTyxFQUFFLElBQUk7Q0FBSTs7QUFKN0IsQUFLRSxRQUxNLEFBS0wsV0FBVyxDQUFDO0VBQUUsYUFBYSxFQUFFLENBQUM7Q0FBSTs7QUFMckMsQUFPQyxRQVBPLEFBTUwsWUFBWSxDQUNkLGVBQWUsRUFQaEIsUUFBUSxBQU1MLFlBQVksQ0FDRyxlQUFlLENBQTJCO0VBQ3pELGdCQUFnQixFQW5CUyxPQUFPO0VBb0JoQyxNQUFNLEVBQUUsV0FBVztFQUNuQixXQUFXLEVBQUUsSUFBSTtDQUNsQjs7QUFYRixBQVlDLFFBWk8sQUFNTCxZQUFZLENBTWQsY0FBYyxDQUFjO0VBQUUsTUFBTSxFQUFFLFdBQVc7Q0FBSTs7QUFJdEQsQUFBQSxRQUFRLENBQUEsQUFBQSxTQUFDLEVBQVcsWUFBWSxBQUF2QixFQUFzQztFQUM3QyxNQUFNLEVBQUUsT0FBTztDQXlEaEI7O0FBMURELEFBR0UsUUFITSxDQUFBLEFBQUEsU0FBQyxFQUFXLFlBQVksQUFBdkIsRUFHUCxlQUFlLENBQWM7RUFBRSxjQUFjLEVBQUUsS0FBSztDQUFJOztBQUgxRCxBQUlFLFFBSk0sQ0FBQSxBQUFBLFNBQUMsRUFBVyxZQUFZLEFBQXZCLEVBSVAsZUFBZSxDQUFjO0VBQzlCLE9BQU8sRUFBRSxLQUFLO0VBQ2QsS0FBSyxFQUFFLGVBQWU7RUFDdEIsT0FBTyxFQUFF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QyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFB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 */
|
2412 |
color: #666;
|
2413 |
}
|
2414 |
|
2415 |
+
#wpforms-entries-list .wpforms-dash-widget-chart-block {
|
2416 |
+
padding: 12px 12px 0 8px;
|
2417 |
+
background-color: #ffffff;
|
2418 |
+
border: 1px solid #e5e5e5;
|
2419 |
+
margin-top: 20px;
|
2420 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
2421 |
+
}
|
2422 |
+
|
2423 |
+
#wpforms-entries-list .wpforms-dash-widget-chart-block .wpforms-error-no-data-chart {
|
2424 |
+
border: none;
|
2425 |
+
}
|
2426 |
+
|
2427 |
+
#wpforms-entries-list #wpforms-dash-widget-chart-title {
|
2428 |
+
margin-left: -12px;
|
2429 |
+
font-size: 18px;
|
2430 |
+
}
|
2431 |
+
|
2432 |
+
#wpforms-entries-list .wpforms-dash-widget-block:first-child {
|
2433 |
+
margin-top: 0;
|
2434 |
+
}
|
2435 |
+
|
2436 |
+
#wpforms-entries-list .wpforms-dash-widget-reset-chart {
|
2437 |
+
color: #d83638;
|
2438 |
+
opacity: 1;
|
2439 |
+
vertical-align: text-bottom;
|
2440 |
+
margin: 0 0 -1px 0;
|
2441 |
+
}
|
2442 |
+
|
2443 |
+
#wpforms-entries-list .wpforms-dash-widget-reset-chart:hover {
|
2444 |
+
color: #ad2b2c;
|
2445 |
+
}
|
2446 |
+
|
2447 |
+
#wpforms-entries-list .wpforms-dash-widget-reset-chart .dashicons {
|
2448 |
+
font-size: 20px;
|
2449 |
+
height: 20px;
|
2450 |
+
width: 20px;
|
2451 |
+
}
|
2452 |
+
|
2453 |
+
#wpforms-entries-list #wpforms-dash-widget-timespan {
|
2454 |
+
margin: 5px -12px 0 0;
|
2455 |
+
}
|
2456 |
+
|
2457 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-block {
|
2458 |
+
overflow: visible;
|
2459 |
+
}
|
2460 |
+
|
2461 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table {
|
2462 |
+
border: 1px solid #e5e5e5;
|
2463 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
2464 |
+
}
|
2465 |
+
|
2466 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns td {
|
2467 |
+
padding: 12px 20px;
|
2468 |
+
border-bottom: 1px solid #e1e1e1;
|
2469 |
+
}
|
2470 |
+
|
2471 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tbody {
|
2472 |
+
border-top: 0;
|
2473 |
+
}
|
2474 |
+
|
2475 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr {
|
2476 |
+
border-bottom: 0;
|
2477 |
+
}
|
2478 |
+
|
2479 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child {
|
2480 |
+
border-top: 0;
|
2481 |
+
}
|
2482 |
+
|
2483 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child td {
|
2484 |
+
border-top: 0;
|
2485 |
+
}
|
2486 |
+
|
2487 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:nth-child(even) td {
|
2488 |
+
background-color: #f9f9f9;
|
2489 |
+
}
|
2490 |
+
|
2491 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table td {
|
2492 |
+
text-align: left;
|
2493 |
+
padding: 20px 20px;
|
2494 |
+
font-size: 14px;
|
2495 |
+
border: none;
|
2496 |
+
color: #555;
|
2497 |
+
background-color: #fff;
|
2498 |
+
}
|
2499 |
+
|
2500 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(2) {
|
2501 |
+
width: 180px;
|
2502 |
+
}
|
2503 |
+
|
2504 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(3) {
|
2505 |
+
width: 60px;
|
2506 |
+
text-align: center;
|
2507 |
+
}
|
2508 |
+
|
2509 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(4) {
|
2510 |
+
width: 90px;
|
2511 |
+
text-align: center;
|
2512 |
+
}
|
2513 |
+
|
2514 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(5) {
|
2515 |
+
width: 60px;
|
2516 |
+
text-align: center;
|
2517 |
+
padding-top: 0;
|
2518 |
+
padding-bottom: 0;
|
2519 |
+
}
|
2520 |
+
|
2521 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active td:first-child {
|
2522 |
+
border-left: 3px solid #0073aa;
|
2523 |
+
padding-left: 17px;
|
2524 |
+
}
|
2525 |
+
|
2526 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-single-chart-btn {
|
2527 |
+
display: none !important;
|
2528 |
+
}
|
2529 |
+
|
2530 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-reset-chart {
|
2531 |
+
display: inline-block !important;
|
2532 |
+
border: none;
|
2533 |
+
background: none;
|
2534 |
+
margin: 0;
|
2535 |
+
}
|
2536 |
+
|
2537 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns {
|
2538 |
+
background-color: #ffffff;
|
2539 |
+
border-bottom: 1px solid #ddd;
|
2540 |
+
}
|
2541 |
+
|
2542 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table a {
|
2543 |
+
text-decoration: none;
|
2544 |
+
}
|
2545 |
+
|
2546 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table a:hover {
|
2547 |
+
text-decoration: none;
|
2548 |
+
}
|
2549 |
+
|
2550 |
+
#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-title a {
|
2551 |
+
font-weight: 600;
|
2552 |
+
}
|
2553 |
+
|
2554 |
@media screen and (max-width: 782px) {
|
2555 |
.wpforms-admin-content {
|
2556 |
padding-left: 10px;
|
3687 |
border-radius: 2px;
|
3688 |
}
|
3689 |
|
3690 |
+
.wpforms-admin-settings .wpforms-setting-row h5 {
|
3691 |
+
font-size: 16px;
|
3692 |
+
font-weight: 600;
|
3693 |
+
margin: 0 0 20px 0;
|
3694 |
+
}
|
3695 |
+
|
3696 |
.wpforms-admin-settings .wpforms-setting-row h4 {
|
3697 |
font-size: 20px;
|
3698 |
font-weight: 700;
|
3730 |
}
|
3731 |
|
3732 |
.wpforms-admin-settings .wpforms-setting-row input[type=text],
|
3733 |
+
.wpforms-admin-settings .wpforms-setting-row input[type=password],
|
3734 |
.wpforms-admin-settings .wpforms-setting-row input[type=number],
|
3735 |
+
.wpforms-admin-settings .wpforms-setting-row select {
|
3736 |
background-color: #fff;
|
3737 |
border: 1px solid #ddd;
|
3738 |
border-radius: 3px;
|
3748 |
|
3749 |
@media (max-width: 959px) {
|
3750 |
.wpforms-admin-settings .wpforms-setting-row input[type=text],
|
3751 |
+
.wpforms-admin-settings .wpforms-setting-row input[type=password],
|
3752 |
.wpforms-admin-settings .wpforms-setting-row input[type=number],
|
3753 |
+
.wpforms-admin-settings .wpforms-setting-row select {
|
3754 |
width: 300px;
|
3755 |
}
|
3756 |
}
|
3757 |
|
3758 |
.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,
|
3759 |
+
.wpforms-admin-settings .wpforms-setting-row input[type=password]:focus,
|
3760 |
.wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,
|
3761 |
+
.wpforms-admin-settings .wpforms-setting-row select:focus {
|
3762 |
border-color: #bbb;
|
3763 |
}
|
3764 |
|
4065 |
font-weight: 700;
|
4066 |
}
|
4067 |
|
4068 |
+
.wpforms-admin-settings #wpforms-tools-entries-export h5 {
|
4069 |
+
clear: both;
|
4070 |
+
margin: 20px 0 10px 0;
|
4071 |
+
}
|
4072 |
+
|
4073 |
+
.wpforms-admin-settings #wpforms-tools-entries-export label {
|
4074 |
+
clear: both;
|
4075 |
+
float: left;
|
4076 |
+
margin: 3px 0 3px 0;
|
4077 |
+
}
|
4078 |
+
|
4079 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap {
|
4080 |
+
position: relative;
|
4081 |
+
}
|
4082 |
+
|
4083 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap .choices {
|
4084 |
+
margin-bottom: 0;
|
4085 |
+
}
|
4086 |
+
|
4087 |
+
.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-spinner {
|
4088 |
+
position: absolute;
|
4089 |
+
top: 6px;
|
4090 |
+
right: -30px;
|
4091 |
+
}
|
4092 |
+
|
4093 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-date-selector {
|
4094 |
+
width: 200px;
|
4095 |
+
cursor: pointer;
|
4096 |
+
}
|
4097 |
+
|
4098 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-field {
|
4099 |
+
width: 200px;
|
4100 |
+
}
|
4101 |
+
|
4102 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-comparison {
|
4103 |
+
width: 140px;
|
4104 |
+
}
|
4105 |
+
|
4106 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-term {
|
4107 |
+
width: 300px;
|
4108 |
+
}
|
4109 |
+
|
4110 |
+
.wpforms-admin-settings #wpforms-tools-entries-export section {
|
4111 |
+
margin-top: 20px;
|
4112 |
+
}
|
4113 |
+
|
4114 |
+
.wpforms-admin-settings #wpforms-tools-entries-export iframe {
|
4115 |
+
width: 0;
|
4116 |
+
height: 0;
|
4117 |
+
visibility: hidden;
|
4118 |
+
}
|
4119 |
+
|
4120 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-text {
|
4121 |
+
opacity: 1;
|
4122 |
+
transition: all .5s;
|
4123 |
+
}
|
4124 |
+
|
4125 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner {
|
4126 |
+
position: absolute;
|
4127 |
+
left: 50%;
|
4128 |
+
top: 50%;
|
4129 |
+
transform: translate(-50%, -50%);
|
4130 |
+
opacity: 0;
|
4131 |
+
transition: all .5s;
|
4132 |
+
}
|
4133 |
+
|
4134 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on {
|
4135 |
+
cursor: default;
|
4136 |
+
opacity: 0.75;
|
4137 |
+
position: relative;
|
4138 |
+
}
|
4139 |
+
|
4140 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-text {
|
4141 |
+
opacity: 0 !important;
|
4142 |
+
transition: all .5s;
|
4143 |
+
}
|
4144 |
+
|
4145 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-spinner {
|
4146 |
+
opacity: 1 !important;
|
4147 |
+
transition: all .5s;
|
4148 |
+
}
|
4149 |
+
|
4150 |
+
.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on:hover {
|
4151 |
+
background-color: #e27730;
|
4152 |
+
border-color: #e27730;
|
4153 |
+
}
|
4154 |
+
|
4155 |
+
.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg,
|
4156 |
+
.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg {
|
4157 |
+
background: #fff;
|
4158 |
+
border-left: 4px solid #22A0D0;
|
4159 |
+
line-height: 1.5em;
|
4160 |
+
margin: 20px 0 0 0;
|
4161 |
+
padding: 10px;
|
4162 |
+
}
|
4163 |
+
|
4164 |
+
.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg.wpforms-error,
|
4165 |
+
.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg.wpforms-error {
|
4166 |
+
border-color: #dc3232;
|
4167 |
+
}
|
4168 |
+
|
4169 |
.wpforms-admin-settings #wpforms-importer-process {
|
4170 |
display: none;
|
4171 |
}
|
4230 |
}
|
4231 |
|
4232 |
.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times, .wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle {
|
4233 |
+
color: #dc3232;
|
4234 |
}
|
4235 |
|
4236 |
.wpforms-admin-settings #wpforms-importer-process .status .item .name {
|
4492 |
font-size: 14px;
|
4493 |
}
|
4494 |
|
4495 |
+
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2Nzcy9hZG1pbi5jc3MiLCJzb3VyY2VzIjpbImFzc2V0cy9zY3NzL2FkbWluLnNjc3MiLCJhc3NldHMvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvX2luY2x1ZGUtbWVkaWEuc2NzcyIsImFzc2V0cy9zY3NzL3ZlbmRvci9wYXJ0aWFscy9fY2hvaWNlcy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX2J1dHRvbnMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19jb25maXJtLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fYWxlcnRzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZmxhZ3Muc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19oZWFkZXIuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL190aXRsZS10YWJzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZ2VuZXJhbC5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtZm9ybXMtb3ZlcnZpZXcuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWVudHJpZXMtc2luZ2xlLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1lbnRyaWVzLWxpc3Quc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXdlbGNvbWUuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWFkZG9ucy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtYWJvdXQuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXNldHRpbmdzLXRvb2xzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1zZXR0aW5ncy1pbnRlZ3JhdGlvbnMuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXUEZvcm1zIGFkbWluIHN0eWxlcy5cbi8vIFRoZXNlIHN0eWxlcyBhcmUgbG9hZGVkIG9uIGFsbCBXUEZvcm1zIHJlbGF0ZWQgYWRtaW4gcGFnZXMuXG5cbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvaW5jbHVkZS1tZWRpYSc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvY2hvaWNlcyc7XG5cbiRicmVha3BvaW50czogKFxuXHQneHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbik7XG5cbkBpbXBvcnQgJ2FkbWluL2J1dHRvbnMnO1xuQGltcG9ydCAnYWRtaW4vY29uZmlybSc7XG5AaW1wb3J0ICdhZG1pbi9hbGVydHMnO1xuQGltcG9ydCAnYWRtaW4vZmxhZ3MnO1xuQGltcG9ydCAnYWRtaW4vaGVhZGVyJztcbkBpbXBvcnQgJ2FkbWluL3RpdGxlLXRhYnMnO1xuQGltcG9ydCAnYWRtaW4vZ2VuZXJhbCc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLWZvcm1zLW92ZXJ2aWV3JztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtZW50cmllcy1zaW5nbGUnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1lbnRyaWVzLWxpc3QnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS13ZWxjb21lJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWRkb25zJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWJvdXQnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1zZXR0aW5ncy10b29scyc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLXNldHRpbmdzLWludGVncmF0aW9ucyc7XG4iLCIkb3JhbmdlOiAjZTI3NzMwO1xuJGRhcmtvcmFuZ2U6ICNiODVhMWI7XG4kZ3JlZW46ICMyYTliMzk7XG4kYmx1ZTogIzBlNmNhZDtcbiRsaWdodEJsdWU6ICNlYmYzZmI7XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vICAgICBfICAgICAgICAgICAgXyAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gX1xuLy8gICAgKF8pICAgICAgICAgIHwgfCAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChfKVxuLy8gICAgIF8gXyBfXyAgIF9fX3wgfF8gICBfICBfX3wgfCBfX18gICBfIF9fIF9fXyAgIF9fXyAgX198IHxfICBfXyBfXG4vLyAgICB8IHwgJ18gXFwgLyBfX3wgfCB8IHwgfC8gX2AgfC8gXyBcXCB8ICdfIGAgXyBcXCAvIF8gXFwvIF9gIHwgfC8gX2AgfFxuLy8gICAgfCB8IHwgfCB8IChfX3wgfCB8X3wgfCAoX3wgfCAgX18vIHwgfCB8IHwgfCB8ICBfXy8gKF98IHwgfCAoX3wgfFxuLy8gICAgfF98X3wgfF98XFxfX198X3xcXF9fLF98XFxfXyxffFxcX19ffCB8X3wgfF98IHxffFxcX19ffFxcX18sX3xffFxcX18sX3xcbi8vXG4vLyAgICAgIFNpbXBsZSwgZWxlZ2FudCBhbmQgbWFpbnRhaW5hYmxlIG1lZGlhIHF1ZXJpZXMgaW4gU2Fzc1xuLy8gICAgICAgICAgICAgICAgICAgICAgICB2MS40Ljlcbi8vXG4vLyAgICAgICAgICAgICAgICBodHRwOi8vaW5jbHVkZS1tZWRpYS5jb21cbi8vXG4vLyAgICAgICAgIEF1dGhvcnM6IEVkdWFyZG8gQm91Y2FzIChAZWR1YXJkb2JvdWNhcylcbi8vICAgICAgICAgICAgICAgICAgSHVnbyBHaXJhdWRlbCAoQGh1Z29naXJhdWRlbClcbi8vXG4vLyAgICAgIFRoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlXG5cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgbGlicmFyeSBwdWJsaWMgY29uZmlndXJhdGlvblxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIGdsb2JhbCBicmVha3BvaW50c1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgYnJlYWtwb2ludCB3aXRoIHRoZSBsYWJlbCBgcGhvbmVgXG4vLy8gICRicmVha3BvaW50czogKCdwaG9uZSc6IDMyMHB4KTtcbi8vL1xuJGJyZWFrcG9pbnRzOiAoXG4gICdwaG9uZSc6IDMyMHB4LFxuICAndGFibGV0JzogNzY4cHgsXG4gICdkZXNrdG9wJzogMTAyNHB4XG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIHN0YXRpYyBleHByZXNzaW9ucyBvciBtZWRpYSB0eXBlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgbWVkaWEgdHlwZSAoc2NyZWVuKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJzogJ3NjcmVlbicpO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzdGF0aWMgZXhwcmVzc2lvbiB3aXRoIGxvZ2ljYWwgZGlzanVuY3Rpb24gKE9SIG9wZXJhdG9yKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6IChcbi8vLyAgICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSdcbi8vLyAgKTtcbi8vL1xuJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4gICdzY3JlZW4nOiAnc2NyZWVuJyxcbiAgJ3ByaW50JzogJ3ByaW50JyxcbiAgJ2hhbmRoZWxkJzogJ2hhbmRoZWxkJyxcbiAgJ2xhbmRzY2FwZSc6ICcob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICAncG9ydHJhaXQnOiAnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknLFxuICAncmV0aW5hM3gnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMyksIChtaW4tcmVzb2x1dGlvbjogMzUwZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAzZHBweCknXG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIERlZmluZXMgYSBudW1iZXIgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIGVhY2ggdW5pdCB3aGVuIGRlY2xhcmluZyBicmVha3BvaW50cyB3aXRoIGV4Y2x1c2l2ZSBpbnRlcnZhbHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcGl4ZWxzIGlzIGRlZmluZWQgYXMgYDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4xMjhweCcpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMTI5cHgpIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIGVtcyBpcyBkZWZpbmVkIGFzIGAwLjAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MjBlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMjAuMDFlbSkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcmVtcyBpcyBkZWZpbmVkIGFzIGAwLjFgIGJ5IGRlZmF1bHQsIHRvIGJlIHVzZWQgd2l0aCBgZm9udC1zaXplOiA2Mi41JTtgXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+Mi4wcmVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyLjFyZW0pIHt9XG4vLy9cbiR1bml0LWludGVydmFsczogKFxuICAncHgnOiAxLFxuICAnZW0nOiAwLjAxLFxuICAncmVtJzogMC4xLFxuICAnJzogMFxuKSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gRGVmaW5lcyB3aGV0aGVyIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgYXZhaWxhYmxlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHNlcGFyYXRlIHN0eWxlc2hlZXRzXG4vLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtZWRpYSBxdWVyaWVzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIERpc2FibGVzIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4kaW0tbWVkaWEtc3VwcG9ydDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBicmVha3BvaW50IHRvIGVtdWxhdGUgd2hlbiBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGRpc2FibGVkLiBNZWRpYSBxdWVyaWVzIHRoYXQgc3RhcnQgYXQgb3Jcbi8vLyBpbnRlcmNlcHQgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFueSBvdGhlcnMgd2lsbCBiZSBpZ25vcmVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGRvZXMgbm90IGludGVyY2VwdCB0aGUgZGVza3RvcCBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICd0YWJsZXQnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj1kZXNrdG9wJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJyAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBtZWRpYSBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBhbiBleHByZXNzaW9uIGZvciBpdCB0byBiZSB1c2VkIHdoZW4gbWVkaWEgcXVlcmllc1xuLy8vIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYW5kIGNvbnRhaW5zIG9ubHkgYWNjZXB0ZWQgbWVkaWEgZXhwcmVzc2lvbnNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdzY3JlZW4nKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBidXQgY29udGFpbnMgYSBtZWRpYSBleHByZXNzaW9uIHRoYXQgaXMgbm90IGFjY2VwdGVkXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAncmV0aW5hMngnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJywgJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZScpICFkZWZhdWx0O1xuXG4vLy8vXG4vLy8gQ3Jvc3MtZW5naW5lIGxvZ2dpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gTG9nIGEgbWVzc2FnZSBlaXRoZXIgd2l0aCBgQGVycm9yYCBpZiBzdXBwb3J0ZWRcbi8vLyBlbHNlIHdpdGggYEB3YXJuYCwgdXNpbmcgYGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpYFxuLy8vIHRvIGRldGVjdCBzdXBwb3J0LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQGZ1bmN0aW9uIGltLWxvZygkbWVzc2FnZSkge1xuICBAaWYgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJykge1xuXHRAZXJyb3IgJG1lc3NhZ2U7XG4gIH0gQGVsc2Uge1xuXHRAd2FybiAkbWVzc2FnZTtcblx0JF86IG5vb3AoKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1lc3NhZ2U7XG59XG5cblxuLy8vXG4vLy8gV3JhcHBlciBtaXhpbiBmb3IgdGhlIGxvZyBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGEgbW9yZSBmcmllbmRseVxuLy8vIEFQSSB0aGFuIGBAaWYgaW0tbG9nKCcuLicpIHt9YCBvciBgJF86IGltLWxvZygnLi4nKWAuIEJhc2ljYWxseSwgdXNlIHRoZSBmdW5jdGlvblxuLy8vIHdpdGhpbiBmdW5jdGlvbnMgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluIGEgZnVuY3Rpb25cbi8vLyBhbmQgdXNlIHRoZSBtaXhpbiBldmVyeXdoZXJlIGVsc2UgYmVjYXVzZSBpdCdzIG11Y2ggbW9yZSBlbGVnYW50LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQG1peGluIGxvZygkbWVzc2FnZSkge1xuICBAaWYgaW0tbG9nKCRtZXNzYWdlKSB7fVxufVxuXG5cbi8vL1xuLy8vIEZ1bmN0aW9uIHdpdGggbm8gYEByZXR1cm5gIGNhbGxlZCBuZXh0IHRvIGBAd2FybmAgaW4gU2FzcyAzLjNcbi8vLyB0byB0cmlnZ2VyIGEgY29tcGlsaW5nIGVycm9yIGFuZCBzdG9wIHRoZSBwcm9jZXNzLlxuLy8vXG5AZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vL1xuLy8vIERldGVybWluZXMgd2hldGhlciBhIGxpc3Qgb2YgY29uZGl0aW9ucyBpcyBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnQuXG4vLy9cbi8vLyBAcGFyYW0ge0FyZ2xpc3R9ICAgJGNvbmRpdGlvbnMgIC0gTWVkaWEgcXVlcnkgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHJldHVybiB7Qm9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vXG5AZnVuY3Rpb24gaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikge1xuICAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRpbS1uby1tZWRpYS1icmVha3BvaW50KTtcblxuICBAaWYgbm90ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlIHtcblx0QGlmIGltLWxvZygnYCN7JGltLW5vLW1lZGlhLWJyZWFrcG9pbnR9YCBpcyBub3QgYSB2YWxpZCBicmVha3BvaW50LicpIHt9XG4gIH1cblxuICBAZWFjaCAkY29uZGl0aW9uIGluICRjb25kaXRpb25zIHtcblx0QGlmIG5vdCBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcblx0ICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRjb25kaXRpb24pO1xuXHQgICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuXHQgICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGNvbmRpdGlvbiwgJG9wZXJhdG9yKTtcblxuXHQgIEBpZiAoJHByZWZpeCA9PSAnbWF4JyBhbmQgJHZhbHVlIDw9ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSBvclxuXHRcdCAgKCRwcmVmaXggPT0gJ21pbicgYW5kICR2YWx1ZSA+ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSB7XG5cdFx0QHJldHVybiBmYWxzZTtcblx0ICB9XG5cdH0gQGVsc2UgaWYgbm90IGluZGV4KCRpbS1uby1tZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgIEByZXR1cm4gZmFsc2U7XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vL1xuLy8vIFBhcnNpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuXHRAaWYgc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcblx0ICBAcmV0dXJuICRvcGVyYXRvcjtcblx0fVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG5cdCRkaW1lbnNpb246ICRwYXJzZWQtZGltZW5zaW9uO1xuICB9XG5cbiAgQHJldHVybiAkZGltZW5zaW9uO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gcHJlZml4IGJhc2VkIG9uIGFuIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3Jcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBgbWluYCBvciBgbWF4YFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcikge1xuICBAcmV0dXJuIGlmKGluZGV4KCgnPCcsICc8PScsICfiiaQnKSwgJG9wZXJhdG9yKSwgJ21heCcsICdtaW4nKTtcbn1cblxuXG4vLy9cbi8vLyBHZXQgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IHZhbHVlIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gQSBudW1lcmljIHZhbHVlXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkdmFsdWU6IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yLWluZGV4ICsgc3RyLWxlbmd0aCgkb3BlcmF0b3IpKTtcblxuICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkdmFsdWUpIHtcblx0JHZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJHZhbHVlKTtcbiAgfSBAZWxzZSB7XG5cdCR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcblx0Ly8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuXHQvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuXHQvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cblx0Ly8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcblx0Ly8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuXHQkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG5cdCR2YWx1ZTogJHZhbHVlICsgJGludGVydmFsO1xuICB9IEBlbHNlIGlmICRvcGVyYXRvciA9PSAnPCcge1xuXHQkdmFsdWU6ICR2YWx1ZSAtICRpbnRlcnZhbDtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlO1xufVxuXG5cbi8vL1xuLy8vIFBhcnNlIGFuIGV4cHJlc3Npb24gdG8gcmV0dXJuIGEgdmFsaWQgbWVkaWEtcXVlcnkgZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBwYXJzZVxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIFZhbGlkIG1lZGlhIHF1ZXJ5XG4vLy9cbkBmdW5jdGlvbiBwYXJzZS1leHByZXNzaW9uKCRleHByZXNzaW9uKSB7XG4gIC8vIElmIGl0IGlzIHBhcnQgb2YgJG1lZGlhLWV4cHJlc3Npb25zLCBpdCBoYXMgbm8gb3BlcmF0b3JcbiAgLy8gdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGdvIGFueSBmdXJ0aGVyLCBqdXN0IHJldHVybiB0aGUgdmFsdWVcbiAgQGlmIG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pIHtcblx0QHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG5cdEByZXR1cm4gKCk7XG4gIH1cblxuICAkcmVzdWx0OiAoKTtcblxuICBAZm9yICRpIGZyb20gJHN0YXJ0IHRocm91Z2ggJGVuZCB7XG5cdCRyZXN1bHQ6IGFwcGVuZCgkcmVzdWx0LCBudGgoJGxpc3QsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vLy9cbi8vLyBTdHJpbmcgdG8gbnVtYmVyIGNvbnZlcnRlclxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIENhc3RzIGEgc3RyaW5nIGludG8gYSBudW1iZXJcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBiZSBwYXJzZWRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn1cbi8vL1xuQGZ1bmN0aW9uIHRvLW51bWJlcigkdmFsdWUpIHtcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG5cdEByZXR1cm4gJHZhbHVlO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSAhPSAnc3RyaW5nJyB7XG5cdCRfOiBpbS1sb2coJ1ZhbHVlIGZvciBgdG8tbnVtYmVyYCBzaG91bGQgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gIH1cblxuICAkZmlyc3QtY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAxLCAxKTtcbiAgJHJlc3VsdDogMDtcbiAgJGRpZ2l0czogMDtcbiAgJG1pbnVzOiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpO1xuICAkbnVtYmVyczogKCcwJzogMCwgJzEnOiAxLCAnMic6IDIsICczJzogMywgJzQnOiA0LCAnNSc6IDUsICc2JzogNiwgJzcnOiA3LCAnOCc6IDgsICc5JzogOSk7XG5cbiAgLy8gUmVtb3ZlICsvLSBzaWduIGlmIHByZXNlbnQgYXQgZmlyc3QgY2hhcmFjdGVyXG4gIEBpZiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnKycgb3IgJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpIHtcblx0JHZhbHVlOiBzdHItc2xpY2UoJHZhbHVlLCAyKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggc3RyLWxlbmd0aCgkdmFsdWUpIHtcblx0JGNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgJGksICRpKTtcblxuXHRAaWYgbm90IChpbmRleChtYXAta2V5cygkbnVtYmVycyksICRjaGFyYWN0ZXIpIG9yICRjaGFyYWN0ZXIgPT0gJy4nKSB7XG5cdCAgQHJldHVybiB0by1sZW5ndGgoaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCksIHN0ci1zbGljZSgkdmFsdWUsICRpKSlcblx0fVxuXG5cdEBpZiAkY2hhcmFjdGVyID09ICcuJyB7XG5cdCAgJGRpZ2l0czogMTtcblx0fSBAZWxzZSBpZiAkZGlnaXRzID09IDAge1xuXHQgICRyZXN1bHQ6ICRyZXN1bHQgKiAxMCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpO1xuXHR9IEBlbHNlIHtcblx0ICAkZGlnaXRzOiAkZGlnaXRzICogMTA7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpIC8gJGRpZ2l0cztcblx0fVxuICB9XG5cbiAgQHJldHVybiBpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KTtcbn1cblxuXG4vLy9cbi8vLyBBZGQgYCR1bml0YCB0byBgJHZhbHVlYFxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGFkZCB1bml0IHRvXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICR1bml0IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gYCR2YWx1ZWAgZXhwcmVzc2VkIGluIGAkdW5pdGBcbi8vL1xuQGZ1bmN0aW9uIHRvLWxlbmd0aCgkdmFsdWUsICR1bml0KSB7XG4gICR1bml0czogKCdweCc6IDFweCwgJ2NtJzogMWNtLCAnbW0nOiAxbW0sICclJzogMSUsICdjaCc6IDFjaCwgJ3BjJzogMXBjLCAnaW4nOiAxaW4sICdlbSc6IDFlbSwgJ3JlbSc6IDFyZW0sICdwdCc6IDFwdCwgJ2V4JzogMWV4LCAndncnOiAxdncsICd2aCc6IDF2aCwgJ3ZtaW4nOiAxdm1pbiwgJ3ZtYXgnOiAxdm1heCk7XG5cbiAgQGlmIG5vdCBpbmRleChtYXAta2V5cygkdW5pdHMpLCAkdW5pdCkge1xuXHQkXzogaW0tbG9nKCdJbnZhbGlkIHVuaXQgYCN7JHVuaXR9YC4nKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlICogbWFwLWdldCgkdW5pdHMsICR1bml0KTtcbn1cblxuLy8vXG4vLy8gVGhpcyBtaXhpbiBhaW1zIGF0IHJlZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24ganVzdCBmb3IgdGhlIHNjb3BlIG9mXG4vLy8gdGhlIGNhbGwuIEl0IGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgYSBjb21wb25lbnQgbmVlZGluZyBhbiBleHRlbmRlZFxuLy8vIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBjdXN0b20gYnJlYWtwb2ludHMgKHJlZmVycmVkIHRvIGFzIHR3ZWFrcG9pbnRzKVxuLy8vIGZvciBpbnN0YW5jZS5cbi8vL1xuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vha3BvaW50cyBbKCldIC0gTWFwIG9mIHR3ZWFrcG9pbnRzIHRvIGJlIG1lcmdlZCB3aXRoIGAkYnJlYWtwb2ludHNgXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucyBbKCldIC0gTWFwIG9mIHR3ZWFrZWQgbWVkaWEgZXhwcmVzc2lvbnMgdG8gYmUgbWVyZ2VkIHdpdGggYCRtZWRpYS1leHByZXNzaW9uYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIGJyZWFrcG9pbnRzIHdpdGggYSB0d2Vha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCkpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgbWVkaWEgZXhwcmVzc2lvbnMgd2l0aCBhIGN1c3RvbSBvbmVcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgYm90aCBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSwgKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG5AbWl4aW4gbWVkaWEtY29udGV4dCgkdHdlYWtwb2ludHM6ICgpLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgpKSB7XG4gIC8vIFNhdmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGdsb2JhbC1icmVha3BvaW50czogJGJyZWFrcG9pbnRzO1xuICAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zOiAkbWVkaWEtZXhwcmVzc2lvbnM7XG5cbiAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogbWFwLW1lcmdlKCRicmVha3BvaW50cywgJHR3ZWFrcG9pbnRzKSAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6IG1hcC1tZXJnZSgkbWVkaWEtZXhwcmVzc2lvbnMsICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucykgIWdsb2JhbDtcblxuICBAY29udGVudDtcblxuICAvLyBSZXN0b3JlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogJGdsb2JhbC1icmVha3BvaW50cyAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6ICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnMgIWdsb2JhbDtcbn1cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgcHVibGljIGV4cG9zZWQgQVBJXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgYmFzZWQgb24gYSBsaXN0IG9mIGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHNpbmdsZSBzZXQgYnJlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCB0d28gc2V0IGJyZWFrcG9pbnRzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD10YWJsZXQnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzU4cHgnLCAnPDg1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBzZXQgYnJlYWtwb2ludHMgd2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+ZGVza3RvcCcsICc8PTEzNTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzdGF0aWMgZXhwcmVzc2lvblxuLy8vICBAaW5jbHVkZSBtZWRpYSgncmV0aW5hMngnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBNaXhpbmcgZXZlcnl0aGluZ1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNTBweCcsICc8dGFibGV0JywgJ3JldGluYTN4JykgeyB9XG4vLy9cbkBtaXhpbiBtZWRpYSgkY29uZGl0aW9ucy4uLikge1xuICBAaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID09IDApIG9yXG5cdCAgKG5vdCAkaW0tbWVkaWEtc3VwcG9ydCBhbmQgaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikpIHtcblx0QGNvbnRlbnQ7XG4gIH0gQGVsc2UgaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID4gMCkge1xuXHRAbWVkaWEgI3t1bnF1b3RlKHBhcnNlLWV4cHJlc3Npb24obnRoKCRjb25kaXRpb25zLCAxKSkpfSB7XG5cdCAgLy8gUmVjdXJzaXZlIGNhbGxcblx0ICBAaW5jbHVkZSBtZWRpYShzbGljZSgkY29uZGl0aW9ucywgMikuLi4pIHtcblx0XHRAY29udGVudDtcblx0ICB9XG5cdH1cbiAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49ICAgICAgICAgICAgQ2hvaWNlcyAgICAgICAgICAgID1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY2hvaWNlcy1zZWxlY3RvcjogJ2Nob2ljZXMnICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLWxnOiAxNnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLW1kOiAxNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLXNtOiAxMnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZ3V0dGVyaW5nOiAyNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1czogM3B4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtOiAzcHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRjaG9pY2VzLWJnLWNvbG9yLWRpc2FibGVkOiAjRUFFQUVBICFkZWZhdWx0O1xuJGNob2ljZXMtYmctY29sb3ItZHJvcGRvd246ICNGRkZGRkYgIWRlZmF1bHQ7XG4kY2hvaWNlcy10ZXh0LWNvbG9yOiAjMzMzMzMzICFkZWZhdWx0O1xuJGNob2ljZXMta2V5bGluZS1jb2xvcjogI0RERERERCAhZGVmYXVsdDtcbiRjaG9pY2VzLXByaW1hcnktY29sb3I6ICRibHVlICFkZWZhdWx0O1xuJGNob2ljZXMtZGlzYWJsZWQtY29sb3I6ICNlYWVhZWEgIWRlZmF1bHQ7XG4kY2hvaWNlcy1oaWdobGlnaHQtY29sb3I6ICRjaG9pY2VzLXByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24taWNvbi1wYXRoOiAnLi4vaW1hZ2VzJyAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb246IDhweCAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQ6IDhweCAhZGVmYXVsdDtcblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAkY2hvaWNlcy1ndXR0ZXJpbmc7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLWxnO1xuICAmOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuICAmOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICYuaXMtZGlzYWJsZWQge1xuXHQuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lubmVyLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvci1kaXNhYmxlZDtcblx0ICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHQgIHVzZXItc2VsZWN0OiBub25lO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInNlbGVjdC1vbmVcIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8vIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIgeyBwYWRkaW5nLWJvdHRvbTogNy41cHg7IH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IHBhZGRpbmctYm90dG9tOiAzLjBweDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3IgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJGNob2ljZXMtYnV0dG9uLWljb24tcGF0aCArICcvY3Jvc3MtaW52ZXJzZS5zdmcnKTtcblx0cGFkZGluZzogMDtcblx0YmFja2dyb3VuZC1zaXplOiA4cHg7XG5cdGhlaWdodDogMTAwJTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0cmlnaHQ6IDA7XG5cdG1hcmdpbi10b3A6IC0xMHB4O1xuXHRtYXJnaW4tcmlnaHQ6IDI1cHg7XG5cdGhlaWdodDogMjBweDtcblx0d2lkdGg6IDIwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEwZW07XG5cdG9wYWNpdHk6IC41O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuXHQmOmZvY3VzIHsgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMnB4ICRjaG9pY2VzLWhpZ2hsaWdodC1jb2xvcjsgfVxuICB9XG4gICY6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRoZWlnaHQ6IDA7XG5cdHdpZHRoOiAwO1xuXHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRib3JkZXItY29sb3I6ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci13aWR0aDogNXB4O1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAxMS41cHg7XG5cdHRvcDogNTAlO1xuXHRtYXJnaW4tdG9wOiAtMi41cHg7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gICYuaXMtb3BlbjphZnRlciB7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudDtcblx0bWFyZ2luLXRvcDogLTcuNXB4O1xuICB9XG4gICZbZGlyPVwicnRsXCJdIHtcblx0JjphZnRlciB7XG5cdCAgbGVmdDogMTEuNXB4O1xuXHQgIHJpZ2h0OiBhdXRvO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcblx0ICByaWdodDogYXV0bztcblx0ICBsZWZ0OiAwO1xuXHQgIG1hcmdpbi1sZWZ0OiAyNXB4O1xuXHQgIG1hcmdpbi1yaWdodDogMDtcblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJde1xuXHQmOmFmdGVyIHtcblx0ICBjb250ZW50OiBcIlwiO1xuXHQgIGhlaWdodDogMDtcblx0ICB3aWR0aDogMDtcblx0ICBib3JkZXItc3R5bGU6IHNvbGlkO1xuXHQgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcblx0ICBib3JkZXItd2lkdGg6IDVweDtcblx0ICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cdCAgcmlnaHQ6IDExLjVweDtcblx0Ly8gICB0b3A6IDUwJTtcblx0IHRvcDogMThweDtcblx0ICBtYXJnaW4tdG9wOiAtMi41cHg7XG5cdCAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cdH1cblx0Ji5pcy1vcGVuOmFmdGVyIHtcblx0ICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQ7XG5cdCAgbWFyZ2luLXRvcDogLTcuNXB4O1xuXHR9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJdLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInRleHRcIl0gIHtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IGN1cnNvcjogdGV4dDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2J1dHRvbiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tcmlnaHQ6IC0kY2hvaWNlcy1idXR0b24tb2Zmc2V0LzI7XG5cdG1hcmdpbi1ib3R0b206IDA7XG5cdG1hcmdpbi1sZWZ0OiAkY2hvaWNlcy1idXR0b24tb2Zmc2V0O1xuXHRwYWRkaW5nLWxlZnQ6ICRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQqMjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgMTAlKTtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCRjaG9pY2VzLWJ1dHRvbi1pY29uLXBhdGggKyAnL2Nyb3NzLnN2ZycpO1xuXHRiYWNrZ3JvdW5kLXNpemU6ICRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb247XG5cdHdpZHRoOiAkY2hvaWNlcy1idXR0b24tZGltZW5zaW9uO1xuXHRsaW5lLWhlaWdodDogMTtcblx0b3BhY2l0eTogLjc1O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvcjtcbiAgLy9wYWRkaW5nOiA3LjVweCA3LjVweCAzLjc1cHg7XG4gIHBhZGRpbmc6IDRweCA3LjVweCAxcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLW1kO1xuICBtaW4taGVpZ2h0OiAzNXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAuaXMtZm9jdXNlZCAmLCAuaXMtb3BlbiAmIHsgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTUlKTsgfVxuICAuaXMtb3BlbiAmIHsgYm9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzIDAgMDsgfVxuICAuaXMtZmxpcHBlZC5pcy1vcGVuICYgeyBib3JkZXItcmFkaXVzOiAwIDAgJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3QtLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNHB4IDE2cHggNHB4IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIFtkaXI9XCJydGxcIl0gJiB7XG5cdHBhZGRpbmctcmlnaHQ6IDRweDtcblx0cGFkZGluZy1sZWZ0OiAxNnB4O1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IHdpZHRoOiAxMDAlOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tbXVsdGlwbGUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0Ym9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtO1xuXHRwYWRkaW5nOiAzcHggMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtc207XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdG1hcmdpbi1yaWdodDogNHB4O1xuXHRtYXJnaW4tdG9wOiAwcHg7XG5cdG1hcmdpbi1ib3R0b206IDNweDtcblx0YmFja2dyb3VuZC1jb2xvcjogJGNob2ljZXMtcHJpbWFyeS1jb2xvcjtcblx0Ym9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLXByaW1hcnktY29sb3IsIDUlKTtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcblx0JltkYXRhLWRlbGV0YWJsZV0geyBwYWRkaW5nLXJpZ2h0OiA1cHg7IH1cblx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0ICBtYXJnaW4tcmlnaHQ6IDA7XG5cdCAgbWFyZ2luLWxlZnQ6IDMuNzVweDtcblx0fVxuXHQmLmlzLWhpZ2hsaWdodGVkIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgNSUpO1xuXHQgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1wcmltYXJ5LWNvbG9yLCAxMCUpO1xuXHR9XG5cdC5pcy1kaXNhYmxlZCAmIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtZGlzYWJsZWQtY29sb3IsIDI1JSk7XG5cdCAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLWRpc2FibGVkLWNvbG9yLCAzNSUpO1xuXHR9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuICBib3JkZXI6IDFweCBzb2xpZCAkY2hvaWNlcy1rZXlsaW5lLWNvbG9yO1xuICB0b3A6IDEwMCU7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICYuaXMtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLmlzLW9wZW4gJiB7IGJvcmRlci1jb2xvcjogZGFya2VuKCRjaG9pY2VzLWtleWxpbmUtY29sb3IsIDE1JSk7IH1cbiAgLmlzLWZsaXBwZWQgJiB7XG5cdHRvcDogYXV0bztcblx0Ym90dG9tOiAxMDAlO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tYm90dG9tOiAtMXB4O1xuXHRib3JkZXItcmFkaXVzOiAuMjVyZW0gLjI1cmVtIDAgMDtcbiAgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3Qge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1heC1oZWlnaHQ6IDMwMHB4O1xuXHRvdmVyZmxvdzogYXV0bztcblx0LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXHR3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG5cdFtkaXI9XCJydGxcIl0gJiB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHtcblx0QG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG5cdCAgcGFkZGluZy1yaWdodDogMTAwcHg7XG5cdCAgJjphZnRlciB7XG5cdFx0Y29udGVudDogYXR0cihkYXRhLXNlbGVjdC10ZXh0KTtcblx0XHRmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRyaWdodDogMTBweDtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdCAgfVxuXHQgIFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XG5cdFx0cGFkZGluZy1sZWZ0OiAxMDBweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuXHRcdCY6YWZ0ZXIge1xuXHRcdCAgcmlnaHQ6IGF1dG87XG5cdFx0ICBsZWZ0OiAxMHB4O1xuXHRcdH1cblx0ICB9XG5cdH1cblx0Ji5pcy1oaWdobGlnaHRlZCB7XG5cdCAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCMwMDAwMDAsICNGRkZGRkYsIDUlKTtcblx0ICAmOmFmdGVyIHsgb3BhY2l0eTogLjU7IH1cblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogZGVmYXVsdDsgfVxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHsgY3Vyc29yOiBwb2ludGVyOyB9XG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2l0ZW0tLWRpc2FibGVkIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIG9wYWNpdHk6IC41O1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2hlYWRpbmcge1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcbiAgcGFkZGluZzogMTBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTAlKTtcbiAgY29sb3I6IGxpZ2h0ZW4oIzMzMywgMzAlKTtcbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgJjpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IG1peCgjMDAwMDAwLCAjRkZGRkZGLCAyLjUlKTtcbiAgZm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgcGFkZGluZzogNHB4IDAgNHB4IDJweCAhaW1wb3J0YW50O1xuICAmOmZvY3VzIHsgb3V0bGluZTogMDsgfVxuICBbZGlyPVwicnRsXCJdICYge1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMDtcbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX3BsYWNlaG9sZGVyIHsgb3BhY2l0eTogLjU7IH1cblxuLyo9PT09PSAgRW5kIG9mIENob2ljZXMgID09PT09PSovXG4iLCIvLyBCdXR0b24gc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4tcGFnZSB7XG5cblx0LndwZm9ybXMtYnRuIHtcblx0XHRib3JkZXI6IDA7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tYmxvY2sge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLW1kIHtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLWxnIHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiAxNnB4IDI4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tb3JhbmdlIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkb3JhbmdlO1xuXHRcdGJvcmRlci1jb2xvcjogJG9yYW5nZTtcblx0XHRjb2xvcjogI2ZmZjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRib3JkZXItY29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRjb2xvcjogIzY2NjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNztcblx0XHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRcdGNvbG9yOiAjNDQ0O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1saWdodC1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0Y29sb3I6ICM2NjY7XG5cblx0XHQmOmhvdmVyIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG5cdFx0XHRjb2xvcjogIzQ0NDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tdHJhbnMtZ3JlZW4ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG5cdFx0Y29sb3I6ICRncmVlbjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGdyZWVuO1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0fVxuXG5cdFx0LnVuZGVybGluZSB7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAkZ3JlZW47XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0Ym90dG9tOiAtNXB4O1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZGFzaGljb25zIHtcblx0XHRcdGhlaWdodDogMThweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFsZXJ0IHN0eWxlcy5cbi8vIFN0eWxpbmcgdHdlYWtzIGZvciBqUXVlcnktY29uZmlybSBKUyBhbGVydCBsaWJyYXJ5LlxuYm9keSB7XG5cblx0ZGl2Lmpjb25maXJtIHtcblxuXHRcdCosXG5cdFx0Kjo6YmVmb3JlLFxuXHRcdCo6OmFmdGVyIHtcblx0XHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0fVxuXG5cdFx0ZGl2Lmpjb25maXJtLWJveC1jb250YWluZXIge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tYm94IHtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuXHRcdFx0XHRkaXYuamNvbmZpcm0tY2xvc2VJY29uIHtcblx0XHRcdFx0XHRjb2xvcjogcmdiYSgwLDAsMCwwLjQpO1xuXHRcdFx0XHRcdHRvcDogOHB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA4cHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiByZ2JhKDAsMCwwLDAuODApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRpdi5qY29uZmlybS1ib3gge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tdGl0bGUtYyB7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDI2cHggMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cblx0XHRcdFx0c3Bhbi5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHRcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdGNvbG9yOiAjYzRjNGM0ICFpbXBvcnRhbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuLmpjb25maXJtLXRpdGxlIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNwYW4uamNvbmZpcm0taWNvbi1jICsgc3Bhbi5qY29uZmlybS10aXRsZSB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAyNnB4O1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblxuXHRcdFx0XHQuamNvbmZpcm0tY29udGVudCB7XG5cdFx0XHRcdFx0b3ZlcmZsb3c6IGluaGVyaXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGl2Lmpjb25maXJtLWNvbnRlbnQge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMS40O1xuXG5cdFx0XHRcdCYubGl0ZS11cGdyYWRlIHtcblx0XHRcdFx0XHRwIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYubGFyZ2Uge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuc21hbGwge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5hbHJlYWR5LXB1cmNoYXNlZCB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1idXR0b25zIHtcblxuXHRcdFx0XHQuYWxyZWFkeS1wdXJjaGFzZWQge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRjb2xvcjogI2FhYTtcblx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5kaXNjb3VudC1ub3RlIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDMwcHggMCAwO1xuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmYWZmYWM7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIC0zMHB4O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDI0cHggNjBweCAyMHB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdFx0XHRjb2xvcjogIzRkNGQ0ZDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6ICdcXGYwNTgnO1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMjZweDtcblx0XHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDVweCA2cHg7XG5cdFx0XHRcdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdFx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0XHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogLTIwcHg7O1xuXHRcdFx0XHRcdFx0cmlnaHQ6IDUwJTtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogLTE4cHg7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzNhYmMwMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuIHtcblx0XHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRcdGNvbG9yOiAjM2FiYzAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YSB7XG5cdFx0XHRcdFx0Y29sb3I6ICNhYWE7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMTJweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dFt0eXBlPXRleHRdIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA5OSU7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNmQ2ZDY7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdG1hcmdpbjogMjBweCBhdXRvIDAgYXV0bztcblx0XHRcdH1cblxuXHRcdFx0I3dwZm9ybXMtZW1iZWQtc2hvcnRjb2RlIHtcblx0XHRcdFx0bWFyZ2luOiAyMHB4IDA7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQjd3Bmb3Jtcy1lbWJlZC1zaG9ydGNvZGU6ZGlzYWJsZWQge1xuXHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdH1cblxuXHRcdFx0YnV0dG9uLmJ0bi1jb25maXJtIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZTtcblx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdG91dGxpbmU6IG5vbmU7XG5cblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAkZGFya29yYW5nZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRidXR0b24uYnRuLWRlZmF1bHQge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0LmVycm9yIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZXJyb3Ige1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZWJjY2QxICFpbXBvcnRhbnQ7XG5cdFx0XHR9XG5cblx0XHRcdC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtbXMtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRmb250LXNpemU6IDQ1cHggIWltcG9ydGFudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuY2hvaWNlcyB7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblxuXHRcdGlucHV0W3R5cGU9dGV4dF0uY2hvaWNlc19faW5wdXQge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBBbGVydCBzdHlsZXMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQud3Bmb3Jtcy1hbGVydCB7XG5cdFx0cGFkZGluZzogMTZweDtcblx0XHRtYXJnaW4tYm90dG9tOiAxOHB4O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXG5cdFx0aDQge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdGNvbG9yOiBpbmhlcml0O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTVweCAwO1xuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtbm9tYXJnaW4ge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1zbWFsbCB7XG5cdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LXN1Y2Nlc3Mge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcblx0XHRcdGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcblx0XHRcdGNvbG9yOiAjM2M3NjNkO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1pbmZvIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHRib3JkZXItY29sb3I6ICNiY2U4ZjE7XG5cdFx0XHRjb2xvcjogIzMxNzA4Zjtcblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtd2FybmluZyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZmFlYmNjO1xuXHRcdFx0Y29sb3I6ICM4YTZkM2I7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LWRhbmdlciB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuXHRcdFx0Y29sb3I6ICNhOTQ0NDI7XG5cdFx0fVxuXHR9XG59IiwiLy8gRmxhZyBpY29ucy5cbi53cGZvcm1zLWZsYWcge1xuXHR3aWR0aDogMTZweDtcblx0aGVpZ2h0OiAxNnB4O1xuXHRiYWNrZ3JvdW5kOnVybCguLi9pbWFnZXMvZmxhZ3MucG5nKSBuby1yZXBlYXQ7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWQge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWcge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1haSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXMge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXQge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXUge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXoge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iaCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYmkge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ibSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYm4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJ0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYncge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnkge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnoge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Qge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Yge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2cge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2sge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY24ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jciB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN2IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1kbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZG8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWR6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1laCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZXIge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lcyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ldCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Ege2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdiIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1naCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2kge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ20ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ24ge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Age2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ige2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Qge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWd3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1neSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaGsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWhuIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ociB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaHQge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWh1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWllIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWltIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWluIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlxIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctamUge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWptIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1qbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctanAge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2gge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2kge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWttIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3Age2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3kge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1reiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGsge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sdSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHYge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWMge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1kIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1oIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1tIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tcSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXIge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1zIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXUge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW12IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW14IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXkge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1teiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5hIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5nIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmkge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmwge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5vIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ucCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbnIge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW56IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1vbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGEge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGcge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1waCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGwge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXB0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcHkge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXFhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1yZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcm8ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXJzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcnUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ydyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Ige2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2sge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc24ge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc3Yge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zeSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGgge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10bSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdG4ge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHQge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10diB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXR3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11YSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdXMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11eSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXV6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12YyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdmUge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12aSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdm4ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZ1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctd3Mge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy15ZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXphIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctem0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy16dyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0yMjRweH1cbiIsIi8vIEhlYWRlciBzdHlsZXMuXG5cbiN3cGZvcm1zLWhlYWRlci10ZW1wIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRtYXJnaW46IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAtMXB4O1xuXHRsZWZ0OiAyMHB4O1xuXHRyaWdodDogMjBweDtcblx0ei1pbmRleDogOTk7XG59XG5cbiN3cGZvcm1zLWhlYWRlciB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCAkb3JhbmdlO1xuXHRwYWRkaW5nOiAyMnB4IDIwcHg7XG5cblx0aW1nIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW46IDA7XG5cdFx0bWF4LXdpZHRoOiAyMzVweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0bWF4LXdpZHRoOiAyMDBweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIFBhZ2UgdGl0bGUgYW5kIHRhYnMgc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4td3JhcCB7XG5cblx0Ly8gVGl0bGUgYXJlYS5cblx0LnBhZ2UtdGl0bGUge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdHBhZGRpbmc6IDE1cHggMjBweDtcblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdG1hcmdpbi1sZWZ0OiAyOHB4O1xuXHRcdH1cblx0fVxufVxuXG4vLyBUYWIgbmF2aWdhdGlvbi5cbi53cGZvcm1zLWFkbWluLXRhYnMge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdHBhZGRpbmc6IDAgMjBweDtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0b3ZlcmZsb3c6IGF1dG87XG5cdGZvbnQtc2l6ZTogMTRweDtcblxuXHRsaSB7XG5cdFx0bWFyZ2luOiAwIDMwcHggMCAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cblx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0YSB7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0cGFkZGluZzogMjBweCAwIDE4cHggMDtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZmZmO1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdH1cblxuXHRcdFx0Ji5hY3RpdmUge1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBHZW5lcmFsIGFkbWluIHN0eWxpbmcuXG5cbi8vIENvcmUgYWRtaW4gc3R5bGUgb3ZlcnJpZGVzLlxuI3dwY29udGVudCB7XG5cdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNDZweDtcblx0fVxufVxuXG4jd3Bib2R5IHtcblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogMDtcblx0fVxufVxuXG4vLyBUaGlzIGNsYXNzIGlzIGF1dG8gYXBwbGllZCB0byBfYWxsXyBXUEZvcm1zIGFkbWluIHBhZ2VzL3NjcmVlbnMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQvLyBUaGlzIGlzIGhpZGRlbiBvbiBsb2FkLCB0aGVuIG1hZGUgdmlzaWJsZSB3aXRoIEpTLCB0b1xuXHQvLyBwcmV2ZW50IGl0IGZyb20gXCJqdW1waW5nXCIuXG5cdCNzY3JlZW4tbWV0YS1saW5rcyxcblx0I3NjcmVlbi1tZXRhIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0Ly8gUmVzcG9uc2l2ZSB2aWRlbyBjb250YWluZXIsIHJlcGxhY2VzIEpTIG1ldGhvZC5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctYm90dG9tOiA1Ni4xJTtcblx0XHQvLyBwYWRkaW5nLXRvcDogMzBweDtcblx0XHRoZWlnaHQ6IDA7XG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0fVxuXG5cdC52aWRlby1jb250YWluZXIgaWZyYW1lLFxuXHQudmlkZW8tY29udGFpbmVyIG9iamVjdCxcblx0LnZpZGVvLWNvbnRhaW5lciBlbWJlZCB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblx0fVxuXG5cdC8vIEZhbmN5IGZpbGUgdXBsb2FkLlxuXHQud3Bmb3Jtcy1maWxlLXVwbG9hZCB7XG5cblx0XHRpbnB1dFt0eXBlPWZpbGVdIHtcblx0XHRcdHdpZHRoOiAwLjFweDtcblx0XHRcdGhlaWdodDogMC4xcHg7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHotaW5kZXg6IC0xO1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdH1cblxuXHRcdGlucHV0W3R5cGU9ZmlsZV06Zm9jdXMgKyBsYWJlbCxcblx0XHRpbnB1dFt0eXBlPWZpbGVdLmhhcy1mb2N1cyArIGxhYmVsIHtcblx0XHRcdG91dGxpbmU6IDFweCBkb3R0ZWQgIzAwMDtcblx0XHRcdG91dGxpbmU6IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBhdXRvIDVweDtcblx0XHR9XG5cblx0XHQuZmxkIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdC5wbGFjZWhvbGRlciB7XG5cdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0cm9uZyAuZmEge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cdFx0fVxuXHR9XG5cblx0Ly8gR2VucmljIGNsYXNzIGZvciBoaWRpbmcgZGlzcGxheTtcblx0LndwZm9ybXMtaGlkZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIFBsYWNlaG9sZGVyIGgxIGZvciBhZG1pbiBub3RpY2VzLlxuXHQud3Bmb3Jtcy1oMS1wbGFjZWhvbGRlciB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIEhpZGUgbm90aWNlcyBvbiBsb2FkIHRvIHByZXZlbnQganVtcGluZy4gSlMgd2lsbCByZXZlYWwgdGhlbS5cblx0Lm5vdGljZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuXG4vLyBBZG1pbiB3cmFwIC0gY29udGFpbnMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGhlYWRlci5cbi53cGZvcm1zLWFkbWluLXdyYXAge1xuXG5cdG1hcmdpbjogMDtcblxuXHQubm90aWNlIHtcblx0XHRtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xuXHRcdG1hcmdpbi1yaWdodDogMjBweCAhaW1wb3J0YW50O1xuXHR9XG59XG5cbi8vIEFkbWluIGNvbnRlbnQuXG4ud3Bmb3Jtcy1hZG1pbi1jb250ZW50IHtcblx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXHRwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuXG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNsZWFyOiBib3RoO1xuXHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHR9XG5cblx0aHIge1xuXHRcdGJvcmRlcjogbm9uZTtcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRtYXJnaW46IDIwcHggMDtcblx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHR9XG59XG5cbi53cGZvcm1zLWNsZWFyIHtcblxuXHQmOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCIgXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdH1cblxuXHQmOmFmdGVyIHtcblx0XHRjbGVhcjogYm90aDtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxufVxuXG4ud3Bmb3Jtcy1hZG1pbi1jb2x1bW5zIHtcblxuXHQmID4gZGl2W2NsYXNzKj1cIi1jb2x1bW4tXCJdIHtcblx0XHRmbG9hdDogbGVmdDtcblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi0yMCB7d2lkdGg6IDIwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTMzIHt3aWR0aDogMzMuMzMzMzMlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNDAge3dpZHRoOiA0MCV9XG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi01MCB7d2lkdGg6IDUwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTYwIHt3aWR0aDogNjAlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tODAge3dpZHRoOiA4MCV9XG5cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLWxhc3Qge2Zsb2F0OiByaWdodCAhaW1wb3J0YW50fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdFx0Y2xlYXI6IGJvdGg7XG5cdH1cbn1cblxuXG5cbiIsIi8vIEZvcm0gT3ZlcnZpZXcgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLW92ZXJ2aWV3XG4jd3Bmb3Jtcy1vdmVydmlldyB7XG5cblx0Ly8gUmVtb3ZlIHRoZSB0b3AgbWFyZ2luIHNvIGl0IGRpc3BsYXlzIDIwcHggYmV0d2VlbiB0aGUgaGVhZGVyIGFyZWFcblx0Ly8gYW5kIHRoZSBjb250ZW50LCBjb25zaXN0ZW50IHdpdGggb3VyIG90aGVyIGFkbWluIHBhZ2VzLlxuXHQudGFibGVuYXYudG9wIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHR9XG5cblx0Ly8gU2V0IGNlcnRhaW4gY29sdW1uIHdpZHRocy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0LmNvbHVtbi1pZCB7XG5cdFx0XHR3aWR0aDogMzBweDtcblx0XHR9XG5cblx0XHQuY29sdW1uLWVudHJpZXMge1xuXHRcdFx0d2lkdGg6IDcwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1zaG9ydGNvZGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tY3JlYXRlZCB7XG5cdFx0XHR3aWR0aDogMTQ1cHg7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBFbnRyaWVzIFNpbmdsZSAoRGV0YWlscykgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWVudHJpZXMmdmlldz1kZXRhaWxzXG4jd3Bmb3Jtcy1lbnRyaWVzLXNpbmdsZSB7XG5cblx0I3Bvc3RzdHVmZiB7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC8vIE1ldGFib3hlcyBhcmUgbm90IG1vdmFibGUgc28gZG9uJ3QgbGV0IHRoZSB1c2VyIHRoaW5rIHNvLlxuXHQucG9zdGJveCAuaG5kbGUge1xuXHRcdGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuXHR9XG5cblx0Ly8gRW50cnkgbmF2aWdhdGlvbiAtIG5leHQvcHJldi5cblx0LndwZm9ybXMtZW50cnktbmF2aWdhdGlvbiB7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDJweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxcHg7XG5cdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdHRvcDogYXV0bztcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDRweCAwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHR9XG5cblx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGhlaWdodDogYXV0bztcblx0XHRcdFx0d2lkdGg6IDI4cHg7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmluYWN0aXZlIHtcblx0XHRcdFx0b3BhY2l0eTogMC41O1xuXHRcdFx0XHRwb2ludGVyLWV2ZW50czogbm9uZTtcblx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5hdmlnYXRpb24tdGV4dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZW50cnktY3VycmVudCB7XG5cdFx0XHR0b3A6IGF1dG87XG5cdFx0XHRtYXJnaW46IDAgLTVweCAwIC0zcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRwYWRkaW5nOiA0cHggMTBweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0XHQtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMjlweDtcblx0XHRcdHRleHQtdHJhbnNmb3JtOiBjZW50ZXI7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBFbnRyeSBmaWVsZHMgbWV0YWJveC5cblx0I3dwZm9ybXMtZW50cnktZmllbGRzIHtcblxuXHRcdGgyLmhuZGxlIHtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblxuXHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHR3aWR0aDogMTZweDtcblx0XHRcdFx0bWFyZ2luOiA0cHggNHB4IDAgMDtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Lm5vLWZpZWxkcyB7XG5cdFx0XHRwYWRkaW5nOiAxMnB4O1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0cCB7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZW50cnktZmllbGQtbmFtZSB7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNlYmYzZmI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1lbnRyeS1maWVsZC12YWx1ZSB7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQuZW1wdHkgLndwZm9ybXMtZW50cnktZmllbGQtdmFsdWUge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVtcHR5LWZpZWxkLXRvZ2dsZSB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRwYWRkaW5nOiA1cHggMCAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEVudHJ5IE5vdGVzIG1ldGFib3guXG5cdCN3cGZvcm1zLWVudHJ5LW5vdGVzIHtcblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1uZXcge1xuXHRcdFx0cGFkZGluZzogMTBweDtcblx0XHR9XG5cblx0XHRmb3JtIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LmJ0bnMge1xuXHRcdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0XHRwYWRkaW5nOiA4cHggMDtcblx0XHR9XG5cblx0XHQubm8tbm90ZXMge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogNHB4IDEwcHggOHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5vdGVzLXNpbmdsZSB7XG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlM2UxZTM7XG5cblx0XHRcdHA6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblxuXHRcdFx0Ji5ldmVuIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1ieWxpbmUge1xuXHRcdFx0Y29sb3I6ICM4ODg7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXG5cdFx0XHQuc2VwIHtcblx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHR9XG5cblx0XHRcdC5ub3Rlcy11c2VyIHtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0fVxuXG5cdFx0XHQubm90ZS1kZWxldGUge1xuXHRcdFx0XHRjb2xvcjogI2EwMDtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gRW50cnkgRGV0YWlscywgQWN0aW9ucywgYW5kIFBheW1lbnRzLlxuXHQjd3Bmb3Jtcy1lbnRyeS1kZXRhaWxzIC5pbnNpZGUsXG5cdCN3cGZvcm1zLWVudHJ5LXBheW1lbnQgLmluc2lkZSxcblx0I3dwZm9ybXMtZW50cnktYWN0aW9ucyAuaW5zaWRlIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhICB7XG5cdFx0cGFkZGluZzogNnB4IDAgMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBwLFxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIHAge1xuXHRcdHBhZGRpbmc6IDZweCAxMHB4IDhweDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEge1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG5cdFx0cGFkZGluZzogMTBweDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LXBheW1lbnQtbWV0YSBwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBzdHJvbmcsXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBzdHJvbmcge1xuXHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1kZXRhaWxzLW1ldGEgLmRhc2hpY29ucyxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIC5kYXNoaWNvbnMge1xuXHRcdHBhZGRpbmc6IDAgMnB4IDAgMDtcblx0XHRjb2xvcjogIzgyODc4QTtcblx0XHR0b3A6IC0xcHg7XG5cdFx0bGVmdDogLTFweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR9XG5cblx0I3dwZm9ybXMtZW50cnktZGV0YWlscyAuc3VibWl0ZGVsZXRlIHtcblx0XHRjb2xvcjogI2EwMDtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0cGFkZGluZzogMXB4IDJweDtcblx0fVxuXG5cdCN3cGZvcm1zLWVudHJ5LWRldGFpbHMgLnN1Ym1pdGRlbGV0ZTpob3ZlciB7XG5cdFx0Y29sb3I6IHJlZDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBhIHtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1hY3Rpb25zLW1ldGEgYTpob3ZlciB7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdH1cblxuXHQvLyBFbnRyeSBMb2NhdGlvbi5cblx0I3dwZm9ybXMtZW50cnktZ2VvbG9jYXRpb24ge1xuXG5cdFx0Lmluc2lkZSB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLW1ldGEge1xuXHRcdFx0d2lkdGg6IDg1cHg7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxMnB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLXZhbHVlIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBhZGRpbmc6IDEwcHggMTJweCAxMHB4IDIwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZmxhZyB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDRweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEVudHJpZXMgTGlzdCAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtZW50cmllcyZ2aWV3PWxpc3RcbiN3cGZvcm1zLWVudHJpZXMtbGlzdCB7XG5cblx0LmZvcm0tZGV0YWlscyB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0bWFyZ2luOiAwIDAgMTBweDtcblxuXHRcdC5mb3JtLWRldGFpbHMtc3ViIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXNpemU6IDEwcHg7XG5cdFx0XHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRcdFx0bWFyZ2luOiAwIDAgOHB4IDA7XG5cdFx0fVxuXG5cdFx0LmZvcm0tZGV0YWlscy10aXRsZSB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyMDBweFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5mb3JtLXNlbGVjdG9yIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0LnRvZ2dsZSB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0Y29sb3I6ICM0NDQ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0XHQmOmhvdmVyLFxuXHRcdFx0XHQmLmFjdGl2ZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2UzZTNlMztcblx0XHRcdFx0XHRvdXRsaW5lOiBub25lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmZvcm0tbGlzdCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggOHB4IDAgcmdiYSgwLDAsMCwwLjEpO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRvcDogMjdweDtcblx0XHRcdFx0bGVmdDogLTEwOHB4O1xuXHRcdFx0XHR3aWR0aDogMjMwcHg7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHggMDtcblx0XHRcdFx0ei1pbmRleDogOTk5MTtcblxuXHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHRvcDogLTEwcHg7XG5cdFx0XHRcdFx0bGVmdDogMTEwcHg7XG5cdFx0XHRcdFx0d2lkdGg6IDA7XG5cdFx0XHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0XHRcdFx0Ym9yZGVyLXdpZHRoOiAwIDhweCAxMHB4IDhweDtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxOTZweDtcblx0XHRcdFx0b3ZlcmZsb3cteDogaGlkZGVuO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblxuXHRcdFx0XHRcdGEge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiA1cHggMTVweDtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDQ0O1xuXG5cdFx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZm9ybS1kZXRhaWxzLWFjdGlvbnMge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjwxMjAwcHhcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdH1cblxuXHRcdFx0YSB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRtYXJnaW46IDAgMTJweCAwIDA7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbjogMFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNlYXJjaC5cblx0LnNlYXJjaC1ib3gge1xuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1maWVsZCB7XG5cdFx0XHRtYXgtd2lkdGg6IDE4MHB4O1xuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdG1hcmdpbjogMCAycHggMCAwO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1jb21wYXJpc29uIHtcblx0XHRcdG1heC13aWR0aDogOTBweDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mb3JtLXNlYXJjaC1ib3gtdGVybSB7XG5cdFx0XHRoZWlnaHQ6IDI4cHg7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBGaWx0ZXJpbmcuXG5cdC53cGZvcm1zLWZpbHRlci1kYXRlIHtcblxuXHRcdC53cGZvcm1zLWZpbHRlci1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdGhlaWdodDogMjhweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0bWF4LXdpZHRoOiAyMTBweDtcblx0XHR9XG5cblx0XHRidXR0b24ge1xuXHRcdFx0bWFyZ2luOiAxcHggOHB4IDAgMDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV1AgVGFibGUgc3R5bGluZy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0Lm5ldy1lbnRyaWVzLW5vdGlmaWNhdGlvbiB0ZCB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0YSB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIHtcblx0XHRcdHdpZHRoOiAzNXB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRhOmZvY3VzIHtcblx0XHRcdFx0LXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5jb2x1bW4taW5kaWNhdG9ycyAuZGFzaGljb25zIHtcblx0XHRcdHdpZHRoOiAxNHB4O1xuXHRcdFx0aGVpZ2h0OiAxNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luLXRvcDogM3B4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciAuZGFzaGljb25zIHtcblx0XHRcdG1hcmdpbi1yaWdodDogNnB4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciB7XG5cdFx0XHRjb2xvcjogI2U0ZTRlNDtcblxuXHRcdFx0Jjpob3Zlcixcblx0XHRcdCYudW5zdGFyIHtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvci1yZWFkIHtcblx0XHRcdGNvbG9yOiAjOWVkZTg0O1xuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0Ji51bnJlYWQge1xuXHRcdFx0XHRjb2xvcjogI2U0ZTRlNDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLWRhdGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tc3RhdHVzIHtcblx0XHRcdHdpZHRoOiAxMjBweDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRoZWlnaHQ6IDEycHg7XG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRtYXJnaW46IDAgMCAwIDNweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLXBheW1lbnRfdG90YWwge1xuXHRcdFx0d2lkdGg6IDEwMHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tYWN0aW9ucyB7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0fVxuXG5cdFx0LnNlcCB7XG5cdFx0XHRjb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuZGVsZXRlOmhvdmVyIHtcblx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtZW50cmllcy10YWJsZS1lZGl0LWNvbHVtbnMge1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRjb2xvcjogI2NjYztcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtZGFzaC13aWRnZXQtY2hhcnQtYmxvY2sge1xuXHRcdHBhZGRpbmc6IDEycHggMTJweCAwIDhweDtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7XG5cdFx0bWFyZ2luLXRvcDogMjBweDtcblx0XHRib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDQpO1xuXG5cdFx0LndwZm9ybXMtZXJyb3Itbm8tZGF0YS1jaGFydCB7XG5cdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtZGFzaC13aWRnZXQtY2hhcnQtdGl0bGUge1xuXHRcdG1hcmdpbi1sZWZ0OiAtMTJweDtcblx0XHRmb250LXNpemU6IDE4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1ibG9jazpmaXJzdC1jaGlsZCB7XG5cdFx0bWFyZ2luLXRvcDogMDtcblx0fVxuXG5cdC53cGZvcm1zLWRhc2gtd2lkZ2V0LXJlc2V0LWNoYXJ0IHtcblxuXHRcdGNvbG9yOiAjZDgzNjM4O1xuXHRcdG9wYWNpdHk6IDE7XG5cdFx0dmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xuXHRcdG1hcmdpbjogMCAwIC0xcHggMDtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICNhZDJiMmM7XG5cdFx0fVxuXG5cdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRoZWlnaHQ6IDIwcHg7XG5cdFx0XHR3aWR0aDogMjBweDtcblx0XHR9XG5cdH1cblxuXHQjd3Bmb3Jtcy1kYXNoLXdpZGdldC10aW1lc3BhbiB7XG5cdFx0bWFyZ2luOiA1cHggLTEycHggMCAwO1xuXHR9XG5cblx0I3dwZm9ybXMtZGFzaC13aWRnZXQtZm9ybXMtbGlzdC1ibG9jayB7XG5cdFx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdH1cblxuXHQjd3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3Jtcy1saXN0LXRhYmxlIHtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1O1xuXHRcdGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNCk7XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3Jtcy1saXN0LWNvbHVtbnMge1xuXHRcdFx0dGQge1xuXHRcdFx0XHRwYWRkaW5nOiAxMnB4IDIwcHg7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRib2R5IHtcblx0XHRcdGJvcmRlci10b3A6IDA7XG5cdFx0fVxuXG5cdFx0dHIge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHR9XG5cblx0XHR0cjpmaXJzdC1jaGlsZCB7XG5cdFx0XHRib3JkZXItdG9wOiAwO1xuXG5cdFx0XHR0ZCB7XG5cdFx0XHRcdGJvcmRlci10b3A6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHI6bnRoLWNoaWxkKGV2ZW4pIHRkIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG5cdFx0fVxuXG5cdFx0dGQge1xuXHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0XHRcdHBhZGRpbmc6IDIwcHggMjBweDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHR9XG5cblx0XHR0ciA+IHRkOm50aC1jaGlsZCgyKSB7XG5cdFx0XHR3aWR0aDogMTgwcHg7XG5cdFx0fVxuXG5cdFx0dHIgPiB0ZDpudGgtY2hpbGQoMykge1xuXHRcdFx0d2lkdGg6IDYwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXG5cdFx0dHIgPiB0ZDpudGgtY2hpbGQoNCkge1xuXHRcdFx0d2lkdGg6IDkwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXG5cdFx0dHIgPiB0ZDpudGgtY2hpbGQoNSkge1xuXHRcdFx0d2lkdGg6IDYwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRwYWRkaW5nLXRvcDogMDtcblx0XHRcdHBhZGRpbmctYm90dG9tOiAwO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm0tYWN0aXZlIHRkOmZpcnN0LWNoaWxkIHtcblx0XHRcdGJvcmRlci1sZWZ0OiAzcHggc29saWQgIzAwNzNhYTtcblx0XHRcdHBhZGRpbmctbGVmdDogMTdweDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3JtLWFjdGl2ZSAud3Bmb3Jtcy1kYXNoLXdpZGdldC1zaW5nbGUtY2hhcnQtYnRuIHtcblx0XHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3JtLWFjdGl2ZSAud3Bmb3Jtcy1kYXNoLXdpZGdldC1yZXNldC1jaGFydCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcblx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdGJhY2tncm91bmQ6IG5vbmU7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZGFzaC13aWRnZXQtZm9ybXMtbGlzdC1jb2x1bW5zIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG5cdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcblx0XHR9XG5cblx0XHRhIHtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3JtLXRpdGxlIGEge1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHR9XG5cdH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzgycHgpIHtcblxuXHQud3Bmb3Jtcy1hZG1pbi1jb250ZW50IHtcblx0XHRwYWRkaW5nLWxlZnQ6IDEwcHg7XG5cdFx0cGFkZGluZy1yaWdodDogMTBweDtcblx0fVxuXG5cdC53cC1saXN0LXRhYmxlIHtcblx0XHRtYXJnaW46IDAgLTEwcHggMCAtMTBweDtcblx0XHR3aWR0aDogMTAwdnc7XG5cdFx0dGFibGUtbGF5b3V0OiBhdXRvO1xuXHR9XG5cblx0LndwLWxpc3QtdGFibGUuZW50cmllcyB7XG5cblx0XHQuY29sdW1uLWluZGljYXRvcnMge1xuXHRcdFx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQuaW5kaWNhdG9ycyB7XG5cdFx0XHQuaW5kaWNhdG9yLXN0YXIge1xuXHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0fVxuXHRcdFx0LmluZGljYXRvci1yZWFkIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cjpub3QoLmlubGluZS1lZGl0LXJvdyk6bm90KC5uby1pdGVtcykgdGQuY29sdW1uLXByaW1hcnkge1xuXHRcdFx0aGVpZ2h0OiA4cHg7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0ei1pbmRleDogKzE7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDA7XG5cdFx0XHRvdmVyZmxvdzogdmlzaWJsZTtcblx0XHR9XG5cblx0XHQudG9nZ2xlLXJvdyB7XG5cdFx0XHRyaWdodDogNXB4O1xuXHRcdFx0dG9wOiAxNXB4O1xuXHRcdH1cblxuXHRcdHRyOm5vdCguaW5saW5lLWVkaXQtcm93KTpub3QoLm5vLWl0ZW1zKSB0ZC5jb2x1bW4tcHJpbWFyeSt0ZCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdHRyOm5vdCguaW5saW5lLWVkaXQtcm93KTpub3QoLm5vLWl0ZW1zKSB0ZC5jb2x1bW4tcHJpbWFyeX50ZCB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDVweDtcblx0XHRcdG1pbi13aWR0aDogNTB2dztcblx0XHR9XG5cblxuXHR9XG5cblx0cC5zZWFyY2gtYm94IHtcblx0XHRtYXJnaW46IDA7XG5cdFx0d2lkdGg6IGF1dG87XG5cdH1cblxuXHRpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlwZT1yYWRpb10ge1xuXHRcdGhlaWdodDogMTZweDtcblx0XHR3aWR0aDogMTZweDtcblx0fVxuXG59IiwiLy8gV2VsY29tZSBBY3RpdmF0aW9uIC0gaW5kZXgucGhwP3BhZ2U9d3Bmb3Jtcy1nZXR0aW5nLXN0YXJ0ZWRcbiN3cGZvcm1zLXdlbGNvbWUge1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgJG9yYW5nZTtcblx0Y29sb3I6ICM1NTU7XG5cdHBhZGRpbmctdG9wOiAxMTBweDtcblxuXHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNjRweDtcblx0fVxuXG5cdCosXG5cdCo6OmJlZm9yZSxcblx0Kjo6YWZ0ZXIge1xuXHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0fVxuXG5cdC5jb250YWluZXIge1xuXHRcdG1hcmdpbjogMCBhdXRvO1xuXHRcdG1heC13aWR0aDogNzIwcHg7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC5ibG9jayB7XG5cdFx0cGFkZGluZzogNDBweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0cGFkZGluZzogMjBweDtcblx0XHR9XG5cdH1cblxuXHRpbWcge1xuXHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdH1cblxuXHRoMSB7XG5cdFx0Y29sb3I6ICMyMjI7XG5cdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cdH1cblxuXHRoNSB7XG5cdFx0Y29sb3I6ICMyMjI7XG5cdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdG1hcmdpbjogMCAwIDhweCAwO1xuXHR9XG5cblx0aDYge1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRmb250LXdlaWdodDogNDAwO1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdG1hcmdpbjogMDtcblx0fVxuXG5cdHAge1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdH1cblxuXHQuYnV0dG9uLXdyYXAge1xuXHRcdG1heC13aWR0aDogNTkwcHg7XG5cdFx0bWFyZ2luOiAwIGF1dG8gMCBhdXRvO1xuXG5cdFx0LmxlZnQge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucmlnaHQge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdHBhZGRpbmctbGVmdDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuaW50cm8ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDQwcHg7XG5cblx0XHQuc3VsbGllIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRcdFx0aGVpZ2h0OiAxMTBweDtcblx0XHRcdHdpZHRoOiAxMTBweDtcblx0XHRcdHBhZGRpbmc6IDE4cHggMTRweCAwIDE0cHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IC01OHB4O1xuXHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0bWFyZ2luLWxlZnQ6IC01NXB4O1xuXHRcdH1cblxuXHRcdC52aWRlby10aHVtYm5haWwge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXJnaW46IDAgYXV0bztcblx0XHR9XG5cblx0XHQuYnV0dG9uLXdyYXAge1xuXHRcdFx0bWFyZ2luLXRvcDogMjVweDtcblx0XHR9XG5cdH1cblxuXHQuZmVhdHVyZXMge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwO1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRwYWRkaW5nLWJvdHRvbTogMjBweDtcblxuXHRcdC5mZWF0dXJlLWxpc3Qge1xuXHRcdFx0bWFyZ2luLXRvcDogNjBweDtcblx0XHR9XG5cblx0XHQuZmVhdHVyZS1ibG9jayB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogMzVweDtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmZpcnN0IHtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblx0XHRcdFx0Y2xlYXI6IGJvdGg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQmLmxhc3Qge1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXgtd2lkdGg6IDQ2cHg7XG5cdFx0XHR9XG5cblx0XHRcdGg1IHtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDY4cHhcblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDY4cHhcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYnV0dG9uLXdyYXAge1xuXHRcdFx0bWFyZ2luLXRvcDogMjVweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cdH1cblxuXHQudXBncmFkZS1jdGEge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItdG9wOiAwO1xuXHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0Y29sb3I6ICNmZmY7XG5cblx0XHRoMiB7XG5cdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdG1hcmdpbjogMCAwIDMwcHggMDtcblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRkaXNwbGF5OiAtbXMtZmxleDtcblx0XHRcdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0XHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0XHQtd2Via2l0LWZsZXgtd3JhcDogd3JhcDtcblx0XHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDhweCAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiA1cHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQubGVmdCB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA2Ni42NjY2NjYlO1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucmlnaHQge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDMzLjMzMzMzMyU7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDAgMCAyMHB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDA7XG5cdFx0XHR9XG5cblx0XHRcdGgyIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0c3BhbiB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTU1O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDAgMTVweCAxMnB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5wcmljZSB7XG5cdFx0XHRcdHBhZGRpbmc6IDI2cHggMDtcblxuXHRcdFx0XHQuYW1vdW50IHtcblx0XHRcdFx0XHRmb250LXNpemU6IDQ4cHg7XG5cdFx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG5cdFx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdFx0Y29udGVudDogJyQnO1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0dG9wOiAtOHB4O1xuXHRcdFx0XHRcdFx0bGVmdDogLTE2cHg7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LnRlcm0ge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblxuXHR9XG5cblx0LnRlc3RpbW9uaWFscyB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdFx0cGFkZGluZzogMjBweCAwO1xuXG5cdFx0LnRlc3RpbW9uaWFsLWJsb2NrIHtcblx0XHRcdG1hcmdpbjogNTBweCAwIDAgMDs7XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdG1heC13aWR0aDogMTAwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMCAxOHB4IHJnYmEoMCwwLDAsLjIpO1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHdpZHRoOiA2NXB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDEycHggMTQwcHg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IDEwMHB4O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuZm9vdGVyIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcblx0fVxuXG5cdC8vIENoYW5nZXMgZm9yIHBhaWQgdmVyc2lvbi5cblx0Ji5wcm8ge1xuXG5cdFx0LmZlYXR1cmVzIHtcblx0XHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdH1cblxuXHRcdC51cGdyYWRlLFxuXHRcdC5mb290ZXIge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cblx0XHQudGVzdGltb25pYWxzIHtcblx0XHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0fVxuXHR9XG59XG5cbi5kYXNoYm9hcmRfcGFnZV93cGZvcm1zLWdldHRpbmctc3RhcnRlZCB7XG5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0fVxuXG5cdC8vIEhpZGUgYWRtaW4gZm9vdGVyLlxuXHQjd3Bmb290ZXIsXG5cdGRpdi5ub3RpY2Uge1xuXHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0fVxufVxuIiwiLy8gQWRkb25zIExpc3QgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWFkZG9uc1xuI3dwZm9ybXMtYWRtaW4tYWRkb25zIHtcblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQuYWRkb25zLWNvbnRhaW5lciB7XG5cdFx0bWFyZ2luLWxlZnQ6IC0yMHB4O1xuXHRcdG1hcmdpbi1yaWdodDogLTIwcHg7XG5cdH1cblxuXHQudW5sb2NrLW1zZyB7XG5cdFx0cGFkZGluZzogMCAyMHB4O1xuXHRcdG1hcmdpbi10b3A6IC0yMHB4O1xuXHRcdGNsZWFyOiBib3RoO1xuXHR9XG5cblx0I3dwZm9ybXMtYWRtaW4tYWRkb25zLXNlYXJjaCB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdGNvbG9yOiAjMzMzO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0cGFkZGluZzogN3B4IDEycHg7XG5cdFx0bWFyZ2luOiAtM3B4IDEwcHggMCAwO1xuXHRcdHdpZHRoOiAyMDBweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblxuXHRcdCY6Zm9jdXMge1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjYmJiO1xuXHRcdH1cblx0fVxuXG5cdC5hZGRvbi1jb250YWluZXIge1xuXHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRmbG9hdDogbGVmdDtcblx0XHR3aWR0aDogMzMuMzMzMzMzJTtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyNTBweFwiKSB7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdH1cblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXHRcdH1cblx0fVxuXG5cdGg0IHtcblx0XHRmb250LXNpemU6IDE3cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0fVxuXG5cdC5hZGRvbi1pdGVtIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdG1hcmdpbjogMCAwIDQwcHggMDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0bWFyZ2luOiAwIDBcblx0XHR9XG5cblx0XHRpbWcge1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2VlZTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0bWF4LXdpZHRoOiA3NXB4O1xuXHRcdH1cblxuXHRcdGg1IHtcblx0XHRcdG1hcmdpbjogMCAwIDEwcHggMTAwcHg7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW46IDAgMCAwIDEwMHB4O1xuXHRcdH1cblxuXHRcdC5kZXRhaWxzIHtcblx0XHRcdHBhZGRpbmc6IDMwcHggMjBweDtcblxuXHRcdH1cblxuXHRcdC5hY3Rpb25zIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG5cdFx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcblx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdC5tc2cge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0dG9wOiAwO1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHR6LWluZGV4OiA5OTtcblx0XHRcdFx0cGFkZGluZzogMjBweDtcblx0XHRcdFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XG5cdFx0XHRcdGRpc3BsYXk6IC1tb3otYm94O1xuXHRcdFx0XHRkaXNwbGF5OiAtbXMtZmxleGJveDtcblx0XHRcdFx0ZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuXHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0XHQtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0XHRcdC1tcy1hbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuXHRcdFx0XHQmLnN1Y2Nlc3Mge1xuXHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmVycm9yIHtcblx0XHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnN0YXR1cyB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cblx0XHRcdC5zdGF0dXMtaW5hY3RpdmUge1xuXHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQuc3RhdHVzLWRvd25sb2FkIHtcblx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHR9XG5cblx0XHRcdC5zdGF0dXMtYWN0aXZlIHtcblx0XHRcdFx0Y29sb3I6ICRncmVlbjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQudXBncmFkZS1idXR0b24ge1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRhIHtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0d2lkdGg6IDE0MHB4O1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCA1cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmFjdGlvbi1idXR0b24ge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRidXR0b24ge1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0d2lkdGg6IDE0MHB4O1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCA1cHg7XG5cblx0XHRcdFx0Jjpob3Zlcixcblx0XHRcdFx0Ji5sb2FkaW5nIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZTllOWU5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDhweDtcblxuXHRcdFx0XHRcdCYuZmEtc3Bpbm5lciB7XG5cdFx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5zdGF0dXMtYWN0aXZlIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuc3RhdHVzLWluYWN0aXZlIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuc3RhdHVzLWRvd25sb2FkIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmRpc2FibGVkIHtcblx0XHRcdFx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmxvYWRpbmcge1xuXG5cdFx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiLy8gQWJvdXQgV1BGb3JtcyAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtYWJvdXRcblxuJHBhZGRpbmctZGVmYXVsdDogMzBweDtcbiRib3JkZXI6IDFweCBzb2xpZCAjREREREREO1xuXG4vLyBAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcbi8vIFx0d2lkdGg6IDUwJTtcbi8vIH1cblxuLypcbid4cy1waG9uZSc6IDMyMHB4LFxuXHQncGhvbmUnOiA2MDBweCxcblx0J2lwYWQnOiA3NjhweCxcblx0J3RhYmxldCc6IDc4MnB4LFxuXHQnZGVza3RvcCc6IDk2MHB4LFxuKi9cblxuI3dwZm9ybXMtYWRtaW4tYWJvdXQge1xuXG5cdCosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuXHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24ge1xuXHRcdG1hcmdpbjogMCAyMHB4IDIwcHg7XG5cdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdGJvcmRlcjogJGJvcmRlcjtcblx0XHRsaW5lLWhlaWdodDogMjtcblxuXHRcdGgxLCBoMiwgaDMsIGg0LCBoNSB7XG5cdFx0XHRtYXJnaW4tdG9wOiAwO1xuXHRcdFx0cGFkZGluZy10b3A6IDA7XG5cdFx0XHRsaW5lLWhlaWdodDogMS42O1xuXHRcdH1cblxuXHRcdGgyIHtcblx0XHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHR9XG5cblx0XHRoMyB7XG5cdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdFx0Y29sb3I6ICMyMzI4MkM7XG5cdFx0fVxuXG5cdFx0dWwsIHAge1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblxuXHRcdFx0Ji5iaWdnZXJ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdH1cblx0XHRcdCYuc21hbGxlciB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdH1cblxuXHRcdFx0JjpsYXN0LWNoaWxkIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRociB7XG5cdFx0XHRtYXJnaW46ICRwYWRkaW5nLWRlZmF1bHQgMDtcblx0XHR9XG5cblx0XHRmaWd1cmUge1xuXHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblxuXHRcdFx0ZmlnY2FwdGlvbiB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0Y29sb3I6ICM4ODg4ODg7XG5cdFx0XHRcdG1hcmdpbi10b3A6IDVweDtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRsaW5lLWhlaWdodDogaW5pdGlhbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNDAge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0LzI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTYwIHtcblx0XHRcdHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLWRlZmF1bHQvMjtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRwYWRkaW5nLXJpZ2h0OiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHVsLmxpc3QtcGxhaW4ge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bC5saXN0LWZlYXR1cmVzIHtcblx0XHRcdGxpIC5mYSB7XG5cdFx0XHRcdGNvbG9yOiAjMmE5YjM5O1xuXHRcdFx0XHRtYXJnaW46IDAgOHB4IDAgMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZmEtc3RhciB7Y29sb3I6IGdvbGR9XG5cblx0XHQubm8tbWFyZ2luIHttYXJnaW46IDAgIWltcG9ydGFudH1cblx0XHQubm8tcGFkZGluZyB7cGFkZGluZzogMCAhaW1wb3J0YW50fVxuXHRcdC5jZW50ZXJlZCB7dGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWZpcnN0LWZvcm0ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1maXJzdC1mb3JtLXRleHQge1xuXHRcdFx0ZmxleDogMTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbGV4OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tZmlyc3QtZm9ybS12aWRlbyB7XG5cdFx0XHRpZnJhbWUge1xuXHRcdFx0XHRib3JkZXI6ICRib3JkZXI7XG5cdFx0XHR9XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8ge1xuXHRcdHBhZGRpbmc6IDA7XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tbWFpbixcblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tZXh0cmEge1xuXHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tZXh0cmEge1xuXG5cdFx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNTAge1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLW1haW4ge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0ZBRkFGQTtcblx0XHRcdGJvcmRlci1ib3R0b206ICRib3JkZXI7XG5cblx0XHRcdCYubm8tYm9yZGVyIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGgzLmNhbGwtdG8tYWN0aW9uIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IC0xMHB4O1xuXHRcdH1cblxuXHRcdHNwYW4ucHJpY2UtMjAtb2ZmIHtcblx0XHRcdGNvbG9yOiAjNkFCMjU1O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tc3F1YXNoZWQge1xuXHRcdG1hcmdpbi1ib3R0b206IDA7XG5cblx0XHQmOm5vdCg6bGFzdC1vZi10eXBlKSB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tcG9zdCB7XG5cblx0XHRoMiB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAtMTBweDtcblx0XHR9XG5cblx0XHRoMyB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxNXB4O1xuXHRcdH1cblxuXHRcdHA6bGFzdC1vZi10eXBlIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IDMwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTIwIHtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cdFx0XHR3aWR0aDogYXV0bztcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0d2lkdGg6IDI3MHB4O1xuXHRcdFx0fVxuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDIwJTtcblx0XHRcdFx0aW1nIHtcblx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tODAge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXHRcdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDIwcHggLSAyNzBweCk7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogODAlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tcG9zdC1saW5rIHtcblx0XHRcdHBhZGRpbmc6IDEwcHggJHBhZGRpbmctZGVmYXVsdC8yO1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0RGNzczOTtcblx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0bWFyZ2luLXRvcDogMTVweDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNCODVBMUI7XG5cdFx0XHR9XG5cblx0XHRcdC5mYSB7XG5cdFx0XHRcdGNvbG9yOiAjRURCQTlFO1xuXHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0XHRtYXJnaW4tbGVmdDogOHB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tdGFibGUge1xuXG5cdFx0dGFibGUge1xuXHRcdFx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblxuXHRcdFx0dHIge1xuXHRcdFx0XHR0ZCB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogJGJvcmRlcjtcblx0XHRcdFx0XHRib3JkZXItcmlnaHQ6ICRib3JkZXI7XG5cdFx0XHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXG5cdFx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdFx0Ym9yZGVyLXJpZ2h0OiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCY6bGFzdC1jaGlsZCB0ZCB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwIHtcblx0XHRcdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0XHRcdFx0YmFja2dyb3VuZC1zaXplOiAxNXB4IGF1dG87XG5cdFx0XHRcdGJhY2tncm91bmQtcG9zaXRpb246IDAgNnB4O1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0Ji5mZWF0dXJlcy1mdWxsIHtcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9hYm91dC9pY29uLWZ1bGwuc3ZnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQmLmZlYXR1cmVzLW5vbmUge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Fib3V0L2ljb24tbm9uZS5zdmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCYuZmVhdHVyZXMtcGFydGlhbCB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtcG9zaXRpb246IC0zcHggMDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDIzcHggYXV0bztcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Fib3V0L2ljb24tcGFydGlhbC5zdmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLW1haW4ge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdGgzIHtcblx0XHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdCAkcGFkZGluZy1kZWZhdWx0ICRwYWRkaW5nLWRlZmF1bHQgJHBhZGRpbmctZGVmYXVsdCoyO1xuXHRcdFx0fVxuXHRcdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTMzOmZpcnN0LWNoaWxkIGgzIHtcblx0XHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQjd3Bmb3Jtcy1hZG1pbi1hZGRvbnMge1xuXHRcdHBhZGRpbmc6IDAgJHBhZGRpbmctZGVmYXVsdDtcblxuXHRcdC5hZGRvbi1jb250YWluZXIge1xuXHRcdFx0cGFkZGluZzogMCAxMHB4O1xuXHRcdH1cblxuXHRcdC5hZGRvbi1pdGVtIHtcblxuXHRcdFx0LmRldGFpbHMge1xuXHRcdFx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdFx0fVxuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRwYWRkaW5nOiAxMHB4O1xuXG5cdFx0XHRcdCZbc3JjKj1cIi1taVwiXSB7XG5cdFx0XHRcdFx0cGFkZGluZzogMTNweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQuYWN0aW9uLWJ1dHRvbiAuYnV0dG9uIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDI2cHg7XG5cdFx0XHRcdGhlaWdodDogMjhweDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwIDEwcHggMXB4O1xuXHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjO1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xuXHRcdFx0XHRib3gtc2hhZG93OiAwIDFweCAwICNjY2NjY2M7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cblx0XHRcdFx0Jjpob3ZlciwgJjpmb2N1cyAge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmYWZhZmE7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdGNvbG9yOiAjMjMyODJkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5idXR0b24tcHJpbWFyeSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogIzAwODViYTtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6ICMwMDczYWEgIzAwNjc5OSAjMDA2Nzk5O1xuXHRcdFx0XHRcdGJveC1zaGFkb3c6IDAgMXB4IDAgIzAwNjc5OTtcblx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR0ZXh0LXNoYWRvdzogMCAtMXB4IDFweCAjMDA2Nzk5LCAxcHggMCAxcHggIzAwNjc5OSwgMCAxcHggMXB4ICMwMDY3OTksIC0xcHggMCAxcHggIzAwNjc5OTtcblxuXHRcdFx0XHRcdCY6aG92ZXIsICY6Zm9jdXMge1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZDogIzAwOGVjMjtcblx0XHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzAwNjc5OTtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5mYS1zcGlubmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuYnV0dG9uLXNlY29uZGFyeSB7XG5cdFx0XHRcdFx0Y29sb3I6ICM1NTU7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjY2NjY2NjO1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG5cdFx0XHRcdFx0Ym94LXNoYWRvdzogMCAxcHggMCAjY2NjY2NjO1xuXG5cdFx0XHRcdFx0Jjpob3ZlciwgJjpmb2N1cyAge1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZDogI2ZhZmFmYTtcblx0XHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdFx0XHRcdGNvbG9yOiAjMjMyODJkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuZGlzYWJsZWQge1xuXHRcdFx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiLy8gU2V0dGluZ3MgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLXNldHRpbmdzXG4vLyBUb29scyAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtdG9vbHNcbi53cGZvcm1zLWFkbWluLXNldHRpbmdzIHtcblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQvLyBTZXR0aW5nIHJvd3MsIGVnIGZpZWxkIHJvdy5cblx0LndwZm9ybXMtc2V0dGluZy1yb3cge1xuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU0O1xuXHRcdHBhZGRpbmc6IDMwcHggMDtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0bGluZS1oZWlnaHQ6IDEuMztcblxuXHRcdCY6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0XHRwYWRkaW5nLXRvcDogMTBweCAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPHRhYmxldFwiKSB7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDA7XG5cdFx0fVxuXG5cdFx0Ly8gU2VjdGlvbiBoZWFkaW5nLlxuXHRcdCYuc2VjdGlvbi1oZWFkaW5nIHtcblx0XHRcdHBhZGRpbmc6IDIwcHggMDtcblxuXHRcdFx0Ji5uby1kZXNjIHtcblx0XHRcdFx0aDQge1xuXHRcdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMDBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBUb29scyBmdWxsIHdpZHRoIGZpZWxkcy5cblx0XHQmLnRvb2xzIHtcblxuXHRcdFx0cCxcblx0XHRcdHA6Zmlyc3Qtb2YtdHlwZXtcblx0XHRcdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENoZWNrYm94IHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1jaGVja2JveCB7XG5cblx0XHRcdGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcblx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdG1hcmdpbjogMXB4IDAgMCAwO1xuXHRcdFx0fVxuXG5cdFx0XHQuZGVzYyB7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDAgMzBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBMaWNlbnNlIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1saWNlbnNlIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cdFx0XHR9XG5cblx0XHRcdHAudHlwZSB7XG5cdFx0XHRcdG1hcmdpbi10b3A6IDEycHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVGV4dC9udW1iZXIgc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LXRleHQsXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LW51bWJlciB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNlbGVjdCBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctc2VsZWN0IHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmFkaW8gc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LXJhZGlvIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cblx0XHRcdFx0aW5wdXRbdHlwZT1yYWRpb10ge1xuXHRcdFx0XHRcdG1hcmdpbjogLTNweCAxMHB4IDAgMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxhYmVsIHtcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDMwcHg7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBFbWFpbCBUZW1wbGF0ZSBzZXR0aW5nIGZpZWxkLlxuXHRcdCYjd3Bmb3Jtcy1zZXR0aW5nLXJvdy1lbWFpbC10ZW1wbGF0ZSB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXG5cdFx0XHRcdGxhYmVsOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0d2lkdGg6IDE1NXB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTgwcHg7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIDAgMTBweCAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Lm9wdGlvbi1kZWZhdWx0OmJlZm9yZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9zZXR0aW5ncy1lbWFpbC1odG1sLnBuZykgY2VudGVyIGNlbnRlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5vcHRpb24tbm9uZTpiZWZvcmUge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvc2V0dGluZ3MtZW1haWwtcGxhaW50ZXh0LnBuZykgY2VudGVyIGNlbnRlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJhZGlvIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1pbWFnZSB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXG5cdFx0XHRcdGltZyB7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdFx0XHRcdG1heC13aWR0aDogNDAwcHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb2xvciBwaWNrZXIgc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LWNvbG9yIHtcblxuXHRcdFx0LndwZm9ybXMtY29sb3ItcGlja2VyIHtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiA0MHB4O1xuXHRcdFx0fVxuXG5cdFx0XHQubWluaWNvbG9ycy1pbnB1dC1zd2F0Y2gge1xuXHRcdFx0XHR0b3A6IDdweDtcblx0XHRcdFx0bGVmdDogN3B4O1xuXHRcdFx0XHRoZWlnaHQ6IDIxcHg7XG5cdFx0XHRcdHdpZHRoOiAyMXB4O1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2VuZXJhbCBlbGVtZW50cy5cblx0XHRoNSB7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdH1cblxuXHRcdGg0IHtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0XHRtYXJnaW46IDAgMCA2cHggMDtcblx0XHR9XG5cblx0XHRoMyB7XG5cdFx0XHRmb250LXNpemU6IDI0cHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAxMnB4IDAgMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjM7XG5cblx0XHRcdCY6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogOHB4IDAgMDtcblx0XHRcdH1cblxuXHRcdFx0Ji5kZXNjIHtcblx0XHRcdFx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0Ji5kaXNjb3VudC1ub3RlIHtcblx0XHRcdFx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRcdFx0XHRjb2xvcjogIzY2NjtcblxuXHRcdFx0XHRzdHJvbmcge1xuXHRcdFx0XHRcdGNvbG9yOiBncmVlbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvcm0gZWxlbWVudHMuXG5cdFx0aW5wdXRbdHlwZT10ZXh0XSxcblx0XHRpbnB1dFt0eXBlPXBhc3N3b3JkXSxcblx0XHRpbnB1dFt0eXBlPW51bWJlcl0sXG5cdFx0c2VsZWN0IHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRcdGNvbG9yOiAjMzMzO1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHRcdHBhZGRpbmc6IDdweCAxMnB4O1xuXHRcdFx0bWFyZ2luOiAwIDEwcHggMCAwO1xuXHRcdFx0d2lkdGg6IDQwMHB4O1xuXHRcdFx0bWluLWhlaWdodDogMzVweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8ZGVza3RvcFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAzMDBweDtcblx0XHRcdH1cblxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogI2JiYjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpbnB1dFt0eXBlPW51bWJlcl0ge1xuXHRcdFx0d2lkdGg6IDEwMHB4O1xuXHRcdH1cblxuXHRcdHRleHRhcmVhIHtcblxuXHRcdH1cblxuXHRcdGJ1dHRvbiB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0fVxuXG5cdFx0LmNob2ljZXNqcy1zZWxlY3Qtd3JhcCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdG1heC13aWR0aDogNDAwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGRlc2t0b3BcIikge1xuXHRcdFx0XHR3aWR0aDogMzAwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnByb2dyZXNzLWJhciB7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgJG9yYW5nZTtcblx0XHRcdGhlaWdodDogMzBweDtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXG5cdFx0XHQmLmNvbXBsZXRlIHtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgJGdyZWVuO1xuXG5cdFx0XHRcdC5iYXIge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRncmVlbjtcblxuXHRcdFx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRcdFx0Y29udGVudDogbm9uZTtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5iYXIge1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0YmFja2dyb3VuZDogJG9yYW5nZTtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdC13ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblx0XHRcdFx0LW1vei10cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXHRcdFx0XHQtby10cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXHRcdFx0XHR0cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXG5cdFx0XHRcdEAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcyB7XG5cdFx0XHRcdFx0dG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA2MHB4IDA7IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdEAtbW96LWtleWZyYW1lcyBwcm9ncmVzcyB7XG5cdFx0XHRcdCAgdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA2MHB4IDA7IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdEBrZXlmcmFtZXMgcHJvZ3Jlc3Mge1xuXHRcdFx0XHQgIHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNjBweCAwOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRjb250ZW50OiAnJztcblx0XHRcdFx0XHRkaXNwbGF5OmJsb2NrO1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHR0b3A6IDA7XG5cdFx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0LXdlYmtpdC1hbmltYXRpb246IHByb2dyZXNzIDFzIGxpbmVhciBpbmZpbml0ZTtcblx0XHRcdFx0XHQtbW96LWFuaW1hdGlvbjogcHJvZ3Jlc3MgMXMgbGluZWFyIGluZmluaXRlO1xuXHRcdFx0XHRcdGFuaW1hdGlvbjogcHJvZ3Jlc3MgMXMgbGluZWFyIGluZmluaXRlO1xuXHRcdFx0XHRcdGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDYwcHggNjBweDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KC00NWRlZywgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJvdyBsYWJlbCAobGVmdCkuXG5cdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdGZsb2F0OiBsZWZ0O1xuXHRcdHdpZHRoOiAyMDBweDtcblx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8dGFibGV0XCIpIHtcblx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogMTVweDtcblx0XHR9XG5cblx0XHRsYWJlbCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUm93IGZpZWxkIChyaWdodCkuXG5cdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdG1hcmdpbjogMCAwIDAgMjAwcHg7XG5cdFx0bWF4LXdpZHRoOiA4MDBweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPHRhYmxldFwiKSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXHR9XG5cblx0cC5zdWJtaXQge1xuXHRcdG1hcmdpbjogMDtcblx0XHRwYWRkaW5nOiAyNXB4IDA7XG5cdH1cblxuXHQvLyBHZW5lcmljIGluZm8vY29kZSBpbmZvcm1hdGlvbi5cblx0LmluZm8tYXJlYSxcblx0LnByZS1lcnJvciB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdFx0aGVpZ2h0OiA0NTBweDtcblx0XHRmb250LWZhbWlseTogTWVubG8sTW9uYWNvLG1vbm9zcGFjZTtcblx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0d2hpdGUtc3BhY2U6IHByZTtcblx0XHRvdmVyZmxvdzogYXV0bztcblx0XHRwYWRkaW5nOiAyMHB4O1xuXHR9XG5cblx0LnByZS1lcnJvciB7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdG1heC1oZWlnaHQ6IDI1MHB4O1xuXHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdH1cblxuXHQvLyBDaGVja2JveCBtdWx0aS1zZWxlY3QgY29sdW1ucy5cblx0LmNoZWNrYm94LW11bHRpc2VsZWN0LWNvbHVtbnMge1xuXHRcdG1heC13aWR0aDogNjAwcHg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0JjphZnRlciB7XG5cdFx0XHRjb250ZW50OiBcIi5cIjtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDA7XG5cdFx0XHRmb250LXNpemU6IDA7XG5cdFx0XHRjbGVhcjogYm90aDtcblx0XHRcdG1pbi1oZWlnaHQ6IDA7XG5cdFx0XHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdFx0fVxuXG5cdFx0JjpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogXCJcXGYwZWNcIjtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMjBweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0dGV4dC1yZW5kZXJpbmc6IGF1dG87XG5cdFx0XHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0XHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDEzMHB4O1xuXHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0bWFyZ2luOiAwIDAgMCAtMTBweDtcblx0XHR9XG5cblx0XHQuaGVhZGVyIHtcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAwIDAgNXB4IDA7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXG5cdFx0LmZpcnN0LWNvbHVtbixcblx0XHQuc2Vjb25kLWNvbHVtbiB7XG5cdFx0XHR3aWR0aDogNDUlO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0fVxuXG5cdFx0LmZpcnN0LWNvbHVtbiB7XG5cblx0XHR9XG5cblx0XHQuc2Vjb25kLWNvbHVtbiB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHRcdHVsIHtcblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdGhlaWdodDogMjUwcHg7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0b3ZlcmZsb3cteTogYXV0bztcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggI2VlZSBzb2xpZDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdFx0bGFiZWwge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDMycHg7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcblxuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZTtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwiXFxmMGM4XCI7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2RkZDtcblx0XHRcdFx0XHRcdGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE2cHgvMSBGb250QXdlc29tZTtcblx0XHRcdFx0XHRcdHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuXHRcdFx0XHRcdFx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdFx0XHRcdFx0XHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0dG9wOiAxMnB4O1xuXHRcdFx0XHRcdFx0bGVmdDogMTBweDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmNoZWNrZWQge1xuXHRcdFx0XHRcdFx0b3BhY2l0eTogMC42O1xuXG5cdFx0XHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwiXFxmMTRhXCI7XG5cdFx0XHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5wdXQge1xuXHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYWxsIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0bWFyZ2luOiAxMHB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBPdGhlciBJbXBvcnRlcnMuIChUb29scylcblx0I3dwZm9ybXMtaW1wb3J0ZXItYW5hbHl6ZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblxuXHRcdC5wcm9jZXNzLWNvdW50LFxuXHRcdHAge1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdH1cblxuXHRcdC51cGdyYWRlIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdGg1IHtcblx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDMwcHggMCAyMHB4IDA7XG5cdFx0XHR9XG5cblx0XHRcdGhyIHtcblx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRcdFx0bWFyZ2luOiA0MHB4IDA7XG5cdFx0XHR9XG5cblx0XHRcdC53cGZvcm1zLWJ0biB7XG5cdFx0XHRcdG1hcmdpbi1yaWdodDogMTBweDtcblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRsaSB7XG5cdFx0XHRcdFx0bGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAxNHB4O1xuXG5cdFx0XHRcdFx0Ji5mb3JtIHtcblx0XHRcdFx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblx0XHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAwO1xuXHRcdFx0XHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBFeHBvcnQgZW50cmllcy4gKFRvb2xzKVxuXHQjd3Bmb3Jtcy10b29scy1lbnRyaWVzLWV4cG9ydCB7XG5cblx0XHRoNSB7XG5cdFx0XHRjbGVhcjogYm90aDtcblx0XHRcdG1hcmdpbjogMjBweCAwIDEwcHggMDtcblx0XHR9XG5cblx0XHRsYWJlbCB7XG5cdFx0XHRjbGVhcjogYm90aDtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0bWFyZ2luOiAzcHggMCAzcHggMDtcblx0XHR9XG5cblx0XHQuY2hvaWNlc2pzLXNlbGVjdC13cmFwIHtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0LmNob2ljZXMge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCN3cGZvcm1zLXRvb2xzLWVudHJpZXMtZXhwb3J0LXNlbGVjdGZvcm0tc3Bpbm5lciB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDZweDtcblx0XHRcdHJpZ2h0OiAtMzBweDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdHdpZHRoOiAyMDBweDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1zZWFyY2gtYm94LWZpZWxkIHtcblx0XHRcdHdpZHRoOiAyMDBweDtcblx0XHR9XG5cdFx0LndwZm9ybXMtc2VhcmNoLWJveC1jb21wYXJpc29uIHtcblx0XHRcdHdpZHRoOiAxNDBweDtcblx0XHR9XG5cdFx0LndwZm9ybXMtc2VhcmNoLWJveC10ZXJtIHtcblx0XHRcdHdpZHRoOiAzMDBweDtcblx0XHR9XG5cblx0XHRzZWN0aW9uIHtcblx0XHRcdG1hcmdpbi10b3A6IDIwcHg7XG5cdFx0fVxuXG5cdFx0aWZyYW1lIHtcblx0XHRcdHdpZHRoOiAwO1xuXHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWJ0bi10ZXh0IHtcblx0XHRcdG9wYWNpdHk6IDE7XG5cdFx0XHR0cmFuc2l0aW9uOiBhbGwgLjVzO1xuXHRcdH1cblx0XHQud3Bmb3Jtcy1idG4tc3Bpbm5lciB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRsZWZ0OiA1MCU7XG5cdFx0XHR0b3A6IDUwJTtcblx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXHRcdFx0b3BhY2l0eTogMDtcblx0XHRcdHRyYW5zaXRpb246IGFsbCAuNXM7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYnRuLXNwaW5uZXItb24ge1xuXHRcdFx0LndwZm9ybXMtYnRuLXRleHQge1xuXHRcdFx0XHRvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG5cdFx0XHRcdHRyYW5zaXRpb246IGFsbCAuNXM7XG5cdFx0XHR9XG5cdFx0XHQud3Bmb3Jtcy1idG4tc3Bpbm5lciB7XG5cdFx0XHRcdG9wYWNpdHk6IDEgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogYWxsIC41cztcblx0XHRcdH1cblx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHRcdG9wYWNpdHk6IDAuNzU7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYnRuLXNwaW5uZXItb246aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2UyNzczMDtcblx0XHRcdGJvcmRlci1jb2xvcjogI2UyNzczMDtcblx0XHR9XG5cblx0XHQjd3Bmb3Jtcy10b29scy1lbnRyaWVzLWV4cG9ydC1wcm9jZXNzLW1zZyxcblx0XHQjd3Bmb3Jtcy10b29scy1lbnRyaWVzLWV4cG9ydC1zZWxlY3Rmb3JtLW1zZyB7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMjJBMEQwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNWVtO1xuXHRcdFx0bWFyZ2luOiAyMHB4IDAgMCAwO1xuXHRcdFx0cGFkZGluZzogMTBweDtcblxuXHRcdFx0Ji53cGZvcm1zLWVycm9yIHtcblx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjZGMzMjMyO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdCN3cGZvcm1zLWltcG9ydGVyLXByb2Nlc3Mge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHQucHJvY2Vzcy1jb3VudCxcblx0XHQucHJvY2Vzcy1jb21wbGV0ZWQge1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdH1cblxuXHRcdC5wcm9jZXNzLWNvbXBsZXRlZCB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5zdGF0dXMge1xuXHRcdFx0bWFyZ2luOiAyMHB4IDAgMzBweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0bWF4LWhlaWdodDogODAwcHg7XG5cdFx0XHRvdmVyZmxvdy15OiBzY3JvbGw7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXG5cdFx0XHQuaXRlbS13cmFwIHtcblxuXHRcdFx0fVxuXG5cdFx0XHQuaXRlbSB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0XHRwYWRkaW5nOiAyMHB4O1xuXG5cdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRcdFx0bWFyZ2luOiAxMnB4IDAgMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHVsIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRcdFx0bWFyZ2luOiAxMnB4IDAgMCAxNnB4O1xuXG5cdFx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdFx0bGlzdC1zdHlsZTogZGlzYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuc3RhdHVzLWljb24ge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRtYXJnaW46IDAgMTBweCAwIDA7XG5cblx0XHRcdFx0XHQmLmZhLWluZm8tY2lyY2xlIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjMDBhMGQyXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5mYS1jaGVjayB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzQ2YjQ1MFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNmZmI5MDBcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmZhLXRpbWVzLFxuXHRcdFx0XHRcdCYuZmEtZXhjbGFtYXRpb24tY2lyY2xlIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZGMzMjMyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5uYW1lIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuYWN0aW9ucyB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdGZsb2F0OiByaWdodDtcblxuXHRcdFx0XHRcdC5zZXAge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTGl0ZSB1cGdyYWRlLlxuXHQuc2V0dGluZ3MtbGl0ZS1jdGF7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGFkYWRhO1xuXHRcdHBhZGRpbmc6IDI1cHggMjBweDtcblx0XHRtYXJnaW46IDEwcHggMCAwIDA7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0LmRpc21pc3Mge1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAxMHB4O1xuXHRcdFx0cmlnaHQ6IDEwcHg7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHR9XG5cblx0XHRoNSB7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHR9XG5cblx0XHRoNiB7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblxuXHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHR9XG5cblx0XHRcdGEge1xuXHRcdFx0XHRjb2xvcjogJG9yYW5nZTtcblxuXHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRjb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHR9XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwIDAgMnB4IDE2cHg7XG5cdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogJysnO1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHR0b3A6IC0xcHg7XG5cdFx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5saXN0IHtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHggMDtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXHRcdFx0bWF4LXdpZHRoOiA5MDBweDtcblx0XHR9XG5cblx0XHQuZ3JlZW4ge1xuXHRcdFx0Y29sb3I6ICMyMTg5MDA7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdH1cblxuXHRcdC5mYS1zdGFyIHtcblx0XHRcdGNvbG9yOiAjZmY5ODJkO1xuXHRcdH1cblx0fVxufVxuIiwiLy8gSW50ZWdyYXRpb25zIHRhYiBjb250ZW50LlxuLy8gTGVnYWN5IENTUyBhbmQgc2hvdWxkIGJlIGNsZWFuZWQgdXAgd2hlbiB0aW1lIHBlcm1pdHMuXG4jd3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlcnMge1xuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyIHtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcblx0XHRwYWRkaW5nOiAzMHB4IDA7XG5cblx0XHQmLmZvY3VzLW91dCB7XG5cdFx0XHRvcGFjaXR5OiAwLjQ7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItaGVhZGVyIHtcblx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1sb2dvIHtcblx0XHRmbG9hdDogbGVmdDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHQuZmEge1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRtYXJnaW46IC05cHggMCAwIDA7XG5cdFx0XHRsZWZ0OiAxMHB4O1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0fVxuXG5cdFx0aW1nIHtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0bWF4LXdpZHRoOiA5MHB4O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXJnaW46IDAgMCAwIDQwcHg7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItaW5mbyB7XG5cdFx0bWFyZ2luOiAwIDAgMCAxNjBweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZzogMjBweCAwIDA7XG5cblx0XHRoMyB7XG5cdFx0XHRtYXJnaW46IDAgMCAxMHB4IDA7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdH1cblxuXHRcdC5jb25uZWN0ZWQtaW5kaWNhdG9yIHtcblx0XHRcdGNvbG9yOiAjODNjMTFmO1xuXHRcdFx0d2lkdGg6IDEzNXB4O1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgIzgzYzExZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRcdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAyOHB4O1xuXHRcdFx0cmlnaHQ6IDA7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblx0fVxuXG5cdC5jb25uZWN0ZWQgLndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItaW5mbyAuY29ubmVjdGVkLWluZGljYXRvciB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cyB7XG5cdFx0bWFyZ2luOiAwIDAgMCAxNjBweDtcblx0XHRkaXNwbGF5OiBub25lO1xuXHRcdG1heC13aWR0aDogODQwcHg7XG5cdH1cblxuXHQuZm9jdXMtaW4gLndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtbGlzdCB1bCB7XG5cdFx0cGFkZGluZzogMDtcblx0XHRtYXJnaW46IDA7XG5cblx0XHRsaSB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDEwcHggMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblxuXHRcdFx0JjpmaXJzdC1vZi10eXBlIHtcblx0XHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHR9XG5cblx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMTZweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzcGFuLmxhYmVsIHtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHR9XG5cblx0XHRzcGFuLmRhdGUge1xuXHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiAzNSU7XG5cdFx0fVxuXG5cdFx0c3Bhbi5yZW1vdmUge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDE1JTtcblx0XHRcdHRleHQtYWxpZ246IHJpZ2h0XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRsaWdodEJsdWU7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgJGJsdWU7XG5cblx0XHRpbnB1dFt0eXBlPXRleHRdIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRcdGNvbG9yOiAjMzMzO1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogNXB4IDA7XG5cdFx0XHR3aWR0aDogNDAwcHg7XG5cdFx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXG5cdFx0XHQmOmZvY3VzIHtcblx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjYmJiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC5mb2N1cy1pbiAud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0ICB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0IC5mYSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWNvbm5lY3QgcCxcblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMgcCB7XG5cdFx0bWFyZ2luOiAwIDAgMTVweCAwO1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0fVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBR0FBOztpQ0FFaUM7QUFxQmpDLEFBQUEsUUFBUSxDQUFjO0VBQ3BCLFFBQVEsRUFBRSxRQUFRO0VBQ2xCLGFBQWEsRUFqQkssSUFBSTtFQWtCdEIsU0FBUyxFQXJCWSxJQUFJO0NBZ0MxQjs7QUFkRCxBQUlFLFFBSk0sQUFJTCxNQUFNLENBQUM7RUFBRSxPQUFPLEVBQUUsSUFBSTtDQUFJOztBQUo3QixBQUtFLFFBTE0sQUFLTCxXQUFXLENBQUM7RUFBRSxhQUFhLEVBQUUsQ0FBQztDQUFJOztBQUxyQyxBQU9DLFFBUE8sQUFNTCxZQUFZLENBQ2QsZUFBZSxFQVBoQixRQUFRLEFBTUwsWUFBWSxDQUNHLGVBQWUsQ0FBMkI7RUFDekQsZ0JBQWdCLEVBbkJTLE9BQU87RUFvQmhDLE1BQU0sRUFBRSxXQUFXO0VBQ25CLFdBQVcsRUFBRSxJQUFJO0NBQ2xCOztBQVhGLEFBWUMsUUFaTyxBQU1MLFlBQVksQ0FNZCxjQUFjLENBQWM7RUFBRSxNQUFNLEVBQUUsV0FBVztDQUFJOztBQUl0RCxBQUFBLFFBQVEsQ0FBQSxBQUFBLFNBQUMsRUFBVyxZQUFZLEFBQXZCLEVBQXNDO0VBQzdDLE1BQU0sRUFBRSxPQUFPO0NBeURoQjs7QUExREQsQUFHRSxRQUhNLENBQUEsQUFBQSxT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QUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFB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 */
|
assets/css/admin.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:none}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#EAEAEA;cursor:not-allowed;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices[data-type*="select-one"]{cursor:pointer}.choices[data-type*="select-one"] .choices__inner{padding-bottom:3.0px}.choices[data-type*="select-one"] .choices__input{display:block;width:100% !important;padding:10px !important;border-bottom:1px solid #DDDDDD !important;background-color:#FFFFFF;margin:0 !important}.choices[data-type*="select-one"] .choices__button{background-image:url("../images/cross-inverse.svg");padding:0;background-size:8px;height:100%;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*="select-one"] .choices__button:hover,.choices[data-type*="select-one"] .choices__button:focus{opacity:1}.choices[data-type*="select-one"] .choices__button:focus{box-shadow:0px 0px 0px 2px #0e6cad}.choices[data-type*="select-one"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-one"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-one"][dir="rtl"]:after{left:11.5px;right:auto}.choices[data-type*="select-one"][dir="rtl"] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*="select-multiple"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:18px;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-multiple"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-multiple"] .choices__inner,.choices[data-type*="text"] .choices__inner{cursor:text}.choices[data-type*="select-multiple"] .choices__button,.choices[data-type*="text"] .choices__button{position:relative;display:inline-block;margin-top:0;margin-right:-4px;margin-bottom:0;margin-left:8px;padding-left:16px;border-left:1px solid #0a4f7e;background-image:url("../images/cross.svg");background-size:8px;width:8px;line-height:1;opacity:.75}.choices[data-type*="select-multiple"] .choices__button:hover,.choices[data-type*="select-multiple"] .choices__button:focus,.choices[data-type*="text"] .choices__button:hover,.choices[data-type*="text"] .choices__button:focus{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#fff;padding:4px 7.5px 1px;border:1px solid #DDDDDD;border-radius:3px;font-size:14px;min-height:35px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:3px 3px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 3px 3px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%}[dir="rtl"] .choices__list--single{padding-right:4px;padding-left:16px}.choices__list--single .choices__item{width:100%}.choices__list--multiple{display:inline}.choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:3px;padding:3px 10px;font-size:12px;font-weight:500;margin-right:4px;margin-top:0px;margin-bottom:3px;background-color:#0e6cad;border:1px solid #0c5d95;color:#FFFFFF;word-break:break-all}.choices__list--multiple .choices__item[data-deletable]{padding-right:5px}[dir="rtl"] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px}.choices__list--multiple .choices__item.is-highlighted{background-color:#0c5d95;border:1px solid #0a4f7e}.is-disabled .choices__list--multiple .choices__item{background-color:#aaaaaa;border:1px solid #919191}.choices__list--dropdown{display:none;z-index:1;position:absolute;width:100%;background-color:#FFFFFF;border:1px solid #DDDDDD;top:100%;margin-top:-1px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow:hidden;word-break:break-all}.choices__list--dropdown.is-active{display:block}.is-open .choices__list--dropdown{border-color:#b7b7b7}.is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:.25rem .25rem 0 0}.choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}.choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px}[dir="rtl"] .choices__list--dropdown .choices__item{text-align:right}@media (min-width: 640px){.choices__list--dropdown .choices__item--selectable{padding-right:100px}.choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%)}[dir="rtl"] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px}[dir="rtl"] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px}}.choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2}.choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:.5}.choices__item{cursor:default}.choices__item--selectable{cursor:pointer}.choices__item--disabled{cursor:not-allowed;user-select:none;opacity:.5}.choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray}.choices__button{text-indent:-9999px;-webkit-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer}.choices__button:focus{outline:none}.choices__input{display:inline-block;vertical-align:baseline !important;background-color:#f9f9f9;font-size:14px;margin:0 !important;border:0 !important;border-radius:0 !important;max-width:100%;min-height:0 !important;width:auto !important;padding:4px 0 4px 2px !important}.choices__input:focus{outline:0}[dir="rtl"] .choices__input{padding-right:2px;padding-left:0}.choices__placeholder{opacity:.5}.wpforms-admin-page .wpforms-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;box-shadow:none}.wpforms-admin-page .wpforms-btn-block{display:block;width:100%}.wpforms-admin-page .wpforms-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wpforms-admin-page .wpforms-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wpforms-admin-page .wpforms-btn-orange{background-color:#e27730;border-color:#e27730;color:#fff}.wpforms-admin-page .wpforms-btn-orange:hover{background-color:#b85a1b;border-color:#b85a1b}.wpforms-admin-page .wpforms-btn-grey{background-color:#eee;border-color:#ccc;color:#666}.wpforms-admin-page .wpforms-btn-grey:hover{background-color:#d7d7d7;border-color:#ccc;color:#444}.wpforms-admin-page .wpforms-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wpforms-admin-page .wpforms-btn-light-grey:hover{background-color:#eee;color:#444}.wpforms-admin-page .wpforms-btn-trans-green{background-color:none;color:#2a9b39}.wpforms-admin-page .wpforms-btn-trans-green:hover{background-color:#2a9b39;color:#fff}.wpforms-admin-page .wpforms-btn-trans-green .underline{position:relative}.wpforms-admin-page .wpforms-btn-trans-green .underline:after{content:" ";border-bottom:1px dashed #2a9b39;position:absolute;bottom:-5px;left:0;width:100%}.wpforms-admin-page .wpforms-btn-trans-green .dashicons{height:18px}body div.jconfirm *,body div.jconfirm *::before,body div.jconfirm *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,0.4);top:8px;right:8px}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover{color:rgba(0,0,0,0.8)}body div.jconfirm div.jconfirm-box div.jconfirm-title-c{margin:0 0 26px 0 !important;padding:0 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c{margin:0 !important;color:#c4c4c4 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-title{display:block;color:#333}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c+span.jconfirm-title{margin-top:20px !important}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:26px;display:block}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:inherit}body div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#555;line-height:1.4}body div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p{font-size:18px;padding:0 20px}body div.jconfirm div.jconfirm-box div.jconfirm-content p{margin:0 0 16px;font-size:16px;line-height:1.5}body div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type{margin:0}body div.jconfirm div.jconfirm-box div.jconfirm-content p.large{font-size:18px}body div.jconfirm div.jconfirm-box div.jconfirm-content p.small{font-size:14px}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased{font-size:12px;color:#ccc;text-decoration:none}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover{text-decoration:underline}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased{display:block;font-size:12px;color:#aaa;text-decoration:none;padding-top:20px}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover{color:#999;text-decoration:underline}body div.jconfirm div.jconfirm-box .discount-note{text-align:center;margin:30px 0 0}body div.jconfirm div.jconfirm-box .discount-note p{background-color:#faffac;margin:0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}body div.jconfirm div.jconfirm-box .discount-note p:after{content:'\f058';display:inline-block;font:normal normal normal 14px/1 FontAwesome;background-color:#fff;font-size:26px;border-radius:50%;padding:5px 6px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:-20px;right:50%;margin-right:-18px;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note span{font-weight:700;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note a{color:#aaa;display:block;margin-top:12px}body div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode{margin:20px 0;text-align:center;font-size:24px;padding:8px 5px}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode:disabled{color:#333}body div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#e27730;color:#fff;outline:none}body div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#b85a1b;border-color:#b85a1b}body div.jconfirm div.jconfirm-box button.btn-default{color:#666}body div.jconfirm div.jconfirm-box .error{display:none;color:red}body div.jconfirm div.jconfirm-box .wpforms-error{border:1px solid #ebccd1 !important}body div.jconfirm div.jconfirm-box .jconfirm-title-c .jconfirm-icon-c{-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}body .choices{text-align:left}body .choices input[type=text].choices__input{display:inline-block !important}.wpforms-admin-page .wpforms-alert{padding:16px;margin-bottom:18px;border:1px solid transparent}.wpforms-admin-page .wpforms-alert h4{margin-top:0;color:inherit}.wpforms-admin-page .wpforms-alert p{margin:0 0 15px 0}.wpforms-admin-page .wpforms-alert p:last-of-type{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-nomargin{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-small{font-size:12px}.wpforms-admin-page .wpforms-alert.wpforms-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wpforms-admin-page .wpforms-alert.wpforms-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wpforms-admin-page .wpforms-alert.wpforms-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wpforms-admin-page .wpforms-alert.wpforms-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wpforms-flag{width:16px;height:16px;background:url(../images/flags.png) no-repeat;display:inline-block}.wpforms-flag.wpforms-flag-ad{background-position:-16px 0}.wpforms-flag.wpforms-flag-ae{background-position:-32px 0}.wpforms-flag.wpforms-flag-af{background-position:-48px 0}.wpforms-flag.wpforms-flag-ag{background-position:-64px 0}.wpforms-flag.wpforms-flag-ai{background-position:-80px 0}.wpforms-flag.wpforms-flag-al{background-position:-96px 0}.wpforms-flag.wpforms-flag-am{background-position:-112px 0}.wpforms-flag.wpforms-flag-an{background-position:-128px 0}.wpforms-flag.wpforms-flag-ao{background-position:-144px 0}.wpforms-flag.wpforms-flag-ar{background-position:-160px 0}.wpforms-flag.wpforms-flag-as{background-position:-176px 0}.wpforms-flag.wpforms-flag-at{background-position:-192px 0}.wpforms-flag.wpforms-flag-au{background-position:-208px 0}.wpforms-flag.wpforms-flag-aw{background-position:-224px 0}.wpforms-flag.wpforms-flag-az{background-position:0 -16px}.wpforms-flag.wpforms-flag-ba{background-position:-16px -16px}.wpforms-flag.wpforms-flag-bb{background-position:-32px -16px}.wpforms-flag.wpforms-flag-bd{background-position:-48px -16px}.wpforms-flag.wpforms-flag-be{background-position:-64px -16px}.wpforms-flag.wpforms-flag-bf{background-position:-80px -16px}.wpforms-flag.wpforms-flag-bg{background-position:-96px -16px}.wpforms-flag.wpforms-flag-bh{background-position:-112px -16px}.wpforms-flag.wpforms-flag-bi{background-position:-128px -16px}.wpforms-flag.wpforms-flag-bj{background-position:-144px -16px}.wpforms-flag.wpforms-flag-bm{background-position:-160px -16px}.wpforms-flag.wpforms-flag-bn{background-position:-176px -16px}.wpforms-flag.wpforms-flag-bo{background-position:-192px -16px}.wpforms-flag.wpforms-flag-br{background-position:-208px -16px}.wpforms-flag.wpforms-flag-bs{background-position:-224px -16px}.wpforms-flag.wpforms-flag-bt{background-position:0 -32px}.wpforms-flag.wpforms-flag-bw{background-position:-16px -32px}.wpforms-flag.wpforms-flag-by{background-position:-32px -32px}.wpforms-flag.wpforms-flag-bz{background-position:-48px -32px}.wpforms-flag.wpforms-flag-ca{background-position:-64px -32px}.wpforms-flag.wpforms-flag-cd{background-position:-80px -32px}.wpforms-flag.wpforms-flag-cf{background-position:-96px -32px}.wpforms-flag.wpforms-flag-cg{background-position:-112px -32px}.wpforms-flag.wpforms-flag-ch{background-position:-128px -32px}.wpforms-flag.wpforms-flag-ci{background-position:-144px -32px}.wpforms-flag.wpforms-flag-ck{background-position:-160px -32px}.wpforms-flag.wpforms-flag-cl{background-position:-176px -32px}.wpforms-flag.wpforms-flag-cm{background-position:-192px -32px}.wpforms-flag.wpforms-flag-cn{background-position:-208px -32px}.wpforms-flag.wpforms-flag-co{background-position:-224px -32px}.wpforms-flag.wpforms-flag-cr{background-position:0 -48px}.wpforms-flag.wpforms-flag-cu{background-position:-16px -48px}.wpforms-flag.wpforms-flag-cv{background-position:-32px -48px}.wpforms-flag.wpforms-flag-cy{background-position:-48px -48px}.wpforms-flag.wpforms-flag-cz{background-position:-64px -48px}.wpforms-flag.wpforms-flag-de{background-position:-80px -48px}.wpforms-flag.wpforms-flag-dj{background-position:-96px -48px}.wpforms-flag.wpforms-flag-dk{background-position:-112px -48px}.wpforms-flag.wpforms-flag-dm{background-position:-128px -48px}.wpforms-flag.wpforms-flag-do{background-position:-144px -48px}.wpforms-flag.wpforms-flag-dz{background-position:-160px -48px}.wpforms-flag.wpforms-flag-ec{background-position:-176px -48px}.wpforms-flag.wpforms-flag-ee{background-position:-192px -48px}.wpforms-flag.wpforms-flag-eg{background-position:-208px -48px}.wpforms-flag.wpforms-flag-eh{background-position:-224px -48px}.wpforms-flag.wpforms-flag-er{background-position:0 -64px}.wpforms-flag.wpforms-flag-es{background-position:-16px -64px}.wpforms-flag.wpforms-flag-et{background-position:-32px -64px}.wpforms-flag.wpforms-flag-fi{background-position:-48px -64px}.wpforms-flag.wpforms-flag-fj{background-position:-64px -64px}.wpforms-flag.wpforms-flag-fm{background-position:-80px -64px}.wpforms-flag.wpforms-flag-fo{background-position:-96px -64px}.wpforms-flag.wpforms-flag-fr{background-position:-112px -64px}.wpforms-flag.wpforms-flag-ga{background-position:-128px -64px}.wpforms-flag.wpforms-flag-gb{background-position:-144px -64px}.wpforms-flag.wpforms-flag-gd{background-position:-160px -64px}.wpforms-flag.wpforms-flag-ge{background-position:-176px -64px}.wpforms-flag.wpforms-flag-gg{background-position:-192px -64px}.wpforms-flag.wpforms-flag-gh{background-position:-208px -64px}.wpforms-flag.wpforms-flag-gi{background-position:-224px -64px}.wpforms-flag.wpforms-flag-gl{background-position:0 -80px}.wpforms-flag.wpforms-flag-gm{background-position:-16px -80px}.wpforms-flag.wpforms-flag-gn{background-position:-32px -80px}.wpforms-flag.wpforms-flag-gp{background-position:-48px -80px}.wpforms-flag.wpforms-flag-gq{background-position:-64px -80px}.wpforms-flag.wpforms-flag-gr{background-position:-80px -80px}.wpforms-flag.wpforms-flag-gt{background-position:-96px -80px}.wpforms-flag.wpforms-flag-gu{background-position:-112px -80px}.wpforms-flag.wpforms-flag-gw{background-position:-128px -80px}.wpforms-flag.wpforms-flag-gy{background-position:-144px -80px}.wpforms-flag.wpforms-flag-hk{background-position:-160px -80px}.wpforms-flag.wpforms-flag-hn{background-position:-176px -80px}.wpforms-flag.wpforms-flag-hr{background-position:-192px -80px}.wpforms-flag.wpforms-flag-ht{background-position:-208px -80px}.wpforms-flag.wpforms-flag-hu{background-position:-224px -80px}.wpforms-flag.wpforms-flag-id{background-position:0 -96px}.wpforms-flag.wpforms-flag-ie{background-position:-16px -96px}.wpforms-flag.wpforms-flag-il{background-position:-32px -96px}.wpforms-flag.wpforms-flag-im{background-position:-48px -96px}.wpforms-flag.wpforms-flag-in{background-position:-64px -96px}.wpforms-flag.wpforms-flag-iq{background-position:-80px -96px}.wpforms-flag.wpforms-flag-ir{background-position:-96px -96px}.wpforms-flag.wpforms-flag-is{background-position:-112px -96px}.wpforms-flag.wpforms-flag-it{background-position:-128px -96px}.wpforms-flag.wpforms-flag-je{background-position:-144px -96px}.wpforms-flag.wpforms-flag-jm{background-position:-160px -96px}.wpforms-flag.wpforms-flag-jo{background-position:-176px -96px}.wpforms-flag.wpforms-flag-jp{background-position:-192px -96px}.wpforms-flag.wpforms-flag-ke{background-position:-208px -96px}.wpforms-flag.wpforms-flag-kg{background-position:-224px -96px}.wpforms-flag.wpforms-flag-kh{background-position:0 -112px}.wpforms-flag.wpforms-flag-ki{background-position:-16px -112px}.wpforms-flag.wpforms-flag-km{background-position:-32px -112px}.wpforms-flag.wpforms-flag-kn{background-position:-48px -112px}.wpforms-flag.wpforms-flag-kp{background-position:-64px -112px}.wpforms-flag.wpforms-flag-kr{background-position:-80px -112px}.wpforms-flag.wpforms-flag-kw{background-position:-96px -112px}.wpforms-flag.wpforms-flag-ky{background-position:-112px -112px}.wpforms-flag.wpforms-flag-kz{background-position:-128px -112px}.wpforms-flag.wpforms-flag-la{background-position:-144px -112px}.wpforms-flag.wpforms-flag-lb{background-position:-160px -112px}.wpforms-flag.wpforms-flag-lc{background-position:-176px -112px}.wpforms-flag.wpforms-flag-li{background-position:-192px -112px}.wpforms-flag.wpforms-flag-lk{background-position:-208px -112px}.wpforms-flag.wpforms-flag-lr{background-position:-224px -112px}.wpforms-flag.wpforms-flag-ls{background-position:0 -128px}.wpforms-flag.wpforms-flag-lt{background-position:-16px -128px}.wpforms-flag.wpforms-flag-lu{background-position:-32px -128px}.wpforms-flag.wpforms-flag-lv{background-position:-48px -128px}.wpforms-flag.wpforms-flag-ly{background-position:-64px -128px}.wpforms-flag.wpforms-flag-ma{background-position:-80px -128px}.wpforms-flag.wpforms-flag-mc{background-position:-96px -128px}.wpforms-flag.wpforms-flag-md{background-position:-112px -128px}.wpforms-flag.wpforms-flag-me{background-position:-128px -128px}.wpforms-flag.wpforms-flag-mg{background-position:-144px -128px}.wpforms-flag.wpforms-flag-mh{background-position:-160px -128px}.wpforms-flag.wpforms-flag-mk{background-position:-176px -128px}.wpforms-flag.wpforms-flag-ml{background-position:-192px -128px}.wpforms-flag.wpforms-flag-mm{background-position:-208px -128px}.wpforms-flag.wpforms-flag-mn{background-position:-224px -128px}.wpforms-flag.wpforms-flag-mo{background-position:0 -144px}.wpforms-flag.wpforms-flag-mq{background-position:-16px -144px}.wpforms-flag.wpforms-flag-mr{background-position:-32px -144px}.wpforms-flag.wpforms-flag-ms{background-position:-48px -144px}.wpforms-flag.wpforms-flag-mt{background-position:-64px -144px}.wpforms-flag.wpforms-flag-mu{background-position:-80px -144px}.wpforms-flag.wpforms-flag-mv{background-position:-96px -144px}.wpforms-flag.wpforms-flag-mw{background-position:-112px -144px}.wpforms-flag.wpforms-flag-mx{background-position:-128px -144px}.wpforms-flag.wpforms-flag-my{background-position:-144px -144px}.wpforms-flag.wpforms-flag-mz{background-position:-160px -144px}.wpforms-flag.wpforms-flag-na{background-position:-176px -144px}.wpforms-flag.wpforms-flag-nc{background-position:-192px -144px}.wpforms-flag.wpforms-flag-ne{background-position:-208px -144px}.wpforms-flag.wpforms-flag-ng{background-position:-224px -144px}.wpforms-flag.wpforms-flag-ni{background-position:0 -160px}.wpforms-flag.wpforms-flag-nl{background-position:-16px -160px}.wpforms-flag.wpforms-flag-no{background-position:-32px -160px}.wpforms-flag.wpforms-flag-np{background-position:-48px -160px}.wpforms-flag.wpforms-flag-nr{background-position:-64px -160px}.wpforms-flag.wpforms-flag-nz{background-position:-80px -160px}.wpforms-flag.wpforms-flag-om{background-position:-96px -160px}.wpforms-flag.wpforms-flag-pa{background-position:-112px -160px}.wpforms-flag.wpforms-flag-pe{background-position:-128px -160px}.wpforms-flag.wpforms-flag-pf{background-position:-144px -160px}.wpforms-flag.wpforms-flag-pg{background-position:-160px -160px}.wpforms-flag.wpforms-flag-ph{background-position:-176px -160px}.wpforms-flag.wpforms-flag-pk{background-position:-192px -160px}.wpforms-flag.wpforms-flag-pl{background-position:-208px -160px}.wpforms-flag.wpforms-flag-pr{background-position:-224px -160px}.wpforms-flag.wpforms-flag-ps{background-position:0 -176px}.wpforms-flag.wpforms-flag-pt{background-position:-16px -176px}.wpforms-flag.wpforms-flag-pw{background-position:-32px -176px}.wpforms-flag.wpforms-flag-py{background-position:-48px -176px}.wpforms-flag.wpforms-flag-qa{background-position:-64px -176px}.wpforms-flag.wpforms-flag-re{background-position:-80px -176px}.wpforms-flag.wpforms-flag-ro{background-position:-96px -176px}.wpforms-flag.wpforms-flag-rs{background-position:-112px -176px}.wpforms-flag.wpforms-flag-ru{background-position:-128px -176px}.wpforms-flag.wpforms-flag-rw{background-position:-144px -176px}.wpforms-flag.wpforms-flag-sa{background-position:-160px -176px}.wpforms-flag.wpforms-flag-sb{background-position:-176px -176px}.wpforms-flag.wpforms-flag-sc{background-position:-192px -176px}.wpforms-flag.wpforms-flag-sd{background-position:-208px -176px}.wpforms-flag.wpforms-flag-se{background-position:-224px -176px}.wpforms-flag.wpforms-flag-sg{background-position:0 -192px}.wpforms-flag.wpforms-flag-si{background-position:-16px -192px}.wpforms-flag.wpforms-flag-sk{background-position:-32px -192px}.wpforms-flag.wpforms-flag-sl{background-position:-48px -192px}.wpforms-flag.wpforms-flag-sm{background-position:-64px -192px}.wpforms-flag.wpforms-flag-sn{background-position:-80px -192px}.wpforms-flag.wpforms-flag-so{background-position:-96px -192px}.wpforms-flag.wpforms-flag-sr{background-position:-112px -192px}.wpforms-flag.wpforms-flag-st{background-position:-128px -192px}.wpforms-flag.wpforms-flag-sv{background-position:-144px -192px}.wpforms-flag.wpforms-flag-sy{background-position:-160px -192px}.wpforms-flag.wpforms-flag-sz{background-position:-176px -192px}.wpforms-flag.wpforms-flag-tc{background-position:-192px -192px}.wpforms-flag.wpforms-flag-td{background-position:-208px -192px}.wpforms-flag.wpforms-flag-tg{background-position:-224px -192px}.wpforms-flag.wpforms-flag-th{background-position:0 -208px}.wpforms-flag.wpforms-flag-tj{background-position:-16px -208px}.wpforms-flag.wpforms-flag-tl{background-position:-32px -208px}.wpforms-flag.wpforms-flag-tm{background-position:-48px -208px}.wpforms-flag.wpforms-flag-tn{background-position:-64px -208px}.wpforms-flag.wpforms-flag-to{background-position:-80px -208px}.wpforms-flag.wpforms-flag-tr{background-position:-96px -208px}.wpforms-flag.wpforms-flag-tt{background-position:-112px -208px}.wpforms-flag.wpforms-flag-tv{background-position:-128px -208px}.wpforms-flag.wpforms-flag-tw{background-position:-144px -208px}.wpforms-flag.wpforms-flag-tz{background-position:-160px -208px}.wpforms-flag.wpforms-flag-ua{background-position:-176px -208px}.wpforms-flag.wpforms-flag-ug{background-position:-192px -208px}.wpforms-flag.wpforms-flag-us{background-position:-208px -208px}.wpforms-flag.wpforms-flag-uy{background-position:-224px -208px}.wpforms-flag.wpforms-flag-uz{background-position:0 -224px}.wpforms-flag.wpforms-flag-va{background-position:-16px -224px}.wpforms-flag.wpforms-flag-vc{background-position:-32px -224px}.wpforms-flag.wpforms-flag-ve{background-position:-48px -224px}.wpforms-flag.wpforms-flag-vg{background-position:-64px -224px}.wpforms-flag.wpforms-flag-vi{background-position:-80px -224px}.wpforms-flag.wpforms-flag-vn{background-position:-96px -224px}.wpforms-flag.wpforms-flag-vu{background-position:-112px -224px}.wpforms-flag.wpforms-flag-ws{background-position:-128px -224px}.wpforms-flag.wpforms-flag-ye{background-position:-144px -224px}.wpforms-flag.wpforms-flag-za{background-position:-160px -224px}.wpforms-flag.wpforms-flag-zm{background-position:-176px -224px}.wpforms-flag.wpforms-flag-zw{background-position:-192px -224px}#wpforms-header-temp{position:relative;margin:0;position:absolute;top:-1px;left:20px;right:20px;z-index:99}#wpforms-header{border-top:3px solid #e27730;padding:22px 20px}#wpforms-header img{display:block;margin:0;max-width:235px}@media (max-width: 782px){#wpforms-header img{max-width:200px}}.wpforms-admin-wrap .page-title{background-color:#fff;margin:0 0 20px 0;padding:15px 20px}.wpforms-admin-wrap .page-title .add-new-h2{margin-left:28px}.wpforms-admin-tabs{background-color:#fff;margin:0 0 20px 0;padding:0 20px;list-style:none;overflow:auto;font-size:14px}.wpforms-admin-tabs li{margin:0 30px 0 0;padding:0;float:left}.wpforms-admin-tabs li:last-of-type{margin:0}.wpforms-admin-tabs li a{color:#666;display:block;padding:20px 0 18px 0;text-decoration:none;border-bottom:2px solid #fff;box-shadow:none}.wpforms-admin-tabs li a:hover{border-color:#999}.wpforms-admin-tabs li a.active{border-color:#e27730}#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}.wpforms-admin-page #screen-meta-links,.wpforms-admin-page #screen-meta{display:none}.wpforms-admin-page .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.wpforms-admin-page .video-container iframe,.wpforms-admin-page .video-container object,.wpforms-admin-page .video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.wpforms-admin-page .wpforms-file-upload input[type=file]{width:0.1px;height:0.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.wpforms-admin-page .wpforms-file-upload label{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:inline-block;overflow:hidden;padding:0}.wpforms-admin-page .wpforms-file-upload input[type=file]:focus+label,.wpforms-admin-page .wpforms-file-upload input[type=file].has-focus+label{outline:1px dotted #000;outline:-webkit-focus-ring-color auto 5px}.wpforms-admin-page .wpforms-file-upload .fld{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}.wpforms-admin-page .wpforms-file-upload .fld .placeholder{color:#ccc}.wpforms-admin-page .wpforms-file-upload strong .fa{margin-right:8px}.wpforms-admin-page .wpforms-hide{display:none}.wpforms-admin-page .wpforms-h1-placeholder{display:none}.wpforms-admin-page .notice{display:none}.wpforms-admin-wrap{margin:0}.wpforms-admin-wrap .notice{margin-left:20px !important;margin-right:20px !important}.wpforms-admin-content{padding-left:20px;padding-right:20px}.wpforms-admin-content:before{content:" ";display:table}.wpforms-admin-content:after{clear:both;content:" ";display:table}.wpforms-admin-content hr{border:none;border-top:1px solid #e4e4e4;margin:20px 0;background:none}.wpforms-clear:before{content:" ";display:table}.wpforms-clear:after{clear:both;content:" ";display:table}.wpforms-admin-columns>div[class*="-column-"]{float:left}.wpforms-admin-columns .wpforms-admin-column-20{width:20%}.wpforms-admin-columns .wpforms-admin-column-33{width:33.33333%}.wpforms-admin-columns .wpforms-admin-column-40{width:40%}.wpforms-admin-columns .wpforms-admin-column-50{width:50%}.wpforms-admin-columns .wpforms-admin-column-60{width:60%}.wpforms-admin-columns .wpforms-admin-column-80{width:80%}.wpforms-admin-columns .wpforms-admin-column-last{float:right !important}.wpforms-admin-columns:after{content:"";display:table;clear:both}#wpforms-overview .tablenav.top{margin-top:0}#wpforms-overview .wp-list-table .column-id{width:30px}#wpforms-overview .wp-list-table .column-entries{width:70px}#wpforms-overview .wp-list-table .column-shortcode{width:150px}#wpforms-overview .wp-list-table .column-created{width:145px}#wpforms-entries-single #poststuff{padding:0}#wpforms-entries-single .postbox .hndle{cursor:default !important}#wpforms-entries-single .wpforms-entry-navigation{font-size:13px;line-height:29px;float:right;position:relative;padding-top:2px;padding-right:1px;white-space:nowrap}@media (max-width: 600px){#wpforms-entries-single .wpforms-entry-navigation{display:none}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{top:auto;margin:0;padding:4px 0px;text-align:center}@media (max-width: 782px){#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{font-size:13px}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2 .dashicons{font-size:16px;height:auto;width:28px;line-height:29px}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2.inactive{opacity:0.5;pointer-events:none;cursor:default}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-navigation-text{display:inline-block;margin-right:10px}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-current{top:auto;margin:0 -5px 0 -3px;text-align:center;padding:4px 10px;position:relative;text-decoration:none;border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px;background:#fff;font-size:13px;line-height:29px;text-transform:center}#wpforms-entries-single #wpforms-entry-fields h2.hndle{font-size:18px}#wpforms-entries-single #wpforms-entry-fields h2.hndle .dashicons{font-size:16px;height:16px;width:16px;margin:4px 4px 0 0;color:#e27730}#wpforms-entries-single #wpforms-entry-fields .no-fields{padding:12px;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside p{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-name{font-weight:600;background:#ebf3fb;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-value{background:#fff;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .empty .wpforms-entry-field-value{font-style:italic;color:#999}#wpforms-entries-single #wpforms-entry-fields .wpforms-empty-field-toggle{float:right;text-decoration:none;padding:5px 0 0}#wpforms-entries-single #wpforms-entry-notes .inside{margin:0;padding:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-new{padding:10px}#wpforms-entries-single #wpforms-entry-notes form{display:none}#wpforms-entries-single #wpforms-entry-notes .btns{overflow:auto;padding:8px 0}#wpforms-entries-single #wpforms-entry-notes .no-notes{margin:0;padding:4px 10px 8px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single{padding:10px;border-top:1px solid #e3e1e3}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single p:last-of-type{margin-bottom:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single.even{background-color:#f9f9f9}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline{color:#888;margin-bottom:10px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .sep{color:#ddd}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .notes-user{text-decoration:none;font-weight:600}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete{color:#a00;text-decoration:none}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete:hover{color:red;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .inside,#wpforms-entries-single #wpforms-entry-payment .inside,#wpforms-entries-single #wpforms-entry-actions .inside{margin:0;padding:0}#wpforms-entries-single .wpforms-entry-details-meta,#wpforms-entries-single .wpforms-entry-actions-meta{padding:6px 0 0}#wpforms-entries-single .wpforms-entry-details-meta p,#wpforms-entries-single .wpforms-entry-payment-meta p,#wpforms-entries-single .wpforms-entry-actions-meta p{padding:6px 10px 8px;margin:0}#wpforms-entries-single .wpforms-entry-payment-meta{padding:0}#wpforms-entries-single .wpforms-entry-payment-meta p{border-bottom:1px solid #eee;padding:10px}#wpforms-entries-single .wpforms-entry-payment-meta p:last-of-type{border-bottom:0}#wpforms-entries-single .wpforms-entry-details-meta strong,#wpforms-entries-single .wpforms-entry-actions-meta strong{font-weight:600}#wpforms-entries-single .wpforms-entry-details-meta .dashicons,#wpforms-entries-single .wpforms-entry-actions-meta .dashicons{padding:0 2px 0 0;color:#82878A;top:-1px;left:-1px;position:relative;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .submitdelete{color:#a00;text-decoration:none;padding:1px 2px}#wpforms-entries-single #wpforms-entry-details .submitdelete:hover{color:red}#wpforms-entries-single .wpforms-entry-actions-meta a{text-decoration:none}#wpforms-entries-single .wpforms-entry-actions-meta a:hover{text-decoration:underline}#wpforms-entries-single #wpforms-entry-geolocation .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul{margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul li{border-bottom:1px solid #eee;margin:0;overflow:auto}#wpforms-entries-single #wpforms-entry-geolocation ul li:last-of-type{border-bottom:0}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-meta{width:85px;float:left;border-right:1px solid #eee;padding:10px 20px 10px 12px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-value{display:inline-block;padding:10px 12px 10px 20px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-flag{vertical-align:text-top;margin-right:4px}#wpforms-entries-list .form-details{border-bottom:1px solid #ddd;padding-bottom:15px;margin:0 0 10px}#wpforms-entries-list .form-details .form-details-sub{color:#999;display:block;font-size:10px;text-transform:uppercase;margin:0 0 8px 0}#wpforms-entries-list .form-details .form-details-title{float:left;font-size:18px;font-weight:400;margin:0}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-title{float:none;margin-bottom:10px}}#wpforms-entries-list .form-details .form-selector{display:inline-block;position:relative}#wpforms-entries-list .form-details .form-selector .toggle{border-radius:50%;color:#444;font-size:16px;box-shadow:none}#wpforms-entries-list .form-details .form-selector .toggle:hover,#wpforms-entries-list .form-details .form-selector .toggle.active{background-color:#e3e3e3;outline:none}#wpforms-entries-list .form-details .form-selector .toggle:before{vertical-align:middle}#wpforms-entries-list .form-details .form-selector .form-list{display:none;background:#fff;border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,0.1);position:absolute;top:27px;left:-108px;width:230px;padding:10px 0;z-index:9991}#wpforms-entries-list .form-details .form-selector .form-list:before{content:" ";position:absolute;top:-10px;left:110px;width:0;height:0;border-style:solid;border-width:0 8px 10px 8px;border-color:transparent transparent #fff transparent}#wpforms-entries-list .form-details .form-selector ul{max-height:196px;overflow-x:hidden;padding:0;margin:0}#wpforms-entries-list .form-details .form-selector ul li{list-style:none;margin:0;font-size:13px}#wpforms-entries-list .form-details .form-selector ul li a{display:block;text-decoration:none;padding:5px 15px;color:#444}#wpforms-entries-list .form-details .form-selector ul li a:hover{background-color:#f7f7f7}#wpforms-entries-list .form-details .form-details-actions{float:right}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-actions{float:none}}#wpforms-entries-list .form-details .form-details-actions a{text-decoration:none;display:inline-block;margin:0 12px 0 0}#wpforms-entries-list .form-details .form-details-actions a:last-of-type{margin:0}#wpforms-entries-list .form-details .form-details-actions a .dashicons{width:16px;height:16px;font-size:16px}#wpforms-entries-list .search-box .wpforms-form-search-box-field{max-width:180px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-comparison{max-width:90px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-term{height:28px;margin:0 2px 0 0}#wpforms-entries-list .wpforms-filter-date .wpforms-filter-date-selector{height:28px;background-color:#fff;vertical-align:middle;max-width:210px}#wpforms-entries-list .wpforms-filter-date button{margin:1px 8px 0 0;vertical-align:top}#wpforms-entries-list .wp-list-table .new-entries-notification td{padding:0;text-align:center}#wpforms-entries-list .wp-list-table .new-entries-notification td a{display:none;padding:10px;background-color:#d9edf7}#wpforms-entries-list .wp-list-table .column-indicators{width:35px;text-align:center}#wpforms-entries-list .wp-list-table .column-indicators a:focus{-webkit-box-shadow:none;box-shadow:none}#wpforms-entries-list .wp-list-table .column-indicators .dashicons{width:14px;height:14px;font-size:14px;margin-top:3px}#wpforms-entries-list .wp-list-table .indicator-star .dashicons{margin-right:6px}#wpforms-entries-list .wp-list-table .indicator-star{color:#e4e4e4}#wpforms-entries-list .wp-list-table .indicator-star:hover,#wpforms-entries-list .wp-list-table .indicator-star.unstar{color:#e27730}#wpforms-entries-list .wp-list-table .indicator-read{color:#9ede84}#wpforms-entries-list .wp-list-table .indicator-read:hover,#wpforms-entries-list .wp-list-table .indicator-read.unread{color:#e4e4e4}#wpforms-entries-list .wp-list-table .column-date{width:150px}#wpforms-entries-list .wp-list-table .column-status{width:120px}#wpforms-entries-list .wp-list-table .column-status img{display:inline-block;height:12px;width:auto;margin:0 0 0 3px}#wpforms-entries-list .wp-list-table .column-payment_total{width:100px}#wpforms-entries-list .wp-list-table .column-actions{width:100px}#wpforms-entries-list .wp-list-table .sep{color:#ddd}#wpforms-entries-list .wp-list-table .delete:hover{color:red}#wpforms-entries-list #wpforms-entries-table-edit-columns{float:right;color:#ccc}#wpforms-entries-list #wpforms-entries-table-edit-columns:hover{color:#666}@media screen and (max-width: 782px){.wpforms-admin-content{padding-left:10px;padding-right:10px}.wp-list-table{margin:0 -10px 0 -10px;width:100vw;table-layout:auto}.wp-list-table.entries .column-indicators{width:auto !important}.wp-list-table.entries .indicators .indicator-star{display:none}.wp-list-table.entries .indicators .indicator-read{display:none}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary{height:8px;padding:0;z-index:+1;margin-right:0;overflow:visible}.wp-list-table.entries .toggle-row{right:5px;top:15px}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary+td{display:block !important}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td{margin-right:5px;min-width:50vw}p.search-box{margin:0;width:auto}input[type=checkbox],input[type=radio]{height:16px;width:16px}}#wpforms-welcome{border-top:3px solid #e27730;color:#555;padding-top:110px}@media (max-width: 767px){#wpforms-welcome{padding-top:64px}}#wpforms-welcome *,#wpforms-welcome *::before,#wpforms-welcome *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-welcome .container{margin:0 auto;max-width:720px;padding:0}#wpforms-welcome .block{padding:40px}@media (max-width: 767px){#wpforms-welcome .block{padding:20px}}#wpforms-welcome img{max-width:100%;height:auto}#wpforms-welcome h1{color:#222;font-size:24px;text-align:center;margin:0 0 16px 0}#wpforms-welcome h5{color:#222;font-size:16px;margin:0 0 8px 0}#wpforms-welcome h6{font-size:16px;font-weight:400;line-height:1.6;text-align:center;margin:0}#wpforms-welcome p{font-size:14px;margin:0 0 20px 0}#wpforms-welcome .button-wrap{max-width:590px;margin:0 auto 0 auto}#wpforms-welcome .button-wrap .left{float:left;width:50%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .left{float:none;width:100%;padding:0;margin-bottom:20px}}#wpforms-welcome .button-wrap .right{float:right;width:50%;padding-left:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .right{float:none;width:100%;padding:0}}#wpforms-welcome .intro{background-color:#fff;border:2px solid #e1e1e1;border-radius:2px;margin-bottom:30px;position:relative;padding-top:40px}#wpforms-welcome .intro .sullie{background-color:#fff;border:2px solid #e1e1e1;border-radius:50%;height:110px;width:110px;padding:18px 14px 0 14px;position:absolute;top:-58px;left:50%;margin-left:-55px}#wpforms-welcome .intro .video-thumbnail{display:block;margin:0 auto}#wpforms-welcome .intro .button-wrap{margin-top:25px}#wpforms-welcome .features{background-color:#fff;border:2px solid #e1e1e1;border-bottom:0;border-radius:2px 2px 0 0;position:relative;padding-top:20px;padding-bottom:20px}#wpforms-welcome .features .feature-list{margin-top:60px}#wpforms-welcome .features .feature-block{float:left;width:50%;padding-bottom:35px;overflow:auto}@media (max-width: 767px){#wpforms-welcome .features .feature-block{float:none;width:100%}}#wpforms-welcome .features .feature-block.first{padding-right:20px;clear:both}@media (max-width: 767px){#wpforms-welcome .features .feature-block.first{padding-right:0}}#wpforms-welcome .features .feature-block.last{padding-left:20px}@media (max-width: 767px){#wpforms-welcome .features .feature-block.last{padding-left:0}}#wpforms-welcome .features .feature-block img{float:left;max-width:46px}#wpforms-welcome .features .feature-block h5{margin-left:68px}#wpforms-welcome .features .feature-block p{margin:0;margin-left:68px}#wpforms-welcome .features .button-wrap{margin-top:25px;text-align:center}#wpforms-welcome .upgrade-cta{background-color:#000;border:2px solid #e1e1e1;border-top:0;border-bottom:0;color:#fff}#wpforms-welcome .upgrade-cta h2{color:#fff;font-size:20px;margin:0 0 30px 0}#wpforms-welcome .upgrade-cta ul{display:-ms-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;font-size:15px;margin:0;padding:0}#wpforms-welcome .upgrade-cta ul li{display:block;width:50%;margin:0 0 8px 0;padding:0}#wpforms-welcome .upgrade-cta ul li .dashicons{color:#2a9b39;margin-right:5px}#wpforms-welcome .upgrade-cta .left{float:left;width:66.666666%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .left{float:none;width:100%;padding-right:0;margin-bottom:20px}}#wpforms-welcome .upgrade-cta .right{float:right;width:33.333333%;padding:20px 0 0 20px;text-align:center}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .right{float:none;width:100%;padding-left:0}}#wpforms-welcome .upgrade-cta .right h2{text-align:center;margin:0}#wpforms-welcome .upgrade-cta .right h2 span{display:inline-block;border-bottom:1px solid #555;padding:0 15px 12px}#wpforms-welcome .upgrade-cta .right .price{padding:26px 0}#wpforms-welcome .upgrade-cta .right .price .amount{font-size:48px;font-weight:600;position:relative;display:inline-block}#wpforms-welcome .upgrade-cta .right .price .amount:before{content:'$';position:absolute;top:-8px;left:-16px;font-size:18px}#wpforms-welcome .upgrade-cta .right .price .term{font-size:12px;display:inline-block}#wpforms-welcome .testimonials{background-color:#fff;border:2px solid #e1e1e1;border-top:0;padding:20px 0}#wpforms-welcome .testimonials .testimonial-block{margin:50px 0 0 0}#wpforms-welcome .testimonials .testimonial-block img{border-radius:50%;float:left;max-width:100px;box-shadow:0 0 18px rgba(0,0,0,0.2)}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block img{width:65px}}#wpforms-welcome .testimonials .testimonial-block p{font-size:14px;margin:0 0 12px 140px}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block p{margin-left:100px}}#wpforms-welcome .testimonials .testimonial-block p:last-of-type{margin-bottom:0}#wpforms-welcome .footer{background-color:#f1f1f1;border:2px solid #e1e1e1;border-top:0;border-radius:0 0 2px 2px}#wpforms-welcome.pro .features{border:2px solid #e1e1e1;margin-bottom:30px}#wpforms-welcome.pro .upgrade,#wpforms-welcome.pro .footer{display:none}#wpforms-welcome.pro .testimonials{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started .video-container{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started #wpfooter,.dashboard_page_wpforms-getting-started div.notice{display:none !important}#wpforms-admin-addons *,#wpforms-admin-addons *::before,#wpforms-admin-addons *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-addons .addons-container{margin-left:-20px;margin-right:-20px}#wpforms-admin-addons .unlock-msg{padding:0 20px;margin-top:-20px;clear:both}#wpforms-admin-addons #wpforms-admin-addons-search{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;vertical-align:middle;padding:7px 12px;margin:-3px 10px 0 0;width:200px;min-height:35px;float:right}#wpforms-admin-addons #wpforms-admin-addons-search:focus{border-color:#bbb}#wpforms-admin-addons .addon-container{padding:0 20px;float:left;width:33.333333%}@media (max-width: 1249px){#wpforms-admin-addons .addon-container{width:50%}}@media (max-width: 767px){#wpforms-admin-addons .addon-container{width:100%;margin-bottom:20px}}#wpforms-admin-addons h4{font-size:17px;font-weight:700}#wpforms-admin-addons .addon-item{background-color:#fff;border:1px solid #ddd;border-radius:3px;margin:0 0 40px 0}@media (max-width: 767px){#wpforms-admin-addons .addon-item{margin:0 0}}#wpforms-admin-addons .addon-item img{border:1px solid #eee;float:left;max-width:75px}#wpforms-admin-addons .addon-item h5{margin:0 0 10px 100px;font-size:16px}#wpforms-admin-addons .addon-item p{margin:0 0 0 100px}#wpforms-admin-addons .addon-item .details{padding:30px 20px}#wpforms-admin-addons .addon-item .actions{background-color:#f7f7f7;border-top:1px solid #ddd;padding:20px;position:relative}#wpforms-admin-addons .addon-item .actions .msg{background-color:#f7f7f7;position:absolute;text-align:center;font-weight:600;top:0;left:0;height:100%;width:100%;z-index:99;padding:20px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-ms-align-items:center;align-items:center;justify-content:center}#wpforms-admin-addons .addon-item .actions .msg.success{color:#2a9b39}#wpforms-admin-addons .addon-item .actions .msg.error{color:red}#wpforms-admin-addons .addon-item .status{float:left;padding-top:8px}#wpforms-admin-addons .addon-item .status .status-inactive{color:red}#wpforms-admin-addons .addon-item .status .status-download{color:#666}#wpforms-admin-addons .addon-item .status .status-active{color:#2a9b39}#wpforms-admin-addons .addon-item .upgrade-button{text-align:center}#wpforms-admin-addons .addon-item .upgrade-button a{font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button{float:right}#wpforms-admin-addons .addon-item .action-button button{background:none;border:1px solid #ddd;border-radius:3px;box-shadow:none;cursor:pointer;font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button button:hover,#wpforms-admin-addons .addon-item .action-button button.loading{background-color:#e9e9e9}#wpforms-admin-addons .addon-item .action-button button .fa{margin-right:8px}#wpforms-admin-addons .addon-item .action-button button .fa.fa-spinner{margin-right:0}#wpforms-admin-addons .addon-item .action-button button.status-active .fa{color:#2a9b39}#wpforms-admin-addons .addon-item .action-button button.status-inactive .fa{color:red}#wpforms-admin-addons .addon-item .action-button button.status-download .fa{color:#999}#wpforms-admin-addons .addon-item .action-button button.disabled{cursor:default}#wpforms-admin-addons .addon-item .action-button button.loading .fa{color:#666}#wpforms-admin-about *,#wpforms-admin-about *::before,#wpforms-admin-about *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-about .wpforms-admin-about-section{margin:0 20px 20px;padding:30px;background:#fff;border:1px solid #DDDDDD;line-height:2}#wpforms-admin-about .wpforms-admin-about-section h1,#wpforms-admin-about .wpforms-admin-about-section h2,#wpforms-admin-about .wpforms-admin-about-section h3,#wpforms-admin-about .wpforms-admin-about-section h4,#wpforms-admin-about .wpforms-admin-about-section h5{margin-top:0;padding-top:0;line-height:1.6}#wpforms-admin-about .wpforms-admin-about-section h2{font-size:24px}#wpforms-admin-about .wpforms-admin-about-section h3{font-size:18px;margin-bottom:30px;color:#23282C}#wpforms-admin-about .wpforms-admin-about-section ul,#wpforms-admin-about .wpforms-admin-about-section p{font-size:16px}#wpforms-admin-about .wpforms-admin-about-section p{margin-bottom:20px}#wpforms-admin-about .wpforms-admin-about-section p.bigger{font-size:18px}#wpforms-admin-about .wpforms-admin-about-section p.smaller{font-size:14px}#wpforms-admin-about .wpforms-admin-about-section p:last-child{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section hr{margin:30px 0}#wpforms-admin-about .wpforms-admin-about-section figure{margin:0}#wpforms-admin-about .wpforms-admin-about-section figure img{width:100%}#wpforms-admin-about .wpforms-admin-about-section figure figcaption{font-size:14px;color:#888888;margin-top:5px;text-align:center;line-height:initial}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{padding-left:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{width:100%;padding-left:0;padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{padding-right:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{width:100%;padding-right:0}}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain{margin-top:0;margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain li{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-features li .fa{color:#2a9b39;margin:0 8px 0 0}#wpforms-admin-about .wpforms-admin-about-section .fa-star{color:gold}#wpforms-admin-about .wpforms-admin-about-section .no-margin{margin:0 !important}#wpforms-admin-about .wpforms-admin-about-section .no-padding{padding:0 !important}#wpforms-admin-about .wpforms-admin-about-section .centered{text-align:center !important}#wpforms-admin-about .wpforms-admin-about-section-first-form{display:flex}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form{display:block !important}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:1;padding-right:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:none}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video iframe{border:1px solid #DDDDDD}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video{padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section-hero{padding:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main,#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra{padding:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra .wpforms-admin-column-50{float:none;width:100%}}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main{background-color:#FAFAFA;border-bottom:1px solid #DDDDDD}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main.no-border{border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main p{color:#666}#wpforms-admin-about .wpforms-admin-about-section-hero h3.call-to-action{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-hero span.price-20-off{color:#6AB255}#wpforms-admin-about .wpforms-admin-about-section-squashed{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-squashed:not(:last-of-type){border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-post h2{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-post h3{margin-bottom:15px}#wpforms-admin-about .wpforms-admin-about-section-post p:last-of-type{margin-bottom:30px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{padding-right:20px;width:auto}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:270px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{width:20%}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:auto;max-width:100%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{padding-left:20px;width:calc(100% - 20px - 270px)}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{width:80%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link{padding:10px 15px;background-color:#DF7739;color:#fff;border-radius:3px;text-decoration:none;margin-top:15px;font-size:14px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link:hover{background-color:#B85A1B}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link .fa{color:#EDBA9E;vertical-align:middle;margin-left:8px}#wpforms-admin-about .wpforms-admin-about-section-table table{border-collapse:collapse}#wpforms-admin-about .wpforms-admin-about-section-table table tr td{border-bottom:1px solid #DDDDDD;border-right:1px solid #DDDDDD;padding:30px;vertical-align:top}#wpforms-admin-about .wpforms-admin-about-section-table table tr td:last-of-type{border-right:0}#wpforms-admin-about .wpforms-admin-about-section-table table tr:last-child td{border-bottom:none}#wpforms-admin-about .wpforms-admin-about-section-table table p{background-repeat:no-repeat;background-size:15px auto;background-position:0 6px;margin:0}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-full{padding-left:30px;background-image:url(../images/about/icon-full.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-none{padding-left:30px;background-image:url(../images/about/icon-none.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-partial{padding-left:30px;background-position:-3px 0;background-size:23px auto;background-image:url(../images/about/icon-partial.svg)}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main{padding:0}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main h3{padding:30px 30px 30px 60px}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main .wpforms-admin-column-33:first-child h3{padding:30px}#wpforms-admin-about #wpforms-admin-addons{padding:0 30px}#wpforms-admin-about #wpforms-admin-addons .addon-container{padding:0 10px}#wpforms-admin-about #wpforms-admin-addons .addon-item .details{padding:20px}#wpforms-admin-about #wpforms-admin-addons .addon-item img{padding:10px}#wpforms-admin-about #wpforms-admin-addons .addon-item img[src*="-mi"]{padding:13px}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;-webkit-appearance:none;border-radius:3px;border:1px solid #cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc;font-weight:normal}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:focus{background:#008ec2;border-color:#006799;color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary .fa-spinner{color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary{color:#555;border-color:#cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.disabled{cursor:default}.wpforms-admin-settings *,.wpforms-admin-settings *::before,.wpforms-admin-settings *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wpforms-admin-settings .wpforms-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-row{padding:20px 0}}.wpforms-admin-settings .wpforms-setting-row.section-heading{padding:20px 0}.wpforms-admin-settings .wpforms-setting-row.section-heading.no-desc h4{margin:0}.wpforms-admin-settings .wpforms-setting-row.section-heading .wpforms-setting-field{margin:0;max-width:1000px}.wpforms-admin-settings .wpforms-setting-row.tools p,.wpforms-admin-settings .wpforms-setting-row.tools p:first-of-type{margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox .desc{margin:0 0 0 30px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license p.type{margin-top:12px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-text .wpforms-setting-label,.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-number .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-select .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field input[type=radio]{margin:-3px 10px 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field label{margin-right:30px;display:inline-block}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field label:before{content:" ";display:block;width:155px;height:180px;margin:0 0 10px 0}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-default:before{background:url(../images/settings-email-html.png) center center}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-none:before{background:url(../images/settings-email-plaintext.png) center center}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-image .wpforms-setting-field img{display:block;margin:0 0 20px 0;max-width:400px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .wpforms-color-picker{padding-left:40px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .minicolors-input-swatch{top:7px;left:7px;height:21px;width:21px;border-radius:2px}.wpforms-admin-settings .wpforms-setting-row h4{font-size:20px;font-weight:700;margin:0 0 6px 0}.wpforms-admin-settings .wpforms-setting-row h3{font-size:24px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row p:first-of-type{margin:8px 0 0}.wpforms-admin-settings .wpforms-setting-row p.desc{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note strong{color:green}.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row input[type=password]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row input[type=password]{width:300px}}.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=password]:focus{border-color:#bbb}.wpforms-admin-settings .wpforms-setting-row input[type=number]{width:100px}.wpforms-admin-settings .wpforms-setting-row button{margin-right:10px}.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{display:block;max-width:400px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{width:300px}}.wpforms-admin-settings .wpforms-setting-row .progress-bar{background:#fff;border:1px solid #e27730;height:30px;width:100%;position:relative;border-radius:3px;margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete{border:1px solid #2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar{background-color:#2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar:after{content:none;display:none}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar{display:block;background:#e27730;height:100%;left:0;position:absolute;-webkit-transition:width 0.5s ease-in-out;-moz-transition:width 0.5s ease-in-out;-o-transition:width 0.5s ease-in-out;transition:width 0.5s ease-in-out}@-webkit-keyframes progress{to{background-position:60px 0}}@-moz-keyframes progress{to{background-position:60px 0}}@keyframes progress{to{background-position:60px 0}}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar:after{content:'';display:block;position:absolute;top:0;left:0;width:100%;height:100%;-webkit-animation:progress 1s linear infinite;-moz-animation:progress 1s linear infinite;animation:progress 1s linear infinite;background-repeat:repeat-x;background-size:60px 60px;background-image:-webkit-linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.wpforms-admin-settings .wpforms-setting-label{display:block;float:left;width:200px;padding:0}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-label{float:none;width:100%;padding-bottom:15px}}.wpforms-admin-settings .wpforms-setting-label label{display:block;font-weight:600}.wpforms-admin-settings .wpforms-setting-field{display:block;margin:0 0 0 200px;max-width:800px}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-field{margin:0}}.wpforms-admin-settings p.submit{margin:0;padding:25px 0}.wpforms-admin-settings .info-area,.wpforms-admin-settings .pre-error{display:block;width:100%;max-width:1000px;height:450px;font-family:Menlo,Monaco,monospace;font-size:12px;background:#fff;box-shadow:none;border:1px solid #ddd;white-space:pre;overflow:auto;padding:20px}.wpforms-admin-settings .pre-error{height:auto;max-height:250px;margin-bottom:20px}.wpforms-admin-settings .checkbox-multiselect-columns{max-width:600px;position:relative}.wpforms-admin-settings .checkbox-multiselect-columns:after{content:".";display:block;height:0;line-height:0;font-size:0;clear:both;min-height:0;visibility:hidden}.wpforms-admin-settings .checkbox-multiselect-columns:before{content:"\f0ec";color:#999;font:normal normal normal 20px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:130px;left:50%;margin:0 0 0 -10px}.wpforms-admin-settings .checkbox-multiselect-columns .header{font-weight:600;font-size:13px;margin:0;padding:0 0 5px 0;text-align:center}.wpforms-admin-settings .checkbox-multiselect-columns .first-column,.wpforms-admin-settings .checkbox-multiselect-columns .second-column{width:45%;float:left}.wpforms-admin-settings .checkbox-multiselect-columns .second-column{float:right}.wpforms-admin-settings .checkbox-multiselect-columns .second-column ul li{padding:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul{background-color:#fff;border:1px solid #ddd;border-radius:3px;position:relative;height:250px;padding:0;overflow-y:auto;margin:0;list-style-type:none}.wpforms-admin-settings .checkbox-multiselect-columns ul li{border-bottom:1px #eee solid;margin:0;font-size:14px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label{display:block;padding:10px 10px 10px 32px;position:relative;vertical-align:baseline}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:hover{background-color:#e27730;color:#fff}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:before{content:"\f0c8";color:#ddd;font:normal normal normal 16px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:12px;left:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked{opacity:0.6}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked:before{content:"\f14a";color:#2a9b39}.wpforms-admin-settings .checkbox-multiselect-columns ul li input{display:none}.wpforms-admin-settings .checkbox-multiselect-columns .all{color:#999;display:inline-block;font-size:13px;margin:10px 0 0}.wpforms-admin-settings #wpforms-importer-analyze{display:none}.wpforms-admin-settings #wpforms-importer-analyze .process-count,.wpforms-admin-settings #wpforms-importer-analyze p{font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade{display:none;font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade h5{font-size:18px;font-weight:600;padding:0;margin:30px 0 20px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade hr{border:none;border-bottom:1px solid #e4e4e4;margin:40px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade .wpforms-btn{margin-right:10px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li{list-style-type:disc;margin-left:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li.form{list-style-type:none;margin-left:0;font-weight:700}.wpforms-admin-settings #wpforms-importer-process{display:none}.wpforms-admin-settings #wpforms-importer-process .process-count,.wpforms-admin-settings #wpforms-importer-process .process-completed{font-size:14px}.wpforms-admin-settings #wpforms-importer-process .process-completed{display:none}.wpforms-admin-settings #wpforms-importer-process .status{margin:20px 0 30px;background-color:#fff;border-radius:3px;border:1px solid #ddd;max-height:800px;overflow-y:scroll;display:none}.wpforms-admin-settings #wpforms-importer-process .status .item{border-bottom:1px solid #ddd;padding:20px}.wpforms-admin-settings #wpforms-importer-process .status .item:last-of-type{border:none}.wpforms-admin-settings #wpforms-importer-process .status .item p{font-size:13px;margin:12px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item ul{font-size:13px;margin:12px 0 0 16px}.wpforms-admin-settings #wpforms-importer-process .status .item ul li{list-style:disc}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon{display:inline-block;margin:0 10px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-info-circle{color:#00a0d2}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-check{color:#46b450}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-triangle{color:#ffb900}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times,.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle{color:red}.wpforms-admin-settings #wpforms-importer-process .status .item .name{font-size:14px;float:left}.wpforms-admin-settings #wpforms-importer-process .status .item .actions{font-size:14px;float:right}.wpforms-admin-settings #wpforms-importer-process .status .item .actions .sep{color:#ddd}.wpforms-admin-settings .settings-lite-cta{background-color:#fff;border:1px solid #dadada;padding:25px 20px;margin:10px 0 0 0;position:relative}.wpforms-admin-settings .settings-lite-cta .dismiss{position:absolute;top:10px;right:10px;color:#666;font-size:16px}.wpforms-admin-settings .settings-lite-cta h5{margin:0 0 16px;font-size:18px;font-weight:700}.wpforms-admin-settings .settings-lite-cta h6{font-weight:700;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p{color:#555;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p:last-of-type{margin:0}.wpforms-admin-settings .settings-lite-cta p a{color:#e27730}.wpforms-admin-settings .settings-lite-cta p a:hover{color:#b85a1b}.wpforms-admin-settings .settings-lite-cta ul{margin:0;padding:0;width:50%;float:left}@media (max-width: 600px){.wpforms-admin-settings .settings-lite-cta ul{width:100%;float:none}}.wpforms-admin-settings .settings-lite-cta ul li{margin:0;padding:0 0 2px 16px;color:#555;font-size:14px;position:relative}.wpforms-admin-settings .settings-lite-cta ul li:before{content:'+';position:absolute;top:-1px;left:0}.wpforms-admin-settings .settings-lite-cta .list{margin:0 0 16px 0;overflow:auto;max-width:900px}.wpforms-admin-settings .settings-lite-cta .green{color:#218900;font-weight:700}.wpforms-admin-settings .settings-lite-cta .fa-star{color:#ff982d}#wpforms-settings-providers .wpforms-settings-provider{border-bottom:1px solid #ddd;padding:30px 0}#wpforms-settings-providers .wpforms-settings-provider.focus-out{opacity:0.4}#wpforms-settings-providers .wpforms-settings-provider-header{cursor:pointer;max-width:1000px}#wpforms-settings-providers .wpforms-settings-provider-logo{float:left;position:relative}#wpforms-settings-providers .wpforms-settings-provider-logo .fa{position:absolute;top:50%;margin:-9px 0 0 0;left:10px;color:#666;font-size:18px}#wpforms-settings-providers .wpforms-settings-provider-logo img{background:#fff;border:1px solid #ddd;max-width:90px;display:block;margin:0 0 0 40px}#wpforms-settings-providers .wpforms-settings-provider-info{margin:0 0 0 160px;position:relative;padding:20px 0 0}#wpforms-settings-providers .wpforms-settings-provider-info h3{margin:0 0 10px 0;font-size:20px;font-weight:600}#wpforms-settings-providers .wpforms-settings-provider-info p{margin:0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-info .connected-indicator{color:#83c11f;width:135px;border:1px solid #83c11f;border-radius:4px;padding:8px 14px;font-size:16px;position:absolute;top:28px;right:0;display:none}#wpforms-settings-providers .connected .wpforms-settings-provider-info .connected-indicator{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts{margin:0 0 0 160px;display:none;max-width:840px}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul{padding:0;margin:0}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li{border-bottom:1px solid #ddd;margin:0;padding:10px 0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:first-of-type{border-top:1px solid #ddd}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:last-of-type{margin-bottom:16px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.label{float:left;width:50%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.date{color:#999;float:left;width:35%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.remove{float:right;width:15%;text-align:right}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect{display:none;padding:20px;background-color:#ebf3fb;border:1px solid #0e6cad}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:block;padding:7px 12px;margin:5px 0;width:400px;min-height:35px}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]:focus{border-color:#bbb}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts-connect{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect .fa{display:none}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect p,#wpforms-settings-providers .wpforms-settings-provider-accounts p{margin:0 0 15px 0;font-size:14px}
|
1 |
+
.choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:none}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#EAEAEA;cursor:not-allowed;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices[data-type*="select-one"]{cursor:pointer}.choices[data-type*="select-one"] .choices__inner{padding-bottom:3.0px}.choices[data-type*="select-one"] .choices__input{display:block;width:100% !important;padding:10px !important;border-bottom:1px solid #DDDDDD !important;background-color:#FFFFFF;margin:0 !important}.choices[data-type*="select-one"] .choices__button{background-image:url("../images/cross-inverse.svg");padding:0;background-size:8px;height:100%;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*="select-one"] .choices__button:hover,.choices[data-type*="select-one"] .choices__button:focus{opacity:1}.choices[data-type*="select-one"] .choices__button:focus{box-shadow:0px 0px 0px 2px #0e6cad}.choices[data-type*="select-one"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-one"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-one"][dir="rtl"]:after{left:11.5px;right:auto}.choices[data-type*="select-one"][dir="rtl"] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*="select-multiple"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:18px;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-multiple"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-multiple"] .choices__inner,.choices[data-type*="text"] .choices__inner{cursor:text}.choices[data-type*="select-multiple"] .choices__button,.choices[data-type*="text"] .choices__button{position:relative;display:inline-block;margin-top:0;margin-right:-4px;margin-bottom:0;margin-left:8px;padding-left:16px;border-left:1px solid #0a4f7e;background-image:url("../images/cross.svg");background-size:8px;width:8px;line-height:1;opacity:.75}.choices[data-type*="select-multiple"] .choices__button:hover,.choices[data-type*="select-multiple"] .choices__button:focus,.choices[data-type*="text"] .choices__button:hover,.choices[data-type*="text"] .choices__button:focus{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#fff;padding:4px 7.5px 1px;border:1px solid #DDDDDD;border-radius:3px;font-size:14px;min-height:35px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:3px 3px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 3px 3px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%}[dir="rtl"] .choices__list--single{padding-right:4px;padding-left:16px}.choices__list--single .choices__item{width:100%}.choices__list--multiple{display:inline}.choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:3px;padding:3px 10px;font-size:12px;font-weight:500;margin-right:4px;margin-top:0px;margin-bottom:3px;background-color:#0e6cad;border:1px solid #0c5d95;color:#FFFFFF;word-break:break-all}.choices__list--multiple .choices__item[data-deletable]{padding-right:5px}[dir="rtl"] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px}.choices__list--multiple .choices__item.is-highlighted{background-color:#0c5d95;border:1px solid #0a4f7e}.is-disabled .choices__list--multiple .choices__item{background-color:#aaaaaa;border:1px solid #919191}.choices__list--dropdown{display:none;z-index:1;position:absolute;width:100%;background-color:#FFFFFF;border:1px solid #DDDDDD;top:100%;margin-top:-1px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow:hidden;word-break:break-all}.choices__list--dropdown.is-active{display:block}.is-open .choices__list--dropdown{border-color:#b7b7b7}.is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:.25rem .25rem 0 0}.choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}.choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px}[dir="rtl"] .choices__list--dropdown .choices__item{text-align:right}@media (min-width: 640px){.choices__list--dropdown .choices__item--selectable{padding-right:100px}.choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%)}[dir="rtl"] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px}[dir="rtl"] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px}}.choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2}.choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:.5}.choices__item{cursor:default}.choices__item--selectable{cursor:pointer}.choices__item--disabled{cursor:not-allowed;user-select:none;opacity:.5}.choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray}.choices__button{text-indent:-9999px;-webkit-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer}.choices__button:focus{outline:none}.choices__input{display:inline-block;vertical-align:baseline !important;background-color:#f9f9f9;font-size:14px;margin:0 !important;border:0 !important;border-radius:0 !important;max-width:100%;min-height:0 !important;width:auto !important;padding:4px 0 4px 2px !important}.choices__input:focus{outline:0}[dir="rtl"] .choices__input{padding-right:2px;padding-left:0}.choices__placeholder{opacity:.5}.wpforms-admin-page .wpforms-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;box-shadow:none}.wpforms-admin-page .wpforms-btn-block{display:block;width:100%}.wpforms-admin-page .wpforms-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wpforms-admin-page .wpforms-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wpforms-admin-page .wpforms-btn-orange{background-color:#e27730;border-color:#e27730;color:#fff}.wpforms-admin-page .wpforms-btn-orange:hover{background-color:#b85a1b;border-color:#b85a1b}.wpforms-admin-page .wpforms-btn-grey{background-color:#eee;border-color:#ccc;color:#666}.wpforms-admin-page .wpforms-btn-grey:hover{background-color:#d7d7d7;border-color:#ccc;color:#444}.wpforms-admin-page .wpforms-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wpforms-admin-page .wpforms-btn-light-grey:hover{background-color:#eee;color:#444}.wpforms-admin-page .wpforms-btn-trans-green{background-color:none;color:#2a9b39}.wpforms-admin-page .wpforms-btn-trans-green:hover{background-color:#2a9b39;color:#fff}.wpforms-admin-page .wpforms-btn-trans-green .underline{position:relative}.wpforms-admin-page .wpforms-btn-trans-green .underline:after{content:" ";border-bottom:1px dashed #2a9b39;position:absolute;bottom:-5px;left:0;width:100%}.wpforms-admin-page .wpforms-btn-trans-green .dashicons{height:18px}body div.jconfirm *,body div.jconfirm *::before,body div.jconfirm *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,0.4);top:8px;right:8px}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover{color:rgba(0,0,0,0.8)}body div.jconfirm div.jconfirm-box div.jconfirm-title-c{margin:0 0 26px 0 !important;padding:0 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c{margin:0 !important;color:#c4c4c4 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-title{display:block;color:#333}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c+span.jconfirm-title{margin-top:20px !important}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:26px;display:block}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:inherit}body div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#555;line-height:1.4}body div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p{font-size:18px;padding:0 20px}body div.jconfirm div.jconfirm-box div.jconfirm-content p{margin:0 0 16px;font-size:16px;line-height:1.5}body div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type{margin:0}body div.jconfirm div.jconfirm-box div.jconfirm-content p.large{font-size:18px}body div.jconfirm div.jconfirm-box div.jconfirm-content p.small{font-size:14px}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased{font-size:12px;color:#ccc;text-decoration:none}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover{text-decoration:underline}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased{display:block;font-size:12px;color:#aaa;text-decoration:none;padding-top:20px}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover{color:#999;text-decoration:underline}body div.jconfirm div.jconfirm-box .discount-note{text-align:center;margin:30px 0 0}body div.jconfirm div.jconfirm-box .discount-note p{background-color:#faffac;margin:0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}body div.jconfirm div.jconfirm-box .discount-note p:after{content:'\f058';display:inline-block;font:normal normal normal 14px/1 FontAwesome;background-color:#fff;font-size:26px;border-radius:50%;padding:5px 6px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:-20px;right:50%;margin-right:-18px;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note span{font-weight:700;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note a{color:#aaa;display:block;margin-top:12px}body div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode{margin:20px 0;text-align:center;font-size:24px;padding:8px 5px}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode:disabled{color:#333}body div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#e27730;color:#fff;outline:none}body div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#b85a1b;border-color:#b85a1b}body div.jconfirm div.jconfirm-box button.btn-default{color:#666}body div.jconfirm div.jconfirm-box .error{display:none;color:red}body div.jconfirm div.jconfirm-box .wpforms-error{border:1px solid #ebccd1 !important}body div.jconfirm div.jconfirm-box .jconfirm-title-c .jconfirm-icon-c{-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}body .choices{text-align:left}body .choices input[type=text].choices__input{display:inline-block !important}.wpforms-admin-page .wpforms-alert{padding:16px;margin-bottom:18px;border:1px solid transparent}.wpforms-admin-page .wpforms-alert h4{margin-top:0;color:inherit}.wpforms-admin-page .wpforms-alert p{margin:0 0 15px 0}.wpforms-admin-page .wpforms-alert p:last-of-type{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-nomargin{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-small{font-size:12px}.wpforms-admin-page .wpforms-alert.wpforms-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wpforms-admin-page .wpforms-alert.wpforms-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wpforms-admin-page .wpforms-alert.wpforms-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wpforms-admin-page .wpforms-alert.wpforms-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wpforms-flag{width:16px;height:16px;background:url(../images/flags.png) no-repeat;display:inline-block}.wpforms-flag.wpforms-flag-ad{background-position:-16px 0}.wpforms-flag.wpforms-flag-ae{background-position:-32px 0}.wpforms-flag.wpforms-flag-af{background-position:-48px 0}.wpforms-flag.wpforms-flag-ag{background-position:-64px 0}.wpforms-flag.wpforms-flag-ai{background-position:-80px 0}.wpforms-flag.wpforms-flag-al{background-position:-96px 0}.wpforms-flag.wpforms-flag-am{background-position:-112px 0}.wpforms-flag.wpforms-flag-an{background-position:-128px 0}.wpforms-flag.wpforms-flag-ao{background-position:-144px 0}.wpforms-flag.wpforms-flag-ar{background-position:-160px 0}.wpforms-flag.wpforms-flag-as{background-position:-176px 0}.wpforms-flag.wpforms-flag-at{background-position:-192px 0}.wpforms-flag.wpforms-flag-au{background-position:-208px 0}.wpforms-flag.wpforms-flag-aw{background-position:-224px 0}.wpforms-flag.wpforms-flag-az{background-position:0 -16px}.wpforms-flag.wpforms-flag-ba{background-position:-16px -16px}.wpforms-flag.wpforms-flag-bb{background-position:-32px -16px}.wpforms-flag.wpforms-flag-bd{background-position:-48px -16px}.wpforms-flag.wpforms-flag-be{background-position:-64px -16px}.wpforms-flag.wpforms-flag-bf{background-position:-80px -16px}.wpforms-flag.wpforms-flag-bg{background-position:-96px -16px}.wpforms-flag.wpforms-flag-bh{background-position:-112px -16px}.wpforms-flag.wpforms-flag-bi{background-position:-128px -16px}.wpforms-flag.wpforms-flag-bj{background-position:-144px -16px}.wpforms-flag.wpforms-flag-bm{background-position:-160px -16px}.wpforms-flag.wpforms-flag-bn{background-position:-176px -16px}.wpforms-flag.wpforms-flag-bo{background-position:-192px -16px}.wpforms-flag.wpforms-flag-br{background-position:-208px -16px}.wpforms-flag.wpforms-flag-bs{background-position:-224px -16px}.wpforms-flag.wpforms-flag-bt{background-position:0 -32px}.wpforms-flag.wpforms-flag-bw{background-position:-16px -32px}.wpforms-flag.wpforms-flag-by{background-position:-32px -32px}.wpforms-flag.wpforms-flag-bz{background-position:-48px -32px}.wpforms-flag.wpforms-flag-ca{background-position:-64px -32px}.wpforms-flag.wpforms-flag-cd{background-position:-80px -32px}.wpforms-flag.wpforms-flag-cf{background-position:-96px -32px}.wpforms-flag.wpforms-flag-cg{background-position:-112px -32px}.wpforms-flag.wpforms-flag-ch{background-position:-128px -32px}.wpforms-flag.wpforms-flag-ci{background-position:-144px -32px}.wpforms-flag.wpforms-flag-ck{background-position:-160px -32px}.wpforms-flag.wpforms-flag-cl{background-position:-176px -32px}.wpforms-flag.wpforms-flag-cm{background-position:-192px -32px}.wpforms-flag.wpforms-flag-cn{background-position:-208px -32px}.wpforms-flag.wpforms-flag-co{background-position:-224px -32px}.wpforms-flag.wpforms-flag-cr{background-position:0 -48px}.wpforms-flag.wpforms-flag-cu{background-position:-16px -48px}.wpforms-flag.wpforms-flag-cv{background-position:-32px -48px}.wpforms-flag.wpforms-flag-cy{background-position:-48px -48px}.wpforms-flag.wpforms-flag-cz{background-position:-64px -48px}.wpforms-flag.wpforms-flag-de{background-position:-80px -48px}.wpforms-flag.wpforms-flag-dj{background-position:-96px -48px}.wpforms-flag.wpforms-flag-dk{background-position:-112px -48px}.wpforms-flag.wpforms-flag-dm{background-position:-128px -48px}.wpforms-flag.wpforms-flag-do{background-position:-144px -48px}.wpforms-flag.wpforms-flag-dz{background-position:-160px -48px}.wpforms-flag.wpforms-flag-ec{background-position:-176px -48px}.wpforms-flag.wpforms-flag-ee{background-position:-192px -48px}.wpforms-flag.wpforms-flag-eg{background-position:-208px -48px}.wpforms-flag.wpforms-flag-eh{background-position:-224px -48px}.wpforms-flag.wpforms-flag-er{background-position:0 -64px}.wpforms-flag.wpforms-flag-es{background-position:-16px -64px}.wpforms-flag.wpforms-flag-et{background-position:-32px -64px}.wpforms-flag.wpforms-flag-fi{background-position:-48px -64px}.wpforms-flag.wpforms-flag-fj{background-position:-64px -64px}.wpforms-flag.wpforms-flag-fm{background-position:-80px -64px}.wpforms-flag.wpforms-flag-fo{background-position:-96px -64px}.wpforms-flag.wpforms-flag-fr{background-position:-112px -64px}.wpforms-flag.wpforms-flag-ga{background-position:-128px -64px}.wpforms-flag.wpforms-flag-gb{background-position:-144px -64px}.wpforms-flag.wpforms-flag-gd{background-position:-160px -64px}.wpforms-flag.wpforms-flag-ge{background-position:-176px -64px}.wpforms-flag.wpforms-flag-gg{background-position:-192px -64px}.wpforms-flag.wpforms-flag-gh{background-position:-208px -64px}.wpforms-flag.wpforms-flag-gi{background-position:-224px -64px}.wpforms-flag.wpforms-flag-gl{background-position:0 -80px}.wpforms-flag.wpforms-flag-gm{background-position:-16px -80px}.wpforms-flag.wpforms-flag-gn{background-position:-32px -80px}.wpforms-flag.wpforms-flag-gp{background-position:-48px -80px}.wpforms-flag.wpforms-flag-gq{background-position:-64px -80px}.wpforms-flag.wpforms-flag-gr{background-position:-80px -80px}.wpforms-flag.wpforms-flag-gt{background-position:-96px -80px}.wpforms-flag.wpforms-flag-gu{background-position:-112px -80px}.wpforms-flag.wpforms-flag-gw{background-position:-128px -80px}.wpforms-flag.wpforms-flag-gy{background-position:-144px -80px}.wpforms-flag.wpforms-flag-hk{background-position:-160px -80px}.wpforms-flag.wpforms-flag-hn{background-position:-176px -80px}.wpforms-flag.wpforms-flag-hr{background-position:-192px -80px}.wpforms-flag.wpforms-flag-ht{background-position:-208px -80px}.wpforms-flag.wpforms-flag-hu{background-position:-224px -80px}.wpforms-flag.wpforms-flag-id{background-position:0 -96px}.wpforms-flag.wpforms-flag-ie{background-position:-16px -96px}.wpforms-flag.wpforms-flag-il{background-position:-32px -96px}.wpforms-flag.wpforms-flag-im{background-position:-48px -96px}.wpforms-flag.wpforms-flag-in{background-position:-64px -96px}.wpforms-flag.wpforms-flag-iq{background-position:-80px -96px}.wpforms-flag.wpforms-flag-ir{background-position:-96px -96px}.wpforms-flag.wpforms-flag-is{background-position:-112px -96px}.wpforms-flag.wpforms-flag-it{background-position:-128px -96px}.wpforms-flag.wpforms-flag-je{background-position:-144px -96px}.wpforms-flag.wpforms-flag-jm{background-position:-160px -96px}.wpforms-flag.wpforms-flag-jo{background-position:-176px -96px}.wpforms-flag.wpforms-flag-jp{background-position:-192px -96px}.wpforms-flag.wpforms-flag-ke{background-position:-208px -96px}.wpforms-flag.wpforms-flag-kg{background-position:-224px -96px}.wpforms-flag.wpforms-flag-kh{background-position:0 -112px}.wpforms-flag.wpforms-flag-ki{background-position:-16px -112px}.wpforms-flag.wpforms-flag-km{background-position:-32px -112px}.wpforms-flag.wpforms-flag-kn{background-position:-48px -112px}.wpforms-flag.wpforms-flag-kp{background-position:-64px -112px}.wpforms-flag.wpforms-flag-kr{background-position:-80px -112px}.wpforms-flag.wpforms-flag-kw{background-position:-96px -112px}.wpforms-flag.wpforms-flag-ky{background-position:-112px -112px}.wpforms-flag.wpforms-flag-kz{background-position:-128px -112px}.wpforms-flag.wpforms-flag-la{background-position:-144px -112px}.wpforms-flag.wpforms-flag-lb{background-position:-160px -112px}.wpforms-flag.wpforms-flag-lc{background-position:-176px -112px}.wpforms-flag.wpforms-flag-li{background-position:-192px -112px}.wpforms-flag.wpforms-flag-lk{background-position:-208px -112px}.wpforms-flag.wpforms-flag-lr{background-position:-224px -112px}.wpforms-flag.wpforms-flag-ls{background-position:0 -128px}.wpforms-flag.wpforms-flag-lt{background-position:-16px -128px}.wpforms-flag.wpforms-flag-lu{background-position:-32px -128px}.wpforms-flag.wpforms-flag-lv{background-position:-48px -128px}.wpforms-flag.wpforms-flag-ly{background-position:-64px -128px}.wpforms-flag.wpforms-flag-ma{background-position:-80px -128px}.wpforms-flag.wpforms-flag-mc{background-position:-96px -128px}.wpforms-flag.wpforms-flag-md{background-position:-112px -128px}.wpforms-flag.wpforms-flag-me{background-position:-128px -128px}.wpforms-flag.wpforms-flag-mg{background-position:-144px -128px}.wpforms-flag.wpforms-flag-mh{background-position:-160px -128px}.wpforms-flag.wpforms-flag-mk{background-position:-176px -128px}.wpforms-flag.wpforms-flag-ml{background-position:-192px -128px}.wpforms-flag.wpforms-flag-mm{background-position:-208px -128px}.wpforms-flag.wpforms-flag-mn{background-position:-224px -128px}.wpforms-flag.wpforms-flag-mo{background-position:0 -144px}.wpforms-flag.wpforms-flag-mq{background-position:-16px -144px}.wpforms-flag.wpforms-flag-mr{background-position:-32px -144px}.wpforms-flag.wpforms-flag-ms{background-position:-48px -144px}.wpforms-flag.wpforms-flag-mt{background-position:-64px -144px}.wpforms-flag.wpforms-flag-mu{background-position:-80px -144px}.wpforms-flag.wpforms-flag-mv{background-position:-96px -144px}.wpforms-flag.wpforms-flag-mw{background-position:-112px -144px}.wpforms-flag.wpforms-flag-mx{background-position:-128px -144px}.wpforms-flag.wpforms-flag-my{background-position:-144px -144px}.wpforms-flag.wpforms-flag-mz{background-position:-160px -144px}.wpforms-flag.wpforms-flag-na{background-position:-176px -144px}.wpforms-flag.wpforms-flag-nc{background-position:-192px -144px}.wpforms-flag.wpforms-flag-ne{background-position:-208px -144px}.wpforms-flag.wpforms-flag-ng{background-position:-224px -144px}.wpforms-flag.wpforms-flag-ni{background-position:0 -160px}.wpforms-flag.wpforms-flag-nl{background-position:-16px -160px}.wpforms-flag.wpforms-flag-no{background-position:-32px -160px}.wpforms-flag.wpforms-flag-np{background-position:-48px -160px}.wpforms-flag.wpforms-flag-nr{background-position:-64px -160px}.wpforms-flag.wpforms-flag-nz{background-position:-80px -160px}.wpforms-flag.wpforms-flag-om{background-position:-96px -160px}.wpforms-flag.wpforms-flag-pa{background-position:-112px -160px}.wpforms-flag.wpforms-flag-pe{background-position:-128px -160px}.wpforms-flag.wpforms-flag-pf{background-position:-144px -160px}.wpforms-flag.wpforms-flag-pg{background-position:-160px -160px}.wpforms-flag.wpforms-flag-ph{background-position:-176px -160px}.wpforms-flag.wpforms-flag-pk{background-position:-192px -160px}.wpforms-flag.wpforms-flag-pl{background-position:-208px -160px}.wpforms-flag.wpforms-flag-pr{background-position:-224px -160px}.wpforms-flag.wpforms-flag-ps{background-position:0 -176px}.wpforms-flag.wpforms-flag-pt{background-position:-16px -176px}.wpforms-flag.wpforms-flag-pw{background-position:-32px -176px}.wpforms-flag.wpforms-flag-py{background-position:-48px -176px}.wpforms-flag.wpforms-flag-qa{background-position:-64px -176px}.wpforms-flag.wpforms-flag-re{background-position:-80px -176px}.wpforms-flag.wpforms-flag-ro{background-position:-96px -176px}.wpforms-flag.wpforms-flag-rs{background-position:-112px -176px}.wpforms-flag.wpforms-flag-ru{background-position:-128px -176px}.wpforms-flag.wpforms-flag-rw{background-position:-144px -176px}.wpforms-flag.wpforms-flag-sa{background-position:-160px -176px}.wpforms-flag.wpforms-flag-sb{background-position:-176px -176px}.wpforms-flag.wpforms-flag-sc{background-position:-192px -176px}.wpforms-flag.wpforms-flag-sd{background-position:-208px -176px}.wpforms-flag.wpforms-flag-se{background-position:-224px -176px}.wpforms-flag.wpforms-flag-sg{background-position:0 -192px}.wpforms-flag.wpforms-flag-si{background-position:-16px -192px}.wpforms-flag.wpforms-flag-sk{background-position:-32px -192px}.wpforms-flag.wpforms-flag-sl{background-position:-48px -192px}.wpforms-flag.wpforms-flag-sm{background-position:-64px -192px}.wpforms-flag.wpforms-flag-sn{background-position:-80px -192px}.wpforms-flag.wpforms-flag-so{background-position:-96px -192px}.wpforms-flag.wpforms-flag-sr{background-position:-112px -192px}.wpforms-flag.wpforms-flag-st{background-position:-128px -192px}.wpforms-flag.wpforms-flag-sv{background-position:-144px -192px}.wpforms-flag.wpforms-flag-sy{background-position:-160px -192px}.wpforms-flag.wpforms-flag-sz{background-position:-176px -192px}.wpforms-flag.wpforms-flag-tc{background-position:-192px -192px}.wpforms-flag.wpforms-flag-td{background-position:-208px -192px}.wpforms-flag.wpforms-flag-tg{background-position:-224px -192px}.wpforms-flag.wpforms-flag-th{background-position:0 -208px}.wpforms-flag.wpforms-flag-tj{background-position:-16px -208px}.wpforms-flag.wpforms-flag-tl{background-position:-32px -208px}.wpforms-flag.wpforms-flag-tm{background-position:-48px -208px}.wpforms-flag.wpforms-flag-tn{background-position:-64px -208px}.wpforms-flag.wpforms-flag-to{background-position:-80px -208px}.wpforms-flag.wpforms-flag-tr{background-position:-96px -208px}.wpforms-flag.wpforms-flag-tt{background-position:-112px -208px}.wpforms-flag.wpforms-flag-tv{background-position:-128px -208px}.wpforms-flag.wpforms-flag-tw{background-position:-144px -208px}.wpforms-flag.wpforms-flag-tz{background-position:-160px -208px}.wpforms-flag.wpforms-flag-ua{background-position:-176px -208px}.wpforms-flag.wpforms-flag-ug{background-position:-192px -208px}.wpforms-flag.wpforms-flag-us{background-position:-208px -208px}.wpforms-flag.wpforms-flag-uy{background-position:-224px -208px}.wpforms-flag.wpforms-flag-uz{background-position:0 -224px}.wpforms-flag.wpforms-flag-va{background-position:-16px -224px}.wpforms-flag.wpforms-flag-vc{background-position:-32px -224px}.wpforms-flag.wpforms-flag-ve{background-position:-48px -224px}.wpforms-flag.wpforms-flag-vg{background-position:-64px -224px}.wpforms-flag.wpforms-flag-vi{background-position:-80px -224px}.wpforms-flag.wpforms-flag-vn{background-position:-96px -224px}.wpforms-flag.wpforms-flag-vu{background-position:-112px -224px}.wpforms-flag.wpforms-flag-ws{background-position:-128px -224px}.wpforms-flag.wpforms-flag-ye{background-position:-144px -224px}.wpforms-flag.wpforms-flag-za{background-position:-160px -224px}.wpforms-flag.wpforms-flag-zm{background-position:-176px -224px}.wpforms-flag.wpforms-flag-zw{background-position:-192px -224px}#wpforms-header-temp{position:relative;margin:0;position:absolute;top:-1px;left:20px;right:20px;z-index:99}#wpforms-header{border-top:3px solid #e27730;padding:22px 20px}#wpforms-header img{display:block;margin:0;max-width:235px}@media (max-width: 782px){#wpforms-header img{max-width:200px}}.wpforms-admin-wrap .page-title{background-color:#fff;margin:0 0 20px 0;padding:15px 20px}.wpforms-admin-wrap .page-title .add-new-h2{margin-left:28px}.wpforms-admin-tabs{background-color:#fff;margin:0 0 20px 0;padding:0 20px;list-style:none;overflow:auto;font-size:14px}.wpforms-admin-tabs li{margin:0 30px 0 0;padding:0;float:left}.wpforms-admin-tabs li:last-of-type{margin:0}.wpforms-admin-tabs li a{color:#666;display:block;padding:20px 0 18px 0;text-decoration:none;border-bottom:2px solid #fff;box-shadow:none}.wpforms-admin-tabs li a:hover{border-color:#999}.wpforms-admin-tabs li a.active{border-color:#e27730}#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}.wpforms-admin-page #screen-meta-links,.wpforms-admin-page #screen-meta{display:none}.wpforms-admin-page .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.wpforms-admin-page .video-container iframe,.wpforms-admin-page .video-container object,.wpforms-admin-page .video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.wpforms-admin-page .wpforms-file-upload input[type=file]{width:0.1px;height:0.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.wpforms-admin-page .wpforms-file-upload label{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:inline-block;overflow:hidden;padding:0}.wpforms-admin-page .wpforms-file-upload input[type=file]:focus+label,.wpforms-admin-page .wpforms-file-upload input[type=file].has-focus+label{outline:1px dotted #000;outline:-webkit-focus-ring-color auto 5px}.wpforms-admin-page .wpforms-file-upload .fld{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}.wpforms-admin-page .wpforms-file-upload .fld .placeholder{color:#ccc}.wpforms-admin-page .wpforms-file-upload strong .fa{margin-right:8px}.wpforms-admin-page .wpforms-hide{display:none}.wpforms-admin-page .wpforms-h1-placeholder{display:none}.wpforms-admin-page .notice{display:none}.wpforms-admin-wrap{margin:0}.wpforms-admin-wrap .notice{margin-left:20px !important;margin-right:20px !important}.wpforms-admin-content{padding-left:20px;padding-right:20px}.wpforms-admin-content:before{content:" ";display:table}.wpforms-admin-content:after{clear:both;content:" ";display:table}.wpforms-admin-content hr{border:none;border-top:1px solid #e4e4e4;margin:20px 0;background:none}.wpforms-clear:before{content:" ";display:table}.wpforms-clear:after{clear:both;content:" ";display:table}.wpforms-admin-columns>div[class*="-column-"]{float:left}.wpforms-admin-columns .wpforms-admin-column-20{width:20%}.wpforms-admin-columns .wpforms-admin-column-33{width:33.33333%}.wpforms-admin-columns .wpforms-admin-column-40{width:40%}.wpforms-admin-columns .wpforms-admin-column-50{width:50%}.wpforms-admin-columns .wpforms-admin-column-60{width:60%}.wpforms-admin-columns .wpforms-admin-column-80{width:80%}.wpforms-admin-columns .wpforms-admin-column-last{float:right !important}.wpforms-admin-columns:after{content:"";display:table;clear:both}#wpforms-overview .tablenav.top{margin-top:0}#wpforms-overview .wp-list-table .column-id{width:30px}#wpforms-overview .wp-list-table .column-entries{width:70px}#wpforms-overview .wp-list-table .column-shortcode{width:150px}#wpforms-overview .wp-list-table .column-created{width:145px}#wpforms-entries-single #poststuff{padding:0}#wpforms-entries-single .postbox .hndle{cursor:default !important}#wpforms-entries-single .wpforms-entry-navigation{font-size:13px;line-height:29px;float:right;position:relative;padding-top:2px;padding-right:1px;white-space:nowrap}@media (max-width: 600px){#wpforms-entries-single .wpforms-entry-navigation{display:none}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{top:auto;margin:0;padding:4px 0px;text-align:center}@media (max-width: 782px){#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{font-size:13px}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2 .dashicons{font-size:16px;height:auto;width:28px;line-height:29px}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2.inactive{opacity:0.5;pointer-events:none;cursor:default}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-navigation-text{display:inline-block;margin-right:10px}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-current{top:auto;margin:0 -5px 0 -3px;text-align:center;padding:4px 10px;position:relative;text-decoration:none;border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px;background:#fff;font-size:13px;line-height:29px;text-transform:center}#wpforms-entries-single #wpforms-entry-fields h2.hndle{font-size:18px}#wpforms-entries-single #wpforms-entry-fields h2.hndle .dashicons{font-size:16px;height:16px;width:16px;margin:4px 4px 0 0;color:#e27730}#wpforms-entries-single #wpforms-entry-fields .no-fields{padding:12px;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside p{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-name{font-weight:600;background:#ebf3fb;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-value{background:#fff;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .empty .wpforms-entry-field-value{font-style:italic;color:#999}#wpforms-entries-single #wpforms-entry-fields .wpforms-empty-field-toggle{float:right;text-decoration:none;padding:5px 0 0}#wpforms-entries-single #wpforms-entry-notes .inside{margin:0;padding:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-new{padding:10px}#wpforms-entries-single #wpforms-entry-notes form{display:none}#wpforms-entries-single #wpforms-entry-notes .btns{overflow:auto;padding:8px 0}#wpforms-entries-single #wpforms-entry-notes .no-notes{margin:0;padding:4px 10px 8px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single{padding:10px;border-top:1px solid #e3e1e3}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single p:last-of-type{margin-bottom:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single.even{background-color:#f9f9f9}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline{color:#888;margin-bottom:10px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .sep{color:#ddd}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .notes-user{text-decoration:none;font-weight:600}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete{color:#a00;text-decoration:none}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete:hover{color:red;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .inside,#wpforms-entries-single #wpforms-entry-payment .inside,#wpforms-entries-single #wpforms-entry-actions .inside{margin:0;padding:0}#wpforms-entries-single .wpforms-entry-details-meta,#wpforms-entries-single .wpforms-entry-actions-meta{padding:6px 0 0}#wpforms-entries-single .wpforms-entry-details-meta p,#wpforms-entries-single .wpforms-entry-payment-meta p,#wpforms-entries-single .wpforms-entry-actions-meta p{padding:6px 10px 8px;margin:0}#wpforms-entries-single .wpforms-entry-payment-meta{padding:0}#wpforms-entries-single .wpforms-entry-payment-meta p{border-bottom:1px solid #eee;padding:10px}#wpforms-entries-single .wpforms-entry-payment-meta p:last-of-type{border-bottom:0}#wpforms-entries-single .wpforms-entry-details-meta strong,#wpforms-entries-single .wpforms-entry-actions-meta strong{font-weight:600}#wpforms-entries-single .wpforms-entry-details-meta .dashicons,#wpforms-entries-single .wpforms-entry-actions-meta .dashicons{padding:0 2px 0 0;color:#82878A;top:-1px;left:-1px;position:relative;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .submitdelete{color:#a00;text-decoration:none;padding:1px 2px}#wpforms-entries-single #wpforms-entry-details .submitdelete:hover{color:red}#wpforms-entries-single .wpforms-entry-actions-meta a{text-decoration:none}#wpforms-entries-single .wpforms-entry-actions-meta a:hover{text-decoration:underline}#wpforms-entries-single #wpforms-entry-geolocation .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul{margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul li{border-bottom:1px solid #eee;margin:0;overflow:auto}#wpforms-entries-single #wpforms-entry-geolocation ul li:last-of-type{border-bottom:0}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-meta{width:85px;float:left;border-right:1px solid #eee;padding:10px 20px 10px 12px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-value{display:inline-block;padding:10px 12px 10px 20px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-flag{vertical-align:text-top;margin-right:4px}#wpforms-entries-list .form-details{border-bottom:1px solid #ddd;padding-bottom:15px;margin:0 0 10px}#wpforms-entries-list .form-details .form-details-sub{color:#999;display:block;font-size:10px;text-transform:uppercase;margin:0 0 8px 0}#wpforms-entries-list .form-details .form-details-title{float:left;font-size:18px;font-weight:400;margin:0}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-title{float:none;margin-bottom:10px}}#wpforms-entries-list .form-details .form-selector{display:inline-block;position:relative}#wpforms-entries-list .form-details .form-selector .toggle{border-radius:50%;color:#444;font-size:16px;box-shadow:none}#wpforms-entries-list .form-details .form-selector .toggle:hover,#wpforms-entries-list .form-details .form-selector .toggle.active{background-color:#e3e3e3;outline:none}#wpforms-entries-list .form-details .form-selector .toggle:before{vertical-align:middle}#wpforms-entries-list .form-details .form-selector .form-list{display:none;background:#fff;border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,0.1);position:absolute;top:27px;left:-108px;width:230px;padding:10px 0;z-index:9991}#wpforms-entries-list .form-details .form-selector .form-list:before{content:" ";position:absolute;top:-10px;left:110px;width:0;height:0;border-style:solid;border-width:0 8px 10px 8px;border-color:transparent transparent #fff transparent}#wpforms-entries-list .form-details .form-selector ul{max-height:196px;overflow-x:hidden;padding:0;margin:0}#wpforms-entries-list .form-details .form-selector ul li{list-style:none;margin:0;font-size:13px}#wpforms-entries-list .form-details .form-selector ul li a{display:block;text-decoration:none;padding:5px 15px;color:#444}#wpforms-entries-list .form-details .form-selector ul li a:hover{background-color:#f7f7f7}#wpforms-entries-list .form-details .form-details-actions{float:right}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-actions{float:none}}#wpforms-entries-list .form-details .form-details-actions a{text-decoration:none;display:inline-block;margin:0 12px 0 0}#wpforms-entries-list .form-details .form-details-actions a:last-of-type{margin:0}#wpforms-entries-list .form-details .form-details-actions a .dashicons{width:16px;height:16px;font-size:16px}#wpforms-entries-list .search-box .wpforms-form-search-box-field{max-width:180px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-comparison{max-width:90px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-term{height:28px;margin:0 2px 0 0}#wpforms-entries-list .wpforms-filter-date .wpforms-filter-date-selector{height:28px;background-color:#fff;vertical-align:middle;max-width:210px}#wpforms-entries-list .wpforms-filter-date button{margin:1px 8px 0 0;vertical-align:top}#wpforms-entries-list .wp-list-table .new-entries-notification td{padding:0;text-align:center}#wpforms-entries-list .wp-list-table .new-entries-notification td a{display:none;padding:10px;background-color:#d9edf7}#wpforms-entries-list .wp-list-table .column-indicators{width:35px;text-align:center}#wpforms-entries-list .wp-list-table .column-indicators a:focus{-webkit-box-shadow:none;box-shadow:none}#wpforms-entries-list .wp-list-table .column-indicators .dashicons{width:14px;height:14px;font-size:14px;margin-top:3px}#wpforms-entries-list .wp-list-table .indicator-star .dashicons{margin-right:6px}#wpforms-entries-list .wp-list-table .indicator-star{color:#e4e4e4}#wpforms-entries-list .wp-list-table .indicator-star:hover,#wpforms-entries-list .wp-list-table .indicator-star.unstar{color:#e27730}#wpforms-entries-list .wp-list-table .indicator-read{color:#9ede84}#wpforms-entries-list .wp-list-table .indicator-read:hover,#wpforms-entries-list .wp-list-table .indicator-read.unread{color:#e4e4e4}#wpforms-entries-list .wp-list-table .column-date{width:150px}#wpforms-entries-list .wp-list-table .column-status{width:120px}#wpforms-entries-list .wp-list-table .column-status img{display:inline-block;height:12px;width:auto;margin:0 0 0 3px}#wpforms-entries-list .wp-list-table .column-payment_total{width:100px}#wpforms-entries-list .wp-list-table .column-actions{width:100px}#wpforms-entries-list .wp-list-table .sep{color:#ddd}#wpforms-entries-list .wp-list-table .delete:hover{color:red}#wpforms-entries-list #wpforms-entries-table-edit-columns{float:right;color:#ccc}#wpforms-entries-list #wpforms-entries-table-edit-columns:hover{color:#666}#wpforms-entries-list .wpforms-dash-widget-chart-block{padding:12px 12px 0 8px;background-color:#ffffff;border:1px solid #e5e5e5;margin-top:20px;box-shadow:0 1px 1px rgba(0,0,0,0.04)}#wpforms-entries-list .wpforms-dash-widget-chart-block .wpforms-error-no-data-chart{border:none}#wpforms-entries-list #wpforms-dash-widget-chart-title{margin-left:-12px;font-size:18px}#wpforms-entries-list .wpforms-dash-widget-block:first-child{margin-top:0}#wpforms-entries-list .wpforms-dash-widget-reset-chart{color:#d83638;opacity:1;vertical-align:text-bottom;margin:0 0 -1px 0}#wpforms-entries-list .wpforms-dash-widget-reset-chart:hover{color:#ad2b2c}#wpforms-entries-list .wpforms-dash-widget-reset-chart .dashicons{font-size:20px;height:20px;width:20px}#wpforms-entries-list #wpforms-dash-widget-timespan{margin:5px -12px 0 0}#wpforms-entries-list #wpforms-dash-widget-forms-list-block{overflow:visible}#wpforms-entries-list #wpforms-dash-widget-forms-list-table{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,0.04)}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns td{padding:12px 20px;border-bottom:1px solid #e1e1e1}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tbody{border-top:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr{border-bottom:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child{border-top:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child td{border-top:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:nth-child(even) td{background-color:#f9f9f9}#wpforms-entries-list #wpforms-dash-widget-forms-list-table td{text-align:left;padding:20px 20px;font-size:14px;border:none;color:#555;background-color:#fff}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(2){width:180px}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(3){width:60px;text-align:center}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(4){width:90px;text-align:center}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(5){width:60px;text-align:center;padding-top:0;padding-bottom:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active td:first-child{border-left:3px solid #0073aa;padding-left:17px}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-single-chart-btn{display:none !important}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-reset-chart{display:inline-block !important;border:none;background:none;margin:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns{background-color:#ffffff;border-bottom:1px solid #ddd}#wpforms-entries-list #wpforms-dash-widget-forms-list-table a{text-decoration:none}#wpforms-entries-list #wpforms-dash-widget-forms-list-table a:hover{text-decoration:none}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-title a{font-weight:600}@media screen and (max-width: 782px){.wpforms-admin-content{padding-left:10px;padding-right:10px}.wp-list-table{margin:0 -10px 0 -10px;width:100vw;table-layout:auto}.wp-list-table.entries .column-indicators{width:auto !important}.wp-list-table.entries .indicators .indicator-star{display:none}.wp-list-table.entries .indicators .indicator-read{display:none}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary{height:8px;padding:0;z-index:+1;margin-right:0;overflow:visible}.wp-list-table.entries .toggle-row{right:5px;top:15px}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary+td{display:block !important}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td{margin-right:5px;min-width:50vw}p.search-box{margin:0;width:auto}input[type=checkbox],input[type=radio]{height:16px;width:16px}}#wpforms-welcome{border-top:3px solid #e27730;color:#555;padding-top:110px}@media (max-width: 767px){#wpforms-welcome{padding-top:64px}}#wpforms-welcome *,#wpforms-welcome *::before,#wpforms-welcome *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-welcome .container{margin:0 auto;max-width:720px;padding:0}#wpforms-welcome .block{padding:40px}@media (max-width: 767px){#wpforms-welcome .block{padding:20px}}#wpforms-welcome img{max-width:100%;height:auto}#wpforms-welcome h1{color:#222;font-size:24px;text-align:center;margin:0 0 16px 0}#wpforms-welcome h5{color:#222;font-size:16px;margin:0 0 8px 0}#wpforms-welcome h6{font-size:16px;font-weight:400;line-height:1.6;text-align:center;margin:0}#wpforms-welcome p{font-size:14px;margin:0 0 20px 0}#wpforms-welcome .button-wrap{max-width:590px;margin:0 auto 0 auto}#wpforms-welcome .button-wrap .left{float:left;width:50%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .left{float:none;width:100%;padding:0;margin-bottom:20px}}#wpforms-welcome .button-wrap .right{float:right;width:50%;padding-left:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .right{float:none;width:100%;padding:0}}#wpforms-welcome .intro{background-color:#fff;border:2px solid #e1e1e1;border-radius:2px;margin-bottom:30px;position:relative;padding-top:40px}#wpforms-welcome .intro .sullie{background-color:#fff;border:2px solid #e1e1e1;border-radius:50%;height:110px;width:110px;padding:18px 14px 0 14px;position:absolute;top:-58px;left:50%;margin-left:-55px}#wpforms-welcome .intro .video-thumbnail{display:block;margin:0 auto}#wpforms-welcome .intro .button-wrap{margin-top:25px}#wpforms-welcome .features{background-color:#fff;border:2px solid #e1e1e1;border-bottom:0;border-radius:2px 2px 0 0;position:relative;padding-top:20px;padding-bottom:20px}#wpforms-welcome .features .feature-list{margin-top:60px}#wpforms-welcome .features .feature-block{float:left;width:50%;padding-bottom:35px;overflow:auto}@media (max-width: 767px){#wpforms-welcome .features .feature-block{float:none;width:100%}}#wpforms-welcome .features .feature-block.first{padding-right:20px;clear:both}@media (max-width: 767px){#wpforms-welcome .features .feature-block.first{padding-right:0}}#wpforms-welcome .features .feature-block.last{padding-left:20px}@media (max-width: 767px){#wpforms-welcome .features .feature-block.last{padding-left:0}}#wpforms-welcome .features .feature-block img{float:left;max-width:46px}#wpforms-welcome .features .feature-block h5{margin-left:68px}#wpforms-welcome .features .feature-block p{margin:0;margin-left:68px}#wpforms-welcome .features .button-wrap{margin-top:25px;text-align:center}#wpforms-welcome .upgrade-cta{background-color:#000;border:2px solid #e1e1e1;border-top:0;border-bottom:0;color:#fff}#wpforms-welcome .upgrade-cta h2{color:#fff;font-size:20px;margin:0 0 30px 0}#wpforms-welcome .upgrade-cta ul{display:-ms-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;font-size:15px;margin:0;padding:0}#wpforms-welcome .upgrade-cta ul li{display:block;width:50%;margin:0 0 8px 0;padding:0}#wpforms-welcome .upgrade-cta ul li .dashicons{color:#2a9b39;margin-right:5px}#wpforms-welcome .upgrade-cta .left{float:left;width:66.666666%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .left{float:none;width:100%;padding-right:0;margin-bottom:20px}}#wpforms-welcome .upgrade-cta .right{float:right;width:33.333333%;padding:20px 0 0 20px;text-align:center}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .right{float:none;width:100%;padding-left:0}}#wpforms-welcome .upgrade-cta .right h2{text-align:center;margin:0}#wpforms-welcome .upgrade-cta .right h2 span{display:inline-block;border-bottom:1px solid #555;padding:0 15px 12px}#wpforms-welcome .upgrade-cta .right .price{padding:26px 0}#wpforms-welcome .upgrade-cta .right .price .amount{font-size:48px;font-weight:600;position:relative;display:inline-block}#wpforms-welcome .upgrade-cta .right .price .amount:before{content:'$';position:absolute;top:-8px;left:-16px;font-size:18px}#wpforms-welcome .upgrade-cta .right .price .term{font-size:12px;display:inline-block}#wpforms-welcome .testimonials{background-color:#fff;border:2px solid #e1e1e1;border-top:0;padding:20px 0}#wpforms-welcome .testimonials .testimonial-block{margin:50px 0 0 0}#wpforms-welcome .testimonials .testimonial-block img{border-radius:50%;float:left;max-width:100px;box-shadow:0 0 18px rgba(0,0,0,0.2)}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block img{width:65px}}#wpforms-welcome .testimonials .testimonial-block p{font-size:14px;margin:0 0 12px 140px}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block p{margin-left:100px}}#wpforms-welcome .testimonials .testimonial-block p:last-of-type{margin-bottom:0}#wpforms-welcome .footer{background-color:#f1f1f1;border:2px solid #e1e1e1;border-top:0;border-radius:0 0 2px 2px}#wpforms-welcome.pro .features{border:2px solid #e1e1e1;margin-bottom:30px}#wpforms-welcome.pro .upgrade,#wpforms-welcome.pro .footer{display:none}#wpforms-welcome.pro .testimonials{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started .video-container{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started #wpfooter,.dashboard_page_wpforms-getting-started div.notice{display:none !important}#wpforms-admin-addons *,#wpforms-admin-addons *::before,#wpforms-admin-addons *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-addons .addons-container{margin-left:-20px;margin-right:-20px}#wpforms-admin-addons .unlock-msg{padding:0 20px;margin-top:-20px;clear:both}#wpforms-admin-addons #wpforms-admin-addons-search{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;vertical-align:middle;padding:7px 12px;margin:-3px 10px 0 0;width:200px;min-height:35px;float:right}#wpforms-admin-addons #wpforms-admin-addons-search:focus{border-color:#bbb}#wpforms-admin-addons .addon-container{padding:0 20px;float:left;width:33.333333%}@media (max-width: 1249px){#wpforms-admin-addons .addon-container{width:50%}}@media (max-width: 767px){#wpforms-admin-addons .addon-container{width:100%;margin-bottom:20px}}#wpforms-admin-addons h4{font-size:17px;font-weight:700}#wpforms-admin-addons .addon-item{background-color:#fff;border:1px solid #ddd;border-radius:3px;margin:0 0 40px 0}@media (max-width: 767px){#wpforms-admin-addons .addon-item{margin:0 0}}#wpforms-admin-addons .addon-item img{border:1px solid #eee;float:left;max-width:75px}#wpforms-admin-addons .addon-item h5{margin:0 0 10px 100px;font-size:16px}#wpforms-admin-addons .addon-item p{margin:0 0 0 100px}#wpforms-admin-addons .addon-item .details{padding:30px 20px}#wpforms-admin-addons .addon-item .actions{background-color:#f7f7f7;border-top:1px solid #ddd;padding:20px;position:relative}#wpforms-admin-addons .addon-item .actions .msg{background-color:#f7f7f7;position:absolute;text-align:center;font-weight:600;top:0;left:0;height:100%;width:100%;z-index:99;padding:20px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-ms-align-items:center;align-items:center;justify-content:center}#wpforms-admin-addons .addon-item .actions .msg.success{color:#2a9b39}#wpforms-admin-addons .addon-item .actions .msg.error{color:red}#wpforms-admin-addons .addon-item .status{float:left;padding-top:8px}#wpforms-admin-addons .addon-item .status .status-inactive{color:red}#wpforms-admin-addons .addon-item .status .status-download{color:#666}#wpforms-admin-addons .addon-item .status .status-active{color:#2a9b39}#wpforms-admin-addons .addon-item .upgrade-button{text-align:center}#wpforms-admin-addons .addon-item .upgrade-button a{font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button{float:right}#wpforms-admin-addons .addon-item .action-button button{background:none;border:1px solid #ddd;border-radius:3px;box-shadow:none;cursor:pointer;font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button button:hover,#wpforms-admin-addons .addon-item .action-button button.loading{background-color:#e9e9e9}#wpforms-admin-addons .addon-item .action-button button .fa{margin-right:8px}#wpforms-admin-addons .addon-item .action-button button .fa.fa-spinner{margin-right:0}#wpforms-admin-addons .addon-item .action-button button.status-active .fa{color:#2a9b39}#wpforms-admin-addons .addon-item .action-button button.status-inactive .fa{color:red}#wpforms-admin-addons .addon-item .action-button button.status-download .fa{color:#999}#wpforms-admin-addons .addon-item .action-button button.disabled{cursor:default}#wpforms-admin-addons .addon-item .action-button button.loading .fa{color:#666}#wpforms-admin-about *,#wpforms-admin-about *::before,#wpforms-admin-about *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-about .wpforms-admin-about-section{margin:0 20px 20px;padding:30px;background:#fff;border:1px solid #DDDDDD;line-height:2}#wpforms-admin-about .wpforms-admin-about-section h1,#wpforms-admin-about .wpforms-admin-about-section h2,#wpforms-admin-about .wpforms-admin-about-section h3,#wpforms-admin-about .wpforms-admin-about-section h4,#wpforms-admin-about .wpforms-admin-about-section h5{margin-top:0;padding-top:0;line-height:1.6}#wpforms-admin-about .wpforms-admin-about-section h2{font-size:24px}#wpforms-admin-about .wpforms-admin-about-section h3{font-size:18px;margin-bottom:30px;color:#23282C}#wpforms-admin-about .wpforms-admin-about-section ul,#wpforms-admin-about .wpforms-admin-about-section p{font-size:16px}#wpforms-admin-about .wpforms-admin-about-section p{margin-bottom:20px}#wpforms-admin-about .wpforms-admin-about-section p.bigger{font-size:18px}#wpforms-admin-about .wpforms-admin-about-section p.smaller{font-size:14px}#wpforms-admin-about .wpforms-admin-about-section p:last-child{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section hr{margin:30px 0}#wpforms-admin-about .wpforms-admin-about-section figure{margin:0}#wpforms-admin-about .wpforms-admin-about-section figure img{width:100%}#wpforms-admin-about .wpforms-admin-about-section figure figcaption{font-size:14px;color:#888888;margin-top:5px;text-align:center;line-height:initial}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{padding-left:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{width:100%;padding-left:0;padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{padding-right:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{width:100%;padding-right:0}}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain{margin-top:0;margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain li{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-features li .fa{color:#2a9b39;margin:0 8px 0 0}#wpforms-admin-about .wpforms-admin-about-section .fa-star{color:gold}#wpforms-admin-about .wpforms-admin-about-section .no-margin{margin:0 !important}#wpforms-admin-about .wpforms-admin-about-section .no-padding{padding:0 !important}#wpforms-admin-about .wpforms-admin-about-section .centered{text-align:center !important}#wpforms-admin-about .wpforms-admin-about-section-first-form{display:flex}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form{display:block !important}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:1;padding-right:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:none}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video iframe{border:1px solid #DDDDDD}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video{padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section-hero{padding:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main,#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra{padding:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra .wpforms-admin-column-50{float:none;width:100%}}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main{background-color:#FAFAFA;border-bottom:1px solid #DDDDDD}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main.no-border{border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main p{color:#666}#wpforms-admin-about .wpforms-admin-about-section-hero h3.call-to-action{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-hero span.price-20-off{color:#6AB255}#wpforms-admin-about .wpforms-admin-about-section-squashed{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-squashed:not(:last-of-type){border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-post h2{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-post h3{margin-bottom:15px}#wpforms-admin-about .wpforms-admin-about-section-post p:last-of-type{margin-bottom:30px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{padding-right:20px;width:auto}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:270px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{width:20%}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:auto;max-width:100%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{padding-left:20px;width:calc(100% - 20px - 270px)}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{width:80%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link{padding:10px 15px;background-color:#DF7739;color:#fff;border-radius:3px;text-decoration:none;margin-top:15px;font-size:14px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link:hover{background-color:#B85A1B}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link .fa{color:#EDBA9E;vertical-align:middle;margin-left:8px}#wpforms-admin-about .wpforms-admin-about-section-table table{border-collapse:collapse}#wpforms-admin-about .wpforms-admin-about-section-table table tr td{border-bottom:1px solid #DDDDDD;border-right:1px solid #DDDDDD;padding:30px;vertical-align:top}#wpforms-admin-about .wpforms-admin-about-section-table table tr td:last-of-type{border-right:0}#wpforms-admin-about .wpforms-admin-about-section-table table tr:last-child td{border-bottom:none}#wpforms-admin-about .wpforms-admin-about-section-table table p{background-repeat:no-repeat;background-size:15px auto;background-position:0 6px;margin:0}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-full{padding-left:30px;background-image:url(../images/about/icon-full.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-none{padding-left:30px;background-image:url(../images/about/icon-none.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-partial{padding-left:30px;background-position:-3px 0;background-size:23px auto;background-image:url(../images/about/icon-partial.svg)}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main{padding:0}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main h3{padding:30px 30px 30px 60px}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main .wpforms-admin-column-33:first-child h3{padding:30px}#wpforms-admin-about #wpforms-admin-addons{padding:0 30px}#wpforms-admin-about #wpforms-admin-addons .addon-container{padding:0 10px}#wpforms-admin-about #wpforms-admin-addons .addon-item .details{padding:20px}#wpforms-admin-about #wpforms-admin-addons .addon-item img{padding:10px}#wpforms-admin-about #wpforms-admin-addons .addon-item img[src*="-mi"]{padding:13px}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;-webkit-appearance:none;border-radius:3px;border:1px solid #cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc;font-weight:normal}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:focus{background:#008ec2;border-color:#006799;color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary .fa-spinner{color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary{color:#555;border-color:#cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.disabled{cursor:default}.wpforms-admin-settings *,.wpforms-admin-settings *::before,.wpforms-admin-settings *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wpforms-admin-settings .wpforms-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-row{padding:20px 0}}.wpforms-admin-settings .wpforms-setting-row.section-heading{padding:20px 0}.wpforms-admin-settings .wpforms-setting-row.section-heading.no-desc h4{margin:0}.wpforms-admin-settings .wpforms-setting-row.section-heading .wpforms-setting-field{margin:0;max-width:1000px}.wpforms-admin-settings .wpforms-setting-row.tools p,.wpforms-admin-settings .wpforms-setting-row.tools p:first-of-type{margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox .desc{margin:0 0 0 30px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license p.type{margin-top:12px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-text .wpforms-setting-label,.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-number .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-select .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field input[type=radio]{margin:-3px 10px 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field label{margin-right:30px;display:inline-block}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field label:before{content:" ";display:block;width:155px;height:180px;margin:0 0 10px 0}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-default:before{background:url(../images/settings-email-html.png) center center}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-none:before{background:url(../images/settings-email-plaintext.png) center center}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-image .wpforms-setting-field img{display:block;margin:0 0 20px 0;max-width:400px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .wpforms-color-picker{padding-left:40px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .minicolors-input-swatch{top:7px;left:7px;height:21px;width:21px;border-radius:2px}.wpforms-admin-settings .wpforms-setting-row h5{font-size:16px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row h4{font-size:20px;font-weight:700;margin:0 0 6px 0}.wpforms-admin-settings .wpforms-setting-row h3{font-size:24px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row p:first-of-type{margin:8px 0 0}.wpforms-admin-settings .wpforms-setting-row p.desc{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note strong{color:green}.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=password],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row select{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=password],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row select{width:300px}}.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=password]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,.wpforms-admin-settings .wpforms-setting-row select:focus{border-color:#bbb}.wpforms-admin-settings .wpforms-setting-row input[type=number]{width:100px}.wpforms-admin-settings .wpforms-setting-row button{margin-right:10px}.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{display:block;max-width:400px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{width:300px}}.wpforms-admin-settings .wpforms-setting-row .progress-bar{background:#fff;border:1px solid #e27730;height:30px;width:100%;position:relative;border-radius:3px;margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete{border:1px solid #2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar{background-color:#2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar:after{content:none;display:none}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar{display:block;background:#e27730;height:100%;left:0;position:absolute;-webkit-transition:width 0.5s ease-in-out;-moz-transition:width 0.5s ease-in-out;-o-transition:width 0.5s ease-in-out;transition:width 0.5s ease-in-out}@-webkit-keyframes progress{to{background-position:60px 0}}@-moz-keyframes progress{to{background-position:60px 0}}@keyframes progress{to{background-position:60px 0}}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar:after{content:'';display:block;position:absolute;top:0;left:0;width:100%;height:100%;-webkit-animation:progress 1s linear infinite;-moz-animation:progress 1s linear infinite;animation:progress 1s linear infinite;background-repeat:repeat-x;background-size:60px 60px;background-image:-webkit-linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.wpforms-admin-settings .wpforms-setting-label{display:block;float:left;width:200px;padding:0}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-label{float:none;width:100%;padding-bottom:15px}}.wpforms-admin-settings .wpforms-setting-label label{display:block;font-weight:600}.wpforms-admin-settings .wpforms-setting-field{display:block;margin:0 0 0 200px;max-width:800px}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-field{margin:0}}.wpforms-admin-settings p.submit{margin:0;padding:25px 0}.wpforms-admin-settings .info-area,.wpforms-admin-settings .pre-error{display:block;width:100%;max-width:1000px;height:450px;font-family:Menlo,Monaco,monospace;font-size:12px;background:#fff;box-shadow:none;border:1px solid #ddd;white-space:pre;overflow:auto;padding:20px}.wpforms-admin-settings .pre-error{height:auto;max-height:250px;margin-bottom:20px}.wpforms-admin-settings .checkbox-multiselect-columns{max-width:600px;position:relative}.wpforms-admin-settings .checkbox-multiselect-columns:after{content:".";display:block;height:0;line-height:0;font-size:0;clear:both;min-height:0;visibility:hidden}.wpforms-admin-settings .checkbox-multiselect-columns:before{content:"\f0ec";color:#999;font:normal normal normal 20px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:130px;left:50%;margin:0 0 0 -10px}.wpforms-admin-settings .checkbox-multiselect-columns .header{font-weight:600;font-size:13px;margin:0;padding:0 0 5px 0;text-align:center}.wpforms-admin-settings .checkbox-multiselect-columns .first-column,.wpforms-admin-settings .checkbox-multiselect-columns .second-column{width:45%;float:left}.wpforms-admin-settings .checkbox-multiselect-columns .second-column{float:right}.wpforms-admin-settings .checkbox-multiselect-columns .second-column ul li{padding:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul{background-color:#fff;border:1px solid #ddd;border-radius:3px;position:relative;height:250px;padding:0;overflow-y:auto;margin:0;list-style-type:none}.wpforms-admin-settings .checkbox-multiselect-columns ul li{border-bottom:1px #eee solid;margin:0;font-size:14px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label{display:block;padding:10px 10px 10px 32px;position:relative;vertical-align:baseline}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:hover{background-color:#e27730;color:#fff}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:before{content:"\f0c8";color:#ddd;font:normal normal normal 16px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:12px;left:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked{opacity:0.6}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked:before{content:"\f14a";color:#2a9b39}.wpforms-admin-settings .checkbox-multiselect-columns ul li input{display:none}.wpforms-admin-settings .checkbox-multiselect-columns .all{color:#999;display:inline-block;font-size:13px;margin:10px 0 0}.wpforms-admin-settings #wpforms-importer-analyze{display:none}.wpforms-admin-settings #wpforms-importer-analyze .process-count,.wpforms-admin-settings #wpforms-importer-analyze p{font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade{display:none;font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade h5{font-size:18px;font-weight:600;padding:0;margin:30px 0 20px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade hr{border:none;border-bottom:1px solid #e4e4e4;margin:40px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade .wpforms-btn{margin-right:10px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li{list-style-type:disc;margin-left:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li.form{list-style-type:none;margin-left:0;font-weight:700}.wpforms-admin-settings #wpforms-tools-entries-export h5{clear:both;margin:20px 0 10px 0}.wpforms-admin-settings #wpforms-tools-entries-export label{clear:both;float:left;margin:3px 0 3px 0}.wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap{position:relative}.wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap .choices{margin-bottom:0}.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-spinner{position:absolute;top:6px;right:-30px}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-date-selector{width:200px;cursor:pointer}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-field{width:200px}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-comparison{width:140px}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-term{width:300px}.wpforms-admin-settings #wpforms-tools-entries-export section{margin-top:20px}.wpforms-admin-settings #wpforms-tools-entries-export iframe{width:0;height:0;visibility:hidden}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-text{opacity:1;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);opacity:0;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on{cursor:default;opacity:0.75;position:relative}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-text{opacity:0 !important;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-spinner{opacity:1 !important;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on:hover{background-color:#e27730;border-color:#e27730}.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg,.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg{background:#fff;border-left:4px solid #22A0D0;line-height:1.5em;margin:20px 0 0 0;padding:10px}.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg.wpforms-error,.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg.wpforms-error{border-color:#dc3232}.wpforms-admin-settings #wpforms-importer-process{display:none}.wpforms-admin-settings #wpforms-importer-process .process-count,.wpforms-admin-settings #wpforms-importer-process .process-completed{font-size:14px}.wpforms-admin-settings #wpforms-importer-process .process-completed{display:none}.wpforms-admin-settings #wpforms-importer-process .status{margin:20px 0 30px;background-color:#fff;border-radius:3px;border:1px solid #ddd;max-height:800px;overflow-y:scroll;display:none}.wpforms-admin-settings #wpforms-importer-process .status .item{border-bottom:1px solid #ddd;padding:20px}.wpforms-admin-settings #wpforms-importer-process .status .item:last-of-type{border:none}.wpforms-admin-settings #wpforms-importer-process .status .item p{font-size:13px;margin:12px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item ul{font-size:13px;margin:12px 0 0 16px}.wpforms-admin-settings #wpforms-importer-process .status .item ul li{list-style:disc}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon{display:inline-block;margin:0 10px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-info-circle{color:#00a0d2}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-check{color:#46b450}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-triangle{color:#ffb900}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times,.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle{color:#dc3232}.wpforms-admin-settings #wpforms-importer-process .status .item .name{font-size:14px;float:left}.wpforms-admin-settings #wpforms-importer-process .status .item .actions{font-size:14px;float:right}.wpforms-admin-settings #wpforms-importer-process .status .item .actions .sep{color:#ddd}.wpforms-admin-settings .settings-lite-cta{background-color:#fff;border:1px solid #dadada;padding:25px 20px;margin:10px 0 0 0;position:relative}.wpforms-admin-settings .settings-lite-cta .dismiss{position:absolute;top:10px;right:10px;color:#666;font-size:16px}.wpforms-admin-settings .settings-lite-cta h5{margin:0 0 16px;font-size:18px;font-weight:700}.wpforms-admin-settings .settings-lite-cta h6{font-weight:700;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p{color:#555;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p:last-of-type{margin:0}.wpforms-admin-settings .settings-lite-cta p a{color:#e27730}.wpforms-admin-settings .settings-lite-cta p a:hover{color:#b85a1b}.wpforms-admin-settings .settings-lite-cta ul{margin:0;padding:0;width:50%;float:left}@media (max-width: 600px){.wpforms-admin-settings .settings-lite-cta ul{width:100%;float:none}}.wpforms-admin-settings .settings-lite-cta ul li{margin:0;padding:0 0 2px 16px;color:#555;font-size:14px;position:relative}.wpforms-admin-settings .settings-lite-cta ul li:before{content:'+';position:absolute;top:-1px;left:0}.wpforms-admin-settings .settings-lite-cta .list{margin:0 0 16px 0;overflow:auto;max-width:900px}.wpforms-admin-settings .settings-lite-cta .green{color:#218900;font-weight:700}.wpforms-admin-settings .settings-lite-cta .fa-star{color:#ff982d}#wpforms-settings-providers .wpforms-settings-provider{border-bottom:1px solid #ddd;padding:30px 0}#wpforms-settings-providers .wpforms-settings-provider.focus-out{opacity:0.4}#wpforms-settings-providers .wpforms-settings-provider-header{cursor:pointer;max-width:1000px}#wpforms-settings-providers .wpforms-settings-provider-logo{float:left;position:relative}#wpforms-settings-providers .wpforms-settings-provider-logo .fa{position:absolute;top:50%;margin:-9px 0 0 0;left:10px;color:#666;font-size:18px}#wpforms-settings-providers .wpforms-settings-provider-logo img{background:#fff;border:1px solid #ddd;max-width:90px;display:block;margin:0 0 0 40px}#wpforms-settings-providers .wpforms-settings-provider-info{margin:0 0 0 160px;position:relative;padding:20px 0 0}#wpforms-settings-providers .wpforms-settings-provider-info h3{margin:0 0 10px 0;font-size:20px;font-weight:600}#wpforms-settings-providers .wpforms-settings-provider-info p{margin:0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-info .connected-indicator{color:#83c11f;width:135px;border:1px solid #83c11f;border-radius:4px;padding:8px 14px;font-size:16px;position:absolute;top:28px;right:0;display:none}#wpforms-settings-providers .connected .wpforms-settings-provider-info .connected-indicator{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts{margin:0 0 0 160px;display:none;max-width:840px}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul{padding:0;margin:0}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li{border-bottom:1px solid #ddd;margin:0;padding:10px 0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:first-of-type{border-top:1px solid #ddd}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:last-of-type{margin-bottom:16px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.label{float:left;width:50%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.date{color:#999;float:left;width:35%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.remove{float:right;width:15%;text-align:right}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect{display:none;padding:20px;background-color:#ebf3fb;border:1px solid #0e6cad}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:block;padding:7px 12px;margin:5px 0;width:400px;min-height:35px}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]:focus{border-color:#bbb}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts-connect{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect .fa{display:none}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect p,#wpforms-settings-providers .wpforms-settings-provider-accounts p{margin:0 0 15px 0;font-size:14px}
|
assets/css/wpforms-base.css
CHANGED
@@ -880,6 +880,14 @@ div.wpforms-container-full .wpforms-notice.wpforms-error .wpforms-notice-action:
|
|
880 |
/* Small devices */
|
881 |
@media only screen and (max-width: 600px) {
|
882 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
883 |
/* Mobile width override */
|
884 |
.wpforms-container .wpforms-mobile-full {
|
885 |
width: 100%;
|
880 |
/* Small devices */
|
881 |
@media only screen and (max-width: 600px) {
|
882 |
|
883 |
+
/* Аvoid horizontal scroll on mobiles */
|
884 |
+
.wpforms-container .wpforms-field {
|
885 |
+
overflow-x: hidden;
|
886 |
+
}
|
887 |
+
.wpforms-container .wpforms-field > * {
|
888 |
+
max-width: 100%;
|
889 |
+
}
|
890 |
+
|
891 |
/* Mobile width override */
|
892 |
.wpforms-container .wpforms-mobile-full {
|
893 |
width: 100%;
|
assets/css/wpforms-full.css
CHANGED
@@ -1209,6 +1209,14 @@ div.wpforms-container-full .wpforms-form .wpforms-screen-reader-element {
|
|
1209 |
/* Small devices */
|
1210 |
@media only screen and (max-width: 600px) {
|
1211 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1212 |
/* Mobile width override */
|
1213 |
div.wpforms-container-full .wpforms-form .wpforms-mobile-full {
|
1214 |
width: 100%;
|
1209 |
/* Small devices */
|
1210 |
@media only screen and (max-width: 600px) {
|
1211 |
|
1212 |
+
/* Аvoid horizontal scroll on mobiles */
|
1213 |
+
div.wpforms-container-full .wpforms-form .wpforms-field {
|
1214 |
+
overflow-x: hidden;
|
1215 |
+
}
|
1216 |
+
div.wpforms-container-full .wpforms-form .wpforms-field > * {
|
1217 |
+
max-width: 100%;
|
1218 |
+
}
|
1219 |
+
|
1220 |
/* Mobile width override */
|
1221 |
div.wpforms-container-full .wpforms-form .wpforms-mobile-full {
|
1222 |
width: 100%;
|
assets/js/admin-builder.js
CHANGED
@@ -622,11 +622,11 @@ var WPFormsBuilder = window.WPFormsBuilder || ( function( document, window, $ )
|
|
622 |
});
|
623 |
|
624 |
// Field Options group toggle
|
625 |
-
$builder.on('click', '.wpforms-field-option-group-toggle', function(e) {
|
626 |
e.preventDefault();
|
627 |
-
var $this = $(this);
|
628 |
-
$this.parent().toggleClass('wpforms-hide').find('.wpforms-field-option-group-inner').slideToggle();
|
629 |
-
$this.find('i').toggleClass('fa-angle-down fa-angle-right');
|
630 |
});
|
631 |
|
632 |
// Display toggle for Address field hide address line 2 option
|
622 |
});
|
623 |
|
624 |
// Field Options group toggle
|
625 |
+
$builder.on('click', '.wpforms-field-option-group-toggle:not(.upgrade-modal)', function( e ) {
|
626 |
e.preventDefault();
|
627 |
+
var $this = $( this );
|
628 |
+
$this.parent().toggleClass( 'wpforms-hide' ).find( '.wpforms-field-option-group-inner' ).slideToggle();
|
629 |
+
$this.find( 'i' ).toggleClass( 'fa-angle-down fa-angle-right' );
|
630 |
});
|
631 |
|
632 |
// Display toggle for Address field hide address line 2 option
|
assets/js/admin.js
CHANGED
@@ -569,7 +569,7 @@
|
|
569 |
var $entriesList = $( '#wpforms-entries-list' );
|
570 |
|
571 |
// Works on entry list page only.
|
572 |
-
if ( ! $entriesList.length ) {
|
573 |
return;
|
574 |
}
|
575 |
|
@@ -1026,7 +1026,7 @@
|
|
1026 |
});
|
1027 |
|
1028 |
// Integration individual display toggling.
|
1029 |
-
$( document ).on( 'click', '.wpforms-settings-provider-header', function( event ) {
|
1030 |
|
1031 |
event.preventDefault();
|
1032 |
|
569 |
var $entriesList = $( '#wpforms-entries-list' );
|
570 |
|
571 |
// Works on entry list page only.
|
572 |
+
if ( ! $entriesList.length || $entriesList.find( '.wpforms-dash-widget' ).length ) {
|
573 |
return;
|
574 |
}
|
575 |
|
1026 |
});
|
1027 |
|
1028 |
// Integration individual display toggling.
|
1029 |
+
$( document ).on( 'click', '.wpforms-settings-provider:not(.focus-out) .wpforms-settings-provider-header', function( event ) {
|
1030 |
|
1031 |
event.preventDefault();
|
1032 |
|
assets/js/admin.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(l){"use strict";var f,s={settings:{iconActivate:'<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',iconDeactivate:'<i class="fa fa-toggle-on" aria-hidden="true"></i>',iconInstall:'<i class="fa fa-cloud-download" aria-hidden="true"></i>',iconSpinner:'<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',mediaFrame:!1},init:function(){f=this.settings,l(document).ready(s.ready),s.initFormOverview(),s.initEntriesSingle(),s.initEntriesList(),s.initWelcome(),s.initAddons(),s.initSettings(),s.initTools(),s.initUpgrades()},ready:function(){l(".notice").show(),l("#screen-meta-links, #screen-meta").prependTo("#wpforms-header-temp").show(),s.initChoicesJS(),s.initCheckboxMultiselectColumns(),l(".wpforms-color-picker").minicolors(),l(".wpforms-file-upload").each(function(){var e=l(this).find("input[type=file]"),n=l(this).find("label"),o=n.html();e.on("change",function(e){var t="";this.files&&1<this.files.length?t=(this.getAttribute("data-multiple-caption")||"").replace("{count}",this.files.length):e.target.value&&(t=e.target.value.split("\\").pop()),t?n.find(".fld").html(t):n.html(o)}),e.on("focus",function(){e.addClass("has-focus")}).on("blur",function(){e.removeClass("has-focus")})}),jconfirm.defaults={closeIcon:!0,backgroundDismiss:!0,escapeKey:!0,animationBounce:1,useBootstrap:!1,theme:"modern",boxWidth:"400px",animateFromElement:!1},l(document).on("click",".wpforms-upgrade-modal",function(){l.alert({title:!1,content:wpforms_admin.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).trigger("wpformsReady")},initChoicesJS:function(){l(".choicesjs-select").each(function(){var e=l(this),t={searchEnabled:!1};e.attr("multiple")&&(t.searchEnabled=!0,t.removeItemButton=!0),e.data("placeholder")&&(t.placeholderValue=e.data("placeholder")),"off"===e.data("sorting")&&(t.shouldSort=!1),e.data("search")&&(t.searchEnabled=!0),t.loadingText=wpforms_admin.choicesjs_loading,t.noResultsText=wpforms_admin.choicesjs_no_results,t.noChoicesText=wpforms_admin.choicesjs_no_choices,t.itemSelectText=wpforms_admin.choicesjs_item_select,new Choices(e[0],t)})},initCheckboxMultiselectColumns:function(){l(document).on("change",".checkbox-multiselect-columns input",function(){var e=l(this),t=e.parent(),n=e.closest(".checkbox-multiselect-columns"),o=t.text(),i="check-item-"+e.val(),s=n.find("#"+i);e.prop("checked")?(e.parent().addClass("checked"),s.length||n.find(".second-column ul").append('<li id="'+i+'">'+o+"</li>")):(e.parent().removeClass("checked"),n.find("#"+i).remove())}),l(document).on("click",".checkbox-multiselect-columns .all",function(e){e.preventDefault(),l(this).closest(".checkbox-multiselect-columns").find("input[type=checkbox]").prop("checked",!0).trigger("change"),l(this).remove()})},initFormOverview:function(){l(document).on("click","#wpforms-overview .wp-list-table .delete a, #wpforms-overview .wp-list-table .duplicate a",function(e){e.preventDefault();var t=l(this).attr("href"),n=l(this).parent().hasClass("delete")?wpforms_admin.form_delete_confirm:wpforms_admin.form_duplicate_confirm;l.confirm({title:!1,content:n,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},initEntriesSingle:function(){"wpforms-entries"===s.getQueryString("page")&&"details"===s.getQueryString("view")&&s.entryHotkeys(),l(document).on("click","#wpforms-entries-single .submitdelete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-single .wpforms-entry-print a",function(e){e.preventDefault(),window.open(l(this).attr("href"))}),l(document).on("click","#wpforms-entries-single .wpforms-empty-field-toggle",function(e){e.preventDefault(),"true"===wpCookies.get("wpforms_entry_hide_empty")?(wpCookies.remove("wpforms_entry_hide_empty"),l(this).text(wpforms_admin.entry_empty_fields_hide)):(wpCookies.set("wpforms_entry_hide_empty","true",2592e3),l(this).text(wpforms_admin.entry_empty_fields_show)),l(".wpforms-entry-field.empty").toggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .add",function(e){e.preventDefault(),l(this).hide().next("form").slideToggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .cancel",function(e){e.preventDefault(),l(this).closest("form").slideToggle(),l(".wpforms-entry-notes-new .add").show()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-byline .note-delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_note_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},entryHotkeys:function(){l(document).keydown(function(e){if(74!==e.keyCode||s.isFormTypeNode(e.target.nodeName)){if(75===e.keyCode&&!s.isFormTypeNode(e.target.nodeName)){var t=l("#wpforms-entry-next-link").attr("href");"#"!==t&&(window.location.href=t)}}else{var n=l("#wpforms-entry-prev-link").attr("href");"#"!==n&&(window.location.href=n)}})},initEntriesList:function(){l(document).on("click","#wpforms-entries-table-edit-columns",function(e){e.preventDefault(),s.entriesListFieldColumn()}),l(document).on("click","#wpforms-entries-list .form-selector .toggle",function(e){e.preventDefault(),l(this).toggleClass("active").next(".form-list").toggle()}),l(document).on("click","#wpforms-entries-list .wp-list-table .delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-star",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .starred-num").text()),i=t.data("id");t.hasClass("star")?(n="star",o++,t.attr("title",wpforms_admin.entry_unstar)):(n="unstar",o--,t.attr("title",wpforms_admin.entry_star)),t.toggleClass("star unstar"),l("#wpforms-entries-list .starred-num").text(o);var s={task:n,action:"wpforms_entry_list_star",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-read",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .unread-num").text()),i=t.data("id");t.hasClass("read")?(n="read",o--,t.attr("title",wpforms_admin.entry_unread)):(n="unread",o++,t.attr("title",wpforms_admin.entry_read)),t.toggleClass("read unread"),l("#wpforms-entries-list .unread-num").text(o);var s={task:n,action:"wpforms_entry_list_read",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .form-details-actions-deleteall",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_delete_all_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("heartbeat-send",function(e,t){var n=l("#wpforms-entries-list");if(n.length){var o=n.find("#wpforms-entries-table").data("last-entry-id");void 0!==o&&(t.wpforms_new_entries_entry_id=o,t.wpforms_new_entries_form_id=n.find("input[name=form_id]").val())}}),l(document).on("heartbeat-tick",function(e,t){var n,o=l("#wpforms-entries-list");o.length&&t.wpforms_new_entries_notification&&(n=o.find(".wp-list-table thead tr").first().children().length,o.find(".new-entries-notification").length||o.find(".wp-list-table thead").append('<tr class="new-entries-notification"><td colspan="'+n+'"><a href=""></a></td></tr>'),o.find(".new-entries-notification a").text(t.wpforms_new_entries_notification).slideDown({duration:500,start:function(){l(this).css({display:"block"})}}))})},entriesListFieldColumn:function(){l.alert({title:wpforms_admin.entry_field_columns,boxWidth:"500px",content:f.iconSpinner+l("#wpforms-field-column-select").html(),onContentReady:function(){var e=this.$content,t=e.find("select"),n=new Choices(t[0],{shouldSort:!1,removeItemButton:!0,placeholderValue:wpforms_admin.choicesjs_fields_select+"...",loadingText:wpforms_admin.choicesjs_loading,noResultsText:wpforms_admin.choicesjs_no_results,noChoicesText:wpforms_admin.choicesjs_no_choices,itemSelectText:wpforms_admin.choicesjs_item_select,callbackOnInit:function(){e.find(".fa").remove(),e.find("form").show()}});l(".jconfirm-content-pane, .jconfirm-box").css("overflow","visible"),n.passedElement.addEventListener("change",function(){n.hideDropdown()},!1)},buttons:{confirm:{text:wpforms_admin.save_refresh,btnClass:"btn-confirm",keys:["enter"],action:function(){this.$content.find("form").submit()}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initWelcome:function(){l(document).on("click","#wpforms-welcome .play-video",function(e){e.preventDefault();l.dialog({title:!1,content:'<div class="video-container"><iframe width="1280" height="720" src="https://www.youtube-nocookie.com/embed/yDyvSGV7tP4?rel=0&showinfo=0&autoplay=1" frameborder="0" allowfullscreen></iframe></div>',closeIcon:!0,boxWidth:"70%"})})},initAddons:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-admin-addons").length&&(l(".addon-item .details").matchHeight({byrow:!1,property:"height"}),l("#wpforms-admin-addons-list").length)){var n=new List("wpforms-admin-addons-list",{valueNames:["addon-name"]});l("#wpforms-admin-addons-search").on("keyup",function(){var e=l(this).val(),t=l("#addons-heading");e?t.text(wpforms_admin.addon_search):t.text(t.data("text")),n.search(e)})}}),l(document).on("click","#wpforms-admin-addons .addon-item button",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;s.addonToggle(l(this))})},addonToggle:function(t){var n,o,i,s,a,r,c=t.closest(".addon-item"),e=t.attr("data-plugin"),d=t.attr("data-type");if(t.hasClass("status-go-to-url"))window.open(t.attr("data-plugin"),"_blank");else{if(t.prop("disabled",!0).addClass("loading"),t.html(f.iconSpinner),t.hasClass("status-active"))n="wpforms_deactivate_addon",o="status-inactive","plugin"===d&&(o+=" button button-secondary"),i=wpforms_admin.addon_inactive,s=wpforms_admin.addon_activate,"addon"===d&&(s=f.iconActivate+s),a=f.iconDeactivate+wpforms_admin.addon_deactivate;else if(t.hasClass("status-inactive"))n="wpforms_activate_addon",o="status-active","plugin"===d&&(o+=" button button-secondary disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_deactivate,"addon"===d?s=f.iconDeactivate+s:"plugin"===d&&(s=wpforms_admin.addon_activated),a=f.iconActivate+wpforms_admin.addon_activate;else{if(!t.hasClass("status-download"))return;n="wpforms_install_addon",o="status-active","plugin"===d&&(o+=" button disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_activated,"addon"===d&&(s=f.iconActivate+wpforms_admin.addon_deactivate),a=f.iconInstall+wpforms_admin.addon_activate}var m={action:n,nonce:wpforms_admin.nonce,plugin:e,type:d};l.post(wpforms_admin.ajax_url,m,function(e){e.success?("wpforms_install_addon"===n?(t.attr("data-plugin",e.data.basename),r=e.data.msg,e.data.is_activated||(o="status-inactive","plugin"===d&&(o="button"),i=wpforms_admin.addon_inactive,s=f.iconActivate+wpforms_admin.addon_activate)):r=e.data,c.find(".actions").append('<div class="msg success">'+r+"</div>"),c.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(o).removeClass("button button-primary button-secondary disabled").text(i),t.removeClass("status-active status-inactive status-download").removeClass("button button-primary button-secondary disabled").addClass(o).html(s)):("download_failed"===e.data[0].code?"addon"===d?c.find(".actions").append('<div class="msg error">'+wpforms_admin.addon_error+"</div>"):c.find(".actions").append('<div class="msg error">'+wpforms_admin.plugin_error+"</div>"):c.find(".actions").append('<div class="msg error">'+e.data+"</div>"),t.html(a)),t.prop("disabled",!1).removeClass("loading"),setTimeout(function(){l(".addon-item .msg").remove()},3e3)}).fail(function(e){console.log(e.responseText)})}},initSettings:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-settings").length){var e=s.getQueryString("wpforms-integration"),t=s.getQueryString("jump");e?l("body").animate({scrollTop:l("#wpforms-integration-"+e).offset().top},1e3):t&&l("body").animate({scrollTop:l("#"+t).offset().top},1e3),l(".wpforms-admin-settings-form").conditions([{conditions:{element:"#wpforms-setting-gdpr",type:"checked",operator:"is"},actions:{if:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"show"},else:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"hide"}},effect:"appear"},{conditions:{element:"input[name=recaptcha-type]:checked",type:"value",operator:"=",condition:"v3"},actions:{if:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"show"},else:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"hide"}},effect:"appear"}])}}),l(document).on("change","#wpforms-setting-disable-css",function(){s.settingsFormStylesAlert(l(this).val())}),l(document).on("click",".wpforms-setting-row-image button",function(e){e.preventDefault(),s.imageUploadModal(l(this))}),l(document).on("click","#wpforms-setting-license-key-verify",function(e){e.preventDefault(),s.licenseVerify(l(this))}),l(document).on("click","#wpforms-setting-license-key-deactivate",function(e){e.preventDefault(),s.licenseDeactivate(l(this))}),l(document).on("click","#wpforms-setting-license-key-refresh",function(e){e.preventDefault(),s.licenseRefresh(l(this))}),l(document).on("click",".wpforms-settings-provider-connect",function(e){e.preventDefault();var t=l(this);s.integrationConnect(t)}),l(document).on("click",".wpforms-settings-provider-accounts-list a",function(e){e.preventDefault(),s.integrationDisconnect(l(this))}),l(document).on("click",".wpforms-settings-provider-header",function(e){e.preventDefault(),l(this).parent().find(".wpforms-settings-provider-accounts").slideToggle(),l(this).parent().find(".wpforms-settings-provider-logo i").toggleClass("fa-chevron-right fa-chevron-down")}),l(document).on("click",".wpforms-settings-provider-accounts-toggle a",function(e){e.preventDefault();var t=l(this).parent().next(".wpforms-settings-provider-accounts-connect");t.find("input[type=text], input[type=password]").val(""),t.slideToggle()})},settingsFormStylesAlert:function(e){if("2"===e)var t=wpforms_admin.settings_form_style_base;else{if("3"!==e)return;t=wpforms_admin.settings_form_style_none}l.alert({title:wpforms_admin.heads_up,content:t,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},imageUploadModal:function(e){if(f.media_frame)f.media_frame.open();else{var t=l(e).closest(".wpforms-setting-field");f.media_frame=wp.media.frames.wpforms_media_frame=wp.media({className:"media-frame wpforms-media-frame",frame:"select",multiple:!1,title:wpforms_admin.upload_image_title,library:{type:"image"},button:{text:wpforms_admin.upload_image_button}}),f.media_frame.on("select",function(){var e=f.media_frame.state().get("selection").first().toJSON();t.find("input[type=text]").val(e.url),t.find("img").remove(),t.prepend('<img src="'+e.url+'">')}),f.media_frame.open()}},licenseVerify:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").show(),s.find(".type strong").text(e.data.type),l(".wpforms-license-notice").remove()):(n="fa fa-exclamation-circle",o="orange",t=e.data,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseDeactivate:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_deactivate_license",nonce:wpforms_admin.nonce};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t="fa fa-info-circle",n="blue",o=e.data;e.success?(s.find("#wpforms-setting-license-key").val(""),s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()):(t="fa fa-exclamation-circle",n="orange"),l.alert({title:!1,content:o,icon:t,type:n,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseRefresh:function(e){var i=l(e).closest(".wpforms-setting-row"),t={action:"wpforms_refresh_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};l.post(wpforms_admin.ajax_url,t,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,i.find(".type strong").text(e.data.type)):(n="fa fa-exclamation-circle",o="orange",t=e.data,i.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){console.log(e.responseText)})},integrationConnect:function(n){var e=n.outerWidth(),o=n.text(),i=n.closest(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_add",data:n.closest("form").serialize(),provider:n.data("provider"),nonce:wpforms_admin.nonce};n.html("Connecting...").css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,t,function(e){if(e.success)i.find(".wpforms-settings-provider-accounts-list ul").append(e.data.html),i.addClass("connected"),n.closest(".wpforms-settings-provider-accounts-connect").slideToggle();else{var t=wpforms_admin.provider_auth_error;e.hasOwnProperty("data")&&e.data.hasOwnProperty("error_msg")&&(t+="\n"+e.data.error_msg),l.alert({title:!1,content:t,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}n.html(o).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},integrationDisconnect:function(e){var n=l(e),o=n.parents(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_disconnect",provider:n.data("provider"),key:n.data("key"),nonce:wpforms_admin.nonce};l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.provider_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){l.post(wpforms_admin.ajax_url,t,function(e){if(e.success){n.parent().parent().remove();var t=o.find(".wpforms-settings-provider-accounts-list li").length;void 0!==t&&0!==t||o.removeClass("connected")}else console.log(e)}).fail(function(e){console.log(e.responseText)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initTools:function(){l(document).on("click","#wpforms-ssl-verify",function(e){e.preventDefault(),s.verifySSLConnection()}),l(document).on("click","#wpforms-importer-forms-submit",function(e){if(e.preventDefault(),l("#wpforms-importer-forms input:checked").length){var t=[];l("#wpforms-importer-forms input:checked").each(function(e){t[e]=l(this).val()}),wpforms_admin.isPro?s.importForms(t):s.analyzeForms(t)}else l.alert({title:!1,content:wpforms_admin.importer_forms_required,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).on("click","#wpforms-importer-continue-submit",function(e){e.preventDefault(),s.importForms(f.formIDs)})},verifySSLConnection:function(){var t=l("#wpforms-ssl-verify"),n=t.text(),o=t.outerWidth(),i=t.parent(),e={action:"wpforms_verify_ssl",nonce:wpforms_admin.nonce};t.css("width",o).prop("disabled",!0).text(wpforms_admin.testing),l.post(wpforms_admin.ajax_url,e,function(e){console.log(e),i.find(".wpforms-alert, .wpforms-ssl-error").remove(),e.success?t.before('<div class="wpforms-alert wpforms-alert-success">'+e.data.msg+"</div>"):(t.before('<div class="wpforms-alert wpforms-alert-danger">'+e.data.msg+"</div>"),t.before('<div class="wpforms-ssl-error pre-error">'+e.data.debug+"</div>")),t.css("width",o).prop("disabled",!1).text(n)})},analyzeForms:function(e){var t=l("#wpforms-importer-analyze");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms").hide(),t.show(),f.analyzeQueue=e,f.analyzed=0,f.analyzeUpgrade=[],f.formIDs=e,s.analyzeForm()},analyzeForm:function(){var n=l("#wpforms-importer-analyze"),o=_.first(f.analyzeQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),analyze:1,form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success)if(_.isEmpty(e.data.upgrade_plain)&&_.isEmpty(e.data.upgrade_omit)||f.analyzeUpgrade.push({name:e.data.name,fields:_.union(e.data.upgrade_omit,e.data.upgrade_plain)}),f.analyzeQueue=_.without(f.analyzeQueue,o),f.analyzed++,_.isEmpty(f.analyzeQueue))if(_.isEmpty(f.analyzeUpgrade))s.importForms(f.formIDs);else{var t=wp.template("wpforms-importer-upgrade");n.find(".upgrade").append(t(f.analyzeUpgrade)),n.find(".upgrade").show(),n.find(".process-analyze").hide()}else n.find(".form-current").text(f.analyzed+1),s.analyzeForm()})},importForms:function(e){var t=l("#wpforms-importer-process");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms, #wpforms-importer-analyze").hide(),t.show(),f.importQueue=e,f.imported=0,s.importForm()},importForm:function(){var n=l("#wpforms-importer-process"),o=_.first(f.importQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){var t;e.success&&(t=e.data.error?wp.template("wpforms-importer-status-error"):wp.template("wpforms-importer-status-update"),n.find(".status").prepend(t(e.data)),n.find(".status").show(),f.importQueue=_.without(f.importQueue,o),f.imported++,_.isEmpty(f.importQueue)?(n.find(".process-count").hide(),n.find(".forms-completed").text(f.imported),n.find(".process-completed").show()):(n.find(".form-current").text(f.imported+1),s.importForm()))})},initUpgrades:function(){l(document).on("click","#wpforms-upgrade-143 button",function(e){e.preventDefault();var n=l(this),t=n.outerWidth(),o=l("#wpforms-upgrade-143 .status"),i={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,init:!0,incomplete:n.data("incomplete")};n.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,i,function(e){if(e.success){f.upgraded=Number(e.data.upgraded),f.upgradeTotal=Number(e.data.total);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.remove(),o.find(".bar").css("width",t+"%"),o.show().find(".total").text(f.upgradeTotal),o.find(".current").text(f.upgraded),o.find(".percent").text(t+"%"),s.upgrade143()}})})},upgrade143:function(){var n=l("#wpforms-upgrade-143 .status"),e={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,upgraded:f.upgraded};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success){f.upgraded=Number(f.upgraded)+Number(e.data.count);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.find(".bar").css("width",t+"%"),Number(e.data.count)<10?(n.find(".progress-bar").addClass("complete"),n.find(".msg").text(wpforms_admin.upgrade_completed)):(n.find(".current").text(f.upgraded),n.find(".percent").text(t+"%"),s.upgrade143())}})},isFormTypeNode:function(e){return"TEXTAREA"===(e=e||!1)||"INPUT"===e||"SELECT"===e},getQueryString:function(e){var t=new RegExp("[?&]"+e+"=([^&]*)").exec(window.location.search);return t&&decodeURIComponent(t[1].replace(/\+/g," "))},debug:function(e){s.isDebug()&&("object"==typeof e||e.constructor===Array?(console.log("WPForms Debug:"),console.log(e)):console.log("WPForms Debug: "+e))},isDebug:function(){return window.location.hash&&"#wpformsdebug"===window.location.hash}};s.init(),window.WPFormsAdmin=s}(jQuery);
|
1 |
+
!function(l){"use strict";var f,s={settings:{iconActivate:'<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',iconDeactivate:'<i class="fa fa-toggle-on" aria-hidden="true"></i>',iconInstall:'<i class="fa fa-cloud-download" aria-hidden="true"></i>',iconSpinner:'<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',mediaFrame:!1},init:function(){f=this.settings,l(document).ready(s.ready),s.initFormOverview(),s.initEntriesSingle(),s.initEntriesList(),s.initWelcome(),s.initAddons(),s.initSettings(),s.initTools(),s.initUpgrades()},ready:function(){l(".notice").show(),l("#screen-meta-links, #screen-meta").prependTo("#wpforms-header-temp").show(),s.initChoicesJS(),s.initCheckboxMultiselectColumns(),l(".wpforms-color-picker").minicolors(),l(".wpforms-file-upload").each(function(){var e=l(this).find("input[type=file]"),n=l(this).find("label"),o=n.html();e.on("change",function(e){var t="";this.files&&1<this.files.length?t=(this.getAttribute("data-multiple-caption")||"").replace("{count}",this.files.length):e.target.value&&(t=e.target.value.split("\\").pop()),t?n.find(".fld").html(t):n.html(o)}),e.on("focus",function(){e.addClass("has-focus")}).on("blur",function(){e.removeClass("has-focus")})}),jconfirm.defaults={closeIcon:!0,backgroundDismiss:!0,escapeKey:!0,animationBounce:1,useBootstrap:!1,theme:"modern",boxWidth:"400px",animateFromElement:!1},l(document).on("click",".wpforms-upgrade-modal",function(){l.alert({title:!1,content:wpforms_admin.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).trigger("wpformsReady")},initChoicesJS:function(){l(".choicesjs-select").each(function(){var e=l(this),t={searchEnabled:!1};e.attr("multiple")&&(t.searchEnabled=!0,t.removeItemButton=!0),e.data("placeholder")&&(t.placeholderValue=e.data("placeholder")),"off"===e.data("sorting")&&(t.shouldSort=!1),e.data("search")&&(t.searchEnabled=!0),t.loadingText=wpforms_admin.choicesjs_loading,t.noResultsText=wpforms_admin.choicesjs_no_results,t.noChoicesText=wpforms_admin.choicesjs_no_choices,t.itemSelectText=wpforms_admin.choicesjs_item_select,new Choices(e[0],t)})},initCheckboxMultiselectColumns:function(){l(document).on("change",".checkbox-multiselect-columns input",function(){var e=l(this),t=e.parent(),n=e.closest(".checkbox-multiselect-columns"),o=t.text(),i="check-item-"+e.val(),s=n.find("#"+i);e.prop("checked")?(e.parent().addClass("checked"),s.length||n.find(".second-column ul").append('<li id="'+i+'">'+o+"</li>")):(e.parent().removeClass("checked"),n.find("#"+i).remove())}),l(document).on("click",".checkbox-multiselect-columns .all",function(e){e.preventDefault(),l(this).closest(".checkbox-multiselect-columns").find("input[type=checkbox]").prop("checked",!0).trigger("change"),l(this).remove()})},initFormOverview:function(){l(document).on("click","#wpforms-overview .wp-list-table .delete a, #wpforms-overview .wp-list-table .duplicate a",function(e){e.preventDefault();var t=l(this).attr("href"),n=l(this).parent().hasClass("delete")?wpforms_admin.form_delete_confirm:wpforms_admin.form_duplicate_confirm;l.confirm({title:!1,content:n,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},initEntriesSingle:function(){"wpforms-entries"===s.getQueryString("page")&&"details"===s.getQueryString("view")&&s.entryHotkeys(),l(document).on("click","#wpforms-entries-single .submitdelete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-single .wpforms-entry-print a",function(e){e.preventDefault(),window.open(l(this).attr("href"))}),l(document).on("click","#wpforms-entries-single .wpforms-empty-field-toggle",function(e){e.preventDefault(),"true"===wpCookies.get("wpforms_entry_hide_empty")?(wpCookies.remove("wpforms_entry_hide_empty"),l(this).text(wpforms_admin.entry_empty_fields_hide)):(wpCookies.set("wpforms_entry_hide_empty","true",2592e3),l(this).text(wpforms_admin.entry_empty_fields_show)),l(".wpforms-entry-field.empty").toggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .add",function(e){e.preventDefault(),l(this).hide().next("form").slideToggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .cancel",function(e){e.preventDefault(),l(this).closest("form").slideToggle(),l(".wpforms-entry-notes-new .add").show()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-byline .note-delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_note_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},entryHotkeys:function(){l(document).keydown(function(e){if(74!==e.keyCode||s.isFormTypeNode(e.target.nodeName)){if(75===e.keyCode&&!s.isFormTypeNode(e.target.nodeName)){var t=l("#wpforms-entry-next-link").attr("href");"#"!==t&&(window.location.href=t)}}else{var n=l("#wpforms-entry-prev-link").attr("href");"#"!==n&&(window.location.href=n)}})},initEntriesList:function(){l(document).on("click","#wpforms-entries-table-edit-columns",function(e){e.preventDefault(),s.entriesListFieldColumn()}),l(document).on("click","#wpforms-entries-list .form-selector .toggle",function(e){e.preventDefault(),l(this).toggleClass("active").next(".form-list").toggle()}),l(document).on("click","#wpforms-entries-list .wp-list-table .delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-star",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .starred-num").text()),i=t.data("id");t.hasClass("star")?(n="star",o++,t.attr("title",wpforms_admin.entry_unstar)):(n="unstar",o--,t.attr("title",wpforms_admin.entry_star)),t.toggleClass("star unstar"),l("#wpforms-entries-list .starred-num").text(o);var s={task:n,action:"wpforms_entry_list_star",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-read",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .unread-num").text()),i=t.data("id");t.hasClass("read")?(n="read",o--,t.attr("title",wpforms_admin.entry_unread)):(n="unread",o++,t.attr("title",wpforms_admin.entry_read)),t.toggleClass("read unread"),l("#wpforms-entries-list .unread-num").text(o);var s={task:n,action:"wpforms_entry_list_read",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .form-details-actions-deleteall",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_delete_all_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("heartbeat-send",function(e,t){var n=l("#wpforms-entries-list");if(n.length&&!n.find(".wpforms-dash-widget").length){var o=n.find("#wpforms-entries-table").data("last-entry-id");void 0!==o&&(t.wpforms_new_entries_entry_id=o,t.wpforms_new_entries_form_id=n.find("input[name=form_id]").val())}}),l(document).on("heartbeat-tick",function(e,t){var n,o=l("#wpforms-entries-list");o.length&&t.wpforms_new_entries_notification&&(n=o.find(".wp-list-table thead tr").first().children().length,o.find(".new-entries-notification").length||o.find(".wp-list-table thead").append('<tr class="new-entries-notification"><td colspan="'+n+'"><a href=""></a></td></tr>'),o.find(".new-entries-notification a").text(t.wpforms_new_entries_notification).slideDown({duration:500,start:function(){l(this).css({display:"block"})}}))})},entriesListFieldColumn:function(){l.alert({title:wpforms_admin.entry_field_columns,boxWidth:"500px",content:f.iconSpinner+l("#wpforms-field-column-select").html(),onContentReady:function(){var e=this.$content,t=e.find("select"),n=new Choices(t[0],{shouldSort:!1,removeItemButton:!0,placeholderValue:wpforms_admin.choicesjs_fields_select+"...",loadingText:wpforms_admin.choicesjs_loading,noResultsText:wpforms_admin.choicesjs_no_results,noChoicesText:wpforms_admin.choicesjs_no_choices,itemSelectText:wpforms_admin.choicesjs_item_select,callbackOnInit:function(){e.find(".fa").remove(),e.find("form").show()}});l(".jconfirm-content-pane, .jconfirm-box").css("overflow","visible"),n.passedElement.addEventListener("change",function(){n.hideDropdown()},!1)},buttons:{confirm:{text:wpforms_admin.save_refresh,btnClass:"btn-confirm",keys:["enter"],action:function(){this.$content.find("form").submit()}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initWelcome:function(){l(document).on("click","#wpforms-welcome .play-video",function(e){e.preventDefault();l.dialog({title:!1,content:'<div class="video-container"><iframe width="1280" height="720" src="https://www.youtube-nocookie.com/embed/yDyvSGV7tP4?rel=0&showinfo=0&autoplay=1" frameborder="0" allowfullscreen></iframe></div>',closeIcon:!0,boxWidth:"70%"})})},initAddons:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-admin-addons").length&&(l(".addon-item .details").matchHeight({byrow:!1,property:"height"}),l("#wpforms-admin-addons-list").length)){var n=new List("wpforms-admin-addons-list",{valueNames:["addon-name"]});l("#wpforms-admin-addons-search").on("keyup",function(){var e=l(this).val(),t=l("#addons-heading");e?t.text(wpforms_admin.addon_search):t.text(t.data("text")),n.search(e)})}}),l(document).on("click","#wpforms-admin-addons .addon-item button",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;s.addonToggle(l(this))})},addonToggle:function(t){var n,o,i,s,a,r,c=t.closest(".addon-item"),e=t.attr("data-plugin"),d=t.attr("data-type");if(t.hasClass("status-go-to-url"))window.open(t.attr("data-plugin"),"_blank");else{if(t.prop("disabled",!0).addClass("loading"),t.html(f.iconSpinner),t.hasClass("status-active"))n="wpforms_deactivate_addon",o="status-inactive","plugin"===d&&(o+=" button button-secondary"),i=wpforms_admin.addon_inactive,s=wpforms_admin.addon_activate,"addon"===d&&(s=f.iconActivate+s),a=f.iconDeactivate+wpforms_admin.addon_deactivate;else if(t.hasClass("status-inactive"))n="wpforms_activate_addon",o="status-active","plugin"===d&&(o+=" button button-secondary disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_deactivate,"addon"===d?s=f.iconDeactivate+s:"plugin"===d&&(s=wpforms_admin.addon_activated),a=f.iconActivate+wpforms_admin.addon_activate;else{if(!t.hasClass("status-download"))return;n="wpforms_install_addon",o="status-active","plugin"===d&&(o+=" button disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_activated,"addon"===d&&(s=f.iconActivate+wpforms_admin.addon_deactivate),a=f.iconInstall+wpforms_admin.addon_activate}var m={action:n,nonce:wpforms_admin.nonce,plugin:e,type:d};l.post(wpforms_admin.ajax_url,m,function(e){e.success?("wpforms_install_addon"===n?(t.attr("data-plugin",e.data.basename),r=e.data.msg,e.data.is_activated||(o="status-inactive","plugin"===d&&(o="button"),i=wpforms_admin.addon_inactive,s=f.iconActivate+wpforms_admin.addon_activate)):r=e.data,c.find(".actions").append('<div class="msg success">'+r+"</div>"),c.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(o).removeClass("button button-primary button-secondary disabled").text(i),t.removeClass("status-active status-inactive status-download").removeClass("button button-primary button-secondary disabled").addClass(o).html(s)):("download_failed"===e.data[0].code?"addon"===d?c.find(".actions").append('<div class="msg error">'+wpforms_admin.addon_error+"</div>"):c.find(".actions").append('<div class="msg error">'+wpforms_admin.plugin_error+"</div>"):c.find(".actions").append('<div class="msg error">'+e.data+"</div>"),t.html(a)),t.prop("disabled",!1).removeClass("loading"),setTimeout(function(){l(".addon-item .msg").remove()},3e3)}).fail(function(e){console.log(e.responseText)})}},initSettings:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-settings").length){var e=s.getQueryString("wpforms-integration"),t=s.getQueryString("jump");e?l("body").animate({scrollTop:l("#wpforms-integration-"+e).offset().top},1e3):t&&l("body").animate({scrollTop:l("#"+t).offset().top},1e3),l(".wpforms-admin-settings-form").conditions([{conditions:{element:"#wpforms-setting-gdpr",type:"checked",operator:"is"},actions:{if:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"show"},else:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"hide"}},effect:"appear"},{conditions:{element:"input[name=recaptcha-type]:checked",type:"value",operator:"=",condition:"v3"},actions:{if:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"show"},else:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"hide"}},effect:"appear"}])}}),l(document).on("change","#wpforms-setting-disable-css",function(){s.settingsFormStylesAlert(l(this).val())}),l(document).on("click",".wpforms-setting-row-image button",function(e){e.preventDefault(),s.imageUploadModal(l(this))}),l(document).on("click","#wpforms-setting-license-key-verify",function(e){e.preventDefault(),s.licenseVerify(l(this))}),l(document).on("click","#wpforms-setting-license-key-deactivate",function(e){e.preventDefault(),s.licenseDeactivate(l(this))}),l(document).on("click","#wpforms-setting-license-key-refresh",function(e){e.preventDefault(),s.licenseRefresh(l(this))}),l(document).on("click",".wpforms-settings-provider-connect",function(e){e.preventDefault();var t=l(this);s.integrationConnect(t)}),l(document).on("click",".wpforms-settings-provider-accounts-list a",function(e){e.preventDefault(),s.integrationDisconnect(l(this))}),l(document).on("click",".wpforms-settings-provider:not(.focus-out) .wpforms-settings-provider-header",function(e){e.preventDefault(),l(this).parent().find(".wpforms-settings-provider-accounts").slideToggle(),l(this).parent().find(".wpforms-settings-provider-logo i").toggleClass("fa-chevron-right fa-chevron-down")}),l(document).on("click",".wpforms-settings-provider-accounts-toggle a",function(e){e.preventDefault();var t=l(this).parent().next(".wpforms-settings-provider-accounts-connect");t.find("input[type=text], input[type=password]").val(""),t.slideToggle()})},settingsFormStylesAlert:function(e){if("2"===e)var t=wpforms_admin.settings_form_style_base;else{if("3"!==e)return;t=wpforms_admin.settings_form_style_none}l.alert({title:wpforms_admin.heads_up,content:t,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},imageUploadModal:function(e){if(f.media_frame)f.media_frame.open();else{var t=l(e).closest(".wpforms-setting-field");f.media_frame=wp.media.frames.wpforms_media_frame=wp.media({className:"media-frame wpforms-media-frame",frame:"select",multiple:!1,title:wpforms_admin.upload_image_title,library:{type:"image"},button:{text:wpforms_admin.upload_image_button}}),f.media_frame.on("select",function(){var e=f.media_frame.state().get("selection").first().toJSON();t.find("input[type=text]").val(e.url),t.find("img").remove(),t.prepend('<img src="'+e.url+'">')}),f.media_frame.open()}},licenseVerify:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").show(),s.find(".type strong").text(e.data.type),l(".wpforms-license-notice").remove()):(n="fa fa-exclamation-circle",o="orange",t=e.data,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseDeactivate:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_deactivate_license",nonce:wpforms_admin.nonce};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t="fa fa-info-circle",n="blue",o=e.data;e.success?(s.find("#wpforms-setting-license-key").val(""),s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()):(t="fa fa-exclamation-circle",n="orange"),l.alert({title:!1,content:o,icon:t,type:n,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseRefresh:function(e){var i=l(e).closest(".wpforms-setting-row"),t={action:"wpforms_refresh_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};l.post(wpforms_admin.ajax_url,t,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,i.find(".type strong").text(e.data.type)):(n="fa fa-exclamation-circle",o="orange",t=e.data,i.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){console.log(e.responseText)})},integrationConnect:function(n){var e=n.outerWidth(),o=n.text(),i=n.closest(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_add",data:n.closest("form").serialize(),provider:n.data("provider"),nonce:wpforms_admin.nonce};n.html("Connecting...").css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,t,function(e){if(e.success)i.find(".wpforms-settings-provider-accounts-list ul").append(e.data.html),i.addClass("connected"),n.closest(".wpforms-settings-provider-accounts-connect").slideToggle();else{var t=wpforms_admin.provider_auth_error;e.hasOwnProperty("data")&&e.data.hasOwnProperty("error_msg")&&(t+="\n"+e.data.error_msg),l.alert({title:!1,content:t,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}n.html(o).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},integrationDisconnect:function(e){var n=l(e),o=n.parents(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_disconnect",provider:n.data("provider"),key:n.data("key"),nonce:wpforms_admin.nonce};l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.provider_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){l.post(wpforms_admin.ajax_url,t,function(e){if(e.success){n.parent().parent().remove();var t=o.find(".wpforms-settings-provider-accounts-list li").length;void 0!==t&&0!==t||o.removeClass("connected")}else console.log(e)}).fail(function(e){console.log(e.responseText)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initTools:function(){l(document).on("click","#wpforms-ssl-verify",function(e){e.preventDefault(),s.verifySSLConnection()}),l(document).on("click","#wpforms-importer-forms-submit",function(e){if(e.preventDefault(),l("#wpforms-importer-forms input:checked").length){var t=[];l("#wpforms-importer-forms input:checked").each(function(e){t[e]=l(this).val()}),wpforms_admin.isPro?s.importForms(t):s.analyzeForms(t)}else l.alert({title:!1,content:wpforms_admin.importer_forms_required,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).on("click","#wpforms-importer-continue-submit",function(e){e.preventDefault(),s.importForms(f.formIDs)})},verifySSLConnection:function(){var t=l("#wpforms-ssl-verify"),n=t.text(),o=t.outerWidth(),i=t.parent(),e={action:"wpforms_verify_ssl",nonce:wpforms_admin.nonce};t.css("width",o).prop("disabled",!0).text(wpforms_admin.testing),l.post(wpforms_admin.ajax_url,e,function(e){console.log(e),i.find(".wpforms-alert, .wpforms-ssl-error").remove(),e.success?t.before('<div class="wpforms-alert wpforms-alert-success">'+e.data.msg+"</div>"):(t.before('<div class="wpforms-alert wpforms-alert-danger">'+e.data.msg+"</div>"),t.before('<div class="wpforms-ssl-error pre-error">'+e.data.debug+"</div>")),t.css("width",o).prop("disabled",!1).text(n)})},analyzeForms:function(e){var t=l("#wpforms-importer-analyze");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms").hide(),t.show(),f.analyzeQueue=e,f.analyzed=0,f.analyzeUpgrade=[],f.formIDs=e,s.analyzeForm()},analyzeForm:function(){var n=l("#wpforms-importer-analyze"),o=_.first(f.analyzeQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),analyze:1,form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success)if(_.isEmpty(e.data.upgrade_plain)&&_.isEmpty(e.data.upgrade_omit)||f.analyzeUpgrade.push({name:e.data.name,fields:_.union(e.data.upgrade_omit,e.data.upgrade_plain)}),f.analyzeQueue=_.without(f.analyzeQueue,o),f.analyzed++,_.isEmpty(f.analyzeQueue))if(_.isEmpty(f.analyzeUpgrade))s.importForms(f.formIDs);else{var t=wp.template("wpforms-importer-upgrade");n.find(".upgrade").append(t(f.analyzeUpgrade)),n.find(".upgrade").show(),n.find(".process-analyze").hide()}else n.find(".form-current").text(f.analyzed+1),s.analyzeForm()})},importForms:function(e){var t=l("#wpforms-importer-process");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms, #wpforms-importer-analyze").hide(),t.show(),f.importQueue=e,f.imported=0,s.importForm()},importForm:function(){var n=l("#wpforms-importer-process"),o=_.first(f.importQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){var t;e.success&&(t=e.data.error?wp.template("wpforms-importer-status-error"):wp.template("wpforms-importer-status-update"),n.find(".status").prepend(t(e.data)),n.find(".status").show(),f.importQueue=_.without(f.importQueue,o),f.imported++,_.isEmpty(f.importQueue)?(n.find(".process-count").hide(),n.find(".forms-completed").text(f.imported),n.find(".process-completed").show()):(n.find(".form-current").text(f.imported+1),s.importForm()))})},initUpgrades:function(){l(document).on("click","#wpforms-upgrade-143 button",function(e){e.preventDefault();var n=l(this),t=n.outerWidth(),o=l("#wpforms-upgrade-143 .status"),i={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,init:!0,incomplete:n.data("incomplete")};n.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,i,function(e){if(e.success){f.upgraded=Number(e.data.upgraded),f.upgradeTotal=Number(e.data.total);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.remove(),o.find(".bar").css("width",t+"%"),o.show().find(".total").text(f.upgradeTotal),o.find(".current").text(f.upgraded),o.find(".percent").text(t+"%"),s.upgrade143()}})})},upgrade143:function(){var n=l("#wpforms-upgrade-143 .status"),e={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,upgraded:f.upgraded};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success){f.upgraded=Number(f.upgraded)+Number(e.data.count);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.find(".bar").css("width",t+"%"),Number(e.data.count)<10?(n.find(".progress-bar").addClass("complete"),n.find(".msg").text(wpforms_admin.upgrade_completed)):(n.find(".current").text(f.upgraded),n.find(".percent").text(t+"%"),s.upgrade143())}})},isFormTypeNode:function(e){return"TEXTAREA"===(e=e||!1)||"INPUT"===e||"SELECT"===e},getQueryString:function(e){var t=new RegExp("[?&]"+e+"=([^&]*)").exec(window.location.search);return t&&decodeURIComponent(t[1].replace(/\+/g," "))},debug:function(e){s.isDebug()&&("object"==typeof e||e.constructor===Array?(console.log("WPForms Debug:"),console.log(e)):console.log("WPForms Debug: "+e))},isDebug:function(){return window.location.hash&&"#wpformsdebug"===window.location.hash}};s.init(),window.WPFormsAdmin=s}(jQuery);
|
changelog.txt
CHANGED
@@ -1,5 +1,15 @@
|
|
1 |
== Changelog ==
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
= 1.5.4.2 =
|
4 |
- Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
|
5 |
- Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
|
1 |
== Changelog ==
|
2 |
|
3 |
+
= 1.5.5 =
|
4 |
+
- Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info).
|
5 |
+
- Added: Filter `wpforms_emails_summaries_is_disabled` to easily disable Email Summaries functionality.
|
6 |
+
- Added: New smart tag: `{field_html_id="42"}` - that will postprocess field value and display its HTML representation.
|
7 |
+
- Changed: Improve `wpforms_get_ip()` IP detection and related `{user_ip}` smart-tag value.
|
8 |
+
- Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well.
|
9 |
+
- Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields.
|
10 |
+
- Fixed: Various typos.
|
11 |
+
- Fixed: WP Mail SMTP plugin description on About us page.
|
12 |
+
|
13 |
= 1.5.4.2 =
|
14 |
- Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
|
15 |
- Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
|
includes/admin/admin.php
CHANGED
@@ -146,6 +146,8 @@ function wpforms_admin_scripts() {
|
|
146 |
'importer_forms_required' => esc_html__( 'Please select at least one form to import.', 'wpforms-lite' ),
|
147 |
'isPro' => wpforms()->pro,
|
148 |
'nonce' => wp_create_nonce( 'wpforms-admin' ),
|
|
|
|
|
149 |
'ok' => esc_html__( 'OK', 'wpforms-lite' ),
|
150 |
'plugin_install_activate_btn' => esc_html__( 'Install and Activate', 'wpforms-lite' ),
|
151 |
'plugin_install_activate_confirm' => esc_html__( 'needs to be installed and activated to import its forms. Would you like us to install and activate it for you?', 'wpforms-lite' ),
|
@@ -154,6 +156,7 @@ function wpforms_admin_scripts() {
|
|
154 |
'provider_delete_confirm' => esc_html__( 'Are you sure you want to disconnect this account?', 'wpforms-lite' ),
|
155 |
'provider_auth_error' => esc_html__( 'Could not authenticate with the provider.', 'wpforms-lite' ),
|
156 |
'save_refresh' => esc_html__( 'Save and Refresh', 'wpforms-lite' ),
|
|
|
157 |
'settings_form_style_base' => sprintf(
|
158 |
wp_kses(
|
159 |
/* translators: %s - WPForms.com docs page URL. */
|
146 |
'importer_forms_required' => esc_html__( 'Please select at least one form to import.', 'wpforms-lite' ),
|
147 |
'isPro' => wpforms()->pro,
|
148 |
'nonce' => wp_create_nonce( 'wpforms-admin' ),
|
149 |
+
'almost_done' => esc_html__( 'Almost Done', 'wpforms-lite' ),
|
150 |
+
'oops' => esc_html__( 'Oops!', 'wpforms-lite' ),
|
151 |
'ok' => esc_html__( 'OK', 'wpforms-lite' ),
|
152 |
'plugin_install_activate_btn' => esc_html__( 'Install and Activate', 'wpforms-lite' ),
|
153 |
'plugin_install_activate_confirm' => esc_html__( 'needs to be installed and activated to import its forms. Would you like us to install and activate it for you?', 'wpforms-lite' ),
|
156 |
'provider_delete_confirm' => esc_html__( 'Are you sure you want to disconnect this account?', 'wpforms-lite' ),
|
157 |
'provider_auth_error' => esc_html__( 'Could not authenticate with the provider.', 'wpforms-lite' ),
|
158 |
'save_refresh' => esc_html__( 'Save and Refresh', 'wpforms-lite' ),
|
159 |
+
'server_error' => esc_html__( 'Unfortunately, there was an server connection error.', 'wpforms-lite' ),
|
160 |
'settings_form_style_base' => sprintf(
|
161 |
wp_kses(
|
162 |
/* translators: %s - WPForms.com docs page URL. */
|
includes/admin/builder/panels/class-setup.php
CHANGED
@@ -90,7 +90,7 @@ class WPForms_Builder_Panel_Setup extends WPForms_Builder_Panel {
|
|
90 |
printf(
|
91 |
wp_kses(
|
92 |
/* translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates. */
|
93 |
-
__( 'Have a suggestion for a new template? <a href="%1$s" target="_blank" rel="noopener noreferrer">We\'d love to hear it</a>. Also, you can <a href="%
|
94 |
array(
|
95 |
'a' => array(
|
96 |
'href' => array(),
|
90 |
printf(
|
91 |
wp_kses(
|
92 |
/* translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates. */
|
93 |
+
__( 'Have a suggestion for a new template? <a href="%1$s" target="_blank" rel="noopener noreferrer">We\'d love to hear it</a>. Also, you can <a href="%2$s" target="_blank" rel="noopener noreferrer">create your own templates</a>!', 'wpforms-lite' ),
|
94 |
array(
|
95 |
'a' => array(
|
96 |
'href' => array(),
|
includes/admin/class-about.php
CHANGED
@@ -774,13 +774,13 @@ class WPForms_About {
|
|
774 |
'wp-mail-smtp/wp_mail_smtp.php' => array(
|
775 |
'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
|
776 |
'name' => esc_html__( 'WP Mail SMTP', 'wpforms-lite' ),
|
777 |
-
'desc' => esc_html__( '
|
778 |
'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
|
779 |
'pro' => array(
|
780 |
'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
|
781 |
'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
|
782 |
'name' => esc_html__( 'WP Mail SMTP Pro', 'wpforms-lite' ),
|
783 |
-
'desc' => esc_html__( '
|
784 |
'url' => 'https://wpmailsmtp.com/pricing/',
|
785 |
'act' => 'go-to-url',
|
786 |
),
|
774 |
'wp-mail-smtp/wp_mail_smtp.php' => array(
|
775 |
'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
|
776 |
'name' => esc_html__( 'WP Mail SMTP', 'wpforms-lite' ),
|
777 |
+
'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'wpforms-lite' ),
|
778 |
'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
|
779 |
'pro' => array(
|
780 |
'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
|
781 |
'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
|
782 |
'name' => esc_html__( 'WP Mail SMTP Pro', 'wpforms-lite' ),
|
783 |
+
'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'wpforms-lite' ),
|
784 |
'url' => 'https://wpmailsmtp.com/pricing/',
|
785 |
'act' => 'go-to-url',
|
786 |
),
|
includes/admin/class-settings.php
CHANGED
@@ -152,34 +152,6 @@ class WPForms_Settings {
|
|
152 |
*/
|
153 |
public function enqueues() {
|
154 |
|
155 |
-
$min = \wpforms_get_min_suffix();
|
156 |
-
|
157 |
-
// Enqueue Lite's assets.
|
158 |
-
if ( ! wpforms()->pro ) {
|
159 |
-
\wp_enqueue_script(
|
160 |
-
'wpforms-upgrade',
|
161 |
-
\WPFORMS_PLUGIN_URL . "lite/assets/js/admin/upgrade{$min}.js",
|
162 |
-
array( 'jquery' ),
|
163 |
-
\WPFORMS_VERSION,
|
164 |
-
true
|
165 |
-
);
|
166 |
-
|
167 |
-
\wp_localize_script(
|
168 |
-
'wpforms-upgrade',
|
169 |
-
'wpforms_upgrade',
|
170 |
-
array(
|
171 |
-
'error' => esc_html__( 'Oops!', 'wpforms-lite' ),
|
172 |
-
'error_intro' => esc_html__( 'Unfortunately, there was an server connection error:', 'wpforms-lite' ),
|
173 |
-
'upgrd_to_pro_license_ok_title' => esc_html__( 'Almost Done', 'wpforms-lite' ),
|
174 |
-
'upgrd_to_pro_license_ok_msg' => esc_html__( 'We can automatically upgrade the installed version to WPForms PRO.', 'wpforms-lite' ),
|
175 |
-
'upgrd_to_pro_btn_ok' => esc_html__( 'Ok', 'wpforms-lite' ),
|
176 |
-
'upgrd_to_pro_btn_upgrade' => esc_html__( 'Upgrade now', 'wpforms-lite' ),
|
177 |
-
'upgrd_to_pro_btn_activate' => esc_html__( 'Activate now', 'wpforms-lite' ),
|
178 |
-
'upgrd_to_pro_btn_cancel' => esc_html__( 'Do upgrade later', 'wpforms-lite' ),
|
179 |
-
)
|
180 |
-
);
|
181 |
-
}
|
182 |
-
|
183 |
do_action( 'wpforms_settings_enqueue' );
|
184 |
}
|
185 |
|
152 |
*/
|
153 |
public function enqueues() {
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
do_action( 'wpforms_settings_enqueue' );
|
156 |
}
|
157 |
|
includes/admin/class-tools.php
CHANGED
@@ -512,6 +512,8 @@ class WPForms_Tools {
|
|
512 |
*/
|
513 |
public function export_tab() {
|
514 |
|
|
|
|
|
515 |
?>
|
516 |
|
517 |
<div class="wpforms-setting-row tools">
|
@@ -593,6 +595,8 @@ class WPForms_Tools {
|
|
593 |
</div>
|
594 |
|
595 |
<?php
|
|
|
|
|
596 |
}
|
597 |
|
598 |
/**
|
512 |
*/
|
513 |
public function export_tab() {
|
514 |
|
515 |
+
do_action( 'wpforms_admin_tools_export_top' );
|
516 |
+
|
517 |
?>
|
518 |
|
519 |
<div class="wpforms-setting-row tools">
|
595 |
</div>
|
596 |
|
597 |
<?php
|
598 |
+
|
599 |
+
do_action( 'wpforms_admin_tools_export_bottom' );
|
600 |
}
|
601 |
|
602 |
/**
|
includes/admin/settings-api.php
CHANGED
@@ -101,15 +101,12 @@ function wpforms_settings_content_callback( $args ) {
|
|
101 |
*/
|
102 |
function wpforms_settings_license_callback( $args ) {
|
103 |
|
104 |
-
$key = wpforms_setting( 'key', '', 'wpforms_license' );
|
105 |
-
$type = wpforms_setting( 'type', '', 'wpforms_license' );
|
106 |
-
|
107 |
// Lite users don't need to worry about license keys.
|
108 |
if ( ! wpforms()->pro || ! class_exists( 'WPForms_License', false ) ) {
|
109 |
|
110 |
$output = '<p>' . esc_html__( 'You\'re using WPForms Lite - no license needed. Enjoy!', 'wpforms-lite' ) . ' 🙂</p>';
|
111 |
$output .=
|
112 |
-
'<
|
113 |
sprintf(
|
114 |
wp_kses(
|
115 |
/* translators: %s - WPForms.com upgrade URL. */
|
@@ -138,13 +135,18 @@ function wpforms_settings_license_callback( $args ) {
|
|
138 |
) .
|
139 |
'</p>';
|
140 |
|
141 |
-
$output .= '<hr><p>' . esc_html__( 'Already purchased?
|
142 |
-
$output .= '<p
|
143 |
-
$output .= '<
|
|
|
|
|
144 |
|
145 |
return $output;
|
146 |
}
|
147 |
|
|
|
|
|
|
|
148 |
$output = '<input type="password" id="wpforms-setting-license-key" value="' . esc_attr( $key ) . '" />';
|
149 |
$output .= '<button id="wpforms-setting-license-key-verify" class="wpforms-btn wpforms-btn-md wpforms-btn-orange">' . esc_html__( 'Verify Key', 'wpforms-lite' ) . '</button>';
|
150 |
|
101 |
*/
|
102 |
function wpforms_settings_license_callback( $args ) {
|
103 |
|
|
|
|
|
|
|
104 |
// Lite users don't need to worry about license keys.
|
105 |
if ( ! wpforms()->pro || ! class_exists( 'WPForms_License', false ) ) {
|
106 |
|
107 |
$output = '<p>' . esc_html__( 'You\'re using WPForms Lite - no license needed. Enjoy!', 'wpforms-lite' ) . ' 🙂</p>';
|
108 |
$output .=
|
109 |
+
'<p>' .
|
110 |
sprintf(
|
111 |
wp_kses(
|
112 |
/* translators: %s - WPForms.com upgrade URL. */
|
135 |
) .
|
136 |
'</p>';
|
137 |
|
138 |
+
$output .= '<hr><p>' . esc_html__( 'Already purchased? Simply enter your license key below to connect with WPForms PRO!', 'wpforms-lite' ) . '</p>';
|
139 |
+
$output .= '<p>';
|
140 |
+
$output .= '<input type="password" id="wpforms-settings-upgrade-license-key" placeholder="' . esc_attr__( 'Paste license key here', 'wpforms-lite' ) . '" value="" />';
|
141 |
+
$output .= '<button type="button" class="wpforms-btn wpforms-btn-md wpforms-btn-orange" id="wpforms-settings-connect-btn">' . esc_attr__( 'Connect', 'wpforms-lite' ) . '</button>';
|
142 |
+
$output .= '</p>';
|
143 |
|
144 |
return $output;
|
145 |
}
|
146 |
|
147 |
+
$key = wpforms_setting( 'key', '', 'wpforms_license' );
|
148 |
+
$type = wpforms_setting( 'type', '', 'wpforms_license' );
|
149 |
+
|
150 |
$output = '<input type="password" id="wpforms-setting-license-key" value="' . esc_attr( $key ) . '" />';
|
151 |
$output .= '<button id="wpforms-setting-license-key-verify" class="wpforms-btn wpforms-btn-md wpforms-btn-orange">' . esc_html__( 'Verify Key', 'wpforms-lite' ) . '</button>';
|
152 |
|
includes/class-form.php
CHANGED
@@ -485,10 +485,10 @@ class WPForms_Form_Handler {
|
|
485 |
*
|
486 |
* @since 1.0.0
|
487 |
*
|
488 |
-
* @param string $form_id
|
489 |
-
* @param string $field
|
490 |
*
|
491 |
-
* @return
|
492 |
*/
|
493 |
public function get_meta( $form_id, $field = '' ) {
|
494 |
|
@@ -496,9 +496,12 @@ class WPForms_Form_Handler {
|
|
496 |
return false;
|
497 |
}
|
498 |
|
499 |
-
$data = $this->get(
|
500 |
-
|
501 |
-
|
|
|
|
|
|
|
502 |
|
503 |
if ( isset( $data['meta'] ) ) {
|
504 |
if ( empty( $field ) ) {
|
485 |
*
|
486 |
* @since 1.0.0
|
487 |
*
|
488 |
+
* @param string $form_id Form ID.
|
489 |
+
* @param string $field Field.
|
490 |
*
|
491 |
+
* @return false|array
|
492 |
*/
|
493 |
public function get_meta( $form_id, $field = '' ) {
|
494 |
|
496 |
return false;
|
497 |
}
|
498 |
|
499 |
+
$data = $this->get(
|
500 |
+
$form_id,
|
501 |
+
array(
|
502 |
+
'content_only' => true,
|
503 |
+
)
|
504 |
+
);
|
505 |
|
506 |
if ( isset( $data['meta'] ) ) {
|
507 |
if ( empty( $field ) ) {
|
includes/class-license.php
DELETED
@@ -1,830 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* License key fun.
|
5 |
-
*
|
6 |
-
* @package WPForms
|
7 |
-
* @author WPForms
|
8 |
-
* @since 1.0.0
|
9 |
-
* @license GPL-2.0+
|
10 |
-
* @copyright Copyright (c) 2016, WPForms LLC
|
11 |
-
*/
|
12 |
-
class WPForms_License {
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Holds any license error messages.
|
16 |
-
*
|
17 |
-
* @since 1.0.0
|
18 |
-
* @var array
|
19 |
-
*/
|
20 |
-
public $errors = array();
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Holds any license success messages.
|
24 |
-
*
|
25 |
-
* @since 1.0.0
|
26 |
-
* @var array
|
27 |
-
*/
|
28 |
-
public $success = array();
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Primary class constructor.
|
32 |
-
*
|
33 |
-
* @since 1.0.0
|
34 |
-
*/
|
35 |
-
public function __construct() {
|
36 |
-
|
37 |
-
add_action( 'wp_ajax_wpforms_verify_license', array( $this, 'verify_license' ) );
|
38 |
-
add_action( 'wp_ajax_wpforms_get_upgrade_url', array( $this, 'get_upgrade_url' ) );
|
39 |
-
add_action( 'wp_ajax_nopriv_wpforms_run_one_click_upgrade', array( $this, 'run_one_click_upgrade' ) );
|
40 |
-
|
41 |
-
// Admin notices.
|
42 |
-
if ( wpforms()->pro && ( ! isset( $_GET['page'] ) || 'wpforms-settings' !== $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
|
43 |
-
add_action( 'admin_notices', array( $this, 'notices' ) );
|
44 |
-
}
|
45 |
-
|
46 |
-
// Periodic background license check.
|
47 |
-
if ( $this->get() ) {
|
48 |
-
$this->maybe_validate_key();
|
49 |
-
}
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Load the license key.
|
54 |
-
*
|
55 |
-
* @since 1.0.0
|
56 |
-
*/
|
57 |
-
public function get() {
|
58 |
-
|
59 |
-
// Check for license key.
|
60 |
-
$key = wpforms_setting( 'key', false, 'wpforms_license' );
|
61 |
-
|
62 |
-
// Allow wp-config constant to pass key.
|
63 |
-
if ( ! $key && defined( 'WPFORMS_LICENSE_KEY' ) ) {
|
64 |
-
$key = WPFORMS_LICENSE_KEY;
|
65 |
-
}
|
66 |
-
|
67 |
-
return $key;
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Load the license key level.
|
72 |
-
*
|
73 |
-
* @since 1.0.0
|
74 |
-
*/
|
75 |
-
public function type() {
|
76 |
-
|
77 |
-
$type = wpforms_setting( 'type', false, 'wpforms_license' );
|
78 |
-
|
79 |
-
return $type;
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Verifies a license key entered by the user.
|
84 |
-
*
|
85 |
-
* @since 1.0.0
|
86 |
-
*
|
87 |
-
* @param string $key
|
88 |
-
* @param bool $ajax
|
89 |
-
*
|
90 |
-
* @return bool
|
91 |
-
*/
|
92 |
-
public function verify_key( $key = '', $ajax = false ) {
|
93 |
-
|
94 |
-
if ( empty( $key ) ) {
|
95 |
-
return false;
|
96 |
-
}
|
97 |
-
|
98 |
-
// Perform a request to verify the key.
|
99 |
-
$verify = $this->perform_remote_request( 'verify-key', array( 'tgm-updater-key' => $key ) );
|
100 |
-
|
101 |
-
// If it returns false, send back a generic error message and return.
|
102 |
-
if ( ! $verify ) {
|
103 |
-
$msg = esc_html__( 'There was an error connecting to the remote key API. Please try again later.', 'wpforms' );
|
104 |
-
if ( $ajax ) {
|
105 |
-
wp_send_json_error( $msg );
|
106 |
-
} else {
|
107 |
-
$this->errors[] = $msg;
|
108 |
-
|
109 |
-
return false;
|
110 |
-
}
|
111 |
-
}
|
112 |
-
|
113 |
-
// If an error is returned, set the error and return.
|
114 |
-
if ( ! empty( $verify->error ) ) {
|
115 |
-
if ( $ajax ) {
|
116 |
-
wp_send_json_error( $verify->error );
|
117 |
-
} else {
|
118 |
-
$this->errors[] = $verify->error;
|
119 |
-
|
120 |
-
return false;
|
121 |
-
}
|
122 |
-
}
|
123 |
-
|
124 |
-
$success = isset( $verify->success ) ? $verify->success : esc_html__( 'Congratulations! This site is now receiving automatic updates.', 'wpforms' );
|
125 |
-
|
126 |
-
// Otherwise, our request has been done successfully. Update the option and set the success message.
|
127 |
-
$option = (array) get_option( 'wpforms_license', array() );
|
128 |
-
$option['key'] = $key;
|
129 |
-
$option['type'] = isset( $verify->type ) ? $verify->type : $option['type'];
|
130 |
-
$option['is_expired'] = false;
|
131 |
-
$option['is_disabled'] = false;
|
132 |
-
$option['is_invalid'] = false;
|
133 |
-
$this->success[] = $success;
|
134 |
-
update_option( 'wpforms_license', $option );
|
135 |
-
delete_transient( '_wpforms_addons' );
|
136 |
-
|
137 |
-
wp_clean_plugins_cache( true );
|
138 |
-
|
139 |
-
if ( $ajax ) {
|
140 |
-
wp_send_json_success(
|
141 |
-
array(
|
142 |
-
'type' => $option['type'],
|
143 |
-
'msg' => $success,
|
144 |
-
)
|
145 |
-
);
|
146 |
-
}
|
147 |
-
}
|
148 |
-
|
149 |
-
/**
|
150 |
-
* Maybe validates a license key entered by the user.
|
151 |
-
*
|
152 |
-
* @since 1.0.0
|
153 |
-
*
|
154 |
-
* @return void Return early if the transient has not expired yet.
|
155 |
-
*/
|
156 |
-
public function maybe_validate_key() {
|
157 |
-
|
158 |
-
$key = $this->get();
|
159 |
-
|
160 |
-
if ( ! $key ) {
|
161 |
-
return;
|
162 |
-
}
|
163 |
-
|
164 |
-
// Perform a request to validate the key - Only run every 12 hours.
|
165 |
-
$timestamp = get_option( 'wpforms_license_updates' );
|
166 |
-
|
167 |
-
if ( ! $timestamp ) {
|
168 |
-
$timestamp = strtotime( '+24 hours' );
|
169 |
-
update_option( 'wpforms_license_updates', $timestamp );
|
170 |
-
$this->validate_key( $key );
|
171 |
-
} else {
|
172 |
-
$current_timestamp = time();
|
173 |
-
if ( $current_timestamp < $timestamp ) {
|
174 |
-
return;
|
175 |
-
} else {
|
176 |
-
update_option( 'wpforms_license_updates', strtotime( '+24 hours' ) );
|
177 |
-
$this->validate_key( $key );
|
178 |
-
}
|
179 |
-
}
|
180 |
-
}
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Validates a license key entered by the user.
|
184 |
-
*
|
185 |
-
* @since 1.0.0
|
186 |
-
*
|
187 |
-
* @param string $key
|
188 |
-
* @param bool $forced Force to set contextual messages (false by default).
|
189 |
-
* @param bool $ajax
|
190 |
-
*/
|
191 |
-
public function validate_key( $key = '', $forced = false, $ajax = false ) {
|
192 |
-
|
193 |
-
$validate = $this->perform_remote_request( 'validate-key', array( 'tgm-updater-key' => $key ) );
|
194 |
-
|
195 |
-
// If there was a basic API error in validation, only set the transient for 10 minutes before retrying.
|
196 |
-
if ( ! $validate ) {
|
197 |
-
// If forced, set contextual success message.
|
198 |
-
if ( $forced ) {
|
199 |
-
$msg = esc_html__( 'There was an error connecting to the remote key API. Please try again later.', 'wpforms' );
|
200 |
-
if ( $ajax ) {
|
201 |
-
wp_send_json_error( $msg );
|
202 |
-
} else {
|
203 |
-
$this->errors[] = $msg;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
return;
|
208 |
-
}
|
209 |
-
|
210 |
-
// If a key or author error is returned, the license no longer exists or the user has been deleted, so reset license.
|
211 |
-
if ( isset( $validate->key ) || isset( $validate->author ) ) {
|
212 |
-
$option = get_option( 'wpforms_license' );
|
213 |
-
$option['is_expired'] = false;
|
214 |
-
$option['is_disabled'] = false;
|
215 |
-
$option['is_invalid'] = true;
|
216 |
-
update_option( 'wpforms_license', $option );
|
217 |
-
if ( $ajax ) {
|
218 |
-
wp_send_json_error( esc_html__( 'Your license key for WPForms is invalid. The key no longer exists or the user associated with the key has been deleted. Please use a different key to continue receiving automatic updates.', 'wpforms' ) );
|
219 |
-
}
|
220 |
-
|
221 |
-
return;
|
222 |
-
}
|
223 |
-
|
224 |
-
// If the license has expired, set the transient and expired flag and return.
|
225 |
-
if ( isset( $validate->expired ) ) {
|
226 |
-
$option = get_option( 'wpforms_license' );
|
227 |
-
$option['is_expired'] = true;
|
228 |
-
$option['is_disabled'] = false;
|
229 |
-
$option['is_invalid'] = false;
|
230 |
-
update_option( 'wpforms_license', $option );
|
231 |
-
if ( $ajax ) {
|
232 |
-
wp_send_json_error( esc_html__( 'Your license key for WPForms has expired. Please renew your license key on WPForms.com to continue receiving automatic updates.', 'wpforms' ) );
|
233 |
-
}
|
234 |
-
|
235 |
-
return;
|
236 |
-
}
|
237 |
-
|
238 |
-
// If the license is disabled, set the transient and disabled flag and return.
|
239 |
-
if ( isset( $validate->disabled ) ) {
|
240 |
-
$option = get_option( 'wpforms_license' );
|
241 |
-
$option['is_expired'] = false;
|
242 |
-
$option['is_disabled'] = true;
|
243 |
-
$option['is_invalid'] = false;
|
244 |
-
update_option( 'wpforms_license', $option );
|
245 |
-
if ( $ajax ) {
|
246 |
-
wp_send_json_error( esc_html__( 'Your license key for WPForms has been disabled. Please use a different key to continue receiving automatic updates.', 'wpforms' ) );
|
247 |
-
}
|
248 |
-
|
249 |
-
return;
|
250 |
-
}
|
251 |
-
|
252 |
-
// Otherwise, our check has returned successfully. Set the transient and update our license type and flags.
|
253 |
-
$option = get_option( 'wpforms_license' );
|
254 |
-
$option['type'] = isset( $validate->type ) ? $validate->type : $option['type'];
|
255 |
-
$option['is_expired'] = false;
|
256 |
-
$option['is_disabled'] = false;
|
257 |
-
$option['is_invalid'] = false;
|
258 |
-
update_option( 'wpforms_license', $option );
|
259 |
-
|
260 |
-
// If forced, set contextual success message.
|
261 |
-
if ( $forced ) {
|
262 |
-
$msg = esc_html__( 'Your key has been refreshed successfully.', 'wpforms' );
|
263 |
-
$this->success[] = $msg;
|
264 |
-
if ( $ajax ) {
|
265 |
-
wp_send_json_success(
|
266 |
-
array(
|
267 |
-
'type' => $option['type'],
|
268 |
-
'msg' => $msg,
|
269 |
-
)
|
270 |
-
);
|
271 |
-
}
|
272 |
-
}
|
273 |
-
}
|
274 |
-
|
275 |
-
/**
|
276 |
-
* Deactivates a license key entered by the user.
|
277 |
-
*
|
278 |
-
* @since 1.0.0
|
279 |
-
*
|
280 |
-
* @param bool $ajax
|
281 |
-
*/
|
282 |
-
public function deactivate_key( $ajax = false ) {
|
283 |
-
|
284 |
-
$key = $this->get();
|
285 |
-
|
286 |
-
if ( ! $key ) {
|
287 |
-
return;
|
288 |
-
}
|
289 |
-
|
290 |
-
// Perform a request to deactivate the key.
|
291 |
-
$deactivate = $this->perform_remote_request( 'deactivate-key', array( 'tgm-updater-key' => $key ) );
|
292 |
-
|
293 |
-
// If it returns false, send back a generic error message and return.
|
294 |
-
if ( ! $deactivate ) {
|
295 |
-
$msg = esc_html__( 'There was an error connecting to the remote key API. Please try again later.', 'wpforms' );
|
296 |
-
if ( $ajax ) {
|
297 |
-
wp_send_json_error( $msg );
|
298 |
-
} else {
|
299 |
-
$this->errors[] = $msg;
|
300 |
-
|
301 |
-
return;
|
302 |
-
}
|
303 |
-
}
|
304 |
-
|
305 |
-
// If an error is returned, set the error and return.
|
306 |
-
if ( ! empty( $deactivate->error ) ) {
|
307 |
-
if ( $ajax ) {
|
308 |
-
wp_send_json_error( $deactivate->error );
|
309 |
-
} else {
|
310 |
-
$this->errors[] = $deactivate->error;
|
311 |
-
|
312 |
-
return;
|
313 |
-
}
|
314 |
-
}
|
315 |
-
|
316 |
-
// Otherwise, our request has been done successfully. Reset the option and set the success message.
|
317 |
-
$success = isset( $deactivate->success ) ? $deactivate->success : esc_html__( 'You have deactivated the key from this site successfully.', 'wpforms' );
|
318 |
-
$this->success[] = $success;
|
319 |
-
update_option( 'wpforms_license', '' );
|
320 |
-
delete_transient( '_wpforms_addons' );
|
321 |
-
|
322 |
-
if ( $ajax ) {
|
323 |
-
wp_send_json_success( $success );
|
324 |
-
}
|
325 |
-
}
|
326 |
-
|
327 |
-
/**
|
328 |
-
* Returns possible license key error flag.
|
329 |
-
*
|
330 |
-
* @since 1.0.0
|
331 |
-
* @return bool True if there are license key errors, false otherwise.
|
332 |
-
*/
|
333 |
-
public function get_errors() {
|
334 |
-
|
335 |
-
$option = get_option( 'wpforms_license' );
|
336 |
-
|
337 |
-
return ! empty( $option['is_expired'] ) || ! empty( $option['is_disabled'] ) || ! empty( $option['is_invalid'] );
|
338 |
-
}
|
339 |
-
|
340 |
-
/**
|
341 |
-
* Outputs any notices generated by the class.
|
342 |
-
*
|
343 |
-
* @since 1.0.0
|
344 |
-
*
|
345 |
-
* @param bool $below_h2
|
346 |
-
*/
|
347 |
-
public function notices( $below_h2 = false ) {
|
348 |
-
|
349 |
-
// Grab the option and output any nag dealing with license keys.
|
350 |
-
$key = $this->get();
|
351 |
-
$option = get_option( 'wpforms_license' );
|
352 |
-
$below_h2 = $below_h2 ? 'below-h2' : '';
|
353 |
-
|
354 |
-
// If there is no license key, output nag about ensuring key is set for automatic updates.
|
355 |
-
if ( ! $key ) :
|
356 |
-
?>
|
357 |
-
<div class="notice notice-info <?php echo $below_h2; ?> wpforms-license-notice">
|
358 |
-
<p>
|
359 |
-
<?php
|
360 |
-
printf(
|
361 |
-
wp_kses(
|
362 |
-
/* translators: %s - plugin settings page URL. */
|
363 |
-
__( 'Please <a href="%s">enter and activate</a> your license key for WPForms to enable automatic updates.', 'wpforms' ),
|
364 |
-
array(
|
365 |
-
'a' => array(
|
366 |
-
'href' => array(),
|
367 |
-
),
|
368 |
-
)
|
369 |
-
),
|
370 |
-
esc_url( add_query_arg( array( 'page' => 'wpforms-settings' ), admin_url( 'admin.php' ) ) )
|
371 |
-
);
|
372 |
-
?>
|
373 |
-
</p>
|
374 |
-
</div>
|
375 |
-
<?php
|
376 |
-
endif;
|
377 |
-
|
378 |
-
// If a key has expired, output nag about renewing the key.
|
379 |
-
if ( isset( $option['is_expired'] ) && $option['is_expired'] ) :
|
380 |
-
?>
|
381 |
-
<div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
|
382 |
-
<p>
|
383 |
-
<?php
|
384 |
-
printf(
|
385 |
-
wp_kses(
|
386 |
-
/* translators: %s - WPForms.com login page URL. */
|
387 |
-
__( 'Your license key for WPForms has expired. <a href="%s" target="_blank" rel="noopener noreferrer">Please click here to renew your license key and continue receiving automatic updates.</a>', 'wpforms' ),
|
388 |
-
array(
|
389 |
-
'a' => array(
|
390 |
-
'href' => array(),
|
391 |
-
'target' => array(),
|
392 |
-
'rel' => array(),
|
393 |
-
),
|
394 |
-
)
|
395 |
-
),
|
396 |
-
'https://wpforms.com/login/'
|
397 |
-
);
|
398 |
-
?>
|
399 |
-
</p>
|
400 |
-
</div>
|
401 |
-
<?php
|
402 |
-
endif;
|
403 |
-
|
404 |
-
// If a key has been disabled, output nag about using another key.
|
405 |
-
if ( isset( $option['is_disabled'] ) && $option['is_disabled'] ) :
|
406 |
-
?>
|
407 |
-
<div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
|
408 |
-
<p><?php esc_html_e( 'Your license key for WPForms has been disabled. Please use a different key to continue receiving automatic updates.', 'wpforms' ); ?></p>
|
409 |
-
</div>
|
410 |
-
<?php
|
411 |
-
endif;
|
412 |
-
|
413 |
-
// If a key is invalid, output nag about using another key.
|
414 |
-
if ( isset( $option['is_invalid'] ) && $option['is_invalid'] ) :
|
415 |
-
?>
|
416 |
-
<div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
|
417 |
-
<p><?php esc_html_e( 'Your license key for WPForms is invalid. The key no longer exists or the user associated with the key has been deleted. Please use a different key to continue receiving automatic updates.', 'wpforms' ); ?></p>
|
418 |
-
</div>
|
419 |
-
<?php
|
420 |
-
endif;
|
421 |
-
|
422 |
-
// If there are any license errors, output them now.
|
423 |
-
if ( ! empty( $this->errors ) ) :
|
424 |
-
?>
|
425 |
-
<div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
|
426 |
-
<p><?php echo implode( '<br>', $this->errors ); ?></p>
|
427 |
-
</div>
|
428 |
-
<?php
|
429 |
-
endif;
|
430 |
-
|
431 |
-
// If there are any success messages, output them now.
|
432 |
-
if ( ! empty( $this->success ) ) :
|
433 |
-
?>
|
434 |
-
<div class="updated notice <?php echo $below_h2; ?> wpforms-license-notice">
|
435 |
-
<p><?php echo implode( '<br>', $this->success ); ?></p>
|
436 |
-
</div>
|
437 |
-
<?php
|
438 |
-
endif;
|
439 |
-
|
440 |
-
}
|
441 |
-
|
442 |
-
/**
|
443 |
-
* Retrieves addons from the stored transient or remote server.
|
444 |
-
*
|
445 |
-
* @param bool $force
|
446 |
-
*
|
447 |
-
* @return array|bool|mixed 1.0.0
|
448 |
-
*/
|
449 |
-
public function addons( $force = false ) {
|
450 |
-
|
451 |
-
$key = $this->get();
|
452 |
-
|
453 |
-
if ( ! $key ) {
|
454 |
-
return false;
|
455 |
-
}
|
456 |
-
|
457 |
-
$addons = get_transient( '_wpforms_addons' );
|
458 |
-
|
459 |
-
if ( $force || false === $addons ) {
|
460 |
-
$addons = $this->get_addons();
|
461 |
-
}
|
462 |
-
|
463 |
-
return $addons;
|
464 |
-
}
|
465 |
-
|
466 |
-
/**
|
467 |
-
* Pings the remote server for addons data.
|
468 |
-
*
|
469 |
-
* @since 1.0.0
|
470 |
-
*
|
471 |
-
* @return bool|array False if no key or failure, array of addon data otherwise.
|
472 |
-
*/
|
473 |
-
public function get_addons() {
|
474 |
-
|
475 |
-
$key = $this->get();
|
476 |
-
$addons = $this->perform_remote_request( 'get-addons-data', array( 'tgm-updater-key' => $key ) );
|
477 |
-
|
478 |
-
// If there was an API error, set transient for only 10 minutes.
|
479 |
-
if ( ! $addons ) {
|
480 |
-
set_transient( '_wpforms_addons', false, 10 * MINUTE_IN_SECONDS );
|
481 |
-
|
482 |
-
return false;
|
483 |
-
}
|
484 |
-
|
485 |
-
// If there was an error retrieving the addons, set the error.
|
486 |
-
if ( isset( $addons->error ) ) {
|
487 |
-
set_transient( '_wpforms_addons', false, 10 * MINUTE_IN_SECONDS );
|
488 |
-
|
489 |
-
return false;
|
490 |
-
}
|
491 |
-
|
492 |
-
// Otherwise, our request worked. Save the data and return it.
|
493 |
-
set_transient( '_wpforms_addons', $addons, DAY_IN_SECONDS );
|
494 |
-
|
495 |
-
return $addons;
|
496 |
-
}
|
497 |
-
|
498 |
-
/**
|
499 |
-
* Queries the remote URL via wp_remote_post and returns a json decoded response.
|
500 |
-
*
|
501 |
-
* @since 1.0.0
|
502 |
-
*
|
503 |
-
* @param string $action The name of the $_POST action var.
|
504 |
-
* @param array $body The content to retrieve from the remote URL.
|
505 |
-
* @param array $headers The headers to send to the remote URL.
|
506 |
-
* @param string $return_format The format for returning content from the remote URL.
|
507 |
-
*
|
508 |
-
* @return string|bool Json decoded response on success, false on failure.
|
509 |
-
*/
|
510 |
-
public function perform_remote_request( $action, $body = array(), $headers = array(), $return_format = 'json' ) {
|
511 |
-
|
512 |
-
// Build the body of the request.
|
513 |
-
$body = wp_parse_args(
|
514 |
-
$body,
|
515 |
-
array(
|
516 |
-
'tgm-updater-action' => $action,
|
517 |
-
'tgm-updater-key' => $body['tgm-updater-key'],
|
518 |
-
'tgm-updater-wp-version' => get_bloginfo( 'version' ),
|
519 |
-
'tgm-updater-referer' => site_url(),
|
520 |
-
)
|
521 |
-
);
|
522 |
-
$body = http_build_query( $body, '', '&' );
|
523 |
-
|
524 |
-
// Build the headers of the request.
|
525 |
-
$headers = wp_parse_args(
|
526 |
-
$headers,
|
527 |
-
array(
|
528 |
-
'Content-Type' => 'application/x-www-form-urlencoded',
|
529 |
-
'Content-Length' => strlen( $body ),
|
530 |
-
)
|
531 |
-
);
|
532 |
-
|
533 |
-
// Setup variable for wp_remote_post.
|
534 |
-
$post = array(
|
535 |
-
'headers' => $headers,
|
536 |
-
'body' => $body,
|
537 |
-
);
|
538 |
-
|
539 |
-
// Perform the query and retrieve the response.
|
540 |
-
$response = wp_remote_post( WPFORMS_UPDATER_API, $post );
|
541 |
-
$response_code = wp_remote_retrieve_response_code( $response );
|
542 |
-
$response_body = wp_remote_retrieve_body( $response );
|
543 |
-
|
544 |
-
// Bail out early if there are any errors.
|
545 |
-
if ( 200 != $response_code || is_wp_error( $response_body ) ) {
|
546 |
-
return false;
|
547 |
-
}
|
548 |
-
|
549 |
-
// Return the json decoded content.
|
550 |
-
return json_decode( $response_body );
|
551 |
-
}
|
552 |
-
|
553 |
-
/**
|
554 |
-
* Checks to see if the site is using an active license.
|
555 |
-
*
|
556 |
-
* @since 1.5.0
|
557 |
-
*
|
558 |
-
* @return bool
|
559 |
-
*/
|
560 |
-
public function is_active() {
|
561 |
-
|
562 |
-
$license = get_option( 'wpforms_license', false );
|
563 |
-
|
564 |
-
if (
|
565 |
-
empty( $license ) ||
|
566 |
-
! empty( $license['is_expired'] ) ||
|
567 |
-
! empty( $license['is_disabled'] ) ||
|
568 |
-
! empty( $license['is_invalid'] )
|
569 |
-
) {
|
570 |
-
return false;
|
571 |
-
}
|
572 |
-
|
573 |
-
return true;
|
574 |
-
}
|
575 |
-
|
576 |
-
/**
|
577 |
-
* Verify license.
|
578 |
-
*
|
579 |
-
* @since 1.5.4
|
580 |
-
*/
|
581 |
-
public function verify_license() {
|
582 |
-
|
583 |
-
// Run a security check.
|
584 |
-
check_ajax_referer( 'wpforms-admin', 'nonce' );
|
585 |
-
|
586 |
-
// Check for permissions.
|
587 |
-
if ( ! wpforms_current_user_can() ) {
|
588 |
-
wp_send_json_error();
|
589 |
-
}
|
590 |
-
|
591 |
-
// Check for license key.
|
592 |
-
if ( empty( $_POST['license'] ) ) {
|
593 |
-
wp_send_json_error( esc_html__( 'Please enter a license key.', 'wpforms-lite' ) );
|
594 |
-
}
|
595 |
-
|
596 |
-
$this->verify_key( sanitize_text_field( wp_unslash( $_POST['license'] ) ), true );
|
597 |
-
}
|
598 |
-
|
599 |
-
/**
|
600 |
-
* Converting errors to exceptions.
|
601 |
-
*
|
602 |
-
* @since 1.5.4
|
603 |
-
*/
|
604 |
-
public function init_error_handler() {
|
605 |
-
set_error_handler( // phpcs:ignore
|
606 |
-
function ( $errno, $errstr, $errfile, $errline, array $errcontex ) {
|
607 |
-
throw new \Exception( $errstr );
|
608 |
-
}
|
609 |
-
);
|
610 |
-
}
|
611 |
-
|
612 |
-
/**
|
613 |
-
* Ajax handler for grabbing the upgrade url.
|
614 |
-
*
|
615 |
-
* @since 1.5.4
|
616 |
-
*/
|
617 |
-
public function get_upgrade_url() {
|
618 |
-
|
619 |
-
$this->init_error_handler();
|
620 |
-
try {
|
621 |
-
|
622 |
-
// Run a security check.
|
623 |
-
check_ajax_referer( 'wpforms-admin', 'nonce' );
|
624 |
-
|
625 |
-
// Check for permissions.
|
626 |
-
if ( ! current_user_can( 'install_plugins' ) ) {
|
627 |
-
wp_send_json_error( array( 'message' => esc_html__( 'Sorry, you do not have permission to install plugins.', 'wpforms-lite' ) ) );
|
628 |
-
}
|
629 |
-
|
630 |
-
// Check license key.
|
631 |
-
$key = wpforms_setting( 'key', false, 'wpforms_license' );
|
632 |
-
if ( empty( $key ) ) {
|
633 |
-
wp_send_json_error( array( 'message' => esc_html__( 'You are not licensed.', 'wpforms-lite' ) ) );
|
634 |
-
}
|
635 |
-
if ( wpforms()->pro ) {
|
636 |
-
wp_send_json_error( array( 'message' => esc_html__( 'Only the Lite version can upgrade.', 'wpforms-lite' ) ) );
|
637 |
-
}
|
638 |
-
|
639 |
-
// Verify pro version is not installed.
|
640 |
-
$active = activate_plugin( 'wpforms/wpforms.php', false, false, true );
|
641 |
-
if ( ! is_wp_error( $active ) ) {
|
642 |
-
// Deactivate Lite.
|
643 |
-
deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
|
644 |
-
wp_send_json_success(
|
645 |
-
array(
|
646 |
-
'message' => esc_html__( 'WPForms Pro was already installed and has not been activated.', 'wpforms-lite' ),
|
647 |
-
'reload' => true,
|
648 |
-
)
|
649 |
-
);
|
650 |
-
}
|
651 |
-
|
652 |
-
$args = array(
|
653 |
-
'plugin_name' => 'WPForms Pro',
|
654 |
-
'plugin_slug' => 'wpforms',
|
655 |
-
'plugin_path' => plugin_basename( WPFORMS_PLUGIN_FILE ),
|
656 |
-
'plugin_url' => trailingslashit( WP_PLUGIN_URL ) . 'wpforms',
|
657 |
-
'remote_url' => 'https://wpforms.com/',
|
658 |
-
'version' => WPFORMS_VERSION,
|
659 |
-
'key' => $key,
|
660 |
-
);
|
661 |
-
$updater = new WPForms_Updater( $args );
|
662 |
-
$addons = $updater->update_plugins_filter( $updater );
|
663 |
-
|
664 |
-
if ( empty( $addons->update->package ) ) {
|
665 |
-
wp_send_json_error(
|
666 |
-
array(
|
667 |
-
'message' => esc_html__( 'We encountered a problem unlocking the PRO features. Please install the PRO version manually.', 'wpforms-lite' ),
|
668 |
-
)
|
669 |
-
);
|
670 |
-
}
|
671 |
-
|
672 |
-
// Generate URL.
|
673 |
-
$oth = hash( 'sha512', wp_rand() );
|
674 |
-
update_option( 'wpforms_one_click_upgrade', $oth );
|
675 |
-
$version = WPFORMS_VERSION;
|
676 |
-
$file = $addons->update->package;
|
677 |
-
$siteurl = admin_url();
|
678 |
-
$endpoint = admin_url( 'admin-ajax.php' );
|
679 |
-
$redirect = admin_url( 'admin.php?page=wpforms-settings' );
|
680 |
-
$url = add_query_arg(
|
681 |
-
array(
|
682 |
-
'key' => $key,
|
683 |
-
'oth' => $oth,
|
684 |
-
'endpoint' => $endpoint,
|
685 |
-
'version' => $version,
|
686 |
-
'siteurl' => $siteurl,
|
687 |
-
'redirect' => rawurldecode( base64_encode( $redirect ) ), // phpcs:ignore
|
688 |
-
'file' => rawurldecode( base64_encode( $file ) ), // phpcs:ignore
|
689 |
-
),
|
690 |
-
'https://upgrade.wpforms.com'
|
691 |
-
);
|
692 |
-
wp_send_json_success(
|
693 |
-
array(
|
694 |
-
'url' => $url,
|
695 |
-
'back_url' => add_query_arg(
|
696 |
-
array(
|
697 |
-
'action' => 'wpforms_run_one_click_upgrade',
|
698 |
-
'oth' => $oth,
|
699 |
-
'file' => rawurldecode( base64_encode( $file ) ), // phpcs:ignore
|
700 |
-
),
|
701 |
-
$endpoint
|
702 |
-
),
|
703 |
-
)
|
704 |
-
);
|
705 |
-
|
706 |
-
} catch ( \Exception $e ) {
|
707 |
-
|
708 |
-
wp_send_json_error( array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() ) );
|
709 |
-
|
710 |
-
}
|
711 |
-
}
|
712 |
-
|
713 |
-
/**
|
714 |
-
* Endpoint for one-click upgrade.
|
715 |
-
*
|
716 |
-
* @since 1.5.4
|
717 |
-
*/
|
718 |
-
public function run_one_click_upgrade() {
|
719 |
-
|
720 |
-
$this->init_error_handler();
|
721 |
-
try {
|
722 |
-
|
723 |
-
$error = esc_html__( 'Could not install upgrade. Please download from wpforms.com and install manually.', 'wpforms-lite' );
|
724 |
-
|
725 |
-
// verify params present (oth & download link).
|
726 |
-
$post_oth = ! empty( $_REQUEST['oth'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['oth'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
|
727 |
-
$post_url = ! empty( $_REQUEST['file'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['file'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
|
728 |
-
if ( empty( $post_oth ) || empty( $post_url ) ) {
|
729 |
-
wp_send_json_error( $error );
|
730 |
-
}
|
731 |
-
// Verify oth.
|
732 |
-
$oth = get_option( 'wpforms_one_click_upgrade' );
|
733 |
-
if ( empty( $oth ) ) {
|
734 |
-
wp_send_json_error( $error );
|
735 |
-
}
|
736 |
-
if ( ! hash_equals( $oth, $post_oth ) ) {
|
737 |
-
wp_send_json_error( $error );
|
738 |
-
}
|
739 |
-
// Delete so cannot replay.
|
740 |
-
delete_option( 'wpforms_one_click_upgrade' );
|
741 |
-
|
742 |
-
// Set the current screen to avoid undefined notices.
|
743 |
-
set_current_screen( 'wpforms_page_wpforms-settings' );
|
744 |
-
|
745 |
-
// Prepare variables.
|
746 |
-
$url = esc_url_raw(
|
747 |
-
add_query_arg(
|
748 |
-
array(
|
749 |
-
'page' => 'wpforms-settings',
|
750 |
-
),
|
751 |
-
admin_url( 'admin.php' )
|
752 |
-
)
|
753 |
-
);
|
754 |
-
// Verify pro not activated.
|
755 |
-
if ( wpforms()->pro ) {
|
756 |
-
wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
|
757 |
-
}
|
758 |
-
// Verify pro not installed.
|
759 |
-
$active = activate_plugin( 'wpforms/wpforms.php', $url, false, true );
|
760 |
-
if ( ! is_wp_error( $active ) ) {
|
761 |
-
deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
|
762 |
-
wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
|
763 |
-
}
|
764 |
-
$creds = request_filesystem_credentials( $url, '', false, false, null );
|
765 |
-
// Check for file system permissions.
|
766 |
-
$perm_error = esc_html__( 'Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually.', 'wpforms-lite' );
|
767 |
-
if ( false === $creds ) {
|
768 |
-
wp_send_json_error( $perm_error );
|
769 |
-
}
|
770 |
-
if ( ! WP_Filesystem( $creds ) ) {
|
771 |
-
wp_send_json_error( $perm_error );
|
772 |
-
}
|
773 |
-
// We do not need any extra credentials if we have gotten this far, so let's install the plugin.
|
774 |
-
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
775 |
-
require_once WPFORMS_PLUGIN_DIR . 'includes/class-upgrader-skin.php';
|
776 |
-
// Do not allow WordPress to search/download translations, as this will break JS output.
|
777 |
-
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
|
778 |
-
// Create the plugin upgrader with our custom skin.
|
779 |
-
$installer = new Plugin_Upgrader( new WPForms_Upgrader_Skin() );
|
780 |
-
// Error check.
|
781 |
-
if ( ! method_exists( $installer, 'install' ) ) {
|
782 |
-
wp_send_json_error( $error );
|
783 |
-
}
|
784 |
-
// Check license key.
|
785 |
-
$key = wpforms_setting( 'key', false, 'wpforms_license' );
|
786 |
-
if ( empty( $key ) ) {
|
787 |
-
wp_send_json_error( new WP_Error( '403', esc_html__( 'You are not licensed.', 'wpforms-lite' ) ) );
|
788 |
-
}
|
789 |
-
|
790 |
-
$args = array(
|
791 |
-
'plugin_name' => 'WPForms Pro',
|
792 |
-
'plugin_slug' => 'wpforms',
|
793 |
-
'plugin_path' => plugin_basename( WPFORMS_PLUGIN_FILE ),
|
794 |
-
'plugin_url' => trailingslashit( WP_PLUGIN_URL ) . 'wpforms',
|
795 |
-
'remote_url' => 'https://wpforms.com/',
|
796 |
-
'version' => WPFORMS_VERSION,
|
797 |
-
'key' => $key,
|
798 |
-
);
|
799 |
-
$updater = new WPForms_Updater( $args );
|
800 |
-
$addons = $updater->update_plugins_filter( $updater );
|
801 |
-
if ( empty( $addons->update->package ) ) {
|
802 |
-
wp_send_json_error( $error );
|
803 |
-
}
|
804 |
-
$installer->install( $addons->update->package ); // phpcs:ignore
|
805 |
-
// Flush the cache and return the newly installed plugin basename.
|
806 |
-
wp_cache_flush();
|
807 |
-
$plugin_basename = $installer->plugin_info();
|
808 |
-
if ( $plugin_basename ) {
|
809 |
-
// Deactivate the lite version first.
|
810 |
-
deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
|
811 |
-
// Activate the plugin silently.
|
812 |
-
$activated = activate_plugin( $plugin_basename, '', false, true );
|
813 |
-
if ( ! is_wp_error( $activated ) ) {
|
814 |
-
add_option( 'wpforms_install', 1 );
|
815 |
-
wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
|
816 |
-
} else {
|
817 |
-
// Reactivate the lite plugin if pro activation failed.
|
818 |
-
activate_plugin( plugin_basename( WPFORMS_PLUGIN_FILE ), '', false, true );
|
819 |
-
wp_send_json_error( esc_html__( 'Pro version installed but needs to be activated from the Plugins page inside your WordPress admin.', 'wpforms-lite' ) );
|
820 |
-
}
|
821 |
-
}
|
822 |
-
wp_send_json_error( $error );
|
823 |
-
|
824 |
-
} catch ( \Exception $e ) {
|
825 |
-
|
826 |
-
wp_send_json_error( array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() ) );
|
827 |
-
|
828 |
-
}
|
829 |
-
}
|
830 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/class-smart-tags.php
CHANGED
@@ -138,8 +138,7 @@ class WPForms_Smart_Tags {
|
|
138 |
break;
|
139 |
|
140 |
case 'user_ip':
|
141 |
-
$
|
142 |
-
$content = str_replace( '{' . $tag . '}', sanitize_text_field( $ip ), $content );
|
143 |
break;
|
144 |
|
145 |
case 'user_id':
|
@@ -275,7 +274,6 @@ class WPForms_Smart_Tags {
|
|
275 |
}
|
276 |
}
|
277 |
|
278 |
-
|
279 |
// User meta smart tags.
|
280 |
preg_match_all( "/\{user_meta key=\"(.+?)\"\}/", $content, $user_metas );
|
281 |
|
@@ -283,15 +281,15 @@ class WPForms_Smart_Tags {
|
|
283 |
|
284 |
foreach ( $user_metas[1] as $key => $user_meta ) {
|
285 |
|
286 |
-
$value
|
287 |
$content = str_replace( $user_metas[0][ $key ], $value, $content );
|
288 |
}
|
289 |
}
|
290 |
|
291 |
-
// Field smart
|
292 |
preg_match_all( "/\{field_id=\"(.+?)\"\}/", $content, $ids );
|
293 |
|
294 |
-
// We can only process field smart tags if we have $fields
|
295 |
if ( ! empty( $ids[1] ) && ! empty( $fields ) ) {
|
296 |
|
297 |
foreach ( $ids[1] as $key => $parts ) {
|
@@ -304,7 +302,7 @@ class WPForms_Smart_Tags {
|
|
304 |
}
|
305 |
}
|
306 |
|
307 |
-
// Field
|
308 |
preg_match_all( "/\{field_value_id=\"(.+?)\"\}/", $content, $value_ids );
|
309 |
|
310 |
// We can only process field smart tags if we have $fields.
|
@@ -322,6 +320,28 @@ class WPForms_Smart_Tags {
|
|
322 |
}
|
323 |
}
|
324 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
325 |
return $content;
|
326 |
}
|
327 |
}
|
138 |
break;
|
139 |
|
140 |
case 'user_ip':
|
141 |
+
$content = str_replace( '{' . $tag . '}', wpforms_get_ip(), $content );
|
|
|
142 |
break;
|
143 |
|
144 |
case 'user_id':
|
274 |
}
|
275 |
}
|
276 |
|
|
|
277 |
// User meta smart tags.
|
278 |
preg_match_all( "/\{user_meta key=\"(.+?)\"\}/", $content, $user_metas );
|
279 |
|
281 |
|
282 |
foreach ( $user_metas[1] as $key => $user_meta ) {
|
283 |
|
284 |
+
$value = is_user_logged_in() ? get_user_meta( get_current_user_id(), sanitize_text_field( $user_meta ), true ) : '';
|
285 |
$content = str_replace( $user_metas[0][ $key ], $value, $content );
|
286 |
}
|
287 |
}
|
288 |
|
289 |
+
// Field smart tag to get data from 'value'.
|
290 |
preg_match_all( "/\{field_id=\"(.+?)\"\}/", $content, $ids );
|
291 |
|
292 |
+
// We can only process field smart tags if we have $fields.
|
293 |
if ( ! empty( $ids[1] ) && ! empty( $fields ) ) {
|
294 |
|
295 |
foreach ( $ids[1] as $key => $parts ) {
|
302 |
}
|
303 |
}
|
304 |
|
305 |
+
// Field smart tag to get data from 'value_raw'.
|
306 |
preg_match_all( "/\{field_value_id=\"(.+?)\"\}/", $content, $value_ids );
|
307 |
|
308 |
// We can only process field smart tags if we have $fields.
|
320 |
}
|
321 |
}
|
322 |
|
323 |
+
// Field smart tag to get HTML-postprocessed value (as seen in {all_fields}).
|
324 |
+
preg_match_all( '/\{field_html_id="(.+?)"\}/', $content, $html_ids );
|
325 |
+
|
326 |
+
// We can only process field smart tags if we have $fields.
|
327 |
+
if ( ! empty( $html_ids[1] ) && ! empty( $fields ) ) {
|
328 |
+
|
329 |
+
foreach ( $html_ids[1] as $key => $field_id ) {
|
330 |
+
$value = '';
|
331 |
+
if ( ! empty( $fields[ $field_id ] ) ) {
|
332 |
+
$value = apply_filters(
|
333 |
+
'wpforms_html_field_value',
|
334 |
+
wpforms_decode_string( $fields[ $field_id ]['value'] ),
|
335 |
+
$fields[ $field_id ],
|
336 |
+
$form_data,
|
337 |
+
'smart-tag'
|
338 |
+
);
|
339 |
+
}
|
340 |
+
|
341 |
+
$content = str_replace( '{field_html_id="' . $field_id . '"}', $value, $content );
|
342 |
+
}
|
343 |
+
}
|
344 |
+
|
345 |
return $content;
|
346 |
}
|
347 |
}
|
includes/class-updater.php
DELETED
@@ -1,315 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Updater class.
|
5 |
-
*
|
6 |
-
* @package WPForms
|
7 |
-
* @author WPForms
|
8 |
-
* @since 1.0.0
|
9 |
-
* @license GPL-2.0+
|
10 |
-
* @copyright Copyright (c) 2016, WPForms LLC
|
11 |
-
*/
|
12 |
-
class WPForms_Updater {
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Plugin name.
|
16 |
-
*
|
17 |
-
* @since 2.0.0
|
18 |
-
*
|
19 |
-
* @var bool|string
|
20 |
-
*/
|
21 |
-
public $plugin_name = false;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Plugin slug.
|
25 |
-
*
|
26 |
-
* @since 2.0.0
|
27 |
-
*
|
28 |
-
* @var bool|string
|
29 |
-
*/
|
30 |
-
public $plugin_slug = false;
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Plugin path.
|
34 |
-
*
|
35 |
-
* @since 2.0.0
|
36 |
-
*
|
37 |
-
* @var bool|string
|
38 |
-
*/
|
39 |
-
public $plugin_path = false;
|
40 |
-
|
41 |
-
/**
|
42 |
-
* URL of the plugin.
|
43 |
-
*
|
44 |
-
* @since 2.0.0
|
45 |
-
*
|
46 |
-
* @var bool|string
|
47 |
-
*/
|
48 |
-
public $plugin_url = false;
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Remote URL for getting plugin updates.
|
52 |
-
*
|
53 |
-
* @since 2.0.0
|
54 |
-
*
|
55 |
-
* @var bool|string
|
56 |
-
*/
|
57 |
-
public $remote_url = false;
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Version number of the plugin.
|
61 |
-
*
|
62 |
-
* @since 2.0.0
|
63 |
-
*
|
64 |
-
* @var bool|int
|
65 |
-
*/
|
66 |
-
public $version = false;
|
67 |
-
|
68 |
-
/**
|
69 |
-
* License key for the plugin.
|
70 |
-
*
|
71 |
-
* @since 2.0.0
|
72 |
-
*
|
73 |
-
* @var bool|string
|
74 |
-
*/
|
75 |
-
public $key = false;
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Holds the update data returned from the API.
|
79 |
-
*
|
80 |
-
* @since 2.1.3
|
81 |
-
*
|
82 |
-
* @var bool|object
|
83 |
-
*/
|
84 |
-
public $update = false;
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Holds the plugin info details for the update.
|
88 |
-
*
|
89 |
-
* @since 2.1.3
|
90 |
-
*
|
91 |
-
* @var bool|object
|
92 |
-
*/
|
93 |
-
public $info = false;
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Primary class constructor.
|
97 |
-
*
|
98 |
-
* @since 2.0.0
|
99 |
-
*
|
100 |
-
* @param array $config Array of updater config args.
|
101 |
-
*/
|
102 |
-
public function __construct( array $config ) {
|
103 |
-
|
104 |
-
// Set class properties.
|
105 |
-
$accepted_args = array(
|
106 |
-
'plugin_name',
|
107 |
-
'plugin_slug',
|
108 |
-
'plugin_path',
|
109 |
-
'plugin_url',
|
110 |
-
'remote_url',
|
111 |
-
'version',
|
112 |
-
'key',
|
113 |
-
);
|
114 |
-
|
115 |
-
foreach ( $accepted_args as $arg ) {
|
116 |
-
$this->$arg = $config[ $arg ];
|
117 |
-
}
|
118 |
-
|
119 |
-
// If the user cannot update plugins, stop processing here.
|
120 |
-
if ( ! current_user_can( 'update_plugins' ) ) {
|
121 |
-
return;
|
122 |
-
}
|
123 |
-
|
124 |
-
// Load the updater hooks and filters.
|
125 |
-
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'update_plugins_filter' ) );
|
126 |
-
//add_filter( 'set_site_transient_update_plugins', array( $this, 'set_site_transient_update_plugins' ) );
|
127 |
-
//add_filter( 'transient_update_plugins', array( $this, 'transient_update_plugins' ) );
|
128 |
-
add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
|
129 |
-
add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 );
|
130 |
-
|
131 |
-
}
|
132 |
-
|
133 |
-
/**
|
134 |
-
* Infuse plugin update details when WordPress runs its update checker.
|
135 |
-
*
|
136 |
-
* @since 2.0.0
|
137 |
-
*
|
138 |
-
* @param object $value The WordPress update object.
|
139 |
-
*
|
140 |
-
* @return object $value Amended WordPress update object on success, default if object is empty.
|
141 |
-
*/
|
142 |
-
public function update_plugins_filter( $value ) {
|
143 |
-
|
144 |
-
// If no update object exists, return early.
|
145 |
-
if ( empty( $value ) ) {
|
146 |
-
return $value;
|
147 |
-
}
|
148 |
-
|
149 |
-
// Run update check by pinging the external API. If it fails, return the default update object.
|
150 |
-
if ( ! $this->update ) {
|
151 |
-
$this->update = $this->perform_remote_request( 'get-plugin-update', array( 'tgm-updater-plugin' => $this->plugin_slug ) );
|
152 |
-
if ( ! $this->update || ! empty( $this->update->error ) ) {
|
153 |
-
$this->update = false;
|
154 |
-
|
155 |
-
return $value;
|
156 |
-
}
|
157 |
-
}
|
158 |
-
|
159 |
-
// Infuse the update object with our data if the version from the remote API is newer.
|
160 |
-
if ( isset( $this->update->new_version ) && version_compare( $this->version, $this->update->new_version, '<' ) ) {
|
161 |
-
// The $plugin_update object contains new_version, package, slug and last_update keys.
|
162 |
-
$value->response[ $this->plugin_path ] = $this->update;
|
163 |
-
}
|
164 |
-
|
165 |
-
// Return the update object.
|
166 |
-
return $value;
|
167 |
-
}
|
168 |
-
|
169 |
-
/**
|
170 |
-
* Disables SSL verification to prevent download package failures.
|
171 |
-
*
|
172 |
-
* @since 2.0.0
|
173 |
-
*
|
174 |
-
* @param array $args Array of request args.
|
175 |
-
* @param string $url The URL to be pinged.
|
176 |
-
*
|
177 |
-
* @return array $args Amended array of request args.
|
178 |
-
*/
|
179 |
-
public function http_request_args( $args, $url ) {
|
180 |
-
return $args;
|
181 |
-
}
|
182 |
-
|
183 |
-
/**
|
184 |
-
* Filters the plugins_api function to get our own custom plugin information
|
185 |
-
* from our private repo.
|
186 |
-
*
|
187 |
-
* @since 2.0.0
|
188 |
-
*
|
189 |
-
* @param object $api The original plugins_api object.
|
190 |
-
* @param string $action The action sent by plugins_api.
|
191 |
-
* @param array $args Additional args to send to plugins_api.
|
192 |
-
*
|
193 |
-
* @return object $api New stdClass with plugin information on success, default response on failure.
|
194 |
-
*/
|
195 |
-
public function plugins_api( $api, $action = '', $args = null ) {
|
196 |
-
|
197 |
-
$plugin = ( 'plugin_information' === $action ) && isset( $args->slug ) && ( $this->plugin_slug === $args->slug );
|
198 |
-
|
199 |
-
// If our plugin matches the request, set our own plugin data, else return the default response.
|
200 |
-
if ( $plugin ) {
|
201 |
-
return $this->set_plugins_api( $api );
|
202 |
-
} else {
|
203 |
-
return $api;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
/**
|
208 |
-
* Pings a remote API to retrieve plugin information for WordPress to display.
|
209 |
-
*
|
210 |
-
* @since 2.0.0
|
211 |
-
*
|
212 |
-
* @param object $default_api The default API object.
|
213 |
-
*
|
214 |
-
* @return object $api Return custom plugin information to plugins_api.
|
215 |
-
*/
|
216 |
-
public function set_plugins_api( $default_api ) {
|
217 |
-
|
218 |
-
// Perform the remote request to retrieve our plugin information. If it fails, return the default object.
|
219 |
-
if ( ! $this->info ) {
|
220 |
-
$this->info = $this->perform_remote_request( 'get-plugin-info', array( 'tgm-updater-plugin' => $this->plugin_slug ) );
|
221 |
-
if ( ! $this->info || ! empty( $this->info->error ) ) {
|
222 |
-
$this->info = false;
|
223 |
-
|
224 |
-
return $default_api;
|
225 |
-
}
|
226 |
-
}
|
227 |
-
|
228 |
-
// Create a new stdClass object and populate it with our plugin information.
|
229 |
-
$api = new stdClass;
|
230 |
-
$api->name = isset( $this->info->name ) ? $this->info->name : '';
|
231 |
-
$api->slug = isset( $this->info->slug ) ? $this->info->slug : '';
|
232 |
-
$api->version = isset( $this->info->version ) ? $this->info->version : '';
|
233 |
-
$api->author = isset( $this->info->author ) ? $this->info->author : '';
|
234 |
-
$api->author_profile = isset( $this->info->author_profile ) ? $this->info->author_profile : '';
|
235 |
-
$api->requires = isset( $this->info->requires ) ? $this->info->requires : '';
|
236 |
-
$api->tested = isset( $this->info->tested ) ? $this->info->tested : '';
|
237 |
-
$api->last_updated = isset( $this->info->last_updated ) ? $this->info->last_updated : '';
|
238 |
-
$api->homepage = isset( $this->info->homepage ) ? $this->info->homepage : '';
|
239 |
-
$api->sections['changelog'] = isset( $this->info->changelog ) ? $this->info->changelog : '';
|
240 |
-
$api->download_link = isset( $this->info->download_link ) ? $this->info->download_link : '';
|
241 |
-
$api->active_installs = isset( $this->info->active_installs ) ? $this->info->active_installs : '';
|
242 |
-
$api->banners = isset( $this->info->banners ) ? (array) $this->info->banners : '';
|
243 |
-
|
244 |
-
// Return the new API object with our custom data.
|
245 |
-
return $api;
|
246 |
-
}
|
247 |
-
|
248 |
-
/**
|
249 |
-
* Queries the remote URL via wp_remote_post and returns a json decoded response.
|
250 |
-
*
|
251 |
-
* @since 2.0.0
|
252 |
-
*
|
253 |
-
* @param string $action The name of the $_POST action var.
|
254 |
-
* @param array $body The content to retrieve from the remote URL.
|
255 |
-
* @param array $headers The headers to send to the remote URL.
|
256 |
-
* @param string $return_format The format for returning content from the remote URL.
|
257 |
-
*
|
258 |
-
* @return string|bool Json decoded response on success, false on failure.
|
259 |
-
*/
|
260 |
-
public function perform_remote_request( $action, $body = array(), $headers = array(), $return_format = 'json' ) {
|
261 |
-
|
262 |
-
// Build the body of the request.
|
263 |
-
$body = wp_parse_args(
|
264 |
-
$body,
|
265 |
-
array(
|
266 |
-
'tgm-updater-action' => $action,
|
267 |
-
'tgm-updater-key' => $this->key,
|
268 |
-
'tgm-updater-wp-version' => get_bloginfo( 'version' ),
|
269 |
-
'tgm-updater-referer' => site_url(),
|
270 |
-
)
|
271 |
-
);
|
272 |
-
$body = http_build_query( $body, '', '&' );
|
273 |
-
|
274 |
-
// Build the headers of the request.
|
275 |
-
$headers = wp_parse_args(
|
276 |
-
$headers,
|
277 |
-
array(
|
278 |
-
'Content-Type' => 'application/x-www-form-urlencoded',
|
279 |
-
'Content-Length' => strlen( $body ),
|
280 |
-
)
|
281 |
-
);
|
282 |
-
|
283 |
-
// Setup variable for wp_remote_post.
|
284 |
-
$post = array(
|
285 |
-
'headers' => $headers,
|
286 |
-
'body' => $body,
|
287 |
-
);
|
288 |
-
|
289 |
-
// Perform the query and retrieve the response.
|
290 |
-
$response = wp_remote_post( esc_url_raw( $this->remote_url ), $post );
|
291 |
-
$response_code = wp_remote_retrieve_response_code( $response );
|
292 |
-
$response_body = wp_remote_retrieve_body( $response );
|
293 |
-
|
294 |
-
// Bail out early if there are any errors.
|
295 |
-
if ( 200 !== $response_code || is_wp_error( $response_body ) ) {
|
296 |
-
return false;
|
297 |
-
}
|
298 |
-
|
299 |
-
$response_body = json_decode( $response_body );
|
300 |
-
|
301 |
-
// A few items need to be converted from an object to an array as that
|
302 |
-
// is what WordPress expects.
|
303 |
-
if ( ! empty( $response_body->package ) ) {
|
304 |
-
if ( ! empty ( $response_body->icons ) ) {
|
305 |
-
$response_body->icons = (array) $response_body->icons;
|
306 |
-
}
|
307 |
-
if ( ! empty ( $response_body->banners ) ) {
|
308 |
-
$response_body->banners = (array) $response_body->banners;
|
309 |
-
}
|
310 |
-
}
|
311 |
-
|
312 |
-
// Return the json decoded content.
|
313 |
-
return $response_body;
|
314 |
-
}
|
315 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/fields/class-checkbox.php
CHANGED
@@ -129,6 +129,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
|
|
129 |
$properties['input_container'] = array(
|
130 |
'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
|
131 |
'data' => array(),
|
|
|
132 |
'id' => "wpforms-{$form_id}-field_{$field_id}",
|
133 |
);
|
134 |
|
@@ -462,7 +463,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
|
|
462 |
|
463 |
printf(
|
464 |
'<ul %s>',
|
465 |
-
wpforms_html_attributes( $container['id'], $container['class'], $container['data'] )
|
466 |
);
|
467 |
|
468 |
foreach ( $choices as $key => $choice ) {
|
129 |
$properties['input_container'] = array(
|
130 |
'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
|
131 |
'data' => array(),
|
132 |
+
'attr' => array(),
|
133 |
'id' => "wpforms-{$form_id}-field_{$field_id}",
|
134 |
);
|
135 |
|
463 |
|
464 |
printf(
|
465 |
'<ul %s>',
|
466 |
+
wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] )
|
467 |
);
|
468 |
|
469 |
foreach ( $choices as $key => $choice ) {
|
includes/fields/class-gdpr-checkbox.php
CHANGED
@@ -83,6 +83,7 @@ class WPForms_Field_GDPR_Checkbox extends WPForms_Field {
|
|
83 |
$properties['input_container'] = array(
|
84 |
'class' => array(),
|
85 |
'data' => array(),
|
|
|
86 |
'id' => "wpforms-{$form_id}-field_{$field_id}",
|
87 |
);
|
88 |
|
@@ -256,7 +257,7 @@ class WPForms_Field_GDPR_Checkbox extends WPForms_Field {
|
|
256 |
|
257 |
printf(
|
258 |
'<ul %s>',
|
259 |
-
wpforms_html_attributes( $container['id'], $container['class'], $container['data'] )
|
260 |
);
|
261 |
|
262 |
foreach ( $choices as $key => $choice ) {
|
83 |
$properties['input_container'] = array(
|
84 |
'class' => array(),
|
85 |
'data' => array(),
|
86 |
+
'attr' => array(),
|
87 |
'id' => "wpforms-{$form_id}-field_{$field_id}",
|
88 |
);
|
89 |
|
257 |
|
258 |
printf(
|
259 |
'<ul %s>',
|
260 |
+
wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] )
|
261 |
);
|
262 |
|
263 |
foreach ( $choices as $key => $choice ) {
|
includes/fields/class-radio.php
CHANGED
@@ -119,6 +119,7 @@ class WPForms_Field_Radio extends WPForms_Field {
|
|
119 |
$properties['input_container'] = array(
|
120 |
'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
|
121 |
'data' => array(),
|
|
|
122 |
'id' => "wpforms-{$form_id}-field_{$field_id}",
|
123 |
);
|
124 |
|
@@ -372,7 +373,7 @@ class WPForms_Field_Radio extends WPForms_Field {
|
|
372 |
|
373 |
printf(
|
374 |
'<ul %s>',
|
375 |
-
wpforms_html_attributes( $container['id'], $container['class'], $container['data'] )
|
376 |
); // WPCS: XSS ok.
|
377 |
|
378 |
foreach ( $choices as $key => $choice ) {
|
119 |
$properties['input_container'] = array(
|
120 |
'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
|
121 |
'data' => array(),
|
122 |
+
'attr' => array(),
|
123 |
'id' => "wpforms-{$form_id}-field_{$field_id}",
|
124 |
);
|
125 |
|
373 |
|
374 |
printf(
|
375 |
'<ul %s>',
|
376 |
+
wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] )
|
377 |
); // WPCS: XSS ok.
|
378 |
|
379 |
foreach ( $choices as $key => $choice ) {
|
includes/functions.php
CHANGED
@@ -1096,18 +1096,29 @@ function wpforms_days() {
|
|
1096 |
*/
|
1097 |
function wpforms_get_ip() {
|
1098 |
|
1099 |
-
$ip =
|
1100 |
|
1101 |
-
if ( ! empty( $_SERVER['
|
1102 |
-
$ip = $_SERVER['
|
|
|
|
|
|
|
1103 |
} elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
|
1104 |
-
|
1105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1106 |
} elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
|
1107 |
-
$ip = $_SERVER['REMOTE_ADDR'];
|
1108 |
}
|
1109 |
|
1110 |
-
$
|
|
|
|
|
1111 |
|
1112 |
return sanitize_text_field( apply_filters( 'wpforms_get_ip', $ip_array[0] ) );
|
1113 |
}
|
@@ -1766,12 +1777,70 @@ function wpforms_get_day_period_date( $period, $timestamp = '', $format = 'Y-m-d
|
|
1766 |
case 'end_of_day':
|
1767 |
$date = date( $format, strtotime( 'tomorrow', $timestamp ) - 1 );
|
1768 |
break;
|
1769 |
-
|
1770 |
}
|
1771 |
|
1772 |
return $date;
|
1773 |
}
|
1774 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1775 |
/**
|
1776 |
* Get an array of all the active provider addons.
|
1777 |
*
|
1096 |
*/
|
1097 |
function wpforms_get_ip() {
|
1098 |
|
1099 |
+
$ip = false;
|
1100 |
|
1101 |
+
if ( ! empty( $_SERVER['HTTP_X_REAL_IP'] ) ) {
|
1102 |
+
$ip = filter_var( wp_unslash( $_SERVER['HTTP_X_REAL_IP'] ), FILTER_VALIDATE_IP );
|
1103 |
+
} elseif ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
|
1104 |
+
// Check ip from share internet.
|
1105 |
+
$ip = filter_var( wp_unslash( $_SERVER['HTTP_CLIENT_IP'] ), FILTER_VALIDATE_IP );
|
1106 |
} elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
|
1107 |
+
// To check ip is pass from proxy.
|
1108 |
+
// Can include more than 1 ip, first is the public one.
|
1109 |
+
// WPCS: sanitization ok.
|
1110 |
+
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
1111 |
+
$ips = explode( ',', wp_unslash( $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
|
1112 |
+
if ( is_array( $ips ) ) {
|
1113 |
+
$ip = filter_var( $ips[0], FILTER_VALIDATE_IP );
|
1114 |
+
}
|
1115 |
} elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
|
1116 |
+
$ip = filter_var( wp_unslash( $_SERVER['REMOTE_ADDR'] ), FILTER_VALIDATE_IP );
|
1117 |
}
|
1118 |
|
1119 |
+
$ip = false !== $ip ? $ip : '127.0.0.1';
|
1120 |
+
$ip_array = explode( ',', $ip );
|
1121 |
+
$ip_array = array_map( 'trim', $ip_array );
|
1122 |
|
1123 |
return sanitize_text_field( apply_filters( 'wpforms_get_ip', $ip_array[0] ) );
|
1124 |
}
|
1777 |
case 'end_of_day':
|
1778 |
$date = date( $format, strtotime( 'tomorrow', $timestamp ) - 1 );
|
1779 |
break;
|
|
|
1780 |
}
|
1781 |
|
1782 |
return $date;
|
1783 |
}
|
1784 |
|
1785 |
+
/**
|
1786 |
+
* Get an array of all possible provider addons.
|
1787 |
+
*
|
1788 |
+
* @since 1.5.5
|
1789 |
+
*
|
1790 |
+
* @return array
|
1791 |
+
*/
|
1792 |
+
function wpforms_get_providers_all() {
|
1793 |
+
|
1794 |
+
$providers = array(
|
1795 |
+
array(
|
1796 |
+
'name' => 'AWeber',
|
1797 |
+
'slug' => 'aweber',
|
1798 |
+
'img' => 'addon-icon-aweber.png',
|
1799 |
+
'plugin' => 'wpforms-aweber/wpforms-aweber.php',
|
1800 |
+
'plugin_slug' => 'wpforms-aweber',
|
1801 |
+
),
|
1802 |
+
array(
|
1803 |
+
'name' => 'Campaign Monitor',
|
1804 |
+
'slug' => 'campaign-monitor',
|
1805 |
+
'img' => 'addon-icon-campaign-monitor.png',
|
1806 |
+
'plugin' => 'wpforms-campaign-monitor/wpforms-campaign-monitor.php',
|
1807 |
+
'plugin_slug' => 'wpforms-campaign-monitor',
|
1808 |
+
),
|
1809 |
+
array(
|
1810 |
+
'name' => 'Drip',
|
1811 |
+
'slug' => 'drip',
|
1812 |
+
'img' => 'addon-icon-drip.png',
|
1813 |
+
'plugin' => 'wpforms-drip/wpforms-drip.php',
|
1814 |
+
'plugin_slug' => 'wpforms-drip',
|
1815 |
+
),
|
1816 |
+
array(
|
1817 |
+
'name' => 'GetResponse',
|
1818 |
+
'slug' => 'getresponse',
|
1819 |
+
'img' => 'addon-icon-getresponse.png',
|
1820 |
+
'plugin' => 'wpforms-getresponse/wpforms-getresponse.php',
|
1821 |
+
'plugin_slug' => 'wpforms-getresponse',
|
1822 |
+
),
|
1823 |
+
array(
|
1824 |
+
'name' => 'MailChimp',
|
1825 |
+
'slug' => 'mailchimp',
|
1826 |
+
'img' => 'addon-icon-mailchimp.png',
|
1827 |
+
'plugin' => 'wpforms-mailchimp/wpforms-mailchimp.php',
|
1828 |
+
'plugin_slug' => 'wpforms-mailchimp',
|
1829 |
+
),
|
1830 |
+
array(
|
1831 |
+
'name' => 'Zapier',
|
1832 |
+
'slug' => 'zapier',
|
1833 |
+
'img' => 'addon-icon-zapier.png',
|
1834 |
+
'plugin' => 'wpforms-zapier/wpforms-zapier.php',
|
1835 |
+
'plugin_slug' => 'wpforms-zapier',
|
1836 |
+
),
|
1837 |
+
);
|
1838 |
+
|
1839 |
+
return $providers;
|
1840 |
+
}
|
1841 |
+
|
1842 |
+
|
1843 |
+
|
1844 |
/**
|
1845 |
* Get an array of all the active provider addons.
|
1846 |
*
|
languages/wpforms-lite.pot
CHANGED
@@ -1,13 +1,13 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
-
"Project-Id-Version: WPForms Lite 1.5.
|
4 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms-lite\n"
|
5 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
6 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
7 |
"MIME-Version: 1.0\n"
|
8 |
"Content-Type: text/plain; charset=UTF-8\n"
|
9 |
"Content-Transfer-Encoding: 8bit\n"
|
10 |
-
"POT-Creation-Date: 2019-08-
|
11 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
12 |
"X-Generator: WP-CLI 2.1.0\n"
|
13 |
"X-Domain: wpforms-lite\n"
|
@@ -20,7 +20,7 @@ msgstr ""
|
|
20 |
#: includes/admin/class-menu.php:109
|
21 |
#: includes/integrations.php:45
|
22 |
#: includes/class-form.php:74
|
23 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
24 |
#: src/Emails/Templates/General.php:97
|
25 |
#: src/Integrations/Gutenberg/FormSelector.php:94
|
26 |
msgid "WPForms"
|
@@ -1607,9 +1607,9 @@ msgstr ""
|
|
1607 |
msgid "Saturday"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
-
#: includes/functions.php:
|
1611 |
#: includes/class-frontend.php:1291
|
1612 |
-
#: includes/admin/class-settings.php:
|
1613 |
msgid "This field is required."
|
1614 |
msgstr ""
|
1615 |
|
@@ -1653,27 +1653,23 @@ msgctxt "Widget"
|
|
1653 |
msgid "Display form description"
|
1654 |
msgstr ""
|
1655 |
|
1656 |
-
#: includes/class-upgrader-skin.php:85
|
1657 |
-
msgid "There was an error installing the addon. Please try again."
|
1658 |
-
msgstr ""
|
1659 |
-
|
1660 |
#. translators: %s - URL to a non-amp version of a page with the form.
|
1661 |
#: includes/class-frontend.php:161
|
1662 |
msgid "<a href=\"%s\">Go to the full page</a> to view and submit the form."
|
1663 |
msgstr ""
|
1664 |
|
1665 |
#: includes/class-frontend.php:1292
|
1666 |
-
#: includes/admin/class-settings.php:
|
1667 |
msgid "Please enter a valid URL."
|
1668 |
msgstr ""
|
1669 |
|
1670 |
#: includes/class-frontend.php:1293
|
1671 |
-
#: includes/admin/class-settings.php:
|
1672 |
msgid "Please enter a valid email address."
|
1673 |
msgstr ""
|
1674 |
|
1675 |
#: includes/class-frontend.php:1294
|
1676 |
-
#: includes/admin/class-settings.php:
|
1677 |
msgid "Did you mean {suggestion}?"
|
1678 |
msgstr ""
|
1679 |
|
@@ -1682,13 +1678,13 @@ msgid "Click to accept this suggestion."
|
|
1682 |
msgstr ""
|
1683 |
|
1684 |
#: includes/class-frontend.php:1296
|
1685 |
-
#: includes/admin/class-settings.php:
|
1686 |
#: includes/fields/class-number.php:162
|
1687 |
msgid "Please enter a valid number."
|
1688 |
msgstr ""
|
1689 |
|
1690 |
#: includes/class-frontend.php:1297
|
1691 |
-
#: includes/admin/class-settings.php:
|
1692 |
msgid "Field values do not match."
|
1693 |
msgstr ""
|
1694 |
|
@@ -1726,8 +1722,8 @@ msgid "The total size of the selected files {totalSize} Mb exceeds the allowed l
|
|
1726 |
msgstr ""
|
1727 |
|
1728 |
#: includes/class-frontend.php:1306
|
1729 |
-
#: includes/admin/class-settings.php:
|
1730 |
-
#: includes/fields/class-checkbox.php:
|
1731 |
msgid "You have exceeded the number of allowed selections: {#}."
|
1732 |
msgstr ""
|
1733 |
|
@@ -1904,6 +1900,7 @@ msgid "Account Nickname"
|
|
1904 |
msgstr ""
|
1905 |
|
1906 |
#: includes/providers/class-constant-contact.php:511
|
|
|
1907 |
msgid "Connect"
|
1908 |
msgstr ""
|
1909 |
|
@@ -2068,7 +2065,7 @@ msgid "You cannot send emails with WPForms_WP_Emails() until init/admin_init has
|
|
2068 |
msgstr ""
|
2069 |
|
2070 |
#: includes/emails/class-emails.php:492
|
2071 |
-
#: src/Lite/Admin/Builder/Education.php:
|
2072 |
msgid "Page Break"
|
2073 |
msgstr ""
|
2074 |
|
@@ -2195,7 +2192,7 @@ msgstr ""
|
|
2195 |
|
2196 |
#: includes/admin/class-about.php:321
|
2197 |
#: includes/admin/admin.php:121
|
2198 |
-
#: includes/admin/admin.php:
|
2199 |
msgid "Activate"
|
2200 |
msgstr ""
|
2201 |
|
@@ -2352,7 +2349,7 @@ msgid "Pro"
|
|
2352 |
msgstr ""
|
2353 |
|
2354 |
#: includes/admin/class-about.php:754
|
2355 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
2356 |
msgid "MonsterInsights"
|
2357 |
msgstr ""
|
2358 |
|
@@ -2379,7 +2376,7 @@ msgstr ""
|
|
2379 |
|
2380 |
#: includes/admin/class-about.php:777
|
2381 |
#: includes/admin/class-about.php:783
|
2382 |
-
msgid "
|
2383 |
msgstr ""
|
2384 |
|
2385 |
#: includes/admin/class-about.php:782
|
@@ -2653,49 +2650,45 @@ msgstr ""
|
|
2653 |
msgid "The callback function used for the %s setting is missing."
|
2654 |
msgstr ""
|
2655 |
|
2656 |
-
#: includes/admin/settings-api.php:
|
2657 |
msgid "You're using WPForms Lite - no license needed. Enjoy!"
|
2658 |
msgstr ""
|
2659 |
|
2660 |
#. translators: %s - WPForms.com upgrade URL.
|
2661 |
-
#: includes/admin/settings-api.php:
|
2662 |
msgid "To unlock more features consider <strong><a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wpforms-upgrade-modal\">upgrading to PRO</a></strong>."
|
2663 |
msgstr ""
|
2664 |
|
2665 |
-
#: includes/admin/settings-api.php:
|
2666 |
msgid "As a valued WPForms Lite user you receive <strong>50% off</strong>, automatically applied at checkout!"
|
2667 |
msgstr ""
|
2668 |
|
2669 |
-
#: includes/admin/settings-api.php:
|
2670 |
-
msgid "Already purchased?
|
2671 |
msgstr ""
|
2672 |
|
2673 |
-
#: includes/admin/settings-api.php:
|
2674 |
msgid "Paste license key here"
|
2675 |
msgstr ""
|
2676 |
|
2677 |
-
#: includes/admin/settings-api.php:
|
2678 |
-
msgid "Unlock PRO Features Now"
|
2679 |
-
msgstr ""
|
2680 |
-
|
2681 |
-
#: includes/admin/settings-api.php:149
|
2682 |
msgid "Verify Key"
|
2683 |
msgstr ""
|
2684 |
|
2685 |
-
#: includes/admin/settings-api.php:
|
2686 |
msgid "Deactivate Key"
|
2687 |
msgstr ""
|
2688 |
|
2689 |
#. translators: $s - license type.
|
2690 |
-
#: includes/admin/settings-api.php:
|
2691 |
msgid "Your license key type is %s."
|
2692 |
msgstr ""
|
2693 |
|
2694 |
-
#: includes/admin/settings-api.php:
|
2695 |
msgid "If your license has been upgraded or is incorrect, <a href=\"#\" id=\"wpforms-setting-license-key-refresh\">click here to force a refresh</a>."
|
2696 |
msgstr ""
|
2697 |
|
2698 |
-
#: includes/admin/settings-api.php:
|
2699 |
#: includes/fields/class-base.php:825
|
2700 |
#: includes/fields/class-base.php:956
|
2701 |
msgid "Upload Image"
|
@@ -2778,9 +2771,9 @@ msgid "Could not install addon. Please download from wpforms.com and install man
|
|
2778 |
msgstr ""
|
2779 |
|
2780 |
#: includes/admin/ajax-actions.php:549
|
2781 |
-
#:
|
2782 |
-
#:
|
2783 |
-
#:
|
2784 |
msgid "Plugin installed & activated."
|
2785 |
msgstr ""
|
2786 |
|
@@ -2804,7 +2797,7 @@ msgid "Import"
|
|
2804 |
msgstr ""
|
2805 |
|
2806 |
#: includes/admin/class-tools.php:99
|
2807 |
-
#: includes/admin/class-tools.php:
|
2808 |
msgid "Export"
|
2809 |
msgstr ""
|
2810 |
|
@@ -2904,7 +2897,7 @@ msgstr ""
|
|
2904 |
|
2905 |
#: includes/admin/class-tools.php:381
|
2906 |
#: includes/admin/class-welcome.php:309
|
2907 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
2908 |
msgid "Upgrade to WPForms Pro"
|
2909 |
msgstr ""
|
2910 |
|
@@ -2948,68 +2941,68 @@ msgstr ""
|
|
2948 |
msgid "The following fields are not supported and were not imported:"
|
2949 |
msgstr ""
|
2950 |
|
2951 |
-
#: includes/admin/class-tools.php:
|
2952 |
msgid "Form Export"
|
2953 |
msgstr ""
|
2954 |
|
2955 |
-
#: includes/admin/class-tools.php:
|
2956 |
msgid "Form exports files can be used to create a backup of your forms or to import forms into another site."
|
2957 |
msgstr ""
|
2958 |
|
2959 |
-
#: includes/admin/class-tools.php:
|
2960 |
msgid "Select form(s)"
|
2961 |
msgstr ""
|
2962 |
|
2963 |
-
#: includes/admin/class-tools.php:
|
2964 |
msgid "You need to create a form before you can use form export."
|
2965 |
msgstr ""
|
2966 |
|
2967 |
-
#: includes/admin/class-tools.php:
|
2968 |
msgid "Form Template Export"
|
2969 |
msgstr ""
|
2970 |
|
2971 |
-
#: includes/admin/class-tools.php:
|
2972 |
msgid "The following code can be used to register your custom form template. Copy and paste the following code to your theme's functions.php file or include it within an external file."
|
2973 |
msgstr ""
|
2974 |
|
2975 |
#. translators: %s - WPForms.com docs URL.
|
2976 |
-
#: includes/admin/class-tools.php:
|
2977 |
msgid "For more information <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">see our documentation</a>."
|
2978 |
msgstr ""
|
2979 |
|
2980 |
-
#: includes/admin/class-tools.php:
|
2981 |
msgid "Select a form to generate PHP code that can be used to register a custom form template."
|
2982 |
msgstr ""
|
2983 |
|
2984 |
-
#: includes/admin/class-tools.php:
|
2985 |
msgid "You need to create a form before you can generate a template."
|
2986 |
msgstr ""
|
2987 |
|
2988 |
-
#: includes/admin/class-tools.php:
|
2989 |
msgid "Export Template"
|
2990 |
msgstr ""
|
2991 |
|
2992 |
-
#: includes/admin/class-tools.php:
|
2993 |
msgid "System Information"
|
2994 |
msgstr ""
|
2995 |
|
2996 |
-
#: includes/admin/class-tools.php:
|
2997 |
msgid "Test SSL Connections"
|
2998 |
msgstr ""
|
2999 |
|
3000 |
-
#: includes/admin/class-tools.php:
|
3001 |
msgid "Click the button below to verify your web server can perform SSL connections successfully."
|
3002 |
msgstr ""
|
3003 |
|
3004 |
-
#: includes/admin/class-tools.php:
|
3005 |
msgid "Test Connection"
|
3006 |
msgstr ""
|
3007 |
|
3008 |
-
#: includes/admin/class-tools.php:
|
3009 |
msgid "Please upload a valid .json form export file."
|
3010 |
msgstr ""
|
3011 |
|
3012 |
-
#: includes/admin/class-tools.php:
|
3013 |
msgid "Error"
|
3014 |
msgstr ""
|
3015 |
|
@@ -3030,7 +3023,7 @@ msgstr ""
|
|
3030 |
#: includes/admin/overview/class-overview-table.php:172
|
3031 |
#: templates/emails/summary-body.php:42
|
3032 |
#: templates/emails/summary-body-plain.php:34
|
3033 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
3034 |
msgid "Entries"
|
3035 |
msgstr ""
|
3036 |
|
@@ -3118,7 +3111,7 @@ msgstr ""
|
|
3118 |
|
3119 |
#: includes/admin/class-welcome.php:114
|
3120 |
#: includes/admin/builder/class-builder.php:513
|
3121 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
3122 |
#: src/Admin/Challenge.php:506
|
3123 |
msgid "Sullie the WPForms mascot"
|
3124 |
msgstr ""
|
@@ -3231,7 +3224,8 @@ msgstr ""
|
|
3231 |
|
3232 |
#: includes/admin/class-welcome.php:237
|
3233 |
#: includes/admin/builder/panels/class-payments.php:82
|
3234 |
-
#: src/Lite/Admin/
|
|
|
3235 |
msgid "Upgrade to PRO"
|
3236 |
msgstr ""
|
3237 |
|
@@ -3374,110 +3368,122 @@ msgid "Please select at least one form to import."
|
|
3374 |
msgstr ""
|
3375 |
|
3376 |
#: includes/admin/admin.php:149
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3377 |
#: includes/admin/builder/class-builder.php:337
|
3378 |
msgid "OK"
|
3379 |
msgstr ""
|
3380 |
|
3381 |
-
#: includes/admin/admin.php:
|
3382 |
msgid "Install and Activate"
|
3383 |
msgstr ""
|
3384 |
|
3385 |
-
#: includes/admin/admin.php:
|
3386 |
msgid "needs to be installed and activated to import its forms. Would you like us to install and activate it for you?"
|
3387 |
msgstr ""
|
3388 |
|
3389 |
-
#: includes/admin/admin.php:
|
3390 |
msgid "needs to be activated to import its forms. Would you like us to activate it for you?"
|
3391 |
msgstr ""
|
3392 |
|
3393 |
-
#: includes/admin/admin.php:
|
3394 |
msgid "Are you sure you want to disconnect this account?"
|
3395 |
msgstr ""
|
3396 |
|
3397 |
-
#: includes/admin/admin.php:
|
3398 |
msgid "Could not authenticate with the provider."
|
3399 |
msgstr ""
|
3400 |
|
3401 |
-
#: includes/admin/admin.php:
|
3402 |
msgid "Save and Refresh"
|
3403 |
msgstr ""
|
3404 |
|
|
|
|
|
|
|
|
|
3405 |
#. translators: %s - WPForms.com docs page URL.
|
3406 |
-
#: includes/admin/admin.php:
|
3407 |
msgid "You've selected <strong>Base Styling Only</strong>, which may result in styling issues. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for common issues and recommendations."
|
3408 |
msgstr ""
|
3409 |
|
3410 |
#. translators: %s - WPForms.com docs page URL.
|
3411 |
-
#: includes/admin/admin.php:
|
3412 |
msgid "You've selected <strong>No Styling</strong>, which will likely result in significant styling issues and is recommended only for developers. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for more details and recommendations."
|
3413 |
msgstr ""
|
3414 |
|
3415 |
-
#: includes/admin/admin.php:
|
3416 |
msgid "Testing"
|
3417 |
msgstr ""
|
3418 |
|
3419 |
-
#: includes/admin/admin.php:
|
3420 |
msgid "Upgrade was successfully completed!"
|
3421 |
msgstr ""
|
3422 |
|
3423 |
-
#: includes/admin/admin.php:
|
3424 |
#: includes/admin/builder/class-builder.php:414
|
3425 |
msgid "Upload or Choose Your Image"
|
3426 |
msgstr ""
|
3427 |
|
3428 |
-
#: includes/admin/admin.php:
|
3429 |
#: includes/admin/builder/class-builder.php:415
|
3430 |
msgid "Use Image"
|
3431 |
msgstr ""
|
3432 |
|
3433 |
-
#: includes/admin/admin.php:
|
3434 |
msgid "Select fields"
|
3435 |
msgstr ""
|
3436 |
|
3437 |
-
#: includes/admin/admin.php:
|
3438 |
msgid "Loading..."
|
3439 |
msgstr ""
|
3440 |
|
3441 |
-
#: includes/admin/admin.php:
|
3442 |
msgid "No results found"
|
3443 |
msgstr ""
|
3444 |
|
3445 |
-
#: includes/admin/admin.php:
|
3446 |
msgid "No choices to choose from"
|
3447 |
msgstr ""
|
3448 |
|
3449 |
-
#: includes/admin/admin.php:
|
3450 |
msgid "Press to select"
|
3451 |
msgstr ""
|
3452 |
|
3453 |
#. translators: %1$s - WPForms plugin name; %2$s - WPForms.com URL to a related doc.
|
3454 |
-
#: includes/admin/admin.php:
|
3455 |
msgid "Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more</a> for additional information."
|
3456 |
msgstr ""
|
3457 |
|
3458 |
-
#: includes/admin/admin.php:
|
3459 |
msgid "<strong>Please Note:</strong> Support for PHP 5.3 to 5.5 will be discontinued in 2019. After this, if no further action is taken, WPForms functionality will be disabled."
|
3460 |
msgstr ""
|
3461 |
|
3462 |
-
#: includes/admin/admin.php:
|
3463 |
msgid "Thanks for your interest in WPForms Pro!"
|
3464 |
msgstr ""
|
3465 |
|
3466 |
#. translators: %s - WPForms.com contact page URL.
|
3467 |
-
#: includes/admin/admin.php:
|
3468 |
msgid "If you have any questions or issues just <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">let us know</a>."
|
3469 |
msgstr ""
|
3470 |
|
3471 |
-
#: includes/admin/admin.php:
|
3472 |
msgid "After purchasing WPForms Pro, you'll need to <strong>download and install the Pro version of the plugin</strong>, and then <strong>remove the free plugin</strong>."
|
3473 |
msgstr ""
|
3474 |
|
3475 |
-
#: includes/admin/admin.php:
|
3476 |
msgid "(Don't worry, all your forms and settings will be preserved.)"
|
3477 |
msgstr ""
|
3478 |
|
3479 |
#. translators: %s - WPForms.com upgrade from Lite to paid docs page URL.
|
3480 |
-
#: includes/admin/admin.php:
|
3481 |
msgid "Check out <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">our documentation</a> for step-by-step instructions."
|
3482 |
msgstr ""
|
3483 |
|
@@ -3594,7 +3600,7 @@ msgstr ""
|
|
3594 |
|
3595 |
#. translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates.
|
3596 |
#: includes/admin/builder/panels/class-setup.php:93
|
3597 |
-
msgid "Have a suggestion for a new template? <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">We'd love to hear it</a>. Also, you can <a href=\"%
|
3598 |
msgstr ""
|
3599 |
|
3600 |
#: includes/admin/builder/panels/class-setup.php:110
|
@@ -3726,8 +3732,8 @@ msgstr ""
|
|
3726 |
|
3727 |
#: includes/admin/builder/panels/class-settings.php:42
|
3728 |
#: includes/admin/builder/panels/class-settings.php:82
|
3729 |
-
#: includes/admin/class-settings.php:
|
3730 |
-
#: includes/admin/class-settings.php:
|
3731 |
msgid "General"
|
3732 |
msgstr ""
|
3733 |
|
@@ -4198,49 +4204,17 @@ msgstr ""
|
|
4198 |
msgid "Settings were successfully saved."
|
4199 |
msgstr ""
|
4200 |
|
4201 |
-
#: includes/admin/class-settings.php:
|
4202 |
-
msgid "Oops!"
|
4203 |
-
msgstr ""
|
4204 |
-
|
4205 |
-
#: includes/admin/class-settings.php:172
|
4206 |
-
msgid "Unfortunately, there was an server connection error:"
|
4207 |
-
msgstr ""
|
4208 |
-
|
4209 |
-
#: includes/admin/class-settings.php:173
|
4210 |
-
msgid "Almost Done"
|
4211 |
-
msgstr ""
|
4212 |
-
|
4213 |
-
#: includes/admin/class-settings.php:174
|
4214 |
-
msgid "We can automatically upgrade the installed version to WPForms PRO."
|
4215 |
-
msgstr ""
|
4216 |
-
|
4217 |
#: includes/admin/class-settings.php:175
|
4218 |
-
|
4219 |
-
|
4220 |
-
|
4221 |
-
#: includes/admin/class-settings.php:176
|
4222 |
-
msgid "Upgrade now"
|
4223 |
-
msgstr ""
|
4224 |
-
|
4225 |
-
#: includes/admin/class-settings.php:177
|
4226 |
-
msgid "Activate now"
|
4227 |
-
msgstr ""
|
4228 |
-
|
4229 |
-
#: includes/admin/class-settings.php:178
|
4230 |
-
msgid "Do upgrade later"
|
4231 |
-
msgstr ""
|
4232 |
-
|
4233 |
-
#: includes/admin/class-settings.php:198
|
4234 |
-
#: includes/admin/class-settings.php:203
|
4235 |
-
#: includes/admin/class-settings.php:208
|
4236 |
-
#: includes/admin/class-settings.php:213
|
4237 |
-
#: includes/admin/class-settings.php:223
|
4238 |
msgid "Save Settings"
|
4239 |
msgstr ""
|
4240 |
|
4241 |
-
#: includes/admin/class-settings.php:
|
4242 |
-
#: includes/admin/class-settings.php:
|
4243 |
-
#: includes/admin/class-settings.php:
|
4244 |
#: includes/templates/class-subscribe.php:44
|
4245 |
#: includes/templates/class-suggestion.php:41
|
4246 |
#: includes/templates/class-contact.php:42
|
@@ -4250,257 +4224,257 @@ msgstr ""
|
|
4250 |
msgid "Email"
|
4251 |
msgstr ""
|
4252 |
|
4253 |
-
#: includes/admin/class-settings.php:
|
4254 |
-
#: includes/admin/class-settings.php:
|
4255 |
msgid "reCAPTCHA"
|
4256 |
msgstr ""
|
4257 |
|
4258 |
-
#: includes/admin/class-settings.php:
|
4259 |
msgid "Validation"
|
4260 |
msgstr ""
|
4261 |
|
4262 |
-
#: includes/admin/class-settings.php:
|
4263 |
-
#: includes/admin/class-settings.php:
|
4264 |
-
#: includes/admin/class-settings.php:
|
4265 |
msgid "Integrations"
|
4266 |
msgstr ""
|
4267 |
|
4268 |
-
#: includes/admin/class-settings.php:
|
4269 |
-
#: includes/admin/class-settings.php:
|
4270 |
msgid "Misc"
|
4271 |
msgstr ""
|
4272 |
|
4273 |
-
#: includes/admin/class-settings.php:
|
4274 |
msgid "reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease."
|
4275 |
msgstr ""
|
4276 |
|
4277 |
-
#: includes/admin/class-settings.php:
|
4278 |
msgid "Google offers 3 versions of reCAPTCHA (all supported within WPForms):"
|
4279 |
msgstr ""
|
4280 |
|
4281 |
-
#: includes/admin/class-settings.php:
|
4282 |
msgid "<strong>v2 Checkbox reCAPTCHA</strong>: Prompts users to check a box to prove they're human."
|
4283 |
msgstr ""
|
4284 |
|
4285 |
-
#: includes/admin/class-settings.php:
|
4286 |
msgid "<strong>v2 Invisible reCAPTCHA</strong>: Uses advanced technology to detect real users without requiring any input."
|
4287 |
msgstr ""
|
4288 |
|
4289 |
-
#: includes/admin/class-settings.php:
|
4290 |
msgid "<strong>v3 reCAPTCHA</strong>: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP)."
|
4291 |
msgstr ""
|
4292 |
|
4293 |
-
#: includes/admin/class-settings.php:
|
4294 |
msgid "Sites already using one type of reCAPTCHA will need to create new site keys before switching to a different option."
|
4295 |
msgstr ""
|
4296 |
|
4297 |
#. translators: %s - WPForms.com Setup Captcha URL.
|
4298 |
-
#: includes/admin/class-settings.php:
|
4299 |
msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our walk through</a> to learn more and for step-by-step directions."
|
4300 |
msgstr ""
|
4301 |
|
4302 |
-
#: includes/admin/class-settings.php:
|
4303 |
msgid "License"
|
4304 |
msgstr ""
|
4305 |
|
4306 |
-
#: includes/admin/class-settings.php:
|
4307 |
msgid "Your license key provides access to updates and addons."
|
4308 |
msgstr ""
|
4309 |
|
4310 |
-
#: includes/admin/class-settings.php:
|
4311 |
msgid "License Key"
|
4312 |
msgstr ""
|
4313 |
|
4314 |
-
#: includes/admin/class-settings.php:
|
4315 |
msgid "Include Form Styling"
|
4316 |
msgstr ""
|
4317 |
|
4318 |
#. translators: %s - WPForms.com documentation URL.
|
4319 |
-
#: includes/admin/class-settings.php:
|
4320 |
msgid "Determines which CSS files to load for the site (<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">please see our tutorial for full details</a>). Unless experienced with CSS or instructed by support, \"Base and Form Theme Styling\" is recommended."
|
4321 |
msgstr ""
|
4322 |
|
4323 |
-
#: includes/admin/class-settings.php:
|
4324 |
msgid "Base and form theme styling"
|
4325 |
msgstr ""
|
4326 |
|
4327 |
-
#: includes/admin/class-settings.php:
|
4328 |
msgid "Base styling only"
|
4329 |
msgstr ""
|
4330 |
|
4331 |
-
#: includes/admin/class-settings.php:
|
4332 |
msgid "No styling"
|
4333 |
msgstr ""
|
4334 |
|
4335 |
-
#: includes/admin/class-settings.php:
|
4336 |
msgid "Load Assets Globally"
|
4337 |
msgstr ""
|
4338 |
|
4339 |
-
#: includes/admin/class-settings.php:
|
4340 |
msgid "Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support."
|
4341 |
msgstr ""
|
4342 |
|
4343 |
-
#: includes/admin/class-settings.php:
|
4344 |
msgid "GDPR"
|
4345 |
msgstr ""
|
4346 |
|
4347 |
-
#: includes/admin/class-settings.php:
|
4348 |
msgid "GDPR Enhancements"
|
4349 |
msgstr ""
|
4350 |
|
4351 |
#. translators: %s - WPForms.com GDPR documentation URL.
|
4352 |
-
#: includes/admin/class-settings.php:
|
4353 |
msgid "Check this to turn on GDPR related features and enhancements. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our GDPR documentation</a> to learn more."
|
4354 |
msgstr ""
|
4355 |
|
4356 |
-
#: includes/admin/class-settings.php:
|
4357 |
msgid "Template"
|
4358 |
msgstr ""
|
4359 |
|
4360 |
-
#: includes/admin/class-settings.php:
|
4361 |
msgid "Determines how email notifications will be formatted. HTML Templates are the default."
|
4362 |
msgstr ""
|
4363 |
|
4364 |
-
#: includes/admin/class-settings.php:
|
4365 |
msgid "HTML Template"
|
4366 |
msgstr ""
|
4367 |
|
4368 |
-
#: includes/admin/class-settings.php:
|
4369 |
msgid "Plain text"
|
4370 |
msgstr ""
|
4371 |
|
4372 |
-
#: includes/admin/class-settings.php:
|
4373 |
msgid "Header Image"
|
4374 |
msgstr ""
|
4375 |
|
4376 |
-
#: includes/admin/class-settings.php:
|
4377 |
msgid "Upload or choose a logo to be displayed at the top of email notifications.<br>Recommended size is 300x100 or smaller for best support on all devices."
|
4378 |
msgstr ""
|
4379 |
|
4380 |
-
#: includes/admin/class-settings.php:
|
4381 |
msgid "Background Color"
|
4382 |
msgstr ""
|
4383 |
|
4384 |
-
#: includes/admin/class-settings.php:
|
4385 |
msgid "Customize the background color of the HTML email template."
|
4386 |
msgstr ""
|
4387 |
|
4388 |
-
#: includes/admin/class-settings.php:
|
4389 |
msgid "Carbon Copy"
|
4390 |
msgstr ""
|
4391 |
|
4392 |
-
#: includes/admin/class-settings.php:
|
4393 |
msgid "Check this if you would like to enable the ability to CC: email addresses in the form notification settings."
|
4394 |
msgstr ""
|
4395 |
|
4396 |
-
#: includes/admin/class-settings.php:
|
4397 |
msgid "Type"
|
4398 |
msgstr ""
|
4399 |
|
4400 |
-
#: includes/admin/class-settings.php:
|
4401 |
msgid "Checkbox reCAPTCHA v2"
|
4402 |
msgstr ""
|
4403 |
|
4404 |
-
#: includes/admin/class-settings.php:
|
4405 |
msgid "Invisible reCAPTCHA v2"
|
4406 |
msgstr ""
|
4407 |
|
4408 |
-
#: includes/admin/class-settings.php:
|
4409 |
msgid "reCAPTCHA v3"
|
4410 |
msgstr ""
|
4411 |
|
4412 |
-
#: includes/admin/class-settings.php:
|
4413 |
msgid "Site Key"
|
4414 |
msgstr ""
|
4415 |
|
4416 |
-
#: includes/admin/class-settings.php:
|
4417 |
msgid "Secret Key"
|
4418 |
msgstr ""
|
4419 |
|
4420 |
-
#: includes/admin/class-settings.php:
|
4421 |
msgid "Fail Message"
|
4422 |
msgstr ""
|
4423 |
|
4424 |
-
#: includes/admin/class-settings.php:
|
4425 |
msgid "The message displayed to users who fail the reCAPTCHA verification process."
|
4426 |
msgstr ""
|
4427 |
|
4428 |
-
#: includes/admin/class-settings.php:
|
4429 |
#: includes/class-process.php:176
|
4430 |
msgid "Google reCAPTCHA verification failed, please try again later."
|
4431 |
msgstr ""
|
4432 |
|
4433 |
-
#: includes/admin/class-settings.php:
|
4434 |
msgid "Score Threshold"
|
4435 |
msgstr ""
|
4436 |
|
4437 |
-
#: includes/admin/class-settings.php:
|
4438 |
msgid "reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). If the score less than or equal to this threshold, the form submission will be blocked and the message above will be displayed."
|
4439 |
msgstr ""
|
4440 |
|
4441 |
-
#: includes/admin/class-settings.php:
|
4442 |
msgid "0.4"
|
4443 |
msgstr ""
|
4444 |
|
4445 |
-
#: includes/admin/class-settings.php:
|
4446 |
msgid "No-Conflict Mode"
|
4447 |
msgstr ""
|
4448 |
|
4449 |
-
#: includes/admin/class-settings.php:
|
4450 |
msgid "When checked, other reCAPTCHA occurrences are forcefully removed, to prevent conflicts. Only check if your site is having compatibility issues or instructed to by support."
|
4451 |
msgstr ""
|
4452 |
|
4453 |
-
#: includes/admin/class-settings.php:
|
4454 |
msgid "Validation Messages"
|
4455 |
msgstr ""
|
4456 |
|
4457 |
-
#: includes/admin/class-settings.php:
|
4458 |
msgid "These messages are displayed to the users as they fill out a form in real-time."
|
4459 |
msgstr ""
|
4460 |
|
4461 |
-
#: includes/admin/class-settings.php:
|
4462 |
#: includes/fields/class-base.php:722
|
4463 |
msgid "Required"
|
4464 |
msgstr ""
|
4465 |
|
4466 |
-
#: includes/admin/class-settings.php:
|
4467 |
msgid "Website URL"
|
4468 |
msgstr ""
|
4469 |
|
4470 |
-
#: includes/admin/class-settings.php:
|
4471 |
msgid "Email Suggestion"
|
4472 |
msgstr ""
|
4473 |
|
4474 |
-
#: includes/admin/class-settings.php:
|
4475 |
msgid "Number"
|
4476 |
msgstr ""
|
4477 |
|
4478 |
-
#: includes/admin/class-settings.php:
|
4479 |
msgid "Confirm Value"
|
4480 |
msgstr ""
|
4481 |
|
4482 |
-
#: includes/admin/class-settings.php:
|
4483 |
msgid "Checkbox Selection Limit"
|
4484 |
msgstr ""
|
4485 |
|
4486 |
-
#: includes/admin/class-settings.php:
|
4487 |
-
#: includes/admin/class-settings.php:
|
4488 |
msgid "Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more."
|
4489 |
msgstr ""
|
4490 |
|
4491 |
-
#: includes/admin/class-settings.php:
|
4492 |
msgid "Hide Announcements"
|
4493 |
msgstr ""
|
4494 |
|
4495 |
-
#: includes/admin/class-settings.php:
|
4496 |
msgid "Check this if you would like to hide plugin announcements and update details."
|
4497 |
msgstr ""
|
4498 |
|
4499 |
-
#: includes/admin/class-settings.php:
|
4500 |
msgid "Uninstall WPForms"
|
4501 |
msgstr ""
|
4502 |
|
4503 |
-
#: includes/admin/class-settings.php:
|
4504 |
msgid "Check this if you would like to remove ALL WPForms data upon plugin deletion. All forms and settings will be unrecoverable."
|
4505 |
msgstr ""
|
4506 |
|
@@ -4645,43 +4619,6 @@ msgstr ""
|
|
4645 |
msgid "Lost Password URL"
|
4646 |
msgstr ""
|
4647 |
|
4648 |
-
#: includes/class-license.php:593
|
4649 |
-
msgid "Please enter a license key."
|
4650 |
-
msgstr ""
|
4651 |
-
|
4652 |
-
#: includes/class-license.php:627
|
4653 |
-
msgid "Sorry, you do not have permission to install plugins."
|
4654 |
-
msgstr ""
|
4655 |
-
|
4656 |
-
#: includes/class-license.php:633
|
4657 |
-
#: includes/class-license.php:787
|
4658 |
-
msgid "You are not licensed."
|
4659 |
-
msgstr ""
|
4660 |
-
|
4661 |
-
#: includes/class-license.php:636
|
4662 |
-
msgid "Only the Lite version can upgrade."
|
4663 |
-
msgstr ""
|
4664 |
-
|
4665 |
-
#: includes/class-license.php:646
|
4666 |
-
msgid "WPForms Pro was already installed and has not been activated."
|
4667 |
-
msgstr ""
|
4668 |
-
|
4669 |
-
#: includes/class-license.php:667
|
4670 |
-
msgid "We encountered a problem unlocking the PRO features. Please install the PRO version manually."
|
4671 |
-
msgstr ""
|
4672 |
-
|
4673 |
-
#: includes/class-license.php:723
|
4674 |
-
msgid "Could not install upgrade. Please download from wpforms.com and install manually."
|
4675 |
-
msgstr ""
|
4676 |
-
|
4677 |
-
#: includes/class-license.php:766
|
4678 |
-
msgid "Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually."
|
4679 |
-
msgstr ""
|
4680 |
-
|
4681 |
-
#: includes/class-license.php:819
|
4682 |
-
msgid "Pro version installed but needs to be activated from the Plugins page inside your WordPress admin."
|
4683 |
-
msgstr ""
|
4684 |
-
|
4685 |
#: includes/class-conditional-logic-core.php:193
|
4686 |
msgid "this field if"
|
4687 |
msgstr ""
|
@@ -4824,50 +4761,50 @@ msgstr ""
|
|
4824 |
msgid "Third Choice"
|
4825 |
msgstr ""
|
4826 |
|
4827 |
-
#: includes/fields/class-checkbox.php:
|
4828 |
msgid "Checked"
|
4829 |
msgstr ""
|
4830 |
|
4831 |
#. translators: %s - choice number.
|
4832 |
-
#: includes/fields/class-checkbox.php:
|
4833 |
msgid "Choice %s"
|
4834 |
msgstr ""
|
4835 |
|
4836 |
-
#: includes/fields/class-checkbox.php:
|
4837 |
-
#: includes/fields/class-radio.php:
|
4838 |
msgid "Randomize Choices"
|
4839 |
msgstr ""
|
4840 |
|
4841 |
-
#: includes/fields/class-checkbox.php:
|
4842 |
-
#: includes/fields/class-radio.php:
|
4843 |
msgid "Check this option to randomize the order of the choices."
|
4844 |
msgstr ""
|
4845 |
|
4846 |
-
#: includes/fields/class-checkbox.php:
|
4847 |
#: includes/fields/class-select.php:196
|
4848 |
-
#: includes/fields/class-radio.php:
|
4849 |
msgid "Show Values"
|
4850 |
msgstr ""
|
4851 |
|
4852 |
-
#: includes/fields/class-checkbox.php:
|
4853 |
#: includes/fields/class-select.php:197
|
4854 |
-
#: includes/fields/class-radio.php:
|
4855 |
msgid "Check this to manually set form field values."
|
4856 |
msgstr ""
|
4857 |
|
4858 |
-
#: includes/fields/class-checkbox.php:
|
4859 |
msgid "Choice Limit"
|
4860 |
msgstr ""
|
4861 |
|
4862 |
-
#: includes/fields/class-checkbox.php:
|
4863 |
msgid "Limit the number of checkboxes a user can select. Leave empty for unlimited."
|
4864 |
msgstr ""
|
4865 |
|
4866 |
-
#: includes/fields/class-checkbox.php:
|
4867 |
msgid "Enable Disclaimer / Terms of Service Display"
|
4868 |
msgstr ""
|
4869 |
|
4870 |
-
#: includes/fields/class-checkbox.php:
|
4871 |
msgid "Check this option to adjust the field styling to support Disclaimers and Terms of Service type agreements."
|
4872 |
msgstr ""
|
4873 |
|
@@ -5093,7 +5030,7 @@ msgstr ""
|
|
5093 |
msgid "I consent to having this website store my submitted information so they can respond to my inquiry."
|
5094 |
msgstr ""
|
5095 |
|
5096 |
-
#: includes/fields/class-gdpr-checkbox.php:
|
5097 |
msgid "Agreement"
|
5098 |
msgstr ""
|
5099 |
|
@@ -5323,17 +5260,17 @@ msgstr ""
|
|
5323 |
msgid "Hi there!"
|
5324 |
msgstr ""
|
5325 |
|
5326 |
-
#: wpforms.php:
|
5327 |
msgid "Please deactivate WPForms Lite before activating WPForms."
|
5328 |
msgstr ""
|
5329 |
|
5330 |
#. translators: %1$s - WPBeginner URL for recommended WordPress hosting.
|
5331 |
-
#: wpforms.php:
|
5332 |
msgid "Your site is running an <strong>insecure version</strong> of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">recommended WordPress hosting company</a>."
|
5333 |
msgstr ""
|
5334 |
|
5335 |
#. translators: %1$s - WPForms.com URL for documentation with more details.
|
5336 |
-
#: wpforms.php:
|
5337 |
msgid "<strong>Note:</strong> WPForms plugin is disabled on your site until you fix the issue. <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more for additional information.</a>"
|
5338 |
msgstr ""
|
5339 |
|
@@ -5403,210 +5340,257 @@ msgstr ""
|
|
5403 |
msgid "Added by %1$s on %2$s"
|
5404 |
msgstr ""
|
5405 |
|
5406 |
-
#: src/Lite/Admin/
|
5407 |
-
#: src/Lite/Admin/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5408 |
msgid "Show More"
|
5409 |
msgstr ""
|
5410 |
|
5411 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5412 |
msgid "Show Less"
|
5413 |
msgstr ""
|
5414 |
|
5415 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5416 |
msgid "Create Your First Form to Start Collecting Leads"
|
5417 |
msgstr ""
|
5418 |
|
5419 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5420 |
msgid "You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks."
|
5421 |
msgstr ""
|
5422 |
|
5423 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5424 |
msgid "Create Your Form"
|
5425 |
msgstr ""
|
5426 |
|
5427 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5428 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5429 |
msgid "Learn More"
|
5430 |
msgstr ""
|
5431 |
|
5432 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5433 |
msgid "Total Entries"
|
5434 |
msgstr ""
|
5435 |
|
5436 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5437 |
msgid "Last 7 days"
|
5438 |
msgstr ""
|
5439 |
|
5440 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5441 |
msgid "View all Form Entries inside WordPress Dashboard"
|
5442 |
msgstr ""
|
5443 |
|
5444 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5445 |
msgid "Form entries reports are not available."
|
5446 |
msgstr ""
|
5447 |
|
5448 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5449 |
msgid "Form entries are not stored in Lite."
|
5450 |
msgstr ""
|
5451 |
|
5452 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5453 |
msgid "Upgrade to Pro and get access to the reports."
|
5454 |
msgstr ""
|
5455 |
|
5456 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5457 |
msgid "Go to WPForms.com"
|
5458 |
msgstr ""
|
5459 |
|
5460 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5461 |
msgid "Total Entries by Form"
|
5462 |
msgstr ""
|
5463 |
|
5464 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5465 |
msgid "No entries were submitted yet."
|
5466 |
msgstr ""
|
5467 |
|
5468 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5469 |
msgid "Show all forms"
|
5470 |
msgstr ""
|
5471 |
|
5472 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5473 |
msgid "Recommended Plugin:"
|
5474 |
msgstr ""
|
5475 |
|
5476 |
-
#: src/Lite/Admin/DashboardWidget.php:
|
5477 |
msgid "Install"
|
5478 |
msgstr ""
|
5479 |
|
5480 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5481 |
-
msgid "is a PRO Feature"
|
5482 |
-
msgstr ""
|
5483 |
-
|
5484 |
-
#: src/Lite/Admin/Builder/Education.php:66
|
5485 |
-
msgid "We're sorry, the %name% is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features."
|
5486 |
-
msgstr ""
|
5487 |
-
|
5488 |
-
#: src/Lite/Admin/Builder/Education.php:69
|
5489 |
-
msgid "<strong>Bonus:</strong> WPForms Lite users get <span>50% off</span> regular price, automatically applied at checkout."
|
5490 |
-
msgstr ""
|
5491 |
-
|
5492 |
-
#: src/Lite/Admin/Builder/Education.php:111
|
5493 |
msgid "Request A Quote Form"
|
5494 |
msgstr ""
|
5495 |
|
5496 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5497 |
msgid "Start collecting leads with this pre-made Request a quote form. You can add and remove fields as needed."
|
5498 |
msgstr ""
|
5499 |
|
5500 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5501 |
msgid "Donation Form"
|
5502 |
msgstr ""
|
5503 |
|
5504 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5505 |
msgid "Start collecting donation payments on your website with this ready-made Donation form. You can add and remove fields as needed."
|
5506 |
msgstr ""
|
5507 |
|
5508 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5509 |
msgid "Billing / Order Form"
|
5510 |
msgstr ""
|
5511 |
|
5512 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5513 |
msgid "Collect payments for product and service orders with this ready-made form template. You can add and remove fields as needed."
|
5514 |
msgstr ""
|
5515 |
|
5516 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5517 |
msgid "Unlock Pre-Made Form Templates"
|
5518 |
msgstr ""
|
5519 |
|
5520 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5521 |
msgid "Upgrade"
|
5522 |
msgstr ""
|
5523 |
|
5524 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5525 |
msgid "While WPForms Lite allows you to create any type of form, you can speed up the process by unlocking our other pre-built form templates among other features, so you never have to start from scratch again..."
|
5526 |
msgstr ""
|
5527 |
|
5528 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5529 |
msgid "Phone"
|
5530 |
msgstr ""
|
5531 |
|
5532 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5533 |
msgid "Address"
|
5534 |
msgstr ""
|
5535 |
|
5536 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5537 |
msgid "Date / Time"
|
5538 |
msgstr ""
|
5539 |
|
5540 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5541 |
msgid "Website / URL"
|
5542 |
msgstr ""
|
5543 |
|
5544 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5545 |
msgid "File Upload"
|
5546 |
msgstr ""
|
5547 |
|
5548 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5549 |
msgid "Password"
|
5550 |
msgstr ""
|
5551 |
|
5552 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5553 |
msgid "Section Divider"
|
5554 |
msgstr ""
|
5555 |
|
5556 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5557 |
msgid "Hidden Field"
|
5558 |
msgstr ""
|
5559 |
|
5560 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5561 |
msgid "HTML"
|
5562 |
msgstr ""
|
5563 |
|
5564 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5565 |
msgid "Rating"
|
5566 |
msgstr ""
|
5567 |
|
5568 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5569 |
msgid "Captcha"
|
5570 |
msgstr ""
|
5571 |
|
5572 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5573 |
msgid "Signature"
|
5574 |
msgstr ""
|
5575 |
|
5576 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5577 |
msgid "Likert Scale"
|
5578 |
msgstr ""
|
5579 |
|
5580 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5581 |
msgid "Net Promoter Score"
|
5582 |
msgstr ""
|
5583 |
|
5584 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5585 |
msgid "Single Item"
|
5586 |
msgstr ""
|
5587 |
|
5588 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5589 |
msgid "Multiple Items"
|
5590 |
msgstr ""
|
5591 |
|
5592 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5593 |
msgid "Checkbox Items"
|
5594 |
msgstr ""
|
5595 |
|
5596 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5597 |
msgid "Dropdown Items"
|
5598 |
msgstr ""
|
5599 |
|
5600 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5601 |
msgid "Total"
|
5602 |
msgstr ""
|
5603 |
|
|
|
|
|
|
|
|
|
5604 |
#. translators: %s - addon name
|
5605 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5606 |
-
#: src/Lite/Admin/Builder/Education.php:
|
5607 |
msgid "%s addon"
|
5608 |
msgstr ""
|
5609 |
|
|
|
|
|
|
|
|
|
5610 |
#: src/Providers/Provider/Settings/PageIntegrations.php:235
|
5611 |
msgid "You do not have permissions."
|
5612 |
msgstr ""
|
@@ -5669,23 +5653,23 @@ msgstr ""
|
|
5669 |
msgid "You cannot send emails with WPForms\\Emails\\Mailer until init/admin_init has been reached."
|
5670 |
msgstr ""
|
5671 |
|
5672 |
-
#: src/Emails/Summaries.php:
|
5673 |
msgid "Disable Email Summaries weekly delivery."
|
5674 |
msgstr ""
|
5675 |
|
5676 |
-
#: src/Emails/Summaries.php:
|
5677 |
msgid "View Email Summary Example"
|
5678 |
msgstr ""
|
5679 |
|
5680 |
-
#: src/Emails/Summaries.php:
|
5681 |
msgid "Disable Email Summaries"
|
5682 |
msgstr ""
|
5683 |
|
5684 |
-
#: src/Emails/Summaries.php:
|
5685 |
msgid "Weekly WPForms Email Summaries"
|
5686 |
msgstr ""
|
5687 |
|
5688 |
-
#: src/Emails/Summaries.php:
|
5689 |
msgid "WPForms Summary"
|
5690 |
msgstr ""
|
5691 |
|
@@ -5857,13 +5841,49 @@ msgid "Show Description"
|
|
5857 |
msgstr ""
|
5858 |
|
5859 |
#: src/Integrations/Gutenberg/FormSelector.php:107
|
5860 |
-
msgid "
|
5861 |
msgstr ""
|
5862 |
|
5863 |
#: src/Integrations/Gutenberg/FormSelector.php:108
|
5864 |
msgid "Check out our complete guide!"
|
5865 |
msgstr ""
|
5866 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5867 |
#. translators: %s - URL WP Mail SMTP settings.
|
5868 |
#: src/Integrations/WPMailSMTP/Notifications.php:78
|
5869 |
msgid "This setting is disabled because you have the \"Force From Name\" setting enabled in <a href=\"%s\" rel=\"noopener noreferrer\" target=\"_blank\">WP Mail SMTP</a>."
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
+
"Project-Id-Version: WPForms Lite 1.5.5\n"
|
4 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms-lite\n"
|
5 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
6 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
7 |
"MIME-Version: 1.0\n"
|
8 |
"Content-Type: text/plain; charset=UTF-8\n"
|
9 |
"Content-Transfer-Encoding: 8bit\n"
|
10 |
+
"POT-Creation-Date: 2019-08-28T14:43:28+00:00\n"
|
11 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
12 |
"X-Generator: WP-CLI 2.1.0\n"
|
13 |
"X-Domain: wpforms-lite\n"
|
20 |
#: includes/admin/class-menu.php:109
|
21 |
#: includes/integrations.php:45
|
22 |
#: includes/class-form.php:74
|
23 |
+
#: src/Lite/Admin/DashboardWidget.php:173
|
24 |
#: src/Emails/Templates/General.php:97
|
25 |
#: src/Integrations/Gutenberg/FormSelector.php:94
|
26 |
msgid "WPForms"
|
1607 |
msgid "Saturday"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
+
#: includes/functions.php:1706
|
1611 |
#: includes/class-frontend.php:1291
|
1612 |
+
#: includes/admin/class-settings.php:474
|
1613 |
msgid "This field is required."
|
1614 |
msgstr ""
|
1615 |
|
1653 |
msgid "Display form description"
|
1654 |
msgstr ""
|
1655 |
|
|
|
|
|
|
|
|
|
1656 |
#. translators: %s - URL to a non-amp version of a page with the form.
|
1657 |
#: includes/class-frontend.php:161
|
1658 |
msgid "<a href=\"%s\">Go to the full page</a> to view and submit the form."
|
1659 |
msgstr ""
|
1660 |
|
1661 |
#: includes/class-frontend.php:1292
|
1662 |
+
#: includes/admin/class-settings.php:480
|
1663 |
msgid "Please enter a valid URL."
|
1664 |
msgstr ""
|
1665 |
|
1666 |
#: includes/class-frontend.php:1293
|
1667 |
+
#: includes/admin/class-settings.php:486
|
1668 |
msgid "Please enter a valid email address."
|
1669 |
msgstr ""
|
1670 |
|
1671 |
#: includes/class-frontend.php:1294
|
1672 |
+
#: includes/admin/class-settings.php:492
|
1673 |
msgid "Did you mean {suggestion}?"
|
1674 |
msgstr ""
|
1675 |
|
1678 |
msgstr ""
|
1679 |
|
1680 |
#: includes/class-frontend.php:1296
|
1681 |
+
#: includes/admin/class-settings.php:498
|
1682 |
#: includes/fields/class-number.php:162
|
1683 |
msgid "Please enter a valid number."
|
1684 |
msgstr ""
|
1685 |
|
1686 |
#: includes/class-frontend.php:1297
|
1687 |
+
#: includes/admin/class-settings.php:504
|
1688 |
msgid "Field values do not match."
|
1689 |
msgstr ""
|
1690 |
|
1722 |
msgstr ""
|
1723 |
|
1724 |
#: includes/class-frontend.php:1306
|
1725 |
+
#: includes/admin/class-settings.php:510
|
1726 |
+
#: includes/fields/class-checkbox.php:593
|
1727 |
msgid "You have exceeded the number of allowed selections: {#}."
|
1728 |
msgstr ""
|
1729 |
|
1900 |
msgstr ""
|
1901 |
|
1902 |
#: includes/providers/class-constant-contact.php:511
|
1903 |
+
#: includes/admin/settings-api.php:141
|
1904 |
msgid "Connect"
|
1905 |
msgstr ""
|
1906 |
|
2065 |
msgstr ""
|
2066 |
|
2067 |
#: includes/emails/class-emails.php:492
|
2068 |
+
#: src/Lite/Admin/Builder/Education.php:219
|
2069 |
msgid "Page Break"
|
2070 |
msgstr ""
|
2071 |
|
2192 |
|
2193 |
#: includes/admin/class-about.php:321
|
2194 |
#: includes/admin/admin.php:121
|
2195 |
+
#: includes/admin/admin.php:154
|
2196 |
msgid "Activate"
|
2197 |
msgstr ""
|
2198 |
|
2349 |
msgstr ""
|
2350 |
|
2351 |
#: includes/admin/class-about.php:754
|
2352 |
+
#: src/Lite/Admin/DashboardWidget.php:375
|
2353 |
msgid "MonsterInsights"
|
2354 |
msgstr ""
|
2355 |
|
2376 |
|
2377 |
#: includes/admin/class-about.php:777
|
2378 |
#: includes/admin/class-about.php:783
|
2379 |
+
msgid "Make sure your website's emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites."
|
2380 |
msgstr ""
|
2381 |
|
2382 |
#: includes/admin/class-about.php:782
|
2650 |
msgid "The callback function used for the %s setting is missing."
|
2651 |
msgstr ""
|
2652 |
|
2653 |
+
#: includes/admin/settings-api.php:107
|
2654 |
msgid "You're using WPForms Lite - no license needed. Enjoy!"
|
2655 |
msgstr ""
|
2656 |
|
2657 |
#. translators: %s - WPForms.com upgrade URL.
|
2658 |
+
#: includes/admin/settings-api.php:113
|
2659 |
msgid "To unlock more features consider <strong><a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wpforms-upgrade-modal\">upgrading to PRO</a></strong>."
|
2660 |
msgstr ""
|
2661 |
|
2662 |
+
#: includes/admin/settings-api.php:130
|
2663 |
msgid "As a valued WPForms Lite user you receive <strong>50% off</strong>, automatically applied at checkout!"
|
2664 |
msgstr ""
|
2665 |
|
2666 |
+
#: includes/admin/settings-api.php:138
|
2667 |
+
msgid "Already purchased? Simply enter your license key below to connect with WPForms PRO!"
|
2668 |
msgstr ""
|
2669 |
|
2670 |
+
#: includes/admin/settings-api.php:140
|
2671 |
msgid "Paste license key here"
|
2672 |
msgstr ""
|
2673 |
|
2674 |
+
#: includes/admin/settings-api.php:151
|
|
|
|
|
|
|
|
|
2675 |
msgid "Verify Key"
|
2676 |
msgstr ""
|
2677 |
|
2678 |
+
#: includes/admin/settings-api.php:155
|
2679 |
msgid "Deactivate Key"
|
2680 |
msgstr ""
|
2681 |
|
2682 |
#. translators: $s - license type.
|
2683 |
+
#: includes/admin/settings-api.php:162
|
2684 |
msgid "Your license key type is %s."
|
2685 |
msgstr ""
|
2686 |
|
2687 |
+
#: includes/admin/settings-api.php:168
|
2688 |
msgid "If your license has been upgraded or is incorrect, <a href=\"#\" id=\"wpforms-setting-license-key-refresh\">click here to force a refresh</a>."
|
2689 |
msgstr ""
|
2690 |
|
2691 |
+
#: includes/admin/settings-api.php:359
|
2692 |
#: includes/fields/class-base.php:825
|
2693 |
#: includes/fields/class-base.php:956
|
2694 |
msgid "Upload Image"
|
2771 |
msgstr ""
|
2772 |
|
2773 |
#: includes/admin/ajax-actions.php:549
|
2774 |
+
#: src/Lite/Admin/Connect.php:207
|
2775 |
+
#: src/Lite/Admin/Connect.php:215
|
2776 |
+
#: src/Lite/Admin/Connect.php:270
|
2777 |
msgid "Plugin installed & activated."
|
2778 |
msgstr ""
|
2779 |
|
2797 |
msgstr ""
|
2798 |
|
2799 |
#: includes/admin/class-tools.php:99
|
2800 |
+
#: includes/admin/class-tools.php:542
|
2801 |
msgid "Export"
|
2802 |
msgstr ""
|
2803 |
|
2897 |
|
2898 |
#: includes/admin/class-tools.php:381
|
2899 |
#: includes/admin/class-welcome.php:309
|
2900 |
+
#: src/Lite/Admin/DashboardWidget.php:272
|
2901 |
msgid "Upgrade to WPForms Pro"
|
2902 |
msgstr ""
|
2903 |
|
2941 |
msgid "The following fields are not supported and were not imported:"
|
2942 |
msgstr ""
|
2943 |
|
2944 |
+
#: includes/admin/class-tools.php:521
|
2945 |
msgid "Form Export"
|
2946 |
msgstr ""
|
2947 |
|
2948 |
+
#: includes/admin/class-tools.php:523
|
2949 |
msgid "Form exports files can be used to create a backup of your forms or to import forms into another site."
|
2950 |
msgstr ""
|
2951 |
|
2952 |
+
#: includes/admin/class-tools.php:529
|
2953 |
msgid "Select form(s)"
|
2954 |
msgstr ""
|
2955 |
|
2956 |
+
#: includes/admin/class-tools.php:536
|
2957 |
msgid "You need to create a form before you can use form export."
|
2958 |
msgstr ""
|
2959 |
|
2960 |
+
#: includes/admin/class-tools.php:548
|
2961 |
msgid "Form Template Export"
|
2962 |
msgstr ""
|
2963 |
|
2964 |
+
#: includes/admin/class-tools.php:552
|
2965 |
msgid "The following code can be used to register your custom form template. Copy and paste the following code to your theme's functions.php file or include it within an external file."
|
2966 |
msgstr ""
|
2967 |
|
2968 |
#. translators: %s - WPForms.com docs URL.
|
2969 |
+
#: includes/admin/class-tools.php:557
|
2970 |
msgid "For more information <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">see our documentation</a>."
|
2971 |
msgstr ""
|
2972 |
|
2973 |
+
#: includes/admin/class-tools.php:573
|
2974 |
msgid "Select a form to generate PHP code that can be used to register a custom form template."
|
2975 |
msgstr ""
|
2976 |
|
2977 |
+
#: includes/admin/class-tools.php:586
|
2978 |
msgid "You need to create a form before you can generate a template."
|
2979 |
msgstr ""
|
2980 |
|
2981 |
+
#: includes/admin/class-tools.php:592
|
2982 |
msgid "Export Template"
|
2983 |
msgstr ""
|
2984 |
|
2985 |
+
#: includes/admin/class-tools.php:612
|
2986 |
msgid "System Information"
|
2987 |
msgstr ""
|
2988 |
|
2989 |
+
#: includes/admin/class-tools.php:617
|
2990 |
msgid "Test SSL Connections"
|
2991 |
msgstr ""
|
2992 |
|
2993 |
+
#: includes/admin/class-tools.php:618
|
2994 |
msgid "Click the button below to verify your web server can perform SSL connections successfully."
|
2995 |
msgstr ""
|
2996 |
|
2997 |
+
#: includes/admin/class-tools.php:619
|
2998 |
msgid "Test Connection"
|
2999 |
msgstr ""
|
3000 |
|
3001 |
+
#: includes/admin/class-tools.php:689
|
3002 |
msgid "Please upload a valid .json form export file."
|
3003 |
msgstr ""
|
3004 |
|
3005 |
+
#: includes/admin/class-tools.php:690
|
3006 |
msgid "Error"
|
3007 |
msgstr ""
|
3008 |
|
3023 |
#: includes/admin/overview/class-overview-table.php:172
|
3024 |
#: templates/emails/summary-body.php:42
|
3025 |
#: templates/emails/summary-body-plain.php:34
|
3026 |
+
#: src/Lite/Admin/DashboardWidget.php:154
|
3027 |
msgid "Entries"
|
3028 |
msgstr ""
|
3029 |
|
3111 |
|
3112 |
#: includes/admin/class-welcome.php:114
|
3113 |
#: includes/admin/builder/class-builder.php:513
|
3114 |
+
#: src/Lite/Admin/DashboardWidget.php:227
|
3115 |
#: src/Admin/Challenge.php:506
|
3116 |
msgid "Sullie the WPForms mascot"
|
3117 |
msgstr ""
|
3224 |
|
3225 |
#: includes/admin/class-welcome.php:237
|
3226 |
#: includes/admin/builder/panels/class-payments.php:82
|
3227 |
+
#: src/Lite/Admin/Settings/Education.php:70
|
3228 |
+
#: src/Lite/Admin/Builder/Education.php:79
|
3229 |
msgid "Upgrade to PRO"
|
3230 |
msgstr ""
|
3231 |
|
3368 |
msgstr ""
|
3369 |
|
3370 |
#: includes/admin/admin.php:149
|
3371 |
+
msgid "Almost Done"
|
3372 |
+
msgstr ""
|
3373 |
+
|
3374 |
+
#: includes/admin/admin.php:150
|
3375 |
+
msgid "Oops!"
|
3376 |
+
msgstr ""
|
3377 |
+
|
3378 |
+
#: includes/admin/admin.php:151
|
3379 |
#: includes/admin/builder/class-builder.php:337
|
3380 |
msgid "OK"
|
3381 |
msgstr ""
|
3382 |
|
3383 |
+
#: includes/admin/admin.php:152
|
3384 |
msgid "Install and Activate"
|
3385 |
msgstr ""
|
3386 |
|
3387 |
+
#: includes/admin/admin.php:153
|
3388 |
msgid "needs to be installed and activated to import its forms. Would you like us to install and activate it for you?"
|
3389 |
msgstr ""
|
3390 |
|
3391 |
+
#: includes/admin/admin.php:155
|
3392 |
msgid "needs to be activated to import its forms. Would you like us to activate it for you?"
|
3393 |
msgstr ""
|
3394 |
|
3395 |
+
#: includes/admin/admin.php:156
|
3396 |
msgid "Are you sure you want to disconnect this account?"
|
3397 |
msgstr ""
|
3398 |
|
3399 |
+
#: includes/admin/admin.php:157
|
3400 |
msgid "Could not authenticate with the provider."
|
3401 |
msgstr ""
|
3402 |
|
3403 |
+
#: includes/admin/admin.php:158
|
3404 |
msgid "Save and Refresh"
|
3405 |
msgstr ""
|
3406 |
|
3407 |
+
#: includes/admin/admin.php:159
|
3408 |
+
msgid "Unfortunately, there was an server connection error."
|
3409 |
+
msgstr ""
|
3410 |
+
|
3411 |
#. translators: %s - WPForms.com docs page URL.
|
3412 |
+
#: includes/admin/admin.php:163
|
3413 |
msgid "You've selected <strong>Base Styling Only</strong>, which may result in styling issues. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for common issues and recommendations."
|
3414 |
msgstr ""
|
3415 |
|
3416 |
#. translators: %s - WPForms.com docs page URL.
|
3417 |
+
#: includes/admin/admin.php:178
|
3418 |
msgid "You've selected <strong>No Styling</strong>, which will likely result in significant styling issues and is recommended only for developers. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for more details and recommendations."
|
3419 |
msgstr ""
|
3420 |
|
3421 |
+
#: includes/admin/admin.php:190
|
3422 |
msgid "Testing"
|
3423 |
msgstr ""
|
3424 |
|
3425 |
+
#: includes/admin/admin.php:191
|
3426 |
msgid "Upgrade was successfully completed!"
|
3427 |
msgstr ""
|
3428 |
|
3429 |
+
#: includes/admin/admin.php:192
|
3430 |
#: includes/admin/builder/class-builder.php:414
|
3431 |
msgid "Upload or Choose Your Image"
|
3432 |
msgstr ""
|
3433 |
|
3434 |
+
#: includes/admin/admin.php:193
|
3435 |
#: includes/admin/builder/class-builder.php:415
|
3436 |
msgid "Use Image"
|
3437 |
msgstr ""
|
3438 |
|
3439 |
+
#: includes/admin/admin.php:195
|
3440 |
msgid "Select fields"
|
3441 |
msgstr ""
|
3442 |
|
3443 |
+
#: includes/admin/admin.php:196
|
3444 |
msgid "Loading..."
|
3445 |
msgstr ""
|
3446 |
|
3447 |
+
#: includes/admin/admin.php:197
|
3448 |
msgid "No results found"
|
3449 |
msgstr ""
|
3450 |
|
3451 |
+
#: includes/admin/admin.php:198
|
3452 |
msgid "No choices to choose from"
|
3453 |
msgstr ""
|
3454 |
|
3455 |
+
#: includes/admin/admin.php:199
|
3456 |
msgid "Press to select"
|
3457 |
msgstr ""
|
3458 |
|
3459 |
#. translators: %1$s - WPForms plugin name; %2$s - WPForms.com URL to a related doc.
|
3460 |
+
#: includes/admin/admin.php:371
|
3461 |
msgid "Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more</a> for additional information."
|
3462 |
msgstr ""
|
3463 |
|
3464 |
+
#: includes/admin/admin.php:385
|
3465 |
msgid "<strong>Please Note:</strong> Support for PHP 5.3 to 5.5 will be discontinued in 2019. After this, if no further action is taken, WPForms functionality will be disabled."
|
3466 |
msgstr ""
|
3467 |
|
3468 |
+
#: includes/admin/admin.php:407
|
3469 |
msgid "Thanks for your interest in WPForms Pro!"
|
3470 |
msgstr ""
|
3471 |
|
3472 |
#. translators: %s - WPForms.com contact page URL.
|
3473 |
+
#: includes/admin/admin.php:411
|
3474 |
msgid "If you have any questions or issues just <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">let us know</a>."
|
3475 |
msgstr ""
|
3476 |
|
3477 |
+
#: includes/admin/admin.php:425
|
3478 |
msgid "After purchasing WPForms Pro, you'll need to <strong>download and install the Pro version of the plugin</strong>, and then <strong>remove the free plugin</strong>."
|
3479 |
msgstr ""
|
3480 |
|
3481 |
+
#: includes/admin/admin.php:430
|
3482 |
msgid "(Don't worry, all your forms and settings will be preserved.)"
|
3483 |
msgstr ""
|
3484 |
|
3485 |
#. translators: %s - WPForms.com upgrade from Lite to paid docs page URL.
|
3486 |
+
#: includes/admin/admin.php:436
|
3487 |
msgid "Check out <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">our documentation</a> for step-by-step instructions."
|
3488 |
msgstr ""
|
3489 |
|
3600 |
|
3601 |
#. translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates.
|
3602 |
#: includes/admin/builder/panels/class-setup.php:93
|
3603 |
+
msgid "Have a suggestion for a new template? <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">We'd love to hear it</a>. Also, you can <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">create your own templates</a>!"
|
3604 |
msgstr ""
|
3605 |
|
3606 |
#: includes/admin/builder/panels/class-setup.php:110
|
3732 |
|
3733 |
#: includes/admin/builder/panels/class-settings.php:42
|
3734 |
#: includes/admin/builder/panels/class-settings.php:82
|
3735 |
+
#: includes/admin/class-settings.php:168
|
3736 |
+
#: includes/admin/class-settings.php:301
|
3737 |
msgid "General"
|
3738 |
msgstr ""
|
3739 |
|
4204 |
msgid "Settings were successfully saved."
|
4205 |
msgstr ""
|
4206 |
|
4207 |
+
#: includes/admin/class-settings.php:170
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4208 |
#: includes/admin/class-settings.php:175
|
4209 |
+
#: includes/admin/class-settings.php:180
|
4210 |
+
#: includes/admin/class-settings.php:185
|
4211 |
+
#: includes/admin/class-settings.php:195
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4212 |
msgid "Save Settings"
|
4213 |
msgstr ""
|
4214 |
|
4215 |
+
#: includes/admin/class-settings.php:173
|
4216 |
+
#: includes/admin/class-settings.php:369
|
4217 |
+
#: includes/admin/class-settings.php:484
|
4218 |
#: includes/templates/class-subscribe.php:44
|
4219 |
#: includes/templates/class-suggestion.php:41
|
4220 |
#: includes/templates/class-contact.php:42
|
4224 |
msgid "Email"
|
4225 |
msgstr ""
|
4226 |
|
4227 |
+
#: includes/admin/class-settings.php:178
|
4228 |
+
#: includes/admin/class-settings.php:409
|
4229 |
msgid "reCAPTCHA"
|
4230 |
msgstr ""
|
4231 |
|
4232 |
+
#: includes/admin/class-settings.php:183
|
4233 |
msgid "Validation"
|
4234 |
msgstr ""
|
4235 |
|
4236 |
+
#: includes/admin/class-settings.php:188
|
4237 |
+
#: includes/admin/class-settings.php:517
|
4238 |
+
#: includes/admin/class-settings.php:524
|
4239 |
msgid "Integrations"
|
4240 |
msgstr ""
|
4241 |
|
4242 |
+
#: includes/admin/class-settings.php:193
|
4243 |
+
#: includes/admin/class-settings.php:533
|
4244 |
msgid "Misc"
|
4245 |
msgstr ""
|
4246 |
|
4247 |
+
#: includes/admin/class-settings.php:234
|
4248 |
msgid "reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease."
|
4249 |
msgstr ""
|
4250 |
|
4251 |
+
#: includes/admin/class-settings.php:235
|
4252 |
msgid "Google offers 3 versions of reCAPTCHA (all supported within WPForms):"
|
4253 |
msgstr ""
|
4254 |
|
4255 |
+
#: includes/admin/class-settings.php:240
|
4256 |
msgid "<strong>v2 Checkbox reCAPTCHA</strong>: Prompts users to check a box to prove they're human."
|
4257 |
msgstr ""
|
4258 |
|
4259 |
+
#: includes/admin/class-settings.php:249
|
4260 |
msgid "<strong>v2 Invisible reCAPTCHA</strong>: Uses advanced technology to detect real users without requiring any input."
|
4261 |
msgstr ""
|
4262 |
|
4263 |
+
#: includes/admin/class-settings.php:258
|
4264 |
msgid "<strong>v3 reCAPTCHA</strong>: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP)."
|
4265 |
msgstr ""
|
4266 |
|
4267 |
+
#: includes/admin/class-settings.php:265
|
4268 |
msgid "Sites already using one type of reCAPTCHA will need to create new site keys before switching to a different option."
|
4269 |
msgstr ""
|
4270 |
|
4271 |
#. translators: %s - WPForms.com Setup Captcha URL.
|
4272 |
+
#: includes/admin/class-settings.php:271
|
4273 |
msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our walk through</a> to learn more and for step-by-step directions."
|
4274 |
msgstr ""
|
4275 |
|
4276 |
+
#: includes/admin/class-settings.php:289
|
4277 |
msgid "License"
|
4278 |
msgstr ""
|
4279 |
|
4280 |
+
#: includes/admin/class-settings.php:289
|
4281 |
msgid "Your license key provides access to updates and addons."
|
4282 |
msgstr ""
|
4283 |
|
4284 |
+
#: includes/admin/class-settings.php:296
|
4285 |
msgid "License Key"
|
4286 |
msgstr ""
|
4287 |
|
4288 |
+
#: includes/admin/class-settings.php:308
|
4289 |
msgid "Include Form Styling"
|
4290 |
msgstr ""
|
4291 |
|
4292 |
#. translators: %s - WPForms.com documentation URL.
|
4293 |
+
#: includes/admin/class-settings.php:312
|
4294 |
msgid "Determines which CSS files to load for the site (<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">please see our tutorial for full details</a>). Unless experienced with CSS or instructed by support, \"Base and Form Theme Styling\" is recommended."
|
4295 |
msgstr ""
|
4296 |
|
4297 |
+
#: includes/admin/class-settings.php:327
|
4298 |
msgid "Base and form theme styling"
|
4299 |
msgstr ""
|
4300 |
|
4301 |
+
#: includes/admin/class-settings.php:328
|
4302 |
msgid "Base styling only"
|
4303 |
msgstr ""
|
4304 |
|
4305 |
+
#: includes/admin/class-settings.php:329
|
4306 |
msgid "No styling"
|
4307 |
msgstr ""
|
4308 |
|
4309 |
+
#: includes/admin/class-settings.php:334
|
4310 |
msgid "Load Assets Globally"
|
4311 |
msgstr ""
|
4312 |
|
4313 |
+
#: includes/admin/class-settings.php:335
|
4314 |
msgid "Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support."
|
4315 |
msgstr ""
|
4316 |
|
4317 |
+
#: includes/admin/class-settings.php:340
|
4318 |
msgid "GDPR"
|
4319 |
msgstr ""
|
4320 |
|
4321 |
+
#: includes/admin/class-settings.php:347
|
4322 |
msgid "GDPR Enhancements"
|
4323 |
msgstr ""
|
4324 |
|
4325 |
#. translators: %s - WPForms.com GDPR documentation URL.
|
4326 |
+
#: includes/admin/class-settings.php:351
|
4327 |
msgid "Check this to turn on GDPR related features and enhancements. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our GDPR documentation</a> to learn more."
|
4328 |
msgstr ""
|
4329 |
|
4330 |
+
#: includes/admin/class-settings.php:376
|
4331 |
msgid "Template"
|
4332 |
msgstr ""
|
4333 |
|
4334 |
+
#: includes/admin/class-settings.php:377
|
4335 |
msgid "Determines how email notifications will be formatted. HTML Templates are the default."
|
4336 |
msgstr ""
|
4337 |
|
4338 |
+
#: includes/admin/class-settings.php:381
|
4339 |
msgid "HTML Template"
|
4340 |
msgstr ""
|
4341 |
|
4342 |
+
#: includes/admin/class-settings.php:382
|
4343 |
msgid "Plain text"
|
4344 |
msgstr ""
|
4345 |
|
4346 |
+
#: includes/admin/class-settings.php:387
|
4347 |
msgid "Header Image"
|
4348 |
msgstr ""
|
4349 |
|
4350 |
+
#: includes/admin/class-settings.php:388
|
4351 |
msgid "Upload or choose a logo to be displayed at the top of email notifications.<br>Recommended size is 300x100 or smaller for best support on all devices."
|
4352 |
msgstr ""
|
4353 |
|
4354 |
+
#: includes/admin/class-settings.php:393
|
4355 |
msgid "Background Color"
|
4356 |
msgstr ""
|
4357 |
|
4358 |
+
#: includes/admin/class-settings.php:394
|
4359 |
msgid "Customize the background color of the HTML email template."
|
4360 |
msgstr ""
|
4361 |
|
4362 |
+
#: includes/admin/class-settings.php:400
|
4363 |
msgid "Carbon Copy"
|
4364 |
msgstr ""
|
4365 |
|
4366 |
+
#: includes/admin/class-settings.php:401
|
4367 |
msgid "Check this if you would like to enable the ability to CC: email addresses in the form notification settings."
|
4368 |
msgstr ""
|
4369 |
|
4370 |
+
#: includes/admin/class-settings.php:416
|
4371 |
msgid "Type"
|
4372 |
msgstr ""
|
4373 |
|
4374 |
+
#: includes/admin/class-settings.php:420
|
4375 |
msgid "Checkbox reCAPTCHA v2"
|
4376 |
msgstr ""
|
4377 |
|
4378 |
+
#: includes/admin/class-settings.php:421
|
4379 |
msgid "Invisible reCAPTCHA v2"
|
4380 |
msgstr ""
|
4381 |
|
4382 |
+
#: includes/admin/class-settings.php:422
|
4383 |
msgid "reCAPTCHA v3"
|
4384 |
msgstr ""
|
4385 |
|
4386 |
+
#: includes/admin/class-settings.php:427
|
4387 |
msgid "Site Key"
|
4388 |
msgstr ""
|
4389 |
|
4390 |
+
#: includes/admin/class-settings.php:432
|
4391 |
msgid "Secret Key"
|
4392 |
msgstr ""
|
4393 |
|
4394 |
+
#: includes/admin/class-settings.php:437
|
4395 |
msgid "Fail Message"
|
4396 |
msgstr ""
|
4397 |
|
4398 |
+
#: includes/admin/class-settings.php:438
|
4399 |
msgid "The message displayed to users who fail the reCAPTCHA verification process."
|
4400 |
msgstr ""
|
4401 |
|
4402 |
+
#: includes/admin/class-settings.php:440
|
4403 |
#: includes/class-process.php:176
|
4404 |
msgid "Google reCAPTCHA verification failed, please try again later."
|
4405 |
msgstr ""
|
4406 |
|
4407 |
+
#: includes/admin/class-settings.php:444
|
4408 |
msgid "Score Threshold"
|
4409 |
msgstr ""
|
4410 |
|
4411 |
+
#: includes/admin/class-settings.php:445
|
4412 |
msgid "reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). If the score less than or equal to this threshold, the form submission will be blocked and the message above will be displayed."
|
4413 |
msgstr ""
|
4414 |
|
4415 |
+
#: includes/admin/class-settings.php:452
|
4416 |
msgid "0.4"
|
4417 |
msgstr ""
|
4418 |
|
4419 |
+
#: includes/admin/class-settings.php:456
|
4420 |
msgid "No-Conflict Mode"
|
4421 |
msgstr ""
|
4422 |
|
4423 |
+
#: includes/admin/class-settings.php:457
|
4424 |
msgid "When checked, other reCAPTCHA occurrences are forcefully removed, to prevent conflicts. Only check if your site is having compatibility issues or instructed to by support."
|
4425 |
msgstr ""
|
4426 |
|
4427 |
+
#: includes/admin/class-settings.php:465
|
4428 |
msgid "Validation Messages"
|
4429 |
msgstr ""
|
4430 |
|
4431 |
+
#: includes/admin/class-settings.php:465
|
4432 |
msgid "These messages are displayed to the users as they fill out a form in real-time."
|
4433 |
msgstr ""
|
4434 |
|
4435 |
+
#: includes/admin/class-settings.php:472
|
4436 |
#: includes/fields/class-base.php:722
|
4437 |
msgid "Required"
|
4438 |
msgstr ""
|
4439 |
|
4440 |
+
#: includes/admin/class-settings.php:478
|
4441 |
msgid "Website URL"
|
4442 |
msgstr ""
|
4443 |
|
4444 |
+
#: includes/admin/class-settings.php:490
|
4445 |
msgid "Email Suggestion"
|
4446 |
msgstr ""
|
4447 |
|
4448 |
+
#: includes/admin/class-settings.php:496
|
4449 |
msgid "Number"
|
4450 |
msgstr ""
|
4451 |
|
4452 |
+
#: includes/admin/class-settings.php:502
|
4453 |
msgid "Confirm Value"
|
4454 |
msgstr ""
|
4455 |
|
4456 |
+
#: includes/admin/class-settings.php:508
|
4457 |
msgid "Checkbox Selection Limit"
|
4458 |
msgstr ""
|
4459 |
|
4460 |
+
#: includes/admin/class-settings.php:517
|
4461 |
+
#: includes/admin/class-settings.php:524
|
4462 |
msgid "Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more."
|
4463 |
msgstr ""
|
4464 |
|
4465 |
+
#: includes/admin/class-settings.php:540
|
4466 |
msgid "Hide Announcements"
|
4467 |
msgstr ""
|
4468 |
|
4469 |
+
#: includes/admin/class-settings.php:541
|
4470 |
msgid "Check this if you would like to hide plugin announcements and update details."
|
4471 |
msgstr ""
|
4472 |
|
4473 |
+
#: includes/admin/class-settings.php:546
|
4474 |
msgid "Uninstall WPForms"
|
4475 |
msgstr ""
|
4476 |
|
4477 |
+
#: includes/admin/class-settings.php:547
|
4478 |
msgid "Check this if you would like to remove ALL WPForms data upon plugin deletion. All forms and settings will be unrecoverable."
|
4479 |
msgstr ""
|
4480 |
|
4619 |
msgid "Lost Password URL"
|
4620 |
msgstr ""
|
4621 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4622 |
#: includes/class-conditional-logic-core.php:193
|
4623 |
msgid "this field if"
|
4624 |
msgstr ""
|
4761 |
msgid "Third Choice"
|
4762 |
msgstr ""
|
4763 |
|
4764 |
+
#: includes/fields/class-checkbox.php:152
|
4765 |
msgid "Checked"
|
4766 |
msgstr ""
|
4767 |
|
4768 |
#. translators: %s - choice number.
|
4769 |
+
#: includes/fields/class-checkbox.php:155
|
4770 |
msgid "Choice %s"
|
4771 |
msgstr ""
|
4772 |
|
4773 |
+
#: includes/fields/class-checkbox.php:300
|
4774 |
+
#: includes/fields/class-radio.php:261
|
4775 |
msgid "Randomize Choices"
|
4776 |
msgstr ""
|
4777 |
|
4778 |
+
#: includes/fields/class-checkbox.php:301
|
4779 |
+
#: includes/fields/class-radio.php:262
|
4780 |
msgid "Check this option to randomize the order of the choices."
|
4781 |
msgstr ""
|
4782 |
|
4783 |
+
#: includes/fields/class-checkbox.php:322
|
4784 |
#: includes/fields/class-select.php:196
|
4785 |
+
#: includes/fields/class-radio.php:283
|
4786 |
msgid "Show Values"
|
4787 |
msgstr ""
|
4788 |
|
4789 |
+
#: includes/fields/class-checkbox.php:323
|
4790 |
#: includes/fields/class-select.php:197
|
4791 |
+
#: includes/fields/class-radio.php:284
|
4792 |
msgid "Check this to manually set form field values."
|
4793 |
msgstr ""
|
4794 |
|
4795 |
+
#: includes/fields/class-checkbox.php:350
|
4796 |
msgid "Choice Limit"
|
4797 |
msgstr ""
|
4798 |
|
4799 |
+
#: includes/fields/class-checkbox.php:351
|
4800 |
msgid "Limit the number of checkboxes a user can select. Leave empty for unlimited."
|
4801 |
msgstr ""
|
4802 |
|
4803 |
+
#: includes/fields/class-checkbox.php:391
|
4804 |
msgid "Enable Disclaimer / Terms of Service Display"
|
4805 |
msgstr ""
|
4806 |
|
4807 |
+
#: includes/fields/class-checkbox.php:392
|
4808 |
msgid "Check this option to adjust the field styling to support Disclaimers and Terms of Service type agreements."
|
4809 |
msgstr ""
|
4810 |
|
5030 |
msgid "I consent to having this website store my submitted information so they can respond to my inquiry."
|
5031 |
msgstr ""
|
5032 |
|
5033 |
+
#: includes/fields/class-gdpr-checkbox.php:179
|
5034 |
msgid "Agreement"
|
5035 |
msgstr ""
|
5036 |
|
5260 |
msgid "Hi there!"
|
5261 |
msgstr ""
|
5262 |
|
5263 |
+
#: wpforms.php:81
|
5264 |
msgid "Please deactivate WPForms Lite before activating WPForms."
|
5265 |
msgstr ""
|
5266 |
|
5267 |
#. translators: %1$s - WPBeginner URL for recommended WordPress hosting.
|
5268 |
+
#: wpforms.php:111
|
5269 |
msgid "Your site is running an <strong>insecure version</strong> of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">recommended WordPress hosting company</a>."
|
5270 |
msgstr ""
|
5271 |
|
5272 |
#. translators: %1$s - WPForms.com URL for documentation with more details.
|
5273 |
+
#: wpforms.php:129
|
5274 |
msgid "<strong>Note:</strong> WPForms plugin is disabled on your site until you fix the issue. <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more for additional information.</a>"
|
5275 |
msgstr ""
|
5276 |
|
5340 |
msgid "Added by %1$s on %2$s"
|
5341 |
msgstr ""
|
5342 |
|
5343 |
+
#: src/Lite/Admin/Settings/Education.php:58
|
5344 |
+
#: src/Lite/Admin/Builder/Education.php:67
|
5345 |
+
msgid "is a PRO Feature"
|
5346 |
+
msgstr ""
|
5347 |
+
|
5348 |
+
#: src/Lite/Admin/Settings/Education.php:59
|
5349 |
+
#: src/Lite/Admin/Builder/Education.php:68
|
5350 |
+
msgid "We're sorry, the %name% is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features."
|
5351 |
+
msgstr ""
|
5352 |
+
|
5353 |
+
#: src/Lite/Admin/Settings/Education.php:62
|
5354 |
+
#: src/Lite/Admin/Builder/Education.php:71
|
5355 |
+
msgid "<strong>Bonus:</strong> WPForms Lite users get <span>50% off</span> regular price, automatically applied at checkout."
|
5356 |
+
msgstr ""
|
5357 |
+
|
5358 |
+
#: src/Lite/Admin/Settings/Education.php:69
|
5359 |
+
msgid "Already purchased?"
|
5360 |
+
msgstr ""
|
5361 |
+
|
5362 |
+
#: src/Lite/Admin/Connect.php:79
|
5363 |
+
msgid "Sorry, you do not have permission to install plugins."
|
5364 |
+
msgstr ""
|
5365 |
+
|
5366 |
+
#: src/Lite/Admin/Connect.php:89
|
5367 |
+
msgid "Please enter your license key to connect."
|
5368 |
+
msgstr ""
|
5369 |
+
|
5370 |
+
#: src/Lite/Admin/Connect.php:96
|
5371 |
+
msgid "Only the Lite version can upgrade."
|
5372 |
+
msgstr ""
|
5373 |
+
|
5374 |
+
#: src/Lite/Admin/Connect.php:111
|
5375 |
+
msgid "WPForms Pro was already installed and has not been activated."
|
5376 |
+
msgstr ""
|
5377 |
+
|
5378 |
+
#: src/Lite/Admin/Connect.php:172
|
5379 |
+
msgid "Could not install upgrade. Please download from wpforms.com and install manually."
|
5380 |
+
msgstr ""
|
5381 |
+
|
5382 |
+
#: src/Lite/Admin/Connect.php:221
|
5383 |
+
msgid "Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually."
|
5384 |
+
msgstr ""
|
5385 |
+
|
5386 |
+
#: src/Lite/Admin/Connect.php:248
|
5387 |
+
msgid "No key provided."
|
5388 |
+
msgstr ""
|
5389 |
+
|
5390 |
+
#: src/Lite/Admin/Connect.php:274
|
5391 |
+
msgid "Pro version installed but needs to be activated from the Plugins page inside your WordPress admin."
|
5392 |
+
msgstr ""
|
5393 |
+
|
5394 |
+
#: src/Lite/Admin/DashboardWidget.php:151
|
5395 |
+
#: src/Lite/Admin/DashboardWidget.php:352
|
5396 |
msgid "Show More"
|
5397 |
msgstr ""
|
5398 |
|
5399 |
+
#: src/Lite/Admin/DashboardWidget.php:152
|
5400 |
msgid "Show Less"
|
5401 |
msgstr ""
|
5402 |
|
5403 |
+
#: src/Lite/Admin/DashboardWidget.php:228
|
5404 |
msgid "Create Your First Form to Start Collecting Leads"
|
5405 |
msgstr ""
|
5406 |
|
5407 |
+
#: src/Lite/Admin/DashboardWidget.php:229
|
5408 |
msgid "You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks."
|
5409 |
msgstr ""
|
5410 |
|
5411 |
+
#: src/Lite/Admin/DashboardWidget.php:231
|
5412 |
msgid "Create Your Form"
|
5413 |
msgstr ""
|
5414 |
|
5415 |
+
#: src/Lite/Admin/DashboardWidget.php:234
|
5416 |
+
#: src/Lite/Admin/DashboardWidget.php:377
|
5417 |
msgid "Learn More"
|
5418 |
msgstr ""
|
5419 |
|
5420 |
+
#: src/Lite/Admin/DashboardWidget.php:253
|
5421 |
msgid "Total Entries"
|
5422 |
msgstr ""
|
5423 |
|
5424 |
+
#: src/Lite/Admin/DashboardWidget.php:256
|
5425 |
msgid "Last 7 days"
|
5426 |
msgstr ""
|
5427 |
|
5428 |
+
#: src/Lite/Admin/DashboardWidget.php:266
|
5429 |
msgid "View all Form Entries inside WordPress Dashboard"
|
5430 |
msgstr ""
|
5431 |
|
5432 |
+
#: src/Lite/Admin/DashboardWidget.php:267
|
5433 |
msgid "Form entries reports are not available."
|
5434 |
msgstr ""
|
5435 |
|
5436 |
+
#: src/Lite/Admin/DashboardWidget.php:268
|
5437 |
msgid "Form entries are not stored in Lite."
|
5438 |
msgstr ""
|
5439 |
|
5440 |
+
#: src/Lite/Admin/DashboardWidget.php:269
|
5441 |
msgid "Upgrade to Pro and get access to the reports."
|
5442 |
msgstr ""
|
5443 |
|
5444 |
+
#: src/Lite/Admin/DashboardWidget.php:278
|
5445 |
msgid "Go to WPForms.com"
|
5446 |
msgstr ""
|
5447 |
|
5448 |
+
#: src/Lite/Admin/DashboardWidget.php:288
|
5449 |
msgid "Total Entries by Form"
|
5450 |
msgstr ""
|
5451 |
|
5452 |
+
#: src/Lite/Admin/DashboardWidget.php:323
|
5453 |
msgid "No entries were submitted yet."
|
5454 |
msgstr ""
|
5455 |
|
5456 |
+
#: src/Lite/Admin/DashboardWidget.php:351
|
5457 |
msgid "Show all forms"
|
5458 |
msgstr ""
|
5459 |
|
5460 |
+
#: src/Lite/Admin/DashboardWidget.php:374
|
5461 |
msgid "Recommended Plugin:"
|
5462 |
msgstr ""
|
5463 |
|
5464 |
+
#: src/Lite/Admin/DashboardWidget.php:376
|
5465 |
msgid "Install"
|
5466 |
msgstr ""
|
5467 |
|
5468 |
+
#: src/Lite/Admin/Builder/Education.php:113
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5469 |
msgid "Request A Quote Form"
|
5470 |
msgstr ""
|
5471 |
|
5472 |
+
#: src/Lite/Admin/Builder/Education.php:115
|
5473 |
msgid "Start collecting leads with this pre-made Request a quote form. You can add and remove fields as needed."
|
5474 |
msgstr ""
|
5475 |
|
5476 |
+
#: src/Lite/Admin/Builder/Education.php:118
|
5477 |
msgid "Donation Form"
|
5478 |
msgstr ""
|
5479 |
|
5480 |
+
#: src/Lite/Admin/Builder/Education.php:120
|
5481 |
msgid "Start collecting donation payments on your website with this ready-made Donation form. You can add and remove fields as needed."
|
5482 |
msgstr ""
|
5483 |
|
5484 |
+
#: src/Lite/Admin/Builder/Education.php:123
|
5485 |
msgid "Billing / Order Form"
|
5486 |
msgstr ""
|
5487 |
|
5488 |
+
#: src/Lite/Admin/Builder/Education.php:125
|
5489 |
msgid "Collect payments for product and service orders with this ready-made form template. You can add and remove fields as needed."
|
5490 |
msgstr ""
|
5491 |
|
5492 |
+
#: src/Lite/Admin/Builder/Education.php:131
|
5493 |
msgid "Unlock Pre-Made Form Templates"
|
5494 |
msgstr ""
|
5495 |
|
5496 |
+
#: src/Lite/Admin/Builder/Education.php:135
|
5497 |
msgid "Upgrade"
|
5498 |
msgstr ""
|
5499 |
|
5500 |
+
#: src/Lite/Admin/Builder/Education.php:139
|
5501 |
msgid "While WPForms Lite allows you to create any type of form, you can speed up the process by unlocking our other pre-built form templates among other features, so you never have to start from scratch again..."
|
5502 |
msgstr ""
|
5503 |
|
5504 |
+
#: src/Lite/Admin/Builder/Education.php:177
|
5505 |
msgid "Phone"
|
5506 |
msgstr ""
|
5507 |
|
5508 |
+
#: src/Lite/Admin/Builder/Education.php:184
|
5509 |
msgid "Address"
|
5510 |
msgstr ""
|
5511 |
|
5512 |
+
#: src/Lite/Admin/Builder/Education.php:191
|
5513 |
msgid "Date / Time"
|
5514 |
msgstr ""
|
5515 |
|
5516 |
+
#: src/Lite/Admin/Builder/Education.php:198
|
5517 |
msgid "Website / URL"
|
5518 |
msgstr ""
|
5519 |
|
5520 |
+
#: src/Lite/Admin/Builder/Education.php:205
|
5521 |
msgid "File Upload"
|
5522 |
msgstr ""
|
5523 |
|
5524 |
+
#: src/Lite/Admin/Builder/Education.php:212
|
5525 |
msgid "Password"
|
5526 |
msgstr ""
|
5527 |
|
5528 |
+
#: src/Lite/Admin/Builder/Education.php:226
|
5529 |
msgid "Section Divider"
|
5530 |
msgstr ""
|
5531 |
|
5532 |
+
#: src/Lite/Admin/Builder/Education.php:233
|
5533 |
msgid "Hidden Field"
|
5534 |
msgstr ""
|
5535 |
|
5536 |
+
#: src/Lite/Admin/Builder/Education.php:240
|
5537 |
msgid "HTML"
|
5538 |
msgstr ""
|
5539 |
|
5540 |
+
#: src/Lite/Admin/Builder/Education.php:247
|
5541 |
msgid "Rating"
|
5542 |
msgstr ""
|
5543 |
|
5544 |
+
#: src/Lite/Admin/Builder/Education.php:254
|
5545 |
msgid "Captcha"
|
5546 |
msgstr ""
|
5547 |
|
5548 |
+
#: src/Lite/Admin/Builder/Education.php:261
|
5549 |
msgid "Signature"
|
5550 |
msgstr ""
|
5551 |
|
5552 |
+
#: src/Lite/Admin/Builder/Education.php:268
|
5553 |
msgid "Likert Scale"
|
5554 |
msgstr ""
|
5555 |
|
5556 |
+
#: src/Lite/Admin/Builder/Education.php:275
|
5557 |
msgid "Net Promoter Score"
|
5558 |
msgstr ""
|
5559 |
|
5560 |
+
#: src/Lite/Admin/Builder/Education.php:285
|
5561 |
msgid "Single Item"
|
5562 |
msgstr ""
|
5563 |
|
5564 |
+
#: src/Lite/Admin/Builder/Education.php:292
|
5565 |
msgid "Multiple Items"
|
5566 |
msgstr ""
|
5567 |
|
5568 |
+
#: src/Lite/Admin/Builder/Education.php:299
|
5569 |
msgid "Checkbox Items"
|
5570 |
msgstr ""
|
5571 |
|
5572 |
+
#: src/Lite/Admin/Builder/Education.php:306
|
5573 |
msgid "Dropdown Items"
|
5574 |
msgstr ""
|
5575 |
|
5576 |
+
#: src/Lite/Admin/Builder/Education.php:313
|
5577 |
msgid "Total"
|
5578 |
msgstr ""
|
5579 |
|
5580 |
+
#: src/Lite/Admin/Builder/Education.php:342
|
5581 |
+
msgid "Conditionals"
|
5582 |
+
msgstr ""
|
5583 |
+
|
5584 |
#. translators: %s - addon name
|
5585 |
+
#: src/Lite/Admin/Builder/Education.php:430
|
5586 |
+
#: src/Lite/Admin/Builder/Education.php:462
|
5587 |
msgid "%s addon"
|
5588 |
msgstr ""
|
5589 |
|
5590 |
+
#: src/Lite/Admin/ConnectSkin.php:86
|
5591 |
+
msgid "There was an error installing WPForms Pro. Please try again."
|
5592 |
+
msgstr ""
|
5593 |
+
|
5594 |
#: src/Providers/Provider/Settings/PageIntegrations.php:235
|
5595 |
msgid "You do not have permissions."
|
5596 |
msgstr ""
|
5653 |
msgid "You cannot send emails with WPForms\\Emails\\Mailer until init/admin_init has been reached."
|
5654 |
msgstr ""
|
5655 |
|
5656 |
+
#: src/Emails/Summaries.php:102
|
5657 |
msgid "Disable Email Summaries weekly delivery."
|
5658 |
msgstr ""
|
5659 |
|
5660 |
+
#: src/Emails/Summaries.php:105
|
5661 |
msgid "View Email Summary Example"
|
5662 |
msgstr ""
|
5663 |
|
5664 |
+
#: src/Emails/Summaries.php:110
|
5665 |
msgid "Disable Email Summaries"
|
5666 |
msgstr ""
|
5667 |
|
5668 |
+
#: src/Emails/Summaries.php:185
|
5669 |
msgid "Weekly WPForms Email Summaries"
|
5670 |
msgstr ""
|
5671 |
|
5672 |
+
#: src/Emails/Summaries.php:226
|
5673 |
msgid "WPForms Summary"
|
5674 |
msgstr ""
|
5675 |
|
5841 |
msgstr ""
|
5842 |
|
5843 |
#: src/Integrations/Gutenberg/FormSelector.php:107
|
5844 |
+
msgid "Do not forget to test your form."
|
5845 |
msgstr ""
|
5846 |
|
5847 |
#: src/Integrations/Gutenberg/FormSelector.php:108
|
5848 |
msgid "Check out our complete guide!"
|
5849 |
msgstr ""
|
5850 |
|
5851 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:67
|
5852 |
+
msgid "Version"
|
5853 |
+
msgstr ""
|
5854 |
+
|
5855 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:75
|
5856 |
+
msgid "License key type"
|
5857 |
+
msgstr ""
|
5858 |
+
|
5859 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:85
|
5860 |
+
msgid "Lite install date"
|
5861 |
+
msgstr ""
|
5862 |
+
|
5863 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:93
|
5864 |
+
msgid "Pro install date"
|
5865 |
+
msgstr ""
|
5866 |
+
|
5867 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:102
|
5868 |
+
msgid "Not found"
|
5869 |
+
msgstr ""
|
5870 |
+
|
5871 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:105
|
5872 |
+
msgid "DB tables"
|
5873 |
+
msgstr ""
|
5874 |
+
|
5875 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:111
|
5876 |
+
msgid "Total forms"
|
5877 |
+
msgstr ""
|
5878 |
+
|
5879 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:118
|
5880 |
+
msgid "Total entries"
|
5881 |
+
msgstr ""
|
5882 |
+
|
5883 |
+
#: src/Integrations/SiteHealth/SiteHealth.php:135
|
5884 |
+
msgid "Total submissions (since v1.5.0)"
|
5885 |
+
msgstr ""
|
5886 |
+
|
5887 |
#. translators: %s - URL WP Mail SMTP settings.
|
5888 |
#: src/Integrations/WPMailSMTP/Notifications.php:78
|
5889 |
msgid "This setting is disabled because you have the \"Force From Name\" setting enabled in <a href=\"%s\" rel=\"noopener noreferrer\" target=\"_blank\">WP Mail SMTP</a>."
|
lite/assets/js/admin/builder-education.js
CHANGED
@@ -54,7 +54,7 @@ var WPFormsBuilderEducation = window.WPFormsBuilderEducation || ( function( docu
|
|
54 |
|
55 |
$( document ).on(
|
56 |
'click',
|
57 |
-
'.wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add',
|
58 |
function( event ) {
|
59 |
|
60 |
var $this = $( this );
|
54 |
|
55 |
$( document ).on(
|
56 |
'click',
|
57 |
+
'.wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add, .wpforms-field-option-group-toggle',
|
58 |
function( event ) {
|
59 |
|
60 |
var $this = $( this );
|
lite/assets/js/admin/builder-education.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
"use strict";var WPFormsBuilderEducation=window.WPFormsBuilderEducation||function(e,i
|
1 |
+
"use strict";var WPFormsBuilderEducation=window.WPFormsBuilderEducation||function(e,o,i){var n={init:function(){i(e).ready(n.ready)},ready:function(){n.events()},events:function(){n.clickEvents()},clickEvents:function(){i(e).on("click",".wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add, .wpforms-field-option-group-toggle",function(e){var t=i(this);t.hasClass("upgrade-modal")&&(e.preventDefault(),e.stopImmediatePropagation(),t.hasClass("wpforms-add-fields-button")?n.upgradeModal(t.text()+" "+wpforms_builder.field):n.upgradeModal(t.data("name")))})},upgradeModal:function(e){var t=wpforms_builder_lite.upgrade_message.replace(/%name%/g,e),n=encodeURI(wpforms_builder_lite.upgrade_url+"&utm_content="+e.trim());i.alert({title:e+" "+wpforms_builder_lite.upgrade_title,icon:"fa fa-lock",content:t,boxWidth:"550px",onOpenBefore:function(){this.$btnc.after('<div class="discount-note">'+wpforms_builder_lite.upgrade_bonus+wpforms_builder_lite.upgrade_doc+"</div>"),this.$body.find(".jconfirm-content").addClass("lite-upgrade")},buttons:{confirm:{text:wpforms_builder_lite.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){o.open(n,"_blank"),i.alert({title:!1,content:wpforms_builder_lite.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})}}}})}};return n}(document,window,jQuery);WPFormsBuilderEducation.init();
|
lite/assets/js/admin/connect.js
ADDED
@@ -0,0 +1,172 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* globals wpforms_admin, wpforms_connect */
|
2 |
+
/**
|
3 |
+
* Connect functionality.
|
4 |
+
*
|
5 |
+
* @since 1.5.4
|
6 |
+
*/
|
7 |
+
|
8 |
+
'use strict';
|
9 |
+
|
10 |
+
var WPFormsConnect = window.WPFormsConnect || ( function( document, window, $ ) {
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Elements reference.
|
14 |
+
*
|
15 |
+
* @since 1.5.5
|
16 |
+
*
|
17 |
+
* @type {Object}
|
18 |
+
*/
|
19 |
+
var el = {
|
20 |
+
$connectBtn: $( '#wpforms-settings-connect-btn' ),
|
21 |
+
$connectKey: $( '#wpforms-settings-upgrade-license-key' )
|
22 |
+
};
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Public functions and properties.
|
26 |
+
*
|
27 |
+
* @since 1.5.5
|
28 |
+
*
|
29 |
+
* @type {Object}
|
30 |
+
*/
|
31 |
+
var app = {
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Start the engine.
|
35 |
+
*
|
36 |
+
* @since 1.5.5
|
37 |
+
*/
|
38 |
+
init: function() {
|
39 |
+
$( document ).ready( app.ready );
|
40 |
+
},
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Document ready.
|
44 |
+
*
|
45 |
+
* @since 1.5.5
|
46 |
+
*/
|
47 |
+
ready: function() {
|
48 |
+
app.events();
|
49 |
+
},
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Register JS events.
|
53 |
+
*
|
54 |
+
* @since 1.5.5
|
55 |
+
*/
|
56 |
+
events: function() {
|
57 |
+
app.connectBtnClick();
|
58 |
+
},
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Register connect button event.
|
62 |
+
*
|
63 |
+
* @since 1.5.5
|
64 |
+
*/
|
65 |
+
connectBtnClick: function() {
|
66 |
+
el.$connectBtn.on( 'click', function() {
|
67 |
+
app.gotoUpgradeUrl();
|
68 |
+
} );
|
69 |
+
},
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Get the alert arguments in case of Pro already installed.
|
73 |
+
*
|
74 |
+
* @since 1.5.5
|
75 |
+
*
|
76 |
+
* @param {object} res Ajax query result object.
|
77 |
+
*
|
78 |
+
* @returns {object} Alert arguments.
|
79 |
+
*/
|
80 |
+
proAlreadyInstalled: function( res ) {
|
81 |
+
var buttons = {
|
82 |
+
confirm: {
|
83 |
+
text: wpforms_admin.plugin_activate_btn,
|
84 |
+
btnClass: 'btn-confirm',
|
85 |
+
keys: [ 'enter' ],
|
86 |
+
action: function() {
|
87 |
+
window.location = window.location;
|
88 |
+
},
|
89 |
+
},
|
90 |
+
};
|
91 |
+
|
92 |
+
return {
|
93 |
+
title: wpforms_admin.almost_done,
|
94 |
+
content: res.data.message,
|
95 |
+
icon: 'fa fa-check-circle',
|
96 |
+
type: 'green',
|
97 |
+
buttons: buttons,
|
98 |
+
};
|
99 |
+
},
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Go to upgrade url.
|
103 |
+
*
|
104 |
+
* @since 1.5.5
|
105 |
+
*/
|
106 |
+
gotoUpgradeUrl: function() {
|
107 |
+
var data = {
|
108 |
+
action: 'wpforms_connect_url',
|
109 |
+
key: el.$connectKey.val(),
|
110 |
+
nonce: wpforms_admin.nonce,
|
111 |
+
};
|
112 |
+
$.post( wpforms_admin.ajax_url, data )
|
113 |
+
.done( function( res ) {
|
114 |
+
if ( res.success ) {
|
115 |
+
if ( res.data.reload ) {
|
116 |
+
$.alert( app.proAlreadyInstalled( res ) );
|
117 |
+
return;
|
118 |
+
}
|
119 |
+
window.location.href = res.data.url;
|
120 |
+
return;
|
121 |
+
}
|
122 |
+
$.alert( {
|
123 |
+
title: wpforms_admin.oops,
|
124 |
+
content: res.data.message,
|
125 |
+
icon: 'fa fa-exclamation-circle',
|
126 |
+
type: 'orange',
|
127 |
+
buttons: {
|
128 |
+
confirm: {
|
129 |
+
text: wpforms_admin.ok,
|
130 |
+
btnClass: 'btn-confirm',
|
131 |
+
keys: [ 'enter' ],
|
132 |
+
},
|
133 |
+
},
|
134 |
+
} );
|
135 |
+
} )
|
136 |
+
.fail( function( xhr ) {
|
137 |
+
app.failAlert( xhr );
|
138 |
+
} );
|
139 |
+
},
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Alert in case of server error.
|
143 |
+
*
|
144 |
+
* @since 1.5.5
|
145 |
+
*
|
146 |
+
* @param {object} xhr XHR object.
|
147 |
+
*/
|
148 |
+
failAlert: function( xhr ) {
|
149 |
+
|
150 |
+
$.alert( {
|
151 |
+
title: wpforms_admin.oops,
|
152 |
+
content: wpforms_admin.server_error + '<br>' + xhr.status + ' ' + xhr.statusText + ' ' + xhr.responseText,
|
153 |
+
icon: 'fa fa-exclamation-circle',
|
154 |
+
type: 'orange',
|
155 |
+
buttons: {
|
156 |
+
confirm: {
|
157 |
+
text: wpforms_admin.ok,
|
158 |
+
btnClass: 'btn-confirm',
|
159 |
+
keys: [ 'enter' ],
|
160 |
+
},
|
161 |
+
},
|
162 |
+
} );
|
163 |
+
},
|
164 |
+
};
|
165 |
+
|
166 |
+
// Provide access to public functions/properties.
|
167 |
+
return app;
|
168 |
+
|
169 |
+
}( document, window, jQuery ) );
|
170 |
+
|
171 |
+
// Initialize.
|
172 |
+
WPFormsConnect.init();
|
lite/assets/js/admin/connect.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
"use strict";var WPFormsConnect=window.WPFormsConnect||function(n,e,t){var o={$connectBtn:t("#wpforms-settings-connect-btn"),$connectKey:t("#wpforms-settings-upgrade-license-key")},r={init:function(){t(n).ready(r.ready)},ready:function(){r.events()},events:function(){r.connectBtnClick()},connectBtnClick:function(){o.$connectBtn.on("click",function(){r.gotoUpgradeUrl()})},proAlreadyInstalled:function(n){var t={confirm:{text:wpforms_admin.plugin_activate_btn,btnClass:"btn-confirm",keys:["enter"],action:function(){e.location=e.location}}};return{title:wpforms_admin.almost_done,content:n.data.message,icon:"fa fa-check-circle",type:"green",buttons:t}},gotoUpgradeUrl:function(){var n={action:"wpforms_connect_url",key:o.$connectKey.val(),nonce:wpforms_admin.nonce};t.post(wpforms_admin.ajax_url,n).done(function(n){if(n.success)return n.data.reload?void t.alert(r.proAlreadyInstalled(n)):void(e.location.href=n.data.url);t.alert({title:wpforms_admin.oops,content:n.data.message,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(n){r.failAlert(n)})},failAlert:function(n){t.alert({title:wpforms_admin.oops,content:wpforms_admin.server_error+"<br>"+n.status+" "+n.statusText+" "+n.responseText,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}};return r}(document,window,jQuery);WPFormsConnect.init();
|
lite/assets/js/admin/settings-education.js
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* globals wpforms_admin */
|
2 |
+
/**
|
3 |
+
* WPForms Settings Education function.
|
4 |
+
*
|
5 |
+
* @since 1.5.5
|
6 |
+
*/
|
7 |
+
|
8 |
+
'use strict';
|
9 |
+
|
10 |
+
var WPFormsSettingsEducation = window.WPFormsSettingsEducation || ( function( document, window, $ ) {
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Public functions and properties.
|
14 |
+
*
|
15 |
+
* @since 1.5.5
|
16 |
+
*
|
17 |
+
* @type {Object}
|
18 |
+
*/
|
19 |
+
var app = {
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Start the engine.
|
23 |
+
*
|
24 |
+
* @since 1.5.5
|
25 |
+
*/
|
26 |
+
init: function() {
|
27 |
+
$( document ).ready( app.ready );
|
28 |
+
},
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Document ready.
|
32 |
+
*
|
33 |
+
* @since 1.5.5
|
34 |
+
*/
|
35 |
+
ready: function() {
|
36 |
+
app.events();
|
37 |
+
},
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Register JS events.
|
41 |
+
*
|
42 |
+
* @since 1.5.5
|
43 |
+
*/
|
44 |
+
events: function() {
|
45 |
+
app.clickEvents();
|
46 |
+
},
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Registers JS click events.
|
50 |
+
*
|
51 |
+
* @since 1.5.5
|
52 |
+
*/
|
53 |
+
clickEvents: function() {
|
54 |
+
|
55 |
+
$( document ).on(
|
56 |
+
'click',
|
57 |
+
'.wpforms-settings-provider.education-modal',
|
58 |
+
function( event ) {
|
59 |
+
|
60 |
+
var $this = $( this );
|
61 |
+
|
62 |
+
event.preventDefault();
|
63 |
+
event.stopImmediatePropagation();
|
64 |
+
|
65 |
+
app.upgradeModal( $this.data( 'name' ) );
|
66 |
+
}
|
67 |
+
);
|
68 |
+
},
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Upgrade modal.
|
72 |
+
*
|
73 |
+
* @since 1.5.5
|
74 |
+
*
|
75 |
+
* @param {string} feature Feature name.
|
76 |
+
*/
|
77 |
+
upgradeModal: function( feature ) {
|
78 |
+
|
79 |
+
var message = wpforms_admin.upgrade_message.replace( /%name%/g, feature ),
|
80 |
+
upgradeURL = encodeURI( wpforms_admin.upgrade_url + '&utm_content=' + feature.trim() );
|
81 |
+
|
82 |
+
$.alert( {
|
83 |
+
title : feature + ' ' + wpforms_admin.upgrade_title,
|
84 |
+
icon : 'fa fa-lock',
|
85 |
+
content : message,
|
86 |
+
boxWidth: '550px',
|
87 |
+
onOpenBefore: function() {
|
88 |
+
this.$btnc.after( '<div class="discount-note">' + wpforms_admin.upgrade_bonus + wpforms_admin.upgrade_doc + '</div>' );
|
89 |
+
this.$body.find( '.jconfirm-content' ).addClass( 'lite-upgrade' );
|
90 |
+
},
|
91 |
+
buttons : {
|
92 |
+
confirm: {
|
93 |
+
text : wpforms_admin.upgrade_button,
|
94 |
+
btnClass: 'btn-confirm',
|
95 |
+
keys : [ 'enter' ],
|
96 |
+
action: function() {
|
97 |
+
window.open( upgradeURL, '_blank' );
|
98 |
+
$.alert( {
|
99 |
+
title : false,
|
100 |
+
content : wpforms_admin.upgrade_modal,
|
101 |
+
icon : 'fa fa-info-circle',
|
102 |
+
type : 'blue',
|
103 |
+
boxWidth: '565px',
|
104 |
+
buttons : {
|
105 |
+
confirm: {
|
106 |
+
text : wpforms_admin.ok,
|
107 |
+
btnClass: 'btn-confirm',
|
108 |
+
keys : [ 'enter' ],
|
109 |
+
},
|
110 |
+
},
|
111 |
+
} );
|
112 |
+
},
|
113 |
+
},
|
114 |
+
},
|
115 |
+
} );
|
116 |
+
},
|
117 |
+
};
|
118 |
+
|
119 |
+
// Provide access to public functions/properties.
|
120 |
+
return app;
|
121 |
+
|
122 |
+
}( document, window, jQuery ) );
|
123 |
+
|
124 |
+
// Initialize.
|
125 |
+
WPFormsSettingsEducation.init();
|
lite/assets/js/admin/settings-education.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
"use strict";var WPFormsSettingsEducation=window.WPFormsSettingsEducation||function(n,o,i){var e={init:function(){i(n).ready(e.ready)},ready:function(){e.events()},events:function(){e.clickEvents()},clickEvents:function(){i(n).on("click",".wpforms-settings-provider.education-modal",function(n){var t=i(this);n.preventDefault(),n.stopImmediatePropagation(),e.upgradeModal(t.data("name"))})},upgradeModal:function(n){var t=wpforms_admin.upgrade_message.replace(/%name%/g,n),e=encodeURI(wpforms_admin.upgrade_url+"&utm_content="+n.trim());i.alert({title:n+" "+wpforms_admin.upgrade_title,icon:"fa fa-lock",content:t,boxWidth:"550px",onOpenBefore:function(){this.$btnc.after('<div class="discount-note">'+wpforms_admin.upgrade_bonus+wpforms_admin.upgrade_doc+"</div>"),this.$body.find(".jconfirm-content").addClass("lite-upgrade")},buttons:{confirm:{text:wpforms_admin.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){o.open(e,"_blank"),i.alert({title:!1,content:wpforms_admin.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}}}})}};return e}(document,window,jQuery);WPFormsSettingsEducation.init();
|
lite/assets/js/admin/upgrade.js
DELETED
@@ -1,299 +0,0 @@
|
|
1 |
-
/* globals wpforms_admin, wpforms_upgrade */
|
2 |
-
/**
|
3 |
-
* WPForms Settings functionality.
|
4 |
-
*
|
5 |
-
* @since 1.5.3.2
|
6 |
-
*/
|
7 |
-
|
8 |
-
'use strict';
|
9 |
-
|
10 |
-
var WPFormsUpgrade = window.WPFormsUpgrade || ( function( document, window, $ ) {
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Elements reference.
|
14 |
-
*
|
15 |
-
* @since 1.5.3.2
|
16 |
-
*
|
17 |
-
* @type {Object}
|
18 |
-
*/
|
19 |
-
var el = {
|
20 |
-
$licenseKey: $( '#wpforms-settings-upgrade-license-key' ),
|
21 |
-
$licenseKeySpinner: $( '#wpforms-settings-upgrade-license-key ~ .wpforms-spinner' ),
|
22 |
-
$licenseKeyCont: $( '#wpforms-settings-upgrade-license-key-cont' ),
|
23 |
-
$upgradeBtn: $( '#wpforms-settings-upgrade-btn' ),
|
24 |
-
};
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Public functions and properties.
|
28 |
-
*
|
29 |
-
* @since 1.5.1
|
30 |
-
*
|
31 |
-
* @type {Object}
|
32 |
-
*/
|
33 |
-
var app = {
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Start the engine.
|
37 |
-
*
|
38 |
-
* @since 1.5.3.2
|
39 |
-
*/
|
40 |
-
init: function() {
|
41 |
-
$( document ).ready( app.ready );
|
42 |
-
},
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Document ready.
|
46 |
-
*
|
47 |
-
* @since 1.5.3.2
|
48 |
-
*/
|
49 |
-
ready: function() {
|
50 |
-
app.displayForm();
|
51 |
-
app.events();
|
52 |
-
},
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Display license key form.
|
56 |
-
*
|
57 |
-
* @since 1.5.3.2
|
58 |
-
*/
|
59 |
-
displayForm: function() {
|
60 |
-
var key = el.$licenseKey.val();
|
61 |
-
|
62 |
-
if ( key === '' ) {
|
63 |
-
el.$licenseKeyCont.removeClass( 'wpforms-hide' );
|
64 |
-
} else {
|
65 |
-
el.$upgradeBtn.removeClass( 'wpforms-hide' );
|
66 |
-
}
|
67 |
-
},
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Register JS events.
|
71 |
-
*
|
72 |
-
* @since 1.5.3.2
|
73 |
-
*/
|
74 |
-
events: function() {
|
75 |
-
app.licenseEvent();
|
76 |
-
app.upgradeBtnClick();
|
77 |
-
},
|
78 |
-
|
79 |
-
/**
|
80 |
-
* Register license key input event.
|
81 |
-
*
|
82 |
-
* @since 1.5.3.2
|
83 |
-
*/
|
84 |
-
licenseEvent: function() {
|
85 |
-
var timeout = null;
|
86 |
-
|
87 |
-
el.$licenseKey.on( 'input', function() {
|
88 |
-
if ( timeout !== null ) {
|
89 |
-
clearTimeout( timeout );
|
90 |
-
}
|
91 |
-
timeout = setTimeout( function() {
|
92 |
-
app.licenseVerify();
|
93 |
-
}, 500 );
|
94 |
-
} );
|
95 |
-
},
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Register upgrade button event.
|
99 |
-
*
|
100 |
-
* @since 1.5.3.2
|
101 |
-
*/
|
102 |
-
upgradeBtnClick: function() {
|
103 |
-
el.$upgradeBtn.on( 'click', function() {
|
104 |
-
$.alert( app.licenseVerifySuccess() );
|
105 |
-
} );
|
106 |
-
},
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Verify a license key.
|
110 |
-
*
|
111 |
-
* @since 1.5.3.2
|
112 |
-
*/
|
113 |
-
licenseVerify: function() {
|
114 |
-
var data = {
|
115 |
-
action: 'wpforms_verify_license',
|
116 |
-
nonce: wpforms_admin.nonce,
|
117 |
-
license: el.$licenseKey.val(),
|
118 |
-
};
|
119 |
-
if ( data.license === '' ) {
|
120 |
-
return;
|
121 |
-
}
|
122 |
-
el.$licenseKeySpinner.removeClass( 'wpforms-hide' );
|
123 |
-
$.post( wpforms_admin.ajax_url, data )
|
124 |
-
.done( function( res ) {
|
125 |
-
var alertArgs;
|
126 |
-
if ( res.success ) {
|
127 |
-
alertArgs = app.licenseVerifySuccess( res );
|
128 |
-
} else {
|
129 |
-
alertArgs = app.licenseVerifyError( res );
|
130 |
-
}
|
131 |
-
$.alert( alertArgs );
|
132 |
-
} )
|
133 |
-
.fail( function( xhr ) {
|
134 |
-
app.failAlert( xhr );
|
135 |
-
} )
|
136 |
-
.always( function( xhr ) {
|
137 |
-
el.$licenseKeySpinner.addClass( 'wpforms-hide' );
|
138 |
-
} );
|
139 |
-
},
|
140 |
-
|
141 |
-
/**
|
142 |
-
* Get the alert arguments in case of success.
|
143 |
-
*
|
144 |
-
* @since 1.5.3.2
|
145 |
-
*
|
146 |
-
* @param {object} res Ajax query result object.
|
147 |
-
*
|
148 |
-
* @returns {object} Alert arguments.
|
149 |
-
*/
|
150 |
-
licenseVerifySuccess: function( res ) {
|
151 |
-
var buttons = {
|
152 |
-
confirm: {
|
153 |
-
text: wpforms_upgrade.upgrd_to_pro_btn_upgrade,
|
154 |
-
btnClass: 'btn-confirm',
|
155 |
-
keys: [ 'enter' ],
|
156 |
-
action: function() {
|
157 |
-
app.gotoUpgradeUrl();
|
158 |
-
},
|
159 |
-
},
|
160 |
-
cancel: {
|
161 |
-
text: wpforms_upgrade.upgrd_to_pro_btn_cancel,
|
162 |
-
keys: [ 'esc' ],
|
163 |
-
},
|
164 |
-
};
|
165 |
-
return {
|
166 |
-
title: wpforms_upgrade.upgrd_to_pro_license_ok_title,
|
167 |
-
content: wpforms_upgrade.upgrd_to_pro_license_ok_msg,
|
168 |
-
icon: 'fa fa-check-circle',
|
169 |
-
type: 'green',
|
170 |
-
buttons: buttons,
|
171 |
-
};
|
172 |
-
},
|
173 |
-
|
174 |
-
/**
|
175 |
-
* Get the alert arguments in case of error.
|
176 |
-
*
|
177 |
-
* @since 1.5.3.2
|
178 |
-
*
|
179 |
-
* @param {object} res Ajax query result object.
|
180 |
-
*
|
181 |
-
* @returns {object} Alert arguments.
|
182 |
-
*/
|
183 |
-
licenseVerifyError: function( res ) {
|
184 |
-
return {
|
185 |
-
title: wpforms_upgrade.error,
|
186 |
-
content: res.data,
|
187 |
-
icon: 'fa fa-exclamation-circle',
|
188 |
-
type: 'orange',
|
189 |
-
buttons: {
|
190 |
-
confirm: {
|
191 |
-
text: wpforms_admin.ok,
|
192 |
-
btnClass: 'btn-confirm',
|
193 |
-
keys: [ 'enter' ],
|
194 |
-
},
|
195 |
-
},
|
196 |
-
};
|
197 |
-
},
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Get the alert arguments in case of Pro already installed.
|
201 |
-
*
|
202 |
-
* @since 1.5.3.2
|
203 |
-
*
|
204 |
-
* @param {object} res Ajax query result object.
|
205 |
-
*
|
206 |
-
* @returns {object} Alert arguments.
|
207 |
-
*/
|
208 |
-
proAlreadyInstalled: function( res ) {
|
209 |
-
var buttons = {
|
210 |
-
confirm: {
|
211 |
-
text: wpforms_upgrade.upgrd_to_pro_btn_activate,
|
212 |
-
btnClass: 'btn-confirm',
|
213 |
-
keys: [ 'enter' ],
|
214 |
-
action: function() {
|
215 |
-
window.location = window.location;
|
216 |
-
},
|
217 |
-
},
|
218 |
-
};
|
219 |
-
|
220 |
-
return {
|
221 |
-
title: wpforms_upgrade.upgrd_to_pro_license_ok_title,
|
222 |
-
content: res.data.message,
|
223 |
-
icon: 'fa fa-check-circle',
|
224 |
-
type: 'green',
|
225 |
-
buttons: buttons,
|
226 |
-
};
|
227 |
-
},
|
228 |
-
|
229 |
-
/**
|
230 |
-
* Go to upgrade url.
|
231 |
-
*
|
232 |
-
* @since 1.5.3.2
|
233 |
-
*/
|
234 |
-
gotoUpgradeUrl: function() {
|
235 |
-
var data = {
|
236 |
-
action: 'wpforms_get_upgrade_url',
|
237 |
-
nonce: wpforms_admin.nonce,
|
238 |
-
};
|
239 |
-
$.post( wpforms_admin.ajax_url, data )
|
240 |
-
.done( function( res ) {
|
241 |
-
if ( res.success ) {
|
242 |
-
if ( res.data.reload ) {
|
243 |
-
$.alert( app.proAlreadyInstalled( res ) );
|
244 |
-
return;
|
245 |
-
}
|
246 |
-
window.location.href = res.data.url;
|
247 |
-
return;
|
248 |
-
}
|
249 |
-
$.alert( {
|
250 |
-
title: wpforms_upgrade.error,
|
251 |
-
content: res.data.message,
|
252 |
-
icon: 'fa fa-exclamation-circle',
|
253 |
-
type: 'orange',
|
254 |
-
buttons: {
|
255 |
-
confirm: {
|
256 |
-
text: wpforms_admin.ok,
|
257 |
-
btnClass: 'btn-confirm',
|
258 |
-
keys: [ 'enter' ],
|
259 |
-
},
|
260 |
-
},
|
261 |
-
} );
|
262 |
-
} )
|
263 |
-
.fail( function( xhr ) {
|
264 |
-
app.failAlert( xhr );
|
265 |
-
} );
|
266 |
-
},
|
267 |
-
|
268 |
-
/**
|
269 |
-
* Alert in case of server error.
|
270 |
-
*
|
271 |
-
* @since 1.5.3.2
|
272 |
-
*
|
273 |
-
* @param {object} xhr XHR object.
|
274 |
-
*/
|
275 |
-
failAlert: function( xhr ) {
|
276 |
-
console.log( xhr );
|
277 |
-
$.alert( {
|
278 |
-
title: wpforms_upgrade.error,
|
279 |
-
content: wpforms_upgrade.error_intro + ' ' + xhr.status + ' ' + xhr.statusText + ' ' + xhr.responseText,
|
280 |
-
icon: 'fa fa-exclamation-circle',
|
281 |
-
type: 'orange',
|
282 |
-
buttons: {
|
283 |
-
confirm: {
|
284 |
-
text: wpforms_admin.ok,
|
285 |
-
btnClass: 'btn-confirm',
|
286 |
-
keys: [ 'enter' ],
|
287 |
-
},
|
288 |
-
},
|
289 |
-
} );
|
290 |
-
},
|
291 |
-
};
|
292 |
-
|
293 |
-
// Provide access to public functions/properties.
|
294 |
-
return app;
|
295 |
-
|
296 |
-
}( document, window, jQuery ) );
|
297 |
-
|
298 |
-
// Initialize.
|
299 |
-
WPFormsUpgrade.init();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lite/assets/js/admin/upgrade.min.js
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
"use strict";var WPFormsUpgrade=window.WPFormsUpgrade||function(e,r,t){var n={$licenseKey:t("#wpforms-settings-upgrade-license-key"),$licenseKeySpinner:t("#wpforms-settings-upgrade-license-key ~ .wpforms-spinner"),$licenseKeyCont:t("#wpforms-settings-upgrade-license-key-cont"),$upgradeBtn:t("#wpforms-settings-upgrade-btn")},o={init:function(){t(e).ready(o.ready)},ready:function(){o.displayForm(),o.events()},displayForm:function(){""===n.$licenseKey.val()?n.$licenseKeyCont.removeClass("wpforms-hide"):n.$upgradeBtn.removeClass("wpforms-hide")},events:function(){o.licenseEvent(),o.upgradeBtnClick()},licenseEvent:function(){var e=null;n.$licenseKey.on("input",function(){null!==e&&clearTimeout(e),e=setTimeout(function(){o.licenseVerify()},500)})},upgradeBtnClick:function(){n.$upgradeBtn.on("click",function(){t.alert(o.licenseVerifySuccess())})},licenseVerify:function(){var e={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:n.$licenseKey.val()};""!==e.license&&(n.$licenseKeySpinner.removeClass("wpforms-hide"),t.post(wpforms_admin.ajax_url,e).done(function(e){var n;n=e.success?o.licenseVerifySuccess(e):o.licenseVerifyError(e),t.alert(n)}).fail(function(e){o.failAlert(e)}).always(function(e){n.$licenseKeySpinner.addClass("wpforms-hide")}))},licenseVerifySuccess:function(e){var n={confirm:{text:wpforms_upgrade.upgrd_to_pro_btn_upgrade,btnClass:"btn-confirm",keys:["enter"],action:function(){o.gotoUpgradeUrl()}},cancel:{text:wpforms_upgrade.upgrd_to_pro_btn_cancel,keys:["esc"]}};return{title:wpforms_upgrade.upgrd_to_pro_license_ok_title,content:wpforms_upgrade.upgrd_to_pro_license_ok_msg,icon:"fa fa-check-circle",type:"green",buttons:n}},licenseVerifyError:function(e){return{title:wpforms_upgrade.error,content:e.data,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}},proAlreadyInstalled:function(e){var n={confirm:{text:wpforms_upgrade.upgrd_to_pro_btn_activate,btnClass:"btn-confirm",keys:["enter"],action:function(){r.location=r.location}}};return{title:wpforms_upgrade.upgrd_to_pro_license_ok_title,content:e.data.message,icon:"fa fa-check-circle",type:"green",buttons:n}},gotoUpgradeUrl:function(){var e={action:"wpforms_get_upgrade_url",nonce:wpforms_admin.nonce};t.post(wpforms_admin.ajax_url,e).done(function(e){if(e.success)return e.data.reload?void t.alert(o.proAlreadyInstalled(e)):void(r.location.href=e.data.url);t.alert({title:wpforms_upgrade.error,content:e.data.message,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){o.failAlert(e)})},failAlert:function(e){console.log(e),t.alert({title:wpforms_upgrade.error,content:wpforms_upgrade.error_intro+" "+e.status+" "+e.statusText+" "+e.responseText,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}};return o}(document,window,jQuery);WPFormsUpgrade.init();
|
|
lite/wpforms-lite.php
CHANGED
@@ -667,7 +667,7 @@ class WPForms_Lite {
|
|
667 |
<div class="form-details-actions">
|
668 |
<a href="#" class="form-details-actions-edit"><span class="dashicons dashicons-edit"></span> Edit This Form</a>
|
669 |
<a href="#" class="form-details-actions-preview" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-visibility"></span> Preview Form</a>
|
670 |
-
<a href="#" class="form-details-actions-export"><span class="dashicons dashicons-migrate"></span>
|
671 |
<a href="#" class="form-details-actions-read"><span class="dashicons dashicons-marker"></span> Mark All Read</a>
|
672 |
</div>
|
673 |
</div>
|
667 |
<div class="form-details-actions">
|
668 |
<a href="#" class="form-details-actions-edit"><span class="dashicons dashicons-edit"></span> Edit This Form</a>
|
669 |
<a href="#" class="form-details-actions-preview" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-visibility"></span> Preview Form</a>
|
670 |
+
<a href="#" class="form-details-actions-export"><span class="dashicons dashicons-migrate"></span> Export All (CSV)</a>
|
671 |
<a href="#" class="form-details-actions-read"><span class="dashicons dashicons-marker"></span> Mark All Read</a>
|
672 |
</div>
|
673 |
</div>
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: wpforms, jaredatch, smub, slaFFik
|
|
3 |
Tags: contact form, contact form plugin, forms, form builder, custom form, contact button, contact me, custom contact form, form manager, form, forms builder, forms creator, captcha, recaptcha, Akismet, email form, web form, feedback form, payment form, survey form, donation form, email submit form, message form, mailchimp, mailchimp form, aweber, aweber form, paypal, paypal form, stripe, stripe form, getresponse, getresponse form, email subscription, contact form widget, user registration form, wordpress registration, wordpress login form, feedback
|
4 |
Requires at least: 4.8
|
5 |
Tested up to: 5.2
|
6 |
-
Stable tag: 1.5.
|
7 |
Requires PHP: 5.3.3
|
8 |
License: GNU General Public License v2.0 or later
|
9 |
|
@@ -74,32 +74,60 @@ See what one business owner has to say about WPForms' contact form:
|
|
74 |
|
75 |
Along with contact form, you can also use WPForms to create surveys and polls.
|
76 |
|
77 |
-
Our <a href="https://wpforms.com/addons/surveys-and-polls-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">WordPress Survey plugin addon</a> comes with smart survey fields including likert scale, star ratings, multiple choice, Net Promoter Score (NPS), and more.
|
78 |
|
79 |
WPForms offer the best-in class survey reporting. You can use our interactive reports to customize the graphs, export them for your presentations, and even display the aggregate results to your users.
|
80 |
|
81 |
-
The best part about WPForms survey reports is that it can retroactively work on any old contact form created with WPForms.
|
82 |
|
83 |
-
|
|
|
|
|
84 |
|
85 |
Just like the contact form, you can embed your surveys and polls inside any post, page, or widget area in WordPress.
|
86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
= Payment Form, Donation Form, Booking Form, and More =
|
88 |
|
89 |
While WPForms started out as a contact form plugin, it has evolved into a powerful forms solution that you can use to create a payment form, donation form, registration form, online booking form, and more.
|
90 |
|
91 |
-
WPForms integrates with both PayPal and Stripe to
|
|
|
|
|
|
|
|
|
92 |
|
93 |
-
You can do all of this while still using the same easy-to-use contact form builder that's loved by over
|
94 |
|
95 |
>I am so impressed with this plugin. I decided to give it a shot over some of the other form plugins, and I am so glad I did. It works well, is so easy to use and customize. The support is amazing on top of it all. I got the pro version because I was so pleased. Highly recommend.<br>
|
96 |
> Micky73 - WordPress user
|
97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
= Easy to Customize and Extend =
|
99 |
|
100 |
-
You can easily customize your contact forms with our section dividers, HTML blocks,
|
101 |
|
102 |
-
We also knew that our developer friends may want to extend contact forms further. That's why WPForms come with tons of hooks and filters to create custom functionality.
|
103 |
|
104 |
Since contact forms are essential for marketing, WPForms is a must have plugin for every website!
|
105 |
|
@@ -165,7 +193,8 @@ If you like this plugin, then consider checking out our other projects:
|
|
165 |
* <a href="https://optinmonster.com/" rel="friend" title="OptinMonster">OptinMonster</a> - Get More Email Subscribers with the most popular conversion optimization plugin for WordPress.
|
166 |
* <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - See the Stats that Matter and Grow Your Business with Confidence. Best Google Analytics Plugin for WordPress.
|
167 |
* <a href="https://www.seedprod.com/" rel="friend" title="SeedProd">SeedProd</a> - Jumpstart your website with the #1 Coming Soon & Maintenance Mode Plugin for WordPress.
|
168 |
-
* <a href="https://
|
|
|
169 |
|
170 |
Visit <a href="http://www.wpbeginner.com/" rel="friend" title="WPBeginner">WPBeginner</a> to learn from our <a href="http://www.wpbeginner.com/category/wp-tutorials/" rel="friend" title="WordPress Tutorials">WordPress Tutorials</a> and find out about other <a href="http://www.wpbeginner.com/category/plugins/" rel="friend" title="Best WordPress Plugins">best WordPress plugins</a>.
|
171 |
|
@@ -201,60 +230,23 @@ Absolutely not. You can create and manage forms without any coding knowledge (10
|
|
201 |
WPForms drag & drop form builder combined with our addons is the most powerful WordPress contact form plugin in the market. Here are some types of WordPress forms you can create:
|
202 |
|
203 |
* Simple Contact Forms
|
204 |
-
* Advanced Contact Forms
|
205 |
-
* Custom Contact Forms
|
206 |
-
* Multi-Page Contact Forms with Progress Bar
|
207 |
-
* Dynamic Contact Forms (where fields change based on user's answers)
|
208 |
-
* Request a Quote Contact Form
|
209 |
* Job Application Contact Form
|
210 |
* Feedback Survey Contact Form
|
211 |
* Make a Suggestion Contact Form
|
212 |
-
* Testimonials Contact Form
|
213 |
* Change Request Forms
|
214 |
* Online Booking Forms
|
215 |
* Event Booking Form
|
216 |
-
* Online RSVP Forms
|
217 |
-
* Custom WordPress User Registration Forms (Great for membership sites)
|
218 |
-
* Custom WordPress Login Forms
|
219 |
-
* WordPress Post Submission Forms (Great for Guest Posts)
|
220 |
-
* Credit Card Payment Forms
|
221 |
-
* PayPal Payment Form
|
222 |
-
* Stripe Payment Form
|
223 |
-
* Make a Donation Forms
|
224 |
-
* T-Shirt Order Forms
|
225 |
-
* Product Purchase Forms
|
226 |
-
* Lead Capture Forms
|
227 |
-
* Newsletter Signup Forms
|
228 |
-
* MailChimp Forms
|
229 |
-
* AWeber Forms
|
230 |
-
* Constant Contact Forms
|
231 |
-
* GetResponse Signup Forms
|
232 |
-
* Campaign Monitor Forms
|
233 |
-
* Drip Forms
|
234 |
* Video Release Forms
|
235 |
-
* Partnership Agreement Forms
|
236 |
* PTO Request Contact Form
|
237 |
-
* Online Petition Form
|
238 |
-
* Contact Forms that Require a Signature
|
239 |
-
* Custom Signature Forms
|
240 |
* Maintenance Request Contact Form
|
241 |
* Scholarship Application Forms
|
242 |
* File Download Forms
|
243 |
* Employment Verification Forms
|
244 |
-
* Employee Feedback Form
|
245 |
-
* Customer Feedback Form
|
246 |
-
* Generic Feedback Form
|
247 |
* Make a Referral Contact Form
|
248 |
* Volunteer Registration Contact Form
|
249 |
-
* Membership Registration Forms
|
250 |
-
* Address Book Contact Forms
|
251 |
-
* Custom Survey Forms like Survey Monkey
|
252 |
-
* Poll Forms
|
253 |
* Offline Contact Form
|
254 |
-
|
255 |
-
|
256 |
-
* Conversational Forms like Typeform
|
257 |
-
* Custom Form Landing Page like Google Forms and Wufoo
|
258 |
|
259 |
= Which Form Fields Does WPForms offer? =
|
260 |
|
@@ -303,7 +295,7 @@ Here is a list of our Payment Fields that will help you create a order form, don
|
|
303 |
|
304 |
= Can I integrate WPForms with my CRM or Email Marketing Service? =
|
305 |
|
306 |
-
Yes, WPForms offers seamless integration with over 1,000+ popular marketing and CRM software
|
307 |
|
308 |
You can easily send data from your contact form and other WordPress forms to your favorite CRM, email newsletter, and other marketing platforms.
|
309 |
|
@@ -347,7 +339,9 @@ Using our Zapier integration, you can easily connect WPForms with over 1000+ mar
|
|
347 |
* Acuity Scheduling
|
348 |
* Quickbooks Online
|
349 |
|
350 |
-
|
|
|
|
|
351 |
|
352 |
= Can I create a Payment Form with WPForms =
|
353 |
|
@@ -407,6 +401,16 @@ Syed Balkhi
|
|
407 |
|
408 |
== Changelog ==
|
409 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
410 |
= 1.5.4.2 =
|
411 |
- Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
|
412 |
- Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
|
@@ -512,4 +516,4 @@ Syed Balkhi
|
|
512 |
- Fixed: reCAPTCHA compatibility when form is inside OptinMonster popup.
|
513 |
- Fixed: Gutenberg block returning error if no forms have been created.
|
514 |
|
515 |
-
[See changelog for all versions](https://plugins.svn.wordpress.org/wpforms-lite/trunk/changelog.txt).
|
3 |
Tags: contact form, contact form plugin, forms, form builder, custom form, contact button, contact me, custom contact form, form manager, form, forms builder, forms creator, captcha, recaptcha, Akismet, email form, web form, feedback form, payment form, survey form, donation form, email submit form, message form, mailchimp, mailchimp form, aweber, aweber form, paypal, paypal form, stripe, stripe form, getresponse, getresponse form, email subscription, contact form widget, user registration form, wordpress registration, wordpress login form, feedback
|
4 |
Requires at least: 4.8
|
5 |
Tested up to: 5.2
|
6 |
+
Stable tag: 1.5.5
|
7 |
Requires PHP: 5.3.3
|
8 |
License: GNU General Public License v2.0 or later
|
9 |
|
74 |
|
75 |
Along with contact form, you can also use WPForms to create surveys and polls.
|
76 |
|
77 |
+
Our <a href="https://wpforms.com/addons/surveys-and-polls-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">WordPress Survey plugin addon</a> comes with smart survey fields including likert scale, star ratings, multiple choice, Net Promoter Score (NPS), and more, so you can create custom survey forms like Survey Monkey (without the high costs).
|
78 |
|
79 |
WPForms offer the best-in class survey reporting. You can use our interactive reports to customize the graphs, export them for your presentations, and even display the aggregate results to your users.
|
80 |
|
81 |
+
The best part about WPForms survey reports is that it can retroactively work on any old contact form or feedback survey contact form created with WPForms.
|
82 |
|
83 |
+
Thousands of businesses love WPForms surveys for creating employee feedback form, customer feedback form, online petition form, and more.
|
84 |
+
|
85 |
+
You can also use the surveys & polls addon to easily create a poll on your site. To save you time when creating a user poll, we have added a built-in poll forms template. Our poll feature offers real-time reports, so you can share poll results with the user immediately after they submit their vote.
|
86 |
|
87 |
Just like the contact form, you can embed your surveys and polls inside any post, page, or widget area in WordPress.
|
88 |
|
89 |
+
= Membership and Default WordPress Forms =
|
90 |
+
|
91 |
+
Aside from building simple contact forms which every WordPress site needs, WPForms also helps you create better default WordPress forms.
|
92 |
+
|
93 |
+
For example, you can use WPForms to create custom WordPress login forms and custom WordPress user registration forms which are great for <a href="https://www.wpbeginner.com/wp-tutorials/ultimate-guide-to-creating-a-wordpress-membership-site/">membership sites</a>.
|
94 |
+
|
95 |
+
For membership sites, you can also use WPForms to create a password-protected contact form or even a members only contact form which is restricited to logged-in users only.
|
96 |
+
|
97 |
+
Even if you're not using a WordPress membership plugin, you can use WPForms to create membership registration forms, online RSVP forms, and other address book contact forms.
|
98 |
+
|
99 |
+
Bloggers and publishers can use our WordPress post submission forms to accept guest posts, testimonials contact form to collect testiomnials, and partnership agreement forms to grow their business.
|
100 |
+
|
101 |
= Payment Form, Donation Form, Booking Form, and More =
|
102 |
|
103 |
While WPForms started out as a contact form plugin, it has evolved into a powerful forms solution that you can use to create a payment form, donation form, registration form, online booking form, and more.
|
104 |
|
105 |
+
WPForms integrates with both PayPal and Stripe, so you can easily create a credit card payment form to accept payments on your website. If you're using SSL, then you can use our Stripe Payment form to accept credit card payments. Alternatively you can use our PayPal payment form to make a donation form and accept payments online.
|
106 |
+
|
107 |
+
Aside from simple order forms, business owners also use WPForms to create custom product purchase forms, t-shit order forms, online booking forms, and more.
|
108 |
+
|
109 |
+
We understand that sometimes you may need to create a contact form that require a signature. WPForms comes with a signature field to collect user signature on your WordPress forms or even create custom signature forms.
|
110 |
|
111 |
+
You can do all of this while still using the same easy-to-use contact form builder that's loved by over 2 million users.
|
112 |
|
113 |
>I am so impressed with this plugin. I decided to give it a shot over some of the other form plugins, and I am so glad I did. It works well, is so easy to use and customize. The support is amazing on top of it all. I got the pro version because I was so pleased. Highly recommend.<br>
|
114 |
> Micky73 - WordPress user
|
115 |
|
116 |
+
= Forms that are Optimized for Conversion and Results =
|
117 |
+
|
118 |
+
With our Form Pages addon, you can create distraction-free custom form landing pages like Google Forms and Wufoo right inside WordPress, so you can increase conversions without the high costs (<a href="https://wpforms.com/addons/form-pages-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">See Form Pages Demo</a>).
|
119 |
+
|
120 |
+
To improve form completion rate, we created Conversational Forms® which helps you make your generic feedback form and other custom contact forms feel more human by adding an interactive form layout. Our conversational forms are similar to Typeform without the high subscription costs (<a href="https://wpforms.com/addons/conversational-forms-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">See Conversaional Forms Demo</a>).
|
121 |
+
|
122 |
+
WPForms also has other conversion optimization features such as our smart form logic that lets you create dynamic contact forms where fields change based on user's answer, multi-page contact forms with progress bar, and other advanced contact forms.
|
123 |
+
|
124 |
+
WPForms form analytics integration with MonsterInsights allow you to easily track your lead capture forms, newsletter signup forms, request a quote contact form, and other important forms on your site.
|
125 |
+
|
126 |
= Easy to Customize and Extend =
|
127 |
|
128 |
+
You can easily customize your contact forms with our section dividers, HTML blocks, and custom CSS.
|
129 |
|
130 |
+
We also knew that our developer friends may want to extend simple contact forms further. That's why WPForms come with tons of hooks and filters to create custom functionality.
|
131 |
|
132 |
Since contact forms are essential for marketing, WPForms is a must have plugin for every website!
|
133 |
|
193 |
* <a href="https://optinmonster.com/" rel="friend" title="OptinMonster">OptinMonster</a> - Get More Email Subscribers with the most popular conversion optimization plugin for WordPress.
|
194 |
* <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - See the Stats that Matter and Grow Your Business with Confidence. Best Google Analytics Plugin for WordPress.
|
195 |
* <a href="https://www.seedprod.com/" rel="friend" title="SeedProd">SeedProd</a> - Jumpstart your website with the #1 Coming Soon & Maintenance Mode Plugin for WordPress.
|
196 |
+
* <a href="https://wpmailsmtp.com">WP Mail SMTP</a> - Improve email deliverability for your contact form with the most popular SMTP plugin for WordPress.
|
197 |
+
* <a href="https://rafflepress.com/">RafflePress</a> - Best WordPress giveaway and contest plugin.
|
198 |
|
199 |
Visit <a href="http://www.wpbeginner.com/" rel="friend" title="WPBeginner">WPBeginner</a> to learn from our <a href="http://www.wpbeginner.com/category/wp-tutorials/" rel="friend" title="WordPress Tutorials">WordPress Tutorials</a> and find out about other <a href="http://www.wpbeginner.com/category/plugins/" rel="friend" title="Best WordPress Plugins">best WordPress plugins</a>.
|
200 |
|
230 |
WPForms drag & drop form builder combined with our addons is the most powerful WordPress contact form plugin in the market. Here are some types of WordPress forms you can create:
|
231 |
|
232 |
* Simple Contact Forms
|
|
|
|
|
|
|
|
|
|
|
233 |
* Job Application Contact Form
|
234 |
* Feedback Survey Contact Form
|
235 |
* Make a Suggestion Contact Form
|
|
|
236 |
* Change Request Forms
|
237 |
* Online Booking Forms
|
238 |
* Event Booking Form
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
* Video Release Forms
|
|
|
240 |
* PTO Request Contact Form
|
|
|
|
|
|
|
241 |
* Maintenance Request Contact Form
|
242 |
* Scholarship Application Forms
|
243 |
* File Download Forms
|
244 |
* Employment Verification Forms
|
|
|
|
|
|
|
245 |
* Make a Referral Contact Form
|
246 |
* Volunteer Registration Contact Form
|
|
|
|
|
|
|
|
|
247 |
* Offline Contact Form
|
248 |
+
|
249 |
+
To see a full list, visit our <a href="https://wpforms.com/demo/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Form Template Gallery</a> which has over 150+ pre-made contact form templates.
|
|
|
|
|
250 |
|
251 |
= Which Form Fields Does WPForms offer? =
|
252 |
|
295 |
|
296 |
= Can I integrate WPForms with my CRM or Email Marketing Service? =
|
297 |
|
298 |
+
Yes, WPForms offers seamless integration with over 1,000+ popular <a href="https://www.wpbeginner.com/showcase/best-email-marketing-services/">email marketing</a> and <a href="https://www.wpbeginner.com/showcase/best-crm-software-for-small-businesses-compared/">CRM software</a>.
|
299 |
|
300 |
You can easily send data from your contact form and other WordPress forms to your favorite CRM, email newsletter, and other marketing platforms.
|
301 |
|
339 |
* Acuity Scheduling
|
340 |
* Quickbooks Online
|
341 |
|
342 |
+
See all <a href="https://zapier.com/apps/wpforms/integrations">WPForms Zapier Integrations</a>.
|
343 |
+
|
344 |
+
Note: WPForms was voted Zapier's 8th fastest growing app in the world.
|
345 |
|
346 |
= Can I create a Payment Form with WPForms =
|
347 |
|
401 |
|
402 |
== Changelog ==
|
403 |
|
404 |
+
= 1.5.5 =
|
405 |
+
- Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info).
|
406 |
+
- Added: Filter `wpforms_emails_summaries_is_disabled` to easily disable Email Summaries functionality.
|
407 |
+
- Added: New smart tag: `{field_html_id="42"}` - that will postprocess field value and display its HTML representation.
|
408 |
+
- Changed: Improve `wpforms_get_ip()` IP detection and related `{user_ip}` smart-tag value.
|
409 |
+
- Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well.
|
410 |
+
- Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields.
|
411 |
+
- Fixed: Various typos.
|
412 |
+
- Fixed: WP Mail SMTP plugin description on About us page.
|
413 |
+
|
414 |
= 1.5.4.2 =
|
415 |
- Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
|
416 |
- Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
|
516 |
- Fixed: reCAPTCHA compatibility when form is inside OptinMonster popup.
|
517 |
- Fixed: Gutenberg block returning error if no forms have been created.
|
518 |
|
519 |
+
[See changelog for all versions](https://plugins.svn.wordpress.org/wpforms-lite/trunk/changelog.txt).
|
src/Admin/Loader.php
CHANGED
@@ -37,10 +37,14 @@ class Loader {
|
|
37 |
public function __construct() {
|
38 |
|
39 |
$core_class_names = array(
|
|
|
40 |
'DashboardWidget',
|
41 |
'Challenge',
|
42 |
'Builder\Education',
|
|
|
43 |
'Entries\PrintPreview',
|
|
|
|
|
44 |
);
|
45 |
|
46 |
$class_names = \apply_filters( 'wpforms_admin_classes_available', $core_class_names );
|
37 |
public function __construct() {
|
38 |
|
39 |
$core_class_names = array(
|
40 |
+
'Connect',
|
41 |
'DashboardWidget',
|
42 |
'Challenge',
|
43 |
'Builder\Education',
|
44 |
+
'Settings\Education',
|
45 |
'Entries\PrintPreview',
|
46 |
+
'Entries\DefaultScreen',
|
47 |
+
'Entries\Export\Export',
|
48 |
);
|
49 |
|
50 |
$class_names = \apply_filters( 'wpforms_admin_classes_available', $core_class_names );
|
src/Emails/Summaries.php
CHANGED
@@ -21,7 +21,7 @@ class Summaries {
|
|
21 |
|
22 |
$this->hooks();
|
23 |
|
24 |
-
$summaries_disabled = $this->
|
25 |
|
26 |
if ( $summaries_disabled && \wp_next_scheduled( 'wpforms_email_summaries_cron' ) ) {
|
27 |
\wp_clear_scheduled_hook( 'wpforms_email_summaries_cron' );
|
@@ -57,7 +57,7 @@ class Summaries {
|
|
57 |
|
58 |
\add_filter( 'wpforms_settings_defaults', array( $this, 'disable_summaries_setting' ) );
|
59 |
|
60 |
-
if ( ! $this->
|
61 |
\add_action( 'init', array( $this, 'preview' ) );
|
62 |
\add_filter( 'cron_schedules', array( $this, 'add_weekly_cron_schedule' ) );
|
63 |
\add_action( 'wpforms_email_summaries_cron', array( $this, 'cron' ) );
|
@@ -71,9 +71,9 @@ class Summaries {
|
|
71 |
*
|
72 |
* @return bool
|
73 |
*/
|
74 |
-
protected function
|
75 |
|
76 |
-
return (bool) \wpforms_setting( 'email-summaries-disable' );
|
77 |
}
|
78 |
|
79 |
/**
|
@@ -87,6 +87,10 @@ class Summaries {
|
|
87 |
*/
|
88 |
public function disable_summaries_setting( $settings ) {
|
89 |
|
|
|
|
|
|
|
|
|
90 |
$url = \add_query_arg(
|
91 |
array(
|
92 |
'wpforms_email_template' => 'summary',
|
@@ -97,7 +101,7 @@ class Summaries {
|
|
97 |
|
98 |
$desc = \esc_html__( 'Disable Email Summaries weekly delivery.', 'wpforms-lite' );
|
99 |
|
100 |
-
if ( ! $this->
|
101 |
$desc .= '<br><a href="' . $url . '" target="_blank">' . \esc_html__( 'View Email Summary Example', 'wpforms-lite' ) . '</a>';
|
102 |
}
|
103 |
|
21 |
|
22 |
$this->hooks();
|
23 |
|
24 |
+
$summaries_disabled = $this->is_disabled();
|
25 |
|
26 |
if ( $summaries_disabled && \wp_next_scheduled( 'wpforms_email_summaries_cron' ) ) {
|
27 |
\wp_clear_scheduled_hook( 'wpforms_email_summaries_cron' );
|
57 |
|
58 |
\add_filter( 'wpforms_settings_defaults', array( $this, 'disable_summaries_setting' ) );
|
59 |
|
60 |
+
if ( ! $this->is_disabled() ) {
|
61 |
\add_action( 'init', array( $this, 'preview' ) );
|
62 |
\add_filter( 'cron_schedules', array( $this, 'add_weekly_cron_schedule' ) );
|
63 |
\add_action( 'wpforms_email_summaries_cron', array( $this, 'cron' ) );
|
71 |
*
|
72 |
* @return bool
|
73 |
*/
|
74 |
+
protected function is_disabled() {
|
75 |
|
76 |
+
return (bool) apply_filters( 'wpforms_emails_summaries_is_disabled', (bool) \wpforms_setting( 'email-summaries-disable' ) );
|
77 |
}
|
78 |
|
79 |
/**
|
87 |
*/
|
88 |
public function disable_summaries_setting( $settings ) {
|
89 |
|
90 |
+
if ( (bool) apply_filters( 'wpforms_emails_summaries_is_disabled', false ) ) {
|
91 |
+
return $settings;
|
92 |
+
}
|
93 |
+
|
94 |
$url = \add_query_arg(
|
95 |
array(
|
96 |
'wpforms_email_template' => 'summary',
|
101 |
|
102 |
$desc = \esc_html__( 'Disable Email Summaries weekly delivery.', 'wpforms-lite' );
|
103 |
|
104 |
+
if ( ! $this->is_disabled() ) {
|
105 |
$desc .= '<br><a href="' . $url . '" target="_blank">' . \esc_html__( 'View Email Summary Example', 'wpforms-lite' ) . '</a>';
|
106 |
}
|
107 |
|
src/Integrations/Gutenberg/FormSelector.php
CHANGED
@@ -104,7 +104,7 @@ class FormSelector implements IntegrationInterface {
|
|
104 |
'show_title' => \esc_html__( 'Show Title', 'wpforms-lite' ),
|
105 |
'show_description' => \esc_html__( 'Show Description', 'wpforms-lite' ),
|
106 |
'panel_notice_head' => \esc_html__( 'Heads up!', 'wpforms-lite' ),
|
107 |
-
'panel_notice_text' => \esc_html__( '
|
108 |
'panel_notice_link' => \esc_html__( 'Check out our complete guide!', 'wpforms-lite' ),
|
109 |
);
|
110 |
|
104 |
'show_title' => \esc_html__( 'Show Title', 'wpforms-lite' ),
|
105 |
'show_description' => \esc_html__( 'Show Description', 'wpforms-lite' ),
|
106 |
'panel_notice_head' => \esc_html__( 'Heads up!', 'wpforms-lite' ),
|
107 |
+
'panel_notice_text' => \esc_html__( 'Do not forget to test your form.', 'wpforms-lite' ),
|
108 |
'panel_notice_link' => \esc_html__( 'Check out our complete guide!', 'wpforms-lite' ),
|
109 |
);
|
110 |
|
src/Integrations/Loader.php
CHANGED
@@ -38,6 +38,7 @@ class Loader {
|
|
38 |
|
39 |
$core_integrations = array(
|
40 |
new Gutenberg\FormSelector(),
|
|
|
41 |
new WPMailSMTP\Notifications(),
|
42 |
);
|
43 |
|
38 |
|
39 |
$core_integrations = array(
|
40 |
new Gutenberg\FormSelector(),
|
41 |
+
new SiteHealth\SiteHealth(),
|
42 |
new WPMailSMTP\Notifications(),
|
43 |
);
|
44 |
|
src/Integrations/SiteHealth/SiteHealth.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WPForms\Integrations\SiteHealth;
|
4 |
+
|
5 |
+
use WPForms\Integrations\IntegrationInterface;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Site Health WPForms Info.
|
9 |
+
*
|
10 |
+
* @since 1.5.5
|
11 |
+
* @author WPForms
|
12 |
+
* @package WPForms\Integrations\SiteHealth
|
13 |
+
* @license GPL-2.0+
|
14 |
+
* @copyright Copyright (c) 2019, WPForms LLC
|
15 |
+
*/
|
16 |
+
class SiteHealth implements IntegrationInterface {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Indicates if current integration is allowed to load.
|
20 |
+
*
|
21 |
+
* @since 1.5.5
|
22 |
+
*
|
23 |
+
* @return bool
|
24 |
+
*/
|
25 |
+
public function allow_load() {
|
26 |
+
|
27 |
+
global $wp_version;
|
28 |
+
|
29 |
+
return version_compare( $wp_version, '5.2', '>=' );
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Loads an integration.
|
34 |
+
*
|
35 |
+
* @since 1.5.5
|
36 |
+
*/
|
37 |
+
public function load() {
|
38 |
+
|
39 |
+
$this->hooks();
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Integration hooks.
|
44 |
+
*
|
45 |
+
* @since 1.5.5
|
46 |
+
*/
|
47 |
+
protected function hooks() {
|
48 |
+
|
49 |
+
\add_filter( 'debug_information', array( $this, 'add_info_section' ) );
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Add WPForms section to .
|
54 |
+
*
|
55 |
+
* @since 1.5.5
|
56 |
+
*
|
57 |
+
* @param array $debug_info Array of all information.
|
58 |
+
*
|
59 |
+
* @return array Array with added WPForms info section.
|
60 |
+
*/
|
61 |
+
public function add_info_section( $debug_info ) {
|
62 |
+
|
63 |
+
$wpforms = array(
|
64 |
+
'label' => 'WPForms',
|
65 |
+
'fields' => array(
|
66 |
+
'version' => array(
|
67 |
+
'label' => esc_html__( 'Version', 'wpforms-lite' ),
|
68 |
+
'value' => WPFORMS_VERSION,
|
69 |
+
),
|
70 |
+
),
|
71 |
+
);
|
72 |
+
|
73 |
+
// License key type.
|
74 |
+
$wpforms['fields']['license'] = array(
|
75 |
+
'label' => esc_html__( 'License key type', 'wpforms-lite' ),
|
76 |
+
'value' => wpforms_setting( 'type', '', 'wpforms_license' ),
|
77 |
+
);
|
78 |
+
|
79 |
+
// Install date.
|
80 |
+
$activated = get_option( 'wpforms_activated', array() );
|
81 |
+
if ( ! empty( $activated['lite'] ) ) {
|
82 |
+
$date = $activated['lite'] + ( get_option( 'gmt_offset' ) * 3600 );
|
83 |
+
|
84 |
+
$wpforms['fields']['lite'] = array(
|
85 |
+
'label' => esc_html__( 'Lite install date', 'wpforms-lite' ),
|
86 |
+
'value' => date_i18n( esc_html__( 'M j, Y @ g:ia' ), $date ),
|
87 |
+
);
|
88 |
+
}
|
89 |
+
if ( ! empty( $activated['pro'] ) ) {
|
90 |
+
$date = $activated['pro'] + ( get_option( 'gmt_offset' ) * 3600 );
|
91 |
+
|
92 |
+
$wpforms['fields']['pro'] = array(
|
93 |
+
'label' => esc_html__( 'Pro install date', 'wpforms-lite' ),
|
94 |
+
'value' => date_i18n( esc_html__( 'M j, Y @ g:ia' ), $date ),
|
95 |
+
);
|
96 |
+
}
|
97 |
+
|
98 |
+
// DB tables.
|
99 |
+
global $wpdb;
|
100 |
+
$results = $wpdb->get_results( "SHOW TABLES LIKE '" . $wpdb->prefix . "wpforms_%'", 'ARRAY_N' ); // phpcs:ignore
|
101 |
+
$results = wp_list_pluck( $results, 0 );
|
102 |
+
$db_tables = empty( $results ) ? esc_html__( 'Not found', 'wpforms-lite' ) : implode( ', ', $results );
|
103 |
+
|
104 |
+
$wpforms['fields']['db_tables'] = array(
|
105 |
+
'label' => esc_html__( 'DB tables', 'wpforms-lite' ),
|
106 |
+
'value' => $db_tables,
|
107 |
+
);
|
108 |
+
|
109 |
+
// Total forms.
|
110 |
+
$wpforms['fields']['total_forms'] = array(
|
111 |
+
'label' => esc_html__( 'Total forms', 'wpforms-lite' ),
|
112 |
+
'value' => wp_count_posts( 'wpforms' )->publish,
|
113 |
+
);
|
114 |
+
|
115 |
+
// Total entries.
|
116 |
+
if ( wpforms()->pro ) {
|
117 |
+
$wpforms['fields']['total_entries'] = array(
|
118 |
+
'label' => esc_html__( 'Total entries', 'wpforms-lite' ),
|
119 |
+
'value' => wpforms()->entry->get_entries( array(), true ),
|
120 |
+
);
|
121 |
+
} else {
|
122 |
+
$forms = \wpforms()->form->get( '', array( 'fields' => 'ids' ) );
|
123 |
+
|
124 |
+
if ( empty( $forms ) || ! \is_array( $forms ) ) {
|
125 |
+
$forms = array();
|
126 |
+
}
|
127 |
+
|
128 |
+
$count = 0;
|
129 |
+
|
130 |
+
foreach ( $forms as $form_id ) {
|
131 |
+
$count += (int) \get_post_meta( $form_id, 'wpforms_entries_count', true );
|
132 |
+
}
|
133 |
+
|
134 |
+
$wpforms['fields']['total_entries'] = array(
|
135 |
+
'label' => esc_html__( 'Total submissions (since v1.5.0)', 'wpforms-lite' ),
|
136 |
+
'value' => $count,
|
137 |
+
);
|
138 |
+
}
|
139 |
+
|
140 |
+
$debug_info[] = $wpforms;
|
141 |
+
|
142 |
+
return $debug_info;
|
143 |
+
}
|
144 |
+
}
|
src/Lite/Admin/Builder/Education.php
CHANGED
@@ -36,6 +36,8 @@ class Education {
|
|
36 |
return;
|
37 |
}
|
38 |
|
|
|
|
|
39 |
\add_filter( 'wpforms_lite_builder_strings', array( $this, 'js_strings' ) );
|
40 |
|
41 |
\add_action( 'wpforms_builder_enqueues_before', array( $this, 'enqueues' ) );
|
@@ -318,7 +320,33 @@ class Education {
|
|
318 |
return $fields;
|
319 |
}
|
320 |
|
321 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
* Display settings panels.
|
323 |
*
|
324 |
* @since 1.5.1
|
@@ -394,38 +422,7 @@ class Education {
|
|
394 |
*/
|
395 |
public function providers() {
|
396 |
|
397 |
-
$providers =
|
398 |
-
array(
|
399 |
-
'name' => 'AWeber',
|
400 |
-
'slug' => 'aweber',
|
401 |
-
'img' => 'addon-icon-aweber.png',
|
402 |
-
),
|
403 |
-
array(
|
404 |
-
'name' => 'Campaign Monitor',
|
405 |
-
'slug' => 'campaign-monitor',
|
406 |
-
'img' => 'addon-icon-campaign-monitor.png',
|
407 |
-
),
|
408 |
-
array(
|
409 |
-
'name' => 'Drip',
|
410 |
-
'slug' => 'drip',
|
411 |
-
'img' => 'addon-icon-drip.png',
|
412 |
-
),
|
413 |
-
array(
|
414 |
-
'name' => 'GetResponse',
|
415 |
-
'slug' => 'getresponse',
|
416 |
-
'img' => 'addon-icon-getresponse.png',
|
417 |
-
),
|
418 |
-
array(
|
419 |
-
'name' => 'MailChimp',
|
420 |
-
'slug' => 'mailchimp',
|
421 |
-
'img' => 'addon-icon-mailchimp.png',
|
422 |
-
),
|
423 |
-
array(
|
424 |
-
'name' => 'Zapier',
|
425 |
-
'slug' => 'zapier',
|
426 |
-
'img' => 'addon-icon-zapier.png',
|
427 |
-
),
|
428 |
-
);
|
429 |
|
430 |
foreach ( $providers as $provider ) {
|
431 |
|
36 |
return;
|
37 |
}
|
38 |
|
39 |
+
\add_action( 'wpforms_field_options_after_advanced-options', array( $this, 'field_conditional_logic' ), 10, 2 );
|
40 |
+
|
41 |
\add_filter( 'wpforms_lite_builder_strings', array( $this, 'js_strings' ) );
|
42 |
|
43 |
\add_action( 'wpforms_builder_enqueues_before', array( $this, 'enqueues' ) );
|
320 |
return $fields;
|
321 |
}
|
322 |
|
323 |
+
/**
|
324 |
+
* Displays conditional logic settings section for fields inside the form builder.
|
325 |
+
*
|
326 |
+
* @since 1.5.5
|
327 |
+
*
|
328 |
+
* @param array $field Field data.
|
329 |
+
* @param object $instance Builder instance.
|
330 |
+
*/
|
331 |
+
public function field_conditional_logic( $field, $instance ) {
|
332 |
+
|
333 |
+
// Certain fields don't support conditional logic.
|
334 |
+
if ( in_array( $field['type'], array( 'pagebreak', 'divider', 'hidden' ), true ) ) {
|
335 |
+
return;
|
336 |
+
}
|
337 |
+
?>
|
338 |
+
|
339 |
+
<div class="wpforms-field-option-group">
|
340 |
+
|
341 |
+
<a href="#" class="wpforms-field-option-group-toggle upgrade-modal" data-name="Conditional Logic">
|
342 |
+
<?php esc_html_e( 'Conditionals', 'wpforms-lite' ); ?> <i class="fa fa-angle-right"></i>
|
343 |
+
</a>
|
344 |
+
|
345 |
+
</div>
|
346 |
+
<?php
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
* Display settings panels.
|
351 |
*
|
352 |
* @since 1.5.1
|
422 |
*/
|
423 |
public function providers() {
|
424 |
|
425 |
+
$providers = wpforms_get_providers_all();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
426 |
|
427 |
foreach ( $providers as $provider ) {
|
428 |
|
src/Lite/Admin/Connect.php
ADDED
@@ -0,0 +1,301 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WPForms\Lite\Admin;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* WPForms Connect.
|
7 |
+
*
|
8 |
+
* WPForms Connect is our service that makes it easy for non-techy users to
|
9 |
+
* upgrade to WPForms Pro without having to manually install WPForms Pro plugin.
|
10 |
+
*
|
11 |
+
* @package WPForms\Admin
|
12 |
+
* @author WPForms
|
13 |
+
* @since 1.5.5
|
14 |
+
* @license GPL-2.0+
|
15 |
+
* @copyright Copyright (c) 2019, WPForms LLC
|
16 |
+
*/
|
17 |
+
class Connect {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Constructor.
|
21 |
+
*
|
22 |
+
* @since 1.5.5
|
23 |
+
*/
|
24 |
+
public function __construct() {
|
25 |
+
|
26 |
+
$this->hooks();
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Hooks.
|
31 |
+
*
|
32 |
+
* @since 1.5.5
|
33 |
+
*/
|
34 |
+
public function hooks() {
|
35 |
+
|
36 |
+
\add_action( 'wpforms_settings_enqueue', array( $this, 'settings_enqueues' ) );
|
37 |
+
|
38 |
+
\add_action( 'wp_ajax_wpforms_connect_url', array( $this, 'generate_url' ) );
|
39 |
+
|
40 |
+
\add_action( 'wp_ajax_nopriv_wpforms_connect_process', array( $this, 'process' ) );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Settings page enqueues.
|
45 |
+
*
|
46 |
+
* @since 1.5.5
|
47 |
+
*/
|
48 |
+
public function settings_enqueues() {
|
49 |
+
|
50 |
+
$min = \wpforms_get_min_suffix();
|
51 |
+
|
52 |
+
\wp_enqueue_script(
|
53 |
+
'wpforms-connect',
|
54 |
+
\WPFORMS_PLUGIN_URL . "lite/assets/js/admin/connect{$min}.js",
|
55 |
+
array( 'jquery' ),
|
56 |
+
\WPFORMS_VERSION,
|
57 |
+
true
|
58 |
+
);
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Generates and returns WPForms Connect URL.
|
63 |
+
*
|
64 |
+
* @since 1.5.5
|
65 |
+
*/
|
66 |
+
public function generate_url() {
|
67 |
+
|
68 |
+
$this->init_error_handler();
|
69 |
+
|
70 |
+
try {
|
71 |
+
|
72 |
+
// Run a security check.
|
73 |
+
\check_ajax_referer( 'wpforms-admin', 'nonce' );
|
74 |
+
|
75 |
+
// Check for permissions.
|
76 |
+
if ( ! \current_user_can( 'install_plugins' ) ) {
|
77 |
+
\wp_send_json_error(
|
78 |
+
array(
|
79 |
+
'message' => \esc_html__( 'Sorry, you do not have permission to install plugins.', 'wpforms-lite' )
|
80 |
+
)
|
81 |
+
);
|
82 |
+
}
|
83 |
+
|
84 |
+
$key = ! empty( $_POST['key'] ) ? \sanitize_text_field( \wp_unslash( $_POST['key'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
|
85 |
+
|
86 |
+
if ( empty( $key ) ) {
|
87 |
+
\wp_send_json_error(
|
88 |
+
array(
|
89 |
+
'message' => \esc_html__( 'Please enter your license key to connect.', 'wpforms-lite' )
|
90 |
+
)
|
91 |
+
);
|
92 |
+
}
|
93 |
+
|
94 |
+
if ( wpforms()->pro ) {
|
95 |
+
\wp_send_json_error(
|
96 |
+
array( 'message' => \esc_html__( 'Only the Lite version can upgrade.', 'wpforms-lite' )
|
97 |
+
)
|
98 |
+
);
|
99 |
+
}
|
100 |
+
|
101 |
+
// Verify pro version is not installed.
|
102 |
+
$active = \activate_plugin( 'wpforms/wpforms.php', false, false, true );
|
103 |
+
|
104 |
+
if ( ! \is_wp_error( $active ) ) {
|
105 |
+
|
106 |
+
// Deactivate Lite.
|
107 |
+
\deactivate_plugins( \plugin_basename( WPFORMS_PLUGIN_FILE ) );
|
108 |
+
|
109 |
+
\wp_send_json_success(
|
110 |
+
array(
|
111 |
+
'message' => \esc_html__( 'WPForms Pro was already installed and has not been activated.', 'wpforms-lite' ),
|
112 |
+
'reload' => true,
|
113 |
+
)
|
114 |
+
);
|
115 |
+
}
|
116 |
+
|
117 |
+
// Generate URL.
|
118 |
+
$oth = hash( 'sha512', \wp_rand() );
|
119 |
+
|
120 |
+
\update_option( 'wpforms_connect_token', $oth );
|
121 |
+
\update_option( 'wpforms_connect', $key );
|
122 |
+
|
123 |
+
$version = WPFORMS_VERSION;
|
124 |
+
$endpoint = \admin_url( 'admin-ajax.php' );
|
125 |
+
$redirect = \admin_url( 'admin.php?page=wpforms-settings' );
|
126 |
+
$url = \add_query_arg(
|
127 |
+
array(
|
128 |
+
'key' => $key,
|
129 |
+
'oth' => $oth,
|
130 |
+
'endpoint' => $endpoint,
|
131 |
+
'version' => $version,
|
132 |
+
'siteurl' => \admin_url(),
|
133 |
+
'homeurl' => \home_url(),
|
134 |
+
'redirect' => rawurldecode( base64_encode( $redirect ) ), // phpcs:ignore
|
135 |
+
'v' => 2,
|
136 |
+
),
|
137 |
+
'https://upgrade.wpforms.com'
|
138 |
+
);
|
139 |
+
|
140 |
+
\wp_send_json_success(
|
141 |
+
array(
|
142 |
+
'url' => $url,
|
143 |
+
'back_url' => \add_query_arg(
|
144 |
+
array(
|
145 |
+
'action' => 'wpforms_connect',
|
146 |
+
'oth' => $oth,
|
147 |
+
),
|
148 |
+
$endpoint
|
149 |
+
),
|
150 |
+
)
|
151 |
+
);
|
152 |
+
|
153 |
+
} catch ( \Exception $e ) {
|
154 |
+
|
155 |
+
\wp_send_json_error(
|
156 |
+
array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() )
|
157 |
+
);
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Process WPForms Connect.
|
163 |
+
*
|
164 |
+
* @since 1.5.5
|
165 |
+
*/
|
166 |
+
public function process() {
|
167 |
+
|
168 |
+
$this->init_error_handler();
|
169 |
+
|
170 |
+
try {
|
171 |
+
|
172 |
+
$error = esc_html__( 'Could not install upgrade. Please download from wpforms.com and install manually.', 'wpforms-lite' );
|
173 |
+
|
174 |
+
// Verify params present (oth & download link).
|
175 |
+
$post_oth = ! empty( $_REQUEST['oth'] ) ? \sanitize_text_field( \wp_unslash( $_REQUEST['oth'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
|
176 |
+
$post_url = ! empty( $_REQUEST['file'] ) ? \esc_url_raw( \wp_unslash( $_REQUEST['file'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
|
177 |
+
|
178 |
+
if ( empty( $post_oth ) || empty( $post_url ) ) {
|
179 |
+
\wp_send_json_error( $error );
|
180 |
+
}
|
181 |
+
|
182 |
+
// Verify oth.
|
183 |
+
$oth = \get_option( 'wpforms_connect_token' );
|
184 |
+
|
185 |
+
if ( empty( $oth ) || ! hash_equals( $oth, $post_oth ) ) {
|
186 |
+
\wp_send_json_error( $error );
|
187 |
+
}
|
188 |
+
|
189 |
+
// Delete so cannot replay.
|
190 |
+
\delete_option( 'wpforms_connect_token' );
|
191 |
+
|
192 |
+
// Set the current screen to avoid undefined notices.
|
193 |
+
\set_current_screen( 'wpforms_page_wpforms-settings' );
|
194 |
+
|
195 |
+
// Prepare variables.
|
196 |
+
$url = \esc_url_raw(
|
197 |
+
\add_query_arg(
|
198 |
+
array(
|
199 |
+
'page' => 'wpforms-settings',
|
200 |
+
),
|
201 |
+
\admin_url( 'admin.php' )
|
202 |
+
)
|
203 |
+
);
|
204 |
+
|
205 |
+
// Verify pro not activated.
|
206 |
+
if ( wpforms()->pro ) {
|
207 |
+
\wp_send_json_success( \esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
|
208 |
+
}
|
209 |
+
|
210 |
+
// Verify pro not installed.
|
211 |
+
$active = \activate_plugin( 'wpforms/wpforms.php', $url, false, true );
|
212 |
+
|
213 |
+
if ( ! \is_wp_error( $active ) ) {
|
214 |
+
\deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
|
215 |
+
\wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
|
216 |
+
}
|
217 |
+
|
218 |
+
$creds = \request_filesystem_credentials( $url, '', false, false, null );
|
219 |
+
|
220 |
+
// Check for file system permissions.
|
221 |
+
$perm_error = \esc_html__( 'Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually.', 'wpforms-lite' );
|
222 |
+
|
223 |
+
if ( false === $creds || ! \WP_Filesystem( $creds ) ) {
|
224 |
+
\wp_send_json_error( $perm_error );
|
225 |
+
}
|
226 |
+
|
227 |
+
// We do not need any extra credentials if we have gotten this far, so let's install the plugin.
|
228 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
229 |
+
|
230 |
+
// Do not allow WordPress to search/download translations, as this will break JS output.
|
231 |
+
\remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
|
232 |
+
|
233 |
+
// Create the plugin upgrader with our custom skin.
|
234 |
+
$installer = new \Plugin_Upgrader( new ConnectSkin() );
|
235 |
+
|
236 |
+
// Error check.
|
237 |
+
if ( ! method_exists( $installer, 'install' ) ) {
|
238 |
+
\wp_send_json_error( $error );
|
239 |
+
}
|
240 |
+
|
241 |
+
// Check license key.
|
242 |
+
$key = \get_option( 'wpforms_connect', false );
|
243 |
+
|
244 |
+
if ( empty( $key ) ) {
|
245 |
+
\wp_send_json_error(
|
246 |
+
new WP_Error(
|
247 |
+
'403',
|
248 |
+
\esc_html__( 'No key provided.', 'wpforms-lite' )
|
249 |
+
)
|
250 |
+
);
|
251 |
+
}
|
252 |
+
|
253 |
+
$installer->install( $post_url ); // phpcs:ignore
|
254 |
+
|
255 |
+
// Flush the cache and return the newly installed plugin basename.
|
256 |
+
\wp_cache_flush();
|
257 |
+
|
258 |
+
$plugin_basename = $installer->plugin_info();
|
259 |
+
|
260 |
+
if ( $plugin_basename ) {
|
261 |
+
|
262 |
+
// Deactivate the lite version first.
|
263 |
+
\deactivate_plugins( \plugin_basename( WPFORMS_PLUGIN_FILE ) );
|
264 |
+
|
265 |
+
// Activate the plugin silently.
|
266 |
+
$activated = \activate_plugin( $plugin_basename, '', false, true );
|
267 |
+
|
268 |
+
if ( ! \is_wp_error( $activated ) ) {
|
269 |
+
\add_option( 'wpforms_install', 1 );
|
270 |
+
\wp_send_json_success( \esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
|
271 |
+
} else {
|
272 |
+
// Reactivate the lite plugin if pro activation failed.
|
273 |
+
\activate_plugin( \plugin_basename( WPFORMS_PLUGIN_FILE ), '', false, true );
|
274 |
+
\wp_send_json_error( \esc_html__( 'Pro version installed but needs to be activated from the Plugins page inside your WordPress admin.', 'wpforms-lite' ) );
|
275 |
+
}
|
276 |
+
}
|
277 |
+
|
278 |
+
\wp_send_json_error( $error );
|
279 |
+
|
280 |
+
} catch ( \Exception $e ) {
|
281 |
+
|
282 |
+
\wp_send_json_error(
|
283 |
+
array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() )
|
284 |
+
);
|
285 |
+
}
|
286 |
+
}
|
287 |
+
|
288 |
+
/**
|
289 |
+
* Converting errors to exceptions.
|
290 |
+
*
|
291 |
+
* @since 1.5.5
|
292 |
+
*/
|
293 |
+
public function init_error_handler() {
|
294 |
+
|
295 |
+
set_error_handler( // phpcs:ignore
|
296 |
+
function ( $errno, $errstr, $errfile, $errline, array $errcontex ) {
|
297 |
+
throw new \Exception( $errstr );
|
298 |
+
}
|
299 |
+
);
|
300 |
+
}
|
301 |
+
}
|
includes/class-upgrader-skin.php → src/Lite/Admin/ConnectSkin.php
RENAMED
@@ -1,46 +1,43 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
3 |
/**
|
4 |
-
* Skin
|
5 |
*
|
6 |
-
*
|
|
|
7 |
*
|
8 |
-
* @package
|
9 |
-
* @
|
10 |
-
* @
|
|
|
|
|
11 |
*/
|
12 |
|
13 |
-
|
14 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
-
exit;
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Skin class.
|
20 |
-
*
|
21 |
-
* @since 1.5.4
|
22 |
-
*/
|
23 |
-
class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
|
24 |
|
25 |
/**
|
26 |
* Primary class constructor.
|
27 |
*
|
28 |
-
* @since 1.5.
|
29 |
*
|
30 |
* @param array $args Empty array of args (we will use defaults).
|
31 |
*/
|
32 |
public function __construct( $args = array() ) {
|
|
|
33 |
parent::__construct();
|
34 |
}
|
35 |
|
36 |
/**
|
37 |
* Set the upgrader object and store it as a property in the parent class.
|
38 |
*
|
39 |
-
* @since 1.5.
|
40 |
*
|
41 |
* @param object $upgrader The upgrader object (passed by reference).
|
42 |
*/
|
43 |
public function set_upgrader( &$upgrader ) {
|
|
|
44 |
if ( is_object( $upgrader ) ) {
|
45 |
$this->upgrader =& $upgrader;
|
46 |
}
|
@@ -49,11 +46,12 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
|
|
49 |
/**
|
50 |
* Set the upgrader result and store it as a property in the parent class.
|
51 |
*
|
52 |
-
* @since 1.5.
|
53 |
*
|
54 |
* @param object $result The result of the install process.
|
55 |
*/
|
56 |
public function set_result( $result ) {
|
|
|
57 |
$this->result = $result;
|
58 |
}
|
59 |
|
@@ -61,14 +59,14 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
|
|
61 |
* Empty out the header of its HTML content and only check to see if it has
|
62 |
* been performed or not.
|
63 |
*
|
64 |
-
* @since 1.5.
|
65 |
*/
|
66 |
public function header() {}
|
67 |
|
68 |
/**
|
69 |
* Empty out the footer of its HTML contents.
|
70 |
*
|
71 |
-
* @since 1.5.
|
72 |
*/
|
73 |
public function footer() {}
|
74 |
|
@@ -76,13 +74,18 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
|
|
76 |
* Instead of outputting HTML for errors, json_encode the errors and send them
|
77 |
* back to the Ajax script for processing.
|
78 |
*
|
79 |
-
* @since 1.5.
|
80 |
*
|
81 |
* @param array $errors Array of errors with the install process.
|
82 |
*/
|
83 |
public function error( $errors ) {
|
|
|
84 |
if ( ! empty( $errors ) ) {
|
85 |
-
echo wp_json_encode(
|
|
|
|
|
|
|
|
|
86 |
die;
|
87 |
}
|
88 |
}
|
@@ -91,10 +94,9 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
|
|
91 |
* Empty out the feedback method to prevent outputting HTML strings as the install
|
92 |
* is progressing.
|
93 |
*
|
94 |
-
* @since 1.5.
|
95 |
*
|
96 |
* @param string $string The feedback string.
|
97 |
*/
|
98 |
public function feedback( $string ) {}
|
99 |
-
|
100 |
}
|
1 |
<?php
|
2 |
|
3 |
+
namespace WPForms\Lite\Admin;
|
4 |
+
|
5 |
/**
|
6 |
+
* WPForms Connect Skin.
|
7 |
*
|
8 |
+
* WPForms Connect is our service that makes it easy for non-techy users to
|
9 |
+
* upgrade to WPForms Pro without having to manually install WPForms Pro plugin.
|
10 |
*
|
11 |
+
* @package WPForms\Admin
|
12 |
+
* @author WPForms
|
13 |
+
* @since 1.5.5
|
14 |
+
* @license GPL-2.0+
|
15 |
+
* @copyright Copyright (c) 2019, WPForms LLC
|
16 |
*/
|
17 |
|
18 |
+
class ConnectSkin extends \WP_Upgrader_Skin {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
/**
|
21 |
* Primary class constructor.
|
22 |
*
|
23 |
+
* @since 1.5.5
|
24 |
*
|
25 |
* @param array $args Empty array of args (we will use defaults).
|
26 |
*/
|
27 |
public function __construct( $args = array() ) {
|
28 |
+
|
29 |
parent::__construct();
|
30 |
}
|
31 |
|
32 |
/**
|
33 |
* Set the upgrader object and store it as a property in the parent class.
|
34 |
*
|
35 |
+
* @since 1.5.5
|
36 |
*
|
37 |
* @param object $upgrader The upgrader object (passed by reference).
|
38 |
*/
|
39 |
public function set_upgrader( &$upgrader ) {
|
40 |
+
|
41 |
if ( is_object( $upgrader ) ) {
|
42 |
$this->upgrader =& $upgrader;
|
43 |
}
|
46 |
/**
|
47 |
* Set the upgrader result and store it as a property in the parent class.
|
48 |
*
|
49 |
+
* @since 1.5.5
|
50 |
*
|
51 |
* @param object $result The result of the install process.
|
52 |
*/
|
53 |
public function set_result( $result ) {
|
54 |
+
|
55 |
$this->result = $result;
|
56 |
}
|
57 |
|
59 |
* Empty out the header of its HTML content and only check to see if it has
|
60 |
* been performed or not.
|
61 |
*
|
62 |
+
* @since 1.5.5
|
63 |
*/
|
64 |
public function header() {}
|
65 |
|
66 |
/**
|
67 |
* Empty out the footer of its HTML contents.
|
68 |
*
|
69 |
+
* @since 1.5.5
|
70 |
*/
|
71 |
public function footer() {}
|
72 |
|
74 |
* Instead of outputting HTML for errors, json_encode the errors and send them
|
75 |
* back to the Ajax script for processing.
|
76 |
*
|
77 |
+
* @since 1.5.5
|
78 |
*
|
79 |
* @param array $errors Array of errors with the install process.
|
80 |
*/
|
81 |
public function error( $errors ) {
|
82 |
+
|
83 |
if ( ! empty( $errors ) ) {
|
84 |
+
echo \wp_json_encode(
|
85 |
+
array(
|
86 |
+
'error' => \esc_html__( 'There was an error installing WPForms Pro. Please try again.', 'wpforms-lite' ),
|
87 |
+
)
|
88 |
+
);
|
89 |
die;
|
90 |
}
|
91 |
}
|
94 |
* Empty out the feedback method to prevent outputting HTML strings as the install
|
95 |
* is progressing.
|
96 |
*
|
97 |
+
* @since 1.5.5
|
98 |
*
|
99 |
* @param string $string The feedback string.
|
100 |
*/
|
101 |
public function feedback( $string ) {}
|
|
|
102 |
}
|
src/Lite/Admin/DashboardWidget.php
CHANGED
@@ -5,7 +5,7 @@ namespace WPForms\Lite\Admin;
|
|
5 |
/**
|
6 |
* Dashboard Widget shows a chart and the form entries stats in WP Dashboard.
|
7 |
*
|
8 |
-
* @package WPForms\Admin
|
9 |
* @author WPForms
|
10 |
* @since 1.5.0
|
11 |
* @license GPL-2.0+
|
@@ -16,6 +16,8 @@ class DashboardWidget {
|
|
16 |
/**
|
17 |
* Widget settings.
|
18 |
*
|
|
|
|
|
19 |
* @var array
|
20 |
*/
|
21 |
public $settings;
|
@@ -27,6 +29,15 @@ class DashboardWidget {
|
|
27 |
*/
|
28 |
public function __construct() {
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
// This widget should be displayed for certain high-level users only.
|
31 |
if ( ! wpforms_current_user_can() ) {
|
32 |
return;
|
5 |
/**
|
6 |
* Dashboard Widget shows a chart and the form entries stats in WP Dashboard.
|
7 |
*
|
8 |
+
* @package WPForms\Lite\Admin
|
9 |
* @author WPForms
|
10 |
* @since 1.5.0
|
11 |
* @license GPL-2.0+
|
16 |
/**
|
17 |
* Widget settings.
|
18 |
*
|
19 |
+
* @since 1.5.0
|
20 |
+
*
|
21 |
* @var array
|
22 |
*/
|
23 |
public $settings;
|
29 |
*/
|
30 |
public function __construct() {
|
31 |
|
32 |
+
add_action( 'admin_init', array( $this, 'init' ) );
|
33 |
+
}
|
34 |
+
/**
|
35 |
+
* Init class.
|
36 |
+
*
|
37 |
+
* @since 1.5.5
|
38 |
+
*/
|
39 |
+
public function init() {
|
40 |
+
|
41 |
// This widget should be displayed for certain high-level users only.
|
42 |
if ( ! wpforms_current_user_can() ) {
|
43 |
return;
|
src/Lite/Admin/Settings/Education.php
ADDED
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WPForms\Lite\Admin\Settings;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Settings changes and enhancements to educate Lite users on what is
|
7 |
+
* available in WPForms Pro.
|
8 |
+
*
|
9 |
+
* @package WPForms\Admin\Settings
|
10 |
+
* @author WPForms
|
11 |
+
* @since 1.5.5
|
12 |
+
* @license GPL-2.0+
|
13 |
+
* @copyright Copyright (c) 2019, WPForms LLC
|
14 |
+
*/
|
15 |
+
class Education {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Constructor.
|
19 |
+
*
|
20 |
+
* @since 1.5.1
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
|
24 |
+
$this->hooks();
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Hooks.
|
29 |
+
*
|
30 |
+
* @since 1.5.1
|
31 |
+
*/
|
32 |
+
public function hooks() {
|
33 |
+
|
34 |
+
// Only proceed for the Settings > Integrations tab.
|
35 |
+
if ( ! \wpforms_is_admin_page( 'settings' ) ) {
|
36 |
+
return;
|
37 |
+
}
|
38 |
+
|
39 |
+
// Integrations related hooks.
|
40 |
+
if ( \wpforms_is_admin_page( 'settings', 'integrations' ) ) {
|
41 |
+
\add_filter( 'wpforms_admin_strings', array( $this, 'js_strings' ) );
|
42 |
+
\add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
|
43 |
+
\add_action( 'wpforms_settings_providers', array( $this, 'providers' ), 10000, 1 );
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Localize needed strings.
|
49 |
+
*
|
50 |
+
* @since 1.5.5
|
51 |
+
*
|
52 |
+
* @param array $strings JS strings.
|
53 |
+
*
|
54 |
+
* @return array
|
55 |
+
*/
|
56 |
+
public function js_strings( $strings ) {
|
57 |
+
|
58 |
+
$strings['upgrade_title'] = \esc_html__( 'is a PRO Feature', 'wpforms-lite' );
|
59 |
+
$strings['upgrade_message'] = '<p>' . \esc_html__( 'We\'re sorry, the %name% is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features.', 'wpforms-lite' ) . '</p>';
|
60 |
+
$strings['upgrade_bonus'] = '<p>' .
|
61 |
+
\wp_kses(
|
62 |
+
__( '<strong>Bonus:</strong> WPForms Lite users get <span>50% off</span> regular price, automatically applied at checkout.', 'wpforms-lite' ),
|
63 |
+
array(
|
64 |
+
'strong' => array(),
|
65 |
+
'span' => array(),
|
66 |
+
)
|
67 |
+
) .
|
68 |
+
'</p>';
|
69 |
+
$strings['upgrade_doc'] = '<a href="https://wpforms.com/docs/upgrade-wpforms-lite-paid-license/?utm_source=WordPress&utm_medium=link&utm_campaign=liteplugin" target="_blank" rel="noopener noreferrer" class="already-purchased">' . \esc_html__( 'Already purchased?', 'wpforms-lite' ) . '</a>';
|
70 |
+
$strings['upgrade_button'] = \esc_html__( 'Upgrade to PRO', 'wpforms-lite' );
|
71 |
+
$strings['upgrade_url'] = \esc_url( \wpforms_admin_upgrade_link( 'settings-modal' ) );
|
72 |
+
$strings['upgrade_modal'] = \wpforms_get_upgrade_modal_text();
|
73 |
+
|
74 |
+
return $strings;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Load enqueues.
|
79 |
+
*
|
80 |
+
* @since 1.5.5
|
81 |
+
*/
|
82 |
+
public function enqueues() {
|
83 |
+
|
84 |
+
$min = \wpforms_get_min_suffix();
|
85 |
+
|
86 |
+
\wp_enqueue_script(
|
87 |
+
'wpforms-settings-education',
|
88 |
+
\WPFORMS_PLUGIN_URL . "lite/assets/js/admin/settings-education{$min}.js",
|
89 |
+
array( 'jquery', 'jquery-confirm' ),
|
90 |
+
\WPFORMS_VERSION,
|
91 |
+
false
|
92 |
+
);
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Display providers.
|
97 |
+
*
|
98 |
+
* @since 1.5.5
|
99 |
+
*/
|
100 |
+
public function providers() {
|
101 |
+
|
102 |
+
$providers = wpforms_get_providers_all();
|
103 |
+
|
104 |
+
foreach ( $providers as $provider ) {
|
105 |
+
|
106 |
+
/* translators: %s - addon name*/
|
107 |
+
$modal_name = sprintf( \__( '%s addon', 'wpforms' ), $provider['name'] );
|
108 |
+
|
109 |
+
/* translators: %s - addon name*/
|
110 |
+
$descr = sprintf( \__( 'Integrate %s with WPForms', 'wpforms' ), $provider['name'] );
|
111 |
+
|
112 |
+
printf(
|
113 |
+
'<div id="wpforms-integration-%1$s" class="wpforms-settings-provider wpforms-clear focus-out education-modal" data-name="%2$s" data-action="upgrade" data-url="%3$s">
|
114 |
+
<div class="wpforms-settings-provider-header wpforms-clear">
|
115 |
+
<div class="wpforms-settings-provider-logo ">
|
116 |
+
<i class="fa fa-chevron-right"></i>
|
117 |
+
%4$s
|
118 |
+
</div>
|
119 |
+
<div class="wpforms-settings-provider-info">
|
120 |
+
<h3>%5$s</h3>
|
121 |
+
<p>%6$s</p>
|
122 |
+
</div>
|
123 |
+
</div>
|
124 |
+
</div>',
|
125 |
+
\esc_attr( $provider['slug'] ),
|
126 |
+
\esc_attr( $modal_name ),
|
127 |
+
isset( $provider['url'] ) ? \esc_attr( $provider['url'] ) : '',
|
128 |
+
'<img src="' . \esc_attr( WPFORMS_PLUGIN_URL ) . 'assets/images/' . \esc_attr( $provider['img'] ) . '">',
|
129 |
+
\esc_html( $provider['name'] ),
|
130 |
+
\esc_html( $descr )
|
131 |
+
);
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
src/WPForms.php
CHANGED
@@ -210,8 +210,6 @@ namespace WPForms {
|
|
210 |
require_once WPFORMS_PLUGIN_DIR . 'includes/class-conditional-logic-core.php';
|
211 |
require_once WPFORMS_PLUGIN_DIR . 'includes/emails/class-emails.php';
|
212 |
require_once WPFORMS_PLUGIN_DIR . 'includes/integrations.php';
|
213 |
-
require_once WPFORMS_PLUGIN_DIR . 'includes/class-license.php';
|
214 |
-
require_once WPFORMS_PLUGIN_DIR . 'includes/class-updater.php';
|
215 |
|
216 |
// Admin/Dashboard only includes, also in ajax.
|
217 |
if ( is_admin() ) {
|
@@ -287,7 +285,6 @@ namespace WPForms {
|
|
287 |
$this->process = new \WPForms_Process();
|
288 |
$this->smart_tags = new \WPForms_Smart_Tags();
|
289 |
$this->logs = new \WPForms_Logging();
|
290 |
-
$this->license = new \WPForms_License();
|
291 |
|
292 |
if ( is_admin() ) {
|
293 |
if ( ! wpforms_setting( 'hide-announcements', false ) ) {
|
@@ -301,29 +298,6 @@ namespace WPForms {
|
|
301 |
|
302 |
// Hook now that all of the WPForms stuff is loaded.
|
303 |
do_action( 'wpforms_loaded' );
|
304 |
-
|
305 |
-
$this->updater();
|
306 |
-
}
|
307 |
-
|
308 |
-
/**
|
309 |
-
* Load plugin updater.
|
310 |
-
*
|
311 |
-
* @since 1.5.4
|
312 |
-
*/
|
313 |
-
public function updater() {
|
314 |
-
|
315 |
-
if ( ! is_admin() ) {
|
316 |
-
return;
|
317 |
-
}
|
318 |
-
|
319 |
-
$key = $this->license->get();
|
320 |
-
|
321 |
-
if ( ! $key ) {
|
322 |
-
return;
|
323 |
-
}
|
324 |
-
|
325 |
-
// Fire a hook for Addons to register their updater since we know the key is present.
|
326 |
-
do_action( 'wpforms_updater', $key );
|
327 |
}
|
328 |
}
|
329 |
}
|
210 |
require_once WPFORMS_PLUGIN_DIR . 'includes/class-conditional-logic-core.php';
|
211 |
require_once WPFORMS_PLUGIN_DIR . 'includes/emails/class-emails.php';
|
212 |
require_once WPFORMS_PLUGIN_DIR . 'includes/integrations.php';
|
|
|
|
|
213 |
|
214 |
// Admin/Dashboard only includes, also in ajax.
|
215 |
if ( is_admin() ) {
|
285 |
$this->process = new \WPForms_Process();
|
286 |
$this->smart_tags = new \WPForms_Smart_Tags();
|
287 |
$this->logs = new \WPForms_Logging();
|
|
|
288 |
|
289 |
if ( is_admin() ) {
|
290 |
if ( ! wpforms_setting( 'hide-announcements', false ) ) {
|
298 |
|
299 |
// Hook now that all of the WPForms stuff is loaded.
|
300 |
do_action( 'wpforms_loaded' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
301 |
}
|
302 |
}
|
303 |
}
|
vendor/composer/autoload_files.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_files.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
10 |
+
);
|
vendor/composer/autoload_namespaces.php
CHANGED
@@ -6,4 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
9 |
);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
+
'Goodby\\CSV' => array($vendorDir . '/goodby/csv/src'),
|
10 |
);
|
vendor/composer/autoload_psr4.php
CHANGED
@@ -8,5 +8,6 @@ $baseDir = dirname($vendorDir);
|
|
8 |
return array(
|
9 |
'WPForms\\' => array($baseDir . '/src'),
|
10 |
'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'),
|
|
|
11 |
'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
|
12 |
);
|
8 |
return array(
|
9 |
'WPForms\\' => array($baseDir . '/src'),
|
10 |
'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'),
|
11 |
+
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
12 |
'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
|
13 |
);
|
vendor/composer/autoload_real.php
CHANGED
@@ -47,6 +47,24 @@ class ComposerAutoloaderInitfd7672430854241c2e9f5a2c8316f3fb
|
|
47 |
|
48 |
$loader->register(true);
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
return $loader;
|
51 |
}
|
52 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
$loader->register(true);
|
49 |
|
50 |
+
if ($useStaticLoader) {
|
51 |
+
$includeFiles = Composer\Autoload\ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$files;
|
52 |
+
} else {
|
53 |
+
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
+
}
|
55 |
+
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequirefd7672430854241c2e9f5a2c8316f3fb($fileIdentifier, $file);
|
57 |
+
}
|
58 |
+
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
+
|
63 |
+
function composerRequirefd7672430854241c2e9f5a2c8316f3fb($fileIdentifier, $file)
|
64 |
+
{
|
65 |
+
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
+
require $file;
|
67 |
+
|
68 |
+
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
69 |
+
}
|
70 |
+
}
|
vendor/composer/autoload_static.php
CHANGED
@@ -6,6 +6,10 @@ namespace Composer\Autoload;
|
|
6 |
|
7 |
class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
|
8 |
{
|
|
|
|
|
|
|
|
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'W' =>
|
11 |
array (
|
@@ -17,6 +21,7 @@ class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
|
|
17 |
),
|
18 |
'S' =>
|
19 |
array (
|
|
|
20 |
'Symfony\\Component\\CssSelector\\' => 30,
|
21 |
),
|
22 |
);
|
@@ -30,17 +35,32 @@ class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
|
|
30 |
array (
|
31 |
0 => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src',
|
32 |
),
|
|
|
|
|
|
|
|
|
33 |
'Symfony\\Component\\CssSelector\\' =>
|
34 |
array (
|
35 |
0 => __DIR__ . '/..' . '/symfony/css-selector',
|
36 |
),
|
37 |
);
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
public static function getInitializer(ClassLoader $loader)
|
40 |
{
|
41 |
return \Closure::bind(function () use ($loader) {
|
42 |
$loader->prefixLengthsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixLengthsPsr4;
|
43 |
$loader->prefixDirsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixDirsPsr4;
|
|
|
44 |
|
45 |
}, null, ClassLoader::class);
|
46 |
}
|
6 |
|
7 |
class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
|
8 |
{
|
9 |
+
public static $files = array (
|
10 |
+
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
11 |
+
);
|
12 |
+
|
13 |
public static $prefixLengthsPsr4 = array (
|
14 |
'W' =>
|
15 |
array (
|
21 |
),
|
22 |
'S' =>
|
23 |
array (
|
24 |
+
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
25 |
'Symfony\\Component\\CssSelector\\' => 30,
|
26 |
),
|
27 |
);
|
35 |
array (
|
36 |
0 => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src',
|
37 |
),
|
38 |
+
'Symfony\\Polyfill\\Mbstring\\' =>
|
39 |
+
array (
|
40 |
+
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
41 |
+
),
|
42 |
'Symfony\\Component\\CssSelector\\' =>
|
43 |
array (
|
44 |
0 => __DIR__ . '/..' . '/symfony/css-selector',
|
45 |
),
|
46 |
);
|
47 |
|
48 |
+
public static $prefixesPsr0 = array (
|
49 |
+
'G' =>
|
50 |
+
array (
|
51 |
+
'Goodby\\CSV' =>
|
52 |
+
array (
|
53 |
+
0 => __DIR__ . '/..' . '/goodby/csv/src',
|
54 |
+
),
|
55 |
+
),
|
56 |
+
);
|
57 |
+
|
58 |
public static function getInitializer(ClassLoader $loader)
|
59 |
{
|
60 |
return \Closure::bind(function () use ($loader) {
|
61 |
$loader->prefixLengthsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixLengthsPsr4;
|
62 |
$loader->prefixDirsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixDirsPsr4;
|
63 |
+
$loader->prefixesPsr0 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixesPsr0;
|
64 |
|
65 |
}, null, ClassLoader::class);
|
66 |
}
|
vendor/composer/installed.json
CHANGED
@@ -1,4 +1,63 @@
|
|
1 |
[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
{
|
3 |
"name": "symfony/css-selector",
|
4 |
"version": "v2.8.50",
|
@@ -54,6 +113,67 @@
|
|
54 |
"description": "Symfony CssSelector Component",
|
55 |
"homepage": "https://symfony.com"
|
56 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
{
|
58 |
"name": "tijsverkoyen/css-to-inline-styles",
|
59 |
"version": "2.2.1",
|
1 |
[
|
2 |
+
{
|
3 |
+
"name": "goodby/csv",
|
4 |
+
"version": "1.3.0",
|
5 |
+
"version_normalized": "1.3.0.0",
|
6 |
+
"source": {
|
7 |
+
"type": "git",
|
8 |
+
"url": "https://github.com/goodby/csv.git",
|
9 |
+
"reference": "e71217b8d6110f3d1ac3784ef9b8a2383c3398b9"
|
10 |
+
},
|
11 |
+
"dist": {
|
12 |
+
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/goodby/csv/zipball/e71217b8d6110f3d1ac3784ef9b8a2383c3398b9",
|
14 |
+
"reference": "e71217b8d6110f3d1ac3784ef9b8a2383c3398b9",
|
15 |
+
"shasum": ""
|
16 |
+
},
|
17 |
+
"require": {
|
18 |
+
"ext-mbstring": "*",
|
19 |
+
"php": ">=5.3.2"
|
20 |
+
},
|
21 |
+
"require-dev": {
|
22 |
+
"mikey179/vfsstream": ">=1.1.0",
|
23 |
+
"mockery/mockery": ">=0.7.2",
|
24 |
+
"phpunit/phpunit": "3.7.*",
|
25 |
+
"suin/php-expose": ">=1.0"
|
26 |
+
},
|
27 |
+
"time": "2015-06-29T10:28:19+00:00",
|
28 |
+
"type": "library",
|
29 |
+
"installation-source": "dist",
|
30 |
+
"autoload": {
|
31 |
+
"psr-0": {
|
32 |
+
"Goodby\\CSV": "src/"
|
33 |
+
}
|
34 |
+
},
|
35 |
+
"notification-url": "https://packagist.org/downloads/",
|
36 |
+
"license": [
|
37 |
+
"MIT"
|
38 |
+
],
|
39 |
+
"authors": [
|
40 |
+
{
|
41 |
+
"name": "suin",
|
42 |
+
"email": "suinyeze@gmail.com",
|
43 |
+
"homepage": "https://www.facebook.com/suinyeze",
|
44 |
+
"role": "Developer, Renaming Specialist"
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"name": "reoring",
|
48 |
+
"email": "mori.reo@gmail.com",
|
49 |
+
"homepage": "https://www.facebook.com/reoring",
|
50 |
+
"role": "Developer"
|
51 |
+
}
|
52 |
+
],
|
53 |
+
"description": "CSV import/export library",
|
54 |
+
"homepage": "https://github.com/goodby/csv",
|
55 |
+
"keywords": [
|
56 |
+
"csv",
|
57 |
+
"export",
|
58 |
+
"import"
|
59 |
+
]
|
60 |
+
},
|
61 |
{
|
62 |
"name": "symfony/css-selector",
|
63 |
"version": "v2.8.50",
|
113 |
"description": "Symfony CssSelector Component",
|
114 |
"homepage": "https://symfony.com"
|
115 |
},
|
116 |
+
{
|
117 |
+
"name": "symfony/polyfill-mbstring",
|
118 |
+
"version": "v1.11.0",
|
119 |
+
"version_normalized": "1.11.0.0",
|
120 |
+
"source": {
|
121 |
+
"type": "git",
|
122 |
+
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
123 |
+
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
|
124 |
+
},
|
125 |
+
"dist": {
|
126 |
+
"type": "zip",
|
127 |
+
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
|
128 |
+
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
|
129 |
+
"shasum": ""
|
130 |
+
},
|
131 |
+
"require": {
|
132 |
+
"php": ">=5.3.3"
|
133 |
+
},
|
134 |
+
"suggest": {
|
135 |
+
"ext-mbstring": "For best performance"
|
136 |
+
},
|
137 |
+
"time": "2019-02-06T07:57:58+00:00",
|
138 |
+
"type": "library",
|
139 |
+
"extra": {
|
140 |
+
"branch-alias": {
|
141 |
+
"dev-master": "1.11-dev"
|
142 |
+
}
|
143 |
+
},
|
144 |
+
"installation-source": "dist",
|
145 |
+
"autoload": {
|
146 |
+
"psr-4": {
|
147 |
+
"Symfony\\Polyfill\\Mbstring\\": ""
|
148 |
+
},
|
149 |
+
"files": [
|
150 |
+
"bootstrap.php"
|
151 |
+
]
|
152 |
+
},
|
153 |
+
"notification-url": "https://packagist.org/downloads/",
|
154 |
+
"license": [
|
155 |
+
"MIT"
|
156 |
+
],
|
157 |
+
"authors": [
|
158 |
+
{
|
159 |
+
"name": "Nicolas Grekas",
|
160 |
+
"email": "p@tchwork.com"
|
161 |
+
},
|
162 |
+
{
|
163 |
+
"name": "Symfony Community",
|
164 |
+
"homepage": "https://symfony.com/contributors"
|
165 |
+
}
|
166 |
+
],
|
167 |
+
"description": "Symfony polyfill for the Mbstring extension",
|
168 |
+
"homepage": "https://symfony.com",
|
169 |
+
"keywords": [
|
170 |
+
"compatibility",
|
171 |
+
"mbstring",
|
172 |
+
"polyfill",
|
173 |
+
"portable",
|
174 |
+
"shim"
|
175 |
+
]
|
176 |
+
},
|
177 |
{
|
178 |
"name": "tijsverkoyen/css-to-inline-styles",
|
179 |
"version": "2.2.1",
|
vendor/goodby/csv/.gitignore
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.phpmake
|
2 |
+
/vendor
|
3 |
+
/composer.phar
|
4 |
+
/composer.lock
|
5 |
+
/metrics
|
vendor/goodby/csv/.travis.yml
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
language: php
|
2 |
+
php:
|
3 |
+
- 5.3
|
4 |
+
- 5.4
|
5 |
+
- 5.5
|
6 |
+
- 5.6
|
7 |
+
|
8 |
+
before_script:
|
9 |
+
- ./scripts/bundle-devtools.sh .
|
10 |
+
- export GOODBY_CSV_TEST_DB_HOST=127.0.0.1
|
11 |
+
- export GOODBY_CSV_TEST_DB_USER=root
|
12 |
+
- export GOODBY_CSV_TEST_DB_PASS=""
|
13 |
+
- mysql -e 'create database goodby_csv_test'
|
14 |
+
script: ./vendor/bin/phpunit --coverage-text --configuration phpunit.xml.dist
|
vendor/goodby/csv/LICENSE
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) <year> <copyright holders>
|
2 |
+
|
3 |
+
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:
|
4 |
+
|
5 |
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
6 |
+
|
7 |
+
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.
|
8 |
+
|
vendor/goodby/csv/README.md
ADDED
@@ -0,0 +1,327 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Goodby, CSV
|
2 |
+
|
3 |
+
[![Build Status](https://secure.travis-ci.org/goodby/csv.png?branch=master)](https://travis-ci.org/goodby/csv)
|
4 |
+
|
5 |
+
## What is "Goodby CSV"?
|
6 |
+
|
7 |
+
Goodby CSV is a highly memory efficient, flexible and extendable open-source CSV import/export library.
|
8 |
+
|
9 |
+
```php
|
10 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
11 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
12 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
13 |
+
|
14 |
+
$lexer = new Lexer(new LexerConfig());
|
15 |
+
$interpreter = new Interpreter();
|
16 |
+
$interpreter->addObserver(function(array $row) {
|
17 |
+
// do something here.
|
18 |
+
// for example, insert $row to database.
|
19 |
+
});
|
20 |
+
$lexer->parse('data.csv', $interpreter);
|
21 |
+
```
|
22 |
+
|
23 |
+
|
24 |
+
### Features
|
25 |
+
|
26 |
+
#### 1. Memory Management Free
|
27 |
+
|
28 |
+
This library was designed for low memory usage. It will not accumulate all the rows in the memory. The importer reads a CSV file and executes a callback function line by line.
|
29 |
+
|
30 |
+
#### 2. Multibyte support
|
31 |
+
|
32 |
+
This library supports mulitbyte input/output: for example, SJIS-win, EUC-JP and UTF-8.
|
33 |
+
|
34 |
+
#### 3. Ready to Use for Enterprise Applications
|
35 |
+
|
36 |
+
Goodby CSV is fully unit-tested. The library is stable and ready to be used in large projects like enterprise applications.
|
37 |
+
|
38 |
+
## Requirements
|
39 |
+
|
40 |
+
* PHP 5.3.2 or later
|
41 |
+
* mbstring
|
42 |
+
|
43 |
+
## Installation
|
44 |
+
|
45 |
+
Install composer in your project:
|
46 |
+
|
47 |
+
```bash
|
48 |
+
curl -s http://getcomposer.org/installer | php
|
49 |
+
```
|
50 |
+
|
51 |
+
Create a `composer.json` file in your project root:
|
52 |
+
|
53 |
+
```json
|
54 |
+
{
|
55 |
+
"require": {
|
56 |
+
"goodby/csv": "*"
|
57 |
+
}
|
58 |
+
}
|
59 |
+
```
|
60 |
+
|
61 |
+
Install via composer:
|
62 |
+
|
63 |
+
```bash
|
64 |
+
php composer.phar install
|
65 |
+
```
|
66 |
+
|
67 |
+
## Documentation
|
68 |
+
|
69 |
+
### Configuration
|
70 |
+
|
71 |
+
Import configuration:
|
72 |
+
|
73 |
+
```php
|
74 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
75 |
+
|
76 |
+
$config = new LexerConfig();
|
77 |
+
$config
|
78 |
+
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
|
79 |
+
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
|
80 |
+
->setEscape("\\") // Customize escape character. Default value is backslash(\)
|
81 |
+
->setToCharset('UTF-8') // Customize target encoding. Default value is null, no converting.
|
82 |
+
->setFromCharset('SJIS-win') // Customize CSV file encoding. Default value is null.
|
83 |
+
;
|
84 |
+
```
|
85 |
+
|
86 |
+
Export configuration:
|
87 |
+
|
88 |
+
```php
|
89 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
90 |
+
|
91 |
+
$config = new ExporterConfig();
|
92 |
+
$config
|
93 |
+
->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
|
94 |
+
->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
|
95 |
+
->setEscape("\\") // Customize escape character. Default value is backslash(\)
|
96 |
+
->setToCharset('SJIS-win') // Customize file encoding. Default value is null, no converting.
|
97 |
+
->setFromCharset('UTF-8') // Customize source encoding. Default value is null.
|
98 |
+
->setFileMode(CsvFileObject::FILE_MODE_WRITE) // Customize file mode and choose either write or append. Default value is write ('w'). See fopen() php docs
|
99 |
+
;
|
100 |
+
```
|
101 |
+
|
102 |
+
### Unstrict Row Consistency Mode
|
103 |
+
|
104 |
+
By default, Goodby CSV throws `StrictViolationException` when it finds a row with a different column count to other columns. In the case you want to import such a CSV, you can call `Interpreter::unstrict()` to disable row consistency check at import.
|
105 |
+
|
106 |
+
rough.csv:
|
107 |
+
|
108 |
+
```csv
|
109 |
+
foo,bar,baz
|
110 |
+
foo,bar
|
111 |
+
foo
|
112 |
+
foo,bar,baz
|
113 |
+
```
|
114 |
+
|
115 |
+
```php
|
116 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
117 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
118 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
119 |
+
|
120 |
+
$interpreter = new Interpreter();
|
121 |
+
$interpreter->unstrict(); // Ignore row column count consistency
|
122 |
+
|
123 |
+
$lexer = new Lexer(new LexerConfig());
|
124 |
+
$lexer->parse('rough.csv', $interpreter);
|
125 |
+
```
|
126 |
+
|
127 |
+
## Examples
|
128 |
+
|
129 |
+
### Import to Database via PDO
|
130 |
+
|
131 |
+
user.csv:
|
132 |
+
|
133 |
+
```csv
|
134 |
+
1,alice,alice@example.com
|
135 |
+
2,bob,bob@example.com
|
136 |
+
3,carol,carol@eample.com
|
137 |
+
```
|
138 |
+
|
139 |
+
```php
|
140 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
141 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
142 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
143 |
+
|
144 |
+
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
|
145 |
+
$pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
|
146 |
+
|
147 |
+
$config = new LexerConfig();
|
148 |
+
$lexer = new Lexer($config);
|
149 |
+
|
150 |
+
$interpreter = new Interpreter();
|
151 |
+
|
152 |
+
$interpreter->addObserver(function(array $columns) use ($pdo) {
|
153 |
+
$stmt = $pdo->prepare('INSERT INTO user (id, name, email) VALUES (?, ?, ?)');
|
154 |
+
$stmt->execute($columns);
|
155 |
+
});
|
156 |
+
|
157 |
+
$lexer->parse('user.csv', $interpreter);
|
158 |
+
```
|
159 |
+
|
160 |
+
### Import from TSV (tab separated values) to array
|
161 |
+
|
162 |
+
temperature.tsv:
|
163 |
+
|
164 |
+
```csv
|
165 |
+
9 Tokyo
|
166 |
+
27 Singapore
|
167 |
+
-5 Seoul
|
168 |
+
7 Shanghai
|
169 |
+
```
|
170 |
+
|
171 |
+
```php
|
172 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
173 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
174 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
175 |
+
|
176 |
+
$temperature = array();
|
177 |
+
|
178 |
+
$config = new LexerConfig();
|
179 |
+
$config->setDelimiter("\t");
|
180 |
+
$lexer = new Lexer($config);
|
181 |
+
|
182 |
+
$interpreter = new Interpreter();
|
183 |
+
$interpreter->addObserver(function(array $row) use (&$temperature) {
|
184 |
+
$temperature[] = array(
|
185 |
+
'temperature' => $row[0],
|
186 |
+
'city' => $row[1],
|
187 |
+
);
|
188 |
+
});
|
189 |
+
|
190 |
+
$lexer->parse('temperature.tsv', $interpreter);
|
191 |
+
|
192 |
+
print_r($temperature);
|
193 |
+
```
|
194 |
+
|
195 |
+
### Export from array
|
196 |
+
|
197 |
+
```php
|
198 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
199 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
200 |
+
|
201 |
+
$config = new ExporterConfig();
|
202 |
+
$exporter = new Exporter($config);
|
203 |
+
|
204 |
+
$exporter->export('php://output', array(
|
205 |
+
array('1', 'alice', 'alice@example.com'),
|
206 |
+
array('2', 'bob', 'bob@example.com'),
|
207 |
+
array('3', 'carol', 'carol@example.com'),
|
208 |
+
));
|
209 |
+
```
|
210 |
+
|
211 |
+
|
212 |
+
### Export from database via PDO
|
213 |
+
|
214 |
+
```php
|
215 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
216 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
217 |
+
use Goodby\CSV\Export\Standard\CsvFileObject;
|
218 |
+
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
|
219 |
+
|
220 |
+
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
|
221 |
+
|
222 |
+
$pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
|
223 |
+
$pdo->query("INSERT INTO user VALUES(1, 'alice', 'alice@example.com')");
|
224 |
+
$pdo->query("INSERT INTO user VALUES(2, 'bob', 'bob@example.com')");
|
225 |
+
$pdo->query("INSERT INTO user VALUES(3, 'carol', 'carol@example.com')");
|
226 |
+
|
227 |
+
$config = new ExporterConfig();
|
228 |
+
$exporter = new Exporter($config);
|
229 |
+
|
230 |
+
$stmt = $pdo->prepare("SELECT * FROM user");
|
231 |
+
$stmt->execute();
|
232 |
+
|
233 |
+
$exporter->export('php://output', new PdoCollection($stmt));
|
234 |
+
```
|
235 |
+
|
236 |
+
### Export with CallbackCollection
|
237 |
+
```php
|
238 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
239 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
240 |
+
|
241 |
+
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
|
242 |
+
|
243 |
+
$data = array();
|
244 |
+
$data[] = array('user', 'name1');
|
245 |
+
$data[] = array('user', 'name2');
|
246 |
+
$data[] = array('user', 'name3');
|
247 |
+
|
248 |
+
$collection = new CallbackCollection($data, function($row) {
|
249 |
+
// apply custom format to the row
|
250 |
+
$row[1] = $row[1] . '!';
|
251 |
+
|
252 |
+
return $row;
|
253 |
+
});
|
254 |
+
|
255 |
+
$config = new ExporterConfig();
|
256 |
+
$exporter = new Exporter($config);
|
257 |
+
|
258 |
+
$exporter->export('php://stdout', $collection);
|
259 |
+
```
|
260 |
+
|
261 |
+
### Export in Symfony2 action
|
262 |
+
|
263 |
+
```php
|
264 |
+
namespace AcmeBundle\ExampleBundle\Controller;
|
265 |
+
|
266 |
+
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
267 |
+
use Symfony\Component\HttpFoundation\StreamedResponse;
|
268 |
+
|
269 |
+
class DefaultController extends Controller
|
270 |
+
{
|
271 |
+
public function csvExportAction()
|
272 |
+
{
|
273 |
+
$conn = $this->get('database_connection');
|
274 |
+
|
275 |
+
$stmt = $conn->prepare('SELECT * FROM somewhere');
|
276 |
+
$stmt->execute();
|
277 |
+
|
278 |
+
$response = new StreamedResponse();
|
279 |
+
$response->setStatusCode(200);
|
280 |
+
$response->headers->set('Content-Type', 'text/csv');
|
281 |
+
$response->setCallback(function() use($stmt) {
|
282 |
+
$config = new ExporterConfig();
|
283 |
+
$exporter = new Exporter($config);
|
284 |
+
|
285 |
+
$exporter->export('php://output', new PdoCollection($stmt->getIterator()));
|
286 |
+
});
|
287 |
+
$response->send();
|
288 |
+
|
289 |
+
return $response;
|
290 |
+
}
|
291 |
+
}
|
292 |
+
```
|
293 |
+
|
294 |
+
## License
|
295 |
+
|
296 |
+
Csv is open-sourced software licensed under the MIT License - see the LICENSE file for details
|
297 |
+
|
298 |
+
|
299 |
+
## Contributing
|
300 |
+
|
301 |
+
We works under test driven development.
|
302 |
+
|
303 |
+
Checkout master source code from github:
|
304 |
+
|
305 |
+
```bash
|
306 |
+
hub clone goodby/csv
|
307 |
+
```
|
308 |
+
|
309 |
+
Install components via composer:
|
310 |
+
|
311 |
+
```
|
312 |
+
# If you don't have composer.phar
|
313 |
+
./scripts/bundle-devtools.sh .
|
314 |
+
|
315 |
+
# If you have composer.phar
|
316 |
+
composer.phar install --dev
|
317 |
+
```
|
318 |
+
|
319 |
+
Run phpunit:
|
320 |
+
|
321 |
+
```bash
|
322 |
+
./vendor/bin/phpunit
|
323 |
+
```
|
324 |
+
|
325 |
+
## Acknowledgement
|
326 |
+
|
327 |
+
Credits are found within composer.json file.
|
vendor/goodby/csv/composer.json
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "goodby/csv",
|
3 |
+
"description": "CSV import/export library",
|
4 |
+
"keywords": ["csv", "import", "export"],
|
5 |
+
"homepage": "https://github.com/goodby/csv",
|
6 |
+
"license": "MIT",
|
7 |
+
"authors": [
|
8 |
+
{
|
9 |
+
"name": "reoring",
|
10 |
+
"email": "mori.reo@gmail.com",
|
11 |
+
"homepage": "https://www.facebook.com/reoring",
|
12 |
+
"role": "Developer"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"name": "suin",
|
16 |
+
"email": "suinyeze@gmail.com",
|
17 |
+
"homepage": "https://www.facebook.com/suinyeze",
|
18 |
+
"role": "Developer, Renaming Specialist"
|
19 |
+
}
|
20 |
+
],
|
21 |
+
"require": {
|
22 |
+
"php": ">=5.3.2",
|
23 |
+
"ext-mbstring": "*"
|
24 |
+
},
|
25 |
+
"require-dev": {
|
26 |
+
"phpunit/phpunit": "3.7.*",
|
27 |
+
"mockery/mockery": ">=0.7.2",
|
28 |
+
"suin/php-expose": ">=1.0",
|
29 |
+
"mikey179/vfsStream": ">=1.1.0"
|
30 |
+
},
|
31 |
+
"autoload": {
|
32 |
+
"psr-0": {
|
33 |
+
"Goodby\\CSV": "src/"
|
34 |
+
}
|
35 |
+
}
|
36 |
+
}
|
vendor/goodby/csv/example/export_from_database_via_pdo.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once __DIR__.'/../vendor/autoload.php'; // load composer
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
6 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
7 |
+
|
8 |
+
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
|
9 |
+
|
10 |
+
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
|
11 |
+
|
12 |
+
$pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
|
13 |
+
$pdo->query("INSERT INTO user VALUES(1, 'alice', 'alice@example.com')");
|
14 |
+
$pdo->query("INSERT INTO user VALUES(2, 'bob', 'bob@example.com')");
|
15 |
+
$pdo->query("INSERT INTO user VALUES(3, 'carol', 'carol@example.com')");
|
16 |
+
|
17 |
+
$config = new ExporterConfig();
|
18 |
+
$exporter = new Exporter($config);
|
19 |
+
|
20 |
+
$stmt = $pdo->prepare("SELECT * FROM user");
|
21 |
+
$stmt->execute();
|
22 |
+
|
23 |
+
$exporter->export('php://output', new PdoCollection($stmt));
|
24 |
+
|
vendor/goodby/csv/example/import_from_database_via_pdo.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once __DIR__.'/../vendor/autoload.php'; // load composer
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
6 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
7 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
8 |
+
|
9 |
+
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
|
10 |
+
$pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
|
11 |
+
|
12 |
+
$config = new LexerConfig();
|
13 |
+
$lexer = new Lexer($config);
|
14 |
+
|
15 |
+
$interpreter = new Interpreter();
|
16 |
+
|
17 |
+
$interpreter->addObserver(function(array $columns) use ($pdo) {
|
18 |
+
$checkStmt = $pdo->prepare('SELECT count(*) FROM user WHERE id = ?');
|
19 |
+
$checkStmt->execute(array(($columns[0])));
|
20 |
+
|
21 |
+
$count = $checkStmt->fetchAll()[0][0];
|
22 |
+
|
23 |
+
if ($count === 0) {
|
24 |
+
$stmt = $pdo->prepare('INSERT INTO user (id, name, email) VALUES (?, ?, ?)');
|
25 |
+
$stmt->execute($columns);
|
26 |
+
}
|
27 |
+
});
|
28 |
+
|
29 |
+
$lexer->parse('user.csv', $interpreter);
|
vendor/goodby/csv/example/insert-or-update-user-for-mysql.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once __DIR__.'/../vendor/autoload.php'; // load composer
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
6 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
7 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
8 |
+
|
9 |
+
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
|
10 |
+
$pdo->query('CREATE TABLE IF NOT EXISTS user2 (id INT, `name` VARCHAR(255), email VARCHAR(255), PRIMARY KEY (`id`))');
|
11 |
+
|
12 |
+
$config = new LexerConfig();
|
13 |
+
$lexer = new Lexer($config);
|
14 |
+
|
15 |
+
$interpreter = new Interpreter();
|
16 |
+
|
17 |
+
$interpreter->addObserver(function(array $columns) use ($pdo) {
|
18 |
+
$stmt = $pdo->prepare('REPLACE user2 (id, name, email) VALUES (?, ?, ?)');
|
19 |
+
$stmt->execute($columns);
|
20 |
+
});
|
21 |
+
|
22 |
+
$lexer->parse('user.csv', $interpreter);
|
vendor/goodby/csv/example/sample.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once __DIR__.'/../vendor/autoload.php'; // load composer
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
6 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
7 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
8 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
9 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
10 |
+
|
11 |
+
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', array(
|
12 |
+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
13 |
+
));
|
14 |
+
$pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
|
15 |
+
|
16 |
+
// Importing
|
17 |
+
$config = new LexerConfig();
|
18 |
+
$lexer = new Lexer($config);
|
19 |
+
$interpreter = new Interpreter();
|
20 |
+
$interpreter->addObserver(function(array $columns) use ($pdo) {
|
21 |
+
$stmt = $pdo->prepare('INSERT INTO user (id, name, email) VALUES (?, ?, ?)');
|
22 |
+
$stmt->execute($columns);
|
23 |
+
});
|
24 |
+
$lexer->parse('user.csv', $interpreter);
|
25 |
+
|
26 |
+
// Exporting
|
27 |
+
$config = new ExporterConfig();
|
28 |
+
$exporter = new Exporter($config);
|
29 |
+
$exporter->export('php://output', array(
|
30 |
+
array('1', 'alice', 'alice@example.com'),
|
31 |
+
array('2', 'bob', 'bob@example.com'),
|
32 |
+
array('3', 'carol', 'carol@example.com'),
|
33 |
+
));
|
34 |
+
|
vendor/goodby/csv/example/temperature.tsv
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
9 Tokyo
|
2 |
+
27 Singapore
|
3 |
+
-5 Seoul
|
4 |
+
7 Shanghai
|
vendor/goodby/csv/example/tsv-sample.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once __DIR__.'/../vendor/autoload.php'; // load composer
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
6 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
7 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
8 |
+
|
9 |
+
// the result comes into this variable
|
10 |
+
$temperature = array();
|
11 |
+
|
12 |
+
// set up lexer
|
13 |
+
$config = new LexerConfig();
|
14 |
+
$config->setDelimiter("\t");
|
15 |
+
$config->setFlags(\SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY | \SplFileObject::READ_CSV);
|
16 |
+
$lexer = new Lexer($config);
|
17 |
+
|
18 |
+
// set up interpreter
|
19 |
+
$interpreter = new Interpreter();
|
20 |
+
$interpreter->addObserver(function(array $row) use (&$temperature) {
|
21 |
+
$temperature[] = array(
|
22 |
+
'temperature' => $row[0],
|
23 |
+
'city' => $row[1],
|
24 |
+
);
|
25 |
+
});
|
26 |
+
|
27 |
+
// parse
|
28 |
+
$lexer->parse('temperature.tsv', $interpreter);
|
29 |
+
|
30 |
+
var_dump($temperature);
|
vendor/goodby/csv/example/user.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
1,alice,alice@example.com
|
2 |
+
2,bob,bob@example.com
|
3 |
+
3,carol,carol@eample.com
|
vendor/goodby/csv/phpunit-bootstrap.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// For composer
|
3 |
+
require_once 'vendor/autoload.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* You can overwrite GOODBY_CSV_TEST_DB_* by `export` command.
|
7 |
+
* @see http://manpages.ubuntu.com/manpages/hardy/man5/exports.5.html
|
8 |
+
*
|
9 |
+
* Example:
|
10 |
+
*
|
11 |
+
* ```
|
12 |
+
* export GOODBY_CSV_TEST_DB_USER=alice
|
13 |
+
* export GOODBY_CSV_TEST_DB_PASS=passwd
|
14 |
+
* phpunit
|
15 |
+
* ```
|
16 |
+
*/
|
17 |
+
if ( isset($_SERVER['GOODBY_CSV_TEST_DB_HOST']) === false ) {
|
18 |
+
$_SERVER['GOODBY_CSV_TEST_DB_HOST'] = $_SERVER['GOODBY_CSV_TEST_DB_HOST_DEFAULT'];
|
19 |
+
}
|
20 |
+
if ( isset($_SERVER['GOODBY_CSV_TEST_DB_NAME']) === false ) {
|
21 |
+
$_SERVER['GOODBY_CSV_TEST_DB_NAME'] = $_SERVER['GOODBY_CSV_TEST_DB_NAME_DEFAULT'];
|
22 |
+
}
|
23 |
+
if ( isset($_SERVER['GOODBY_CSV_TEST_DB_USER']) === false ) {
|
24 |
+
$_SERVER['GOODBY_CSV_TEST_DB_USER'] = $_SERVER['GOODBY_CSV_TEST_DB_USER_DEFAULT'];
|
25 |
+
}
|
26 |
+
if ( isset($_SERVER['GOODBY_CSV_TEST_DB_PASS']) === false ) {
|
27 |
+
$_SERVER['GOODBY_CSV_TEST_DB_PASS'] = $_SERVER['GOODBY_CSV_TEST_DB_PASS_DEFAULT'];
|
28 |
+
}
|
vendor/goodby/csv/phpunit.xml.dist
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit
|
3 |
+
bootstrap="phpunit-bootstrap.php"
|
4 |
+
processIsolation="false"
|
5 |
+
verbose="true"
|
6 |
+
strict="false"
|
7 |
+
colors="true">
|
8 |
+
<testsuites>
|
9 |
+
<testsuite name="PHPUnit">
|
10 |
+
<directory>src/*/*/*/Tests</directory>
|
11 |
+
</testsuite>
|
12 |
+
</testsuites>
|
13 |
+
|
14 |
+
<php>
|
15 |
+
<includePath>./../html/install/src</includePath>
|
16 |
+
<!-- Don't change GOODBY_CSV_TEST_DB_*_DEFAULT here. See phpunit-bootstrap.php. -->
|
17 |
+
<server name="GOODBY_CSV_TEST_DB_HOST_DEFAULT" value="localhost"/>
|
18 |
+
<server name="GOODBY_CSV_TEST_DB_NAME_DEFAULT" value="goodby_csv_test"/>
|
19 |
+
<server name="GOODBY_CSV_TEST_DB_USER_DEFAULT" value="root"/>
|
20 |
+
<server name="GOODBY_CSV_TEST_DB_PASS_DEFAULT" value="root"/>
|
21 |
+
</php>
|
22 |
+
|
23 |
+
<logging>
|
24 |
+
<log
|
25 |
+
type="coverage-html"
|
26 |
+
target="metrics/coverage"
|
27 |
+
charset="UTF-8"
|
28 |
+
yui="true"
|
29 |
+
highlight="false"
|
30 |
+
lowUpperBound="35"
|
31 |
+
highLowerBound="70"/>
|
32 |
+
<!-- <log type="coverage-text" target="php://stdout" lowUpperBound="35" highLowerBound="70" /> -->
|
33 |
+
</logging>
|
34 |
+
|
35 |
+
<filter>
|
36 |
+
<whitelist>
|
37 |
+
<directory suffix=".php">src</directory>
|
38 |
+
<!-- <file>/path/to/file</file> -->
|
39 |
+
<exclude>
|
40 |
+
<!-- <file>/path/to/file</file> -->
|
41 |
+
<directory suffix="Interface.php">src</directory>
|
42 |
+
<directory>src/*/*/*/Tests</directory>
|
43 |
+
</exclude>
|
44 |
+
</whitelist>
|
45 |
+
</filter>
|
46 |
+
<listeners>
|
47 |
+
<listener class="\Mockery\Adapter\Phpunit\TestListener"
|
48 |
+
file="vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php"/>
|
49 |
+
</listeners>
|
50 |
+
</phpunit>
|
vendor/goodby/csv/scripts/bundle-devtools.sh
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#/usr/bin/env bash
|
2 |
+
|
3 |
+
function print_help {
|
4 |
+
echo "$(basename $0) [path/to/dir/to/install]"
|
5 |
+
}
|
6 |
+
|
7 |
+
set -eux
|
8 |
+
|
9 |
+
if [ $# -eq 0 ]
|
10 |
+
then
|
11 |
+
print_help
|
12 |
+
exit 1
|
13 |
+
fi
|
14 |
+
|
15 |
+
INSTALL_DIR=$1
|
16 |
+
|
17 |
+
if [ ! -d "$INSTALL_DIR" ]
|
18 |
+
then
|
19 |
+
echo "No such directory: $INSTALL_DIR"
|
20 |
+
exit 1
|
21 |
+
fi
|
22 |
+
|
23 |
+
cd $INSTALL_DIR
|
24 |
+
|
25 |
+
if [ -f composer.phar ]
|
26 |
+
then
|
27 |
+
rm -f composer.phar
|
28 |
+
fi
|
29 |
+
|
30 |
+
COMPOSER="$INSTALL_DIR/composer.phar"
|
31 |
+
|
32 |
+
wget http://getcomposer.org/composer.phar
|
33 |
+
|
34 |
+
chmod +x composer.phar
|
35 |
+
|
36 |
+
./composer.phar install --dev
|
vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/Exception/IOException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Protocol\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Throws if it is unable to write CSV file
|
7 |
+
*/
|
8 |
+
class IOException extends \RuntimeException
|
9 |
+
{
|
10 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/ExporterInterface.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Protocol;
|
4 |
+
|
5 |
+
use Traversable;
|
6 |
+
use Goodby\CSV\Export\Protocol\Exception\IOException;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Interface of the Exporter
|
10 |
+
*/
|
11 |
+
interface ExporterInterface
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* Export data as CSV file
|
15 |
+
*
|
16 |
+
* @param string $filename
|
17 |
+
* @param array|Traversable $rows
|
18 |
+
* @throws IOException
|
19 |
+
* @return void
|
20 |
+
*/
|
21 |
+
public function export($filename, $rows);
|
22 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/CallbackCollection.php
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Standard\Collection;
|
4 |
+
|
5 |
+
use Iterator;
|
6 |
+
use IteratorAggregate;
|
7 |
+
|
8 |
+
class CallbackCollection implements Iterator
|
9 |
+
{
|
10 |
+
private $callable;
|
11 |
+
private $data;
|
12 |
+
|
13 |
+
public function __construct($data, $callable)
|
14 |
+
{
|
15 |
+
$this->callable = $callable;
|
16 |
+
|
17 |
+
if (!is_callable($callable)) {
|
18 |
+
throw new \InvalidArgumentException('the second argument must be callable');
|
19 |
+
}
|
20 |
+
|
21 |
+
if (is_array($data)) {
|
22 |
+
$ao = new \ArrayObject($data);
|
23 |
+
$this->data = $ao->getIterator();
|
24 |
+
} elseif ($data instanceof Iterator) {
|
25 |
+
$this->data = $data;
|
26 |
+
} elseif ($data instanceof IteratorAggregate) {
|
27 |
+
$this->data = $data->getIterator();
|
28 |
+
} else {
|
29 |
+
throw new \InvalidArgumentException('data must be an array or an Iterator/IteratorAggregate');
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* (PHP 5 >= 5.0.0)<br/>
|
35 |
+
* Return the current element
|
36 |
+
* @link http://php.net/manual/en/iterator.current.php
|
37 |
+
* @return mixed Can return any type.
|
38 |
+
*/
|
39 |
+
public function current()
|
40 |
+
{
|
41 |
+
return call_user_func($this->callable, $this->data->current());
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* (PHP 5 >= 5.0.0)<br/>
|
46 |
+
* Move forward to next element
|
47 |
+
* @link http://php.net/manual/en/iterator.next.php
|
48 |
+
* @return void Any returned value is ignored.
|
49 |
+
*/
|
50 |
+
public function next()
|
51 |
+
{
|
52 |
+
$this->data->next();
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* (PHP 5 >= 5.0.0)<br/>
|
57 |
+
* Return the key of the current element
|
58 |
+
* @link http://php.net/manual/en/iterator.key.php
|
59 |
+
* @return mixed scalar on success, or null on failure.
|
60 |
+
*/
|
61 |
+
public function key()
|
62 |
+
{
|
63 |
+
return $this->data->key();
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* (PHP 5 >= 5.0.0)<br/>
|
68 |
+
* Checks if current position is valid
|
69 |
+
* @link http://php.net/manual/en/iterator.valid.php
|
70 |
+
* @return boolean The return value will be casted to boolean and then evaluated.
|
71 |
+
* Returns true on success or false on failure.
|
72 |
+
*/
|
73 |
+
public function valid()
|
74 |
+
{
|
75 |
+
return $this->data->valid();
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* (PHP 5 >= 5.0.0)<br/>
|
80 |
+
* Rewind the Iterator to the first element
|
81 |
+
* @link http://php.net/manual/en/iterator.rewind.php
|
82 |
+
* @return void Any returned value is ignored.
|
83 |
+
*/
|
84 |
+
public function rewind()
|
85 |
+
{
|
86 |
+
$this->data->rewind();
|
87 |
+
}
|
88 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/PdoCollection.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Standard\Collection;
|
4 |
+
|
5 |
+
use Iterator;
|
6 |
+
use PDO;
|
7 |
+
|
8 |
+
class PdoCollection implements Iterator
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* @var \PDOStatement
|
12 |
+
*/
|
13 |
+
private $stmt;
|
14 |
+
|
15 |
+
private $rowCount;
|
16 |
+
|
17 |
+
private $current = 0;
|
18 |
+
|
19 |
+
public function __construct(\PDOStatement $stmt)
|
20 |
+
{
|
21 |
+
$this->stmt = $stmt;
|
22 |
+
|
23 |
+
$this->rowCount = $this->stmt->rowCount();
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* (PHP 5 >= 5.0.0)<br/>
|
28 |
+
* Return the current element
|
29 |
+
* @link http://php.net/manual/en/iterator.current.php
|
30 |
+
* @return mixed Can return any type.
|
31 |
+
*/
|
32 |
+
public function current()
|
33 |
+
{
|
34 |
+
return $this->stmt->fetch(PDO::FETCH_ASSOC);
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* (PHP 5 >= 5.0.0)<br/>
|
39 |
+
* Move forward to next element
|
40 |
+
* @link http://php.net/manual/en/iterator.next.php
|
41 |
+
* @return void Any returned value is ignored.
|
42 |
+
*/
|
43 |
+
public function next()
|
44 |
+
{
|
45 |
+
$this->current++;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* (PHP 5 >= 5.0.0)<br/>
|
50 |
+
* Return the key of the current element
|
51 |
+
* @link http://php.net/manual/en/iterator.key.php
|
52 |
+
* @return mixed scalar on success, or null on failure.
|
53 |
+
*/
|
54 |
+
public function key()
|
55 |
+
{
|
56 |
+
$this->current;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* (PHP 5 >= 5.0.0)<br/>
|
61 |
+
* Checks if current position is valid
|
62 |
+
* @link http://php.net/manual/en/iterator.valid.php
|
63 |
+
* @return boolean The return value will be casted to boolean and then evaluated.
|
64 |
+
* Returns true on success or false on failure.
|
65 |
+
*/
|
66 |
+
public function valid()
|
67 |
+
{
|
68 |
+
return ($this->rowCount > $this->current);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* (PHP 5 >= 5.0.0)<br/>
|
73 |
+
* Rewind the Iterator to the first element
|
74 |
+
* @link http://php.net/manual/en/iterator.rewind.php
|
75 |
+
* @return void Any returned value is ignored.
|
76 |
+
*/
|
77 |
+
public function rewind()
|
78 |
+
{
|
79 |
+
$this->stmt->execute();
|
80 |
+
$this->current = 0;
|
81 |
+
}
|
82 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/CsvFileObject.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Standard;
|
4 |
+
|
5 |
+
use SplFileObject;
|
6 |
+
|
7 |
+
class CsvFileObject extends SplFileObject
|
8 |
+
{
|
9 |
+
const FILE_MODE_WRITE = 'w';
|
10 |
+
const FILE_MODE_APPEND = 'a';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* newline character
|
14 |
+
* @var string
|
15 |
+
*/
|
16 |
+
private $newline = "\n";
|
17 |
+
|
18 |
+
/**
|
19 |
+
* CSV filter
|
20 |
+
* @var callable
|
21 |
+
*/
|
22 |
+
private $csvFilter;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @param string $newline
|
26 |
+
* @return void
|
27 |
+
*/
|
28 |
+
public function setNewline($newline)
|
29 |
+
{
|
30 |
+
$this->newline = $newline;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Set csv filter
|
35 |
+
* @param callable $filter
|
36 |
+
*/
|
37 |
+
public function setCsvFilter($filter)
|
38 |
+
{
|
39 |
+
$this->csvFilter = $filter;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Write a field array as a CSV line
|
44 |
+
* @param array $fields
|
45 |
+
* @param string $delimiter
|
46 |
+
* @param string $enclosure
|
47 |
+
* @param useless $escape THIS PARAM IS UNSED, BUT REQUIRED EXISTS, see https://bugs.php.net/bug.php?id=68479 and https://github.com/goodby/csv/issues/56
|
48 |
+
* @return int|void
|
49 |
+
*/
|
50 |
+
public function fputcsv($fields, $delimiter = null, $enclosure = null, $escape = null)
|
51 |
+
{
|
52 |
+
// Temporary output a line to memory to get line as string
|
53 |
+
$fp = fopen('php://temp', 'w+');
|
54 |
+
$arguments = func_get_args();
|
55 |
+
array_unshift($arguments, $fp);
|
56 |
+
call_user_func_array('fputcsv', $arguments);
|
57 |
+
rewind($fp);
|
58 |
+
|
59 |
+
$line = '';
|
60 |
+
|
61 |
+
while ( feof($fp) === false ) {
|
62 |
+
$line .= fgets($fp);
|
63 |
+
}
|
64 |
+
|
65 |
+
fclose($fp);
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Because the php_fputcsv() implementation in PHP´s source code
|
69 |
+
* has a hardcoded "\n", this method replaces the last LF code
|
70 |
+
* with what the client code wishes.
|
71 |
+
*/
|
72 |
+
$line = rtrim($line, "\n"). $this->newline;
|
73 |
+
|
74 |
+
// if the enclosure was '' | false
|
75 |
+
if (empty($enclosure)) {
|
76 |
+
$line = str_replace("\0", '', $line);
|
77 |
+
}
|
78 |
+
|
79 |
+
if ( is_callable($this->csvFilter) ) {
|
80 |
+
$line = call_user_func($this->csvFilter, $line);
|
81 |
+
}
|
82 |
+
|
83 |
+
return $this->fwrite($line);
|
84 |
+
}
|
85 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exception/StrictViolationException.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Standard\Exception;
|
4 |
+
|
5 |
+
class StrictViolationException extends \RuntimeException
|
6 |
+
{
|
7 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exporter.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Standard;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Protocol\ExporterInterface;
|
6 |
+
use Goodby\CSV\Export\Protocol\Exception\IOException;
|
7 |
+
use Goodby\CSV\Export\Standard\Exception\StrictViolationException;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Standard exporter class
|
11 |
+
*/
|
12 |
+
class Exporter implements ExporterInterface
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* @var ExporterConfig
|
16 |
+
*/
|
17 |
+
private $config;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var int
|
21 |
+
*/
|
22 |
+
private $rowConsistency = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @var bool
|
26 |
+
*/
|
27 |
+
private $strict = true;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Return new Exporter object
|
31 |
+
* @param ExporterConfig $config
|
32 |
+
*/
|
33 |
+
public function __construct(ExporterConfig $config)
|
34 |
+
{
|
35 |
+
$this->config = $config;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Disable strict mode
|
40 |
+
*/
|
41 |
+
public function unstrict()
|
42 |
+
{
|
43 |
+
$this->strict = false;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* {@inherit}
|
48 |
+
* @throws StrictViolationException
|
49 |
+
*/
|
50 |
+
public function export($filename, $rows)
|
51 |
+
{
|
52 |
+
$delimiter = $this->config->getDelimiter();
|
53 |
+
$enclosure = $this->config->getEnclosure();
|
54 |
+
$enclosure = empty($enclosure) ? "\0" : $enclosure;
|
55 |
+
$newline = $this->config->getNewline();
|
56 |
+
$fromCharset = $this->config->getFromCharset();
|
57 |
+
$toCharset = $this->config->getToCharset();
|
58 |
+
$fileMode = $this->config->getFileMode();
|
59 |
+
$columnHeaders = $this->config->getColumnHeaders();
|
60 |
+
|
61 |
+
try {
|
62 |
+
$csv = new CsvFileObject($filename, $fileMode);
|
63 |
+
} catch ( \Exception $e ) {
|
64 |
+
throw new IOException($e->getMessage(), null, $e);
|
65 |
+
}
|
66 |
+
|
67 |
+
$csv->setNewline($newline);
|
68 |
+
|
69 |
+
if ( $toCharset ) {
|
70 |
+
$csv->setCsvFilter(function($line) use($toCharset, $fromCharset) {
|
71 |
+
return mb_convert_encoding($line, $toCharset, $fromCharset);
|
72 |
+
});
|
73 |
+
}
|
74 |
+
|
75 |
+
if (count($columnHeaders) > 0) {
|
76 |
+
$this->checkRowConsistency($columnHeaders);
|
77 |
+
$csv->fputcsv($columnHeaders, $delimiter, $enclosure);
|
78 |
+
}
|
79 |
+
|
80 |
+
foreach ( $rows as $row ) {
|
81 |
+
$this->checkRowConsistency($row);
|
82 |
+
$csv->fputcsv($row, $delimiter, $enclosure);
|
83 |
+
}
|
84 |
+
$csv->fflush();
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Check if the column count is consistent with comparing other rows
|
89 |
+
* @param array|\Countable $row
|
90 |
+
* @throws Exception\StrictViolationException
|
91 |
+
*/
|
92 |
+
private function checkRowConsistency($row)
|
93 |
+
{
|
94 |
+
if ( $this->strict === false ) {
|
95 |
+
return;
|
96 |
+
}
|
97 |
+
|
98 |
+
$current = count($row);
|
99 |
+
|
100 |
+
if ( $this->rowConsistency === null ) {
|
101 |
+
$this->rowConsistency = $current;
|
102 |
+
}
|
103 |
+
|
104 |
+
if ( $current !== $this->rowConsistency ) {
|
105 |
+
throw new StrictViolationException();
|
106 |
+
}
|
107 |
+
|
108 |
+
$this->rowConsistency = $current;
|
109 |
+
}
|
110 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/ExporterConfig.php
ADDED
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Standard;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Config for Exporter object
|
7 |
+
*/
|
8 |
+
class ExporterConfig
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Delimiter
|
12 |
+
* @var string
|
13 |
+
*/
|
14 |
+
private $delimiter = ',';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Enclosure
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $enclosure = '"';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Escape
|
24 |
+
* @var string
|
25 |
+
*/
|
26 |
+
private $escape = '\\';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Newline code
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
private $newline = "\r\n";
|
33 |
+
|
34 |
+
/**
|
35 |
+
* From charset
|
36 |
+
* @var string
|
37 |
+
*/
|
38 |
+
private $fromCharset = 'auto';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* To charset
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
private $toCharset = null;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* File mode
|
48 |
+
* @var string
|
49 |
+
*/
|
50 |
+
private $fileMode = CsvFileObject::FILE_MODE_WRITE;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* The column headers.
|
54 |
+
* @var array
|
55 |
+
*/
|
56 |
+
private $columnHeaders = array();
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Set delimiter
|
60 |
+
* @param string $delimiter
|
61 |
+
* @return ExporterConfig
|
62 |
+
*/
|
63 |
+
public function setDelimiter($delimiter)
|
64 |
+
{
|
65 |
+
$this->delimiter = $delimiter;
|
66 |
+
return $this;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Return delimiter
|
71 |
+
* @return string
|
72 |
+
*/
|
73 |
+
public function getDelimiter()
|
74 |
+
{
|
75 |
+
return $this->delimiter;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Set enclosure
|
80 |
+
* @param string $enclosure
|
81 |
+
* @return ExporterConfig
|
82 |
+
*/
|
83 |
+
public function setEnclosure($enclosure)
|
84 |
+
{
|
85 |
+
$this->enclosure = $enclosure;
|
86 |
+
return $this;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Return enclosure
|
91 |
+
* @return string
|
92 |
+
*/
|
93 |
+
public function getEnclosure()
|
94 |
+
{
|
95 |
+
return $this->enclosure;
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Set escape
|
100 |
+
* @param string $escape
|
101 |
+
* @return ExporterConfig
|
102 |
+
*/
|
103 |
+
public function setEscape($escape)
|
104 |
+
{
|
105 |
+
$this->escape = $escape;
|
106 |
+
return $this;
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Return escape
|
111 |
+
* @return string
|
112 |
+
*/
|
113 |
+
public function getEscape()
|
114 |
+
{
|
115 |
+
return $this->escape;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Set newline
|
120 |
+
* @param string $newline
|
121 |
+
* @return ExporterConfig
|
122 |
+
*/
|
123 |
+
public function setNewline($newline)
|
124 |
+
{
|
125 |
+
$this->newline = $newline;
|
126 |
+
return $this;
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Return newline
|
131 |
+
* @return string
|
132 |
+
*/
|
133 |
+
public function getNewline()
|
134 |
+
{
|
135 |
+
return $this->newline;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Set from-character set
|
140 |
+
* @param string $fromCharset
|
141 |
+
* @return ExporterConfig
|
142 |
+
*/
|
143 |
+
public function setFromCharset($fromCharset)
|
144 |
+
{
|
145 |
+
$this->fromCharset = $fromCharset;
|
146 |
+
return $this;
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Return from-character set
|
151 |
+
* @return string
|
152 |
+
*/
|
153 |
+
public function getFromCharset()
|
154 |
+
{
|
155 |
+
return $this->fromCharset;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Set to-character set
|
160 |
+
* @param string $toCharset
|
161 |
+
* @return ExporterConfig
|
162 |
+
*/
|
163 |
+
public function setToCharset($toCharset)
|
164 |
+
{
|
165 |
+
$this->toCharset = $toCharset;
|
166 |
+
return $this;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Return to-character set
|
171 |
+
* @return string
|
172 |
+
*/
|
173 |
+
public function getToCharset()
|
174 |
+
{
|
175 |
+
return $this->toCharset;
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Set file mode
|
180 |
+
* @param string $fileMode
|
181 |
+
* @return ExporterConfig
|
182 |
+
*/
|
183 |
+
public function setFileMode($fileMode)
|
184 |
+
{
|
185 |
+
$this->fileMode = $fileMode;
|
186 |
+
return $this;
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Return file mode
|
191 |
+
* @return string
|
192 |
+
*/
|
193 |
+
public function getFileMode()
|
194 |
+
{
|
195 |
+
return $this->fileMode;
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Set the column headers.
|
200 |
+
* @param array $columnHeaders
|
201 |
+
* @return ExporterConfig
|
202 |
+
*/
|
203 |
+
public function setColumnHeaders(array $columnHeaders)
|
204 |
+
{
|
205 |
+
$this->columnHeaders = $columnHeaders;
|
206 |
+
|
207 |
+
return $this;
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Get the column headers.
|
212 |
+
* @return array
|
213 |
+
*/
|
214 |
+
public function getColumnHeaders()
|
215 |
+
{
|
216 |
+
return $this->columnHeaders;
|
217 |
+
}
|
218 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Protocol/ExporterInterfaceTest.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Protocol;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Protocol\Exception\IOException;
|
6 |
+
|
7 |
+
class ExporterInterfaceTest extends \PHPUnit_Framework_TestCase
|
8 |
+
{
|
9 |
+
public function testExport()
|
10 |
+
{
|
11 |
+
$exporter = $this->getMock('Goodby\CSV\Export\Protocol\ExporterInterface');
|
12 |
+
$exporter->expects($this->once())->method('export');
|
13 |
+
|
14 |
+
$exporter->export('filename', array(
|
15 |
+
array('ID', 'name', 'email'),
|
16 |
+
array('1', 'alice', 'alice@example.com'),
|
17 |
+
array('2', 'bob', 'bob@example.com'),
|
18 |
+
));
|
19 |
+
}
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @expectedException \Goodby\CSV\Export\Protocol\Exception\IOException
|
23 |
+
*/
|
24 |
+
public function testExportsThrowsIOException()
|
25 |
+
{
|
26 |
+
$exporter = $this->getMock('Goodby\CSV\Export\Protocol\ExporterInterface');
|
27 |
+
|
28 |
+
$exporter
|
29 |
+
->expects($this->once())
|
30 |
+
->method('export')
|
31 |
+
->will($this->throwException(new IOException('Unable to write')));
|
32 |
+
|
33 |
+
$exporter->export('/path/to/file.csv', array(
|
34 |
+
array('ID', 'name', 'email'),
|
35 |
+
array('1', 'alice', 'alice@example.com'),
|
36 |
+
array('2', 'bob', 'bob@example.com'),
|
37 |
+
));
|
38 |
+
}
|
39 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/Collection/PdoCollectionTest.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Standard\Join\Collection;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
|
6 |
+
use Goodby\CSV\TestHelper\DbManager;
|
7 |
+
|
8 |
+
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
|
9 |
+
|
10 |
+
class PdoCollectionTest extends \PHPUnit_Framework_TestCase
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @var \Goodby\CSV\TestHelper\DbManager
|
14 |
+
*/
|
15 |
+
private $manager = null;
|
16 |
+
|
17 |
+
public function setUp()
|
18 |
+
{
|
19 |
+
$this->manager = new DbManager();
|
20 |
+
|
21 |
+
$pdo = $this->manager->getPdo();
|
22 |
+
|
23 |
+
$stmt = $pdo->prepare("CREATE TABLE collection_test ( id INT, name VARCHAR(32) )");
|
24 |
+
$stmt->execute();
|
25 |
+
|
26 |
+
$pdo->prepare("INSERT INTO collection_test VALUES(1, 'name')")->execute();
|
27 |
+
$pdo->prepare("INSERT INTO collection_test VALUES(2, 'name')")->execute();
|
28 |
+
$pdo->prepare("INSERT INTO collection_test VALUES(3, 'name')")->execute();
|
29 |
+
}
|
30 |
+
|
31 |
+
public function tearDown()
|
32 |
+
{
|
33 |
+
unset($this->manager);
|
34 |
+
}
|
35 |
+
|
36 |
+
public function testUsage()
|
37 |
+
{
|
38 |
+
$pdo = $this->manager->getPdo();
|
39 |
+
|
40 |
+
$stmt = $pdo->prepare("SELECT * FROM collection_test");
|
41 |
+
$stmt->execute();
|
42 |
+
|
43 |
+
$pdoCollection = new PdoCollection($stmt);
|
44 |
+
|
45 |
+
foreach ($pdoCollection as $line) {
|
46 |
+
$this->assertEquals("name", $line["name"]);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
public function testUsageWithCallbackCollection()
|
51 |
+
{
|
52 |
+
$pdo = $this->manager->getPdo();
|
53 |
+
|
54 |
+
$stmt = $pdo->prepare("SELECT * FROM collection_test");
|
55 |
+
$stmt->execute();
|
56 |
+
|
57 |
+
$pdoCollection = new PdoCollection($stmt);
|
58 |
+
|
59 |
+
$callbackCollection = new CallbackCollection($pdoCollection, function($row) {
|
60 |
+
$row['test'] = 'test';
|
61 |
+
return $row;
|
62 |
+
});
|
63 |
+
|
64 |
+
foreach ($callbackCollection as $line) {
|
65 |
+
$this->assertEquals('test', $line['test']);
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/ExporterTest.php
ADDED
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Standard\Join;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
6 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
7 |
+
use Goodby\CSV\Export\Standard\Exception\StrictViolationException;
|
8 |
+
use Goodby\CSV\Export\Protocol\Exception\IOException;
|
9 |
+
|
10 |
+
use org\bovigo\vfs\vfsStreamDirectory;
|
11 |
+
use org\bovigo\vfs\vfsStream;
|
12 |
+
|
13 |
+
class ExporterTest extends \PHPUnit_Framework_TestCase
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @var vfsStreamDirectory
|
17 |
+
*/
|
18 |
+
private $root;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* set up test environment
|
22 |
+
*/
|
23 |
+
public function setUp()
|
24 |
+
{
|
25 |
+
$this->root = vfsStream::setup('output');
|
26 |
+
}
|
27 |
+
|
28 |
+
public function testExport()
|
29 |
+
{
|
30 |
+
$config = new ExporterConfig();
|
31 |
+
$exporter = new Exporter($config);
|
32 |
+
|
33 |
+
$this->assertFileNotExists('vfs://output/data.csv');
|
34 |
+
$exporter->export('vfs://output/data.csv', array(
|
35 |
+
array('ID', 'name', 'email'),
|
36 |
+
array('1', 'alice', 'alice@example.com'),
|
37 |
+
array('2', 'bob', 'bob@example.com'),
|
38 |
+
));
|
39 |
+
|
40 |
+
$this->assertFileExists('vfs://output/data.csv');
|
41 |
+
$expectedContents = "ID,name,email\r\n";
|
42 |
+
$expectedContents .= "1,alice,alice@example.com\r\n";
|
43 |
+
$expectedContents .= "2,bob,bob@example.com\r\n";
|
44 |
+
$this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
|
45 |
+
}
|
46 |
+
|
47 |
+
public function test_export_with_carriage_return()
|
48 |
+
{
|
49 |
+
$config = new ExporterConfig();
|
50 |
+
$config->setNewline("\r");
|
51 |
+
$exporter = new Exporter($config);
|
52 |
+
$exporter->unstrict();
|
53 |
+
|
54 |
+
$this->assertFileNotExists('vfs://output/data.csv');
|
55 |
+
$exporter->export('vfs://output/data.csv', array(
|
56 |
+
array('aaa', 'bbb', 'ccc', 'dddd'),
|
57 |
+
array('123', '456', '789'),
|
58 |
+
array('"aaa"', '"bbb"', '', ''),
|
59 |
+
));
|
60 |
+
|
61 |
+
$this->assertFileExists('vfs://output/data.csv');
|
62 |
+
$expectedContents = "aaa,bbb,ccc,dddd\r";
|
63 |
+
$expectedContents .= "123,456,789\r";
|
64 |
+
$expectedContents .= '"""aaa""","""bbb""",,'."\r";
|
65 |
+
$this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
|
66 |
+
}
|
67 |
+
|
68 |
+
public function testUnstrict()
|
69 |
+
{
|
70 |
+
$config = new ExporterConfig();
|
71 |
+
$exporter = new Exporter($config);
|
72 |
+
$this->assertAttributeSame(true, 'strict', $exporter);
|
73 |
+
$exporter->unstrict();
|
74 |
+
$this->assertAttributeSame(false, 'strict', $exporter);
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @expectedException \Goodby\CSV\Export\Standard\Exception\StrictViolationException
|
79 |
+
*/
|
80 |
+
public function testStrict()
|
81 |
+
{
|
82 |
+
$config = new ExporterConfig();
|
83 |
+
$exporter = new Exporter($config);
|
84 |
+
|
85 |
+
$exporter->export('vfs://output/data.csv', array(
|
86 |
+
array('a', 'b', 'c'),
|
87 |
+
array('a', 'b', 'c'),
|
88 |
+
array('a', 'b'),
|
89 |
+
));
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @requires PHP 5.4
|
94 |
+
*/
|
95 |
+
public function test_throwing_IOException_when_failed_to_write_file()
|
96 |
+
{
|
97 |
+
$noWritableCsv = 'vfs://output/no-writable.csv';
|
98 |
+
touch($noWritableCsv);
|
99 |
+
chmod($noWritableCsv, 0444);
|
100 |
+
|
101 |
+
$this->assertFalse(is_writable($noWritableCsv));
|
102 |
+
|
103 |
+
$config = new ExporterConfig();
|
104 |
+
$exporter = new Exporter($config);
|
105 |
+
|
106 |
+
$e = null;
|
107 |
+
|
108 |
+
try {
|
109 |
+
$exporter->export($noWritableCsv, array(
|
110 |
+
array('a', 'b', 'c'),
|
111 |
+
));
|
112 |
+
} catch ( IOException $e ) {
|
113 |
+
|
114 |
+
}
|
115 |
+
|
116 |
+
$this->assertTrue($e instanceof IOException);
|
117 |
+
$this->assertContains('failed to open', $e->getMessage());
|
118 |
+
}
|
119 |
+
|
120 |
+
public function test_encoding()
|
121 |
+
{
|
122 |
+
$csv = 'vfs://output/euc.csv';
|
123 |
+
$this->assertFileNotExists($csv);
|
124 |
+
|
125 |
+
$config = new ExporterConfig();
|
126 |
+
$config->setToCharset('EUC-JP');
|
127 |
+
$config->setNewline("\n");
|
128 |
+
$exporter = new Exporter($config);
|
129 |
+
|
130 |
+
$exporter->export($csv, array(
|
131 |
+
array('あ', 'い', 'う', 'え', 'お'),
|
132 |
+
));
|
133 |
+
|
134 |
+
$this->assertFileEquals(__DIR__.'/csv_files/euc-jp.csv', $csv);
|
135 |
+
}
|
136 |
+
|
137 |
+
public function test_without_encoding()
|
138 |
+
{
|
139 |
+
$csv = 'vfs://output/utf-8.csv';
|
140 |
+
$this->assertFileNotExists($csv);
|
141 |
+
|
142 |
+
$config = new ExporterConfig();
|
143 |
+
$config->setNewline("\n");
|
144 |
+
$exporter = new Exporter($config);
|
145 |
+
|
146 |
+
$exporter->export($csv, array(
|
147 |
+
array('✔', '✔', '✔'),
|
148 |
+
array('★', '★', '★'),
|
149 |
+
));
|
150 |
+
|
151 |
+
$this->assertFileEquals(__DIR__.'/csv_files/utf-8.csv', $csv);
|
152 |
+
}
|
153 |
+
|
154 |
+
public function test_unseekable_wrapper_and_custom_newline_code()
|
155 |
+
{
|
156 |
+
$config = new ExporterConfig();
|
157 |
+
$config->setNewline("\r\n");
|
158 |
+
$exporter = new Exporter($config);
|
159 |
+
|
160 |
+
ob_start();
|
161 |
+
$exporter->export('php://output', array(
|
162 |
+
array('a', 'b', 'c'),
|
163 |
+
array('1', '2', '3'),
|
164 |
+
));
|
165 |
+
$output = ob_get_clean();
|
166 |
+
|
167 |
+
$expectedCount = "a,b,c\r\n1,2,3\r\n";
|
168 |
+
$this->assertSame($expectedCount, $output);
|
169 |
+
}
|
170 |
+
|
171 |
+
public function test_multiple_line_columns()
|
172 |
+
{
|
173 |
+
$csv = 'vfs://output/multiple-lines.csv';
|
174 |
+
$this->assertFileNotExists($csv);
|
175 |
+
|
176 |
+
$config = new ExporterConfig();
|
177 |
+
$config->setNewline("\r\n");
|
178 |
+
$exporter = new Exporter($config);
|
179 |
+
|
180 |
+
$exporter->export($csv, array(
|
181 |
+
array("line1\r\nline2\r\nline3", "single-line"),
|
182 |
+
array("line1\r\nline2\r\nline3", "single-line"),
|
183 |
+
array("line1\r\nline2\r\nline3", "single-line"),
|
184 |
+
));
|
185 |
+
|
186 |
+
$this->assertFileEquals(__DIR__.'/csv_files/multiple-lines.csv', $csv);
|
187 |
+
}
|
188 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/UsageTest.php
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Standard\Join;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Standard\Exporter;
|
6 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
7 |
+
|
8 |
+
use Goodby\CSV\Export\Standard\Collection\PdoCollection;
|
9 |
+
|
10 |
+
use Goodby\CSV\TestHelper\DbManager;
|
11 |
+
|
12 |
+
use org\bovigo\vfs\vfsStream;
|
13 |
+
use org\bovigo\vfs\vfsStreamDirectory;
|
14 |
+
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
|
15 |
+
|
16 |
+
class UsageTest extends \PHPUnit_Framework_TestCase
|
17 |
+
{
|
18 |
+
/**
|
19 |
+
* @var \Goodby\CSV\TestHelper\DbManager
|
20 |
+
*/
|
21 |
+
private $manager = null;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var vfsStreamDirectory
|
25 |
+
*/
|
26 |
+
private $root;
|
27 |
+
|
28 |
+
public function setUp()
|
29 |
+
{
|
30 |
+
$this->root = vfsStream::setup('output');
|
31 |
+
|
32 |
+
$this->manager = new DbManager();
|
33 |
+
|
34 |
+
$pdo = $this->manager->getPdo();
|
35 |
+
|
36 |
+
$stmt = $pdo->prepare("CREATE TABLE collection_test ( id INT, name VARCHAR(32) )");
|
37 |
+
$stmt->execute();
|
38 |
+
|
39 |
+
$pdo->prepare("INSERT INTO collection_test VALUES(1, 'name')")->execute();
|
40 |
+
$pdo->prepare("INSERT INTO collection_test VALUES(2, 'name')")->execute();
|
41 |
+
$pdo->prepare("INSERT INTO collection_test VALUES(3, 'name')")->execute();
|
42 |
+
}
|
43 |
+
|
44 |
+
public function tearDown()
|
45 |
+
{
|
46 |
+
unset($this->manager);
|
47 |
+
}
|
48 |
+
|
49 |
+
public function testUsage()
|
50 |
+
{
|
51 |
+
$pdo = $this->manager->getPdo();
|
52 |
+
|
53 |
+
$stmt = $pdo->prepare("SELECT * FROM collection_test");
|
54 |
+
$stmt->execute();
|
55 |
+
|
56 |
+
$this->assertFileNotExists('vfs://output/data.csv');
|
57 |
+
|
58 |
+
$collection = new PdoCollection($stmt);
|
59 |
+
|
60 |
+
$config = new ExporterConfig();
|
61 |
+
$exporter = new Exporter($config);
|
62 |
+
$exporter->export('vfs://output/data.csv', $collection);
|
63 |
+
|
64 |
+
$expectedContents = "1,name\r\n";
|
65 |
+
$expectedContents .= "2,name\r\n";
|
66 |
+
$expectedContents .= "3,name\r\n";
|
67 |
+
|
68 |
+
$this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
|
69 |
+
}
|
70 |
+
|
71 |
+
public function testUsageWithCallbackCollection()
|
72 |
+
{
|
73 |
+
$this->assertFileNotExists('vfs://output/data.csv');
|
74 |
+
|
75 |
+
$data = array();
|
76 |
+
$data[] = array(1, 'name1');
|
77 |
+
$data[] = array(2, 'name2');
|
78 |
+
$data[] = array(3, 'name3');
|
79 |
+
|
80 |
+
$collection = new CallbackCollection($data, function($row) {
|
81 |
+
$row[1] = $row[1] . '!';
|
82 |
+
return $row;
|
83 |
+
});
|
84 |
+
|
85 |
+
$config = new ExporterConfig();
|
86 |
+
$exporter = new Exporter($config);
|
87 |
+
$exporter->export('vfs://output/data.csv', $collection);
|
88 |
+
|
89 |
+
$expectedContents = "1,name1!\r\n";
|
90 |
+
$expectedContents .= "2,name2!\r\n";
|
91 |
+
$expectedContents .= "3,name3!\r\n";
|
92 |
+
|
93 |
+
$this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
|
94 |
+
}
|
95 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/euc-jp.csv
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
��,��,��,��,��
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/multiple-lines.csv
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"line1
|
2 |
+
line2
|
3 |
+
line3",single-line
|
4 |
+
"line1
|
5 |
+
line2
|
6 |
+
line3",single-line
|
7 |
+
"line1
|
8 |
+
line2
|
9 |
+
line3",single-line
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/utf-8.csv
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
✔,✔,✔
|
2 |
+
★,★,★
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/CallbackCollectionTest.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Standard\Unit\Collection;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
|
6 |
+
use Goodby\CSV\Export\Tests\Standard\Unit\Collection\SampleAggIterator;
|
7 |
+
|
8 |
+
class CallbackCollectionTest extends \PHPUnit_Framework_TestCase
|
9 |
+
{
|
10 |
+
public function testSample()
|
11 |
+
{
|
12 |
+
$data = array();
|
13 |
+
$data[] = array('user', 'name1');
|
14 |
+
$data[] = array('user', 'name2');
|
15 |
+
$data[] = array('user', 'name3');
|
16 |
+
|
17 |
+
$collection = new CallbackCollection($data, function($mixed) {
|
18 |
+
return $mixed;
|
19 |
+
});
|
20 |
+
|
21 |
+
$index = 1;
|
22 |
+
foreach ($collection as $each) {
|
23 |
+
$this->assertEquals($each[0], 'user');
|
24 |
+
$this->assertEquals($each[1], 'name' . $index);
|
25 |
+
$index++;
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
public function testIteratorAggregate()
|
30 |
+
{
|
31 |
+
|
32 |
+
$data = array();
|
33 |
+
$data[] = array('user', 'name1');
|
34 |
+
$data[] = array('user', 'name2');
|
35 |
+
$data[] = array('user', 'name3');
|
36 |
+
|
37 |
+
$iterator = new SampleAggIterator($data);
|
38 |
+
|
39 |
+
$collection = new CallbackCollection($iterator, function($mixed) {
|
40 |
+
return $mixed;
|
41 |
+
});
|
42 |
+
|
43 |
+
$index = 1;
|
44 |
+
foreach ($collection as $each) {
|
45 |
+
$this->assertEquals($each[0], 'user');
|
46 |
+
$this->assertEquals($each[1], 'name' . $index);
|
47 |
+
$index++;
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/SampleAggIterator.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Standard\Unit\Collection;
|
4 |
+
use \ArrayIterator;
|
5 |
+
|
6 |
+
class SampleAggIterator implements \IteratorAggregate
|
7 |
+
{
|
8 |
+
protected $data;
|
9 |
+
|
10 |
+
public function __construct($data)
|
11 |
+
{
|
12 |
+
$this->data = $data;
|
13 |
+
}
|
14 |
+
|
15 |
+
public function getIterator()
|
16 |
+
{
|
17 |
+
return new ArrayIterator($this->data);
|
18 |
+
}
|
19 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/ExporterConfigTest.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Export\Tests\Standard\Unit;
|
4 |
+
|
5 |
+
use Goodby\CSV\Export\Standard\ExporterConfig;
|
6 |
+
|
7 |
+
class ExporterConfigTest extends \PHPUnit_Framework_TestCase
|
8 |
+
{
|
9 |
+
public function testDelimiter()
|
10 |
+
{
|
11 |
+
$config = new ExporterConfig();
|
12 |
+
$this->assertSame(',', $config->getDelimiter());
|
13 |
+
$this->assertSame('del', $config->setDelimiter('del')->getDelimiter());
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testEnclosure()
|
17 |
+
{
|
18 |
+
$config = new ExporterConfig();
|
19 |
+
$this->assertSame('"', $config->getEnclosure());
|
20 |
+
$this->assertSame('enc', $config->setEnclosure('enc')->getEnclosure());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testEscape()
|
24 |
+
{
|
25 |
+
$config = new ExporterConfig();
|
26 |
+
$this->assertSame('\\', $config->getEscape());
|
27 |
+
$this->assertSame('esc', $config->setEscape('esc')->getEscape());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testNewline()
|
31 |
+
{
|
32 |
+
$config = new ExporterConfig();
|
33 |
+
$this->assertSame("\r\n", $config->getNewline());
|
34 |
+
$this->assertSame("\r", $config->setNewline("\r")->getNewline());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testFromCharset()
|
38 |
+
{
|
39 |
+
$config = new ExporterConfig();
|
40 |
+
$this->assertSame('auto', $config->getFromCharset());
|
41 |
+
$this->assertSame('UTF-8', $config->setFromCharset('UTF-8')->getFromCharset());
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testToCharset()
|
45 |
+
{
|
46 |
+
$config = new ExporterConfig();
|
47 |
+
$this->assertSame(null, $config->getToCharset());
|
48 |
+
$this->assertSame('UTF-8', $config->setToCharset('UTF-8')->getToCharset());
|
49 |
+
}
|
50 |
+
|
51 |
+
public function testColumnHeaders()
|
52 |
+
{
|
53 |
+
$columnHeaders = array(
|
54 |
+
'Header 1',
|
55 |
+
'Header 2',
|
56 |
+
'Header 3',
|
57 |
+
);
|
58 |
+
|
59 |
+
$config = new ExporterConfig();
|
60 |
+
$this->assertSame(array(), $config->getColumnHeaders());
|
61 |
+
$this->assertSame($columnHeaders, $config->setColumnHeaders($columnHeaders)->getColumnHeaders());
|
62 |
+
}
|
63 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/CsvFileNotFoundException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Protocol\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Throws if csv file not found
|
7 |
+
*/
|
8 |
+
class CsvFileNotFoundException extends \RuntimeException
|
9 |
+
{
|
10 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/InvalidLexicalException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Protocol\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Invalid lexical Exception
|
7 |
+
*/
|
8 |
+
class InvalidLexicalException extends \RuntimeException
|
9 |
+
{
|
10 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/InterpreterInterface.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Protocol;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Interface of the Interpreter
|
7 |
+
*/
|
8 |
+
interface InterpreterInterface
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* @param $line
|
12 |
+
* @return void
|
13 |
+
*/
|
14 |
+
public function interpret($line);
|
15 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/LexerInterface.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Protocol;
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Protocol\Exception\CsvFileNotFoundException;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Interface of Lexer
|
9 |
+
*/
|
10 |
+
interface LexerInterface
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* Parse csv file
|
14 |
+
* @param string $filename
|
15 |
+
* @param InterpreterInterface $interpreter
|
16 |
+
* @return boolean
|
17 |
+
* @throws CsvFileNotFoundException
|
18 |
+
*/
|
19 |
+
public function parse($filename, InterpreterInterface $interpreter);
|
20 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Exception/StrictViolationException.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard\Exception;
|
4 |
+
|
5 |
+
class StrictViolationException extends \RuntimeException
|
6 |
+
{
|
7 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Interpreter.php
ADDED
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard;
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Protocol\InterpreterInterface;
|
6 |
+
use Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException;
|
7 |
+
use Goodby\CSV\Import\Standard\Exception\StrictViolationException;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* standard interpreter
|
11 |
+
*/
|
12 |
+
class Interpreter implements InterpreterInterface
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* @var array
|
16 |
+
*/
|
17 |
+
private $observers = array();
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var int
|
21 |
+
*/
|
22 |
+
private $rowConsistency = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @var bool
|
26 |
+
*/
|
27 |
+
private $strict = true;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* interpret line
|
31 |
+
*
|
32 |
+
* @param $line
|
33 |
+
* @return void
|
34 |
+
* @throws \Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException
|
35 |
+
*/
|
36 |
+
public function interpret($line)
|
37 |
+
{
|
38 |
+
$this->checkRowConsistency($line);
|
39 |
+
|
40 |
+
if (!is_array($line)) {
|
41 |
+
throw new InvalidLexicalException('line is must be array');
|
42 |
+
}
|
43 |
+
|
44 |
+
$this->notify($line);
|
45 |
+
}
|
46 |
+
|
47 |
+
public function unstrict()
|
48 |
+
{
|
49 |
+
$this->strict = false;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* add observer
|
54 |
+
*
|
55 |
+
* @param callable $observer
|
56 |
+
*/
|
57 |
+
public function addObserver($observer)
|
58 |
+
{
|
59 |
+
$this->checkCallable($observer);
|
60 |
+
|
61 |
+
$this->observers[] = $observer;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* notify to observers
|
66 |
+
*
|
67 |
+
* @param $line
|
68 |
+
*/
|
69 |
+
private function notify($line)
|
70 |
+
{
|
71 |
+
$observers = $this->observers;
|
72 |
+
|
73 |
+
foreach ($observers as $observer) {
|
74 |
+
$this->delegate($observer, $line);
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* delegate to observer
|
80 |
+
*
|
81 |
+
* @param $observer
|
82 |
+
* @param $line
|
83 |
+
*/
|
84 |
+
private function delegate($observer, $line)
|
85 |
+
{
|
86 |
+
call_user_func($observer, $line);
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* check observer is callable
|
91 |
+
*
|
92 |
+
* @param $observer
|
93 |
+
* @throws \InvalidArgumentException
|
94 |
+
*/
|
95 |
+
private function checkCallable($observer)
|
96 |
+
{
|
97 |
+
if (!is_callable($observer)) {
|
98 |
+
throw new \InvalidArgumentException('observer must be callable');
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
private function checkRowConsistency($line)
|
103 |
+
{
|
104 |
+
if (!$this->strict) {
|
105 |
+
return;
|
106 |
+
}
|
107 |
+
|
108 |
+
$current = count($line);
|
109 |
+
|
110 |
+
if ($this->rowConsistency === null) {
|
111 |
+
$this->rowConsistency = $current;
|
112 |
+
}
|
113 |
+
|
114 |
+
if ($current !== $this->rowConsistency) {
|
115 |
+
throw new StrictViolationException(sprintf('Column size should be %u, but %u columns given', $this->rowConsistency, $current));
|
116 |
+
}
|
117 |
+
|
118 |
+
$this->rowConsistency = $current;
|
119 |
+
}
|
120 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Lexer.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard;
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Protocol\LexerInterface;
|
6 |
+
use Goodby\CSV\Import\Protocol\InterpreterInterface;
|
7 |
+
use Goodby\CSV\Import\Standard\StreamFilter\ConvertMbstringEncoding;
|
8 |
+
use SplFileObject;
|
9 |
+
|
10 |
+
class Lexer implements LexerInterface
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @var LexerConfig
|
14 |
+
*/
|
15 |
+
private $config;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Return new Lexer object
|
19 |
+
* @param LexerConfig $config
|
20 |
+
*/
|
21 |
+
public function __construct(LexerConfig $config = null)
|
22 |
+
{
|
23 |
+
if (!$config) {
|
24 |
+
$config = new LexerConfig();
|
25 |
+
}
|
26 |
+
|
27 |
+
$this->config = $config;
|
28 |
+
ConvertMbstringEncoding::register();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* {@inherit}
|
33 |
+
*/
|
34 |
+
public function parse($filename, InterpreterInterface $interpreter)
|
35 |
+
{
|
36 |
+
ini_set('auto_detect_line_endings', true); // For mac's office excel csv
|
37 |
+
|
38 |
+
$delimiter = $this->config->getDelimiter();
|
39 |
+
$enclosure = $this->config->getEnclosure();
|
40 |
+
$escape = $this->config->getEscape();
|
41 |
+
$fromCharset = $this->config->getFromCharset();
|
42 |
+
$toCharset = $this->config->getToCharset();
|
43 |
+
$flags = $this->config->getFlags();
|
44 |
+
$ignoreHeader = $this->config->getIgnoreHeaderLine();
|
45 |
+
|
46 |
+
if ( $fromCharset === null ) {
|
47 |
+
$url = $filename;
|
48 |
+
} else {
|
49 |
+
$url = ConvertMbstringEncoding::getFilterURL($filename, $fromCharset, $toCharset);
|
50 |
+
}
|
51 |
+
|
52 |
+
$csv = new SplFileObject($url);
|
53 |
+
$csv->setCsvControl($delimiter, $enclosure, $escape);
|
54 |
+
$csv->setFlags($flags);
|
55 |
+
|
56 |
+
$originalLocale = setlocale(LC_ALL, '0'); // Backup current locale
|
57 |
+
setlocale(LC_ALL, 'en_US.UTF-8');
|
58 |
+
|
59 |
+
foreach ( $csv as $lineNumber => $line ) {
|
60 |
+
if ($ignoreHeader && $lineNumber == 0 || (count($line) === 1 && trim($line[0]) === '')) {
|
61 |
+
continue;
|
62 |
+
}
|
63 |
+
$interpreter->interpret($line);
|
64 |
+
}
|
65 |
+
|
66 |
+
parse_str(str_replace(';', '&', $originalLocale), $locale_array);
|
67 |
+
setlocale(LC_ALL, $locale_array); // Reset locale
|
68 |
+
}
|
69 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/LexerConfig.php
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard;
|
4 |
+
|
5 |
+
use SplFileObject;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Config for Lexer object
|
9 |
+
*/
|
10 |
+
class LexerConfig
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @var string
|
14 |
+
*/
|
15 |
+
private $delimiter = ',';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $enclosure = '"';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @var string
|
24 |
+
*/
|
25 |
+
private $escape = '\\';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @var string
|
29 |
+
*/
|
30 |
+
private $fromCharset;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
private $toCharset;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @var integer
|
39 |
+
*/
|
40 |
+
private $flags = SplFileObject::READ_CSV;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @var bool
|
44 |
+
*/
|
45 |
+
private $ignoreHeaderLine = false;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Set delimiter
|
49 |
+
* @param string $delimiter
|
50 |
+
* @return LexerConfig
|
51 |
+
*/
|
52 |
+
public function setDelimiter($delimiter)
|
53 |
+
{
|
54 |
+
$this->delimiter = $delimiter;
|
55 |
+
return $this;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Return delimiter
|
60 |
+
* @return string
|
61 |
+
*/
|
62 |
+
public function getDelimiter()
|
63 |
+
{
|
64 |
+
return $this->delimiter;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Set enclosure
|
69 |
+
* @param string $enclosure
|
70 |
+
* @return LexerConfig
|
71 |
+
*/
|
72 |
+
public function setEnclosure($enclosure)
|
73 |
+
{
|
74 |
+
$this->enclosure = $enclosure;
|
75 |
+
return $this;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Return enclosure
|
80 |
+
* @return string
|
81 |
+
*/
|
82 |
+
public function getEnclosure()
|
83 |
+
{
|
84 |
+
return $this->enclosure;
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Set escape
|
89 |
+
* @param string $escape
|
90 |
+
* @return LexerConfig
|
91 |
+
*/
|
92 |
+
public function setEscape($escape)
|
93 |
+
{
|
94 |
+
$this->escape = $escape;
|
95 |
+
return $this;
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Return escape
|
100 |
+
* @return string
|
101 |
+
*/
|
102 |
+
public function getEscape()
|
103 |
+
{
|
104 |
+
return $this->escape;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Set from-character set
|
109 |
+
* @param string $fromCharset
|
110 |
+
* @return LexerConfig
|
111 |
+
*/
|
112 |
+
public function setFromCharset($fromCharset)
|
113 |
+
{
|
114 |
+
$this->fromCharset = $fromCharset;
|
115 |
+
return $this;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Return from-character set
|
120 |
+
* @return string
|
121 |
+
*/
|
122 |
+
public function getFromCharset()
|
123 |
+
{
|
124 |
+
return $this->fromCharset;
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Set to-character set
|
129 |
+
* @param string $toCharset
|
130 |
+
* @return LexerConfig
|
131 |
+
*/
|
132 |
+
public function setToCharset($toCharset)
|
133 |
+
{
|
134 |
+
$this->toCharset = $toCharset;
|
135 |
+
return $this;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Return to-character set
|
140 |
+
* @return string
|
141 |
+
*/
|
142 |
+
public function getToCharset()
|
143 |
+
{
|
144 |
+
return $this->toCharset;
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Set flags
|
149 |
+
* @param integer $flags Bit mask of the flags to set. See SplFileObject constants for the available flags.
|
150 |
+
* @return LexerConfig
|
151 |
+
* @see http://php.net/manual/en/class.splfileobject.php#splfileobject.constants
|
152 |
+
*/
|
153 |
+
public function setFlags($flags)
|
154 |
+
{
|
155 |
+
$this->flags = $flags;
|
156 |
+
return $this;
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Return flags
|
161 |
+
* @return integer
|
162 |
+
*/
|
163 |
+
public function getFlags()
|
164 |
+
{
|
165 |
+
return $this->flags;
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* @param $ignoreHeaderLine
|
170 |
+
* @return $this
|
171 |
+
*/
|
172 |
+
public function setIgnoreHeaderLine($ignoreHeaderLine)
|
173 |
+
{
|
174 |
+
$this->ignoreHeaderLine = $ignoreHeaderLine;
|
175 |
+
return $this;
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* @return boolean
|
180 |
+
*/
|
181 |
+
public function getIgnoreHeaderLine()
|
182 |
+
{
|
183 |
+
return $this->ignoreHeaderLine;
|
184 |
+
}
|
185 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/PdoObserver.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard\Observer;
|
4 |
+
|
5 |
+
class PdoObserver
|
6 |
+
{
|
7 |
+
private $table;
|
8 |
+
private $columns;
|
9 |
+
|
10 |
+
private $dsn;
|
11 |
+
private $options = null;
|
12 |
+
|
13 |
+
private $pdo = null;
|
14 |
+
|
15 |
+
public function __construct($table, $columns, $dsn, $options)
|
16 |
+
{
|
17 |
+
$this->table = $table;
|
18 |
+
$this->columns = $columns;
|
19 |
+
|
20 |
+
$this->dsn = $dsn;
|
21 |
+
$this->options = $options;
|
22 |
+
}
|
23 |
+
|
24 |
+
public function notify($line)
|
25 |
+
{
|
26 |
+
if ($this->pdo === null) {
|
27 |
+
$this->pdo = new \PDO($this->dsn, $this->options['user'], $this->options['password']);
|
28 |
+
}
|
29 |
+
|
30 |
+
$this->execute($line);
|
31 |
+
}
|
32 |
+
|
33 |
+
private function execute($line)
|
34 |
+
{
|
35 |
+
$line = array_map(function($value) {
|
36 |
+
$number = filter_var($value, FILTER_VALIDATE_INT);
|
37 |
+
|
38 |
+
if ($number !== false) {
|
39 |
+
return $number;
|
40 |
+
}
|
41 |
+
|
42 |
+
if (is_string($value)) {
|
43 |
+
if (strtolower($value) === 'null') {
|
44 |
+
return 'NULL';
|
45 |
+
}
|
46 |
+
|
47 |
+
if (strtolower($value) === 'true') {
|
48 |
+
return 1;
|
49 |
+
}
|
50 |
+
|
51 |
+
if (strtolower($value) === 'false') {
|
52 |
+
return 0;
|
53 |
+
}
|
54 |
+
|
55 |
+
return $value;
|
56 |
+
}
|
57 |
+
|
58 |
+
throw new \InvalidArgumentException('value is invalid: ' . var_export($value, 1));
|
59 |
+
}, $line);
|
60 |
+
|
61 |
+
$prepare = array_map(function() {
|
62 |
+
return '?';
|
63 |
+
}, $line);
|
64 |
+
|
65 |
+
$sql = 'INSERT INTO ' . $this->table . '(' . join(', ', $this->columns) . ')' .
|
66 |
+
' VALUES(' . join(',', $prepare) . ')';
|
67 |
+
|
68 |
+
$stmt = $this->pdo->prepare($sql);
|
69 |
+
$stmt->execute($line);
|
70 |
+
}
|
71 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/SqlObserver.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard\Observer;
|
4 |
+
|
5 |
+
class SqlObserver
|
6 |
+
{
|
7 |
+
private $table;
|
8 |
+
private $columns;
|
9 |
+
private $path;
|
10 |
+
|
11 |
+
private $file = null;
|
12 |
+
|
13 |
+
public function __construct($table, $columns, $path)
|
14 |
+
{
|
15 |
+
$this->table = $table;
|
16 |
+
$this->columns = $columns;
|
17 |
+
$this->path = $path;
|
18 |
+
}
|
19 |
+
|
20 |
+
public function notify($line)
|
21 |
+
{
|
22 |
+
$sql = $this->buildSql($line);
|
23 |
+
|
24 |
+
if ($this->file === null) {
|
25 |
+
$this->file = new \SplFileObject($this->path, 'a');
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->file->fwrite($sql);
|
29 |
+
}
|
30 |
+
|
31 |
+
private function buildSql($line)
|
32 |
+
{
|
33 |
+
$line = array_map(function($value) {
|
34 |
+
$number = filter_var($value, FILTER_VALIDATE_INT);
|
35 |
+
|
36 |
+
if ($number !== false) {
|
37 |
+
return $number;
|
38 |
+
}
|
39 |
+
|
40 |
+
if (is_string($value)) {
|
41 |
+
if (strtolower($value) === 'null') {
|
42 |
+
return 'NULL';
|
43 |
+
}
|
44 |
+
|
45 |
+
if (strtolower($value) === 'true') {
|
46 |
+
return 'true';
|
47 |
+
}
|
48 |
+
|
49 |
+
if (strtolower($value) === 'false') {
|
50 |
+
return 'false';
|
51 |
+
}
|
52 |
+
|
53 |
+
return '"' . addslashes($value) . '"';
|
54 |
+
}
|
55 |
+
|
56 |
+
throw new \InvalidArgumentException('value is invalid: ' . var_export($value, 1));
|
57 |
+
}, $line);
|
58 |
+
|
59 |
+
return 'INSERT INTO ' . $this->table . '(' . join(', ', $this->columns) . ')' .
|
60 |
+
' VALUES(' . join(', ', $line) . ');';
|
61 |
+
}
|
62 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/StreamFilter/ConvertMbstringEncoding.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Standard\StreamFilter;
|
4 |
+
|
5 |
+
use php_user_filter;
|
6 |
+
use RuntimeException;
|
7 |
+
|
8 |
+
class ConvertMbstringEncoding extends php_user_filter
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* @var string
|
12 |
+
*/
|
13 |
+
const FILTER_NAMESPACE = 'convert.mbstring.encoding.';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var bool
|
17 |
+
*/
|
18 |
+
private static $hasBeenRegistered = false;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
private $fromCharset;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
private $toCharset;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Return filter name
|
32 |
+
* @return string
|
33 |
+
*/
|
34 |
+
public static function getFilterName()
|
35 |
+
{
|
36 |
+
return self::FILTER_NAMESPACE.'*';
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Register this class as a stream filter
|
41 |
+
* @throws \RuntimeException
|
42 |
+
*/
|
43 |
+
public static function register()
|
44 |
+
{
|
45 |
+
if ( self::$hasBeenRegistered === true ) {
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
|
49 |
+
if ( stream_filter_register(self::getFilterName(), __CLASS__) === false ) {
|
50 |
+
throw new RuntimeException('Failed to register stream filter: '.self::getFilterName());
|
51 |
+
}
|
52 |
+
|
53 |
+
self::$hasBeenRegistered = true;
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Return filter URL
|
58 |
+
* @param string $filename
|
59 |
+
* @param string $fromCharset
|
60 |
+
* @param string $toCharset
|
61 |
+
* @return string
|
62 |
+
*/
|
63 |
+
public static function getFilterURL($filename, $fromCharset, $toCharset = null)
|
64 |
+
{
|
65 |
+
if ( $toCharset === null ) {
|
66 |
+
return sprintf('php://filter/convert.mbstring.encoding.%s/resource=%s', $fromCharset, $filename);
|
67 |
+
} else {
|
68 |
+
return sprintf('php://filter/convert.mbstring.encoding.%s:%s/resource=%s', $fromCharset, $toCharset, $filename);
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @return bool
|
74 |
+
*/
|
75 |
+
public function onCreate()
|
76 |
+
{
|
77 |
+
if ( strpos($this->filtername, self::FILTER_NAMESPACE) !== 0 ) {
|
78 |
+
return false;
|
79 |
+
}
|
80 |
+
|
81 |
+
$parameterString = substr($this->filtername, strlen(self::FILTER_NAMESPACE));
|
82 |
+
|
83 |
+
if ( ! preg_match('/^(?P<from>[-\w]+)(:(?P<to>[-\w]+))?$/', $parameterString, $matches) ) {
|
84 |
+
return false;
|
85 |
+
}
|
86 |
+
|
87 |
+
$this->fromCharset = isset($matches['from']) ? $matches['from'] : 'auto';
|
88 |
+
$this->toCharset = isset($matches['to']) ? $matches['to'] : mb_internal_encoding();
|
89 |
+
|
90 |
+
return true;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @param string $in
|
95 |
+
* @param string $out
|
96 |
+
* @param string $consumed
|
97 |
+
* @param $closing
|
98 |
+
* @return int
|
99 |
+
*/
|
100 |
+
public function filter($in, $out, &$consumed, $closing)
|
101 |
+
{
|
102 |
+
while ( $bucket = stream_bucket_make_writeable($in) ) {
|
103 |
+
$bucket->data = mb_convert_encoding($bucket->data, $this->toCharset, $this->fromCharset);
|
104 |
+
$consumed += $bucket->datalen;
|
105 |
+
stream_bucket_append($out, $bucket);
|
106 |
+
}
|
107 |
+
|
108 |
+
return PSFS_PASS_ON;
|
109 |
+
}
|
110 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/InterpreterTest.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Protocol;
|
4 |
+
|
5 |
+
use Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* unit test for Interface of the Interpreter
|
9 |
+
*/
|
10 |
+
class InterpreterTest extends \PHPUnit_Framework_TestCase
|
11 |
+
{
|
12 |
+
public function testInterpreterInterface()
|
13 |
+
{
|
14 |
+
$line = array();
|
15 |
+
|
16 |
+
$interpreter = $this->getMock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
|
17 |
+
|
18 |
+
$interpreter->expects($this->once())
|
19 |
+
->method('interpret')
|
20 |
+
->with($this->identicalTo($line))
|
21 |
+
;
|
22 |
+
|
23 |
+
$interpreter->interpret($line);
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @expectedException \Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException
|
28 |
+
*/
|
29 |
+
public function testInterpreterInterfaceWillThrownInvalidLexicalException()
|
30 |
+
{
|
31 |
+
$interpreter = $this->getMock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
|
32 |
+
|
33 |
+
$interpreter->expects($this->once())
|
34 |
+
->method('interpret')
|
35 |
+
->will($this->throwException(new InvalidLexicalException()))
|
36 |
+
;
|
37 |
+
|
38 |
+
$line = "INVALID LEXICAL";
|
39 |
+
|
40 |
+
$interpreter->interpret($line);
|
41 |
+
}
|
42 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/LexerTest.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Protocol;
|
4 |
+
|
5 |
+
use Mockery as m;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* unit test for CSV Lexer
|
9 |
+
*/
|
10 |
+
class LexerTest extends \PHPUnit_Framework_TestCase
|
11 |
+
{
|
12 |
+
public function testInterface()
|
13 |
+
{
|
14 |
+
$lexer = m::mock('\Goodby\CSV\Import\Protocol\LexerInterface');
|
15 |
+
$interpreter = m::mock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
|
16 |
+
|
17 |
+
$path = 'dummy.csv';
|
18 |
+
|
19 |
+
$lexer->shouldReceive('parse')->with($path, $interpreter);
|
20 |
+
|
21 |
+
$lexer->parse($path, $interpreter);
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @expectedException \Goodby\CSV\Import\Protocol\Exception\CsvFileNotFoundException
|
26 |
+
*/
|
27 |
+
public function testCsvFileNotFound()
|
28 |
+
{
|
29 |
+
$lexer = m::mock('\Goodby\CSV\Import\Protocol\LexerInterface');
|
30 |
+
$interpreter = m::mock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
|
31 |
+
|
32 |
+
$path = 'invalid_dummy.csv';
|
33 |
+
|
34 |
+
$lexer->shouldReceive('parse')
|
35 |
+
->with($path, $interpreter)
|
36 |
+
->andThrow('Goodby\CSV\Import\Protocol\Exception\CsvFileNotFoundException')
|
37 |
+
;
|
38 |
+
|
39 |
+
$lexer->parse($path, $interpreter);
|
40 |
+
}
|
41 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/CSVFiles.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Join;
|
4 |
+
|
5 |
+
class CSVFiles
|
6 |
+
{
|
7 |
+
public static function getShiftJisCsv()
|
8 |
+
{
|
9 |
+
return __DIR__.'/csv_files/sjis.csv';
|
10 |
+
}
|
11 |
+
|
12 |
+
public static function getMacExcelCsv()
|
13 |
+
{
|
14 |
+
return __DIR__.'/csv_files/mac-excel.csv';
|
15 |
+
}
|
16 |
+
|
17 |
+
public static function getMacExcelLines()
|
18 |
+
{
|
19 |
+
return array(
|
20 |
+
array('a', 'b', 'c'),
|
21 |
+
array('d', 'e', 'f'),
|
22 |
+
);
|
23 |
+
}
|
24 |
+
|
25 |
+
public static function getTabSeparatedCsv()
|
26 |
+
{
|
27 |
+
return __DIR__.'/csv_files/tab-separated.csv';
|
28 |
+
}
|
29 |
+
|
30 |
+
public static function getTabSeparatedLines()
|
31 |
+
{
|
32 |
+
return array(
|
33 |
+
array('value1', 'value2', 'value3'),
|
34 |
+
array('value4', 'value5', 'value6'),
|
35 |
+
);
|
36 |
+
}
|
37 |
+
|
38 |
+
public static function getColonSeparatedCsv()
|
39 |
+
{
|
40 |
+
return __DIR__.'/csv_files/colon-separated.csv';
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function getColonSeparatedLines()
|
44 |
+
{
|
45 |
+
return array(
|
46 |
+
array('value1', 'value2', 'value3'),
|
47 |
+
array('value4', 'value5', 'value6'),
|
48 |
+
);
|
49 |
+
}
|
50 |
+
|
51 |
+
public static function getUtf8Csv()
|
52 |
+
{
|
53 |
+
return __DIR__.'/csv_files/utf-8.csv';
|
54 |
+
}
|
55 |
+
|
56 |
+
public static function getUtf8Lines()
|
57 |
+
{
|
58 |
+
return array(
|
59 |
+
array('✔', '✔', '✔', '✔'),
|
60 |
+
array('★', '★', '★', '★'),
|
61 |
+
array('유', '니', '코', '드'),
|
62 |
+
);
|
63 |
+
}
|
64 |
+
|
65 |
+
public static function getIssue5CSV()
|
66 |
+
{
|
67 |
+
return __DIR__.'/csv_files/issue-5.csv';
|
68 |
+
}
|
69 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/LexerTest.php
ADDED
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Join;
|
4 |
+
|
5 |
+
use Mockery as m;
|
6 |
+
use Goodby\CSV\Import\Standard\Lexer;
|
7 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
8 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
9 |
+
|
10 |
+
class LexerTest extends \PHPUnit_Framework_TestCase
|
11 |
+
{
|
12 |
+
public function test_shift_jis_CSV()
|
13 |
+
{
|
14 |
+
$shiftJisCsv = CSVFiles::getShiftJisCsv();
|
15 |
+
$lines = array(
|
16 |
+
array('あ', 'い', 'う', 'え', 'お'),
|
17 |
+
array('日本語', '日本語', '日本語', '日本語', '日本語'),
|
18 |
+
array('ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ'),
|
19 |
+
array('"quoted"', "a'quote'", 'a, b and c', '', ''),
|
20 |
+
);
|
21 |
+
|
22 |
+
$interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
|
23 |
+
$interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
|
24 |
+
$interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
|
25 |
+
$interpreter->expects($this->at(2))->method('interpret')->with($lines[2]);
|
26 |
+
$interpreter->expects($this->at(3))->method('interpret')->with($lines[3]);
|
27 |
+
|
28 |
+
$config = new LexerConfig();
|
29 |
+
$config->setToCharset('UTF-8')->setFromCharset('SJIS-win');
|
30 |
+
$lexer = new Lexer($config);
|
31 |
+
$lexer->parse($shiftJisCsv, $interpreter);
|
32 |
+
}
|
33 |
+
|
34 |
+
public function test_mac_excel_csv()
|
35 |
+
{
|
36 |
+
$csv = CSVFiles::getMacExcelCsv();
|
37 |
+
$lines = CSVFiles::getMacExcelLines();
|
38 |
+
|
39 |
+
$interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
|
40 |
+
$interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
|
41 |
+
$interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
|
42 |
+
|
43 |
+
$config = new LexerConfig();
|
44 |
+
$lexer = new Lexer($config);
|
45 |
+
$lexer->parse($csv, $interpreter);
|
46 |
+
}
|
47 |
+
|
48 |
+
public function test_tab_separated_csv()
|
49 |
+
{
|
50 |
+
$csv = CSVFiles::getTabSeparatedCsv();
|
51 |
+
$lines = CSVFiles::getTabSeparatedLines();
|
52 |
+
|
53 |
+
$interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
|
54 |
+
$interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
|
55 |
+
$interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
|
56 |
+
|
57 |
+
$config = new LexerConfig();
|
58 |
+
$config->setDelimiter("\t");
|
59 |
+
$lexer = new Lexer($config);
|
60 |
+
$lexer->parse($csv, $interpreter);
|
61 |
+
}
|
62 |
+
|
63 |
+
public function test_colon_separated_csv()
|
64 |
+
{
|
65 |
+
$csv = CSVFiles::getColonSeparatedCsv();
|
66 |
+
$lines = CSVFiles::getColonSeparatedLines();
|
67 |
+
|
68 |
+
$interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
|
69 |
+
$interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
|
70 |
+
$interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
|
71 |
+
|
72 |
+
$config = new LexerConfig();
|
73 |
+
$config->setDelimiter(':');
|
74 |
+
$lexer = new Lexer($config);
|
75 |
+
$lexer->parse($csv, $interpreter);
|
76 |
+
}
|
77 |
+
|
78 |
+
public function test_utf8_csv()
|
79 |
+
{
|
80 |
+
$csv = CSVFiles::getUtf8Csv();
|
81 |
+
$lines = CSVFiles::getUtf8Lines();
|
82 |
+
|
83 |
+
$interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
|
84 |
+
$interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
|
85 |
+
$interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
|
86 |
+
|
87 |
+
$config = new LexerConfig();
|
88 |
+
$lexer = new Lexer($config);
|
89 |
+
$lexer->parse($csv, $interpreter);
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* When import CSV file with data in Japanese (2 bytes character),
|
94 |
+
* data imported to database with error encoding
|
95 |
+
* @link https://github.com/goodby/csv/issues/5
|
96 |
+
*/
|
97 |
+
public function test_issue_5()
|
98 |
+
{
|
99 |
+
$csvFilename = CSVFiles::getIssue5CSV();
|
100 |
+
|
101 |
+
$csvContents = array();
|
102 |
+
|
103 |
+
$config = new LexerConfig();
|
104 |
+
$config
|
105 |
+
->setToCharset('UTF-8')
|
106 |
+
->setFromCharset('UTF-8');
|
107 |
+
$lexer = new Lexer($config);
|
108 |
+
$interpreter = new Interpreter();
|
109 |
+
$interpreter->addObserver(function(array $columns) use (&$csvContents) {
|
110 |
+
$csvContents[] = $columns;
|
111 |
+
});
|
112 |
+
|
113 |
+
$lexer->parse($csvFilename, $interpreter);
|
114 |
+
|
115 |
+
$this->assertSame(array(
|
116 |
+
array("ID", "NAME", "MAKER"),
|
117 |
+
array("1", "スティック型クリーナ", "alice_updated@example.com"),
|
118 |
+
array("2", "bob", "bob@example.com"),
|
119 |
+
array("14", "スティック型クリーナ", "tho@eample.com"),
|
120 |
+
array("16", "スティック型", "carot@eample.com"),
|
121 |
+
), $csvContents);
|
122 |
+
}
|
123 |
+
|
124 |
+
public function test_ignore_header()
|
125 |
+
{
|
126 |
+
$csvFilename = CSVFiles::getIssue5CSV();
|
127 |
+
|
128 |
+
$config = new LexerConfig();
|
129 |
+
$config
|
130 |
+
->setIgnoreHeaderLine(true)
|
131 |
+
->setToCharset('UTF-8')
|
132 |
+
->setFromCharset('UTF-8');
|
133 |
+
|
134 |
+
$lexer = new Lexer($config);
|
135 |
+
|
136 |
+
$interpreter = new Interpreter();
|
137 |
+
$interpreter->addObserver(function(array $columns) use (&$csvContents) {
|
138 |
+
$csvContents[] = $columns;
|
139 |
+
});
|
140 |
+
|
141 |
+
$lexer->parse($csvFilename, $interpreter);
|
142 |
+
$this->assertSame(array(
|
143 |
+
array("1", "スティック型クリーナ", "alice_updated@example.com"),
|
144 |
+
array("2", "bob", "bob@example.com"),
|
145 |
+
array("14", "スティック型クリーナ", "tho@eample.com"),
|
146 |
+
array("16", "スティック型", "carot@eample.com"),
|
147 |
+
), $csvContents);
|
148 |
+
}
|
149 |
+
|
150 |
+
public function test_instantiation_without_config()
|
151 |
+
{
|
152 |
+
$lexer = new Lexer();
|
153 |
+
|
154 |
+
$this->assertInstanceOf('Goodby\CSV\Import\Standard\Lexer', $lexer);
|
155 |
+
}
|
156 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/Observer/PdoObserverTest.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Join\Observer;
|
4 |
+
|
5 |
+
use Mockery as m;
|
6 |
+
|
7 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
8 |
+
use Goodby\CSV\Import\Standard\Observer\PdoObserver;
|
9 |
+
|
10 |
+
use Goodby\CSV\TestHelper\DbManager;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* unit test for pdo observer
|
14 |
+
*/
|
15 |
+
class PdoObserverTest extends \PHPUnit_Framework_TestCase
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* @var \Goodby\CSV\TestHelper\DbManager
|
19 |
+
*/
|
20 |
+
private $manager = null;
|
21 |
+
|
22 |
+
public function setUp()
|
23 |
+
{
|
24 |
+
$this->manager = new DbManager();
|
25 |
+
|
26 |
+
$pdo = $this->manager->getPdo();
|
27 |
+
|
28 |
+
$stmt = $pdo->prepare("CREATE TABLE test (id INT, name VARCHAR(32), age INT, flag TINYINT, flag2 TINYINT, status VARCHAR(32), contents TEXT)");
|
29 |
+
$stmt->execute();
|
30 |
+
}
|
31 |
+
|
32 |
+
public function tearDown()
|
33 |
+
{
|
34 |
+
unset($this->manager);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testUsage()
|
38 |
+
{
|
39 |
+
$interpreter = new Interpreter();
|
40 |
+
|
41 |
+
$table = 'test';
|
42 |
+
|
43 |
+
$dsn = $this->manager->getDsn();
|
44 |
+
$options = array('user' => $this->manager->getUser(), 'password' => $this->manager->getPassword());
|
45 |
+
|
46 |
+
$sqlObserver = new PdoObserver($table, array('id', 'name', 'age', 'flag', 'flag2', 'status', 'contents'), $dsn, $options);
|
47 |
+
|
48 |
+
$interpreter->addObserver(array($sqlObserver, 'notify'));
|
49 |
+
|
50 |
+
$interpreter->interpret(array('123', 'test', '28', 'true', 'false', 'null', 'test"test'));
|
51 |
+
|
52 |
+
$pdo = $this->manager->getPdo();
|
53 |
+
|
54 |
+
$stmt = $pdo->prepare("SELECT * FROM " . $table);
|
55 |
+
$stmt->execute();
|
56 |
+
|
57 |
+
$result = $stmt->fetch();
|
58 |
+
|
59 |
+
$this->assertEquals(123, $result[0]);
|
60 |
+
$this->assertEquals('test', $result[1]);
|
61 |
+
$this->assertEquals(28, $result[2]);
|
62 |
+
$this->assertEquals(1, $result[3]);
|
63 |
+
$this->assertEquals(0, $result[4]);
|
64 |
+
$this->assertEquals('NULL', $result[5]);
|
65 |
+
$this->assertEquals('test"test', $result[6]);
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @expectedException \InvalidArgumentException
|
70 |
+
* @expectedExceptionMessage value is invalid: array
|
71 |
+
*/
|
72 |
+
public function testInvalidLine()
|
73 |
+
{
|
74 |
+
$interpreter = new Interpreter();
|
75 |
+
|
76 |
+
$table = 'test';
|
77 |
+
|
78 |
+
$options = array('user' => $this->manager->getUser(), 'password' => $this->manager->getPassword());
|
79 |
+
|
80 |
+
$sqlObserver = new PdoObserver($table, array('id', 'name'), $this->manager->getDsn(), $options);
|
81 |
+
|
82 |
+
$interpreter->addObserver(array($sqlObserver, 'notify'));
|
83 |
+
|
84 |
+
$interpreter->interpret(array('123', array('test', 'test')));
|
85 |
+
}
|
86 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/colon-separated.csv
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
value1:value2:value3
|
2 |
+
value4:value5:value6
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/issue-5.csv
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ID,NAME,MAKER
|
2 |
+
1,スティック型クリーナ,alice_updated@example.com
|
3 |
+
2,bob,bob@example.com
|
4 |
+
14,スティック型クリーナ,tho@eample.com
|
5 |
+
16,スティック型,carot@eample.com
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/mac-excel.csv
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
a,b,c
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/sjis.csv
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
��,��,��,��,��
|
2 |
+
���{��,���{��,���{��,���{��,���{��
|
3 |
+
��,��,��,��,��
|
4 |
+
"""quoted""",a'quote',"a, b and c",,
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/tab-separated.csv
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
value1 value2 value3
|
2 |
+
value4 value5 value6
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
+
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/utf-8.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
✔,✔,✔,✔
|
2 |
+
★,★,★,★
|
3 |
+
유,니,코,드
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/SandboxDirectoryManager.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Managing sandbox directory to use when joining with the file system for tests
|
7 |
+
*/
|
8 |
+
class SandboxDirectoryManager
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Return sandbox directory
|
12 |
+
* @return string
|
13 |
+
*/
|
14 |
+
public static function getSandboxDirectory()
|
15 |
+
{
|
16 |
+
return sys_get_temp_dir().'/goodby/csv';
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Reset sandbox directory
|
21 |
+
*/
|
22 |
+
public static function resetSandboxDirectory()
|
23 |
+
{
|
24 |
+
$sandboxDir = self::getSandboxDirectory();
|
25 |
+
|
26 |
+
if ( file_exists($sandboxDir) ) {
|
27 |
+
exec(sprintf('rm -rf %s', $sandboxDir));
|
28 |
+
}
|
29 |
+
|
30 |
+
if ( file_exists($sandboxDir) ) {
|
31 |
+
throw new \RuntimeException(
|
32 |
+
sprintf('Cannot continue test: sandbox directory already exists: %s', $sandboxDir)
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
mkdir($sandboxDir, 0777, true);
|
37 |
+
|
38 |
+
if ( file_exists($sandboxDir) === false ) {
|
39 |
+
throw new \RuntimeException(
|
40 |
+
sprintf('Cannot continue test: sandbox directory does not exist: %s', $sandboxDir)
|
41 |
+
);
|
42 |
+
}
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/InterpreterTest.php
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Unit;
|
4 |
+
|
5 |
+
use Mockery as m;
|
6 |
+
|
7 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* unit test for Standard Implementation of the Interpreter
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
class InterpreterTest extends \PHPUnit_Framework_TestCase
|
14 |
+
{
|
15 |
+
private $expectedLine;
|
16 |
+
|
17 |
+
public function setUp()
|
18 |
+
{
|
19 |
+
$this->expectedLine = null;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @requires PHP 5.4
|
24 |
+
*/
|
25 |
+
public function testStandardInterpreterWithClosure()
|
26 |
+
{
|
27 |
+
$this->expectedLine = array('test', 'test', 'test');
|
28 |
+
|
29 |
+
$interpreter = new Interpreter();
|
30 |
+
$interpreter->addObserver(function($line) {
|
31 |
+
$this->assertEquals($this->expectedLine, $line);
|
32 |
+
});
|
33 |
+
|
34 |
+
$interpreter->interpret($this->expectedLine);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testStandardInterpreterWithObject()
|
38 |
+
{
|
39 |
+
$this->expectedLine = array('test', 'test', 'test');
|
40 |
+
|
41 |
+
$object = m::mock('stdClass');
|
42 |
+
$object->shouldReceive('callback')->with($this->expectedLine)->once();
|
43 |
+
|
44 |
+
$interpreter = new Interpreter();
|
45 |
+
$interpreter->addObserver(array($object, 'callback'));
|
46 |
+
|
47 |
+
$interpreter->interpret($this->expectedLine);
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @expectedException \Goodby\CSV\Import\Standard\Exception\StrictViolationException
|
52 |
+
*/
|
53 |
+
public function testInconsistentColumns()
|
54 |
+
{
|
55 |
+
$lines[] = array('test', 'test', 'test');
|
56 |
+
$lines[] = array('test', 'test');
|
57 |
+
|
58 |
+
$interpreter = new Interpreter();
|
59 |
+
|
60 |
+
foreach ($lines as $line) {
|
61 |
+
$interpreter->interpret($line);
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @expectedException \Goodby\CSV\Import\Standard\Exception\StrictViolationException
|
67 |
+
*/
|
68 |
+
public function testInconsistentColumnsLowToHigh()
|
69 |
+
{
|
70 |
+
$lines[] = array('test', 'test');
|
71 |
+
$lines[] = array('test', 'test', 'test');
|
72 |
+
|
73 |
+
$interpreter = new Interpreter();
|
74 |
+
|
75 |
+
foreach ($lines as $line) {
|
76 |
+
$interpreter->interpret($line);
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
public function testConsistentColumns()
|
81 |
+
{
|
82 |
+
$lines[] = array('test', 'test', 'test');
|
83 |
+
$lines[] = array('test', 'test', 'test');
|
84 |
+
|
85 |
+
$interpreter = new Interpreter();
|
86 |
+
|
87 |
+
foreach ($lines as $line) {
|
88 |
+
$interpreter->interpret($line);
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* use un-strict won't throw exception with inconsistent columns
|
94 |
+
*
|
95 |
+
*/
|
96 |
+
public function testInconsistentColumnsWithUnStrict()
|
97 |
+
{
|
98 |
+
$lines[] = array('test', 'test', 'test');
|
99 |
+
$lines[] = array('test', 'test');
|
100 |
+
|
101 |
+
$interpreter = new Interpreter();
|
102 |
+
$interpreter->unstrict();
|
103 |
+
|
104 |
+
foreach ($lines as $line) {
|
105 |
+
$interpreter->interpret($line);
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* @expectedException \Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException
|
111 |
+
*/
|
112 |
+
public function testStandardInterpreterWithInvalidLexical()
|
113 |
+
{
|
114 |
+
$this->expectedLine = '';
|
115 |
+
|
116 |
+
$interpreter = new Interpreter();
|
117 |
+
|
118 |
+
$interpreter->interpret($this->expectedLine);
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* @expectedException \InvalidArgumentException
|
123 |
+
*/
|
124 |
+
public function testInvalidCallable()
|
125 |
+
{
|
126 |
+
$interpreter = new Interpreter();
|
127 |
+
|
128 |
+
$interpreter->addObserver('dummy');
|
129 |
+
|
130 |
+
$interpreter->interpret($this->expectedLine);
|
131 |
+
}
|
132 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/LexerConfigTest.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Unit;
|
4 |
+
|
5 |
+
use SplFileObject;
|
6 |
+
use Goodby\CSV\Import\Standard\LexerConfig;
|
7 |
+
|
8 |
+
class LexerConfigTest extends \PHPUnit_Framework_TestCase
|
9 |
+
{
|
10 |
+
public function testDelimiter()
|
11 |
+
{
|
12 |
+
$config = new LexerConfig();
|
13 |
+
$this->assertSame(',', $config->getDelimiter());
|
14 |
+
$config->setDelimiter('del');
|
15 |
+
$this->assertSame('del', $config->getDelimiter());
|
16 |
+
}
|
17 |
+
|
18 |
+
public function testEnclosure()
|
19 |
+
{
|
20 |
+
$config = new LexerConfig();
|
21 |
+
$this->assertSame('"', $config->getEnclosure());
|
22 |
+
$this->assertSame('enc', $config->setEnclosure('enc')->getEnclosure());
|
23 |
+
}
|
24 |
+
|
25 |
+
public function testEscape()
|
26 |
+
{
|
27 |
+
$config = new LexerConfig();
|
28 |
+
$this->assertSame('\\', $config->getEscape());
|
29 |
+
$this->assertSame('esc', $config->setEscape('esc')->getEscape());
|
30 |
+
}
|
31 |
+
|
32 |
+
public function testFromCharset()
|
33 |
+
{
|
34 |
+
$config = new LexerConfig();
|
35 |
+
$this->assertSame(null, $config->getFromCharset());
|
36 |
+
$this->assertSame('UTF-8', $config->setFromCharset('UTF-8')->getFromCharset());
|
37 |
+
}
|
38 |
+
|
39 |
+
public function testToCharset()
|
40 |
+
{
|
41 |
+
$config = new LexerConfig();
|
42 |
+
$this->assertSame(null, $config->getToCharset());
|
43 |
+
$this->assertSame('UTF-8', $config->setToCharset('UTF-8')->getToCharset());
|
44 |
+
}
|
45 |
+
|
46 |
+
public function testFlags()
|
47 |
+
{
|
48 |
+
$config = new LexerConfig();
|
49 |
+
$this->assertSame(SplFileObject::READ_CSV, $config->getFlags());
|
50 |
+
$config->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::READ_CSV);
|
51 |
+
$flags = (SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::READ_CSV);
|
52 |
+
$this->assertSame($flags, $config->getFlags());
|
53 |
+
}
|
54 |
+
|
55 |
+
public function testIgnoreHeaderLine()
|
56 |
+
{
|
57 |
+
$config = new LexerConfig();
|
58 |
+
$this->assertSame(false, $config->getIgnoreHeaderLine());
|
59 |
+
$this->assertSame(true, $config->setIgnoreHeaderLine(true)->getIgnoreHeaderLine());
|
60 |
+
}
|
61 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/Observer/SqlObserverTest.php
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Unit\Observer;
|
4 |
+
|
5 |
+
use Mockery as m;
|
6 |
+
|
7 |
+
use Goodby\CSV\Import\Standard\Interpreter;
|
8 |
+
use Goodby\CSV\Import\Standard\Observer\SqlObserver;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* unit test for sql observer
|
12 |
+
*/
|
13 |
+
class SqlObserverTest extends \PHPUnit_Framework_TestCase
|
14 |
+
{
|
15 |
+
public function testUsage()
|
16 |
+
{
|
17 |
+
$interpreter = new Interpreter();
|
18 |
+
|
19 |
+
$tempDir = sys_get_temp_dir();
|
20 |
+
|
21 |
+
$path = $tempDir . DIRECTORY_SEPARATOR . 'test.sql';
|
22 |
+
|
23 |
+
if (file_exists($path)) {
|
24 |
+
unlink($path);
|
25 |
+
}
|
26 |
+
|
27 |
+
$sqlObserver = new SqlObserver('test', array('id', 'name', 'age', 'flag', 'flag2', 'status', 'contents'), $path);
|
28 |
+
|
29 |
+
$interpreter->addObserver(array($sqlObserver, 'notify'));
|
30 |
+
|
31 |
+
$interpreter->interpret(array('123', 'test', '28', 'true', 'false', 'null', 'test"test'));
|
32 |
+
|
33 |
+
$expectedSql = 'INSERT INTO test(id, name, age, flag, flag2, status, contents) VALUES(123, "test", 28, true, false, NULL, "test\"test");';
|
34 |
+
|
35 |
+
$this->assertEquals($expectedSql, file_get_contents($path));
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @expectedException \InvalidArgumentException
|
40 |
+
*/
|
41 |
+
public function testInvalidLine()
|
42 |
+
{
|
43 |
+
$interpreter = new Interpreter();
|
44 |
+
|
45 |
+
$sqlObserver = new SqlObserver('test', array('id', 'name'), 'dummy');
|
46 |
+
|
47 |
+
$interpreter->addObserver(array($sqlObserver, 'notify'));
|
48 |
+
|
49 |
+
$interpreter->interpret(array('123', array('test')));
|
50 |
+
}
|
51 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/StreamFilter/ConvertMbstringEncodingTest.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\Import\Tests\Standard\Unit\StreamFilter;
|
4 |
+
|
5 |
+
use Expose\Expose as e;
|
6 |
+
use Goodby\CSV\Import\Standard\StreamFilter\ConvertMbstringEncoding;
|
7 |
+
|
8 |
+
class ConvertMbstringEncodingTest extends \PHPUnit_Framework_TestCase
|
9 |
+
{
|
10 |
+
private $internalEncodingBackup;
|
11 |
+
|
12 |
+
public function setUp()
|
13 |
+
{
|
14 |
+
$this->internalEncodingBackup = mb_internal_encoding();
|
15 |
+
}
|
16 |
+
|
17 |
+
public function tearDown()
|
18 |
+
{
|
19 |
+
mb_internal_encoding($this->internalEncodingBackup);
|
20 |
+
}
|
21 |
+
|
22 |
+
public function testGetFilterName()
|
23 |
+
{
|
24 |
+
$this->assertSame('convert.mbstring.encoding.*', ConvertMbstringEncoding::getFilterName());
|
25 |
+
}
|
26 |
+
|
27 |
+
public function testOneParameter()
|
28 |
+
{
|
29 |
+
$filterString = 'convert.mbstring.encoding.EUC-JP';
|
30 |
+
mb_internal_encoding('UTF-7');
|
31 |
+
$filter = new ConvertMbstringEncoding();
|
32 |
+
$filter->filtername = $filterString;
|
33 |
+
$filter->onCreate();
|
34 |
+
$this->assertAttributeSame('EUC-JP', 'fromCharset', $filter);
|
35 |
+
$this->assertAttributeSame('UTF-7', 'toCharset', $filter);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function testTwoParameters()
|
39 |
+
{
|
40 |
+
$filterString = 'convert.mbstring.encoding.SJIS-win:UTF-8';
|
41 |
+
mb_internal_encoding('UTF-7');
|
42 |
+
$filter = new ConvertMbstringEncoding();
|
43 |
+
$filter->filtername = $filterString;
|
44 |
+
$filter->onCreate();
|
45 |
+
$this->assertAttributeSame('SJIS-win', 'fromCharset', $filter);
|
46 |
+
$this->assertAttributeSame('UTF-8', 'toCharset', $filter);
|
47 |
+
}
|
48 |
+
|
49 |
+
public function test_when_invalid_parameter_given_it_returns_false()
|
50 |
+
{
|
51 |
+
$filterString = 'convert.mbstring.encoding.@#$#!%^^';
|
52 |
+
$filter = new ConvertMbstringEncoding();
|
53 |
+
$filter->filtername = $filterString;
|
54 |
+
$this->assertFalse($filter->onCreate());
|
55 |
+
}
|
56 |
+
|
57 |
+
public function test_register_filter()
|
58 |
+
{
|
59 |
+
ConvertMbstringEncoding::register();
|
60 |
+
$filterName = ConvertMbstringEncoding::getFilterName();
|
61 |
+
$registeredFilters = stream_get_filters();
|
62 |
+
$this->assertTrue(in_array($filterName, $registeredFilters));
|
63 |
+
}
|
64 |
+
}
|
vendor/goodby/csv/src/Goodby/CSV/TestHelper/DbManager.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Goodby\CSV\TestHelper;
|
4 |
+
|
5 |
+
class DbManager
|
6 |
+
{
|
7 |
+
private $pdo;
|
8 |
+
|
9 |
+
private $host;
|
10 |
+
private $db;
|
11 |
+
private $user;
|
12 |
+
private $pass;
|
13 |
+
|
14 |
+
public function __construct()
|
15 |
+
{
|
16 |
+
$this->host = $_SERVER['GOODBY_CSV_TEST_DB_HOST'];
|
17 |
+
$this->db = $_SERVER['GOODBY_CSV_TEST_DB_NAME_DEFAULT'];
|
18 |
+
$this->user = $_SERVER['GOODBY_CSV_TEST_DB_USER'];
|
19 |
+
$this->pass = $_SERVER['GOODBY_CSV_TEST_DB_PASS'];
|
20 |
+
|
21 |
+
$dsn = 'mysql:host=' . $this->host;
|
22 |
+
|
23 |
+
$this->pdo = new \PDO($dsn, $this->user, $this->pass);
|
24 |
+
$stmt = $this->pdo->prepare("CREATE DATABASE " . $this->db);
|
25 |
+
|
26 |
+
$stmt->execute();
|
27 |
+
}
|
28 |
+
|
29 |
+
public function __destruct()
|
30 |
+
{
|
31 |
+
$stmt = $this->pdo->prepare("DROP DATABASE " . $this->db);
|
32 |
+
$stmt->execute();
|
33 |
+
}
|
34 |
+
|
35 |
+
public function getPdo()
|
36 |
+
{
|
37 |
+
return new \PDO($this->getDsn(), $this->user, $this->pass);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function getDsn()
|
41 |
+
{
|
42 |
+
return 'mysql:dbname=' . $this->db . ';host=' . $this->host;
|
43 |
+
}
|
44 |
+
|
45 |
+
public function getUser()
|
46 |
+
{
|
47 |
+
return $this->user;
|
48 |
+
}
|
49 |
+
|
50 |
+
public function getPassword()
|
51 |
+
{
|
52 |
+
return $this->pass;
|
53 |
+
}
|
54 |
+
}
|
vendor/symfony/polyfill-mbstring/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2015-2019 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/polyfill-mbstring/Mbstring.php
ADDED
@@ -0,0 +1,800 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Polyfill\Mbstring;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
|
16 |
+
*
|
17 |
+
* Implemented:
|
18 |
+
* - mb_chr - Returns a specific character from its Unicode code point
|
19 |
+
* - mb_convert_encoding - Convert character encoding
|
20 |
+
* - mb_convert_variables - Convert character code in variable(s)
|
21 |
+
* - mb_decode_mimeheader - Decode string in MIME header field
|
22 |
+
* - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
|
23 |
+
* - mb_decode_numericentity - Decode HTML numeric string reference to character
|
24 |
+
* - mb_encode_numericentity - Encode character to HTML numeric string reference
|
25 |
+
* - mb_convert_case - Perform case folding on a string
|
26 |
+
* - mb_detect_encoding - Detect character encoding
|
27 |
+
* - mb_get_info - Get internal settings of mbstring
|
28 |
+
* - mb_http_input - Detect HTTP input character encoding
|
29 |
+
* - mb_http_output - Set/Get HTTP output character encoding
|
30 |
+
* - mb_internal_encoding - Set/Get internal character encoding
|
31 |
+
* - mb_list_encodings - Returns an array of all supported encodings
|
32 |
+
* - mb_ord - Returns the Unicode code point of a character
|
33 |
+
* - mb_output_handler - Callback function converts character encoding in output buffer
|
34 |
+
* - mb_scrub - Replaces ill-formed byte sequences with substitute characters
|
35 |
+
* - mb_strlen - Get string length
|
36 |
+
* - mb_strpos - Find position of first occurrence of string in a string
|
37 |
+
* - mb_strrpos - Find position of last occurrence of a string in a string
|
38 |
+
* - mb_strtolower - Make a string lowercase
|
39 |
+
* - mb_strtoupper - Make a string uppercase
|
40 |
+
* - mb_substitute_character - Set/Get substitution character
|
41 |
+
* - mb_substr - Get part of string
|
42 |
+
* - mb_stripos - Finds position of first occurrence of a string within another, case insensitive
|
43 |
+
* - mb_stristr - Finds first occurrence of a string within another, case insensitive
|
44 |
+
* - mb_strrchr - Finds the last occurrence of a character in a string within another
|
45 |
+
* - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive
|
46 |
+
* - mb_strripos - Finds position of last occurrence of a string within another, case insensitive
|
47 |
+
* - mb_strstr - Finds first occurrence of a string within another
|
48 |
+
* - mb_strwidth - Return width of string
|
49 |
+
* - mb_substr_count - Count the number of substring occurrences
|
50 |
+
*
|
51 |
+
* Not implemented:
|
52 |
+
* - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
|
53 |
+
* - mb_ereg_* - Regular expression with multibyte support
|
54 |
+
* - mb_parse_str - Parse GET/POST/COOKIE data and set global variable
|
55 |
+
* - mb_preferred_mime_name - Get MIME charset string
|
56 |
+
* - mb_regex_encoding - Returns current encoding for multibyte regex as string
|
57 |
+
* - mb_regex_set_options - Set/Get the default options for mbregex functions
|
58 |
+
* - mb_send_mail - Send encoded mail
|
59 |
+
* - mb_split - Split multibyte string using regular expression
|
60 |
+
* - mb_strcut - Get part of string
|
61 |
+
* - mb_strimwidth - Get truncated string with specified width
|
62 |
+
*
|
63 |
+
* @author Nicolas Grekas <p@tchwork.com>
|
64 |
+
*
|
65 |
+
* @internal
|
66 |
+
*/
|
67 |
+
final class Mbstring
|
68 |
+
{
|
69 |
+
const MB_CASE_FOLD = PHP_INT_MAX;
|
70 |
+
|
71 |
+
private static $encodingList = array('ASCII', 'UTF-8');
|
72 |
+
private static $language = 'neutral';
|
73 |
+
private static $internalEncoding = 'UTF-8';
|
74 |
+
private static $caseFold = array(
|
75 |
+
array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"),
|
76 |
+
array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'),
|
77 |
+
);
|
78 |
+
|
79 |
+
public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
|
80 |
+
{
|
81 |
+
if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
|
82 |
+
$fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
|
83 |
+
} else {
|
84 |
+
$fromEncoding = self::getEncoding($fromEncoding);
|
85 |
+
}
|
86 |
+
|
87 |
+
$toEncoding = self::getEncoding($toEncoding);
|
88 |
+
|
89 |
+
if ('BASE64' === $fromEncoding) {
|
90 |
+
$s = base64_decode($s);
|
91 |
+
$fromEncoding = $toEncoding;
|
92 |
+
}
|
93 |
+
|
94 |
+
if ('BASE64' === $toEncoding) {
|
95 |
+
return base64_encode($s);
|
96 |
+
}
|
97 |
+
|
98 |
+
if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
|
99 |
+
if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
|
100 |
+
$fromEncoding = 'Windows-1252';
|
101 |
+
}
|
102 |
+
if ('UTF-8' !== $fromEncoding) {
|
103 |
+
$s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
|
104 |
+
}
|
105 |
+
|
106 |
+
return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s);
|
107 |
+
}
|
108 |
+
|
109 |
+
if ('HTML-ENTITIES' === $fromEncoding) {
|
110 |
+
$s = html_entity_decode($s, ENT_COMPAT, 'UTF-8');
|
111 |
+
$fromEncoding = 'UTF-8';
|
112 |
+
}
|
113 |
+
|
114 |
+
return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
|
115 |
+
}
|
116 |
+
|
117 |
+
public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null)
|
118 |
+
{
|
119 |
+
$vars = array(&$a, &$b, &$c, &$d, &$e, &$f);
|
120 |
+
|
121 |
+
$ok = true;
|
122 |
+
array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
|
123 |
+
if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
|
124 |
+
$ok = false;
|
125 |
+
}
|
126 |
+
});
|
127 |
+
|
128 |
+
return $ok ? $fromEncoding : false;
|
129 |
+
}
|
130 |
+
|
131 |
+
public static function mb_decode_mimeheader($s)
|
132 |
+
{
|
133 |
+
return iconv_mime_decode($s, 2, self::$internalEncoding);
|
134 |
+
}
|
135 |
+
|
136 |
+
public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
|
137 |
+
{
|
138 |
+
trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING);
|
139 |
+
}
|
140 |
+
|
141 |
+
public static function mb_decode_numericentity($s, $convmap, $encoding = null)
|
142 |
+
{
|
143 |
+
if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
|
144 |
+
trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
145 |
+
|
146 |
+
return null;
|
147 |
+
}
|
148 |
+
|
149 |
+
if (!\is_array($convmap) || !$convmap) {
|
150 |
+
return false;
|
151 |
+
}
|
152 |
+
|
153 |
+
if (null !== $encoding && !\is_scalar($encoding)) {
|
154 |
+
trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
155 |
+
|
156 |
+
return ''; // Instead of null (cf. mb_encode_numericentity).
|
157 |
+
}
|
158 |
+
|
159 |
+
$s = (string) $s;
|
160 |
+
if ('' === $s) {
|
161 |
+
return '';
|
162 |
+
}
|
163 |
+
|
164 |
+
$encoding = self::getEncoding($encoding);
|
165 |
+
|
166 |
+
if ('UTF-8' === $encoding) {
|
167 |
+
$encoding = null;
|
168 |
+
if (!preg_match('//u', $s)) {
|
169 |
+
$s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
|
170 |
+
}
|
171 |
+
} else {
|
172 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
173 |
+
}
|
174 |
+
|
175 |
+
$cnt = floor(\count($convmap) / 4) * 4;
|
176 |
+
|
177 |
+
for ($i = 0; $i < $cnt; $i += 4) {
|
178 |
+
// collector_decode_htmlnumericentity ignores $convmap[$i + 3]
|
179 |
+
$convmap[$i] += $convmap[$i + 2];
|
180 |
+
$convmap[$i + 1] += $convmap[$i + 2];
|
181 |
+
}
|
182 |
+
|
183 |
+
$s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
|
184 |
+
$c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
|
185 |
+
for ($i = 0; $i < $cnt; $i += 4) {
|
186 |
+
if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
|
187 |
+
return Mbstring::mb_chr($c - $convmap[$i + 2]);
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
return $m[0];
|
192 |
+
}, $s);
|
193 |
+
|
194 |
+
if (null === $encoding) {
|
195 |
+
return $s;
|
196 |
+
}
|
197 |
+
|
198 |
+
return iconv('UTF-8', $encoding.'//IGNORE', $s);
|
199 |
+
}
|
200 |
+
|
201 |
+
public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
|
202 |
+
{
|
203 |
+
if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
|
204 |
+
trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
205 |
+
|
206 |
+
return null;
|
207 |
+
}
|
208 |
+
|
209 |
+
if (!\is_array($convmap) || !$convmap) {
|
210 |
+
return false;
|
211 |
+
}
|
212 |
+
|
213 |
+
if (null !== $encoding && !\is_scalar($encoding)) {
|
214 |
+
trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
215 |
+
|
216 |
+
return null; // Instead of '' (cf. mb_decode_numericentity).
|
217 |
+
}
|
218 |
+
|
219 |
+
if (null !== $is_hex && !\is_scalar($is_hex)) {
|
220 |
+
trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING);
|
221 |
+
|
222 |
+
return null;
|
223 |
+
}
|
224 |
+
|
225 |
+
$s = (string) $s;
|
226 |
+
if ('' === $s) {
|
227 |
+
return '';
|
228 |
+
}
|
229 |
+
|
230 |
+
$encoding = self::getEncoding($encoding);
|
231 |
+
|
232 |
+
if ('UTF-8' === $encoding) {
|
233 |
+
$encoding = null;
|
234 |
+
if (!preg_match('//u', $s)) {
|
235 |
+
$s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
|
236 |
+
}
|
237 |
+
} else {
|
238 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
239 |
+
}
|
240 |
+
|
241 |
+
static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
|
242 |
+
|
243 |
+
$cnt = floor(\count($convmap) / 4) * 4;
|
244 |
+
$i = 0;
|
245 |
+
$len = \strlen($s);
|
246 |
+
$result = '';
|
247 |
+
|
248 |
+
while ($i < $len) {
|
249 |
+
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
|
250 |
+
$uchr = substr($s, $i, $ulen);
|
251 |
+
$i += $ulen;
|
252 |
+
$c = self::mb_ord($uchr);
|
253 |
+
|
254 |
+
for ($j = 0; $j < $cnt; $j += 4) {
|
255 |
+
if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
|
256 |
+
$cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
|
257 |
+
$result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';
|
258 |
+
continue 2;
|
259 |
+
}
|
260 |
+
}
|
261 |
+
$result .= $uchr;
|
262 |
+
}
|
263 |
+
|
264 |
+
if (null === $encoding) {
|
265 |
+
return $result;
|
266 |
+
}
|
267 |
+
|
268 |
+
return iconv('UTF-8', $encoding.'//IGNORE', $result);
|
269 |
+
}
|
270 |
+
|
271 |
+
public static function mb_convert_case($s, $mode, $encoding = null)
|
272 |
+
{
|
273 |
+
$s = (string) $s;
|
274 |
+
if ('' === $s) {
|
275 |
+
return '';
|
276 |
+
}
|
277 |
+
|
278 |
+
$encoding = self::getEncoding($encoding);
|
279 |
+
|
280 |
+
if ('UTF-8' === $encoding) {
|
281 |
+
$encoding = null;
|
282 |
+
if (!preg_match('//u', $s)) {
|
283 |
+
$s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
|
284 |
+
}
|
285 |
+
} else {
|
286 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
287 |
+
}
|
288 |
+
|
289 |
+
if (MB_CASE_TITLE == $mode) {
|
290 |
+
static $titleRegexp = null;
|
291 |
+
if (null === $titleRegexp) {
|
292 |
+
$titleRegexp = self::getData('titleCaseRegexp');
|
293 |
+
}
|
294 |
+
$s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s);
|
295 |
+
} else {
|
296 |
+
if (MB_CASE_UPPER == $mode) {
|
297 |
+
static $upper = null;
|
298 |
+
if (null === $upper) {
|
299 |
+
$upper = self::getData('upperCase');
|
300 |
+
}
|
301 |
+
$map = $upper;
|
302 |
+
} else {
|
303 |
+
if (self::MB_CASE_FOLD === $mode) {
|
304 |
+
$s = str_replace(self::$caseFold[0], self::$caseFold[1], $s);
|
305 |
+
}
|
306 |
+
|
307 |
+
static $lower = null;
|
308 |
+
if (null === $lower) {
|
309 |
+
$lower = self::getData('lowerCase');
|
310 |
+
}
|
311 |
+
$map = $lower;
|
312 |
+
}
|
313 |
+
|
314 |
+
static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
|
315 |
+
|
316 |
+
$i = 0;
|
317 |
+
$len = \strlen($s);
|
318 |
+
|
319 |
+
while ($i < $len) {
|
320 |
+
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
|
321 |
+
$uchr = substr($s, $i, $ulen);
|
322 |
+
$i += $ulen;
|
323 |
+
|
324 |
+
if (isset($map[$uchr])) {
|
325 |
+
$uchr = $map[$uchr];
|
326 |
+
$nlen = \strlen($uchr);
|
327 |
+
|
328 |
+
if ($nlen == $ulen) {
|
329 |
+
$nlen = $i;
|
330 |
+
do {
|
331 |
+
$s[--$nlen] = $uchr[--$ulen];
|
332 |
+
} while ($ulen);
|
333 |
+
} else {
|
334 |
+
$s = substr_replace($s, $uchr, $i - $ulen, $ulen);
|
335 |
+
$len += $nlen - $ulen;
|
336 |
+
$i += $nlen - $ulen;
|
337 |
+
}
|
338 |
+
}
|
339 |
+
}
|
340 |
+
}
|
341 |
+
|
342 |
+
if (null === $encoding) {
|
343 |
+
return $s;
|
344 |
+
}
|
345 |
+
|
346 |
+
return iconv('UTF-8', $encoding.'//IGNORE', $s);
|
347 |
+
}
|
348 |
+
|
349 |
+
public static function mb_internal_encoding($encoding = null)
|
350 |
+
{
|
351 |
+
if (null === $encoding) {
|
352 |
+
return self::$internalEncoding;
|
353 |
+
}
|
354 |
+
|
355 |
+
$encoding = self::getEncoding($encoding);
|
356 |
+
|
357 |
+
if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) {
|
358 |
+
self::$internalEncoding = $encoding;
|
359 |
+
|
360 |
+
return true;
|
361 |
+
}
|
362 |
+
|
363 |
+
return false;
|
364 |
+
}
|
365 |
+
|
366 |
+
public static function mb_language($lang = null)
|
367 |
+
{
|
368 |
+
if (null === $lang) {
|
369 |
+
return self::$language;
|
370 |
+
}
|
371 |
+
|
372 |
+
switch ($lang = strtolower($lang)) {
|
373 |
+
case 'uni':
|
374 |
+
case 'neutral':
|
375 |
+
self::$language = $lang;
|
376 |
+
|
377 |
+
return true;
|
378 |
+
}
|
379 |
+
|
380 |
+
return false;
|
381 |
+
}
|
382 |
+
|
383 |
+
public static function mb_list_encodings()
|
384 |
+
{
|
385 |
+
return array('UTF-8');
|
386 |
+
}
|
387 |
+
|
388 |
+
public static function mb_encoding_aliases($encoding)
|
389 |
+
{
|
390 |
+
switch (strtoupper($encoding)) {
|
391 |
+
case 'UTF8':
|
392 |
+
case 'UTF-8':
|
393 |
+
return array('utf8');
|
394 |
+
}
|
395 |
+
|
396 |
+
return false;
|
397 |
+
}
|
398 |
+
|
399 |
+
public static function mb_check_encoding($var = null, $encoding = null)
|
400 |
+
{
|
401 |
+
if (null === $encoding) {
|
402 |
+
if (null === $var) {
|
403 |
+
return false;
|
404 |
+
}
|
405 |
+
$encoding = self::$internalEncoding;
|
406 |
+
}
|
407 |
+
|
408 |
+
return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var);
|
409 |
+
}
|
410 |
+
|
411 |
+
public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
|
412 |
+
{
|
413 |
+
if (null === $encodingList) {
|
414 |
+
$encodingList = self::$encodingList;
|
415 |
+
} else {
|
416 |
+
if (!\is_array($encodingList)) {
|
417 |
+
$encodingList = array_map('trim', explode(',', $encodingList));
|
418 |
+
}
|
419 |
+
$encodingList = array_map('strtoupper', $encodingList);
|
420 |
+
}
|
421 |
+
|
422 |
+
foreach ($encodingList as $enc) {
|
423 |
+
switch ($enc) {
|
424 |
+
case 'ASCII':
|
425 |
+
if (!preg_match('/[\x80-\xFF]/', $str)) {
|
426 |
+
return $enc;
|
427 |
+
}
|
428 |
+
break;
|
429 |
+
|
430 |
+
case 'UTF8':
|
431 |
+
case 'UTF-8':
|
432 |
+
if (preg_match('//u', $str)) {
|
433 |
+
return 'UTF-8';
|
434 |
+
}
|
435 |
+
break;
|
436 |
+
|
437 |
+
default:
|
438 |
+
if (0 === strncmp($enc, 'ISO-8859-', 9)) {
|
439 |
+
return $enc;
|
440 |
+
}
|
441 |
+
}
|
442 |
+
}
|
443 |
+
|
444 |
+
return false;
|
445 |
+
}
|
446 |
+
|
447 |
+
public static function mb_detect_order($encodingList = null)
|
448 |
+
{
|
449 |
+
if (null === $encodingList) {
|
450 |
+
return self::$encodingList;
|
451 |
+
}
|
452 |
+
|
453 |
+
if (!\is_array($encodingList)) {
|
454 |
+
$encodingList = array_map('trim', explode(',', $encodingList));
|
455 |
+
}
|
456 |
+
$encodingList = array_map('strtoupper', $encodingList);
|
457 |
+
|
458 |
+
foreach ($encodingList as $enc) {
|
459 |
+
switch ($enc) {
|
460 |
+
default:
|
461 |
+
if (strncmp($enc, 'ISO-8859-', 9)) {
|
462 |
+
return false;
|
463 |
+
}
|
464 |
+
// no break
|
465 |
+
case 'ASCII':
|
466 |
+
case 'UTF8':
|
467 |
+
case 'UTF-8':
|
468 |
+
}
|
469 |
+
}
|
470 |
+
|
471 |
+
self::$encodingList = $encodingList;
|
472 |
+
|
473 |
+
return true;
|
474 |
+
}
|
475 |
+
|
476 |
+
public static function mb_strlen($s, $encoding = null)
|
477 |
+
{
|
478 |
+
$encoding = self::getEncoding($encoding);
|
479 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
480 |
+
return \strlen($s);
|
481 |
+
}
|
482 |
+
|
483 |
+
return @iconv_strlen($s, $encoding);
|
484 |
+
}
|
485 |
+
|
486 |
+
public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
|
487 |
+
{
|
488 |
+
$encoding = self::getEncoding($encoding);
|
489 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
490 |
+
return strpos($haystack, $needle, $offset);
|
491 |
+
}
|
492 |
+
|
493 |
+
$needle = (string) $needle;
|
494 |
+
if ('' === $needle) {
|
495 |
+
trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING);
|
496 |
+
|
497 |
+
return false;
|
498 |
+
}
|
499 |
+
|
500 |
+
return iconv_strpos($haystack, $needle, $offset, $encoding);
|
501 |
+
}
|
502 |
+
|
503 |
+
public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
|
504 |
+
{
|
505 |
+
$encoding = self::getEncoding($encoding);
|
506 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
507 |
+
return strrpos($haystack, $needle, $offset);
|
508 |
+
}
|
509 |
+
|
510 |
+
if ($offset != (int) $offset) {
|
511 |
+
$offset = 0;
|
512 |
+
} elseif ($offset = (int) $offset) {
|
513 |
+
if ($offset < 0) {
|
514 |
+
$haystack = self::mb_substr($haystack, 0, $offset, $encoding);
|
515 |
+
$offset = 0;
|
516 |
+
} else {
|
517 |
+
$haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
|
518 |
+
}
|
519 |
+
}
|
520 |
+
|
521 |
+
$pos = iconv_strrpos($haystack, $needle, $encoding);
|
522 |
+
|
523 |
+
return false !== $pos ? $offset + $pos : false;
|
524 |
+
}
|
525 |
+
|
526 |
+
public static function mb_strtolower($s, $encoding = null)
|
527 |
+
{
|
528 |
+
return self::mb_convert_case($s, MB_CASE_LOWER, $encoding);
|
529 |
+
}
|
530 |
+
|
531 |
+
public static function mb_strtoupper($s, $encoding = null)
|
532 |
+
{
|
533 |
+
return self::mb_convert_case($s, MB_CASE_UPPER, $encoding);
|
534 |
+
}
|
535 |
+
|
536 |
+
public static function mb_substitute_character($c = null)
|
537 |
+
{
|
538 |
+
if (0 === strcasecmp($c, 'none')) {
|
539 |
+
return true;
|
540 |
+
}
|
541 |
+
|
542 |
+
return null !== $c ? false : 'none';
|
543 |
+
}
|
544 |
+
|
545 |
+
public static function mb_substr($s, $start, $length = null, $encoding = null)
|
546 |
+
{
|
547 |
+
$encoding = self::getEncoding($encoding);
|
548 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
549 |
+
return substr($s, $start, null === $length ? 2147483647 : $length);
|
550 |
+
}
|
551 |
+
|
552 |
+
if ($start < 0) {
|
553 |
+
$start = iconv_strlen($s, $encoding) + $start;
|
554 |
+
if ($start < 0) {
|
555 |
+
$start = 0;
|
556 |
+
}
|
557 |
+
}
|
558 |
+
|
559 |
+
if (null === $length) {
|
560 |
+
$length = 2147483647;
|
561 |
+
} elseif ($length < 0) {
|
562 |
+
$length = iconv_strlen($s, $encoding) + $length - $start;
|
563 |
+
if ($length < 0) {
|
564 |
+
return '';
|
565 |
+
}
|
566 |
+
}
|
567 |
+
|
568 |
+
return (string) iconv_substr($s, $start, $length, $encoding);
|
569 |
+
}
|
570 |
+
|
571 |
+
public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
|
572 |
+
{
|
573 |
+
$haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
|
574 |
+
$needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
|
575 |
+
|
576 |
+
return self::mb_strpos($haystack, $needle, $offset, $encoding);
|
577 |
+
}
|
578 |
+
|
579 |
+
public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
|
580 |
+
{
|
581 |
+
$pos = self::mb_stripos($haystack, $needle, 0, $encoding);
|
582 |
+
|
583 |
+
return self::getSubpart($pos, $part, $haystack, $encoding);
|
584 |
+
}
|
585 |
+
|
586 |
+
public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
|
587 |
+
{
|
588 |
+
$encoding = self::getEncoding($encoding);
|
589 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
590 |
+
return strrchr($haystack, $needle, $part);
|
591 |
+
}
|
592 |
+
$needle = self::mb_substr($needle, 0, 1, $encoding);
|
593 |
+
$pos = iconv_strrpos($haystack, $needle, $encoding);
|
594 |
+
|
595 |
+
return self::getSubpart($pos, $part, $haystack, $encoding);
|
596 |
+
}
|
597 |
+
|
598 |
+
public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
|
599 |
+
{
|
600 |
+
$needle = self::mb_substr($needle, 0, 1, $encoding);
|
601 |
+
$pos = self::mb_strripos($haystack, $needle, $encoding);
|
602 |
+
|
603 |
+
return self::getSubpart($pos, $part, $haystack, $encoding);
|
604 |
+
}
|
605 |
+
|
606 |
+
public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
|
607 |
+
{
|
608 |
+
$haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
|
609 |
+
$needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
|
610 |
+
|
611 |
+
return self::mb_strrpos($haystack, $needle, $offset, $encoding);
|
612 |
+
}
|
613 |
+
|
614 |
+
public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
|
615 |
+
{
|
616 |
+
$pos = strpos($haystack, $needle);
|
617 |
+
if (false === $pos) {
|
618 |
+
return false;
|
619 |
+
}
|
620 |
+
if ($part) {
|
621 |
+
return substr($haystack, 0, $pos);
|
622 |
+
}
|
623 |
+
|
624 |
+
return substr($haystack, $pos);
|
625 |
+
}
|
626 |
+
|
627 |
+
public static function mb_get_info($type = 'all')
|
628 |
+
{
|
629 |
+
$info = array(
|
630 |
+
'internal_encoding' => self::$internalEncoding,
|
631 |
+
'http_output' => 'pass',
|
632 |
+
'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
|
633 |
+
'func_overload' => 0,
|
634 |
+
'func_overload_list' => 'no overload',
|
635 |
+
'mail_charset' => 'UTF-8',
|
636 |
+
'mail_header_encoding' => 'BASE64',
|
637 |
+
'mail_body_encoding' => 'BASE64',
|
638 |
+
'illegal_chars' => 0,
|
639 |
+
'encoding_translation' => 'Off',
|
640 |
+
'language' => self::$language,
|
641 |
+
'detect_order' => self::$encodingList,
|
642 |
+
'substitute_character' => 'none',
|
643 |
+
'strict_detection' => 'Off',
|
644 |
+
);
|
645 |
+
|
646 |
+
if ('all' === $type) {
|
647 |
+
return $info;
|
648 |
+
}
|
649 |
+
if (isset($info[$type])) {
|
650 |
+
return $info[$type];
|
651 |
+
}
|
652 |
+
|
653 |
+
return false;
|
654 |
+
}
|
655 |
+
|
656 |
+
public static function mb_http_input($type = '')
|
657 |
+
{
|
658 |
+
return false;
|
659 |
+
}
|
660 |
+
|
661 |
+
public static function mb_http_output($encoding = null)
|
662 |
+
{
|
663 |
+
return null !== $encoding ? 'pass' === $encoding : 'pass';
|
664 |
+
}
|
665 |
+
|
666 |
+
public static function mb_strwidth($s, $encoding = null)
|
667 |
+
{
|
668 |
+
$encoding = self::getEncoding($encoding);
|
669 |
+
|
670 |
+
if ('UTF-8' !== $encoding) {
|
671 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
672 |
+
}
|
673 |
+
|
674 |
+
$s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
|
675 |
+
|
676 |
+
return ($wide << 1) + iconv_strlen($s, 'UTF-8');
|
677 |
+
}
|
678 |
+
|
679 |
+
public static function mb_substr_count($haystack, $needle, $encoding = null)
|
680 |
+
{
|
681 |
+
return substr_count($haystack, $needle);
|
682 |
+
}
|
683 |
+
|
684 |
+
public static function mb_output_handler($contents, $status)
|
685 |
+
{
|
686 |
+
return $contents;
|
687 |
+
}
|
688 |
+
|
689 |
+
public static function mb_chr($code, $encoding = null)
|
690 |
+
{
|
691 |
+
if (0x80 > $code %= 0x200000) {
|
692 |
+
$s = \chr($code);
|
693 |
+
} elseif (0x800 > $code) {
|
694 |
+
$s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
|
695 |
+
} elseif (0x10000 > $code) {
|
696 |
+
$s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
|
697 |
+
} else {
|
698 |
+
$s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
|
699 |
+
}
|
700 |
+
|
701 |
+
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
|
702 |
+
$s = mb_convert_encoding($s, $encoding, 'UTF-8');
|
703 |
+
}
|
704 |
+
|
705 |
+
return $s;
|
706 |
+
}
|
707 |
+
|
708 |
+
public static function mb_ord($s, $encoding = null)
|
709 |
+
{
|
710 |
+
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
|
711 |
+
$s = mb_convert_encoding($s, 'UTF-8', $encoding);
|
712 |
+
}
|
713 |
+
|
714 |
+
if (1 === \strlen($s)) {
|
715 |
+
return \ord($s);
|
716 |
+
}
|
717 |
+
|
718 |
+
$code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
|
719 |
+
if (0xF0 <= $code) {
|
720 |
+
return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
|
721 |
+
}
|
722 |
+
if (0xE0 <= $code) {
|
723 |
+
return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
|
724 |
+
}
|
725 |
+
if (0xC0 <= $code) {
|
726 |
+
return (($code - 0xC0) << 6) + $s[2] - 0x80;
|
727 |
+
}
|
728 |
+
|
729 |
+
return $code;
|
730 |
+
}
|
731 |
+
|
732 |
+
private static function getSubpart($pos, $part, $haystack, $encoding)
|
733 |
+
{
|
734 |
+
if (false === $pos) {
|
735 |
+
return false;
|
736 |
+
}
|
737 |
+
if ($part) {
|
738 |
+
return self::mb_substr($haystack, 0, $pos, $encoding);
|
739 |
+
}
|
740 |
+
|
741 |
+
return self::mb_substr($haystack, $pos, null, $encoding);
|
742 |
+
}
|
743 |
+
|
744 |
+
private static function html_encoding_callback(array $m)
|
745 |
+
{
|
746 |
+
$i = 1;
|
747 |
+
$entities = '';
|
748 |
+
$m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8'));
|
749 |
+
|
750 |
+
while (isset($m[$i])) {
|
751 |
+
if (0x80 > $m[$i]) {
|
752 |
+
$entities .= \chr($m[$i++]);
|
753 |
+
continue;
|
754 |
+
}
|
755 |
+
if (0xF0 <= $m[$i]) {
|
756 |
+
$c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
|
757 |
+
} elseif (0xE0 <= $m[$i]) {
|
758 |
+
$c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
|
759 |
+
} else {
|
760 |
+
$c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
|
761 |
+
}
|
762 |
+
|
763 |
+
$entities .= '&#'.$c.';';
|
764 |
+
}
|
765 |
+
|
766 |
+
return $entities;
|
767 |
+
}
|
768 |
+
|
769 |
+
private static function title_case(array $s)
|
770 |
+
{
|
771 |
+
return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8');
|
772 |
+
}
|
773 |
+
|
774 |
+
private static function getData($file)
|
775 |
+
{
|
776 |
+
if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
|
777 |
+
return require $file;
|
778 |
+
}
|
779 |
+
|
780 |
+
return false;
|
781 |
+
}
|
782 |
+
|
783 |
+
private static function getEncoding($encoding)
|
784 |
+
{
|
785 |
+
if (null === $encoding) {
|
786 |
+
return self::$internalEncoding;
|
787 |
+
}
|
788 |
+
|
789 |
+
$encoding = strtoupper($encoding);
|
790 |
+
|
791 |
+
if ('8BIT' === $encoding || 'BINARY' === $encoding) {
|
792 |
+
return 'CP850';
|
793 |
+
}
|
794 |
+
if ('UTF8' === $encoding) {
|
795 |
+
return 'UTF-8';
|
796 |
+
}
|
797 |
+
|
798 |
+
return $encoding;
|
799 |
+
}
|
800 |
+
}
|
vendor/symfony/polyfill-mbstring/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Symfony Polyfill / Mbstring
|
2 |
+
===========================
|
3 |
+
|
4 |
+
This component provides a partial, native PHP implementation for the
|
5 |
+
[Mbstring](http://php.net/mbstring) extension.
|
6 |
+
|
7 |
+
More information can be found in the
|
8 |
+
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
|
9 |
+
|
10 |
+
License
|
11 |
+
=======
|
12 |
+
|
13 |
+
This library is released under the [MIT license](LICENSE).
|
vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
ADDED
@@ -0,0 +1,1096 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
return array(
|
4 |
+
'A' => 'a',
|
5 |
+
'B' => 'b',
|
6 |
+
'C' => 'c',
|
7 |
+
'D' => 'd',
|
8 |
+
'E' => 'e',
|
9 |
+
'F' => 'f',
|
10 |
+
'G' => 'g',
|
11 |
+
'H' => 'h',
|
12 |
+
'I' => 'i',
|
13 |
+
'J' => 'j',
|
14 |
+
'K' => 'k',
|
15 |
+
'L' => 'l',
|
16 |
+
'M' => 'm',
|
17 |
+
'N' => 'n',
|
18 |
+
'O' => 'o',
|
19 |
+
'P' => 'p',
|
20 |
+
'Q' => 'q',
|
21 |
+
'R' => 'r',
|
22 |
+
'S' => 's',
|
23 |
+
'T' => 't',
|
24 |
+
'U' => 'u',
|
25 |
+
'V' => 'v',
|
26 |
+
'W' => 'w',
|
27 |
+
'X' => 'x',
|
28 |
+
'Y' => 'y',
|
29 |
+
'Z' => 'z',
|
30 |
+
'À' => 'à',
|
31 |
+
'Á' => 'á',
|
32 |
+
'Â' => 'â',
|
33 |
+
'Ã' => 'ã',
|
34 |
+
'Ä' => 'ä',
|
35 |
+
'Å' => 'å',
|
36 |
+
'Æ' => 'æ',
|
37 |
+
'Ç' => 'ç',
|
38 |
+
'È' => 'è',
|
39 |
+
'É' => 'é',
|
40 |
+
'Ê' => 'ê',
|
41 |
+
'Ë' => 'ë',
|
42 |
+
'Ì' => 'ì',
|
43 |
+
'Í' => 'í',
|
44 |
+
'Î' => 'î',
|
45 |
+
'Ï' => 'ï',
|
46 |
+
'Ð' => 'ð',
|
47 |
+
'Ñ' => 'ñ',
|
48 |
+
'Ò' => 'ò',
|
49 |
+
'Ó' => 'ó',
|
50 |
+
'Ô' => 'ô',
|
51 |
+
'Õ' => 'õ',
|
52 |
+
'Ö' => 'ö',
|
53 |
+
'Ø' => 'ø',
|
54 |
+
'Ù' => 'ù',
|
55 |
+
'Ú' => 'ú',
|
56 |
+
'Û' => 'û',
|
57 |
+
'Ü' => 'ü',
|
58 |
+
'Ý' => 'ý',
|
59 |
+
'Þ' => 'þ',
|
60 |
+
'Ā' => 'ā',
|
61 |
+
'Ă' => 'ă',
|
62 |
+
'Ą' => 'ą',
|
63 |
+
'Ć' => 'ć',
|
64 |
+
'Ĉ' => 'ĉ',
|
65 |
+
'Ċ' => 'ċ',
|
66 |
+
'Č' => 'č',
|
67 |
+
'Ď' => 'ď',
|
68 |
+
'Đ' => 'đ',
|
69 |
+
'Ē' => 'ē',
|
70 |
+
'Ĕ' => 'ĕ',
|
71 |
+
'Ė' => 'ė',
|
72 |
+
'Ę' => 'ę',
|
73 |
+
'Ě' => 'ě',
|
74 |
+
'Ĝ' => 'ĝ',
|
75 |
+
'Ğ' => 'ğ',
|
76 |
+
'Ġ' => 'ġ',
|
77 |
+
'Ģ' => 'ģ',
|
78 |
+
'Ĥ' => 'ĥ',
|
79 |
+
'Ħ' => 'ħ',
|
80 |
+
'Ĩ' => 'ĩ',
|
81 |
+
'Ī' => 'ī',
|
82 |
+
'Ĭ' => 'ĭ',
|
83 |
+
'Į' => 'į',
|
84 |
+
'İ' => 'i',
|
85 |
+
'IJ' => 'ij',
|
86 |
+
'Ĵ' => 'ĵ',
|
87 |
+
'Ķ' => 'ķ',
|
88 |
+
'Ĺ' => 'ĺ',
|
89 |
+
'Ļ' => 'ļ',
|
90 |
+
'Ľ' => 'ľ',
|
91 |
+
'Ŀ' => 'ŀ',
|
92 |
+
'Ł' => 'ł',
|
93 |
+
'Ń' => 'ń',
|
94 |
+
'Ņ' => 'ņ',
|
95 |
+
'Ň' => 'ň',
|
96 |
+
'Ŋ' => 'ŋ',
|
97 |
+
'Ō' => 'ō',
|
98 |
+
'Ŏ' => 'ŏ',
|
99 |
+
'Ő' => 'ő',
|
100 |
+
'Œ' => 'œ',
|
101 |
+
'Ŕ' => 'ŕ',
|
102 |
+
'Ŗ' => 'ŗ',
|
103 |
+
'Ř' => 'ř',
|
104 |
+
'Ś' => 'ś',
|
105 |
+
'Ŝ' => 'ŝ',
|
106 |
+
'Ş' => 'ş',
|
107 |
+
'Š' => 'š',
|
108 |
+
'Ţ' => 'ţ',
|
109 |
+
'Ť' => 'ť',
|
110 |
+
'Ŧ' => 'ŧ',
|
111 |
+
'Ũ' => 'ũ',
|
112 |
+
'Ū' => 'ū',
|
113 |
+
'Ŭ' => 'ŭ',
|
114 |
+
'Ů' => 'ů',
|
115 |
+
'Ű' => 'ű',
|
116 |
+
'Ų' => 'ų',
|
117 |
+
'Ŵ' => 'ŵ',
|
118 |
+
'Ŷ' => 'ŷ',
|
119 |
+
'Ÿ' => 'ÿ',
|
120 |
+
'Ź' => 'ź',
|
121 |
+
'Ż' => 'ż',
|
122 |
+
'Ž' => 'ž',
|
123 |
+
'Ɓ' => 'ɓ',
|
124 |
+
'Ƃ' => 'ƃ',
|
125 |
+
'Ƅ' => 'ƅ',
|
126 |
+
'Ɔ' => 'ɔ',
|
127 |
+
'Ƈ' => 'ƈ',
|
128 |
+
'Ɖ' => 'ɖ',
|
129 |
+
'Ɗ' => 'ɗ',
|
130 |
+
'Ƌ' => 'ƌ',
|
131 |
+
'Ǝ' => 'ǝ',
|
132 |
+
'Ə' => 'ə',
|
133 |
+
'Ɛ' => 'ɛ',
|
134 |
+
'Ƒ' => 'ƒ',
|
135 |
+
'Ɠ' => 'ɠ',
|
136 |
+
'Ɣ' => 'ɣ',
|
137 |
+
'Ɩ' => 'ɩ',
|
138 |
+
'Ɨ' => 'ɨ',
|
139 |
+
'Ƙ' => 'ƙ',
|
140 |
+
'Ɯ' => 'ɯ',
|
141 |
+
'Ɲ' => 'ɲ',
|
142 |
+
'Ɵ' => 'ɵ',
|
143 |
+
'Ơ' => 'ơ',
|
144 |
+
'Ƣ' => 'ƣ',
|
145 |
+
'Ƥ' => 'ƥ',
|
146 |
+
'Ʀ' => 'ʀ',
|
147 |
+
'Ƨ' => 'ƨ',
|
148 |
+
'Ʃ' => 'ʃ',
|
149 |
+
'Ƭ' => 'ƭ',
|
150 |
+
'Ʈ' => 'ʈ',
|
151 |
+
'Ư' => 'ư',
|
152 |
+
'Ʊ' => 'ʊ',
|
153 |
+
'Ʋ' => 'ʋ',
|
154 |
+
'Ƴ' => 'ƴ',
|
155 |
+
'Ƶ' => 'ƶ',
|
156 |
+
'Ʒ' => 'ʒ',
|
157 |
+
'Ƹ' => 'ƹ',
|
158 |
+
'Ƽ' => 'ƽ',
|
159 |
+
'DŽ' => 'dž',
|
160 |
+
'Dž' => 'dž',
|
161 |
+
'LJ' => 'lj',
|
162 |
+
'Lj' => 'lj',
|
163 |
+
'NJ' => 'nj',
|
164 |
+
'Nj' => 'nj',
|
165 |
+
'Ǎ' => 'ǎ',
|
166 |
+
'Ǐ' => 'ǐ',
|
167 |
+
'Ǒ' => 'ǒ',
|
168 |
+
'Ǔ' => 'ǔ',
|
169 |
+
'Ǖ' => 'ǖ',
|
170 |
+
'Ǘ' => 'ǘ',
|
171 |
+
'Ǚ' => 'ǚ',
|
172 |
+
'Ǜ' => 'ǜ',
|
173 |
+
'Ǟ' => 'ǟ',
|
174 |
+
'Ǡ' => 'ǡ',
|
175 |
+
'Ǣ' => 'ǣ',
|
176 |
+
'Ǥ' => 'ǥ',
|
177 |
+
'Ǧ' => 'ǧ',
|
178 |
+
'Ǩ' => 'ǩ',
|
179 |
+
'Ǫ' => 'ǫ',
|
180 |
+
'Ǭ' => 'ǭ',
|
181 |
+
'Ǯ' => 'ǯ',
|
182 |
+
'DZ' => 'dz',
|
183 |
+
'Dz' => 'dz',
|
184 |
+
'Ǵ' => 'ǵ',
|
185 |
+
'Ƕ' => 'ƕ',
|
186 |
+
'Ƿ' => 'ƿ',
|
187 |
+
'Ǹ' => 'ǹ',
|
188 |
+
'Ǻ' => 'ǻ',
|
189 |
+
'Ǽ' => 'ǽ',
|
190 |
+
'Ǿ' => 'ǿ',
|
191 |
+
'Ȁ' => 'ȁ',
|
192 |
+
'Ȃ' => 'ȃ',
|
193 |
+
'Ȅ' => 'ȅ',
|
194 |
+
'Ȇ' => 'ȇ',
|
195 |
+
'Ȉ' => 'ȉ',
|
196 |
+
'Ȋ' => 'ȋ',
|
197 |
+
'Ȍ' => 'ȍ',
|
198 |
+
'Ȏ' => 'ȏ',
|
199 |
+
'Ȑ' => 'ȑ',
|
200 |
+
'Ȓ' => 'ȓ',
|
201 |
+
'Ȕ' => 'ȕ',
|
202 |
+
'Ȗ' => 'ȗ',
|
203 |
+
'Ș' => 'ș',
|
204 |
+
'Ț' => 'ț',
|
205 |
+
'Ȝ' => 'ȝ',
|
206 |
+
'Ȟ' => 'ȟ',
|
207 |
+
'Ƞ' => 'ƞ',
|
208 |
+
'Ȣ' => 'ȣ',
|
209 |
+
'Ȥ' => 'ȥ',
|
210 |
+
'Ȧ' => 'ȧ',
|
211 |
+
'Ȩ' => 'ȩ',
|
212 |
+
'Ȫ' => 'ȫ',
|
213 |
+
'Ȭ' => 'ȭ',
|
214 |
+
'Ȯ' => 'ȯ',
|
215 |
+
'Ȱ' => 'ȱ',
|
216 |
+
'Ȳ' => 'ȳ',
|
217 |
+
'Ⱥ' => 'ⱥ',
|
218 |
+
'Ȼ' => 'ȼ',
|
219 |
+
'Ƚ' => 'ƚ',
|
220 |
+
'Ⱦ' => 'ⱦ',
|
221 |
+
'Ɂ' => 'ɂ',
|
222 |
+
'Ƀ' => 'ƀ',
|
223 |
+
'Ʉ' => 'ʉ',
|
224 |
+
'Ʌ' => 'ʌ',
|
225 |
+
'Ɇ' => 'ɇ',
|
226 |
+
'Ɉ' => 'ɉ',
|
227 |
+
'Ɋ' => 'ɋ',
|
228 |
+
'Ɍ' => 'ɍ',
|
229 |
+
'Ɏ' => 'ɏ',
|
230 |
+
'Ͱ' => 'ͱ',
|
231 |
+
'Ͳ' => 'ͳ',
|
232 |
+
'Ͷ' => 'ͷ',
|
233 |
+
'Ϳ' => 'ϳ',
|
234 |
+
'Ά' => 'ά',
|
235 |
+
'Έ' => 'έ',
|
236 |
+
'Ή' => 'ή',
|
237 |
+
'Ί' => 'ί',
|
238 |
+
'Ό' => 'ό',
|
239 |
+
'Ύ' => 'ύ',
|
240 |
+
'Ώ' => 'ώ',
|
241 |
+
'Α' => 'α',
|
242 |
+
'Β' => 'β',
|
243 |
+
'Γ' => 'γ',
|
244 |
+
'Δ' => 'δ',
|
245 |
+
'Ε' => 'ε',
|
246 |
+
'Ζ' => 'ζ',
|
247 |
+
'Η' => 'η',
|
248 |
+
'Θ' => 'θ',
|
249 |
+
'Ι' => 'ι',
|
250 |
+
'Κ' => 'κ',
|
251 |
+
'Λ' => 'λ',
|
252 |
+
'Μ' => 'μ',
|
253 |
+
'Ν' => 'ν',
|
254 |
+
'Ξ' => 'ξ',
|
255 |
+
'Ο' => 'ο',
|
256 |
+
'Π' => 'π',
|
257 |
+
'Ρ' => 'ρ',
|
258 |
+
'Σ' => 'σ',
|
259 |
+
'Τ' => 'τ',
|
260 |
+
'Υ' => 'υ',
|
261 |
+
'Φ' => 'φ',
|
262 |
+
'Χ' => 'χ',
|
263 |
+
'Ψ' => 'ψ',
|
264 |
+
'Ω' => 'ω',
|
265 |
+
'Ϊ' => 'ϊ',
|
266 |
+
'Ϋ' => 'ϋ',
|
267 |
+
'Ϗ' => 'ϗ',
|
268 |
+
'Ϙ' => 'ϙ',
|
269 |
+
'Ϛ' => 'ϛ',
|
270 |
+
'Ϝ' => 'ϝ',
|
271 |
+
'Ϟ' => 'ϟ',
|
272 |
+
'Ϡ' => 'ϡ',
|
273 |
+
'Ϣ' => 'ϣ',
|
274 |
+
'Ϥ' => 'ϥ',
|
275 |
+
'Ϧ' => 'ϧ',
|
276 |
+
'Ϩ' => 'ϩ',
|
277 |
+
'Ϫ' => 'ϫ',
|
278 |
+
'Ϭ' => 'ϭ',
|
279 |
+
'Ϯ' => 'ϯ',
|
280 |
+
'ϴ' => 'θ',
|
281 |
+
'Ϸ' => 'ϸ',
|
282 |
+
'Ϲ' => 'ϲ',
|
283 |
+
'Ϻ' => 'ϻ',
|
284 |
+
'Ͻ' => 'ͻ',
|
285 |
+
'Ͼ' => 'ͼ',
|
286 |
+
'Ͽ' => 'ͽ',
|
287 |
+
'Ѐ' => 'ѐ',
|
288 |
+
'Ё' => 'ё',
|
289 |
+
'Ђ' => 'ђ',
|
290 |
+
'Ѓ' => 'ѓ',
|
291 |
+
'Є' => 'є',
|
292 |
+
'Ѕ' => 'ѕ',
|
293 |
+
'І' => 'і',
|
294 |
+
'Ї' => 'ї',
|
295 |
+
'Ј' => 'ј',
|
296 |
+
'Љ' => 'љ',
|
297 |
+
'Њ' => 'њ',
|
298 |
+
'Ћ' => 'ћ',
|
299 |
+
'Ќ' => 'ќ',
|
300 |
+
'Ѝ' => 'ѝ',
|
301 |
+
'Ў' => 'ў',
|
302 |
+
'Џ' => 'џ',
|
303 |
+
'А' => 'а',
|
304 |
+
'Б' => 'б',
|
305 |
+
'В' => 'в',
|
306 |
+
'Г' => 'г',
|
307 |
+
'Д' => 'д',
|
308 |
+
'Е' => 'е',
|
309 |
+
'Ж' => 'ж',
|
310 |
+
'З' => 'з',
|
311 |
+
'И' => 'и',
|
312 |
+
'Й' => 'й',
|
313 |
+
'К' => 'к',
|
314 |
+
'Л' => 'л',
|
315 |
+
'М' => 'м',
|
316 |
+
'Н' => 'н',
|
317 |
+
'О' => 'о',
|
318 |
+
'П' => 'п',
|
319 |
+
'Р' => 'р',
|
320 |
+
'С' => 'с',
|
321 |
+
'Т' => 'т',
|
322 |
+
'У' => 'у',
|
323 |
+
'Ф' => 'ф',
|
324 |
+
'Х' => 'х',
|
325 |
+
'Ц' => 'ц',
|
326 |
+
'Ч' => 'ч',
|
327 |
+
'Ш' => 'ш',
|
328 |
+
'Щ' => 'щ',
|
329 |
+
'Ъ' => 'ъ',
|
330 |
+
'Ы' => 'ы',
|
331 |
+
'Ь' => 'ь',
|
332 |
+
'Э' => 'э',
|
333 |
+
'Ю' => 'ю',
|
334 |
+
'Я' => 'я',
|
335 |
+
'Ѡ' => 'ѡ',
|
336 |
+
'Ѣ' => 'ѣ',
|
337 |
+
'Ѥ' => 'ѥ',
|
338 |
+
'Ѧ' => 'ѧ',
|
339 |
+
'Ѩ' => 'ѩ',
|
340 |
+
'Ѫ' => 'ѫ',
|
341 |
+
'Ѭ' => 'ѭ',
|
342 |
+
'Ѯ' => 'ѯ',
|
343 |
+
'Ѱ' => 'ѱ',
|
344 |
+
'Ѳ' => 'ѳ',
|
345 |
+
'Ѵ' => 'ѵ',
|
346 |
+
'Ѷ' => 'ѷ',
|
347 |
+
'Ѹ' => 'ѹ',
|
348 |
+
'Ѻ' => 'ѻ',
|
349 |
+
'Ѽ' => 'ѽ',
|
350 |
+
'Ѿ' => 'ѿ',
|
351 |
+
'Ҁ' => 'ҁ',
|
352 |
+
'Ҋ' => 'ҋ',
|
353 |
+
'Ҍ' => 'ҍ',
|
354 |
+
'Ҏ' => 'ҏ',
|
355 |
+
'Ґ' => 'ґ',
|
356 |
+
'Ғ' => 'ғ',
|
357 |
+
'Ҕ' => 'ҕ',
|
358 |
+
'Җ' => 'җ',
|
359 |
+
'Ҙ' => 'ҙ',
|
360 |
+
'Қ' => 'қ',
|
361 |
+
'Ҝ' => 'ҝ',
|
362 |
+
'Ҟ' => 'ҟ',
|
363 |
+
'Ҡ' => 'ҡ',
|
364 |
+
'Ң' => 'ң',
|
365 |
+
'Ҥ' => 'ҥ',
|
366 |
+
'Ҧ' => 'ҧ',
|
367 |
+
'Ҩ' => 'ҩ',
|
368 |
+
'Ҫ' => 'ҫ',
|
369 |
+
'Ҭ' => 'ҭ',
|
370 |
+
'Ү' => 'ү',
|
371 |
+
'Ұ' => 'ұ',
|
372 |
+
'Ҳ' => 'ҳ',
|
373 |
+
'Ҵ' => 'ҵ',
|
374 |
+
'Ҷ' => 'ҷ',
|
375 |
+
'Ҹ' => 'ҹ',
|
376 |
+
'Һ' => 'һ',
|
377 |
+
'Ҽ' => 'ҽ',
|
378 |
+
'Ҿ' => 'ҿ',
|
379 |
+
'Ӏ' => 'ӏ',
|
380 |
+
'Ӂ' => 'ӂ',
|
381 |
+
'Ӄ' => 'ӄ',
|
382 |
+
'Ӆ' => 'ӆ',
|
383 |
+
'Ӈ' => 'ӈ',
|
384 |
+
'Ӊ' => 'ӊ',
|
385 |
+
'Ӌ' => 'ӌ',
|
386 |
+
'Ӎ' => 'ӎ',
|
387 |
+
'Ӑ' => 'ӑ',
|
388 |
+
'Ӓ' => 'ӓ',
|
389 |
+
'Ӕ' => 'ӕ',
|
390 |
+
'Ӗ' => 'ӗ',
|
391 |
+
'Ә' => 'ә',
|
392 |
+
'Ӛ' => 'ӛ',
|
393 |
+
'Ӝ' => 'ӝ',
|
394 |
+
'Ӟ' => 'ӟ',
|
395 |
+
'Ӡ' => 'ӡ',
|
396 |
+
'Ӣ' => 'ӣ',
|
397 |
+
'Ӥ' => 'ӥ',
|
398 |
+
'Ӧ' => 'ӧ',
|
399 |
+
'Ө' => 'ө',
|
400 |
+
'Ӫ' => 'ӫ',
|
401 |
+
'Ӭ' => 'ӭ',
|
402 |
+
'Ӯ' => 'ӯ',
|
403 |
+
'Ӱ' => 'ӱ',
|
404 |
+
'Ӳ' => 'ӳ',
|
405 |
+
'Ӵ' => 'ӵ',
|
406 |
+
'Ӷ' => 'ӷ',
|
407 |
+
'Ӹ' => 'ӹ',
|
408 |
+
'Ӻ' => 'ӻ',
|
409 |
+
'Ӽ' => 'ӽ',
|
410 |
+
'Ӿ' => 'ӿ',
|
411 |
+
'Ԁ' => 'ԁ',
|
412 |
+
'Ԃ' => 'ԃ',
|
413 |
+
'Ԅ' => 'ԅ',
|
414 |
+
'Ԇ' => 'ԇ',
|
415 |
+
'Ԉ' => 'ԉ',
|
416 |
+
'Ԋ' => 'ԋ',
|
417 |
+
'Ԍ' => 'ԍ',
|
418 |
+
'Ԏ' => 'ԏ',
|
419 |
+
'Ԑ' => 'ԑ',
|
420 |
+
'Ԓ' => 'ԓ',
|
421 |
+
'Ԕ' => 'ԕ',
|
422 |
+
'Ԗ' => 'ԗ',
|
423 |
+
'Ԙ' => 'ԙ',
|
424 |
+
'Ԛ' => 'ԛ',
|
425 |
+
'Ԝ' => 'ԝ',
|
426 |
+
'Ԟ' => 'ԟ',
|
427 |
+
'Ԡ' => 'ԡ',
|
428 |
+
'Ԣ' => 'ԣ',
|
429 |
+
'Ԥ' => 'ԥ',
|
430 |
+
'Ԧ' => 'ԧ',
|
431 |
+
'Ԩ' => 'ԩ',
|
432 |
+
'Ԫ' => 'ԫ',
|
433 |
+
'Ԭ' => 'ԭ',
|
434 |
+
'Ԯ' => 'ԯ',
|
435 |
+
'Ա' => 'ա',
|
436 |
+
'Բ' => 'բ',
|
437 |
+
'Գ' => 'գ',
|
438 |
+
'Դ' => 'դ',
|
439 |
+
'Ե' => 'ե',
|
440 |
+
'Զ' => 'զ',
|
441 |
+
'Է' => 'է',
|
442 |
+
'Ը' => 'ը',
|
443 |
+
'Թ' => 'թ',
|
444 |
+
'Ժ' => 'ժ',
|
445 |
+
'Ի' => 'ի',
|
446 |
+
'Լ' => 'լ',
|
447 |
+
'Խ' => 'խ',
|
448 |
+
'Ծ' => 'ծ',
|
449 |
+
'Կ' => 'կ',
|
450 |
+
'Հ' => 'հ',
|
451 |
+
'Ձ' => 'ձ',
|
452 |
+
'Ղ' => 'ղ',
|
453 |
+
'Ճ' => 'ճ',
|
454 |
+
'Մ' => 'մ',
|
455 |
+
'Յ' => 'յ',
|
456 |
+
'Ն' => 'ն',
|
457 |
+
'Շ' => 'շ',
|
458 |
+
'Ո' => 'ո',
|
459 |
+
'Չ' => 'չ',
|
460 |
+
'Պ' => 'պ',
|
461 |
+
'Ջ' => 'ջ',
|
462 |
+
'Ռ' => 'ռ',
|
463 |
+
'Ս' => 'ս',
|
464 |
+
'Վ' => 'վ',
|
465 |
+
'Տ' => 'տ',
|
466 |
+
'Ր' => 'ր',
|
467 |
+
'Ց' => 'ց',
|
468 |
+
'Ւ' => 'ւ',
|
469 |
+
'Փ' => 'փ',
|
470 |
+
'Ք' => 'ք',
|
471 |
+
'Օ' => 'օ',
|
472 |
+
'Ֆ' => 'ֆ',
|
473 |
+
'Ⴀ' => 'ⴀ',
|
474 |
+
'Ⴁ' => 'ⴁ',
|
475 |
+
'Ⴂ' => 'ⴂ',
|
476 |
+
'Ⴃ' => 'ⴃ',
|
477 |
+
'Ⴄ' => 'ⴄ',
|
478 |
+
'Ⴅ' => 'ⴅ',
|
479 |
+
'Ⴆ' => 'ⴆ',
|
480 |
+
'Ⴇ' => 'ⴇ',
|
481 |
+
'Ⴈ' => 'ⴈ',
|
482 |
+
'Ⴉ' => 'ⴉ',
|
483 |
+
'Ⴊ' => 'ⴊ',
|
484 |
+
'Ⴋ' => 'ⴋ',
|
485 |
+
'Ⴌ' => 'ⴌ',
|
486 |
+
'Ⴍ' => 'ⴍ',
|
487 |
+
'Ⴎ' => 'ⴎ',
|
488 |
+
'Ⴏ' => 'ⴏ',
|
489 |
+
'Ⴐ' => 'ⴐ',
|
490 |
+
'Ⴑ' => 'ⴑ',
|
491 |
+
'Ⴒ' => 'ⴒ',
|
492 |
+
'Ⴓ' => 'ⴓ',
|
493 |
+
'Ⴔ' => 'ⴔ',
|
494 |
+
'Ⴕ' => 'ⴕ',
|
495 |
+
'Ⴖ' => 'ⴖ',
|
496 |
+
'Ⴗ' => 'ⴗ',
|
497 |
+
'Ⴘ' => 'ⴘ',
|
498 |
+
'Ⴙ' => 'ⴙ',
|
499 |
+
'Ⴚ' => 'ⴚ',
|
500 |
+
'Ⴛ' => 'ⴛ',
|
501 |
+
'Ⴜ' => 'ⴜ',
|
502 |
+
'Ⴝ' => 'ⴝ',
|
503 |
+
'Ⴞ' => 'ⴞ',
|
504 |
+
'Ⴟ' => 'ⴟ',
|
505 |
+
'Ⴠ' => 'ⴠ',
|
506 |
+
'Ⴡ' => 'ⴡ',
|
507 |
+
'Ⴢ' => 'ⴢ',
|
508 |
+
'Ⴣ' => 'ⴣ',
|
509 |
+
'Ⴤ' =
|