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