TimeTrex/interface/html5/dist/developer_tools-AwesomeboxTestViewController.bundle.js

1 line
90 KiB
JavaScript

"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["developer_tools-AwesomeboxTestViewController"],{6142:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "AwesomeboxTestViewController": () => (/* binding */ AwesomeboxTestViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass AwesomeboxTestViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: \'#awesomebox_test_view_container\',\n\n\t\t\t// _required_files: [\'TImage\', \'TImageAdvBrowser\'],\n\n\t\t\tuser_api: null,\n\t\t\tuser_group_api: null,\n\t\t\tcompany_api: null,\n\t\t\tuser_id_array: null\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinit( options ) {\n\t\tthis.edit_view_tpl = \'AwesomeboxTestEditView.html\';\n\t\tthis.permission_id = \'user\';\n\t\tthis.viewId = \'AwesomeboxTest\';\n\t\tthis.script_name = \'AwesomeboxTestView\';\n\t\tthis.table_name_key = \'awesomebox_test\';\n\t\tthis.context_menu_name = $.i18n._( \'AwesomeBox Test\' );\n\t\tthis.navigation_label = $.i18n._( \'AwesomBox Test\' );\n\t\tthis.api = TTAPI.APIUser;\n\t\tthis.select_company_id = LocalCacheData.getCurrentCompany().id;\n\t\tthis.user_group_api = TTAPI.APIUserGroup;\n\t\tthis.company_api = TTAPI.APICompany;\n\t\tthis.user_id_array = [];\n\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\t\tthis.initData();\n\t}\n\n\tsetCurrentEditRecordData() {\n\t\tthis.collectUIDataToCurrentEditRecord();\n\t\tthis.setEditViewDataDone();\n\t}\n\n\tclearEditViewData() {\n\t\treturn false;\n\t}\n\n\tbuildEditViewUI() {\n\t\tvar $this = this;\n\n\t\tif( ContextMenuManager.getMenu( this.determineContextMenuMountAttributes().id ) === undefined ) {\n\t\t\tthis.buildContextMenu();\n\t\t} else {\n\t\t\tDebug.Warn( \'Context Menu (\'+ this.determineContextMenuMountAttributes().id +\') already exists for: \'+ this.viewId, \'AwesomeBoxTestView.js\', \'AwesomeBoxTestView\', \'buildEditViewUI\', 10 );\n\t\t}\n\n\t\tvar tab_model = {\n\t\t\t\'tab_employee\': { \'label\': $.i18n._( \'AWESOMEBOX TESTING VIEW\' ) },\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\t//Tab 0 start\n\n\t\tvar tab_employee = this.edit_view_tab.find( \'#tab_employee\' );\n\n\t\tvar tab_employee_column1 = tab_employee.find( \'.first-column\' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\t\tthis.edit_view_tabs[0].push( tab_employee_column1 );\n\n//\t\tUser\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_DROPDOWN );\n\t\tform_item_input.ADropDown( {\n\t\t\t//api_class: TTAPI.APIUser,\n\t\t\tfield: \'user_id\',\n\t\t\tdisplay_show_all: false,\n\t\t\tid: \'user_id_dropdown\',\n\t\t\tkey: \'id\',\n\t\t\tallow_drag_to_order: false,\n\t\t\tdisplay_close_btn: false,\n\t\t\tauto_sort: true,\n\t\t\tdisplay_column_settings: false,\n\t\t\tdefault_height: 100\n\t\t} );\n\n\t\t// form_item_input.setSourceData( $this.user_id_array );\n\t\tform_item_input.addClass( \'splayed-adropdown\' );\n\t\tvar display_columns = ALayoutCache.getDefaultColumn( \'global_user\' ); //Get Default columns base on different layout name\n\t\tdisplay_columns = Global.convertColumnsTojGridFormat( display_columns, \'global_user\' ); //Convert to jQgrid format\n\t\tthis.addEditFieldToColumn( $.i18n._( \'User\' ), form_item_input, tab_employee_column1 );\n\t\tform_item_input.setColumns( display_columns );\n\t\tform_item_input.setUnselectedGridData( this.user_id_array );\n\t\tform_item_input.setGridColumnsWidths();\n\t\tform_item_input.setHeight( 150 );\n\n\t\t//Company\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUser,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: \'global_user\',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: \'user_id2\'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( \'User ( Big Multi-select)\' ), form_item_input, tab_employee_column1 );\n\t\tform_item_input.setEnabled( false );\n\n\t\t//Company\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APICompany,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: \'global_company\',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: \'company_id\'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( \'Company\' ), form_item_input, tab_employee_column1 );\n\t\tform_item_input.setEnabled( false );\n\n\t\t//Legal Entity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APILegalEntity,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: \'global_legal_entity\',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: \'legal_entity_id\'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( \'Legal Entity\' ), form_item_input, tab_employee_column1 );\n\n\t\t//Group\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\ttree_mode: true,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: \'global_tree_column\',\n\t\t\tset_empty: true,\n\t\t\tfield: \'group_id\'\n\t\t} );\n\t\tform_item_input.setSourceData( $this.user_group_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( \'Group\' ), form_item_input, tab_employee_column1 );\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\ttree_mode: true,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: \'global_tree_column\',\n\t\t\tset_empty: true,\n\t\t\tfield: \'group_id2\'\n\t\t} );\n\t\tform_item_input.setSourceData( $this.user_group_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( \'Group (Multi)\' ), form_item_input, tab_employee_column1 );\n\n\t\t//Status\n\n\t\tform_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_employee_column1 );\n\n\t\tTTPromise.resolve( \'Awesomeboxtest\', \'init\' );\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\n\t\tvar $this = this;\n\t\tthis.search_fields = [\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( \'Company\' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: \'company_id\',\n\t\t\t\tlayout_name: \'global_company\',\n\t\t\t\tapi_class: TTAPI.APICompany,\n\t\t\t\tmultiple: false,\n\t\t\t\tcustom_first_label: Global.default_item,\n\t\t\t\tbasic_search: PermissionManager.checkTopLevelPermission( \'Companies\' ) ? true : false,\n\t\t\t\tadv_search: PermissionManager.checkTopLevelPermission( \'Companies\' ) ? true : false,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( \'Legal Entity\' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: \'legal_entity_id\',\n\t\t\t\tlayout_name: \'global_legal_entity\',\n\t\t\t\tapi_class: TTAPI.APILegalEntity,\n\t\t\t\tmultiple: true,\n\t\t\t\tcustom_first_label: Global.any_item,\n\t\t\t\tbasic_search: PermissionManager.checkTopLevelPermission( \'LegalEntity\' ) ? true : false,\n\t\t\t\tadv_search: PermissionManager.checkTopLevelPermission( \'LegalEntity\' ) ? true : false,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( \'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\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( \'Gender\' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: \'sex_id\',\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\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( \'Group\' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tmultiple: true,\n\t\t\t\tfield: \'group_id\',\n\t\t\t\tlayout_name: \'global_tree_column\',\n\t\t\t\ttree_mode: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: [\'default\'],\n\t\t\tinclude: [\n\t\t\t\t\'view\',\n\t\t\t\t\'edit\',\n\t\t\t\t\'cancel\'\n\t\t\t]\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tinitOptions( callBack ) {\n\n\t\tvar options = [\n\t\t\t{ option_name: \'status\' },\n\t\t\t{ option_name: \'company_id\' }\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\t}\n\n\tinitDropDownOptions( options, callBack ) {\n\t\tvar $this = this;\n\t\tvar len = options.length + 2;\n\t\tvar complete_count = 0;\n\t\tvar option_result = [];\n\n\t\tvar res = \'[{"id":"00000000-0000-0000-0000-000000000000","name":"Root","level":0,"children":[{"id":"11e85213-a778-6410-bee1-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Corporate","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a779-fa20-835f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Executives","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true},{"id":"11e85213-a77a-39c0-9bc2-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Human Resources","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"},{"id":"11e85213-a77a-7810-a67f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Hourly (Non-Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a77a-bb40-b83e-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a77a-7810-a67f-123456abcdef","name":"Salary (Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a77a-7810-a67f-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"}],"expanded":true,"loaded":true},{"id":"11e85213-a778-6410-bee1-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Corporate","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a779-fa20-835f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Executives","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true},{"id":"11e85213-a77a-39c0-9bc2-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Human Resources","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"},{"id":"11e85213-a779-fa20-835f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Executives","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true},{"id":"11e85213-a77a-39c0-9bc2-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Human Resources","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true},{"id":"11e85213-a77a-7810-a67f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Hourly (Non-Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a77a-bb40-b83e-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a77a-7810-a67f-123456abcdef","name":"Salary (Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a77a-7810-a67f-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"},{"id":"11e85213-a77a-bb40-b83e-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a77a-7810-a67f-123456abcdef","name":"Salary (Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a77a-7810-a67f-123456abcdef","isLeaf":true}]\';\n\t\tres = JSON.parse( res );\n\t\tif ( !$this.edit_only_mode ) {\n\t\t\tif ( !$this.sub_view_mode && $this.basic_search_field_ui_dic[\'group_id\'] ) {\n\t\t\t\t$this.basic_search_field_ui_dic[\'group_id\'].setSourceData( res );\n\t\t\t\t$this.adv_search_field_ui_dic[\'group_id\'].setSourceData( res );\n\t\t\t}\n\n\t\t}\n\n\t\t$this.user_group_array = res;\n\n\t\tcomplete_count = complete_count + 1;\n\n\t\tif ( complete_count === len ) {\n\n\t\t\tcallBack( option_result );\n\t\t}\n\n\t\tfor ( var i = 0; i < len - 2; i++ ) {\n\t\t\tvar option_info = options[i];\n\t\t\tthis.initDropDownOption( option_info.option_name, option_info.field_name, option_info.api, onGetOptionResult );\n\n\t\t}\n\n\t\tfunction onGetOptionResult( result ) {\n\n\t\t\toption_result.push( result );\n\n\t\t\tcomplete_count = complete_count + 1;\n\n\t\t\tif ( complete_count === len ) {\n\n\t\t\t\tcallBack( option_result );\n\t\t\t}\n\t\t}\n\t}\n\n\t//override that forces same data to grid at all times.\n\tsearch() {\n\t\tvar result_data = JSON.parse( \'[{"id":"11e85213-a799-d200-b041-123456abcdef","status":"Active","employee_number":100,"first_name":"Mr.","last_name":"FAKE","full_name":"Administrator, Mr.","home_phone":"471-438-3900","is_owner":true,"is_child":false},\' +\n\t\t\t\'{"id":"11e85213-ad34-e0e0-8541-123456abcdef","status":"Active","employee_number":13,"first_name":"Tristen","last_name":"Braun","full_name":"FAKE Braun, Tristen","home_phone":"527-500-4852","is_owner":false,"is_child":true},\' +\n\t\t\t\'{"id":"11e85213-af64-d0e0-9b00-123456abcdef","status":"Active","employee_number":20,"first_name":"Jane","last_name":"Doe","full_name":"FAKE Doe, Jane","home_phone":"477-443-9650","is_owner":false,"is_child":true},\' +\n\t\t\t\'{"id":"11e85213-ac44-1830-9908-123456abcdef","status":"Active","employee_number":10,"first_name":"John","last_name":"Doe","full_name":"FAKE Doe, John","home_phone":"464-547-9452","is_owner":false,"is_child":true}]\' );\n\t\tthis.user_id_array = result_data;\n\t\tresult_data = this.processResultData( result_data );\n\t\tthis.grid.setData( result_data );\n\t\tthis.grid.setGridColumnsWidth();\n\t\tthis.current_edit_record = result_data[0];\n\t\tthis.setCurrentEditViewState( \'edit\' );\n\n\t\tTTPromise.add( \'Awesomeboxtest\', \'init\' );\n\t\tvar $this = this;\n\t\tTTPromise.wait( \'Awesomeboxtest\', \'init\', function() {\n\t\t\t$this.initEditView();\n\t\t} );\n\n\t\tthis.initEditViewUI( this.viewId, this.edit_view_tpl );\n\t}\n\n\tsetEditViewDataDone() {\n\t\tvar $this = this;\n\t\tsetTimeout( function() {\n\t\t\tTAlertManager.showConfirmAlert( $.i18n._( \'Run tests?\' ), null, function( result ) {\n\t\t\t\tif ( result == true ) {\n\t\t\t\t\t$this.runTests();\n\t\t\t\t}\n\t\t\t} );\n\t\t\t$this.setTabOVisibility( true );\n\t\t\t$( \'.edit-view-tab-bar\' ).css( \'opacity\', 1 );\n\t\t}, 2500 );\n\t}\n\n\t/**\n\t * in the testing code are a lot of null null waits to ensure that all awesomeboxes are ready for next step in test\n\t */\n\trunTests() {\n\t\tif ( $( \'#qunit_script\' ).length == 0 ) {\n\t\t\t$( \'<script id=\\\'qunit_script\\\' src=\\\'framework/qunit/qunit.js\\\'><\/script>\' ).appendTo( \'head\' );\n\t\t\t$( \'<link rel=\\\'stylesheet\\\' type=\\\'text/css\\\' href=\\\'framework/qunit/qunit.css\\\'>\' ).appendTo( \'head\' );\n\t\t}\n\t\t;\n\n\t\tQUnit.config.autostart = false;\n\t\t$( \'#qunit_container\' ).css( \'width\', \'100%\' );\n\t\t$( \'#qunit_container\' ).css( \'height\', \'auto\' );\n\t\t$( \'#qunit_container\' ).css( \'overflow-y\', \'scroll\' );\n\t\t$( \'#qunit_container\' ).css( \'top\', \'0px\' );\n\t\t$( \'#qunit_container\' ).css( \'left\', \'0px\' );\n\t\t$( \'#qunit_container\' ).css( \'z-index\', \'100\' );\n\t\t$( \'#qunit_container\' ).css( \'background\', \'#fff\' );\n\t\t$( \'#qunit_container\' ).show();\n\n\t\t$( \'#tt_debug_console\' ).remove();\n\t\tif ( !window.qunit_initiated ) {\n\t\t\twindow.qunit_initiated = true;\n\t\t\t//QUnit.start(); //This causes a JavaScript exception, but does not seem to be required. Test ran without it.\n\t\t}\n\n\t\t// QUnit.module(\'QUnit Sanity\');\n\t\t// QUnit.test("QUnit test", function (assert) {\n\t\t// \tassert.ok(1 == "1", "QUnit is loaded and sane!");\n\t\t// });\n\n\t\t//select an item by clicking a td in the last row\n\t\tvar $this = this;\n\t\tQUnit.module( \'AwesomeBox\' );\n\t\tQUnit.test( \'Awesomebox tests\', function( assert ) {\n\t\t\tvar done_awesomebox_tests = assert.async();\n\n\t\t\tDebug.Text( \'A: Test Splayed Awesomebox\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t$this.checkOpenAwesomeBox( $this.edit_view_ui_dic[\'user_id\'], assert, function() {\n\t\t\t\tDebug.Text( \'B: Test MultiSelect AwesomeBox\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t$this.checkMultiSelectAwesomeBox( assert, function() {\n\t\t\t\t\tDebug.Text( \'C: Test regular AwesomeBox\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t\t$this.checkAwesomeBox( assert, function() {\n\t\t\t\t\t\tDebug.Text( \'D: Test tree_mode AwesomeBox\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t\t\t$this.checkTreeBox( assert, function() {\n\t\t\t\t\t\t\tDebug.Text( \'E: Test tree_mode MultiSelect AwesomeBox\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t\t\t\t$this.checkMultiTreeAwesomeBox( assert, function() {\n\t\t\t\t\t\t\t\tDebug.Text( \'F: Test searching in AwesomeBox\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t\t\t\t\t$this.checkClearSearch( $this.edit_view_ui_dic[\'user_id2\'], assert, function() {\n\t\t\t\t\t\t\t\t\tDebug.Text( \'G: Wonky move all scenario\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t\t\t\t\t\t$this.checkMoveAllScenario( $this.edit_view_ui_dic[\'user_id2\'], assert, function() {\n\t\t\t\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\t\t\t\tDebug.Text( \'Z: Testing Complete\', \'AwesomeboxTestViewController.js\', \'AwesomeboxTestViewController\', \'runTests\', 11 );\n\t\t\t\t\t\t\t\t\t\t\tdone_awesomebox_tests();\n\t\t\t\t\t\t\t\t\t\t}, 1000 );\n\n\t\t\t\t\t\t\t\t\t} );\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\t\t\t} );\n\n\t\t} );\n\t}\n\n\tcheckMultiTreeAwesomeBox( assert, callback ) {\n\t\tvar awesomebox = this.edit_view_ui_dic[\'group_id2\'];\n\t\tawesomebox.trigger( \'click\' );\n\t\tvar visible_awesomebox = $( \'#group_id2a_dropdown_div\' );\n\t\tvar $this = this;\n\t\tTTPromise.wait( \'AComboBox\', \'init\', function() {\n\t\t\tvisible_awesomebox.find( \'.unselect-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\tvisible_awesomebox.find( \'.a-grid-right-arrow\' ).trigger( \'click\' );\n\t\t\tvisible_awesomebox.find( \'#select_grid_close_btn\' ).trigger( \'click\' );\n\t\t\tvar val = awesomebox.getValue();\n\n\t\t\tassert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), \'Multi tree - selection valid\' );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tawesomebox.trigger( \'click\' );\n\t\t\t\tsetTimeout( function() {\n\n\t\t\t\t\tvar visible_awesomebox = $( \'#group_id2a_dropdown_div\' );\n\t\t\t\t\tvisible_awesomebox.find( \'.select-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\t\t\tvisible_awesomebox.find( \'.a-grid-left-arrow\' ).trigger( \'click\' );\n\t\t\t\t\tvisible_awesomebox.find( \'#select_grid_close_btn\' ).trigger( \'click\' );\n\t\t\t\t\tvar val = awesomebox.getValue();\n\n\t\t\t\t\tassert.ok( ( val == TTUUID.zero_id ), \'Multi tree - unselection valid\' );\n\n\t\t\t\t\tawesomebox.trigger( \'click\' );\n\t\t\t\t\t//this check fails when it should not as the border makes it look fine\n\t\t\t\t\t//$this.checkGridWidths( visible_awesomebox, assert );\n\t\t\t\t\tvisible_awesomebox.find( \'#select_grid_close_btn\' ).trigger( \'click\' );\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}, 1000 );\n\t\t\t}, 1000 );\n\n\t\t} );\n\t}\n\n\tcheckTreeBox( assert, callback ) {\n\t\tvar awesomebox = this.edit_view_ui_dic[\'group_id\'];\n\t\tvar val = awesomebox.getValue();\n\t\tassert.ok( ( val == TTUUID.zero_id ), \'tree - unselection valid\' );\n\t\tvar $this = this;\n\t\tsetTimeout( function() {\n\t\t\tawesomebox.trigger( \'click\' );\n\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t$this.checkGridWidths( $( \'#group_ida_dropdown_div\' ), assert );\n\t\t\t\t$( \'#group_ida_dropdown_div .unselect-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tvar val = awesomebox.getValue();\n\t\t\t\t\tawesomebox.setValue( null );\n\n\t\t\t\t\tassert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), \'tree - selection valid\' );\n\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}, 1000 );\n\n\t\t\t} );\n\t\t}, 1000 );\n\t}\n\n\tcheckAwesomeBox( assert, callback ) {\n\t\tvar awesomebox = this.edit_view_ui_dic[\'legal_entity_id\'];\n\t\tvar val = awesomebox.getValue();\n\n\t\tassert.ok( ( val == TTUUID.zero_id ), \'regular - unselection valid\' );\n\n\t\tvar $this = this;\n\t\tsetTimeout( function() {\n\t\t\tawesomebox.trigger( \'click\' );\n\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t$this.checkGridWidths( $( \'#legal_entity_idADropDown\' ), assert );\n\t\t\t\t$( \'#legal_entity_idADropDown .unselect-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tval = awesomebox.getValue();\n\t\t\t\t\tawesomebox.setValue( null );\n\t\t\t\t\tassert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), \'regular - selection valid\' );\n\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}, 1000 );\n\n\t\t\t} );\n\t\t}, 1000 );\n\t}\n\n\tcheckMultiSelectAwesomeBox( assert, callback ) {\n\t\tvar awesomebox = this.edit_view_ui_dic[\'company_id\'];\n\t\tawesomebox.trigger( \'click\' );\n\t\tvar visible_awesomebox = $( \'#company_ida_dropdown_div\' );\n\t\tvar $this = this;\n\t\tTTPromise.wait( \'AComboBox\', \'init\', function() {\n\t\t\tvisible_awesomebox.find( \'.unselect-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\tvisible_awesomebox.find( \'.a-grid-right-arrow\' ).trigger( \'click\' );\n\t\t\tvisible_awesomebox.find( \'#select_grid_close_btn\' ).trigger( \'click\' );\n\t\t\tvar val = awesomebox.getValue();\n\n\t\t\tassert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), \'multiselect - selection valid\' );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tawesomebox.trigger( \'click\' );\n\t\t\t\tTTPromise.wait( \'AComboBox\', \'init\', function() {\n\n\t\t\t\t\tvar visible_awesomebox = $( \'#company_ida_dropdown_div\' );\n\t\t\t\t\tvisible_awesomebox.find( \'.select-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\t\t\tvisible_awesomebox.find( \'.a-grid-left-arrow\' ).trigger( \'click\' );\n\t\t\t\t\t$this.checkGridWidths( visible_awesomebox, assert );\n\t\t\t\t\tvisible_awesomebox.find( \'#select_grid_close_btn\' ).trigger( \'click\' );\n\t\t\t\t\tval = awesomebox.getValue();\n\t\t\t\t\tawesomebox.trigger( \'click\' );\n\n\t\t\t\t\tassert.ok( ( val == TTUUID.zero_id ), \'multiselect - unselection valid\' );\n\n\t\t\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t}, 2000 );\n\n\t\t} );\n\t}\n\n\tcheckOpenAwesomeBox( box, assert, callback ) {\n\t\tvar selected_id = box.find( \'.unselect-grid-div tbody tr:last\' ).attr( \'id\' );\n\t\tbox.find( \'.unselect-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\tbox.find( \'.a-grid-right-arrow\' ).trigger( \'click\' );\n\t\tvar val = box.getValue();\n\n\t\tassert.ok( ( TTUUID.isUUID( val[0].id ) && val[0].id == selected_id ), \'splayed - selection valid\' );\n\n\t\tvar $this = this;\n\t\tTTPromise.wait( \'AComboBox\', \'init\', function() {\n\t\t\tbox.find( \'.select-grid-div tbody tr:last td:last\' ).trigger( \'click\' );\n\t\t\tbox.find( \'.a-grid-left-arrow\' ).trigger( \'click\' );\n\n\t\t\tassert.ok( ( val.length === 0 ), \'splayed - unselection valid\' );\n\n\t\t\t$this.checkGridWidths( box, assert );\n\n\t\t\tif ( callback ) {\n\t\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t\tcallback();\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\tcheckGridWidths( box, assert ) {\n\n\t\tvar unselect_grid_container_width = box.find( \'.unselect-grid-border-div\' ).width();\n\t\tvar unselect_grid_width = box.find( \'.ui-jqgrid\' ).width();\n\t\tvar unselect_grid_diff = unselect_grid_container_width - unselect_grid_width;\n\n\t\tassert.ok( ( unselect_grid_diff <= 2 ), \'unselect grid width diff <= 2: \' + unselect_grid_diff );\n\n\t\tif ( box.find( \'.select-grid-border-div\' ).is( \':visible\' ) > 0 ) {\n\t\t\tvar select_grid_container_width = box.find( \'.select-grid-border-div\' ).width();\n\t\t\tvar select_grid_width = box.find( \'.ui-jqgrid\' ).width();\n\t\t\tvar select_grid_diff = Math.abs( select_grid_container_width - select_grid_width );\n\n\t\t\tassert.ok( ( select_grid_diff <= 2 ), \'select grid width diff <= 2: \' + select_grid_diff );\n\t\t}\n\t}\n\n\tcheckClearSearch( box, assert, callback ) {\n\t\t// open\n\t\tvar $this = this;\n\t\tbox.trigger( \'click\' );\n\t\tTTPromise.wait( null, null, function() {\n\t\t\tvar dropdown = $( \'#user_id2ADropDown\' );\n\t\t\tvar checkboxes = dropdown.find( \'.unselect-grid-div .ui-jqgrid input[type="checkbox"]\' );\n\n\t\t\tvar expected_ids = [];\n\t\t\t// select a couple records\n\t\t\t$( checkboxes[1] ).trigger( \'click\' );\n\t\t\t$( checkboxes[3] ).trigger( \'click\' );\n\t\t\t$( checkboxes[6] ).trigger( \'click\' );\n\t\t\t$( checkboxes[7] ).trigger( \'click\' );\n\n\t\t\t//note selected ids\n\t\t\texpected_ids.push( getRowId( $( checkboxes[1] ) ) );\n\t\t\texpected_ids.push( getRowId( $( checkboxes[3] ) ) );\n\t\t\texpected_ids.push( getRowId( $( checkboxes[6] ) ) );\n\t\t\texpected_ids.push( getRowId( $( checkboxes[7] ) ) );\n\n\t\t\t// click move button\n\t\t\tdropdown.find( \'.a-grid-right-arrow\' ).trigger( \'click\' );\n\n\t\t\t// check that visible values contain expected ids\n\t\t\tassert.ok( expectedInGrid( \'select_grid\', dropdown, expected_ids ), \'all expected records are in selected grid\' );\n\n\t\t\t// search to filter\n\t\t\tvar select_grid_text_inputs = dropdown.find( \'.select-grid-div input[type="text"].search-input\' );\n\n\t\t\t// set up grid search prerequisites\n\t\t\t$( select_grid_text_inputs[0] ).trigger( \'focus\' );\n\t\t\t$( select_grid_text_inputs[0] ).val( \'mr\' );\n\t\t\tLocalCacheData.openAwesomeBox.focus_in_select_grid = true;\n\t\t\tvar e = $.Event( "keydown", { keyCode: 77, which: 77 } );\n\t\t\tLocalCacheData.openAwesomeBox.selectNextItem( e );\n\t\t\tvar e = $.Event( "keydown", { keyCode: 82, which: 82 } );\n\t\t\tLocalCacheData.openAwesomeBox.selectNextItem( e );\n\t\t\t// trigger search\n\t\t\t$( select_grid_text_inputs[0] ).trigger( \'searchEnter\', [\'mr\', \'first_name\'] );\n\n\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t// check that VISIBLE values contain expected ids\n\t\t\t\tassert.ok( ( dropdown.find( \'.select-grid tr\' ).length == 2 ), \'only .sizetr and mr admin shows after filter (only works with demo data)\' );\n\n\t\t\t\t// move first record back ( note id )\n\t\t\t\tvar first_row = $( dropdown.find( \'.select-grid tr\' )[dropdown.find( \'.select-grid tr\' ).length - 1] );\n\t\t\t\tfirst_row.find( \'input[type="checkbox"]\' ).click();\n\t\t\t\tvar ondblClickRowHandler = dropdown.find( \'.select-grid\' ).jqGrid( \'getGridParam\', \'ondblClickRow\' );\n\t\t\t\tondblClickRowHandler.call( dropdown.find( \'.select-grid\' )[0], first_row.prop( \'id\' ) );\n\n\t\t\t\t// check that selected values contain expected ids\n\t\t\t\tassert.ok( $( dropdown.find( \'.select-grid tr\' ).length == 1 ), \'removed record is in not in selectgrid\' ); //1 because of sizetr\n\t\t\t\tassert.ok( expectedInGrid( \'unselect_grid\', dropdown, [getRowId( first_row )] ), \'removed record is in unselectgrid\' );\n\n\t\t\t\t// clear search\n\t\t\t\tdropdown.find( \'.select-grid-search-div .close-btn\' ).trigger( \'click\' );\n\n\t\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t\texpected_ids.splice( 0, 1 ); // remove moved record from expected_ids\n\n\t\t\t\t\t// check that selected values contain expected ids\n\t\t\t\t\tassert.ok( ( expected_ids.length == 3 ), \'correct number of expected records\' );\n\t\t\t\t\tassert.ok( ( dropdown.find( \'.select-grid tr\' ).length == 4 ), \'correct number of selected rows\' );\n\t\t\t\t\tassert.ok( expectedInGrid( \'select_grid\', dropdown, expected_ids ), \'all expected records are in selected grid\' );\n\n\t\t\t\t\tdropdown.find( \'#select_grid_close_btn\' ).click();\n\t\t\t\t\tbox.setValue( [] );\n\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t} );\n\t\t} );\n\n\t\t//strip out jqgrid stuff and get row id\n\t\tfunction getRowId( row ) {\n\t\t\tif ( !row || !row.prop ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( row.prop( \'id\' ).indexOf( \'_\' ) == -1 ) {\n\t\t\t\treturn row.prop( \'id\' );\n\t\t\t}\n\n\t\t\tvar id_array = $( row ).prop( \'id\' ).split( \'_\' );\n\t\t\treturn id_array[id_array.length - 1];\n\t\t}\n\n\t\tfunction expectedInGrid( target_grid_name, dropdown, expected_ids ) {\n\t\t\tvar selected_rows = null;\n\t\t\tif ( target_grid_name == \'select_grid\' ) {\n\t\t\t\tselected_rows = dropdown.find( \'.select-grid tr\' );\n\t\t\t} else {\n\t\t\t\tselected_rows = dropdown.find( \'.unselect-grid tr\' );\n\t\t\t}\n\t\t\tvar all_found = true;\n\n\t\t\tfor ( var n = 0; n < expected_ids.length; n++ ) {\n\t\t\t\tvar is_found = false;\n\t\t\t\tfor ( var i = 0; i < selected_rows.length; i++ ) {\n\t\t\t\t\tif ( expected_ids[n] == getRowId( $( selected_rows[i] ) ) ) {\n\t\t\t\t\t\tis_found = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( !is_found ) {\n\t\t\t\t\tall_found = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn all_found;\n\t\t}\n\t}\n\n\tcheckMoveAllScenario( box, assert, callback ) {\n\t\t// open\n\t\tvar $this = this;\n\t\tbox.trigger( \'click\' );\n\t\tTTPromise.wait( \'AComboBox\', \'init\', function() {\n\t\t\tvar dropdown = $( \'#user_id2ADropDown\' );\n\t\t\tif ( dropdown.length == 0 ) {\n\t\t\t\t//wait until combobox is visible ( sometimes takes longer than promise )\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$this.checkMoveAllScenario( box, assert, callback );\n\t\t\t\t}, 1000 );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar checkboxes = dropdown.find( \'.unselect-grid-div .ui-jqgrid input[type="checkbox"]\' );\n\n\t\t\tvar expected_ids = [];\n\t\t\t// select a couple records\n\t\t\t$( checkboxes[1] ).trigger( \'click\' );\n\t\t\t$( checkboxes[3] ).trigger( \'click\' );\n\t\t\t$( checkboxes[6] ).trigger( \'click\' );\n\t\t\t$( checkboxes[7] ).trigger( \'click\' );\n\n\t\t\t//note selected ids\n\t\t\texpected_ids.push( getRowId( $( checkboxes[1] ) ) );\n\t\t\texpected_ids.push( getRowId( $( checkboxes[3] ) ) );\n\t\t\texpected_ids.push( getRowId( $( checkboxes[6] ) ) );\n\t\t\texpected_ids.push( getRowId( $( checkboxes[7] ) ) );\n\n\t\t\t// click move button\n\t\t\tdropdown.find( \'.a-grid-right-arrow\' ).trigger( \'click\' );\n\n\t\t\t// check that visible values contain expected ids\n\t\t\tassert.ok( expectedInGrid( \'select_grid\', dropdown, expected_ids ), \'all expected records are in selected grid\' );\n\n\t\t\t//click "move all" button to remove all selected records\n\t\t\tdropdown.find( \'.select-grid-title-bar #clear_btn\' ).trigger( \'click\' );\n\n\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\texpected_ids = [];\n\n\t\t\t\t// check that selected values contain expected ids\n\t\t\t\tassert.ok( ( expected_ids.length == 0 ), \'correct number of expected records\' );\n\t\t\t\tassert.ok( ( dropdown.find( \'.select-grid tr\' ).length == 1 ), \'correct number of selected rows ( zero )\' ); // the 1 is sizetr\n\t\t\t\tassert.ok( expectedInGrid( \'select_grid\', dropdown, expected_ids ), \'zero records are in selected grid\' );\n\n\t\t\t\tdropdown.find( \'#select_grid_close_btn\' ).click();\n\t\t\t\tbox.setValue( [] );\n\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\n\t\t\t} );\n\t\t} );\n\n\t\tfunction getRowId( row ) {\n\t\t\tif ( !row || !row.prop ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( row.prop( \'id\' ).indexOf( \'_\' ) == -1 ) {\n\t\t\t\treturn row.prop( \'id\' );\n\t\t\t}\n\n\t\t\tvar id_array = $( row ).prop( \'id\' ).split( \'_\' );\n\t\t\treturn id_array[id_array.length - 1];\n\t\t}\n\n\t\tfunction expectedInGrid( target_grid_name, dropdown, expected_ids ) {\n\t\t\tvar selected_rows = null;\n\t\t\tif ( target_grid_name == \'select_grid\' ) {\n\t\t\t\tselected_rows = dropdown.find( \'.select-grid tr\' );\n\t\t\t} else {\n\t\t\t\tselected_rows = dropdown.find( \'.unselect-grid tr\' );\n\t\t\t}\n\t\t\tvar all_found = true;\n\n\t\t\tfor ( var n = 0; n < expected_ids.length; n++ ) {\n\t\t\t\tvar is_found = false;\n\t\t\t\tfor ( var i = 0; i < selected_rows.length; i++ ) {\n\t\t\t\t\tif ( expected_ids[n] == getRowId( $( selected_rows[i] ) ) ) {\n\t\t\t\t\t\tis_found = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( !is_found ) {\n\t\t\t\t\tall_found = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn all_found;\n\t\t}\n\t}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ2pDLGdDQUFnQyxDQUFDO0FBQ2pDLGdDQUFnQyxDQUFDOztBQUVqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpSEFBaUg7QUFDakg7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixDQUFDO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQSxxQkFBcUIsMEJBQTBCO0FBQy9DLHVDQUF1QyxDQUFDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L3ZpZXdzL2RldmVsb3Blcl90b29scy9Bd2Vzb21lYm94VGVzdFZpZXdDb250cm9sbGVyLmpzP2Q1YjYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEF3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlVmlld0NvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3Rvciggb3B0aW9ucyA9IHt9ICkge1xuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGVsOiAnI2F3ZXNvbWVib3hfdGVzdF92aWV3X2NvbnRhaW5lcicsXG5cblx0XHRcdC8vIF9yZXF1aXJlZF9maWxlczogWydUSW1hZ2UnLCAnVEltYWdlQWR2QnJvd3NlciddLFxuXG5cdFx0XHR1c2VyX2FwaTogbnVsbCxcblx0XHRcdHVzZXJfZ3JvdXBfYXBpOiBudWxsLFxuXHRcdFx0Y29tcGFueV9hcGk6IG51bGwsXG5cdFx0XHR1c2VyX2lkX2FycmF5OiBudWxsXG5cdFx0fSApO1xuXG5cdFx0c3VwZXIoIG9wdGlvbnMgKTtcblx0fVxuXG5cdGluaXQoIG9wdGlvbnMgKSB7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdHBsID0gJ0F3ZXNvbWVib3hUZXN0RWRpdFZpZXcuaHRtbCc7XG5cdFx0dGhpcy5wZXJtaXNzaW9uX2lkID0gJ3VzZXInO1xuXHRcdHRoaXMudmlld0lkID0gJ0F3ZXNvbWVib3hUZXN0Jztcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ0F3ZXNvbWVib3hUZXN0Vmlldyc7XG5cdFx0dGhpcy50YWJsZV9uYW1lX2tleSA9ICdhd2Vzb21lYm94X3Rlc3QnO1xuXHRcdHRoaXMuY29udGV4dF9tZW51X25hbWUgPSAkLmkxOG4uXyggJ0F3ZXNvbWVCb3ggVGVzdCcgKTtcblx0XHR0aGlzLm5hdmlnYXRpb25fbGFiZWwgPSAkLmkxOG4uXyggJ0F3ZXNvbUJveCBUZXN0JyApO1xuXHRcdHRoaXMuYXBpID0gVFRBUEkuQVBJVXNlcjtcblx0XHR0aGlzLnNlbGVjdF9jb21wYW55X2lkID0gTG9jYWxDYWNoZURhdGEuZ2V0Q3VycmVudENvbXBhbnkoKS5pZDtcblx0XHR0aGlzLnVzZXJfZ3JvdXBfYXBpID0gVFRBUEkuQVBJVXNlckdyb3VwO1xuXHRcdHRoaXMuY29tcGFueV9hcGkgPSBUVEFQSS5BUElDb21wYW55O1xuXHRcdHRoaXMudXNlcl9pZF9hcnJheSA9IFtdO1xuXG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH1cblxuXHRzZXRDdXJyZW50RWRpdFJlY29yZERhdGEoKSB7XG5cdFx0dGhpcy5jb2xsZWN0VUlEYXRhVG9DdXJyZW50RWRpdFJlY29yZCgpO1xuXHRcdHRoaXMuc2V0RWRpdFZpZXdEYXRhRG9uZSgpO1xuXHR9XG5cblx0Y2xlYXJFZGl0Vmlld0RhdGEoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YnVpbGRFZGl0Vmlld1VJKCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHRpZiggQ29udGV4dE1lbnVNYW5hZ2VyLmdldE1lbnUoIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0RGVidWcuV2FybiggJ0NvbnRleHQgTWVudSAoJysgdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkICsnKSBhbHJlYWR5IGV4aXN0cyBmb3I6ICcrIHRoaXMudmlld0lkLCAnQXdlc29tZUJveFRlc3RWaWV3LmpzJywgJ0F3ZXNvbWVCb3hUZXN0VmlldycsICdidWlsZEVkaXRWaWV3VUknLCAxMCApO1xuXHRcdH1cblxuXHRcdHZhciB0YWJfbW9kZWwgPSB7XG5cdFx0XHQndGFiX2VtcGxveWVlJzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ0FXRVNPTUVCT1ggVEVTVElORyBWSUVXJyApIH0sXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdC8vVGFiIDAgc3RhcnRcblxuXHRcdHZhciB0YWJfZW1wbG95ZWUgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfZW1wbG95ZWUnICk7XG5cblx0XHR2YXIgdGFiX2VtcGxveWVlX2NvbHVtbjEgPSB0YWJfZW1wbG95ZWUuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdID0gW107XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXS5wdXNoKCB0YWJfZW1wbG95ZWVfY29sdW1uMSApO1xuXG4vL1x0XHRVc2VyXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9EUk9QRE9XTiApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BRHJvcERvd24oIHtcblx0XHRcdC8vYXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0ZmllbGQ6ICd1c2VyX2lkJyxcblx0XHRcdGRpc3BsYXlfc2hvd19hbGw6IGZhbHNlLFxuXHRcdFx0aWQ6ICd1c2VyX2lkX2Ryb3Bkb3duJyxcblx0XHRcdGtleTogJ2lkJyxcblx0XHRcdGFsbG93X2RyYWdfdG9fb3JkZXI6IGZhbHNlLFxuXHRcdFx0ZGlzcGxheV9jbG9zZV9idG46IGZhbHNlLFxuXHRcdFx0YXV0b19zb3J0OiB0cnVlLFxuXHRcdFx0ZGlzcGxheV9jb2x1bW5fc2V0dGluZ3M6IGZhbHNlLFxuXHRcdFx0ZGVmYXVsdF9oZWlnaHQ6IDEwMFxuXHRcdH0gKTtcblxuXHRcdC8vIGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy51c2VyX2lkX2FycmF5ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LmFkZENsYXNzKCAnc3BsYXllZC1hZHJvcGRvd24nICk7XG5cdFx0dmFyIGRpc3BsYXlfY29sdW1ucyA9IEFMYXlvdXRDYWNoZS5nZXREZWZhdWx0Q29sdW1uKCAnZ2xvYmFsX3VzZXInICk7IC8vR2V0IERlZmF1bHQgY29sdW1ucyBiYXNlIG9uIGRpZmZlcmVudCBsYXlvdXQgbmFtZVxuXHRcdGRpc3BsYXlfY29sdW1ucyA9IEdsb2JhbC5jb252ZXJ0Q29sdW1uc1RvakdyaWRGb3JtYXQoIGRpc3BsYXlfY29sdW1ucywgJ2dsb2JhbF91c2VyJyApOyAvL0NvbnZlcnQgdG8galFncmlkIGZvcm1hdFxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnVXNlcicgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfZW1wbG95ZWVfY29sdW1uMSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRDb2x1bW5zKCBkaXNwbGF5X2NvbHVtbnMgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0VW5zZWxlY3RlZEdyaWREYXRhKCB0aGlzLnVzZXJfaWRfYXJyYXkgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0R3JpZENvbHVtbnNXaWR0aHMoKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0SGVpZ2h0KCAxNTAgKTtcblxuXHRcdC8vQ29tcGFueVxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiB0cnVlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ3VzZXJfaWQyJ1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1VzZXIgKCBCaWcgTXVsdGktc2VsZWN0KScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfZW1wbG95ZWVfY29sdW1uMSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRFbmFibGVkKCBmYWxzZSApO1xuXG5cdFx0Ly9Db21wYW55XG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUNvbXBhbnksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9jb21wYW55Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnY29tcGFueV9pZCdcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDb21wYW55JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9lbXBsb3llZV9jb2x1bW4xICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldEVuYWJsZWQoIGZhbHNlICk7XG5cblx0XHQvL0xlZ2FsIEVudGl0eVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUxlZ2FsRW50aXR5LFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2xlZ2FsX2VudGl0eScsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ2xlZ2FsX2VudGl0eV9pZCdcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdMZWdhbCBFbnRpdHknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2VtcGxveWVlX2NvbHVtbjEgKTtcblxuXHRcdC8vR3JvdXBcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdHJlZV9jb2x1bW4nLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdncm91cF9pZCdcblx0XHR9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnVzZXJfZ3JvdXBfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0dyb3VwJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9lbXBsb3llZV9jb2x1bW4xICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF90cmVlX2NvbHVtbicsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ2dyb3VwX2lkMidcblx0XHR9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnVzZXJfZ3JvdXBfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0dyb3VwIChNdWx0aSknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2VtcGxveWVlX2NvbHVtbjEgKTtcblxuXHRcdC8vU3RhdHVzXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdzdGF0dXNfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuc3RhdHVzX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdTdGF0dXMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2VtcGxveWVlX2NvbHVtbjEgKTtcblxuXHRcdFRUUHJvbWlzZS5yZXNvbHZlKCAnQXdlc29tZWJveHRlc3QnLCAnaW5pdCcgKTtcblx0fVxuXG5cdGJ1aWxkU2VhcmNoRmllbGRzKCkge1xuXG5cdFx0c3VwZXIuYnVpbGRTZWFyY2hGaWVsZHMoKTtcblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dGhpcy5zZWFyY2hfZmllbGRzID0gW1xuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NvbXBhbnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdjb21wYW55X2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfY29tcGFueScsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJQ29tcGFueSxcblx0XHRcdFx0bXVsdGlwbGU6IGZhbHNlLFxuXHRcdFx0XHRjdXN0b21fZmlyc3RfbGFiZWw6IEdsb2JhbC5kZWZhdWx0X2l0ZW0sXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogUGVybWlzc2lvbk1hbmFnZXIuY2hlY2tUb3BMZXZlbFBlcm1pc3Npb24oICdDb21wYW5pZXMnICkgPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IFBlcm1pc3Npb25NYW5hZ2VyLmNoZWNrVG9wTGV2ZWxQZXJtaXNzaW9uKCAnQ29tcGFuaWVzJyApID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnTGVnYWwgRW50aXR5JyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnbGVnYWxfZW50aXR5X2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfbGVnYWxfZW50aXR5Jyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElMZWdhbEVudGl0eSxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGN1c3RvbV9maXJzdF9sYWJlbDogR2xvYmFsLmFueV9pdGVtLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IFBlcm1pc3Npb25NYW5hZ2VyLmNoZWNrVG9wTGV2ZWxQZXJtaXNzaW9uKCAnTGVnYWxFbnRpdHknICkgPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IFBlcm1pc3Npb25NYW5hZ2VyLmNoZWNrVG9wTGV2ZWxQZXJtaXNzaW9uKCAnTGVnYWxFbnRpdHknICkgPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTdGF0dXMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdzdGF0dXNfaWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0dlbmRlcicgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3NleF9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0dyb3VwJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRmaWVsZDogJ2dyb3VwX2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdHJlZV9jb2x1bW4nLFxuXHRcdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApXG5cdFx0XTtcblx0fVxuXG5cdGdldEN1c3RvbUNvbnRleHRNZW51TW9kZWwoKSB7XG5cdFx0dmFyIGNvbnRleHRfbWVudV9tb2RlbCA9IHtcblx0XHRcdGV4Y2x1ZGU6IFsnZGVmYXVsdCddLFxuXHRcdFx0aW5jbHVkZTogW1xuXHRcdFx0XHQndmlldycsXG5cdFx0XHRcdCdlZGl0Jyxcblx0XHRcdFx0J2NhbmNlbCdcblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNvbnRleHRfbWVudV9tb2RlbDtcblx0fVxuXG5cdGluaXRPcHRpb25zKCBjYWxsQmFjayApIHtcblxuXHRcdHZhciBvcHRpb25zID0gW1xuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3N0YXR1cycgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdjb21wYW55X2lkJyB9XG5cdFx0XTtcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9ucyggb3B0aW9ucywgZnVuY3Rpb24oIHJlc3VsdCApIHtcblxuXHRcdFx0aWYgKCBjYWxsQmFjayApIHtcblx0XHRcdFx0Y2FsbEJhY2soIHJlc3VsdCApOyAvLyBGaXJzdCB0byBpbml0aWFsaXplIGRyb3AgZG93biBvcHRpb25zLCBhbmQgdGhlbiB0byBpbml0aWFsaXplIGVkaXQgdmlldyBVSS5cblx0XHRcdH1cblxuXHRcdH0gKTtcblx0fVxuXG5cdGluaXREcm9wRG93bk9wdGlvbnMoIG9wdGlvbnMsIGNhbGxCYWNrICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIGxlbiA9IG9wdGlvbnMubGVuZ3RoICsgMjtcblx0XHR2YXIgY29tcGxldGVfY291bnQgPSAwO1xuXHRcdHZhciBvcHRpb25fcmVzdWx0ID0gW107XG5cblx0XHR2YXIgcmVzID0gJ1t7XCJpZFwiOlwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXCJuYW1lXCI6XCJSb290XCIsXCJsZXZlbFwiOjAsXCJjaGlsZHJlblwiOlt7XCJpZFwiOlwiMTFlODUyMTMtYTc3OC02NDEwLWJlZTEtMTIzNDU2YWJjZGVmXCIsXCJjb21wYW55X2lkXCI6XCIxMWU4NTIxMy1hNmIyLTkzYjAtYTJjZC0xMjM0NTZhYmNkZWZcIixcInBhcmVudF9pZFwiOlwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXCJuYW1lXCI6XCJDb3Jwb3JhdGVcIixcImRlbGV0ZWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlfaWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlcIjpmYWxzZSxcImNyZWF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcInVwZGF0ZWRfYnlfaWRcIjpmYWxzZSxcInVwZGF0ZWRfYnlcIjpmYWxzZSxcInVwZGF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcImxldmVsXCI6MSxcImNoaWxkcmVuXCI6W3tcImlkXCI6XCIxMWU4NTIxMy1hNzc5LWZhMjAtODM1Zi0xMjM0NTZhYmNkZWZcIixcImNvbXBhbnlfaWRcIjpcIjExZTg1MjEzLWE2YjItOTNiMC1hMmNkLTEyMzQ1NmFiY2RlZlwiLFwicGFyZW50X2lkXCI6XCIxMWU4NTIxMy1hNzc4LTY0MTAtYmVlMS0xMjM0NTZhYmNkZWZcIixcIm5hbWVcIjpcIkV4ZWN1dGl2ZXNcIixcImRlbGV0ZWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlfaWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlcIjpmYWxzZSxcImNyZWF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcInVwZGF0ZWRfYnlfaWRcIjpmYWxzZSxcInVwZGF0ZWRfYnlcIjpmYWxzZSxcInVwZGF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcImxldmVsXCI6MixcImV4cGFuZGVkXCI6dHJ1ZSxcImxvYWRlZFwiOnRydWUsXCJwYXJlbnRcIjpcIjExZTg1MjEzLWE3NzgtNjQxMC1iZWUxLTEyMzQ1NmFiY2RlZlwiLFwiaXNMZWFmXCI6dHJ1ZX0se1wiaWRcIjpcIjExZTg1MjEzLWE3N2EtMzljMC05YmMyLTEyMzQ1NmFiY2RlZlwiLFwiY29tcGFueV9pZFwiOlwiMTFlODUyMTMtYTZiMi05M2IwLWEyY2QtMTIzNDU2YWJjZGVmXCIsXCJwYXJlbnRfaWRcIjpcIjExZTg1MjEzLWE3NzgtNjQxMC1iZWUxLTEyMzQ1NmFiY2RlZlwiLFwibmFtZVwiOlwiSHVtYW4gUmVzb3VyY2VzXCIsXCJkZWxldGVkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5X2lkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5XCI6ZmFsc2UsXCJjcmVhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJ1cGRhdGVkX2J5X2lkXCI6ZmFsc2UsXCJ1cGRhdGVkX2J5XCI6ZmFsc2UsXCJ1cGRhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJsZXZlbFwiOjIsXCJleHBhbmRlZFwiOnRydWUsXCJsb2FkZWRcIjp0cnVlLFwicGFyZW50XCI6XCIxMWU4NTIxMy1hNzc4LTY0MTAtYmVlMS0xMjM0NTZhYmNkZWZcIixcImlzTGVhZlwiOnRydWV9XSxcImV4cGFuZGVkXCI6dHJ1ZSxcImxvYWRlZFwiOnRydWUsXCJwYXJlbnRcIjpcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwifSx7XCJpZFwiOlwiMTFlODUyMTMtYTc3YS03ODEwLWE2N2YtMTIzNDU2YWJjZGVmXCIsXCJjb21wYW55X2lkXCI6XCIxMWU4NTIxMy1hNmIyLTkzYjAtYTJjZC0xMjM0NTZhYmNkZWZcIixcInBhcmVudF9pZFwiOlwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXCJuYW1lXCI6XCJIb3VybHkgKE5vbi1FeGVtcHQpXCIsXCJkZWxldGVkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5X2lkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5XCI6ZmFsc2UsXCJjcmVhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJ1cGRhdGVkX2J5X2lkXCI6ZmFsc2UsXCJ1cGRhdGVkX2J5XCI6ZmFsc2UsXCJ1cGRhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJsZXZlbFwiOjEsXCJjaGlsZHJlblwiOlt7XCJpZFwiOlwiMTFlODUyMTMtYTc3YS1iYjQwLWI4M2UtMTIzNDU2YWJjZGVmXCIsXCJjb21wYW55X2lkXCI6XCIxMWU4NTIxMy1hNmIyLTkzYjAtYTJjZC0xMjM0NTZhYmNkZWZcIixcInBhcmVudF9pZFwiOlwiMTFlODUyMTMtYTc3YS03ODEwLWE2N2YtMTIzNDU2YWJjZGVmXCIsXCJuYW1lXCI6XCJTYWxhcnkgKEV4ZW1wdClcIixcImRlbGV0ZWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlfaWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlcIjpmYWxzZSxcImNyZWF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcInVwZGF0ZWRfYnlfaWRcIjpmYWxzZSxcInVwZGF0ZWRfYnlcIjpmYWxzZSxcInVwZGF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcImxldmVsXCI6MixcImV4cGFuZGVkXCI6dHJ1ZSxcImxvYWRlZFwiOnRydWUsXCJwYXJlbnRcIjpcIjExZTg1MjEzLWE3N2EtNzgxMC1hNjdmLTEyMzQ1NmFiY2RlZlwiLFwiaXNMZWFmXCI6dHJ1ZX1dLFwiZXhwYW5kZWRcIjp0cnVlLFwibG9hZGVkXCI6dHJ1ZSxcInBhcmVudFwiOlwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJ9XSxcImV4cGFuZGVkXCI6dHJ1ZSxcImxvYWRlZFwiOnRydWV9LHtcImlkXCI6XCIxMWU4NTIxMy1hNzc4LTY0MTAtYmVlMS0xMjM0NTZhYmNkZWZcIixcImNvbXBhbnlfaWRcIjpcIjExZTg1MjEzLWE2YjItOTNiMC1hMmNkLTEyMzQ1NmFiY2RlZlwiLFwicGFyZW50X2lkXCI6XCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcIm5hbWVcIjpcIkNvcnBvcmF0ZVwiLFwiZGVsZXRlZFwiOmZhbHNlLFwiY3JlYXRlZF9ieV9pZFwiOmZhbHNlLFwiY3JlYXRlZF9ieVwiOmZhbHNlLFwiY3JlYXRlZF9kYXRlXCI6XCIwNy1NYXktMTggOToyOCBBTVwiLFwidXBkYXRlZF9ieV9pZFwiOmZhbHNlLFwidXBkYXRlZF9ieVwiOmZhbHNlLFwidXBkYXRlZF9kYXRlXCI6XCIwNy1NYXktMTggOToyOCBBTVwiLFwibGV2ZWxcIjoxLFwiY2hpbGRyZW5cIjpbe1wiaWRcIjpcIjExZTg1MjEzLWE3NzktZmEyMC04MzVmLTEyMzQ1NmFiY2RlZlwiLFwiY29tcGFueV9pZFwiOlwiMTFlODUyMTMtYTZiMi05M2IwLWEyY2QtMTIzNDU2YWJjZGVmXCIsXCJwYXJlbnRfaWRcIjpcIjExZTg1MjEzLWE3NzgtNjQxMC1iZWUxLTEyMzQ1NmFiY2RlZlwiLFwibmFtZVwiOlwiRXhlY3V0aXZlc1wiLFwiZGVsZXRlZFwiOmZhbHNlLFwiY3JlYXRlZF9ieV9pZFwiOmZhbHNlLFwiY3JlYXRlZF9ieVwiOmZhbHNlLFwiY3JlYXRlZF9kYXRlXCI6XCIwNy1NYXktMTggOToyOCBBTVwiLFwidXBkYXRlZF9ieV9pZFwiOmZhbHNlLFwidXBkYXRlZF9ieVwiOmZhbHNlLFwidXBkYXRlZF9kYXRlXCI6XCIwNy1NYXktMTggOToyOCBBTVwiLFwibGV2ZWxcIjoyLFwiZXhwYW5kZWRcIjp0cnVlLFwibG9hZGVkXCI6dHJ1ZSxcInBhcmVudFwiOlwiMTFlODUyMTMtYTc3OC02NDEwLWJlZTEtMTIzNDU2YWJjZGVmXCIsXCJpc0xlYWZcIjp0cnVlfSx7XCJpZFwiOlwiMTFlODUyMTMtYTc3YS0zOWMwLTliYzItMTIzNDU2YWJjZGVmXCIsXCJjb21wYW55X2lkXCI6XCIxMWU4NTIxMy1hNmIyLTkzYjAtYTJjZC0xMjM0NTZhYmNkZWZcIixcInBhcmVudF9pZFwiOlwiMTFlODUyMTMtYTc3OC02NDEwLWJlZTEtMTIzNDU2YWJjZGVmXCIsXCJuYW1lXCI6XCJIdW1hbiBSZXNvdXJjZXNcIixcImRlbGV0ZWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlfaWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlcIjpmYWxzZSxcImNyZWF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcInVwZGF0ZWRfYnlfaWRcIjpmYWxzZSxcInVwZGF0ZWRfYnlcIjpmYWxzZSxcInVwZGF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcImxldmVsXCI6MixcImV4cGFuZGVkXCI6dHJ1ZSxcImxvYWRlZFwiOnRydWUsXCJwYXJlbnRcIjpcIjExZTg1MjEzLWE3NzgtNjQxMC1iZWUxLTEyMzQ1NmFiY2RlZlwiLFwiaXNMZWFmXCI6dHJ1ZX1dLFwiZXhwYW5kZWRcIjp0cnVlLFwibG9hZGVkXCI6dHJ1ZSxcInBhcmVudFwiOlwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJ9LHtcImlkXCI6XCIxMWU4NTIxMy1hNzc5LWZhMjAtODM1Zi0xMjM0NTZhYmNkZWZcIixcImNvbXBhbnlfaWRcIjpcIjExZTg1MjEzLWE2YjItOTNiMC1hMmNkLTEyMzQ1NmFiY2RlZlwiLFwicGFyZW50X2lkXCI6XCIxMWU4NTIxMy1hNzc4LTY0MTAtYmVlMS0xMjM0NTZhYmNkZWZcIixcIm5hbWVcIjpcIkV4ZWN1dGl2ZXNcIixcImRlbGV0ZWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlfaWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlcIjpmYWxzZSxcImNyZWF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcInVwZGF0ZWRfYnlfaWRcIjpmYWxzZSxcInVwZGF0ZWRfYnlcIjpmYWxzZSxcInVwZGF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcImxldmVsXCI6MixcImV4cGFuZGVkXCI6dHJ1ZSxcImxvYWRlZFwiOnRydWUsXCJwYXJlbnRcIjpcIjExZTg1MjEzLWE3NzgtNjQxMC1iZWUxLTEyMzQ1NmFiY2RlZlwiLFwiaXNMZWFmXCI6dHJ1ZX0se1wiaWRcIjpcIjExZTg1MjEzLWE3N2EtMzljMC05YmMyLTEyMzQ1NmFiY2RlZlwiLFwiY29tcGFueV9pZFwiOlwiMTFlODUyMTMtYTZiMi05M2IwLWEyY2QtMTIzNDU2YWJjZGVmXCIsXCJwYXJlbnRfaWRcIjpcIjExZTg1MjEzLWE3NzgtNjQxMC1iZWUxLTEyMzQ1NmFiY2RlZlwiLFwibmFtZVwiOlwiSHVtYW4gUmVzb3VyY2VzXCIsXCJkZWxldGVkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5X2lkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5XCI6ZmFsc2UsXCJjcmVhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJ1cGRhdGVkX2J5X2lkXCI6ZmFsc2UsXCJ1cGRhdGVkX2J5XCI6ZmFsc2UsXCJ1cGRhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJsZXZlbFwiOjIsXCJleHBhbmRlZFwiOnRydWUsXCJsb2FkZWRcIjp0cnVlLFwicGFyZW50XCI6XCIxMWU4NTIxMy1hNzc4LTY0MTAtYmVlMS0xMjM0NTZhYmNkZWZcIixcImlzTGVhZlwiOnRydWV9LHtcImlkXCI6XCIxMWU4NTIxMy1hNzdhLTc4MTAtYTY3Zi0xMjM0NTZhYmNkZWZcIixcImNvbXBhbnlfaWRcIjpcIjExZTg1MjEzLWE2YjItOTNiMC1hMmNkLTEyMzQ1NmFiY2RlZlwiLFwicGFyZW50X2lkXCI6XCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcIm5hbWVcIjpcIkhvdXJseSAoTm9uLUV4ZW1wdClcIixcImRlbGV0ZWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlfaWRcIjpmYWxzZSxcImNyZWF0ZWRfYnlcIjpmYWxzZSxcImNyZWF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcInVwZGF0ZWRfYnlfaWRcIjpmYWxzZSxcInVwZGF0ZWRfYnlcIjpmYWxzZSxcInVwZGF0ZWRfZGF0ZVwiOlwiMDctTWF5LTE4IDk6MjggQU1cIixcImxldmVsXCI6MSxcImNoaWxkcmVuXCI6W3tcImlkXCI6XCIxMWU4NTIxMy1hNzdhLWJiNDAtYjgzZS0xMjM0NTZhYmNkZWZcIixcImNvbXBhbnlfaWRcIjpcIjExZTg1MjEzLWE2YjItOTNiMC1hMmNkLTEyMzQ1NmFiY2RlZlwiLFwicGFyZW50X2lkXCI6XCIxMWU4NTIxMy1hNzdhLTc4MTAtYTY3Zi0xMjM0NTZhYmNkZWZcIixcIm5hbWVcIjpcIlNhbGFyeSAoRXhlbXB0KVwiLFwiZGVsZXRlZFwiOmZhbHNlLFwiY3JlYXRlZF9ieV9pZFwiOmZhbHNlLFwiY3JlYXRlZF9ieVwiOmZhbHNlLFwiY3JlYXRlZF9kYXRlXCI6XCIwNy1NYXktMTggOToyOCBBTVwiLFwidXBkYXRlZF9ieV9pZFwiOmZhbHNlLFwidXBkYXRlZF9ieVwiOmZhbHNlLFwidXBkYXRlZF9kYXRlXCI6XCIwNy1NYXktMTggOToyOCBBTVwiLFwibGV2ZWxcIjoyLFwiZXhwYW5kZWRcIjp0cnVlLFwibG9hZGVkXCI6dHJ1ZSxcInBhcmVudFwiOlwiMTFlODUyMTMtYTc3YS03ODEwLWE2N2YtMTIzNDU2YWJjZGVmXCIsXCJpc0xlYWZcIjp0cnVlfV0sXCJleHBhbmRlZFwiOnRydWUsXCJsb2FkZWRcIjp0cnVlLFwicGFyZW50XCI6XCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIn0se1wiaWRcIjpcIjExZTg1MjEzLWE3N2EtYmI0MC1iODNlLTEyMzQ1NmFiY2RlZlwiLFwiY29tcGFueV9pZFwiOlwiMTFlODUyMTMtYTZiMi05M2IwLWEyY2QtMTIzNDU2YWJjZGVmXCIsXCJwYXJlbnRfaWRcIjpcIjExZTg1MjEzLWE3N2EtNzgxMC1hNjdmLTEyMzQ1NmFiY2RlZlwiLFwibmFtZVwiOlwiU2FsYXJ5IChFeGVtcHQpXCIsXCJkZWxldGVkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5X2lkXCI6ZmFsc2UsXCJjcmVhdGVkX2J5XCI6ZmFsc2UsXCJjcmVhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJ1cGRhdGVkX2J5X2lkXCI6ZmFsc2UsXCJ1cGRhdGVkX2J5XCI6ZmFsc2UsXCJ1cGRhdGVkX2RhdGVcIjpcIjA3LU1heS0xOCA5OjI4IEFNXCIsXCJsZXZlbFwiOjIsXCJleHBhbmRlZFwiOnRydWUsXCJsb2FkZWRcIjp0cnVlLFwicGFyZW50XCI6XCIxMWU4NTIxMy1hNzdhLTc4MTAtYTY3Zi0xMjM0NTZhYmNkZWZcIixcImlzTGVhZlwiOnRydWV9XSc7XG5cdFx0cmVzID0gSlNPTi5wYXJzZSggcmVzICk7XG5cdFx0aWYgKCAhJHRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHRpZiAoICEkdGhpcy5zdWJfdmlld19tb2RlICYmICR0aGlzLmJhc2ljX3NlYXJjaF9maWVsZF91aV9kaWNbJ2dyb3VwX2lkJ10gKSB7XG5cdFx0XHRcdCR0aGlzLmJhc2ljX3NlYXJjaF9maWVsZF91aV9kaWNbJ2dyb3VwX2lkJ10uc2V0U291cmNlRGF0YSggcmVzICk7XG5cdFx0XHRcdCR0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddLnNldFNvdXJjZURhdGEoIHJlcyApO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0JHRoaXMudXNlcl9ncm91cF9hcnJheSA9IHJlcztcblxuXHRcdGNvbXBsZXRlX2NvdW50ID0gY29tcGxldGVfY291bnQgKyAxO1xuXG5cdFx0aWYgKCBjb21wbGV0ZV9jb3VudCA9PT0gbGVuICkge1xuXG5cdFx0XHRjYWxsQmFjayggb3B0aW9uX3Jlc3VsdCApO1xuXHRcdH1cblxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbiAtIDI7IGkrKyApIHtcblx0XHRcdHZhciBvcHRpb25faW5mbyA9IG9wdGlvbnNbaV07XG5cdFx0XHR0aGlzLmluaXREcm9wRG93bk9wdGlvbiggb3B0aW9uX2luZm8ub3B0aW9uX25hbWUsIG9wdGlvbl9pbmZvLmZpZWxkX25hbWUsIG9wdGlvbl9pbmZvLmFwaSwgb25HZXRPcHRpb25SZXN1bHQgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uR2V0T3B0aW9uUmVzdWx0KCByZXN1bHQgKSB7XG5cblx0XHRcdG9wdGlvbl9yZXN1bHQucHVzaCggcmVzdWx0ICk7XG5cblx0XHRcdGNvbXBsZXRlX2NvdW50ID0gY29tcGxldGVfY291bnQgKyAxO1xuXG5cdFx0XHRpZiAoIGNvbXBsZXRlX2NvdW50ID09PSBsZW4gKSB7XG5cblx0XHRcdFx0Y2FsbEJhY2soIG9wdGlvbl9yZXN1bHQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL292ZXJyaWRlIHRoYXQgZm9yY2VzIHNhbWUgZGF0YSB0byBncmlkIGF0IGFsbCB0aW1lcy5cblx0c2VhcmNoKCkge1xuXHRcdHZhciByZXN1bHRfZGF0YSA9IEpTT04ucGFyc2UoICdbe1wiaWRcIjpcIjExZTg1MjEzLWE3OTktZDIwMC1iMDQxLTEyMzQ1NmFiY2RlZlwiLFwic3RhdHVzXCI6XCJBY3RpdmVcIixcImVtcGxveWVlX251bWJlclwiOjEwMCxcImZpcnN0X25hbWVcIjpcIk1yLlwiLFwibGFzdF9uYW1lXCI6XCJGQUtFXCIsXCJmdWxsX25hbWVcIjpcIkFkbWluaXN0cmF0b3IsIE1yLlwiLFwiaG9tZV9waG9uZVwiOlwiNDcxLTQzOC0zOTAwXCIsXCJpc19vd25lclwiOnRydWUsXCJpc19jaGlsZFwiOmZhbHNlfSwnICtcblx0XHRcdCd7XCJpZFwiOlwiMTFlODUyMTMtYWQzNC1lMGUwLTg1NDEtMTIzNDU2YWJjZGVmXCIsXCJzdGF0dXNcIjpcIkFjdGl2ZVwiLFwiZW1wbG95ZWVfbnVtYmVyXCI6MTMsXCJmaXJzdF9uYW1lXCI6XCJUcmlzdGVuXCIsXCJsYXN0X25hbWVcIjpcIkJyYXVuXCIsXCJmdWxsX25hbWVcIjpcIkZBS0UgQnJhdW4sIFRyaXN0ZW5cIixcImhvbWVfcGhvbmVcIjpcIjUyNy01MDAtNDg1MlwiLFwiaXNfb3duZXJcIjpmYWxzZSxcImlzX2NoaWxkXCI6dHJ1ZX0sJyArXG5cdFx0XHQne1wiaWRcIjpcIjExZTg1MjEzLWFmNjQtZDBlMC05YjAwLTEyMzQ1NmFiY2RlZlwiLFwic3RhdHVzXCI6XCJBY3RpdmVcIixcImVtcGxveWVlX251bWJlclwiOjIwLFwiZmlyc3RfbmFtZVwiOlwiSmFuZVwiLFwibGFzdF9uYW1lXCI6XCJEb2VcIixcImZ1bGxfbmFtZVwiOlwiRkFLRSBEb2UsIEphbmVcIixcImhvbWVfcGhvbmVcIjpcIjQ3Ny00NDMtOTY1MFwiLFwiaXNfb3duZXJcIjpmYWxzZSxcImlzX2NoaWxkXCI6dHJ1ZX0sJyArXG5cdFx0XHQne1wiaWRcIjpcIjExZTg1MjEzLWFjNDQtMTgzMC05OTA4LTEyMzQ1NmFiY2RlZlwiLFwic3RhdHVzXCI6XCJBY3RpdmVcIixcImVtcGxveWVlX251bWJlclwiOjEwLFwiZmlyc3RfbmFtZVwiOlwiSm9oblwiLFwibGFzdF9uYW1lXCI6XCJEb2VcIixcImZ1bGxfbmFtZVwiOlwiRkFLRSBEb2UsIEpvaG5cIixcImhvbWVfcGhvbmVcIjpcIjQ2NC01NDctOTQ1MlwiLFwiaXNfb3duZXJcIjpmYWxzZSxcImlzX2NoaWxkXCI6dHJ1ZX1dJyApO1xuXHRcdHRoaXMudXNlcl9pZF9hcnJheSA9IHJlc3VsdF9kYXRhO1xuXHRcdHJlc3VsdF9kYXRhID0gdGhpcy5wcm9jZXNzUmVzdWx0RGF0YSggcmVzdWx0X2RhdGEgKTtcblx0XHR0aGlzLmdyaWQuc2V0RGF0YSggcmVzdWx0X2RhdGEgKTtcblx0XHR0aGlzLmdyaWQuc2V0R3JpZENvbHVtbnNXaWR0aCgpO1xuXHRcdHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCA9IHJlc3VsdF9kYXRhWzBdO1xuXHRcdHRoaXMuc2V0Q3VycmVudEVkaXRWaWV3U3RhdGUoICdlZGl0JyApO1xuXG5cdFx0VFRQcm9taXNlLmFkZCggJ0F3ZXNvbWVib3h0ZXN0JywgJ2luaXQnICk7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRUVFByb21pc2Uud2FpdCggJ0F3ZXNvbWVib3h0ZXN0JywgJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdCR0aGlzLmluaXRFZGl0VmlldygpO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuaW5pdEVkaXRWaWV3VUkoIHRoaXMudmlld0lkLCB0aGlzLmVkaXRfdmlld190cGwgKTtcblx0fVxuXG5cdHNldEVkaXRWaWV3RGF0YURvbmUoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFRBbGVydE1hbmFnZXIuc2hvd0NvbmZpcm1BbGVydCggJC5pMThuLl8oICdSdW4gdGVzdHM/JyApLCBudWxsLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSB0cnVlICkge1xuXHRcdFx0XHRcdCR0aGlzLnJ1blRlc3RzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHRcdCR0aGlzLnNldFRhYk9WaXNpYmlsaXR5KCB0cnVlICk7XG5cdFx0XHQkKCAnLmVkaXQtdmlldy10YWItYmFyJyApLmNzcyggJ29wYWNpdHknLCAxICk7XG5cdFx0fSwgMjUwMCApO1xuXHR9XG5cblx0LyoqXG5cdCAqIGluIHRoZSB0ZXN0aW5nIGNvZGUgYXJlIGEgbG90IG9mIG51bGwgbnVsbCB3YWl0cyB0byBlbnN1cmUgdGhhdCBhbGwgYXdlc29tZWJveGVzIGFyZSByZWFkeSBmb3IgbmV4dCBzdGVwIGluIHRlc3Rcblx0ICovXG5cdHJ1blRlc3RzKCkge1xuXHRcdGlmICggJCggJyNxdW5pdF9zY3JpcHQnICkubGVuZ3RoID09IDAgKSB7XG5cdFx0XHQkKCAnPHNjcmlwdCBpZD1cXCdxdW5pdF9zY3JpcHRcXCcgc3JjPVxcJ2ZyYW1ld29yay9xdW5pdC9xdW5pdC5qc1xcJz48L3NjcmlwdD4nICkuYXBwZW5kVG8oICdoZWFkJyApO1xuXHRcdFx0JCggJzxsaW5rIHJlbD1cXCdzdHlsZXNoZWV0XFwnIHR5cGU9XFwndGV4dC9jc3NcXCcgaHJlZj1cXCdmcmFtZXdvcmsvcXVuaXQvcXVuaXQuY3NzXFwnPicgKS5hcHBlbmRUbyggJ2hlYWQnICk7XG5cdFx0fVxuXHRcdDtcblxuXHRcdFFVbml0LmNvbmZpZy5hdXRvc3RhcnQgPSBmYWxzZTtcblx0XHQkKCAnI3F1bml0X2NvbnRhaW5lcicgKS5jc3MoICd3aWR0aCcsICcxMDAlJyApO1xuXHRcdCQoICcjcXVuaXRfY29udGFpbmVyJyApLmNzcyggJ2hlaWdodCcsICdhdXRvJyApO1xuXHRcdCQoICcjcXVuaXRfY29udGFpbmVyJyApLmNzcyggJ292ZXJmbG93LXknLCAnc2Nyb2xsJyApO1xuXHRcdCQoICcjcXVuaXRfY29udGFpbmVyJyApLmNzcyggJ3RvcCcsICcwcHgnICk7XG5cdFx0JCggJyNxdW5pdF9jb250YWluZXInICkuY3NzKCAnbGVmdCcsICcwcHgnICk7XG5cdFx0JCggJyNxdW5pdF9jb250YWluZXInICkuY3NzKCAnei1pbmRleCcsICcxMDAnICk7XG5cdFx0JCggJyNxdW5pdF9jb250YWluZXInICkuY3NzKCAnYmFja2dyb3VuZCcsICcjZmZmJyApO1xuXHRcdCQoICcjcXVuaXRfY29udGFpbmVyJyApLnNob3coKTtcblxuXHRcdCQoICcjdHRfZGVidWdfY29uc29sZScgKS5yZW1vdmUoKTtcblx0XHRpZiAoICF3aW5kb3cucXVuaXRfaW5pdGlhdGVkICkge1xuXHRcdFx0d2luZG93LnF1bml0X2luaXRpYXRlZCA9IHRydWU7XG5cdFx0XHQvL1FVbml0LnN0YXJ0KCk7IC8vVGhpcyBjYXVzZXMgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiwgYnV0IGRvZXMgbm90IHNlZW0gdG8gYmUgcmVxdWlyZWQuIFRlc3QgcmFuIHdpdGhvdXQgaXQuXG5cdFx0fVxuXG5cdFx0Ly8gUVVuaXQubW9kdWxlKCdRVW5pdCBTYW5pdHknKTtcblx0XHQvLyBRVW5pdC50ZXN0KFwiUVVuaXQgdGVzdFwiLCBmdW5jdGlvbiAoYXNzZXJ0KSB7XG5cdFx0Ly8gXHRhc3NlcnQub2soMSA9PSBcIjFcIiwgXCJRVW5pdCBpcyBsb2FkZWQgYW5kIHNhbmUhXCIpO1xuXHRcdC8vIH0pO1xuXG5cdFx0Ly9zZWxlY3QgYW4gaXRlbSBieSBjbGlja2luZyBhIHRkIGluIHRoZSBsYXN0IHJvd1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0UVVuaXQubW9kdWxlKCAnQXdlc29tZUJveCcgKTtcblx0XHRRVW5pdC50ZXN0KCAnQXdlc29tZWJveCB0ZXN0cycsIGZ1bmN0aW9uKCBhc3NlcnQgKSB7XG5cdFx0XHR2YXIgZG9uZV9hd2Vzb21lYm94X3Rlc3RzID0gYXNzZXJ0LmFzeW5jKCk7XG5cblx0XHRcdERlYnVnLlRleHQoICdBOiBUZXN0IFNwbGF5ZWQgQXdlc29tZWJveCcsICdBd2Vzb21lYm94VGVzdFZpZXdDb250cm9sbGVyLmpzJywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXInLCAncnVuVGVzdHMnLCAxMSApO1xuXHRcdFx0JHRoaXMuY2hlY2tPcGVuQXdlc29tZUJveCggJHRoaXMuZWRpdF92aWV3X3VpX2RpY1sndXNlcl9pZCddLCBhc3NlcnQsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHREZWJ1Zy5UZXh0KCAnQjogVGVzdCBNdWx0aVNlbGVjdCBBd2Vzb21lQm94JywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXIuanMnLCAnQXdlc29tZWJveFRlc3RWaWV3Q29udHJvbGxlcicsICdydW5UZXN0cycsIDExICk7XG5cdFx0XHRcdCR0aGlzLmNoZWNrTXVsdGlTZWxlY3RBd2Vzb21lQm94KCBhc3NlcnQsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdERlYnVnLlRleHQoICdDOiBUZXN0IHJlZ3VsYXIgQXdlc29tZUJveCcsICdBd2Vzb21lYm94VGVzdFZpZXdDb250cm9sbGVyLmpzJywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXInLCAncnVuVGVzdHMnLCAxMSApO1xuXHRcdFx0XHRcdCR0aGlzLmNoZWNrQXdlc29tZUJveCggYXNzZXJ0LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdERlYnVnLlRleHQoICdEOiBUZXN0IHRyZWVfbW9kZSBBd2Vzb21lQm94JywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXIuanMnLCAnQXdlc29tZWJveFRlc3RWaWV3Q29udHJvbGxlcicsICdydW5UZXN0cycsIDExICk7XG5cdFx0XHRcdFx0XHQkdGhpcy5jaGVja1RyZWVCb3goIGFzc2VydCwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdERlYnVnLlRleHQoICdFOiBUZXN0IHRyZWVfbW9kZSBNdWx0aVNlbGVjdCBBd2Vzb21lQm94JywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXIuanMnLCAnQXdlc29tZWJveFRlc3RWaWV3Q29udHJvbGxlcicsICdydW5UZXN0cycsIDExICk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNoZWNrTXVsdGlUcmVlQXdlc29tZUJveCggYXNzZXJ0LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHREZWJ1Zy5UZXh0KCAnRjogVGVzdCBzZWFyY2hpbmcgaW4gQXdlc29tZUJveCcsICdBd2Vzb21lYm94VGVzdFZpZXdDb250cm9sbGVyLmpzJywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXInLCAncnVuVGVzdHMnLCAxMSApO1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmNoZWNrQ2xlYXJTZWFyY2goICR0aGlzLmVkaXRfdmlld191aV9kaWNbJ3VzZXJfaWQyJ10sIGFzc2VydCwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHREZWJ1Zy5UZXh0KCAnRzogV29ua3kgbW92ZSBhbGwgc2NlbmFyaW8nLCAnQXdlc29tZWJveFRlc3RWaWV3Q29udHJvbGxlci5qcycsICdBd2Vzb21lYm94VGVzdFZpZXdDb250cm9sbGVyJywgJ3J1blRlc3RzJywgMTEgKTtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmNoZWNrTW92ZUFsbFNjZW5hcmlvKCAkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWyd1c2VyX2lkMiddLCBhc3NlcnQsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHREZWJ1Zy5UZXh0KCAnWjogVGVzdGluZyBDb21wbGV0ZScsICdBd2Vzb21lYm94VGVzdFZpZXdDb250cm9sbGVyLmpzJywgJ0F3ZXNvbWVib3hUZXN0Vmlld0NvbnRyb2xsZXInLCAncnVuVGVzdHMnLCAxMSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvbmVfYXdlc29tZWJveF90ZXN0cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LCAxMDAwICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fSApO1xuXG5cdFx0fSApO1xuXHR9XG5cblx0Y2hlY2tNdWx0aVRyZWVBd2Vzb21lQm94KCBhc3NlcnQsIGNhbGxiYWNrICkge1xuXHRcdHZhciBhd2Vzb21lYm94ID0gdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydncm91cF9pZDInXTtcblx0XHRhd2Vzb21lYm94LnRyaWdnZXIoICdjbGljaycgKTtcblx0XHR2YXIgdmlzaWJsZV9hd2Vzb21lYm94ID0gJCggJyNncm91cF9pZDJhX2Ryb3Bkb3duX2RpdicgKTtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFRUUHJvbWlzZS53YWl0KCAnQUNvbWJvQm94JywgJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZpc2libGVfYXdlc29tZWJveC5maW5kKCAnLnVuc2VsZWN0LWdyaWQtZGl2IHRib2R5IHRyOmxhc3QgdGQ6bGFzdCcgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHR2aXNpYmxlX2F3ZXNvbWVib3guZmluZCggJy5hLWdyaWQtcmlnaHQtYXJyb3cnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFx0dmlzaWJsZV9hd2Vzb21lYm94LmZpbmQoICcjc2VsZWN0X2dyaWRfY2xvc2VfYnRuJyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdHZhciB2YWwgPSBhd2Vzb21lYm94LmdldFZhbHVlKCk7XG5cblx0XHRcdGFzc2VydC5vayggKCBUVFVVSUQuaXNVVUlEKCB2YWwgKSAmJiB2YWwgIT0gVFRVVUlELnplcm9faWQgKSwgJ011bHRpIHRyZWUgLSBzZWxlY3Rpb24gdmFsaWQnICk7XG5cblx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRhd2Vzb21lYm94LnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHR2YXIgdmlzaWJsZV9hd2Vzb21lYm94ID0gJCggJyNncm91cF9pZDJhX2Ryb3Bkb3duX2RpdicgKTtcblx0XHRcdFx0XHR2aXNpYmxlX2F3ZXNvbWVib3guZmluZCggJy5zZWxlY3QtZ3JpZC1kaXYgdGJvZHkgdHI6bGFzdCB0ZDpsYXN0JyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0XHR2aXNpYmxlX2F3ZXNvbWVib3guZmluZCggJy5hLWdyaWQtbGVmdC1hcnJvdycgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRcdFx0dmlzaWJsZV9hd2Vzb21lYm94LmZpbmQoICcjc2VsZWN0X2dyaWRfY2xvc2VfYnRuJyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0XHR2YXIgdmFsID0gYXdlc29tZWJveC5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdFx0YXNzZXJ0Lm9rKCAoIHZhbCA9PSBUVFVVSUQuemVyb19pZCApLCAnTXVsdGkgdHJlZSAtIHVuc2VsZWN0aW9uIHZhbGlkJyApO1xuXG5cdFx0XHRcdFx0YXdlc29tZWJveC50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRcdFx0Ly90aGlzIGNoZWNrIGZhaWxzIHdoZW4gaXQgc2hvdWxkIG5vdCBhcyB0aGUgYm9yZGVyIG1ha2VzIGl0IGxvb2sgZmluZVxuXHRcdFx0XHRcdC8vJHRoaXMuY2hlY2tHcmlkV2lkdGhzKCB2aXNpYmxlX2F3ZXNvbWVib3gsIGFzc2VydCApO1xuXHRcdFx0XHRcdHZpc2libGVfYXdlc29tZWJveC5maW5kKCAnI3NlbGVjdF9ncmlkX2Nsb3NlX2J0bicgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAxMDAwICk7XG5cdFx0XHR9LCAxMDAwICk7XG5cblx0XHR9ICk7XG5cdH1cblxuXHRjaGVja1RyZWVCb3goIGFzc2VydCwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGF3ZXNvbWVib3ggPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ2dyb3VwX2lkJ107XG5cdFx0dmFyIHZhbCA9IGF3ZXNvbWVib3guZ2V0VmFsdWUoKTtcblx0XHRhc3NlcnQub2soICggdmFsID09IFRUVVVJRC56ZXJvX2lkICksICd0cmVlIC0gdW5zZWxlY3Rpb24gdmFsaWQnICk7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdGF3ZXNvbWVib3gudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFx0VFRQcm9taXNlLndhaXQoIG51bGwsIG51bGwsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkdGhpcy5jaGVja0dyaWRXaWR0aHMoICQoICcjZ3JvdXBfaWRhX2Ryb3Bkb3duX2RpdicgKSwgYXNzZXJ0ICk7XG5cdFx0XHRcdCQoICcjZ3JvdXBfaWRhX2Ryb3Bkb3duX2RpdiAudW5zZWxlY3QtZ3JpZC1kaXYgdGJvZHkgdHI6bGFzdCB0ZDpsYXN0JyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGF3ZXNvbWVib3guZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRhd2Vzb21lYm94LnNldFZhbHVlKCBudWxsICk7XG5cblx0XHRcdFx0XHRhc3NlcnQub2soICggVFRVVUlELmlzVVVJRCggdmFsICkgJiYgdmFsICE9IFRUVVVJRC56ZXJvX2lkICksICd0cmVlIC0gc2VsZWN0aW9uIHZhbGlkJyApO1xuXG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAxMDAwICk7XG5cblx0XHRcdH0gKTtcblx0XHR9LCAxMDAwICk7XG5cdH1cblxuXHRjaGVja0F3ZXNvbWVCb3goIGFzc2VydCwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGF3ZXNvbWVib3ggPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ2xlZ2FsX2VudGl0eV9pZCddO1xuXHRcdHZhciB2YWwgPSBhd2Vzb21lYm94LmdldFZhbHVlKCk7XG5cblx0XHRhc3NlcnQub2soICggdmFsID09IFRUVVVJRC56ZXJvX2lkICksICdyZWd1bGFyIC0gdW5zZWxlY3Rpb24gdmFsaWQnICk7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0YXdlc29tZWJveC50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRUVFByb21pc2Uud2FpdCggbnVsbCwgbnVsbCwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCR0aGlzLmNoZWNrR3JpZFdpZHRocyggJCggJyNsZWdhbF9lbnRpdHlfaWRBRHJvcERvd24nICksIGFzc2VydCApO1xuXHRcdFx0XHQkKCAnI2xlZ2FsX2VudGl0eV9pZEFEcm9wRG93biAudW5zZWxlY3QtZ3JpZC1kaXYgdGJvZHkgdHI6bGFzdCB0ZDpsYXN0JyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFsID0gYXdlc29tZWJveC5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdGF3ZXNvbWVib3guc2V0VmFsdWUoIG51bGwgKTtcblx0XHRcdFx0XHRhc3NlcnQub2soICggVFRVVUlELmlzVVVJRCggdmFsICkgJiYgdmFsICE9IFRUVVVJRC56ZXJvX2lkICksICdyZWd1bGFyIC0gc2VsZWN0aW9uIHZhbGlkJyApO1xuXG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAxMDAwICk7XG5cblx0XHRcdH0gKTtcblx0XHR9LCAxMDAwICk7XG5cdH1cblxuXHRjaGVja011bHRpU2VsZWN0QXdlc29tZUJveCggYXNzZXJ0LCBjYWxsYmFjayApIHtcblx0XHR2YXIgYXdlc29tZWJveCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1snY29tcGFueV9pZCddO1xuXHRcdGF3ZXNvbWVib3gudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdHZhciB2aXNpYmxlX2F3ZXNvbWVib3ggPSAkKCAnI2NvbXBhbnlfaWRhX2Ryb3Bkb3duX2RpdicgKTtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFRUUHJvbWlzZS53YWl0KCAnQUNvbWJvQm94JywgJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZpc2libGVfYXdlc29tZWJveC5maW5kKCAnLnVuc2VsZWN0LWdyaWQtZGl2IHRib2R5IHRyOmxhc3QgdGQ6bGFzdCcgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHR2aXNpYmxlX2F3ZXNvbWVib3guZmluZCggJy5hLWdyaWQtcmlnaHQtYXJyb3cnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFx0dmlzaWJsZV9hd2Vzb21lYm94LmZpbmQoICcjc2VsZWN0X2dyaWRfY2xvc2VfYnRuJyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdHZhciB2YWwgPSBhd2Vzb21lYm94LmdldFZhbHVlKCk7XG5cblx0XHRcdGFzc2VydC5vayggKCBUVFVVSUQuaXNVVUlEKCB2YWwgKSAmJiB2YWwgIT0gVFRVVUlELnplcm9faWQgKSwgJ211bHRpc2VsZWN0IC0gc2VsZWN0aW9uIHZhbGlkJyApO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0YXdlc29tZWJveC50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRcdFRUUHJvbWlzZS53YWl0KCAnQUNvbWJvQm94JywgJ2luaXQnLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdHZhciB2aXNpYmxlX2F3ZXNvbWVib3ggPSAkKCAnI2NvbXBhbnlfaWRhX2Ryb3Bkb3duX2RpdicgKTtcblx0XHRcdFx0XHR2aXNpYmxlX2F3ZXNvbWVib3guZmluZCggJy5zZWxlY3QtZ3JpZC1kaXYgdGJvZHkgdHI6bGFzdCB0ZDpsYXN0JyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0XHR2aXNpYmxlX2F3ZXNvbWVib3guZmluZCggJy5hLWdyaWQtbGVmdC1hcnJvdycgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRcdFx0JHRoaXMuY2hlY2tHcmlkV2lkdGhzKCB2aXNpYmxlX2F3ZXNvbWVib3gsIGFzc2VydCApO1xuXHRcdFx0XHRcdHZpc2libGVfYXdlc29tZWJveC5maW5kKCAnI3NlbGVjdF9ncmlkX2Nsb3NlX2J0bicgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHRcdFx0dmFsID0gYXdlc29tZWJveC5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdGF3ZXNvbWVib3gudHJpZ2dlciggJ2NsaWNrJyApO1xuXG5cdFx0XHRcdFx0YXNzZXJ0Lm9rKCAoIHZhbCA9PSBUVFVVSUQuemVyb19pZCApLCAnbXVsdGlzZWxlY3QgLSB1bnNlbGVjdGlvbiB2YWxpZCcgKTtcblxuXHRcdFx0XHRcdFRUUHJvbWlzZS53YWl0KCBudWxsLCBudWxsLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9LCAyMDAwICk7XG5cblx0XHR9ICk7XG5cdH1cblxuXHRjaGVja09wZW5Bd2Vzb21lQm94KCBib3gsIGFzc2VydCwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIHNlbGVjdGVkX2lkID0gYm94LmZpbmQoICcudW5zZWxlY3QtZ3JpZC1kaXYgdGJvZHkgdHI6bGFzdCcgKS5hdHRyKCAnaWQnICk7XG5cdFx0Ym94LmZpbmQoICcudW5zZWxlY3QtZ3JpZC1kaXYgdGJvZHkgdHI6bGFzdCB0ZDpsYXN0JyApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRib3guZmluZCggJy5hLWdyaWQtcmlnaHQtYXJyb3cnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdHZhciB2YWwgPSBib3guZ2V0VmFsdWUoKTtcblxuXHRcdGFzc2VydC5vayggKCBUVFVVSUQuaXNVVUlEKCB2YWxbMF0uaWQgKSAmJiB2YWxbMF0uaWQgPT0gc2VsZWN0ZWRfaWQgKSwgJ3NwbGF5ZWQgLSBzZWxlY3Rpb24gdmFsaWQnICk7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFRUUHJvbWlzZS53YWl0KCAnQUNvbWJvQm94JywgJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdGJveC5maW5kKCAnLnNlbGVjdC1ncmlkLWRpdiB0Ym9keSB0cjpsYXN0IHRkOmxhc3QnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFx0Ym94LmZpbmQoICcuYS1ncmlkLWxlZnQtYXJyb3cnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXG5cdFx0XHRhc3NlcnQub2soICggdmFsLmxlbmd0aCA9PT0gMCApLCAnc3BsYXllZCAtIHVuc2VsZWN0aW9uIHZhbGlkJyApO1xuXG5cdFx0XHQkdGhpcy5jaGVja0dyaWRXaWR0aHMoIGJveCwgYXNzZXJ0ICk7XG5cblx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFRUUHJvbWlzZS53YWl0KCBudWxsLCBudWxsLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG5cblx0Y2hlY2tHcmlkV2lkdGhzKCBib3gsIGFzc2VydCApIHtcblxuXHRcdHZhciB1bnNlbGVjdF9ncmlkX2NvbnRhaW5lcl93aWR0aCA9IGJveC5maW5kKCAnLnVuc2VsZWN0LWdyaWQtYm9yZGVyLWRpdicgKS53aWR0aCgpO1xuXHRcdHZhciB1bnNlbGVjdF9ncmlkX3dpZHRoID0gYm94LmZpbmQoICcudWktanFncmlkJyApLndpZHRoKCk7XG5cdFx0dmFyIHVuc2VsZWN0X2dyaWRfZGlmZiA9IHVuc2VsZWN0X2dyaWRfY29udGFpbmVyX3dpZHRoIC0gdW5zZWxlY3RfZ3JpZF93aWR0aDtcblxuXHRcdGFzc2VydC5vayggKCB1bnNlbGVjdF9ncmlkX2RpZmYgPD0gMiApLCAndW5zZWxlY3QgZ3JpZCB3aWR0aCBkaWZmIDw9IDI6ICcgKyB1bnNlbGVjdF9ncmlkX2RpZmYgKTtcblxuXHRcdGlmICggYm94LmZpbmQoICcuc2VsZWN0LWdyaWQtYm9yZGVyLWRpdicgKS5pcyggJzp2aXNpYmxlJyApID4gMCApIHtcblx0XHRcdHZhciBzZWxlY3RfZ3JpZF9jb250YWluZXJfd2lkdGggPSBib3guZmluZCggJy5zZWxlY3QtZ3JpZC1ib3JkZXItZGl2JyApLndpZHRoKCk7XG5cdFx0XHR2YXIgc2VsZWN0X2dyaWRfd2lkdGggPSBib3guZmluZCggJy51aS1qcWdyaWQnICkud2lkdGgoKTtcblx0XHRcdHZhciBzZWxlY3RfZ3JpZF9kaWZmID0gTWF0aC5hYnMoIHNlbGVjdF9ncmlkX2NvbnRhaW5lcl93aWR0aCAtIHNlbGVjdF9ncmlkX3dpZHRoICk7XG5cblx0XHRcdGFzc2VydC5vayggKCBzZWxlY3RfZ3JpZF9kaWZmIDw9IDIgKSwgJ3NlbGVjdCBncmlkIHdpZHRoIGRpZmYgPD0gMjogJyArIHNlbGVjdF9ncmlkX2RpZmYgKTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0NsZWFyU2VhcmNoKCBib3gsIGFzc2VydCwgY2FsbGJhY2sgKSB7XG5cdFx0Ly8gb3BlblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0Ym94LnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRUVFByb21pc2Uud2FpdCggbnVsbCwgbnVsbCwgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZHJvcGRvd24gPSAkKCAnI3VzZXJfaWQyQURyb3BEb3duJyApO1xuXHRcdFx0dmFyIGNoZWNrYm94ZXMgPSBkcm9wZG93bi5maW5kKCAnLnVuc2VsZWN0LWdyaWQtZGl2IC51aS1qcWdyaWQgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyApO1xuXG5cdFx0XHR2YXIgZXhwZWN0ZWRfaWRzID0gW107XG5cdFx0XHQvLyBzZWxlY3QgYSBjb3VwbGUgcmVjb3Jkc1xuXHRcdFx0JCggY2hlY2tib3hlc1sxXSApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdCQoIGNoZWNrYm94ZXNbM10gKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHQkKCBjaGVja2JveGVzWzZdICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFx0JCggY2hlY2tib3hlc1s3XSApLnRyaWdnZXIoICdjbGljaycgKTtcblxuXHRcdFx0Ly9ub3RlIHNlbGVjdGVkIGlkc1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzFdICkgKSApO1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzNdICkgKSApO1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzZdICkgKSApO1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzddICkgKSApO1xuXG5cdFx0XHQvLyBjbGljayBtb3ZlIGJ1dHRvblxuXHRcdFx0ZHJvcGRvd24uZmluZCggJy5hLWdyaWQtcmlnaHQtYXJyb3cnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXG5cdFx0XHQvLyBjaGVjayB0aGF0IHZpc2libGUgdmFsdWVzIGNvbnRhaW4gZXhwZWN0ZWQgaWRzXG5cdFx0XHRhc3NlcnQub2soIGV4cGVjdGVkSW5HcmlkKCAnc2VsZWN0X2dyaWQnLCBkcm9wZG93biwgZXhwZWN0ZWRfaWRzICksICdhbGwgZXhwZWN0ZWQgcmVjb3JkcyBhcmUgaW4gc2VsZWN0ZWQgZ3JpZCcgKTtcblxuXHRcdFx0Ly8gc2VhcmNoIHRvIGZpbHRlclxuXHRcdFx0dmFyIHNlbGVjdF9ncmlkX3RleHRfaW5wdXRzID0gZHJvcGRvd24uZmluZCggJy5zZWxlY3QtZ3JpZC1kaXYgaW5wdXRbdHlwZT1cInRleHRcIl0uc2VhcmNoLWlucHV0JyApO1xuXG5cdFx0XHQvLyBzZXQgdXAgZ3JpZCBzZWFyY2ggcHJlcmVxdWlzaXRlc1xuXHRcdFx0JCggc2VsZWN0X2dyaWRfdGV4dF9pbnB1dHNbMF0gKS50cmlnZ2VyKCAnZm9jdXMnICk7XG5cdFx0XHQkKCBzZWxlY3RfZ3JpZF90ZXh0X2lucHV0c1swXSApLnZhbCggJ21yJyApO1xuXHRcdFx0TG9jYWxDYWNoZURhdGEub3BlbkF3ZXNvbWVCb3guZm9jdXNfaW5fc2VsZWN0X2dyaWQgPSB0cnVlO1xuXHRcdFx0dmFyIGUgPSAkLkV2ZW50KCBcImtleWRvd25cIiwgeyBrZXlDb2RlOiA3Nywgd2hpY2g6IDc3IH0gKTtcblx0XHRcdExvY2FsQ2FjaGVEYXRhLm9wZW5Bd2Vzb21lQm94LnNlbGVjdE5leHRJdGVtKCBlICk7XG5cdFx0XHR2YXIgZSA9ICQuRXZlbnQoIFwia2V5ZG93blwiLCB7IGtleUNvZGU6IDgyLCB3aGljaDogODIgfSApO1xuXHRcdFx0TG9jYWxDYWNoZURhdGEub3BlbkF3ZXNvbWVCb3guc2VsZWN0TmV4dEl0ZW0oIGUgKTtcblx0XHRcdC8vIHRyaWdnZXIgc2VhcmNoXG5cdFx0XHQkKCBzZWxlY3RfZ3JpZF90ZXh0X2lucHV0c1swXSApLnRyaWdnZXIoICdzZWFyY2hFbnRlcicsIFsnbXInLCAnZmlyc3RfbmFtZSddICk7XG5cblx0XHRcdFRUUHJvbWlzZS53YWl0KCBudWxsLCBudWxsLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gY2hlY2sgdGhhdCBWSVNJQkxFIHZhbHVlcyBjb250YWluIGV4cGVjdGVkIGlkc1xuXHRcdFx0XHRhc3NlcnQub2soICggZHJvcGRvd24uZmluZCggJy5zZWxlY3QtZ3JpZCB0cicgKS5sZW5ndGggPT0gMiApLCAnb25seSAuc2l6ZXRyIGFuZCBtciBhZG1pbiBzaG93cyBhZnRlciBmaWx0ZXIgKG9ubHkgd29ya3Mgd2l0aCBkZW1vIGRhdGEpJyApO1xuXG5cdFx0XHRcdC8vIG1vdmUgZmlyc3QgcmVjb3JkIGJhY2sgKCBub3RlIGlkIClcblx0XHRcdFx0dmFyIGZpcnN0X3JvdyA9ICQoIGRyb3Bkb3duLmZpbmQoICcuc2VsZWN0LWdyaWQgdHInIClbZHJvcGRvd24uZmluZCggJy5zZWxlY3QtZ3JpZCB0cicgKS5sZW5ndGggLSAxXSApO1xuXHRcdFx0XHRmaXJzdF9yb3cuZmluZCggJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKS5jbGljaygpO1xuXHRcdFx0XHR2YXIgb25kYmxDbGlja1Jvd0hhbmRsZXIgPSBkcm9wZG93bi5maW5kKCAnLnNlbGVjdC1ncmlkJyApLmpxR3JpZCggJ2dldEdyaWRQYXJhbScsICdvbmRibENsaWNrUm93JyApO1xuXHRcdFx0XHRvbmRibENsaWNrUm93SGFuZGxlci5jYWxsKCBkcm9wZG93bi5maW5kKCAnLnNlbGVjdC1ncmlkJyApWzBdLCBmaXJzdF9yb3cucHJvcCggJ2lkJyApICk7XG5cblx0XHRcdFx0Ly8gY2hlY2sgdGhhdCBzZWxlY3RlZCB2YWx1ZXMgY29udGFpbiBleHBlY3RlZCBpZHNcblx0XHRcdFx0YXNzZXJ0Lm9rKCAkKCBkcm9wZG93bi5maW5kKCAnLnNlbGVjdC1ncmlkIHRyJyApLmxlbmd0aCA9PSAxICksICdyZW1vdmVkIHJlY29yZCBpcyBpbiBub3QgaW4gc2VsZWN0Z3JpZCcgKTsgLy8xIGJlY2F1c2Ugb2Ygc2l6ZXRyXG5cdFx0XHRcdGFzc2VydC5vayggZXhwZWN0ZWRJbkdyaWQoICd1bnNlbGVjdF9ncmlkJywgZHJvcGRvd24sIFtnZXRSb3dJZCggZmlyc3Rfcm93ICldICksICdyZW1vdmVkIHJlY29yZCBpcyBpbiB1bnNlbGVjdGdyaWQnICk7XG5cblx0XHRcdFx0Ly8gY2xlYXIgc2VhcmNoXG5cdFx0XHRcdGRyb3Bkb3duLmZpbmQoICcuc2VsZWN0LWdyaWQtc2VhcmNoLWRpdiAuY2xvc2UtYnRuJyApLnRyaWdnZXIoICdjbGljaycgKTtcblxuXHRcdFx0XHRUVFByb21pc2Uud2FpdCggbnVsbCwgbnVsbCwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZXhwZWN0ZWRfaWRzLnNwbGljZSggMCwgMSApOyAvLyByZW1vdmUgbW92ZWQgcmVjb3JkIGZyb20gZXhwZWN0ZWRfaWRzXG5cblx0XHRcdFx0XHQvLyBjaGVjayB0aGF0IHNlbGVjdGVkIHZhbHVlcyBjb250YWluIGV4cGVjdGVkIGlkc1xuXHRcdFx0XHRcdGFzc2VydC5vayggKCBleHBlY3RlZF9pZHMubGVuZ3RoID09IDMgKSwgJ2NvcnJlY3QgbnVtYmVyIG9mIGV4cGVjdGVkIHJlY29yZHMnICk7XG5cdFx0XHRcdFx0YXNzZXJ0Lm9rKCAoIGRyb3Bkb3duLmZpbmQoICcuc2VsZWN0LWdyaWQgdHInICkubGVuZ3RoID09IDQgKSwgJ2NvcnJlY3QgbnVtYmVyIG9mIHNlbGVjdGVkIHJvd3MnICk7XG5cdFx0XHRcdFx0YXNzZXJ0Lm9rKCBleHBlY3RlZEluR3JpZCggJ3NlbGVjdF9ncmlkJywgZHJvcGRvd24sIGV4cGVjdGVkX2lkcyApLCAnYWxsIGV4cGVjdGVkIHJlY29yZHMgYXJlIGluIHNlbGVjdGVkIGdyaWQnICk7XG5cblx0XHRcdFx0XHRkcm9wZG93bi5maW5kKCAnI3NlbGVjdF9ncmlkX2Nsb3NlX2J0bicgKS5jbGljaygpO1xuXHRcdFx0XHRcdGJveC5zZXRWYWx1ZSggW10gKTtcblxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0Ly9zdHJpcCBvdXQganFncmlkIHN0dWZmIGFuZCBnZXQgcm93IGlkXG5cdFx0ZnVuY3Rpb24gZ2V0Um93SWQoIHJvdyApIHtcblx0XHRcdGlmICggIXJvdyB8fCAhcm93LnByb3AgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCByb3cucHJvcCggJ2lkJyApLmluZGV4T2YoICdfJyApID09IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gcm93LnByb3AoICdpZCcgKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGlkX2FycmF5ID0gJCggcm93ICkucHJvcCggJ2lkJyApLnNwbGl0KCAnXycgKTtcblx0XHRcdHJldHVybiBpZF9hcnJheVtpZF9hcnJheS5sZW5ndGggLSAxXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBleHBlY3RlZEluR3JpZCggdGFyZ2V0X2dyaWRfbmFtZSwgZHJvcGRvd24sIGV4cGVjdGVkX2lkcyApIHtcblx0XHRcdHZhciBzZWxlY3RlZF9yb3dzID0gbnVsbDtcblx0XHRcdGlmICggdGFyZ2V0X2dyaWRfbmFtZSA9PSAnc2VsZWN0X2dyaWQnICkge1xuXHRcdFx0XHRzZWxlY3RlZF9yb3dzID0gZHJvcGRvd24uZmluZCggJy5zZWxlY3QtZ3JpZCB0cicgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGVkX3Jvd3MgPSBkcm9wZG93bi5maW5kKCAnLnVuc2VsZWN0LWdyaWQgdHInICk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgYWxsX2ZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0Zm9yICggdmFyIG4gPSAwOyBuIDwgZXhwZWN0ZWRfaWRzLmxlbmd0aDsgbisrICkge1xuXHRcdFx0XHR2YXIgaXNfZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRfcm93cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGV4cGVjdGVkX2lkc1tuXSA9PSBnZXRSb3dJZCggJCggc2VsZWN0ZWRfcm93c1tpXSApICkgKSB7XG5cdFx0XHRcdFx0XHRpc19mb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhaXNfZm91bmQgKSB7XG5cdFx0XHRcdFx0YWxsX2ZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxfZm91bmQ7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tNb3ZlQWxsU2NlbmFyaW8oIGJveCwgYXNzZXJ0LCBjYWxsYmFjayApIHtcblx0XHQvLyBvcGVuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRib3gudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFRUUHJvbWlzZS53YWl0KCAnQUNvbWJvQm94JywgJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkcm9wZG93biA9ICQoICcjdXNlcl9pZDJBRHJvcERvd24nICk7XG5cdFx0XHRpZiAoIGRyb3Bkb3duLmxlbmd0aCA9PSAwICkge1xuXHRcdFx0XHQvL3dhaXQgdW50aWwgY29tYm9ib3ggaXMgdmlzaWJsZSAoIHNvbWV0aW1lcyB0YWtlcyBsb25nZXIgdGhhbiBwcm9taXNlIClcblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JHRoaXMuY2hlY2tNb3ZlQWxsU2NlbmFyaW8oIGJveCwgYXNzZXJ0LCBjYWxsYmFjayApO1xuXHRcdFx0XHR9LCAxMDAwICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNoZWNrYm94ZXMgPSBkcm9wZG93bi5maW5kKCAnLnVuc2VsZWN0LWdyaWQtZGl2IC51aS1qcWdyaWQgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyApO1xuXG5cdFx0XHR2YXIgZXhwZWN0ZWRfaWRzID0gW107XG5cdFx0XHQvLyBzZWxlY3QgYSBjb3VwbGUgcmVjb3Jkc1xuXHRcdFx0JCggY2hlY2tib3hlc1sxXSApLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdCQoIGNoZWNrYm94ZXNbM10gKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cdFx0XHQkKCBjaGVja2JveGVzWzZdICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXHRcdFx0JCggY2hlY2tib3hlc1s3XSApLnRyaWdnZXIoICdjbGljaycgKTtcblxuXHRcdFx0Ly9ub3RlIHNlbGVjdGVkIGlkc1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzFdICkgKSApO1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzNdICkgKSApO1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzZdICkgKSApO1xuXHRcdFx0ZXhwZWN0ZWRfaWRzLnB1c2goIGdldFJvd0lkKCAkKCBjaGVja2JveGVzWzddICkgKSApO1xuXG5cdFx0XHQvLyBjbGljayBtb3ZlIGJ1dHRvblxuXHRcdFx0ZHJvcGRvd24uZmluZCggJy5hLWdyaWQtcmlnaHQtYXJyb3cnICkudHJpZ2dlciggJ2NsaWNrJyApO1xuXG5cdFx0XHQvLyBjaGVjayB0aGF0IHZpc2libGUgdmFsdWVzIGNvbnRhaW4gZXhwZWN0ZWQgaWRzXG5cdFx0XHRhc3NlcnQub2soIGV4cGVjdGVkSW5HcmlkKCAnc2VsZWN0X2dyaWQnLCBkcm9wZG93biwgZXhwZWN0ZWRfaWRzICksICdhbGwgZXhwZWN0ZWQgcmVjb3JkcyBhcmUgaW4gc2VsZWN0ZWQgZ3JpZCcgKTtcblxuXHRcdFx0Ly9jbGljayBcIm1vdmUgYWxsXCIgYnV0dG9uIHRvIHJlbW92ZSBhbGwgc2VsZWN0ZWQgcmVjb3Jkc1xuXHRcdFx0ZHJvcGRvd24uZmluZCggJy5zZWxlY3QtZ3JpZC10aXRsZS1iYXIgI2NsZWFyX2J0bicgKS50cmlnZ2VyKCAnY2xpY2snICk7XG5cblx0XHRcdFRUUHJvbWlzZS53YWl0KCBudWxsLCBudWxsLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZXhwZWN0ZWRfaWRzID0gW107XG5cblx0XHRcdFx0Ly8gY2hlY2sgdGhhdCBzZWxlY3RlZCB2YWx1ZXMgY29udGFpbiBleHBlY3RlZCBpZHNcblx0XHRcdFx0YXNzZXJ0Lm9rKCAoIGV4cGVjdGVkX2lkcy5sZW5ndGggPT0gMCApLCAnY29ycmVjdCBudW1iZXIgb2YgZXhwZWN0ZWQgcmVjb3JkcycgKTtcblx0XHRcdFx0YXNzZXJ0Lm9rKCAoIGRyb3Bkb3duLmZpbmQoICcuc2VsZWN0LWdyaWQgdHInICkubGVuZ3RoID09IDEgKSwgJ2NvcnJlY3QgbnVtYmVyIG9mIHNlbGVjdGVkIHJvd3MgKCB6ZXJvICknICk7IC8vIHRoZSAxIGlzIHNpemV0clxuXHRcdFx0XHRhc3NlcnQub2soIGV4cGVjdGVkSW5HcmlkKCAnc2VsZWN0X2dyaWQnLCBkcm9wZG93biwgZXhwZWN0ZWRfaWRzICksICd6ZXJvIHJlY29yZHMgYXJlIGluIHNlbGVjdGVkIGdyaWQnICk7XG5cblx0XHRcdFx0ZHJvcGRvd24uZmluZCggJyNzZWxlY3RfZ3JpZF9jbG9zZV9idG4nICkuY2xpY2soKTtcblx0XHRcdFx0Ym94LnNldFZhbHVlKCBbXSApO1xuXG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Um93SWQoIHJvdyApIHtcblx0XHRcdGlmICggIXJvdyB8fCAhcm93LnByb3AgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCByb3cucHJvcCggJ2lkJyApLmluZGV4T2YoICdfJyApID09IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gcm93LnByb3AoICdpZCcgKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGlkX2FycmF5ID0gJCggcm93ICkucHJvcCggJ2lkJyApLnNwbGl0KCAnXycgKTtcblx0XHRcdHJldHVybiBpZF9hcnJheVtpZF9hcnJheS5sZW5ndGggLSAxXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBleHBlY3RlZEluR3JpZCggdGFyZ2V0X2dyaWRfbmFtZSwgZHJvcGRvd24sIGV4cGVjdGVkX2lkcyApIHtcblx0XHRcdHZhciBzZWxlY3RlZF9yb3dzID0gbnVsbDtcblx0XHRcdGlmICggdGFyZ2V0X2dyaWRfbmFtZSA9PSAnc2VsZWN0X2dyaWQnICkge1xuXHRcdFx0XHRzZWxlY3RlZF9yb3dzID0gZHJvcGRvd24uZmluZCggJy5zZWxlY3QtZ3JpZCB0cicgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGVkX3Jvd3MgPSBkcm9wZG93bi5maW5kKCAnLnVuc2VsZWN0LWdyaWQgdHInICk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgYWxsX2ZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0Zm9yICggdmFyIG4gPSAwOyBuIDwgZXhwZWN0ZWRfaWRzLmxlbmd0aDsgbisrICkge1xuXHRcdFx0XHR2YXIgaXNfZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRfcm93cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGV4cGVjdGVkX2lkc1tuXSA9PSBnZXRSb3dJZCggJCggc2VsZWN0ZWRfcm93c1tpXSApICkgKSB7XG5cdFx0XHRcdFx0XHRpc19mb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhaXNfZm91bmQgKSB7XG5cdFx0XHRcdFx0YWxsX2ZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxfZm91bmQ7XG5cdFx0fVxuXHR9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6142\n')}}]);