@magic-xpa/gui 4.1100.0-dev4110.99 → 4.1101.0-dev4111.271
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/README.md +7 -7
- package/{esm2020 → esm2022}/index.mjs +71 -71
- package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
- package/esm2022/src/Commands.mjs +184 -0
- package/esm2022/src/Events.mjs +425 -0
- package/{esm2020 → esm2022}/src/EventsProcessor.mjs +66 -66
- package/{esm2020 → esm2022}/src/FocusManager.mjs +33 -33
- package/esm2022/src/GuiConstants.mjs +68 -0
- package/{esm2020 → esm2022}/src/GuiEnums.mjs +301 -300
- package/esm2022/src/GuiEnvironment.mjs +4 -0
- package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
- package/esm2022/src/Manager.mjs +91 -0
- package/esm2022/src/UIBridge.mjs +33 -0
- package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
- package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
- package/esm2022/src/gui/GuiMgControl.mjs +123 -0
- package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
- package/esm2022/src/gui/KeyboardItem.mjs +135 -0
- package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
- package/esm2022/src/gui/MgValue.mjs +16 -0
- package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
- package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
- package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
- package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
- package/esm2022/src/gui/low/GuiInteractive.mjs +178 -0
- package/esm2022/src/gui/low/Style.mjs +20 -0
- package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
- package/esm2022/src/management/data/BlobType.mjs +281 -0
- package/esm2022/src/management/data/DcValues.mjs +214 -0
- package/{esm2020 → esm2022}/src/management/data/DcValuesBuilderBase.mjs +95 -95
- package/esm2022/src/management/data/FieldDef.mjs +331 -0
- package/{esm2020 → esm2022}/src/management/data/FieldsTable.mjs +54 -54
- package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
- package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
- package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
- package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
- package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
- package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
- package/{esm2020 → esm2022}/src/management/data/RecordUtils.mjs +360 -360
- package/esm2022/src/management/data/VectorType.mjs +612 -0
- package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
- package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
- package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
- package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +305 -0
- package/esm2022/src/management/gui/ControlTable.mjs +118 -0
- package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
- package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
- package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
- package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
- package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
- package/esm2022/src/management/gui/Helps.mjs +237 -0
- package/esm2022/src/management/gui/MgControlBase.mjs +1869 -0
- package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
- package/esm2022/src/management/gui/PIC.mjs +1185 -0
- package/{esm2020 → esm2022}/src/management/gui/PropDefaults.mjs +229 -229
- package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
- package/esm2022/src/management/gui/PropTable.mjs +221 -0
- package/esm2022/src/management/gui/Property.mjs +1362 -0
- package/esm2022/src/management/gui/ValidationDetails.mjs +248 -0
- package/{esm2020 → esm2022}/src/management/gui/ValidationDetailsBase.mjs +93 -93
- package/{esm2020 → esm2022}/src/management/gui/WrongFormatException.mjs +29 -29
- package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
- package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
- package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
- package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
- package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
- package/{esm2020 → esm2022}/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -41
- package/{esm2020 → esm2022}/src/util/MemoryUtil.mjs +34 -34
- package/esm2022/src/util/ObjectReference.mjs +36 -0
- package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
- package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16086 -16095
- package/fesm2022/magic-xpa-gui.mjs.map +1 -0
- package/index.d.ts +70 -70
- package/package.json +6 -12
- package/src/Commands.d.ts +40 -40
- package/src/Events.d.ts +157 -155
- package/src/EventsProcessor.d.ts +13 -13
- package/src/FocusManager.d.ts +8 -8
- package/src/GuiConstants.d.ts +65 -65
- package/src/GuiEnums.d.ts +283 -282
- package/src/GuiEnvironment.d.ts +4 -4
- package/src/IFlowMonitorQueue.d.ts +3 -3
- package/src/Manager.d.ts +26 -26
- package/src/UIBridge.d.ts +16 -16
- package/src/env/IEnvironment.d.ts +31 -31
- package/src/gui/ControlBase.d.ts +4 -4
- package/src/gui/GuiMgControl.d.ts +38 -38
- package/src/gui/GuiMgForm.d.ts +3 -3
- package/src/gui/KeyboardItem.d.ts +18 -18
- package/src/gui/LastFocusedVal.d.ts +7 -7
- package/src/gui/MgValue.d.ts +15 -15
- package/src/gui/PropParentInterface.d.ts +13 -13
- package/src/gui/low/DialogHandler.d.ts +4 -4
- package/src/gui/low/GuiCommand.d.ts +37 -37
- package/src/gui/low/GuiCommandQueue.d.ts +13 -13
- package/src/gui/low/GuiInteractive.d.ts +55 -55
- package/src/gui/low/Style.d.ts +19 -19
- package/src/management/RuntimeContextBase.d.ts +23 -23
- package/src/management/data/BlobType.d.ts +29 -29
- package/src/management/data/DcValues.d.ts +33 -33
- package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
- package/src/management/data/FieldDef.d.ts +53 -53
- package/src/management/data/FieldsTable.d.ts +16 -16
- package/src/management/data/GuiDataViewBase.d.ts +27 -27
- package/src/management/data/GuiFieldBase.d.ts +17 -17
- package/src/management/data/IRecord.d.ts +12 -12
- package/src/management/data/IReferencedObject.d.ts +5 -5
- package/src/management/data/NUM_TYPE.d.ts +103 -103
- package/src/management/data/ObjectReferenceBase.d.ts +16 -16
- package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
- package/src/management/data/RecordUtils.d.ts +21 -21
- package/src/management/data/VectorType.d.ts +52 -52
- package/src/management/data/VectorTypeBase.d.ts +8 -8
- package/src/management/events/IActionManager.d.ts +7 -7
- package/src/management/events/IGuiEventsManager.d.ts +20 -20
- package/src/management/exp/ExpressionInterface.d.ts +242 -242
- package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
- package/src/management/gui/ControlTable.d.ts +28 -28
- package/src/management/gui/DisplayConvertor.d.ts +103 -103
- package/src/management/gui/FieldValidator.d.ts +35 -35
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
- package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
- package/src/management/gui/HebrewDate.d.ts +46 -46
- package/src/management/gui/Helps.d.ts +51 -51
- package/src/management/gui/MgControlBase.d.ts +225 -223
- package/src/management/gui/MgFormBase.d.ts +160 -160
- package/src/management/gui/PIC.d.ts +108 -108
- package/src/management/gui/PropDefaults.d.ts +7 -7
- package/src/management/gui/PropInterface.d.ts +244 -243
- package/src/management/gui/PropTable.d.ts +33 -33
- package/src/management/gui/Property.d.ts +121 -121
- package/src/management/gui/ValidationDetails.d.ts +52 -52
- package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
- package/src/management/gui/WrongFormatException.d.ts +9 -9
- package/src/management/tasks/GuiDataCollection.d.ts +4 -4
- package/src/management/tasks/GuiTaskBase.d.ts +150 -150
- package/src/management/tasks/IMGDataTable.d.ts +10 -10
- package/src/management/tasks/ITask.d.ts +6 -6
- package/src/management/tasks/MgTimer.d.ts +8 -8
- package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
- package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
- package/src/util/MemoryUtil.d.ts +6 -6
- package/src/util/ObjectReference.d.ts +9 -9
- package/src/util/UsernamePasswordCredentials.d.ts +18 -18
- package/esm2020/src/Commands.mjs +0 -184
- package/esm2020/src/Events.mjs +0 -420
- package/esm2020/src/GuiConstants.mjs +0 -68
- package/esm2020/src/GuiEnvironment.mjs +0 -4
- package/esm2020/src/Manager.mjs +0 -91
- package/esm2020/src/UIBridge.mjs +0 -32
- package/esm2020/src/gui/GuiMgControl.mjs +0 -125
- package/esm2020/src/gui/KeyboardItem.mjs +0 -135
- package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
- package/esm2020/src/gui/MgValue.mjs +0 -16
- package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
- package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
- package/esm2020/src/gui/low/GuiInteractive.mjs +0 -176
- package/esm2020/src/gui/low/Style.mjs +0 -20
- package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
- package/esm2020/src/management/data/BlobType.mjs +0 -281
- package/esm2020/src/management/data/DcValues.mjs +0 -214
- package/esm2020/src/management/data/FieldDef.mjs +0 -331
- package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
- package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
- package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
- package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
- package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
- package/esm2020/src/management/data/VectorType.mjs +0 -612
- package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
- package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
- package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +0 -307
- package/esm2020/src/management/gui/ControlTable.mjs +0 -118
- package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
- package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
- package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
- package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
- package/esm2020/src/management/gui/Helps.mjs +0 -237
- package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
- package/esm2020/src/management/gui/MgFormBase.mjs +0 -741
- package/esm2020/src/management/gui/PIC.mjs +0 -1185
- package/esm2020/src/management/gui/PropTable.mjs +0 -221
- package/esm2020/src/management/gui/Property.mjs +0 -1356
- package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
- package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
- package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
- package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
- package/esm2020/src/util/ObjectReference.mjs +0 -36
- package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
- package/fesm2015/magic-xpa-gui.mjs +0 -16391
- package/fesm2015/magic-xpa-gui.mjs.map +0 -1
- package/fesm2020/magic-xpa-gui.mjs.map +0 -1
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
import { DcValues } from './DcValues';
|
|
2
|
-
import { List, NNumber, NumberStyles, StringBuilder } from '@magic-xpa/mscorelib';
|
|
3
|
-
import { Base64, StorageAttribute } from '@magic-xpa/utils';
|
|
4
|
-
import { RecordUtils } from './RecordUtils';
|
|
5
|
-
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
6
|
-
export class DcValuesBuilderBase {
|
|
7
|
-
CreateDcValues() {
|
|
8
|
-
return new DcValues(false);
|
|
9
|
-
}
|
|
10
|
-
SetId(dcValues, newId) {
|
|
11
|
-
dcValues.SetID(newId);
|
|
12
|
-
}
|
|
13
|
-
SetType(dcValues, type) {
|
|
14
|
-
dcValues.setType(type);
|
|
15
|
-
}
|
|
16
|
-
SetDisplayValues(dcValues, displayValues) {
|
|
17
|
-
dcValues.SetDisplayValues(displayValues);
|
|
18
|
-
}
|
|
19
|
-
SetLinkValues(dcValues, linkValues) {
|
|
20
|
-
dcValues.SetLinkValues(linkValues);
|
|
21
|
-
}
|
|
22
|
-
SetNullFlags(dcValues, nullFlagsStringOrNullFlags) {
|
|
23
|
-
if (arguments.length === 2 && (dcValues === null || dcValues instanceof DcValues) && (nullFlagsStringOrNullFlags === null || nullFlagsStringOrNullFlags.constructor === String)) {
|
|
24
|
-
this.SetNullFlags_0(dcValues, nullFlagsStringOrNullFlags);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
this.SetNullFlags_1(dcValues, nullFlagsStringOrNullFlags);
|
|
28
|
-
}
|
|
29
|
-
SetNullFlags_0(dcValues, nullFlagsString) {
|
|
30
|
-
let nullFlags = this.ParseNullFlags(nullFlagsString);
|
|
31
|
-
dcValues.setNullFlags(nullFlags);
|
|
32
|
-
}
|
|
33
|
-
SetNullFlags_1(dcValues, nullFlags) {
|
|
34
|
-
dcValues.setNullFlags(nullFlags);
|
|
35
|
-
}
|
|
36
|
-
ParseValues(valueStr, dataType, useHex) {
|
|
37
|
-
let snumber;
|
|
38
|
-
let tmpValue = null;
|
|
39
|
-
let buffer = new List();
|
|
40
|
-
let len;
|
|
41
|
-
let nextIdx;
|
|
42
|
-
let endIdx;
|
|
43
|
-
let suffixBuf = null;
|
|
44
|
-
switch (dataType) {
|
|
45
|
-
case StorageAttribute.NUMERIC:
|
|
46
|
-
case StorageAttribute.DATE:
|
|
47
|
-
case StorageAttribute.TIME:
|
|
48
|
-
if (useHex)
|
|
49
|
-
len = GuiEnvironment.Environment.GetSignificantNumSize() * 2;
|
|
50
|
-
else
|
|
51
|
-
len = Math.floor((GuiEnvironment.Environment.GetSignificantNumSize() + 2) / 3) * 4;
|
|
52
|
-
break;
|
|
53
|
-
case StorageAttribute.BOOLEAN:
|
|
54
|
-
len = 1;
|
|
55
|
-
break;
|
|
56
|
-
default:
|
|
57
|
-
len = 0;
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
nextIdx = 0;
|
|
61
|
-
while (nextIdx < valueStr.length) {
|
|
62
|
-
if (dataType === StorageAttribute.ALPHA || dataType === StorageAttribute.UNICODE ||
|
|
63
|
-
dataType === StorageAttribute.BLOB || dataType === StorageAttribute.BLOB_VECTOR) {
|
|
64
|
-
snumber = valueStr.substr(nextIdx, 4);
|
|
65
|
-
len = NNumber.Parse(snumber, NumberStyles.HexNumber);
|
|
66
|
-
nextIdx += 4;
|
|
67
|
-
}
|
|
68
|
-
if (len >= 0x8000) {
|
|
69
|
-
suffixBuf = new StringBuilder();
|
|
70
|
-
len -= 0x8000;
|
|
71
|
-
nextIdx += RecordUtils.getSpannedField(valueStr, len, nextIdx, dataType, suffixBuf, useHex);
|
|
72
|
-
buffer.push(suffixBuf.ToString());
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
endIdx = nextIdx + len;
|
|
76
|
-
if (useHex)
|
|
77
|
-
tmpValue = valueStr.substr(nextIdx, (endIdx) - (nextIdx));
|
|
78
|
-
else
|
|
79
|
-
tmpValue = Base64.decodeToHex(valueStr.substr(nextIdx, (endIdx) - (nextIdx)));
|
|
80
|
-
buffer.push(tmpValue);
|
|
81
|
-
nextIdx = endIdx;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return buffer.ToArray();
|
|
85
|
-
}
|
|
86
|
-
ParseNullFlags(nullFlagsString) {
|
|
87
|
-
let array = new Array(nullFlagsString.length);
|
|
88
|
-
for (let i = 0; i < nullFlagsString.length; i = i + 1) {
|
|
89
|
-
array[i] = (nullFlagsString.charAt(i) !== '0');
|
|
90
|
-
}
|
|
91
|
-
return array;
|
|
92
|
-
}
|
|
93
|
-
constructor() {
|
|
94
|
-
}
|
|
95
|
-
}
|
|
1
|
+
import { DcValues } from './DcValues';
|
|
2
|
+
import { List, NNumber, NumberStyles, StringBuilder } from '@magic-xpa/mscorelib';
|
|
3
|
+
import { Base64, StorageAttribute } from '@magic-xpa/utils';
|
|
4
|
+
import { RecordUtils } from './RecordUtils';
|
|
5
|
+
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
6
|
+
export class DcValuesBuilderBase {
|
|
7
|
+
CreateDcValues() {
|
|
8
|
+
return new DcValues(false);
|
|
9
|
+
}
|
|
10
|
+
SetId(dcValues, newId) {
|
|
11
|
+
dcValues.SetID(newId);
|
|
12
|
+
}
|
|
13
|
+
SetType(dcValues, type) {
|
|
14
|
+
dcValues.setType(type);
|
|
15
|
+
}
|
|
16
|
+
SetDisplayValues(dcValues, displayValues) {
|
|
17
|
+
dcValues.SetDisplayValues(displayValues);
|
|
18
|
+
}
|
|
19
|
+
SetLinkValues(dcValues, linkValues) {
|
|
20
|
+
dcValues.SetLinkValues(linkValues);
|
|
21
|
+
}
|
|
22
|
+
SetNullFlags(dcValues, nullFlagsStringOrNullFlags) {
|
|
23
|
+
if (arguments.length === 2 && (dcValues === null || dcValues instanceof DcValues) && (nullFlagsStringOrNullFlags === null || nullFlagsStringOrNullFlags.constructor === String)) {
|
|
24
|
+
this.SetNullFlags_0(dcValues, nullFlagsStringOrNullFlags);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.SetNullFlags_1(dcValues, nullFlagsStringOrNullFlags);
|
|
28
|
+
}
|
|
29
|
+
SetNullFlags_0(dcValues, nullFlagsString) {
|
|
30
|
+
let nullFlags = this.ParseNullFlags(nullFlagsString);
|
|
31
|
+
dcValues.setNullFlags(nullFlags);
|
|
32
|
+
}
|
|
33
|
+
SetNullFlags_1(dcValues, nullFlags) {
|
|
34
|
+
dcValues.setNullFlags(nullFlags);
|
|
35
|
+
}
|
|
36
|
+
ParseValues(valueStr, dataType, useHex) {
|
|
37
|
+
let snumber;
|
|
38
|
+
let tmpValue = null;
|
|
39
|
+
let buffer = new List();
|
|
40
|
+
let len;
|
|
41
|
+
let nextIdx;
|
|
42
|
+
let endIdx;
|
|
43
|
+
let suffixBuf = null;
|
|
44
|
+
switch (dataType) {
|
|
45
|
+
case StorageAttribute.NUMERIC:
|
|
46
|
+
case StorageAttribute.DATE:
|
|
47
|
+
case StorageAttribute.TIME:
|
|
48
|
+
if (useHex)
|
|
49
|
+
len = GuiEnvironment.Environment.GetSignificantNumSize() * 2;
|
|
50
|
+
else
|
|
51
|
+
len = Math.floor((GuiEnvironment.Environment.GetSignificantNumSize() + 2) / 3) * 4;
|
|
52
|
+
break;
|
|
53
|
+
case StorageAttribute.BOOLEAN:
|
|
54
|
+
len = 1;
|
|
55
|
+
break;
|
|
56
|
+
default:
|
|
57
|
+
len = 0;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
nextIdx = 0;
|
|
61
|
+
while (nextIdx < valueStr.length) {
|
|
62
|
+
if (dataType === StorageAttribute.ALPHA || dataType === StorageAttribute.UNICODE ||
|
|
63
|
+
dataType === StorageAttribute.BLOB || dataType === StorageAttribute.BLOB_VECTOR) {
|
|
64
|
+
snumber = valueStr.substr(nextIdx, 4);
|
|
65
|
+
len = NNumber.Parse(snumber, NumberStyles.HexNumber);
|
|
66
|
+
nextIdx += 4;
|
|
67
|
+
}
|
|
68
|
+
if (len >= 0x8000) {
|
|
69
|
+
suffixBuf = new StringBuilder();
|
|
70
|
+
len -= 0x8000;
|
|
71
|
+
nextIdx += RecordUtils.getSpannedField(valueStr, len, nextIdx, dataType, suffixBuf, useHex);
|
|
72
|
+
buffer.push(suffixBuf.ToString());
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
endIdx = nextIdx + len;
|
|
76
|
+
if (useHex)
|
|
77
|
+
tmpValue = valueStr.substr(nextIdx, (endIdx) - (nextIdx));
|
|
78
|
+
else
|
|
79
|
+
tmpValue = Base64.decodeToHex(valueStr.substr(nextIdx, (endIdx) - (nextIdx)));
|
|
80
|
+
buffer.push(tmpValue);
|
|
81
|
+
nextIdx = endIdx;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return buffer.ToArray();
|
|
85
|
+
}
|
|
86
|
+
ParseNullFlags(nullFlagsString) {
|
|
87
|
+
let array = new Array(nullFlagsString.length);
|
|
88
|
+
for (let i = 0; i < nullFlagsString.length; i = i + 1) {
|
|
89
|
+
array[i] = (nullFlagsString.charAt(i) !== '0');
|
|
90
|
+
}
|
|
91
|
+
return array;
|
|
92
|
+
}
|
|
93
|
+
constructor() {
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
96
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGNWYWx1ZXNCdWlsZGVyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9kYXRhL0RjVmFsdWVzQnVpbGRlckJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBdUJwRCxNQUFNLE9BQWdCLG1CQUFtQjtJQUl2QyxjQUFjO1FBQ1osT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWtCLEVBQUUsS0FBYTtRQUNyQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBa0IsRUFBRSxJQUFzQjtRQUNoRCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFrQixFQUFFLGFBQXVCO1FBQzFELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWtCLEVBQUUsVUFBb0I7UUFDcEQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBSUQsWUFBWSxDQUFDLFFBQWtCLEVBQUUsMEJBQStCO1FBQzlELElBQUksU0FB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Q0k7Z0JBQ0gsTUFBTSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7Z0JBQ3ZCLElBQUksTUFBTTtvQkFDUixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7O29CQUUxRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUtoRixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLEdBQUcsTUFBTSxDQUFDO2FBQ2xCO1NBQ0Y7UUFHRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYyxDQUFDLGVBQXVCO1FBQ3BDLElBQUksS0FBSyxHQUFjLElBQUksS0FBSyxDQUFVLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3RCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBUSxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7SUFDQSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RjVmFsdWVzfSBmcm9tICcuL0RjVmFsdWVzJztcclxuaW1wb3J0IHtMaXN0LCBOTnVtYmVyLCBOdW1iZXJTdHlsZXMsIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtCYXNlNjQsIFN0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge1JlY29yZFV0aWxzfSBmcm9tICcuL1JlY29yZFV0aWxzJztcclxuaW1wb3J0IHtHdWlFbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gQmFzZSBjbGFzcyBmb3IgRGNWYWx1ZXMgYnVpbGRlci4gVGhlIGNsYXNzIGlzIGFic3RyYWN0IGFuZCwgdGh1cywgbXVzdCBiZSBpbmhlcml0ZWQuXHJcbi8vLyBUaGUgaW5oZXJpdGluZyBjbGFzcywgd2hpY2ggd2lsbCB1c3VhbGx5IGJlIGluIGFub3RoZXIgcGFja2FnZSwgd2lsbCBub3QgYmUgYWJsZSB0byBtb2RpZnlcclxuLy8vIGEgRGNWYWx1ZXMgb2JqZWN0IGRpcmVjdGx5LCBzaW5jZSBhbGwgaXRzIHNldHRlciBtZXRob2RzIGFyZSAnaW50ZXJuYWwnLiBUaGlzIGNsYXNzIHdpbGxcclxuLy8vIHByb3ZpZGUgdGhlIHNldHRlciBtZXRob2RzIGZvciB0aGUgaW5oZXJpdGluZyBidWlsZGVyLlxyXG4vLy8gPHBhcmE+SGVyZSdzIGEgdXNhZ2UgZXhhbXBsZTpcclxuLy8vIDxleGFtcGxlPlxyXG4vLy8gY2xhc3MgTXlDb25jcmV0ZUJ1aWxkZXIgOiBEY1ZhbHVlc0J1aWxkZXJCYXNlXHJcbi8vLyB7XHJcbi8vLyAgIHB1YmxpYyBvdmVycmlkZSBEY1ZhbHVlcyBCdWlsZCgpXHJcbi8vLyAgIHtcclxuLy8vICAgICAgdmFyIGRjVmFsdWVzID0gYmFzZS5DcmVhdGVEY1ZhbHVlcyhmYWxzZSk7XHJcbi8vLyAgICAgIFNldElkKG5ld0lkKTtcclxuLy8vICAgICAgU2V0VHlwZSh0aGVUeXBlKTtcclxuLy8vICAgICAgU2V0RGlzcGxheVZhbHVlcyh0aGVEaXNwbGF5VmFsdWVzKTtcclxuLy8vICAgICAgLi4uXHJcbi8vLyAgICAgIHJldHVybiBkY1ZhbHVlcztcclxuLy8vICAgfVxyXG4vLy8gfVxyXG4vLy8gPC9leGFtcGxlPlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGNWYWx1ZXNCdWlsZGVyQmFzZSB7XHJcblxyXG4gIGFic3RyYWN0IEJ1aWxkKCk6IERjVmFsdWVzO1xyXG5cclxuICBDcmVhdGVEY1ZhbHVlcygpOiBEY1ZhbHVlcyB7XHJcbiAgICByZXR1cm4gbmV3IERjVmFsdWVzKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIFNldElkKGRjVmFsdWVzOiBEY1ZhbHVlcywgbmV3SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgZGNWYWx1ZXMuU2V0SUQobmV3SWQpO1xyXG4gIH1cclxuXHJcbiAgU2V0VHlwZShkY1ZhbHVlczogRGNWYWx1ZXMsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIGRjVmFsdWVzLnNldFR5cGUodHlwZSk7XHJcbiAgfVxyXG5cclxuICBTZXREaXNwbGF5VmFsdWVzKGRjVmFsdWVzOiBEY1ZhbHVlcywgZGlzcGxheVZhbHVlczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGRjVmFsdWVzLlNldERpc3BsYXlWYWx1ZXMoZGlzcGxheVZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICBTZXRMaW5rVmFsdWVzKGRjVmFsdWVzOiBEY1ZhbHVlcywgbGlua1ZhbHVlczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGRjVmFsdWVzLlNldExpbmtWYWx1ZXMobGlua1ZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICBTZXROdWxsRmxhZ3MoZGNWYWx1ZXM6IERjVmFsdWVzLCBudWxsRmxhZ3NTdHJpbmc6IHN0cmluZyk6IHZvaWQ7XHJcbiAgU2V0TnVsbEZsYWdzKGRjVmFsdWVzOiBEY1ZhbHVlcywgbnVsbEZsYWdzOiBib29sZWFuW10pOiB2b2lkO1xyXG4gIFNldE51bGxGbGFncyhkY1ZhbHVlczogRGNWYWx1ZXMsIG51bGxGbGFnc1N0cmluZ09yTnVsbEZsYWdzOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIChkY1ZhbHVlcyA9PT0gbnVsbCB8fCBkY1ZhbHVlcyBpbnN0YW5jZW9mIERjVmFsdWVzKSAmJiAobnVsbEZsYWdzU3RyaW5nT3JOdWxsRmxhZ3MgPT09IG51bGwgfHwgbnVsbEZsYWdzU3RyaW5nT3JOdWxsRmxhZ3MuY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgdGhpcy5TZXROdWxsRmxhZ3NfMChkY1ZhbHVlcywgbnVsbEZsYWdzU3RyaW5nT3JOdWxsRmxhZ3MpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLlNldE51bGxGbGFnc18xKGRjVmFsdWVzLCBudWxsRmxhZ3NTdHJpbmdPck51bGxGbGFncyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFNldE51bGxGbGFnc18wKGRjVmFsdWVzOiBEY1ZhbHVlcywgbnVsbEZsYWdzU3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBudWxsRmxhZ3M6IGJvb2xlYW5bXSA9IHRoaXMuUGFyc2VOdWxsRmxhZ3MobnVsbEZsYWdzU3RyaW5nKTtcclxuICAgIGRjVmFsdWVzLnNldE51bGxGbGFncyhudWxsRmxhZ3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBTZXROdWxsRmxhZ3NfMShkY1ZhbHVlczogRGNWYWx1ZXMsIG51bGxGbGFnczogYm9vbGVhbltdKTogdm9pZCB7XHJcbiAgICBkY1ZhbHVlcy5zZXROdWxsRmxhZ3MobnVsbEZsYWdzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUGFyc2UgYSBzZXJpYWxpemVkIHZhbHVlcyBzdHJpbmcgYXMgYW4gYXJyYXkgb2YgdmFsdWVzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj5UaGlzIGlzIHN0cmluZyBvZiB0aGUgY29uY2F0ZW5hdGVkIHZhbHVlcywgd2l0aCBlYWNoIHZhbHVlIHByZWNlZGVkIHdpdGggYSBoZXggbnVtYmVyIGRlbm90aW5nIGl0cyBsZW5ndGguPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRhVHlwZVwiPlRoZSBkYXRhIHR5cGUgb2YgdGhlIHZhbHVlcy48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZUhleFwiPjwvcGFyYW0+XHJcbiAgcHJvdGVjdGVkIFBhcnNlVmFsdWVzKHZhbHVlU3RyOiBzdHJpbmcsIGRhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCB1c2VIZXg6IGJvb2xlYW4pOiBzdHJpbmdbXSB7XHJcblxyXG4gICAgbGV0IHNudW1iZXI6IHN0cmluZztcclxuICAgIGxldCB0bXBWYWx1ZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBidWZmZXI6IExpc3Q8c3RyaW5nPiA9IG5ldyBMaXN0PHN0cmluZz4oKTtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBuZXh0SWR4OiBudW1iZXI7XHJcbiAgICBsZXQgZW5kSWR4OiBudW1iZXI7XHJcbiAgICBsZXQgc3VmZml4QnVmOiBTdHJpbmdCdWlsZGVyID0gbnVsbDtcclxuXHJcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKHVzZUhleClcclxuICAgICAgICAgIGxlbiA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpICogMjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBsZW4gPSBNYXRoLmZsb29yKChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSArIDIpIC8gMykgKiA0O1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgbGVuID0gMTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbGVuID0gMDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SWR4ID0gMDtcclxuICAgIHdoaWxlIChuZXh0SWR4IDwgdmFsdWVTdHIubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiBhbiBhbHBoYSBkYXRhXHJcbiAgICAgIGlmIChkYXRhVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBkYXRhVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgZGF0YVR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCBkYXRhVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgIHNudW1iZXIgPSB2YWx1ZVN0ci5zdWJzdHIobmV4dElkeCwgNCk7XHJcbiAgICAgICAgbGVuID0gTk51bWJlci5QYXJzZShzbnVtYmVyLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKTtcclxuICAgICAgICBuZXh0SWR4ICs9IDQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBkYXRhIGlzIHNwYW5uZWRcclxuICAgICAgaWYgKGxlbiA+PSAweDgwMDApIHtcclxuICAgICAgICBzdWZmaXhCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICAgIGxlbiAtPSAweDgwMDA7XHJcbiAgICAgICAgLy8gbmV4dCBzZWdtZW50IG1heSBhbHNvIGJlIHNwYW5uZWRcclxuICAgICAgICBuZXh0SWR4ICs9IFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZCh2YWx1ZVN0ciwgbGVuLCBuZXh0SWR4LCBkYXRhVHlwZSwgc3VmZml4QnVmLCB1c2VIZXgpO1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKHN1ZmZpeEJ1Zi5Ub1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlbmRJZHggPSBuZXh0SWR4ICsgbGVuO1xyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICB0bXBWYWx1ZSA9IHZhbHVlU3RyLnN1YnN0cihuZXh0SWR4LCAoZW5kSWR4KSAtIChuZXh0SWR4KSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG1wVmFsdWUgPSBCYXNlNjQuZGVjb2RlVG9IZXgodmFsdWVTdHIuc3Vic3RyKG5leHRJZHgsIChlbmRJZHgpIC0gKG5leHRJZHgpKSk7XHJcbiAgICAgICAgLy8gdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIHJlZHVuZGFudCBzaW5jZSB0aGUgbWFrZVByaW50YWJsZSgpIGlzIGNhbGxlZFxyXG4gICAgICAgIC8vIGluIHRoZSBndWlNYW5hZ2VyIHdoZW4gYnVpbGRpbmcgdGhlIG9wdGlvbnNcclxuICAgICAgICAvKmlmIChkYXRhVHlwZSA9PSBEQVRBX1RZUEVfQUxQSEEpXHJcbiAgICAgICAgICAgICB0bXBWYWx1ZSA9IGd1aU1hbmFnZXIubWFrZVByaW50YWJsZSh0bXBWYWx1ZSk7Ki9cclxuICAgICAgICBidWZmZXIucHVzaCh0bXBWYWx1ZSk7XHJcbiAgICAgICAgbmV4dElkeCA9IGVuZElkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHZlY3RvciB0byBhcnJheVxyXG4gICAgcmV0dXJuIGJ1ZmZlci5Ub0FycmF5KCk7XHJcbiAgfVxyXG5cclxuICBQYXJzZU51bGxGbGFncyhudWxsRmxhZ3NTdHJpbmc6IHN0cmluZyk6IGJvb2xlYW5bXSB7XHJcbiAgICBsZXQgYXJyYXk6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPihudWxsRmxhZ3NTdHJpbmcubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBudWxsRmxhZ3NTdHJpbmcubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgYXJyYXlbaV0gPSAobnVsbEZsYWdzU3RyaW5nLmNoYXJBdChpKSAhPT0gJzAnLyonMCcqLyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { BlobType } from "./BlobType";
|
|
2
|
+
import { StorageAttribute, StrUtil, XmlParser, Base64, XMLConstants } from "@magic-xpa/utils";
|
|
3
|
+
import { NNumber, NString, Int32 } from "@magic-xpa/mscorelib";
|
|
4
|
+
import { Events } from "../../Events";
|
|
5
|
+
import { DisplayConvertor } from "../gui/DisplayConvertor";
|
|
6
|
+
import { VectorType } from "./VectorType";
|
|
7
|
+
import { GuiEnvironment } from "../../GuiEnvironment";
|
|
8
|
+
export class FieldDef {
|
|
9
|
+
DefaultValue = null;
|
|
10
|
+
NullAllowed = false;
|
|
11
|
+
_nullDefault = false;
|
|
12
|
+
_nullValue = null;
|
|
13
|
+
_nullDisplay = null;
|
|
14
|
+
set DbModifiable(value) {
|
|
15
|
+
this._dbModifiable = value;
|
|
16
|
+
}
|
|
17
|
+
get DbModifiable() {
|
|
18
|
+
return this._dbModifiable;
|
|
19
|
+
}
|
|
20
|
+
_dbModifiable = true;
|
|
21
|
+
_partOfDataview = true;
|
|
22
|
+
_picture = null;
|
|
23
|
+
_size = 0;
|
|
24
|
+
_varName = null;
|
|
25
|
+
_contentType = BlobType.CONTENT_TYPE_UNKNOWN;
|
|
26
|
+
_vecCellsContentType = BlobType.CONTENT_TYPE_UNKNOWN;
|
|
27
|
+
_vecCellsSize = 0;
|
|
28
|
+
_vecCellsType = StorageAttribute.NONE;
|
|
29
|
+
_type = StorageAttribute.NONE;
|
|
30
|
+
Storage;
|
|
31
|
+
VarDisplayName = null;
|
|
32
|
+
static _default_date = null;
|
|
33
|
+
_id = 0;
|
|
34
|
+
_spaces = null;
|
|
35
|
+
constructor(id) {
|
|
36
|
+
this._id = id;
|
|
37
|
+
this.VarDisplayName = NString.Empty;
|
|
38
|
+
}
|
|
39
|
+
get PartOfDataview() {
|
|
40
|
+
return this._partOfDataview;
|
|
41
|
+
}
|
|
42
|
+
getId() {
|
|
43
|
+
return this._id;
|
|
44
|
+
}
|
|
45
|
+
getType() {
|
|
46
|
+
return this._type;
|
|
47
|
+
}
|
|
48
|
+
static getMagicDefaultNullDisplayValue(type) {
|
|
49
|
+
let val;
|
|
50
|
+
switch (type) {
|
|
51
|
+
case StorageAttribute.ALPHA:
|
|
52
|
+
case StorageAttribute.UNICODE:
|
|
53
|
+
case StorageAttribute.BOOLEAN:
|
|
54
|
+
val = "";
|
|
55
|
+
break;
|
|
56
|
+
case StorageAttribute.NUMERIC:
|
|
57
|
+
case StorageAttribute.DATE:
|
|
58
|
+
case StorageAttribute.TIME:
|
|
59
|
+
val = "";
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
return val;
|
|
63
|
+
}
|
|
64
|
+
static getMagicDefaultValue(type) {
|
|
65
|
+
let val = null;
|
|
66
|
+
switch (type) {
|
|
67
|
+
case StorageAttribute.ALPHA:
|
|
68
|
+
case StorageAttribute.UNICODE:
|
|
69
|
+
val = "";
|
|
70
|
+
break;
|
|
71
|
+
case StorageAttribute.BLOB:
|
|
72
|
+
case StorageAttribute.BLOB_VECTOR:
|
|
73
|
+
val = BlobType.getEmptyBlobPrefix('\0') + ";";
|
|
74
|
+
break;
|
|
75
|
+
case StorageAttribute.NUMERIC:
|
|
76
|
+
case StorageAttribute.TIME:
|
|
77
|
+
val = "FF00000000000000000000000000000000000000";
|
|
78
|
+
break;
|
|
79
|
+
case StorageAttribute.DATE:
|
|
80
|
+
val = FieldDef._default_date;
|
|
81
|
+
break;
|
|
82
|
+
case StorageAttribute.BOOLEAN:
|
|
83
|
+
val = "0";
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
return val;
|
|
87
|
+
}
|
|
88
|
+
getDefaultValue() {
|
|
89
|
+
let val = null;
|
|
90
|
+
if (this._type !== StorageAttribute.BLOB_VECTOR) {
|
|
91
|
+
if (this._nullDefault && this._nullValue !== null)
|
|
92
|
+
val = this._nullValue;
|
|
93
|
+
else if (this.DefaultValue !== null)
|
|
94
|
+
val = this.DefaultValue;
|
|
95
|
+
else
|
|
96
|
+
val = this.getMagicDefaultValue();
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
val = this.getMagicDefaultValue();
|
|
100
|
+
return val;
|
|
101
|
+
}
|
|
102
|
+
getCellDefualtValue() {
|
|
103
|
+
let val;
|
|
104
|
+
if (this._type === StorageAttribute.BLOB_VECTOR) {
|
|
105
|
+
if (this._nullDefault && this._nullValue !== null)
|
|
106
|
+
val = this._nullValue;
|
|
107
|
+
else if (this.DefaultValue !== null)
|
|
108
|
+
val = this.DefaultValue;
|
|
109
|
+
else {
|
|
110
|
+
val = FieldDef.getMagicDefaultValue(this._vecCellsType);
|
|
111
|
+
if (this._vecCellsType === StorageAttribute.BLOB)
|
|
112
|
+
val = BlobType.setContentType(val, this._vecCellsContentType);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else
|
|
116
|
+
val = this.getDefaultValue();
|
|
117
|
+
return val;
|
|
118
|
+
}
|
|
119
|
+
getMagicDefaultValue() {
|
|
120
|
+
let val = FieldDef.getMagicDefaultValue(this._type);
|
|
121
|
+
if (this._type === StorageAttribute.BLOB)
|
|
122
|
+
val = BlobType.setContentType(val, this._contentType);
|
|
123
|
+
else {
|
|
124
|
+
if (this._type === StorageAttribute.BLOB_VECTOR) {
|
|
125
|
+
val = BlobType.SetVecCellAttr(val, this._vecCellsType);
|
|
126
|
+
if (this._vecCellsType === StorageAttribute.BLOB)
|
|
127
|
+
val = BlobType.setContentType(val, this._vecCellsContentType);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return val;
|
|
131
|
+
}
|
|
132
|
+
getContentType() {
|
|
133
|
+
return this._contentType;
|
|
134
|
+
}
|
|
135
|
+
hasNullDisplayValue() {
|
|
136
|
+
return this._nullDisplay !== null;
|
|
137
|
+
}
|
|
138
|
+
getSize() {
|
|
139
|
+
return this._size;
|
|
140
|
+
}
|
|
141
|
+
getVecCellsSize() {
|
|
142
|
+
return (this._type === StorageAttribute.BLOB_VECTOR) ? this._vecCellsSize : this._size;
|
|
143
|
+
}
|
|
144
|
+
setLengths(type, vecCells) {
|
|
145
|
+
let res = this._size;
|
|
146
|
+
switch (type) {
|
|
147
|
+
case StorageAttribute.ALPHA:
|
|
148
|
+
case StorageAttribute.MEMO:
|
|
149
|
+
case StorageAttribute.UNICODE:
|
|
150
|
+
if (vecCells) {
|
|
151
|
+
res = this._vecCellsSize;
|
|
152
|
+
this._spaces = new Array(this._vecCellsSize);
|
|
153
|
+
}
|
|
154
|
+
else
|
|
155
|
+
this._spaces = new Array(this._size);
|
|
156
|
+
for (let i = 0; i < this._size; i = i + 1) {
|
|
157
|
+
this._spaces[i] = ' ';
|
|
158
|
+
}
|
|
159
|
+
break;
|
|
160
|
+
case StorageAttribute.NUMERIC:
|
|
161
|
+
case StorageAttribute.DATE:
|
|
162
|
+
case StorageAttribute.TIME:
|
|
163
|
+
res = GuiEnvironment.Environment.GetSignificantNumSize() * 2;
|
|
164
|
+
break;
|
|
165
|
+
case StorageAttribute.BOOLEAN:
|
|
166
|
+
res = (!vecCells ? 1 : 4);
|
|
167
|
+
break;
|
|
168
|
+
case StorageAttribute.BLOB:
|
|
169
|
+
res = (!vecCells ? Int32.MaxValue : VectorType.BLOB_TYPE_STRUCT_SIZE);
|
|
170
|
+
break;
|
|
171
|
+
case StorageAttribute.BLOB_VECTOR:
|
|
172
|
+
res = Int32.MaxValue;
|
|
173
|
+
if (!vecCells)
|
|
174
|
+
this.setLengths(this._vecCellsType, true);
|
|
175
|
+
else
|
|
176
|
+
res = VectorType.BLOB_TYPE_STRUCT_SIZE;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
if (vecCells)
|
|
180
|
+
this._vecCellsSize = res;
|
|
181
|
+
else
|
|
182
|
+
this._size = res;
|
|
183
|
+
}
|
|
184
|
+
getCellsType() {
|
|
185
|
+
return (this._type === StorageAttribute.BLOB_VECTOR) ? this._vecCellsType : this._type;
|
|
186
|
+
}
|
|
187
|
+
getVecCellsContentType() {
|
|
188
|
+
return this._vecCellsContentType;
|
|
189
|
+
}
|
|
190
|
+
getNullValue() {
|
|
191
|
+
return this._nullValue;
|
|
192
|
+
}
|
|
193
|
+
isNullDefault() {
|
|
194
|
+
return this._nullDefault;
|
|
195
|
+
}
|
|
196
|
+
getNullDisplay() {
|
|
197
|
+
let val;
|
|
198
|
+
switch (this._type) {
|
|
199
|
+
case StorageAttribute.ALPHA:
|
|
200
|
+
case StorageAttribute.UNICODE:
|
|
201
|
+
case StorageAttribute.BOOLEAN:
|
|
202
|
+
val = "";
|
|
203
|
+
break;
|
|
204
|
+
case StorageAttribute.NUMERIC:
|
|
205
|
+
case StorageAttribute.DATE:
|
|
206
|
+
case StorageAttribute.TIME:
|
|
207
|
+
val = null;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
return val;
|
|
211
|
+
}
|
|
212
|
+
IsContentUnicode() {
|
|
213
|
+
if (this._type === StorageAttribute.BLOB && this._contentType !== BlobType.CONTENT_TYPE_UNICODE)
|
|
214
|
+
return false;
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
GetPicture() {
|
|
218
|
+
return this._picture;
|
|
219
|
+
}
|
|
220
|
+
setAttribute(attribute, valueStr) {
|
|
221
|
+
let isTagProcessed = true;
|
|
222
|
+
switch (attribute) {
|
|
223
|
+
case XMLConstants.MG_ATTR_TYPE:
|
|
224
|
+
this._type = valueStr.charAt(0);
|
|
225
|
+
break;
|
|
226
|
+
case XMLConstants.MG_ATTR_SIZE:
|
|
227
|
+
this._size = XmlParser.getInt(valueStr);
|
|
228
|
+
if (this._size <= 0)
|
|
229
|
+
Events.WriteExceptionToLog("in Field.initElements(): size must be greater than zero");
|
|
230
|
+
break;
|
|
231
|
+
case XMLConstants.MG_ATTR_VAR_NAME:
|
|
232
|
+
this._varName = XmlParser.unescape(valueStr).toString();
|
|
233
|
+
break;
|
|
234
|
+
case XMLConstants.MG_ATTR_VAR_DISP_NAME:
|
|
235
|
+
this.VarDisplayName = XmlParser.unescape(valueStr).toString();
|
|
236
|
+
break;
|
|
237
|
+
case XMLConstants.MG_ATTR_PICTURE:
|
|
238
|
+
this._picture = XmlParser.unescape(valueStr).toString();
|
|
239
|
+
break;
|
|
240
|
+
case XMLConstants.MG_ATTR_VEC_CELLS_SIZE:
|
|
241
|
+
this._vecCellsSize = NNumber.Parse(valueStr);
|
|
242
|
+
break;
|
|
243
|
+
case XMLConstants.MG_ATTR_VEC_CELLS_ATTR:
|
|
244
|
+
this._vecCellsType = valueStr.charAt(0);
|
|
245
|
+
break;
|
|
246
|
+
case XMLConstants.MG_ATTR_VEC_CELLS_CONTENT:
|
|
247
|
+
this._vecCellsContentType = valueStr.charAt(0);
|
|
248
|
+
break;
|
|
249
|
+
case XMLConstants.MG_ATTR_NULLVALUE:
|
|
250
|
+
if (this._type === StorageAttribute.NUMERIC || this._type === StorageAttribute.DATE || this._type === StorageAttribute.TIME) {
|
|
251
|
+
if (GuiEnvironment.Environment.GetDebugLevel() > 1)
|
|
252
|
+
this._nullValue = XmlParser.unescape(valueStr).toString();
|
|
253
|
+
else
|
|
254
|
+
this._nullValue = Base64.decodeToHex(valueStr);
|
|
255
|
+
}
|
|
256
|
+
else
|
|
257
|
+
this._nullValue = XmlParser.unescape(valueStr).toString();
|
|
258
|
+
break;
|
|
259
|
+
case XMLConstants.MG_ATTR_NULLDISPLAY:
|
|
260
|
+
this._nullDisplay = XmlParser.unescape(valueStr).toString();
|
|
261
|
+
break;
|
|
262
|
+
case XMLConstants.MG_ATTR_NULLDEFAULT:
|
|
263
|
+
this._nullDefault = DisplayConvertor.toBoolean(valueStr);
|
|
264
|
+
break;
|
|
265
|
+
case XMLConstants.MG_ATTR_DB_MODIFIABLE:
|
|
266
|
+
this.DbModifiable = DisplayConvertor.toBoolean(valueStr);
|
|
267
|
+
break;
|
|
268
|
+
case XMLConstants.MG_ATTR_DEFAULTVALUE:
|
|
269
|
+
this.DefaultValue = valueStr;
|
|
270
|
+
if (this._type === StorageAttribute.ALPHA || this._type === StorageAttribute.UNICODE) {
|
|
271
|
+
this.DefaultValue = XmlParser.unescape(valueStr).toString();
|
|
272
|
+
this.DefaultValue = StrUtil.padStr(this.DefaultValue, this._size);
|
|
273
|
+
}
|
|
274
|
+
else if (this._type !== StorageAttribute.BLOB && this._type !== StorageAttribute.BOOLEAN) {
|
|
275
|
+
if ((this._type === StorageAttribute.BLOB_VECTOR &&
|
|
276
|
+
(this._vecCellsType === StorageAttribute.NUMERIC || this._vecCellsType === StorageAttribute.DATE || this._vecCellsType === StorageAttribute.TIME)) ||
|
|
277
|
+
(this._type === StorageAttribute.NUMERIC || this._type === StorageAttribute.DATE || this._type === StorageAttribute.TIME)) {
|
|
278
|
+
if (GuiEnvironment.Environment.GetDebugLevel() < 1)
|
|
279
|
+
this.DefaultValue = Base64.decodeToHex(valueStr);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (this.DefaultValue.length === 0 && this._type !== StorageAttribute.BLOB)
|
|
283
|
+
this.DefaultValue = null;
|
|
284
|
+
else if (this._type === StorageAttribute.BLOB)
|
|
285
|
+
this.DefaultValue = BlobType.createFromString(this.DefaultValue, this._contentType);
|
|
286
|
+
break;
|
|
287
|
+
case XMLConstants.MG_ATTR_NULLALLOWED:
|
|
288
|
+
this.NullAllowed = DisplayConvertor.toBoolean(valueStr);
|
|
289
|
+
break;
|
|
290
|
+
case XMLConstants.MG_ATTR_BLOB_CONTENT:
|
|
291
|
+
this._contentType = valueStr.charAt(0);
|
|
292
|
+
break;
|
|
293
|
+
case XMLConstants.MG_ATTR_PART_OF_DATAVIEW:
|
|
294
|
+
this._partOfDataview = DisplayConvertor.toBoolean(valueStr);
|
|
295
|
+
break;
|
|
296
|
+
case XMLConstants.MG_ATTR_STORAGE:
|
|
297
|
+
this.Storage = XmlParser.getInt(valueStr);
|
|
298
|
+
break;
|
|
299
|
+
default:
|
|
300
|
+
isTagProcessed = false;
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
return isTagProcessed;
|
|
304
|
+
}
|
|
305
|
+
fillData(parser) {
|
|
306
|
+
let text = parser.ReadToEndOfCurrentElement();
|
|
307
|
+
text = text.substr(text.indexOf(XMLConstants.MG_TAG_FLDH) + XMLConstants.MG_TAG_FLDH.length);
|
|
308
|
+
let tokens = XmlParser.getTokens(text, XMLConstants.XML_ATTR_DELIM);
|
|
309
|
+
this.initElements(tokens);
|
|
310
|
+
}
|
|
311
|
+
initElements(tokensVector) {
|
|
312
|
+
for (let i = 0; i < tokensVector.length; i = i + 2) {
|
|
313
|
+
let attribute = tokensVector.get_Item(i);
|
|
314
|
+
let valueStr = tokensVector.get_Item(i + 1);
|
|
315
|
+
this.setAttribute(attribute, valueStr);
|
|
316
|
+
}
|
|
317
|
+
this.SetAfterParsing();
|
|
318
|
+
}
|
|
319
|
+
SetAfterParsing() {
|
|
320
|
+
this.setLengths(this._type, false);
|
|
321
|
+
if (this.NullAllowed && this._nullDisplay === null)
|
|
322
|
+
this._nullDisplay = "";
|
|
323
|
+
}
|
|
324
|
+
getVarName() {
|
|
325
|
+
return this._varName || "";
|
|
326
|
+
}
|
|
327
|
+
getName() {
|
|
328
|
+
return this.getVarName();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGREZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9GaWVsZERlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RyxPQUFPLEVBQU8sT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFlBQVksR0FBVyxJQUFJLENBQUM7SUFDNUIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUNuQixZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLFVBQVUsR0FBVyxJQUFJLENBQUM7SUFDMUIsWUFBWSxHQUFXLElBQUksQ0FBQztJQUd0QyxJQUFJLFlBQVksQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNPLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFOUIsZUFBZSxHQUFZLElBQUksQ0FBQztJQUM5QixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLEtBQUssR0FBVyxDQUFDLENBQUM7SUFDbEIs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e0ZsZFN0b3JhZ2UsIFN0b3JhZ2VBdHRyaWJ1dGUsIFN0clV0aWwsIFhtbFBhcnNlciwgQmFzZTY0LCBYTUxDb25zdGFudHN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7TGlzdCwgTk51bWJlciwgTlN0cmluZywgSW50MzJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSBcIi4uLy4uL0V2ZW50c1wiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3J9IGZyb20gXCIuLi9ndWkvRGlzcGxheUNvbnZlcnRvclwiO1xyXG5pbXBvcnQge1ZlY3RvclR5cGV9IGZyb20gXCIuL1ZlY3RvclR5cGVcIjtcclxuaW1wb3J0IHsgR3VpRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vLi4vR3VpRW52aXJvbm1lbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGaWVsZERlZiB7XHJcbiAgRGVmYXVsdFZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG4gIE51bGxBbGxvd2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9udWxsRGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBfbnVsbFZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBfbnVsbERpc3BsYXk6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vIHRydWUsIGlmIGZpZWxkIGlzIG1vZGlmaWFibGUgb24gZmllbGQgbGV2ZWxcclxuICBzZXQgRGJNb2RpZmlhYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kYk1vZGlmaWFibGUgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IERiTW9kaWZpYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYk1vZGlmaWFibGU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RiTW9kaWZpYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgX3BhcnRPZkRhdGF2aWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcm90ZWN0ZWQgX3BpY3R1cmU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIF9zaXplOiBudW1iZXIgPSAwO1xyXG4gIHByb3RlY3RlZCBfdmFyTmFtZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLy8gT25seSBmb3IgQkxPQiBmaWVsZC4gRG9lcyBpdCBjb250YWluIGEgdW5pY29kZSBvciBBTlNJIGRhdGE/XHJcbiAgcHJpdmF0ZSBfY29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTktOT1dOO1xyXG4gIHByb3RlY3RlZCBfdmVjQ2VsbHNDb250ZW50VHlwZTogc3RyaW5nID0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOS05PV047XHJcbiAgcHJvdGVjdGVkIF92ZWNDZWxsc1NpemU6IG51bWJlciA9IDA7XHJcbiAgcHJvdGVjdGVkIF92ZWNDZWxsc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgcHJvdGVjdGVkIF90eXBlOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gIFN0b3JhZ2U6IEZsZFN0b3JhZ2UgO1xyXG4gIFZhckRpc3BsYXlOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgc3RhdGljIF9kZWZhdWx0X2RhdGU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pZDogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgX3NwYWNlczogc3RyaW5nW10gPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlkX1wiPiBpZHggaW4gRmllbGRzVGFibGUgPC9wYXJhbT5cclxuICBjb25zdHJ1Y3RvcihpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9pZCA9IGlkO1xyXG4gICAgdGhpcy5WYXJEaXNwbGF5TmFtZSA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgfVxyXG5cclxuICBnZXQgUGFydE9mRGF0YXZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFydE9mRGF0YXZpZXc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdGhlIGlkIG9mIHRoZSBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0SWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2l6ZSB0eXBlIG9mIGN1cnJlbnQgRmllbGQ6IEEsIE4sIEwsIEQsIFRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gc2l6ZSBtZW1iZXIgb2YgY3VycmVudCBGaWVsZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0VHlwZSgpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdGhlIG1hZ2ljIGRlZmF1bHQgbnVsbCBkaXNwbGF5IHZhbHVlIGFjY29yZGluZyB0byB0aGUgdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+b2YgdGhlIGRhdGE8L3BhcmFtPlxyXG4gIHN0YXRpYyBnZXRNYWdpY0RlZmF1bHROdWxsRGlzcGxheVZhbHVlKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZhbDogc3RyaW5nO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB2YWwgPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAvLyB6ZXJvXHJcbiAgICAgICAgdmFsID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0aGUgbWFnaWMgZGVmYXVsdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPm9mIHRoZSBkYXRhPC9wYXJhbT5cclxuICBzdGF0aWMgZ2V0TWFnaWNEZWZhdWx0VmFsdWUodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdmFsID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICB2YWwgPSBCbG9iVHlwZS5nZXRFbXB0eUJsb2JQcmVmaXgoJ1xcMCcpICsgXCI7XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICB2YWwgPSBcIkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgdmFsID0gRmllbGREZWYuX2RlZmF1bHRfZGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgdmFsID0gXCIwXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldERlZmF1bHRWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZhbDogc3RyaW5nID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGlmICh0aGlzLl9udWxsRGVmYXVsdCAmJiB0aGlzLl9udWxsVmFsdWUgIT09IG51bGwpXHJcbiAgICAgICAgdmFsID0gdGhpcy5fbnVsbFZhbHVlO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLkRlZmF1bHRWYWx1ZSAhPT0gbnVsbClcclxuICAgICAgICB2YWwgPSB0aGlzLkRlZmF1bHRWYWx1ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuICAgICBlbHNlXHJcbiAgICAgICB2YWwgPSB0aGlzLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcblxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyB0aGUgdmVjdG9ycyBjZWxscyBkZWZhdWx0IHZhbHVlXHJcbiAgLy8vIGlmIHRoZSBmaWVsZCBpcyBub3QgYSB2ZWN0b3IgcmV0dXJucyBmaWVsZCBkZWZhdWx0IHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDZWxsRGVmdWFsdFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICBpZiAodGhpcy5fbnVsbERlZmF1bHQgJiYgdGhpcy5fbnVsbFZhbHVlICE9PSBudWxsKVxyXG4gICAgICAgIHZhbCA9IHRoaXMuX251bGxWYWx1ZTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5EZWZhdWx0VmFsdWUgIT09IG51bGwpXHJcbiAgICAgICAgICB2YWwgPSB0aGlzLkRlZmF1bHRWYWx1ZTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFsID0gRmllbGREZWYuZ2V0TWFnaWNEZWZhdWx0VmFsdWUodGhpcy5fdmVjQ2VsbHNUeXBlKTtcclxuICAgICAgICBpZiAodGhpcy5fdmVjQ2VsbHNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgICB2YWwgPSBCbG9iVHlwZS5zZXRDb250ZW50VHlwZSh2YWwsIHRoaXMuX3ZlY0NlbGxzQ29udGVudFR5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHZhbCA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdGhlIG1hZ2ljIGRlZmF1bHQgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNYWdpY0RlZmF1bHRWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZhbDogc3RyaW5nID0gRmllbGREZWYuZ2V0TWFnaWNEZWZhdWx0VmFsdWUodGhpcy5fdHlwZSk7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKVxyXG4gICAgICB2YWwgPSBCbG9iVHlwZS5zZXRDb250ZW50VHlwZSh2YWwsIHRoaXMuX2NvbnRlbnRUeXBlKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgIHZhbCA9IEJsb2JUeXBlLlNldFZlY0NlbGxBdHRyKHZhbCwgdGhpcy5fdmVjQ2VsbHNUeXBlKTtcclxuICAgICAgICBpZiAodGhpcy5fdmVjQ2VsbHNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgICB2YWwgPSBCbG9iVHlwZS5zZXRDb250ZW50VHlwZSh2YWwsIHRoaXMuX3ZlY0NlbGxzQ29udGVudFR5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY29udGVudFR5cGUgPC9yZXR1cm5zPlxyXG4gIGdldENvbnRlbnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGVudFR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBudWxsRGlzcGxheSBoYXMgYSB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaGFzTnVsbERpc3BsYXlWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9udWxsRGlzcGxheSAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzaXplIG1lbWJlciBvZiBjdXJyZW50IEZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHNpemUgbWVtYmVyIG9mIGN1cnJlbnQgRmllbGQgPC9yZXR1cm5zPlxyXG4gIGdldFNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zaXplO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHZlY3RvciBjZWxscyBzaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRWZWNDZWxsc1NpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyB0aGlzLl92ZWNDZWxsc1NpemUgOiB0aGlzLl9zaXplO1xyXG4gIH1cclxuXHJcbiAgc2V0TGVuZ3Rocyh0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCB2ZWNDZWxsczogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IHJlczogbnVtYmVyID0gdGhpcy5fc2l6ZTtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgaWYgKHZlY0NlbGxzKSB7XHJcbiAgICAgICAgICByZXMgPSB0aGlzLl92ZWNDZWxsc1NpemU7XHJcbiAgICAgICAgICB0aGlzLl9zcGFjZXMgPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl92ZWNDZWxsc1NpemUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLl9zcGFjZXMgPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl9zaXplKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3NpemU7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgdGhpcy5fc3BhY2VzW2ldID0gJyAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgcmVzID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCkgKiAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgcmVzID0gKCF2ZWNDZWxscyA/IDEgOiA0KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIC8vIFFDUiA3NTg5MTMgRk9SIFZFQ1RPUlMgSU5URVJOQUwgVVNFIE9OTFkgVEhFIFNJWkUgT0YgQkxPQlMgQU5EIFZFQ1RPUlxyXG4gICAgICAgIC8vIElTIFRIRSBTSVpFIE9GIFRISUVSIFNUUlVDVFMgSU4gVEhFIE1BR0lDIEVOR0lOXHJcbiAgICAgICAgcmVzID0gKCF2ZWNDZWxscyA/IEludDMyLk1heFZhbHVlIDogVmVjdG9yVHlwZS5CTE9CX1RZUEVfU1RSVUNUX1NJWkUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIHJlcyA9IEludDMyLk1heFZhbHVlO1xyXG4gICAgICAgIGlmICghdmVjQ2VsbHMpXHJcbiAgICAgICAgICB0aGlzLnNldExlbmd0aHModGhpcy5fdmVjQ2VsbHNUeXBlLCB0cnVlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXMgPSBWZWN0b3JUeXBlLkJMT0JfVFlQRV9TVFJVQ1RfU0laRTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmVjQ2VsbHMpXHJcbiAgICAgIHRoaXMuX3ZlY0NlbGxzU2l6ZSA9IHJlcztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fc2l6ZSA9IHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjZWxscyB0eXBlIG9mIHZlY3RvcnMgZWxlc2UgcmV0dXJucyB0aGUgZmllbGQgdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q2VsbHNUeXBlKCk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSA/IHRoaXMuX3ZlY0NlbGxzVHlwZSA6IHRoaXMuX3R5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY2VsbCBjb250ZW50IHR5cGUgb2YgdmVjdG9yIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dmVjdG9yJ3MgY2VsbCBjb250ZW50IHR5cGU8L3JldHVybnM+XHJcbiAgZ2V0VmVjQ2VsbHNDb250ZW50VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZlY0NlbGxzQ29udGVudFR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBOdWxsIFZhbHVlIHZhbHVlIG9mIHRoaXMgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE51bGxWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX251bGxWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIGEgTnVsbCBEZWZhdWx0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc051bGxEZWZhdWx0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX251bGxEZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgTnVsbCBEaXNwbGF5IHZhbHVlIG9mIHRoaXMgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE51bGxEaXNwbGF5KCk6IGFueSB7XHJcbiAgICBsZXQgdmFsOiBhbnk7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHZhbCA9IFwiXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIC8vIHplcm9cclxuICAgICAgICB2YWwgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGb3IgQkxPQiBmaWVsZHMsIGNoZWNrIGlmIHRoZXkgY29udGFpbiBVTklDT0RFIG9yIEFOU0kgY2hhcnMuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+VFJVRSBpZiBjb250ZW50IGlzIFVOSUNPREUuIEZhbHNlIG90aGVyd2lzZTwvcmV0dXJucz5cclxuICBJc0NvbnRlbnRVbmljb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiB0aGlzLl9jb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREUpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIEdldFBpY3R1cmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWN0dXJlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgdGhlIGZpZWxkIGF0dHJpYnV0ZSBpbiBwYXJzaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuIHByb3RlY3RlZCBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1RhZ1Byb2Nlc3NlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9UWVBFOlxyXG4gICAgICAgIHRoaXMuX3R5cGUgPSA8U3RvcmFnZUF0dHJpYnV0ZT52YWx1ZVN0ci5jaGFyQXQoMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfU0laRTpcclxuICAgICAgICB0aGlzLl9zaXplID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NpemUgPD0gMClcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiaW4gRmllbGQuaW5pdEVsZW1lbnRzKCk6IHNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1wiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9WQVJfTkFNRTpcclxuICAgICAgICB0aGlzLl92YXJOYW1lID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKS50b1N0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1ZBUl9ESVNQX05BTUU6XHJcbiAgICAgICAgdGhpcy5WYXJEaXNwbGF5TmFtZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikudG9TdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9QSUNUVVJFOlxyXG4gICAgICAgIHRoaXMuX3BpY3R1cmUgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVkVDX0NFTExTX1NJWkU6XHJcbiAgICAgICAgdGhpcy5fdmVjQ2VsbHNTaXplID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVkVDX0NFTExTX0FUVFI6XHJcbiAgICAgICAgdGhpcy5fdmVjQ2VsbHNUeXBlID0gPFN0b3JhZ2VBdHRyaWJ1dGU+dmFsdWVTdHIuY2hhckF0KDApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1ZFQ19DRUxMU19DT05URU5UOlxyXG4gICAgICAgIHRoaXMuX3ZlY0NlbGxzQ29udGVudFR5cGUgPSB2YWx1ZVN0ci5jaGFyQXQoMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfTlVMTFZBTFVFOlxyXG4gICAgICAgIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSkge1xyXG4gICAgICAgICAgaWYgKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlYnVnTGV2ZWwoKSA+IDEpXHJcbiAgICAgICAgICAgIHRoaXMuX251bGxWYWx1ZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fbnVsbFZhbHVlID0gQmFzZTY0LmRlY29kZVRvSGV4KHZhbHVlU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5fbnVsbFZhbHVlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKS50b1N0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05VTExESVNQTEFZOlxyXG4gICAgICAgIHRoaXMuX251bGxEaXNwbGF5ID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKS50b1N0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05VTExERUZBVUxUOlxyXG4gICAgICAgIHRoaXMuX251bGxEZWZhdWx0ID0gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0RCX01PRElGSUFCTEU6XHJcbiAgICAgICAgdGhpcy5EYk1vZGlmaWFibGUgPSBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfREVGQVVMVFZBTFVFOlxyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlID0gdmFsdWVTdHI7XHJcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikudG9TdHJpbmcoKTtcclxuICAgICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlID0gU3RyVXRpbC5wYWRTdHIodGhpcy5EZWZhdWx0VmFsdWUsIHRoaXMuX3NpemUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiYgdGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKSB7XHJcbiAgICAgICAgICAvLyB3b3JraW5nIGluIGhleCBvciBiYXNlNjRcclxuICAgICAgICAgIGlmICgodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJlxyXG4gICAgICAgICAgICAodGhpcy5fdmVjQ2VsbHNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fdmVjQ2VsbHNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdGhpcy5fdmVjQ2VsbHNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpKSB8fFxyXG4gICAgICAgICAgICAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCB0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpKSB7XHJcbiAgICAgICAgICAgIGlmIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWJ1Z0xldmVsKCkgPCAxKVxyXG4gICAgICAgICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlID0gQmFzZTY0LmRlY29kZVRvSGV4KHZhbHVlU3RyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5EZWZhdWx0VmFsdWUubGVuZ3RoID09PSAwICYmIHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQilcclxuICAgICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlID0gbnVsbDtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZSA9IEJsb2JUeXBlLmNyZWF0ZUZyb21TdHJpbmcodGhpcy5EZWZhdWx0VmFsdWUsIHRoaXMuX2NvbnRlbnRUeXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OVUxMQUxMT1dFRDpcclxuICAgICAgICB0aGlzLk51bGxBbGxvd2VkID0gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0JMT0JfQ09OVEVOVDpcclxuICAgICAgICB0aGlzLl9jb250ZW50VHlwZSA9IHZhbHVlU3RyLmNoYXJBdCgwKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9QQVJUX09GX0RBVEFWSUVXOlxyXG4gICAgICAgIHRoaXMuX3BhcnRPZkRhdGF2aWV3ID0gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1NUT1JBR0U6XHJcbiAgICAgICAgdGhpcy5TdG9yYWdlID0gPEZsZFN0b3JhZ2U+WG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaXNUYWdQcm9jZXNzZWQgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNUYWdQcm9jZXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTmVlZCBwYXJ0IGlucHV0IFN0cmluZyB0byByZWxldmFudCBmb3IgdGhlIEZpZWxkIGNsYXNzIGRhdGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gcGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgIHRleHQgPSB0ZXh0LnN1YnN0cih0ZXh0LmluZGV4T2YoWE1MQ29uc3RhbnRzLk1HX1RBR19GTERIKSArIFhNTENvbnN0YW50cy5NR19UQUdfRkxESC5sZW5ndGgpO1xyXG4gICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2Vucyh0ZXh0LCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgdGhpcy5pbml0RWxlbWVudHModG9rZW5zKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmRlbGVtZW50PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFRhYlwiPnJlZmVyZW5jZSB0byByZWxldmFudCBleHAuIHRhYmxlPC9wYXJhbT5cclxuICBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBpID0gaSArIDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkpO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpICsgMSk7XHJcblxyXG4gICAgICAvLyB0aGUgcGFyc2luZyBpcyBmaW5pc2hlZCBoZXJlXHJcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWVTdHIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5TZXRBZnRlclBhcnNpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc29tZSBwcm9wZXJ0aWVzIGFyZSBuZWVkZWQgdG8gYmUgc2V0IGFmdGVyIHBhcnNpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFNldEFmdGVyUGFyc2luZygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0TGVuZ3Rocyh0aGlzLl90eXBlLCBmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5OdWxsQWxsb3dlZCAmJiB0aGlzLl9udWxsRGlzcGxheSA9PT0gbnVsbClcclxuICAgICAgdGhpcy5fbnVsbERpc3BsYXkgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBuYW1lIG9mIHZhcmlhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRWYXJOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFyTmFtZSB8fCBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZvciBnZXQgVkFSTkFNRSBmdW5jdGlvbiB1c2VcclxuICAvLy8gICBBIHN0cmluZyBjb250YWluaW5nIHRoZSB0YWJsZSBuYW1lIHdoZXJlIHRoZSB2YXJpYWJsZSBvcmlnaW5hdGVzLFxyXG4gIC8vLyAgIGNvbmNhdGVuYXRlZCB3aXRoICcuJyBhbmQgdGhlIHZhcmlhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpYWJsZSBpbiB0aGF0IHRhYmxlLlxyXG4gIC8vLyAgIElmIHRoZSB2YXJpYWJsZSBpcyBhIHZpcnR1YWwgb25lLCB0aGVuIHRoZSB0YWJsZSBuYW1lIHdvdWxkIGluZGljYXRlICdWaXJ0dWFsJy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFZhck5hbWUoKTtcclxuICB9XHJcbn1cclxuIl19
|