TimeTrex/interface/html5/dist/reports-saved_report-SavedReportViewController.bundle.js

1 line
41 KiB
JavaScript

"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["reports-saved_report-SavedReportViewController"],{9372:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SavedReportViewController\": () => (/* binding */ SavedReportViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass SavedReportViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#saved_report_view_container',\n\n\t\t\t//Issue #1187 - Many of these variables are needed when this view is rendered as a sub view\n\t\t\t//in that case, init() will not be run so those variables need to be defined at load time instead.\n\n\t\t\tsub_report_schedule_view_controller: null,\n\t\t\tedit_view_tpl: 'SavedReportEditView.html',\n\t\t\tpermission_id: 'report',\n\t\t\tviewId: 'SavedReport',\n\t\t\tscript_name: 'UserReportDataView',\n\t\t\ttable_name_key: 'user_report_data',\n\t\t\tcontext_menu_name: $.i18n._( 'Reports' ),\n\t\t\tnavigation_label: $.i18n._( 'Saved Report' ),\n\n\t\t\tapi: TTAPI.APIUserReportData\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinit( options ) {\n\n\t\tthis.render();\n\t\tif ( this.sub_view_mode ) {\n\t\t\tthis.buildContextMenu( true );\n\n\t\t\t//call init data in parent view, don't call initData\n\t\t} else {\n\t\t\tthis.buildContextMenu();\n\t\t\tif ( !this.sub_view_mode ) {\n\t\t\t\tthis.initData();\n\t\t\t}\n\t\t}\n\t}\n\n\tonDeleteResult( result, remove_ids ) {\n\t\tvar $this = this;\n\t\tProgressBar.closeOverlay();\n\n\t\tif ( result.isValid() ) {\n\t\t\t$this.search();\n\t\t\t$this.onDeleteDone( result );\n\n\t\t\tif ( $this.edit_view ) {\n\t\t\t\t$this.removeEditView();\n\t\t\t} else {\n\t\t\t\t$this.setCurrentEditViewState( '' );\n\t\t\t}\n\n\t\t\tif ( this.sub_view_mode && this.parent_view_controller ) {\n\t\t\t\tthis.parent_view_controller.onSavedReportDelete();\n\t\t\t}\n\n\t\t} else {\n\t\t\t$this.revertEditViewState();\n\t\t\tTAlertManager.showErrorAlert( result );\n\t\t}\n\t}\n\n\tonCustomContextClick( id ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'share_report':\n\n\t\t\t\tif ( Global.getProductEdition() >= 15 ) {\n\t\t\t\t\tvar default_data = [];\n\t\t\t\t\tif ( this.edit_view && this.current_edit_record.id ) {\n\t\t\t\t\t\tdefault_data.push( this.current_edit_record.id );\n\t\t\t\t\t} else if ( !this.edit_view ) {\n\t\t\t\t\t\tdefault_data = this.getGridSelectIdArray();\n\t\t\t\t\t}\n\t\t\t\t\tIndexViewController.openWizard( 'ShareReportWizard', default_data );\n\t\t\t\t} else {\n\t\t\t\t\tTAlertManager.showAlert( Global.getUpgradeMessage() );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonGridDblClickRow() {\n\t\tProgressBar.showOverlay();\n\n\t\tif ( this.sub_view_mode ) {\n\t\t\tthis.onEditClick();\n\t\t} else {\n\t\t\tthis.onViewClick();\n\t\t}\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\tgroups: {\n\t\t\t\tshare: {\n\t\t\t\t\tlabel: $.i18n._( 'Share' ),\n\t\t\t\t\tid: this.viewId + 'Share'\n\t\t\t\t}\n\t\t\t},\n\t\t\texclude: ['default'],\n\t\t\tinclude: [\n\t\t\t\t'edit',\n\t\t\t\t'delete_icon',\n\t\t\t\t'delete_and_next',\n\t\t\t\t'save',\n\t\t\t\t'save_and_continue',\n\t\t\t\t'save_and_next',\n\t\t\t\t'cancel',\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Share Report' ),\n\t\t\t\t\tid: 'share_report',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\tvue_icon: 'tticon tticon-share_black_24dp',\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tif ( !this.sub_view_mode ) {\n\t\t\tcontext_menu_model.include.unshift( {\n\t\t\t\tlabel: $.i18n._( 'Report' ),\n\t\t\t\tid: 'view',\n\t\t\t\tgroup: 'editor',\n\t\t\t\tvue_icon: 'tticon tticon-visibility_black_24dp',\n\t\t\t} );\n\t\t}\n\n\t\treturn context_menu_model;\n\t}\n\n\tremoveEditView() {\n\n\t\tsuper.removeEditView();\n\t\tthis.sub_report_schedule_view_controller = null;\n\t}\n\n\tgetGridSetup() {\n\t\tvar $this = this;\n\n\t\tvar grid_setup = {\n\t\t\tcontainer_selector: this.sub_view_mode ? '#tab_saved_reports' : '.view', //tab4 = Saved Report tab.\n\t\t\tsub_grid_mode: this.sub_view_mode,\n\t\t\tonSelectRow: function() {\n\t\t\t\t$this.onGridSelectRow();\n\t\t\t},\n\t\t\tonCellSelect: function() {\n\t\t\t\t$this.onGridSelectRow();\n\t\t\t},\n\t\t\tonSelectAll: function() {\n\t\t\t\t$this.onGridSelectAll();\n\t\t\t},\n\t\t\tondblClickRow: function( e ) {\n\t\t\t\t$this.onGridDblClickRow( e );\n\t\t\t},\n\t\t\tonRightClickRow: function( rowId ) {\n\t\t\t\tvar id_array = $this.getGridSelectIdArray();\n\t\t\t\tif ( id_array.indexOf( rowId ) < 0 ) {\n\t\t\t\t\t$this.grid.grid.resetSelection();\n\t\t\t\t\t$this.grid.grid.setSelection( rowId );\n\t\t\t\t\t$this.onGridSelectRow();\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\t//Only use custom grid sizing when in sub_view_mode, since we need to use the BaseViewController grid sizing otherwise.\n\t\tif ( this.sub_view_mode ) {\n\t\t\tgrid_setup.setGridSize = function() {\n\t\t\t\tif ( $this.sub_view_mode ) {\n\t\t\t\t\t$this.baseViewSubTabGridResize( '#tab_saved_reports' );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tgrid_setup.onResizeGrid = function() {\n\t\t\t\tif ( $this.sub_view_mode ) {\n\t\t\t\t\t$this.baseViewSubTabGridResize( '#tab_saved_reports' );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\treturn grid_setup;\n\t}\n\n\tonViewClick( edit_record, noRefreshUI ) {\n\t\tvar grid_selected_id_array = this.getGridSelectIdArray();\n\t\tvar id = grid_selected_id_array[0];\n\n\t\tvar record = this.getRecordFromGridById( id );\n\t\tif ( record && record.script ) {\n\t\t\tvar report_name = record.script; //Must use 'script' instead of 'script_name' so it doesn't change with different languages.\n\n\t\t\tLocalCacheData.current_doing_context_action = 'view';\n\t\t\tLocalCacheData.default_edit_id_for_next_open_edit_view = id;\n\n\t\t\tswitch ( report_name ) {\n\t\t\t\tcase 'AccrualBalanceSummaryReport':\n\t\t\t\tcase 'ActiveShiftReport':\n\t\t\t\tcase 'AuditTrailReport':\n\t\t\t\tcase 'Form1099NecReport':\n\t\t\t\tcase 'Form940Report':\n\t\t\t\tcase 'Form941Report':\n\t\t\t\tcase 'FormW2Report':\n\t\t\t\tcase 'GeneralLedgerSummaryReport':\n\t\t\t\tcase 'InvoiceTransactionSummaryReport':\n\t\t\t\tcase 'JobInformationReport':\n\t\t\t\tcase 'JobItemInformationReport':\n\t\t\t\tcase 'JobSummaryReport':\n\t\t\t\tcase 'KPIReport':\n\t\t\t\tcase 'PayrollExportReport':\n\t\t\t\tcase 'PayStubTransactionSummaryReport':\n\t\t\t\tcase 'PayStubSummaryReport':\n\t\t\t\tcase 'PunchSummaryReport':\n\t\t\t\tcase 'RemittanceSummaryReport':\n\t\t\t\tcase 'ScheduleSummaryReport':\n\t\t\t\tcase 'T4ASummaryReport':\n\t\t\t\tcase 'T4SummaryReport':\n\t\t\t\tcase 'TaxSummaryReport':\n\t\t\t\tcase 'TimesheetDetailReport':\n\t\t\t\tcase 'TimesheetSummaryReport':\n\t\t\t\tcase 'UserQualificationReport':\n\t\t\t\tcase 'UserRecruitmentDetailReport':\n\t\t\t\tcase 'UserRecruitmentSummaryReport':\n\t\t\t\tcase 'UserSummaryReport':\n\t\t\t\t\t//Leave report_name alone, as it should match exactly.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UserExpenseReport':\n\t\t\t\t\treport_name = 'ExpenseSummaryReport';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExceptionReport':\n\t\t\t\t\treport_name = 'ExceptionSummaryReport';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'JobDetailReport':\n\t\t\t\t\treport_name = 'JobAnalysisReport';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'AffordableCareReport':\n\t\t\t\t\tif ( Global.getProductEdition() == 10 ) {\n\t\t\t\t\t\tTAlertManager.showAlert( Global.getUpgradeMessage() );\n\t\t\t\t\t\treport_name = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tProgressBar.closeOverlay();\n\t\t\t\t\tDebug.Text( 'ERROR: Saved Report name not defined: ' + report_name, 'SavedReportViewController.js', '', 'onViewClick', 10 );\n\t\t\t\t\treport_name = null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif ( Global.isSet( report_name ) && report_name ) {\n\t\t\t\tIndexViewController.openReport( this, report_name );\n\t\t\t}\n\t\t}\n\t}\n\n\tbuildEditViewUI() {\n\n\t\tsuper.buildEditViewUI();\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_report': { 'label': $.i18n._( 'Report' ) },\n\t\t\t'tab_schedule': {\n\t\t\t\t'label': $.i18n._( 'Schedule' ),\n\t\t\t\t'init_callback': 'initSubReportScheduleView',\n\t\t\t\t'show_permission_div': true\n\t\t\t},\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tif ( !this.edit_only_mode ) {\n\t\t\tthis.navigation.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIUserReportData,\n\t\t\t\tid: this.script_name + '_navigation',\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_user_report_data',\n\t\t\t\tnavigation_mode: true,\n\t\t\t\tshow_search_inputs: true\n\t\t\t} );\n\n\t\t\tthis.setNavigation();\n\n\t\t}\n\n\t\t//Tab 0 start\n\n\t\tvar tab_report = this.edit_view_tab.find( '#tab_report' );\n\n\t\tvar tab_report_column1 = tab_report.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_report_column1 );\n\n\t\t// Name\n\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'name', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Name' ), form_item_input, tab_report_column1, '' );\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Default\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\n\t\tform_item_input.TCheckbox( { field: 'is_default' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Default' ), form_item_input, tab_report_column1 );\n\n\t\t// Description\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\n\t\tform_item_input.TTextInput( { field: 'description', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_report_column1, '', null, null, true );\n\n\t\tform_item_input.parent().width( '45%' );\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\t\tthis.search_fields = [\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'name',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Description' ),\n\t\t\t\tfield: 'description',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tin_column: 1,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Created By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'created_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tscript_name: 'EmployeeView',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Updated By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'updated_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tscript_name: 'EmployeeView',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\n\t\t];\n\t}\n\n\tinitSubReportScheduleView() {\n\t\tvar $this = this;\n\n\t\tif ( !this.current_edit_record.id ) {\n\t\t\tTTPromise.resolve( 'BaseViewController', 'onTabShow' ); //Since search() isn't called in this case, and we just display the \"Please Save This Record ...\" message, resolve the promise.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( Global.getProductEdition() >= 15 ) {\n\t\t\tif ( this.sub_report_schedule_view_controller ) {\n\t\t\t\tthis.sub_report_schedule_view_controller.buildContextMenu( true );\n\t\t\t\tthis.sub_report_schedule_view_controller.setDefaultMenu();\n\t\t\t\t$this.sub_report_schedule_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t\t$this.sub_report_schedule_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t\t$this.sub_report_schedule_view_controller.initData(); //Init data in this parent view\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tGlobal.loadViewSource( 'ReportSchedule', 'ReportScheduleViewController.js', function() {\n\t\t\t\tvar tab = $this.edit_view_tab.find( '#tab_schedule' );\n\n\t\t\t\tvar firstColumn = tab.find( '.first-column-sub-view' );\n\n\t\t\t\tTTPromise.add( 'initSubReportScheduleView', 'init' );\n\t\t\t\tTTPromise.wait( 'initSubReportScheduleView', 'init', function() {\n\t\t\t\t\tfirstColumn.css( 'opacity', '1' );\n\t\t\t\t} );\n\n\t\t\t\tfirstColumn.css( 'opacity', '0' ); //Hide the grid while its loading/sizing.\n\n\t\t\t\tGlobal.trackView( 'Sub' + 'ReportSchedule' + 'View' );\n\t\t\t\tReportScheduleViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.edit_view_tab.find( '#tab_schedule' ).find( '.first-column-sub-view' ).css( 'display', 'none' );\n\t\t\tthis.edit_view.find( '.permission-defined-div' ).css( 'display', 'block' );\n\t\t\tthis.edit_view.find( '.permission-message' ).html( Global.getUpgradeMessage() );\n\t\t\tthis.edit_view.find( '.save-and-continue-button-div' ).css( 'display', 'none' );\n\t\t}\n\n\t\tfunction beforeLoadView() {\n\n\t\t}\n\n\t\tfunction afterLoadView( subViewController ) {\n\t\t\t$this.sub_report_schedule_view_controller = subViewController;\n\t\t\t$this.sub_report_schedule_view_controller.parent_key = 'user_report_data_id';\n\t\t\t$this.sub_report_schedule_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_report_schedule_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_report_schedule_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_report_schedule_view_controller.sub_view_mode = true;\n\n\t\t\t$this.sub_report_schedule_view_controller.initData(); //Init data in this parent view\n\t\t}\n\t}\n\n\tuniformVariable( records ) {\n\n\t\t// Remove in next commit, related to #2698 fix, no longer needed but semi-big refactor to remove\n\t\t// if ( records.hasOwnProperty( 'data' ) && records.data.hasOwnProperty( 'config' ) && records.data.config.hasOwnProperty( 'filter' ) ) {\n\t\t// \trecords.data.config.filter_ = records.data.config.filter;\n\t\t// }\n\n\t\treturn records;\n\t}\n\n\tonSaveDone( result ) {\n\t\t//onSaveDoneCallback is set in Report controller\n\t\tif ( this.parent_view_controller && this.parent_view_controller.onSaveDoneCallback ) {\n\t\t\tthis.parent_view_controller.onSaveDoneCallback( result, this.current_edit_record );\n\t\t}\n\t}\n\n\tonSaveAndContinueDone( result ) {\n\t\tthis.onSaveDone( result );\n\t}\n\n\tonSaveAndNextDone( result ) {\n\t\tthis.onSaveDone( result );\n\t}\n\n\tgetFilterColumnsFromDisplayColumns() {\n\t\tvar column_filter = {};\n\t\tcolumn_filter.id = true;\n\t\tcolumn_filter.is_owner = true;\n\t\tcolumn_filter.is_child = true;\n\t\tcolumn_filter.script = true; //Include script column so onViewClick() knows which view to open for saved reports.\n\n\t\t// Error: Unable to get property 'getGridParam' of undefined or null reference\n\t\tvar display_columns = [];\n\t\tif ( this.grid ) {\n\t\t\tdisplay_columns = this.grid.getGridParam( 'colModel' );\n\t\t}\n\n\t\tif ( display_columns ) {\n\t\t\tvar len = display_columns.length;\n\n\t\t\tfor ( var i = 0; i < len; i++ ) {\n\t\t\t\tvar column_info = display_columns[i];\n\t\t\t\tcolumn_filter[column_info.name] = true;\n\t\t\t}\n\t\t}\n\n\t\treturn column_filter;\n\t}\n\n\tonAddClick( reportData ) {\n\n\t\tProgressBar.closeOverlay();\n\t\tvar $this = this;\n\t\tthis.setCurrentEditViewState( 'new' );\n\t\t$this.openEditView();\n\t\t$this.current_edit_record = reportData;\n\t\t$this.initEditView();\n\t}\n\n\tsearchDone() {\n\t\t$( 'window' ).trigger( 'resize' );\n\t\tif ( this.sub_view_mode ) {\n\t\t\tTTPromise.resolve( 'SubSavedReportView', 'init' );\n\t\t}\n\t\tsuper.searchDone();\n\t}\n}\n\nSavedReportViewController.loadSubView = function( container, beforeViewLoadedFun, afterViewLoadedFun ) {\n\n\tGlobal.loadViewSource( 'SavedReport', 'SubSavedReportView.html', function( result ) {\n\n\t\tvar args = {};\n\t\tvar template = _.template( result );\n\n\t\tif ( Global.isSet( beforeViewLoadedFun ) ) {\n\t\t\tbeforeViewLoadedFun();\n\t\t}\n\n\t\tif ( Global.isSet( container ) ) {\n\t\t\tcontainer.html( template( args ) );\n\t\t\tif ( Global.isSet( afterViewLoadedFun ) ) {\n\t\t\t\tTTPromise.wait( 'BaseViewController', 'initialize', function() {\n\t\t\t\t\tafterViewLoadedFun( window.sub_saved_report_view_controller );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM3Mi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQLDJCQUEyQjtBQUMzQixFQUFFLENBQUM7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixDQUFDO0FBQ3ZCLHFCQUFxQixDQUFDOztBQUV0QjtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsU0FBUyxDQUFDLHFCQUFxQjtBQUNsRDtBQUNBLGFBQWEsQ0FBQztBQUNkO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdDQUFnQywrQkFBK0I7QUFDL0QsNkJBQTZCLENBQUM7QUFDOUI7O0FBRUE7O0FBRUE7O0FBRUEsK0JBQStCLHNCQUFzQjtBQUNyRCw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7O0FBRUEsZ0NBQWdDLHNDQUFzQztBQUN0RSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU4sdUNBQXVDOztBQUV2QztBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlEQUF5RDtBQUN6RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLENBQUM7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxpQkFBaUIsQ0FBQzs7QUFFbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUEsR0FBRzs7QUFFSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2ludGVyZmFjZS9odG1sNS92aWV3cy9yZXBvcnRzL3NhdmVkX3JlcG9ydC9TYXZlZFJlcG9ydFZpZXdDb250cm9sbGVyLmpzPzhlMmYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFNhdmVkUmVwb3J0Vmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlVmlld0NvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3Rvciggb3B0aW9ucyA9IHt9ICkge1xuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGVsOiAnI3NhdmVkX3JlcG9ydF92aWV3X2NvbnRhaW5lcicsXG5cblx0XHRcdC8vSXNzdWUgIzExODcgLSBNYW55IG9mIHRoZXNlIHZhcmlhYmxlcyBhcmUgbmVlZGVkIHdoZW4gdGhpcyB2aWV3IGlzIHJlbmRlcmVkIGFzIGEgc3ViIHZpZXdcblx0XHRcdC8vaW4gdGhhdCBjYXNlLCBpbml0KCkgd2lsbCBub3QgYmUgcnVuIHNvIHRob3NlIHZhcmlhYmxlcyBuZWVkIHRvIGJlIGRlZmluZWQgYXQgbG9hZCB0aW1lIGluc3RlYWQuXG5cblx0XHRcdHN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyOiBudWxsLFxuXHRcdFx0ZWRpdF92aWV3X3RwbDogJ1NhdmVkUmVwb3J0RWRpdFZpZXcuaHRtbCcsXG5cdFx0XHRwZXJtaXNzaW9uX2lkOiAncmVwb3J0Jyxcblx0XHRcdHZpZXdJZDogJ1NhdmVkUmVwb3J0Jyxcblx0XHRcdHNjcmlwdF9uYW1lOiAnVXNlclJlcG9ydERhdGFWaWV3Jyxcblx0XHRcdHRhYmxlX25hbWVfa2V5OiAndXNlcl9yZXBvcnRfZGF0YScsXG5cdFx0XHRjb250ZXh0X21lbnVfbmFtZTogJC5pMThuLl8oICdSZXBvcnRzJyApLFxuXHRcdFx0bmF2aWdhdGlvbl9sYWJlbDogJC5pMThuLl8oICdTYXZlZCBSZXBvcnQnICksXG5cblx0XHRcdGFwaTogVFRBUEkuQVBJVXNlclJlcG9ydERhdGFcblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdCggb3B0aW9ucyApIHtcblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0aWYgKCB0aGlzLnN1Yl92aWV3X21vZGUgKSB7XG5cdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoIHRydWUgKTtcblxuXHRcdFx0Ly9jYWxsIGluaXQgZGF0YSBpbiBwYXJlbnQgdmlldywgZG9uJ3QgY2FsbCBpbml0RGF0YVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHRcdGlmICggIXRoaXMuc3ViX3ZpZXdfbW9kZSApIHtcblx0XHRcdFx0dGhpcy5pbml0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uRGVsZXRlUmVzdWx0KCByZXN1bHQsIHJlbW92ZV9pZHMgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRQcm9ncmVzc0Jhci5jbG9zZU92ZXJsYXkoKTtcblxuXHRcdGlmICggcmVzdWx0LmlzVmFsaWQoKSApIHtcblx0XHRcdCR0aGlzLnNlYXJjaCgpO1xuXHRcdFx0JHRoaXMub25EZWxldGVEb25lKCByZXN1bHQgKTtcblxuXHRcdFx0aWYgKCAkdGhpcy5lZGl0X3ZpZXcgKSB7XG5cdFx0XHRcdCR0aGlzLnJlbW92ZUVkaXRWaWV3KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkdGhpcy5zZXRDdXJyZW50RWRpdFZpZXdTdGF0ZSggJycgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLnN1Yl92aWV3X21vZGUgJiYgdGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudF92aWV3X2NvbnRyb2xsZXIub25TYXZlZFJlcG9ydERlbGV0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblx0XHRcdCR0aGlzLnJldmVydEVkaXRWaWV3U3RhdGUoKTtcblx0XHRcdFRBbGVydE1hbmFnZXIuc2hvd0Vycm9yQWxlcnQoIHJlc3VsdCApO1xuXHRcdH1cblx0fVxuXG5cdG9uQ3VzdG9tQ29udGV4dENsaWNrKCBpZCApIHtcblx0XHRzd2l0Y2ggKCBpZCApIHtcblx0XHRcdGNhc2UgJ3NoYXJlX3JlcG9ydCc6XG5cblx0XHRcdFx0aWYgKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAxNSApIHtcblx0XHRcdFx0XHR2YXIgZGVmYXVsdF9kYXRhID0gW107XG5cdFx0XHRcdFx0aWYgKCB0aGlzLmVkaXRfdmlldyAmJiB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRcdFx0XHRkZWZhdWx0X2RhdGEucHVzaCggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIXRoaXMuZWRpdF92aWV3ICkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdF9kYXRhID0gdGhpcy5nZXRHcmlkU2VsZWN0SWRBcnJheSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLm9wZW5XaXphcmQoICdTaGFyZVJlcG9ydFdpemFyZCcsIGRlZmF1bHRfZGF0YSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFRBbGVydE1hbmFnZXIuc2hvd0FsZXJ0KCBHbG9iYWwuZ2V0VXBncmFkZU1lc3NhZ2UoKSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0b25HcmlkRGJsQ2xpY2tSb3coKSB7XG5cdFx0UHJvZ3Jlc3NCYXIuc2hvd092ZXJsYXkoKTtcblxuXHRcdGlmICggdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0dGhpcy5vbkVkaXRDbGljaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uVmlld0NsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q3VzdG9tQ29udGV4dE1lbnVNb2RlbCgpIHtcblx0XHR2YXIgY29udGV4dF9tZW51X21vZGVsID0ge1xuXHRcdFx0Z3JvdXBzOiB7XG5cdFx0XHRcdHNoYXJlOiB7XG5cdFx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnU2hhcmUnICksXG5cdFx0XHRcdFx0aWQ6IHRoaXMudmlld0lkICsgJ1NoYXJlJ1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZXhjbHVkZTogWydkZWZhdWx0J10sXG5cdFx0XHRpbmNsdWRlOiBbXG5cdFx0XHRcdCdlZGl0Jyxcblx0XHRcdFx0J2RlbGV0ZV9pY29uJyxcblx0XHRcdFx0J2RlbGV0ZV9hbmRfbmV4dCcsXG5cdFx0XHRcdCdzYXZlJyxcblx0XHRcdFx0J3NhdmVfYW5kX2NvbnRpbnVlJyxcblx0XHRcdFx0J3NhdmVfYW5kX25leHQnLFxuXHRcdFx0XHQnY2FuY2VsJyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1NoYXJlIFJlcG9ydCcgKSxcblx0XHRcdFx0XHRpZDogJ3NoYXJlX3JlcG9ydCcsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHR2dWVfaWNvbjogJ3R0aWNvbiB0dGljb24tc2hhcmVfYmxhY2tfMjRkcCcsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0aWYgKCAhdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0Y29udGV4dF9tZW51X21vZGVsLmluY2x1ZGUudW5zaGlmdCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdSZXBvcnQnICksXG5cdFx0XHRcdGlkOiAndmlldycsXG5cdFx0XHRcdGdyb3VwOiAnZWRpdG9yJyxcblx0XHRcdFx0dnVlX2ljb246ICd0dGljb24gdHRpY29uLXZpc2liaWxpdHlfYmxhY2tfMjRkcCcsXG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRleHRfbWVudV9tb2RlbDtcblx0fVxuXG5cdHJlbW92ZUVkaXRWaWV3KCkge1xuXG5cdFx0c3VwZXIucmVtb3ZlRWRpdFZpZXcoKTtcblx0XHR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0fVxuXG5cdGdldEdyaWRTZXR1cCgpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIGdyaWRfc2V0dXAgPSB7XG5cdFx0XHRjb250YWluZXJfc2VsZWN0b3I6IHRoaXMuc3ViX3ZpZXdfbW9kZSA/ICcjdGFiX3NhdmVkX3JlcG9ydHMnIDogJy52aWV3JywgLy90YWI0ID0gU2F2ZWQgUmVwb3J0IHRhYi5cblx0XHRcdHN1Yl9ncmlkX21vZGU6IHRoaXMuc3ViX3ZpZXdfbW9kZSxcblx0XHRcdG9uU2VsZWN0Um93OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0JHRoaXMub25HcmlkU2VsZWN0Um93KCk7XG5cdFx0XHR9LFxuXHRcdFx0b25DZWxsU2VsZWN0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0JHRoaXMub25HcmlkU2VsZWN0Um93KCk7XG5cdFx0XHR9LFxuXHRcdFx0b25TZWxlY3RBbGw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkdGhpcy5vbkdyaWRTZWxlY3RBbGwoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmRibENsaWNrUm93OiBmdW5jdGlvbiggZSApIHtcblx0XHRcdFx0JHRoaXMub25HcmlkRGJsQ2xpY2tSb3coIGUgKTtcblx0XHRcdH0sXG5cdFx0XHRvblJpZ2h0Q2xpY2tSb3c6IGZ1bmN0aW9uKCByb3dJZCApIHtcblx0XHRcdFx0dmFyIGlkX2FycmF5ID0gJHRoaXMuZ2V0R3JpZFNlbGVjdElkQXJyYXkoKTtcblx0XHRcdFx0aWYgKCBpZF9hcnJheS5pbmRleE9mKCByb3dJZCApIDwgMCApIHtcblx0XHRcdFx0XHQkdGhpcy5ncmlkLmdyaWQucmVzZXRTZWxlY3Rpb24oKTtcblx0XHRcdFx0XHQkdGhpcy5ncmlkLmdyaWQuc2V0U2VsZWN0aW9uKCByb3dJZCApO1xuXHRcdFx0XHRcdCR0aGlzLm9uR3JpZFNlbGVjdFJvdygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHQvL09ubHkgdXNlIGN1c3RvbSBncmlkIHNpemluZyB3aGVuIGluIHN1Yl92aWV3X21vZGUsIHNpbmNlIHdlIG5lZWQgdG8gdXNlIHRoZSBCYXNlVmlld0NvbnRyb2xsZXIgZ3JpZCBzaXppbmcgb3RoZXJ3aXNlLlxuXHRcdGlmICggdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0Z3JpZF9zZXR1cC5zZXRHcmlkU2l6ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICR0aGlzLnN1Yl92aWV3X21vZGUgKSB7XG5cdFx0XHRcdFx0JHRoaXMuYmFzZVZpZXdTdWJUYWJHcmlkUmVzaXplKCAnI3RhYl9zYXZlZF9yZXBvcnRzJyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRncmlkX3NldHVwLm9uUmVzaXplR3JpZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICR0aGlzLnN1Yl92aWV3X21vZGUgKSB7XG5cdFx0XHRcdFx0JHRoaXMuYmFzZVZpZXdTdWJUYWJHcmlkUmVzaXplKCAnI3RhYl9zYXZlZF9yZXBvcnRzJyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBncmlkX3NldHVwO1xuXHR9XG5cblx0b25WaWV3Q2xpY2soIGVkaXRfcmVjb3JkLCBub1JlZnJlc2hVSSApIHtcblx0XHR2YXIgZ3JpZF9zZWxlY3RlZF9pZF9hcnJheSA9IHRoaXMuZ2V0R3JpZFNlbGVjdElkQXJyYXkoKTtcblx0XHR2YXIgaWQgPSBncmlkX3NlbGVjdGVkX2lkX2FycmF5WzBdO1xuXG5cdFx0dmFyIHJlY29yZCA9IHRoaXMuZ2V0UmVjb3JkRnJvbUdyaWRCeUlkKCBpZCApO1xuXHRcdGlmICggcmVjb3JkICYmIHJlY29yZC5zY3JpcHQgKSB7XG5cdFx0XHR2YXIgcmVwb3J0X25hbWUgPSByZWNvcmQuc2NyaXB0OyAvL011c3QgdXNlICdzY3JpcHQnIGluc3RlYWQgb2YgJ3NjcmlwdF9uYW1lJyBzbyBpdCBkb2Vzbid0IGNoYW5nZSB3aXRoIGRpZmZlcmVudCBsYW5ndWFnZXMuXG5cblx0XHRcdExvY2FsQ2FjaGVEYXRhLmN1cnJlbnRfZG9pbmdfY29udGV4dF9hY3Rpb24gPSAndmlldyc7XG5cdFx0XHRMb2NhbENhY2hlRGF0YS5kZWZhdWx0X2VkaXRfaWRfZm9yX25leHRfb3Blbl9lZGl0X3ZpZXcgPSBpZDtcblxuXHRcdFx0c3dpdGNoICggcmVwb3J0X25hbWUgKSB7XG5cdFx0XHRcdGNhc2UgJ0FjY3J1YWxCYWxhbmNlU3VtbWFyeVJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ0FjdGl2ZVNoaWZ0UmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnQXVkaXRUcmFpbFJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ0Zvcm0xMDk5TmVjUmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnRm9ybTk0MFJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ0Zvcm05NDFSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdGb3JtVzJSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdHZW5lcmFsTGVkZ2VyU3VtbWFyeVJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ0ludm9pY2VUcmFuc2FjdGlvblN1bW1hcnlSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdKb2JJbmZvcm1hdGlvblJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ0pvYkl0ZW1JbmZvcm1hdGlvblJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ0pvYlN1bW1hcnlSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdLUElSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdQYXlyb2xsRXhwb3J0UmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnUGF5U3R1YlRyYW5zYWN0aW9uU3VtbWFyeVJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ1BheVN0dWJTdW1tYXJ5UmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnUHVuY2hTdW1tYXJ5UmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnUmVtaXR0YW5jZVN1bW1hcnlSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdTY2hlZHVsZVN1bW1hcnlSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdUNEFTdW1tYXJ5UmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnVDRTdW1tYXJ5UmVwb3J0Jzpcblx0XHRcdFx0Y2FzZSAnVGF4U3VtbWFyeVJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ1RpbWVzaGVldERldGFpbFJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ1RpbWVzaGVldFN1bW1hcnlSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdVc2VyUXVhbGlmaWNhdGlvblJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ1VzZXJSZWNydWl0bWVudERldGFpbFJlcG9ydCc6XG5cdFx0XHRcdGNhc2UgJ1VzZXJSZWNydWl0bWVudFN1bW1hcnlSZXBvcnQnOlxuXHRcdFx0XHRjYXNlICdVc2VyU3VtbWFyeVJlcG9ydCc6XG5cdFx0XHRcdFx0Ly9MZWF2ZSByZXBvcnRfbmFtZSBhbG9uZSwgYXMgaXQgc2hvdWxkIG1hdGNoIGV4YWN0bHkuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1VzZXJFeHBlbnNlUmVwb3J0Jzpcblx0XHRcdFx0XHRyZXBvcnRfbmFtZSA9ICdFeHBlbnNlU3VtbWFyeVJlcG9ydCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0V4Y2VwdGlvblJlcG9ydCc6XG5cdFx0XHRcdFx0cmVwb3J0X25hbWUgPSAnRXhjZXB0aW9uU3VtbWFyeVJlcG9ydCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0pvYkRldGFpbFJlcG9ydCc6XG5cdFx0XHRcdFx0cmVwb3J0X25hbWUgPSAnSm9iQW5hbHlzaXNSZXBvcnQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdBZmZvcmRhYmxlQ2FyZVJlcG9ydCc6XG5cdFx0XHRcdFx0aWYgKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA9PSAxMCApIHtcblx0XHRcdFx0XHRcdFRBbGVydE1hbmFnZXIuc2hvd0FsZXJ0KCBHbG9iYWwuZ2V0VXBncmFkZU1lc3NhZ2UoKSApO1xuXHRcdFx0XHRcdFx0cmVwb3J0X25hbWUgPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRQcm9ncmVzc0Jhci5jbG9zZU92ZXJsYXkoKTtcblx0XHRcdFx0XHREZWJ1Zy5UZXh0KCAnRVJST1I6IFNhdmVkIFJlcG9ydCBuYW1lIG5vdCBkZWZpbmVkOiAnICsgcmVwb3J0X25hbWUsICdTYXZlZFJlcG9ydFZpZXdDb250cm9sbGVyLmpzJywgJycsICdvblZpZXdDbGljaycsIDEwICk7XG5cdFx0XHRcdFx0cmVwb3J0X25hbWUgPSBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggcmVwb3J0X25hbWUgKSAmJiByZXBvcnRfbmFtZSApIHtcblx0XHRcdFx0SW5kZXhWaWV3Q29udHJvbGxlci5vcGVuUmVwb3J0KCB0aGlzLCByZXBvcnRfbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGJ1aWxkRWRpdFZpZXdVSSgpIHtcblxuXHRcdHN1cGVyLmJ1aWxkRWRpdFZpZXdVSSgpO1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgdGFiX21vZGVsID0ge1xuXHRcdFx0J3RhYl9yZXBvcnQnOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnUmVwb3J0JyApIH0sXG5cdFx0XHQndGFiX3NjaGVkdWxlJzoge1xuXHRcdFx0XHQnbGFiZWwnOiAkLmkxOG4uXyggJ1NjaGVkdWxlJyApLFxuXHRcdFx0XHQnaW5pdF9jYWxsYmFjayc6ICdpbml0U3ViUmVwb3J0U2NoZWR1bGVWaWV3Jyxcblx0XHRcdFx0J3Nob3dfcGVybWlzc2lvbl9kaXYnOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdGlmICggIXRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRpb24uQUNvbWJvQm94KCB7XG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlclJlcG9ydERhdGEsXG5cdFx0XHRcdGlkOiB0aGlzLnNjcmlwdF9uYW1lICsgJ19uYXZpZ2F0aW9uJyxcblx0XHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcl9yZXBvcnRfZGF0YScsXG5cdFx0XHRcdG5hdmlnYXRpb25fbW9kZTogdHJ1ZSxcblx0XHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlXG5cdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuc2V0TmF2aWdhdGlvbigpO1xuXG5cdFx0fVxuXG5cdFx0Ly9UYWIgMCBzdGFydFxuXG5cdFx0dmFyIHRhYl9yZXBvcnQgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcmVwb3J0JyApO1xuXG5cdFx0dmFyIHRhYl9yZXBvcnRfY29sdW1uMSA9IHRhYl9yZXBvcnQuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdID0gW107XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdLnB1c2goIHRhYl9yZXBvcnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gTmFtZVxuXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICduYW1lJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdOYW1lJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9yZXBvcnRfY29sdW1uMSwgJycgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQucGFyZW50KCkud2lkdGgoICc0NSUnICk7XG5cblx0XHQvLyBEZWZhdWx0XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVENoZWNrYm94KCB7IGZpZWxkOiAnaXNfZGVmYXVsdCcgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVmYXVsdCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcmVwb3J0X2NvbHVtbjEgKTtcblxuXHRcdC8vIERlc2NyaXB0aW9uXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfQVJFQSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdkZXNjcmlwdGlvbicsIHdpZHRoOiAnMTAwJScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVzY3JpcHRpb24nICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3JlcG9ydF9jb2x1bW4xLCAnJywgbnVsbCwgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LnBhcmVudCgpLndpZHRoKCAnNDUlJyApO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hGaWVsZHMoKSB7XG5cblx0XHRzdXBlci5idWlsZFNlYXJjaEZpZWxkcygpO1xuXHRcdHRoaXMuc2VhcmNoX2ZpZWxkcyA9IFtcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdOYW1lJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnbmFtZScsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdEZXNjcmlwdGlvbicgKSxcblx0XHRcdFx0ZmllbGQ6ICdkZXNjcmlwdGlvbicsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ3JlYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2NyZWF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0c2NyaXB0X25hbWU6ICdFbXBsb3llZVZpZXcnLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVXBkYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3VwZGF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0c2NyaXB0X25hbWU6ICdFbXBsb3llZVZpZXcnLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9IClcblxuXHRcdF07XG5cdH1cblxuXHRpbml0U3ViUmVwb3J0U2NoZWR1bGVWaWV3KCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHRpZiAoICF0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRUVFByb21pc2UucmVzb2x2ZSggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdvblRhYlNob3cnICk7IC8vU2luY2Ugc2VhcmNoKCkgaXNuJ3QgY2FsbGVkIGluIHRoaXMgY2FzZSwgYW5kIHdlIGp1c3QgZGlzcGxheSB0aGUgXCJQbGVhc2UgU2F2ZSBUaGlzIFJlY29yZCAuLi5cIiBtZXNzYWdlLCByZXNvbHZlIHRoZSBwcm9taXNlLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMTUgKSB7XG5cdFx0XHRpZiAoIHRoaXMuc3ViX3JlcG9ydF9zY2hlZHVsZV92aWV3X2NvbnRyb2xsZXIgKSB7XG5cdFx0XHRcdHRoaXMuc3ViX3JlcG9ydF9zY2hlZHVsZV92aWV3X2NvbnRyb2xsZXIuYnVpbGRDb250ZXh0TWVudSggdHJ1ZSApO1xuXHRcdFx0XHR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyLnNldERlZmF1bHRNZW51KCk7XG5cdFx0XHRcdCR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHRcdCR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHRcdCR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyLmluaXREYXRhKCk7IC8vSW5pdCBkYXRhIGluIHRoaXMgcGFyZW50IHZpZXdcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRHbG9iYWwubG9hZFZpZXdTb3VyY2UoICdSZXBvcnRTY2hlZHVsZScsICdSZXBvcnRTY2hlZHVsZVZpZXdDb250cm9sbGVyLmpzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB0YWIgPSAkdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3NjaGVkdWxlJyApO1xuXG5cdFx0XHRcdHZhciBmaXJzdENvbHVtbiA9IHRhYi5maW5kKCAnLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKTtcblxuXHRcdFx0XHRUVFByb21pc2UuYWRkKCAnaW5pdFN1YlJlcG9ydFNjaGVkdWxlVmlldycsICdpbml0JyApO1xuXHRcdFx0XHRUVFByb21pc2Uud2FpdCggJ2luaXRTdWJSZXBvcnRTY2hlZHVsZVZpZXcnLCAnaW5pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGZpcnN0Q29sdW1uLmNzcyggJ29wYWNpdHknLCAnMScgKTtcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdGZpcnN0Q29sdW1uLmNzcyggJ29wYWNpdHknLCAnMCcgKTsgLy9IaWRlIHRoZSBncmlkIHdoaWxlIGl0cyBsb2FkaW5nL3NpemluZy5cblxuXHRcdFx0XHRHbG9iYWwudHJhY2tWaWV3KCAnU3ViJyArICdSZXBvcnRTY2hlZHVsZScgKyAnVmlldycgKTtcblx0XHRcdFx0UmVwb3J0U2NoZWR1bGVWaWV3Q29udHJvbGxlci5sb2FkU3ViVmlldyggZmlyc3RDb2x1bW4sIGJlZm9yZUxvYWRWaWV3LCBhZnRlckxvYWRWaWV3ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9zY2hlZHVsZScgKS5maW5kKCAnLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKS5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7XG5cdFx0XHR0aGlzLmVkaXRfdmlldy5maW5kKCAnLnBlcm1pc3Npb24tZGVmaW5lZC1kaXYnICkuY3NzKCAnZGlzcGxheScsICdibG9jaycgKTtcblx0XHRcdHRoaXMuZWRpdF92aWV3LmZpbmQoICcucGVybWlzc2lvbi1tZXNzYWdlJyApLmh0bWwoIEdsb2JhbC5nZXRVcGdyYWRlTWVzc2FnZSgpICk7XG5cdFx0XHR0aGlzLmVkaXRfdmlldy5maW5kKCAnLnNhdmUtYW5kLWNvbnRpbnVlLWJ1dHRvbi1kaXYnICkuY3NzKCAnZGlzcGxheScsICdub25lJyApO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGJlZm9yZUxvYWRWaWV3KCkge1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkdGhpcy5zdWJfcmVwb3J0X3NjaGVkdWxlX3ZpZXdfY29udHJvbGxlciA9IHN1YlZpZXdDb250cm9sbGVyO1xuXHRcdFx0JHRoaXMuc3ViX3JlcG9ydF9zY2hlZHVsZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X2tleSA9ICd1c2VyX3JlcG9ydF9kYXRhX2lkJztcblx0XHRcdCR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfcmVwb3J0X3NjaGVkdWxlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfZWRpdF9yZWNvcmQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdFx0JHRoaXMuc3ViX3JlcG9ydF9zY2hlZHVsZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZpZXdfY29udHJvbGxlciA9ICR0aGlzO1xuXHRcdFx0JHRoaXMuc3ViX3JlcG9ydF9zY2hlZHVsZV92aWV3X2NvbnRyb2xsZXIuc3ViX3ZpZXdfbW9kZSA9IHRydWU7XG5cblx0XHRcdCR0aGlzLnN1Yl9yZXBvcnRfc2NoZWR1bGVfdmlld19jb250cm9sbGVyLmluaXREYXRhKCk7IC8vSW5pdCBkYXRhIGluIHRoaXMgcGFyZW50IHZpZXdcblx0XHR9XG5cdH1cblxuXHR1bmlmb3JtVmFyaWFibGUoIHJlY29yZHMgKSB7XG5cblx0XHQvLyBSZW1vdmUgaW4gbmV4dCBjb21taXQsIHJlbGF0ZWQgdG8gIzI2OTggZml4LCBubyBsb25nZXIgbmVlZGVkIGJ1dCBzZW1pLWJpZyByZWZhY3RvciB0byByZW1vdmVcblx0XHQvLyBpZiAoIHJlY29yZHMuaGFzT3duUHJvcGVydHkoICdkYXRhJyApICYmIHJlY29yZHMuZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ2NvbmZpZycgKSAmJiByZWNvcmRzLmRhdGEuY29uZmlnLmhhc093blByb3BlcnR5KCAnZmlsdGVyJyApICkge1xuXHRcdC8vIFx0cmVjb3Jkcy5kYXRhLmNvbmZpZy5maWx0ZXJfID0gcmVjb3Jkcy5kYXRhLmNvbmZpZy5maWx0ZXI7XG5cdFx0Ly8gfVxuXG5cdFx0cmV0dXJuIHJlY29yZHM7XG5cdH1cblxuXHRvblNhdmVEb25lKCByZXN1bHQgKSB7XG5cdFx0Ly9vblNhdmVEb25lQ2FsbGJhY2sgaXMgc2V0IGluIFJlcG9ydCBjb250cm9sbGVyXG5cdFx0aWYgKCB0aGlzLnBhcmVudF92aWV3X2NvbnRyb2xsZXIgJiYgdGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyLm9uU2F2ZURvbmVDYWxsYmFjayApIHtcblx0XHRcdHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci5vblNhdmVEb25lQ2FsbGJhY2soIHJlc3VsdCwgdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkICk7XG5cdFx0fVxuXHR9XG5cblx0b25TYXZlQW5kQ29udGludWVEb25lKCByZXN1bHQgKSB7XG5cdFx0dGhpcy5vblNhdmVEb25lKCByZXN1bHQgKTtcblx0fVxuXG5cdG9uU2F2ZUFuZE5leHREb25lKCByZXN1bHQgKSB7XG5cdFx0dGhpcy5vblNhdmVEb25lKCByZXN1bHQgKTtcblx0fVxuXG5cdGdldEZpbHRlckNvbHVtbnNGcm9tRGlzcGxheUNvbHVtbnMoKSB7XG5cdFx0dmFyIGNvbHVtbl9maWx0ZXIgPSB7fTtcblx0XHRjb2x1bW5fZmlsdGVyLmlkID0gdHJ1ZTtcblx0XHRjb2x1bW5fZmlsdGVyLmlzX293bmVyID0gdHJ1ZTtcblx0XHRjb2x1bW5fZmlsdGVyLmlzX2NoaWxkID0gdHJ1ZTtcblx0XHRjb2x1bW5fZmlsdGVyLnNjcmlwdCA9IHRydWU7IC8vSW5jbHVkZSBzY3JpcHQgY29sdW1uIHNvIG9uVmlld0NsaWNrKCkga25vd3Mgd2hpY2ggdmlldyB0byBvcGVuIGZvciBzYXZlZCByZXBvcnRzLlxuXG5cdFx0Ly8gRXJyb3I6IFVuYWJsZSB0byBnZXQgcHJvcGVydHkgJ2dldEdyaWRQYXJhbScgb2YgdW5kZWZpbmVkIG9yIG51bGwgcmVmZXJlbmNlXG5cdFx0dmFyIGRpc3BsYXlfY29sdW1ucyA9IFtdO1xuXHRcdGlmICggdGhpcy5ncmlkICkge1xuXHRcdFx0ZGlzcGxheV9jb2x1bW5zID0gdGhpcy5ncmlkLmdldEdyaWRQYXJhbSggJ2NvbE1vZGVsJyApO1xuXHRcdH1cblxuXHRcdGlmICggZGlzcGxheV9jb2x1bW5zICkge1xuXHRcdFx0dmFyIGxlbiA9IGRpc3BsYXlfY29sdW1ucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHR2YXIgY29sdW1uX2luZm8gPSBkaXNwbGF5X2NvbHVtbnNbaV07XG5cdFx0XHRcdGNvbHVtbl9maWx0ZXJbY29sdW1uX2luZm8ubmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5fZmlsdGVyO1xuXHR9XG5cblx0b25BZGRDbGljayggcmVwb3J0RGF0YSApIHtcblxuXHRcdFByb2dyZXNzQmFyLmNsb3NlT3ZlcmxheSgpO1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dGhpcy5zZXRDdXJyZW50RWRpdFZpZXdTdGF0ZSggJ25ldycgKTtcblx0XHQkdGhpcy5vcGVuRWRpdFZpZXcoKTtcblx0XHQkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkID0gcmVwb3J0RGF0YTtcblx0XHQkdGhpcy5pbml0RWRpdFZpZXcoKTtcblx0fVxuXG5cdHNlYXJjaERvbmUoKSB7XG5cdFx0JCggJ3dpbmRvdycgKS50cmlnZ2VyKCAncmVzaXplJyApO1xuXHRcdGlmICggdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0VFRQcm9taXNlLnJlc29sdmUoICdTdWJTYXZlZFJlcG9ydFZpZXcnLCAnaW5pdCcgKTtcblx0XHR9XG5cdFx0c3VwZXIuc2VhcmNoRG9uZSgpO1xuXHR9XG59XG5cblNhdmVkUmVwb3J0Vmlld0NvbnRyb2xsZXIubG9hZFN1YlZpZXcgPSBmdW5jdGlvbiggY29udGFpbmVyLCBiZWZvcmVWaWV3TG9hZGVkRnVuLCBhZnRlclZpZXdMb2FkZWRGdW4gKSB7XG5cblx0R2xvYmFsLmxvYWRWaWV3U291cmNlKCAnU2F2ZWRSZXBvcnQnLCAnU3ViU2F2ZWRSZXBvcnRWaWV3Lmh0bWwnLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXG5cdFx0dmFyIGFyZ3MgPSB7fTtcblx0XHR2YXIgdGVtcGxhdGUgPSBfLnRlbXBsYXRlKCByZXN1bHQgKTtcblxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCBiZWZvcmVWaWV3TG9hZGVkRnVuICkgKSB7XG5cdFx0XHRiZWZvcmVWaWV3TG9hZGVkRnVuKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBHbG9iYWwuaXNTZXQoIGNvbnRhaW5lciApICkge1xuXHRcdFx0Y29udGFpbmVyLmh0bWwoIHRlbXBsYXRlKCBhcmdzICkgKTtcblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCBhZnRlclZpZXdMb2FkZWRGdW4gKSApIHtcblx0XHRcdFx0VFRQcm9taXNlLndhaXQoICdCYXNlVmlld0NvbnRyb2xsZXInLCAnaW5pdGlhbGl6ZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGFmdGVyVmlld0xvYWRlZEZ1biggd2luZG93LnN1Yl9zYXZlZF9yZXBvcnRfdmlld19jb250cm9sbGVyICk7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdH1cblxuXHR9ICk7XG5cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9372\n")}}]);