1 line
119 KiB
JavaScript
1 line
119 KiB
JavaScript
"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["policy-premium_policy-PremiumPolicyViewController"],{5668:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PremiumPolicyViewController\": () => (/* binding */ PremiumPolicyViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass PremiumPolicyViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#premium_policy_view_container',\n\n\t\t\ttype_array: null,\n\t\t\tmin_max_time_type_array: null,\n\n\t\t\tinclude_holiday_type_array: null,\n\n\t\t\tbranch_selection_type_array: null,\n\t\t\tdepartment_selection_type_array: null,\n\n\t\t\tjob_group_selection_type_array: null,\n\t\t\tjob_selection_type_array: null,\n\n\t\t\tjob_group_array: null,\n\t\t\tjob_item_group_array: null,\n\t\t\tpunch_tag_group_array: null,\n\n\t\t\tjob_item_group_selection_type_array: null,\n\t\t\tjob_item_selection_type_array: null,\n\n\t\t\tpunch_tag_group_selection_type_array: null,\n\t\t\tpunch_tag_selection_type_array: null,\n\n\t\t\tjob_group_api: null,\n\t\t\tjob_item_group_api: null,\n\t\t\tpunch_tag_group_api: null,\n\t\t\tdate_api: null\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 = 'PremiumPolicyEditView.html';\n\t\tthis.permission_id = 'premium_policy';\n\t\tthis.viewId = 'PremiumPolicy';\n\t\tthis.script_name = 'PremiumPolicyView';\n\t\tthis.table_name_key = 'premium_policy';\n\t\tthis.context_menu_name = $.i18n._( 'Premium Policy' );\n\t\tthis.navigation_label = $.i18n._( 'Premium Policy' );\n\t\tthis.api = TTAPI.APIPremiumPolicy;\n\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tthis.job_group_api = TTAPI.APIJobGroup;\n\t\t\tthis.job_item_group_api = TTAPI.APIJobItemGroup;\n\t\t\tthis.punch_tag_group_api = TTAPI.APIPunchTagGroup;\n\t\t}\n\n\t\tthis.date_api = TTAPI.APITTDate;\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tthis.initData();\n\t}\n\n\tinitOptions() {\n\t\tvar $this = this;\n\n\t\tvar options = [\n\t\t\t{ option_name: 'type', api: this.api },\n\t\t\t{ option_name: 'min_max_time_type', api: this.api },\n\t\t\t{ option_name: 'include_holiday_type', api: this.api },\n\t\t\t{ option_name: 'branch_selection_type', api: this.api },\n\t\t\t{ option_name: 'department_selection_type', api: this.api },\n\t\t\t{ option_name: 'job_group_selection_type', api: this.api },\n\t\t\t{ option_name: 'job_selection_type', api: this.api },\n\t\t\t{ option_name: 'job_item_group_selection_type', api: this.api },\n\t\t\t{ option_name: 'job_item_selection_type', api: this.api },\n\t\t\t{ option_name: 'punch_tag_group_selection_type', api: this.api },\n\t\t\t{ option_name: 'punch_tag_selection_type', api: this.api },\n\t\t];\n\n\t\tthis.initDropDownOptions( options );\n\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tthis.job_group_api.getJobGroup( '', false, false, {\n\t\t\t\tonResult: function( res ) {\n\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tres = Global.buildTreeRecord( res );\n\t\t\t\t\t$this.job_group_array = res;\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.job_item_group_api.getJobItemGroup( '', false, false, {\n\t\t\t\tonResult: function( res ) {\n\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tres = Global.buildTreeRecord( res );\n\t\t\t\t\t$this.job_item_group_array = res;\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.punch_tag_group_api.getPunchTagGroup( '', false, false, {\n\t\t\t\tonResult: function( res ) {\n\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tres = Global.buildTreeRecord( res );\n\t\t\t\t\t$this.punch_tag_group_array = res;\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tbuildEditViewUI() {\n\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_premium_policy': { 'label': $.i18n._( 'Premium Policy' ) },\n\t\t\t'tab_date_criteria': { 'label': $.i18n._( 'Date/Time Criteria' ) },\n\t\t\t'tab_differential_criteria': { 'label': $.i18n._( 'Differential Criteria' ) },\n\t\t\t'tab_meal_criteria': { 'label': $.i18n._( 'Meal/Break Criteria' ) },\n\t\t\t'tab_callback_criteria': { 'label': $.i18n._( 'CallBack Criteria' ) },\n\t\t\t'tab_minimum_shift_time_criteria': { 'label': $.i18n._( 'Minimum Shift Time Criteria' ) },\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tthis.navigation.AComboBox( {\n\t\t\tapi_class: TTAPI.APIPremiumPolicy,\n\t\t\tid: this.script_name + '_navigation',\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_premium',\n\t\t\tnavigation_mode: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\n\t\tthis.setNavigation();\n\n\t\t//Tab 0 start\n\n\t\tvar tab_premium_policy = this.edit_view_tab.find( '#tab_premium_policy' );\n\n\t\tvar tab_premium_policy_column1 = tab_premium_policy.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_premium_policy_column1 );\n\n\t\tvar form_item_input;\n\t\tvar widgetContainer;\n\t\tvar label;\n\n\t\t//Name\n\t\tform_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_premium_policy_column1, '' );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Description\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\t\tform_item_input.TTextArea( { field: 'description', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_premium_policy_column1, '', null, null, true );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t//Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'type_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Type' ), form_item_input, tab_premium_policy_column1 );\n\n\t\t//Hours/Pay Criteria\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );\n\t\tform_item_input.SeparatedBox( { label: $.i18n._( 'Hours/Pay Criteria' ) } );\n\t\tthis.addEditFieldToColumn( null, form_item_input, tab_premium_policy_column1 );\n\n\t\t//Minimum Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'minimum_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( '(Use 0 for no minimum)' ) + '</span>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Time' ), form_item_input, tab_premium_policy_column1, '', widgetContainer );\n\n\t\t//Maximum Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'maximum_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( '(Use 0 for no maximum)' ) + '</span>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Maximum Time' ), form_item_input, tab_premium_policy_column1, '', widgetContainer );\n\n\t\t//Min/Max Time Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'min_max_time_type_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.min_max_time_type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Min/Max Time Resets' ), form_item_input, tab_premium_policy_column1 );\n\n\t\t//Include Partial Punches\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'include_partial_punch' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Include Partial Punches' ), form_item_input, tab_premium_policy_column1, '', null, true );\n\n\t\t// Contributing Shift\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIContributingShiftPolicy,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_contributing_shift_policy',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tset_default: true,\n\t\t\tfield: 'contributing_shift_policy_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Contributing Shift Policy' ), form_item_input, tab_premium_policy_column1 );\n\n\t\t//Pay Code\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIPayCode,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_pay_code',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_default: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'pay_code_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Pay Code' ), form_item_input, tab_premium_policy_column1 );\n\n\t\t//Pay Formula Policy\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIPayFormulaPolicy,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_pay_formula_policy',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'pay_formula_policy_id',\n\t\t\tcustom_first_label: $.i18n._( '-- Defined By Pay Code --' ),\n\t\t\tadded_items: [\n\t\t\t\t{ value: TTUUID.zero_id, label: $.i18n._( '-- Defined By Pay Code --' ) }\n\t\t\t]\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Pay Formula Policy' ), form_item_input, tab_premium_policy_column1 );\n\n\t\t//Tab 1 start\n\t\tvar tab_date_criteria = this.edit_view_tab.find( '#tab_date_criteria' );\n\n\t\tvar tab_date_criteria_column1 = tab_date_criteria.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[1] = [];\n\n\t\tthis.edit_view_tabs[1].push( tab_date_criteria_column1 );\n\n\t\t// Start Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'start_date' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Start Date' ), form_item_input, tab_date_criteria_column1, '', null );\n\n\t\t// End Date\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'end_date' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'End Date' ), form_item_input, tab_date_criteria_column1, '', null );\n\n\t\t// Start Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TIME_PICKER );\n\t\tform_item_input.TTimePicker( { field: 'start_time' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Start Time' ), form_item_input, tab_date_criteria_column1, '', null );\n\n\t\t// End Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TIME_PICKER );\n\t\tform_item_input.TTimePicker( { field: 'end_time' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'End Time' ), form_item_input, tab_date_criteria_column1, '', null );\n\n\t\t// Daily Time\n\n\t\t// daily_trigger_time\n\n\t\tvar form_item_daily_trigger_time_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_daily_trigger_time_input.TTextInput( {\n\t\t\tfield: 'daily_trigger_time1',\n\t\t\tmode: 'time_unit',\n\t\t\tneed_parser_sec: true\n\t\t} );\n\n\t\tvar form_item_maximum_daily_trigger_time_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_maximum_daily_trigger_time_input.TTextInput( {\n\t\t\tfield: 'maximum_daily_trigger_time',\n\t\t\tmode: 'time_unit',\n\t\t\tneed_parser_sec: true\n\t\t} );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\n\t\tvar label_1 = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Active After' ) + ' </span>' );\n\t\tvar label_2 = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Active Before' ) + ' </span>' );\n\n\t\twidgetContainer.append( label_1 );\n\t\twidgetContainer.append( form_item_daily_trigger_time_input );\n\t\twidgetContainer.append( label_2 );\n\t\twidgetContainer.append( form_item_maximum_daily_trigger_time_input );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Daily Time' ), [form_item_daily_trigger_time_input, form_item_maximum_daily_trigger_time_input], tab_date_criteria_column1, '', widgetContainer );\n\n\t\t// Weekly Time\n\t\tvar form_item_weekly_trigger_time_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_weekly_trigger_time_input.TTextInput( {\n\t\t\tfield: 'weekly_trigger_time',\n\t\t\tmode: 'time_unit',\n\t\t\tneed_parser_sec: true\n\t\t} );\n\n\t\tvar form_item_maximum_weekly_trigger_time_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_maximum_weekly_trigger_time_input.TTextInput( {\n\t\t\tfield: 'maximum_weekly_trigger_time',\n\t\t\tmode: 'time_unit',\n\t\t\tneed_parser_sec: true\n\t\t} );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\n\t\tlabel_1 = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Active After' ) + ' </span>' );\n\t\tlabel_2 = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Active Before' ) + ' </span>' );\n\n\t\twidgetContainer.append( label_1 );\n\t\twidgetContainer.append( form_item_weekly_trigger_time_input );\n\t\twidgetContainer.append( label_2 );\n\t\twidgetContainer.append( form_item_maximum_weekly_trigger_time_input );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Weekly Time' ), [form_item_weekly_trigger_time_input, form_item_maximum_weekly_trigger_time_input], tab_date_criteria_column1, '', widgetContainer );\n\n\t\t// Effective Days\n\t\tvar form_item_sun_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_sun_checkbox.TCheckbox( { field: 'sun' } );\n\n\t\tvar form_item_mon_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_mon_checkbox.TCheckbox( { field: 'mon' } );\n\n\t\tvar form_item_tue_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_tue_checkbox.TCheckbox( { field: 'tue' } );\n\n\t\tvar form_item_wed_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_wed_checkbox.TCheckbox( { field: 'wed' } );\n\n\t\tvar form_item_thu_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_thu_checkbox.TCheckbox( { field: 'thu' } );\n\n\t\tvar form_item_fri_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_fri_checkbox.TCheckbox( { field: 'fri' } );\n\n\t\tvar form_item_sat_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_sat_checkbox.TCheckbox( { field: 'sat' } );\n\n\t\twidgetContainer = $( '<div class=\\'\\'></div>' );\n\n\t\tvar sun = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Sun' ) + ' <br> ' + ' </span>' );\n\t\tvar mon = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Mon' ) + ' <br> ' + ' </span>' );\n\t\tvar tue = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Tue' ) + ' <br> ' + ' </span>' );\n\t\tvar wed = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Wed' ) + ' <br> ' + ' </span>' );\n\t\tvar thu = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Thu' ) + ' <br> ' + ' </span>' );\n\t\tvar fri = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Fri' ) + ' <br> ' + ' </span>' );\n\t\tvar sat = $( '<span class=\\'widget-top-label\\'> ' + $.i18n._( 'Sat' ) + ' <br> ' + ' </span>' );\n\n\t\tsun.append( form_item_sun_checkbox );\n\t\tmon.append( form_item_mon_checkbox );\n\t\ttue.append( form_item_tue_checkbox );\n\t\twed.append( form_item_wed_checkbox );\n\t\tthu.append( form_item_thu_checkbox );\n\t\tfri.append( form_item_fri_checkbox );\n\t\tsat.append( form_item_sat_checkbox );\n\n\t\twidgetContainer.append( sun );\n\t\twidgetContainer.append( mon );\n\t\twidgetContainer.append( tue );\n\t\twidgetContainer.append( wed );\n\t\twidgetContainer.append( thu );\n\t\twidgetContainer.append( fri );\n\t\twidgetContainer.append( sat );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Effective Days' ), [form_item_sun_checkbox, form_item_mon_checkbox, form_item_tue_checkbox, form_item_wed_checkbox, form_item_thu_checkbox, form_item_fri_checkbox, form_item_sat_checkbox], tab_date_criteria_column1, '', widgetContainer, false, true );\n\n\t\t// Holidays\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'include_holiday_type_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.include_holiday_type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Holidays' ), form_item_input, tab_date_criteria_column1, '' );\n\n\t\t// Tab2 start\n\n\t\tvar tab_differential_criteria = this.edit_view_tab.find( '#tab_differential_criteria' );\n\n\t\tvar tab_differential_criteria_column1 = tab_differential_criteria.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[2] = [];\n\n\t\tthis.edit_view_tabs[2].push( tab_differential_criteria_column1 );\n\n\t\t// Branches\n\t\tvar v_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t//Selection Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'branch_selection_type_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.branch_selection_type_array );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\tv_box.append( form_item );\n\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t//Selection\n\t\tvar form_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input_1.AComboBox( {\n\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_branch',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'branch'\n\t\t} );\n\n\t\tvar form_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\tv_box.append( form_item );\n\n\t\t// Exclude Default\n\t\tvar form_item_input_2 = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\n\t\tform_item_input_2.TCheckbox( { field: 'exclude_default_branch' } );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input_2, $.i18n._( 'Exclude Default' ) );\n\n\t\tv_box.append( form_item );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Branches' ), [form_item_input, form_item_input_1, form_item_input_2], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t// Departments\n\n\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t//Selection Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'department_selection_type_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.department_selection_type_array );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\tv_box.append( form_item );\n\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t//Selection\n\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input_1.AComboBox( {\n\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_department',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'department'\n\t\t} );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\tv_box.append( form_item );\n\n\t\t// Exclude Default\n\t\tform_item_input_2 = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\n\t\tform_item_input_2.TCheckbox( { field: 'exclude_default_department' } );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input_2, $.i18n._( 'Exclude Default' ) );\n\n\t\tv_box.append( form_item );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Departments' ), [form_item_input, form_item_input_1, form_item_input_2], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t// Job Groups\n\n\t\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t\t//Selection Type\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\t\tform_item_input.TComboBox( { field: 'job_group_selection_type_id', set_empty: false } );\n\t\t\tform_item_input.setSourceData( $this.job_group_selection_type_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\t\tv_box.append( form_item );\n\t\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t\t//Selection\n\t\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input_1.AComboBox( {\n\t\t\t\ttree_mode: true,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_tree_column',\n\t\t\t\tset_empty: true,\n\t\t\t\tfield: 'job_group'\n\t\t\t} );\n\n\t\t\tform_item_input_1.setSourceData( $this.job_group_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\t\tv_box.append( form_item );\n\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Job Groups' ), [form_item_input, form_item_input_1], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t\t// Jobs\n\t\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t\t//Selection Type\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\t\tform_item_input.TComboBox( { field: 'job_selection_type_id', set_empty: false } );\n\t\t\tform_item_input.setSourceData( $this.job_selection_type_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\t\tv_box.append( form_item );\n\t\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t\t//Selection\n\t\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input_1.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIJob,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_job',\n\t\t\t\tshow_search_inputs: true,\n\t\t\t\tset_empty: true,\n\t\t\t\tfield: 'job'\n\t\t\t} );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\t\tv_box.append( form_item );\n\n\t\t\t// Exclude Default\n\t\t\tform_item_input_2 = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\t\tform_item_input_2.TCheckbox( { field: 'exclude_default_job' } );\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_2, $.i18n._( 'Exclude Default' ) );\n\t\t\tv_box.append( form_item );\n\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Jobs' ), [form_item_input, form_item_input_1, form_item_input_2], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t\t// Task Groups\n\n\t\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t\t//Selection Type\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\t\tform_item_input.TComboBox( { field: 'job_item_group_selection_type_id', set_empty: false } );\n\t\t\tform_item_input.setSourceData( $this.job_item_group_selection_type_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\t\tv_box.append( form_item );\n\t\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t\t//Selection\n\t\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input_1.AComboBox( {\n\t\t\t\ttree_mode: true,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_tree_column',\n\t\t\t\tset_empty: true,\n\t\t\t\tfield: 'job_item_group'\n\t\t\t} );\n\n\t\t\tform_item_input_1.setSourceData( $this.job_item_group_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\t\tv_box.append( form_item );\n\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Task Groups' ), [form_item_input, form_item_input_1], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t\t// Tasks\n\n\t\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t\t//Selection Type\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\t\tform_item_input.TComboBox( { field: 'job_item_selection_type_id', set_empty: false } );\n\t\t\tform_item_input.setSourceData( $this.job_item_selection_type_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\t\tv_box.append( form_item );\n\t\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t\t//Selection\n\t\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input_1.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIJobItem,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_job_item',\n\t\t\t\tshow_search_inputs: true,\n\t\t\t\tset_empty: true,\n\t\t\t\tfield: 'job_item'\n\t\t\t} );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\t\tv_box.append( form_item );\n\n\t\t\t// Exclude Default\n\t\t\tform_item_input_2 = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\t\tform_item_input_2.TCheckbox( { field: 'exclude_default_job_item' } );\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_2, $.i18n._( 'Exclude Default' ) );\n\t\t\tv_box.append( form_item );\n\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Tasks' ), [form_item_input, form_item_input_1, form_item_input_2], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t\t// Punch Tag Groups\n\t\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t\t//Selection Type\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\t\tform_item_input.TComboBox( { field: 'punch_tag_group_selection_type_id', set_empty: false } );\n\t\t\tform_item_input.setSourceData( $this.punch_tag_group_selection_type_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\t\tv_box.append( form_item );\n\t\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t\t//Selection\n\t\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input_1.AComboBox( {\n\t\t\t\ttree_mode: true,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_tree_column',\n\t\t\t\tset_empty: true,\n\t\t\t\tfield: 'punch_tag_group'\n\t\t\t} );\n\n\t\t\tform_item_input_1.setSourceData( $this.punch_tag_group_array );\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\t\t\tv_box.append( form_item );\n\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Punch Tag Groups' ), [form_item_input, form_item_input_1], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t\t// Punch Tags\n\t\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t\t//Selection Type\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\t\tform_item_input.TComboBox( { field: 'punch_tag_selection_type_id', set_empty: false } );\n\t\t\tform_item_input.setSourceData( $this.punch_tag_selection_type_array );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\t\tv_box.append( form_item );\n\t\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t\t//Selection\n\t\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input_1.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIPunchTag,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_job_item',\n\t\t\t\tshow_search_inputs: true,\n\t\t\t\tset_empty: true,\n\t\t\t\tfield: 'punch_tag'\n\t\t\t} );\n\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\t\t\tv_box.append( form_item );\n\n\t\t\t// Exclude Default\n\t\t\tform_item_input_2 = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\t\tform_item_input_2.TCheckbox( { field: 'exclude_default_punch_tag' } );\n\t\t\tform_item = this.putInputToInsideFormItem( form_item_input_2, $.i18n._( 'Exclude Default' ) );\n\t\t\tv_box.append( form_item );\n\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Punch Tags' ), [form_item_input, form_item_input_1, form_item_input_2], tab_differential_criteria_column1, '', v_box, false, true );\n\n\t\t}\n\n\t\t// Tab3 start\n\n\t\tvar tab_meal_criteria = this.edit_view_tab.find( '#tab_meal_criteria' );\n\n\t\tvar tab_meal_criteria_column1 = tab_meal_criteria.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[3] = [];\n\n\t\tthis.edit_view_tabs[3].push( tab_meal_criteria_column1 );\n\n\t\t// Active After Daily Hours\n\t\t// daily_trigger_time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'daily_trigger_time2', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Active After Daily Hours' ), form_item_input, tab_meal_criteria_column1, '', null );\n\n\t\t// Maximum Time Without A Break\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'maximum_no_break_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Maximum Time Without A Break' ), form_item_input, tab_meal_criteria_column1, '', null );\n\n\t\t// Minimum Time Recognized As Break\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'minimum_break_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Time Recognized As Break' ), form_item_input, tab_meal_criteria_column1, '', null );\n\n\t\t// Tab4 start\n\n\t\tvar tab_callback_criteria = this.edit_view_tab.find( '#tab_callback_criteria' );\n\n\t\tvar tab_callback_criteria_column1 = tab_callback_criteria.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[4] = [];\n\n\t\tthis.edit_view_tabs[4].push( tab_callback_criteria_column1 );\n\n\t\t// Minimum Time Between Shifts\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( {\n\t\t\tfield: 'minimum_time_between_shift1',\n\t\t\tmode: 'time_unit',\n\t\t\tneed_parser_sec: true\n\t\t} );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Time Between Shifts' ), form_item_input, tab_callback_criteria_column1, '', null );\n\n\t\t//First Shift Must Be At Least\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'minimum_first_shift_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'First Shift Must Be At Least' ), form_item_input, tab_callback_criteria_column1, '', null );\n\n\t\t// Tab5 start\n\n\t\tvar tab_minimum_shift_time_criteria = this.edit_view_tab.find( '#tab_minimum_shift_time_criteria' );\n\n\t\tvar tab_minimum_shift_time_criteria_column1 = tab_minimum_shift_time_criteria.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[5] = [];\n\n\t\tthis.edit_view_tabs[5].push( tab_minimum_shift_time_criteria_column1 );\n\n\t\t// Minimum Shift Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'minimum_shift_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Shift Time' ), form_item_input, tab_minimum_shift_time_criteria_column1, '', null );\n\n\t\t// Minimum Time-Off Between Shifts\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( {\n\t\t\tfield: 'minimum_time_between_shift2',\n\t\t\tmode: 'time_unit',\n\t\t\tneed_parser_sec: true\n\t\t} );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Time-Off Between Shifts' ), form_item_input, tab_minimum_shift_time_criteria_column1, '', null );\n\t}\n\n\tsetCurrentEditRecordData() {\n\n\t\t// When mass editing, these fields may not be the common data, so their value will be undefined, so this will cause their change event cannot work properly.\n\t\tthis.setDefaultData( {\n\t\t\t'branch_selection_type_id': 10,\n\t\t\t'department_selection_type_id': 10,\n\t\t\t'job_group_selection_type_id': 10,\n\t\t\t'job_selection_type_id': 10,\n\t\t\t'job_item_group_selection_type_id': 10,\n\t\t\t'job_item_selection_type_id': 10,\n\t\t\t'punch_tag_group_selection_type_id': 10,\n\t\t\t'punch_tag_selection_type_id': 10,\n\t\t\t'type_id': 10\n\t\t} );\n\n\t\tfor ( var key in this.current_edit_record ) {\n\t\t\tvar widget = this.edit_view_ui_dic[key];\n\t\t\tif ( Global.isSet( widget ) ) {\n\t\t\t\tswitch ( key ) {\n\t\t\t\t\tcase 'minimum_time_between_shift1':\n\t\t\t\t\tcase 'minimum_time_between_shift2':\n\t\t\t\t\t\tif ( Global.isSet( this.current_edit_record['minimum_time_between_shift'] ) ) {\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record['minimum_time_between_shift'] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'daily_trigger_time1':\n\t\t\t\t\tcase 'daily_trigger_time2':\n\t\t\t\t\t\tif ( Global.isSet( this.current_edit_record['daily_trigger_time'] ) ) {\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record['daily_trigger_time'] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pay_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onPayTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'branch_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onBranchSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'department_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onDepartmentSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_group_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onJobGroupSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onJobSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_item_group_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onJobItemGroupSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_item_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onJobItemSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'punch_tag_group_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onPunchTagGroupSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'punch_tag_selection_type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onPunchTagSelectionTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'type_id':\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tthis.onTypeChange();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.collectUIDataToCurrentEditRecord();\n\n\t\tthis.setEditViewDataDone();\n\t}\n\n\tonBranchSelectionTypeChange() {\n\t\tif ( this.current_edit_record['branch_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\tthis.edit_view_ui_dic['branch'].setEnabled( false );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['branch'].setEnabled( true );\n\t\t}\n\t}\n\n\tonDepartmentSelectionTypeChange() {\n\t\tif ( this.current_edit_record['department_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\tthis.edit_view_ui_dic['department'].setEnabled( false );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['department'].setEnabled( true );\n\t\t}\n\t}\n\n\tonJobGroupSelectionTypeChange() {\n\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\n\t\t\tif ( this.current_edit_record['job_group_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\t\tthis.edit_view_ui_dic['job_group'].setEnabled( false );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['job_group'].setEnabled( true );\n\t\t\t}\n\t\t}\n\t}\n\n\tonJobSelectionTypeChange() {\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tif ( this.current_edit_record['job_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\t\tthis.edit_view_ui_dic['job'].setEnabled( false );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['job'].setEnabled( true );\n\t\t\t}\n\t\t}\n\t}\n\n\tonJobItemGroupSelectionTypeChange() {\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tif ( this.current_edit_record['job_item_group_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\t\tthis.edit_view_ui_dic['job_item_group'].setEnabled( false );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['job_item_group'].setEnabled( true );\n\t\t\t}\n\t\t}\n\t}\n\n\tonJobItemSelectionTypeChange() {\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tif ( this.current_edit_record['job_item_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\t\tthis.edit_view_ui_dic['job_item'].setEnabled( false );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['job_item'].setEnabled( true );\n\t\t\t}\n\t\t}\n\t}\n\n\tonPunchTagGroupSelectionTypeChange() {\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tif ( this.current_edit_record['punch_tag_group_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\t\tthis.edit_view_ui_dic['punch_tag_group'].setEnabled( false );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['punch_tag_group'].setEnabled( true );\n\t\t\t}\n\t\t}\n\t}\n\n\tonPunchTagSelectionTypeChange() {\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tif ( this.current_edit_record['punch_tag_selection_type_id'] == 10 || this.is_viewing ) {\n\t\t\t\tthis.edit_view_ui_dic['punch_tag'].setEnabled( false );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['punch_tag'].setEnabled( true );\n\t\t\t}\n\t\t}\n\t}\n\n\tonPayTypeChange() {\n\t\tif ( this.current_edit_record['pay_type_id'] == 10 || this.current_edit_record['pay_type_id'] == 42 ) {\n\t\t\tthis.edit_view_form_item_dic['rate'].find( '.edit-view-form-item-label' ).text( $.i18n._( 'Rate' ) );\n\t\t\tthis.edit_view_form_item_dic['rate'].find( '.widget-right-label' ).text( '(' + $.i18n._( 'ie' ) + ': ' + $.i18n._( '1.5 for time and a half' ) + ')' );\n\t\t\tthis.attachElement( 'wage_group_id' );\n\n\t\t} else if ( this.current_edit_record['pay_type_id'] == 20 ) {\n\t\t\tthis.edit_view_form_item_dic['rate'].find( '.edit-view-form-item-label' ).text( $.i18n._( 'Premium' ) );\n\t\t\tthis.edit_view_form_item_dic['rate'].find( '.widget-right-label' ).text( '(' + $.i18n._( 'ie' ) + ': ' + $.i18n._( '0.75 for 75 cent/hr' ) + ')' );\n\t\t\tthis.detachElement( 'wage_group_id' );\n\n\t\t} else if ( this.current_edit_record['pay_type_id'] == 30 || this.current_edit_record['pay_type_id'] == 32 || this.current_edit_record['pay_type_id'] == 40 ) {\n\t\t\tthis.edit_view_form_item_dic['rate'].find( '.edit-view-form-item-label' ).text( $.i18n._( 'Hourly Rate' ) );\n\t\t\tthis.edit_view_form_item_dic['rate'].find( '.widget-right-label' ).text( '(' + $.i18n._( 'ie' ) + ': ' + $.i18n._( '10.00/hr' ) + ')' );\n\t\t\tthis.attachElement( 'wage_group_id' );\n\t\t}\n\n\t\tthis.editFieldResize();\n\t}\n\n\tonTypeChange() {\n\n\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\n\t\tthis.attachElement( 'include_partial_punch' );\n\n\t\tif ( this.current_edit_record['type_id'] == 10 ) {\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\t\t} else if ( this.current_edit_record['type_id'] == 20 ) {\n\n\t\t\tthis.detachElement( 'include_partial_punch' );\n\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\t\t} else if ( this.current_edit_record['type_id'] == 30 ) {\n\n\t\t\tthis.detachElement( 'include_partial_punch' );\n\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\t\t} else if ( this.current_edit_record['type_id'] == 40 ) {\n\n\t\t\tthis.detachElement( 'include_partial_punch' );\n\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\n\t\t} else if ( this.current_edit_record['type_id'] == 50 ) {\n\n\t\t\tthis.detachElement( 'include_partial_punch' );\n\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).show();\n\t\t} else if ( this.current_edit_record['type_id'] == 90 ) {\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\t\t} else if ( this.current_edit_record['type_id'] == 100 ) {\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[1] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).show();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[3] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[4] ).hide();\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[5] ).hide();\n\t\t}\n\n\t\tthis.editFieldResize();\n\t}\n\n\t/* jshint ignore:start */\n\tonFormItemChange( target, doNotValidate ) {\n\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\t\tvar c_value = target.getValue();\n\t\tthis.current_edit_record[key] = c_value;\n\n\t\tswitch ( key ) {\n\t\t\tcase 'minimum_time_between_shift1':\n\t\t\tcase 'minimum_time_between_shift2':\n\t\t\t\tthis.current_edit_record['minimum_time_between_shift'] = c_value;\n\t\t\t\tbreak;\n\t\t\tcase 'daily_trigger_time1':\n\t\t\tcase 'daily_trigger_time2':\n//\t\t\t\tthis.edit_view_ui_dic['daily_trigger_time1'].setValue( c_value );\n//\t\t\t\tthis.edit_view_ui_dic['daily_trigger_time2'].setValue( c_value );\n\t\t\t\tthis.current_edit_record['daily_trigger_time'] = c_value;\n\t\t\t\tbreak;\n//\t\t\tcase 'type_id':\n//\t\t\tcase 'accrual_policy_id':\n//\t\t\t\tthis.onTypeChange();\n//\t\t\t\tbreak;\n\t\t}\n\n//\t\tswitch ( key ) {\n//\t\t\tcase 'minimum_time':\n//\t\t\tcase 'maximum_time':\n//\t\t\tcase 'daily_trigger_time':\n//\t\t\tcase 'maximum_daily_trigger_time':\n//\t\t\tcase 'weekly_trigger_time':\n//\t\t\tcase 'maximum_weekly_trigger_time':\n//\t\t\tcase 'daily_trigger_time2':\n//\t\t\tcase 'maximum_no_break_time':\n//\t\t\tcase 'minimum_break_time':\n//\t\t\tcase 'minimum_time_between_shift':\n//\t\t\tcase 'minimum_first_shift_time':\n//\t\t\tcase 'minimum_shift_time':\n//\t\t\t\tc_value = this.date_api.parseTimeUnit( target.getValue(), {async: false} ).getResult();\n//\t\t\t\tbreak;\n//\t\t}\n\n\t\tif ( key === 'type_id' || key === 'accrual_policy_id' ) {\n\t\t\tthis.onTypeChange();\n\t\t}\n\t\tif ( key === 'pay_type_id' ) {\n\t\t\tthis.onPayTypeChange();\n\t\t}\n\t\tif ( key === 'branch_selection_type_id' ) {\n\t\t\tthis.onBranchSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'department_selection_type_id' ) {\n\t\t\tthis.onDepartmentSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'job_group_selection_type_id' ) {\n\t\t\tthis.onJobGroupSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'job_selection_type_id' ) {\n\t\t\tthis.onJobSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'job_item_group_selection_type_id' ) {\n\t\t\tthis.onJobItemGroupSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'job_item_selection_type_id' ) {\n\t\t\tthis.onJobItemSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'punch_tag_group_selection_type_id' ) {\n\t\t\tthis.onPunchTagGroupSelectionTypeChange();\n\t\t}\n\t\tif ( key === 'punch_tag_selection_type_id' ) {\n\t\t\tthis.onPunchTagSelectionTypeChange();\n\t\t}\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\t/* jshint ignore:end */\n\n\tuniformVariable( records ) {\n\n\t\treturn records;\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._( '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\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Type' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'type_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_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\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Pay Code' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'pay_code_id',\n\t\t\t\tlayout_name: 'global_pay_code',\n\t\t\t\tapi_class: TTAPI.APIPayCode,\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.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Pay Formula Policy' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'pay_formula_policy_id',\n\t\t\t\tlayout_name: 'global_pay_formula_policy',\n\t\t\t\tapi_class: TTAPI.APIPayFormulaPolicy,\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.AWESOME_BOX\n\t\t\t} ),\n\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\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\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\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDN0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLEVBQUUsQ0FBQztBQUNILEVBQUUsQ0FBQztBQUNILEVBQUUsQ0FBQztBQUNILEVBQUUsQ0FBQzs7QUFFSDs7QUFFQTtBQUNBLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLElBQUk7O0FBRUo7O0FBRUEsR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osSUFBSTs7QUFFSjs7QUFFQSxHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixJQUFJOztBQUVKOztBQUVBLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQzs7QUFFSixJQUFJOztBQUVKOztBQUVBLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLEdBQUcsQ0FBQztBQUNKLElBQUk7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixHQUFHLENBQUM7QUFDSixJQUFJO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsY0FBYztBQUMvRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbnRlcmZhY2UvaHRtbDUvdmlld3MvcG9saWN5L3ByZW1pdW1fcG9saWN5L1ByZW1pdW1Qb2xpY3lWaWV3Q29udHJvbGxlci5qcz8zZGI0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBQcmVtaXVtUG9saWN5Vmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlVmlld0NvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3Rvciggb3B0aW9ucyA9IHt9ICkge1xuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGVsOiAnI3ByZW1pdW1fcG9saWN5X3ZpZXdfY29udGFpbmVyJyxcblxuXHRcdFx0dHlwZV9hcnJheTogbnVsbCxcblx0XHRcdG1pbl9tYXhfdGltZV90eXBlX2FycmF5OiBudWxsLFxuXG5cdFx0XHRpbmNsdWRlX2hvbGlkYXlfdHlwZV9hcnJheTogbnVsbCxcblxuXHRcdFx0YnJhbmNoX3NlbGVjdGlvbl90eXBlX2FycmF5OiBudWxsLFxuXHRcdFx0ZGVwYXJ0bWVudF9zZWxlY3Rpb25fdHlwZV9hcnJheTogbnVsbCxcblxuXHRcdFx0am9iX2dyb3VwX3NlbGVjdGlvbl90eXBlX2FycmF5OiBudWxsLFxuXHRcdFx0am9iX3NlbGVjdGlvbl90eXBlX2FycmF5OiBudWxsLFxuXG5cdFx0XHRqb2JfZ3JvdXBfYXJyYXk6IG51bGwsXG5cdFx0XHRqb2JfaXRlbV9ncm91cF9hcnJheTogbnVsbCxcblx0XHRcdHB1bmNoX3RhZ19ncm91cF9hcnJheTogbnVsbCxcblxuXHRcdFx0am9iX2l0ZW1fZ3JvdXBfc2VsZWN0aW9uX3R5cGVfYXJyYXk6IG51bGwsXG5cdFx0XHRqb2JfaXRlbV9zZWxlY3Rpb25fdHlwZV9hcnJheTogbnVsbCxcblxuXHRcdFx0cHVuY2hfdGFnX2dyb3VwX3NlbGVjdGlvbl90eXBlX2FycmF5OiBudWxsLFxuXHRcdFx0cHVuY2hfdGFnX3NlbGVjdGlvbl90eXBlX2FycmF5OiBudWxsLFxuXG5cdFx0XHRqb2JfZ3JvdXBfYXBpOiBudWxsLFxuXHRcdFx0am9iX2l0ZW1fZ3JvdXBfYXBpOiBudWxsLFxuXHRcdFx0cHVuY2hfdGFnX2dyb3VwX2FwaTogbnVsbCxcblx0XHRcdGRhdGVfYXBpOiBudWxsXG5cdFx0fSApO1xuXG5cdFx0c3VwZXIoIG9wdGlvbnMgKTtcblx0fVxuXG5cdGluaXQoIG9wdGlvbnMgKSB7XG5cdFx0Ly90aGlzLl9zdXBlcignaW5pdGlhbGl6ZScsIG9wdGlvbnMgKTtcblx0XHR0aGlzLmVkaXRfdmlld190cGwgPSAnUHJlbWl1bVBvbGljeUVkaXRWaWV3Lmh0bWwnO1xuXHRcdHRoaXMucGVybWlzc2lvbl9pZCA9ICdwcmVtaXVtX3BvbGljeSc7XG5cdFx0dGhpcy52aWV3SWQgPSAnUHJlbWl1bVBvbGljeSc7XG5cdFx0dGhpcy5zY3JpcHRfbmFtZSA9ICdQcmVtaXVtUG9saWN5Vmlldyc7XG5cdFx0dGhpcy50YWJsZV9uYW1lX2tleSA9ICdwcmVtaXVtX3BvbGljeSc7XG5cdFx0dGhpcy5jb250ZXh0X21lbnVfbmFtZSA9ICQuaTE4bi5fKCAnUHJlbWl1bSBQb2xpY3knICk7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uX2xhYmVsID0gJC5pMThuLl8oICdQcmVtaXVtIFBvbGljeScgKTtcblx0XHR0aGlzLmFwaSA9IFRUQVBJLkFQSVByZW1pdW1Qb2xpY3k7XG5cblx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdHRoaXMuam9iX2dyb3VwX2FwaSA9IFRUQVBJLkFQSUpvYkdyb3VwO1xuXHRcdFx0dGhpcy5qb2JfaXRlbV9ncm91cF9hcGkgPSBUVEFQSS5BUElKb2JJdGVtR3JvdXA7XG5cdFx0XHR0aGlzLnB1bmNoX3RhZ19ncm91cF9hcGkgPSBUVEFQSS5BUElQdW5jaFRhZ0dyb3VwO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0ZV9hcGkgPSBUVEFQSS5BUElUVERhdGU7XG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblxuXHRcdHRoaXMuaW5pdERhdGEoKTtcblx0fVxuXG5cdGluaXRPcHRpb25zKCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgb3B0aW9ucyA9IFtcblx0XHRcdHsgb3B0aW9uX25hbWU6ICd0eXBlJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ21pbl9tYXhfdGltZV90eXBlJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2luY2x1ZGVfaG9saWRheV90eXBlJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2JyYW5jaF9zZWxlY3Rpb25fdHlwZScsIGFwaTogdGhpcy5hcGkgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2pvYl9ncm91cF9zZWxlY3Rpb25fdHlwZScsIGFwaTogdGhpcy5hcGkgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdqb2Jfc2VsZWN0aW9uX3R5cGUnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnam9iX2l0ZW1fZ3JvdXBfc2VsZWN0aW9uX3R5cGUnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnam9iX2l0ZW1fc2VsZWN0aW9uX3R5cGUnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAncHVuY2hfdGFnX2dyb3VwX3NlbGVjdGlvbl90eXBlJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3B1bmNoX3RhZ19zZWxlY3Rpb25fdHlwZScsIGFwaTogdGhpcy5hcGkgfSxcblx0XHRdO1xuXG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb25zKCBvcHRpb25zICk7XG5cblx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdHRoaXMuam9iX2dyb3VwX2FwaS5nZXRKb2JHcm91cCggJycsIGZhbHNlLCBmYWxzZSwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblxuXHRcdFx0XHRcdHJlcyA9IHJlcy5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRyZXMgPSBHbG9iYWwuYnVpbGRUcmVlUmVjb3JkKCByZXMgKTtcblx0XHRcdFx0XHQkdGhpcy5qb2JfZ3JvdXBfYXJyYXkgPSByZXM7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmpvYl9pdGVtX2dyb3VwX2FwaS5nZXRKb2JJdGVtR3JvdXAoICcnLCBmYWxzZSwgZmFsc2UsIHtcblx0XHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXMgKSB7XG5cblx0XHRcdFx0XHRyZXMgPSByZXMuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0cmVzID0gR2xvYmFsLmJ1aWxkVHJlZVJlY29yZCggcmVzICk7XG5cdFx0XHRcdFx0JHRoaXMuam9iX2l0ZW1fZ3JvdXBfYXJyYXkgPSByZXM7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLnB1bmNoX3RhZ19ncm91cF9hcGkuZ2V0UHVuY2hUYWdHcm91cCggJycsIGZhbHNlLCBmYWxzZSwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblxuXHRcdFx0XHRcdHJlcyA9IHJlcy5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRyZXMgPSBHbG9iYWwuYnVpbGRUcmVlUmVjb3JkKCByZXMgKTtcblx0XHRcdFx0XHQkdGhpcy5wdW5jaF90YWdfZ3JvdXBfYXJyYXkgPSByZXM7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdGJ1aWxkRWRpdFZpZXdVSSgpIHtcblxuXHRcdHN1cGVyLmJ1aWxkRWRpdFZpZXdVSSgpO1xuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdHZhciB0YWJfbW9kZWwgPSB7XG5cdFx0XHQndGFiX3ByZW1pdW1fcG9saWN5JzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ1ByZW1pdW0gUG9saWN5JyApIH0sXG5cdFx0XHQndGFiX2RhdGVfY3JpdGVyaWEnOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnRGF0ZS9UaW1lIENyaXRlcmlhJyApIH0sXG5cdFx0XHQndGFiX2RpZmZlcmVudGlhbF9jcml0ZXJpYSc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdEaWZmZXJlbnRpYWwgQ3JpdGVyaWEnICkgfSxcblx0XHRcdCd0YWJfbWVhbF9jcml0ZXJpYSc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdNZWFsL0JyZWFrIENyaXRlcmlhJyApIH0sXG5cdFx0XHQndGFiX2NhbGxiYWNrX2NyaXRlcmlhJzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ0NhbGxCYWNrIENyaXRlcmlhJyApIH0sXG5cdFx0XHQndGFiX21pbmltdW1fc2hpZnRfdGltZV9jcml0ZXJpYSc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdNaW5pbXVtIFNoaWZ0IFRpbWUgQ3JpdGVyaWEnICkgfSxcblx0XHRcdCd0YWJfYXVkaXQnOiB0cnVlLFxuXHRcdH07XG5cdFx0dGhpcy5zZXRUYWJNb2RlbCggdGFiX21vZGVsICk7XG5cblx0XHR0aGlzLm5hdmlnYXRpb24uQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVByZW1pdW1Qb2xpY3ksXG5cdFx0XHRpZDogdGhpcy5zY3JpcHRfbmFtZSArICdfbmF2aWdhdGlvbicsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfcHJlbWl1bScsXG5cdFx0XHRuYXZpZ2F0aW9uX21vZGU6IHRydWUsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHR9ICk7XG5cblx0XHR0aGlzLnNldE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGFiIDAgc3RhcnRcblxuXHRcdHZhciB0YWJfcHJlbWl1bV9wb2xpY3kgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcHJlbWl1bV9wb2xpY3knICk7XG5cblx0XHR2YXIgdGFiX3ByZW1pdW1fcG9saWN5X2NvbHVtbjEgPSB0YWJfcHJlbWl1bV9wb2xpY3kuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdID0gW107XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdLnB1c2goIHRhYl9wcmVtaXVtX3BvbGljeV9jb2x1bW4xICk7XG5cblx0XHR2YXIgZm9ybV9pdGVtX2lucHV0O1xuXHRcdHZhciB3aWRnZXRDb250YWluZXI7XG5cdFx0dmFyIGxhYmVsO1xuXG5cdFx0Ly9OYW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ25hbWUnLCB3aWR0aDogJzEwMCUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ05hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ByZW1pdW1fcG9saWN5X2NvbHVtbjEsICcnICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQucGFyZW50KCkud2lkdGgoICc0NSUnICk7XG5cblx0XHQvLyBEZXNjcmlwdGlvblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9BUkVBICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0QXJlYSggeyBmaWVsZDogJ2Rlc2NyaXB0aW9uJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEZXNjcmlwdGlvbicgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJlbWl1bV9wb2xpY3lfY29sdW1uMSwgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5wYXJlbnQoKS53aWR0aCggJzQ1JScgKTtcblxuXHRcdC8vVHlwZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAndHlwZV9pZCcsIHNldF9lbXB0eTogZmFsc2UgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy50eXBlX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdUeXBlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wcmVtaXVtX3BvbGljeV9jb2x1bW4xICk7XG5cblx0XHQvL0hvdXJzL1BheSBDcml0ZXJpYVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuU0VQQVJBVEVEX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5TZXBhcmF0ZWRCb3goIHsgbGFiZWw6ICQuaTE4bi5fKCAnSG91cnMvUGF5IENyaXRlcmlhJyApIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCBudWxsLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wcmVtaXVtX3BvbGljeV9jb2x1bW4xICk7XG5cblx0XHQvL01pbmltdW0gVGltZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnbWluaW11bV90aW1lJywgbW9kZTogJ3RpbWVfdW5pdCcsIG5lZWRfcGFyc2VyX3NlYzogdHJ1ZSB9ICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIgPSAkKCAnPGRpdiBjbGFzcz1cXCd3aWRnZXQtaC1ib3hcXCc+PC9kaXY+JyApO1xuXHRcdGxhYmVsID0gJCggJzxzcGFuIGNsYXNzPVxcJ3dpZGdldC1yaWdodC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnKFVzZSAwIGZvciBubyBtaW5pbXVtKScgKSArICc8L3NwYW4+JyApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggbGFiZWwgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ01pbmltdW0gVGltZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJlbWl1bV9wb2xpY3lfY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciApO1xuXG5cdFx0Ly9NYXhpbXVtIFRpbWVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21heGltdW1fdGltZScsIG1vZGU6ICd0aW1lX3VuaXQnLCBuZWVkX3BhcnNlcl9zZWM6IHRydWUgfSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblx0XHRsYWJlbCA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJyhVc2UgMCBmb3Igbm8gbWF4aW11bSknICkgKyAnPC9zcGFuPicgKTtcblxuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGZvcm1faXRlbV9pbnB1dCApO1xuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGxhYmVsICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNYXhpbXVtIFRpbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ByZW1pdW1fcG9saWN5X2NvbHVtbjEsICcnLCB3aWRnZXRDb250YWluZXIgKTtcblxuXHRcdC8vTWluL01heCBUaW1lIFR5cGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdtaW5fbWF4X3RpbWVfdHlwZV9pZCcsIHNldF9lbXB0eTogZmFsc2UgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5taW5fbWF4X3RpbWVfdHlwZV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTWluL01heCBUaW1lIFJlc2V0cycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJlbWl1bV9wb2xpY3lfY29sdW1uMSApO1xuXG5cdFx0Ly9JbmNsdWRlIFBhcnRpYWwgUHVuY2hlc1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENoZWNrYm94KCB7IGZpZWxkOiAnaW5jbHVkZV9wYXJ0aWFsX3B1bmNoJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdJbmNsdWRlIFBhcnRpYWwgUHVuY2hlcycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJlbWl1bV9wb2xpY3lfY29sdW1uMSwgJycsIG51bGwsIHRydWUgKTtcblxuXHRcdC8vIENvbnRyaWJ1dGluZyBTaGlmdFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUNvbnRyaWJ1dGluZ1NoaWZ0UG9saWN5LFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2NvbnRyaWJ1dGluZ19zaGlmdF9wb2xpY3knLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0c2V0X2RlZmF1bHQ6IHRydWUsXG5cdFx0XHRmaWVsZDogJ2NvbnRyaWJ1dGluZ19zaGlmdF9wb2xpY3lfaWQnXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQ29udHJpYnV0aW5nIFNoaWZ0IFBvbGljeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJlbWl1bV9wb2xpY3lfY29sdW1uMSApO1xuXG5cdFx0Ly9QYXkgQ29kZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVBheUNvZGUsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfcGF5X2NvZGUnLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2RlZmF1bHQ6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ3BheV9jb2RlX2lkJ1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1BheSBDb2RlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wcmVtaXVtX3BvbGljeV9jb2x1bW4xICk7XG5cblx0XHQvL1BheSBGb3JtdWxhIFBvbGljeVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVBheUZvcm11bGFQb2xpY3ksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfcGF5X2Zvcm11bGFfcG9saWN5Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAncGF5X2Zvcm11bGFfcG9saWN5X2lkJyxcblx0XHRcdGN1c3RvbV9maXJzdF9sYWJlbDogJC5pMThuLl8oICctLSBEZWZpbmVkIEJ5IFBheSBDb2RlIC0tJyApLFxuXHRcdFx0YWRkZWRfaXRlbXM6IFtcblx0XHRcdFx0eyB2YWx1ZTogVFRVVUlELnplcm9faWQsIGxhYmVsOiAkLmkxOG4uXyggJy0tIERlZmluZWQgQnkgUGF5IENvZGUgLS0nICkgfVxuXHRcdFx0XVxuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1BheSBGb3JtdWxhIFBvbGljeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJlbWl1bV9wb2xpY3lfY29sdW1uMSApO1xuXG5cdFx0Ly9UYWIgMSBzdGFydFxuXHRcdHZhciB0YWJfZGF0ZV9jcml0ZXJpYSA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9kYXRlX2NyaXRlcmlhJyApO1xuXG5cdFx0dmFyIHRhYl9kYXRlX2NyaXRlcmlhX2NvbHVtbjEgPSB0YWJfZGF0ZV9jcml0ZXJpYS5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0ucHVzaCggdGFiX2RhdGVfY3JpdGVyaWFfY29sdW1uMSApO1xuXG5cdFx0Ly8gU3RhcnQgRGF0ZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVIgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5URGF0ZVBpY2tlciggeyBmaWVsZDogJ3N0YXJ0X2RhdGUnIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3RhcnQgRGF0ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfZGF0ZV9jcml0ZXJpYV9jb2x1bW4xLCAnJywgbnVsbCApO1xuXG5cdFx0Ly8gRW5kIERhdGVcblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVIgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5URGF0ZVBpY2tlciggeyBmaWVsZDogJ2VuZF9kYXRlJyB9ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0VuZCBEYXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9kYXRlX2NyaXRlcmlhX2NvbHVtbjEsICcnLCBudWxsICk7XG5cblx0XHQvLyBTdGFydCBUaW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5USU1FX1BJQ0tFUiApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGltZVBpY2tlciggeyBmaWVsZDogJ3N0YXJ0X3RpbWUnIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3RhcnQgVGltZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfZGF0ZV9jcml0ZXJpYV9jb2x1bW4xLCAnJywgbnVsbCApO1xuXG5cdFx0Ly8gRW5kIFRpbWVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRJTUVfUElDS0VSICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUaW1lUGlja2VyKCB7IGZpZWxkOiAnZW5kX3RpbWUnIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRW5kIFRpbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2RhdGVfY3JpdGVyaWFfY29sdW1uMSwgJycsIG51bGwgKTtcblxuXHRcdC8vIERhaWx5IFRpbWVcblxuXHRcdC8vIGRhaWx5X3RyaWdnZXJfdGltZVxuXG5cdFx0dmFyIGZvcm1faXRlbV9kYWlseV90cmlnZ2VyX3RpbWVfaW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1fZGFpbHlfdHJpZ2dlcl90aW1lX2lucHV0LlRUZXh0SW5wdXQoIHtcblx0XHRcdGZpZWxkOiAnZGFpbHlfdHJpZ2dlcl90aW1lMScsXG5cdFx0XHRtb2RlOiAndGltZV91bml0Jyxcblx0XHRcdG5lZWRfcGFyc2VyX3NlYzogdHJ1ZVxuXHRcdH0gKTtcblxuXHRcdHZhciBmb3JtX2l0ZW1fbWF4aW11bV9kYWlseV90cmlnZ2VyX3RpbWVfaW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1fbWF4aW11bV9kYWlseV90cmlnZ2VyX3RpbWVfaW5wdXQuVFRleHRJbnB1dCgge1xuXHRcdFx0ZmllbGQ6ICdtYXhpbXVtX2RhaWx5X3RyaWdnZXJfdGltZScsXG5cdFx0XHRtb2RlOiAndGltZV91bml0Jyxcblx0XHRcdG5lZWRfcGFyc2VyX3NlYzogdHJ1ZVxuXHRcdH0gKTtcblxuXHRcdHdpZGdldENvbnRhaW5lciA9ICQoICc8ZGl2IGNsYXNzPVxcJ3dpZGdldC1oLWJveFxcJz48L2Rpdj4nICk7XG5cblx0XHR2YXIgbGFiZWxfMSA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ0FjdGl2ZSBBZnRlcicgKSArICcgPC9zcGFuPicgKTtcblx0XHR2YXIgbGFiZWxfMiA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ0FjdGl2ZSBCZWZvcmUnICkgKyAnIDwvc3Bhbj4nICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBsYWJlbF8xICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2RhaWx5X3RyaWdnZXJfdGltZV9pbnB1dCApO1xuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGxhYmVsXzIgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBmb3JtX2l0ZW1fbWF4aW11bV9kYWlseV90cmlnZ2VyX3RpbWVfaW5wdXQgKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGFpbHkgVGltZScgKSwgW2Zvcm1faXRlbV9kYWlseV90cmlnZ2VyX3RpbWVfaW5wdXQsIGZvcm1faXRlbV9tYXhpbXVtX2RhaWx5X3RyaWdnZXJfdGltZV9pbnB1dF0sIHRhYl9kYXRlX2NyaXRlcmlhX2NvbHVtbjEsICcnLCB3aWRnZXRDb250YWluZXIgKTtcblxuXHRcdC8vIFdlZWtseSBUaW1lXG5cdFx0dmFyIGZvcm1faXRlbV93ZWVrbHlfdHJpZ2dlcl90aW1lX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0Zm9ybV9pdGVtX3dlZWtseV90cmlnZ2VyX3RpbWVfaW5wdXQuVFRleHRJbnB1dCgge1xuXHRcdFx0ZmllbGQ6ICd3ZWVrbHlfdHJpZ2dlcl90aW1lJyxcblx0XHRcdG1vZGU6ICd0aW1lX3VuaXQnLFxuXHRcdFx0bmVlZF9wYXJzZXJfc2VjOiB0cnVlXG5cdFx0fSApO1xuXG5cdFx0dmFyIGZvcm1faXRlbV9tYXhpbXVtX3dlZWtseV90cmlnZ2VyX3RpbWVfaW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1fbWF4aW11bV93ZWVrbHlfdHJpZ2dlcl90aW1lX2lucHV0LlRUZXh0SW5wdXQoIHtcblx0XHRcdGZpZWxkOiAnbWF4aW11bV93ZWVrbHlfdHJpZ2dlcl90aW1lJyxcblx0XHRcdG1vZGU6ICd0aW1lX3VuaXQnLFxuXHRcdFx0bmVlZF9wYXJzZXJfc2VjOiB0cnVlXG5cdFx0fSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdGxhYmVsXzEgPSAkKCAnPHNwYW4gY2xhc3M9XFwnd2lkZ2V0LXJpZ2h0LWxhYmVsXFwnPiAnICsgJC5pMThuLl8oICdBY3RpdmUgQWZ0ZXInICkgKyAnIDwvc3Bhbj4nICk7XG5cdFx0bGFiZWxfMiA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ0FjdGl2ZSBCZWZvcmUnICkgKyAnIDwvc3Bhbj4nICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBsYWJlbF8xICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX3dlZWtseV90cmlnZ2VyX3RpbWVfaW5wdXQgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBsYWJlbF8yICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX21heGltdW1fd2Vla2x5X3RyaWdnZXJfdGltZV9pbnB1dCApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdXZWVrbHkgVGltZScgKSwgW2Zvcm1faXRlbV93ZWVrbHlfdHJpZ2dlcl90aW1lX2lucHV0LCBmb3JtX2l0ZW1fbWF4aW11bV93ZWVrbHlfdHJpZ2dlcl90aW1lX2lucHV0XSwgdGFiX2RhdGVfY3JpdGVyaWFfY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciApO1xuXG5cdFx0Ly8gRWZmZWN0aXZlIERheXNcblx0XHR2YXIgZm9ybV9pdGVtX3N1bl9jaGVja2JveCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1fc3VuX2NoZWNrYm94LlRDaGVja2JveCggeyBmaWVsZDogJ3N1bicgfSApO1xuXG5cdFx0dmFyIGZvcm1faXRlbV9tb25fY2hlY2tib3ggPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cdFx0Zm9ybV9pdGVtX21vbl9jaGVja2JveC5UQ2hlY2tib3goIHsgZmllbGQ6ICdtb24nIH0gKTtcblxuXHRcdHZhciBmb3JtX2l0ZW1fdHVlX2NoZWNrYm94ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdGZvcm1faXRlbV90dWVfY2hlY2tib3guVENoZWNrYm94KCB7IGZpZWxkOiAndHVlJyB9ICk7XG5cblx0XHR2YXIgZm9ybV9pdGVtX3dlZF9jaGVja2JveCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1fd2VkX2NoZWNrYm94LlRDaGVja2JveCggeyBmaWVsZDogJ3dlZCcgfSApO1xuXG5cdFx0dmFyIGZvcm1faXRlbV90aHVfY2hlY2tib3ggPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cdFx0Zm9ybV9pdGVtX3RodV9jaGVja2JveC5UQ2hlY2tib3goIHsgZmllbGQ6ICd0aHUnIH0gKTtcblxuXHRcdHZhciBmb3JtX2l0ZW1fZnJpX2NoZWNrYm94ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdGZvcm1faXRlbV9mcmlfY2hlY2tib3guVENoZWNrYm94KCB7IGZpZWxkOiAnZnJpJyB9ICk7XG5cblx0XHR2YXIgZm9ybV9pdGVtX3NhdF9jaGVja2JveCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1fc2F0X2NoZWNrYm94LlRDaGVja2JveCggeyBmaWVsZDogJ3NhdCcgfSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnXFwnPjwvZGl2PicgKTtcblxuXHRcdHZhciBzdW4gPSAkKCAnPHNwYW4gY2xhc3M9XFwnd2lkZ2V0LXRvcC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnU3VuJyApICsgJyA8YnI+ICcgKyAnIDwvc3Bhbj4nICk7XG5cdFx0dmFyIG1vbiA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtdG9wLWxhYmVsXFwnPiAnICsgJC5pMThuLl8oICdNb24nICkgKyAnIDxicj4gJyArICcgPC9zcGFuPicgKTtcblx0XHR2YXIgdHVlID0gJCggJzxzcGFuIGNsYXNzPVxcJ3dpZGdldC10b3AtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ1R1ZScgKSArICcgPGJyPiAnICsgJyA8L3NwYW4+JyApO1xuXHRcdHZhciB3ZWQgPSAkKCAnPHNwYW4gY2xhc3M9XFwnd2lkZ2V0LXRvcC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnV2VkJyApICsgJyA8YnI+ICcgKyAnIDwvc3Bhbj4nICk7XG5cdFx0dmFyIHRodSA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtdG9wLWxhYmVsXFwnPiAnICsgJC5pMThuLl8oICdUaHUnICkgKyAnIDxicj4gJyArICcgPC9zcGFuPicgKTtcblx0XHR2YXIgZnJpID0gJCggJzxzcGFuIGNsYXNzPVxcJ3dpZGdldC10b3AtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ0ZyaScgKSArICcgPGJyPiAnICsgJyA8L3NwYW4+JyApO1xuXHRcdHZhciBzYXQgPSAkKCAnPHNwYW4gY2xhc3M9XFwnd2lkZ2V0LXRvcC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnU2F0JyApICsgJyA8YnI+ICcgKyAnIDwvc3Bhbj4nICk7XG5cblx0XHRzdW4uYXBwZW5kKCBmb3JtX2l0ZW1fc3VuX2NoZWNrYm94ICk7XG5cdFx0bW9uLmFwcGVuZCggZm9ybV9pdGVtX21vbl9jaGVja2JveCApO1xuXHRcdHR1ZS5hcHBlbmQoIGZvcm1faXRlbV90dWVfY2hlY2tib3ggKTtcblx0XHR3ZWQuYXBwZW5kKCBmb3JtX2l0ZW1fd2VkX2NoZWNrYm94ICk7XG5cdFx0dGh1LmFwcGVuZCggZm9ybV9pdGVtX3RodV9jaGVja2JveCApO1xuXHRcdGZyaS5hcHBlbmQoIGZvcm1faXRlbV9mcmlfY2hlY2tib3ggKTtcblx0XHRzYXQuYXBwZW5kKCBmb3JtX2l0ZW1fc2F0X2NoZWNrYm94ICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBzdW4gKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBtb24gKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCB0dWUgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCB3ZWQgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCB0aHUgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBmcmkgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBzYXQgKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRWZmZWN0aXZlIERheXMnICksIFtmb3JtX2l0ZW1fc3VuX2NoZWNrYm94LCBmb3JtX2l0ZW1fbW9uX2NoZWNrYm94LCBmb3JtX2l0ZW1fdHVlX2NoZWNrYm94LCBmb3JtX2l0ZW1fd2VkX2NoZWNrYm94LCBmb3JtX2l0ZW1fdGh1X2NoZWNrYm94LCBmb3JtX2l0ZW1fZnJpX2NoZWNrYm94LCBmb3JtX2l0ZW1fc2F0X2NoZWNrYm94XSwgdGFiX2RhdGVfY3JpdGVyaWFfY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciwgZmFsc2UsIHRydWUgKTtcblxuXHRcdC8vIEhvbGlkYXlzXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2luY2x1ZGVfaG9saWRheV90eXBlX2lkJywgc2V0X2VtcHR5OiBmYWxzZSB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmluY2x1ZGVfaG9saWRheV90eXBlX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdIb2xpZGF5cycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfZGF0ZV9jcml0ZXJpYV9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gVGFiMiBzdGFydFxuXG5cdFx0dmFyIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWEgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfZGlmZmVyZW50aWFsX2NyaXRlcmlhJyApO1xuXG5cdFx0dmFyIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSA9IHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWEuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzJdID0gW107XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzJdLnB1c2goIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSApO1xuXG5cdFx0Ly8gQnJhbmNoZXNcblx0XHR2YXIgdl9ib3ggPSAkKCAnPGRpdiBjbGFzcz1cXCd2LWJveFxcJz48L2Rpdj4nICk7XG5cblx0XHQvL1NlbGVjdGlvbiBUeXBlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnYnJhbmNoX3NlbGVjdGlvbl90eXBlX2lkJywgc2V0X2VtcHR5OiBmYWxzZSB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmJyYW5jaF9zZWxlY3Rpb25fdHlwZV9hcnJheSApO1xuXG5cdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dCwgJC5pMThuLl8oICdTZWxlY3Rpb24gVHlwZScgKSApO1xuXG5cdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblx0XHR2X2JveC5hcHBlbmQoICc8ZGl2IGNsYXNzPVxcJ2NsZWFyLWJvdGgtZGl2XFwnPjwvZGl2PicgKTtcblxuXHRcdC8vU2VsZWN0aW9uXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dF8xID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0XzEuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUJyYW5jaCxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2JyYW5jaCcsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ2JyYW5jaCdcblx0XHR9ICk7XG5cblx0XHR2YXIgZm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8xLCAkLmkxOG4uXyggJ1NlbGVjdGlvbicgKSApO1xuXG5cdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdC8vIEV4Y2x1ZGUgRGVmYXVsdFxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXRfMiA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dF8yLlRDaGVja2JveCggeyBmaWVsZDogJ2V4Y2x1ZGVfZGVmYXVsdF9icmFuY2gnIH0gKTtcblxuXHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXRfMiwgJC5pMThuLl8oICdFeGNsdWRlIERlZmF1bHQnICkgKTtcblxuXHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0JyYW5jaGVzJyApLCBbZm9ybV9pdGVtX2lucHV0LCBmb3JtX2l0ZW1faW5wdXRfMSwgZm9ybV9pdGVtX2lucHV0XzJdLCB0YWJfZGlmZmVyZW50aWFsX2NyaXRlcmlhX2NvbHVtbjEsICcnLCB2X2JveCwgZmFsc2UsIHRydWUgKTtcblxuXHRcdC8vIERlcGFydG1lbnRzXG5cblx0XHR2X2JveCA9ICQoICc8ZGl2IGNsYXNzPVxcJ3YtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdC8vU2VsZWN0aW9uIFR5cGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJywgc2V0X2VtcHR5OiBmYWxzZSB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmRlcGFydG1lbnRfc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXQsICQuaTE4bi5fKCAnU2VsZWN0aW9uIFR5cGUnICkgKTtcblxuXHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cdFx0dl9ib3guYXBwZW5kKCAnPGRpdiBjbGFzcz1cXCdjbGVhci1ib3RoLWRpdlxcJz48L2Rpdj4nICk7XG5cblx0XHQvL1NlbGVjdGlvblxuXHRcdGZvcm1faXRlbV9pbnB1dF8xID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0XzEuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSURlcGFydG1lbnQsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9kZXBhcnRtZW50Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnZGVwYXJ0bWVudCdcblx0XHR9ICk7XG5cblx0XHRmb3JtX2l0ZW0gPSB0aGlzLnB1dElucHV0VG9JbnNpZGVGb3JtSXRlbSggZm9ybV9pdGVtX2lucHV0XzEsICQuaTE4bi5fKCAnU2VsZWN0aW9uJyApICk7XG5cblx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXG5cdFx0Ly8gRXhjbHVkZSBEZWZhdWx0XG5cdFx0Zm9ybV9pdGVtX2lucHV0XzIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXRfMi5UQ2hlY2tib3goIHsgZmllbGQ6ICdleGNsdWRlX2RlZmF1bHRfZGVwYXJ0bWVudCcgfSApO1xuXG5cdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8yLCAkLmkxOG4uXyggJ0V4Y2x1ZGUgRGVmYXVsdCcgKSApO1xuXG5cdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVwYXJ0bWVudHMnICksIFtmb3JtX2l0ZW1faW5wdXQsIGZvcm1faXRlbV9pbnB1dF8xLCBmb3JtX2l0ZW1faW5wdXRfMl0sIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSwgJycsIHZfYm94LCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDIwICkgKSB7XG5cdFx0XHQvLyBKb2IgR3JvdXBzXG5cblx0XHRcdHZfYm94ID0gJCggJzxkaXYgY2xhc3M9XFwndi1ib3hcXCc+PC9kaXY+JyApO1xuXG5cdFx0XHQvL1NlbGVjdGlvbiBUeXBlXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2pvYl9ncm91cF9zZWxlY3Rpb25fdHlwZV9pZCcsIHNldF9lbXB0eTogZmFsc2UgfSApO1xuXHRcdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmpvYl9ncm91cF9zZWxlY3Rpb25fdHlwZV9hcnJheSApO1xuXG5cdFx0XHRmb3JtX2l0ZW0gPSB0aGlzLnB1dElucHV0VG9JbnNpZGVGb3JtSXRlbSggZm9ybV9pdGVtX2lucHV0LCAkLmkxOG4uXyggJ1NlbGVjdGlvbiBUeXBlJyApICk7XG5cblx0XHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cdFx0XHR2X2JveC5hcHBlbmQoICc8ZGl2IGNsYXNzPVxcJ2NsZWFyLWJvdGgtZGl2XFwnPjwvZGl2PicgKTtcblxuXHRcdFx0Ly9TZWxlY3Rpb25cblx0XHRcdGZvcm1faXRlbV9pbnB1dF8xID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMS5BQ29tYm9Cb3goIHtcblx0XHRcdFx0dHJlZV9tb2RlOiB0cnVlLFxuXHRcdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RyZWVfY29sdW1uJyxcblx0XHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0XHRmaWVsZDogJ2pvYl9ncm91cCdcblx0XHRcdH0gKTtcblxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzEuc2V0U291cmNlRGF0YSggJHRoaXMuam9iX2dyb3VwX2FycmF5ICk7XG5cblx0XHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXRfMSwgJC5pMThuLl8oICdTZWxlY3Rpb24nICkgKTtcblxuXHRcdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdKb2IgR3JvdXBzJyApLCBbZm9ybV9pdGVtX2lucHV0LCBmb3JtX2l0ZW1faW5wdXRfMV0sIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSwgJycsIHZfYm94LCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0XHQvLyBKb2JzXG5cdFx0XHR2X2JveCA9ICQoICc8ZGl2IGNsYXNzPVxcJ3YtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdFx0Ly9TZWxlY3Rpb24gVHlwZVxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdqb2Jfc2VsZWN0aW9uX3R5cGVfaWQnLCBzZXRfZW1wdHk6IGZhbHNlIH0gKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5qb2Jfc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dCwgJC5pMThuLl8oICdTZWxlY3Rpb24gVHlwZScgKSApO1xuXG5cdFx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXHRcdFx0dl9ib3guYXBwZW5kKCAnPGRpdiBjbGFzcz1cXCdjbGVhci1ib3RoLWRpdlxcJz48L2Rpdj4nICk7XG5cblx0XHRcdC8vU2VsZWN0aW9uXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMSA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzEuQUNvbWJvQm94KCB7XG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJSm9iLFxuXHRcdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2pvYicsXG5cdFx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0XHRmaWVsZDogJ2pvYidcblx0XHRcdH0gKTtcblxuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8xLCAkLmkxOG4uXyggJ1NlbGVjdGlvbicgKSApO1xuXG5cdFx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXG5cdFx0XHQvLyBFeGNsdWRlIERlZmF1bHRcblx0XHRcdGZvcm1faXRlbV9pbnB1dF8yID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzIuVENoZWNrYm94KCB7IGZpZWxkOiAnZXhjbHVkZV9kZWZhdWx0X2pvYicgfSApO1xuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8yLCAkLmkxOG4uXyggJ0V4Y2x1ZGUgRGVmYXVsdCcgKSApO1xuXHRcdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdKb2JzJyApLCBbZm9ybV9pdGVtX2lucHV0LCBmb3JtX2l0ZW1faW5wdXRfMSwgZm9ybV9pdGVtX2lucHV0XzJdLCB0YWJfZGlmZmVyZW50aWFsX2NyaXRlcmlhX2NvbHVtbjEsICcnLCB2X2JveCwgZmFsc2UsIHRydWUgKTtcblxuXHRcdFx0Ly8gVGFzayBHcm91cHNcblxuXHRcdFx0dl9ib3ggPSAkKCAnPGRpdiBjbGFzcz1cXCd2LWJveFxcJz48L2Rpdj4nICk7XG5cblx0XHRcdC8vU2VsZWN0aW9uIFR5cGVcblx0XHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnam9iX2l0ZW1fZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnLCBzZXRfZW1wdHk6IGZhbHNlIH0gKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5qb2JfaXRlbV9ncm91cF9zZWxlY3Rpb25fdHlwZV9hcnJheSApO1xuXG5cdFx0XHRmb3JtX2l0ZW0gPSB0aGlzLnB1dElucHV0VG9JbnNpZGVGb3JtSXRlbSggZm9ybV9pdGVtX2lucHV0LCAkLmkxOG4uXyggJ1NlbGVjdGlvbiBUeXBlJyApICk7XG5cblx0XHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cdFx0XHR2X2JveC5hcHBlbmQoICc8ZGl2IGNsYXNzPVxcJ2NsZWFyLWJvdGgtZGl2XFwnPjwvZGl2PicgKTtcblxuXHRcdFx0Ly9TZWxlY3Rpb25cblx0XHRcdGZvcm1faXRlbV9pbnB1dF8xID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMS5BQ29tYm9Cb3goIHtcblx0XHRcdFx0dHJlZV9tb2RlOiB0cnVlLFxuXHRcdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RyZWVfY29sdW1uJyxcblx0XHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0XHRmaWVsZDogJ2pvYl9pdGVtX2dyb3VwJ1xuXHRcdFx0fSApO1xuXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMS5zZXRTb3VyY2VEYXRhKCAkdGhpcy5qb2JfaXRlbV9ncm91cF9hcnJheSApO1xuXG5cdFx0XHRmb3JtX2l0ZW0gPSB0aGlzLnB1dElucHV0VG9JbnNpZGVGb3JtSXRlbSggZm9ybV9pdGVtX2lucHV0XzEsICQuaTE4bi5fKCAnU2VsZWN0aW9uJyApICk7XG5cblx0XHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cblx0XHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnVGFzayBHcm91cHMnICksIFtmb3JtX2l0ZW1faW5wdXQsIGZvcm1faXRlbV9pbnB1dF8xXSwgdGFiX2RpZmZlcmVudGlhbF9jcml0ZXJpYV9jb2x1bW4xLCAnJywgdl9ib3gsIGZhbHNlLCB0cnVlICk7XG5cblx0XHRcdC8vIFRhc2tzXG5cblx0XHRcdHZfYm94ID0gJCggJzxkaXYgY2xhc3M9XFwndi1ib3hcXCc+PC9kaXY+JyApO1xuXG5cdFx0XHQvL1NlbGVjdGlvbiBUeXBlXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2pvYl9pdGVtX3NlbGVjdGlvbl90eXBlX2lkJywgc2V0X2VtcHR5OiBmYWxzZSB9ICk7XG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuam9iX2l0ZW1fc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dCwgJC5pMThuLl8oICdTZWxlY3Rpb24gVHlwZScgKSApO1xuXG5cdFx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXHRcdFx0dl9ib3guYXBwZW5kKCAnPGRpdiBjbGFzcz1cXCdjbGVhci1ib3RoLWRpdlxcJz48L2Rpdj4nICk7XG5cblx0XHRcdC8vU2VsZWN0aW9uXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMSA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzEuQUNvbWJvQm94KCB7XG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJSm9iSXRlbSxcblx0XHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9qb2JfaXRlbScsXG5cdFx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0XHRmaWVsZDogJ2pvYl9pdGVtJ1xuXHRcdFx0fSApO1xuXG5cdFx0XHRmb3JtX2l0ZW0gPSB0aGlzLnB1dElucHV0VG9JbnNpZGVGb3JtSXRlbSggZm9ybV9pdGVtX2lucHV0XzEsICQuaTE4bi5fKCAnU2VsZWN0aW9uJyApICk7XG5cblx0XHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cblx0XHRcdC8vIEV4Y2x1ZGUgRGVmYXVsdFxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMi5UQ2hlY2tib3goIHsgZmllbGQ6ICdleGNsdWRlX2RlZmF1bHRfam9iX2l0ZW0nIH0gKTtcblx0XHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXRfMiwgJC5pMThuLl8oICdFeGNsdWRlIERlZmF1bHQnICkgKTtcblx0XHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cblx0XHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnVGFza3MnICksIFtmb3JtX2l0ZW1faW5wdXQsIGZvcm1faXRlbV9pbnB1dF8xLCBmb3JtX2l0ZW1faW5wdXRfMl0sIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSwgJycsIHZfYm94LCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0XHQvLyBQdW5jaCBUYWcgR3JvdXBzXG5cdFx0XHR2X2JveCA9ICQoICc8ZGl2IGNsYXNzPVxcJ3YtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdFx0Ly9TZWxlY3Rpb24gVHlwZVxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdwdW5jaF90YWdfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnLCBzZXRfZW1wdHk6IGZhbHNlIH0gKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5wdW5jaF90YWdfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dCwgJC5pMThuLl8oICdTZWxlY3Rpb24gVHlwZScgKSApO1xuXG5cdFx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXHRcdFx0dl9ib3guYXBwZW5kKCAnPGRpdiBjbGFzcz1cXCdjbGVhci1ib3RoLWRpdlxcJz48L2Rpdj4nICk7XG5cblx0XHRcdC8vU2VsZWN0aW9uXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMSA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzEuQUNvbWJvQm94KCB7XG5cdFx0XHRcdHRyZWVfbW9kZTogdHJ1ZSxcblx0XHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF90cmVlX2NvbHVtbicsXG5cdFx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdFx0ZmllbGQ6ICdwdW5jaF90YWdfZ3JvdXAnXG5cdFx0XHR9ICk7XG5cblx0XHRcdGZvcm1faXRlbV9pbnB1dF8xLnNldFNvdXJjZURhdGEoICR0aGlzLnB1bmNoX3RhZ19ncm91cF9hcnJheSApO1xuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8xLCAkLmkxOG4uXyggJ1NlbGVjdGlvbicgKSApO1xuXHRcdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdQdW5jaCBUYWcgR3JvdXBzJyApLCBbZm9ybV9pdGVtX2lucHV0LCBmb3JtX2l0ZW1faW5wdXRfMV0sIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSwgJycsIHZfYm94LCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0XHQvLyBQdW5jaCBUYWdzXG5cdFx0XHR2X2JveCA9ICQoICc8ZGl2IGNsYXNzPVxcJ3YtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdFx0Ly9TZWxlY3Rpb24gVHlwZVxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdwdW5jaF90YWdfc2VsZWN0aW9uX3R5cGVfaWQnLCBzZXRfZW1wdHk6IGZhbHNlIH0gKTtcblx0XHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5wdW5jaF90YWdfc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dCwgJC5pMThuLl8oICdTZWxlY3Rpb24gVHlwZScgKSApO1xuXG5cdFx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXHRcdFx0dl9ib3guYXBwZW5kKCAnPGRpdiBjbGFzcz1cXCdjbGVhci1ib3RoLWRpdlxcJz48L2Rpdj4nICk7XG5cblx0XHRcdC8vU2VsZWN0aW9uXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMSA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzEuQUNvbWJvQm94KCB7XG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJUHVuY2hUYWcsXG5cdFx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfam9iX2l0ZW0nLFxuXHRcdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdFx0ZmllbGQ6ICdwdW5jaF90YWcnXG5cdFx0XHR9ICk7XG5cblx0XHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXRfMSwgJC5pMThuLl8oICdTZWxlY3Rpb24nICkgKTtcblx0XHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cblx0XHRcdC8vIEV4Y2x1ZGUgRGVmYXVsdFxuXHRcdFx0Zm9ybV9pdGVtX2lucHV0XzIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cdFx0XHRmb3JtX2l0ZW1faW5wdXRfMi5UQ2hlY2tib3goIHsgZmllbGQ6ICdleGNsdWRlX2RlZmF1bHRfcHVuY2hfdGFnJyB9ICk7XG5cdFx0XHRmb3JtX2l0ZW0gPSB0aGlzLnB1dElucHV0VG9JbnNpZGVGb3JtSXRlbSggZm9ybV9pdGVtX2lucHV0XzIsICQuaTE4bi5fKCAnRXhjbHVkZSBEZWZhdWx0JyApICk7XG5cdFx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXG5cdFx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1B1bmNoIFRhZ3MnICksIFtmb3JtX2l0ZW1faW5wdXQsIGZvcm1faXRlbV9pbnB1dF8xLCBmb3JtX2l0ZW1faW5wdXRfMl0sIHRhYl9kaWZmZXJlbnRpYWxfY3JpdGVyaWFfY29sdW1uMSwgJycsIHZfYm94LCBmYWxzZSwgdHJ1ZSApO1xuXG5cdFx0fVxuXG5cdFx0Ly8gVGFiMyBzdGFydFxuXG5cdFx0dmFyIHRhYl9tZWFsX2NyaXRlcmlhID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX21lYWxfY3JpdGVyaWEnICk7XG5cblx0XHR2YXIgdGFiX21lYWxfY3JpdGVyaWFfY29sdW1uMSA9IHRhYl9tZWFsX2NyaXRlcmlhLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1szXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1szXS5wdXNoKCB0YWJfbWVhbF9jcml0ZXJpYV9jb2x1bW4xICk7XG5cblx0XHQvLyBBY3RpdmUgQWZ0ZXIgRGFpbHkgSG91cnNcblx0XHQvLyBkYWlseV90cmlnZ2VyX3RpbWVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2RhaWx5X3RyaWdnZXJfdGltZTInLCBtb2RlOiAndGltZV91bml0JywgbmVlZF9wYXJzZXJfc2VjOiB0cnVlIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQWN0aXZlIEFmdGVyIERhaWx5IEhvdXJzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9tZWFsX2NyaXRlcmlhX2NvbHVtbjEsICcnLCBudWxsICk7XG5cblx0XHQvLyBNYXhpbXVtIFRpbWUgV2l0aG91dCBBIEJyZWFrXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdtYXhpbXVtX25vX2JyZWFrX3RpbWUnLCBtb2RlOiAndGltZV91bml0JywgbmVlZF9wYXJzZXJfc2VjOiB0cnVlIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTWF4aW11bSBUaW1lIFdpdGhvdXQgQSBCcmVhaycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfbWVhbF9jcml0ZXJpYV9jb2x1bW4xLCAnJywgbnVsbCApO1xuXG5cdFx0Ly8gTWluaW11bSBUaW1lIFJlY29nbml6ZWQgQXMgQnJlYWtcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21pbmltdW1fYnJlYWtfdGltZScsIG1vZGU6ICd0aW1lX3VuaXQnLCBuZWVkX3BhcnNlcl9zZWM6IHRydWUgfSApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNaW5pbXVtIFRpbWUgUmVjb2duaXplZCBBcyBCcmVhaycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfbWVhbF9jcml0ZXJpYV9jb2x1bW4xLCAnJywgbnVsbCApO1xuXG5cdFx0Ly8gVGFiNCBzdGFydFxuXG5cdFx0dmFyIHRhYl9jYWxsYmFja19jcml0ZXJpYSA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9jYWxsYmFja19jcml0ZXJpYScgKTtcblxuXHRcdHZhciB0YWJfY2FsbGJhY2tfY3JpdGVyaWFfY29sdW1uMSA9IHRhYl9jYWxsYmFja19jcml0ZXJpYS5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbNF0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbNF0ucHVzaCggdGFiX2NhbGxiYWNrX2NyaXRlcmlhX2NvbHVtbjEgKTtcblxuXHRcdC8vIE1pbmltdW0gVGltZSBCZXR3ZWVuIFNoaWZ0c1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7XG5cdFx0XHRmaWVsZDogJ21pbmltdW1fdGltZV9iZXR3ZWVuX3NoaWZ0MScsXG5cdFx0XHRtb2RlOiAndGltZV91bml0Jyxcblx0XHRcdG5lZWRfcGFyc2VyX3NlYzogdHJ1ZVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTWluaW11bSBUaW1lIEJldHdlZW4gU2hpZnRzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jYWxsYmFja19jcml0ZXJpYV9jb2x1bW4xLCAnJywgbnVsbCApO1xuXG5cdFx0Ly9GaXJzdCBTaGlmdCBNdXN0IEJlIEF0IExlYXN0XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdtaW5pbXVtX2ZpcnN0X3NoaWZ0X3RpbWUnLCBtb2RlOiAndGltZV91bml0JywgbmVlZF9wYXJzZXJfc2VjOiB0cnVlIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRmlyc3QgU2hpZnQgTXVzdCBCZSBBdCBMZWFzdCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY2FsbGJhY2tfY3JpdGVyaWFfY29sdW1uMSwgJycsIG51bGwgKTtcblxuXHRcdC8vIFRhYjUgc3RhcnRcblxuXHRcdHZhciB0YWJfbWluaW11bV9zaGlmdF90aW1lX2NyaXRlcmlhID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX21pbmltdW1fc2hpZnRfdGltZV9jcml0ZXJpYScgKTtcblxuXHRcdHZhciB0YWJfbWluaW11bV9zaGlmdF90aW1lX2NyaXRlcmlhX2NvbHVtbjEgPSB0YWJfbWluaW11bV9zaGlmdF90aW1lX2NyaXRlcmlhLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1s1XSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1s1XS5wdXNoKCB0YWJfbWluaW11bV9zaGlmdF90aW1lX2NyaXRlcmlhX2NvbHVtbjEgKTtcblxuXHRcdC8vIE1pbmltdW0gU2hpZnQgVGltZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnbWluaW11bV9zaGlmdF90aW1lJywgbW9kZTogJ3RpbWVfdW5pdCcsIG5lZWRfcGFyc2VyX3NlYzogdHJ1ZSB9ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ01pbmltdW0gU2hpZnQgVGltZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfbWluaW11bV9zaGlmdF90aW1lX2NyaXRlcmlhX2NvbHVtbjEsICcnLCBudWxsICk7XG5cblx0XHQvLyBNaW5pbXVtIFRpbWUtT2ZmIEJldHdlZW4gU2hpZnRzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHtcblx0XHRcdGZpZWxkOiAnbWluaW11bV90aW1lX2JldHdlZW5fc2hpZnQyJyxcblx0XHRcdG1vZGU6ICd0aW1lX3VuaXQnLFxuXHRcdFx0bmVlZF9wYXJzZXJfc2VjOiB0cnVlXG5cdFx0fSApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNaW5pbXVtIFRpbWUtT2ZmIEJldHdlZW4gU2hpZnRzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9taW5pbXVtX3NoaWZ0X3RpbWVfY3JpdGVyaWFfY29sdW1uMSwgJycsIG51bGwgKTtcblx0fVxuXG5cdHNldEN1cnJlbnRFZGl0UmVjb3JkRGF0YSgpIHtcblxuXHRcdC8vIFdoZW4gbWFzcyBlZGl0aW5nLCB0aGVzZSBmaWVsZHMgbWF5IG5vdCBiZSB0aGUgY29tbW9uIGRhdGEsIHNvIHRoZWlyIHZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkLCBzbyB0aGlzIHdpbGwgY2F1c2UgdGhlaXIgY2hhbmdlIGV2ZW50IGNhbm5vdCB3b3JrIHByb3Blcmx5LlxuXHRcdHRoaXMuc2V0RGVmYXVsdERhdGEoIHtcblx0XHRcdCdicmFuY2hfc2VsZWN0aW9uX3R5cGVfaWQnOiAxMCxcblx0XHRcdCdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJzogMTAsXG5cdFx0XHQnam9iX2dyb3VwX3NlbGVjdGlvbl90eXBlX2lkJzogMTAsXG5cdFx0XHQnam9iX3NlbGVjdGlvbl90eXBlX2lkJzogMTAsXG5cdFx0XHQnam9iX2l0ZW1fZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnOiAxMCxcblx0XHRcdCdqb2JfaXRlbV9zZWxlY3Rpb25fdHlwZV9pZCc6IDEwLFxuXHRcdFx0J3B1bmNoX3RhZ19ncm91cF9zZWxlY3Rpb25fdHlwZV9pZCc6IDEwLFxuXHRcdFx0J3B1bmNoX3RhZ19zZWxlY3Rpb25fdHlwZV9pZCc6IDEwLFxuXHRcdFx0J3R5cGVfaWQnOiAxMFxuXHRcdH0gKTtcblxuXHRcdGZvciAoIHZhciBrZXkgaW4gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkICkge1xuXHRcdFx0dmFyIHdpZGdldCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1trZXldO1xuXHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHdpZGdldCApICkge1xuXHRcdFx0XHRzd2l0Y2ggKCBrZXkgKSB7XG5cdFx0XHRcdFx0Y2FzZSAnbWluaW11bV90aW1lX2JldHdlZW5fc2hpZnQxJzpcblx0XHRcdFx0XHRjYXNlICdtaW5pbXVtX3RpbWVfYmV0d2Vlbl9zaGlmdDInOlxuXHRcdFx0XHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnbWluaW11bV90aW1lX2JldHdlZW5fc2hpZnQnXSApICkge1xuXHRcdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnbWluaW11bV90aW1lX2JldHdlZW5fc2hpZnQnXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnZGFpbHlfdHJpZ2dlcl90aW1lMSc6XG5cdFx0XHRcdFx0Y2FzZSAnZGFpbHlfdHJpZ2dlcl90aW1lMic6XG5cdFx0XHRcdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydkYWlseV90cmlnZ2VyX3RpbWUnXSApICkge1xuXHRcdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnZGFpbHlfdHJpZ2dlcl90aW1lJ10gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3BheV90eXBlX2lkJzpcblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdHRoaXMub25QYXlUeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdicmFuY2hfc2VsZWN0aW9uX3R5cGVfaWQnOlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0dGhpcy5vbkJyYW5jaFNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2RlcGFydG1lbnRfc2VsZWN0aW9uX3R5cGVfaWQnOlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0dGhpcy5vbkRlcGFydG1lbnRTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdqb2JfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnOlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0dGhpcy5vbkpvYkdyb3VwU2VsZWN0aW9uVHlwZUNoYW5nZSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnam9iX3NlbGVjdGlvbl90eXBlX2lkJzpcblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdHRoaXMub25Kb2JTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdqb2JfaXRlbV9ncm91cF9zZWxlY3Rpb25fdHlwZV9pZCc6XG5cdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldICk7XG5cdFx0XHRcdFx0XHR0aGlzLm9uSm9iSXRlbUdyb3VwU2VsZWN0aW9uVHlwZUNoYW5nZSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnam9iX2l0ZW1fc2VsZWN0aW9uX3R5cGVfaWQnOlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0dGhpcy5vbkpvYkl0ZW1TZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwdW5jaF90YWdfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnOlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0dGhpcy5vblB1bmNoVGFnR3JvdXBTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwdW5jaF90YWdfc2VsZWN0aW9uX3R5cGVfaWQnOlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0dGhpcy5vblB1bmNoVGFnU2VsZWN0aW9uVHlwZUNoYW5nZSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAndHlwZV9pZCc6XG5cdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldICk7XG5cdFx0XHRcdFx0XHR0aGlzLm9uVHlwZUNoYW5nZSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsZWN0VUlEYXRhVG9DdXJyZW50RWRpdFJlY29yZCgpO1xuXG5cdFx0dGhpcy5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cdH1cblxuXHRvbkJyYW5jaFNlbGVjdGlvblR5cGVDaGFuZ2UoKSB7XG5cdFx0aWYgKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2JyYW5jaF9zZWxlY3Rpb25fdHlwZV9pZCddID09IDEwIHx8IHRoaXMuaXNfdmlld2luZyApIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snYnJhbmNoJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydicmFuY2gnXS5zZXRFbmFibGVkKCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0b25EZXBhcnRtZW50U2VsZWN0aW9uVHlwZUNoYW5nZSgpIHtcblx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnZGVwYXJ0bWVudF9zZWxlY3Rpb25fdHlwZV9pZCddID09IDEwIHx8IHRoaXMuaXNfdmlld2luZyApIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZGVwYXJ0bWVudCddLnNldEVuYWJsZWQoIGZhbHNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZGVwYXJ0bWVudCddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRvbkpvYkdyb3VwU2VsZWN0aW9uVHlwZUNoYW5nZSgpIHtcblxuXHRcdGlmICggKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAyMCApICkge1xuXG5cdFx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnam9iX2dyb3VwX3NlbGVjdGlvbl90eXBlX2lkJ10gPT0gMTAgfHwgdGhpcy5pc192aWV3aW5nICkge1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2pvYl9ncm91cCddLnNldEVuYWJsZWQoIGZhbHNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2pvYl9ncm91cCddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkpvYlNlbGVjdGlvblR5cGVDaGFuZ2UoKSB7XG5cdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDIwICkgKSB7XG5cdFx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnam9iX3NlbGVjdGlvbl90eXBlX2lkJ10gPT0gMTAgfHwgdGhpcy5pc192aWV3aW5nICkge1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2pvYiddLnNldEVuYWJsZWQoIGZhbHNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2pvYiddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkpvYkl0ZW1Hcm91cFNlbGVjdGlvblR5cGVDaGFuZ2UoKSB7XG5cdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDIwICkgKSB7XG5cdFx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnam9iX2l0ZW1fZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnXSA9PSAxMCB8fCB0aGlzLmlzX3ZpZXdpbmcgKSB7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX2l0ZW1fZ3JvdXAnXS5zZXRFbmFibGVkKCBmYWxzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydqb2JfaXRlbV9ncm91cCddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkpvYkl0ZW1TZWxlY3Rpb25UeXBlQ2hhbmdlKCkge1xuXHRcdGlmICggKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAyMCApICkge1xuXHRcdFx0aWYgKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2pvYl9pdGVtX3NlbGVjdGlvbl90eXBlX2lkJ10gPT0gMTAgfHwgdGhpcy5pc192aWV3aW5nICkge1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2pvYl9pdGVtJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX2l0ZW0nXS5zZXRFbmFibGVkKCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25QdW5jaFRhZ0dyb3VwU2VsZWN0aW9uVHlwZUNoYW5nZSgpIHtcblx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydwdW5jaF90YWdfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnXSA9PSAxMCB8fCB0aGlzLmlzX3ZpZXdpbmcgKSB7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1sncHVuY2hfdGFnX2dyb3VwJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1sncHVuY2hfdGFnX2dyb3VwJ10uc2V0RW5hYmxlZCggdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uUHVuY2hUYWdTZWxlY3Rpb25UeXBlQ2hhbmdlKCkge1xuXHRcdGlmICggKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAyMCApICkge1xuXHRcdFx0aWYgKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3B1bmNoX3RhZ19zZWxlY3Rpb25fdHlwZV9pZCddID09IDEwIHx8IHRoaXMuaXNfdmlld2luZyApIHtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydwdW5jaF90YWcnXS5zZXRFbmFibGVkKCBmYWxzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydwdW5jaF90YWcnXS5zZXRFbmFibGVkKCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25QYXlUeXBlQ2hhbmdlKCkge1xuXHRcdGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydwYXlfdHlwZV9pZCddID09IDEwIHx8IHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsncGF5X3R5cGVfaWQnXSA9PSA0MiApIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X2Zvcm1faXRlbV9kaWNbJ3JhdGUnXS5maW5kKCAnLmVkaXQtdmlldy1mb3JtLWl0ZW0tbGFiZWwnICkudGV4dCggJC5pMThuLl8oICdSYXRlJyApICk7XG5cdFx0XHR0aGlzLmVkaXRfdmlld19mb3JtX2l0ZW1fZGljWydyYXRlJ10uZmluZCggJy53aWRnZXQtcmlnaHQtbGFiZWwnICkudGV4dCggJygnICsgJC5pMThuLl8oICdpZScgKSArICc6ICcgKyAkLmkxOG4uXyggJzEuNSBmb3IgdGltZSBhbmQgYSBoYWxmJyApICsgJyknICk7XG5cdFx0XHR0aGlzLmF0dGFjaEVsZW1lbnQoICd3YWdlX2dyb3VwX2lkJyApO1xuXG5cdFx0fSBlbHNlIGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydwYXlfdHlwZV9pZCddID09IDIwICkge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfZm9ybV9pdGVtX2RpY1sncmF0ZSddLmZpbmQoICcuZWRpdC12aWV3LWZvcm0taXRlbS1sYWJlbCcgKS50ZXh0KCAkLmkxOG4uXyggJ1ByZW1pdW0nICkgKTtcblx0XHRcdHRoaXMuZWRpdF92aWV3X2Zvcm1faXRlbV9kaWNbJ3JhdGUnXS5maW5kKCAnLndpZGdldC1yaWdodC1sYWJlbCcgKS50ZXh0KCAnKCcgKyAkLmkxOG4uXyggJ2llJyApICsgJzogJyArICQuaTE4bi5fKCAnMC43NSBmb3IgNzUgY2VudC9ocicgKSArICcpJyApO1xuXHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAnd2FnZV9ncm91cF9pZCcgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsncGF5X3R5cGVfaWQnXSA9PSAzMCB8fCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3BheV90eXBlX2lkJ10gPT0gMzIgfHwgdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydwYXlfdHlwZV9pZCddID09IDQwICkge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfZm9ybV9pdGVtX2RpY1sncmF0ZSddLmZpbmQoICcuZWRpdC12aWV3LWZvcm0taXRlbS1sYWJlbCcgKS50ZXh0KCAkLmkxOG4uXyggJ0hvdXJseSBSYXRlJyApICk7XG5cdFx0XHR0aGlzLmVkaXRfdmlld19mb3JtX2l0ZW1fZGljWydyYXRlJ10uZmluZCggJy53aWRnZXQtcmlnaHQtbGFiZWwnICkudGV4dCggJygnICsgJC5pMThuLl8oICdpZScgKSArICc6ICcgKyAkLmkxOG4uXyggJzEwLjAwL2hyJyApICsgJyknICk7XG5cdFx0XHR0aGlzLmF0dGFjaEVsZW1lbnQoICd3YWdlX2dyb3VwX2lkJyApO1xuXHRcdH1cblxuXHRcdHRoaXMuZWRpdEZpZWxkUmVzaXplKCk7XG5cdH1cblxuXHRvblR5cGVDaGFuZ2UoKSB7XG5cblx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuaGlkZSgpO1xuXHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbM10gKS5oaWRlKCk7XG5cdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVs0XSApLmhpZGUoKTtcblx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzVdICkuaGlkZSgpO1xuXG5cdFx0dGhpcy5hdHRhY2hFbGVtZW50KCAnaW5jbHVkZV9wYXJ0aWFsX3B1bmNoJyApO1xuXG5cdFx0aWYgKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3R5cGVfaWQnXSA9PSAxMCApIHtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbMV0gKS5zaG93KCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVszXSApLmhpZGUoKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbNF0gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzVdICkuaGlkZSgpO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndHlwZV9pZCddID09IDIwICkge1xuXG5cdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICdpbmNsdWRlX3BhcnRpYWxfcHVuY2gnICk7XG5cblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbMV0gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuc2hvdygpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVszXSApLmhpZGUoKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbNF0gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzVdICkuaGlkZSgpO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndHlwZV9pZCddID09IDMwICkge1xuXG5cdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICdpbmNsdWRlX3BhcnRpYWxfcHVuY2gnICk7XG5cblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbMV0gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVszXSApLnNob3coKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbNF0gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzVdICkuaGlkZSgpO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndHlwZV9pZCddID09IDQwICkge1xuXG5cdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICdpbmNsdWRlX3BhcnRpYWxfcHVuY2gnICk7XG5cblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbMV0gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVszXSApLmhpZGUoKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbNF0gKS5zaG93KCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzVdICkuaGlkZSgpO1xuXG5cdFx0fSBlbHNlIGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd0eXBlX2lkJ10gPT0gNTAgKSB7XG5cblx0XHRcdHRoaXMuZGV0YWNoRWxlbWVudCggJ2luY2x1ZGVfcGFydGlhbF9wdW5jaCcgKTtcblxuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVsxXSApLmhpZGUoKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbMl0gKS5zaG93KCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzNdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVs0XSApLmhpZGUoKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbNV0gKS5zaG93KCk7XG5cdFx0fSBlbHNlIGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd0eXBlX2lkJ10gPT0gOTAgKSB7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzFdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVsyXSApLmhpZGUoKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbM10gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzRdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVs1XSApLmhpZGUoKTtcblx0XHR9IGVsc2UgaWYgKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3R5cGVfaWQnXSA9PSAxMDAgKSB7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzFdICkuc2hvdygpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVsyXSApLnNob3coKTtcblx0XHRcdCQoIHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAndWwgbGknIClbM10gKS5oaWRlKCk7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzRdICkuaGlkZSgpO1xuXHRcdFx0JCggdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICd1bCBsaScgKVs1XSApLmhpZGUoKTtcblx0XHR9XG5cblx0XHR0aGlzLmVkaXRGaWVsZFJlc2l6ZSgpO1xuXHR9XG5cblx0LyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHRvbkZvcm1JdGVtQ2hhbmdlKCB0YXJnZXQsIGRvTm90VmFsaWRhdGUgKSB7XG5cblx0XHR0aGlzLnNldElzQ2hhbmdlZCggdGFyZ2V0ICk7XG5cdFx0dGhpcy5zZXRNYXNzRWRpdGluZ0ZpZWxkc1doZW5Gb3JtQ2hhbmdlKCB0YXJnZXQgKTtcblx0XHR2YXIga2V5ID0gdGFyZ2V0LmdldEZpZWxkKCk7XG5cdFx0dmFyIGNfdmFsdWUgPSB0YXJnZXQuZ2V0VmFsdWUoKTtcblx0XHR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSA9IGNfdmFsdWU7XG5cblx0XHRzd2l0Y2ggKCBrZXkgKSB7XG5cdFx0XHRjYXNlICdtaW5pbXVtX3RpbWVfYmV0d2Vlbl9zaGlmdDEnOlxuXHRcdFx0Y2FzZSAnbWluaW11bV90aW1lX2JldHdlZW5fc2hpZnQyJzpcblx0XHRcdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydtaW5pbXVtX3RpbWVfYmV0d2Vlbl9zaGlmdCddID0gY192YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdkYWlseV90cmlnZ2VyX3RpbWUxJzpcblx0XHRcdGNhc2UgJ2RhaWx5X3RyaWdnZXJfdGltZTInOlxuLy9cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZGFpbHlfdHJpZ2dlcl90aW1lMSddLnNldFZhbHVlKCBjX3ZhbHVlICk7XG4vL1x0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydkYWlseV90cmlnZ2VyX3RpbWUyJ10uc2V0VmFsdWUoIGNfdmFsdWUgKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydkYWlseV90cmlnZ2VyX3RpbWUnXSA9IGNfdmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuLy9cdFx0XHRjYXNlICd0eXBlX2lkJzpcbi8vXHRcdFx0Y2FzZSAnYWNjcnVhbF9wb2xpY3lfaWQnOlxuLy9cdFx0XHRcdHRoaXMub25UeXBlQ2hhbmdlKCk7XG4vL1x0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG4vL1x0XHRzd2l0Y2ggKCBrZXkgKSB7XG4vL1x0XHRcdGNhc2UgJ21pbmltdW1fdGltZSc6XG4vL1x0XHRcdGNhc2UgJ21heGltdW1fdGltZSc6XG4vL1x0XHRcdGNhc2UgJ2RhaWx5X3RyaWdnZXJfdGltZSc6XG4vL1x0XHRcdGNhc2UgJ21heGltdW1fZGFpbHlfdHJpZ2dlcl90aW1lJzpcbi8vXHRcdFx0Y2FzZSAnd2Vla2x5X3RyaWdnZXJfdGltZSc6XG4vL1x0XHRcdGNhc2UgJ21heGltdW1fd2Vla2x5X3RyaWdnZXJfdGltZSc6XG4vL1x0XHRcdGNhc2UgJ2RhaWx5X3RyaWdnZXJfdGltZTInOlxuLy9cdFx0XHRjYXNlICdtYXhpbXVtX25vX2JyZWFrX3RpbWUnOlxuLy9cdFx0XHRjYXNlICdtaW5pbXVtX2JyZWFrX3RpbWUnOlxuLy9cdFx0XHRjYXNlICdtaW5pbXVtX3RpbWVfYmV0d2Vlbl9zaGlmdCc6XG4vL1x0XHRcdGNhc2UgJ21pbmltdW1fZmlyc3Rfc2hpZnRfdGltZSc6XG4vL1x0XHRcdGNhc2UgJ21pbmltdW1fc2hpZnRfdGltZSc6XG4vL1x0XHRcdFx0Y192YWx1ZSA9IHRoaXMuZGF0ZV9hcGkucGFyc2VUaW1lVW5pdCggdGFyZ2V0LmdldFZhbHVlKCksIHthc3luYzogZmFsc2V9ICkuZ2V0UmVzdWx0KCk7XG4vL1x0XHRcdFx0YnJlYWs7XG4vL1x0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gJ3R5cGVfaWQnIHx8IGtleSA9PT0gJ2FjY3J1YWxfcG9saWN5X2lkJyApIHtcblx0XHRcdHRoaXMub25UeXBlQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICgga2V5ID09PSAncGF5X3R5cGVfaWQnICkge1xuXHRcdFx0dGhpcy5vblBheVR5cGVDaGFuZ2UoKTtcblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09ICdicmFuY2hfc2VsZWN0aW9uX3R5cGVfaWQnICkge1xuXHRcdFx0dGhpcy5vbkJyYW5jaFNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09ICdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJyApIHtcblx0XHRcdHRoaXMub25EZXBhcnRtZW50U2VsZWN0aW9uVHlwZUNoYW5nZSgpO1xuXHRcdH1cblx0XHRpZiAoIGtleSA9PT0gJ2pvYl9ncm91cF9zZWxlY3Rpb25fdHlwZV9pZCcgKSB7XG5cdFx0XHR0aGlzLm9uSm9iR3JvdXBTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICgga2V5ID09PSAnam9iX3NlbGVjdGlvbl90eXBlX2lkJyApIHtcblx0XHRcdHRoaXMub25Kb2JTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICgga2V5ID09PSAnam9iX2l0ZW1fZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnICkge1xuXHRcdFx0dGhpcy5vbkpvYkl0ZW1Hcm91cFNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09ICdqb2JfaXRlbV9zZWxlY3Rpb25fdHlwZV9pZCcgKSB7XG5cdFx0XHR0aGlzLm9uSm9iSXRlbVNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09ICdwdW5jaF90YWdfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnICkge1xuXHRcdFx0dGhpcy5vblB1bmNoVGFnR3JvdXBTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICgga2V5ID09PSAncHVuY2hfdGFnX3NlbGVjdGlvbl90eXBlX2lkJyApIHtcblx0XHRcdHRoaXMub25QdW5jaFRhZ1NlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHR9XG5cdFx0aWYgKCAhZG9Ob3RWYWxpZGF0ZSApIHtcblx0XHRcdHRoaXMudmFsaWRhdGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG5cdHVuaWZvcm1WYXJpYWJsZSggcmVjb3JkcyApIHtcblxuXHRcdHJldHVybiByZWNvcmRzO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hGaWVsZHMoKSB7XG5cblx0XHRzdXBlci5idWlsZFNlYXJjaEZpZWxkcygpO1xuXHRcdHRoaXMuc2VhcmNoX2ZpZWxkcyA9IFtcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ05hbWUnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICduYW1lJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVHlwZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3R5cGVfaWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1BheSBDb2RlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAncGF5X2NvZGVfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9wYXlfY29kZScsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJUGF5Q29kZSxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1BheSBGb3JtdWxhIFBvbGljeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3BheV9mb3JtdWxhX3BvbGljeV9pZCcsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3BheV9mb3JtdWxhX3BvbGljeScsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJUGF5Rm9ybXVsYVBvbGljeSxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NyZWF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdjcmVhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1VwZGF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICd1cGRhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKVxuXHRcdF07XG5cdH1cblxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5668\n")}}]);
|