@magic-xpa/gui 4.800.0 → 4.801.0-dev000.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/magic-xpa-gui.js → esm2020/magic-xpa-gui.mjs} +0 -0
- package/esm2020/src/Commands.mjs +186 -0
- package/esm2020/src/Events.mjs +420 -0
- package/esm2020/src/EventsProcessor.mjs +67 -0
- package/esm2020/src/FocusManager.mjs +34 -0
- package/{esm2015/src/GuiConstants.js → esm2020/src/GuiConstants.mjs} +0 -0
- package/{esm2015/src/GuiEnums.js → esm2020/src/GuiEnums.mjs} +0 -0
- package/{esm2015/src/GuiEnvironment.js → esm2020/src/GuiEnvironment.mjs} +0 -0
- package/{esm2015/src/IFlowMonitorQueue.js → esm2020/src/IFlowMonitorQueue.mjs} +2 -1
- package/esm2020/src/Manager.mjs +192 -0
- package/{esm2015/src/UIBridge.js → esm2020/src/UIBridge.mjs} +0 -0
- package/{esm2015/src/env/IEnvironment.js → esm2020/src/env/IEnvironment.mjs} +1 -0
- package/{esm2015/src/gui/ControlBase.js → esm2020/src/gui/ControlBase.mjs} +0 -0
- package/{esm2015/src/gui/GuiMgControl.js → esm2020/src/gui/GuiMgControl.mjs} +0 -0
- package/{esm2015/src/gui/GuiMgForm.js → esm2020/src/gui/GuiMgForm.mjs} +0 -0
- package/{esm2015/src/gui/KeyboardItem.js → esm2020/src/gui/KeyboardItem.mjs} +0 -0
- package/{esm2015/src/gui/LastFocusedVal.js → esm2020/src/gui/LastFocusedVal.mjs} +0 -0
- package/{esm2015/src/gui/MgValue.js → esm2020/src/gui/MgValue.mjs} +0 -0
- package/{esm2015/src/gui/PropParentInterface.js → esm2020/src/gui/PropParentInterface.mjs} +1 -0
- package/{esm2015/src/gui/low/DialogHandler.js → esm2020/src/gui/low/DialogHandler.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiCommand.js → esm2020/src/gui/low/GuiCommand.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiCommandQueue.js → esm2020/src/gui/low/GuiCommandQueue.mjs} +0 -0
- package/esm2020/src/gui/low/GuiInteractive.mjs +545 -0
- package/{esm2015/src/gui/low/Style.js → esm2020/src/gui/low/Style.mjs} +0 -0
- package/{esm2015/src/management/RuntimeContextBase.js → esm2020/src/management/RuntimeContextBase.mjs} +0 -0
- package/{esm2015/src/management/data/BlobType.js → esm2020/src/management/data/BlobType.mjs} +0 -0
- package/esm2020/src/management/data/DcValues.mjs +214 -0
- package/esm2020/src/management/data/DcValuesBuilderBase.mjs +97 -0
- package/{esm2015/src/management/data/FieldDef.js → esm2020/src/management/data/FieldDef.mjs} +0 -0
- package/{esm2015/src/management/data/FieldsTable.js → esm2020/src/management/data/FieldsTable.mjs} +0 -0
- package/esm2020/src/management/data/GuiDataViewBase.mjs +90 -0
- package/esm2020/src/management/data/GuiFieldBase.mjs +82 -0
- package/{esm2015/src/management/data/IRecord.js → esm2020/src/management/data/IRecord.mjs} +1 -0
- package/{esm2015/src/management/data/IReferencedObject.js → esm2020/src/management/data/IReferencedObject.mjs} +1 -0
- package/{esm2015/src/management/data/NUM_TYPE.js → esm2020/src/management/data/NUM_TYPE.mjs} +0 -0
- package/esm2020/src/management/data/ObjectReferenceBase.mjs +48 -0
- package/{esm2015/src/management/data/ObjectReferencesCollection.js → esm2020/src/management/data/ObjectReferencesCollection.mjs} +0 -0
- package/esm2020/src/management/data/RecordUtils.mjs +361 -0
- package/{esm2015/src/management/data/VectorType.js → esm2020/src/management/data/VectorType.mjs} +0 -0
- package/{esm2015/src/management/data/VectorTypeBase.js → esm2020/src/management/data/VectorTypeBase.mjs} +0 -0
- package/{esm2015/src/management/events/IActionManager.js → esm2020/src/management/events/IActionManager.mjs} +1 -0
- package/esm2020/src/management/events/IGuiEventsManager.mjs +2 -0
- package/{esm2015/src/management/exp/ExpressionInterface.js → esm2020/src/management/exp/ExpressionInterface.mjs} +0 -0
- package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +333 -0
- package/{esm2015/src/management/gui/ControlTable.js → esm2020/src/management/gui/ControlTable.mjs} +0 -0
- package/esm2020/src/management/gui/DisplayConvertor.mjs +1706 -0
- package/esm2020/src/management/gui/FieldValidator.mjs +1507 -0
- package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +22 -0
- package/{esm2015/src/management/gui/GuiFormPropertyAdapter.js → esm2020/src/management/gui/GuiFormPropertyAdapter.mjs} +0 -0
- package/{esm2015/src/management/gui/HebrewDate.js → esm2020/src/management/gui/HebrewDate.mjs} +0 -0
- package/{esm2015/src/management/gui/Helps.js → esm2020/src/management/gui/Helps.mjs} +0 -0
- package/esm2020/src/management/gui/MgControlBase.mjs +1873 -0
- package/esm2020/src/management/gui/MgFormBase.mjs +748 -0
- package/{esm2015/src/management/gui/PIC.js → esm2020/src/management/gui/PIC.mjs} +0 -0
- package/esm2020/src/management/gui/PropDefaults.mjs +230 -0
- package/{esm2015/src/management/gui/PropInterface.js → esm2020/src/management/gui/PropInterface.mjs} +0 -0
- package/esm2020/src/management/gui/PropTable.mjs +221 -0
- package/esm2020/src/management/gui/Property.mjs +1382 -0
- package/{esm2015/src/management/gui/ValidationDetails.js → esm2020/src/management/gui/ValidationDetails.mjs} +0 -0
- package/{esm2015/src/management/gui/ValidationDetailsBase.js → esm2020/src/management/gui/ValidationDetailsBase.mjs} +0 -0
- package/{esm2015/src/management/gui/WrongFormatException.js → esm2020/src/management/gui/WrongFormatException.mjs} +0 -0
- package/{esm2015/src/management/tasks/GuiDataCollection.js → esm2020/src/management/tasks/GuiDataCollection.mjs} +0 -0
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +502 -0
- package/{esm2015/src/management/tasks/IMGDataTable.js → esm2020/src/management/tasks/IMGDataTable.mjs} +1 -0
- package/{esm2015/src/management/tasks/ITask.js → esm2020/src/management/tasks/ITask.mjs} +1 -0
- package/esm2020/src/management/tasks/MgTimer.mjs +21 -0
- package/{esm2015/src/management/tasks/TaskDefinitionId.js → esm2020/src/management/tasks/TaskDefinitionId.mjs} +0 -0
- package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
- package/{esm2015/src/util/AuthenticationDialogHandler.js → esm2020/src/util/AuthenticationDialogHandler.mjs} +0 -0
- package/{esm2015/src/util/MemoryUtil.js → esm2020/src/util/MemoryUtil.mjs} +0 -0
- package/{esm2015/src/util/ObjectReference.js → esm2020/src/util/ObjectReference.mjs} +0 -0
- package/esm2020/src/util/ProcessLauncher.mjs +32 -0
- package/esm2020/src/util/UsernamePasswordCredentials.mjs +52 -0
- package/fesm2015/{magic-xpa-gui.js → magic-xpa-gui.mjs} +133 -175
- package/fesm2015/magic-xpa-gui.mjs.map +1 -0
- package/fesm2020/magic-xpa-gui.mjs +17805 -0
- package/fesm2020/magic-xpa-gui.mjs.map +1 -0
- package/package.json +27 -14
- package/src/Events.d.ts +2 -2
- package/src/EventsProcessor.d.ts +1 -1
- package/src/IFlowMonitorQueue.d.ts +1 -1
- package/src/Manager.d.ts +2 -3
- package/src/management/data/DcValues.d.ts +1 -1
- package/src/management/data/DcValuesBuilderBase.d.ts +1 -1
- package/src/management/data/RecordUtils.d.ts +0 -3
- package/src/management/events/IGuiEventsManager.d.ts +5 -5
- package/src/management/exp/GuiExpressionEvaluator.d.ts +2 -2
- package/src/management/gui/DisplayConvertor.d.ts +6 -6
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +6 -6
- package/src/management/gui/MgControlBase.d.ts +2 -4
- package/src/management/gui/MgFormBase.d.ts +1 -1
- package/src/management/gui/PropTable.d.ts +1 -1
- package/src/management/gui/Property.d.ts +2 -2
- package/src/management/tasks/GuiTaskBase.d.ts +3 -3
- package/src/util/ProcessLauncher.d.ts +1 -3
- package/bundles/magic-xpa-gui.umd.js +0 -19431
- package/bundles/magic-xpa-gui.umd.js.map +0 -1
- package/bundles/magic-xpa-gui.umd.min.js +0 -16
- package/bundles/magic-xpa-gui.umd.min.js.map +0 -1
- package/esm2015/src/Commands.js +0 -189
- package/esm2015/src/Events.js +0 -420
- package/esm2015/src/EventsProcessor.js +0 -68
- package/esm2015/src/FocusManager.js +0 -41
- package/esm2015/src/Manager.js +0 -197
- package/esm2015/src/gui/low/GuiInteractive.js +0 -545
- package/esm2015/src/management/data/DcValues.js +0 -214
- package/esm2015/src/management/data/DcValuesBuilderBase.js +0 -97
- package/esm2015/src/management/data/GuiDataViewBase.js +0 -90
- package/esm2015/src/management/data/GuiFieldBase.js +0 -85
- package/esm2015/src/management/data/ObjectReferenceBase.js +0 -48
- package/esm2015/src/management/data/RecordUtils.js +0 -447
- package/esm2015/src/management/events/IGuiEventsManager.js +0 -1
- package/esm2015/src/management/exp/GuiExpressionEvaluator.js +0 -333
- package/esm2015/src/management/gui/DisplayConvertor.js +0 -1706
- package/esm2015/src/management/gui/FieldValidator.js +0 -1507
- package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +0 -4
- package/esm2015/src/management/gui/MgControlBase.js +0 -1981
- package/esm2015/src/management/gui/MgFormBase.js +0 -763
- package/esm2015/src/management/gui/PropDefaults.js +0 -230
- package/esm2015/src/management/gui/PropTable.js +0 -224
- package/esm2015/src/management/gui/Property.js +0 -1402
- package/esm2015/src/management/tasks/GuiTaskBase.js +0 -506
- package/esm2015/src/management/tasks/MgTimer.js +0 -21
- package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +0 -41
- package/esm2015/src/util/ProcessLauncher.js +0 -32
- package/esm2015/src/util/UsernamePasswordCredentials.js +0 -52
- package/fesm2015/magic-xpa-gui.js.map +0 -1
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import { MgValue } from '../MgValue';
|
|
2
|
+
import { GuiMgForm } from '../GuiMgForm';
|
|
3
|
+
import { Events } from '../../Events';
|
|
4
|
+
import { UIBridge } from '../../UIBridge';
|
|
5
|
+
import { ControlBase } from '../ControlBase';
|
|
6
|
+
import { GuiCommandQueue } from './GuiCommandQueue';
|
|
7
|
+
export var InteractiveCommandType;
|
|
8
|
+
(function (InteractiveCommandType) {
|
|
9
|
+
InteractiveCommandType[InteractiveCommandType["GET_FONT_METRICS"] = 0] = "GET_FONT_METRICS";
|
|
10
|
+
InteractiveCommandType[InteractiveCommandType["GET_RESOLUTION"] = 1] = "GET_RESOLUTION";
|
|
11
|
+
InteractiveCommandType[InteractiveCommandType["GET_BOUNDS"] = 2] = "GET_BOUNDS";
|
|
12
|
+
InteractiveCommandType[InteractiveCommandType["GET_VALUE"] = 3] = "GET_VALUE";
|
|
13
|
+
InteractiveCommandType[InteractiveCommandType["SET_BROWSER_TEXT"] = 4] = "SET_BROWSER_TEXT";
|
|
14
|
+
InteractiveCommandType[InteractiveCommandType["GET_BROWSER_TEXT"] = 5] = "GET_BROWSER_TEXT";
|
|
15
|
+
InteractiveCommandType[InteractiveCommandType["BROWSER_EXECUTE"] = 6] = "BROWSER_EXECUTE";
|
|
16
|
+
InteractiveCommandType[InteractiveCommandType["GET_TOP_INDEX"] = 7] = "GET_TOP_INDEX";
|
|
17
|
+
InteractiveCommandType[InteractiveCommandType["MESSAGE_BOX"] = 8] = "MESSAGE_BOX";
|
|
18
|
+
InteractiveCommandType[InteractiveCommandType["SET_TITLE"] = 9] = "SET_TITLE";
|
|
19
|
+
InteractiveCommandType[InteractiveCommandType["DIRECTORY_DIALOG_BOX"] = 10] = "DIRECTORY_DIALOG_BOX";
|
|
20
|
+
InteractiveCommandType[InteractiveCommandType["GET_CLIENT_BOUNDS"] = 11] = "GET_CLIENT_BOUNDS";
|
|
21
|
+
InteractiveCommandType[InteractiveCommandType["SET_EDIT_TEXT"] = 12] = "SET_EDIT_TEXT";
|
|
22
|
+
InteractiveCommandType[InteractiveCommandType["INSERT_EDIT_TEXT"] = 13] = "INSERT_EDIT_TEXT";
|
|
23
|
+
InteractiveCommandType[InteractiveCommandType["SET_SELECTION"] = 14] = "SET_SELECTION";
|
|
24
|
+
InteractiveCommandType[InteractiveCommandType["GET_SELECTION"] = 15] = "GET_SELECTION";
|
|
25
|
+
InteractiveCommandType[InteractiveCommandType["GET_CARET_POS"] = 16] = "GET_CARET_POS";
|
|
26
|
+
InteractiveCommandType[InteractiveCommandType["REFRESH_PAGE"] = 17] = "REFRESH_PAGE";
|
|
27
|
+
InteractiveCommandType[InteractiveCommandType["GET_IS_TOP_OF_TEXTBOX"] = 18] = "GET_IS_TOP_OF_TEXTBOX";
|
|
28
|
+
InteractiveCommandType[InteractiveCommandType["GET_IS_END_OF_TEXTBOX"] = 19] = "GET_IS_END_OF_TEXTBOX";
|
|
29
|
+
InteractiveCommandType[InteractiveCommandType["CLIPBOARD_GET_CONTENT"] = 20] = "CLIPBOARD_GET_CONTENT";
|
|
30
|
+
InteractiveCommandType[InteractiveCommandType["CLIPBOARD_SET_CONTENT"] = 21] = "CLIPBOARD_SET_CONTENT";
|
|
31
|
+
InteractiveCommandType[InteractiveCommandType["CLIPBOARD_PASTE"] = 22] = "CLIPBOARD_PASTE";
|
|
32
|
+
InteractiveCommandType[InteractiveCommandType["POST_KEY_EVENT"] = 23] = "POST_KEY_EVENT";
|
|
33
|
+
InteractiveCommandType[InteractiveCommandType["POST_CHAR_EVENT"] = 24] = "POST_CHAR_EVENT";
|
|
34
|
+
InteractiveCommandType[InteractiveCommandType["SET_CURSOR"] = 25] = "SET_CURSOR";
|
|
35
|
+
InteractiveCommandType[InteractiveCommandType["DISPOSE_ALL_FORMS"] = 26] = "DISPOSE_ALL_FORMS";
|
|
36
|
+
InteractiveCommandType[InteractiveCommandType["GET_ROWS_IN_PAGE"] = 27] = "GET_ROWS_IN_PAGE";
|
|
37
|
+
InteractiveCommandType[InteractiveCommandType["GET_HIDDEN_ROWS_COUNT_IN_TABLE"] = 28] = "GET_HIDDEN_ROWS_COUNT_IN_TABLE";
|
|
38
|
+
InteractiveCommandType[InteractiveCommandType["FILE_OPEN_DIALOG_BOX"] = 29] = "FILE_OPEN_DIALOG_BOX";
|
|
39
|
+
InteractiveCommandType[InteractiveCommandType["FILE_SAVE_DIALOG_BOX"] = 30] = "FILE_SAVE_DIALOG_BOX";
|
|
40
|
+
InteractiveCommandType[InteractiveCommandType["CREATE_DIALOG"] = 31] = "CREATE_DIALOG";
|
|
41
|
+
InteractiveCommandType[InteractiveCommandType["OPEN_DIALOG"] = 32] = "OPEN_DIALOG";
|
|
42
|
+
InteractiveCommandType[InteractiveCommandType["CLOSE_DIALOG"] = 33] = "CLOSE_DIALOG";
|
|
43
|
+
InteractiveCommandType[InteractiveCommandType["SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA"] = 34] = "SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA";
|
|
44
|
+
InteractiveCommandType[InteractiveCommandType["REFLECTION_INVOKE"] = 35] = "REFLECTION_INVOKE";
|
|
45
|
+
InteractiveCommandType[InteractiveCommandType["REFLECTION_SET"] = 36] = "REFLECTION_SET";
|
|
46
|
+
InteractiveCommandType[InteractiveCommandType["GET_LAST_WINDOW_STATE"] = 37] = "GET_LAST_WINDOW_STATE";
|
|
47
|
+
InteractiveCommandType[InteractiveCommandType["GET_FRAMES_BOUNDS"] = 38] = "GET_FRAMES_BOUNDS";
|
|
48
|
+
InteractiveCommandType[InteractiveCommandType["GET_LINKED_PARENT_IDX"] = 39] = "GET_LINKED_PARENT_IDX";
|
|
49
|
+
InteractiveCommandType[InteractiveCommandType["GET_FORM_BOUNDS"] = 40] = "GET_FORM_BOUNDS";
|
|
50
|
+
InteractiveCommandType[InteractiveCommandType["GET_COLUMNS_STATE"] = 41] = "GET_COLUMNS_STATE";
|
|
51
|
+
InteractiveCommandType[InteractiveCommandType["GET_FORM_HANDLE"] = 42] = "GET_FORM_HANDLE";
|
|
52
|
+
InteractiveCommandType[InteractiveCommandType["GET_CTRL_HANDLE"] = 43] = "GET_CTRL_HANDLE";
|
|
53
|
+
InteractiveCommandType[InteractiveCommandType["IS_FORM_ACTIVE"] = 44] = "IS_FORM_ACTIVE";
|
|
54
|
+
InteractiveCommandType[InteractiveCommandType["SET_MARKED_TEXT_ON_RICH_EDIT"] = 45] = "SET_MARKED_TEXT_ON_RICH_EDIT";
|
|
55
|
+
InteractiveCommandType[InteractiveCommandType["SEND_IME_MSG"] = 46] = "SEND_IME_MSG";
|
|
56
|
+
InteractiveCommandType[InteractiveCommandType["CAN_FOCUS"] = 47] = "CAN_FOCUS";
|
|
57
|
+
InteractiveCommandType[InteractiveCommandType["INVOKE_OSCOMMAND"] = 48] = "INVOKE_OSCOMMAND";
|
|
58
|
+
InteractiveCommandType[InteractiveCommandType["GET_SELECTED_INDICE"] = 49] = "GET_SELECTED_INDICE";
|
|
59
|
+
InteractiveCommandType[InteractiveCommandType["SET_SUGGESTED_VALUE"] = 50] = "SET_SUGGESTED_VALUE";
|
|
60
|
+
InteractiveCommandType[InteractiveCommandType["MAP_WIDGET_TO_GUI_OBJECT"] = 51] = "MAP_WIDGET_TO_GUI_OBJECT";
|
|
61
|
+
InteractiveCommandType[InteractiveCommandType["REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER"] = 52] = "REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER";
|
|
62
|
+
InteractiveCommandType[InteractiveCommandType["ADD_DN_CONTROL_VALUE_CHANGED_HANDLER"] = 53] = "ADD_DN_CONTROL_VALUE_CHANGED_HANDLER";
|
|
63
|
+
InteractiveCommandType[InteractiveCommandType["GET_RTF_VALUE_BEFORE_ENTERING_CONTROL"] = 54] = "GET_RTF_VALUE_BEFORE_ENTERING_CONTROL";
|
|
64
|
+
InteractiveCommandType[InteractiveCommandType["ATTACH_DNKEY_TO_OBJECT"] = 55] = "ATTACH_DNKEY_TO_OBJECT";
|
|
65
|
+
InteractiveCommandType[InteractiveCommandType["GET_DVCONTROL_POSITION_ISN"] = 56] = "GET_DVCONTROL_POSITION_ISN";
|
|
66
|
+
InteractiveCommandType[InteractiveCommandType["CLEAR_DATA_TABLE"] = 57] = "CLEAR_DATA_TABLE";
|
|
67
|
+
InteractiveCommandType[InteractiveCommandType["SET_DATA_SOURCE_TO_DVCONTROL"] = 58] = "SET_DATA_SOURCE_TO_DVCONTROL";
|
|
68
|
+
InteractiveCommandType[InteractiveCommandType["ACTIVATE_FORM"] = 59] = "ACTIVATE_FORM";
|
|
69
|
+
InteractiveCommandType[InteractiveCommandType["IS_COMBO_DROPPED_DOWN"] = 60] = "IS_COMBO_DROPPED_DOWN";
|
|
70
|
+
InteractiveCommandType[InteractiveCommandType["OPEN_FORM_DESIGNER"] = 61] = "OPEN_FORM_DESIGNER";
|
|
71
|
+
InteractiveCommandType[InteractiveCommandType["INVOKE_UDPCOMMAND"] = 62] = "INVOKE_UDPCOMMAND";
|
|
72
|
+
InteractiveCommandType[InteractiveCommandType["GET_HASINDENT"] = 63] = "GET_HASINDENT";
|
|
73
|
+
InteractiveCommandType[InteractiveCommandType["GET_IS_ROW_EDITING"] = 64] = "GET_IS_ROW_EDITING";
|
|
74
|
+
InteractiveCommandType[InteractiveCommandType["GET_MAX_ROWS_IN_PAGINATED_TABLE"] = 65] = "GET_MAX_ROWS_IN_PAGINATED_TABLE";
|
|
75
|
+
InteractiveCommandType[InteractiveCommandType["CALL_JS"] = 66] = "CALL_JS";
|
|
76
|
+
InteractiveCommandType[InteractiveCommandType["GET_LAST_ROUTE"] = 67] = "GET_LAST_ROUTE";
|
|
77
|
+
})(InteractiveCommandType || (InteractiveCommandType = {}));
|
|
78
|
+
export class GuiInteractiveBase {
|
|
79
|
+
constructor() {
|
|
80
|
+
this._commandType = 0;
|
|
81
|
+
this.TaskTag = null;
|
|
82
|
+
this.controlName = null;
|
|
83
|
+
this._x = 0;
|
|
84
|
+
this._y = 0;
|
|
85
|
+
this._char = null;
|
|
86
|
+
this._str = String.fromCharCode(0);
|
|
87
|
+
this._intVal1 = 0;
|
|
88
|
+
this._line = 0;
|
|
89
|
+
this._obj1 = null;
|
|
90
|
+
this._parameters = null;
|
|
91
|
+
this._boolVal = false;
|
|
92
|
+
this._obj2 = null;
|
|
93
|
+
this._mgValue = null;
|
|
94
|
+
this._setValue = false;
|
|
95
|
+
this.resultString = String.fromCharCode(0);
|
|
96
|
+
}
|
|
97
|
+
canFocus(guiMgControl) {
|
|
98
|
+
this._commandType = InteractiveCommandType.CAN_FOCUS;
|
|
99
|
+
this._obj1 = guiMgControl;
|
|
100
|
+
this._mgValue = new MgValue();
|
|
101
|
+
this.Invoke();
|
|
102
|
+
return this._mgValue.boolVal;
|
|
103
|
+
}
|
|
104
|
+
GetSelectedIndice(guiMgControl) {
|
|
105
|
+
this._commandType = InteractiveCommandType.GET_SELECTED_INDICE;
|
|
106
|
+
this._obj1 = guiMgControl;
|
|
107
|
+
this._mgValue = new MgValue();
|
|
108
|
+
this.Invoke();
|
|
109
|
+
return this._mgValue.str;
|
|
110
|
+
}
|
|
111
|
+
GetHasIndent(guiMgControl) {
|
|
112
|
+
this._commandType = InteractiveCommandType.GET_HASINDENT;
|
|
113
|
+
this._obj1 = guiMgControl;
|
|
114
|
+
this.Invoke();
|
|
115
|
+
return this._boolVal;
|
|
116
|
+
}
|
|
117
|
+
setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue) {
|
|
118
|
+
this._commandType = InteractiveCommandType.SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA;
|
|
119
|
+
this._obj2 = ctrl;
|
|
120
|
+
this._line = line;
|
|
121
|
+
this._boolVal = retSuggestedValue;
|
|
122
|
+
this.Invoke();
|
|
123
|
+
}
|
|
124
|
+
getValue(obj, line) {
|
|
125
|
+
this._commandType = InteractiveCommandType.GET_VALUE;
|
|
126
|
+
this._obj2 = obj;
|
|
127
|
+
this._line = line;
|
|
128
|
+
this._mgValue = new MgValue();
|
|
129
|
+
this.Invoke();
|
|
130
|
+
return this._mgValue.obj;
|
|
131
|
+
}
|
|
132
|
+
getTopIndex(tablecontrol) {
|
|
133
|
+
this._commandType = InteractiveCommandType.GET_TOP_INDEX;
|
|
134
|
+
this._obj2 = tablecontrol;
|
|
135
|
+
this.Invoke();
|
|
136
|
+
return this._intVal1;
|
|
137
|
+
}
|
|
138
|
+
getIsRowEditing(tablecontrol, line, isLineMode) {
|
|
139
|
+
this._commandType = InteractiveCommandType.GET_IS_ROW_EDITING;
|
|
140
|
+
this._obj2 = tablecontrol;
|
|
141
|
+
this._intVal1 = line;
|
|
142
|
+
this._boolVal = isLineMode;
|
|
143
|
+
this.Invoke();
|
|
144
|
+
return this._boolVal;
|
|
145
|
+
}
|
|
146
|
+
browserExecute(browserControl, text, syncExec, language) {
|
|
147
|
+
this._commandType = InteractiveCommandType.BROWSER_EXECUTE;
|
|
148
|
+
this._obj2 = browserControl;
|
|
149
|
+
this._mgValue = new MgValue();
|
|
150
|
+
this._mgValue.str = text;
|
|
151
|
+
this._mgValue.obj = language;
|
|
152
|
+
if (syncExec) {
|
|
153
|
+
this.Invoke();
|
|
154
|
+
return this._mgValue.boolVal;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
messageBox(title, msg, style) {
|
|
161
|
+
this._commandType = InteractiveCommandType.MESSAGE_BOX;
|
|
162
|
+
this._mgValue = new MgValue();
|
|
163
|
+
this._mgValue.title = title;
|
|
164
|
+
this._mgValue.str = ((msg === null) ? '' : msg);
|
|
165
|
+
this._mgValue.style = style;
|
|
166
|
+
Events.RefreshTables();
|
|
167
|
+
this.Invoke();
|
|
168
|
+
return this._mgValue.number;
|
|
169
|
+
}
|
|
170
|
+
setTitle(topMostForm, title) {
|
|
171
|
+
this._commandType = InteractiveCommandType.SET_TITLE;
|
|
172
|
+
this._mgValue = new MgValue();
|
|
173
|
+
this._obj2 = topMostForm;
|
|
174
|
+
this._mgValue.title = ((title === null) ? '' : title);
|
|
175
|
+
this.Invoke();
|
|
176
|
+
}
|
|
177
|
+
invokeUDP(contextId) {
|
|
178
|
+
this._commandType = InteractiveCommandType.INVOKE_UDPCOMMAND;
|
|
179
|
+
this._mgValue = new MgValue();
|
|
180
|
+
this._mgValue.obj = contextId;
|
|
181
|
+
this.Invoke();
|
|
182
|
+
return this._mgValue.number;
|
|
183
|
+
}
|
|
184
|
+
directoryDialogBox(caption, path, bShowNewFolder) {
|
|
185
|
+
this._commandType = InteractiveCommandType.DIRECTORY_DIALOG_BOX;
|
|
186
|
+
this._mgValue = new MgValue();
|
|
187
|
+
this._mgValue.caption = caption;
|
|
188
|
+
this._mgValue.path = path;
|
|
189
|
+
this._mgValue.bool1 = bShowNewFolder;
|
|
190
|
+
this.Invoke();
|
|
191
|
+
return this._mgValue.str;
|
|
192
|
+
}
|
|
193
|
+
fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect) {
|
|
194
|
+
this._commandType = InteractiveCommandType.FILE_OPEN_DIALOG_BOX;
|
|
195
|
+
this._mgValue = new MgValue();
|
|
196
|
+
this._mgValue.title = title;
|
|
197
|
+
this._mgValue.path = dirName;
|
|
198
|
+
this._mgValue.str = fileName;
|
|
199
|
+
this._mgValue.filter = filterNames;
|
|
200
|
+
this._mgValue.boolVal = checkExists;
|
|
201
|
+
this._mgValue.bool1 = multiSelect;
|
|
202
|
+
this.Invoke();
|
|
203
|
+
return this._mgValue.str;
|
|
204
|
+
}
|
|
205
|
+
fileSaveDialogBox(title, dirName, fileName, filterNames, defaultExtension, overwritePrompt) {
|
|
206
|
+
this._commandType = InteractiveCommandType.FILE_SAVE_DIALOG_BOX;
|
|
207
|
+
this._mgValue = new MgValue();
|
|
208
|
+
this._mgValue.title = title;
|
|
209
|
+
this._mgValue.path = dirName;
|
|
210
|
+
this._mgValue.str = fileName;
|
|
211
|
+
this._mgValue.filter = filterNames;
|
|
212
|
+
this._mgValue.caption = defaultExtension;
|
|
213
|
+
this._mgValue.bool1 = overwritePrompt;
|
|
214
|
+
this.Invoke();
|
|
215
|
+
return this._mgValue.str;
|
|
216
|
+
}
|
|
217
|
+
createDialog(handle, parameters) {
|
|
218
|
+
this._commandType = InteractiveCommandType.CREATE_DIALOG;
|
|
219
|
+
this._parameters = parameters;
|
|
220
|
+
this._obj2 = handle;
|
|
221
|
+
this.Invoke();
|
|
222
|
+
}
|
|
223
|
+
closeDialog(handle) {
|
|
224
|
+
this._commandType = InteractiveCommandType.CLOSE_DIALOG;
|
|
225
|
+
this._obj2 = handle;
|
|
226
|
+
this.Invoke();
|
|
227
|
+
}
|
|
228
|
+
setEditText(control, line, text) {
|
|
229
|
+
this._commandType = InteractiveCommandType.SET_EDIT_TEXT;
|
|
230
|
+
this._obj2 = control;
|
|
231
|
+
this._line = line;
|
|
232
|
+
this._mgValue = new MgValue();
|
|
233
|
+
this._mgValue.str = text;
|
|
234
|
+
this.Invoke();
|
|
235
|
+
return this._mgValue.boolVal;
|
|
236
|
+
}
|
|
237
|
+
insertEditText(control, line, startPosition, textToInsert) {
|
|
238
|
+
this._commandType = InteractiveCommandType.INSERT_EDIT_TEXT;
|
|
239
|
+
this._obj2 = control;
|
|
240
|
+
this._line = line;
|
|
241
|
+
this._mgValue = new MgValue();
|
|
242
|
+
this._mgValue.str = textToInsert;
|
|
243
|
+
this._intVal1 = startPosition;
|
|
244
|
+
this.Invoke();
|
|
245
|
+
return this._mgValue.boolVal;
|
|
246
|
+
}
|
|
247
|
+
setSelection(control, line, start, end, caretPos) {
|
|
248
|
+
this._commandType = InteractiveCommandType.SET_SELECTION;
|
|
249
|
+
this._obj2 = control;
|
|
250
|
+
this._line = line;
|
|
251
|
+
this._x = start;
|
|
252
|
+
this._y = end;
|
|
253
|
+
this._mgValue = new MgValue();
|
|
254
|
+
this._mgValue.number = caretPos;
|
|
255
|
+
this.Invoke();
|
|
256
|
+
}
|
|
257
|
+
setSuggestedValue(control, suggestedValue) {
|
|
258
|
+
this._commandType = InteractiveCommandType.SET_SUGGESTED_VALUE;
|
|
259
|
+
this._obj2 = control;
|
|
260
|
+
this._mgValue = new MgValue();
|
|
261
|
+
this._mgValue.str = suggestedValue;
|
|
262
|
+
this.Invoke();
|
|
263
|
+
}
|
|
264
|
+
caretPosGet(control, line) {
|
|
265
|
+
this._commandType = InteractiveCommandType.GET_CARET_POS;
|
|
266
|
+
this._obj2 = control;
|
|
267
|
+
this._line = line;
|
|
268
|
+
this._mgValue = new MgValue();
|
|
269
|
+
this.Invoke();
|
|
270
|
+
return this._mgValue.number;
|
|
271
|
+
}
|
|
272
|
+
RefreshPage(navigateToRootRoute, initialUrl) {
|
|
273
|
+
this._commandType = InteractiveCommandType.REFRESH_PAGE;
|
|
274
|
+
this._boolVal = navigateToRootRoute;
|
|
275
|
+
this._obj1 = initialUrl;
|
|
276
|
+
this.Invoke();
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
getIsTopOfTextBox(control, line) {
|
|
280
|
+
this._commandType = InteractiveCommandType.GET_IS_TOP_OF_TEXTBOX;
|
|
281
|
+
this._obj2 = control;
|
|
282
|
+
this._line = line;
|
|
283
|
+
this.Invoke();
|
|
284
|
+
return this._boolVal;
|
|
285
|
+
}
|
|
286
|
+
getIsEndOfTextBox(control, line) {
|
|
287
|
+
this._commandType = InteractiveCommandType.GET_IS_END_OF_TEXTBOX;
|
|
288
|
+
this._obj2 = control;
|
|
289
|
+
this._line = line;
|
|
290
|
+
this.Invoke();
|
|
291
|
+
return this._boolVal;
|
|
292
|
+
}
|
|
293
|
+
postKeyEvent(control, line, keys, PostChar, forceLogicalControlTextUpdate) {
|
|
294
|
+
this._commandType = InteractiveCommandType.POST_KEY_EVENT;
|
|
295
|
+
this._obj2 = control;
|
|
296
|
+
this._line = line;
|
|
297
|
+
this._mgValue = new MgValue();
|
|
298
|
+
this._mgValue.str = keys;
|
|
299
|
+
this._mgValue.bool1 = forceLogicalControlTextUpdate;
|
|
300
|
+
this._boolVal = PostChar;
|
|
301
|
+
this.Invoke();
|
|
302
|
+
}
|
|
303
|
+
postCharEvent(control, line, chr) {
|
|
304
|
+
this._commandType = InteractiveCommandType.POST_CHAR_EVENT;
|
|
305
|
+
this._obj2 = control;
|
|
306
|
+
this._line = line;
|
|
307
|
+
this._char = chr;
|
|
308
|
+
this.Invoke();
|
|
309
|
+
}
|
|
310
|
+
disposeAllForms() {
|
|
311
|
+
this._commandType = InteractiveCommandType.DISPOSE_ALL_FORMS;
|
|
312
|
+
this.Invoke();
|
|
313
|
+
}
|
|
314
|
+
getRowsInPage(control) {
|
|
315
|
+
this._commandType = InteractiveCommandType.GET_ROWS_IN_PAGE;
|
|
316
|
+
this._obj2 = control;
|
|
317
|
+
this.Invoke();
|
|
318
|
+
return this._intVal1;
|
|
319
|
+
}
|
|
320
|
+
getMaxRowsInPaginatedTable(control) {
|
|
321
|
+
this._commandType = InteractiveCommandType.GET_MAX_ROWS_IN_PAGINATED_TABLE;
|
|
322
|
+
this._obj2 = control;
|
|
323
|
+
this.Invoke();
|
|
324
|
+
return this._intVal1;
|
|
325
|
+
}
|
|
326
|
+
getLastRoute() {
|
|
327
|
+
this._commandType = InteractiveCommandType.GET_LAST_ROUTE;
|
|
328
|
+
this.Invoke();
|
|
329
|
+
return this.resultString;
|
|
330
|
+
}
|
|
331
|
+
GetHiddenRowsCountInTable(control) {
|
|
332
|
+
this._commandType = InteractiveCommandType.GET_HIDDEN_ROWS_COUNT_IN_TABLE;
|
|
333
|
+
this._obj2 = control;
|
|
334
|
+
this.Invoke();
|
|
335
|
+
return this._intVal1;
|
|
336
|
+
}
|
|
337
|
+
getLastWindowState(guiMgForm) {
|
|
338
|
+
this._commandType = InteractiveCommandType.GET_LAST_WINDOW_STATE;
|
|
339
|
+
this._obj2 = guiMgForm;
|
|
340
|
+
this.Invoke();
|
|
341
|
+
return this._intVal1;
|
|
342
|
+
}
|
|
343
|
+
getLinkedParentIdx(frameset) {
|
|
344
|
+
this._commandType = InteractiveCommandType.GET_LINKED_PARENT_IDX;
|
|
345
|
+
this._obj2 = frameset;
|
|
346
|
+
this.Invoke();
|
|
347
|
+
return this._intVal1;
|
|
348
|
+
}
|
|
349
|
+
getColumnsState(tableCtrl) {
|
|
350
|
+
this._commandType = InteractiveCommandType.GET_COLUMNS_STATE;
|
|
351
|
+
this._obj2 = tableCtrl;
|
|
352
|
+
this._mgValue = new MgValue();
|
|
353
|
+
this.Invoke();
|
|
354
|
+
return this._mgValue.listOfIntArr;
|
|
355
|
+
}
|
|
356
|
+
MapWidget(newObjectToSet) {
|
|
357
|
+
if (arguments.length === 1)
|
|
358
|
+
this.MapWidget_0(newObjectToSet);
|
|
359
|
+
else
|
|
360
|
+
this.MapWidget_1();
|
|
361
|
+
}
|
|
362
|
+
MapWidget_0(newObjectToSet) {
|
|
363
|
+
this._commandType = InteractiveCommandType.MAP_WIDGET_TO_GUI_OBJECT;
|
|
364
|
+
this._obj1 = newObjectToSet;
|
|
365
|
+
this.Invoke();
|
|
366
|
+
}
|
|
367
|
+
ActivateForm(guiMgForm) {
|
|
368
|
+
this._commandType = InteractiveCommandType.ACTIVATE_FORM;
|
|
369
|
+
this._obj1 = guiMgForm;
|
|
370
|
+
this.Invoke();
|
|
371
|
+
}
|
|
372
|
+
isFormActive() {
|
|
373
|
+
if (arguments.length === 1)
|
|
374
|
+
return this.isFormActive_0();
|
|
375
|
+
else
|
|
376
|
+
this.isFormActive_1();
|
|
377
|
+
}
|
|
378
|
+
isFormActive_0() {
|
|
379
|
+
return this._boolVal;
|
|
380
|
+
}
|
|
381
|
+
GetRtfValueBeforeEnteringControl(guiMgControl, line) {
|
|
382
|
+
this._commandType = InteractiveCommandType.GET_RTF_VALUE_BEFORE_ENTERING_CONTROL;
|
|
383
|
+
this._obj2 = guiMgControl;
|
|
384
|
+
this._line = line;
|
|
385
|
+
this._mgValue = new MgValue();
|
|
386
|
+
this.Invoke();
|
|
387
|
+
return this._mgValue.str;
|
|
388
|
+
}
|
|
389
|
+
GetDVControlPositionIsn(dataTable, line) {
|
|
390
|
+
this._commandType = InteractiveCommandType.GET_DVCONTROL_POSITION_ISN;
|
|
391
|
+
this._obj1 = dataTable;
|
|
392
|
+
this._line = line;
|
|
393
|
+
this.Invoke();
|
|
394
|
+
return this._intVal1;
|
|
395
|
+
}
|
|
396
|
+
ClearDatatable(dvControl, dataTable) {
|
|
397
|
+
this._commandType = InteractiveCommandType.CLEAR_DATA_TABLE;
|
|
398
|
+
this._obj1 = dvControl;
|
|
399
|
+
this._obj2 = dataTable;
|
|
400
|
+
this.Invoke();
|
|
401
|
+
}
|
|
402
|
+
SetDataSourceToDataViewControl(dvControl, dataTable, propertyName) {
|
|
403
|
+
this._commandType = InteractiveCommandType.SET_DATA_SOURCE_TO_DVCONTROL;
|
|
404
|
+
this._obj1 = dvControl;
|
|
405
|
+
this._obj2 = dataTable;
|
|
406
|
+
this._str = propertyName;
|
|
407
|
+
this.Invoke();
|
|
408
|
+
}
|
|
409
|
+
IsComboBoxInDroppedDownState(comboBox, line) {
|
|
410
|
+
this._commandType = InteractiveCommandType.IS_COMBO_DROPPED_DOWN;
|
|
411
|
+
this._obj1 = comboBox;
|
|
412
|
+
this._line = line;
|
|
413
|
+
this.Invoke();
|
|
414
|
+
return this._boolVal;
|
|
415
|
+
}
|
|
416
|
+
ExecuteCallJS(form, formName, functionName, args) {
|
|
417
|
+
this._commandType = InteractiveCommandType.CALL_JS;
|
|
418
|
+
this._obj2 = form;
|
|
419
|
+
this.controlName = formName;
|
|
420
|
+
this._str = functionName;
|
|
421
|
+
this.arguments = args;
|
|
422
|
+
this.Invoke();
|
|
423
|
+
return this.resultString;
|
|
424
|
+
}
|
|
425
|
+
Invoke() {
|
|
426
|
+
GuiCommandQueue.getInstance().invoke();
|
|
427
|
+
if (this._obj2 instanceof ControlBase) {
|
|
428
|
+
let controlBase = this._obj2;
|
|
429
|
+
this.TaskTag = controlBase.TaskTag;
|
|
430
|
+
this.controlName = controlBase.UniqueName;
|
|
431
|
+
}
|
|
432
|
+
else if (this._obj2 instanceof GuiMgForm) {
|
|
433
|
+
let guiMgForm = this._obj2;
|
|
434
|
+
this.TaskTag = guiMgForm.TaskTag;
|
|
435
|
+
}
|
|
436
|
+
else
|
|
437
|
+
this.TaskTag = '0';
|
|
438
|
+
UIBridge.getInstance().ExecuteInteractiveCommand(this);
|
|
439
|
+
}
|
|
440
|
+
OnRemoveDNControlValueChangedHandler() {
|
|
441
|
+
Events.WriteExceptionToLog('RemoveDNControlValueChangedHandler - Not Implemented Yet');
|
|
442
|
+
}
|
|
443
|
+
OnAddDNControlValueChangedHandler() {
|
|
444
|
+
Events.WriteExceptionToLog('AddDNControlValueChangedHandler - Not Implemented Yet');
|
|
445
|
+
}
|
|
446
|
+
OnGetRtfValueBeforeEnteringControl() {
|
|
447
|
+
Events.WriteExceptionToLog('OnGetOrgRtfValue - Not Implemented Yet');
|
|
448
|
+
}
|
|
449
|
+
onInvokeUDP() {
|
|
450
|
+
}
|
|
451
|
+
onFileOpenDialogBox() {
|
|
452
|
+
}
|
|
453
|
+
onFileSaveDialogBox() {
|
|
454
|
+
}
|
|
455
|
+
onCreateDialog() {
|
|
456
|
+
}
|
|
457
|
+
onOpenDialog() {
|
|
458
|
+
}
|
|
459
|
+
onCloseDialog() {
|
|
460
|
+
}
|
|
461
|
+
isFormActive_1() {
|
|
462
|
+
}
|
|
463
|
+
onDisposeAllForms() {
|
|
464
|
+
}
|
|
465
|
+
onGetFontMetrics() {
|
|
466
|
+
}
|
|
467
|
+
onGetResolution() {
|
|
468
|
+
}
|
|
469
|
+
onCaretPosGet() {
|
|
470
|
+
}
|
|
471
|
+
onGetIsTopOfTextBox() {
|
|
472
|
+
return this._boolVal;
|
|
473
|
+
}
|
|
474
|
+
onGetIsEndOfTextBox() {
|
|
475
|
+
return this._boolVal;
|
|
476
|
+
}
|
|
477
|
+
onSelectionGet() {
|
|
478
|
+
}
|
|
479
|
+
onSetEditText() {
|
|
480
|
+
}
|
|
481
|
+
onInsertEditText() {
|
|
482
|
+
}
|
|
483
|
+
onSetBrowserText() {
|
|
484
|
+
}
|
|
485
|
+
onSetSelection() {
|
|
486
|
+
}
|
|
487
|
+
onSetSuggestedValue() {
|
|
488
|
+
}
|
|
489
|
+
onGetRowsInPage() {
|
|
490
|
+
}
|
|
491
|
+
onGetHiddenRowsCountInTable() {
|
|
492
|
+
}
|
|
493
|
+
onGetTopIndex() {
|
|
494
|
+
}
|
|
495
|
+
getClientBounds_1() {
|
|
496
|
+
}
|
|
497
|
+
onPostKeyEvent() {
|
|
498
|
+
}
|
|
499
|
+
onPostCharEvent() {
|
|
500
|
+
}
|
|
501
|
+
OnSetGetSuggestedValueOfChoiceControlOnTagData() {
|
|
502
|
+
}
|
|
503
|
+
onSendImeMsg() {
|
|
504
|
+
}
|
|
505
|
+
onSetCursor() {
|
|
506
|
+
}
|
|
507
|
+
invokeRequired() {
|
|
508
|
+
return false;
|
|
509
|
+
}
|
|
510
|
+
onGetLastWindowState() {
|
|
511
|
+
}
|
|
512
|
+
onGetLinkedParentIdx() {
|
|
513
|
+
}
|
|
514
|
+
onGetColumnsState() {
|
|
515
|
+
}
|
|
516
|
+
onCanFocus() {
|
|
517
|
+
}
|
|
518
|
+
OnGetSelectedIndice() {
|
|
519
|
+
}
|
|
520
|
+
OnGetHasIndent() {
|
|
521
|
+
}
|
|
522
|
+
MapWidget_1() {
|
|
523
|
+
}
|
|
524
|
+
OnGetDVControlPositionIsn() {
|
|
525
|
+
}
|
|
526
|
+
OnActivateForm() {
|
|
527
|
+
}
|
|
528
|
+
OnIsComboDroppedDowndState() {
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
GuiInteractiveBase.lockObject = null;
|
|
532
|
+
export class GuiInteractive extends GuiInteractiveBase {
|
|
533
|
+
OnGetRtfValueBeforeEnteringControl() {
|
|
534
|
+
}
|
|
535
|
+
onGetBrowserText() {
|
|
536
|
+
}
|
|
537
|
+
onBrowserExecute() {
|
|
538
|
+
}
|
|
539
|
+
onDirectoryDialogBox() {
|
|
540
|
+
}
|
|
541
|
+
constructor() {
|
|
542
|
+
super();
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpSW50ZXJhY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL2d1aS9sb3cvR3VpSW50ZXJhY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXZDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFcEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsTUFBTSxDQUFOLElBQVksc0JBcUVYO0FBckVELFdBQVksc0JBQXNCO0lBQ2hDLDJGQUFnQixDQUFBO0lBQ2hCLHVGQUFjLENBQUE7SUFDZCwrRUFBVSxDQUFBO0lBQ1YsNkVBQVMsQ0FBQTtJQUNULDJGQUFnQixDQUFBO0lBQ2hCLDJGQUFnQixDQUFBO0lBQ2hCLHlGQUFlLENBQUE7SUFDZixxRkFBYSxDQUFBO0lBQ2IsaUZBQVcsQ0FBQTtJQUNYLDZFQUFTLENBQUE7SUFDVCxvR0FBb0IsQ0FBQTtJQUNwQiw4RkFBaUIsQ0FBQTtJQUNqQixzRkFBYSxDQUFBO0lBQ2IsNEZBQWdCLENBQUE7SUFDaEIsc0ZBQWEsQ0FBQTtJQUNiLHNGQUFhLENBQUE7SUFDYixzRkFBYSxDQUFBO0lBQ2Isb0ZBQVksQ0FBQTtJQUNaLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLDBGQUFlLENBQUE7SUFDZix3RkFBYyxDQUFBO0lBQ2QsMEZBQWUsQ0FBQTtJQUNmLGdGQUFVLENBQUE7SUFDViw4RkFB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QUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBR08sY0FBYztJQUN0QixDQUFDO0lBWU8sYUFBYTtJQUNyQixDQUFDO0lBR08sZ0JBQWdCO0lBQ3hCLENBQUM7SUFHRCxnQkFBZ0I7SUFDaEIsQ0FBQztJQUdELGNBQWM7SUFDZCxDQUFDO0lBR0QsbUJBQW1CO0lBQ25CLENBQUM7SUFJRCxlQUFlO0lBQ2YsQ0FBQztJQUlELDJCQUEyQjtJQUMzQixDQUFDO0lBSUQsYUFBYTtJQUNiLENBQUM7SUFHTyxpQkFBaUI7SUFDekIsQ0FBQztJQU1ELGNBQWM7SUFDZCxDQUFDO0lBSUQsZUFBZTtJQUNmLENBQUM7SUFNRCw4Q0FBOEM7SUFDOUMsQ0FBQztJQUdPLFlBQVk7SUFDcEIsQ0FBQztJQUdELFdBQVc7SUFDWCxDQUFDO0lBSU8sY0FBYztRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFLTyxvQkFBb0I7SUFDNUIsQ0FBQztJQU1PLG9CQUFvQjtJQUM1QixDQUFDO0lBSU8saUJBQWlCO0lBQ3pCLENBQUM7SUFJTyxVQUFVO0lBQ2xCLENBQUM7SUFLTyxtQkFBbUI7SUFDM0IsQ0FBQztJQU1PLGNBQWM7SUFDdEIsQ0FBQztJQUtPLFdBQVc7SUFDbkIsQ0FBQztJQUtELHlCQUF5QjtJQUN6QixDQUFDO0lBS0QsY0FBYztJQUNkLENBQUM7SUFPRCwwQkFBMEI7SUFDMUIsQ0FBQzs7QUFuaUNjLDZCQUFVLEdBQVEsSUFBSSxDQUFDO0FBc2lDeEMsTUFBTSxPQUFPLGNBQWUsU0FBUSxrQkFBa0I7SUFFcEQsa0NBQWtDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLENBQUM7SUFFRDtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHdWlNZ0NvbnRyb2x9IGZyb20gJy4uL0d1aU1nQ29udHJvbCc7XHJcbmltcG9ydCB7TWdWYWx1ZX0gZnJvbSAnLi4vTWdWYWx1ZSc7XHJcbmltcG9ydCB7R3VpTWdGb3JtfSBmcm9tICcuLi9HdWlNZ0Zvcm0nO1xyXG5pbXBvcnQge0RpYWxvZ0hhbmRsZXJ9IGZyb20gJy4vRGlhbG9nSGFuZGxlcic7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQge0xpc3R9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtVSUJyaWRnZX0gZnJvbSAnLi4vLi4vVUlCcmlkZ2UnO1xyXG5pbXBvcnQge0NvbnRyb2xCYXNlfSBmcm9tICcuLi9Db250cm9sQmFzZSc7XHJcbmltcG9ydCB7R3VpQ29tbWFuZFF1ZXVlfSBmcm9tICcuL0d1aUNvbW1hbmRRdWV1ZSc7XHJcblxyXG5leHBvcnQgZW51bSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlIHtcclxuICBHRVRfRk9OVF9NRVRSSUNTLFxyXG4gIEdFVF9SRVNPTFVUSU9OLFxyXG4gIEdFVF9CT1VORFMsXHJcbiAgR0VUX1ZBTFVFLFxyXG4gIFNFVF9CUk9XU0VSX1RFWFQsXHJcbiAgR0VUX0JST1dTRVJfVEVYVCxcclxuICBCUk9XU0VSX0VYRUNVVEUsXHJcbiAgR0VUX1RPUF9JTkRFWCxcclxuICBNRVNTQUdFX0JPWCxcclxuICBTRVRfVElUTEUsXHJcbiAgRElSRUNUT1JZX0RJQUxPR19CT1gsXHJcbiAgR0VUX0NMSUVOVF9CT1VORFMsXHJcbiAgU0VUX0VESVRfVEVYVCxcclxuICBJTlNFUlRfRURJVF9URVhULFxyXG4gIFNFVF9TRUxFQ1RJT04sXHJcbiAgR0VUX1NFTEVDVElPTixcclxuICBHRVRfQ0FSRVRfUE9TLFxyXG4gIFJFRlJFU0hfUEFHRSxcclxuICBHRVRfSVNfVE9QX09GX1RFWFRCT1gsXHJcbiAgR0VUX0lTX0VORF9PRl9URVhUQk9YLFxyXG4gIENMSVBCT0FSRF9HRVRfQ09OVEVOVCxcclxuICBDTElQQk9BUkRfU0VUX0NPTlRFTlQsXHJcbiAgQ0xJUEJPQVJEX1BBU1RFLFxyXG4gIFBPU1RfS0VZX0VWRU5ULFxyXG4gIFBPU1RfQ0hBUl9FVkVOVCxcclxuICBTRVRfQ1VSU09SLFxyXG4gIERJU1BPU0VfQUxMX0ZPUk1TLFxyXG4gIEdFVF9ST1dTX0lOX1BBR0UsXHJcbiAgR0VUX0hJRERFTl9ST1dTX0NPVU5UX0lOX1RBQkxFLFxyXG4gIEZJTEVfT1BFTl9ESUFMT0dfQk9YLFxyXG4gIEZJTEVfU0FWRV9ESUFMT0dfQk9YLFxyXG4gIENSRUFURV9ESUFMT0csXHJcbiAgT1BFTl9ESUFMT0csXHJcbiAgQ0xPU0VfRElBTE9HLFxyXG4gIFNFVF9HRVRfU1VHR0VTVEVEX1ZBTFVFX0ZPUl9DSE9JQ0VfQ09OVFJPTF9PTl9UQUdEQVRBLFxyXG4gIFJFRkxFQ1RJT05fSU5WT0tFLFxyXG4gIFJFRkxFQ1RJT05fU0VULFxyXG4gIEdFVF9MQVNUX1dJTkRPV19TVEFURSxcclxuICBHRVRfRlJBTUVTX0JPVU5EUyxcclxuICBHRVRfTElOS0VEX1BBUkVOVF9JRFgsXHJcbiAgR0VUX0ZPUk1fQk9VTkRTLFxyXG4gIEdFVF9DT0xVTU5TX1NUQVRFLFxyXG4gIEdFVF9GT1JNX0hBTkRMRSxcclxuICBHRVRfQ1RSTF9IQU5ETEUsXHJcbiAgSVNfRk9STV9BQ1RJVkUsXHJcbiAgU0VUX01BUktFRF9URVhUX09OX1JJQ0hfRURJVCxcclxuICBTRU5EX0lNRV9NU0csXHJcbiAgQ0FOX0ZPQ1VTLFxyXG4gIElOVk9LRV9PU0NPTU1BTkQsXHJcbiAgR0VUX1NFTEVDVEVEX0lORElDRSxcclxuICBTRVRfU1VHR0VTVEVEX1ZBTFVFLFxyXG4gIE1BUF9XSURHRVRfVE9fR1VJX09CSkVDVCxcclxuICBSRU1PVkVfRE5fQ09OVFJPTF9WQUxVRV9DSEFOR0VEX0hBTkRMRVIsXHJcbiAgQUREX0ROX0NPTlRST0xfVkFMVUVfQ0hBTkdFRF9IQU5ETEVSLFxyXG4gIEdFVF9SVEZfVkFMVUVfQkVGT1JFX0VOVEVSSU5HX0NPTlRST0wsXHJcbiAgQVRUQUNIX0ROS0VZX1RPX09CSkVDVCxcclxuICBHRVRfRFZDT05UUk9MX1BPU0lUSU9OX0lTTixcclxuICBDTEVBUl9EQVRBX1RBQkxFLFxyXG4gIFNFVF9EQVRBX1NPVVJDRV9UT19EVkNPTlRST0wsXHJcbiAgQUNUSVZBVEVfRk9STSxcclxuICBJU19DT01CT19EUk9QUEVEX0RPV04sXHJcbiAgT1BFTl9GT1JNX0RFU0lHTkVSLFxyXG4gIElOVk9LRV9VRFBDT01NQU5ELFxyXG4gIEdFVF9IQVNJTkRFTlQsXHJcbiAgR0VUX0lTX1JPV19FRElUSU5HLFxyXG4gIEdFVF9NQVhfUk9XU19JTl9QQUdJTkFURURfVEFCTEUsXHJcbiAgQ0FMTF9KUyxcclxuICBHRVRfTEFTVF9ST1VURVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+IEd1aVV0aWxzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgR1VJIGxheWVyPC9zdW1tYXJ5PlxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpSW50ZXJhY3RpdmVCYXNlIHtcclxuICBfY29tbWFuZFR5cGU6IEludGVyYWN0aXZlQ29tbWFuZFR5cGUgPSAwO1xyXG4gIFRhc2tUYWc6IHN0cmluZyA9IG51bGw7XHJcbiAgY29udHJvbE5hbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIF94OiBudW1iZXIgPSAwO1xyXG4gIF95OiBudW1iZXIgPSAwO1xyXG4gIF9jaGFyOiBzdHJpbmcgPSBudWxsO1xyXG4gIF9zdHI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCk7XHJcbiAgX2ludFZhbDE6IG51bWJlciA9IDA7XHJcbiAgX2xpbmU6IG51bWJlciA9IDA7XHJcbiAgX29iajE6IGFueSA9IG51bGw7XHJcbiAgX3BhcmFtZXRlcnM6IGFueVtdID0gbnVsbDtcclxuICBfYm9vbFZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIF9vYmoyOiBhbnkgPSBudWxsO1xyXG4gIF9tZ1ZhbHVlOiBNZ1ZhbHVlID0gbnVsbDtcclxuICBfc2V0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhcmd1bWVudHMgOiBBcnJheTxhbnk+IDtcclxuICByZXN1bHRTdHJpbmcgOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xyXG4gIHByaXZhdGUgc3RhdGljIGxvY2tPYmplY3Q6IGFueSA9IG51bGw7XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnN0cnVjdG9yIDogc2V0cyB0aGUgY29udGV4dElEIGZvciB0aGUgY3VycmVudCBjb21tYW5kLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFJldHVybnMgd2hldGhlciBjb250cm9sIGlzIGZvY3VzYWJsZSBvciBub3QuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlNZ0NvbnRyb2xcIj4gdGhlIGNvbnRyb2wgd2hpY2ggbmVlZHMgdG8gYmUgY2hlY2tlZC4gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGNhbkZvY3VzKGd1aU1nQ29udHJvbDogR3VpTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0FOX0ZPQ1VTO1xyXG4gICAgdGhpcy5fb2JqMSA9IGd1aU1nQ29udHJvbDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLmJvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IC8vLyBSZXR1cm5zIHRoZSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGZvciBzZWxlY3RlZCBpbmRpY2Ugb2YgbGlzdCBjb250cm9sLi8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ3VpTWdDb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y29tbWEgc2VwYXJhdGVkIHN0cmluZyBmb3Igc2VsZWN0ZWQgaW5kaWNlIG9mIGxpc3QgY29udHJvbDwvcmV0dXJucz5cclxuICBHZXRTZWxlY3RlZEluZGljZShndWlNZ0NvbnRyb2w6IEd1aU1nQ29udHJvbCk6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1NFTEVDVEVEX0lORElDRTtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0NvbnRyb2w7XHJcblxyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgaW5kZW50IGhhcyBiZWVuIGFwcGxpZWQgdG8gUmljaCBFZGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlNZ0NvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0SGFzSW5kZW50KGd1aU1nQ29udHJvbDogR3VpTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0hBU0lOREVOVDtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0NvbnRyb2w7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoaXMgbWV0aG9kZSBpcyBzZXQgVFJVRVxcRkFMU0UgdGhhdCBHdWlVdGlsZXNcXEdldFZhbHVlKCkgbWV0aG9kIHdpbGwgYmUgdXNlXHJcbiAgLy8vIHRoaXMgZmFsZyBzYXkgaWYgdG8gcmV0dXJuIHRoZSA6ICh0cnVlKSBzdWdnZXN0ZWQgdmFsdWUgb3IgKGZhbHNlKXRoZSByZWFsIHZhbHVlXHJcbiAgLy8vIHRoaXMgbWV0aG9kIGlzIHVzZSBmb3IgTUdfQUNUX0NUUkxfTU9ESUZZXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXRTdWdnZXN0ZWRWYWx1ZVwiPjwvcGFyYW0+XHJcbiAgc2V0R2V0U3VnZ2VzdGVkVmFsdWVPZkNob2ljZUNvbnRyb2xPblRhZ0RhdGEoY3RybDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIHJldFN1Z2dlc3RlZFZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0dFVF9TVUdHRVNURURfVkFMVUVfRk9SX0NIT0lDRV9DT05UUk9MX09OX1RBR0RBVEE7XHJcbiAgICB0aGlzLl9vYmoyID0gY3RybDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IHJldFN1Z2dlc3RlZFZhbHVlO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldCB2YWx1ZSBvZiB0aGUgY29udHJvbDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvYmplY3RcIj5hIHJlZmVyZW5jZSB0byB0aGUgcmVsZXZhbnQgb2JqZWN0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZWN0XCI+YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGF0IG9uIHJldHVybiB3aWxsIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCB2YWx1ZXMgb24gc3RyaW5nPC9wYXJhbT5cclxuICBnZXRWYWx1ZShvYmo6IGFueSwgbGluZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVkFMVUU7XHJcbiAgICB0aGlzLl9vYmoyID0gb2JqO1xyXG5cclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUub2JqO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFRvcEluZGV4KHRhYmxlY29udHJvbDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVE9QX0lOREVYO1xyXG4gICAgdGhpcy5fb2JqMiA9IHRhYmxlY29udHJvbDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5faW50VmFsMTtcclxuICB9XHJcblxyXG4gIGdldElzUm93RWRpdGluZyh0YWJsZWNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyLCBpc0xpbmVNb2RlOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX1JPV19FRElUSU5HO1xyXG4gICAgdGhpcy5fb2JqMiA9IHRhYmxlY29udHJvbDtcclxuICAgIHRoaXMuX2ludFZhbDEgPSBsaW5lO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IGlzTGluZU1vZGU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgYnJvd3NlckV4ZWN1dGUoYnJvd3NlckNvbnRyb2w6IEd1aU1nQ29udHJvbCwgdGV4dDogc3RyaW5nLCBzeW5jRXhlYzogYm9vbGVhbiwgbGFuZ3VhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkJST1dTRVJfRVhFQ1VURTtcclxuICAgIHRoaXMuX29iajIgPSBicm93c2VyQ29udHJvbDtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSB0ZXh0O1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5vYmogPSBsYW5ndWFnZTtcclxuXHJcbiAgICAvLyBGb3IgYXN5bmMgZXhlY3V0aW9uLCByZXR1cm4gdHJ1ZSBpZiB0aGUgY29tbWFuZCBpcyBwYXNzZWQgdG8gdGhlIGd1aSB0aHJlYWQuXHJcbiAgICAvLyBGb3Igc3luYyBleGVjdXRpb24sIHJldHVybiB0cnVlIGlmIHRoZSBjb21tYW5kIHdhcyBleGVjdXRlZCBieSB0aGUgZ3VpIHRocmVhZC5cclxuICAgIGlmIChzeW5jRXhlYykge1xyXG4gICAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5ib29sVmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+T3BlbiBtZXNzYWdlIGJveCB3aXRoIHBhcmVudCBmb3JtPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRpdGxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtc2dcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0eWxlXCI+dGhlIHN0eWxlIG9mIHRoZSBtZXNzYWdlIGJveCBjYW4gYmUgZmxhZ3Mgb2YgU3R5bGVzLk1TR0JPWF94eHggPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG1lc3NhZ2UgYm94IHN0eWxlIGZyb20gU3R5bGVzLk1TR0JPWF9YWFg8L3JldHVybnM+XHJcbiAgbWVzc2FnZUJveCh0aXRsZTogc3RyaW5nLCBtc2c6IHN0cmluZywgc3R5bGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUVTU0FHRV9CT1g7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gKChtc2cgPT09IG51bGwpID8gJycgOiBtc2cpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHlsZSA9IHN0eWxlO1xyXG4gICAgRXZlbnRzLlJlZnJlc2hUYWJsZXMoKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5udW1iZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+c2V0IHRpdGxlIHRvIGJyb3dzZXI8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9wTW9zdEZvcm1cIj50aGUgcGFyZW50IGZvcm0gb2YgdGhlIG1lc3NhZ2UgYm94PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0aXRsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBtZXNzYWdlIGJveCBzdHlsZSBmcm9tIFN0eWxlcy5NU0dCT1hfWFhYPC9yZXR1cm5zPlxyXG4gIHNldFRpdGxlKHRvcE1vc3RGb3JtOiBHdWlNZ0Zvcm0sIHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfVElUTEU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX29iajIgPSB0b3BNb3N0Rm9ybTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSAoKHRpdGxlID09PSBudWxsKSA/ICcnIDogdGl0bGUpO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLzxzdW1tYXJ5PlxyXG4gIC8vLyBIYW5kbGVzIEludm9rZSBVRFAgb3BlcmF0aW9uIGZyb20gR1VJIHRocmVhZFxyXG4gIC8vLzwvc3VtbWFyeT5cclxuICAvLy88cGFyYW0gbmFtZT1cImNvbnRleHRJZFwiPkNvbnRleHQgaWQ8L3BhcmFtPlxyXG4gIGludm9rZVVEUChjb250ZXh0SWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSU5WT0tFX1VEUENPTU1BTkQ7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUub2JqID0gY29udGV4dElkO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLm51bWJlcjtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNhcHRpb25cIj5kZXNjcmlwdGlvbiBmb3IgdGhlIGRpYWxvZyB3aW5kb3c8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhdGhcIj5pbml0aWFsIHBhdGggdG8gYnJvd3NlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJiU2hvd05ld0ZvbGRlclwiPnNob3VsZCBzaG93IHRoZSBuZXcgZm9sZGVyIGJ1dHRvbj88L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZGlyZWN0b3J5IHBhdGggc2VsZWN0ZWQgYnkgdXNlcjwvcmV0dXJucz5cclxuICBkaXJlY3RvcnlEaWFsb2dCb3goY2FwdGlvbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGJTaG93TmV3Rm9sZGVyOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5ESVJFQ1RPUllfRElBTE9HX0JPWDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUuY2FwdGlvbiA9IGNhcHRpb247XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnBhdGggPSBwYXRoO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sMSA9IGJTaG93TmV3Rm9sZGVyO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEZpbGUgT3BlbiBEaWFsb2cgQm94XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0aXRsZVwiPkRpYWxvZyB3aW5kb3cgY2FwdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5pdERpclwiPkluaXRpYWwgZGlyZWN0b3J5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmaWx0ZXJOYW1lc1wiPmZpbHRlciBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoZWNrRXhpc3RzXCI+dmVyaWZ5IG9wZW5lZCBmaWxlIGV4aXN0czwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXVsdGlTZWxlY3RcIj5lbmFibGUgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ZmlsZSBwYXRoIHNlbGVjdGVkIGJ5IHVzZXI8L3JldHVybnM+XHJcbiAgZmlsZU9wZW5EaWFsb2dCb3godGl0bGU6IHN0cmluZywgZGlyTmFtZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBmaWx0ZXJOYW1lczogc3RyaW5nLCBjaGVja0V4aXN0czogYm9vbGVhbiwgbXVsdGlTZWxlY3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkZJTEVfT1BFTl9ESUFMT0dfQk9YO1xyXG5cclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS50aXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5wYXRoID0gZGlyTmFtZTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gZmlsZU5hbWU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmZpbHRlciA9IGZpbHRlck5hbWVzO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sVmFsID0gY2hlY2tFeGlzdHM7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmJvb2wxID0gbXVsdGlTZWxlY3Q7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLnN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRmlsZSBTYXZlIERpYWxvZyBCb3hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRpdGxlXCI+Y2FwdGlvbiBvZiB0aGUgZGlhbG9nIHdpbmRvdzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5pdERpclwiPiBpbml0aWFsIGRpcmVjdG9yeTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmlsdGVyTmFtZXNcIj5maWx0ZXIgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWZhdWx0RXh0ZW5zaW9uXCI+IGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBmaWxlIG5hbWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm92ZXJ3cml0ZVByb21wdFwiPiBzaG91bGQgcHJvbXB0IHdoZW4gb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZmlsZT88L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJldEZpbGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5maWxlIHBhdGggc2VsZWN0ZWQgYnkgdXNlcjwvcmV0dXJucz5cclxuICBmaWxlU2F2ZURpYWxvZ0JveCh0aXRsZTogc3RyaW5nLCBkaXJOYW1lOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGZpbHRlck5hbWVzOiBzdHJpbmcsIGRlZmF1bHRFeHRlbnNpb246IHN0cmluZywgb3ZlcndyaXRlUHJvbXB0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5GSUxFX1NBVkVfRElBTE9HX0JPWDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuX21nVmFsdWUucGF0aCA9IGRpck5hbWU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IGZpbGVOYW1lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5maWx0ZXIgPSBmaWx0ZXJOYW1lcztcclxuICAgIHRoaXMuX21nVmFsdWUuY2FwdGlvbiA9IGRlZmF1bHRFeHRlbnNpb247XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmJvb2wxID0gb3ZlcndyaXRlUHJvbXB0O1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+UHV0IENvbW1hbmQgdG8gY3JlYXRlIGRpYWxvZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoYW5kbGVcIj5yZWZlcmVuY2UgdG8gdGhlIGRpYWxvZyBoYW5kbGVyczwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2JqVHlwZVwiPnBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG9iamVjdHMgY29uc3RydWN0b3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcmFtZXRlcnNcIj48L3BhcmFtPlxyXG4gIGNyZWF0ZURpYWxvZyhoYW5kbGU6IERpYWxvZ0hhbmRsZXIsIHBhcmFtZXRlcnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ1JFQVRFX0RJQUxPRztcclxuICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG4gICAgdGhpcy5fb2JqMiA9IGhhbmRsZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+UHV0IENvbW1hbmQgdG8gY2xvc2UgZGlhbG9nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpYWxvZ1wiPjwvcGFyYW0+XHJcbiAgY2xvc2VEaWFsb2coaGFuZGxlOiBEaWFsb2dIYW5kbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0xPU0VfRElBTE9HO1xyXG4gICAgdGhpcy5fb2JqMiA9IGhhbmRsZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHRleHQgdG8gdGhlIHRoZSBjb250cm9sXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0XCI+PC9wYXJhbT5cclxuICBzZXRFZGl0VGV4dChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgdGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0VESVRfVEVYVDtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gdGV4dDtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLmJvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGluc2VydCB0aGUgdGV4dCB0byB0aGUgdGhlIGNvbnRyb2wgYXQgdGhlIGdpdmVuIHBvc2l0aW9uXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0XCI+PC9wYXJhbT5cclxuICBpbnNlcnRFZGl0VGV4dChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgc3RhcnRQb3NpdGlvbjogbnVtYmVyLCB0ZXh0VG9JbnNlcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklOU0VSVF9FRElUX1RFWFQ7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IHRleHRUb0luc2VydDtcclxuICAgIHRoaXMuX2ludFZhbDEgPSBzdGFydFBvc2l0aW9uO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUuYm9vbFZhbDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+IHNldCB0aGUgdGV4dCB0byB0aGUgdGhlIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPjwvcGFyYW0+XHJcbiAgc2V0U2VsZWN0aW9uKGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgY2FyZXRQb3M6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9TRUxFQ1RJT047XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5feCA9IHN0YXJ0O1xyXG4gICAgdGhpcy5feSA9IGVuZDtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5udW1iZXIgPSBjYXJldFBvcztcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHRleHQgdG8gdGhlIHRoZSBjb250cm9sPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRcIj48L3BhcmFtPlxyXG4gIHNldFN1Z2dlc3RlZFZhbHVlKGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgc3VnZ2VzdGVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9TVUdHRVNURURfVkFMVUU7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSBzdWdnZXN0ZWRWYWx1ZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjYXJldCBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgY2FyZXRQb3NHZXQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DQVJFVF9QT1M7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG5cclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5udW1iZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlZnJlc2ggcGFnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgUmVmcmVzaFBhZ2UobmF2aWdhdGVUb1Jvb3RSb3V0ZTogYm9vbGVhbiwgaW5pdGlhbFVybDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUkVGUkVTSF9QQUdFO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IG5hdmlnYXRlVG9Sb290Um91dGU7XHJcbiAgICB0aGlzLl9vYmoxID0gaW5pdGlhbFVybDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrIGlmIHRoZSBDYXJlbCBpcyBQb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBsaW5lIGluIFRleHRCb3guPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGdldElzVG9wT2ZUZXh0Qm94KGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX1RPUF9PRl9URVhUQk9YO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrIGlmIHRoZSBDYXJlbCBpcyBQb3NpdGlvbmVkIG9uIHRoZSBsYXN0IGxpbmUgaW4gVGV4dEJveC48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgZ2V0SXNFbmRPZlRleHRCb3goY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfRU5EX09GX1RFWFRCT1g7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBQb3N0IGEga2V5IGV2ZW50IChlbXVsYXRlIGtleXMgcHJlc3NlZCBieSB0aGUgdXNlcikuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJrZXlDb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdGF0ZU1hc2tcIj48L3BhcmFtPlxyXG4gIHBvc3RLZXlFdmVudChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwga2V5czogc3RyaW5nLCBQb3N0Q2hhcjogYm9vbGVhbiwgZm9yY2VMb2dpY2FsQ29udHJvbFRleHRVcGRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5QT1NUX0tFWV9FVkVOVDtcclxuXHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IGtleXM7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmJvb2wxID0gZm9yY2VMb2dpY2FsQ29udHJvbFRleHRVcGRhdGU7XHJcbiAgICB0aGlzLl9ib29sVmFsID0gUG9zdENoYXI7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2VuZCBXTV9DSEFSIHRvIHRoZSBzcGVjaWZpZWQgY29udHJvbCB2aWEgR1VJIHRocmVhZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoclwiPjwvcGFyYW0+XHJcbiAgcG9zdENoYXJFdmVudChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgY2hyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5QT1NUX0NIQVJfRVZFTlQ7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fY2hhciA9IGNocjtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBkaXNwb3NlIGFsbCB0aGUgc2hlbGxzLiBsYXN0IGRpc3Bvc2Ugd2lsbCBjbG9zZSB0aGUgZGlzcGxheS48L3N1bW1hcnk+XHJcbiAgZGlzcG9zZUFsbEZvcm1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkRJU1BPU0VfQUxMX0ZPUk1TO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmV0dXJuIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFJvd3NJblBhZ2UoY29udHJvbDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUk9XU19JTl9QQUdFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRNYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9NQVhfUk9XU19JTl9QQUdJTkFURURfVEFCTEU7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5faW50VmFsMTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBsYXN0IHJvdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRMYXN0Um91dGUoKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTEFTVF9ST1VURTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRTdHJpbmc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgbnVtYmVyIG9mIGhpZGRlbiByb3dzIChwYXJ0aWFsbHkgb3IgZnVsbHkpIGluIHRhYmxlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0SGlkZGVuUm93c0NvdW50SW5UYWJsZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9ISURERU5fUk9XU19DT1VOVF9JTl9UQUJMRTtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdGhlIGxhc3Qgd2luZG93IHN0YXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldExhc3RXaW5kb3dTdGF0ZShndWlNZ0Zvcm06IEd1aU1nRm9ybSk6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0xBU1RfV0lORE9XX1NUQVRFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGd1aU1nRm9ybTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldHMgbGlua2VkIHBhcmVudCBpZHggb2YgZnJhbWVzZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZyYW1lc2V0XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldExpbmtlZFBhcmVudElkeChmcmFtZXNldDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTElOS0VEX1BBUkVOVF9JRFg7XHJcbiAgICB0aGlzLl9vYmoyID0gZnJhbWVzZXQ7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGNvbHVtbnMgc3RhdGUgLS0tIGxheWVyLCB3aWR0aCBhbmQgd2lkdGhGb3JGaWxsVGFibGVQbGFjZW1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImluZGV4XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldENvbHVtbnNTdGF0ZSh0YWJsZUN0cmw6IEd1aU1nQ29udHJvbCk6IExpc3Q8bnVtYmVyW10+IHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ09MVU1OU19TVEFURTtcclxuICAgIHRoaXMuX29iajIgPSB0YWJsZUN0cmw7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5saXN0T2ZJbnRBcnI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFVwZGF0ZSB0aGUgQ29udHJvbC5UYWdEYXRhLk1hcERhdGEgd2l0aCB0aGUgbmV3T2JqZWN0VG9TZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5ld09iamVjdFRvU2V0XCI+PC9wYXJhbT5cclxuICBNYXBXaWRnZXQobmV3T2JqZWN0VG9TZXQ6IGFueSk6IHZvaWQ7XHJcbiAgTWFwV2lkZ2V0KCk6IHZvaWQ7XHJcbiAgTWFwV2lkZ2V0KG5ld09iamVjdFRvU2V0PzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgdGhpcy5NYXBXaWRnZXRfMChuZXdPYmplY3RUb1NldCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuTWFwV2lkZ2V0XzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgTWFwV2lkZ2V0XzAobmV3T2JqZWN0VG9TZXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk1BUF9XSURHRVRfVE9fR1VJX09CSkVDVDtcclxuICAgIHRoaXMuX29iajEgPSBuZXdPYmplY3RUb1NldDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBBY3RpdmF0ZSB0aGUgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImd1aU1nRm9ybVwiPjwvcGFyYW0+XHJcbiAgQWN0aXZhdGVGb3JtKGd1aU1nRm9ybTogR3VpTWdGb3JtKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQUNUSVZBVEVfRk9STTtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0Zvcm07XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBpZiB0aGUgcGFzc2VkIGZvcm0gaXMgYWN0aXZlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRm9ybUFjdGl2ZShndWlNZ0Zvcm06IEd1aU1nRm9ybSk6IGJvb2xlYW47XHJcbiAgaXNGb3JtQWN0aXZlKCk6IHZvaWQ7XHJcbiAgaXNGb3JtQWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmlzRm9ybUFjdGl2ZV8wKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuaXNGb3JtQWN0aXZlXzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGb3JtQWN0aXZlXzAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9vbFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gR2V0cyB0aGUgUlRGIHZhbHVlIG9mIHRoZSBSVEYgZWRpdCBjb250cm9sIHdoaWNoIHdhcyBzZXQgYmVmb3JlIGVudGVyaW5nIGl0LiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ3VpTWdDb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFJ0ZlZhbHVlQmVmb3JlRW50ZXJpbmdDb250cm9sKGd1aU1nQ29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9SVEZfVkFMVUVfQkVGT1JFX0VOVEVSSU5HX0NPTlRST0w7XHJcbiAgICB0aGlzLl9vYmoyID0gZ3VpTWdDb250cm9sO1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcblxyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldCBQb3NpdGlvbiBJc24gb2YgUm93IGluIERhdGFUYWJsZSBhdHRhY2hlZCB0byBEViBDb250cm9sLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0YVRhYmxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldERWQ29udHJvbFBvc2l0aW9uSXNuKGRhdGFUYWJsZTogYW55LCBsaW5lOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9EVkNPTlRST0xfUE9TSVRJT05fSVNOO1xyXG4gICAgdGhpcy5fb2JqMSA9IGRhdGFUYWJsZTtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXQgUG9zaXRpb24gSXNuIG9mIFJvdyBpbiBEYXRhVGFibGUgYXR0YWNoZWQgdG8gRFYgQ29udHJvbC4gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGFUYWJsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBDbGVhckRhdGF0YWJsZShkdkNvbnRyb2w6IEd1aU1nQ29udHJvbCwgZGF0YVRhYmxlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTEVBUl9EQVRBX1RBQkxFO1xyXG4gICAgdGhpcy5fb2JqMSA9IGR2Q29udHJvbDtcclxuICAgIHRoaXMuX29iajIgPSBkYXRhVGFibGU7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBTZXQgRGF0YXNvdXJjZSBwcm9wZXJ0eSBvZiBEYXRhdmlldyBjb250cm9sLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZHZDb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRhVGFibGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BlcnR5TmFtZVwiPjwvcGFyYW0+XHJcbiAgU2V0RGF0YVNvdXJjZVRvRGF0YVZpZXdDb250cm9sKGR2Q29udHJvbDogR3VpTWdDb250cm9sLCBkYXRhVGFibGU6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfREFUQV9TT1VSQ0VfVE9fRFZDT05UUk9MO1xyXG4gICAgdGhpcy5fb2JqMSA9IGR2Q29udHJvbDtcclxuICAgIHRoaXMuX29iajIgPSBkYXRhVGFibGU7XHJcbiAgICB0aGlzLl9zdHIgPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLzxzdW1tYXJ5PlxyXG4gIC8vLyAgQ2hlY2sgd2hldGhlciB0aGUgY29tYm9ib3ggaXMgaW4gYSBEcm9wcGVkRG93biBzdGF0ZSBvciBub3QuXHJcbiAgLy8vPC9zdW1tYXJ5PlxyXG4gIC8vLzxwYXJhbSBuYW1lPVwiY29tYm9Cb3hcIj5NZ2NvbWJvQm94IGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLzxwYXJhbSBuYW1lPVwibGluZVwiPiEhLjwvcGFyYW0+XHJcbiAgLy8vPHJldHVybnM+Ym9vbDwvcmV0dXJucz5cclxuICBJc0NvbWJvQm94SW5Ecm9wcGVkRG93blN0YXRlKGNvbWJvQm94OiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklTX0NPTUJPX0RST1BQRURfRE9XTjtcclxuICAgIHRoaXMuX29iajEgPSBjb21ib0JveDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9vbFZhbDtcclxuICB9XHJcblxyXG4gIEV4ZWN1dGVDYWxsSlMoZm9ybSAsIGZvcm1OYW1lOiBzdHJpbmcsICBmdW5jdGlvbk5hbWU6IHN0cmluZywgYXJnczogQXJyYXk8YW55Pik6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0FMTF9KUztcclxuICAgIHRoaXMuX29iajIgPSBmb3JtO1xyXG4gICAgdGhpcy5jb250cm9sTmFtZSA9IGZvcm1OYW1lO1xyXG4gICAgdGhpcy5fc3RyID0gZnVuY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdFN0cmluZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ2FsbHMgUnVuKCkgc3luY2hyb25vdXNseSB0byBleGVjdXRlIHRoZSBjb21tYW5kLlxyXG4gIC8vLyBCdXQgYmVmb3JlIHRoYXQsIGl0IGV4ZWN1dGVzIHRoZSBHdWlDb21tYW5kUXVldWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIEludm9rZSgpOiB2b2lkIHtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmludm9rZSgpO1xyXG4gICAgaWYgKHRoaXMuX29iajIgaW5zdGFuY2VvZiBDb250cm9sQmFzZSkge1xyXG4gICAgICBsZXQgY29udHJvbEJhc2U6IENvbnRyb2xCYXNlID0gPENvbnRyb2xCYXNlPnRoaXMuX29iajI7XHJcbiAgICAgIHRoaXMuVGFza1RhZyA9IGNvbnRyb2xCYXNlLlRhc2tUYWc7XHJcbiAgICAgIHRoaXMuY29udHJvbE5hbWUgPSBjb250cm9sQmFzZS5VbmlxdWVOYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9vYmoyIGluc3RhbmNlb2YgR3VpTWdGb3JtKSB7XHJcbiAgICAgIGxldCBndWlNZ0Zvcm06IEd1aU1nRm9ybSA9IDxHdWlNZ0Zvcm0+dGhpcy5fb2JqMjtcclxuICAgICAgdGhpcy5UYXNrVGFnID0gZ3VpTWdGb3JtLlRhc2tUYWc7XHJcbiAgICB9IGVsc2VcclxuICAgICAgdGhpcy5UYXNrVGFnID0gJzAnOyAvLyBnZW5lcmFsIGNvbW1hbmRcclxuXHJcbiAgICBVSUJyaWRnZS5nZXRJbnN0YW5jZSgpLkV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGltcGxlbWVudHMgdGhlIFJ1bm5hYmxlIHJ1biBtZXRob2QgZm9yIGNhbGxpbmcgRGlzcGxheS5zeW5jRXhlYygpPC9zdW1tYXJ5PlxyXG4gIC8vIFJ1bigpOiB2b2lkIHtcclxuICAvLyAgIC8vIFNldHMgdGhlIGN1cnJlbnRDb250ZXh0SURcclxuICAvLyAgIGxldCBjb250ZXh0SURHdWFyZCA9IG5ldyBDb250ZXh0SURHdWFyZCh0aGlzLl9jb250ZXh0SUQpO1xyXG4gIC8vICAgdHJ5IHtcclxuICAvLyAgICAgc3dpdGNoICh0aGlzLl9jb21tYW5kVHlwZSkge1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRk9OVF9NRVRSSUNTOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldEZvbnRNZXRyaWNzKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JFU09MVVRJT046XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0UmVzb2x1dGlvbigpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9CT1VORFM6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQm91bmRzKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1ZBTFVFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblZhbHVlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0JST1dTRVJfVEVYVDpcclxuICAvLyAgICAgICAgIHRoaXMub25TZXRCcm93c2VyVGV4dCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9CUk9XU0VSX1RFWFQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0QnJvd3NlclRleHQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5CUk9XU0VSX0VYRUNVVEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQnJvd3NlckV4ZWN1dGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVE9QX0lOREVYOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldFRvcEluZGV4KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUVTU0FHRV9CT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uTWVzc2FnZUJveCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkRJUkVDVE9SWV9ESUFMT0dfQk9YOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkRpcmVjdG9yeURpYWxvZ0JveCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DTElFTlRfQk9VTkRTOlxyXG4gIC8vICAgICAgICAgdGhpcy5nZXRDbGllbnRCb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfRURJVF9URVhUOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNldEVkaXRUZXh0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSU5TRVJUX0VESVRfVEVYVDpcclxuICAvLyAgICAgICAgIHRoaXMub25JbnNlcnRFZGl0VGV4dCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9TRUxFQ1RJT046XHJcbiAgLy8gICAgICAgICB0aGlzLm9uU2V0U2VsZWN0aW9uKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1NFTEVDVElPTjpcclxuICAvLyAgICAgICAgIHRoaXMub25TZWxlY3Rpb25HZXQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ0FSRVRfUE9TOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkNhcmV0UG9zR2V0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX1RPUF9PRl9URVhUQk9YOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldElzVG9wT2ZUZXh0Qm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX0VORF9PRl9URVhUQk9YOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldElzRW5kT2ZUZXh0Qm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0xJUEJPQVJEX0dFVF9DT05URU5UOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkNsaXBib2FyZFJlYWQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTElQQk9BUkRfU0VUX0NPTlRFTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2xpcGJvYXJkV3JpdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTElQQk9BUkRfUEFTVEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2xpcGJvYXJkUGFzdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5QT1NUX0tFWV9FVkVOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25Qb3N0S2V5RXZlbnQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5QT1NUX0NIQVJfRVZFTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uUG9zdENoYXJFdmVudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9DVVJTT1I6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uU2V0Q3Vyc29yKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRElTUE9TRV9BTExfRk9STVM6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uRGlzcG9zZUFsbEZvcm1zKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JPV1NfSU5fUEFHRTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRSb3dzSW5QYWdlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0hJRERFTl9ST1dTX0NPVU5UX0lOX1RBQkxFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldEhpZGRlblJvd3NDb3VudEluVGFibGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5GSUxFX09QRU5fRElBTE9HX0JPWDpcclxuICAvLyAgICAgICAgIHRoaXMub25GaWxlT3BlbkRpYWxvZ0JveCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkZJTEVfU0FWRV9ESUFMT0dfQk9YOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkZpbGVTYXZlRGlhbG9nQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ1JFQVRFX0RJQUxPRzpcclxuICAvLyAgICAgICAgIHRoaXMub25DcmVhdGVEaWFsb2coKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5PUEVOX0RJQUxPRzpcclxuICAvLyAgICAgICAgIHRoaXMub25PcGVuRGlhbG9nKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0xPU0VfRElBTE9HOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkNsb3NlRGlhbG9nKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0dFVF9TVUdHRVNURURfVkFMVUVfRk9SX0NIT0lDRV9DT05UUk9MX09OX1RBR0RBVEE6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uU2V0R2V0U3VnZ2VzdGVkVmFsdWVPZkNob2ljZUNvbnRyb2xPblRhZ0RhdGEoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTEFTVF9XSU5ET1dfU1RBVEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0TGFzdFdpbmRvd1N0YXRlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0ZSQU1FU19CT1VORFM6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0RnJhbWVzQm91bmRzKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0xJTktFRF9QQVJFTlRfSURYOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldExpbmtlZFBhcmVudElkeCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9GT1JNX0JPVU5EUzpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRGb3JtQm91bmRzKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0NPTFVNTlNfU1RBVEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0Q29sdW1uc1N0YXRlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0ZPUk1fSEFORExFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldEZvcm1IYW5kbGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ1RSTF9IQU5ETEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0Q3RybEhhbmRsZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklTX0ZPUk1fQUNUSVZFOlxyXG4gIC8vICAgICAgICAgdGhpcy5pc0Zvcm1BY3RpdmUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRFJPUFBFRF9EQVRBOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldERyb3BwZWREYXRhKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0RST1BQRURfUE9JTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0RHJvcHBlZFBvaW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0RST1BQRURfU0VMRUNUSU9OOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldERyb3BwZWRTZWxlY3Rpb24oKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5EUk9QX0ZPUk1BVF9TVVBQT1JURUQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2hlY2tEcm9wRm9ybWF0UHJlc2VudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9JU19CRUdJTl9EUkFHOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldElzQmVnaW5EcmFnKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQUNUSVZBVEVfTkVYVF9PUl9QUkVWSU9VU19NRElfQ0hJTEQ6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uQWN0aXZhdGVOZXh0T3JQcmV2aW91c01ESUNoaWxkKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VORF9JTUVfTVNHOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNlbmRJbWVNc2coKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DQU5fRk9DVVM6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2FuRm9jdXMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfU0VMRUNURURfSU5ESUNFOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbkdldFNlbGVjdGVkSW5kaWNlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX1NVR0dFU1RFRF9WQUxVRTpcclxuICAvLyAgICAgICAgIHRoaXMub25TZXRTdWdnZXN0ZWRWYWx1ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk1BUF9XSURHRVRfVE9fR1VJX09CSkVDVDpcclxuICAvLyAgICAgICAgIHRoaXMuTWFwV2lkZ2V0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUkVNT1ZFX0ROX0NPTlRST0xfVkFMVUVfQ0hBTkdFRF9IQU5ETEVSOlxyXG4gIC8vICAgICAgICAgdGhpcy5PblJlbW92ZUROQ29udHJvbFZhbHVlQ2hhbmdlZEhhbmRsZXIoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5BRERfRE5fQ09OVFJPTF9WQUxVRV9DSEFOR0VEX0hBTkRMRVI6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uQWRkRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlcigpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9SVEZfVkFMVUVfQkVGT1JFX0VOVEVSSU5HX0NPTlRST0w6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0UnRmVmFsdWVCZWZvcmVFbnRlcmluZ0NvbnRyb2woKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTURJX0NISUxEX0NPVU5UOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbkdldE1ESUNoaWxkQ291bnQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5BQ1RJVkFURV9GT1JNOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbkFjdGl2YXRlRm9ybSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkVOQUJMRV9NRU5VX0VOVFJZOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbkVuYWJsZU1lbnVFbnRyeSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNIT1dfQ09OVEVYVF9NRU5VOlxyXG4gIC8vICAgICAgICAgdGhpcy5PblNob3dDb250ZXh0TWVudSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklTX0NPTUJPX0RST1BQRURfRE9XTjpcclxuICAvLyAgICAgICAgIHRoaXMuT25Jc0NvbWJvRHJvcHBlZERvd25kU3RhdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5JTlZPS0VfVURQQ09NTUFORDpcclxuICAvLyAgICAgICAgIHRoaXMub25JbnZva2VVRFAoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSEFTSU5ERU5UOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbkdldEhhc0luZGVudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIGNhdGNoIChleCkge1xyXG4gIC8vICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAvLyAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgLy8gICAgICAgdGhyb3cgZXg7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZWxzZVxyXG4gIC8vICAgICAgIHRocm93IGV4OyAvLyBSZXNldCB0aGUgY3VycmVudCBjb250ZXh0SUQuXHJcbiAgLy8gICB9XHJcbiAgLy8gICBmaW5hbGx5IHtcclxuICAvLyAgICAgY29udGV4dElER3VhcmQuRGlzcG9zZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBSZW1vdmUgdGhlIFZhbHVlQ2hhbmdlZEhhbmRsZXIuIDwvc3VtbWFyeT5cclxuICBPblJlbW92ZUROQ29udHJvbFZhbHVlQ2hhbmdlZEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZygnUmVtb3ZlRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlciAtIE5vdCBJbXBsZW1lbnRlZCBZZXQnKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+IEFkZCB0aGUgVmFsdWVDaGFuZ2VkSGFuZGxlci4gPC9zdW1tYXJ5PlxyXG4gIE9uQWRkRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlcigpOiB2b2lkIHtcclxuICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdBZGRETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyIC0gTm90IEltcGxlbWVudGVkIFlldCcpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXRzIHRoZSBSVEYgdmFsdWUgb2YgdGhlIFJURiBlZGl0IGNvbnRyb2wgd2hpY2ggd2FzIHNldCBiZWZvcmUgZW50ZXJpbmcgaXQuIDwvc3VtbWFyeT5cclxuICBPbkdldFJ0ZlZhbHVlQmVmb3JlRW50ZXJpbmdDb250cm9sKCk6IHZvaWQge1xyXG4gICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coJ09uR2V0T3JnUnRmVmFsdWUgLSBOb3QgSW1wbGVtZW50ZWQgWWV0Jyk7XHJcbiAgfVxyXG5cclxuLy8vIG1ldGhvZHMgc3VzcGVjdGVkIGFzIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBHdWlJbnRlcmFjdGl2ZSBjbGFzc2VzIG9mIHRoZSBzdGFuZGFyZC9jb21wYWN0IGZyYW1ld29ya3NcclxuICBhYnN0cmFjdCBvbkdldEJyb3dzZXJUZXh0KCk6IHZvaWQgO1xyXG5cclxuICBhYnN0cmFjdCBvbkJyb3dzZXJFeGVjdXRlKCk6IHZvaWQgO1xyXG5cclxuXHJcbiAgLy8vPHN1bW1hcnk+XHJcbiAgLy8vIEhhbmRsZXMgSW52b2tlIFVEUCBvcGVyYXRpb24gZnJvbSBHVUkgdGhyZWFkXHJcbiAgLy8vPC9zdW1tYXJ5PlxyXG4gIG9uSW52b2tlVURQKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3Qgb25EaXJlY3RvcnlEaWFsb2dCb3goKTogdm9pZCA7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gSGFuZGxlIHRoZSBmaWxlIG9wZW4gZGlhbG9nIGJveFxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25GaWxlT3BlbkRpYWxvZ0JveCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gSGFuZGxlIHRoZSBmaWxlIHNhdmUgZGlhbG9nIGJveFxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25GaWxlU2F2ZURpYWxvZ0JveCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5DcmVhdGUgZGlhbG9nPC9zdW1tYXJ5PlxyXG4gIG9uQ3JlYXRlRGlhbG9nKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pk9wZW5zIGRpYWxvZzwvc3VtbWFyeT5cclxuICBvbk9wZW5EaWFsb2coKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PkNsb3NlcyBkaWFsb2c8L3N1bW1hcnk+XHJcbiAgb25DbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5UaGlzIGZ1bmN0aW9uIHJldHVybnMgaWYgdGhlIGZvcm0gaXMgYWN0aXZlIG9yIG5vdC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaXNGb3JtQWN0aXZlXzEoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBkaXNwb3NlIGFsbCBzaGVsbHMuPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25EaXNwb3NlQWxsRm9ybXMoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNhbGN1bGF0aW5nIHRoZSBmb250IG1ldHJpY3M8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldEZvbnRNZXRyaWNzKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT4gR2V0cyB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY29udHJvbC4gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25HZXRSZXNvbHV0aW9uKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm4gdGhlIGNhcmV0IHBvc2l0aW9uIG9uIHRoZSBnaXZlbiBjb250cm9sPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25DYXJldFBvc0dldCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIGNhcmV0IGlzIHBvc2l0aW9uZWQgb24gdGhlIGZpcnN0IGxpbmUgb2YgVGV4dEJveDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uR2V0SXNUb3BPZlRleHRCb3goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9vbFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIGNhcmV0IGlzIHBvc2l0aW9uZWQgb24gdGhlIGxhc3QgbGluZSBvZiBUZXh0Qm94PC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25HZXRJc0VuZE9mVGV4dEJveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm4gdGhlIGNhcmV0IHBvc2l0aW9uIG9uIHRoZSBnaXZlbiBjb250cm9sPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25TZWxlY3Rpb25HZXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgLy8gcHJpdmF0ZSBvblZhbHVlKCk6IHZvaWQge1xyXG4gIC8vXHJcbiAgLy8gICBVSUJyaWRnZS5nZXRJbnN0YW5jZSgpLkdldEludGVyYWN0aXZlVmFsdWUodGhpcy50YXNrVGFnLCB0aGlzKTtcclxuICAvL1xyXG4gIC8vICAgLy90aGlzLl9tZ1ZhbHVlLnN0ciA9IFVJQnJpZGdlLmdldEluc3RhbmNlKCkuR2V0Q29udHJvbFZhbHVlKGNvbnRyb2xCYXNlLlRhc2tUYWcsICh0aGlzLl9saW5lKS50b1N0cmluZygpLCBjb250cm9sQmFzZS5VbmlxdWVOYW1lKTtcclxuICAvL1xyXG4gIC8vIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHRleHQgaW4gdGhlIHRleHQgY29udHJvbC48L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblNldEVkaXRUZXh0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBpbnNlcnQgdGhlIHRleHQgdG8gdGhlIHRleHQgY29udHJvbCBhdCBhIGdpdmVuIHBvc2l0aW9uLjwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uSW5zZXJ0RWRpdFRleHQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgdGV4dChodG1sKSBvbiB0aGUgYnJvd3NlciBjb250cm9sPC9zdW1tYXJ5PlxyXG4gIG9uU2V0QnJvd3NlclRleHQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgc2VsZWN0aW9uIGluIHRoZSB0ZXh0IGNvbnRyb2wuPC9zdW1tYXJ5PlxyXG4gIG9uU2V0U2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHN1Z2dlc3RlZCB2YWx1ZSBmb3IgY2hvaWNlIGNvbnRyb2wuPC9zdW1tYXJ5PlxyXG4gIG9uU2V0U3VnZ2VzdGVkVmFsdWUoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGdldCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIG9uR2V0Um93c0luUGFnZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmV0dXJuIHRoZSBudW1iZXIgb2YgaGlkZGVuIHJvd3MgKHBhcnRpYWxseSBvciBmdWxseSkgaW4gdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIG9uR2V0SGlkZGVuUm93c0NvdW50SW5UYWJsZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZ2V0IHRhYmxlIHRvcCBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25HZXRUb3BJbmRleCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZ2V0IHRoZSBDbGllbnQgYm91bmRzIG9mIHRoZSBvYmplY3Q8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRDbGllbnRCb3VuZHNfMSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHBvc3QgYSBrZXkgY29tYmluYXRpb24uIFRoaXMgZW11bGF0ZXMga2V5cyBwcmVzc2VkIGJ5IHRoZSB1c2VyLiBTZXR0aW5nIHRoZSBkYXRhIGluIHRoZSB3aWRnZXQgdG8gaWdub3JlXHJcbiAgLy8vIGtleSBkb3duLCB3aWxsIGNhdXNlIHRoZSBPUyB0byBoYW5kbGUgdGhlIGV2ZW50IGluc3RlYWQgb2YgdXMuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvblBvc3RLZXlFdmVudCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU2VuZCBXTV9DSEFSIG1lc3NhZ2UgdG8gQ29tYm9Cb3ggYW5kIExpc3RCb3guIFRoaXMgZW11bGF0ZXMga2V5cyBwcmVzc2VkIGJ5IHRoZSB1c2VyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25Qb3N0Q2hhckV2ZW50KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE9uU2V0R2V0U3VnZ2VzdGVkVmFsdWVPZkNob2ljZUNvbnRyb2xPblRhZ0RhdGEoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IChLb3JlYW4gSU1FKSBzZW5kIE1HX0lNRV9YWFggbWVzc2FnZSB0byBNZ1RleHRCb3ggPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25TZW5kSW1lTXNnKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNldCBjdXJzb3Igb24gZm9ybXM8L3N1bW1hcnk+XHJcbiAgb25TZXRDdXJzb3IoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+dHJ1ZSBpZiB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBkZWxlZ2F0ZWQgdG8gdGhlIEdVSSB0aHJlYWQ8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGludm9rZVJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gd2luZG93U3RhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25HZXRMYXN0V2luZG93U3RhdGUoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgcGFyZW50IGxpbmsgSWR4IG9mIHRoaXMgZnJhbWVzZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25HZXRMaW5rZWRQYXJlbnRJZHgoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy88c3VtbWFyeT5nZXQgbGF5ZXIgb2YgdGhlIGNvbHVtblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldENvbHVtbnNTdGF0ZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEluZGljYXRlcyBpZiBhIGNvbnRyb2wgY2FuIGJlIHNlbGVjdGVkLiA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkNhbkZvY3VzKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIHNlbGVjdGVkIGluZGljZSBvZiB0aGUgbGlzdGJveCBjb250cm9sLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBPbkdldFNlbGVjdGVkSW5kaWNlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHRydWUgaWYgY29udHJvbCBoYXMgaW5kZW50IGFwcGxpZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBPbkdldEhhc0luZGVudCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gTWFwIFdpZGdldCB0byBHdWkgb2JqZWN0IChNZ0Zvcm0vTWdTdGF0dXNCYXIvTWdTdGF0dXNQYW5lKSBmb3IgTURJIGZyYW1lIGZvciBhIHBhcmFsbGVsIGNvbnRleHRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgTWFwV2lkZ2V0XzEoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IFBvc2l0aW9uSXNuIG9mIERhdGFSb3cgRnJvbSBEYXRhVGFibGUgYXR0YWNoZWQgdG8gRFZDb250cm9sLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgT25HZXREVkNvbnRyb2xQb3NpdGlvbklzbigpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQWN0aXZhdGUgdGhlIGZvcm0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBPbkFjdGl2YXRlRm9ybSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy88c3VtbWFyeT5cclxuICAvLy8gIENoZWNrIHdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIGluIGRyb3BwZWQgZG93biBzdGF0ZS5cclxuICAvLy88L3N1bW1hcnk+XHJcbiAgLy8vPHJldHVybnM+ISEuPC9yZXR1cm5zPlxyXG4gIE9uSXNDb21ib0Ryb3BwZWREb3duZFN0YXRlKCk6IHZvaWQge1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEd1aUludGVyYWN0aXZlIGV4dGVuZHMgR3VpSW50ZXJhY3RpdmVCYXNlIHtcclxuXHJcbiAgT25HZXRSdGZWYWx1ZUJlZm9yZUVudGVyaW5nQ29udHJvbCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG9uR2V0QnJvd3NlclRleHQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBvbkJyb3dzZXJFeGVjdXRlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgb25EaXJlY3RvcnlEaWFsb2dCb3goKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|