TimeTrex/interface/html5/dist/search_panel-SearchPanel.bundle.js

1 line
39 KiB
JavaScript

(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["search_panel-SearchPanel"],{4057:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var jQuery = __webpack_require__(9755);\n( function( $ ) {\n\n\t$.fn.SearchPanel = function( options ) {\n\t\tvar opts = $.extend( {}, $.fn.SearchPanel.defaults, options );\n\n\t\tvar is_collapsed = true;\n\n\t\tvar layouts_array = null;\n\n\t\tvar related_view_controller = null;\n\n\t\tvar $this = this;\n\n\t\tvar tab;\n\n\t\tvar select_tab_index = 0;\n\n\t\tvar select_tab = null;\n\n\t\tvar last_select_tab_index = 0;\n\n\t\tvar last_select_tab = null;\n\n\t\tvar trigger_change_event = true;\n\n\t\tvar hidedAdvTab = false;\n\n//\t\tGlobal.addCss( 'global/widgets/search_panel/SearchPanel.css' );\n\n\t\tthis.isAdvTabVisible = function() {\n\t\t\treturn !hidedAdvTab;\n\t\t};\n\n\t\tthis.isCollapsed = function() {\n\t\t\treturn is_collapsed;\n\t\t};\n\n\t\tthis.hideAdvSearchPanel = function() {\n\t\t\t$( tab ).find( 'li[aria-controls=adv_search]' ).remove();\n\t\t\thidedAdvTab = true;\n\t\t};\n\n\t\tthis.setSearchFlag = function( filter ) {\n\t\t\tvar basic_tab = this.find( 'a[href=\\'#basic_search\\']' );\n\t\t\tvar adv_tab = this.find( 'a[href=\\'#adv_search\\']' );\n\n\t\t\tbasic_tab.removeClass( 'active-label' );\n\t\t\tadv_tab.removeClass( 'active-label' );\n\n\t\t\tvar hasFilter = false;\n\t\t\tfor ( var key in filter ) {\n\t\t\t\tif ( key === 'country' && filter[key].value == TTUUID.not_exist_id ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t//For Documents view\n\t\t\t\tif ( $.inArray( key, ['private', 'template','is_attachment' ] ) !== -1 && filter[key].value == false ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// For Authorizations views\n\t\t\t\tif ( key === 'hierarchy_level' && ( filter[key].value == 1 || filter[key].value.value == 1 ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thasFilter = true;\n\t\t\t}\n\n\t\t\tif ( hasFilter ) {\n\t\t\t\t$( this ).find( '.search-flag' ).remove();\n\t\t\t\tif ( select_tab_index === 0 || hidedAdvTab ) {\n\t\t\t\t\tbasic_tab.addClass( 'active-label' );\n\t\t\t\t\tbasic_tab.html( $.i18n._( 'BASIC SEARCH' ) + '<img title=\\'' + $.i18n._( 'Search is currently active' ) + '\\' src=\\'' + Global.getRealImagePath( 'css/global/widgets/ribbon/icons/alert-16x16.png' ) + '\\' class=\\'search-flag\\'> </img>' );\n\t\t\t\t} else {\n\t\t\t\t\tadv_tab.addClass( 'active-label' );\n\t\t\t\t\tadv_tab.html( $.i18n._( 'ADVANCED SEARCH' ) + '<img title=\\'' + $.i18n._( 'Search is currently active' ) + '\\' src=\\'' + Global.getRealImagePath( 'css/global/widgets/ribbon/icons/alert-16x16.png' ) + '\\' class=\\'search-flag\\'> </img>' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$( this ).find( '.search-flag' ).remove();\n\t\t\t}\n\n\t\t};\n\n\t\t//Don't trgiiger tab event in some case. Like first set filter to search panel\n\t\tthis.setSelectTabIndex = function( val, triggerEvent ) {\n\n\t\t\tif ( select_tab_index === val ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( Global.isSet( triggerEvent ) ) {\n\t\t\t\ttrigger_change_event = triggerEvent;\n\t\t\t} else {\n\t\t\t\ttrigger_change_event = true;\n\t\t\t}\n\n\t\t\t$( tab ).tabs( 'option', 'active', val );\n\t\t};\n\n\t\tthis.getLastSelectTabIndex = function() {\n\t\t\treturn last_select_tab_index;\n\t\t};\n\n\t\tthis.getLastSelectTabId = function() {\n\n\t\t\tif ( !last_select_tab ) {\n\t\t\t\treturn 'basic_search';\n\t\t\t}\n\n\t\t\treturn $( last_select_tab.tab ).attr( 'ref' );\n\t\t};\n\n\t\tthis.getSelectTabIndex = function() {\n\t\t\treturn select_tab_index;\n\t\t};\n\n\t\tthis.getLayoutsArray = function() {\n\t\t\treturn layouts_array;\n\t\t};\n\n\t\tfunction setGridSize() {\n\t\t\tif ( related_view_controller.grid ) {\n\t\t\t\trelated_view_controller.setGridSize();\n\t\t\t\trelated_view_controller.setGridColumnsWidth();\n\n\t\t\t\tif ( related_view_controller.column_selector ) { //This doesn't exist on Attendance -> TimeSheet, Basic Search. JS exception: TypeError: related_view_controller.column_selector is null\n\t\t\t\t\trelated_view_controller.column_selector.setGridColumnsWidths(); //It seems that browser optimize out scrollBar calculations until the DOM is actually visible, so need to do this at the last moment.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//Set Select Layout combobox\n\t\tthis.setLayoutsArray = function( val ) {\n\t\t\tlayouts_array = val;\n\t\t\tvar layout_selector = $( this ).find( '#layout_selector' );\n\t\t\tvar layout_selector_div = $( this ).find( '.layout-selector-div' );\n\n\t\t\t$( layout_selector ).empty();\n\n\t\t\tif ( layouts_array && layouts_array.length > 0 ) {\n\t\t\t\tvar len = layouts_array.length;\n\t\t\t\tfor ( var i = 0; i < len; i++ ) {\n\t\t\t\t\tvar item = layouts_array[i];\n\t\t\t\t\t$( layout_selector ).append( $( '<option value=\"' + item.id + '\"></option>' ).text( item.name ) );\n\t\t\t\t}\n\n\t\t\t\t$( $( layout_selector ).find( 'option' ) ).filter( function() {\n\n\t\t\t\t\t//Saved layout id should always be number\n\t\t\t\t\treturn $( this ).attr( 'value' ) == related_view_controller.select_layout.id;\n\t\t\t\t} ).prop( 'selected', true ).attr( 'selected', true );\n\n\t\t\t\t$( layout_selector_div ).css( 'display', 'block' );\n\n\t\t\t} else {\n\t\t\t\t$( layout_selector_div ).css( 'display', 'none' );\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReleatedViewController = function( val ) {\n\t\t\trelated_view_controller = val;\n\t\t};\n\n\t\t//For multiple items like .xxx could contains a few widgets.\n\t\tthis.each( function() {\n\t\t\tvar o = $.meta ? $.extend( {}, opts, $( this ).data() ) : opts;\n\n\t\t\tvar basic_tab = $( this ).find( 'a[href=\\'#basic_search\\']' );\n\t\t\tvar adv_tab = $( this ).find( 'a[href=\\'#adv_search\\']' );\n\t\t\tvar layout_tab = $( this ).find( 'a[href=\\'#saved_layout\\']' );\n\n\t\t\tvar current_view_label = $( this ).find( '.current-view-label' );\n\n\t\t\tbasic_tab.html( $.i18n._( 'BASIC SEARCH' ) );\n\t\t\tadv_tab.html( $.i18n._( 'ADVANCED SEARCH' ) );\n\t\t\tlayout_tab.html( $.i18n._( 'SAVED SEARCH & LAYOUT' ) );\n\t\t\tcurrent_view_label.html( $.i18n._( 'Current View' ) );\n\n\t\t\ttab = $( this ).find( '.search-panel-tab-bar' );\n\n\t\t\tvar collapseBtn = $( this ).find( '#collapseBtn' );\n\n\t\t\tvar tabDiv = $( this ).find( '.search-panel-tab-outside' );\n\n\t\t\tvar tabContentDiv = $( this ).find( '.search-panel-tab' );\n\n\t\t\tvar layout_selector = $( this ).find( '#layout_selector' );\n\n\t\t\tvar searchButtonDiv = $( this ).find( '.search-btn-div' );\n\n\t\t\tvar refresh_btn = $( this ).find( '#refreshBtn' );\n\n\t\t\trefresh_btn.bind( 'click', function() {\n\t\t\t\trefresh_btn.addClass( 'button-rotate' );\n\t\t\t\trelated_view_controller.search();\n\t\t\t\tGlobal.triggerAnalyticsNavigationOther( 'click:refresh_data', 'click', related_view_controller.viewId );\n\t\t\t} );\n\n\t\t\t$( searchButtonDiv ).css( 'display', 'none' );\n\t\t\tvar searchBtn = $( searchButtonDiv ).find( '#searchBtn' );\n\t\t\tvar clearSearchBtn = $( searchButtonDiv ).find( '#clearSearchBtn' );\n\n\t\t\tsearchBtn.find( 'span:nth-child(2)' ).text( $.i18n._( 'Search' ) );\n\t\t\tclearSearchBtn.find( 'span:nth-child(2)' ).text( $.i18n._( 'Clear Search' ) );\n\n\t\t\tsearchBtn.click( function() {\n\t\t\t\t//Delay 100 to make sure awesomebox values are set in select value\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\trelated_view_controller.onSearch();\n\t\t\t\t}, 100 );\n\n\t\t\t} );\n\n\t\t\tclearSearchBtn.click( function() {\n\t\t\t\trelated_view_controller.onClearSearch();\n\t\t\t} );\n\n\t\t\trelated_view_controller = o.viewController;\n\n\t\t\t$( layout_selector ).on( 'change', function() {\n\t\t\t\trelated_view_controller.layout_changed = true;\n\n\t\t\t\tvar selectId = $( layout_selector ).find( 'option:selected' ).attr( 'value' );\n\t\t\t\tvar len = layouts_array.length;\n\t\t\t\tfor ( var i = 0; i < len; i++ ) {\n\t\t\t\t\tvar item = layouts_array[i];\n\n\t\t\t\t\tif ( item.id == selectId ) {\n\t\t\t\t\t\trelated_view_controller.select_layout = item;\n\t\t\t\t\t\trelated_view_controller.setSelectLayout();\n\t\t\t\t\t\trelated_view_controller.search();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tGlobal.triggerAnalyticsNavigationOther( 'searchpanel:layout_change', 'click', related_view_controller.viewId );\n\t\t\t} );\n\n\t\t\t// Switch and expand search panel on tab changes.\n\t\t\t$( tab ).tabs( { 'activate': onMenuSelect } );\n\n\t\t\t// Expand search panel on an already active tab click.\n\t\t\t$( tab ).find( 'li' ).click( function( e ) {\n\t\t\t\tif ( is_collapsed ) {\n\t\t\t\t\tonCollapseBtnClick();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tfunction onMenuSelect( e, ui ) {\n\t\t\t\tlast_select_tab_index = select_tab_index;\n\n\t\t\t\tlast_select_tab = select_tab;\n\n\t\t\t\tselect_tab_index = ui.newTab.index();\n\n\t\t\t\tselect_tab = ui;\n\n\t\t\t\t// Update filter_data and sync advanced and basic tabs when users change tabs so that they do not have\n\t\t\t\t// to click search before updating or saving a layout.\n\t\t\t\tif ( last_select_tab_index !== select_tab_index ) {\n\n\t\t\t\t\tvar target_ui_dic = related_view_controller.basic_search_field_ui_dic;\n\n\t\t\t\t\tif ( $this.isAdvTabVisible() && last_select_tab_index === 1 ) {\n\t\t\t\t\t\ttarget_ui_dic = related_view_controller.adv_search_field_ui_dic;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar filter_data = {};\n\n\t\t\t\t\t$.each( target_ui_dic, function( key ) {\n\t\t\t\t\t\t//Issue #2912 - When syncing search tabs check fields have a value to prevent issues where API would receive\n\t\t\t\t\t\t//invalid filter_data for some fields.\n\t\t\t\t\t\tif ( target_ui_dic[key].getValue( true ) ) {\n\t\t\t\t\t\t\tfilter_data[key] = { field: key, id: '', value: target_ui_dic[key].getValue( true ) };\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\t//Issue #2956 - Uncaught TypeError: Cannot convert undefined or null to object.\n\t\t\t\t\tif ( related_view_controller.filter_data === null || related_view_controller.filter_data === undefined ) {\n\t\t\t\t\t\trelated_view_controller.filter_data = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t//Merge the two tabs so we do not close any data on switching tabs.\n\t\t\t\t\tfilter_data = Object.assign( related_view_controller.filter_data, filter_data );\n\t\t\t\t\t//Create a deep copy of the object to prevent values being overwritten by reference from clearSearchPanel()\n\t\t\t\t\trelated_view_controller.filter_data = $.extend( true, {}, filter_data );\n\n\t\t\t\t\trelated_view_controller.setSearchPanelFilter();\n\t\t\t\t}\n\n\t\t\t\tif ( trigger_change_event ) {\n\n\t\t\t\t\t$this.trigger( 'searchTabSelect', [e, ui.newPanel] );\n\t\t\t\t} else {\n\t\t\t\t\ttrigger_change_event = true;\n\t\t\t\t}\n\n\t\t\t\tif ( is_collapsed ) {\n\t\t\t\t\tonCollapseBtnClick();\n\t\t\t\t}\n\n\t\t\t\tsetGridSize();\n\n\t\t\t\t//delayCaller would cause \"flashing\" when switching between Basic/Advanced/Saved Search tabs.\n\t\t\t\t// var delayCaller = setInterval( function() {\n\t\t\t\t// \tif ( related_view_controller.grid ) {\n\t\t\t\t// \t\tclearInterval( delayCaller );\n\t\t\t\t// \t\tsetGridSize();\n\t\t\t\t// \t}\n\t\t\t\t// }, 1 );\n\n\t\t\t\tGlobal.triggerAnalyticsTabs( e, ui );\n\t\t\t}\n\n\t\t\t$( collapseBtn ).click( onCollapseBtnClick );\n\n\t\t\tfunction onCollapseBtnClick() {\n\t\t\t\tif ( is_collapsed ) {\n\t\t\t\t\tis_collapsed = false;\n\t\t\t\t\t// $( collapseBtn ).removeClass( 'expend-btn' );\n\t\t\t\t\t$( collapseBtn )\n\t\t\t\t\t\t.removeClass( 'pi-chevron-down' )\n\t\t\t\t\t\t.addClass( 'pi-chevron-up' );\n\n\t\t\t\t\t$( tabDiv ).removeClass( 'search-panel-tab-outside-collapse' );\n\t\t\t\t\t$( tabContentDiv ).removeClass( 'search-panel-tab-collapse' );\n\n\t\t\t\t\t$( searchButtonDiv ).css( 'display', 'block' );\n\n\t\t\t\t} else {\n\t\t\t\t\tis_collapsed = true;\n\t\t\t\t\t// $( collapseBtn ).addClass( 'expend-btn' );\n\t\t\t\t\t$( collapseBtn )\n\t\t\t\t\t\t.removeClass( 'pi-chevron-up' )\n\t\t\t\t\t\t.addClass( 'pi-chevron-down' );\n\n\t\t\t\t\t$( tabDiv ).addClass( 'search-panel-tab-outside-collapse' );\n\t\t\t\t\t$( tabContentDiv ).addClass( 'search-panel-tab-collapse' );\n\n\t\t\t\t\t$( searchButtonDiv ).css( 'display', 'none' );\n\t\t\t\t}\n\n\t\t\t\tsetGridSize();\n\t\t\t}\n\n\t\t\t// function resizeGrid() {\n\t\t\t// \tif (!interval) {\n\t\t\t// \t\tvar interval = setInterval(function () {\n\t\t\t// \t\t\tif ( related_view_controller.grid ) {\n\t\t\t// \t\t\t\tclearInterval(interval);\n\t\t\t// \t\t\t\tvar offset = $('.search-panel').outerHeight() + $('.search-btn-div').outerHeight() + $('.total-number-div').outerHeight() + $('.grid-top-border').outerHeight() + $('.grid-bottom-border').outerHeight() + $('.search-panel-tab-bar').outerHeight() + $('.copyright-container').outerHeight();\n\t\t\t// \t\t\t\tvar height = parseInt($('#contentContainer').height() - offset);\n\t\t\t// \t\t\t\tif ( height != related_view_controller.grid.getGridHeight() ) {\n\t\t\t// \t\t\t\t\trelated_view_controller.grid.setGridHeight(height);\n\t\t\t// \t\t\t\t\t$('.grid-div').height('auto');\n\t\t\t// \t\t\t\t}\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}, 100 );\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t} );\n\n\t\treturn this;\n\n\t};\n\n\t$.fn.SearchPanel.defaults = {};\n\t$.fn.SearchPanel.html = {\n\t\tform_item: `<div class=\"form-item-div\"><span class=\"form-item-label\"></span><div class=\"form-item-input-div\"></div></div>`,\n\t\tsearch_panel: `\n\t\t\t<div class=\"search-panel\" xmlns=\"http://www.w3.org/1999/html\">\n\t\t\t\t<div class=\"search-panel-tab-bar\" id=\"search_panel_tab_bar\">\n\t\t\t\t\t<ul class=\"search-panel-tab-bar-label\">\n\t\t\t\t\t\t<li><a ref=\"basic_search\" href=\"#basic_search\"></a></li>\n\t\t\t\t\t\t<li><a ref=\"adv_search\" href=\"#adv_search\"></a></li>\n\t\t\t\t\t\t<li><a ref=\"saved_layout\" href=\"#saved_layout\"></a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<div id=\"basic_search\" class=\"search-panel-tab-outside search-panel-tab-outside-collapse\">\n\t\t\t\t\t\t<div class=\"search-panel-tab search-panel-tab-collapse\" id=\"basic_search_content_div\">\n\t\t\t\t\t\t\t<div class=\"first-column\"></div>\n\t\t\t\t\t\t\t<div class=\"second-column\"></div>\n\t\t\t\t\t\t\t<div class=\"third-column\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"adv_search\" class=\"search-panel-tab-outside search-panel-tab-outside-collapse\">\n\t\t\t\t\t\t<div class=\"search-panel-tab search-panel-tab-collapse\" id=\"adv_search_content_div\">\n\t\t\t\t\t\t\t<div class=\"first-column\"></div>\n\t\t\t\t\t\t\t<div class=\"second-column\"></div>\n\t\t\t\t\t\t\t<div class=\"third-column\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"saved_layout\" class=\"search-panel-tab-outside search-panel-tab-outside-collapse\">\n\t\t\t\t\t\t<div class=\"search-panel-tab search-panel-tab-collapse\" id=\"saved_layout_content_div\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<button id=\"collapseBtn\" class=\"collapse-btn pi pi-chevron-down\"></button>\n\t\t\t\t<span id=\"refreshBtn\" class=\"tticon tticon-refresh_black_24dp refresh-btn\"></span>\n\t\t\t\t<div class=\"layout-selector-div\">\n\t\t\t\t\t<span class=\"current-view-label\"></span>\n\t\t\t\t\t<select id=\"layout_selector\" class=\"t-select layout-selector\">\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"search-btn-div\">\n\t\t\t\t\t<button id=\"searchBtn\" class=\"tt-button p-button p-component\" type=\"button\">\n\t\t\t\t\t\t<span class=\"tticon tticon-search_black_24dp\"></span>\n\t\t\t\t\t\t<span class=\"p-button-label\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<button id=\"clearSearchBtn\" class=\"tt-button p-button p-component\" type=\"button\">\n\t\t\t\t\t\t<span class=\"tticon tticon-cancel_black_24dp\"></span>\n\t\t\t\t\t\t<span class=\"p-button-label\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t};\n\n} )( jQuery );//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA1Ny5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7O0FBRUE7QUFDQSx5QkFBeUI7O0FBRXpCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxREFBcUQ7QUFDckQscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07O0FBRU47O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esb0JBQW9CLDJCQUEyQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsR0FBRyxNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L2dsb2JhbC93aWRnZXRzL3NlYXJjaF9wYW5lbC9TZWFyY2hQYW5lbC5qcz9lMDgzIl0sInNvdXJjZXNDb250ZW50IjpbIiggZnVuY3Rpb24oICQgKSB7XG5cblx0JC5mbi5TZWFyY2hQYW5lbCA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBvcHRzID0gJC5leHRlbmQoIHt9LCAkLmZuLlNlYXJjaFBhbmVsLmRlZmF1bHRzLCBvcHRpb25zICk7XG5cblx0XHR2YXIgaXNfY29sbGFwc2VkID0gdHJ1ZTtcblxuXHRcdHZhciBsYXlvdXRzX2FycmF5ID0gbnVsbDtcblxuXHRcdHZhciByZWxhdGVkX3ZpZXdfY29udHJvbGxlciA9IG51bGw7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHRhYjtcblxuXHRcdHZhciBzZWxlY3RfdGFiX2luZGV4ID0gMDtcblxuXHRcdHZhciBzZWxlY3RfdGFiID0gbnVsbDtcblxuXHRcdHZhciBsYXN0X3NlbGVjdF90YWJfaW5kZXggPSAwO1xuXG5cdFx0dmFyIGxhc3Rfc2VsZWN0X3RhYiA9IG51bGw7XG5cblx0XHR2YXIgdHJpZ2dlcl9jaGFuZ2VfZXZlbnQgPSB0cnVlO1xuXG5cdFx0dmFyIGhpZGVkQWR2VGFiID0gZmFsc2U7XG5cbi8vXHRcdEdsb2JhbC5hZGRDc3MoICdnbG9iYWwvd2lkZ2V0cy9zZWFyY2hfcGFuZWwvU2VhcmNoUGFuZWwuY3NzJyApO1xuXG5cdFx0dGhpcy5pc0FkdlRhYlZpc2libGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiAhaGlkZWRBZHZUYWI7XG5cdFx0fTtcblxuXHRcdHRoaXMuaXNDb2xsYXBzZWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBpc19jb2xsYXBzZWQ7XG5cdFx0fTtcblxuXHRcdHRoaXMuaGlkZUFkdlNlYXJjaFBhbmVsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCB0YWIgKS5maW5kKCAnbGlbYXJpYS1jb250cm9scz1hZHZfc2VhcmNoXScgKS5yZW1vdmUoKTtcblx0XHRcdGhpZGVkQWR2VGFiID0gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRTZWFyY2hGbGFnID0gZnVuY3Rpb24oIGZpbHRlciApIHtcblx0XHRcdHZhciBiYXNpY190YWIgPSB0aGlzLmZpbmQoICdhW2hyZWY9XFwnI2Jhc2ljX3NlYXJjaFxcJ10nICk7XG5cdFx0XHR2YXIgYWR2X3RhYiA9IHRoaXMuZmluZCggJ2FbaHJlZj1cXCcjYWR2X3NlYXJjaFxcJ10nICk7XG5cblx0XHRcdGJhc2ljX3RhYi5yZW1vdmVDbGFzcyggJ2FjdGl2ZS1sYWJlbCcgKTtcblx0XHRcdGFkdl90YWIucmVtb3ZlQ2xhc3MoICdhY3RpdmUtbGFiZWwnICk7XG5cblx0XHRcdHZhciBoYXNGaWx0ZXIgPSBmYWxzZTtcblx0XHRcdGZvciAoIHZhciBrZXkgaW4gZmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2NvdW50cnknICYmIGZpbHRlcltrZXldLnZhbHVlID09IFRUVVVJRC5ub3RfZXhpc3RfaWQgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL0ZvciBEb2N1bWVudHMgdmlld1xuXHRcdFx0XHRpZiAoICQuaW5BcnJheSgga2V5LCBbJ3ByaXZhdGUnLCAndGVtcGxhdGUnLCdpc19hdHRhY2htZW50JyBdICkgIT09IC0xICYmIGZpbHRlcltrZXldLnZhbHVlID09IGZhbHNlICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yIEF1dGhvcml6YXRpb25zIHZpZXdzXG5cdFx0XHRcdGlmICgga2V5ID09PSAnaGllcmFyY2h5X2xldmVsJyAmJiAoIGZpbHRlcltrZXldLnZhbHVlID09IDEgfHwgZmlsdGVyW2tleV0udmFsdWUudmFsdWUgPT0gMSApICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGhhc0ZpbHRlciA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzRmlsdGVyICkge1xuXHRcdFx0XHQkKCB0aGlzICkuZmluZCggJy5zZWFyY2gtZmxhZycgKS5yZW1vdmUoKTtcblx0XHRcdFx0aWYgKCBzZWxlY3RfdGFiX2luZGV4ID09PSAwIHx8IGhpZGVkQWR2VGFiICkge1xuXHRcdFx0XHRcdGJhc2ljX3RhYi5hZGRDbGFzcyggJ2FjdGl2ZS1sYWJlbCcgKTtcblx0XHRcdFx0XHRiYXNpY190YWIuaHRtbCggJC5pMThuLl8oICdCQVNJQyBTRUFSQ0gnICkgKyAnPGltZyB0aXRsZT1cXCcnICsgJC5pMThuLl8oICdTZWFyY2ggaXMgY3VycmVudGx5IGFjdGl2ZScgKSArICdcXCcgc3JjPVxcJycgKyBHbG9iYWwuZ2V0UmVhbEltYWdlUGF0aCggJ2Nzcy9nbG9iYWwvd2lkZ2V0cy9yaWJib24vaWNvbnMvYWxlcnQtMTZ4MTYucG5nJyApICsgJ1xcJyBjbGFzcz1cXCdzZWFyY2gtZmxhZ1xcJz4gPC9pbWc+JyApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFkdl90YWIuYWRkQ2xhc3MoICdhY3RpdmUtbGFiZWwnICk7XG5cdFx0XHRcdFx0YWR2X3RhYi5odG1sKCAkLmkxOG4uXyggJ0FEVkFOQ0VEIFNFQVJDSCcgKSArICc8aW1nIHRpdGxlPVxcJycgKyAkLmkxOG4uXyggJ1NlYXJjaCBpcyBjdXJyZW50bHkgYWN0aXZlJyApICsgJ1xcJyBzcmM9XFwnJyArIEdsb2JhbC5nZXRSZWFsSW1hZ2VQYXRoKCAnY3NzL2dsb2JhbC93aWRnZXRzL3JpYmJvbi9pY29ucy9hbGVydC0xNngxNi5wbmcnICkgKyAnXFwnIGNsYXNzPVxcJ3NlYXJjaC1mbGFnXFwnPiA8L2ltZz4nICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5maW5kKCAnLnNlYXJjaC1mbGFnJyApLnJlbW92ZSgpO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdC8vRG9uJ3QgdHJnaWlnZXIgdGFiIGV2ZW50IGluIHNvbWUgY2FzZS4gTGlrZSBmaXJzdCBzZXQgZmlsdGVyIHRvIHNlYXJjaCBwYW5lbFxuXHRcdHRoaXMuc2V0U2VsZWN0VGFiSW5kZXggPSBmdW5jdGlvbiggdmFsLCB0cmlnZ2VyRXZlbnQgKSB7XG5cblx0XHRcdGlmICggc2VsZWN0X3RhYl9pbmRleCA9PT0gdmFsICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCB0cmlnZ2VyRXZlbnQgKSApIHtcblx0XHRcdFx0dHJpZ2dlcl9jaGFuZ2VfZXZlbnQgPSB0cmlnZ2VyRXZlbnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmlnZ2VyX2NoYW5nZV9ldmVudCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdCQoIHRhYiApLnRhYnMoICdvcHRpb24nLCAnYWN0aXZlJywgdmFsICk7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0TGFzdFNlbGVjdFRhYkluZGV4ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gbGFzdF9zZWxlY3RfdGFiX2luZGV4O1xuXHRcdH07XG5cblx0XHR0aGlzLmdldExhc3RTZWxlY3RUYWJJZCA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRpZiAoICFsYXN0X3NlbGVjdF90YWIgKSB7XG5cdFx0XHRcdHJldHVybiAnYmFzaWNfc2VhcmNoJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICQoIGxhc3Rfc2VsZWN0X3RhYi50YWIgKS5hdHRyKCAncmVmJyApO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldFNlbGVjdFRhYkluZGV4ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0X3RhYl9pbmRleDtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRMYXlvdXRzQXJyYXkgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBsYXlvdXRzX2FycmF5O1xuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBzZXRHcmlkU2l6ZSgpIHtcblx0XHRcdGlmICggcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuZ3JpZCApIHtcblx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuc2V0R3JpZFNpemUoKTtcblx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuc2V0R3JpZENvbHVtbnNXaWR0aCgpO1xuXG5cdFx0XHRcdGlmICggcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuY29sdW1uX3NlbGVjdG9yICkgeyAvL1RoaXMgZG9lc24ndCBleGlzdCBvbiBBdHRlbmRhbmNlIC0+IFRpbWVTaGVldCwgQmFzaWMgU2VhcmNoLiBKUyBleGNlcHRpb246IFR5cGVFcnJvcjogcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuY29sdW1uX3NlbGVjdG9yIGlzIG51bGxcblx0XHRcdFx0XHRyZWxhdGVkX3ZpZXdfY29udHJvbGxlci5jb2x1bW5fc2VsZWN0b3Iuc2V0R3JpZENvbHVtbnNXaWR0aHMoKTsgLy9JdCBzZWVtcyB0aGF0IGJyb3dzZXIgb3B0aW1pemUgb3V0IHNjcm9sbEJhciBjYWxjdWxhdGlvbnMgdW50aWwgdGhlIERPTSBpcyBhY3R1YWxseSB2aXNpYmxlLCBzbyBuZWVkIHRvIGRvIHRoaXMgYXQgdGhlIGxhc3QgbW9tZW50LlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9TZXQgU2VsZWN0IExheW91dCBjb21ib2JveFxuXHRcdHRoaXMuc2V0TGF5b3V0c0FycmF5ID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdGxheW91dHNfYXJyYXkgPSB2YWw7XG5cdFx0XHR2YXIgbGF5b3V0X3NlbGVjdG9yID0gJCggdGhpcyApLmZpbmQoICcjbGF5b3V0X3NlbGVjdG9yJyApO1xuXHRcdFx0dmFyIGxheW91dF9zZWxlY3Rvcl9kaXYgPSAkKCB0aGlzICkuZmluZCggJy5sYXlvdXQtc2VsZWN0b3ItZGl2JyApO1xuXG5cdFx0XHQkKCBsYXlvdXRfc2VsZWN0b3IgKS5lbXB0eSgpO1xuXG5cdFx0XHRpZiAoIGxheW91dHNfYXJyYXkgJiYgbGF5b3V0c19hcnJheS5sZW5ndGggPiAwICkge1xuXHRcdFx0XHR2YXIgbGVuID0gbGF5b3V0c19hcnJheS5sZW5ndGg7XG5cdFx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdHZhciBpdGVtID0gbGF5b3V0c19hcnJheVtpXTtcblx0XHRcdFx0XHQkKCBsYXlvdXRfc2VsZWN0b3IgKS5hcHBlbmQoICQoICc8b3B0aW9uIHZhbHVlPVwiJyArIGl0ZW0uaWQgKyAnXCI+PC9vcHRpb24+JyApLnRleHQoIGl0ZW0ubmFtZSApICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkKCAkKCBsYXlvdXRfc2VsZWN0b3IgKS5maW5kKCAnb3B0aW9uJyApICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdC8vU2F2ZWQgbGF5b3V0IGlkIHNob3VsZCBhbHdheXMgYmUgbnVtYmVyXG5cdFx0XHRcdFx0cmV0dXJuICQoIHRoaXMgKS5hdHRyKCAndmFsdWUnICkgPT0gcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuc2VsZWN0X2xheW91dC5pZDtcblx0XHRcdFx0fSApLnByb3AoICdzZWxlY3RlZCcsIHRydWUgKS5hdHRyKCAnc2VsZWN0ZWQnLCB0cnVlICk7XG5cblx0XHRcdFx0JCggbGF5b3V0X3NlbGVjdG9yX2RpdiApLmNzcyggJ2Rpc3BsYXknLCAnYmxvY2snICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIGxheW91dF9zZWxlY3Rvcl9kaXYgKS5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRSZWxlYXRlZFZpZXdDb250cm9sbGVyID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdHJlbGF0ZWRfdmlld19jb250cm9sbGVyID0gdmFsO1xuXHRcdH07XG5cblx0XHQvL0ZvciBtdWx0aXBsZSBpdGVtcyBsaWtlIC54eHggY291bGQgY29udGFpbnMgYSBmZXcgd2lkZ2V0cy5cblx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG8gPSAkLm1ldGEgPyAkLmV4dGVuZCgge30sIG9wdHMsICQoIHRoaXMgKS5kYXRhKCkgKSA6IG9wdHM7XG5cblx0XHRcdHZhciBiYXNpY190YWIgPSAkKCB0aGlzICkuZmluZCggJ2FbaHJlZj1cXCcjYmFzaWNfc2VhcmNoXFwnXScgKTtcblx0XHRcdHZhciBhZHZfdGFiID0gJCggdGhpcyApLmZpbmQoICdhW2hyZWY9XFwnI2Fkdl9zZWFyY2hcXCddJyApO1xuXHRcdFx0dmFyIGxheW91dF90YWIgPSAkKCB0aGlzICkuZmluZCggJ2FbaHJlZj1cXCcjc2F2ZWRfbGF5b3V0XFwnXScgKTtcblxuXHRcdFx0dmFyIGN1cnJlbnRfdmlld19sYWJlbCA9ICQoIHRoaXMgKS5maW5kKCAnLmN1cnJlbnQtdmlldy1sYWJlbCcgKTtcblxuXHRcdFx0YmFzaWNfdGFiLmh0bWwoICQuaTE4bi5fKCAnQkFTSUMgU0VBUkNIJyApICk7XG5cdFx0XHRhZHZfdGFiLmh0bWwoICQuaTE4bi5fKCAnQURWQU5DRUQgU0VBUkNIJyApICk7XG5cdFx0XHRsYXlvdXRfdGFiLmh0bWwoICQuaTE4bi5fKCAnU0FWRUQgU0VBUkNIICYgTEFZT1VUJyApICk7XG5cdFx0XHRjdXJyZW50X3ZpZXdfbGFiZWwuaHRtbCggJC5pMThuLl8oICdDdXJyZW50IFZpZXcnICkgKTtcblxuXHRcdFx0dGFiID0gJCggdGhpcyApLmZpbmQoICcuc2VhcmNoLXBhbmVsLXRhYi1iYXInICk7XG5cblx0XHRcdHZhciBjb2xsYXBzZUJ0biA9ICQoIHRoaXMgKS5maW5kKCAnI2NvbGxhcHNlQnRuJyApO1xuXG5cdFx0XHR2YXIgdGFiRGl2ID0gJCggdGhpcyApLmZpbmQoICcuc2VhcmNoLXBhbmVsLXRhYi1vdXRzaWRlJyApO1xuXG5cdFx0XHR2YXIgdGFiQ29udGVudERpdiA9ICQoIHRoaXMgKS5maW5kKCAnLnNlYXJjaC1wYW5lbC10YWInICk7XG5cblx0XHRcdHZhciBsYXlvdXRfc2VsZWN0b3IgPSAkKCB0aGlzICkuZmluZCggJyNsYXlvdXRfc2VsZWN0b3InICk7XG5cblx0XHRcdHZhciBzZWFyY2hCdXR0b25EaXYgPSAkKCB0aGlzICkuZmluZCggJy5zZWFyY2gtYnRuLWRpdicgKTtcblxuXHRcdFx0dmFyIHJlZnJlc2hfYnRuID0gJCggdGhpcyApLmZpbmQoICcjcmVmcmVzaEJ0bicgKTtcblxuXHRcdFx0cmVmcmVzaF9idG4uYmluZCggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJlZnJlc2hfYnRuLmFkZENsYXNzKCAnYnV0dG9uLXJvdGF0ZScgKTtcblx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuc2VhcmNoKCk7XG5cdFx0XHRcdEdsb2JhbC50cmlnZ2VyQW5hbHl0aWNzTmF2aWdhdGlvbk90aGVyKCAnY2xpY2s6cmVmcmVzaF9kYXRhJywgJ2NsaWNrJywgcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIudmlld0lkICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdCQoIHNlYXJjaEJ1dHRvbkRpdiApLmNzcyggJ2Rpc3BsYXknLCAnbm9uZScgKTtcblx0XHRcdHZhciBzZWFyY2hCdG4gPSAkKCBzZWFyY2hCdXR0b25EaXYgKS5maW5kKCAnI3NlYXJjaEJ0bicgKTtcblx0XHRcdHZhciBjbGVhclNlYXJjaEJ0biA9ICQoIHNlYXJjaEJ1dHRvbkRpdiApLmZpbmQoICcjY2xlYXJTZWFyY2hCdG4nICk7XG5cblx0XHRcdHNlYXJjaEJ0bi5maW5kKCAnc3BhbjpudGgtY2hpbGQoMiknICkudGV4dCggJC5pMThuLl8oICdTZWFyY2gnICkgKTtcblx0XHRcdGNsZWFyU2VhcmNoQnRuLmZpbmQoICdzcGFuOm50aC1jaGlsZCgyKScgKS50ZXh0KCAkLmkxOG4uXyggJ0NsZWFyIFNlYXJjaCcgKSApO1xuXG5cdFx0XHRzZWFyY2hCdG4uY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvL0RlbGF5IDEwMCB0byBtYWtlIHN1cmUgYXdlc29tZWJveCB2YWx1ZXMgYXJlIHNldCBpbiBzZWxlY3QgdmFsdWVcblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIub25TZWFyY2goKTtcblx0XHRcdFx0fSwgMTAwICk7XG5cblx0XHRcdH0gKTtcblxuXHRcdFx0Y2xlYXJTZWFyY2hCdG4uY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZWxhdGVkX3ZpZXdfY29udHJvbGxlci5vbkNsZWFyU2VhcmNoKCk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdHJlbGF0ZWRfdmlld19jb250cm9sbGVyID0gby52aWV3Q29udHJvbGxlcjtcblxuXHRcdFx0JCggbGF5b3V0X3NlbGVjdG9yICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIubGF5b3V0X2NoYW5nZWQgPSB0cnVlO1xuXG5cdFx0XHRcdHZhciBzZWxlY3RJZCA9ICQoIGxheW91dF9zZWxlY3RvciApLmZpbmQoICdvcHRpb246c2VsZWN0ZWQnICkuYXR0ciggJ3ZhbHVlJyApO1xuXHRcdFx0XHR2YXIgbGVuID0gbGF5b3V0c19hcnJheS5sZW5ndGg7XG5cdFx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdHZhciBpdGVtID0gbGF5b3V0c19hcnJheVtpXTtcblxuXHRcdFx0XHRcdGlmICggaXRlbS5pZCA9PSBzZWxlY3RJZCApIHtcblx0XHRcdFx0XHRcdHJlbGF0ZWRfdmlld19jb250cm9sbGVyLnNlbGVjdF9sYXlvdXQgPSBpdGVtO1xuXHRcdFx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuc2V0U2VsZWN0TGF5b3V0KCk7XG5cdFx0XHRcdFx0XHRyZWxhdGVkX3ZpZXdfY29udHJvbGxlci5zZWFyY2goKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHRcdEdsb2JhbC50cmlnZ2VyQW5hbHl0aWNzTmF2aWdhdGlvbk90aGVyKCAnc2VhcmNocGFuZWw6bGF5b3V0X2NoYW5nZScsICdjbGljaycsIHJlbGF0ZWRfdmlld19jb250cm9sbGVyLnZpZXdJZCApO1xuXHRcdFx0fSApO1xuXG5cdFx0XHQvLyBTd2l0Y2ggYW5kIGV4cGFuZCBzZWFyY2ggcGFuZWwgb24gdGFiIGNoYW5nZXMuXG5cdFx0XHQkKCB0YWIgKS50YWJzKCB7ICdhY3RpdmF0ZSc6IG9uTWVudVNlbGVjdCB9ICk7XG5cblx0XHRcdC8vIEV4cGFuZCBzZWFyY2ggcGFuZWwgb24gYW4gYWxyZWFkeSBhY3RpdmUgdGFiIGNsaWNrLlxuXHRcdFx0JCggdGFiICkuZmluZCggJ2xpJyApLmNsaWNrKCBmdW5jdGlvbiggZSApIHtcblx0XHRcdFx0aWYgKCBpc19jb2xsYXBzZWQgKSB7XG5cdFx0XHRcdFx0b25Db2xsYXBzZUJ0bkNsaWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblxuXHRcdFx0ZnVuY3Rpb24gb25NZW51U2VsZWN0KCBlLCB1aSApIHtcblx0XHRcdFx0bGFzdF9zZWxlY3RfdGFiX2luZGV4ID0gc2VsZWN0X3RhYl9pbmRleDtcblxuXHRcdFx0XHRsYXN0X3NlbGVjdF90YWIgPSBzZWxlY3RfdGFiO1xuXG5cdFx0XHRcdHNlbGVjdF90YWJfaW5kZXggPSB1aS5uZXdUYWIuaW5kZXgoKTtcblxuXHRcdFx0XHRzZWxlY3RfdGFiID0gdWk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGZpbHRlcl9kYXRhIGFuZCBzeW5jIGFkdmFuY2VkIGFuZCBiYXNpYyB0YWJzIHdoZW4gdXNlcnMgY2hhbmdlIHRhYnMgc28gdGhhdCB0aGV5IGRvIG5vdCBoYXZlXG5cdFx0XHRcdC8vIHRvIGNsaWNrIHNlYXJjaCBiZWZvcmUgdXBkYXRpbmcgb3Igc2F2aW5nIGEgbGF5b3V0LlxuXHRcdFx0XHRpZiAoIGxhc3Rfc2VsZWN0X3RhYl9pbmRleCAhPT0gc2VsZWN0X3RhYl9pbmRleCApIHtcblxuXHRcdFx0XHRcdHZhciB0YXJnZXRfdWlfZGljID0gcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuYmFzaWNfc2VhcmNoX2ZpZWxkX3VpX2RpYztcblxuXHRcdFx0XHRcdGlmICggJHRoaXMuaXNBZHZUYWJWaXNpYmxlKCkgJiYgbGFzdF9zZWxlY3RfdGFiX2luZGV4ID09PSAxICkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0X3VpX2RpYyA9IHJlbGF0ZWRfdmlld19jb250cm9sbGVyLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBmaWx0ZXJfZGF0YSA9IHt9O1xuXG5cdFx0XHRcdFx0JC5lYWNoKCB0YXJnZXRfdWlfZGljLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdFx0Ly9Jc3N1ZSAjMjkxMiAtIFdoZW4gc3luY2luZyBzZWFyY2ggdGFicyBjaGVjayBmaWVsZHMgaGF2ZSBhIHZhbHVlIHRvIHByZXZlbnQgaXNzdWVzIHdoZXJlIEFQSSB3b3VsZCByZWNlaXZlXG5cdFx0XHRcdFx0XHQvL2ludmFsaWQgZmlsdGVyX2RhdGEgZm9yIHNvbWUgZmllbGRzLlxuXHRcdFx0XHRcdFx0aWYgKCB0YXJnZXRfdWlfZGljW2tleV0uZ2V0VmFsdWUoIHRydWUgKSApIHtcblx0XHRcdFx0XHRcdFx0ZmlsdGVyX2RhdGFba2V5XSA9IHsgZmllbGQ6IGtleSwgaWQ6ICcnLCB2YWx1ZTogdGFyZ2V0X3VpX2RpY1trZXldLmdldFZhbHVlKCB0cnVlICkgfTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHQvL0lzc3VlICMyOTU2IC0gVW5jYXVnaHQgVHlwZUVycm9yOiBDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QuXG5cdFx0XHRcdFx0aWYgKCByZWxhdGVkX3ZpZXdfY29udHJvbGxlci5maWx0ZXJfZGF0YSA9PT0gbnVsbCB8fCByZWxhdGVkX3ZpZXdfY29udHJvbGxlci5maWx0ZXJfZGF0YSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuZmlsdGVyX2RhdGEgPSB7fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL01lcmdlIHRoZSB0d28gdGFicyBzbyB3ZSBkbyBub3QgY2xvc2UgYW55IGRhdGEgb24gc3dpdGNoaW5nIHRhYnMuXG5cdFx0XHRcdFx0ZmlsdGVyX2RhdGEgPSBPYmplY3QuYXNzaWduKCByZWxhdGVkX3ZpZXdfY29udHJvbGxlci5maWx0ZXJfZGF0YSwgZmlsdGVyX2RhdGEgKTtcblx0XHRcdFx0XHQvL0NyZWF0ZSBhIGRlZXAgY29weSBvZiB0aGUgb2JqZWN0IHRvIHByZXZlbnQgdmFsdWVzIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHJlZmVyZW5jZSBmcm9tIGNsZWFyU2VhcmNoUGFuZWwoKVxuXHRcdFx0XHRcdHJlbGF0ZWRfdmlld19jb250cm9sbGVyLmZpbHRlcl9kYXRhID0gJC5leHRlbmQoIHRydWUsIHt9LCBmaWx0ZXJfZGF0YSApO1xuXG5cdFx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuc2V0U2VhcmNoUGFuZWxGaWx0ZXIoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggdHJpZ2dlcl9jaGFuZ2VfZXZlbnQgKSB7XG5cblx0XHRcdFx0XHQkdGhpcy50cmlnZ2VyKCAnc2VhcmNoVGFiU2VsZWN0JywgW2UsIHVpLm5ld1BhbmVsXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRyaWdnZXJfY2hhbmdlX2V2ZW50ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggaXNfY29sbGFwc2VkICkge1xuXHRcdFx0XHRcdG9uQ29sbGFwc2VCdG5DbGljaygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2V0R3JpZFNpemUoKTtcblxuXHRcdFx0XHQvL2RlbGF5Q2FsbGVyIHdvdWxkIGNhdXNlIFwiZmxhc2hpbmdcIiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIEJhc2ljL0FkdmFuY2VkL1NhdmVkIFNlYXJjaCB0YWJzLlxuXHRcdFx0XHQvLyB2YXIgZGVsYXlDYWxsZXIgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIFx0aWYgKCByZWxhdGVkX3ZpZXdfY29udHJvbGxlci5ncmlkICkge1xuXHRcdFx0XHQvLyBcdFx0Y2xlYXJJbnRlcnZhbCggZGVsYXlDYWxsZXIgKTtcblx0XHRcdFx0Ly8gXHRcdHNldEdyaWRTaXplKCk7XG5cdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHQvLyB9LCAxICk7XG5cblx0XHRcdFx0R2xvYmFsLnRyaWdnZXJBbmFseXRpY3NUYWJzKCBlLCB1aSApO1xuXHRcdFx0fVxuXG5cdFx0XHQkKCBjb2xsYXBzZUJ0biApLmNsaWNrKCBvbkNvbGxhcHNlQnRuQ2xpY2sgKTtcblxuXHRcdFx0ZnVuY3Rpb24gb25Db2xsYXBzZUJ0bkNsaWNrKCkge1xuXHRcdFx0XHRpZiAoIGlzX2NvbGxhcHNlZCApIHtcblx0XHRcdFx0XHRpc19jb2xsYXBzZWQgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyAkKCBjb2xsYXBzZUJ0biApLnJlbW92ZUNsYXNzKCAnZXhwZW5kLWJ0bicgKTtcblx0XHRcdFx0XHQkKCBjb2xsYXBzZUJ0biApXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoICdwaS1jaGV2cm9uLWRvd24nIClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcyggJ3BpLWNoZXZyb24tdXAnICk7XG5cblx0XHRcdFx0XHQkKCB0YWJEaXYgKS5yZW1vdmVDbGFzcyggJ3NlYXJjaC1wYW5lbC10YWItb3V0c2lkZS1jb2xsYXBzZScgKTtcblx0XHRcdFx0XHQkKCB0YWJDb250ZW50RGl2ICkucmVtb3ZlQ2xhc3MoICdzZWFyY2gtcGFuZWwtdGFiLWNvbGxhcHNlJyApO1xuXG5cdFx0XHRcdFx0JCggc2VhcmNoQnV0dG9uRGl2ICkuY3NzKCAnZGlzcGxheScsICdibG9jaycgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlzX2NvbGxhcHNlZCA9IHRydWU7XG5cdFx0XHRcdFx0Ly8gJCggY29sbGFwc2VCdG4gKS5hZGRDbGFzcyggJ2V4cGVuZC1idG4nICk7XG5cdFx0XHRcdFx0JCggY29sbGFwc2VCdG4gKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCAncGktY2hldnJvbi11cCcgKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCAncGktY2hldnJvbi1kb3duJyApO1xuXG5cdFx0XHRcdFx0JCggdGFiRGl2ICkuYWRkQ2xhc3MoICdzZWFyY2gtcGFuZWwtdGFiLW91dHNpZGUtY29sbGFwc2UnICk7XG5cdFx0XHRcdFx0JCggdGFiQ29udGVudERpdiApLmFkZENsYXNzKCAnc2VhcmNoLXBhbmVsLXRhYi1jb2xsYXBzZScgKTtcblxuXHRcdFx0XHRcdCQoIHNlYXJjaEJ1dHRvbkRpdiApLmNzcyggJ2Rpc3BsYXknLCAnbm9uZScgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNldEdyaWRTaXplKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZ1bmN0aW9uIHJlc2l6ZUdyaWQoKSB7XG5cdFx0XHQvLyBcdGlmICghaW50ZXJ2YWwpIHtcblx0XHRcdC8vIFx0XHR2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBcdFx0XHRpZiAoIHJlbGF0ZWRfdmlld19jb250cm9sbGVyLmdyaWQgKSB7XG5cdFx0XHQvLyBcdFx0XHRcdGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuXHRcdFx0Ly8gXHRcdFx0XHR2YXIgb2Zmc2V0ID0gJCgnLnNlYXJjaC1wYW5lbCcpLm91dGVySGVpZ2h0KCkgKyAkKCcuc2VhcmNoLWJ0bi1kaXYnKS5vdXRlckhlaWdodCgpICsgJCgnLnRvdGFsLW51bWJlci1kaXYnKS5vdXRlckhlaWdodCgpICsgJCgnLmdyaWQtdG9wLWJvcmRlcicpLm91dGVySGVpZ2h0KCkgKyAkKCcuZ3JpZC1ib3R0b20tYm9yZGVyJykub3V0ZXJIZWlnaHQoKSArICQoJy5zZWFyY2gtcGFuZWwtdGFiLWJhcicpLm91dGVySGVpZ2h0KCkgKyAkKCcuY29weXJpZ2h0LWNvbnRhaW5lcicpLm91dGVySGVpZ2h0KCk7XG5cdFx0XHQvLyBcdFx0XHRcdHZhciBoZWlnaHQgPSBwYXJzZUludCgkKCcjY29udGVudENvbnRhaW5lcicpLmhlaWdodCgpIC0gb2Zmc2V0KTtcblx0XHRcdC8vIFx0XHRcdFx0aWYgKCBoZWlnaHQgIT0gcmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuZ3JpZC5nZXRHcmlkSGVpZ2h0KCkgKSB7XG5cdFx0XHQvLyBcdFx0XHRcdFx0cmVsYXRlZF92aWV3X2NvbnRyb2xsZXIuZ3JpZC5zZXRHcmlkSGVpZ2h0KGhlaWdodCk7XG5cdFx0XHQvLyBcdFx0XHRcdFx0JCgnLmdyaWQtZGl2JykuaGVpZ2h0KCdhdXRvJyk7XG5cdFx0XHQvLyBcdFx0XHRcdH1cblx0XHRcdC8vIFx0XHRcdH1cblx0XHRcdC8vIFx0XHR9LCAxMDAgKTtcblx0XHRcdC8vIFx0fVxuXHRcdFx0Ly8gfVxuXG5cdFx0fSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fTtcblxuXHQkLmZuLlNlYXJjaFBhbmVsLmRlZmF1bHRzID0ge307XG5cdCQuZm4uU2VhcmNoUGFuZWwuaHRtbCA9IHtcblx0XHRmb3JtX2l0ZW06IGA8ZGl2IGNsYXNzPVwiZm9ybS1pdGVtLWRpdlwiPjxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLWxhYmVsXCI+PC9zcGFuPjxkaXYgY2xhc3M9XCJmb3JtLWl0ZW0taW5wdXQtZGl2XCI+PC9kaXY+PC9kaXY+YCxcblx0XHRzZWFyY2hfcGFuZWw6IGBcblx0XHRcdDxkaXYgY2xhc3M9XCJzZWFyY2gtcGFuZWxcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvaHRtbFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2VhcmNoLXBhbmVsLXRhYi1iYXJcIiBpZD1cInNlYXJjaF9wYW5lbF90YWJfYmFyXCI+XG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwic2VhcmNoLXBhbmVsLXRhYi1iYXItbGFiZWxcIj5cblx0XHRcdFx0XHRcdDxsaT48YSByZWY9XCJiYXNpY19zZWFyY2hcIiBocmVmPVwiI2Jhc2ljX3NlYXJjaFwiPjwvYT48L2xpPlxuXHRcdFx0XHRcdFx0PGxpPjxhIHJlZj1cImFkdl9zZWFyY2hcIiBocmVmPVwiI2Fkdl9zZWFyY2hcIj48L2E+PC9saT5cblx0XHRcdFx0XHRcdDxsaT48YSByZWY9XCJzYXZlZF9sYXlvdXRcIiBocmVmPVwiI3NhdmVkX2xheW91dFwiPjwvYT48L2xpPlxuXHRcdFx0XHRcdDwvdWw+XG5cdFx0XHRcdFx0PGRpdiBpZD1cImJhc2ljX3NlYXJjaFwiIGNsYXNzPVwic2VhcmNoLXBhbmVsLXRhYi1vdXRzaWRlIHNlYXJjaC1wYW5lbC10YWItb3V0c2lkZS1jb2xsYXBzZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNlYXJjaC1wYW5lbC10YWIgc2VhcmNoLXBhbmVsLXRhYi1jb2xsYXBzZVwiIGlkPVwiYmFzaWNfc2VhcmNoX2NvbnRlbnRfZGl2XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmaXJzdC1jb2x1bW5cIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZC1jb2x1bW5cIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRoaXJkLWNvbHVtblwiPjwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBpZD1cImFkdl9zZWFyY2hcIiBjbGFzcz1cInNlYXJjaC1wYW5lbC10YWItb3V0c2lkZSBzZWFyY2gtcGFuZWwtdGFiLW91dHNpZGUtY29sbGFwc2VcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzZWFyY2gtcGFuZWwtdGFiIHNlYXJjaC1wYW5lbC10YWItY29sbGFwc2VcIiBpZD1cImFkdl9zZWFyY2hfY29udGVudF9kaXZcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZpcnN0LWNvbHVtblwiPjwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2Vjb25kLWNvbHVtblwiPjwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGhpcmQtY29sdW1uXCI+PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGlkPVwic2F2ZWRfbGF5b3V0XCIgY2xhc3M9XCJzZWFyY2gtcGFuZWwtdGFiLW91dHNpZGUgc2VhcmNoLXBhbmVsLXRhYi1vdXRzaWRlLWNvbGxhcHNlXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2VhcmNoLXBhbmVsLXRhYiBzZWFyY2gtcGFuZWwtdGFiLWNvbGxhcHNlXCIgaWQ9XCJzYXZlZF9sYXlvdXRfY29udGVudF9kaXZcIj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGJ1dHRvbiBpZD1cImNvbGxhcHNlQnRuXCIgY2xhc3M9XCJjb2xsYXBzZS1idG4gcGkgcGktY2hldnJvbi1kb3duXCI+PC9idXR0b24+XG5cdFx0XHRcdDxzcGFuIGlkPVwicmVmcmVzaEJ0blwiIGNsYXNzPVwidHRpY29uIHR0aWNvbi1yZWZyZXNoX2JsYWNrXzI0ZHAgcmVmcmVzaC1idG5cIj48L3NwYW4+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJsYXlvdXQtc2VsZWN0b3ItZGl2XCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjdXJyZW50LXZpZXctbGFiZWxcIj48L3NwYW4+XG5cdFx0XHRcdFx0PHNlbGVjdCBpZD1cImxheW91dF9zZWxlY3RvclwiIGNsYXNzPVwidC1zZWxlY3QgbGF5b3V0LXNlbGVjdG9yXCI+XG5cdFx0XHRcdFx0PC9zZWxlY3Q+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2VhcmNoLWJ0bi1kaXZcIj5cblx0XHRcdFx0XHQ8YnV0dG9uIGlkPVwic2VhcmNoQnRuXCIgY2xhc3M9XCJ0dC1idXR0b24gcC1idXR0b24gcC1jb21wb25lbnRcIiB0eXBlPVwiYnV0dG9uXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInR0aWNvbiB0dGljb24tc2VhcmNoX2JsYWNrXzI0ZHBcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInAtYnV0dG9uLWxhYmVsXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdDxidXR0b24gaWQ9XCJjbGVhclNlYXJjaEJ0blwiIGNsYXNzPVwidHQtYnV0dG9uIHAtYnV0dG9uIHAtY29tcG9uZW50XCIgdHlwZT1cImJ1dHRvblwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ0dGljb24gdHRpY29uLWNhbmNlbF9ibGFja18yNGRwXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJwLWJ1dHRvbi1sYWJlbFwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRgXG5cdH07XG5cbn0gKSggalF1ZXJ5ICk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4057\n")}}]);