1 line
73 KiB
JavaScript
1 line
73 KiB
JavaScript
"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["invoice-products-ProductViewController"],{1744:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ProductViewController\": () => (/* binding */ ProductViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass ProductViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#product_view_container',\n\n\t\t\ttype_array: null,\n\t\t\tapply_frequency_array: null,\n\t\t\tmonth_of_year_array: null,\n\t\t\tday_of_month_array: null,\n\t\t\tday_of_week_array: null,\n\t\t\tlength_of_service_unit_array: null,\n\t\t\tdate_api: null,\n\t\t\tgroup_api: null,\n\n\t\t\tproduct_price_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 = 'ProductEditView.html';\n\t\tthis.permission_id = 'product';\n\t\tthis.viewId = 'Product';\n\t\tthis.script_name = 'ProductView';\n\t\tthis.table_name_key = 'product';\n\t\tthis.context_menu_name = $.i18n._( 'Products' );\n\t\tthis.navigation_label = $.i18n._( 'Product' );\n\t\tthis.api = TTAPI.APIProduct;\n\t\tthis.date_api = TTAPI.APITTDate;\n\t\tthis.group_api = TTAPI.APIProductGroup;\n\t\tthis.product_price_api = TTAPI.APIProductPrice;\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: 'type', field_name: null, api: null },\n\t\t\t{ option_name: 'status', field_name: null, api: null },\n\t\t\t{ option_name: 'unit_price_type', field_name: null, api: null },\n\t\t\t{ option_name: 'weight_unit', field_name: null, api: null },\n\t\t\t{ option_name: 'dimension_unit', field_name: null, api: null },\n\t\t\t{ option_name: 'country', field_name: null, api: TTAPI.APICompany }\n\n\t\t];\n\n\t\tthis.initDropDownOptions( options, function( result ) {\n\n\t\t\t$this.group_api.getProductGroup( '', false, false, {\n\t\t\t\tonResult: function( res ) {\n\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tres = Global.buildTreeRecord( res );\n\n\t\t\t\t\tif ( !$this.edit_only_mode ) {\n\t\t\t\t\t\tif ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {\n\t\t\t\t\t\t\t$this.basic_search_field_ui_dic['group_id'].setSourceData( res );\n//\t\t\t\t\t\t$this.adv_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$this.group_array = res;\n\n\t\t\t\t\tif ( callBack ) {\n\t\t\t\t\t\tcallBack( result ); // First to initialize drop down options, and then to initialize edit view UI.\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t} );\n\t}\n\n\tbuildEditViewUI() {\n\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_product': { 'label': $.i18n._( 'Product' ) },\n\t\t\t'tab_pricing': {\n\t\t\t\t'label': $.i18n._( 'Pricing' ),\n\t\t\t\t'html_template': this.getProductPricingTabHtml()\n\t\t\t},\n\t\t\t'tab_shipping': { 'label': $.i18n._( 'Shipping' ) },\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tthis.navigation.AComboBox( {\n\t\t\tapi_class: TTAPI.APIProduct,\n\t\t\tid: this.script_name + '_navigation',\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_product',\n\t\t\tnavigation_mode: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\n\t\tthis.setNavigation();\n\n\t\t//Tab 0 start\n\n\t\tvar tab_product = this.edit_view_tab.find( '#tab_product' );\n\n\t\tvar tab_product_column1 = tab_product.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_product_column1 );\n\n\t\t//Type\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'type_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Type' ), form_item_input, tab_product_column1, '' );\n\n\t\t//Status\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'status_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.status_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_product_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.group_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Group' ), form_item_input, tab_product_column1 );\n\n\t\t//Part Number\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'part_number' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Part Number' ), form_item_input, tab_product_column1, '' );\n\n\t\t//Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'name', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Name' ), form_item_input, tab_product_column1, '' );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t//Description\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'description', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_product_column1, '' );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Lock Description\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'description_locked' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Lock Description' ), form_item_input, tab_product_column1 );\n\n\t\t//UPC\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'upc' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'UPC' ), form_item_input, tab_product_column1, '' );\n\n\t\t//Current Stock\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'quantity' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Current Stock' ), form_item_input, tab_product_column1, '' );\n\n\t\t// Include Tax Policy\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APITaxPolicy,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_tax_policy',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'include_tax_policy'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Include Tax Policy' ), form_item_input, tab_product_column1, '' );\n\n\t\t// Exclude Tax Policy\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APITaxPolicy,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_tax_policy',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'exclude_tax_policy'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Exclude Tax Policy' ), form_item_input, tab_product_column1, '' );\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: 900 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tags' ), form_item_input, tab_product_column1, '', null, null, true );\n\n\t\t//Tab 1 start\n\n\t\tvar tab_pricing = this.edit_view_tab.find( '#tab_pricing' );\n\n\t\tvar tab_pricing_column1 = tab_pricing.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[1] = [];\n\n\t\tthis.edit_view_tabs[1].push( tab_pricing_column1 );\n\n\t\t//Unit Cost\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'unit_cost', width: 80 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Unit Cost' ), form_item_input, tab_pricing_column1, '' );\n\n\t\t//Currency\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APICurrency,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_currency',\n\t\t\tshow_search_inputs: true,\n\t\t\tfield: 'currency_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Currency' ), form_item_input, tab_pricing_column1 );\n\n\t\t//Minimum Quantity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'minimum_purchase_quantity', width: 80 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Quantity' ), form_item_input, tab_pricing_column1, '' );\n\n\t\t//Maximum Quantity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'maximum_purchase_quantity', width: 80 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Maximum Quantity' ), form_item_input, tab_pricing_column1, '' );\n\n\t\t// Lock Price\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'price_locked' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Lock Price' ), form_item_input, tab_pricing_column1 );\n\n\t\t// Price Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'unit_price_type_id' } );\n\t\tform_item_input.setSourceData( $this.unit_price_type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Price Type' ), form_item_input, tab_pricing_column1, '' );\n\n\t\t//Unit Price\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'unit_price', width: 80 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Unit Price' ), form_item_input, tab_pricing_column1, '', null, true );\n\n\t\t//Inside editor\n\t\tvar inside_editor_div = tab_pricing.find( '.inside-editor-div' );\n\t\tvar args = {\n\t\t\tquantity: $.i18n._( 'Quantity' ),\n\t\t\tunit_price: $.i18n._( 'Unit Price' )\n\n\t\t};\n\n\t\tthis.editor = Global.loadWidgetByName( FormItemType.INSIDE_EDITOR );\n\n\t\tthis.editor.InsideEditor( {\n\t\t\taddRow: this.insideEditorAddRow,\n\t\t\tremoveRow: this.insideEditorRemoveRow,\n\t\t\tgetValue: this.insideEditorGetValue,\n\t\t\tsetValue: this.insideEditorSetValue,\n\t\t\trender: getRender(),\n\t\t\trender_args: args,\n\t\t\trender_inline_html: true,\n\t\t\trow_render: getRowRender(),\n\t\t\tparent_controller: this\n\t\t} );\n\n\t\tfunction getRender() {\n\t\t\treturn `\n\t\t\t\t<table class=\"inside-editor-render\">\n\t\t\t\t\t<tr class=\"title\">\n\t\t\t\t\t\t<td style=\"width: 200px\"><%= quantity %></td>\n\t\t\t\t\t\t<td style=\"width: 200px\"><%= unit_price %></td>\n\t\t\t\t\t\t<td style=\"width: 25px\"></td>\n\t\t\t\t\t\t<td style=\"width: 25px\"></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>`;\n\t\t}\n\n\t\tfunction getRowRender() {\n\t\t\treturn `\n\t\t\t<tr class=\"inside-editor-row data-row\">\n\t\t\t\t<td class=\"quantity cell\"></td>\n\t\t\t\t<td class=\"unit-price cell\"></td>\n\t\t\t\t<td class=\"cell control-icon\">\n\t\t\t\t\t<button class=\"plus-icon\" onclick=\"\"></button>\n\t\t\t\t</td>\n\t\t\t\t<td class=\"cell control-icon\">\n\t\t\t\t\t<button class=\"minus-icon \" onclick=\"\"></button>\n\t\t\t\t</td>\n\t\t\t</tr>`;\n\t\t}\n\n\t\tinside_editor_div.append( this.editor );\n\n\t\t//Tab 2 start\n\n\t\tvar tab_shipping = this.edit_view_tab.find( '#tab_shipping' );\n\n\t\tvar tab_shipping_column1 = tab_shipping.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[2] = [];\n\n\t\tthis.edit_view_tabs[2].push( tab_shipping_column1 );\n\n\t\t// Weight Unit\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'weight_unit_id' } );\n\t\tform_item_input.setSourceData( $this.weight_unit_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Weight Unit' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t//Weight\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'weight' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Weight' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t// Dimension Unit\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'dimension_unit_id' } );\n\t\tform_item_input.setSourceData( $this.dimension_unit_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Dimension Unit' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t//Length\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'dimension_length' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Length' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t//Width\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'dimension_width' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Width' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t//Height\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'dimension_height' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Height' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t// Country\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'origin_country', set_empty: true } );\n\t\tform_item_input.setSourceData( $this.country_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Origin Country' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t//Tariff Code\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'tariff_code' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tariff Code' ), form_item_input, tab_shipping_column1, '' );\n\n\t\t//Custom Unit Value\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'customs_unit_value' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Custom Unit Value' ), form_item_input, tab_shipping_column1, '' );\n\t}\n\n\tonTypeChange() {\n\n\t\tif ( this.current_edit_record['type_id'] != 10 && this.current_edit_record.type_id != 62 ) {\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\n\t\t\tif ( this.getEditViewTabIndex() == 2 ) {\n\t\t\t\tthis.edit_view_tab.tabs( 'option', 'active', 0 );\n\t\t\t}\n\n\t\t} else {\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).show();\n\t\t}\n\n\t\tif ( ( this.current_edit_record['unit_price_type_id'] == 20 ||\n\t\t\tthis.current_edit_record.unit_price_type_id == 30 ) && !this.is_mass_editing ) {\n\n\t\t\tthis.detachElement( 'unit_price' );\n\t\t\tthis.editor.css( 'display', 'block' );\n\n\t\t} else {\n\n\t\t\tthis.attachElement( 'unit_price' );\n\t\t\tthis.editor.css( 'display', 'none' );\n\t\t}\n\n\t\tthis.editFieldResize();\n\t}\n\n\tonFormItemChange( target, doNotValidate ) {\n\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\t\tvar c_value = target.getValue();\n\t\tthis.current_edit_record[key] = c_value;\n\t\tif ( key === 'type_id' || key === 'unit_price_type_id' ) {\n\n\t\t\tthis.onTypeChange();\n\t\t}\n\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\tinsideEditorSetValue( val ) {\n\t\tvar len = val.length;\n\n\t\tthis.removeAllRows();\n\t\tfor ( var i = 0; i < val.length; i++ ) {\n\t\t\tif ( Global.isSet( val[i] ) ) {\n\t\t\t\tvar row = val[i];\n\t\t\t\trow['accrual_rate'] = Global.getTimeUnit( row['accrual_rate'] );\n\t\t\t\trow['maximum_time'] = Global.getTimeUnit( row['maximum_time'] );\n\t\t\t\trow['rollover_time'] = Global.getTimeUnit( row['rollover_time'] );\n\t\t\t\tif ( Global.isSet( this.parent_id ) ) {\n\t\t\t\t\trow['id'] = '';\n\t\t\t\t}\n\t\t\t\tthis.addRow( row );\n\t\t\t}\n\n\t\t}\n\t}\n\n\tinsideEditorAddRow( data, index ) {\n\n\t\tif ( !data ) {\n\t\t\tdata = {};\n\t\t}\n\n\t\tvar $this = this;\n\t\tvar row = this.getRowRender(); //Get Row render\n\t\tvar render = this.getRender(); //get render, should be a table\n\t\tvar widgets = {}; //Save each row's widgets\n\n\t\tvar form_item_input;\n\t\tvar widgetContainer;\n\t\tvar label;\n\n\t\t//Build row widgets\n\n\t\t// Quantity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'quantity', width: 60 } );\n\t\tform_item_input.setValue( data.quantity ? data.quantity : 0 );\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'or more' ) + '</span>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\n\t\twidgets[form_item_input.getField()] = form_item_input;\n\t\trow.children().eq( 0 ).append( widgetContainer );\n\n\t\tthis.setWidgetEnableBaseOnParentController( form_item_input );\n\n\t\t// Unit Price\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'unit_price', width: 60 } );\n\t\tform_item_input.setValue( data.unit_price ? data.unit_price : '0.00' );\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\n\t\twidgetContainer.append( form_item_input );\n\n\t\twidgets[form_item_input.getField()] = form_item_input;\n\t\trow.children().eq( 1 ).append( widgetContainer );\n\n\t\tthis.setWidgetEnableBaseOnParentController( form_item_input );\n\n\t\twidgets.current_edit_item = data;\n\n\t\tif ( !this.parent_controller.current_edit_record.id ) {\n\t\t\twidgets.current_edit_item.id = '';\n\t\t}\n\n\t\tif ( typeof index != 'undefined' ) {\n\n\t\t\trow.insertAfter( $( render ).find( 'tr' ).eq( index ) );\n\t\t\tthis.rows_widgets_array.splice( ( index ), 0, widgets );\n\n\t\t} else {\n\t\t\t$( render ).append( row );\n\t\t\tthis.rows_widgets_array.push( widgets );\n\t\t}\n\t\tif ( this.parent_controller.is_viewing ) {\n\t\t\trow.find( '.control-icon' ).hide();\n\t\t}\n\n\t\tthis.addIconsEvent( row ); //Bind event to add and minus icon\n\t\tthis.removeLastRowLine();\n\t}\n\n\tinsideEditorRemoveRow( row ) {\n\t\tvar index = row[0].rowIndex - 1;\n\t\tvar remove_id = this.rows_widgets_array[index].current_edit_item.id;\n\t\tif ( TTUUID.isUUID( remove_id ) && remove_id != TTUUID.zero_id && remove_id != TTUUID.not_exist_id ) {\n\t\t\tthis.delete_ids.push( remove_id );\n\t\t}\n\t\trow.remove();\n\t\tthis.rows_widgets_array.splice( index, 1 );\n\t\tthis.removeLastRowLine();\n\t}\n\n\tinsideEditorGetValue( current_edit_item_id ) {\n\t\tvar len = this.rows_widgets_array.length;\n\t\tvar result = [];\n\n\t\tfor ( var i = 0; i < len; i++ ) {\n\t\t\tvar row = this.rows_widgets_array[i];\n\t\t\tvar data = row.current_edit_item;\n\t\t\tdata.quantity = row.quantity.getValue();\n\t\t\tdata.unit_price = row.unit_price.getValue();\n\t\t\tdata.product_id = current_edit_item_id;\n\t\t\tresult.push( data );\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tsetEditViewDataDone() {\n\t\tsuper.setEditViewDataDone();\n\t\tthis.onTypeChange();\n\t\tthis.initInsideEditorData();\n\t}\n\n\tinitInsideEditorData() {\n\t\tvar $this = this;\n\t\tvar args = {};\n\t\targs.filter_data = {};\n\n\t\tif ( ( !this.current_edit_record || !this.current_edit_record.id ) && !this.copied_record_id ) {\n\t\t\t$this.editor.removeAllRows();\n\t\t\t$this.editor.addRow();\n\n\t\t} else {\n\t\t\targs.filter_data.product_id = this.current_edit_record.id ? this.current_edit_record.id : this.copied_record_id;\n\t\t\tthis.copied_record_id = '';\n\t\t\tthis.product_price_api.getProductPrice( args, true, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tif ( !$this.edit_view ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar data = res.getResult();\n\t\t\t\t\tif ( data === true ) { // result is null\n\t\t\t\t\t\t$this.editor.addRow();\n\t\t\t\t\t} else if ( data.length > 0 ) {\n\t\t\t\t\t\t$this.editor.setValue( data );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tsaveInsideEditorData( callBack ) {\n\t\tif ( ( this.current_edit_record['unit_price_type_id'] != 20 &&\n\t\t\tthis.current_edit_record.unit_price_type_id != 30 ) || this.is_mass_editing ) {\n\t\t\tif ( Global.isSet( callBack ) ) {\n\t\t\t\tcallBack();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar $this = this;\n\t\tvar data = this.editor.getValue( this.refresh_id );\n\t\tvar remove_ids = $this.editor.delete_ids;\n\t\tif ( remove_ids.length > 0 ) {\n\t\t\t$this.product_price_api.deleteProductPrice( remove_ids, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tif ( res.isValid() ) {\n\t\t\t\t\t\t$this.editor.delete_ids = [];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t$this.product_price_api.setProductPrice( data, {\n\t\t\tonResult: function( res ) {\n\t\t\t\tvar res_data = res.getResult();\n\t\t\t\tif ( Global.isSet( callBack ) ) {\n\t\t\t\t\tcallBack();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\tonSaveResult( result ) {\n\t\tvar $this = this;\n\t\tif ( result.isValid() ) {\n\t\t\tvar result_data = result.getResult();\n\t\t\tif ( result_data === true ) {\n\t\t\t\t$this.refresh_id = $this.current_edit_record.id; // as add\n\t\t\t} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) { // as new\n\t\t\t\t$this.refresh_id = result_data;\n\t\t\t}\n\n\t\t\t$this.saveInsideEditorData( function() {\n\t\t\t\t$this.search();\n\t\t\t\t$this.onSaveDone( result );\n\n\t\t\t\t$this.removeEditView();\n\t\t\t} );\n\n\t\t} else {\n\t\t\t$this.setErrorTips( result );\n\t\t\t$this.setErrorMenu();\n\t\t}\n\t}\n\n\t// onSaveAndContinueResult( result ) {\n\t//\n\t// \tvar $this = this;\n\t// \tif ( result.isValid() ) {\n\t// \t\tvar result_data = result.getResult();\n\t// \t\tif ( result_data === true ) {\n\t// \t\t\t$this.refresh_id = $this.current_edit_record.id;\n\t//\n\t// \t\t} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) { // as new\n\t// \t\t\t$this.refresh_id = result_data;\n\t// \t\t}\n\t//\n\t// \t\t$this.saveInsideEditorData( function() {\n\t// \t\t\t$this.search( false );\n\t// \t\t\t$this.onEditClick( $this.refresh_id, true );\n\t//\n\t// \t\t\t$this.onSaveAndContinueDone( result );\n\t//\n\t// \t\t} );\n\t//\n\t// \t} else {\n\t// \t\t$this.setErrorTips( result );\n\t// \t\t$this.setErrorMenu();\n\t// \t}\n\t// },\n\n\t// onSaveAndNewResult: function( result ) {\n\t// \tvar $this = this;\n\t// \tif ( result.isValid() ) {\n\t// \t\tvar result_data = result.getResult();\n\t// \t\tif ( result_data === true ) {\n\t// \t\t\t$this.refresh_id = $this.current_edit_record.id;\n\t//\n\t// \t\t} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) { // as new\n\t// \t\t\t$this.refresh_id = result_data;\n\t// \t\t}\n\t//\n\t// \t\t$this.saveInsideEditorData( function() {\n\t// \t\t\t$this.search( false );\n\t// \t\t\t$this.onAddClick( true );\n\t//\n\t// \t\t} );\n\t// \t} else {\n\t// \t\t$this.setErrorTips( result );\n\t// \t\t$this.setErrorMenu();\n\t// \t}\n\t// },\n\n\tonSaveAndCopyResult( result ) {\n\t\tvar $this = this;\n\t\tif ( result.isValid() ) {\n\t\t\tvar result_data = result.getResult();\n\t\t\tif ( result_data === true ) {\n\t\t\t\t$this.refresh_id = $this.current_edit_record.id;\n\n\t\t\t} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) {\n\t\t\t\t$this.refresh_id = result_data;\n\t\t\t}\n\n\t\t\t$this.saveInsideEditorData( function() {\n\t\t\t\t$this.search( false );\n\t\t\t\t$this.onCopyAsNewClick();\n\n\t\t\t} );\n\n\t\t} else {\n\t\t\t$this.setErrorTips( result );\n\t\t\t$this.setErrorMenu();\n\t\t}\n\t}\n\n\t// onSaveAndNextResult( result ) {\n\t// \tvar $this = this;\n\t// \tif ( result.isValid() ) {\n\t// \t\tvar result_data = result.getResult();\n\t// \t\tif ( result_data === true ) {\n\t// \t\t\t$this.refresh_id = $this.current_edit_record.id;\n\t//\n\t// \t\t} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) {\n\t// \t\t\t$this.refresh_id = result_data;\n\t// \t\t}\n\t//\n\t// \t\t$this.saveInsideEditorData( function() {\n\t// \t\t\t$this.onRightArrowClick();\n\t// \t\t\t$this.search( false );\n\t// \t\t\t$this.onSaveAndNextDone( result );\n\t//\n\t// \t\t} );\n\t//\n\t// \t} else {\n\t// \t\t$this.setErrorTips( result );\n\t// \t\t$this.setErrorMenu();\n\t// \t}\n\t// },\n\n\t_continueDoCopyAsNew() {\n\t\tthis.setCurrentEditViewState( 'new' );\n\t\tLocalCacheData.current_doing_context_action = 'copy_as_new';\n\n\t\tif ( Global.isSet( this.edit_view ) ) {\n\t\t\tfor ( var i = 0; i < this.editor.rows_widgets_array.length; i++ ) {\n\t\t\t\tthis.editor.rows_widgets_array[i].current_edit_item.id = '';\n\t\t\t}\n\t\t}\n\t\tsuper._continueDoCopyAsNew();\n\t}\n\n\tonCopyAsNewResult( result ) {\n\t\tvar $this = this;\n\t\tvar result_data = result.getResult();\n\n\t\tif ( !result_data ) {\n\t\t\tTAlertManager.showAlert( $.i18n._( 'Record does not exist' ) );\n\t\t\t$this.onCancelClick();\n\t\t\treturn;\n\t\t}\n\n\t\t$this.openEditView(); // Put it here is to avoid if the selected one is not existed in data or have deleted by other pragram. in this case, the edit view should not be opend.\n\n\t\tresult_data = result_data[0];\n\t\tthis.copied_record_id = result_data.id;\n\t\tresult_data.id = '';\n\n\t\tif ( $this.sub_view_mode && $this.parent_key ) {\n\t\t\tresult_data[$this.parent_key] = $this.parent_value;\n\t\t}\n\n\t\t$this.current_edit_record = result_data;\n\t\t$this.initEditView();\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\t\tthis.search_fields = [\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'name',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Type' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'type_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( '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: false,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Group' ),\n\t\t\t\tin_column: 1,\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: false,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Tags' ),\n\t\t\t\tfield: 'tag',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tin_column: 1,\n\t\t\t\tobject_type_id: 900,\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._( 'Part Number' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'part_number',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Description' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'description',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Created By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'created_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Updated By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'updated_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n\tgetProductPricingTabHtml() {\n\t\treturn `<div id=\"tab_pricing\" class=\"edit-view-tab-outside\">\n\t\t\t\t\t<div class=\"edit-view-tab\" id=\"tab_pricing_content_div\">\n\t\t\t\t\t\t<div class=\"first-column full-width-column\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"inside-editor-div full-width-column\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>`;\n\t}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QSw0QkFBNEIsQ0FBQztBQUM3QjtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2ludGVyZmFjZS9odG1sNS92aWV3cy9pbnZvaWNlL3Byb2R1Y3RzL1Byb2R1Y3RWaWV3Q29udHJvbGxlci5qcz9iYTQ3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBQcm9kdWN0Vmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlVmlld0NvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3Rvciggb3B0aW9ucyA9IHt9ICkge1xuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGVsOiAnI3Byb2R1Y3Rfdmlld19jb250YWluZXInLFxuXG5cdFx0XHR0eXBlX2FycmF5OiBudWxsLFxuXHRcdFx0YXBwbHlfZnJlcXVlbmN5X2FycmF5OiBudWxsLFxuXHRcdFx0bW9udGhfb2ZfeWVhcl9hcnJheTogbnVsbCxcblx0XHRcdGRheV9vZl9tb250aF9hcnJheTogbnVsbCxcblx0XHRcdGRheV9vZl93ZWVrX2FycmF5OiBudWxsLFxuXHRcdFx0bGVuZ3RoX29mX3NlcnZpY2VfdW5pdF9hcnJheTogbnVsbCxcblx0XHRcdGRhdGVfYXBpOiBudWxsLFxuXHRcdFx0Z3JvdXBfYXBpOiBudWxsLFxuXG5cdFx0XHRwcm9kdWN0X3ByaWNlX2FwaTogbnVsbFxuXHRcdH0gKTtcblxuXHRcdHN1cGVyKCBvcHRpb25zICk7XG5cdH1cblxuXHRpbml0KCBvcHRpb25zICkge1xuXHRcdC8vdGhpcy5fc3VwZXIoJ2luaXRpYWxpemUnLCBvcHRpb25zICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdHBsID0gJ1Byb2R1Y3RFZGl0Vmlldy5odG1sJztcblx0XHR0aGlzLnBlcm1pc3Npb25faWQgPSAncHJvZHVjdCc7XG5cdFx0dGhpcy52aWV3SWQgPSAnUHJvZHVjdCc7XG5cdFx0dGhpcy5zY3JpcHRfbmFtZSA9ICdQcm9kdWN0Vmlldyc7XG5cdFx0dGhpcy50YWJsZV9uYW1lX2tleSA9ICdwcm9kdWN0Jztcblx0XHR0aGlzLmNvbnRleHRfbWVudV9uYW1lID0gJC5pMThuLl8oICdQcm9kdWN0cycgKTtcblx0XHR0aGlzLm5hdmlnYXRpb25fbGFiZWwgPSAkLmkxOG4uXyggJ1Byb2R1Y3QnICk7XG5cdFx0dGhpcy5hcGkgPSBUVEFQSS5BUElQcm9kdWN0O1xuXHRcdHRoaXMuZGF0ZV9hcGkgPSBUVEFQSS5BUElUVERhdGU7XG5cdFx0dGhpcy5ncm91cF9hcGkgPSBUVEFQSS5BUElQcm9kdWN0R3JvdXA7XG5cdFx0dGhpcy5wcm9kdWN0X3ByaWNlX2FwaSA9IFRUQVBJLkFQSVByb2R1Y3RQcmljZTtcblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH1cblxuXHRpbml0T3B0aW9ucyggY2FsbEJhY2sgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgb3B0aW9ucyA9IFtcblx0XHRcdHsgb3B0aW9uX25hbWU6ICd0eXBlJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnc3RhdHVzJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAndW5pdF9wcmljZV90eXBlJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnd2VpZ2h0X3VuaXQnLCBmaWVsZF9uYW1lOiBudWxsLCBhcGk6IG51bGwgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdkaW1lbnNpb25fdW5pdCcsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2NvdW50cnknLCBmaWVsZF9uYW1lOiBudWxsLCBhcGk6IFRUQVBJLkFQSUNvbXBhbnkgfVxuXG5cdFx0XTtcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9ucyggb3B0aW9ucywgZnVuY3Rpb24oIHJlc3VsdCApIHtcblxuXHRcdFx0JHRoaXMuZ3JvdXBfYXBpLmdldFByb2R1Y3RHcm91cCggJycsIGZhbHNlLCBmYWxzZSwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblxuXHRcdFx0XHRcdHJlcyA9IHJlcy5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRyZXMgPSBHbG9iYWwuYnVpbGRUcmVlUmVjb3JkKCByZXMgKTtcblxuXHRcdFx0XHRcdGlmICggISR0aGlzLmVkaXRfb25seV9tb2RlICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhJHRoaXMuc3ViX3ZpZXdfbW9kZSAmJiAkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddICkge1xuXHRcdFx0XHRcdFx0XHQkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddLnNldFNvdXJjZURhdGEoIHJlcyApO1xuLy9cdFx0XHRcdFx0XHQkdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snZ3JvdXBfaWQnXS5zZXRTb3VyY2VEYXRhKCByZXMgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0JHRoaXMuZ3JvdXBfYXJyYXkgPSByZXM7XG5cblx0XHRcdFx0XHRpZiAoIGNhbGxCYWNrICkge1xuXHRcdFx0XHRcdFx0Y2FsbEJhY2soIHJlc3VsdCApOyAvLyBGaXJzdCB0byBpbml0aWFsaXplIGRyb3AgZG93biBvcHRpb25zLCBhbmQgdGhlbiB0byBpbml0aWFsaXplIGVkaXQgdmlldyBVSS5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXG5cdFx0fSApO1xuXHR9XG5cblx0YnVpbGRFZGl0Vmlld1VJKCkge1xuXG5cdFx0c3VwZXIuYnVpbGRFZGl0Vmlld1VJKCk7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHRhYl9tb2RlbCA9IHtcblx0XHRcdCd0YWJfcHJvZHVjdCc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdQcm9kdWN0JyApIH0sXG5cdFx0XHQndGFiX3ByaWNpbmcnOiB7XG5cdFx0XHRcdCdsYWJlbCc6ICQuaTE4bi5fKCAnUHJpY2luZycgKSxcblx0XHRcdFx0J2h0bWxfdGVtcGxhdGUnOiB0aGlzLmdldFByb2R1Y3RQcmljaW5nVGFiSHRtbCgpXG5cdFx0XHR9LFxuXHRcdFx0J3RhYl9zaGlwcGluZyc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdTaGlwcGluZycgKSB9LFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdHRoaXMubmF2aWdhdGlvbi5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJUHJvZHVjdCxcblx0XHRcdGlkOiB0aGlzLnNjcmlwdF9uYW1lICsgJ19uYXZpZ2F0aW9uJyxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9wcm9kdWN0Jyxcblx0XHRcdG5hdmlnYXRpb25fbW9kZTogdHJ1ZSxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuc2V0TmF2aWdhdGlvbigpO1xuXG5cdFx0Ly9UYWIgMCBzdGFydFxuXG5cdFx0dmFyIHRhYl9wcm9kdWN0ID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3Byb2R1Y3QnICk7XG5cblx0XHR2YXIgdGFiX3Byb2R1Y3RfY29sdW1uMSA9IHRhYl9wcm9kdWN0LmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXS5wdXNoKCB0YWJfcHJvZHVjdF9jb2x1bW4xICk7XG5cblx0XHQvL1R5cGVcblx0XHR2YXIgZm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICd0eXBlX2lkJywgc2V0X2VtcHR5OiBmYWxzZSB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnR5cGVfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1R5cGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Byb2R1Y3RfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vU3RhdHVzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdzdGF0dXNfaWQnLCBzZXRfZW1wdHk6IGZhbHNlIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuc3RhdHVzX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdTdGF0dXMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Byb2R1Y3RfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vR3JvdXBcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdHJlZV9jb2x1bW4nLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdncm91cF9pZCdcblx0XHR9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmdyb3VwX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdHcm91cCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJvZHVjdF9jb2x1bW4xICk7XG5cblx0XHQvL1BhcnQgTnVtYmVyXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ3BhcnRfbnVtYmVyJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdQYXJ0IE51bWJlcicgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJvZHVjdF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly9OYW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ25hbWUnLCB3aWR0aDogJzEwMCUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ05hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Byb2R1Y3RfY29sdW1uMSwgJycgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5wYXJlbnQoKS53aWR0aCggJzQ1JScgKTtcblxuXHRcdC8vRGVzY3JpcHRpb25cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnZGVzY3JpcHRpb24nLCB3aWR0aDogJzEwMCUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0Rlc2NyaXB0aW9uJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wcm9kdWN0X2NvbHVtbjEsICcnICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQucGFyZW50KCkud2lkdGgoICc0NSUnICk7XG5cblx0XHQvLyBMb2NrIERlc2NyaXB0aW9uXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ2hlY2tib3goIHsgZmllbGQ6ICdkZXNjcmlwdGlvbl9sb2NrZWQnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0xvY2sgRGVzY3JpcHRpb24nICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Byb2R1Y3RfY29sdW1uMSApO1xuXG5cdFx0Ly9VUENcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAndXBjJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdVUEMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Byb2R1Y3RfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vQ3VycmVudCBTdG9ja1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdxdWFudGl0eScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQ3VycmVudCBTdG9jaycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJvZHVjdF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gSW5jbHVkZSBUYXggUG9saWN5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElUYXhQb2xpY3ksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF90YXhfcG9saWN5Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnaW5jbHVkZV90YXhfcG9saWN5J1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0luY2x1ZGUgVGF4IFBvbGljeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJvZHVjdF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gRXhjbHVkZSBUYXggUG9saWN5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElUYXhQb2xpY3ksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF90YXhfcG9saWN5Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnZXhjbHVkZV90YXhfcG9saWN5J1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0V4Y2x1ZGUgVGF4IFBvbGljeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJvZHVjdF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly9UYWdzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5UQUdfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGFnSW5wdXQoIHsgZmllbGQ6ICd0YWcnLCBvYmplY3RfdHlwZV9pZDogOTAwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1RhZ3MnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Byb2R1Y3RfY29sdW1uMSwgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdC8vVGFiIDEgc3RhcnRcblxuXHRcdHZhciB0YWJfcHJpY2luZyA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9wcmljaW5nJyApO1xuXG5cdFx0dmFyIHRhYl9wcmljaW5nX2NvbHVtbjEgPSB0YWJfcHJpY2luZy5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMV0ucHVzaCggdGFiX3ByaWNpbmdfY29sdW1uMSApO1xuXG5cdFx0Ly9Vbml0IENvc3Rcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAndW5pdF9jb3N0Jywgd2lkdGg6IDgwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1VuaXQgQ29zdCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJpY2luZ19jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly9DdXJyZW5jeVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJQ3VycmVuY3ksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfY3VycmVuY3knLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdjdXJyZW5jeV9pZCdcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDdXJyZW5jeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJpY2luZ19jb2x1bW4xICk7XG5cblx0XHQvL01pbmltdW0gUXVhbnRpdHlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnbWluaW11bV9wdXJjaGFzZV9xdWFudGl0eScsIHdpZHRoOiA4MCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNaW5pbXVtIFF1YW50aXR5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wcmljaW5nX2NvbHVtbjEsICcnICk7XG5cblx0XHQvL01heGltdW0gUXVhbnRpdHlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnbWF4aW11bV9wdXJjaGFzZV9xdWFudGl0eScsIHdpZHRoOiA4MCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNYXhpbXVtIFF1YW50aXR5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wcmljaW5nX2NvbHVtbjEsICcnICk7XG5cblx0XHQvLyBMb2NrIFByaWNlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ2hlY2tib3goIHsgZmllbGQ6ICdwcmljZV9sb2NrZWQnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0xvY2sgUHJpY2UnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ByaWNpbmdfY29sdW1uMSApO1xuXG5cdFx0Ly8gUHJpY2UgVHlwZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAndW5pdF9wcmljZV90eXBlX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnVuaXRfcHJpY2VfdHlwZV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUHJpY2UgVHlwZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJpY2luZ19jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly9Vbml0IFByaWNlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ3VuaXRfcHJpY2UnLCB3aWR0aDogODAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnVW5pdCBQcmljZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcHJpY2luZ19jb2x1bW4xLCAnJywgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Ly9JbnNpZGUgZWRpdG9yXG5cdFx0dmFyIGluc2lkZV9lZGl0b3JfZGl2ID0gdGFiX3ByaWNpbmcuZmluZCggJy5pbnNpZGUtZWRpdG9yLWRpdicgKTtcblx0XHR2YXIgYXJncyA9IHtcblx0XHRcdHF1YW50aXR5OiAkLmkxOG4uXyggJ1F1YW50aXR5JyApLFxuXHRcdFx0dW5pdF9wcmljZTogJC5pMThuLl8oICdVbml0IFByaWNlJyApXG5cblx0XHR9O1xuXG5cdFx0dGhpcy5lZGl0b3IgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLklOU0lERV9FRElUT1IgKTtcblxuXHRcdHRoaXMuZWRpdG9yLkluc2lkZUVkaXRvcigge1xuXHRcdFx0YWRkUm93OiB0aGlzLmluc2lkZUVkaXRvckFkZFJvdyxcblx0XHRcdHJlbW92ZVJvdzogdGhpcy5pbnNpZGVFZGl0b3JSZW1vdmVSb3csXG5cdFx0XHRnZXRWYWx1ZTogdGhpcy5pbnNpZGVFZGl0b3JHZXRWYWx1ZSxcblx0XHRcdHNldFZhbHVlOiB0aGlzLmluc2lkZUVkaXRvclNldFZhbHVlLFxuXHRcdFx0cmVuZGVyOiBnZXRSZW5kZXIoKSxcblx0XHRcdHJlbmRlcl9hcmdzOiBhcmdzLFxuXHRcdFx0cmVuZGVyX2lubGluZV9odG1sOiB0cnVlLFxuXHRcdFx0cm93X3JlbmRlcjogZ2V0Um93UmVuZGVyKCksXG5cdFx0XHRwYXJlbnRfY29udHJvbGxlcjogdGhpc1xuXHRcdH0gKTtcblxuXHRcdGZ1bmN0aW9uIGdldFJlbmRlcigpIHtcblx0XHRcdHJldHVybiBgXG5cdFx0XHRcdDx0YWJsZSBjbGFzcz1cImluc2lkZS1lZGl0b3ItcmVuZGVyXCI+XG5cdFx0XHRcdFx0PHRyIGNsYXNzPVwidGl0bGVcIj5cblx0XHRcdFx0XHRcdDx0ZCBzdHlsZT1cIndpZHRoOiAyMDBweFwiPjwlPSBxdWFudGl0eSAlPjwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgc3R5bGU9XCJ3aWR0aDogMjAwcHhcIj48JT0gdW5pdF9wcmljZSAlPjwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgc3R5bGU9XCJ3aWR0aDogMjVweFwiPjwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgc3R5bGU9XCJ3aWR0aDogMjVweFwiPjwvdGQ+XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90YWJsZT5gO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFJvd1JlbmRlcigpIHtcblx0XHRcdHJldHVybiBgXG5cdFx0XHQ8dHIgY2xhc3M9XCJpbnNpZGUtZWRpdG9yLXJvdyBkYXRhLXJvd1wiPlxuXHRcdFx0XHQ8dGQgY2xhc3M9XCJxdWFudGl0eSBjZWxsXCI+PC90ZD5cblx0XHRcdFx0PHRkIGNsYXNzPVwidW5pdC1wcmljZSBjZWxsXCI+PC90ZD5cblx0XHRcdFx0PHRkIGNsYXNzPVwiY2VsbCBjb250cm9sLWljb25cIj5cblx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzPVwicGx1cy1pY29uXCIgb25jbGljaz1cIlwiPjwvYnV0dG9uPlxuXHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHQ8dGQgY2xhc3M9XCJjZWxsIGNvbnRyb2wtaWNvblwiPlxuXHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJtaW51cy1pY29uIFwiIG9uY2xpY2s9XCJcIj48L2J1dHRvbj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdDwvdHI+YDtcblx0XHR9XG5cblx0XHRpbnNpZGVfZWRpdG9yX2Rpdi5hcHBlbmQoIHRoaXMuZWRpdG9yICk7XG5cblx0XHQvL1RhYiAyIHN0YXJ0XG5cblx0XHR2YXIgdGFiX3NoaXBwaW5nID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3NoaXBwaW5nJyApO1xuXG5cdFx0dmFyIHRhYl9zaGlwcGluZ19jb2x1bW4xID0gdGFiX3NoaXBwaW5nLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1syXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1syXS5wdXNoKCB0YWJfc2hpcHBpbmdfY29sdW1uMSApO1xuXG5cdFx0Ly8gV2VpZ2h0IFVuaXRcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3dlaWdodF91bml0X2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLndlaWdodF91bml0X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdXZWlnaHQgVW5pdCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vV2VpZ2h0XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ3dlaWdodCcgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnV2VpZ2h0JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9zaGlwcGluZ19jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gRGltZW5zaW9uIFVuaXRcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2RpbWVuc2lvbl91bml0X2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmRpbWVuc2lvbl91bml0X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEaW1lbnNpb24gVW5pdCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vTGVuZ3RoXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2RpbWVuc2lvbl9sZW5ndGgnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0xlbmd0aCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vV2lkdGhcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnZGltZW5zaW9uX3dpZHRoJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdXaWR0aCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vSGVpZ2h0XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2RpbWVuc2lvbl9oZWlnaHQnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0hlaWdodCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vIENvdW50cnlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ29yaWdpbl9jb3VudHJ5Jywgc2V0X2VtcHR5OiB0cnVlIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuY291bnRyeV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnT3JpZ2luIENvdW50cnknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3NoaXBwaW5nX2NvbHVtbjEsICcnICk7XG5cblx0XHQvL1RhcmlmZiBDb2RlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ3RhcmlmZl9jb2RlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdUYXJpZmYgQ29kZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblxuXHRcdC8vQ3VzdG9tIFVuaXQgVmFsdWVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnY3VzdG9tc191bml0X3ZhbHVlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDdXN0b20gVW5pdCBWYWx1ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2hpcHBpbmdfY29sdW1uMSwgJycgKTtcblx0fVxuXG5cdG9uVHlwZUNoYW5nZSgpIHtcblxuXHRcdGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd0eXBlX2lkJ10gIT0gMTAgJiYgdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLnR5cGVfaWQgIT0gNjIgKSB7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuaGlkZSgpO1xuXG5cdFx0XHRpZiAoIHRoaXMuZ2V0RWRpdFZpZXdUYWJJbmRleCgpID09IDIgKSB7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3RhYi50YWJzKCAnb3B0aW9uJywgJ2FjdGl2ZScsIDAgKTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuc2hvdygpO1xuXHRcdH1cblxuXHRcdGlmICggKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3VuaXRfcHJpY2VfdHlwZV9pZCddID09IDIwIHx8XG5cdFx0XHR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQudW5pdF9wcmljZV90eXBlX2lkID09IDMwICkgJiYgIXRoaXMuaXNfbWFzc19lZGl0aW5nICkge1xuXG5cdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICd1bml0X3ByaWNlJyApO1xuXHRcdFx0dGhpcy5lZGl0b3IuY3NzKCAnZGlzcGxheScsICdibG9jaycgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuYXR0YWNoRWxlbWVudCggJ3VuaXRfcHJpY2UnICk7XG5cdFx0XHR0aGlzLmVkaXRvci5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5lZGl0RmllbGRSZXNpemUoKTtcblx0fVxuXG5cdG9uRm9ybUl0ZW1DaGFuZ2UoIHRhcmdldCwgZG9Ob3RWYWxpZGF0ZSApIHtcblxuXHRcdHRoaXMuc2V0SXNDaGFuZ2VkKCB0YXJnZXQgKTtcblx0XHR0aGlzLnNldE1hc3NFZGl0aW5nRmllbGRzV2hlbkZvcm1DaGFuZ2UoIHRhcmdldCApO1xuXHRcdHZhciBrZXkgPSB0YXJnZXQuZ2V0RmllbGQoKTtcblx0XHR2YXIgY192YWx1ZSA9IHRhcmdldC5nZXRWYWx1ZSgpO1xuXHRcdHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldID0gY192YWx1ZTtcblx0XHRpZiAoIGtleSA9PT0gJ3R5cGVfaWQnIHx8IGtleSA9PT0gJ3VuaXRfcHJpY2VfdHlwZV9pZCcgKSB7XG5cblx0XHRcdHRoaXMub25UeXBlQ2hhbmdlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhZG9Ob3RWYWxpZGF0ZSApIHtcblx0XHRcdHRoaXMudmFsaWRhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRpbnNpZGVFZGl0b3JTZXRWYWx1ZSggdmFsICkge1xuXHRcdHZhciBsZW4gPSB2YWwubGVuZ3RoO1xuXG5cdFx0dGhpcy5yZW1vdmVBbGxSb3dzKCk7XG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHZhbFtpXSApICkge1xuXHRcdFx0XHR2YXIgcm93ID0gdmFsW2ldO1xuXHRcdFx0XHRyb3dbJ2FjY3J1YWxfcmF0ZSddID0gR2xvYmFsLmdldFRpbWVVbml0KCByb3dbJ2FjY3J1YWxfcmF0ZSddICk7XG5cdFx0XHRcdHJvd1snbWF4aW11bV90aW1lJ10gPSBHbG9iYWwuZ2V0VGltZVVuaXQoIHJvd1snbWF4aW11bV90aW1lJ10gKTtcblx0XHRcdFx0cm93Wydyb2xsb3Zlcl90aW1lJ10gPSBHbG9iYWwuZ2V0VGltZVVuaXQoIHJvd1sncm9sbG92ZXJfdGltZSddICk7XG5cdFx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCB0aGlzLnBhcmVudF9pZCApICkge1xuXHRcdFx0XHRcdHJvd1snaWQnXSA9ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYWRkUm93KCByb3cgKTtcblx0XHRcdH1cblxuXHRcdH1cblx0fVxuXG5cdGluc2lkZUVkaXRvckFkZFJvdyggZGF0YSwgaW5kZXggKSB7XG5cblx0XHRpZiAoICFkYXRhICkge1xuXHRcdFx0ZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIHJvdyA9IHRoaXMuZ2V0Um93UmVuZGVyKCk7IC8vR2V0IFJvdyByZW5kZXJcblx0XHR2YXIgcmVuZGVyID0gdGhpcy5nZXRSZW5kZXIoKTsgLy9nZXQgcmVuZGVyLCBzaG91bGQgYmUgYSB0YWJsZVxuXHRcdHZhciB3aWRnZXRzID0ge307IC8vU2F2ZSBlYWNoIHJvdydzIHdpZGdldHNcblxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXQ7XG5cdFx0dmFyIHdpZGdldENvbnRhaW5lcjtcblx0XHR2YXIgbGFiZWw7XG5cblx0XHQvL0J1aWxkIHJvdyB3aWRnZXRzXG5cblx0XHQvLyBRdWFudGl0eVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAncXVhbnRpdHknLCB3aWR0aDogNjAgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRWYWx1ZSggZGF0YS5xdWFudGl0eSA/IGRhdGEucXVhbnRpdHkgOiAwICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblx0XHRsYWJlbCA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ29yIG1vcmUnICkgKyAnPC9zcGFuPicgKTtcblxuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGZvcm1faXRlbV9pbnB1dCApO1xuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGxhYmVsICk7XG5cblx0XHR3aWRnZXRzW2Zvcm1faXRlbV9pbnB1dC5nZXRGaWVsZCgpXSA9IGZvcm1faXRlbV9pbnB1dDtcblx0XHRyb3cuY2hpbGRyZW4oKS5lcSggMCApLmFwcGVuZCggd2lkZ2V0Q29udGFpbmVyICk7XG5cblx0XHR0aGlzLnNldFdpZGdldEVuYWJsZUJhc2VPblBhcmVudENvbnRyb2xsZXIoIGZvcm1faXRlbV9pbnB1dCApO1xuXG5cdFx0Ly8gVW5pdCBQcmljZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAndW5pdF9wcmljZScsIHdpZHRoOiA2MCB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFZhbHVlKCBkYXRhLnVuaXRfcHJpY2UgPyBkYXRhLnVuaXRfcHJpY2UgOiAnMC4wMCcgKTtcblx0XHR3aWRnZXRDb250YWluZXIgPSAkKCAnPGRpdiBjbGFzcz1cXCd3aWRnZXQtaC1ib3hcXCc+PC9kaXY+JyApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cblx0XHR3aWRnZXRzW2Zvcm1faXRlbV9pbnB1dC5nZXRGaWVsZCgpXSA9IGZvcm1faXRlbV9pbnB1dDtcblx0XHRyb3cuY2hpbGRyZW4oKS5lcSggMSApLmFwcGVuZCggd2lkZ2V0Q29udGFpbmVyICk7XG5cblx0XHR0aGlzLnNldFdpZGdldEVuYWJsZUJhc2VPblBhcmVudENvbnRyb2xsZXIoIGZvcm1faXRlbV9pbnB1dCApO1xuXG5cdFx0d2lkZ2V0cy5jdXJyZW50X2VkaXRfaXRlbSA9IGRhdGE7XG5cblx0XHRpZiAoICF0aGlzLnBhcmVudF9jb250cm9sbGVyLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHR3aWRnZXRzLmN1cnJlbnRfZWRpdF9pdGVtLmlkID0gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgaW5kZXggIT0gJ3VuZGVmaW5lZCcgKSB7XG5cblx0XHRcdHJvdy5pbnNlcnRBZnRlciggJCggcmVuZGVyICkuZmluZCggJ3RyJyApLmVxKCBpbmRleCApICk7XG5cdFx0XHR0aGlzLnJvd3Nfd2lkZ2V0c19hcnJheS5zcGxpY2UoICggaW5kZXggKSwgMCwgd2lkZ2V0cyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoIHJlbmRlciApLmFwcGVuZCggcm93ICk7XG5cdFx0XHR0aGlzLnJvd3Nfd2lkZ2V0c19hcnJheS5wdXNoKCB3aWRnZXRzICk7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5wYXJlbnRfY29udHJvbGxlci5pc192aWV3aW5nICkge1xuXHRcdFx0cm93LmZpbmQoICcuY29udHJvbC1pY29uJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHR0aGlzLmFkZEljb25zRXZlbnQoIHJvdyApOyAvL0JpbmQgZXZlbnQgdG8gYWRkIGFuZCBtaW51cyBpY29uXG5cdFx0dGhpcy5yZW1vdmVMYXN0Um93TGluZSgpO1xuXHR9XG5cblx0aW5zaWRlRWRpdG9yUmVtb3ZlUm93KCByb3cgKSB7XG5cdFx0dmFyIGluZGV4ID0gcm93WzBdLnJvd0luZGV4IC0gMTtcblx0XHR2YXIgcmVtb3ZlX2lkID0gdGhpcy5yb3dzX3dpZGdldHNfYXJyYXlbaW5kZXhdLmN1cnJlbnRfZWRpdF9pdGVtLmlkO1xuXHRcdGlmICggVFRVVUlELmlzVVVJRCggcmVtb3ZlX2lkICkgJiYgcmVtb3ZlX2lkICE9IFRUVVVJRC56ZXJvX2lkICYmIHJlbW92ZV9pZCAhPSBUVFVVSUQubm90X2V4aXN0X2lkICkge1xuXHRcdFx0dGhpcy5kZWxldGVfaWRzLnB1c2goIHJlbW92ZV9pZCApO1xuXHRcdH1cblx0XHRyb3cucmVtb3ZlKCk7XG5cdFx0dGhpcy5yb3dzX3dpZGdldHNfYXJyYXkuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdHRoaXMucmVtb3ZlTGFzdFJvd0xpbmUoKTtcblx0fVxuXG5cdGluc2lkZUVkaXRvckdldFZhbHVlKCBjdXJyZW50X2VkaXRfaXRlbV9pZCApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5yb3dzX3dpZGdldHNfYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0dmFyIHJvdyA9IHRoaXMucm93c193aWRnZXRzX2FycmF5W2ldO1xuXHRcdFx0dmFyIGRhdGEgPSByb3cuY3VycmVudF9lZGl0X2l0ZW07XG5cdFx0XHRkYXRhLnF1YW50aXR5ID0gcm93LnF1YW50aXR5LmdldFZhbHVlKCk7XG5cdFx0XHRkYXRhLnVuaXRfcHJpY2UgPSByb3cudW5pdF9wcmljZS5nZXRWYWx1ZSgpO1xuXHRcdFx0ZGF0YS5wcm9kdWN0X2lkID0gY3VycmVudF9lZGl0X2l0ZW1faWQ7XG5cdFx0XHRyZXN1bHQucHVzaCggZGF0YSApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzZXRFZGl0Vmlld0RhdGFEb25lKCkge1xuXHRcdHN1cGVyLnNldEVkaXRWaWV3RGF0YURvbmUoKTtcblx0XHR0aGlzLm9uVHlwZUNoYW5nZSgpO1xuXHRcdHRoaXMuaW5pdEluc2lkZUVkaXRvckRhdGEoKTtcblx0fVxuXG5cdGluaXRJbnNpZGVFZGl0b3JEYXRhKCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSB7fTtcblx0XHRhcmdzLmZpbHRlcl9kYXRhID0ge307XG5cblx0XHRpZiAoICggIXRoaXMuY3VycmVudF9lZGl0X3JlY29yZCB8fCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkgJiYgIXRoaXMuY29waWVkX3JlY29yZF9pZCApIHtcblx0XHRcdCR0aGlzLmVkaXRvci5yZW1vdmVBbGxSb3dzKCk7XG5cdFx0XHQkdGhpcy5lZGl0b3IuYWRkUm93KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXJncy5maWx0ZXJfZGF0YS5wcm9kdWN0X2lkID0gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkID8gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkIDogdGhpcy5jb3BpZWRfcmVjb3JkX2lkO1xuXHRcdFx0dGhpcy5jb3BpZWRfcmVjb3JkX2lkID0gJyc7XG5cdFx0XHR0aGlzLnByb2R1Y3RfcHJpY2VfYXBpLmdldFByb2R1Y3RQcmljZSggYXJncywgdHJ1ZSwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0XHRpZiAoICEkdGhpcy5lZGl0X3ZpZXcgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBkYXRhID0gcmVzLmdldFJlc3VsdCgpO1xuXHRcdFx0XHRcdGlmICggZGF0YSA9PT0gdHJ1ZSApIHsgLy8gcmVzdWx0IGlzIG51bGxcblx0XHRcdFx0XHRcdCR0aGlzLmVkaXRvci5hZGRSb3coKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBkYXRhLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5lZGl0b3Iuc2V0VmFsdWUoIGRhdGEgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cblxuXHRzYXZlSW5zaWRlRWRpdG9yRGF0YSggY2FsbEJhY2sgKSB7XG5cdFx0aWYgKCAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndW5pdF9wcmljZV90eXBlX2lkJ10gIT0gMjAgJiZcblx0XHRcdHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC51bml0X3ByaWNlX3R5cGVfaWQgIT0gMzAgKSB8fCB0aGlzLmlzX21hc3NfZWRpdGluZyApIHtcblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCBjYWxsQmFjayApICkge1xuXHRcdFx0XHRjYWxsQmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgZGF0YSA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCB0aGlzLnJlZnJlc2hfaWQgKTtcblx0XHR2YXIgcmVtb3ZlX2lkcyA9ICR0aGlzLmVkaXRvci5kZWxldGVfaWRzO1xuXHRcdGlmICggcmVtb3ZlX2lkcy5sZW5ndGggPiAwICkge1xuXHRcdFx0JHRoaXMucHJvZHVjdF9wcmljZV9hcGkuZGVsZXRlUHJvZHVjdFByaWNlKCByZW1vdmVfaWRzLCB7XG5cdFx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzICkge1xuXHRcdFx0XHRcdGlmICggcmVzLmlzVmFsaWQoKSApIHtcblx0XHRcdFx0XHRcdCR0aGlzLmVkaXRvci5kZWxldGVfaWRzID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0JHRoaXMucHJvZHVjdF9wcmljZV9hcGkuc2V0UHJvZHVjdFByaWNlKCBkYXRhLCB7XG5cdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0dmFyIHJlc19kYXRhID0gcmVzLmdldFJlc3VsdCgpO1xuXHRcdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggY2FsbEJhY2sgKSApIHtcblx0XHRcdFx0XHRjYWxsQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG5cblx0b25TYXZlUmVzdWx0KCByZXN1bHQgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRpZiAoIHJlc3VsdC5pc1ZhbGlkKCkgKSB7XG5cdFx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHQuZ2V0UmVzdWx0KCk7XG5cdFx0XHRpZiAoIHJlc3VsdF9kYXRhID09PSB0cnVlICkge1xuXHRcdFx0XHQkdGhpcy5yZWZyZXNoX2lkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDsgLy8gYXMgYWRkXG5cdFx0XHR9IGVsc2UgaWYgKCBUVFVVSUQuaXNVVUlEKCByZXN1bHRfZGF0YSApICYmIHJlc3VsdF9kYXRhICE9IFRUVVVJRC56ZXJvX2lkICYmIHJlc3VsdF9kYXRhICE9IFRUVVVJRC5ub3RfZXhpc3RfaWQgKSB7IC8vIGFzIG5ld1xuXHRcdFx0XHQkdGhpcy5yZWZyZXNoX2lkID0gcmVzdWx0X2RhdGE7XG5cdFx0XHR9XG5cblx0XHRcdCR0aGlzLnNhdmVJbnNpZGVFZGl0b3JEYXRhKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0JHRoaXMuc2VhcmNoKCk7XG5cdFx0XHRcdCR0aGlzLm9uU2F2ZURvbmUoIHJlc3VsdCApO1xuXG5cdFx0XHRcdCR0aGlzLnJlbW92ZUVkaXRWaWV3KCk7XG5cdFx0XHR9ICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0JHRoaXMuc2V0RXJyb3JUaXBzKCByZXN1bHQgKTtcblx0XHRcdCR0aGlzLnNldEVycm9yTWVudSgpO1xuXHRcdH1cblx0fVxuXG5cdC8vIG9uU2F2ZUFuZENvbnRpbnVlUmVzdWx0KCByZXN1bHQgKSB7XG5cdC8vXG5cdC8vIFx0dmFyICR0aGlzID0gdGhpcztcblx0Ly8gXHRpZiAoIHJlc3VsdC5pc1ZhbGlkKCkgKSB7XG5cdC8vIFx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHQuZ2V0UmVzdWx0KCk7XG5cdC8vIFx0XHRpZiAoIHJlc3VsdF9kYXRhID09PSB0cnVlICkge1xuXHQvLyBcdFx0XHQkdGhpcy5yZWZyZXNoX2lkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0Ly9cblx0Ly8gXHRcdH0gZWxzZSBpZiAoIFRUVVVJRC5pc1VVSUQoIHJlc3VsdF9kYXRhICkgJiYgcmVzdWx0X2RhdGEgIT0gVFRVVUlELnplcm9faWQgJiYgcmVzdWx0X2RhdGEgIT0gVFRVVUlELm5vdF9leGlzdF9pZCApIHsgLy8gYXMgbmV3XG5cdC8vIFx0XHRcdCR0aGlzLnJlZnJlc2hfaWQgPSByZXN1bHRfZGF0YTtcblx0Ly8gXHRcdH1cblx0Ly9cblx0Ly8gXHRcdCR0aGlzLnNhdmVJbnNpZGVFZGl0b3JEYXRhKCBmdW5jdGlvbigpIHtcblx0Ly8gXHRcdFx0JHRoaXMuc2VhcmNoKCBmYWxzZSApO1xuXHQvLyBcdFx0XHQkdGhpcy5vbkVkaXRDbGljayggJHRoaXMucmVmcmVzaF9pZCwgdHJ1ZSApO1xuXHQvL1xuXHQvLyBcdFx0XHQkdGhpcy5vblNhdmVBbmRDb250aW51ZURvbmUoIHJlc3VsdCApO1xuXHQvL1xuXHQvLyBcdFx0fSApO1xuXHQvL1xuXHQvLyBcdH0gZWxzZSB7XG5cdC8vIFx0XHQkdGhpcy5zZXRFcnJvclRpcHMoIHJlc3VsdCApO1xuXHQvLyBcdFx0JHRoaXMuc2V0RXJyb3JNZW51KCk7XG5cdC8vIFx0fVxuXHQvLyB9LFxuXG5cdC8vIG9uU2F2ZUFuZE5ld1Jlc3VsdDogZnVuY3Rpb24oIHJlc3VsdCApIHtcblx0Ly8gXHR2YXIgJHRoaXMgPSB0aGlzO1xuXHQvLyBcdGlmICggcmVzdWx0LmlzVmFsaWQoKSApIHtcblx0Ly8gXHRcdHZhciByZXN1bHRfZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblx0Ly8gXHRcdGlmICggcmVzdWx0X2RhdGEgPT09IHRydWUgKSB7XG5cdC8vIFx0XHRcdCR0aGlzLnJlZnJlc2hfaWQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHQvL1xuXHQvLyBcdFx0fSBlbHNlIGlmICggVFRVVUlELmlzVVVJRCggcmVzdWx0X2RhdGEgKSAmJiByZXN1bHRfZGF0YSAhPSBUVFVVSUQuemVyb19pZCAmJiByZXN1bHRfZGF0YSAhPSBUVFVVSUQubm90X2V4aXN0X2lkICkgeyAvLyBhcyBuZXdcblx0Ly8gXHRcdFx0JHRoaXMucmVmcmVzaF9pZCA9IHJlc3VsdF9kYXRhO1xuXHQvLyBcdFx0fVxuXHQvL1xuXHQvLyBcdFx0JHRoaXMuc2F2ZUluc2lkZUVkaXRvckRhdGEoIGZ1bmN0aW9uKCkge1xuXHQvLyBcdFx0XHQkdGhpcy5zZWFyY2goIGZhbHNlICk7XG5cdC8vIFx0XHRcdCR0aGlzLm9uQWRkQ2xpY2soIHRydWUgKTtcblx0Ly9cblx0Ly8gXHRcdH0gKTtcblx0Ly8gXHR9IGVsc2Uge1xuXHQvLyBcdFx0JHRoaXMuc2V0RXJyb3JUaXBzKCByZXN1bHQgKTtcblx0Ly8gXHRcdCR0aGlzLnNldEVycm9yTWVudSgpO1xuXHQvLyBcdH1cblx0Ly8gfSxcblxuXHRvblNhdmVBbmRDb3B5UmVzdWx0KCByZXN1bHQgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRpZiAoIHJlc3VsdC5pc1ZhbGlkKCkgKSB7XG5cdFx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHQuZ2V0UmVzdWx0KCk7XG5cdFx0XHRpZiAoIHJlc3VsdF9kYXRhID09PSB0cnVlICkge1xuXHRcdFx0XHQkdGhpcy5yZWZyZXNoX2lkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblxuXHRcdFx0fSBlbHNlIGlmICggVFRVVUlELmlzVVVJRCggcmVzdWx0X2RhdGEgKSAmJiByZXN1bHRfZGF0YSAhPSBUVFVVSUQuemVyb19pZCAmJiByZXN1bHRfZGF0YSAhPSBUVFVVSUQubm90X2V4aXN0X2lkICkge1xuXHRcdFx0XHQkdGhpcy5yZWZyZXNoX2lkID0gcmVzdWx0X2RhdGE7XG5cdFx0XHR9XG5cblx0XHRcdCR0aGlzLnNhdmVJbnNpZGVFZGl0b3JEYXRhKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0JHRoaXMuc2VhcmNoKCBmYWxzZSApO1xuXHRcdFx0XHQkdGhpcy5vbkNvcHlBc05ld0NsaWNrKCk7XG5cblx0XHRcdH0gKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkdGhpcy5zZXRFcnJvclRpcHMoIHJlc3VsdCApO1xuXHRcdFx0JHRoaXMuc2V0RXJyb3JNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gb25TYXZlQW5kTmV4dFJlc3VsdCggcmVzdWx0ICkge1xuXHQvLyBcdHZhciAkdGhpcyA9IHRoaXM7XG5cdC8vIFx0aWYgKCByZXN1bHQuaXNWYWxpZCgpICkge1xuXHQvLyBcdFx0dmFyIHJlc3VsdF9kYXRhID0gcmVzdWx0LmdldFJlc3VsdCgpO1xuXHQvLyBcdFx0aWYgKCByZXN1bHRfZGF0YSA9PT0gdHJ1ZSApIHtcblx0Ly8gXHRcdFx0JHRoaXMucmVmcmVzaF9pZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdC8vXG5cdC8vIFx0XHR9IGVsc2UgaWYgKCBUVFVVSUQuaXNVVUlEKCByZXN1bHRfZGF0YSApICYmIHJlc3VsdF9kYXRhICE9IFRUVVVJRC56ZXJvX2lkICYmIHJlc3VsdF9kYXRhICE9IFRUVVVJRC5ub3RfZXhpc3RfaWQgKSB7XG5cdC8vIFx0XHRcdCR0aGlzLnJlZnJlc2hfaWQgPSByZXN1bHRfZGF0YTtcblx0Ly8gXHRcdH1cblx0Ly9cblx0Ly8gXHRcdCR0aGlzLnNhdmVJbnNpZGVFZGl0b3JEYXRhKCBmdW5jdGlvbigpIHtcblx0Ly8gXHRcdFx0JHRoaXMub25SaWdodEFycm93Q2xpY2soKTtcblx0Ly8gXHRcdFx0JHRoaXMuc2VhcmNoKCBmYWxzZSApO1xuXHQvLyBcdFx0XHQkdGhpcy5vblNhdmVBbmROZXh0RG9uZSggcmVzdWx0ICk7XG5cdC8vXG5cdC8vIFx0XHR9ICk7XG5cdC8vXG5cdC8vIFx0fSBlbHNlIHtcblx0Ly8gXHRcdCR0aGlzLnNldEVycm9yVGlwcyggcmVzdWx0ICk7XG5cdC8vIFx0XHQkdGhpcy5zZXRFcnJvck1lbnUoKTtcblx0Ly8gXHR9XG5cdC8vIH0sXG5cblx0X2NvbnRpbnVlRG9Db3B5QXNOZXcoKSB7XG5cdFx0dGhpcy5zZXRDdXJyZW50RWRpdFZpZXdTdGF0ZSggJ25ldycgKTtcblx0XHRMb2NhbENhY2hlRGF0YS5jdXJyZW50X2RvaW5nX2NvbnRleHRfYWN0aW9uID0gJ2NvcHlfYXNfbmV3JztcblxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCB0aGlzLmVkaXRfdmlldyApICkge1xuXHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5lZGl0b3Iucm93c193aWRnZXRzX2FycmF5Lmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yb3dzX3dpZGdldHNfYXJyYXlbaV0uY3VycmVudF9lZGl0X2l0ZW0uaWQgPSAnJztcblx0XHRcdH1cblx0XHR9XG5cdFx0c3VwZXIuX2NvbnRpbnVlRG9Db3B5QXNOZXcoKTtcblx0fVxuXG5cdG9uQ29weUFzTmV3UmVzdWx0KCByZXN1bHQgKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHQuZ2V0UmVzdWx0KCk7XG5cblx0XHRpZiAoICFyZXN1bHRfZGF0YSApIHtcblx0XHRcdFRBbGVydE1hbmFnZXIuc2hvd0FsZXJ0KCAkLmkxOG4uXyggJ1JlY29yZCBkb2VzIG5vdCBleGlzdCcgKSApO1xuXHRcdFx0JHRoaXMub25DYW5jZWxDbGljaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCR0aGlzLm9wZW5FZGl0VmlldygpOyAvLyBQdXQgaXQgaGVyZSBpcyB0byBhdm9pZCBpZiB0aGUgc2VsZWN0ZWQgb25lIGlzIG5vdCBleGlzdGVkIGluIGRhdGEgb3IgaGF2ZSBkZWxldGVkIGJ5IG90aGVyIHByYWdyYW0uIGluIHRoaXMgY2FzZSwgdGhlIGVkaXQgdmlldyBzaG91bGQgbm90IGJlIG9wZW5kLlxuXG5cdFx0cmVzdWx0X2RhdGEgPSByZXN1bHRfZGF0YVswXTtcblx0XHR0aGlzLmNvcGllZF9yZWNvcmRfaWQgPSByZXN1bHRfZGF0YS5pZDtcblx0XHRyZXN1bHRfZGF0YS5pZCA9ICcnO1xuXG5cdFx0aWYgKCAkdGhpcy5zdWJfdmlld19tb2RlICYmICR0aGlzLnBhcmVudF9rZXkgKSB7XG5cdFx0XHRyZXN1bHRfZGF0YVskdGhpcy5wYXJlbnRfa2V5XSA9ICR0aGlzLnBhcmVudF92YWx1ZTtcblx0XHR9XG5cblx0XHQkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkID0gcmVzdWx0X2RhdGE7XG5cdFx0JHRoaXMuaW5pdEVkaXRWaWV3KCk7XG5cdH1cblxuXHRidWlsZFNlYXJjaEZpZWxkcygpIHtcblxuXHRcdHN1cGVyLmJ1aWxkU2VhcmNoRmllbGRzKCk7XG5cdFx0dGhpcy5zZWFyY2hfZmllbGRzID0gW1xuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnTmFtZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ25hbWUnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUeXBlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAndHlwZV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnU3RhdHVzJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnc3RhdHVzX2lkJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdHcm91cCcgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0ZmllbGQ6ICdncm91cF9pZCcsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RyZWVfY29sdW1uJyxcblx0XHRcdFx0dHJlZV9tb2RlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUYWdzJyApLFxuXHRcdFx0XHRmaWVsZDogJ3RhZycsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0b2JqZWN0X3R5cGVfaWQ6IDkwMCxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5UQUdfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1BhcnQgTnVtYmVyJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAncGFydF9udW1iZXInLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdEZXNjcmlwdGlvbicgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ3JlYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2NyZWF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVXBkYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3VwZGF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApXG5cdFx0XTtcblx0fVxuXG5cdGdldFByb2R1Y3RQcmljaW5nVGFiSHRtbCgpIHtcblx0XHRyZXR1cm4gYDxkaXYgaWQ9XCJ0YWJfcHJpY2luZ1wiIGNsYXNzPVwiZWRpdC12aWV3LXRhYi1vdXRzaWRlXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImVkaXQtdmlldy10YWJcIiBpZD1cInRhYl9wcmljaW5nX2NvbnRlbnRfZGl2XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlyc3QtY29sdW1uIGZ1bGwtd2lkdGgtY29sdW1uXCI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnNpZGUtZWRpdG9yLWRpdiBmdWxsLXdpZHRoLWNvbHVtblwiPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PmA7XG5cdH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1744\n")}}]); |