TranslatePress – Translate Multilingual sites - Version 1.7.3

Version Description

  • Fixed an error when WooCommerce is active and you access a term link that does not exist
  • Added compatibility with SEO Pack version 1.2.4 or older
  • Added compatibility with Affiliate Theme filters
Download this release

Release Info

Developer madalin.ungureanu
Plugin Icon 128x128 TranslatePress – Translate Multilingual sites
Version 1.7.3
Comparing to
See all releases

Code changes from version 1.7.2 to 1.7.3

assets/css/trp-editor.css CHANGED
@@ -755,6 +755,7 @@ iframe#trp-preview-iframe {
755
  position: fixed;
756
  bottom: 0;
757
  background: #23282D;
 
758
  }
759
 
760
  #trp-editors-tab-table {
@@ -1455,7 +1456,8 @@ table.trp-translation-status-table {
1455
  }
1456
 
1457
  #trp-column-domain,
1458
- #trp-column-taxonomy {
 
1459
  width: 200px;
1460
  }
1461
 
755
  position: fixed;
756
  bottom: 0;
757
  background: #23282D;
758
+ padding: 16px 0 16px 0;
759
  }
760
 
761
  #trp-editors-tab-table {
1456
  }
1457
 
1458
  #trp-column-domain,
1459
+ #trp-column-taxonomy,
1460
+ #trp-column-post_type {
1461
  width: 200px;
1462
  }
1463
 
assets/js/trp-string-translation-editor.js CHANGED
@@ -1087,7 +1087,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axio
1087
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1088
 
1089
  "use strict";
1090
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //trp_editor_data\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n nonces: trp_editor_data.editor_nonces,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n stringTypes: trp_editor_data.string_types,\n flagsPath: trp_editor_data.flags_path,\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n ajaxUrl: trp_editor_data.ajax_url,\n currentURL: trp_editor_data.url_to_load,\n paidVersion: trp_editor_data.paid_version,\n //trp_string_translation_data\n stringTypesConfig: trp_string_translation_data.string_types_config,\n stEditorStrings: trp_string_translation_data.st_editor_strings,\n dictionary: {},\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n showChangesUnsavedMessage: false,\n loading_strings: 0,\n translationNotLoadedYet: false,\n totalItems: null\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']];\n this.currentLanguage = this.settings['default-language'];\n document.addEventListener('trp_trigger_perform_action_event', this.editString);\n },\n mounted: function mounted() {\n this.getStrings(this.$route.query);\n this.addKeyboardShortcutsListener();\n var self = this; // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n $route: function $route(to, from) {\n this.getStrings(to.query);\n },\n selectedString: function selectedString(newString, oldString) {\n if (!this.hasUnsavedChanges()) {\n if (this.selectedString === null) {\n this.selectedIndexesArray = [];\n } else {\n this.selectedIndexesArray = [this.selectedString];\n }\n }\n },\n dictionary: function dictionary() {\n if (!this.hasUnsavedChanges()) {\n this.selectedString = null;\n this.selectedIndexesArray = [];\n }\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n getStrings: function getStrings(query) {\n if (!this.$route.matched[0].props[\"default\"].translationTab) {\n return;\n }\n\n var self = this;\n var currentTab = this.$route.matched[0].props[\"default\"].currentTab;\n var translationType = this.$route.matched[0].props[\"default\"].translationType;\n var data = new FormData();\n data.append('action', 'trp_string_translation_get_strings_' + translationType);\n data.append('query', JSON.stringify(query));\n data.append('security', currentTab['nonces']['get_strings']);\n window.dispatchEvent(new Event('trp_trigger_show_loading_table_event'));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n\n if (response != null) {\n self.onScreenLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : '';\n self.currentLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : self.settings['default-language'];\n\n if (response.data.dictionary) {\n var newDictionary = response.data.dictionary;\n\n if (self.hasUnsavedChanges()) {\n // copy the unsaved string from the current dictionary to the new dictionary to allow user to discard or save changes\n var newSelectedIndexesArray = [];\n self.selectedIndexesArray.forEach(function (item) {\n self.dictionary[item].unsavedChanges = 'yes';\n newSelectedIndexesArray.push(newDictionary.push(self.dictionary[item]) - 1);\n });\n self.selectedIndexesArray = newSelectedIndexesArray;\n self.selectedString = null;\n }\n\n self.dictionary = newDictionary;\n }\n\n if (response.data.totalItems) {\n self.totalItems = response.data.totalItems;\n }\n }\n })[\"catch\"](function (error) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n self.dictionary = {};\n console.log(error);\n });\n },\n editString: function editString(data) {\n if (data.detail.action === 'edit') {\n this.selectedString = data.detail.stringIndex;\n }\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-string-translation');\n return url;\n },\n\n /*iFrameLoaded(){\n let self = this\n let iframeElement = document.querySelector('#trp-preview-iframe')\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document\n //sync iFrame URL with parent\n if ( this.currentURL != this.iframe.URL )\n this.currentURL = this.iframe.URL\n //hide iFrame loader\n this.iframeLoader( 'hide' )\n self.detectedSelectorAndId = []\n self.dictionary = []\n this.scanIframeForStrings()\n window.addEventListener( 'trp_iframe_page_updated', this.scanIframeForStrings )\n //event that is fired when the iFrame is navigated\n iframeElement.contentWindow.onbeforeunload = function() {\n self.iframeLoader( 'show' )\n self.selectedString = null\n self.selectedIndexesArray = []\n self.translationNotLoadedYet = false\n self.stringsDropdownLoading()\n }\n },*/\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n if (unsavedChanges === false) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n if (self.dictionary.hasOwnProperty(selectedIndex) && self.dictionary[selectedIndex].unsavedChanges && self.dictionary[selectedIndex].unsavedChanges === 'yes') {\n self.dictionary[selectedIndex].unsavedChanges = 'no';\n }\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n /* let currentValue = document.getElementById('trp-string-categories').value\n let newValue = +currentValue - 1\n while( newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue--;\n }\n if( newValue < 0 )\n return\n this.selectedString = newValue.toString()*/\n },\n nextString: function nextString() {\n /*let currentValue = document.getElementById('trp-string-categories').value, newValue = 0\n if( currentValue != '' )\n newValue = +currentValue + 1\n while( newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue++;\n }\n if ( newValue >= this.dictionary.length ){\n return\n }\n this.selectedString = newValue.toString()*/\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('left', width - 348);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlPzU2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EseUZBREE7QUFFQSwrRkFGQTtBQUdBLHVGQUhBO0FBSUEsdUZBSkE7QUFLQTtBQUxBLEdBREE7QUFRQSxNQVJBLGtCQVFBO0FBQ0E7QUFDQTtBQUNBLDRDQUZBO0FBR0EsbURBSEE7QUFJQSw0RUFKQTtBQUtBLDJDQUxBO0FBTUEsMkRBTkE7QUFPQSwwREFQQTtBQVFBLCtDQVJBO0FBU0EsMkNBVEE7QUFVQSx1REFWQTtBQVdBLDBEQVhBO0FBWUEsdUNBWkE7QUFhQSw2Q0FiQTtBQWNBLCtDQWRBO0FBZ0JBO0FBQ0Esd0VBakJBO0FBa0JBLG9FQWxCQTtBQW9CQSxvQkFwQkE7QUFxQkEsMEJBckJBO0FBc0JBLDhCQXRCQTtBQXVCQSwrQkF2QkE7QUF3QkEsc0JBeEJBO0FBeUJBLHNDQXpCQTtBQTBCQSx3QkExQkE7QUEyQkEsb0NBM0JBO0FBNEJBO0FBNUJBO0FBK0JBLEdBeENBO0FBeUNBLFNBekNBLHFCQXlDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLEdBL0NBO0FBZ0RBLFNBaERBLHFCQWdEQTtBQUNBO0FBRUE7QUFDQSxvQkFKQSxDQU1BOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBLE9BTkE7QUFPQSxrQkFQQTtBQVFBLG1CQVJBO0FBU0E7QUFUQSxPQVVBLElBVkEsQ0FVQSxRQVZBLEVBVUEsaUJBVkEsRUFUQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0EsS0FGQTtBQUdBLEdBekVBO0FBMEVBO0FBQ0EsVUFEQSxrQkFDQSxFQURBLEVBQ0EsSUFEQSxFQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVpBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBLEdBMUVBO0FBOEZBO0FBQ0E7QUFDQTtBQUNBO0FBSEEsR0E5RkE7QUFtR0E7QUFDQSxjQURBLHNCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsNEVBQ0EsSUFEQSxDQUNBO0FBQ0E7O0FBQ0E7QUFDQSxtTkFDQSxjQURBLEdBQ0EsRUFEQTtBQUVBLGtOQUNBLGNBREEsR0FDQSxpQ0FEQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBSEE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BN0JBLFdBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FsQ0E7QUFtQ0EsS0FwREE7QUFxREEsY0FyREEsc0JBcURBLElBckRBLEVBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0F6REE7QUEwREEsWUExREEsb0JBMERBLEdBMURBLEVBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLEtBcEVBOztBQXFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCQSxxQkFwR0EsK0JBb0dBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFDQSw4REFEQSxJQUVBLDhKQUZBLEVBRUE7QUFDQTtBQUNBO0FBQ0EsV0FOQTtBQU9BLFNBUkE7QUFTQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FKQTtBQUtBOztBQUVBO0FBQ0E7QUFDQSxLQTdIQTtBQThIQSxnQkE5SEEsd0JBOEhBLE1BOUhBLEVBOEhBO0FBQ0E7QUFFQSw0QkFDQSw4QkFEQSxLQUVBLHNCQUNBO0FBQ0EsS0FySUE7QUFzSUEsa0JBdElBLDRCQXNJQTtBQUNBOzs7Ozs7OztBQVlBLEtBbkpBO0FBb0pBLGNBcEpBLHdCQW9KQTtBQUNBOzs7Ozs7Ozs7O0FBY0EsS0FuS0E7QUFvS0EsZ0NBcEtBLDBDQW9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBSEEsTUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FkQSxFQWNBLEtBZEE7QUFnQkE7QUFDQTtBQUNBLEtBdkxBO0FBd0xBLGdCQXhMQSx3QkF3TEEsS0F4TEEsRUF3TEEsRUF4TEEsRUF3TEE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBOUxBO0FBbkdBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL2Fzc2V0cy9zcmMvanMvc3RyaW5nLXRyYW5zbGF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JcIiBjbGFzcz1cIndwLWNvcmUtdWlcIj5cblxuICAgICAgICA8ZGl2IGlkPVwidHJwLWNvbnRyb2xzXCI+XG5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtY2xvc2Utc2F2ZVwiPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidHJwLWNvbnRyb2xzLWNsb3NlXCIgOmhyZWY9XCJjbG9zZVVSTFwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MuY2xvc2VcIj48L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1zYXZlLWFuZC1sb2FkZXItc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtYWpheC1sb2FkZXJcIiB2LXNob3c9XCJsb2FkaW5nX3N0cmluZ3MgPiAwXCIgaWQ9XCJ0cnAtc3RyaW5nLXNhdmVkLWFqYXgtbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzYXZlLXRyYW5zbGF0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZEluZGV4ZXNBcnJheT1cInNlbGVjdGVkSW5kZXhlc0FycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50VVJMPVwiY3VycmVudFVSTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHRyYW5zbGF0aW9ucy1zYXZlZD1cInNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3RyaW5nVHlwZXM9XCJzdHJpbmdUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9zYXZlLXRyYW5zbGF0aW9ucz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLWNvbnRhaW5lclwiIDpjbGFzcz1cInsndHJwLXNob3ctZWRpdG9ycy1uYXZpZ2F0aW9uJyA6IGVkaXRvcnNOYXZpZ2F0aW9uLnNob3cgfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uXCIgaWQ9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1maXJzdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtbmV4dC1wcmV2aW91c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwidHJwLXByZXZpb3VzXCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwicHJldmlvdXNTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MucHJldmlvdXNfdGl0bGVfYXR0clwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4mbGFxdW87PC9zcGFuPiB7eyBlZGl0b3JTdHJpbmdzLnByZXZpb3VzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtbmV4dFwiIGNsYXNzPVwidHJwLW5leHQtcHJldmlvdXMtYnV0dG9ucyBidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljaz1cIm5leHRTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MubmV4dF90aXRsZV9hdHRyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVkaXRvclN0cmluZ3MubmV4dCB9fSA8c3Bhbj4mcmFxdW87PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInNlbGVjdGVkSW5kZXhlc0FycmF5Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhbmd1YWdlLWJveGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRMYW5ndWFnZT1cImN1cnJlbnRMYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm9uU2NyZWVuTGFuZ3VhZ2U9XCJvblNjcmVlbkxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bGFuZ3VhZ2VOYW1lcz1cImxhbmd1YWdlTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZT1cInNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkaXNjYXJkZWQtY2hhbmdlcz1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZsYWdzUGF0aD1cImZsYWdzUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm5vbmNlcz1cIm5vbmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFqYXhfdXJsPVwiYWpheFVybFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9sYW5ndWFnZS1ib3hlcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxleHRyYS1jb250ZW50IDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBhaWRWZXJzaW9uPVwicGFpZFZlcnNpb25cIj48L2V4dHJhLWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiB2LXNob3c9XCJ0cmFuc2xhdGlvbk5vdExvYWRlZFlldFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXRyYW5zbGF0aW9uLW5vdC1yZWFkeS1zZWN0aW9uXCIgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCB2LWh0bWw9XCJlZGl0b3JTdHJpbmdzLnRyYW5zbGF0aW9uX25vdF9sb2FkZWRfeWV0XCI+PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZWRpdG9ycy1uYXZpZ2F0aW9uIDplZGl0b3JzTmF2aWdhdGlvbj1cImVkaXRvcnNOYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkVGFiPVwiJ3N0cmluZ3RyYW5zbGF0aW9uJ1wiPjwvZWRpdG9ycy1uYXZpZ2F0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtcHJldmlld1wiIGNsYXNzPVwidHJwLXN0cmluZy10cmFuc2xhdGlvbi1jb250YWluZXJcIiBAY2xpY2s9XCJoYXNVbnNhdmVkQ2hhbmdlcygpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXN0cmluZy10cmFuc2xhdGlvbi1pbm5lci1jb250YWluZXJcIiA6Y2xhc3M9XCJ7J3RycC1zY3JlZW4tb3ZlcmxheScgOiBzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlIH1cIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJuYXYtdGFiLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJvdXRlci1saW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9XCIodGFiLCB0YWJfc2x1ZykgaW4gc3RyaW5nVHlwZXNDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtYmluZDprZXk9XCIndHJwLXRhYi1rZXktJyArIHRhYl9zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dG89XCIodGFiWydjYXRlZ29yeV9iYXNlZCddICkgID8gJy8nKyB0YWJfc2x1ZyArICcvJzogJy8nKyB0YWJfc2x1ZyArICcvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlkPVwiJ3RycC10YWItJyArIHRhYl9zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi10YWJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYlsndGFiX25hbWUnXX19XG4gICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+XG48IS0tICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmsgdG89XCIvaW1wb3J0LWV4cG9ydFwiIGNsYXNzPVwibmF2LXRhYlwiPi0tPlxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIHt7c3RFZGl0b3JTdHJpbmdzLmltcG9ydGV4cG9ydH19LS0+XG48IS0tICAgICAgICAgICAgICAgICAgICA8L3JvdXRlci1saW5rPi0tPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPHJvdXRlci12aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOnRvdGFsSXRlbXM9XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9yb3V0ZXItdmlldz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0ICdzZWxlY3QyL2Rpc3QvanMvc2VsZWN0Mi5taW4uanMnXG4gICAgaW1wb3J0IHV0aWxzICAgICAgICAgICAgIGZyb20gJy4vdXRpbHMnXG4gICAgaW1wb3J0IGF4aW9zICAgICAgICAgICAgIGZyb20gJ2F4aW9zJ1xuICAgIGltcG9ydCBsYW5ndWFnZUJveGVzICAgICBmcm9tICcuL2NvbXBvbmVudHMvbGFuZ3VhZ2UtYm94ZXMudnVlJ1xuICAgIGltcG9ydCBzYXZlVHJhbnNsYXRpb25zICBmcm9tICcuL2NvbXBvbmVudHMvc2F2ZS10cmFuc2xhdGlvbnMudnVlJ1xuICAgIGltcG9ydCBob3ZlckFjdGlvbnMgICAgICBmcm9tICcuL2NvbXBvbmVudHMvaG92ZXItYWN0aW9ucy52dWUnXG4gICAgaW1wb3J0IGV4dHJhQ29udGVudCAgICAgIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1jb250ZW50LnZ1ZSdcbiAgICBpbXBvcnQgZWRpdG9yc05hdmlnYXRpb24gZnJvbSAnLi9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWUnXG4gICAgaW1wb3J0IGhlICAgICAgICAgICAgICAgIGZyb20gJ2hlJ1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBjb21wb25lbnRzIDoge1xuICAgICAgICAgICAgbGFuZ3VhZ2VCb3hlcyxcbiAgICAgICAgICAgIHNhdmVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICBob3ZlckFjdGlvbnMsXG4gICAgICAgICAgICBleHRyYUNvbnRlbnQsXG4gICAgICAgICAgICBlZGl0b3JzTmF2aWdhdGlvblxuICAgICAgICB9LFxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAvL3RycF9lZGl0b3JfZGF0YVxuICAgICAgICAgICAgICAgIHNldHRpbmdzICAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX3NldHRpbmdzLFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlTmFtZXMgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEubGFuZ3VhZ2VfbmFtZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJlZFNlY29uZGFyeUxhbmd1YWdlcyA6IHRycF9lZGl0b3JfZGF0YS5vcmRlcmVkX3NlY29uZGFyeV9sYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgbm9uY2VzICAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3Jfbm9uY2VzLFxuICAgICAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZWRpdG9yc19uYXZpZ2F0aW9uLFxuICAgICAgICAgICAgICAgIGVkaXRvclN0cmluZ3MgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX2xvY2FsaXplZF9zdHJpbmdzLFxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuc3RyaW5nX3R5cGVzLFxuICAgICAgICAgICAgICAgIGZsYWdzUGF0aCAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZmxhZ3NfcGF0aCxcbiAgICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2UgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmN1cnJlbnRfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgb25TY3JlZW5MYW5ndWFnZSAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5vbl9zY3JlZW5fbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgYWpheFVybCAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5hamF4X3VybCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VVJMICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnVybF90b19sb2FkLFxuICAgICAgICAgICAgICAgIHBhaWRWZXJzaW9uICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEucGFpZF92ZXJzaW9uLFxuXG4gICAgICAgICAgICAgICAgLy90cnBfc3RyaW5nX3RyYW5zbGF0aW9uX2RhdGFcbiAgICAgICAgICAgICAgICBzdHJpbmdUeXBlc0NvbmZpZyA6IHRycF9zdHJpbmdfdHJhbnNsYXRpb25fZGF0YS5zdHJpbmdfdHlwZXNfY29uZmlnLFxuICAgICAgICAgICAgICAgIHN0RWRpdG9yU3RyaW5ncyAgIDogdHJwX3N0cmluZ190cmFuc2xhdGlvbl9kYXRhLnN0X2VkaXRvcl9zdHJpbmdzLFxuXG4gICAgICAgICAgICAgICAgZGljdGlvbmFyeSAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5ICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBkZXRlY3RlZFNlbGVjdG9yQW5kSWQgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc3RyaW5nR3JvdXBzICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nX3N0cmluZ3MgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk5vdExvYWRlZFlldCAgIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdG90YWxJdGVtcyAgICAgICAgICAgICAgICA6IG51bGxcblxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkKCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UtbmFtZScgXSA9IHRoaXMubGFuZ3VhZ2VOYW1lc1sgdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF0gXVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IHRoaXMuc2V0dGluZ3NbICdkZWZhdWx0LWxhbmd1YWdlJyBdXG5cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfdHJpZ2dlcl9wZXJmb3JtX2FjdGlvbl9ldmVudCcsIHRoaXMuZWRpdFN0cmluZyApXG4gICAgICAgIH0sXG4gICAgICAgIG1vdW50ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLmdldFN0cmluZ3MoIHRoaXMuJHJvdXRlLnF1ZXJ5IClcblxuICAgICAgICAgICAgdGhpcy5hZGRLZXlib2FyZFNob3J0Y3V0c0xpc3RlbmVyKClcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuXG4gICAgICAgICAgICAvLyByZXNpemUgc2lkZWJhciBhbmQgY29uc2VxdWVudGx5IHRoZSBpZnJhbWVcbiAgICAgICAgICAgIGxldCBwcmV2aWV3Q29udGFpbmVyID0galF1ZXJ5KCAnI3RycC1wcmV2aWV3JyApXG4gICAgICAgICAgICBsZXQgdG90YWxfd2lkdGggICAgICA9IGpRdWVyeSggd2luZG93ICkud2lkdGgoKVxuICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1jb250cm9scycgKS5yZXNpemFibGUoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbnRhaW5lci50b2dnbGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICA6ICdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGggOiAzMjcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoIDogdG90YWxfd2lkdGggLSAyMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKS5iaW5kKCBcInJlc2l6ZVwiLCB0aGlzLnJlc2l6ZUlmcmFtZSApXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBpZnJhbWUgd2hlbiByZXNpemluZyB3aW5kb3dcbiAgICAgICAgICAgIGpRdWVyeSggd2luZG93ICkucmVzaXplKCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNpemVJZnJhbWUoKVxuICAgICAgICAgICAgfSApXG4gICAgICAgIH0sXG4gICAgICAgIHdhdGNoICAgICAgOiB7XG4gICAgICAgICAgICAkcm91dGUoIHRvLCBmcm9tICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5ncyggdG8ucXVlcnkgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nIDogZnVuY3Rpb24gKCBuZXdTdHJpbmcsIG9sZFN0cmluZyApIHtcbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkU3RyaW5nID09PSBudWxsICl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gWyBdXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIHRoaXMuc2VsZWN0ZWRTdHJpbmcgXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpY3Rpb25hcnkgOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gWyBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wdXRlZCAgIDoge1xuICAgICAgICAgICAgY2xvc2VVUkwgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5VUkwoIHRoaXMuY3VycmVudFVSTCApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHMgICAgOiB7XG4gICAgICAgICAgICBnZXRTdHJpbmdzKCBxdWVyeSApIHtcbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLiRyb3V0ZS5tYXRjaGVkWyAwIF0ucHJvcHMuZGVmYXVsdC50cmFuc2xhdGlvblRhYiApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZiAgICAgICAgICAgID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VGFiICAgICAgPSB0aGlzLiRyb3V0ZS5tYXRjaGVkWyAwIF0ucHJvcHMuZGVmYXVsdC5jdXJyZW50VGFiXG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9uVHlwZSA9IHRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LnRyYW5zbGF0aW9uVHlwZVxuXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCAnYWN0aW9uJywgJ3RycF9zdHJpbmdfdHJhbnNsYXRpb25fZ2V0X3N0cmluZ3NfJyArIHRyYW5zbGF0aW9uVHlwZSApXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoICdxdWVyeScsIEpTT04uc3RyaW5naWZ5KCBxdWVyeSApIClcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCggJ3NlY3VyaXR5JywgY3VycmVudFRhYlsgJ25vbmNlcycgXVsgJ2dldF9zdHJpbmdzJyBdIClcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9zaG93X2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuXG4gICAgICAgICAgICAgICAgYXhpb3MucG9zdCggdGhpcy5hamF4VXJsLCBkYXRhIClcbiAgICAgICAgICAgICAgICAgICAgIC50aGVuKCBmdW5jdGlvbiAoIHJlc3BvbnNlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9oaWRlX2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgIT0gbnVsbCApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uU2NyZWVuTGFuZ3VhZ2UgPSAocXVlcnkubGFuZ3VhZ2UgJiYgdXRpbHMuYXJyYXlDb250YWluc0l0ZW0oIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0sIHF1ZXJ5Lmxhbmd1YWdlICkgJiYgcXVlcnkubGFuZ3VhZ2UgIT09ICd0cnAtZGVmYXVsdCcpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Lmxhbmd1YWdlIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TGFuZ3VhZ2UgID0gKHF1ZXJ5Lmxhbmd1YWdlICYmIHV0aWxzLmFycmF5Q29udGFpbnNJdGVtKCBzZWxmLnNldHRpbmdzWyAndHJhbnNsYXRpb24tbGFuZ3VhZ2VzJyBdLCBxdWVyeS5sYW5ndWFnZSApICYmIHF1ZXJ5Lmxhbmd1YWdlICE9PSAndHJwLWRlZmF1bHQnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5sYW5ndWFnZSA6IHNlbGYuc2V0dGluZ3NbICdkZWZhdWx0LWxhbmd1YWdlJyBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZS5kYXRhLmRpY3Rpb25hcnkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdEaWN0aW9uYXJ5ID0gcmVzcG9uc2UuZGF0YS5kaWN0aW9uYXJ5XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5oYXNVbnNhdmVkQ2hhbmdlcygpICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgdW5zYXZlZCBzdHJpbmcgZnJvbSB0aGUgY3VycmVudCBkaWN0aW9uYXJ5IHRvIHRoZSBuZXcgZGljdGlvbmFyeSB0byBhbGxvdyB1c2VyIHRvIGRpc2NhcmQgb3Igc2F2ZSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIGl0ZW0gXS51bnNhdmVkQ2hhbmdlcyA9ICd5ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5LnB1c2goIG5ld0RpY3Rpb25hcnkucHVzaCggc2VsZi5kaWN0aW9uYXJ5W2l0ZW1dICkgLSAxIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBuZXdTZWxlY3RlZEluZGV4ZXNBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRTdHJpbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IG5ld0RpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlLmRhdGEudG90YWxJdGVtcyApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b3RhbEl0ZW1zID0gcmVzcG9uc2UuZGF0YS50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCggZnVuY3Rpb24gKCBlcnJvciApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfaGlkZV9sb2FkaW5nX3RhYmxlX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnkgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCBlcnJvciApXG4gICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlZGl0U3RyaW5nKCBkYXRhICkge1xuICAgICAgICAgICAgICAgIGlmICggZGF0YS5kZXRhaWwuYWN0aW9uID09PSAnZWRpdCcgKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IGRhdGEuZGV0YWlsLnN0cmluZ0luZGV4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFuVVJMKCB1cmwgKSB7XG4gICAgICAgICAgICAgICAgLy9tYWtlIHJlbW92ZVVybFBhcmFtZXRlciByZWN1cnNpdmUgYW5kIG9ubHkgY2FsbCBpdCBvbmNlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXRcbiAgICAgICAgICAgICAgICAvL25lZWQgdG8gc3RyaXBwZWQgP1xuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAnbGFuZycgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXZpZXctYXMnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzLW5vbmNlJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtZWRpdC10cmFuc2xhdGlvbicgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXN0cmluZy10cmFuc2xhdGlvbicgKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qaUZyYW1lTG9hZGVkKCl7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IGlmcmFtZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdHJwLXByZXZpZXctaWZyYW1lJylcblxuICAgICAgICAgICAgICAgIHRoaXMuaWZyYW1lID0gaWZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG5cbiAgICAgICAgICAgICAgICAvL3N5bmMgaUZyYW1lIFVSTCB3aXRoIHBhcmVudFxuICAgICAgICAgICAgICAgIGlmICggdGhpcy5jdXJyZW50VVJMICE9IHRoaXMuaWZyYW1lLlVSTCApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVSTCA9IHRoaXMuaWZyYW1lLlVSTFxuXG4gICAgICAgICAgICAgICAgLy9oaWRlIGlGcmFtZSBsb2FkZXJcbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZUxvYWRlciggJ2hpZGUnIClcblxuICAgICAgICAgICAgICAgIHNlbGYuZGV0ZWN0ZWRTZWxlY3RvckFuZElkID0gW11cbiAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnkgICAgICAgICAgICA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy5zY2FuSWZyYW1lRm9yU3RyaW5ncygpXG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF9pZnJhbWVfcGFnZV91cGRhdGVkJywgdGhpcy5zY2FuSWZyYW1lRm9yU3RyaW5ncyApXG5cbiAgICAgICAgICAgICAgICAvL2V2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiB0aGUgaUZyYW1lIGlzIG5hdmlnYXRlZFxuICAgICAgICAgICAgICAgIGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlmcmFtZUxvYWRlciggJ3Nob3cnIClcblxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkU3RyaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmFuc2xhdGlvbk5vdExvYWRlZFlldCA9IGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmdzRHJvcGRvd25Mb2FkaW5nKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sKi9cbiAgICAgICAgICAgIGhhc1Vuc2F2ZWRDaGFuZ2VzKCkge1xuICAgICAgICAgICAgICAgIGxldCB1bnNhdmVkQ2hhbmdlcyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgICAgICAgICAgID0gdGhpc1xuICAgICAgICAgICAgICAgIGlmICggdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheS5sZW5ndGggPiAwICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24gKCBzZWxlY3RlZEluZGV4ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXR0aW5nc1sgJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcycgXS5mb3JFYWNoKCBmdW5jdGlvbiAoIGxhbmd1YWdlQ29kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udHJhbnNsYXRpb25zQXJyYXlbIGxhbmd1YWdlQ29kZSBdLnRyYW5zbGF0ZWQgIT09IHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXS5lZGl0ZWRUcmFuc2xhdGlvbikgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICggdW5zYXZlZENoYW5nZXMgPT09IGZhbHNlICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24gKCBzZWxlY3RlZEluZGV4ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmRpY3Rpb25hcnkuaGFzT3duUHJvcGVydHkoc2VsZWN0ZWRJbmRleCkgJiYgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgJiYgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgPT09ICd5ZXMnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS51bnNhdmVkQ2hhbmdlcyA9ICdubydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgPSB1bnNhdmVkQ2hhbmdlc1xuICAgICAgICAgICAgICAgIHJldHVybiB1bnNhdmVkQ2hhbmdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlmcmFtZUxvYWRlciggc3RhdHVzICkge1xuICAgICAgICAgICAgICAgIGxldCBsb2FkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RycC1wcmV2aWV3LWxvYWRlcicgKVxuXG4gICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPT0gJ3Nob3cnIClcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcbiAgICAgICAgICAgICAgICBlbHNlIGlmICggc3RhdHVzID09ICdoaWRlJyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgLyogbGV0IGN1cnJlbnRWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cnAtc3RyaW5nLWNhdGVnb3JpZXMnKS52YWx1ZVxuXG4gICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgLSAxXG5cbiAgICAgICAgICAgICAgICAgd2hpbGUoIG5ld1ZhbHVlID49IDAgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RycC1zdHJpbmctY2F0ZWdvcmllcyBvcHRpb25bdmFsdWU9XCInICsgbmV3VmFsdWUgKyAnXCJdJykubGVuZ3RoID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS0tO1xuICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgaWYoIG5ld1ZhbHVlIDwgMCApXG4gICAgICAgICAgICAgICAgICAgICByZXR1cm5cblxuICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFN0cmluZygpIHtcbiAgICAgICAgICAgICAgICAvKmxldCBjdXJyZW50VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJwLXN0cmluZy1jYXRlZ29yaWVzJykudmFsdWUsIG5ld1ZhbHVlID0gMFxuXG4gICAgICAgICAgICAgICAgaWYoIGN1cnJlbnRWYWx1ZSAhPSAnJyApXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gK2N1cnJlbnRWYWx1ZSArIDFcblxuICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA8IHRoaXMuZGljdGlvbmFyeS5sZW5ndGggJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RycC1zdHJpbmctY2F0ZWdvcmllcyBvcHRpb25bdmFsdWU9XCInICsgbmV3VmFsdWUgKyAnXCJdJykubGVuZ3RoID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBuZXdWYWx1ZSA+PSB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoICl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBuZXdWYWx1ZS50b1N0cmluZygpKi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRLZXlib2FyZFNob3J0Y3V0c0xpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwia2V5ZG93blwiLCBmdW5jdGlvbiAoIGUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggKHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0ubWF0Y2goIFwiTWFjXCIgKSA/IGUubWV0YUtleSA6IGUuY3RybEtleSkgJiYgZS5hbHRLZXkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyByaWdodCBhcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmtleUNvZGUgPT09IDM5ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1RSTCArIEFMVCArIGxlZnQgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGUua2V5Q29kZSA9PT0gMzcgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9wcmV2aW91c19zdHJpbmdfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZhbHNlIClcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndHJwX3RyaWdnZXJfbmV4dF9zdHJpbmdfZXZlbnQnLCB0aGlzLm5leHRTdHJpbmcgKVxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndHJwX3RyaWdnZXJfcHJldmlvdXNfc3RyaW5nX2V2ZW50JywgdGhpcy5wcmV2aW91c1N0cmluZyApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzaXplSWZyYW1lKCBldmVudCwgdWkgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsX3dpZHRoID0galF1ZXJ5KCB3aW5kb3cgKS53aWR0aCgpXG4gICAgICAgICAgICAgICAgbGV0IHdpZHRoICAgICAgID0galF1ZXJ5KCAnI3RycC1jb250cm9scycgKS53aWR0aCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgcHJldmlld0NvbnRhaW5lciA9IGpRdWVyeSggJyN0cnAtcHJldmlldycgKVxuICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIuY3NzKCAnbGVmdCcsICh3aWR0aCAtIDM0OCkgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/string-translation.vue?vue&type=script&lang=js&\n");
1091
 
1092
  /***/ }),
1093
 
1087
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1088
 
1089
  "use strict";
1090
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //trp_editor_data\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n nonces: trp_editor_data.editor_nonces,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n stringTypes: trp_editor_data.string_types,\n flagsPath: trp_editor_data.flags_path,\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n ajaxUrl: trp_editor_data.ajax_url,\n currentURL: trp_editor_data.url_to_load,\n paidVersion: trp_editor_data.paid_version,\n //trp_string_translation_data\n stringTypesConfig: trp_string_translation_data.string_types_config,\n stEditorStrings: trp_string_translation_data.st_editor_strings,\n dictionary: {},\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n showChangesUnsavedMessage: false,\n loading_strings: 0,\n translationNotLoadedYet: false,\n totalItems: null\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']];\n this.currentLanguage = this.settings['default-language'];\n document.addEventListener('trp_trigger_perform_action_event', this.editString);\n },\n mounted: function mounted() {\n this.getStrings(this.$route.query);\n this.addKeyboardShortcutsListener();\n var self = this; // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n $route: function $route(to, from) {\n this.getStrings(to.query);\n },\n selectedString: function selectedString(newString, oldString) {\n if (!this.hasUnsavedChanges()) {\n if (this.selectedString === null) {\n this.selectedIndexesArray = [];\n } else {\n this.selectedIndexesArray = [this.selectedString];\n }\n }\n },\n dictionary: function dictionary() {\n if (!this.hasUnsavedChanges()) {\n this.selectedString = null;\n this.selectedIndexesArray = [];\n }\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n getStrings: function getStrings(query) {\n if (!this.$route.matched[0].props[\"default\"].translationTab) {\n return;\n }\n\n var self = this;\n var currentTab = this.$route.matched[0].props[\"default\"].currentTab;\n var translationType = this.$route.matched[0].props[\"default\"].translationType;\n var data = new FormData();\n data.append('action', 'trp_string_translation_get_strings_' + translationType);\n data.append('query', JSON.stringify(query));\n data.append('security', currentTab['nonces']['get_strings']);\n window.dispatchEvent(new Event('trp_trigger_show_loading_table_event'));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n\n if (response != null) {\n self.onScreenLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : '';\n self.currentLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : self.settings['default-language'];\n\n if (response.data.dictionary) {\n var newDictionary = response.data.dictionary;\n\n if (self.hasUnsavedChanges()) {\n // copy the unsaved string from the current dictionary to the new dictionary to allow user to discard or save changes\n var newSelectedIndexesArray = [];\n self.selectedIndexesArray.forEach(function (item) {\n self.dictionary[item].unsavedChanges = 'yes';\n newSelectedIndexesArray.push(newDictionary.push(self.dictionary[item]) - 1);\n });\n self.selectedIndexesArray = newSelectedIndexesArray;\n self.selectedString = null;\n }\n\n self.dictionary = newDictionary;\n }\n\n if (response.data.totalItems) {\n self.totalItems = response.data.totalItems;\n }\n }\n })[\"catch\"](function (error) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n self.dictionary = {};\n console.log(error);\n var reload = confirm(self.stEditorStrings.request_error);\n\n if (reload === false) {\n return;\n } else {\n window.location.reload();\n }\n });\n },\n editString: function editString(data) {\n if (data.detail.action === 'edit') {\n this.selectedString = data.detail.stringIndex;\n }\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-string-translation');\n return url;\n },\n\n /*iFrameLoaded(){\n let self = this\n let iframeElement = document.querySelector('#trp-preview-iframe')\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document\n //sync iFrame URL with parent\n if ( this.currentURL != this.iframe.URL )\n this.currentURL = this.iframe.URL\n //hide iFrame loader\n this.iframeLoader( 'hide' )\n self.detectedSelectorAndId = []\n self.dictionary = []\n this.scanIframeForStrings()\n window.addEventListener( 'trp_iframe_page_updated', this.scanIframeForStrings )\n //event that is fired when the iFrame is navigated\n iframeElement.contentWindow.onbeforeunload = function() {\n self.iframeLoader( 'show' )\n self.selectedString = null\n self.selectedIndexesArray = []\n self.translationNotLoadedYet = false\n self.stringsDropdownLoading()\n }\n },*/\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n if (unsavedChanges === false) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n if (self.dictionary.hasOwnProperty(selectedIndex) && self.dictionary[selectedIndex].unsavedChanges && self.dictionary[selectedIndex].unsavedChanges === 'yes') {\n self.dictionary[selectedIndex].unsavedChanges = 'no';\n }\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n /* let currentValue = document.getElementById('trp-string-categories').value\n let newValue = +currentValue - 1\n while( newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue--;\n }\n if( newValue < 0 )\n return\n this.selectedString = newValue.toString()*/\n },\n nextString: function nextString() {\n /*let currentValue = document.getElementById('trp-string-categories').value, newValue = 0\n if( currentValue != '' )\n newValue = +currentValue + 1\n while( newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue++;\n }\n if ( newValue >= this.dictionary.length ){\n return\n }\n this.selectedString = newValue.toString()*/\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('left', width - 348);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlPzU2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EseUZBREE7QUFFQSwrRkFGQTtBQUdBLHVGQUhBO0FBSUEsdUZBSkE7QUFLQTtBQUxBLEdBREE7QUFRQSxNQVJBLGtCQVFBO0FBQ0E7QUFDQTtBQUNBLDRDQUZBO0FBR0EsbURBSEE7QUFJQSw0RUFKQTtBQUtBLDJDQUxBO0FBTUEsMkRBTkE7QUFPQSwwREFQQTtBQVFBLCtDQVJBO0FBU0EsMkNBVEE7QUFVQSx1REFWQTtBQVdBLDBEQVhBO0FBWUEsdUNBWkE7QUFhQSw2Q0FiQTtBQWNBLCtDQWRBO0FBZ0JBO0FBQ0Esd0VBakJBO0FBa0JBLG9FQWxCQTtBQW9CQSxvQkFwQkE7QUFxQkEsMEJBckJBO0FBc0JBLDhCQXRCQTtBQXVCQSwrQkF2QkE7QUF3QkEsc0JBeEJBO0FBeUJBLHNDQXpCQTtBQTBCQSx3QkExQkE7QUEyQkEsb0NBM0JBO0FBNEJBO0FBNUJBO0FBK0JBLEdBeENBO0FBeUNBLFNBekNBLHFCQXlDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLEdBL0NBO0FBZ0RBLFNBaERBLHFCQWdEQTtBQUNBO0FBRUE7QUFDQSxvQkFKQSxDQU1BOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBLE9BTkE7QUFPQSxrQkFQQTtBQVFBLG1CQVJBO0FBU0E7QUFUQSxPQVVBLElBVkEsQ0FVQSxRQVZBLEVBVUEsaUJBVkEsRUFUQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0EsS0FGQTtBQUdBLEdBekVBO0FBMEVBO0FBQ0EsVUFEQSxrQkFDQSxFQURBLEVBQ0EsSUFEQSxFQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVpBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBLEdBMUVBO0FBOEZBO0FBQ0E7QUFDQTtBQUNBO0FBSEEsR0E5RkE7QUFtR0E7QUFDQSxjQURBLHNCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsNEVBQ0EsSUFEQSxDQUNBO0FBQ0E7O0FBQ0E7QUFDQSxtTkFDQSxjQURBLEdBQ0EsRUFEQTtBQUVBLGtOQUNBLGNBREEsR0FDQSxpQ0FEQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBSEE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BN0JBLFdBOEJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBLFNBRkEsTUFFQTtBQUNBO0FBQ0E7QUFFQSxPQTFDQTtBQTJDQSxLQTVEQTtBQTZEQSxjQTdEQSxzQkE2REEsSUE3REEsRUE2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQWpFQTtBQWtFQSxZQWxFQSxvQkFrRUEsR0FsRUEsRUFrRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsS0E1RUE7O0FBNkVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLHFCQTVHQSwrQkE0R0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUNBLDhEQURBLElBRUEsOEpBRkEsRUFFQTtBQUNBO0FBQ0E7QUFDQSxXQU5BO0FBT0EsU0FSQTtBQVNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUpBO0FBS0E7O0FBRUE7QUFDQTtBQUNBLEtBcklBO0FBc0lBLGdCQXRJQSx3QkFzSUEsTUF0SUEsRUFzSUE7QUFDQTtBQUVBLDRCQUNBLDhCQURBLEtBRUEsc0JBQ0E7QUFDQSxLQTdJQTtBQThJQSxrQkE5SUEsNEJBOElBO0FBQ0E7Ozs7Ozs7O0FBWUEsS0EzSkE7QUE0SkEsY0E1SkEsd0JBNEpBO0FBQ0E7Ozs7Ozs7Ozs7QUFjQSxLQTNLQTtBQTRLQSxnQ0E1S0EsMENBNEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FIQSxNQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWRBLEVBY0EsS0FkQTtBQWdCQTtBQUNBO0FBQ0EsS0EvTEE7QUFnTUEsZ0JBaE1BLHdCQWdNQSxLQWhNQSxFQWdNQSxFQWhNQSxFQWdNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF0TUE7QUFuR0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidHJwLWVkaXRvclwiIGNsYXNzPVwid3AtY29yZS11aVwiPlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtY29udHJvbHNcIj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cInRycC1jbG9zZS1zYXZlXCI+XG4gICAgICAgICAgICAgICAgPGEgaWQ9XCJ0cnAtY29udHJvbHMtY2xvc2VcIiA6aHJlZj1cImNsb3NlVVJMXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5jbG9zZVwiPjwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXNhdmUtYW5kLWxvYWRlci1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRycC1hamF4LWxvYWRlclwiIHYtc2hvdz1cImxvYWRpbmdfc3RyaW5ncyA+IDBcIiBpZD1cInRycC1zdHJpbmctc2F2ZWQtYWpheC1sb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNhdmUtdHJhbnNsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpub25jZXM9XCJub25jZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphamF4X3VybD1cImFqYXhVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50TGFuZ3VhZ2U9XCJjdXJyZW50TGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpvblNjcmVlbkxhbmd1YWdlPVwib25TY3JlZW5MYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRVUkw9XCJjdXJyZW50VVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHJhbnNsYXRpb25zLXNhdmVkPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZWRpdG9yU3RyaW5ncz1cImVkaXRvclN0cmluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHJpbmdUeXBlcz1cInN0cmluZ1R5cGVzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3NhdmUtdHJhbnNsYXRpb25zPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtY29udGFpbmVyXCIgOmNsYXNzPVwieyd0cnAtc2hvdy1lZGl0b3JzLW5hdmlnYXRpb24nIDogZWRpdG9yc05hdmlnYXRpb24uc2hvdyB9XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiBpZD1cInRycC1jb250cm9scy1zZWN0aW9uLWZpcnN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1uZXh0LXByZXZpb3VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtcHJldmlvdXNcIiBjbGFzcz1cInRycC1uZXh0LXByZXZpb3VzLWJ1dHRvbnMgYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJwcmV2aW91c1N0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5wcmV2aW91c190aXRsZV9hdHRyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiZsYXF1bzs8L3NwYW4+IHt7IGVkaXRvclN0cmluZ3MucHJldmlvdXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInRycC1uZXh0XCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwibmV4dFN0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5uZXh0X3RpdGxlX2F0dHJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWRpdG9yU3RyaW5ncy5uZXh0IH19IDxzcGFuPiZyYXF1bzs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uXCIgdi1zaG93PVwic2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFuZ3VhZ2UtYm94ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRJbmRleGVzQXJyYXk9XCJzZWxlY3RlZEluZGV4ZXNBcnJheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpY3Rpb25hcnk9XCJkaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRpc2NhcmRlZC1jaGFuZ2VzPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZmxhZ3NQYXRoPVwiZmxhZ3NQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2xhbmd1YWdlLWJveGVzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGV4dHJhLWNvbnRlbnQgOmxhbmd1YWdlTmFtZXM9XCJsYW5ndWFnZU5hbWVzXCIgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGFpZFZlcnNpb249XCJwYWlkVmVyc2lvblwiPjwvZXh0cmEtY29udGVudD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInRyYW5zbGF0aW9uTm90TG9hZGVkWWV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtdHJhbnNsYXRpb24tbm90LXJlYWR5LXNlY3Rpb25cIiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHYtaHRtbD1cImVkaXRvclN0cmluZ3MudHJhbnNsYXRpb25fbm90X2xvYWRlZF95ZXRcIj48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxlZGl0b3JzLW5hdmlnYXRpb24gOmVkaXRvcnNOYXZpZ2F0aW9uPVwiZWRpdG9yc05hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCInc3RyaW5ndHJhbnNsYXRpb24nXCI+PC9lZGl0b3JzLW5hdmlnYXRpb24+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cInRycC1wcmV2aWV3XCIgY2xhc3M9XCJ0cnAtc3RyaW5nLXRyYW5zbGF0aW9uLWNvbnRhaW5lclwiIEBjbGljaz1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtc3RyaW5nLXRyYW5zbGF0aW9uLWlubmVyLWNvbnRhaW5lclwiIDpjbGFzcz1cInsndHJwLXNjcmVlbi1vdmVybGF5JyA6IHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgfVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm5hdi10YWItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj1cIih0YWIsIHRhYl9zbHVnKSBpbiBzdHJpbmdUeXBlc0NvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1iaW5kOmtleT1cIid0cnAtdGFiLWtleS0nICsgdGFiX3NsdWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0bz1cIih0YWJbJ2NhdGVnb3J5X2Jhc2VkJ10gKSAgPyAnLycrIHRhYl9zbHVnICsgJy8nOiAnLycrIHRhYl9zbHVnICsgJy8nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aWQ9XCIndHJwLXRhYi0nICsgdGFiX3NsdWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LXRhYlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFiWyd0YWJfbmFtZSddfX1cbiAgICAgICAgICAgICAgICAgICAgPC9yb3V0ZXItbGluaz5cbjwhLS0gICAgICAgICAgICAgICAgICAgIDxyb3V0ZXItbGluayB0bz1cIi9pbXBvcnQtZXhwb3J0XCIgY2xhc3M9XCJuYXYtdGFiXCI+LS0+XG48IS0tICAgICAgICAgICAgICAgICAgICAgICAge3tzdEVkaXRvclN0cmluZ3MuaW1wb3J0ZXhwb3J0fX0tLT5cbjwhLS0gICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+LS0+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cm91dGVyLXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG90YWxJdGVtcz1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3JvdXRlci12aWV3PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgJ3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLm1pbi5qcydcbiAgICBpbXBvcnQgdXRpbHMgICAgICAgICAgICAgZnJvbSAnLi91dGlscydcbiAgICBpbXBvcnQgYXhpb3MgICAgICAgICAgICAgZnJvbSAnYXhpb3MnXG4gICAgaW1wb3J0IGxhbmd1YWdlQm94ZXMgICAgIGZyb20gJy4vY29tcG9uZW50cy9sYW5ndWFnZS1ib3hlcy52dWUnXG4gICAgaW1wb3J0IHNhdmVUcmFuc2xhdGlvbnMgIGZyb20gJy4vY29tcG9uZW50cy9zYXZlLXRyYW5zbGF0aW9ucy52dWUnXG4gICAgaW1wb3J0IGhvdmVyQWN0aW9ucyAgICAgIGZyb20gJy4vY29tcG9uZW50cy9ob3Zlci1hY3Rpb25zLnZ1ZSdcbiAgICBpbXBvcnQgZXh0cmFDb250ZW50ICAgICAgZnJvbSAnLi9jb21wb25lbnRzL2V4dHJhLWNvbnRlbnQudnVlJ1xuICAgIGltcG9ydCBlZGl0b3JzTmF2aWdhdGlvbiBmcm9tICcuL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZSdcbiAgICBpbXBvcnQgaGUgICAgICAgICAgICAgICAgZnJvbSAnaGUnXG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIGNvbXBvbmVudHMgOiB7XG4gICAgICAgICAgICBsYW5ndWFnZUJveGVzLFxuICAgICAgICAgICAgc2F2ZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIGhvdmVyQWN0aW9ucyxcbiAgICAgICAgICAgIGV4dHJhQ29udGVudCxcbiAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGEoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vdHJwX2VkaXRvcl9kYXRhXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VOYW1lcyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5sYW5ndWFnZV9uYW1lcyxcbiAgICAgICAgICAgICAgICBvcmRlcmVkU2Vjb25kYXJ5TGFuZ3VhZ2VzIDogdHJwX2VkaXRvcl9kYXRhLm9yZGVyZWRfc2Vjb25kYXJ5X2xhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBub25jZXMgICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmVkaXRvcl9ub25jZXMsXG4gICAgICAgICAgICAgICAgZWRpdG9yc05hdmlnYXRpb24gICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3JzX25hdmlnYXRpb24sXG4gICAgICAgICAgICAgICAgZWRpdG9yU3RyaW5ncyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfbG9jYWxpemVkX3N0cmluZ3MsXG4gICAgICAgICAgICAgICAgc3RyaW5nVHlwZXMgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5zdHJpbmdfdHlwZXMsXG4gICAgICAgICAgICAgICAgZmxhZ3NQYXRoICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5mbGFnc19wYXRoLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZSAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuY3VycmVudF9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBvblNjcmVlbkxhbmd1YWdlICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLm9uX3NjcmVlbl9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBhamF4VXJsICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmFqYXhfdXJsLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRVUkwgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudXJsX3RvX2xvYWQsXG4gICAgICAgICAgICAgICAgcGFpZFZlcnNpb24gICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5wYWlkX3ZlcnNpb24sXG5cbiAgICAgICAgICAgICAgICAvL3RycF9zdHJpbmdfdHJhbnNsYXRpb25fZGF0YVxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzQ29uZmlnIDogdHJwX3N0cmluZ190cmFuc2xhdGlvbl9kYXRhLnN0cmluZ190eXBlc19jb25maWcsXG4gICAgICAgICAgICAgICAgc3RFZGl0b3JTdHJpbmdzICAgOiB0cnBfc3RyaW5nX3RyYW5zbGF0aW9uX2RhdGEuc3RfZWRpdG9yX3N0cmluZ3MsXG5cbiAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmcgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleGVzQXJyYXkgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIGRldGVjdGVkU2VsZWN0b3JBbmRJZCAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdHcm91cHMgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvYWRpbmdfc3RyaW5ncyAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uTm90TG9hZGVkWWV0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zICAgICAgICAgICAgICAgIDogbnVsbFxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzWyAnZGVmYXVsdC1sYW5ndWFnZS1uYW1lJyBdID0gdGhpcy5sYW5ndWFnZU5hbWVzWyB0aGlzLnNldHRpbmdzWyAnZGVmYXVsdC1sYW5ndWFnZScgXSBdXG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF1cblxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3BlcmZvcm1fYWN0aW9uX2V2ZW50JywgdGhpcy5lZGl0U3RyaW5nIClcbiAgICAgICAgfSxcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5ncyggdGhpcy4kcm91dGUucXVlcnkgKVxuXG4gICAgICAgICAgICB0aGlzLmFkZEtleWJvYXJkU2hvcnRjdXRzTGlzdGVuZXIoKVxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBzaWRlYmFyIGFuZCBjb25zZXF1ZW50bHkgdGhlIGlmcmFtZVxuICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnIClcbiAgICAgICAgICAgIGxldCB0b3RhbF93aWR0aCAgICAgID0galF1ZXJ5KCB3aW5kb3cgKS53aWR0aCgpXG4gICAgICAgICAgICBqUXVlcnkoICcjdHJwLWNvbnRyb2xzJyApLnJlc2l6YWJsZSgge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIudG9nZ2xlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgIDogJ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCA6IDMyNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGggOiB0b3RhbF93aWR0aCAtIDIwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApLmJpbmQoIFwicmVzaXplXCIsIHRoaXMucmVzaXplSWZyYW1lIClcblxuICAgICAgICAgICAgLy8gcmVzaXplIGlmcmFtZSB3aGVuIHJlc2l6aW5nIHdpbmRvd1xuICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS5yZXNpemUoIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlc2l6ZUlmcmFtZSgpXG4gICAgICAgICAgICB9IClcbiAgICAgICAgfSxcbiAgICAgICAgd2F0Y2ggICAgICA6IHtcbiAgICAgICAgICAgICRyb3V0ZSggdG8sIGZyb20gKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdzKCB0by5xdWVyeSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmcgOiBmdW5jdGlvbiAoIG5ld1N0cmluZywgb2xkU3RyaW5nICkge1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPT09IG51bGwgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIF1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFsgdGhpcy5zZWxlY3RlZFN0cmluZyBdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGljdGlvbmFyeSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKCAhdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcygpICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXB1dGVkICAgOiB7XG4gICAgICAgICAgICBjbG9zZVVSTCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhblVSTCggdGhpcy5jdXJyZW50VVJMIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kcyAgICA6IHtcbiAgICAgICAgICAgIGdldFN0cmluZ3MoIHF1ZXJ5ICkge1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LnRyYW5zbGF0aW9uVGFiICl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICAgPSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRUYWIgICAgICA9IHRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LmN1cnJlbnRUYWJcbiAgICAgICAgICAgICAgICBsZXQgdHJhbnNsYXRpb25UeXBlID0gdGhpcy4kcm91dGUubWF0Y2hlZFsgMCBdLnByb3BzLmRlZmF1bHQudHJhbnNsYXRpb25UeXBlXG5cbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoICdhY3Rpb24nLCAndHJwX3N0cmluZ190cmFuc2xhdGlvbl9nZXRfc3RyaW5nc18nICsgdHJhbnNsYXRpb25UeXBlIClcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCggJ3F1ZXJ5JywgSlNPTi5zdHJpbmdpZnkoIHF1ZXJ5ICkgKVxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCAnc2VjdXJpdHknLCBjdXJyZW50VGFiWyAnbm9uY2VzJyBdWyAnZ2V0X3N0cmluZ3MnIF0gKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX3Nob3dfbG9hZGluZ190YWJsZV9ldmVudCcgKSApXG5cbiAgICAgICAgICAgICAgICBheGlvcy5wb3N0KCB0aGlzLmFqYXhVcmwsIGRhdGEgKVxuICAgICAgICAgICAgICAgICAgICAgLnRoZW4oIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX2hpZGVfbG9hZGluZ190YWJsZV9ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZSAhPSBudWxsICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25TY3JlZW5MYW5ndWFnZSA9IChxdWVyeS5sYW5ndWFnZSAmJiB1dGlscy5hcnJheUNvbnRhaW5zSXRlbSggc2VsZi5zZXR0aW5nc1sgJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcycgXSwgcXVlcnkubGFuZ3VhZ2UgKSAmJiBxdWVyeS5sYW5ndWFnZSAhPT0gJ3RycC1kZWZhdWx0JykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkubGFuZ3VhZ2UgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRMYW5ndWFnZSAgPSAocXVlcnkubGFuZ3VhZ2UgJiYgdXRpbHMuYXJyYXlDb250YWluc0l0ZW0oIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0sIHF1ZXJ5Lmxhbmd1YWdlICkgJiYgcXVlcnkubGFuZ3VhZ2UgIT09ICd0cnAtZGVmYXVsdCcpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Lmxhbmd1YWdlIDogc2VsZi5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlLmRhdGEuZGljdGlvbmFyeSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0RpY3Rpb25hcnkgPSByZXNwb25zZS5kYXRhLmRpY3Rpb25hcnlcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSB1bnNhdmVkIHN0cmluZyBmcm9tIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkgdG8gdGhlIG5ldyBkaWN0aW9uYXJ5IHRvIGFsbG93IHVzZXIgdG8gZGlzY2FyZCBvciBzYXZlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVsgaXRlbSBdLnVuc2F2ZWRDaGFuZ2VzID0gJ3llcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRJbmRleGVzQXJyYXkucHVzaCggbmV3RGljdGlvbmFyeS5wdXNoKCBzZWxmLmRpY3Rpb25hcnlbaXRlbV0gKSAtIDEgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ID0gbmV3RGljdGlvbmFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UuZGF0YS50b3RhbEl0ZW1zICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsSXRlbXMgPSByZXNwb25zZS5kYXRhLnRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCBmdW5jdGlvbiAoIGVycm9yICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9oaWRlX2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyggZXJyb3IgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWxvYWQgPSBjb25maXJtKCBzZWxmLnN0RWRpdG9yU3RyaW5ncy5yZXF1ZXN0X2Vycm9yIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVsb2FkID09PSBmYWxzZSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWRpdFN0cmluZyggZGF0YSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZGV0YWlsLmFjdGlvbiA9PT0gJ2VkaXQnICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBkYXRhLmRldGFpbC5zdHJpbmdJbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhblVSTCggdXJsICkge1xuICAgICAgICAgICAgICAgIC8vbWFrZSByZW1vdmVVcmxQYXJhbWV0ZXIgcmVjdXJzaXZlIGFuZCBvbmx5IGNhbGwgaXQgb25jZSB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0XG4gICAgICAgICAgICAgICAgLy9uZWVkIHRvIHN0cmlwcGVkID9cbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ2xhbmcnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcy1ub25jZScgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLWVkaXQtdHJhbnNsYXRpb24nIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC1zdHJpbmctdHJhbnNsYXRpb24nIClcblxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKmlGcmFtZUxvYWRlZCgpe1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBpZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RycC1wcmV2aWV3LWlmcmFtZScpXG5cbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZSA9IGlmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50IHx8IGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICAgICAgLy9zeW5jIGlGcmFtZSBVUkwgd2l0aCBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY3VycmVudFVSTCAhPSB0aGlzLmlmcmFtZS5VUkwgKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLmlmcmFtZS5VUkxcblxuICAgICAgICAgICAgICAgIC8vaGlkZSBpRnJhbWUgbG9hZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5pZnJhbWVMb2FkZXIoICdoaWRlJyApXG5cbiAgICAgICAgICAgICAgICBzZWxmLmRldGVjdGVkU2VsZWN0b3JBbmRJZCA9IFtdXG4gICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ICAgICAgICAgICAgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MoKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfaWZyYW1lX3BhZ2VfdXBkYXRlZCcsIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MgKVxuXG4gICAgICAgICAgICAgICAgLy9ldmVudCB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIGlGcmFtZSBpcyBuYXZpZ2F0ZWRcbiAgICAgICAgICAgICAgICBpZnJhbWVFbGVtZW50LmNvbnRlbnRXaW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pZnJhbWVMb2FkZXIoICdzaG93JyApXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJhbnNsYXRpb25Ob3RMb2FkZWRZZXQgPSBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nc0Ryb3Bkb3duTG9hZGluZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCovXG4gICAgICAgICAgICBoYXNVbnNhdmVkQ2hhbmdlcygpIHtcbiAgICAgICAgICAgICAgICBsZXQgdW5zYXZlZENoYW5nZXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICA9IHRoaXNcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMCApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0ZWRJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0uZm9yRWFjaCggZnVuY3Rpb24gKCBsYW5ndWFnZUNvZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXS50cmFuc2xhdGVkICE9PSBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0uZWRpdGVkVHJhbnNsYXRpb24pICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIHVuc2F2ZWRDaGFuZ2VzID09PSBmYWxzZSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0ZWRJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5kaWN0aW9uYXJ5Lmhhc093blByb3BlcnR5KHNlbGVjdGVkSW5kZXgpICYmIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzICYmIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzID09PSAneWVzJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgPSAnbm8nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlID0gdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZnJhbWVMb2FkZXIoIHN0YXR1cyApIHtcbiAgICAgICAgICAgICAgICBsZXQgbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0cnAtcHJldmlldy1sb2FkZXInIClcblxuICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09ICdzaG93JyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHN0YXR1cyA9PSAnaGlkZScgKVxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIC8qIGxldCBjdXJyZW50VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJwLXN0cmluZy1jYXRlZ29yaWVzJykudmFsdWVcblxuICAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSArY3VycmVudFZhbHVlIC0gMVxuXG4gICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA+PSAwICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUtLTtcbiAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgIGlmKCBuZXdWYWx1ZSA8IDAgKVxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkqL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgLypsZXQgY3VycmVudFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RycC1zdHJpbmctY2F0ZWdvcmllcycpLnZhbHVlLCBuZXdWYWx1ZSA9IDBcblxuICAgICAgICAgICAgICAgIGlmKCBjdXJyZW50VmFsdWUgIT0gJycgKVxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgKyAxXG5cbiAgICAgICAgICAgICAgICB3aGlsZSggbmV3VmFsdWUgPCB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICggbmV3VmFsdWUgPj0gdGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aCApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHNMaXN0ZW5lcigpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcImtleWRvd25cIiwgZnVuY3Rpb24gKCBlICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoICh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKCBcIk1hY1wiICkgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpICYmIGUuYWx0S2V5ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDVFJMICsgQUxUICsgcmlnaHQgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZS5rZXlDb2RlID09PSAzOSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9uZXh0X3N0cmluZ19ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyBsZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmtleUNvZGUgPT09IDM3ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfcHJldmlvdXNfc3RyaW5nX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmYWxzZSApXG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JywgdGhpcy5uZXh0U3RyaW5nIClcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3ByZXZpb3VzX3N0cmluZ19ldmVudCcsIHRoaXMucHJldmlvdXNTdHJpbmcgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2l6ZUlmcmFtZSggZXZlbnQsIHVpICkge1xuICAgICAgICAgICAgICAgIGxldCB0b3RhbF93aWR0aCA9IGpRdWVyeSggd2luZG93ICkud2lkdGgoKVxuICAgICAgICAgICAgICAgIGxldCB3aWR0aCAgICAgICA9IGpRdWVyeSggJyN0cnAtY29udHJvbHMnICkud2lkdGgoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnIClcbiAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLmNzcyggJ2xlZnQnLCAod2lkdGggLSAzNDgpIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/string-translation.vue?vue&type=script&lang=js&\n");
1091
 
1092
  /***/ }),
1093
 
class-translate-press.php CHANGED
@@ -56,7 +56,7 @@ class TRP_Translate_Press{
56
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
57
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
58
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
59
- define( 'TRP_PLUGIN_VERSION', '1.7.2' );
60
 
61
  wp_cache_add_non_persistent_groups(array('trp'));
62
 
56
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
57
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
58
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
59
+ define( 'TRP_PLUGIN_VERSION', '1.7.3' );
60
 
61
  wp_cache_add_non_persistent_groups(array('trp'));
62
 
includes/class-translation-manager.php CHANGED
@@ -296,7 +296,7 @@ class TRP_Translation_Manager {
296
  }
297
 
298
  $editors_navigation = $this->get_editors_navigation();
299
- $string_types = array( 'regular', 'gettext' );
300
 
301
 
302
  $trp_editor_data = array(
296
  }
297
 
298
  $editors_navigation = $this->get_editors_navigation();
299
+ $string_types = array( 'regular', 'gettext', 'postslug' );
300
 
301
 
302
  $trp_editor_data = array(
includes/class-url-converter.php CHANGED
@@ -314,7 +314,12 @@ class TRP_Url_Converter {
314
 
315
  }else if( isset( $trp_current_url_term_slug ) && isset($trp_current_url_taxonomy) ) { // check here if it is a term link
316
  $TRP_LANGUAGE = $language;
317
- $new_url = get_term_link( $trp_current_url_term_slug, $trp_current_url_taxonomy);
 
 
 
 
 
318
  $TRP_LANGUAGE = $trp_language_copy;
319
  }else {
320
  // we're just adding the new language to the url
314
 
315
  }else if( isset( $trp_current_url_term_slug ) && isset($trp_current_url_taxonomy) ) { // check here if it is a term link
316
  $TRP_LANGUAGE = $language;
317
+ $check_term_link = get_term_link( $trp_current_url_term_slug, $trp_current_url_taxonomy);
318
+ if( !is_wp_error($check_term_link) )
319
+ $new_url = $check_term_link;
320
+ else
321
+ $new_url = $url;
322
+
323
  $TRP_LANGUAGE = $trp_language_copy;
324
  }else {
325
  // we're just adding the new language to the url
includes/compatibility-functions.php CHANGED
@@ -577,3 +577,26 @@ function trp_strip_gettext_from_get_the_date($the_date, $d, $post){
577
 
578
  return $the_date;
579
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
577
 
578
  return $the_date;
579
  }
580
+
581
+
582
+ /**
583
+ * Compatibility with Affiliate Theme
584
+ * It's adding parameters found in the filter forms automatically, braking the query.
585
+ * TranslatePress adds the trp-form-language for other reasons. So we need to remove it in this case.
586
+ * https://affiliatetheme.io
587
+ *
588
+ */
589
+ add_filter('at_set_product_filter_query', 'trp_remove_lang_param_from_query');
590
+ function trp_remove_lang_param_from_query($args){
591
+
592
+ if ( isset( $args['meta_query'] ) && is_array( $args['meta_query']) ){
593
+ foreach($args['meta_query'] as $key => $value){
594
+ if ($value['key'] == 'trp-form-language'){
595
+ unset( $args['meta_query'][$key] );
596
+ }
597
+ }
598
+ $args['meta_query'] = array_values($args['meta_query']);
599
+ }
600
+
601
+ return $args;
602
+ }
includes/string-translation/class-string-translation.php CHANGED
@@ -216,6 +216,7 @@ class TRP_String_Translation {
216
  'see_less' => __( 'See Less', 'translatepress-multilingual' ),
217
  'apply' => __( 'Apply', 'translatepress-multilingual' ),
218
  'no_strings_match_query' => __( 'No strings match your query.', 'translatepress-multilingual' ),
 
219
 
220
  'select_all' => __( 'Select All', 'translatepress-multilingual' ),
221
  'select_visible' => __( 'Select Visible', 'translatepress-multilingual' ),
@@ -271,7 +272,9 @@ class TRP_String_Translation {
271
 
272
  public function register_string_types( $registered_string_types ) {
273
  foreach ( $this->string_types as $string_type => $value ) {
274
- $registered_string_types[] = $string_type;
 
 
275
  }
276
 
277
  return $registered_string_types;
216
  'see_less' => __( 'See Less', 'translatepress-multilingual' ),
217
  'apply' => __( 'Apply', 'translatepress-multilingual' ),
218
  'no_strings_match_query' => __( 'No strings match your query.', 'translatepress-multilingual' ),
219
+ 'request_error' => __( 'An error occurred while loading results. Most likely you were logged out. Reload page?', 'translatepress-multilingual' ),
220
 
221
  'select_all' => __( 'Select All', 'translatepress-multilingual' ),
222
  'select_visible' => __( 'Select Visible', 'translatepress-multilingual' ),
272
 
273
  public function register_string_types( $registered_string_types ) {
274
  foreach ( $this->string_types as $string_type => $value ) {
275
+ if ( !in_array( $string_type, $registered_string_types ) ) {
276
+ $registered_string_types[] = $string_type;
277
+ }
278
  }
279
 
280
  return $registered_string_types;
index.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site using a visual front-end translation editor, with full support for WooCommerce and site builders.
6
- Version: 1.7.2
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site using a visual front-end translation editor, with full support for WooCommerce and site builders.
6
+ Version: 1.7.3
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
languages/translatepress-multilingual.catalog.php CHANGED
@@ -322,6 +322,7 @@
322
  <?php __("See Less", "translatepress-multilingual"); ?>
323
  <?php __("Apply", "translatepress-multilingual"); ?>
324
  <?php __("No strings match your query.", "translatepress-multilingual"); ?>
 
325
  <?php __("Select All", "translatepress-multilingual"); ?>
326
  <?php __("Select Visible", "translatepress-multilingual"); ?>
327
  <?php __("You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown.", "translatepress-multilingual"); ?>
322
  <?php __("See Less", "translatepress-multilingual"); ?>
323
  <?php __("Apply", "translatepress-multilingual"); ?>
324
  <?php __("No strings match your query.", "translatepress-multilingual"); ?>
325
+ <?php __("An error occurred while loading results. Most likely you were logged out. Reload page?", "translatepress-multilingual"); ?>
326
  <?php __("Select All", "translatepress-multilingual"); ?>
327
  <?php __("Select Visible", "translatepress-multilingual"); ?>
328
  <?php __("You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown.", "translatepress-multilingual"); ?>
languages/translatepress-multilingual.pot CHANGED
@@ -1306,76 +1306,80 @@ msgstr ""
1306
  msgid "No strings match your query."
1307
  msgstr ""
1308
 
1309
- #: ../translatepress/includes/string-translation/class-string-translation.php:220
1310
- msgid "Select All"
1311
  msgstr ""
1312
 
1313
  #: ../translatepress/includes/string-translation/class-string-translation.php:221
1314
- msgid "Select Visible"
1315
  msgstr ""
1316
 
1317
  #: ../translatepress/includes/string-translation/class-string-translation.php:222
1318
- msgid "You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown."
1319
  msgstr ""
1320
 
1321
  #: ../translatepress/includes/string-translation/class-string-translation.php:223
1322
- msgid "You are about to perform this action only on the visible strings. To perform the action on all the strings matching the filter click \"Select All\" from the table header dropdown."
1323
  msgstr ""
1324
 
1325
  #: ../translatepress/includes/string-translation/class-string-translation.php:224
1326
- msgid "To continue please type the word:"
1327
  msgstr ""
1328
 
1329
  #: ../translatepress/includes/string-translation/class-string-translation.php:225
 
 
 
 
1330
  msgid "The word typed was incorrect. Action was cancelled."
1331
  msgstr ""
1332
 
1333
- #: ../translatepress/includes/string-translation/class-string-translation.php:227
1334
  msgctxt "Untranslated in this language"
1335
  msgid "in"
1336
  msgstr ""
1337
 
1338
- #: ../translatepress/includes/string-translation/class-string-translation.php:233
1339
  msgid "Navigate to next page"
1340
  msgstr ""
1341
 
1342
- #: ../translatepress/includes/string-translation/class-string-translation.php:234
1343
  msgid "Navigate to previous page"
1344
  msgstr ""
1345
 
1346
- #: ../translatepress/includes/string-translation/class-string-translation.php:235
1347
  msgid "Navigate to first page"
1348
  msgstr ""
1349
 
1350
- #: ../translatepress/includes/string-translation/class-string-translation.php:236
1351
  msgid "Navigate to last page"
1352
  msgstr ""
1353
 
1354
- #: ../translatepress/includes/string-translation/class-string-translation.php:237
1355
  msgid "Type a page number to navigate to"
1356
  msgstr ""
1357
 
1358
- #: ../translatepress/includes/string-translation/class-string-translation.php:238
1359
  msgid "Incorrect page number. Type a page number between 1 and total number of pages"
1360
  msgstr ""
1361
 
1362
- #: ../translatepress/includes/string-translation/class-string-translation.php:239
1363
  msgid "Search original strings containing typed keywords while also matching selected filters"
1364
  msgstr ""
1365
 
1366
- #: ../translatepress/includes/string-translation/class-string-translation.php:240
1367
  msgid "Filter strings according to selected translation status, filters and keywords and selected filters"
1368
  msgstr ""
1369
 
1370
- #: ../translatepress/includes/string-translation/class-string-translation.php:241
1371
  msgid "See options for selecting all strings"
1372
  msgstr ""
1373
 
1374
- #: ../translatepress/includes/string-translation/class-string-translation.php:242
1375
  msgid "Click to sort strings by this column"
1376
  msgstr ""
1377
 
1378
- #: ../translatepress/includes/string-translation/class-string-translation.php:243
1379
  msgid "Language in which the translation status filter applies. Leave unselected for the translation status to apply to ANY language"
1380
  msgstr ""
1381
 
1306
  msgid "No strings match your query."
1307
  msgstr ""
1308
 
1309
+ #: ../translatepress/includes/string-translation/class-string-translation.php:219
1310
+ msgid "An error occurred while loading results. Most likely you were logged out. Reload page?"
1311
  msgstr ""
1312
 
1313
  #: ../translatepress/includes/string-translation/class-string-translation.php:221
1314
+ msgid "Select All"
1315
  msgstr ""
1316
 
1317
  #: ../translatepress/includes/string-translation/class-string-translation.php:222
1318
+ msgid "Select Visible"
1319
  msgstr ""
1320
 
1321
  #: ../translatepress/includes/string-translation/class-string-translation.php:223
1322
+ msgid "You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown."
1323
  msgstr ""
1324
 
1325
  #: ../translatepress/includes/string-translation/class-string-translation.php:224
1326
+ msgid "You are about to perform this action only on the visible strings. To perform the action on all the strings matching the filter click \"Select All\" from the table header dropdown."
1327
  msgstr ""
1328
 
1329
  #: ../translatepress/includes/string-translation/class-string-translation.php:225
1330
+ msgid "To continue please type the word:"
1331
+ msgstr ""
1332
+
1333
+ #: ../translatepress/includes/string-translation/class-string-translation.php:226
1334
  msgid "The word typed was incorrect. Action was cancelled."
1335
  msgstr ""
1336
 
1337
+ #: ../translatepress/includes/string-translation/class-string-translation.php:228
1338
  msgctxt "Untranslated in this language"
1339
  msgid "in"
1340
  msgstr ""
1341
 
1342
+ #: ../translatepress/includes/string-translation/class-string-translation.php:234
1343
  msgid "Navigate to next page"
1344
  msgstr ""
1345
 
1346
+ #: ../translatepress/includes/string-translation/class-string-translation.php:235
1347
  msgid "Navigate to previous page"
1348
  msgstr ""
1349
 
1350
+ #: ../translatepress/includes/string-translation/class-string-translation.php:236
1351
  msgid "Navigate to first page"
1352
  msgstr ""
1353
 
1354
+ #: ../translatepress/includes/string-translation/class-string-translation.php:237
1355
  msgid "Navigate to last page"
1356
  msgstr ""
1357
 
1358
+ #: ../translatepress/includes/string-translation/class-string-translation.php:238
1359
  msgid "Type a page number to navigate to"
1360
  msgstr ""
1361
 
1362
+ #: ../translatepress/includes/string-translation/class-string-translation.php:239
1363
  msgid "Incorrect page number. Type a page number between 1 and total number of pages"
1364
  msgstr ""
1365
 
1366
+ #: ../translatepress/includes/string-translation/class-string-translation.php:240
1367
  msgid "Search original strings containing typed keywords while also matching selected filters"
1368
  msgstr ""
1369
 
1370
+ #: ../translatepress/includes/string-translation/class-string-translation.php:241
1371
  msgid "Filter strings according to selected translation status, filters and keywords and selected filters"
1372
  msgstr ""
1373
 
1374
+ #: ../translatepress/includes/string-translation/class-string-translation.php:242
1375
  msgid "See options for selecting all strings"
1376
  msgstr ""
1377
 
1378
+ #: ../translatepress/includes/string-translation/class-string-translation.php:243
1379
  msgid "Click to sort strings by this column"
1380
  msgstr ""
1381
 
1382
+ #: ../translatepress/includes/string-translation/class-string-translation.php:244
1383
  msgid "Language in which the translation status filter applies. Leave unselected for the translation status to apply to ANY language"
1384
  msgstr ""
1385
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: translate, translation, multilingual, automatic translation, bilingual, fr
5
  Requires at least: 3.1.0
6
  Tested up to: 5.4.1
7
  Requires PHP: 5.6.20
8
- Stable tag: 1.7.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -138,6 +138,11 @@ For more information please check out our [documentation](https://translatepress
138
 
139
 
140
  == Changelog ==
 
 
 
 
 
141
  = 1.7.2 =
142
  * Implemented mechanics to remove duplicate entries in the database
143
  * Fixed issue with automatic translation time-outs on large pages
5
  Requires at least: 3.1.0
6
  Tested up to: 5.4.1
7
  Requires PHP: 5.6.20
8
+ Stable tag: 1.7.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
138
 
139
 
140
  == Changelog ==
141
+ = 1.7.3 =
142
+ * Fixed an error when WooCommerce is active and you access a term link that does not exist
143
+ * Added compatibility with SEO Pack version 1.2.4 or older
144
+ * Added compatibility with Affiliate Theme filters
145
+
146
  = 1.7.2 =
147
  * Implemented mechanics to remove duplicate entries in the database
148
  * Fixed issue with automatic translation time-outs on large pages