angular-odata 0.122.0 → 0.124.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/esm2022/lib/api.mjs +373 -0
- package/esm2022/lib/cache/cache.mjs +175 -0
- package/{esm2020 → esm2022}/lib/cache/storage.mjs +1 -1
- package/esm2022/lib/client.mjs +252 -0
- package/{esm2020 → esm2022}/lib/helper.mjs +1 -1
- package/{esm2020 → esm2022}/lib/loaders.mjs +1 -1
- package/esm2022/lib/models/collection.mjs +865 -0
- package/esm2022/lib/models/model.mjs +535 -0
- package/esm2022/lib/models/options.mjs +1117 -0
- package/{esm2020 → esm2022}/lib/module.mjs +5 -5
- package/esm2022/lib/resources/path/segments.mjs +124 -0
- package/esm2022/lib/resources/query/builder.mjs +624 -0
- package/esm2022/lib/resources/query/expressions/base.mjs +20 -0
- package/esm2022/lib/resources/query/expressions/compute.mjs +39 -0
- package/esm2022/lib/resources/query/expressions/count.mjs +99 -0
- package/esm2022/lib/resources/query/expressions/expand.mjs +125 -0
- package/esm2022/lib/resources/query/expressions/filter.mjs +161 -0
- package/esm2022/lib/resources/query/expressions/orderby.mjs +56 -0
- package/esm2022/lib/resources/query/expressions/search.mjs +122 -0
- package/esm2022/lib/resources/query/expressions/select.mjs +31 -0
- package/esm2022/lib/resources/query/expressions/syntax.mjs +444 -0
- package/{esm2020 → esm2022}/lib/resources/query/handlers.mjs +1 -1
- package/esm2022/lib/resources/query/options.mjs +115 -0
- package/{esm2020 → esm2022}/lib/resources/request.mjs +1 -1
- package/esm2022/lib/resources/resource.mjs +257 -0
- package/{esm2020 → esm2022}/lib/resources/responses/annotations.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +33 -0
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-container.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-enum-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-function-action.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-reference.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-schema.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structural-property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structured-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-type-definition.mjs +1 -1
- package/esm2022/lib/resources/responses/metadata.mjs +547 -0
- package/{esm2020 → esm2022}/lib/resources/responses/response.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/action.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/batch.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/count.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/entity.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/function.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/media.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/navigation-property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/reference.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/value.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/annotation.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/callable.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/element.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/entity-container.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/enum-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/parsers/callable.mjs +1 -1
- package/esm2022/lib/schema/parsers/edm.mjs +99 -0
- package/{esm2020 → esm2022}/lib/schema/parsers/enum-type.mjs +2 -2
- package/esm2022/lib/schema/parsers/structured-type.mjs +502 -0
- package/{esm2020 → esm2022}/lib/schema/schema.mjs +1 -1
- package/esm2022/lib/schema/structured-type.mjs +207 -0
- package/esm2022/lib/services/base.mjs +29 -0
- package/{esm2020 → esm2022}/lib/services/entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/services/factory.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/types.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/arrays.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/durations.mjs +1 -1
- package/esm2022/lib/utils/enums.mjs +61 -0
- package/{esm2020 → esm2022}/lib/utils/http.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/objects.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/odata.mjs +1 -1
- package/esm2022/lib/utils/types.mjs +136 -0
- package/{fesm2020 → fesm2022}/angular-odata.mjs +544 -373
- package/fesm2022/angular-odata.mjs.map +1 -0
- package/lib/helper.d.ts +1 -1
- package/lib/models/model.d.ts +4 -2
- package/lib/models/options.d.ts +7 -8
- package/lib/resources/path/segments.d.ts +15 -6
- package/lib/resources/query/builder.d.ts +21 -20
- package/lib/resources/query/expressions/base.d.ts +6 -4
- package/lib/resources/query/expressions/compute.d.ts +10 -8
- package/lib/resources/query/expressions/count.d.ts +14 -11
- package/lib/resources/query/expressions/expand.d.ts +23 -19
- package/lib/resources/query/expressions/filter.d.ts +22 -20
- package/lib/resources/query/expressions/orderby.d.ts +12 -9
- package/lib/resources/query/expressions/search.d.ts +12 -9
- package/lib/resources/query/expressions/select.d.ts +9 -7
- package/lib/resources/query/expressions/syntax.d.ts +75 -71
- package/lib/resources/query/handlers.d.ts +2 -2
- package/lib/resources/query/options.d.ts +15 -6
- package/lib/resources/resource.d.ts +2 -2
- package/lib/resources/responses/types.d.ts +3 -3
- package/lib/resources/types/options.d.ts +7 -7
- package/lib/schema/parsers/structured-type.d.ts +8 -5
- package/lib/schema/structured-type.d.ts +2 -1
- package/lib/types.d.ts +15 -15
- package/lib/utils/durations.d.ts +1 -1
- package/lib/utils/enums.d.ts +3 -0
- package/lib/utils/types.d.ts +1 -0
- package/package.json +9 -15
- package/esm2020/lib/api.mjs +0 -373
- package/esm2020/lib/cache/cache.mjs +0 -173
- package/esm2020/lib/client.mjs +0 -252
- package/esm2020/lib/models/collection.mjs +0 -861
- package/esm2020/lib/models/model.mjs +0 -507
- package/esm2020/lib/models/options.mjs +0 -1110
- package/esm2020/lib/resources/path/segments.mjs +0 -124
- package/esm2020/lib/resources/query/builder.mjs +0 -588
- package/esm2020/lib/resources/query/expressions/base.mjs +0 -20
- package/esm2020/lib/resources/query/expressions/compute.mjs +0 -39
- package/esm2020/lib/resources/query/expressions/count.mjs +0 -89
- package/esm2020/lib/resources/query/expressions/expand.mjs +0 -115
- package/esm2020/lib/resources/query/expressions/filter.mjs +0 -161
- package/esm2020/lib/resources/query/expressions/orderby.mjs +0 -56
- package/esm2020/lib/resources/query/expressions/search.mjs +0 -122
- package/esm2020/lib/resources/query/expressions/select.mjs +0 -31
- package/esm2020/lib/resources/query/expressions/syntax.mjs +0 -409
- package/esm2020/lib/resources/query/options.mjs +0 -115
- package/esm2020/lib/resources/resource.mjs +0 -251
- package/esm2020/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
- package/esm2020/lib/resources/responses/metadata.mjs +0 -547
- package/esm2020/lib/schema/parsers/edm.mjs +0 -104
- package/esm2020/lib/schema/parsers/structured-type.mjs +0 -490
- package/esm2020/lib/schema/structured-type.mjs +0 -202
- package/esm2020/lib/services/base.mjs +0 -29
- package/esm2020/lib/utils/enums.mjs +0 -45
- package/esm2020/lib/utils/types.mjs +0 -133
- package/fesm2015/angular-odata.mjs +0 -11811
- package/fesm2015/angular-odata.mjs.map +0 -1
- package/fesm2020/angular-odata.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-odata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/memory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/handlers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/expressions/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/parsers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/entity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/arraybuffers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/dates.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/strings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/urls.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -1,547 +0,0 @@
|
|
|
1
|
-
import { CsdlAction, CsdlActionImport, CsdlFunction, CsdlFunctionImport, CsdlParameter, CsdlReturnType, } from './csdl/csdl-function-action';
|
|
2
|
-
import { CsdlAnnotation, CsdlAnnotations, CsdlTerm, } from './csdl/csdl-annotation';
|
|
3
|
-
import { CsdlComplexType, CsdlEntityType, CsdlKey, CsdlPropertyRef, } from './csdl/csdl-structured-type';
|
|
4
|
-
import { CsdlEnumMember, CsdlEnumType } from './csdl/csdl-enum-type';
|
|
5
|
-
import { CsdlInclude, CsdlIncludeAnnotations, CsdlReference, } from './csdl/csdl-reference';
|
|
6
|
-
import { CsdlNavigationProperty, CsdlOnDelete, CsdlProperty, CsdlReferentialConstraint, } from './csdl/csdl-structural-property';
|
|
7
|
-
import { CsdlEntityContainer } from './csdl/csdl-entity-container';
|
|
8
|
-
import { CsdlEntitySet } from './csdl/csdl-entity-set';
|
|
9
|
-
import { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';
|
|
10
|
-
import { CsdlSchema } from './csdl/csdl-schema';
|
|
11
|
-
import { CsdlSingleton } from './csdl/csdl-singleton';
|
|
12
|
-
import { CsdlTypeDefinition } from './csdl/csdl-type-definition';
|
|
13
|
-
import { VERSION_4_0 } from '../../constants';
|
|
14
|
-
var FieldType;
|
|
15
|
-
(function (FieldType) {
|
|
16
|
-
FieldType[FieldType["ATTRIBUTE"] = 0] = "ATTRIBUTE";
|
|
17
|
-
FieldType[FieldType["TAG"] = 1] = "TAG";
|
|
18
|
-
})(FieldType || (FieldType = {}));
|
|
19
|
-
class Field {
|
|
20
|
-
constructor(name, fieldType) {
|
|
21
|
-
this.name = name;
|
|
22
|
-
this.fieldType = fieldType;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export class ODataMetadata {
|
|
26
|
-
constructor(xml) {
|
|
27
|
-
try {
|
|
28
|
-
const parser = new DOMParser();
|
|
29
|
-
const document = parser.parseFromString(xml, 'text/xml');
|
|
30
|
-
this.checkVersion(document);
|
|
31
|
-
this.version = this.getFieldValueByAttribute(new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE), document.documentElement.attributes);
|
|
32
|
-
this.references = this.getObjects(document.documentElement, ODataMetadata.TAG_REFERENCE, [
|
|
33
|
-
new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),
|
|
34
|
-
new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),
|
|
35
|
-
new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),
|
|
36
|
-
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
37
|
-
]);
|
|
38
|
-
const dataServices = document.documentElement.getElementsByTagName(ODataMetadata.TAG_DATA_SERVICES)[0];
|
|
39
|
-
this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [
|
|
40
|
-
new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),
|
|
41
|
-
new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
|
|
42
|
-
new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),
|
|
43
|
-
new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),
|
|
44
|
-
new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),
|
|
45
|
-
new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),
|
|
46
|
-
new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),
|
|
47
|
-
new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),
|
|
48
|
-
new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),
|
|
49
|
-
new Field(ODataMetadata.TAG_TERM, FieldType.TAG),
|
|
50
|
-
new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),
|
|
51
|
-
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
52
|
-
]);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
throw new Error('Unable to parse metadata, ' + error);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
checkVersion(document) {
|
|
59
|
-
// check version
|
|
60
|
-
const attributes = document.documentElement.attributes;
|
|
61
|
-
if (!attributes) {
|
|
62
|
-
throw new Error('OData version is not specified in the metadata');
|
|
63
|
-
}
|
|
64
|
-
const attr = attributes.getNamedItem('Version');
|
|
65
|
-
if (attr === null) {
|
|
66
|
-
throw new Error('OData version is not specified in the metadata');
|
|
67
|
-
}
|
|
68
|
-
const odataVersion = attr?.nodeValue;
|
|
69
|
-
if (odataVersion !== VERSION_4_0) {
|
|
70
|
-
throw new Error('OData version "' + odataVersion + '" is not supported');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
getObjects(parentElement, tag, fieldNames) {
|
|
74
|
-
let objects = [];
|
|
75
|
-
const children = parentElement.children;
|
|
76
|
-
for (let index = 0; index < children.length; index++) {
|
|
77
|
-
const element = children.item(index);
|
|
78
|
-
if (!element || element.nodeName !== tag) {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const attributes = element.attributes;
|
|
82
|
-
const fieldValues = this.getFieldValues(fieldNames, attributes, element);
|
|
83
|
-
switch (tag) {
|
|
84
|
-
case ODataMetadata.TAG_REFERENCE:
|
|
85
|
-
objects.push(new CsdlReference(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
86
|
-
break;
|
|
87
|
-
case ODataMetadata.TAG_INCLUDE:
|
|
88
|
-
objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));
|
|
89
|
-
break;
|
|
90
|
-
case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:
|
|
91
|
-
objects.push(new CsdlIncludeAnnotations(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
92
|
-
break;
|
|
93
|
-
case ODataMetadata.TAG_TERM:
|
|
94
|
-
objects.push(new CsdlTerm(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8], fieldValues[9]));
|
|
95
|
-
break;
|
|
96
|
-
case ODataMetadata.TAG_ANNOTATIONS:
|
|
97
|
-
objects.push(new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
98
|
-
break;
|
|
99
|
-
case ODataMetadata.TAG_ANNOTATION:
|
|
100
|
-
objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));
|
|
101
|
-
break;
|
|
102
|
-
case ODataMetadata.TAG_SCHEMA:
|
|
103
|
-
objects.push(new CsdlSchema(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8], fieldValues[9], fieldValues[10], fieldValues[11]));
|
|
104
|
-
break;
|
|
105
|
-
case ODataMetadata.TAG_ENUM_TYPE:
|
|
106
|
-
objects.push(new CsdlEnumType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
107
|
-
break;
|
|
108
|
-
case ODataMetadata.TAG_COMPLEX_TYPE:
|
|
109
|
-
objects.push(new CsdlComplexType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]));
|
|
110
|
-
break;
|
|
111
|
-
case ODataMetadata.TAG_ENTITY_TYPE:
|
|
112
|
-
objects.push(new CsdlEntityType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7]));
|
|
113
|
-
break;
|
|
114
|
-
case ODataMetadata.TAG_FUNCTION:
|
|
115
|
-
objects.push(new CsdlFunction(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]));
|
|
116
|
-
break;
|
|
117
|
-
case ODataMetadata.TAG_MEMBER:
|
|
118
|
-
objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));
|
|
119
|
-
break;
|
|
120
|
-
case ODataMetadata.TAG_PROPERTY:
|
|
121
|
-
objects.push(new CsdlProperty(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8]));
|
|
122
|
-
break;
|
|
123
|
-
case ODataMetadata.TAG_PROPERTY_REF:
|
|
124
|
-
objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));
|
|
125
|
-
break;
|
|
126
|
-
case ODataMetadata.TAG_NAVIGATION_PROPERTY:
|
|
127
|
-
objects.push(new CsdlNavigationProperty(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6]));
|
|
128
|
-
break;
|
|
129
|
-
case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:
|
|
130
|
-
objects.push(new CsdlReferentialConstraint(fieldValues[0], fieldValues[1]));
|
|
131
|
-
break;
|
|
132
|
-
case ODataMetadata.TAG_PARAMETER:
|
|
133
|
-
objects.push(new CsdlParameter(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6]));
|
|
134
|
-
break;
|
|
135
|
-
case ODataMetadata.TAG_ACTION:
|
|
136
|
-
objects.push(new CsdlAction(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4]));
|
|
137
|
-
break;
|
|
138
|
-
case ODataMetadata.TAG_ENTITY_SET:
|
|
139
|
-
objects.push(new CsdlEntitySet(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
140
|
-
break;
|
|
141
|
-
case ODataMetadata.TAG_SINGLETON:
|
|
142
|
-
objects.push(new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
143
|
-
break;
|
|
144
|
-
case ODataMetadata.TAG_FUNCTION_IMPORT:
|
|
145
|
-
objects.push(new CsdlFunctionImport(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
146
|
-
break;
|
|
147
|
-
case ODataMetadata.TAG_ACTION_IMPORT:
|
|
148
|
-
objects.push(new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
149
|
-
break;
|
|
150
|
-
case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:
|
|
151
|
-
objects.push(new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1]));
|
|
152
|
-
break;
|
|
153
|
-
case ODataMetadata.TAG_TYPE_DEFINITION:
|
|
154
|
-
objects.push(new CsdlTypeDefinition(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7]));
|
|
155
|
-
break;
|
|
156
|
-
default:
|
|
157
|
-
throw new Error('Unknwon tag:' + tag);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return objects;
|
|
161
|
-
}
|
|
162
|
-
getObject(parentElement, tag, fieldNames) {
|
|
163
|
-
let object;
|
|
164
|
-
const children = parentElement.children;
|
|
165
|
-
let element;
|
|
166
|
-
for (let index = 0; index < children.length; index++) {
|
|
167
|
-
if (children && children.item(index)?.nodeName === tag) {
|
|
168
|
-
if (element !== undefined && element !== null) {
|
|
169
|
-
throw new Error('Expected one ' + tag);
|
|
170
|
-
}
|
|
171
|
-
element = children.item(index);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (element !== undefined && element !== null) {
|
|
175
|
-
const attributes = element.attributes;
|
|
176
|
-
const fieldValues = this.getFieldValues(fieldNames, attributes, element);
|
|
177
|
-
switch (tag) {
|
|
178
|
-
case ODataMetadata.TAG_KEY:
|
|
179
|
-
object = new CsdlKey(fieldValues[0]);
|
|
180
|
-
break;
|
|
181
|
-
case ODataMetadata.TAG_RETURN_TYPE:
|
|
182
|
-
object = new CsdlReturnType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]);
|
|
183
|
-
break;
|
|
184
|
-
case ODataMetadata.TAG_ENTITY_CONTAINER:
|
|
185
|
-
object = new CsdlEntityContainer(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]);
|
|
186
|
-
break;
|
|
187
|
-
case ODataMetadata.TAG_ON_DELETE:
|
|
188
|
-
object = new CsdlOnDelete(fieldValues[0]);
|
|
189
|
-
break;
|
|
190
|
-
default:
|
|
191
|
-
throw new Error('Unknwon tag:' + tag);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return object;
|
|
195
|
-
}
|
|
196
|
-
getFieldValues(fields, attributes, element) {
|
|
197
|
-
const fieldValues = [];
|
|
198
|
-
for (const field of fields) {
|
|
199
|
-
if (field.fieldType === FieldType.TAG) {
|
|
200
|
-
fieldValues.push(this.getFieldValueByTag(field, element));
|
|
201
|
-
}
|
|
202
|
-
else if (field.fieldType === FieldType.ATTRIBUTE) {
|
|
203
|
-
fieldValues.push(this.getFieldValueByAttribute(field, attributes));
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
throw new Error('Unknown field type: ' + field.fieldType);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
return fieldValues;
|
|
210
|
-
}
|
|
211
|
-
getFieldValueByAttribute(field, attributes) {
|
|
212
|
-
switch (field.name) {
|
|
213
|
-
case ODataMetadata.ATTRIBUTE_VERSION:
|
|
214
|
-
case ODataMetadata.ATTRIBUTE_URI:
|
|
215
|
-
case ODataMetadata.ATTRIBUTE_NAMESPACE:
|
|
216
|
-
case ODataMetadata.ATTRIBUTE_ALIAS:
|
|
217
|
-
case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:
|
|
218
|
-
case ODataMetadata.ATTRIBUTE_TERM:
|
|
219
|
-
case ODataMetadata.ATTRIBUTE_QUALIFIER:
|
|
220
|
-
case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:
|
|
221
|
-
case ODataMetadata.ATTRIBUTE_NAME:
|
|
222
|
-
case ODataMetadata.ATTRIBUTE_TYPE:
|
|
223
|
-
case ODataMetadata.ATTRIBUTE_SRID:
|
|
224
|
-
case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:
|
|
225
|
-
case ODataMetadata.ATTRIBUTE_PARTNER:
|
|
226
|
-
case ODataMetadata.ATTRIBUTE_PROPERTY:
|
|
227
|
-
case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:
|
|
228
|
-
case ODataMetadata.ATTRIBUTE_BASE_TYPE:
|
|
229
|
-
case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:
|
|
230
|
-
case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:
|
|
231
|
-
case ODataMetadata.ATTRIBUTE_PATH:
|
|
232
|
-
case ODataMetadata.ATTRIBUTE_TARGET:
|
|
233
|
-
case ODataMetadata.ATTRIBUTE_FUNCTION:
|
|
234
|
-
case ODataMetadata.ATTRIBUTE_ACTION:
|
|
235
|
-
case ODataMetadata.ATTRIBUTE_ENTITY_SET:
|
|
236
|
-
case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:
|
|
237
|
-
case ODataMetadata.ATTRIBUTE_EXTENDS:
|
|
238
|
-
case ODataMetadata.ATTRIBUTE_BASE_TERM:
|
|
239
|
-
case ODataMetadata.ATTRIBUTE_APPLIES_TO:
|
|
240
|
-
return this.getAttributeValue(attributes, field.name);
|
|
241
|
-
case ODataMetadata.ATTRIBUTE_NULLABLE:
|
|
242
|
-
case ODataMetadata.ATTRIBUTE_UNICODE:
|
|
243
|
-
case ODataMetadata.ATTRIBUTE_OPEN_TYPE:
|
|
244
|
-
case ODataMetadata.ATTRIBUTE_HAS_STREAM:
|
|
245
|
-
case ODataMetadata.ATTRIBUTE_IS_BOUND:
|
|
246
|
-
case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:
|
|
247
|
-
case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:
|
|
248
|
-
case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:
|
|
249
|
-
case ODataMetadata.ATTRIBUTE_ABSTRACT:
|
|
250
|
-
case ODataMetadata.ATTRIBUTE_IS_FLAGS:
|
|
251
|
-
return this.propertyValueToBoolean(this.getAttributeValue(attributes, field.name));
|
|
252
|
-
case ODataMetadata.ATTRIBUTE_VALUE:
|
|
253
|
-
case ODataMetadata.ATTRIBUTE_MAX_LENGTH:
|
|
254
|
-
case ODataMetadata.ATTRIBUTE_PRECISION:
|
|
255
|
-
case ODataMetadata.ATTRIBUTE_SCALE:
|
|
256
|
-
return this.propertyValueToNumber(this.getAttributeValue(attributes, field.name));
|
|
257
|
-
default:
|
|
258
|
-
throw new Error('Unknwon attribute:' + field.name);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
getFieldValueByTag(field, element) {
|
|
262
|
-
switch (field.name) {
|
|
263
|
-
case ODataMetadata.TAG_INCLUDE:
|
|
264
|
-
return this.getObjects(element, field.name, [
|
|
265
|
-
new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),
|
|
266
|
-
new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
|
|
267
|
-
]);
|
|
268
|
-
case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:
|
|
269
|
-
return this.getObjects(element, field.name, [
|
|
270
|
-
new Field(ODataMetadata.ATTRIBUTE_TERM_NAMESPACE, FieldType.ATTRIBUTE),
|
|
271
|
-
new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
|
|
272
|
-
new Field(ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE, FieldType.ATTRIBUTE),
|
|
273
|
-
]);
|
|
274
|
-
case ODataMetadata.TAG_TERM:
|
|
275
|
-
return this.getObjects(element, field.name, [
|
|
276
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
277
|
-
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
278
|
-
new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),
|
|
279
|
-
new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),
|
|
280
|
-
new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),
|
|
281
|
-
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
282
|
-
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
283
|
-
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
284
|
-
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
285
|
-
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
286
|
-
]);
|
|
287
|
-
case ODataMetadata.TAG_ANNOTATIONS:
|
|
288
|
-
return this.getObjects(element, field.name, [
|
|
289
|
-
new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),
|
|
290
|
-
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
291
|
-
new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
|
|
292
|
-
]);
|
|
293
|
-
case ODataMetadata.TAG_ANNOTATION:
|
|
294
|
-
return this.getObjects(element, field.name, [
|
|
295
|
-
new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),
|
|
296
|
-
new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
|
|
297
|
-
]);
|
|
298
|
-
case ODataMetadata.TAG_ENUM_TYPE:
|
|
299
|
-
return this.getObjects(element, field.name, [
|
|
300
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
301
|
-
new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),
|
|
302
|
-
new Field(ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE),
|
|
303
|
-
new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),
|
|
304
|
-
]);
|
|
305
|
-
case ODataMetadata.TAG_COMPLEX_TYPE:
|
|
306
|
-
return this.getObjects(element, field.name, [
|
|
307
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
308
|
-
new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),
|
|
309
|
-
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),
|
|
310
|
-
new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),
|
|
311
|
-
new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),
|
|
312
|
-
new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),
|
|
313
|
-
]);
|
|
314
|
-
case ODataMetadata.TAG_ENTITY_TYPE:
|
|
315
|
-
return this.getObjects(element, field.name, [
|
|
316
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
317
|
-
new Field(ODataMetadata.TAG_KEY, FieldType.TAG),
|
|
318
|
-
new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),
|
|
319
|
-
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),
|
|
320
|
-
new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),
|
|
321
|
-
new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),
|
|
322
|
-
new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),
|
|
323
|
-
new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),
|
|
324
|
-
]);
|
|
325
|
-
case ODataMetadata.TAG_FUNCTION:
|
|
326
|
-
return this.getObjects(element, field.name, [
|
|
327
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
328
|
-
new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),
|
|
329
|
-
new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),
|
|
330
|
-
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE),
|
|
331
|
-
new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),
|
|
332
|
-
new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),
|
|
333
|
-
]);
|
|
334
|
-
case ODataMetadata.TAG_MEMBER:
|
|
335
|
-
return this.getObjects(element, field.name, [
|
|
336
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
337
|
-
new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),
|
|
338
|
-
]);
|
|
339
|
-
case ODataMetadata.TAG_PROPERTY:
|
|
340
|
-
return this.getObjects(element, field.name, [
|
|
341
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
342
|
-
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
343
|
-
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
344
|
-
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
345
|
-
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
346
|
-
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
347
|
-
new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),
|
|
348
|
-
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
349
|
-
new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),
|
|
350
|
-
]);
|
|
351
|
-
case ODataMetadata.TAG_KEY:
|
|
352
|
-
return this.getObject(element, field.name, [
|
|
353
|
-
new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),
|
|
354
|
-
]);
|
|
355
|
-
case ODataMetadata.TAG_PROPERTY_REF:
|
|
356
|
-
return this.getObjects(element, field.name, [
|
|
357
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
358
|
-
new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
|
|
359
|
-
]);
|
|
360
|
-
case ODataMetadata.TAG_NAVIGATION_PROPERTY:
|
|
361
|
-
return this.getObjects(element, field.name, [
|
|
362
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
363
|
-
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
364
|
-
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
365
|
-
new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),
|
|
366
|
-
new Field(ODataMetadata.ATTRIBUTE_CONTAINS_TARGET, FieldType.ATTRIBUTE),
|
|
367
|
-
new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),
|
|
368
|
-
new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),
|
|
369
|
-
]);
|
|
370
|
-
case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:
|
|
371
|
-
return this.getObjects(element, field.name, [
|
|
372
|
-
new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),
|
|
373
|
-
new Field(ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY, FieldType.ATTRIBUTE),
|
|
374
|
-
]);
|
|
375
|
-
case ODataMetadata.TAG_ON_DELETE:
|
|
376
|
-
return this.getObject(element, field.name, [
|
|
377
|
-
new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),
|
|
378
|
-
]);
|
|
379
|
-
case ODataMetadata.TAG_PARAMETER:
|
|
380
|
-
return this.getObjects(element, field.name, [
|
|
381
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
382
|
-
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
383
|
-
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
384
|
-
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
385
|
-
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
386
|
-
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
387
|
-
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
388
|
-
]);
|
|
389
|
-
case ODataMetadata.TAG_RETURN_TYPE:
|
|
390
|
-
return this.getObject(element, field.name, [
|
|
391
|
-
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
392
|
-
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
393
|
-
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
394
|
-
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
395
|
-
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
396
|
-
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
397
|
-
]);
|
|
398
|
-
case ODataMetadata.TAG_ACTION:
|
|
399
|
-
return this.getObjects(element, field.name, [
|
|
400
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
401
|
-
new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),
|
|
402
|
-
new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),
|
|
403
|
-
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE),
|
|
404
|
-
new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),
|
|
405
|
-
]);
|
|
406
|
-
case ODataMetadata.TAG_ENTITY_CONTAINER:
|
|
407
|
-
return this.getObject(element, field.name, [
|
|
408
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
409
|
-
new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),
|
|
410
|
-
new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),
|
|
411
|
-
new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),
|
|
412
|
-
new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),
|
|
413
|
-
new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),
|
|
414
|
-
]);
|
|
415
|
-
case ODataMetadata.TAG_ENTITY_SET:
|
|
416
|
-
return this.getObjects(element, field.name, [
|
|
417
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
418
|
-
new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),
|
|
419
|
-
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG),
|
|
420
|
-
new Field(ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE),
|
|
421
|
-
]);
|
|
422
|
-
case ODataMetadata.TAG_SINGLETON:
|
|
423
|
-
return this.getObjects(element, field.name, [
|
|
424
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
425
|
-
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
426
|
-
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG),
|
|
427
|
-
]);
|
|
428
|
-
case ODataMetadata.TAG_FUNCTION_IMPORT:
|
|
429
|
-
return this.getObjects(element, field.name, [
|
|
430
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
431
|
-
new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),
|
|
432
|
-
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),
|
|
433
|
-
new Field(ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE),
|
|
434
|
-
]);
|
|
435
|
-
case ODataMetadata.TAG_ACTION_IMPORT:
|
|
436
|
-
return this.getObjects(element, field.name, [
|
|
437
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
438
|
-
new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),
|
|
439
|
-
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),
|
|
440
|
-
]);
|
|
441
|
-
case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:
|
|
442
|
-
return this.getObjects(element, field.name, [
|
|
443
|
-
new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),
|
|
444
|
-
new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),
|
|
445
|
-
]);
|
|
446
|
-
case ODataMetadata.TAG_TYPE_DEFINITION:
|
|
447
|
-
return this.getObjects(element, field.name, [
|
|
448
|
-
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
449
|
-
new Field(ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE),
|
|
450
|
-
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
451
|
-
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
452
|
-
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
453
|
-
new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),
|
|
454
|
-
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
455
|
-
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
456
|
-
]);
|
|
457
|
-
default:
|
|
458
|
-
throw new Error('Unknwon tag:' + field.name);
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
getAttributeValue(attributes, attributeName) {
|
|
462
|
-
const attribute = attributes.getNamedItem(attributeName);
|
|
463
|
-
return attribute !== null && attribute.nodeValue
|
|
464
|
-
? attribute.nodeValue
|
|
465
|
-
: undefined;
|
|
466
|
-
}
|
|
467
|
-
propertyValueToNumber(attributeValue) {
|
|
468
|
-
return attributeValue !== undefined ? Number(attributeValue) : undefined;
|
|
469
|
-
}
|
|
470
|
-
propertyValueToBoolean(attributeValue) {
|
|
471
|
-
return attributeValue !== undefined ? attributeValue === 'true' : false;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
// TAGS
|
|
475
|
-
ODataMetadata.TAG_EDMX = 'edmx:Edmx';
|
|
476
|
-
ODataMetadata.TAG_DATA_SERVICES = 'edmx:DataServices';
|
|
477
|
-
ODataMetadata.TAG_REFERENCE = 'edmx:Reference';
|
|
478
|
-
ODataMetadata.TAG_INCLUDE = 'edmx:Include';
|
|
479
|
-
ODataMetadata.TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations';
|
|
480
|
-
ODataMetadata.TAG_TERM = 'Term';
|
|
481
|
-
ODataMetadata.TAG_ANNOTATIONS = 'Annotations';
|
|
482
|
-
ODataMetadata.TAG_ANNOTATION = 'Annotation';
|
|
483
|
-
ODataMetadata.TAG_SCHEMA = 'Schema';
|
|
484
|
-
ODataMetadata.TAG_ENUM_TYPE = 'EnumType';
|
|
485
|
-
ODataMetadata.TAG_MEMBER = 'Member';
|
|
486
|
-
ODataMetadata.TAG_COMPLEX_TYPE = 'ComplexType';
|
|
487
|
-
ODataMetadata.TAG_ENTITY_TYPE = 'EntityType';
|
|
488
|
-
ODataMetadata.TAG_PROPERTY = 'Property';
|
|
489
|
-
ODataMetadata.TAG_KEY = 'Key';
|
|
490
|
-
ODataMetadata.TAG_PROPERTY_REF = 'PropertyRef';
|
|
491
|
-
ODataMetadata.TAG_NAVIGATION_PROPERTY = 'NavigationProperty';
|
|
492
|
-
ODataMetadata.TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint';
|
|
493
|
-
ODataMetadata.TAG_ON_DELETE = 'OnDelete';
|
|
494
|
-
ODataMetadata.TAG_FUNCTION = 'Function';
|
|
495
|
-
ODataMetadata.TAG_RETURN_TYPE = 'ReturnType';
|
|
496
|
-
ODataMetadata.TAG_PARAMETER = 'Parameter';
|
|
497
|
-
ODataMetadata.TAG_ACTION = 'Action';
|
|
498
|
-
ODataMetadata.TAG_ENTITY_CONTAINER = 'EntityContainer';
|
|
499
|
-
ODataMetadata.TAG_ENTITY_SET = 'EntitySet';
|
|
500
|
-
ODataMetadata.TAG_SINGLETON = 'Singleton';
|
|
501
|
-
ODataMetadata.TAG_FUNCTION_IMPORT = 'FunctionImport';
|
|
502
|
-
ODataMetadata.TAG_ACTION_IMPORT = 'ActionImport';
|
|
503
|
-
ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING = 'NavigationPropertyBinding';
|
|
504
|
-
ODataMetadata.TAG_TYPE_DEFINITION = 'TypeDefinition';
|
|
505
|
-
// ATTRIBUTES
|
|
506
|
-
ODataMetadata.ATTRIBUTE_VERSION = 'Version';
|
|
507
|
-
ODataMetadata.ATTRIBUTE_URI = 'Uri';
|
|
508
|
-
ODataMetadata.ATTRIBUTE_ALIAS = 'Alias';
|
|
509
|
-
ODataMetadata.ATTRIBUTE_NAMESPACE = 'Namespace';
|
|
510
|
-
ODataMetadata.ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace';
|
|
511
|
-
ODataMetadata.ATTRIBUTE_QUALIFIER = 'Qualifier';
|
|
512
|
-
ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace';
|
|
513
|
-
ODataMetadata.ATTRIBUTE_TERM = 'Term';
|
|
514
|
-
ODataMetadata.ATTRIBUTE_NAME = 'Name';
|
|
515
|
-
ODataMetadata.ATTRIBUTE_VALUE = 'Value';
|
|
516
|
-
ODataMetadata.ATTRIBUTE_BASE_TYPE = 'BaseType';
|
|
517
|
-
ODataMetadata.ATTRIBUTE_OPEN_TYPE = 'OpenType';
|
|
518
|
-
ODataMetadata.ATTRIBUTE_TYPE = 'Type';
|
|
519
|
-
ODataMetadata.ATTRIBUTE_NULLABLE = 'Nullable';
|
|
520
|
-
ODataMetadata.ATTRIBUTE_MAX_LENGTH = 'MaxLength';
|
|
521
|
-
ODataMetadata.ATTRIBUTE_PRECISION = 'Precision';
|
|
522
|
-
ODataMetadata.ATTRIBUTE_SCALE = 'Scale';
|
|
523
|
-
ODataMetadata.ATTRIBUTE_UNICODE = 'Unicode';
|
|
524
|
-
ODataMetadata.ATTRIBUTE_SRID = 'SRID';
|
|
525
|
-
ODataMetadata.ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue';
|
|
526
|
-
ODataMetadata.ATTRIBUTE_PARTNER = 'Partner';
|
|
527
|
-
ODataMetadata.ATTRIBUTE_PROPERTY = 'Property';
|
|
528
|
-
ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty';
|
|
529
|
-
ODataMetadata.ATTRIBUTE_HAS_STREAM = 'HasStream';
|
|
530
|
-
ODataMetadata.ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget';
|
|
531
|
-
ODataMetadata.ATTRIBUTE_IS_BOUND = 'IsBound';
|
|
532
|
-
ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath';
|
|
533
|
-
ODataMetadata.ATTRIBUTE_IS_COMPOSABLE = 'IsComposable';
|
|
534
|
-
ODataMetadata.ATTRIBUTE_ENTITY_TYPE = 'EntityType';
|
|
535
|
-
ODataMetadata.ATTRIBUTE_PATH = 'Path';
|
|
536
|
-
ODataMetadata.ATTRIBUTE_TARGET = 'Target';
|
|
537
|
-
ODataMetadata.ATTRIBUTE_FUNCTION = 'Function';
|
|
538
|
-
ODataMetadata.ATTRIBUTE_ACTION = 'Action';
|
|
539
|
-
ODataMetadata.ATTRIBUTE_ENTITY_SET = 'EntitySet';
|
|
540
|
-
ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT = 'IncludeInServiceDocument';
|
|
541
|
-
ODataMetadata.ATTRIBUTE_ABSTRACT = 'Abstract';
|
|
542
|
-
ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType';
|
|
543
|
-
ODataMetadata.ATTRIBUTE_IS_FLAGS = 'IsFlags';
|
|
544
|
-
ODataMetadata.ATTRIBUTE_EXTENDS = 'Extends';
|
|
545
|
-
ODataMetadata.ATTRIBUTE_BASE_TERM = 'BaseTerm';
|
|
546
|
-
ODataMetadata.ATTRIBUTE_APPLIES_TO = 'AppliesTo';
|
|
547
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc3BvbnNlcy9tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEdBQ2YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixRQUFRLEdBQ1QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxPQUFPLEVBQ1AsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUNMLFdBQVcsRUFDWCxzQkFBc0IsRUFDdEIsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osWUFBWSxFQUNaLHlCQUF5QixHQUMxQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFB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LEdBQUcsU0FBUyxDQUFDO0FBQzlCLGlDQUFtQixHQUFHLFVBQVUsQ0FBQztBQUNqQyxrQ0FBb0IsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDc2RsQWN0aW9uLFxuICBDc2RsQWN0aW9uSW1wb3J0LFxuICBDc2RsRnVuY3Rpb24sXG4gIENzZGxGdW5jdGlvbkltcG9ydCxcbiAgQ3NkbFBhcmFtZXRlcixcbiAgQ3NkbFJldHVyblR5cGUsXG59IGZyb20gJy4vY3NkbC9jc2RsLWZ1bmN0aW9uLWFjdGlvbic7XG5pbXBvcnQge1xuICBDc2RsQW5ub3RhdGlvbixcbiAgQ3NkbEFubm90YXRpb25zLFxuICBDc2RsVGVybSxcbn0gZnJvbSAnLi9jc2RsL2NzZGwtYW5ub3RhdGlvbic7XG5pbXBvcnQge1xuICBDc2RsQ29tcGxleFR5cGUsXG4gIENzZGxFbnRpdHlUeXBlLFxuICBDc2RsS2V5LFxuICBDc2RsUHJvcGVydHlSZWYsXG59IGZyb20gJy4vY3NkbC9jc2RsLXN0cnVjdHVyZWQtdHlwZSc7XG5pbXBvcnQgeyBDc2RsRW51bU1lbWJlciwgQ3NkbEVudW1UeXBlIH0gZnJvbSAnLi9jc2RsL2NzZGwtZW51bS10eXBlJztcbmltcG9ydCB7XG4gIENzZGxJbmNsdWRlLFxuICBDc2RsSW5jbHVkZUFubm90YXRpb25zLFxuICBDc2RsUmVmZXJlbmNlLFxufSBmcm9tICcuL2NzZGwvY3NkbC1yZWZlcmVuY2UnO1xuaW1wb3J0IHtcbiAgQ3NkbE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgQ3NkbE9uRGVsZXRlLFxuICBDc2RsUHJvcGVydHksXG4gIENzZGxSZWZlcmVudGlhbENvbnN0cmFpbnQsXG59IGZyb20gJy4vY3NkbC9jc2RsLXN0cnVjdHVyYWwtcHJvcGVydHknO1xuXG5pbXBvcnQgeyBDc2RsRW50aXR5Q29udGFpbmVyIH0gZnJvbSAnLi9jc2RsL2NzZGwtZW50aXR5LWNvbnRhaW5lcic7XG5pbXBvcnQgeyBDc2RsRW50aXR5U2V0IH0gZnJvbSAnLi9jc2RsL2NzZGwtZW50aXR5LXNldCc7XG5pbXBvcnQgeyBDc2RsTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyB9IGZyb20gJy4vY3NkbC9jc2RsLW5hdmlnYXRpb24tcHJvcGVydHktYmluZGluZyc7XG5pbXBvcnQgeyBDc2RsU2NoZW1hIH0gZnJvbSAnLi9jc2RsL2NzZGwtc2NoZW1hJztcbmltcG9ydCB7IENzZGxTaW5nbGV0b24gfSBmcm9tICcuL2NzZGwvY3NkbC1zaW5nbGV0b24nO1xuaW1wb3J0IHsgQ3NkbFR5cGVEZWZpbml0aW9uIH0gZnJvbSAnLi9jc2RsL2NzZGwtdHlwZS1kZWZpbml0aW9uJztcbmltcG9ydCB7IFZFUlNJT05fNF8wIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuZW51bSBGaWVsZFR5cGUge1xuICBBVFRSSUJVVEUsXG4gIFRBRyxcbn1cblxuY2xhc3MgRmllbGQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgZmllbGRUeXBlOiBGaWVsZFR5cGUpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU1ldGFkYXRhIHtcbiAgLy8gVEFHU1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRURNWCA9ICdlZG14OkVkbXgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfREFUQV9TRVJWSUNFUyA9ICdlZG14OkRhdGFTZXJ2aWNlcyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19SRUZFUkVOQ0UgPSAnZWRteDpSZWZlcmVuY2UnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfSU5DTFVERSA9ICdlZG14OkluY2x1ZGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfSU5DTFVERV9BTk5PVEFUSU9OUyA9ICdlZG14OkluY2x1ZGVBbm5vdGF0aW9ucyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19URVJNID0gJ1Rlcm0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQU5OT1RBVElPTlMgPSAnQW5ub3RhdGlvbnMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQU5OT1RBVElPTiA9ICdBbm5vdGF0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1NDSEVNQSA9ICdTY2hlbWEnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRU5VTV9UWVBFID0gJ0VudW1UeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX01FTUJFUiA9ICdNZW1iZXInO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQ09NUExFWF9UWVBFID0gJ0NvbXBsZXhUeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0VOVElUWV9UWVBFID0gJ0VudGl0eVR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUFJPUEVSVFkgPSAnUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfS0VZID0gJ0tleSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19QUk9QRVJUWV9SRUYgPSAnUHJvcGVydHlSZWYnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfTkFWSUdBVElPTl9QUk9QRVJUWSA9ICdOYXZpZ2F0aW9uUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUkVGRVJFTlRJQUxfQ09OU1RSQUlOVCA9ICdSZWZlcmVudGlhbENvbnN0cmFpbnQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfT05fREVMRVRFID0gJ09uRGVsZXRlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0ZVTkNUSU9OID0gJ0Z1bmN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1JFVFVSTl9UWVBFID0gJ1JldHVyblR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUEFSQU1FVEVSID0gJ1BhcmFtZXRlcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19BQ1RJT04gPSAnQWN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0VOVElUWV9DT05UQUlORVIgPSAnRW50aXR5Q29udGFpbmVyJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0VOVElUWV9TRVQgPSAnRW50aXR5U2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1NJTkdMRVRPTiA9ICdTaW5nbGV0b24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRlVOQ1RJT05fSU1QT1JUID0gJ0Z1bmN0aW9uSW1wb3J0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0FDVElPTl9JTVBPUlQgPSAnQWN0aW9uSW1wb3J0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX05BVklHQVRJT05fUFJPUEVSVFlfQklORElORyA9XG4gICAgJ05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfVFlQRV9ERUZJTklUSU9OID0gJ1R5cGVEZWZpbml0aW9uJztcblxuICAvLyBBVFRSSUJVVEVTXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9WRVJTSU9OID0gJ1ZlcnNpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVVJJID0gJ1VyaSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9BTElBUyA9ICdBbGlhcyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9OQU1FU1BBQ0UgPSAnTmFtZXNwYWNlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1RFUk1fTkFNRVNQQUNFID0gJ1Rlcm1OYW1lc3BhY2UnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUVVBTElGSUVSID0gJ1F1YWxpZmllcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9UQVJHRVRfTkFNRVNQQUNFID0gJ1RhcmdldE5hbWVzcGFjZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9URVJNID0gJ1Rlcm0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfTkFNRSA9ICdOYW1lJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1ZBTFVFID0gJ1ZhbHVlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0JBU0VfVFlQRSA9ICdCYXNlVHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9PUEVOX1RZUEUgPSAnT3BlblR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVFlQRSA9ICdUeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX05VTExBQkxFID0gJ051bGxhYmxlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX01BWF9MRU5HVEggPSAnTWF4TGVuZ3RoJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1BSRUNJU0lPTiA9ICdQcmVjaXNpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfU0NBTEUgPSAnU2NhbGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVU5JQ09ERSA9ICdVbmljb2RlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1NSSUQgPSAnU1JJRCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFID0gJ0RlZmF1bHRWYWx1ZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9QQVJUTkVSID0gJ1BhcnRuZXInO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUFJPUEVSVFkgPSAnUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUkVGRVJFTkNFRF9QUk9QRVJUWSA9ICdSZWZlcmVuY2VkUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSEFTX1NUUkVBTSA9ICdIYXNTdHJlYW0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfQ09OVEFJTlNfVEFSR0VUID0gJ0NvbnRhaW5zVGFyZ2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0lTX0JPVU5EID0gJ0lzQm91bmQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfRU5USVRZX1NFVF9QQVRIID0gJ0VudGl0eVNldFBhdGgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSVNfQ09NUE9TQUJMRSA9ICdJc0NvbXBvc2FibGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfRU5USVRZX1RZUEUgPSAnRW50aXR5VHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9QQVRIID0gJ1BhdGgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVEFSR0VUID0gJ1RhcmdldCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9GVU5DVElPTiA9ICdGdW5jdGlvbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9BQ1RJT04gPSAnQWN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0VOVElUWV9TRVQgPSAnRW50aXR5U2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0lOQ0xVREVfSU5fU0VSVklDRV9ET0NVTUVOVCA9XG4gICAgJ0luY2x1ZGVJblNlcnZpY2VEb2N1bWVudCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9BQlNUUkFDVCA9ICdBYnN0cmFjdCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9VTkRFUkxZSU5HX1RZUEUgPSAnVW5kZXJseWluZ1R5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSVNfRkxBR1MgPSAnSXNGbGFncyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9FWFRFTkRTID0gJ0V4dGVuZHMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfQkFTRV9URVJNID0gJ0Jhc2VUZXJtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0FQUExJRVNfVE8gPSAnQXBwbGllc1RvJztcblxuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVmZXJlbmNlczogQ3NkbFJlZmVyZW5jZVtdO1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hczogQ3NkbFNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKHhtbDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlcjogRE9NUGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgY29uc3QgZG9jdW1lbnQ6IERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4bWwsICd0ZXh0L3htbCcpO1xuXG4gICAgICB0aGlzLmNoZWNrVmVyc2lvbihkb2N1bWVudCk7XG5cbiAgICAgIHRoaXMudmVyc2lvbiA9IHRoaXMuZ2V0RmllbGRWYWx1ZUJ5QXR0cmlidXRlKFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVkVSU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRyaWJ1dGVzXG4gICAgICApO1xuXG4gICAgICB0aGlzLnJlZmVyZW5jZXMgPSB0aGlzLmdldE9iamVjdHMoXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgT0RhdGFNZXRhZGF0YS5UQUdfUkVGRVJFTkNFLFxuICAgICAgICBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VSSSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0lOQ0xVREUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19JTkNMVURFX0FOTk9UQVRJT05TLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGRhdGFTZXJ2aWNlczogRWxlbWVudCA9XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcbiAgICAgICAgICBPRGF0YU1ldGFkYXRhLlRBR19EQVRBX1NFUlZJQ0VTXG4gICAgICAgIClbMF07XG4gICAgICB0aGlzLnNjaGVtYXMgPSB0aGlzLmdldE9iamVjdHMoZGF0YVNlcnZpY2VzLCBPRGF0YU1ldGFkYXRhLlRBR19TQ0hFTUEsIFtcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUVTUEFDRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BTElBUywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19FTlVNX1RZUEUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQ09NUExFWF9UWVBFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9UWVBFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FDVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfQ09OVEFJTkVSLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1RZUEVfREVGSU5JVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19URVJNLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT05TLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIG1ldGFkYXRhLCAnICsgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZlcnNpb24oZG9jdW1lbnQ6IERvY3VtZW50KSB7XG4gICAgLy8gY2hlY2sgdmVyc2lvblxuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPRGF0YSB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1ldGFkYXRhJyk7XG4gICAgfVxuICAgIGNvbnN0IGF0dHI6IEF0dHIgfCBudWxsID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ1ZlcnNpb24nKTtcbiAgICBpZiAoYXR0ciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPRGF0YSB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1ldGFkYXRhJyk7XG4gICAgfVxuICAgIGNvbnN0IG9kYXRhVmVyc2lvbiA9IGF0dHI/Lm5vZGVWYWx1ZTtcbiAgICBpZiAob2RhdGFWZXJzaW9uICE9PSBWRVJTSU9OXzRfMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPRGF0YSB2ZXJzaW9uIFwiJyArIG9kYXRhVmVyc2lvbiArICdcIiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9iamVjdHMoXG4gICAgcGFyZW50RWxlbWVudDogRWxlbWVudCxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBmaWVsZE5hbWVzOiBGaWVsZFtdXG4gICk6IGFueVtdIHtcbiAgICBsZXQgb2JqZWN0czogYW55W10gPSBbXTtcblxuICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MQ29sbGVjdGlvbiA9IHBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNoaWxkcmVuLml0ZW0oaW5kZXgpO1xuXG4gICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlTmFtZSAhPT0gdGFnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBOYW1lZE5vZGVNYXAgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCBmaWVsZFZhbHVlczogYW55W10gPSB0aGlzLmdldEZpZWxkVmFsdWVzKFxuICAgICAgICBmaWVsZE5hbWVzLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19SRUZFUkVOQ0U6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxSZWZlcmVuY2UoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19JTkNMVURFOlxuICAgICAgICAgIG9iamVjdHMucHVzaChuZXcgQ3NkbEluY2x1ZGUoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfSU5DTFVERV9BTk5PVEFUSU9OUzpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEluY2x1ZGVBbm5vdGF0aW9ucyhcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfVEVSTTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFRlcm0oXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzZdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s3XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbOF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzldXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OUzpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEFubm90YXRpb25zKGZpZWxkVmFsdWVzWzBdLCBmaWVsZFZhbHVlc1sxXSwgZmllbGRWYWx1ZXNbMl0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OOlxuICAgICAgICAgIG9iamVjdHMucHVzaChuZXcgQ3NkbEFubm90YXRpb24oZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfU0NIRU1BOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsU2NoZW1hKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbN10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzhdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s5XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMTBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxMV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVU1fVFlQRTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEVudW1UeXBlKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQ09NUExFWF9UWVBFOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsQ29tcGxleFR5cGUoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9UWVBFOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRW50aXR5VHlwZShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19GVU5DVElPTjpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEZ1bmN0aW9uKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19NRU1CRVI6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKG5ldyBDc2RsRW51bU1lbWJlcihmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19QUk9QRVJUWTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFByb3BlcnR5KFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbN10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzhdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19QUk9QRVJUWV9SRUY6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKG5ldyBDc2RsUHJvcGVydHlSZWYoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbE5hdmlnYXRpb25Qcm9wZXJ0eShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1JFRkVSRU5USUFMX0NPTlNUUkFJTlQ6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxSZWZlcmVudGlhbENvbnN0cmFpbnQoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUEFSQU1FVEVSOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsUGFyYW1ldGVyKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsQWN0aW9uKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9TRVQ6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxFbnRpdHlTZXQoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19TSU5HTEVUT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxTaW5nbGV0b24oZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdLCBmaWVsZFZhbHVlc1syXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OX0lNUE9SVDpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEZ1bmN0aW9uSW1wb3J0KFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OX0lNUE9SVDpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEFjdGlvbkltcG9ydChmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0sIGZpZWxkVmFsdWVzWzJdKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWV9CSU5ESU5HOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19UWVBFX0RFRklOSVRJT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxUeXBlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua253b24gdGFnOicgKyB0YWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3RzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9iamVjdChcbiAgICBwYXJlbnRFbGVtZW50OiBFbGVtZW50LFxuICAgIHRhZzogc3RyaW5nLFxuICAgIGZpZWxkTmFtZXM6IEZpZWxkW11cbiAgKTogYW55IHtcbiAgICBsZXQgb2JqZWN0OiBhbnk7XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTENvbGxlY3Rpb24gPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgIGxldCBlbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uaXRlbShpbmRleCk/Lm5vZGVOYW1lID09PSB0YWcpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvbmUgJyArIHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudCA9IGNoaWxkcmVuLml0ZW0oaW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYXR0cmlidXRlczogTmFtZWROb2RlTWFwID0gZWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZXM6IGFueVtdID0gdGhpcy5nZXRGaWVsZFZhbHVlcyhcbiAgICAgICAgZmllbGROYW1lcyxcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfS0VZOlxuICAgICAgICAgIG9iamVjdCA9IG5ldyBDc2RsS2V5KGZpZWxkVmFsdWVzWzBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19SRVRVUk5fVFlQRTpcbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ3NkbFJldHVyblR5cGUoXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9DT05UQUlORVI6XG4gICAgICAgICAgb2JqZWN0ID0gbmV3IENzZGxFbnRpdHlDb250YWluZXIoXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX09OX0RFTEVURTpcbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ3NkbE9uRGVsZXRlKGZpZWxkVmFsdWVzWzBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua253b24gdGFnOicgKyB0YWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmllbGRWYWx1ZXMoXG4gICAgZmllbGRzOiBGaWVsZFtdLFxuICAgIGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCxcbiAgICBlbGVtZW50OiBFbGVtZW50XG4gICk6IGFueVtdIHtcbiAgICBjb25zdCBmaWVsZFZhbHVlczogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVEFHKSB7XG4gICAgICAgIGZpZWxkVmFsdWVzLnB1c2godGhpcy5nZXRGaWVsZFZhbHVlQnlUYWcoZmllbGQsIGVsZW1lbnQpKTtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQVRUUklCVVRFKSB7XG4gICAgICAgIGZpZWxkVmFsdWVzLnB1c2godGhpcy5nZXRGaWVsZFZhbHVlQnlBdHRyaWJ1dGUoZmllbGQsIGF0dHJpYnV0ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmaWVsZCB0eXBlOiAnICsgZmllbGQuZmllbGRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRWYWx1ZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmllbGRWYWx1ZUJ5QXR0cmlidXRlKFxuICAgIGZpZWxkOiBGaWVsZCxcbiAgICBhdHRyaWJ1dGVzOiBOYW1lZE5vZGVNYXBcbiAgKTogYW55IHtcbiAgICBzd2l0Y2ggKGZpZWxkLm5hbWUpIHtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVkVSU0lPTjpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVVJJOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FU1BBQ0U6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FMSUFTOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9URVJNX05BTUVTUEFDRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVEVSTTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUVVBTElGSUVSOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UQVJHRVRfTkFNRVNQQUNFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TUklEOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QQVJUTkVSOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUk9QRVJUWTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUkVGRVJFTkNFRF9QUk9QRVJUWTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQkFTRV9UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FTlRJVFlfU0VUX1BBVEg6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QQVRIOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UQVJHRVQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0ZVTkNUSU9OOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BQ1RJT046XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VOREVSTFlJTkdfVFlQRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRVhURU5EUzpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQkFTRV9URVJNOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BUFBMSUVTX1RPOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVzLCBmaWVsZC5uYW1lKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTlVMTEFCTEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VOSUNPREU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX09QRU5fVFlQRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSEFTX1NUUkVBTTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQk9VTkQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lTX0NPTVBPU0FCTEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0NPTlRBSU5TX1RBUkdFVDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSU5DTFVERV9JTl9TRVJWSUNFX0RPQ1VNRU5UOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BQlNUUkFDVDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfRkxBR1M6XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWVUb0Jvb2xlYW4oXG4gICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVzLCBmaWVsZC5uYW1lKVxuICAgICAgICApO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9WQUxVRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJFQ0lTSU9OOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TQ0FMRTpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHlWYWx1ZVRvTnVtYmVyKFxuICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlcywgZmllbGQubmFtZSlcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbndvbiBhdHRyaWJ1dGU6JyArIGZpZWxkLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWVsZFZhbHVlQnlUYWcoZmllbGQ6IEZpZWxkLCBlbGVtZW50OiBFbGVtZW50KTogYW55W10ge1xuICAgIHN3aXRjaCAoZmllbGQubmFtZSkge1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19JTkNMVURFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRVNQQUNFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUxJQVMsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfSU5DTFVERV9BTk5PVEFUSU9OUzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVEVSTV9OQU1FU1BBQ0UsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUVVBTElGSUVSLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UQVJHRVRfTkFNRVNQQUNFLFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURVxuICAgICAgICAgICksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19URVJNOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RFUk0sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQVBQTElFU19UTywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05VTExBQkxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU1JJRCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OUzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RFUk0sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5VTV9UWVBFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX01FTUJFUiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5ERVJMWUlOR19UWVBFLFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURVxuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lTX0ZMQUdTLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0NPTVBMRVhfVFlQRTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19QUk9QRVJUWSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX05BVklHQVRJT05fUFJPUEVSVFksIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9PUEVOX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BQlNUUkFDVCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfVFlQRTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19LRVksIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19QUk9QRVJUWSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX05BVklHQVRJT05fUFJPUEVSVFksIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9PUEVOX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9IQVNfU1RSRUFNLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUJTVFJBQ1QsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRlVOQ1RJT046XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUkVUVVJOX1RZUEUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19CT1VORCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1NFVF9QQVRILFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURVxuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lTX0NPTVBPU0FCTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19QQVJBTUVURVIsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfTUVNQkVSOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1ZBTFVFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX01BWF9MRU5HVEgsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUkVDSVNJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TQ0FMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VOSUNPREUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TUklELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfREVGQVVMVF9WQUxVRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19LRVk6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdChlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZX1JFRiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19QUk9QRVJUWV9SRUY6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUxJQVMsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTlVMTEFCTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QQVJUTkVSLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9DT05UQUlOU19UQVJHRVQsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUkVGRVJFTlRJQUxfQ09OU1RSQUlOVCwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX09OX0RFTEVURSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19SRUZFUkVOVElBTF9DT05TVFJBSU5UOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJPUEVSVFksIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1JFRkVSRU5DRURfUFJPUEVSVFksXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX09OX0RFTEVURTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0KGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUNUSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1BBUkFNRVRFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTlVMTEFCTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9NQVhfTEVOR1RILCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJFQ0lTSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU0NBTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TUklELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1JFVFVSTl9UWVBFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3QoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTlVMTEFCTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9NQVhfTEVOR1RILCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJFQ0lTSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU0NBTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TUklELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FDVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19SRVRVUk5fVFlQRSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lTX0JPVU5ELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FTlRJVFlfU0VUX1BBVEgsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUEFSQU1FVEVSLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9DT05UQUlORVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdChlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FWFRFTkRTLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX1NFVCwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1NJTkdMRVRPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OX0lNUE9SVCwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FDVElPTl9JTVBPUlQsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX1NFVDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FTlRJVFlfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWV9CSU5ESU5HLFxuICAgICAgICAgICAgRmllbGRUeXBlLlRBR1xuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSU5DTFVERV9JTl9TRVJWSUNFX0RPQ1VNRU5ULFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURVxuICAgICAgICAgICksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19TSU5HTEVUT046XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWV9CSU5ESU5HLFxuICAgICAgICAgICAgRmllbGRUeXBlLlRBR1xuICAgICAgICAgICksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19GVU5DVElPTl9JTVBPUlQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRlVOQ1RJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FTlRJVFlfU0VULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JTkNMVURFX0lOX1NFUlZJQ0VfRE9DVU1FTlQsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FDVElPTl9JTVBPUlQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUNUSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1NFVCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkc6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QQVRILCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVEFSR0VULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1RZUEVfREVGSU5JVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VOREVSTFlJTkdfVFlQRSxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEVcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9NQVhfTEVOR1RILCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJFQ0lTSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU0NBTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9VTklDT0RFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU1JJRCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBdKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbndvbiB0YWc6JyArIGZpZWxkLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVzOiBOYW1lZE5vZGVNYXAsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGF0dHJpYnV0ZTogQXR0ciB8IG51bGwgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShhdHRyaWJ1dGVOYW1lKTtcbiAgICByZXR1cm4gYXR0cmlidXRlICE9PSBudWxsICYmIGF0dHJpYnV0ZS5ub2RlVmFsdWVcbiAgICAgID8gYXR0cmlidXRlLm5vZGVWYWx1ZVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvcGVydHlWYWx1ZVRvTnVtYmVyKGF0dHJpYnV0ZVZhbHVlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoYXR0cmlidXRlVmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWVUb0Jvb2xlYW4oYXR0cmlidXRlVmFsdWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGF0dHJpYnV0ZVZhbHVlID09PSAndHJ1ZScgOiBmYWxzZTtcbiAgfVxufVxuIl19
|