TimeTrex/interface/html5/dist/hr-recruitment-JobApplicantViewController.bundle.js

1 line
136 KiB
JavaScript

"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["hr-recruitment-JobApplicantViewController"],{19:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JobApplicantViewController\": () => (/* binding */ JobApplicantViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass JobApplicantViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#job_applicant_view_container',\n\n\t\t\t// _required_files: {\n\t\t\t// \t15: ['leaflet-timetrex']\n\t\t\t// },\n\n\t\t\tstatus_array: null,\n\t\t\tidentification_type_array: null,\n\t\t\tsex_array: null,\n\t\t\tavailable_days_of_week_array: null,\n\t\t\tavailable_hours_of_day_array: null,\n\t\t\tminimum_wage_type_array: null,\n\t\t\tboolean_array: null,\n\t\t\tdocument_object_type_id: null,\n\t\t\tcountry_array: null,\n\t\t\tprovince_array: null,\n\t\t\te_province_array: null,\n\t\t\ti_province_array: null,\n\t\t\tcompany_api: null,\n\t\t\tsub_application_view_controller: null,\n\t\t\tsub_job_applicant_employment_view_controller: null,\n\t\t\tsub_job_applicant_reference_view_controller: null,\n\t\t\tsub_job_applicant_location_view_controller: null,\n\t\t\tsub_job_applicant_skill_view_controller: null,\n\t\t\tsub_job_applicant_education_view_controller: null,\n\t\t\tsub_job_applicant_membership_view_controller: null,\n\t\t\tsub_job_applicant_license_view_controller: null,\n\t\t\tsub_job_applicant_language_view_controller: null,\n\t\t\tuser_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 = 'JobApplicantEditView.html';\n\t\tthis.permission_id = 'job_applicant';\n\t\tthis.viewId = 'JobApplicant';\n\t\tthis.script_name = 'JobApplicantView';\n\t\tthis.table_name_key = 'job_applicant';\n\t\tthis.context_menu_name = $.i18n._( 'Job Applicants' );\n\t\tthis.navigation_label = $.i18n._( 'Job Applicant' );\n\t\tthis.api = TTAPI.APIJobApplicant;\n\t\tthis.company_api = TTAPI.APICompany;\n\t\tthis.user_api = TTAPI.APIUser;\n\t\tthis.document_object_type_id = 160;\n\t\tthis.boolean_array = [$.i18n._( 'No' ), $.i18n._( 'Yes' )];\n\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tthis.initData();\n\t}\n\n\tinitOptions( callBack ) {\n\t\tvar $this = this;\n\t\tvar options = [\n\t\t\t{ option_name: 'status', field_name: null, api: null },\n\t\t\t{ option_name: 'identification_type', field_name: null, api: null },\n\t\t\t{ option_name: 'sex', field_name: null, api: null },\n\t\t\t{ option_name: 'available_days_of_week', field_name: null, api: null },\n\t\t\t{ option_name: 'available_hours_of_day', field_name: null, api: null },\n\t\t\t{ option_name: 'minimum_wage_type', field_name: null, api: null },\n\t\t\t{ option_name: 'country', field_name: 'country', api: this.company_api }\n\t\t];\n\n\t\tthis.initDropDownOptions( options, function( result ) {\n\n\t\t\tif ( callBack ) {\n\t\t\t\tcallBack( result ); // First to initialize drop down options, and then to initialize edit view UI.\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( !this.edit_only_mode ) {\n\t\t\t$this.basic_search_field_ui_dic['currently_employed'].setSourceData( Global.buildRecordArray( this.boolean_array ) );\n\t\t\t$this.adv_search_field_ui_dic['currently_employed'].setSourceData( Global.buildRecordArray( this.boolean_array ) );\n\n\t\t\t$this.basic_search_field_ui_dic['criminal_record'].setSourceData( Global.buildRecordArray( this.boolean_array ) );\n\t\t\t$this.adv_search_field_ui_dic['criminal_record'].setSourceData( Global.buildRecordArray( this.boolean_array ) );\n\n\t\t\t$this.basic_search_field_ui_dic['immediate_drug_test'].setSourceData( Global.buildRecordArray( this.boolean_array ) );\n\t\t\t$this.adv_search_field_ui_dic['immediate_drug_test'].setSourceData( Global.buildRecordArray( this.boolean_array ) );\n\t\t}\n\t}\n\n\tbuildEditViewUI() {\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_job_applicant': { 'label': $.i18n._( 'Job Applicant' ), 'is_multi_column': true },\n\t\t\t'tab_background': { 'label': $.i18n._( 'Background' ), 'is_multi_column': true },\n\t\t\t'tab_availability': { 'label': $.i18n._( 'Availability' ), 'is_multi_column': true },\n\t\t\t'tab_history': {\n\t\t\t\t'label': $.i18n._( 'History' ),\n\t\t\t\t'init_callback': 'initSubHistoryView',\n\t\t\t\t'display_on_mass_edit': false,\n\t\t\t\t'html_template': this.getHistoryTabHtml()\n\t\t\t},\n\t\t\t'tab_qualifications': {\n\t\t\t\t'label': $.i18n._( 'Qualifications' ),\n\t\t\t\t'init_callback': 'initSubQualificationView',\n\t\t\t\t'display_on_mass_edit': false,\n\t\t\t\t'html_template': this.getQualificationsTabHtml()\n\t\t\t},\n\t\t\t'tab_portal': { 'label': $.i18n._( 'Portal' ) },\n\t\t\t'tab_applications': {\n\t\t\t\t'label': $.i18n._( 'Applications' ),\n\t\t\t\t'init_callback': 'initSubApplicationView',\n\t\t\t\t'display_on_mass_edit': false\n\t\t\t},\n\t\t\t'tab_attachment': true,\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\t//no navigation in edit only mode\n\t\tif ( !this.edit_only_mode ) {\n\t\t\tthis.navigation.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIJobApplicant,\n\t\t\t\tid: this.script_name + '_navigation',\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_job_applicant',\n\t\t\t\tnavigation_mode: true,\n\t\t\t\tshow_search_inputs: true\n\t\t\t} );\n\n\t\t\tthis.setNavigation();\n\t\t}\n\t\t//Tab 0 start\n\n\t\tvar tab_job_applicant = this.edit_view_tab.find( '#tab_job_applicant' );\n\n\t\tvar tab_job_applicant_column1 = tab_job_applicant.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_job_applicant_column1 );\n\n\t\t// Status\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'status_id' } );\n\t\tform_item_input.setSourceData( $this.status_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_job_applicant_column1, '' );\n\n\t\t// First Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'first_name', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'First Name' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Middle Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'middle_name', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Middle Name' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Last Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'last_name', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Last Name' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Maiden Name\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'maiden_name', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Maiden Name' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Gender\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'sex_id' } );\n\t\tform_item_input.setSourceData( $this.sex_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Gender' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Ethnicity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIEthnicGroup,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_ethnic_group',\n\t\t\tfield: 'ethnic_group_id',\n\t\t\tset_empty: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Ethnicity' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Phone\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'home_phone', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Phone' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Mobile Phone\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'mobile_phone', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Mobile Phone' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Currently Employed\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'currently_employed' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Currently Employed' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Expected Wage Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'minimum_wage_type_id' } );\n\t\tform_item_input.setSourceData( $this.minimum_wage_type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Expected Wage Type' ), form_item_input, tab_job_applicant_column1 );\n\n\t\t// Expected Wage\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'minimum_wage', width: 100 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Expected Wage' ), form_item_input, tab_job_applicant_column1, '' );\n\n\t\tvar tab_job_applicant_column2 = tab_job_applicant.find( '.second-column' );\n\n\t\tthis.edit_view_tabs[0].push( tab_job_applicant_column2 );\n\n\t\t// Email\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'email', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Email' ), form_item_input, tab_job_applicant_column2, '' );\n\n\t\t// Address(Line 1)\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'address1', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Address(Line 1)' ), form_item_input, tab_job_applicant_column2 );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Address(Line 2)\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'address2', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Address(Line 2)' ), form_item_input, tab_job_applicant_column2 );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// City\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'city', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'City' ), form_item_input, tab_job_applicant_column2 );\n\n\t\t// Country\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'country', set_empty: true } );\n\t\tform_item_input.setSourceData( $this.country_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Country' ), form_item_input, tab_job_applicant_column2 );\n\n\t\t// Province/State\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'province' } );\n\t\tform_item_input.setSourceData( [] );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Province/State' ), form_item_input, tab_job_applicant_column2 );\n\n\t\t// Postal / ZIP Code\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'postal_code', width: 90 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Postal/ZIP Code' ), form_item_input, tab_job_applicant_column2 );\n\n\t\t// Birth Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\t\tform_item_input.TDatePicker( { field: 'birth_date' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Birth Date' ), form_item_input, tab_job_applicant_column2 );\n\n\t\t// SIN/SSN\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'sin', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'SIN/SSN' ), form_item_input, tab_job_applicant_column2 );\n\n\t\t//Tags\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TAG_INPUT );\n\n\t\tform_item_input.TTagInput( { field: 'tag', object_type_id: 360 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tags' ), form_item_input, tab_job_applicant_column2, '', null, null, true );\n\n\t\t//Tab 1 start\n\n\t\tvar tab_background = this.edit_view_tab.find( '#tab_background' );\n\n\t\tvar tab_background_column1 = tab_background.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[1] = [];\n\n\t\tthis.edit_view_tabs[1].push( tab_background_column1 );\n\n\t\t// Identification Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'identification_type_id' } );\n\t\tform_item_input.setSourceData( $this.identification_type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Identification Type' ), form_item_input, tab_background_column1, '' );\n\n\t\t// Identification Number\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'identification_number', width: 300 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Identification Number' ), form_item_input, tab_background_column1 );\n\n\t\t// Identification Expires\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'identification_expire_date' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Identification Expires' ), form_item_input, tab_background_column1, '', null );\n\n\t\t// Identification Country\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'identification_country' } );\n\t\tform_item_input.setSourceData( $this.country_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Identification Country' ), form_item_input, tab_background_column1 );\n\n\t\t// Identification Province/State\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'identification_province' } );\n\t\tform_item_input.setSourceData( [] );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Identification Province/State' ), form_item_input, tab_background_column1, '' );\n\n\t\tvar tab_background_column2 = tab_background.find( '.second-column' );\n\n\t\tthis.edit_view_tabs[1].push( tab_background_column2 );\n\n\t\t// Available for Immediate Drug Test\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'immediate_drug_test' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Available for Immediate Drug Test' ), form_item_input, tab_background_column2, '' );\n\n\t\t// Criminal Record\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'criminal_record' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Criminal Record' ), form_item_input, tab_background_column2 );\n\n\t\t// Describe criminal convictions\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\t\tform_item_input.TTextArea( { field: 'criminal_record_description' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Describe criminal convictions' ), form_item_input, tab_background_column2, '', null, null, true );\n\n\t\t//Tab 2 start\n\n\t\tvar tab_availability = this.edit_view_tab.find( '#tab_availability' );\n\n\t\tvar tab_availability_column1 = tab_availability.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[2] = [];\n\n\t\tthis.edit_view_tabs[2].push( tab_availability_column1 );\n\n\t\t// Available Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'available_start_date' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Available Date' ), form_item_input, tab_availability_column1, '', null );\n\n\t\t// Available Hours Per Week (Minimum)\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'available_minimum_hours_per_week', width: 30 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Available Hours Per Week (Minimum)' ), form_item_input, tab_availability_column1 );\n\n\t\t// Available Hours Per Week (Maximum)\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'available_maximum_hours_per_week', width: 30 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Available Hours Per Week (Maximum)' ), form_item_input, tab_availability_column1, '' );\n\n\t\tvar tab_availability_column2 = tab_availability.find( '.second-column' );\n\t\tthis.edit_view_tabs[2].push( tab_availability_column2 );\n\n\t\t// Available Days Of Week\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input = form_item_input.AComboBox( {\n\t\t\tfield: 'available_days_of_week',\n\t\t\tset_empty: true,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_option_column'\n\t\t} );\n\n\t\tform_item_input.setSourceData( $this.available_days_of_week_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Available Days Of Week' ), form_item_input, tab_availability_column2, '' );\n\n\t\t// Available Hours\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input = form_item_input.AComboBox( {\n\t\t\tfield: 'available_hours_of_day',\n\t\t\tset_empty: true,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_option_column'\n\t\t} );\n\n\t\tform_item_input.setSourceData( $this.available_hours_of_day_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Available Hours' ), form_item_input, tab_availability_column2, '' );\n\n\t\t//Tab 5 start\n\n\t\tvar tab_portal = this.edit_view_tab.find( '#tab_portal' );\n\n\t\tvar tab_portal_column1 = tab_portal.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[5] = [];\n\n\t\tthis.edit_view_tabs[5].push( tab_portal_column1 );\n\n\t\t// User Name\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'user_name', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'User Name' ), form_item_input, tab_portal_column1, '' );\n\n\t\t//Password\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.PASSWORD_INPUT );\n\n\t\tform_item_input.TPasswordInput( { field: 'password', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Password' ), form_item_input, tab_portal_column1 );\n\n\t\t//Password Confrim\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.PASSWORD_INPUT );\n\n\t\tform_item_input.TPasswordInput( { field: 'password_confirm', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Password (Confirm)' ), form_item_input, tab_portal_column1, '' );\n\t}\n\n\tgetHistoryTabHtml() {\n\t\tvar html_template = `\n\t\t\t<div id=\"tab_history\" class=\"edit-view-tab-outside-sub-view\">\n\t\t\t\t<div class=\"edit-view-tab\" id=\"tab_history_content_div\">\n\t\t\t\t\t<div class=\"first-column-sub-view\">\n\t\t\t\t\t\t<div class=\"first-sub-view\"></div>\n\t\t\t\t\t\t<div class=\"second-sub-view\"></div>\n\t\t\t\t\t\t<div class=\"third-sub-view\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"save-and-continue-div\">\n\t\t\t\t\t\t<span class=\"message\"></span>\n\t\t\t\t\t\t<div class=\"save-and-continue-button-div\">\n\t\t\t\t\t\t\t<button class=\"tt-button p-button p-component\" type=\"button\">\n\t\t\t\t\t\t\t\t<span class=\"icon\"></span>\n\t\t\t\t\t\t\t\t<span class=\"p-button-label\"></span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>`;\n\n\t\treturn html_template;\n\t}\n\n\tgetQualificationsTabHtml() {\n\t\tvar html_template = `\n\t\t\t<div id=\"tab_qualifications\" class=\"edit-view-tab-outside-sub-view\">\n\t\t\t\t<div class=\"edit-view-tab\" id=\"tab_qualifications_content_div\">\n\t\t\t\t\t<div class=\"first-column-sub-view\">\n\t\t\t\t\t\t<div class=\"first-sub-view\"></div>\n\t\t\t\t\t\t<div class=\"second-sub-view\"></div>\n\t\t\t\t\t\t<div class=\"third-sub-view\"></div>\n\t\t\t\t\t\t<div class=\"forth-sub-view\"></div>\n\t\t\t\t\t\t<div class=\"fifth-sub-view\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"save-and-continue-div\">\n\t\t\t\t\t\t<span class=\"message\"></span>\n\t\t\t\t\t\t<div class=\"save-and-continue-button-div\">\n\t\t\t\t\t\t\t<button class=\"tt-button p-button p-component\" type=\"button\">\n\t\t\t\t\t\t\t\t<span class=\"icon\"></span>\n\t\t\t\t\t\t\t\t<span class=\"p-button-label\"></span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>`;\n\n\t\treturn html_template;\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._( 'Status' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'status_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'First Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'first_name',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Last Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'last_name',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Phone' ),\n\t\t\t\tfield: 'any_phone',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\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._( 'Email' ),\n\t\t\t\tfield: 'email',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\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._( 'Country' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'country',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.COMBO_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Province/State' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'province',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'City' ),\n\t\t\t\tfield: 'city',\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 1,\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._( 'Resume Keywords' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'resume_text',\n\t\t\t\tmultiple: false,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\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._( 'Criminal Record' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'criminal_record',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Immediate Drug Test' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'immediate_drug_test',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Hours/Week (Min)' ),\n\t\t\t\tfield: 'available_minimum_hours_per_week',\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\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._( 'Hours/Week (Max)' ),\n\t\t\t\tfield: 'available_maximum_hours_per_week',\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\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._( 'Currently Employed' ),\n\t\t\t\tin_column: 3,\n\t\t\t\tfield: 'currently_employed',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Gender' ),\n\t\t\t\tin_column: 3,\n\t\t\t\tfield: 'sex_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Tags' ),\n\t\t\t\tfield: 'tag',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 3,\n\t\t\t\tobject_type_id: 360,\n\t\t\t\tform_item_type: FormItemType.TAG_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Created By' ),\n\t\t\t\tin_column: 3,\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: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Updated By' ),\n\t\t\t\tin_column: 3,\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: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n\tonFormItemChange( target, doNotValidate ) {\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\n\t\tthis.current_edit_record[key] = target.getValue();\n\n\t\tswitch ( key ) {\n\n\t\t\tcase 'country':\n\t\t\t\tvar widget = this.edit_view_ui_dic['province'];\n\t\t\t\twidget.setValue( null );\n\t\t\t\tbreak;\n\n\t\t\tcase 'identification_country':\n\t\t\t\twidget = this.edit_view_ui_dic['identification_province'];\n\t\t\t\twidget.setValue( null );\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( key == 'country' ) {\n\t\t\tthis.eSetProvince( this.edit_view_ui_dic['country'].getValue(), true );\n\t\t\tthis.clearErrorTips();\n\t\t\tthis.setEditMenu();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === 'identification_country' ) {\n\t\t\tthis.iSetProvince( this.edit_view_ui_dic['identification_country'].getValue(), true );\n\t\t\tthis.clearErrorTips();\n\t\t\tthis.setEditMenu();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\tsetCurrentEditRecordData() {\n\n\t\t//Set current edit record data to all widgets\n\t\t//Set current edit record data to all widgets\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 'country': //popular case\n\t\t\t\t\t\tthis.setCountryValue( widget, key );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'identification_country':\n\t\t\t\t\t\tif ( !this.current_edit_record['identification_province'] ) {\n\t\t\t\t\t\t\tthis.iSetProvince( this.current_edit_record[key], true );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.iSetProvince( this.current_edit_record[key] );\n\t\t\t\t\t\t}\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\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\n\t\t\t}\n\t\t}\n\n\t\tthis.collectUIDataToCurrentEditRecord();\n\t\tthis.setEditViewDataDone();\n\t}\n\n\tonSetSearchFilterFinished() {\n\n\t\tif ( this.search_panel.getSelectTabIndex() === 1 ) {\n\t\t\tvar combo = this.adv_search_field_ui_dic['country'];\n\t\t\tvar select_value = combo.getValue();\n\t\t\tthis.setProvince( select_value );\n\t\t}\n\t}\n\n\tonBuildAdvUIFinished() {\n\n\t\tthis.adv_search_field_ui_dic['country'].change( $.proxy( function() {\n\t\t\tvar combo = this.adv_search_field_ui_dic['country'];\n\t\t\tvar selectVal = combo.getValue();\n\n\t\t\tthis.setProvince( selectVal );\n\n\t\t\tthis.adv_search_field_ui_dic['province'].setValue( null );\n\n\t\t}, this ) );\n\t}\n\n\tsetProvince( val, m ) {\n\t\tvar $this = this;\n\n\t\tif ( !val || val === '-1' || val === '0' ) {\n\t\t\t$this.province_array = [];\n\t\t\tthis.adv_search_field_ui_dic['province'].setSourceData( [] );\n\t\t} else {\n\n\t\t\tthis.company_api.getOptions( 'province', val, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tres = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.province_array = Global.buildRecordArray( res );\n\t\t\t\t\t$this.adv_search_field_ui_dic['province'].setSourceData( $this.province_array );\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\teSetProvince( val, refresh ) {\n\t\tvar $this = this;\n\t\tvar province_widget = $this.edit_view_ui_dic['province'];\n\n\t\tif ( !val || val === '-1' || val === '0' ) {\n\t\t\t$this.e_province_array = [];\n\t\t\tprovince_widget.setSourceData( [] );\n\t\t} else {\n\t\t\tthis.company_api.getOptions( 'province', val, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tres = [];\n\t\t\t\t\t}\n\t\t\t\t\t$this.e_province_array = Global.buildRecordArray( res );\n\t\t\t\t\tif ( refresh && $this.e_province_array.length > 0 ) {\n\t\t\t\t\t\t$this.current_edit_record.province = $this.e_province_array[0].value;\n\t\t\t\t\t\tprovince_widget.setValue( $this.current_edit_record.province );\n\t\t\t\t\t}\n\t\t\t\t\tprovince_widget.setSourceData( $this.e_province_array );\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tiSetProvince( val, refresh ) {\n\t\tvar $this = this;\n\t\tvar province_widget = $this.edit_view_ui_dic['identification_province'];\n\n\t\tif ( !val || val === '-1' || val === '0' ) {\n\t\t\t$this.i_province_array = [];\n\t\t\tprovince_widget.setSourceData( [] );\n\t\t} else {\n\t\t\tthis.company_api.getOptions( 'province', val, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tres = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.i_province_array = Global.buildRecordArray( res );\n\t\t\t\t\tif ( refresh && $this.i_province_array.length > 0 ) {\n\t\t\t\t\t\t$this.current_edit_record.identification_province = $this.i_province_array[0].value;\n\t\t\t\t\t\tprovince_widget.setValue( $this.current_edit_record.identification_province );\n\t\t\t\t\t}\n\t\t\t\t\tprovince_widget.setSourceData( $this.i_province_array );\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: ['copy'],\n\t\t\tinclude: [\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Hire Applicant' ),\n\t\t\t\t\tid: 'edit_employee',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\t//action_group: 'jump_to',\n\t\t\t\t\t//group: 'navigation',\n\t\t\t\t\tvue_icon: 'tticon tticon-add_black_24dp',\n\t\t\t\t\tsort_order: 7100\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Map' ),\n\t\t\t\t\tid: 'map',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\t//action_group: 'jump_to',\n\t\t\t\t\t//group: 'navigation',\n\t\t\t\t\tvue_icon: 'tticon tticon-map_black_24dp',\n\t\t\t\t\tsort_order: 8000,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Jump To' ),\n\t\t\t\t\tid: 'jump_to_header',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\taction_group_header: true,\n\t\t\t\t\tpermission_result: false, // to hide it in legacy context menu and avoid errors in legacy parsers.\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Job Applications' ),\n\t\t\t\t\tid: 'job_application',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\ticon: 'jobapplications-35x35.png',\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\n\t\t\t]\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tonCustomContextClick( id ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'map':\n\t\t\t\tthis.onMapClick();\n\t\t\t\tbreak;\n\t\t\tcase 'export_excel':\n\t\t\tcase 'edit_employee':\n\t\t\tcase 'job_application':\n\t\t\t\tthis.onNavigationClick( id );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonMapClick() {\n\t\t// only trigger map load in specific product editions.\n\t\tif ( ( Global.getProductEdition() >= 15 ) ) {\n\t\t\tthis.is_viewing = false;\n\t\t\tProgressBar.showProgressBar();\n\t\t\tvar data = {\n\t\t\t\tfilter_columns: {\n\t\t\t\t\tid: true,\n\t\t\t\t\tfirst_name: true,\n\t\t\t\t\tlast_name: true,\n\t\t\t\t\taddress1: true,\n\t\t\t\t\taddress2: true,\n\t\t\t\t\tcity: true,\n\t\t\t\t\tprovince: true,\n\t\t\t\t\tcountry: true,\n\t\t\t\t\tpostal_code: true,\n\t\t\t\t\tlatitude: true,\n\t\t\t\t\tlongitude: true\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar ids = this.getGridSelectIdArray();\n\n\t\t\tdata.filter_data = Global.convertLayoutFilterToAPIFilter( this.select_layout );\n\t\t\tif ( ids.length > 0 ) {\n\t\t\t\tdata.filter_data.id = ids;\n\t\t\t}\n\n\t\t\tvar cells = this.api.getJobApplicant( data, { async: false } ).getResult();\n\t\t\tif ( !this.is_mass_editing ) {\n\t\t\t\tPromise.all(/* import() | leaflet-timetrex */[__webpack_require__.e(\"vendors-node_modules_leaflet_dist_images_marker-icon-2x_png-node_modules_leaflet_dist_images_-78d511\"), __webpack_require__.e(\"interface_html5_framework_leaflet_leaflet-timetrex_js\"), __webpack_require__.e(\"leaflet-timetrex\")]).then(__webpack_require__.bind(__webpack_require__, 6889)).then(( module )=>{\n\t\t\t\t\tvar processed_data_for_map = module.TTConvertMapData.processBasicFromGenericViewController( cells );\n\t\t\t\t\tIndexViewController.openEditView( this, 'Map', processed_data_for_map );\n\t\t\t\t}).catch( Global.importErrorHandler );\n\t\t\t}\n\t\t}\n\t}\n\n\topenEditView( id ) {\n\t\tif ( typeof id == 'undefined' && this.edit_only_mode ) {\n\t\t\tthis.onCancelClick( true, true );\n\t\t} else if ( this.edit_only_mode && id ) {\n\t\t\tvar $this = this;\n\t\t\tthis.initOptions( function() {\n\t\t\t\tif ( !$this.edit_view ) {\n\t\t\t\t\t$this.initEditViewUI( $this.viewId, $this.edit_view_tpl );\n\t\t\t\t}\n\t\t\t\tvar filter_data = { filter_data: { id: id } };\n\t\t\t\t$this.api.getJobApplicant( filter_data, {\n\t\t\t\t\tonResult: function( result ) {\n\t\t\t\t\t\tresult = result.getResult()[0];\n\t\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\t\tTAlertManager.showAlert( $.i18n._( 'Invalid job applicant' ) );\n\t\t\t\t\t\t\t$this.onCancelClick();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Waiting for the TTAPI.API returns data to set the current edit record.\n\t\t\t\t\t\t\t$this.current_edit_record = result;\n\t\t\t\t\t\t\t$this.initEditView();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t} else {\n\t\t\tif ( !this.edit_view ) {\n\t\t\t\tthis.initEditViewUI( this.viewId, this.edit_view_tpl );\n\t\t\t}\n\t\t}\n\t}\n\n\t/* jshint ignore:end */\n\n\tsetCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'edit_employee':\n\t\t\t\tthis.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'user' );\n\t\t\t\tbreak;\n\t\t\tcase 'job_application':\n\t\t\t\tthis.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'job_application' );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetDefaultMenuEmployeeIcon( context_btn, grid_selected_length, pId ) {\n\t\tif ( !this.viewPermissionValidate( pId ) || this.edit_only_mode ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\n\t\tif ( grid_selected_length === 1 ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tsetCustomEditMenuIcon( id, context_btn ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'edit_employee':\n\t\t\t\tthis.setEditMenuNavEditIcon( context_btn, 'user' );\n\t\t\t\tbreak;\n\t\t\tcase 'job_application':\n\t\t\t\tthis.setEditMenuNavEditIcon( context_btn, 'job_application' );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetEditMenuMapIcon( context_btn ) {\n\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t}\n\n\tonNavigationClick( iconName ) {\n\t\tvar $this = this;\n\t\tvar filter;\n\t\tvar temp_filter;\n\t\tvar grid_selected_id_array;\n\t\tvar grid_selected_length;\n\t\tvar selectedId;\n\t\tswitch ( iconName ) {\n\t\t\tcase 'edit_employee':\n\t\t\t\tfilter = { filter_data: {} };\n\t\t\t\tif ( Global.isSet( this.current_edit_record ) ) {\n\t\t\t\t\tgetUserDefaultData( function( data ) {\n\t\t\t\t\t\tfor ( var key in data ) {\n\t\t\t\t\t\t\tif ( !$this.current_edit_record[key] ) {\n\t\t\t\t\t\t\t\t$this.current_edit_record[key] = data[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tIndexViewController.openEditView( $this, 'Employee', $this.current_edit_record );\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\t\t\t\t\tgetUserDefaultData( function( data ) {\n\t\t\t\t\t\ttemp_filter = {};\n\t\t\t\t\t\tgrid_selected_id_array = $this.getGridSelectIdArray();\n\t\t\t\t\t\tgrid_selected_length = grid_selected_id_array.length;\n\t\t\t\t\t\tif ( grid_selected_length > 0 ) {\n\t\t\t\t\t\t\tselectedId = grid_selected_id_array[0];\n\t\t\t\t\t\t\ttemp_filter.filter_data = {};\n\t\t\t\t\t\t\ttemp_filter.filter_data.id = [selectedId];\n\t\t\t\t\t\t\t$this.api['get' + $this.api.key_name]( temp_filter, {\n\t\t\t\t\t\t\t\tonResult: function( result ) {\n\t\t\t\t\t\t\t\t\tvar result_data = result.getResult();\n\t\t\t\t\t\t\t\t\tif ( !result_data ) {\n\t\t\t\t\t\t\t\t\t\tresult_data = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresult_data = result_data[0];\n\t\t\t\t\t\t\t\t\tfor ( var key in data ) {\n\t\t\t\t\t\t\t\t\t\tif ( !result_data[key] ) {\n\t\t\t\t\t\t\t\t\t\t\tresult_data[key] = data[key];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tIndexViewController.openEditView( $this, 'Employee', result_data );\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\tfunction getUserDefaultData( callBack ) {\n\t\t\t\t$this.user_api.getUserDefaultData( {\n\t\t\t\t\tonResult: function( result ) {\n\t\t\t\t\t\tvar data = result.getResult();\n\t\t\t\t\t\tcallBack( data );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'export_excel':\n\t\t\t\tthis.onExportClick( 'export' + this.api.key_name );\n\t\t\t\tbreak;\n\t\t\tcase 'job_application':\n\t\t\t\tvar filter = { filter_data: {} };\n\t\t\t\tvar job_applicant_id;\n\t\t\t\tvar select_item = this.getSelectedItem();\n\t\t\t\tif ( select_item != null ) {\n\t\t\t\t\tjob_applicant_id = select_item.id;\n\t\t\t\t}\n\t\t\t\tfilter.filter_data.job_applicant_id = job_applicant_id;\n\t\t\t\tGlobal.addViewTab( this.viewId, $.i18n._( 'Job Applicant' ), window.location.href );\n\t\t\t\tIndexViewController.goToView( 'JobApplication', filter );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tinitSubHistoryView() {\n\t\tvar $this = this;\n\n\t\tif ( !this.current_edit_record.id ) {\n\t\t\tTTPromise.resolve( 'BaseViewController', 'onTabShow' ); //Since search() isn't called in this case, and we just display the \"Please Save This Record ...\" message, resolve the promise.\n\t\t\treturn;\n\t\t}\n\n\t\t$( '#tab_history' ).css( 'opacity', 0 );\n\t\tTTPromise.add( 'JobApplicant_History_Tab', 'initSubHistoryView' );\n\t\tTTPromise.add( 'JobApplicant_History_Tab', 'JobApplicantEmploymentViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantEmploymentViewController.js', function() {\n\t\t\tvar tab_history = $this.edit_view_tab.find( '#tab_history' );\n\t\t\tvar firstColumn = tab_history.find( '.first-column-sub-view' ).find( '.first-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantEmployment' + 'View' );\n\t\t\tJobApplicantEmploymentViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantEmploymentView );\n\n\t\t} );\n\n\t\tTTPromise.add( 'JobApplicant_History_Tab', 'JobApplicantReferenceViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantReferenceViewController.js', function() {\n\t\t\tvar tab_history = $this.edit_view_tab.find( '#tab_history' );\n\t\t\tvar firstColumn = tab_history.find( '.first-column-sub-view' ).find( '.second-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantReference' + 'View' );\n\t\t\tJobApplicantReferenceViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantReferenceView );\n\t\t} );\n\n\t\tTTPromise.add( 'JobApplicant_History_Tab', 'JobApplicantLocationViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantLocationViewController.js', function() {\n\t\t\tvar tab_history = $this.edit_view_tab.find( '#tab_history' );\n\t\t\tvar firstColumn = tab_history.find( '.first-column-sub-view' ).find( '.third-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantLocation' + 'View' );\n\t\t\tJobApplicantLocationViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantLocationView );\n\t\t} );\n\n\t\tTTPromise.wait( null, null, function() {\n\n\t\t\t// var width = $('#tab_history .first-column-sub-view').width();\n\t\t\t// if ( $('#tab_history').height() < $('#tab_history')[0].scrollHeight ){\n\t\t\t// \twidth -= 8;\n\t\t\t// }\n\t\t\t// $this.sub_job_applicant_employment_view_controller.grid.setGridWidth(width);\n\t\t\t// $this.sub_job_applicant_reference_view_controller.grid.setGridWidth(width);\n\t\t\t// $this.sub_job_applicant_location_view_controller.grid.setGridWidth(width);\n\t\t\t$( '#tab_history' ).css( 'opacity', 1 );\n\t\t} );\n\n\t\tTTPromise.resolve( 'JobApplicant_History_Tab', 'initSubHistoryView' );\n\n\t\tfunction beforeLoadView() {\n\n\t\t}\n\n\t\tfunction afterLoadJobApplicantEmploymentView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Employment' ) );\n\t\t\t$this.sub_job_applicant_employment_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_employment_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_employment_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_employment_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_employment_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_employment_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction afterLoadJobApplicantReferenceView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Reference' ) );\n\t\t\t$this.sub_job_applicant_reference_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_reference_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_reference_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_reference_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_reference_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_reference_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction afterLoadJobApplicantLocationView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Location' ) );\n\t\t\t$this.sub_job_applicant_location_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_location_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_location_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_location_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_location_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_location_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\t}\n\n\tinitSubQualificationView() {\n\t\tvar $this = this;\n\n\t\tif ( !this.current_edit_record.id ) {\n\t\t\tTTPromise.resolve( 'BaseViewController', 'onTabShow' ); //Since search() isn't called in this case, and we just display the \"Please Save This Record ...\" message, resolve the promise.\n\t\t\treturn;\n\t\t}\n\n\t\t$( '#tab_qualifications .first-column-sub-view' ).css( 'opacity', '0' );\n\t\tTTPromise.add( 'JobApplicant_Qualifications_Tab', 'initSubQualificationView' );\n\n\t\tTTPromise.add( 'JobApplicant_Qualifications_Tab', 'JobApplicantSkillViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantSkillViewController.js', function() {\n\t\t\tvar tab_qualifications = $this.edit_view_tab.find( '#tab_qualifications' );\n\t\t\tvar firstColumn = tab_qualifications.find( '.first-column-sub-view' ).find( '.first-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantSkill' + 'View' );\n\t\t\tJobApplicantSkillViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantSkillView );\n\n\t\t} );\n\n\t\tTTPromise.add( 'JobApplicant_Qualifications_Tab', 'JobApplicantEducationViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantEducationViewController.js', function() {\n\t\t\tvar tab_qualifications = $this.edit_view_tab.find( '#tab_qualifications' );\n\t\t\tvar firstColumn = tab_qualifications.find( '.first-column-sub-view' ).find( '.second-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantEducation' + 'View' );\n\t\t\tJobApplicantEducationViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantEducationView );\n\n\t\t} );\n\n\t\tTTPromise.add( 'JobApplicant_Qualifications_Tab', 'JobApplicantMembershipViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantMembershipViewController.js', function() {\n\t\t\tvar tab_qualifications = $this.edit_view_tab.find( '#tab_qualifications' );\n\t\t\tvar firstColumn = tab_qualifications.find( '.first-column-sub-view' ).find( '.third-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantMembership' + 'View' );\n\t\t\tJobApplicantMembershipViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantMembershipView );\n\n\t\t} );\n\n\t\tTTPromise.add( 'JobApplicant_Qualifications_Tab', 'JobApplicantLicenseViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantLicenseViewController.js', function() {\n\t\t\tvar tab_qualifications = $this.edit_view_tab.find( '#tab_qualifications' );\n\t\t\tvar firstColumn = tab_qualifications.find( '.first-column-sub-view' ).find( '.forth-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantLicense' + 'View' );\n\t\t\tJobApplicantLicenseViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantLicenseView );\n\n\t\t} );\n\n\t\tTTPromise.add( 'JobApplicant_Qualifications_Tab', 'JobApplicantLanguageViewController' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicantLanguageViewController.js', function() {\n\t\t\tvar tab_qualifications = $this.edit_view_tab.find( '#tab_qualifications' );\n\t\t\tvar firstColumn = tab_qualifications.find( '.first-column-sub-view' ).find( '.fifth-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplicantLanguage' + 'View' );\n\t\t\tJobApplicantLanguageViewController.loadSubView( firstColumn, beforeLoadView, afterLoadJobApplicantLanguageView );\n\n\t\t} );\n\n\t\tfunction beforeLoadView() {\n\n\t\t}\n\n\t\tfunction afterLoadJobApplicantSkillView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Skills' ) );\n\t\t\t$this.sub_job_applicant_skill_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_skill_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_skill_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_skill_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_skill_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_skill_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction afterLoadJobApplicantLicenseView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Licenses' ) );\n\t\t\t$this.sub_job_applicant_license_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_license_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_license_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_license_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_license_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_license_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction afterLoadJobApplicantLanguageView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Languages' ) );\n\t\t\t$this.sub_job_applicant_language_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_language_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_language_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_language_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_language_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_language_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction afterLoadJobApplicantEducationView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Education' ) );\n\t\t\t$this.sub_job_applicant_education_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_education_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_education_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_education_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_education_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_education_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction afterLoadJobApplicantMembershipView( subViewController ) {\n\t\t\t$( subViewController.el ).find( '.sub-view-title' ).text( $.i18n._( 'Memberships' ) );\n\t\t\t$this.sub_job_applicant_membership_view_controller = subViewController;\n\t\t\t$this.sub_job_applicant_membership_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_job_applicant_membership_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_applicant_membership_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_applicant_membership_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_applicant_membership_view_controller.postInit = function() {\n\t\t\t\tthis.buildContextMenu();\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tTTPromise.wait( null, null, function() {\n\t\t\t$( '#contentContainer' ).trigger( 'resize' );\n\t\t\t$( '#tab_qualifications .first-column-sub-view' ).css( 'opacity', '1' );\n\t\t} );\n\n\t\tTTPromise.resolve( 'JobApplicant_Qualifications_Tab', 'initSubQualificationView' );\n\t}\n\n\tinitSubApplicationView() {\n\t\tvar $this = this;\n\n\t\tif ( !this.current_edit_record.id ) {\n\t\t\tTTPromise.resolve( 'BaseViewController', 'onTabShow' ); //Since search() isn't called in this case, and we just display the \"Please Save This Record ...\" message, resolve the promise.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.sub_application_view_controller ) {\n\t\t\tthis.sub_application_view_controller.buildContextMenu( true );\n\t\t\tthis.sub_application_view_controller.setDefaultMenu();\n\t\t\t$this.sub_application_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_application_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_application_view_controller.initData();\n\t\t\treturn;\n\t\t}\n\n\t\tTTPromise.add( 'initSubApplicationView', 'loadscript' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicationViewController.js', function() {\n\t\t\tvar tab_applications = $this.edit_view_tab.find( '#tab_applications' );\n\t\t\tvar firstColumn = tab_applications.find( '.first-column-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplication' + 'View' );\n\t\t\tJobApplicationViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );\n\n\t\t} );\n\n\t\tfunction beforeLoadView() {\n\n\t\t}\n\n\t\tfunction afterLoadView( subViewController ) {\n\t\t\t$this.sub_application_view_controller = subViewController;\n\t\t\t$this.sub_application_view_controller.parent_key = 'job_applicant_id';\n\t\t\t$this.sub_application_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_application_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_application_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_application_view_controller.postInit = function() {\n\t\t\t\tthis.initData();\n\t\t\t\tTTPromise.resolve( 'initSubApplicationView', 'loadscript' );\n\t\t\t};\n\t\t}\n\t}\n\n\tremoveEditView() {\n\t\tsuper.removeEditView();\n\n\t\tthis.sub_application_view_controller = null;\n\n\t\tthis.sub_job_applicant_employment_view_controller = null;\n\t\tthis.sub_job_applicant_reference_view_controller = null;\n\t\tthis.sub_job_applicant_location_view_controller = null;\n\n\t\tthis.sub_job_applicant_skill_view_controller = null;\n\t\tthis.sub_job_applicant_license_view_controller = null;\n\t\tthis.sub_job_applicant_language_view_controller = null;\n\t\tthis.sub_job_applicant_education_view_controller = null;\n\t\tthis.sub_job_applicant_membership_view_controller = null;\n\t}\n\n\tgetFilterColumnsFromDisplayColumns( column_filter, enable_system_columns ) {\n\t\tif ( column_filter == undefined ) {\n\t\t\tcolumn_filter = {};\n\t\t}\n\t\tcolumn_filter.latitude = true;\n\t\tcolumn_filter.longitude = true;\n\t\treturn this._getFilterColumnsFromDisplayColumns( column_filter, enable_system_columns );\n\t}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU87QUFDUCwyQkFBMkI7QUFDM0IsRUFBRSxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixDQUFDO0FBQzVCLDBCQUEwQixDQUFDO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLENBQUMsaUJBQWlCLENBQUM7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLG9EQUFvRDtBQUN6RCxLQUFLLGlFQUFpRTtBQUN0RSxLQUFLLGlEQUFpRDtBQUN0RCxLQUFLLG9FQUFvRTtBQUN6RSxLQUFLLG9FQUFvRTtBQUN6RSxLQUFLLCtEQUErRDtBQUNwRSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMEJBQTBCLFNBQVMsQ0FBQyxxREFBcUQ7QUFDekYsdUJBQXVCLFNBQVMsQ0FBQyxrREFBa0Q7QUFDbkYseUJBQXlCLFNBQVMsQ0FBQyxvREFBb0Q7QUFDdkY7QUFDQSxhQUFhLENBQUM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxhQUFhLENBQUM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osbUJBQW1CLFNBQVMsQ0FBQyxxQkFBcUI7QUFDbEQ7QUFDQSxhQUFhLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsZ0NBQWdDLGtDQUFrQztBQUNsRSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0MsbUNBQW1DO0FBQ25FLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGdDQUFnQyxpQ0FBaUM7QUFDakUsNkJBQTZCLENBQUM7O0FBRTlCOztBQUVBOztBQUVBLGdDQUFnQyxtQ0FBbUM7QUFDbkUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isa0JBQWtCO0FBQ2pEO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0Msa0NBQWtDO0FBQ2xFLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGdDQUFnQyxvQ0FBb0M7QUFDcEUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0IsOEJBQThCO0FBQzdELDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0EsK0JBQStCLGdDQUFnQztBQUMvRDtBQUNBLDZCQUE2QixDQUFDOztBQUU5Qjs7QUFFQTs7QUFFQSxnQ0FBZ0Msb0NBQW9DO0FBQ3BFLDZCQUE2QixDQUFDOztBQUU5Qjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGdDQUFnQyw2QkFBNkI7QUFDN0QsNkJBQTZCLENBQUM7O0FBRTlCOztBQUVBOztBQUVBLGdDQUFnQyxtQ0FBbUM7QUFDbkUsNkJBQTZCLENBQUM7O0FBRTlCOztBQUVBOztBQUVBOztBQUVBLGdDQUFnQyxtQ0FBbUM7QUFDbkUsNkJBQTZCLENBQUM7O0FBRTlCOztBQUVBOztBQUVBOztBQUVBLGdDQUFnQyw0QkFBNEI7QUFDNUQsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isb0NBQW9DO0FBQ25FO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isb0JBQW9CO0FBQ25EO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSxnQ0FBZ0Msa0NBQWtDO0FBQ2xFLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0EsaUNBQWlDLHNCQUFzQjtBQUN2RCw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7O0FBRUEsZ0NBQWdDLDJCQUEyQjtBQUMzRCw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSwrQkFBK0Isb0NBQW9DO0FBQ25FLDZCQUE2QixDQUFDOztBQUU5Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCLGtDQUFrQztBQUNqRTtBQUNBLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGdDQUFnQyw2Q0FBNkM7QUFDN0UsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsaUNBQWlDLHNDQUFzQzs7QUFFdkUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isa0NBQWtDO0FBQ2pFO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0IsbUNBQW1DO0FBQ2xFO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsK0JBQStCO0FBQzlELDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0EsK0JBQStCLDJCQUEyQjtBQUMxRCw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBLCtCQUErQix1Q0FBdUM7QUFDdEUsNkJBQTZCLENBQUM7O0FBRTlCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsaUNBQWlDLGdDQUFnQzs7QUFFakUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsZ0NBQWdDLHVEQUF1RDtBQUN2Riw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0MsdURBQXVEO0FBQ3ZGLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0NBQWdDLGlDQUFpQztBQUNqRSw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7O0FBRUEsb0NBQW9DLGdDQUFnQztBQUNwRSw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7O0FBRUEsb0NBQW9DLHdDQUF3QztBQUM1RSw2QkFBNkIsQ0FBQztBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtEQUFrRCxDQUFDO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaURBQWlELGVBQWU7QUFDaEU7QUFDQSxJQUFJLGtXQUEyRjtBQUMvRjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLENBQUM7QUFDakM7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUEsRUFBRSxDQUFDO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLENBQUM7QUFDSixJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBLEVBQUUsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDO0FBQ0osR0FBRyxDQUFDO0FBQ0osSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2FudFZpZXdDb250cm9sbGVyLmpzPzkyOTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEpvYkFwcGxpY2FudFZpZXdDb250cm9sbGVyIGV4dGVuZHMgQmFzZVZpZXdDb250cm9sbGVyIHtcblx0Y29uc3RydWN0b3IoIG9wdGlvbnMgPSB7fSApIHtcblx0XHRfLmRlZmF1bHRzKCBvcHRpb25zLCB7XG5cdFx0XHRlbDogJyNqb2JfYXBwbGljYW50X3ZpZXdfY29udGFpbmVyJyxcblxuXHRcdFx0Ly8gX3JlcXVpcmVkX2ZpbGVzOiB7XG5cdFx0XHQvLyBcdDE1OiBbJ2xlYWZsZXQtdGltZXRyZXgnXVxuXHRcdFx0Ly8gfSxcblxuXHRcdFx0c3RhdHVzX2FycmF5OiBudWxsLFxuXHRcdFx0aWRlbnRpZmljYXRpb25fdHlwZV9hcnJheTogbnVsbCxcblx0XHRcdHNleF9hcnJheTogbnVsbCxcblx0XHRcdGF2YWlsYWJsZV9kYXlzX29mX3dlZWtfYXJyYXk6IG51bGwsXG5cdFx0XHRhdmFpbGFibGVfaG91cnNfb2ZfZGF5X2FycmF5OiBudWxsLFxuXHRcdFx0bWluaW11bV93YWdlX3R5cGVfYXJyYXk6IG51bGwsXG5cdFx0XHRib29sZWFuX2FycmF5OiBudWxsLFxuXHRcdFx0ZG9jdW1lbnRfb2JqZWN0X3R5cGVfaWQ6IG51bGwsXG5cdFx0XHRjb3VudHJ5X2FycmF5OiBudWxsLFxuXHRcdFx0cHJvdmluY2VfYXJyYXk6IG51bGwsXG5cdFx0XHRlX3Byb3ZpbmNlX2FycmF5OiBudWxsLFxuXHRcdFx0aV9wcm92aW5jZV9hcnJheTogbnVsbCxcblx0XHRcdGNvbXBhbnlfYXBpOiBudWxsLFxuXHRcdFx0c3ViX2FwcGxpY2F0aW9uX3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblx0XHRcdHN1Yl9qb2JfYXBwbGljYW50X2VtcGxveW1lbnRfdmlld19jb250cm9sbGVyOiBudWxsLFxuXHRcdFx0c3ViX2pvYl9hcHBsaWNhbnRfcmVmZXJlbmNlX3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblx0XHRcdHN1Yl9qb2JfYXBwbGljYW50X2xvY2F0aW9uX3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblx0XHRcdHN1Yl9qb2JfYXBwbGljYW50X3NraWxsX3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblx0XHRcdHN1Yl9qb2JfYXBwbGljYW50X2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXI6IG51bGwsXG5cdFx0XHRzdWJfam9iX2FwcGxpY2FudF9tZW1iZXJzaGlwX3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblx0XHRcdHN1Yl9qb2JfYXBwbGljYW50X2xpY2Vuc2Vfdmlld19jb250cm9sbGVyOiBudWxsLFxuXHRcdFx0c3ViX2pvYl9hcHBsaWNhbnRfbGFuZ3VhZ2Vfdmlld19jb250cm9sbGVyOiBudWxsLFxuXHRcdFx0dXNlcl9hcGk6IG51bGxcblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdCggb3B0aW9ucyApIHtcblx0XHQvL3RoaXMuX3N1cGVyKCdpbml0aWFsaXplJywgb3B0aW9ucyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RwbCA9ICdKb2JBcHBsaWNhbnRFZGl0Vmlldy5odG1sJztcblx0XHR0aGlzLnBlcm1pc3Npb25faWQgPSAnam9iX2FwcGxpY2FudCc7XG5cdFx0dGhpcy52aWV3SWQgPSAnSm9iQXBwbGljYW50Jztcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ0pvYkFwcGxpY2FudFZpZXcnO1xuXHRcdHRoaXMudGFibGVfbmFtZV9rZXkgPSAnam9iX2FwcGxpY2FudCc7XG5cdFx0dGhpcy5jb250ZXh0X21lbnVfbmFtZSA9ICQuaTE4bi5fKCAnSm9iIEFwcGxpY2FudHMnICk7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uX2xhYmVsID0gJC5pMThuLl8oICdKb2IgQXBwbGljYW50JyApO1xuXHRcdHRoaXMuYXBpID0gVFRBUEkuQVBJSm9iQXBwbGljYW50O1xuXHRcdHRoaXMuY29tcGFueV9hcGkgPSBUVEFQSS5BUElDb21wYW55O1xuXHRcdHRoaXMudXNlcl9hcGkgPSBUVEFQSS5BUElVc2VyO1xuXHRcdHRoaXMuZG9jdW1lbnRfb2JqZWN0X3R5cGVfaWQgPSAxNjA7XG5cdFx0dGhpcy5ib29sZWFuX2FycmF5ID0gWyQuaTE4bi5fKCAnTm8nICksICQuaTE4bi5fKCAnWWVzJyApXTtcblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH1cblxuXHRpbml0T3B0aW9ucyggY2FsbEJhY2sgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgb3B0aW9ucyA9IFtcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdzdGF0dXMnLCBmaWVsZF9uYW1lOiBudWxsLCBhcGk6IG51bGwgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdpZGVudGlmaWNhdGlvbl90eXBlJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnc2V4JywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnYXZhaWxhYmxlX2RheXNfb2Zfd2VlaycsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2F2YWlsYWJsZV9ob3Vyc19vZl9kYXknLCBmaWVsZF9uYW1lOiBudWxsLCBhcGk6IG51bGwgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdtaW5pbXVtX3dhZ2VfdHlwZScsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2NvdW50cnknLCBmaWVsZF9uYW1lOiAnY291bnRyeScsIGFwaTogdGhpcy5jb21wYW55X2FwaSB9XG5cdFx0XTtcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9ucyggb3B0aW9ucywgZnVuY3Rpb24oIHJlc3VsdCApIHtcblxuXHRcdFx0aWYgKCBjYWxsQmFjayApIHtcblx0XHRcdFx0Y2FsbEJhY2soIHJlc3VsdCApOyAvLyBGaXJzdCB0byBpbml0aWFsaXplIGRyb3AgZG93biBvcHRpb25zLCBhbmQgdGhlbiB0byBpbml0aWFsaXplIGVkaXQgdmlldyBVSS5cblx0XHRcdH1cblxuXHRcdH0gKTtcblxuXHRcdGlmICggIXRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHQkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydjdXJyZW50bHlfZW1wbG95ZWQnXS5zZXRTb3VyY2VEYXRhKCBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggdGhpcy5ib29sZWFuX2FycmF5ICkgKTtcblx0XHRcdCR0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydjdXJyZW50bHlfZW1wbG95ZWQnXS5zZXRTb3VyY2VEYXRhKCBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggdGhpcy5ib29sZWFuX2FycmF5ICkgKTtcblxuXHRcdFx0JHRoaXMuYmFzaWNfc2VhcmNoX2ZpZWxkX3VpX2RpY1snY3JpbWluYWxfcmVjb3JkJ10uc2V0U291cmNlRGF0YSggR2xvYmFsLmJ1aWxkUmVjb3JkQXJyYXkoIHRoaXMuYm9vbGVhbl9hcnJheSApICk7XG5cdFx0XHQkdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snY3JpbWluYWxfcmVjb3JkJ10uc2V0U291cmNlRGF0YSggR2xvYmFsLmJ1aWxkUmVjb3JkQXJyYXkoIHRoaXMuYm9vbGVhbl9hcnJheSApICk7XG5cblx0XHRcdCR0aGlzLmJhc2ljX3NlYXJjaF9maWVsZF91aV9kaWNbJ2ltbWVkaWF0ZV9kcnVnX3Rlc3QnXS5zZXRTb3VyY2VEYXRhKCBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggdGhpcy5ib29sZWFuX2FycmF5ICkgKTtcblx0XHRcdCR0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydpbW1lZGlhdGVfZHJ1Z190ZXN0J10uc2V0U291cmNlRGF0YSggR2xvYmFsLmJ1aWxkUmVjb3JkQXJyYXkoIHRoaXMuYm9vbGVhbl9hcnJheSApICk7XG5cdFx0fVxuXHR9XG5cblx0YnVpbGRFZGl0Vmlld1VJKCkge1xuXHRcdHN1cGVyLmJ1aWxkRWRpdFZpZXdVSSgpO1xuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdHZhciB0YWJfbW9kZWwgPSB7XG5cdFx0XHQndGFiX2pvYl9hcHBsaWNhbnQnOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnSm9iIEFwcGxpY2FudCcgKSwgJ2lzX211bHRpX2NvbHVtbic6IHRydWUgfSxcblx0XHRcdCd0YWJfYmFja2dyb3VuZCc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdCYWNrZ3JvdW5kJyApLCAnaXNfbXVsdGlfY29sdW1uJzogdHJ1ZSB9LFxuXHRcdFx0J3RhYl9hdmFpbGFiaWxpdHknOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnQXZhaWxhYmlsaXR5JyApLCAnaXNfbXVsdGlfY29sdW1uJzogdHJ1ZSB9LFxuXHRcdFx0J3RhYl9oaXN0b3J5Jzoge1xuXHRcdFx0XHQnbGFiZWwnOiAkLmkxOG4uXyggJ0hpc3RvcnknICksXG5cdFx0XHRcdCdpbml0X2NhbGxiYWNrJzogJ2luaXRTdWJIaXN0b3J5VmlldycsXG5cdFx0XHRcdCdkaXNwbGF5X29uX21hc3NfZWRpdCc6IGZhbHNlLFxuXHRcdFx0XHQnaHRtbF90ZW1wbGF0ZSc6IHRoaXMuZ2V0SGlzdG9yeVRhYkh0bWwoKVxuXHRcdFx0fSxcblx0XHRcdCd0YWJfcXVhbGlmaWNhdGlvbnMnOiB7XG5cdFx0XHRcdCdsYWJlbCc6ICQuaTE4bi5fKCAnUXVhbGlmaWNhdGlvbnMnICksXG5cdFx0XHRcdCdpbml0X2NhbGxiYWNrJzogJ2luaXRTdWJRdWFsaWZpY2F0aW9uVmlldycsXG5cdFx0XHRcdCdkaXNwbGF5X29uX21hc3NfZWRpdCc6IGZhbHNlLFxuXHRcdFx0XHQnaHRtbF90ZW1wbGF0ZSc6IHRoaXMuZ2V0UXVhbGlmaWNhdGlvbnNUYWJIdG1sKClcblx0XHRcdH0sXG5cdFx0XHQndGFiX3BvcnRhbCc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdQb3J0YWwnICkgfSxcblx0XHRcdCd0YWJfYXBwbGljYXRpb25zJzoge1xuXHRcdFx0XHQnbGFiZWwnOiAkLmkxOG4uXyggJ0FwcGxpY2F0aW9ucycgKSxcblx0XHRcdFx0J2luaXRfY2FsbGJhY2snOiAnaW5pdFN1YkFwcGxpY2F0aW9uVmlldycsXG5cdFx0XHRcdCdkaXNwbGF5X29uX21hc3NfZWRpdCc6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0J3RhYl9hdHRhY2htZW50JzogdHJ1ZSxcblx0XHRcdCd0YWJfYXVkaXQnOiB0cnVlLFxuXHRcdH07XG5cdFx0dGhpcy5zZXRUYWJNb2RlbCggdGFiX21vZGVsICk7XG5cblx0XHQvL25vIG5hdmlnYXRpb24gaW4gZWRpdCBvbmx5IG1vZGVcblx0XHRpZiAoICF0aGlzLmVkaXRfb25seV9tb2RlICkge1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uLkFDb21ib0JveCgge1xuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUpvYkFwcGxpY2FudCxcblx0XHRcdFx0aWQ6IHRoaXMuc2NyaXB0X25hbWUgKyAnX25hdmlnYXRpb24nLFxuXHRcdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9qb2JfYXBwbGljYW50Jyxcblx0XHRcdFx0bmF2aWdhdGlvbl9tb2RlOiB0cnVlLFxuXHRcdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5zZXROYXZpZ2F0aW9uKCk7XG5cdFx0fVxuXHRcdC8vVGFiIDAgc3RhcnRcblxuXHRcdHZhciB0YWJfam9iX2FwcGxpY2FudCA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9qb2JfYXBwbGljYW50JyApO1xuXG5cdFx0dmFyIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjEgPSB0YWJfam9iX2FwcGxpY2FudC5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0ucHVzaCggdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gU3RhdHVzXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3N0YXR1c19pZCcgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5zdGF0dXNfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1N0YXR1cycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfam9iX2FwcGxpY2FudF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gRmlyc3QgTmFtZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdmaXJzdF9uYW1lJywgd2lkdGg6IDIwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdGaXJzdCBOYW1lJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjEgKTtcblxuXHRcdC8vIE1pZGRsZSBOYW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21pZGRsZV9uYW1lJywgd2lkdGg6IDIwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNaWRkbGUgTmFtZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfam9iX2FwcGxpY2FudF9jb2x1bW4xICk7XG5cblx0XHQvLyBMYXN0IE5hbWVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnbGFzdF9uYW1lJywgd2lkdGg6IDIwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdMYXN0IE5hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gTWFpZGVuIE5hbWVcblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdtYWlkZW5fbmFtZScsIHdpZHRoOiAyMDAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTWFpZGVuIE5hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gR2VuZGVyXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnc2V4X2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnNleF9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnR2VuZGVyJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjEgKTtcblxuXHRcdC8vIEV0aG5pY2l0eVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUV0aG5pY0dyb3VwLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2V0aG5pY19ncm91cCcsXG5cdFx0XHRmaWVsZDogJ2V0aG5pY19ncm91cF9pZCcsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdFdGhuaWNpdHknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gUGhvbmVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnaG9tZV9waG9uZScsIHdpZHRoOiAyMDAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUGhvbmUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gTW9iaWxlIFBob25lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21vYmlsZV9waG9uZScsIHdpZHRoOiAyMDAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTW9iaWxlIFBob25lJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjEgKTtcblxuXHRcdC8vIEN1cnJlbnRseSBFbXBsb3llZFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENoZWNrYm94KCB7IGZpZWxkOiAnY3VycmVudGx5X2VtcGxveWVkJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDdXJyZW50bHkgRW1wbG95ZWQnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gRXhwZWN0ZWQgV2FnZSBUeXBlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnbWluaW11bV93YWdlX3R5cGVfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMubWluaW11bV93YWdlX3R5cGVfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0V4cGVjdGVkIFdhZ2UgVHlwZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfam9iX2FwcGxpY2FudF9jb2x1bW4xICk7XG5cblx0XHQvLyBFeHBlY3RlZCBXYWdlXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnbWluaW11bV93YWdlJywgd2lkdGg6IDEwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdFeHBlY3RlZCBXYWdlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjEsICcnICk7XG5cblx0XHR2YXIgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiA9IHRhYl9qb2JfYXBwbGljYW50LmZpbmQoICcuc2Vjb25kLWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0ucHVzaCggdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiApO1xuXG5cdFx0Ly8gRW1haWxcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnZW1haWwnLCB3aWR0aDogMjAwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0VtYWlsJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjIsICcnICk7XG5cblx0XHQvLyBBZGRyZXNzKExpbmUgMSlcblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdhZGRyZXNzMScsIHdpZHRoOiAnMTAwJScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQWRkcmVzcyhMaW5lIDEpJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjIgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5wYXJlbnQoKS53aWR0aCggJzQ1JScgKTtcblxuXHRcdC8vIEFkZHJlc3MoTGluZSAyKVxuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2FkZHJlc3MyJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdBZGRyZXNzKExpbmUgMiknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LnBhcmVudCgpLndpZHRoKCAnNDUlJyApO1xuXG5cdFx0Ly8gQ2l0eVxuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2NpdHknLCB3aWR0aDogMjAwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0NpdHknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiApO1xuXG5cdFx0Ly8gQ291bnRyeVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2NvdW50cnknLCBzZXRfZW1wdHk6IHRydWUgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5jb3VudHJ5X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDb3VudHJ5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjIgKTtcblxuXHRcdC8vIFByb3ZpbmNlL1N0YXRlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAncHJvdmluY2UnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggW10gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Byb3ZpbmNlL1N0YXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjIgKTtcblxuXHRcdC8vIFBvc3RhbCAvIFpJUCBDb2RlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdwb3N0YWxfY29kZScsIHdpZHRoOiA5MCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdQb3N0YWwvWklQIENvZGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiApO1xuXG5cdFx0Ly8gQmlydGggRGF0ZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVIgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdiaXJ0aF9kYXRlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdCaXJ0aCBEYXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9qb2JfYXBwbGljYW50X2NvbHVtbjIgKTtcblxuXHRcdC8vIFNJTi9TU05cblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdzaW4nLCB3aWR0aDogMjAwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1NJTi9TU04nICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiApO1xuXG5cdFx0Ly9UYWdzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5UQUdfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGFnSW5wdXQoIHsgZmllbGQ6ICd0YWcnLCBvYmplY3RfdHlwZV9pZDogMzYwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1RhZ3MnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2pvYl9hcHBsaWNhbnRfY29sdW1uMiwgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdC8vVGFiIDEgc3RhcnRcblxuXHRcdHZhciB0YWJfYmFja2dyb3VuZCA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9iYWNrZ3JvdW5kJyApO1xuXG5cdFx0dmFyIHRhYl9iYWNrZ3JvdW5kX2NvbHVtbjEgPSB0YWJfYmFja2dyb3VuZC5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0ucHVzaCggdGFiX2JhY2tncm91bmRfY29sdW1uMSApO1xuXG5cdFx0Ly8gSWRlbnRpZmljYXRpb24gVHlwZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2lkZW50aWZpY2F0aW9uX3R5cGVfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuaWRlbnRpZmljYXRpb25fdHlwZV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnSWRlbnRpZmljYXRpb24gVHlwZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfYmFja2dyb3VuZF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gSWRlbnRpZmljYXRpb24gTnVtYmVyXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2lkZW50aWZpY2F0aW9uX251bWJlcicsIHdpZHRoOiAzMDAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnSWRlbnRpZmljYXRpb24gTnVtYmVyJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9iYWNrZ3JvdW5kX2NvbHVtbjEgKTtcblxuXHRcdC8vIElkZW50aWZpY2F0aW9uIEV4cGlyZXNcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkRBVEVfUElDS0VSICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdpZGVudGlmaWNhdGlvbl9leHBpcmVfZGF0ZScgfSApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdJZGVudGlmaWNhdGlvbiBFeHBpcmVzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9iYWNrZ3JvdW5kX2NvbHVtbjEsICcnLCBudWxsICk7XG5cblx0XHQvLyBJZGVudGlmaWNhdGlvbiBDb3VudHJ5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnaWRlbnRpZmljYXRpb25fY291bnRyeScgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5jb3VudHJ5X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdJZGVudGlmaWNhdGlvbiBDb3VudHJ5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9iYWNrZ3JvdW5kX2NvbHVtbjEgKTtcblxuXHRcdC8vIElkZW50aWZpY2F0aW9uIFByb3ZpbmNlL1N0YXRlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnaWRlbnRpZmljYXRpb25fcHJvdmluY2UnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggW10gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0lkZW50aWZpY2F0aW9uIFByb3ZpbmNlL1N0YXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9iYWNrZ3JvdW5kX2NvbHVtbjEsICcnICk7XG5cblx0XHR2YXIgdGFiX2JhY2tncm91bmRfY29sdW1uMiA9IHRhYl9iYWNrZ3JvdW5kLmZpbmQoICcuc2Vjb25kLWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0ucHVzaCggdGFiX2JhY2tncm91bmRfY29sdW1uMiApO1xuXG5cdFx0Ly8gQXZhaWxhYmxlIGZvciBJbW1lZGlhdGUgRHJ1ZyBUZXN0XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ2hlY2tib3goIHsgZmllbGQ6ICdpbW1lZGlhdGVfZHJ1Z190ZXN0JyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdBdmFpbGFibGUgZm9yIEltbWVkaWF0ZSBEcnVnIFRlc3QnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2JhY2tncm91bmRfY29sdW1uMiwgJycgKTtcblxuXHRcdC8vIENyaW1pbmFsIFJlY29yZFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENoZWNrYm94KCB7IGZpZWxkOiAnY3JpbWluYWxfcmVjb3JkJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDcmltaW5hbCBSZWNvcmQnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2JhY2tncm91bmRfY29sdW1uMiApO1xuXG5cdFx0Ly8gRGVzY3JpYmUgY3JpbWluYWwgY29udmljdGlvbnNcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfQVJFQSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dEFyZWEoIHsgZmllbGQ6ICdjcmltaW5hbF9yZWNvcmRfZGVzY3JpcHRpb24nIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0Rlc2NyaWJlIGNyaW1pbmFsIGNvbnZpY3Rpb25zJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9iYWNrZ3JvdW5kX2NvbHVtbjIsICcnLCBudWxsLCBudWxsLCB0cnVlICk7XG5cblx0XHQvL1RhYiAyIHN0YXJ0XG5cblx0XHR2YXIgdGFiX2F2YWlsYWJpbGl0eSA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9hdmFpbGFiaWxpdHknICk7XG5cblx0XHR2YXIgdGFiX2F2YWlsYWJpbGl0eV9jb2x1bW4xID0gdGFiX2F2YWlsYWJpbGl0eS5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMl0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMl0ucHVzaCggdGFiX2F2YWlsYWJpbGl0eV9jb2x1bW4xICk7XG5cblx0XHQvLyBBdmFpbGFibGUgRGF0ZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVIgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5URGF0ZVBpY2tlciggeyBmaWVsZDogJ2F2YWlsYWJsZV9zdGFydF9kYXRlJyB9ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0F2YWlsYWJsZSBEYXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9hdmFpbGFiaWxpdHlfY29sdW1uMSwgJycsIG51bGwgKTtcblxuXHRcdC8vIEF2YWlsYWJsZSBIb3VycyBQZXIgV2VlayAoTWluaW11bSlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnYXZhaWxhYmxlX21pbmltdW1faG91cnNfcGVyX3dlZWsnLCB3aWR0aDogMzAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQXZhaWxhYmxlIEhvdXJzIFBlciBXZWVrIChNaW5pbXVtKScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfYXZhaWxhYmlsaXR5X2NvbHVtbjEgKTtcblxuXHRcdC8vIEF2YWlsYWJsZSBIb3VycyBQZXIgV2VlayAoTWF4aW11bSlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnYXZhaWxhYmxlX21heGltdW1faG91cnNfcGVyX3dlZWsnLCB3aWR0aDogMzAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQXZhaWxhYmxlIEhvdXJzIFBlciBXZWVrIChNYXhpbXVtKScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfYXZhaWxhYmlsaXR5X2NvbHVtbjEsICcnICk7XG5cblx0XHR2YXIgdGFiX2F2YWlsYWJpbGl0eV9jb2x1bW4yID0gdGFiX2F2YWlsYWJpbGl0eS5maW5kKCAnLnNlY29uZC1jb2x1bW4nICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1syXS5wdXNoKCB0YWJfYXZhaWxhYmlsaXR5X2NvbHVtbjIgKTtcblxuXHRcdC8vIEF2YWlsYWJsZSBEYXlzIE9mIFdlZWtcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gZm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0ZmllbGQ6ICdhdmFpbGFibGVfZGF5c19vZl93ZWVrJyxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nXG5cdFx0fSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmF2YWlsYWJsZV9kYXlzX29mX3dlZWtfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0F2YWlsYWJsZSBEYXlzIE9mIFdlZWsnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2F2YWlsYWJpbGl0eV9jb2x1bW4yLCAnJyApO1xuXG5cdFx0Ly8gQXZhaWxhYmxlIEhvdXJzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGZpZWxkOiAnYXZhaWxhYmxlX2hvdXJzX29mX2RheScsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJ1xuXHRcdH0gKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5hdmFpbGFibGVfaG91cnNfb2ZfZGF5X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdBdmFpbGFibGUgSG91cnMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2F2YWlsYWJpbGl0eV9jb2x1bW4yLCAnJyApO1xuXG5cdFx0Ly9UYWIgNSBzdGFydFxuXG5cdFx0dmFyIHRhYl9wb3J0YWwgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcG9ydGFsJyApO1xuXG5cdFx0dmFyIHRhYl9wb3J0YWxfY29sdW1uMSA9IHRhYl9wb3J0YWwuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzVdID0gW107XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzVdLnB1c2goIHRhYl9wb3J0YWxfY29sdW1uMSApO1xuXG5cdFx0Ly8gVXNlciBOYW1lXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAndXNlcl9uYW1lJywgd2lkdGg6IDIwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdVc2VyIE5hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3BvcnRhbF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly9QYXNzd29yZFxuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5QQVNTV09SRF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRQYXNzd29yZElucHV0KCB7IGZpZWxkOiAncGFzc3dvcmQnLCB3aWR0aDogMjAwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Bhc3N3b3JkJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wb3J0YWxfY29sdW1uMSApO1xuXG5cdFx0Ly9QYXNzd29yZCBDb25mcmltXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlBBU1NXT1JEX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFBhc3N3b3JkSW5wdXQoIHsgZmllbGQ6ICdwYXNzd29yZF9jb25maXJtJywgd2lkdGg6IDIwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdQYXNzd29yZCAoQ29uZmlybSknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3BvcnRhbF9jb2x1bW4xLCAnJyApO1xuXHR9XG5cblx0Z2V0SGlzdG9yeVRhYkh0bWwoKSB7XG5cdFx0dmFyIGh0bWxfdGVtcGxhdGUgPSBgXG5cdFx0XHQ8ZGl2IGlkPVwidGFiX2hpc3RvcnlcIiBjbGFzcz1cImVkaXQtdmlldy10YWItb3V0c2lkZS1zdWItdmlld1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZWRpdC12aWV3LXRhYlwiIGlkPVwidGFiX2hpc3RvcnlfY29udGVudF9kaXZcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlyc3QtY29sdW1uLXN1Yi12aWV3XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlyc3Qtc3ViLXZpZXdcIj48L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzZWNvbmQtc3ViLXZpZXdcIj48L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0aGlyZC1zdWItdmlld1wiPjwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzYXZlLWFuZC1jb250aW51ZS1kaXZcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWVzc2FnZVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzYXZlLWFuZC1jb250aW51ZS1idXR0b24tZGl2XCI+XG5cdFx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJ0dC1idXR0b24gcC1idXR0b24gcC1jb21wb25lbnRcIiB0eXBlPVwiYnV0dG9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJpY29uXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwicC1idXR0b24tbGFiZWxcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+YDtcblxuXHRcdHJldHVybiBodG1sX3RlbXBsYXRlO1xuXHR9XG5cblx0Z2V0UXVhbGlmaWNhdGlvbnNUYWJIdG1sKCkge1xuXHRcdHZhciBodG1sX3RlbXBsYXRlID0gYFxuXHRcdFx0PGRpdiBpZD1cInRhYl9xdWFsaWZpY2F0aW9uc1wiIGNsYXNzPVwiZWRpdC12aWV3LXRhYi1vdXRzaWRlLXN1Yi12aWV3XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJlZGl0LXZpZXctdGFiXCIgaWQ9XCJ0YWJfcXVhbGlmaWNhdGlvbnNfY29udGVudF9kaXZcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlyc3QtY29sdW1uLXN1Yi12aWV3XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlyc3Qtc3ViLXZpZXdcIj48L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzZWNvbmQtc3ViLXZpZXdcIj48L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0aGlyZC1zdWItdmlld1wiPjwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcnRoLXN1Yi12aWV3XCI+PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlmdGgtc3ViLXZpZXdcIj48L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2F2ZS1hbmQtY29udGludWUtZGl2XCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2F2ZS1hbmQtY29udGludWUtYnV0dG9uLWRpdlwiPlxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzPVwidHQtYnV0dG9uIHAtYnV0dG9uIHAtY29tcG9uZW50XCIgdHlwZT1cImJ1dHRvblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiaWNvblwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInAtYnV0dG9uLWxhYmVsXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PmA7XG5cblx0XHRyZXR1cm4gaHRtbF90ZW1wbGF0ZTtcblx0fVxuXG5cdGJ1aWxkU2VhcmNoRmllbGRzKCkge1xuXG5cdFx0c3VwZXIuYnVpbGRTZWFyY2hGaWVsZHMoKTtcblx0XHR0aGlzLnNlYXJjaF9maWVsZHMgPSBbXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTdGF0dXMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdzdGF0dXNfaWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnRmlyc3QgTmFtZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0X25hbWUnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0xhc3QgTmFtZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ2xhc3RfbmFtZScsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnUGhvbmUnICksXG5cdFx0XHRcdGZpZWxkOiAnYW55X3Bob25lJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnRW1haWwnICksXG5cdFx0XHRcdGZpZWxkOiAnZW1haWwnLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdDb3VudHJ5JyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnY291bnRyeScsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5DT01CT19CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1Byb3ZpbmNlL1N0YXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAncHJvdmluY2UnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NpdHknICksXG5cdFx0XHRcdGZpZWxkOiAnY2l0eScsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdSZXN1bWUgS2V5d29yZHMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdyZXN1bWVfdGV4dCcsXG5cdFx0XHRcdG11bHRpcGxlOiBmYWxzZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NyaW1pbmFsIFJlY29yZCcgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2NyaW1pbmFsX3JlY29yZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdJbW1lZGlhdGUgRHJ1ZyBUZXN0JyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAnaW1tZWRpYXRlX2RydWdfdGVzdCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdIb3Vycy9XZWVrIChNaW4pJyApLFxuXHRcdFx0XHRmaWVsZDogJ2F2YWlsYWJsZV9taW5pbXVtX2hvdXJzX3Blcl93ZWVrJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0hvdXJzL1dlZWsgKE1heCknICksXG5cdFx0XHRcdGZpZWxkOiAnYXZhaWxhYmxlX21heGltdW1faG91cnNfcGVyX3dlZWsnLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ3VycmVudGx5IEVtcGxveWVkJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDMsXG5cdFx0XHRcdGZpZWxkOiAnY3VycmVudGx5X2VtcGxveWVkJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0dlbmRlcicgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAzLFxuXHRcdFx0XHRmaWVsZDogJ3NleF9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUYWdzJyApLFxuXHRcdFx0XHRmaWVsZDogJ3RhZycsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0aW5fY29sdW1uOiAzLFxuXHRcdFx0XHRvYmplY3RfdHlwZV9pZDogMzYwLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRBR19JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ3JlYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAzLFxuXHRcdFx0XHRmaWVsZDogJ2NyZWF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVXBkYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAzLFxuXHRcdFx0XHRmaWVsZDogJ3VwZGF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApXG5cdFx0XTtcblx0fVxuXG5cdG9uRm9ybUl0ZW1DaGFuZ2UoIHRhcmdldCwgZG9Ob3RWYWxpZGF0ZSApIHtcblx0XHR0aGlzLnNldElzQ2hhbmdlZCggdGFyZ2V0ICk7XG5cdFx0dGhpcy5zZXRNYXNzRWRpdGluZ0ZpZWxkc1doZW5Gb3JtQ2hhbmdlKCB0YXJnZXQgKTtcblx0XHR2YXIga2V5ID0gdGFyZ2V0LmdldEZpZWxkKCk7XG5cblx0XHR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSA9IHRhcmdldC5nZXRWYWx1ZSgpO1xuXG5cdFx0c3dpdGNoICgga2V5ICkge1xuXG5cdFx0XHRjYXNlICdjb3VudHJ5Jzpcblx0XHRcdFx0dmFyIHdpZGdldCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1sncHJvdmluY2UnXTtcblx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCBudWxsICk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdpZGVudGlmaWNhdGlvbl9jb3VudHJ5Jzpcblx0XHRcdFx0d2lkZ2V0ID0gdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydpZGVudGlmaWNhdGlvbl9wcm92aW5jZSddO1xuXHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIG51bGwgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT0gJ2NvdW50cnknICkge1xuXHRcdFx0dGhpcy5lU2V0UHJvdmluY2UoIHRoaXMuZWRpdF92aWV3X3VpX2RpY1snY291bnRyeSddLmdldFZhbHVlKCksIHRydWUgKTtcblx0XHRcdHRoaXMuY2xlYXJFcnJvclRpcHMoKTtcblx0XHRcdHRoaXMuc2V0RWRpdE1lbnUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gJ2lkZW50aWZpY2F0aW9uX2NvdW50cnknICkge1xuXHRcdFx0dGhpcy5pU2V0UHJvdmluY2UoIHRoaXMuZWRpdF92aWV3X3VpX2RpY1snaWRlbnRpZmljYXRpb25fY291bnRyeSddLmdldFZhbHVlKCksIHRydWUgKTtcblx0XHRcdHRoaXMuY2xlYXJFcnJvclRpcHMoKTtcblx0XHRcdHRoaXMuc2V0RWRpdE1lbnUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICFkb05vdFZhbGlkYXRlICkge1xuXHRcdFx0dGhpcy52YWxpZGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHNldEN1cnJlbnRFZGl0UmVjb3JkRGF0YSgpIHtcblxuXHRcdC8vU2V0IGN1cnJlbnQgZWRpdCByZWNvcmQgZGF0YSB0byBhbGwgd2lkZ2V0c1xuXHRcdC8vU2V0IGN1cnJlbnQgZWRpdCByZWNvcmQgZGF0YSB0byBhbGwgd2lkZ2V0c1xuXHRcdGZvciAoIHZhciBrZXkgaW4gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkICkge1xuXHRcdFx0dmFyIHdpZGdldCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1trZXldO1xuXHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHdpZGdldCApICkge1xuXHRcdFx0XHRzd2l0Y2ggKCBrZXkgKSB7XG5cdFx0XHRcdFx0Y2FzZSAnY291bnRyeSc6IC8vcG9wdWxhciBjYXNlXG5cdFx0XHRcdFx0XHR0aGlzLnNldENvdW50cnlWYWx1ZSggd2lkZ2V0LCBrZXkgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2lkZW50aWZpY2F0aW9uX2NvdW50cnknOlxuXHRcdFx0XHRcdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydpZGVudGlmaWNhdGlvbl9wcm92aW5jZSddICkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmlTZXRQcm92aW5jZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0sIHRydWUgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaVNldFByb3ZpbmNlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmNvbGxlY3RVSURhdGFUb0N1cnJlbnRFZGl0UmVjb3JkKCk7XG5cdFx0dGhpcy5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cdH1cblxuXHRvblNldFNlYXJjaEZpbHRlckZpbmlzaGVkKCkge1xuXG5cdFx0aWYgKCB0aGlzLnNlYXJjaF9wYW5lbC5nZXRTZWxlY3RUYWJJbmRleCgpID09PSAxICkge1xuXHRcdFx0dmFyIGNvbWJvID0gdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snY291bnRyeSddO1xuXHRcdFx0dmFyIHNlbGVjdF92YWx1ZSA9IGNvbWJvLmdldFZhbHVlKCk7XG5cdFx0XHR0aGlzLnNldFByb3ZpbmNlKCBzZWxlY3RfdmFsdWUgKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkQWR2VUlGaW5pc2hlZCgpIHtcblxuXHRcdHRoaXMuYWR2X3NlYXJjaF9maWVsZF91aV9kaWNbJ2NvdW50cnknXS5jaGFuZ2UoICQucHJveHkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNvbWJvID0gdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snY291bnRyeSddO1xuXHRcdFx0dmFyIHNlbGVjdFZhbCA9IGNvbWJvLmdldFZhbHVlKCk7XG5cblx0XHRcdHRoaXMuc2V0UHJvdmluY2UoIHNlbGVjdFZhbCApO1xuXG5cdFx0XHR0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydwcm92aW5jZSddLnNldFZhbHVlKCBudWxsICk7XG5cblx0XHR9LCB0aGlzICkgKTtcblx0fVxuXG5cdHNldFByb3ZpbmNlKCB2YWwsIG0gKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdGlmICggIXZhbCB8fCB2YWwgPT09ICctMScgfHwgdmFsID09PSAnMCcgKSB7XG5cdFx0XHQkdGhpcy5wcm92aW5jZV9hcnJheSA9IFtdO1xuXHRcdFx0dGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1sncHJvdmluY2UnXS5zZXRTb3VyY2VEYXRhKCBbXSApO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuY29tcGFueV9hcGkuZ2V0T3B0aW9ucyggJ3Byb3ZpbmNlJywgdmFsLCB7XG5cdFx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzICkge1xuXHRcdFx0XHRcdHJlcyA9IHJlcy5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRpZiAoICFyZXMgKSB7XG5cdFx0XHRcdFx0XHRyZXMgPSBbXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkdGhpcy5wcm92aW5jZV9hcnJheSA9IEdsb2JhbC5idWlsZFJlY29yZEFycmF5KCByZXMgKTtcblx0XHRcdFx0XHQkdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1sncHJvdmluY2UnXS5zZXRTb3VyY2VEYXRhKCAkdGhpcy5wcm92aW5jZV9hcnJheSApO1xuXG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cblxuXHRlU2V0UHJvdmluY2UoIHZhbCwgcmVmcmVzaCApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHZhciBwcm92aW5jZV93aWRnZXQgPSAkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydwcm92aW5jZSddO1xuXG5cdFx0aWYgKCAhdmFsIHx8IHZhbCA9PT0gJy0xJyB8fCB2YWwgPT09ICcwJyApIHtcblx0XHRcdCR0aGlzLmVfcHJvdmluY2VfYXJyYXkgPSBbXTtcblx0XHRcdHByb3ZpbmNlX3dpZGdldC5zZXRTb3VyY2VEYXRhKCBbXSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbXBhbnlfYXBpLmdldE9wdGlvbnMoICdwcm92aW5jZScsIHZhbCwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0XHRyZXMgPSByZXMuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCAhcmVzICkge1xuXHRcdFx0XHRcdFx0cmVzID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCR0aGlzLmVfcHJvdmluY2VfYXJyYXkgPSBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggcmVzICk7XG5cdFx0XHRcdFx0aWYgKCByZWZyZXNoICYmICR0aGlzLmVfcHJvdmluY2VfYXJyYXkubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRcdCR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQucHJvdmluY2UgPSAkdGhpcy5lX3Byb3ZpbmNlX2FycmF5WzBdLnZhbHVlO1xuXHRcdFx0XHRcdFx0cHJvdmluY2Vfd2lkZ2V0LnNldFZhbHVlKCAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLnByb3ZpbmNlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHByb3ZpbmNlX3dpZGdldC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5lX3Byb3ZpbmNlX2FycmF5ICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdGlTZXRQcm92aW5jZSggdmFsLCByZWZyZXNoICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIHByb3ZpbmNlX3dpZGdldCA9ICR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2lkZW50aWZpY2F0aW9uX3Byb3ZpbmNlJ107XG5cblx0XHRpZiAoICF2YWwgfHwgdmFsID09PSAnLTEnIHx8IHZhbCA9PT0gJzAnICkge1xuXHRcdFx0JHRoaXMuaV9wcm92aW5jZV9hcnJheSA9IFtdO1xuXHRcdFx0cHJvdmluY2Vfd2lkZ2V0LnNldFNvdXJjZURhdGEoIFtdICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29tcGFueV9hcGkuZ2V0T3B0aW9ucyggJ3Byb3ZpbmNlJywgdmFsLCB7XG5cdFx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzICkge1xuXHRcdFx0XHRcdHJlcyA9IHJlcy5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRpZiAoICFyZXMgKSB7XG5cdFx0XHRcdFx0XHRyZXMgPSBbXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkdGhpcy5pX3Byb3ZpbmNlX2FycmF5ID0gR2xvYmFsLmJ1aWxkUmVjb3JkQXJyYXkoIHJlcyApO1xuXHRcdFx0XHRcdGlmICggcmVmcmVzaCAmJiAkdGhpcy5pX3Byb3ZpbmNlX2FycmF5Lmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkZW50aWZpY2F0aW9uX3Byb3ZpbmNlID0gJHRoaXMuaV9wcm92aW5jZV9hcnJheVswXS52YWx1ZTtcblx0XHRcdFx0XHRcdHByb3ZpbmNlX3dpZGdldC5zZXRWYWx1ZSggJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZGVudGlmaWNhdGlvbl9wcm92aW5jZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwcm92aW5jZV93aWRnZXQuc2V0U291cmNlRGF0YSggJHRoaXMuaV9wcm92aW5jZV9hcnJheSApO1xuXG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXN0b21Db250ZXh0TWVudU1vZGVsKCkge1xuXHRcdHZhciBjb250ZXh0X21lbnVfbW9kZWwgPSB7XG5cdFx0XHRleGNsdWRlOiBbJ2NvcHknXSxcblx0XHRcdGluY2x1ZGU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0hpcmUgQXBwbGljYW50JyApLFxuXHRcdFx0XHRcdGlkOiAnZWRpdF9lbXBsb3llZScsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHQvL2FjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdC8vZ3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0XHR2dWVfaWNvbjogJ3R0aWNvbiB0dGljb24tYWRkX2JsYWNrXzI0ZHAnLFxuXHRcdFx0XHRcdHNvcnRfb3JkZXI6IDcxMDBcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ01hcCcgKSxcblx0XHRcdFx0XHRpZDogJ21hcCcsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHQvL2FjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdC8vZ3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0XHR2dWVfaWNvbjogJ3R0aWNvbiB0dGljb24tbWFwX2JsYWNrXzI0ZHAnLFxuXHRcdFx0XHRcdHNvcnRfb3JkZXI6IDgwMDAsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdKdW1wIFRvJyApLFxuXHRcdFx0XHRcdGlkOiAnanVtcF90b19oZWFkZXInLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwX2hlYWRlcjogdHJ1ZSxcblx0XHRcdFx0XHRwZXJtaXNzaW9uX3Jlc3VsdDogZmFsc2UsIC8vIHRvIGhpZGUgaXQgaW4gbGVnYWN5IGNvbnRleHQgbWVudSBhbmQgYXZvaWQgZXJyb3JzIGluIGxlZ2FjeSBwYXJzZXJzLlxuXHRcdFx0XHRcdHNvcnRfb3JkZXI6IDkwNTAsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdKb2IgQXBwbGljYXRpb25zJyApLFxuXHRcdFx0XHRcdGlkOiAnam9iX2FwcGxpY2F0aW9uJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdFx0aWNvbjogJ2pvYmFwcGxpY2F0aW9ucy0zNXgzNS5wbmcnLFxuXHRcdFx0XHRcdHNvcnRfb3JkZXI6IDkwNTAsXG5cdFx0XHRcdH0sXG5cblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNvbnRleHRfbWVudV9tb2RlbDtcblx0fVxuXG5cdG9uQ3VzdG9tQ29udGV4dENsaWNrKCBpZCApIHtcblx0XHRzd2l0Y2ggKCBpZCApIHtcblx0XHRcdGNhc2UgJ21hcCc6XG5cdFx0XHRcdHRoaXMub25NYXBDbGljaygpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2V4cG9ydF9leGNlbCc6XG5cdFx0XHRjYXNlICdlZGl0X2VtcGxveWVlJzpcblx0XHRcdGNhc2UgJ2pvYl9hcHBsaWNhdGlvbic6XG5cdFx0XHRcdHRoaXMub25OYXZpZ2F0aW9uQ2xpY2soIGlkICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdG9uTWFwQ2xpY2soKSB7XG5cdFx0Ly8gb25seSB0cmlnZ2VyIG1hcCBsb2FkIGluIHNwZWNpZmljIHByb2R1Y3QgZWRpdGlvbnMuXG5cdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDE1ICkgKSB7XG5cdFx0XHR0aGlzLmlzX3ZpZXdpbmcgPSBmYWxzZTtcblx0XHRcdFByb2dyZXNzQmFyLnNob3dQcm9ncmVzc0JhcigpO1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdGZpbHRlcl9jb2x1bW5zOiB7XG5cdFx0XHRcdFx0aWQ6IHRydWUsXG5cdFx0XHRcdFx0Zmlyc3RfbmFtZTogdHJ1ZSxcblx0XHRcdFx0XHRsYXN0X25hbWU6IHRydWUsXG5cdFx0XHRcdFx0YWRkcmVzczE6IHRydWUsXG5cdFx0XHRcdFx0YWRkcmVzczI6IHRydWUsXG5cdFx0XHRcdFx0Y2l0eTogdHJ1ZSxcblx0XHRcdFx0XHRwcm92aW5jZTogdHJ1ZSxcblx0XHRcdFx0XHRjb3VudHJ5OiB0cnVlLFxuXHRcdFx0XHRcdHBvc3RhbF9jb2RlOiB0cnVlLFxuXHRcdFx0XHRcdGxhdGl0dWRlOiB0cnVlLFxuXHRcdFx0XHRcdGxvbmdpdHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dmFyIGlkcyA9IHRoaXMuZ2V0R3JpZFNlbGVjdElkQXJyYXkoKTtcblxuXHRcdFx0ZGF0YS5maWx0ZXJfZGF0YSA9IEdsb2JhbC5jb252ZXJ0TGF5b3V0RmlsdGVyVG9BUElGaWx0ZXIoIHRoaXMuc2VsZWN0X2xheW91dCApO1xuXHRcdFx0aWYgKCBpZHMubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0ZGF0YS5maWx0ZXJfZGF0YS5pZCA9IGlkcztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNlbGxzID0gdGhpcy5hcGkuZ2V0Sm9iQXBwbGljYW50KCBkYXRhLCB7IGFzeW5jOiBmYWxzZSB9ICkuZ2V0UmVzdWx0KCk7XG5cdFx0XHRpZiAoICF0aGlzLmlzX21hc3NfZWRpdGluZyApIHtcblx0XHRcdFx0aW1wb3J0KCAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImxlYWZsZXQtdGltZXRyZXhcIiAqLyAnQC9mcmFtZXdvcmsvbGVhZmxldC9sZWFmbGV0LXRpbWV0cmV4JyApLnRoZW4oKCBtb2R1bGUgKT0+e1xuXHRcdFx0XHRcdHZhciBwcm9jZXNzZWRfZGF0YV9mb3JfbWFwID0gbW9kdWxlLlRUQ29udmVydE1hcERhdGEucHJvY2Vzc0Jhc2ljRnJvbUdlbmVyaWNWaWV3Q29udHJvbGxlciggY2VsbHMgKTtcblx0XHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLm9wZW5FZGl0VmlldyggdGhpcywgJ01hcCcsIHByb2Nlc3NlZF9kYXRhX2Zvcl9tYXAgKTtcblx0XHRcdFx0fSkuY2F0Y2goIEdsb2JhbC5pbXBvcnRFcnJvckhhbmRsZXIgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvcGVuRWRpdFZpZXcoIGlkICkge1xuXHRcdGlmICggdHlwZW9mIGlkID09ICd1bmRlZmluZWQnICYmIHRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHR0aGlzLm9uQ2FuY2VsQ2xpY2soIHRydWUsIHRydWUgKTtcblx0XHR9IGVsc2UgaWYgKCB0aGlzLmVkaXRfb25seV9tb2RlICYmIGlkICkge1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdHRoaXMuaW5pdE9wdGlvbnMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEkdGhpcy5lZGl0X3ZpZXcgKSB7XG5cdFx0XHRcdFx0JHRoaXMuaW5pdEVkaXRWaWV3VUkoICR0aGlzLnZpZXdJZCwgJHRoaXMuZWRpdF92aWV3X3RwbCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBmaWx0ZXJfZGF0YSA9IHsgZmlsdGVyX2RhdGE6IHsgaWQ6IGlkIH0gfTtcblx0XHRcdFx0JHRoaXMuYXBpLmdldEpvYkFwcGxpY2FudCggZmlsdGVyX2RhdGEsIHtcblx0XHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlc3VsdCApIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5nZXRSZXN1bHQoKVswXTtcblx0XHRcdFx0XHRcdGlmICggIXJlc3VsdCApIHtcblx0XHRcdFx0XHRcdFx0VEFsZXJ0TWFuYWdlci5zaG93QWxlcnQoICQuaTE4bi5fKCAnSW52YWxpZCBqb2IgYXBwbGljYW50JyApICk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLm9uQ2FuY2VsQ2xpY2soKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFdhaXRpbmcgZm9yIHRoZSBUVEFQSS5BUEkgcmV0dXJucyBkYXRhIHRvIHNldCB0aGUgY3VycmVudCBlZGl0IHJlY29yZC5cblx0XHRcdFx0XHRcdFx0JHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCA9IHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0JHRoaXMuaW5pdEVkaXRWaWV3KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggIXRoaXMuZWRpdF92aWV3ICkge1xuXHRcdFx0XHR0aGlzLmluaXRFZGl0Vmlld1VJKCB0aGlzLnZpZXdJZCwgdGhpcy5lZGl0X3ZpZXdfdHBsICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuXHRzZXRDdXN0b21EZWZhdWx0TWVudUljb24oIGlkLCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGggKSB7XG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICdlZGl0X2VtcGxveWVlJzpcblx0XHRcdFx0dGhpcy5zZXREZWZhdWx0TWVudUVkaXRJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGgsICd1c2VyJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2pvYl9hcHBsaWNhdGlvbic6XG5cdFx0XHRcdHRoaXMuc2V0RGVmYXVsdE1lbnVFZGl0SWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoLCAnam9iX2FwcGxpY2F0aW9uJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudUVtcGxveWVlSWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoLCBwSWQgKSB7XG5cdFx0aWYgKCAhdGhpcy52aWV3UGVybWlzc2lvblZhbGlkYXRlKCBwSWQgKSB8fCB0aGlzLmVkaXRfb25seV9tb2RlICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmhpZGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKVxuXHRcdH1cblxuXHRcdGlmICggZ3JpZF9zZWxlY3RlZF9sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCB0cnVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q3VzdG9tRWRpdE1lbnVJY29uKCBpZCwgY29udGV4dF9idG4gKSB7XG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICdlZGl0X2VtcGxveWVlJzpcblx0XHRcdFx0dGhpcy5zZXRFZGl0TWVudU5hdkVkaXRJY29uKCBjb250ZXh0X2J0biwgJ3VzZXInICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnam9iX2FwcGxpY2F0aW9uJzpcblx0XHRcdFx0dGhpcy5zZXRFZGl0TWVudU5hdkVkaXRJY29uKCBjb250ZXh0X2J0biwgJ2pvYl9hcHBsaWNhdGlvbicgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0c2V0RWRpdE1lbnVNYXBJY29uKCBjb250ZXh0X2J0biApIHtcblx0XHRDb250ZXh0TWVudU1hbmFnZXIuaGlkZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApXG5cdH1cblxuXHRvbk5hdmlnYXRpb25DbGljayggaWNvbk5hbWUgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgZmlsdGVyO1xuXHRcdHZhciB0ZW1wX2ZpbHRlcjtcblx0XHR2YXIgZ3JpZF9zZWxlY3RlZF9pZF9hcnJheTtcblx0XHR2YXIgZ3JpZF9zZWxlY3RlZF9sZW5ndGg7XG5cdFx0dmFyIHNlbGVjdGVkSWQ7XG5cdFx0c3dpdGNoICggaWNvbk5hbWUgKSB7XG5cdFx0XHRjYXNlICdlZGl0X2VtcGxveWVlJzpcblx0XHRcdFx0ZmlsdGVyID0geyBmaWx0ZXJfZGF0YToge30gfTtcblx0XHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCApICkge1xuXHRcdFx0XHRcdGdldFVzZXJEZWZhdWx0RGF0YSggZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIga2V5IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApIHtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gPSBkYXRhW2tleV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIub3BlbkVkaXRWaWV3KCAkdGhpcywgJ0VtcGxveWVlJywgJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCApO1xuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdldFVzZXJEZWZhdWx0RGF0YSggZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHRcdFx0XHR0ZW1wX2ZpbHRlciA9IHt9O1xuXHRcdFx0XHRcdFx0Z3JpZF9zZWxlY3RlZF9pZF9hcnJheSA9ICR0aGlzLmdldEdyaWRTZWxlY3RJZEFycmF5KCk7XG5cdFx0XHRcdFx0XHRncmlkX3NlbGVjdGVkX2xlbmd0aCA9IGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0aWYgKCBncmlkX3NlbGVjdGVkX2xlbmd0aCA+IDAgKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkSWQgPSBncmlkX3NlbGVjdGVkX2lkX2FycmF5WzBdO1xuXHRcdFx0XHRcdFx0XHR0ZW1wX2ZpbHRlci5maWx0ZXJfZGF0YSA9IHt9O1xuXHRcdFx0XHRcdFx0XHR0ZW1wX2ZpbHRlci5maWx0ZXJfZGF0YS5pZCA9IFtzZWxlY3RlZElkXTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuYXBpWydnZXQnICsgJHRoaXMuYXBpLmtleV9uYW1lXSggdGVtcF9maWx0ZXIsIHtcblx0XHRcdFx0XHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlc3VsdCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggIXJlc3VsdF9kYXRhICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRfZGF0YSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0X2RhdGEgPSByZXN1bHRfZGF0YVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoIHZhciBrZXkgaW4gZGF0YSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAhcmVzdWx0X2RhdGFba2V5XSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRfZGF0YVtrZXldID0gZGF0YVtrZXldO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLm9wZW5FZGl0VmlldyggJHRoaXMsICdFbXBsb3llZScsIHJlc3VsdF9kYXRhICk7XG5cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZ2V0VXNlckRlZmF1bHREYXRhKCBjYWxsQmFjayApIHtcblx0XHRcdFx0JHRoaXMudXNlcl9hcGkuZ2V0VXNlckRlZmF1bHREYXRhKCB7XG5cdFx0XHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRcdGNhbGxCYWNrKCBkYXRhICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ2V4cG9ydF9leGNlbCc6XG5cdFx0XHRcdHRoaXMub25FeHBvcnRDbGljayggJ2V4cG9ydCcgKyB0aGlzLmFwaS5rZXlfbmFtZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2pvYl9hcHBsaWNhdGlvbic6XG5cdFx0XHRcdHZhciBmaWx0ZXIgPSB7IGZpbHRlcl9kYXRhOiB7fSB9O1xuXHRcdFx0XHR2YXIgam9iX2FwcGxpY2FudF9pZDtcblx0XHRcdFx0dmFyIHNlbGVjdF9pdGVtID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtcblx0XHRcdFx0aWYgKCBzZWxlY3RfaXRlbSAhPSBudWxsICkge1xuXHRcdFx0XHRcdGpvYl9hcHBsaWNhbnRfaWQgPSBzZWxlY3RfaXRlbS5pZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuam9iX2FwcGxpY2FudF9pZCA9IGpvYl9hcHBsaWNhbnRfaWQ7XG5cdFx0XHRcdEdsb2JhbC5hZGRWaWV3VGFiKCB0aGlzLnZpZXdJZCwgJC5pMThuLl8oICdKb2IgQXBwbGljYW50JyApLCB3aW5kb3cubG9jYXRpb24uaHJlZiApO1xuXHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLmdvVG9WaWV3KCAnSm9iQXBwbGljYXRpb24nLCBmaWx0ZXIgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aW5pdFN1Ykhpc3RvcnlWaWV3KCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHRpZiAoICF0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRUVFByb21pc2UucmVzb2x2ZSggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdvblRhYlNob3cnICk7IC8vU2luY2Ugc2VhcmNoKCkgaXNuJ3QgY2FsbGVkIGluIHRoaXMgY2FzZSwgYW5kIHdlIGp1c3QgZGlzcGxheSB0aGUgXCJQbGVhc2UgU2F2ZSBUaGlzIFJlY29yZCAuLi5cIiBtZXNzYWdlLCByZXNvbHZlIHRoZSBwcm9taXNlLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCQoICcjdGFiX2hpc3RvcnknICkuY3NzKCAnb3BhY2l0eScsIDAgKTtcblx0XHRUVFByb21pc2UuYWRkKCAnSm9iQXBwbGljYW50X0hpc3RvcnlfVGFiJywgJ2luaXRTdWJIaXN0b3J5VmlldycgKTtcblx0XHRUVFByb21pc2UuYWRkKCAnSm9iQXBwbGljYW50X0hpc3RvcnlfVGFiJywgJ0pvYkFwcGxpY2FudEVtcGxveW1lbnRWaWV3Q29udHJvbGxlcicgKTtcblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2FudEVtcGxveW1lbnRWaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl9oaXN0b3J5ID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9oaXN0b3J5JyApO1xuXHRcdFx0dmFyIGZpcnN0Q29sdW1uID0gdGFiX2hpc3RvcnkuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICkuZmluZCggJy5maXJzdC1zdWItdmlldycgKTtcblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0pvYkFwcGxpY2FudEVtcGxveW1lbnQnICsgJ1ZpZXcnICk7XG5cdFx0XHRKb2JBcHBsaWNhbnRFbXBsb3ltZW50Vmlld0NvbnRyb2xsZXIubG9hZFN1YlZpZXcoIGZpcnN0Q29sdW1uLCBiZWZvcmVMb2FkVmlldywgYWZ0ZXJMb2FkSm9iQXBwbGljYW50RW1wbG95bWVudFZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdFRUUHJvbWlzZS5hZGQoICdKb2JBcHBsaWNhbnRfSGlzdG9yeV9UYWInLCAnSm9iQXBwbGljYW50UmVmZXJlbmNlVmlld0NvbnRyb2xsZXInICk7XG5cdFx0R2xvYmFsLmxvYWRTY3JpcHQoICd2aWV3cy9oci9yZWNydWl0bWVudC9Kb2JBcHBsaWNhbnRSZWZlcmVuY2VWaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl9oaXN0b3J5ID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9oaXN0b3J5JyApO1xuXHRcdFx0dmFyIGZpcnN0Q29sdW1uID0gdGFiX2hpc3RvcnkuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICkuZmluZCggJy5zZWNvbmQtc3ViLXZpZXcnICk7XG5cdFx0XHRHbG9iYWwudHJhY2tWaWV3KCAnU3ViJyArICdKb2JBcHBsaWNhbnRSZWZlcmVuY2UnICsgJ1ZpZXcnICk7XG5cdFx0XHRKb2JBcHBsaWNhbnRSZWZlcmVuY2VWaWV3Q29udHJvbGxlci5sb2FkU3ViVmlldyggZmlyc3RDb2x1bW4sIGJlZm9yZUxvYWRWaWV3LCBhZnRlckxvYWRKb2JBcHBsaWNhbnRSZWZlcmVuY2VWaWV3ICk7XG5cdFx0fSApO1xuXG5cdFx0VFRQcm9taXNlLmFkZCggJ0pvYkFwcGxpY2FudF9IaXN0b3J5X1RhYicsICdKb2JBcHBsaWNhbnRMb2NhdGlvblZpZXdDb250cm9sbGVyJyApO1xuXHRcdEdsb2JhbC5sb2FkU2NyaXB0KCAndmlld3MvaHIvcmVjcnVpdG1lbnQvSm9iQXBwbGljYW50TG9jYXRpb25WaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl9oaXN0b3J5ID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9oaXN0b3J5JyApO1xuXHRcdFx0dmFyIGZpcnN0Q29sdW1uID0gdGFiX2hpc3RvcnkuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICkuZmluZCggJy50aGlyZC1zdWItdmlldycgKTtcblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0pvYkFwcGxpY2FudExvY2F0aW9uJyArICdWaWV3JyApO1xuXHRcdFx0Sm9iQXBwbGljYW50TG9jYXRpb25WaWV3Q29udHJvbGxlci5sb2FkU3ViVmlldyggZmlyc3RDb2x1bW4sIGJlZm9yZUxvYWRWaWV3LCBhZnRlckxvYWRKb2JBcHBsaWNhbnRMb2NhdGlvblZpZXcgKTtcblx0XHR9ICk7XG5cblx0XHRUVFByb21pc2Uud2FpdCggbnVsbCwgbnVsbCwgZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIHZhciB3aWR0aCA9ICAkKCcjdGFiX2hpc3RvcnkgLmZpcnN0LWNvbHVtbi1zdWItdmlldycpLndpZHRoKCk7XG5cdFx0XHQvLyBpZiAoICQoJyN0YWJfaGlzdG9yeScpLmhlaWdodCgpIDwgJCgnI3RhYl9oaXN0b3J5JylbMF0uc2Nyb2xsSGVpZ2h0ICl7XG5cdFx0XHQvLyBcdHdpZHRoIC09IDg7XG5cdFx0XHQvLyB9XG5cdFx0XHQvLyAkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9lbXBsb3ltZW50X3ZpZXdfY29udHJvbGxlci5ncmlkLnNldEdyaWRXaWR0aCh3aWR0aCk7XG5cdFx0XHQvLyAkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9yZWZlcmVuY2Vfdmlld19jb250cm9sbGVyLmdyaWQuc2V0R3JpZFdpZHRoKHdpZHRoKTtcblx0XHRcdC8vICR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xvY2F0aW9uX3ZpZXdfY29udHJvbGxlci5ncmlkLnNldEdyaWRXaWR0aCh3aWR0aCk7XG5cdFx0XHQkKCAnI3RhYl9oaXN0b3J5JyApLmNzcyggJ29wYWNpdHknLCAxICk7XG5cdFx0fSApO1xuXG5cdFx0VFRQcm9taXNlLnJlc29sdmUoICdKb2JBcHBsaWNhbnRfSGlzdG9yeV9UYWInLCAnaW5pdFN1Ykhpc3RvcnlWaWV3JyApO1xuXG5cdFx0ZnVuY3Rpb24gYmVmb3JlTG9hZFZpZXcoKSB7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZnRlckxvYWRKb2JBcHBsaWNhbnRFbXBsb3ltZW50Vmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkKCBzdWJWaWV3Q29udHJvbGxlci5lbCApLmZpbmQoICcuc3ViLXZpZXctdGl0bGUnICkudGV4dCggJC5pMThuLl8oICdFbXBsb3ltZW50JyApICk7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9lbXBsb3ltZW50X3ZpZXdfY29udHJvbGxlciA9IHN1YlZpZXdDb250cm9sbGVyO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfZW1wbG95bWVudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X2tleSA9ICdqb2JfYXBwbGljYW50X2lkJztcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VtcGxveW1lbnRfdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9lbXBsb3ltZW50X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfZWRpdF9yZWNvcmQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfZW1wbG95bWVudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZpZXdfY29udHJvbGxlciA9ICR0aGlzO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfZW1wbG95bWVudF92aWV3X2NvbnRyb2xsZXIucG9zdEluaXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cdFx0XHRcdHRoaXMuaW5pdERhdGEoKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkSm9iQXBwbGljYW50UmVmZXJlbmNlVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkKCBzdWJWaWV3Q29udHJvbGxlci5lbCApLmZpbmQoICcuc3ViLXZpZXctdGl0bGUnICkudGV4dCggJC5pMThuLl8oICdSZWZlcmVuY2UnICkgKTtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3JlZmVyZW5jZV92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3JlZmVyZW5jZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X2tleSA9ICdqb2JfYXBwbGljYW50X2lkJztcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3JlZmVyZW5jZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3JlZmVyZW5jZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3JlZmVyZW5jZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZpZXdfY29udHJvbGxlciA9ICR0aGlzO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfcmVmZXJlbmNlX3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHRcdFx0dGhpcy5pbml0RGF0YSgpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZnRlckxvYWRKb2JBcHBsaWNhbnRMb2NhdGlvblZpZXcoIHN1YlZpZXdDb250cm9sbGVyICkge1xuXHRcdFx0JCggc3ViVmlld0NvbnRyb2xsZXIuZWwgKS5maW5kKCAnLnN1Yi12aWV3LXRpdGxlJyApLnRleHQoICQuaTE4bi5fKCAnTG9jYXRpb24nICkgKTtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xvY2F0aW9uX3ZpZXdfY29udHJvbGxlciA9IHN1YlZpZXdDb250cm9sbGVyO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbG9jYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnam9iX2FwcGxpY2FudF9pZCc7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9sb2NhdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xvY2F0aW9uX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfZWRpdF9yZWNvcmQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbG9jYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF92aWV3X2NvbnRyb2xsZXIgPSAkdGhpcztcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xvY2F0aW9uX3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHRcdFx0dGhpcy5pbml0RGF0YSgpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRpbml0U3ViUXVhbGlmaWNhdGlvblZpZXcoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdGlmICggIXRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZCApIHtcblx0XHRcdFRUUHJvbWlzZS5yZXNvbHZlKCAnQmFzZVZpZXdDb250cm9sbGVyJywgJ29uVGFiU2hvdycgKTsgLy9TaW5jZSBzZWFyY2goKSBpc24ndCBjYWxsZWQgaW4gdGhpcyBjYXNlLCBhbmQgd2UganVzdCBkaXNwbGF5IHRoZSBcIlBsZWFzZSBTYXZlIFRoaXMgUmVjb3JkIC4uLlwiIG1lc3NhZ2UsIHJlc29sdmUgdGhlIHByb21pc2UuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JCggJyN0YWJfcXVhbGlmaWNhdGlvbnMgLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKS5jc3MoICdvcGFjaXR5JywgJzAnICk7XG5cdFx0VFRQcm9taXNlLmFkZCggJ0pvYkFwcGxpY2FudF9RdWFsaWZpY2F0aW9uc19UYWInLCAnaW5pdFN1YlF1YWxpZmljYXRpb25WaWV3JyApO1xuXG5cdFx0VFRQcm9taXNlLmFkZCggJ0pvYkFwcGxpY2FudF9RdWFsaWZpY2F0aW9uc19UYWInLCAnSm9iQXBwbGljYW50U2tpbGxWaWV3Q29udHJvbGxlcicgKTtcblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2FudFNraWxsVmlld0NvbnRyb2xsZXIuanMnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJfcXVhbGlmaWNhdGlvbnMgPSAkdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3F1YWxpZmljYXRpb25zJyApO1xuXHRcdFx0dmFyIGZpcnN0Q29sdW1uID0gdGFiX3F1YWxpZmljYXRpb25zLmZpbmQoICcuZmlyc3QtY29sdW1uLXN1Yi12aWV3JyApLmZpbmQoICcuZmlyc3Qtc3ViLXZpZXcnICk7XG5cdFx0XHRHbG9iYWwudHJhY2tWaWV3KCAnU3ViJyArICdKb2JBcHBsaWNhbnRTa2lsbCcgKyAnVmlldycgKTtcblx0XHRcdEpvYkFwcGxpY2FudFNraWxsVmlld0NvbnRyb2xsZXIubG9hZFN1YlZpZXcoIGZpcnN0Q29sdW1uLCBiZWZvcmVMb2FkVmlldywgYWZ0ZXJMb2FkSm9iQXBwbGljYW50U2tpbGxWaWV3ICk7XG5cblx0XHR9ICk7XG5cblx0XHRUVFByb21pc2UuYWRkKCAnSm9iQXBwbGljYW50X1F1YWxpZmljYXRpb25zX1RhYicsICdKb2JBcHBsaWNhbnRFZHVjYXRpb25WaWV3Q29udHJvbGxlcicgKTtcblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2FudEVkdWNhdGlvblZpZXdDb250cm9sbGVyLmpzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFiX3F1YWxpZmljYXRpb25zID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9xdWFsaWZpY2F0aW9ucycgKTtcblx0XHRcdHZhciBmaXJzdENvbHVtbiA9IHRhYl9xdWFsaWZpY2F0aW9ucy5maW5kKCAnLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKS5maW5kKCAnLnNlY29uZC1zdWItdmlldycgKTtcblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0pvYkFwcGxpY2FudEVkdWNhdGlvbicgKyAnVmlldycgKTtcblx0XHRcdEpvYkFwcGxpY2FudEVkdWNhdGlvblZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3KCBmaXJzdENvbHVtbiwgYmVmb3JlTG9hZFZpZXcsIGFmdGVyTG9hZEpvYkFwcGxpY2FudEVkdWNhdGlvblZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdFRUUHJvbWlzZS5hZGQoICdKb2JBcHBsaWNhbnRfUXVhbGlmaWNhdGlvbnNfVGFiJywgJ0pvYkFwcGxpY2FudE1lbWJlcnNoaXBWaWV3Q29udHJvbGxlcicgKTtcblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2FudE1lbWJlcnNoaXBWaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl9xdWFsaWZpY2F0aW9ucyA9ICR0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcXVhbGlmaWNhdGlvbnMnICk7XG5cdFx0XHR2YXIgZmlyc3RDb2x1bW4gPSB0YWJfcXVhbGlmaWNhdGlvbnMuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICkuZmluZCggJy50aGlyZC1zdWItdmlldycgKTtcblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0pvYkFwcGxpY2FudE1lbWJlcnNoaXAnICsgJ1ZpZXcnICk7XG5cdFx0XHRKb2JBcHBsaWNhbnRNZW1iZXJzaGlwVmlld0NvbnRyb2xsZXIubG9hZFN1YlZpZXcoIGZpcnN0Q29sdW1uLCBiZWZvcmVMb2FkVmlldywgYWZ0ZXJMb2FkSm9iQXBwbGljYW50TWVtYmVyc2hpcFZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdFRUUHJvbWlzZS5hZGQoICdKb2JBcHBsaWNhbnRfUXVhbGlmaWNhdGlvbnNfVGFiJywgJ0pvYkFwcGxpY2FudExpY2Vuc2VWaWV3Q29udHJvbGxlcicgKTtcblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2FudExpY2Vuc2VWaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl9xdWFsaWZpY2F0aW9ucyA9ICR0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcXVhbGlmaWNhdGlvbnMnICk7XG5cdFx0XHR2YXIgZmlyc3RDb2x1bW4gPSB0YWJfcXVhbGlmaWNhdGlvbnMuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICkuZmluZCggJy5mb3J0aC1zdWItdmlldycgKTtcblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0pvYkFwcGxpY2FudExpY2Vuc2UnICsgJ1ZpZXcnICk7XG5cdFx0XHRKb2JBcHBsaWNhbnRMaWNlbnNlVmlld0NvbnRyb2xsZXIubG9hZFN1YlZpZXcoIGZpcnN0Q29sdW1uLCBiZWZvcmVMb2FkVmlldywgYWZ0ZXJMb2FkSm9iQXBwbGljYW50TGljZW5zZVZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdFRUUHJvbWlzZS5hZGQoICdKb2JBcHBsaWNhbnRfUXVhbGlmaWNhdGlvbnNfVGFiJywgJ0pvYkFwcGxpY2FudExhbmd1YWdlVmlld0NvbnRyb2xsZXInICk7XG5cdFx0R2xvYmFsLmxvYWRTY3JpcHQoICd2aWV3cy9oci9yZWNydWl0bWVudC9Kb2JBcHBsaWNhbnRMYW5ndWFnZVZpZXdDb250cm9sbGVyLmpzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFiX3F1YWxpZmljYXRpb25zID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9xdWFsaWZpY2F0aW9ucycgKTtcblx0XHRcdHZhciBmaXJzdENvbHVtbiA9IHRhYl9xdWFsaWZpY2F0aW9ucy5maW5kKCAnLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKS5maW5kKCAnLmZpZnRoLXN1Yi12aWV3JyApO1xuXHRcdFx0R2xvYmFsLnRyYWNrVmlldyggJ1N1YicgKyAnSm9iQXBwbGljYW50TGFuZ3VhZ2UnICsgJ1ZpZXcnICk7XG5cdFx0XHRKb2JBcHBsaWNhbnRMYW5ndWFnZVZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3KCBmaXJzdENvbHVtbiwgYmVmb3JlTG9hZFZpZXcsIGFmdGVyTG9hZEpvYkFwcGxpY2FudExhbmd1YWdlVmlldyApO1xuXG5cdFx0fSApO1xuXG5cdFx0ZnVuY3Rpb24gYmVmb3JlTG9hZFZpZXcoKSB7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZnRlckxvYWRKb2JBcHBsaWNhbnRTa2lsbFZpZXcoIHN1YlZpZXdDb250cm9sbGVyICkge1xuXHRcdFx0JCggc3ViVmlld0NvbnRyb2xsZXIuZWwgKS5maW5kKCAnLnN1Yi12aWV3LXRpdGxlJyApLnRleHQoICQuaTE4bi5fKCAnU2tpbGxzJyApICk7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9za2lsbF92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3NraWxsX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfa2V5ID0gJ2pvYl9hcHBsaWNhbnRfaWQnO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfc2tpbGxfdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9za2lsbF92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3NraWxsX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmlld19jb250cm9sbGVyID0gJHRoaXM7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9za2lsbF92aWV3X2NvbnRyb2xsZXIucG9zdEluaXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cdFx0XHRcdHRoaXMuaW5pdERhdGEoKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkSm9iQXBwbGljYW50TGljZW5zZVZpZXcoIHN1YlZpZXdDb250cm9sbGVyICkge1xuXHRcdFx0JCggc3ViVmlld0NvbnRyb2xsZXIuZWwgKS5maW5kKCAnLnN1Yi12aWV3LXRpdGxlJyApLnRleHQoICQuaTE4bi5fKCAnTGljZW5zZXMnICkgKTtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xpY2Vuc2Vfdmlld19jb250cm9sbGVyID0gc3ViVmlld0NvbnRyb2xsZXI7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9saWNlbnNlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfa2V5ID0gJ2pvYl9hcHBsaWNhbnRfaWQnO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbGljZW5zZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xpY2Vuc2Vfdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9saWNlbnNlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmlld19jb250cm9sbGVyID0gJHRoaXM7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9saWNlbnNlX3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHRcdFx0dGhpcy5pbml0RGF0YSgpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZnRlckxvYWRKb2JBcHBsaWNhbnRMYW5ndWFnZVZpZXcoIHN1YlZpZXdDb250cm9sbGVyICkge1xuXHRcdFx0JCggc3ViVmlld0NvbnRyb2xsZXIuZWwgKS5maW5kKCAnLnN1Yi12aWV3LXRpdGxlJyApLnRleHQoICQuaTE4bi5fKCAnTGFuZ3VhZ2VzJyApICk7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9sYW5ndWFnZV92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xhbmd1YWdlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfa2V5ID0gJ2pvYl9hcHBsaWNhbnRfaWQnO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbGFuZ3VhZ2Vfdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9sYW5ndWFnZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xhbmd1YWdlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmlld19jb250cm9sbGVyID0gJHRoaXM7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9sYW5ndWFnZV92aWV3X2NvbnRyb2xsZXIucG9zdEluaXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cdFx0XHRcdHRoaXMuaW5pdERhdGEoKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkSm9iQXBwbGljYW50RWR1Y2F0aW9uVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkKCBzdWJWaWV3Q29udHJvbGxlci5lbCApLmZpbmQoICcuc3ViLXZpZXctdGl0bGUnICkudGV4dCggJC5pMThuLl8oICdFZHVjYXRpb24nICkgKTtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X2tleSA9ICdqb2JfYXBwbGljYW50X2lkJztcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZpZXdfY29udHJvbGxlciA9ICR0aGlzO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfZWR1Y2F0aW9uX3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHRcdFx0dGhpcy5pbml0RGF0YSgpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZnRlckxvYWRKb2JBcHBsaWNhbnRNZW1iZXJzaGlwVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkKCBzdWJWaWV3Q29udHJvbGxlci5lbCApLmZpbmQoICcuc3ViLXZpZXctdGl0bGUnICkudGV4dCggJC5pMThuLl8oICdNZW1iZXJzaGlwcycgKSApO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbWVtYmVyc2hpcF92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X21lbWJlcnNoaXBfdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnam9iX2FwcGxpY2FudF9pZCc7XG5cdFx0XHQkdGhpcy5zdWJfam9iX2FwcGxpY2FudF9tZW1iZXJzaGlwX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmFsdWUgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbWVtYmVyc2hpcF92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X21lbWJlcnNoaXBfdmlld19jb250cm9sbGVyLnBhcmVudF92aWV3X2NvbnRyb2xsZXIgPSAkdGhpcztcblx0XHRcdCR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X21lbWJlcnNoaXBfdmlld19jb250cm9sbGVyLnBvc3RJbml0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuYnVpbGRDb250ZXh0TWVudSgpO1xuXHRcdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdFRUUHJvbWlzZS53YWl0KCBudWxsLCBudWxsLCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcjY29udGVudENvbnRhaW5lcicgKS50cmlnZ2VyKCAncmVzaXplJyApO1xuXHRcdFx0JCggJyN0YWJfcXVhbGlmaWNhdGlvbnMgLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKS5jc3MoICdvcGFjaXR5JywgJzEnICk7XG5cdFx0fSApO1xuXG5cdFx0VFRQcm9taXNlLnJlc29sdmUoICdKb2JBcHBsaWNhbnRfUXVhbGlmaWNhdGlvbnNfVGFiJywgJ2luaXRTdWJRdWFsaWZpY2F0aW9uVmlldycgKTtcblx0fVxuXG5cdGluaXRTdWJBcHBsaWNhdGlvblZpZXcoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdGlmICggIXRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZCApIHtcblx0XHRcdFRUUHJvbWlzZS5yZXNvbHZlKCAnQmFzZVZpZXdDb250cm9sbGVyJywgJ29uVGFiU2hvdycgKTsgLy9TaW5jZSBzZWFyY2goKSBpc24ndCBjYWxsZWQgaW4gdGhpcyBjYXNlLCBhbmQgd2UganVzdCBkaXNwbGF5IHRoZSBcIlBsZWFzZSBTYXZlIFRoaXMgUmVjb3JkIC4uLlwiIG1lc3NhZ2UsIHJlc29sdmUgdGhlIHByb21pc2UuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnN1Yl9hcHBsaWNhdGlvbl92aWV3X2NvbnRyb2xsZXIgKSB7XG5cdFx0XHR0aGlzLnN1Yl9hcHBsaWNhdGlvbl92aWV3X2NvbnRyb2xsZXIuYnVpbGRDb250ZXh0TWVudSggdHJ1ZSApO1xuXHRcdFx0dGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnNldERlZmF1bHRNZW51KCk7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLmluaXREYXRhKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0VFRQcm9taXNlLmFkZCggJ2luaXRTdWJBcHBsaWNhdGlvblZpZXcnLCAnbG9hZHNjcmlwdCcgKTtcblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYkFwcGxpY2F0aW9uVmlld0NvbnRyb2xsZXIuanMnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJfYXBwbGljYXRpb25zID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9hcHBsaWNhdGlvbnMnICk7XG5cdFx0XHR2YXIgZmlyc3RDb2x1bW4gPSB0YWJfYXBwbGljYXRpb25zLmZpbmQoICcuZmlyc3QtY29sdW1uLXN1Yi12aWV3JyApO1xuXHRcdFx0R2xvYmFsLnRyYWNrVmlldyggJ1N1YicgKyAnSm9iQXBwbGljYXRpb24nICsgJ1ZpZXcnICk7XG5cdFx0XHRKb2JBcHBsaWNhdGlvblZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3KCBmaXJzdENvbHVtbiwgYmVmb3JlTG9hZFZpZXcsIGFmdGVyTG9hZFZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdGZ1bmN0aW9uIGJlZm9yZUxvYWRWaWV3KCkge1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyID0gc3ViVmlld0NvbnRyb2xsZXI7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnam9iX2FwcGxpY2FudF9pZCc7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfYXBwbGljYXRpb25fdmlld19jb250cm9sbGVyLnBhcmVudF92aWV3X2NvbnRyb2xsZXIgPSAkdGhpcztcblx0XHRcdCR0aGlzLnN1Yl9hcHBsaWNhdGlvbl92aWV3X2NvbnRyb2xsZXIucG9zdEluaXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5pbml0RGF0YSgpO1xuXHRcdFx0XHRUVFByb21pc2UucmVzb2x2ZSggJ2luaXRTdWJBcHBsaWNhdGlvblZpZXcnLCAnbG9hZHNjcmlwdCcgKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlRWRpdFZpZXcoKSB7XG5cdFx0c3VwZXIucmVtb3ZlRWRpdFZpZXcoKTtcblxuXHRcdHRoaXMuc3ViX2FwcGxpY2F0aW9uX3ZpZXdfY29udHJvbGxlciA9IG51bGw7XG5cblx0XHR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2VtcGxveW1lbnRfdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0XHR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X3JlZmVyZW5jZV92aWV3X2NvbnRyb2xsZXIgPSBudWxsO1xuXHRcdHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfbG9jYXRpb25fdmlld19jb250cm9sbGVyID0gbnVsbDtcblxuXHRcdHRoaXMuc3ViX2pvYl9hcHBsaWNhbnRfc2tpbGxfdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0XHR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xpY2Vuc2Vfdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0XHR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X2xhbmd1YWdlX3ZpZXdfY29udHJvbGxlciA9IG51bGw7XG5cdFx0dGhpcy5zdWJfam9iX2FwcGxpY2FudF9lZHVjYXRpb25fdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0XHR0aGlzLnN1Yl9qb2JfYXBwbGljYW50X21lbWJlcnNoaXBfdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0fVxuXG5cdGdldEZpbHRlckNvbHVtbnNGcm9tRGlzcGxheUNvbHVtbnMoIGNvbHVtbl9maWx0ZXIsIGVuYWJsZV9zeXN0ZW1fY29sdW1ucyApIHtcblx0XHRpZiAoIGNvbHVtbl9maWx0ZXIgPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y29sdW1uX2ZpbHRlciA9IHt9O1xuXHRcdH1cblx0XHRjb2x1bW5fZmlsdGVyLmxhdGl0dWRlID0gdHJ1ZTtcblx0XHRjb2x1bW5fZmlsdGVyLmxvbmdpdHVkZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEZpbHRlckNvbHVtbnNGcm9tRGlzcGxheUNvbHVtbnMoIGNvbHVtbl9maWx0ZXIsIGVuYWJsZV9zeXN0ZW1fY29sdW1ucyApO1xuXHR9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")}}]);