1 line
43 KiB
JavaScript
1 line
43 KiB
JavaScript
"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["attendance-exceptions-ExceptionViewController"],{961:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ExceptionViewController\": () => (/* binding */ ExceptionViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass ExceptionViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#exception_view_container',\n\t\t\tstatus_array: null,\n\n\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinit( options ) {\n\t\t//this._super('initialize', options );\n\t\tthis.edit_view_tpl = 'ExceptionEditView.html';\n\t\tthis.permission_id = 'punch';\n\t\tthis.viewId = 'Exception';\n\t\tthis.script_name = 'ExceptionView';\n\t\tthis.context_menu_name = $.i18n._( 'Exceptions' );\n\t\tthis.navigation_label = $.i18n._( 'Exception' );\n\t\tthis.api = TTAPI.APIException;\n\n\t\tthis.initPermission();\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tthis.initData();\n\t}\n\n\tonCustomContextClick( id ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'edit_employee':\n\t\t\tcase 'edit_pay_period':\n\t\t\tcase 'edit_pay_period_schedule':\n\t\t\tcase 'schedule':\n\t\t\tcase 'timesheet':\n\t\t\tcase 'send_message':\n\t\t\t\tthis.onNavigationClick( id );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'timesheet':\n\t\t\t\tthis.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'punch' );\n\t\t\t\tbreak;\n\t\t\tcase 'schedule':\n\t\t\t\tthis.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'schedule' );\n\t\t\t\tbreak;\n\t\t\tcase 'edit_employee':\n\t\t\t\tthis.setDefaultMenuEditEmployeeIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t\tcase 'edit_pay_period_schedule':\n\t\t\t\tthis.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'pay_period_schedule' );\n\t\t\t\tbreak;\n\t\t\tcase 'edit_pay_period':\n\t\t\t\tthis.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'pay_period_schedule' );\n\t\t\t\tbreak;\n\t\t\tcase 'send_message':\n\t\t\t\tthis.setDefaultMenuSendMessageIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tinitPermission() {\n\n\t\tsuper.initPermission();\n\n\t\tif ( PermissionManager.validate( this.permission_id, 'view' ) || PermissionManager.validate( this.permission_id, 'view_child' ) ) {\n\t\t\tthis.show_search_tab = true;\n\t\t} else {\n\t\t\tthis.show_search_tab = false;\n\t\t}\n\t}\n\n\tautoOpenEditViewIfNecessary() {\n\t\t//Auto open edit view. Should set in IndexController\n\t\t//Don't have any edit view\n\t\t//Error: Uncaught TypeError: undefined is not a function in /interface/html5/views/BaseViewController.js?v=7.4.3-20140924-084605 line 2751\n\t\tthis.autoOpenEditOnlyViewIfNecessary();\n\t}\n\n\tsetDefaultMenuEditEmployeeIcon( context_btn, grid_selected_length ) {\n\t\tif ( !this.editChildPermissionValidate( 'user' ) ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\n\t\tif ( grid_selected_length === 1 ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tsetDefaultMenuSendMessageIcon( context_btn, grid_selected_length, pId ) {\n\t\tif ( grid_selected_length > 0 ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tonNavigationClick( iconName ) {\n\t\tvar select_item = this.getSelectedItem();\n\t\t//There are cases where select_item might be null. The export button for example.\n\t\tif ( select_item != null ) {\n\t\t\tvar user_id = select_item.user_id;\n\t\t}\n\t\tswitch ( iconName ) {\n\t\t\tcase 'edit_employee':\n\t\t\t\tIndexViewController.openEditView( this, 'Employee', user_id );\n\t\t\t\tbreak;\n\t\t\tcase 'edit_pay_period':\n\t\t\t\tvar pay_period_id = select_item.pay_period_id;\n\t\t\t\tif ( pay_period_id ) {\n\t\t\t\t\tIndexViewController.openEditView( this, 'PayPeriods', pay_period_id );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'edit_pay_period_schedule':\n\t\t\t\tvar pay_period_schedule_id = select_item.pay_period_schedule_id;\n\t\t\t\tif ( pay_period_schedule_id ) {\n\t\t\t\t\tIndexViewController.openEditView( this, 'PayPeriodSchedule', pay_period_id );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'schedule':\n\t\t\t\tvar filter = { filter_data: {} };\n\t\t\t\tvar include_users = { value: [user_id] };\n\t\t\t\tfilter.filter_data.include_user_ids = include_users;\n\t\t\t\tfilter.select_date = select_item.date_stamp;\n\t\t\t\tGlobal.addViewTab( this.viewId, $.i18n._( 'Exception' ), window.location.href );\n\t\t\t\tIndexViewController.goToView( 'Schedule', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'timesheet':\n\t\t\t\tfilter = { filter_data: {} };\n\t\t\t\tfilter.user_id = user_id;\n\t\t\t\tfilter.base_date = select_item.date_stamp;\n\t\t\t\tGlobal.addViewTab( this.viewId, $.i18n._( 'Exception' ), window.location.href );\n\t\t\t\tIndexViewController.goToView( 'TimeSheet', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'send_message':\n\t\t\t\tLocalCacheData.default_filter_for_next_open_view = { to_user_id: _.uniq( this.getSelectedItems().map( exception => exception.user_id ) ) };\n\t\t\t\tIndexViewController.openEditView( this, 'MessageControl', null, 'onAddClick' );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tinitOptions() {\n\t\tvar $this = this;\n\n\t\tvar options = [\n\t\t\t{ option_name: 'status', field_name: 'user_status_id', api: TTAPI.APIUser },\n\t\t\t{ option_name: 'severity', api: TTAPI.APIExceptionPolicy },\n\t\t\t{ option_name: 'type', field_name: 'exception_policy_type_id', api: TTAPI.APIExceptionPolicy },\n\t\t];\n\n\t\tthis.initDropDownOptions( options );\n\n\t\tvar user_group_api = TTAPI.APIUserGroup;\n\t\tuser_group_api.getUserGroup( '', false, false, {\n\t\t\tonResult: function( res ) {\n\n\t\t\t\tres = res.getResult();\n\t\t\t\tres = Global.buildTreeRecord( res );\n\n\t\t\t\tif ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {\n\t\t\t\t\t$this.basic_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t\t$this.adv_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: ['default'],\n\t\t\tinclude: [\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Send Message' ),\n\t\t\t\t\tid: 'send_message',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\tvue_icon: 'tticon tticon-send_black_24dp',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Jump To' ),\n\t\t\t\t\tid: 'jump_to_header',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\taction_group_header: true,\n\t\t\t\t\tpermission_result: false // to hide it in legacy context menu and avoid errors in legacy parsers.\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'TimeSheet' ),\n\t\t\t\t\tid: 'timesheet',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Schedules' ),\n\t\t\t\t\tid: 'schedule',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Edit Employee' ),\n\t\t\t\t\tid: 'edit_employee',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Edit Pay Period' ),\n\t\t\t\t\tid: 'edit_pay_period',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Edit PP Schedule' ),\n\t\t\t\t\tid: 'edit_pay_period_schedule',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Export' ),\n\t\t\t\t\tid: 'export_excel',\n\t\t\t\t\tgroup: 'other',\n\t\t\t\t\tvue_icon: 'tticon tticon-file_upload_black_24dp',\n\t\t\t\t\tsort_order: 9000\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tgetSearchPanelFilter( getFromTabIndex, save_temp_filter ) {\n\n\t\tif ( Global.isSet( getFromTabIndex ) ) {\n\t\t\tvar search_tab_select_index = getFromTabIndex;\n\t\t} else {\n\t\t\tsearch_tab_select_index = this.search_panel.getSelectTabIndex();\n\t\t}\n\n//\t\tvar basic_fields_len = this.search_fields.length;\n\t\tvar target_ui_dic = null;\n\n\t\tif ( search_tab_select_index === 0 ) {\n\t\t\tthis.filter_data = [];\n\t\t\ttarget_ui_dic = this.basic_search_field_ui_dic;\n\t\t} else if ( search_tab_select_index === 1 ) {\n\t\t\tthis.filter_data = [];\n\t\t\ttarget_ui_dic = this.adv_search_field_ui_dic;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $this = this;\n\t\t$.each( target_ui_dic, function( key, content ) {\n\n\t\t\t$this.filter_data[key] = { field: key, id: '', value: target_ui_dic[key].getValue( true ) };\n\n\t\t\tif ( key === 'show_pre_mature' && $this.filter_data[key].value !== true ) {\n\n\t\t\t\tdelete $this.filter_data[key];\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( $this.temp_basic_filter_data ) {\n\t\t\t\t$this.temp_basic_filter_data[key] = $this.filter_data[key];\n\t\t\t}\n\n\t\t\tif ( $this.temp_adv_filter_data ) {\n\t\t\t\t$this.temp_adv_filter_data[key] = $this.filter_data[key];\n\t\t\t}\n\t\t} );\n\n\t\tif ( save_temp_filter ) {\n\t\t\tif ( search_tab_select_index === 0 ) {\n\t\t\t\t$this.temp_basic_filter_data = Global.clone( $this.filter_data );\n\t\t\t} else if ( search_tab_select_index === 1 ) {\n\t\t\t\t$this.temp_adv_filter_data = Global.clone( $this.filter_data );\n\t\t\t}\n\n\t\t}\n\t}\n\n\tonGridDblClickRow() {\n\t\tvar context_menu_array = ContextMenuManager.getMenuModelByMenuId( this.determineContextMenuMountAttributes().id );\n\t\tvar len = context_menu_array.length;\n\n\t\tvar need_break = false;\n\n\t\tfor ( var i = 0; i < len; i++ ) {\n\n\t\t\tif ( need_break ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet context_btn = context_menu_array[i];\n\t\t\tlet id = context_menu_array[i].id;\n\n\t\t\tswitch ( id ) {\n\t\t\t\tcase 'timesheet':\n\t\t\t\t\tif ( context_btn.visible && !context_btn.disabled ) {\n\t\t\t\t\t\tthis.onNavigationClick( 'timesheet' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor ( var i = 0; i < len; i++ ) {\n\n\t\t\tif ( need_break ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet context_btn = context_menu_array[i];\n\t\t\tlet id = context_menu_array[i].id;\n\n\t\t\tswitch ( id ) {\n\t\t\t\tcase 'schedule':\n\t\t\t\t\tneed_break = true;\n\t\t\t\t\tif ( context_btn.visible && !context_btn.disabled ) {\n\t\t\t\t\t\tthis.onNavigationClick( 'schedule' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\t\tthis.search_fields = [\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Employee Status' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'user_status_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\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._( 'Pay Period' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'pay_period_id',\n\t\t\t\tlayout_name: 'global_Pay_period',\n\t\t\t\tapi_class: TTAPI.APIPayPeriod,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\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._( 'Employee' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'user_id',\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: true,\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._( 'Severity' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'severity_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tlayout_name: 'global_option_column',\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._( 'Exception' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'exception_policy_type_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tlayout_name: 'global_option_column',\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._( 'Group' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tmultiple: true,\n\t\t\t\tfield: 'group_id',\n\t\t\t\tlayout_name: 'global_tree_column',\n\t\t\t\ttree_mode: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\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._( 'Default Branch' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'default_branch_id',\n\t\t\t\tlayout_name: 'global_branch',\n\t\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\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._( 'Default Department' ),\n\t\t\t\tfield: 'default_department_id',\n\t\t\t\tin_column: 2,\n\t\t\t\tlayout_name: 'global_department',\n\t\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\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._( 'Branch' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'branch_id',\n\t\t\t\tlayout_name: 'global_branch',\n\t\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\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._( 'Department' ),\n\t\t\t\tfield: 'department_id',\n\t\t\t\tin_column: 2,\n\t\t\t\tlayout_name: 'global_department',\n\t\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Title' ),\n\t\t\t\tin_column: 3,\n\t\t\t\tfield: 'title_id',\n\t\t\t\tlayout_name: 'global_job_title',\n\t\t\t\tapi_class: TTAPI.APIUserTitle,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\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._( 'Show Pre-Mature' ),\n\t\t\t\tin_column: 3,\n\t\t\t\tfield: 'show_pre_mature',\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.CHECKBOX\n\t\t\t} )\n\n\t\t];\n\t}\n\n\tgetFilterColumnsFromDisplayColumns() {\n\t\tvar column_filter = {};\n\t\tcolumn_filter.exception_color = true;\n\t\tcolumn_filter.exception_background_color = true;\n\t\tcolumn_filter.user_id = true;\n\t\tcolumn_filter.pay_period_id = true;\n\t\tcolumn_filter.pay_period_schedule_id = true;\n\n\t\treturn this._getFilterColumnsFromDisplayColumns( column_filter, true );\n\t}\n\n\tsetGridCellBackGround() {\n\n\t\tvar data = this.grid.getGridParam( 'data' );\n\t\t//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70\n\t\tif ( !data ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar len = data.length;\n\n\t\tfor ( var i = 0; i < len; i++ ) {\n\t\t\tvar item = data[i];\n\n\t\t\tif ( item.exception_background_color ) {\n\t\t\t\tvar severity = $( 'tr[id=\\'' + item.id + '\\']' ).find( 'td[aria-describedby=\"' + this.ui_id + '_grid_severity\"]' );\n\t\t\t\tseverity.css( 'background-color', item.exception_background_color );\n\t\t\t\tseverity.css( 'font-weight', 'bold' );\n\t\t\t}\n\n\t\t\tif ( item.exception_color ) {\n\t\t\t\tvar code = $( 'tr[id=\\'' + item.id + '\\']' ).find( 'td[aria-describedby=\"' + this.ui_id + '_grid_exception_policy_type_id\"]' );\n\t\t\t\tcode.css( 'color', item.exception_color );\n\t\t\t\tcode.css( 'font-weight', 'bold' );\n\t\t\t}\n\n\t\t}\n\t}\n}\n\nExceptionViewController.loadView = function() {\n\n\tGlobal.loadViewSource( 'Exception', 'ExceptionView.html', function( result ) {\n\n\t\tvar args = {};\n\t\tvar template = _.template( result );\n\n\t\tGlobal.contentContainer().html( template( args ) );\n\t} );\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFQSxtQkFBbUIsU0FBUzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7O0FBRUE7QUFDQSxtQkFBbUIsQ0FBQztBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLENBQUM7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGlCQUFpQixDQUFDOztBQUVsQjtBQUNBLEdBQUc7O0FBRUgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbnRlcmZhY2UvaHRtbDUvdmlld3MvYXR0ZW5kYW5jZS9leGNlcHRpb25zL0V4Y2VwdGlvblZpZXdDb250cm9sbGVyLmpzP2M5MWQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEV4Y2VwdGlvblZpZXdDb250cm9sbGVyIGV4dGVuZHMgQmFzZVZpZXdDb250cm9sbGVyIHtcblx0Y29uc3RydWN0b3IoIG9wdGlvbnMgPSB7fSApIHtcblx0XHRfLmRlZmF1bHRzKCBvcHRpb25zLCB7XG5cdFx0XHRlbDogJyNleGNlcHRpb25fdmlld19jb250YWluZXInLFxuXHRcdFx0c3RhdHVzX2FycmF5OiBudWxsLFxuXG5cblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdCggb3B0aW9ucyApIHtcblx0XHQvL3RoaXMuX3N1cGVyKCdpbml0aWFsaXplJywgb3B0aW9ucyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RwbCA9ICdFeGNlcHRpb25FZGl0Vmlldy5odG1sJztcblx0XHR0aGlzLnBlcm1pc3Npb25faWQgPSAncHVuY2gnO1xuXHRcdHRoaXMudmlld0lkID0gJ0V4Y2VwdGlvbic7XG5cdFx0dGhpcy5zY3JpcHRfbmFtZSA9ICdFeGNlcHRpb25WaWV3Jztcblx0XHR0aGlzLmNvbnRleHRfbWVudV9uYW1lID0gJC5pMThuLl8oICdFeGNlcHRpb25zJyApO1xuXHRcdHRoaXMubmF2aWdhdGlvbl9sYWJlbCA9ICQuaTE4bi5fKCAnRXhjZXB0aW9uJyApO1xuXHRcdHRoaXMuYXBpID0gVFRBUEkuQVBJRXhjZXB0aW9uO1xuXG5cdFx0dGhpcy5pbml0UGVybWlzc2lvbigpO1xuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH1cblxuXHRvbkN1c3RvbUNvbnRleHRDbGljayggaWQgKSB7XG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICdlZGl0X2VtcGxveWVlJzpcblx0XHRcdGNhc2UgJ2VkaXRfcGF5X3BlcmlvZCc6XG5cdFx0XHRjYXNlICdlZGl0X3BheV9wZXJpb2Rfc2NoZWR1bGUnOlxuXHRcdFx0Y2FzZSAnc2NoZWR1bGUnOlxuXHRcdFx0Y2FzZSAndGltZXNoZWV0Jzpcblx0XHRcdGNhc2UgJ3NlbmRfbWVzc2FnZSc6XG5cdFx0XHRcdHRoaXMub25OYXZpZ2F0aW9uQ2xpY2soIGlkICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHNldEN1c3RvbURlZmF1bHRNZW51SWNvbiggaWQsIGNvbnRleHRfYnRuLCBncmlkX3NlbGVjdGVkX2xlbmd0aCApIHtcblx0XHRzd2l0Y2ggKCBpZCApIHtcblx0XHRcdGNhc2UgJ3RpbWVzaGVldCc6XG5cdFx0XHRcdHRoaXMuc2V0RGVmYXVsdE1lbnVWaWV3SWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoLCAncHVuY2gnICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2NoZWR1bGUnOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51Vmlld0ljb24oIGNvbnRleHRfYnRuLCBncmlkX3NlbGVjdGVkX2xlbmd0aCwgJ3NjaGVkdWxlJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2VkaXRfZW1wbG95ZWUnOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51RWRpdEVtcGxveWVlSWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZWRpdF9wYXlfcGVyaW9kX3NjaGVkdWxlJzpcblx0XHRcdFx0dGhpcy5zZXREZWZhdWx0TWVudUVkaXRJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGgsICdwYXlfcGVyaW9kX3NjaGVkdWxlJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2VkaXRfcGF5X3BlcmlvZCc6XG5cdFx0XHRcdHRoaXMuc2V0RGVmYXVsdE1lbnVFZGl0SWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoLCAncGF5X3BlcmlvZF9zY2hlZHVsZScgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzZW5kX21lc3NhZ2UnOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51U2VuZE1lc3NhZ2VJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGggKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aW5pdFBlcm1pc3Npb24oKSB7XG5cblx0XHRzdXBlci5pbml0UGVybWlzc2lvbigpO1xuXG5cdFx0aWYgKCBQZXJtaXNzaW9uTWFuYWdlci52YWxpZGF0ZSggdGhpcy5wZXJtaXNzaW9uX2lkLCAndmlldycgKSB8fCBQZXJtaXNzaW9uTWFuYWdlci52YWxpZGF0ZSggdGhpcy5wZXJtaXNzaW9uX2lkLCAndmlld19jaGlsZCcgKSApIHtcblx0XHRcdHRoaXMuc2hvd19zZWFyY2hfdGFiID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaG93X3NlYXJjaF90YWIgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhdXRvT3BlbkVkaXRWaWV3SWZOZWNlc3NhcnkoKSB7XG5cdFx0Ly9BdXRvIG9wZW4gZWRpdCB2aWV3LiBTaG91bGQgc2V0IGluIEluZGV4Q29udHJvbGxlclxuXHRcdC8vRG9uJ3QgaGF2ZSBhbnkgZWRpdCB2aWV3XG5cdFx0Ly9FcnJvcjogVW5jYXVnaHQgVHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGEgZnVuY3Rpb24gaW4gL2ludGVyZmFjZS9odG1sNS92aWV3cy9CYXNlVmlld0NvbnRyb2xsZXIuanM/dj03LjQuMy0yMDE0MDkyNC0wODQ2MDUgbGluZSAyNzUxXG5cdFx0dGhpcy5hdXRvT3BlbkVkaXRPbmx5Vmlld0lmTmVjZXNzYXJ5KCk7XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudUVkaXRFbXBsb3llZUljb24oIGNvbnRleHRfYnRuLCBncmlkX3NlbGVjdGVkX2xlbmd0aCApIHtcblx0XHRpZiAoICF0aGlzLmVkaXRDaGlsZFBlcm1pc3Npb25WYWxpZGF0ZSggJ3VzZXInICkgKSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuaGlkZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApXG5cdFx0fVxuXG5cdFx0aWYgKCBncmlkX3NlbGVjdGVkX2xlbmd0aCA9PT0gMSApIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIHRydWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudVNlbmRNZXNzYWdlSWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoLCBwSWQgKSB7XG5cdFx0aWYgKCBncmlkX3NlbGVjdGVkX2xlbmd0aCA+IDAgKSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuaGlkZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCB0cnVlICk7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCB0cnVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0fVxuXHR9XG5cblx0b25OYXZpZ2F0aW9uQ2xpY2soIGljb25OYW1lICkge1xuXHRcdHZhciBzZWxlY3RfaXRlbSA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cdFx0Ly9UaGVyZSBhcmUgY2FzZXMgd2hlcmUgc2VsZWN0X2l0ZW0gbWlnaHQgYmUgbnVsbC4gVGhlIGV4cG9ydCBidXR0b24gZm9yIGV4YW1wbGUuXG5cdFx0aWYgKCBzZWxlY3RfaXRlbSAhPSBudWxsICkge1xuXHRcdFx0dmFyIHVzZXJfaWQgPSBzZWxlY3RfaXRlbS51c2VyX2lkO1xuXHRcdH1cblx0XHRzd2l0Y2ggKCBpY29uTmFtZSApIHtcblx0XHRcdGNhc2UgJ2VkaXRfZW1wbG95ZWUnOlxuXHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLm9wZW5FZGl0VmlldyggdGhpcywgJ0VtcGxveWVlJywgdXNlcl9pZCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2VkaXRfcGF5X3BlcmlvZCc6XG5cdFx0XHRcdHZhciBwYXlfcGVyaW9kX2lkID0gc2VsZWN0X2l0ZW0ucGF5X3BlcmlvZF9pZDtcblx0XHRcdFx0aWYgKCBwYXlfcGVyaW9kX2lkICkge1xuXHRcdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIub3BlbkVkaXRWaWV3KCB0aGlzLCAnUGF5UGVyaW9kcycsIHBheV9wZXJpb2RfaWQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2VkaXRfcGF5X3BlcmlvZF9zY2hlZHVsZSc6XG5cdFx0XHRcdHZhciBwYXlfcGVyaW9kX3NjaGVkdWxlX2lkID0gc2VsZWN0X2l0ZW0ucGF5X3BlcmlvZF9zY2hlZHVsZV9pZDtcblx0XHRcdFx0aWYgKCBwYXlfcGVyaW9kX3NjaGVkdWxlX2lkICkge1xuXHRcdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIub3BlbkVkaXRWaWV3KCB0aGlzLCAnUGF5UGVyaW9kU2NoZWR1bGUnLCBwYXlfcGVyaW9kX2lkICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzY2hlZHVsZSc6XG5cdFx0XHRcdHZhciBmaWx0ZXIgPSB7IGZpbHRlcl9kYXRhOiB7fSB9O1xuXHRcdFx0XHR2YXIgaW5jbHVkZV91c2VycyA9IHsgdmFsdWU6IFt1c2VyX2lkXSB9O1xuXHRcdFx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuaW5jbHVkZV91c2VyX2lkcyA9IGluY2x1ZGVfdXNlcnM7XG5cdFx0XHRcdGZpbHRlci5zZWxlY3RfZGF0ZSA9IHNlbGVjdF9pdGVtLmRhdGVfc3RhbXA7XG5cdFx0XHRcdEdsb2JhbC5hZGRWaWV3VGFiKCB0aGlzLnZpZXdJZCwgJC5pMThuLl8oICdFeGNlcHRpb24nICksIHdpbmRvdy5sb2NhdGlvbi5ocmVmICk7XG5cdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIuZ29Ub1ZpZXcoICdTY2hlZHVsZScsIGZpbHRlciApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3RpbWVzaGVldCc6XG5cdFx0XHRcdGZpbHRlciA9IHsgZmlsdGVyX2RhdGE6IHt9IH07XG5cdFx0XHRcdGZpbHRlci51c2VyX2lkID0gdXNlcl9pZDtcblx0XHRcdFx0ZmlsdGVyLmJhc2VfZGF0ZSA9IHNlbGVjdF9pdGVtLmRhdGVfc3RhbXA7XG5cdFx0XHRcdEdsb2JhbC5hZGRWaWV3VGFiKCB0aGlzLnZpZXdJZCwgJC5pMThuLl8oICdFeGNlcHRpb24nICksIHdpbmRvdy5sb2NhdGlvbi5ocmVmICk7XG5cdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIuZ29Ub1ZpZXcoICdUaW1lU2hlZXQnLCBmaWx0ZXIgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzZW5kX21lc3NhZ2UnOlxuXHRcdFx0XHRMb2NhbENhY2hlRGF0YS5kZWZhdWx0X2ZpbHRlcl9mb3JfbmV4dF9vcGVuX3ZpZXcgPSB7IHRvX3VzZXJfaWQ6IF8udW5pcSggdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCkubWFwKCBleGNlcHRpb24gPT4gZXhjZXB0aW9uLnVzZXJfaWQgKSApIH07XG5cdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIub3BlbkVkaXRWaWV3KCB0aGlzLCAnTWVzc2FnZUNvbnRyb2wnLCBudWxsLCAnb25BZGRDbGljaycgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aW5pdE9wdGlvbnMoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdHZhciBvcHRpb25zID0gW1xuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3N0YXR1cycsIGZpZWxkX25hbWU6ICd1c2VyX3N0YXR1c19pZCcsIGFwaTogVFRBUEkuQVBJVXNlciB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3NldmVyaXR5JywgYXBpOiBUVEFQSS5BUElFeGNlcHRpb25Qb2xpY3kgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICd0eXBlJywgZmllbGRfbmFtZTogJ2V4Y2VwdGlvbl9wb2xpY3lfdHlwZV9pZCcsIGFwaTogVFRBUEkuQVBJRXhjZXB0aW9uUG9saWN5IH0sXG5cdFx0XTtcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9ucyggb3B0aW9ucyApO1xuXG5cdFx0dmFyIHVzZXJfZ3JvdXBfYXBpID0gVFRBUEkuQVBJVXNlckdyb3VwO1xuXHRcdHVzZXJfZ3JvdXBfYXBpLmdldFVzZXJHcm91cCggJycsIGZhbHNlLCBmYWxzZSwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXMgKSB7XG5cblx0XHRcdFx0cmVzID0gcmVzLmdldFJlc3VsdCgpO1xuXHRcdFx0XHRyZXMgPSBHbG9iYWwuYnVpbGRUcmVlUmVjb3JkKCByZXMgKTtcblxuXHRcdFx0XHRpZiAoICEkdGhpcy5zdWJfdmlld19tb2RlICYmICR0aGlzLmJhc2ljX3NlYXJjaF9maWVsZF91aV9kaWNbJ2dyb3VwX2lkJ10gKSB7XG5cdFx0XHRcdFx0JHRoaXMuYmFzaWNfc2VhcmNoX2ZpZWxkX3VpX2RpY1snZ3JvdXBfaWQnXS5zZXRTb3VyY2VEYXRhKCByZXMgKTtcblx0XHRcdFx0XHQkdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snZ3JvdXBfaWQnXS5zZXRTb3VyY2VEYXRhKCByZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG5cblx0Z2V0Q3VzdG9tQ29udGV4dE1lbnVNb2RlbCgpIHtcblx0XHR2YXIgY29udGV4dF9tZW51X21vZGVsID0ge1xuXHRcdFx0ZXhjbHVkZTogWydkZWZhdWx0J10sXG5cdFx0XHRpbmNsdWRlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTZW5kIE1lc3NhZ2UnICksXG5cdFx0XHRcdFx0aWQ6ICdzZW5kX21lc3NhZ2UnLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0dnVlX2ljb246ICd0dGljb24gdHRpY29uLXNlbmRfYmxhY2tfMjRkcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdKdW1wIFRvJyApLFxuXHRcdFx0XHRcdGlkOiAnanVtcF90b19oZWFkZXInLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwX2hlYWRlcjogdHJ1ZSxcblx0XHRcdFx0XHRwZXJtaXNzaW9uX3Jlc3VsdDogZmFsc2UgLy8gdG8gaGlkZSBpdCBpbiBsZWdhY3kgY29udGV4dCBtZW51IGFuZCBhdm9pZCBlcnJvcnMgaW4gbGVnYWN5IHBhcnNlcnMuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUaW1lU2hlZXQnICksXG5cdFx0XHRcdFx0aWQ6ICd0aW1lc2hlZXQnLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0Z3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1NjaGVkdWxlcycgKSxcblx0XHRcdFx0XHRpZDogJ3NjaGVkdWxlJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFZGl0IEVtcGxveWVlJyApLFxuXHRcdFx0XHRcdGlkOiAnZWRpdF9lbXBsb3llZScsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRncm91cDogJ25hdmlnYXRpb24nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnRWRpdCBQYXkgUGVyaW9kJyApLFxuXHRcdFx0XHRcdGlkOiAnZWRpdF9wYXlfcGVyaW9kJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFZGl0IFBQIFNjaGVkdWxlJyApLFxuXHRcdFx0XHRcdGlkOiAnZWRpdF9wYXlfcGVyaW9kX3NjaGVkdWxlJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFeHBvcnQnICksXG5cdFx0XHRcdFx0aWQ6ICdleHBvcnRfZXhjZWwnLFxuXHRcdFx0XHRcdGdyb3VwOiAnb3RoZXInLFxuXHRcdFx0XHRcdHZ1ZV9pY29uOiAndHRpY29uIHR0aWNvbi1maWxlX3VwbG9hZF9ibGFja18yNGRwJyxcblx0XHRcdFx0XHRzb3J0X29yZGVyOiA5MDAwXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNvbnRleHRfbWVudV9tb2RlbDtcblx0fVxuXG5cdGdldFNlYXJjaFBhbmVsRmlsdGVyKCBnZXRGcm9tVGFiSW5kZXgsIHNhdmVfdGVtcF9maWx0ZXIgKSB7XG5cblx0XHRpZiAoIEdsb2JhbC5pc1NldCggZ2V0RnJvbVRhYkluZGV4ICkgKSB7XG5cdFx0XHR2YXIgc2VhcmNoX3RhYl9zZWxlY3RfaW5kZXggPSBnZXRGcm9tVGFiSW5kZXg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlYXJjaF90YWJfc2VsZWN0X2luZGV4ID0gdGhpcy5zZWFyY2hfcGFuZWwuZ2V0U2VsZWN0VGFiSW5kZXgoKTtcblx0XHR9XG5cbi8vXHRcdHZhciBiYXNpY19maWVsZHNfbGVuID0gdGhpcy5zZWFyY2hfZmllbGRzLmxlbmd0aDtcblx0XHR2YXIgdGFyZ2V0X3VpX2RpYyA9IG51bGw7XG5cblx0XHRpZiAoIHNlYXJjaF90YWJfc2VsZWN0X2luZGV4ID09PSAwICkge1xuXHRcdFx0dGhpcy5maWx0ZXJfZGF0YSA9IFtdO1xuXHRcdFx0dGFyZ2V0X3VpX2RpYyA9IHRoaXMuYmFzaWNfc2VhcmNoX2ZpZWxkX3VpX2RpYztcblx0XHR9IGVsc2UgaWYgKCBzZWFyY2hfdGFiX3NlbGVjdF9pbmRleCA9PT0gMSApIHtcblx0XHRcdHRoaXMuZmlsdGVyX2RhdGEgPSBbXTtcblx0XHRcdHRhcmdldF91aV9kaWMgPSB0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQkLmVhY2goIHRhcmdldF91aV9kaWMsIGZ1bmN0aW9uKCBrZXksIGNvbnRlbnQgKSB7XG5cblx0XHRcdCR0aGlzLmZpbHRlcl9kYXRhW2tleV0gPSB7IGZpZWxkOiBrZXksIGlkOiAnJywgdmFsdWU6IHRhcmdldF91aV9kaWNba2V5XS5nZXRWYWx1ZSggdHJ1ZSApIH07XG5cblx0XHRcdGlmICgga2V5ID09PSAnc2hvd19wcmVfbWF0dXJlJyAmJiAkdGhpcy5maWx0ZXJfZGF0YVtrZXldLnZhbHVlICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdGRlbGV0ZSAkdGhpcy5maWx0ZXJfZGF0YVtrZXldO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggJHRoaXMudGVtcF9iYXNpY19maWx0ZXJfZGF0YSApIHtcblx0XHRcdFx0JHRoaXMudGVtcF9iYXNpY19maWx0ZXJfZGF0YVtrZXldID0gJHRoaXMuZmlsdGVyX2RhdGFba2V5XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAkdGhpcy50ZW1wX2Fkdl9maWx0ZXJfZGF0YSApIHtcblx0XHRcdFx0JHRoaXMudGVtcF9hZHZfZmlsdGVyX2RhdGFba2V5XSA9ICR0aGlzLmZpbHRlcl9kYXRhW2tleV07XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0aWYgKCBzYXZlX3RlbXBfZmlsdGVyICkge1xuXHRcdFx0aWYgKCBzZWFyY2hfdGFiX3NlbGVjdF9pbmRleCA9PT0gMCApIHtcblx0XHRcdFx0JHRoaXMudGVtcF9iYXNpY19maWx0ZXJfZGF0YSA9IEdsb2JhbC5jbG9uZSggJHRoaXMuZmlsdGVyX2RhdGEgKTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlYXJjaF90YWJfc2VsZWN0X2luZGV4ID09PSAxICkge1xuXHRcdFx0XHQkdGhpcy50ZW1wX2Fkdl9maWx0ZXJfZGF0YSA9IEdsb2JhbC5jbG9uZSggJHRoaXMuZmlsdGVyX2RhdGEgKTtcblx0XHRcdH1cblxuXHRcdH1cblx0fVxuXG5cdG9uR3JpZERibENsaWNrUm93KCkge1xuXHRcdHZhciBjb250ZXh0X21lbnVfYXJyYXkgPSBDb250ZXh0TWVudU1hbmFnZXIuZ2V0TWVudU1vZGVsQnlNZW51SWQoIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCApO1xuXHRcdHZhciBsZW4gPSBjb250ZXh0X21lbnVfYXJyYXkubGVuZ3RoO1xuXG5cdFx0dmFyIG5lZWRfYnJlYWsgPSBmYWxzZTtcblxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXG5cdFx0XHRpZiAoIG5lZWRfYnJlYWsgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY29udGV4dF9idG4gPSBjb250ZXh0X21lbnVfYXJyYXlbaV07XG5cdFx0XHRsZXQgaWQgPSBjb250ZXh0X21lbnVfYXJyYXlbaV0uaWQ7XG5cblx0XHRcdHN3aXRjaCAoIGlkICkge1xuXHRcdFx0XHRjYXNlICd0aW1lc2hlZXQnOlxuXHRcdFx0XHRcdGlmICggY29udGV4dF9idG4udmlzaWJsZSAmJiAhY29udGV4dF9idG4uZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uTmF2aWdhdGlvbkNsaWNrKCAndGltZXNoZWV0JyApO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblxuXHRcdFx0aWYgKCBuZWVkX2JyZWFrICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0bGV0IGNvbnRleHRfYnRuID0gY29udGV4dF9tZW51X2FycmF5W2ldO1xuXHRcdFx0bGV0IGlkID0gY29udGV4dF9tZW51X2FycmF5W2ldLmlkO1xuXG5cdFx0XHRzd2l0Y2ggKCBpZCApIHtcblx0XHRcdFx0Y2FzZSAnc2NoZWR1bGUnOlxuXHRcdFx0XHRcdG5lZWRfYnJlYWsgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICggY29udGV4dF9idG4udmlzaWJsZSAmJiAhY29udGV4dF9idG4uZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uTmF2aWdhdGlvbkNsaWNrKCAnc2NoZWR1bGUnICk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGJ1aWxkU2VhcmNoRmllbGRzKCkge1xuXG5cdFx0c3VwZXIuYnVpbGRTZWFyY2hGaWVsZHMoKTtcblx0XHR0aGlzLnNlYXJjaF9maWVsZHMgPSBbXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFbXBsb3llZSBTdGF0dXMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICd1c2VyX3N0YXR1c19pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnUGF5IFBlcmlvZCcgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3BheV9wZXJpb2RfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9QYXlfcGVyaW9kJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElQYXlQZXJpb2QsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFbXBsb3llZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3VzZXJfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnU2V2ZXJpdHknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdzZXZlcml0eV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0V4Y2VwdGlvbicgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ2V4Y2VwdGlvbl9wb2xpY3lfdHlwZV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0dyb3VwJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRmaWVsZDogJ2dyb3VwX2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdHJlZV9jb2x1bW4nLFxuXHRcdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0RlZmF1bHQgQnJhbmNoJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAnZGVmYXVsdF9icmFuY2hfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9icmFuY2gnLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUJyYW5jaCxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0RlZmF1bHQgRGVwYXJ0bWVudCcgKSxcblx0XHRcdFx0ZmllbGQ6ICdkZWZhdWx0X2RlcGFydG1lbnRfaWQnLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2RlcGFydG1lbnQnLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSURlcGFydG1lbnQsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdCcmFuY2gnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdicmFuY2hfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9icmFuY2gnLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUJyYW5jaCxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdEZXBhcnRtZW50JyApLFxuXHRcdFx0XHRmaWVsZDogJ2RlcGFydG1lbnRfaWQnLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2RlcGFydG1lbnQnLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSURlcGFydG1lbnQsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUaXRsZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAzLFxuXHRcdFx0XHRmaWVsZDogJ3RpdGxlX2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfam9iX3RpdGxlJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyVGl0bGUsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnU2hvdyBQcmUtTWF0dXJlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDMsXG5cdFx0XHRcdGZpZWxkOiAnc2hvd19wcmVfbWF0dXJlJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5DSEVDS0JPWFxuXHRcdFx0fSApXG5cblx0XHRdO1xuXHR9XG5cblx0Z2V0RmlsdGVyQ29sdW1uc0Zyb21EaXNwbGF5Q29sdW1ucygpIHtcblx0XHR2YXIgY29sdW1uX2ZpbHRlciA9IHt9O1xuXHRcdGNvbHVtbl9maWx0ZXIuZXhjZXB0aW9uX2NvbG9yID0gdHJ1ZTtcblx0XHRjb2x1bW5fZmlsdGVyLmV4Y2VwdGlvbl9iYWNrZ3JvdW5kX2NvbG9yID0gdHJ1ZTtcblx0XHRjb2x1bW5fZmlsdGVyLnVzZXJfaWQgPSB0cnVlO1xuXHRcdGNvbHVtbl9maWx0ZXIucGF5X3BlcmlvZF9pZCA9IHRydWU7XG5cdFx0Y29sdW1uX2ZpbHRlci5wYXlfcGVyaW9kX3NjaGVkdWxlX2lkID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLl9nZXRGaWx0ZXJDb2x1bW5zRnJvbURpc3BsYXlDb2x1bW5zKCBjb2x1bW5fZmlsdGVyLCB0cnVlICk7XG5cdH1cblxuXHRzZXRHcmlkQ2VsbEJhY2tHcm91bmQoKSB7XG5cblx0XHR2YXIgZGF0YSA9IHRoaXMuZ3JpZC5nZXRHcmlkUGFyYW0oICdkYXRhJyApO1xuXHRcdC8vRXJyb3I6IFR5cGVFcnJvcjogZGF0YSBpcyB1bmRlZmluZWQgaW4gL2ludGVyZmFjZS9odG1sNS9mcmFtZXdvcmsvanF1ZXJ5Lm1pbi5qcz92PTcuNC42LTIwMTQxMDI3LTA3NDEyNyBsaW5lIDIgPiBldmFsIGxpbmUgNzBcblx0XHRpZiAoICFkYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBsZW4gPSBkYXRhLmxlbmd0aDtcblxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0dmFyIGl0ZW0gPSBkYXRhW2ldO1xuXG5cdFx0XHRpZiAoIGl0ZW0uZXhjZXB0aW9uX2JhY2tncm91bmRfY29sb3IgKSB7XG5cdFx0XHRcdHZhciBzZXZlcml0eSA9ICQoICd0cltpZD1cXCcnICsgaXRlbS5pZCArICdcXCddJyApLmZpbmQoICd0ZFthcmlhLWRlc2NyaWJlZGJ5PVwiJyArIHRoaXMudWlfaWQgKyAnX2dyaWRfc2V2ZXJpdHlcIl0nICk7XG5cdFx0XHRcdHNldmVyaXR5LmNzcyggJ2JhY2tncm91bmQtY29sb3InLCBpdGVtLmV4Y2VwdGlvbl9iYWNrZ3JvdW5kX2NvbG9yICk7XG5cdFx0XHRcdHNldmVyaXR5LmNzcyggJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaXRlbS5leGNlcHRpb25fY29sb3IgKSB7XG5cdFx0XHRcdHZhciBjb2RlID0gJCggJ3RyW2lkPVxcJycgKyBpdGVtLmlkICsgJ1xcJ10nICkuZmluZCggJ3RkW2FyaWEtZGVzY3JpYmVkYnk9XCInICsgdGhpcy51aV9pZCArICdfZ3JpZF9leGNlcHRpb25fcG9saWN5X3R5cGVfaWRcIl0nICk7XG5cdFx0XHRcdGNvZGUuY3NzKCAnY29sb3InLCBpdGVtLmV4Y2VwdGlvbl9jb2xvciApO1xuXHRcdFx0XHRjb2RlLmNzcyggJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnICk7XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cbn1cblxuRXhjZXB0aW9uVmlld0NvbnRyb2xsZXIubG9hZFZpZXcgPSBmdW5jdGlvbigpIHtcblxuXHRHbG9iYWwubG9hZFZpZXdTb3VyY2UoICdFeGNlcHRpb24nLCAnRXhjZXB0aW9uVmlldy5odG1sJywgZnVuY3Rpb24oIHJlc3VsdCApIHtcblxuXHRcdHZhciBhcmdzID0ge307XG5cdFx0dmFyIHRlbXBsYXRlID0gXy50ZW1wbGF0ZSggcmVzdWx0ICk7XG5cblx0XHRHbG9iYWwuY29udGVudENvbnRhaW5lcigpLmh0bWwoIHRlbXBsYXRlKCBhcmdzICkgKTtcblx0fSApO1xuXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///961\n")}}]); |