ng2-rest 13.2.4 → 13.2.6

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.
Files changed (125) hide show
  1. package/README.md +135 -135
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/README.md +24 -24
  4. package/browser/esm2020/lib/content-type.mjs +12 -12
  5. package/browser/esm2020/lib/cookie.mjs +28 -28
  6. package/browser/esm2020/lib/helpers.mjs +23 -23
  7. package/browser/esm2020/lib/index.mjs +12 -12
  8. package/browser/esm2020/lib/mapping.mjs +238 -238
  9. package/browser/esm2020/lib/models.mjs +160 -165
  10. package/browser/esm2020/lib/other/simple-resource.mjs +116 -116
  11. package/browser/esm2020/lib/params.mjs +278 -278
  12. package/browser/esm2020/lib/request-cache.mjs +100 -100
  13. package/browser/esm2020/lib/resource.service.mjs +213 -213
  14. package/browser/esm2020/lib/rest-headers.mjs +128 -128
  15. package/browser/esm2020/lib/rest-request.mjs +321 -321
  16. package/browser/esm2020/lib/rest.class.mjs +115 -115
  17. package/browser/esm2020/ng2-rest.mjs +4 -4
  18. package/browser/esm2020/public-api.mjs +1 -1
  19. package/browser/fesm2015/ng2-rest.mjs +1677 -1683
  20. package/browser/fesm2015/ng2-rest.mjs.map +1 -1
  21. package/browser/fesm2020/ng2-rest.mjs +1675 -1681
  22. package/browser/fesm2020/ng2-rest.mjs.map +1 -1
  23. package/browser/lib/content-type.d.ts +4 -4
  24. package/browser/lib/cookie.d.ts +7 -7
  25. package/browser/lib/helpers.d.ts +10 -10
  26. package/browser/lib/index.d.ts +9 -9
  27. package/browser/lib/mapping.d.ts +12 -12
  28. package/browser/lib/models.d.ts +157 -157
  29. package/browser/lib/other/simple-resource.d.ts +29 -29
  30. package/browser/lib/params.d.ts +23 -23
  31. package/browser/lib/request-cache.d.ts +17 -17
  32. package/browser/lib/resource.service.d.ts +43 -43
  33. package/browser/lib/rest-headers.d.ts +57 -57
  34. package/browser/lib/rest-request.d.ts +21 -21
  35. package/browser/lib/rest.class.d.ts +36 -36
  36. package/browser/ng2-rest.d.ts +4 -4
  37. package/client/README.md +24 -24
  38. package/client/esm2020/lib/content-type.mjs +12 -12
  39. package/client/esm2020/lib/cookie.mjs +28 -28
  40. package/client/esm2020/lib/helpers.mjs +23 -23
  41. package/client/esm2020/lib/index.mjs +12 -12
  42. package/client/esm2020/lib/mapping.mjs +238 -238
  43. package/client/esm2020/lib/models.mjs +160 -165
  44. package/client/esm2020/lib/other/simple-resource.mjs +116 -116
  45. package/client/esm2020/lib/params.mjs +278 -278
  46. package/client/esm2020/lib/request-cache.mjs +100 -100
  47. package/client/esm2020/lib/resource.service.mjs +213 -213
  48. package/client/esm2020/lib/rest-headers.mjs +128 -128
  49. package/client/esm2020/lib/rest-request.mjs +321 -321
  50. package/client/esm2020/lib/rest.class.mjs +115 -115
  51. package/client/esm2020/ng2-rest.mjs +4 -4
  52. package/client/esm2020/public-api.mjs +1 -1
  53. package/client/fesm2015/ng2-rest.mjs +1677 -1683
  54. package/client/fesm2015/ng2-rest.mjs.map +1 -1
  55. package/client/fesm2020/ng2-rest.mjs +1675 -1681
  56. package/client/fesm2020/ng2-rest.mjs.map +1 -1
  57. package/client/lib/content-type.d.ts +4 -4
  58. package/client/lib/cookie.d.ts +7 -7
  59. package/client/lib/helpers.d.ts +10 -10
  60. package/client/lib/index.d.ts +9 -9
  61. package/client/lib/mapping.d.ts +12 -12
  62. package/client/lib/models.d.ts +157 -157
  63. package/client/lib/other/simple-resource.d.ts +29 -29
  64. package/client/lib/params.d.ts +23 -23
  65. package/client/lib/request-cache.d.ts +17 -17
  66. package/client/lib/resource.service.d.ts +43 -43
  67. package/client/lib/rest-headers.d.ts +57 -57
  68. package/client/lib/rest-request.d.ts +21 -21
  69. package/client/lib/rest.class.d.ts +36 -36
  70. package/client/ng2-rest.d.ts +4 -4
  71. package/client/package.json +44 -44
  72. package/index.d.ts +1 -1
  73. package/lib/content-type.d.ts +5 -5
  74. package/lib/cookie.d.ts +8 -8
  75. package/lib/helpers.d.ts +11 -11
  76. package/lib/index.d.ts +10 -10
  77. package/lib/mapping.d.ts +13 -13
  78. package/lib/models.d.ts +158 -158
  79. package/lib/models.js +5 -12
  80. package/lib/models.js.map +1 -1
  81. package/lib/other/simple-resource.d.ts +30 -30
  82. package/lib/params.d.ts +24 -24
  83. package/lib/request-cache.d.ts +18 -18
  84. package/lib/resource.service.d.ts +44 -44
  85. package/lib/rest-headers.d.ts +58 -58
  86. package/lib/rest-request.d.ts +22 -22
  87. package/lib/rest.class.d.ts +37 -37
  88. package/package.json +5 -238
  89. package/package.json_devDependencies.json +217 -217
  90. package/package.json_tnp.json5 +50 -50
  91. package/tmp-environment.json +48 -48
  92. package/websql/README.md +24 -24
  93. package/websql/esm2020/lib/content-type.mjs +12 -12
  94. package/websql/esm2020/lib/cookie.mjs +28 -28
  95. package/websql/esm2020/lib/helpers.mjs +23 -23
  96. package/websql/esm2020/lib/index.mjs +12 -12
  97. package/websql/esm2020/lib/mapping.mjs +238 -238
  98. package/websql/esm2020/lib/models.mjs +160 -165
  99. package/websql/esm2020/lib/other/simple-resource.mjs +116 -116
  100. package/websql/esm2020/lib/params.mjs +278 -278
  101. package/websql/esm2020/lib/request-cache.mjs +100 -100
  102. package/websql/esm2020/lib/resource.service.mjs +213 -213
  103. package/websql/esm2020/lib/rest-headers.mjs +128 -128
  104. package/websql/esm2020/lib/rest-request.mjs +321 -321
  105. package/websql/esm2020/lib/rest.class.mjs +115 -115
  106. package/websql/esm2020/ng2-rest.mjs +4 -4
  107. package/websql/esm2020/public-api.mjs +1 -1
  108. package/websql/fesm2015/ng2-rest.mjs +1677 -1683
  109. package/websql/fesm2015/ng2-rest.mjs.map +1 -1
  110. package/websql/fesm2020/ng2-rest.mjs +1675 -1681
  111. package/websql/fesm2020/ng2-rest.mjs.map +1 -1
  112. package/websql/lib/content-type.d.ts +4 -4
  113. package/websql/lib/cookie.d.ts +7 -7
  114. package/websql/lib/helpers.d.ts +10 -10
  115. package/websql/lib/index.d.ts +9 -9
  116. package/websql/lib/mapping.d.ts +12 -12
  117. package/websql/lib/models.d.ts +157 -157
  118. package/websql/lib/other/simple-resource.d.ts +29 -29
  119. package/websql/lib/params.d.ts +23 -23
  120. package/websql/lib/request-cache.d.ts +17 -17
  121. package/websql/lib/resource.service.d.ts +43 -43
  122. package/websql/lib/rest-headers.d.ts +57 -57
  123. package/websql/lib/rest-request.d.ts +21 -21
  124. package/websql/lib/rest.class.d.ts +36 -36
  125. package/websql/ng2-rest.d.ts +4 -4
@@ -1,250 +1,250 @@
1
- import { _ } from 'tnp-core/browser';
2
- import { Helpers } from 'tnp-core/browser';
3
- import { walk } from 'lodash-walk-object/browser';
4
- import { CLASS, SYMBOL } from 'typescript-class-helpers/browser';
5
- export var Mapping;
6
- (function (Mapping) {
7
- function decode(json, autodetect = false) {
8
- if (_.isUndefined(json)) {
9
- return void 0;
10
- }
11
- let mapping = decodeFromDecorator(_.isArray(json) ? _.first(json) : json, !autodetect);
12
- if (autodetect) {
13
- mapping = _.merge(getMappingNaive(json), mapping);
14
- }
15
- return mapping;
16
- }
17
- Mapping.decode = decode;
18
- function encode(json, mapping, circular = []) {
19
- if (_.isString(json) || _.isBoolean(json) || _.isNumber(json)) {
20
- return json;
21
- }
22
- if (mapping['']) {
23
- const decoratorMapping = getModelsMapping(CLASS.getBy(mapping['']));
24
- mapping = _.merge(mapping, decoratorMapping);
25
- }
26
- let res;
27
- if (_.isArray(circular) && circular.length > 0) {
28
- res = setMappingCirc(json, mapping, circular);
29
- }
30
- else {
31
- res = setMapping(json, mapping);
32
- }
33
- return res;
34
- }
35
- Mapping.encode = encode;
36
- function decodeFromDecorator(json, production = false) {
37
- const entityClass = CLASS.getFromObject(json);
38
- const mappings = getModelsMapping(entityClass);
39
- return mappings;
40
- }
41
- function getModelsMapping(entity) {
42
- if (!_.isFunction(entity) || entity === Object) {
43
- return {};
44
- }
45
- const className = CLASS.getName(entity);
46
- let enityOWnMapping = _.isArray(entity[SYMBOL.MODELS_MAPPING]) ?
47
- entity[SYMBOL.MODELS_MAPPING] : [{ '': className }];
48
- let res = {};
49
- let parents = enityOWnMapping
50
- .filter(m => !_.isUndefined(m['']) && m[''] !== className)
51
- .map(m => m['']);
52
- enityOWnMapping.reverse().forEach(m => {
53
- m = _.cloneDeep(m);
54
- Object.keys(m).forEach(key => {
55
- const v = m[key];
56
- const isArr = _.isArray(v);
57
- const model = isArr ? _.first(v) : v;
58
- if (parents.includes(model)) {
59
- m[key] = isArr ? [className] : className;
60
- }
61
- });
62
- res = _.merge(res, m);
63
- });
64
- res[''] = className;
65
- return res;
66
- }
67
- Mapping.getModelsMapping = getModelsMapping;
68
- function add(o, path, mapping = {}) {
69
- if (!o || Array.isArray(o) || typeof o !== 'object')
70
- return;
71
- const objectClassName = CLASS.getName(Object.getPrototypeOf(o).constructor);
72
- const resolveClass = CLASS.getBy(objectClassName);
73
- if (!resolveClass) {
74
- if (objectClassName !== 'Object') {
75
- if (Helpers.isBrowser) {
76
- console.error(`Cannot resolve class "${objectClassName}" while mapping.`);
77
- }
78
- }
79
- return;
80
- }
81
- if (!mapping[path])
82
- mapping[path] = CLASS.getName(resolveClass);
83
- ;
84
- }
85
- /**
86
- * USE ONLY IN DEVELOPMENT
87
- * @param c
88
- * @param path
89
- * @param mapping
90
- * @param level
91
- */
92
- function getMappingNaive(c, path = '', mapping = {}, level = 0) {
93
- if (Array.isArray(c)) {
94
- c.forEach(c => getMappingNaive(c, path, mapping, level));
95
- return mapping;
96
- }
97
- if (++level === 16)
98
- return;
99
- add(c, path, mapping);
100
- for (var p in c) {
101
- if (c.hasOwnProperty(p)) {
102
- const v = c[p];
103
- if (Array.isArray(v) && v.length > 0) { // reducer as impovement
104
- v.forEach((elem, i) => {
105
- const currentPaht = [path, p].filter(c => c.trim() != '').join('.');
106
- getMappingNaive(elem, currentPaht, mapping, level);
107
- });
108
- }
109
- else if (typeof v === 'object') {
110
- const currentPaht = [path, p].filter(c => c.trim() != '').join('.');
111
- add(v, currentPaht, mapping);
112
- getMappingNaive(v, currentPaht, mapping, level);
113
- }
114
- }
115
- }
116
- return mapping;
117
- }
118
- function getMappingPathFrom(pathLodhas) {
119
- if (!_.isString(pathLodhas)) {
120
- return void 0;
121
- }
122
- const regex = /\[([0-9a-zA-Z]|\'|\")*\]/g;
123
- pathLodhas = pathLodhas
124
- .replace(regex, '')
125
- .replace('..', '.');
126
- if (pathLodhas.startsWith('.')) {
127
- pathLodhas = pathLodhas.slice(1);
128
- }
129
- return pathLodhas;
130
- }
131
- function setMappingCirc(json, mapping = {}, circular = []) {
132
- const mainClassFn = !_.isArray(json) && CLASS.getBy(mapping['']);
133
- walk.Object(json, (v, lodashPath, changeValue) => {
134
- if (!_.isUndefined(v) && !_.isNull(v)) {
135
- const mappingPath = getMappingPathFrom(lodashPath);
136
- if (!_.isUndefined(mapping[mappingPath])) {
137
- const isArray = _.isArray(mapping[mappingPath]);
138
- if (!isArray) {
139
- const className = isArray ? _.first(mapping[mappingPath]) : mapping[mappingPath];
140
- const classFN = CLASS.getBy(className);
141
- if (_.isFunction(classFN)) {
142
- changeValue(_.merge(new classFN(), v));
143
- }
144
- }
145
- }
146
- }
147
- });
148
- circular.forEach(c => {
149
- const ref = _.get(json, c.circuralTargetPath);
150
- _.set(json, c.pathToObj, ref);
151
- });
152
- if (_.isFunction(mainClassFn)) {
153
- json = _.merge(new mainClassFn(), json);
154
- }
155
- return json;
156
- }
157
- function setMapping(json, mapping = {}) {
158
- if (Array.isArray(json)) {
159
- return json.map(j => {
160
- return setMapping(j, mapping);
161
- });
162
- }
163
- const mainClassFn = CLASS.getBy(mapping['']);
164
- for (const key in json) {
165
- if (json.hasOwnProperty(key)) {
166
- if (_.isArray(json[key])) {
167
- json[key] = json[key].map(arrObj => {
168
- const objMapping = getModelsMapping(CLASS.getBy(mapping[key]));
169
- return setMapping(arrObj, objMapping);
170
- });
171
- }
172
- else if (_.isObject(json[key])) {
173
- const objMapping = getModelsMapping(CLASS.getBy(mapping[key]));
174
- json[key] = setMapping(json[key], objMapping);
175
- }
176
- }
177
- }
178
- Object
179
- .keys(mapping)
180
- .filter(key => key !== '' && key.split('.').length >= 2)
181
- .forEach(lodasPath => {
182
- const objMapping = getModelsMapping(CLASS.getBy(mapping[lodasPath]));
183
- const input = _.get(json, lodasPath);
184
- if (!_.isUndefined(input)) {
185
- const res = setMapping(input, objMapping);
186
- _.set(json, lodasPath, res);
187
- }
188
- });
189
- if (!mainClassFn) {
190
- return json;
191
- }
192
- return _.merge(new mainClassFn(), json);
193
- }
194
- function DefaultModelWithMapping(defaultModelValues, mapping) {
195
- return function (target) {
196
- if (!_.isArray(target[SYMBOL.MODELS_MAPPING])) {
197
- target[SYMBOL.MODELS_MAPPING] = [];
198
- }
199
- target[SYMBOL.MODELS_MAPPING].push({ '': CLASS.getName(target) });
200
- if (_.isObject(mapping)) {
201
- target[SYMBOL.MODELS_MAPPING] = target[SYMBOL.MODELS_MAPPING].concat(mapping);
202
- Object.keys(mapping)
203
- .forEach(key => {
204
- const v = mapping;
205
- if (_.isUndefined(v) || _.isFunction(v)) {
1
+ import { _ } from 'tnp-core/browser';
2
+ import { Helpers } from 'tnp-core/browser';
3
+ import { walk } from 'lodash-walk-object/browser';
4
+ import { CLASS, SYMBOL } from 'typescript-class-helpers/browser';
5
+ export var Mapping;
6
+ (function (Mapping) {
7
+ function decode(json, autodetect = false) {
8
+ if (_.isUndefined(json)) {
9
+ return void 0;
10
+ }
11
+ let mapping = decodeFromDecorator(_.isArray(json) ? _.first(json) : json, !autodetect);
12
+ if (autodetect) {
13
+ mapping = _.merge(getMappingNaive(json), mapping);
14
+ }
15
+ return mapping;
16
+ }
17
+ Mapping.decode = decode;
18
+ function encode(json, mapping, circular = []) {
19
+ if (_.isString(json) || _.isBoolean(json) || _.isNumber(json)) {
20
+ return json;
21
+ }
22
+ if (mapping['']) {
23
+ const decoratorMapping = getModelsMapping(CLASS.getBy(mapping['']));
24
+ mapping = _.merge(mapping, decoratorMapping);
25
+ }
26
+ let res;
27
+ if (_.isArray(circular) && circular.length > 0) {
28
+ res = setMappingCirc(json, mapping, circular);
29
+ }
30
+ else {
31
+ res = setMapping(json, mapping);
32
+ }
33
+ return res;
34
+ }
35
+ Mapping.encode = encode;
36
+ function decodeFromDecorator(json, production = false) {
37
+ const entityClass = CLASS.getFromObject(json);
38
+ const mappings = getModelsMapping(entityClass);
39
+ return mappings;
40
+ }
41
+ function getModelsMapping(entity) {
42
+ if (!_.isFunction(entity) || entity === Object) {
43
+ return {};
44
+ }
45
+ const className = CLASS.getName(entity);
46
+ let enityOWnMapping = _.isArray(entity[SYMBOL.MODELS_MAPPING]) ?
47
+ entity[SYMBOL.MODELS_MAPPING] : [{ '': className }];
48
+ let res = {};
49
+ let parents = enityOWnMapping
50
+ .filter(m => !_.isUndefined(m['']) && m[''] !== className)
51
+ .map(m => m['']);
52
+ enityOWnMapping.reverse().forEach(m => {
53
+ m = _.cloneDeep(m);
54
+ Object.keys(m).forEach(key => {
55
+ const v = m[key];
56
+ const isArr = _.isArray(v);
57
+ const model = isArr ? _.first(v) : v;
58
+ if (parents.includes(model)) {
59
+ m[key] = isArr ? [className] : className;
60
+ }
61
+ });
62
+ res = _.merge(res, m);
63
+ });
64
+ res[''] = className;
65
+ return res;
66
+ }
67
+ Mapping.getModelsMapping = getModelsMapping;
68
+ function add(o, path, mapping = {}) {
69
+ if (!o || Array.isArray(o) || typeof o !== 'object')
70
+ return;
71
+ const objectClassName = CLASS.getName(Object.getPrototypeOf(o).constructor);
72
+ const resolveClass = CLASS.getBy(objectClassName);
73
+ if (!resolveClass) {
74
+ if (objectClassName !== 'Object') {
75
+ if (Helpers.isBrowser) {
76
+ console.error(`Cannot resolve class "${objectClassName}" while mapping.`);
77
+ }
78
+ }
79
+ return;
80
+ }
81
+ if (!mapping[path])
82
+ mapping[path] = CLASS.getName(resolveClass);
83
+ ;
84
+ }
85
+ /**
86
+ * USE ONLY IN DEVELOPMENT
87
+ * @param c
88
+ * @param path
89
+ * @param mapping
90
+ * @param level
91
+ */
92
+ function getMappingNaive(c, path = '', mapping = {}, level = 0) {
93
+ if (Array.isArray(c)) {
94
+ c.forEach(c => getMappingNaive(c, path, mapping, level));
95
+ return mapping;
96
+ }
97
+ if (++level === 16)
98
+ return;
99
+ add(c, path, mapping);
100
+ for (var p in c) {
101
+ if (c.hasOwnProperty(p)) {
102
+ const v = c[p];
103
+ if (Array.isArray(v) && v.length > 0) { // reducer as impovement
104
+ v.forEach((elem, i) => {
105
+ const currentPaht = [path, p].filter(c => c.trim() != '').join('.');
106
+ getMappingNaive(elem, currentPaht, mapping, level);
107
+ });
108
+ }
109
+ else if (typeof v === 'object') {
110
+ const currentPaht = [path, p].filter(c => c.trim() != '').join('.');
111
+ add(v, currentPaht, mapping);
112
+ getMappingNaive(v, currentPaht, mapping, level);
113
+ }
114
+ }
115
+ }
116
+ return mapping;
117
+ }
118
+ function getMappingPathFrom(pathLodhas) {
119
+ if (!_.isString(pathLodhas)) {
120
+ return void 0;
121
+ }
122
+ const regex = /\[([0-9a-zA-Z]|\'|\")*\]/g;
123
+ pathLodhas = pathLodhas
124
+ .replace(regex, '')
125
+ .replace('..', '.');
126
+ if (pathLodhas.startsWith('.')) {
127
+ pathLodhas = pathLodhas.slice(1);
128
+ }
129
+ return pathLodhas;
130
+ }
131
+ function setMappingCirc(json, mapping = {}, circular = []) {
132
+ const mainClassFn = !_.isArray(json) && CLASS.getBy(mapping['']);
133
+ walk.Object(json, (v, lodashPath, changeValue) => {
134
+ if (!_.isUndefined(v) && !_.isNull(v)) {
135
+ const mappingPath = getMappingPathFrom(lodashPath);
136
+ if (!_.isUndefined(mapping[mappingPath])) {
137
+ const isArray = _.isArray(mapping[mappingPath]);
138
+ if (!isArray) {
139
+ const className = isArray ? _.first(mapping[mappingPath]) : mapping[mappingPath];
140
+ const classFN = CLASS.getBy(className);
141
+ if (_.isFunction(classFN)) {
142
+ changeValue(_.merge(new classFN(), v));
143
+ }
144
+ }
145
+ }
146
+ }
147
+ });
148
+ circular.forEach(c => {
149
+ const ref = _.get(json, c.circuralTargetPath);
150
+ _.set(json, c.pathToObj, ref);
151
+ });
152
+ if (_.isFunction(mainClassFn)) {
153
+ json = _.merge(new mainClassFn(), json);
154
+ }
155
+ return json;
156
+ }
157
+ function setMapping(json, mapping = {}) {
158
+ if (Array.isArray(json)) {
159
+ return json.map(j => {
160
+ return setMapping(j, mapping);
161
+ });
162
+ }
163
+ const mainClassFn = CLASS.getBy(mapping['']);
164
+ for (const key in json) {
165
+ if (json.hasOwnProperty(key)) {
166
+ if (_.isArray(json[key])) {
167
+ json[key] = json[key].map(arrObj => {
168
+ const objMapping = getModelsMapping(CLASS.getBy(mapping[key]));
169
+ return setMapping(arrObj, objMapping);
170
+ });
171
+ }
172
+ else if (_.isObject(json[key])) {
173
+ const objMapping = getModelsMapping(CLASS.getBy(mapping[key]));
174
+ json[key] = setMapping(json[key], objMapping);
175
+ }
176
+ }
177
+ }
178
+ Object
179
+ .keys(mapping)
180
+ .filter(key => key !== '' && key.split('.').length >= 2)
181
+ .forEach(lodasPath => {
182
+ const objMapping = getModelsMapping(CLASS.getBy(mapping[lodasPath]));
183
+ const input = _.get(json, lodasPath);
184
+ if (!_.isUndefined(input)) {
185
+ const res = setMapping(input, objMapping);
186
+ _.set(json, lodasPath, res);
187
+ }
188
+ });
189
+ if (!mainClassFn) {
190
+ return json;
191
+ }
192
+ return _.merge(new mainClassFn(), json);
193
+ }
194
+ function DefaultModelWithMapping(defaultModelValues, mapping) {
195
+ return function (target) {
196
+ if (!_.isArray(target[SYMBOL.MODELS_MAPPING])) {
197
+ target[SYMBOL.MODELS_MAPPING] = [];
198
+ }
199
+ target[SYMBOL.MODELS_MAPPING].push({ '': CLASS.getName(target) });
200
+ if (_.isObject(mapping)) {
201
+ target[SYMBOL.MODELS_MAPPING] = target[SYMBOL.MODELS_MAPPING].concat(mapping);
202
+ Object.keys(mapping)
203
+ .forEach(key => {
204
+ const v = mapping;
205
+ if (_.isUndefined(v) || _.isFunction(v)) {
206
206
  throw `
207
207
 
208
208
 
209
209
  Class: '${target.name}'
210
210
  [ng2rest] Bad mapping value for path: ${key} , please use type: <string> or [<string>]
211
- `;
212
- }
213
- });
214
- }
215
- if (_.isObject(defaultModelValues)) {
216
- const toMerge = {};
217
- const describedTarget = CLASS
218
- .describeProperites(target)
219
- .filter(prop => /^([a-zA-Z0-9]|\_|\#)+$/.test(prop));
220
- describedTarget.forEach(propDefInConstr => {
221
- if (defaultModelValues[propDefInConstr]) {
211
+ `;
212
+ }
213
+ });
214
+ }
215
+ if (_.isObject(defaultModelValues)) {
216
+ const toMerge = {};
217
+ const describedTarget = CLASS
218
+ .describeProperites(target)
219
+ .filter(prop => /^([a-zA-Z0-9]|\_|\#)+$/.test(prop));
220
+ describedTarget.forEach(propDefInConstr => {
221
+ if (defaultModelValues[propDefInConstr]) {
222
222
  console.warn(`
223
223
 
224
224
  CONFLICT: default value for property: "${propDefInConstr}"
225
225
  in class "${target.name}" already defined as typescript
226
226
  default class proprty value.
227
227
 
228
- `);
229
- }
230
- else {
231
- toMerge[propDefInConstr] = null; // TODO from toString I can't know that
232
- }
233
- });
234
- target[SYMBOL.DEFAULT_MODEL] = _.merge(toMerge, defaultModelValues);
235
- const propsToOmmit = Object
236
- .keys(target[SYMBOL.DEFAULT_MODEL])
237
- .filter(key => {
238
- const descriptor = Object
239
- .getOwnPropertyDescriptor(target.prototype, key);
240
- return !!descriptor;
241
- });
242
- _.merge(target.prototype, _.omit(target[SYMBOL.DEFAULT_MODEL], propsToOmmit));
243
- }
244
- };
245
- }
246
- Mapping.DefaultModelWithMapping = DefaultModelWithMapping;
247
- })(Mapping || (Mapping = {}));
248
- ;
249
- ({}); // @--end-of-file-for-module=ng2-rest lib/mapping.ts
228
+ `);
229
+ }
230
+ else {
231
+ toMerge[propDefInConstr] = null; // TODO from toString I can't know that
232
+ }
233
+ });
234
+ target[SYMBOL.DEFAULT_MODEL] = _.merge(toMerge, defaultModelValues);
235
+ const propsToOmmit = Object
236
+ .keys(target[SYMBOL.DEFAULT_MODEL])
237
+ .filter(key => {
238
+ const descriptor = Object
239
+ .getOwnPropertyDescriptor(target.prototype, key);
240
+ return !!descriptor;
241
+ });
242
+ _.merge(target.prototype, _.omit(target[SYMBOL.DEFAULT_MODEL], propsToOmmit));
243
+ }
244
+ };
245
+ }
246
+ Mapping.DefaultModelWithMapping = DefaultModelWithMapping;
247
+ })(Mapping || (Mapping = {}));
248
+ ;
249
+ ({}); // @--end-of-file-for-module=ng2-rest lib/mapping.ts
250
250
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9tYXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHakUsTUFBTSxLQUFXLE9BQU8sQ0FxVHZCO0FBclRELFdBQWlCLE9BQU87SUFFdEIsU0FBZ0IsTUFBTSxDQUFDLElBQVksRUFBRSxVQUFVLEdBQUcsS0FBSztRQUdyRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUMsQ0FBQztTQUNmO1FBRUQsSUFBSSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFdEYsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBZGUsY0FBTSxTQWNyQixDQUFBO0lBRUQsU0FBZ0IsTUFBTSxDQUFlLElBQVksRUFBRSxPQUFnQixFQUFFLFdBQW1CLEVBQUU7UUFDeEYsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3RCxPQUFPLElBQVcsQ0FBQztTQUNwQjtRQUVELElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2YsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUE7U0FDN0M7UUFFRCxJQUFJLEdBQVEsQ0FBQztRQUNiLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBakJlLGNBQU0sU0FpQnJCLENBQUE7SUFHRCxTQUFTLG1CQUFtQixDQUFDLElBQVksRUFBRSxVQUFVLEdBQUcsS0FBSztRQUMzRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sUUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFnQjtRQUUvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1lBQzlDLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZDLElBQUksZUFBZSxHQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksT0FBTyxHQUFHLGVBQWU7YUFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxTQUFTLENBQUM7YUFDekQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkIsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNoQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUMxQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7aUJBQzFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDRixHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDdkIsQ0FBQyxDQUFDLENBQUE7UUFDRixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBRXBCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQS9CZSx3QkFBZ0IsbUJBK0IvQixDQUFBO0lBT0QsU0FBUyxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQVksRUFBRSxVQUFtQixFQUFFO1FBQ3pELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTztRQUM1RCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUUsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLElBQUksZUFBZSxLQUFLLFFBQVEsRUFBRTtnQkFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO29CQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixlQUFlLGtCQUFrQixDQUFDLENBQUE7aUJBQzFFO2FBQ0Y7WUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBUSxDQUFDO1FBQUEsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxlQUFlLENBQUMsQ0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsVUFBbUIsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDeEQsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPO1FBQzNCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsd0JBQXdCO29CQUM5RCxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUVwQixNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNwRSxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3JELENBQUMsQ0FBQyxDQUFBO2lCQUNIO3FCQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDN0IsZUFBZSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNqRDthQUNGO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsU0FBUyxrQkFBa0IsQ0FBQyxVQUFrQjtRQUM1QyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxNQUFNLEtBQUssR0FBRywyQkFBMkIsQ0FBQztRQUMxQyxVQUFVLEdBQUcsVUFBVTthQUNwQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNsQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QixVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNqQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFZLEVBQUUsVUFBbUIsRUFBRSxFQUFFLFdBQW1CLEVBQUU7UUFFaEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO29CQUN4QyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUNaLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNqRixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO3dCQUN0QyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7NEJBRXpCLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUssT0FBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTt5QkFDaEQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUM3QyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzdCLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUssV0FBbUIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO1NBQ2pEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBSUQsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLFVBQW1CLEVBQUU7UUFHckQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQy9CLENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTdDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFJNUIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDakMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO3dCQUM5RCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7b0JBQ3ZDLENBQUMsQ0FBQyxDQUFBO2lCQUNIO3FCQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDaEMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtpQkFDOUM7YUFDRjtTQU1GO1FBRUQsTUFBTTthQUNILElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzthQUN2RCxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFFbkIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3BFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO2dCQUN6QyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUE7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVKLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFLLFdBQW1CLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBYUQsU0FBZ0IsdUJBQXVCLENBQ3JDLGtCQUFrQyxFQUNsQyxPQUFvQjtRQUVwQixPQUFPLFVBQVUsTUFBZ0I7WUFFL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNwQztZQUVBLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDeEYsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDYixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN2QyxNQUFNOzs7c0JBR0UsTUFBTSxDQUFDLElBQUk7d0NBQ08sR0FBRztDQUMxQyxDQUFDO3FCQUVXO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ047WUFHRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDbEMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixNQUFNLGVBQWUsR0FBRyxLQUFLO3FCQUMxQixrQkFBa0IsQ0FBQyxNQUFNLENBQUM7cUJBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2dCQUV0RCxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO29CQUN4QyxJQUFJLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxFQUFFO3dCQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDOztxREFFNEIsZUFBZTt3QkFDNUMsTUFBTSxDQUFDLElBQUk7OzthQUd0QixDQUFDLENBQUE7cUJBQ0g7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLHVDQUF1QztxQkFDekU7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBSUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUVwRSxNQUFNLFlBQVksR0FBRyxNQUFNO3FCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNaLE1BQU0sVUFBVSxHQUFHLE1BQU07eUJBQ3RCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ25ELE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBRy9FO1FBQ0gsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQWpFZSwrQkFBdUIsMEJBaUV0QyxDQUFBO0FBRUgsQ0FBQyxFQXJUZ0IsT0FBTyxLQUFQLE9BQU8sUUFxVHZCO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvREFBb0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDaXJjLCBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5pbXBvcnQgeyB3YWxrIH0gZnJvbSAnbG9kYXNoLXdhbGstb2JqZWN0L2Jyb3dzZXInO1xuaW1wb3J0IHsgQ0xBU1MsIFNZTUJPTCB9IGZyb20gJ3R5cGVzY3JpcHQtY2xhc3MtaGVscGVycy9icm93c2VyJztcbmltcG9ydCB7IEhlbHBlcnMgYXMgSGVscGVyc0xvZyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5leHBvcnQgbmFtZXNwYWNlIE1hcHBpbmcge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoanNvbjogT2JqZWN0LCBhdXRvZGV0ZWN0ID0gZmFsc2UpOiBNYXBwaW5nIHtcblxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoanNvbikpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgbGV0IG1hcHBpbmcgPSBkZWNvZGVGcm9tRGVjb3JhdG9yKF8uaXNBcnJheShqc29uKSA/IF8uZmlyc3QoanNvbikgOiBqc29uLCAhYXV0b2RldGVjdClcblxuICAgIGlmIChhdXRvZGV0ZWN0KSB7XG4gICAgICBtYXBwaW5nID0gXy5tZXJnZShnZXRNYXBwaW5nTmFpdmUoanNvbiksIG1hcHBpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuY29kZTxUID0gRnVuY3Rpb24+KGpzb246IE9iamVjdCwgbWFwcGluZzogTWFwcGluZywgY2lyY3VsYXI6IENpcmNbXSA9IFtdKTogVCB7XG4gICAgaWYgKF8uaXNTdHJpbmcoanNvbikgfHwgXy5pc0Jvb2xlYW4oanNvbikgfHwgXy5pc051bWJlcihqc29uKSkge1xuICAgICAgcmV0dXJuIGpzb24gYXMgYW55O1xuICAgIH1cblxuICAgIGlmIChtYXBwaW5nWycnXSkge1xuICAgICAgY29uc3QgZGVjb3JhdG9yTWFwcGluZyA9IGdldE1vZGVsc01hcHBpbmcoQ0xBU1MuZ2V0QnkobWFwcGluZ1snJ10pKTtcbiAgICAgIG1hcHBpbmcgPSBfLm1lcmdlKG1hcHBpbmcsIGRlY29yYXRvck1hcHBpbmcpXG4gICAgfVxuXG4gICAgbGV0IHJlczogYW55O1xuICAgIGlmIChfLmlzQXJyYXkoY2lyY3VsYXIpICYmIGNpcmN1bGFyLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlcyA9IHNldE1hcHBpbmdDaXJjKGpzb24sIG1hcHBpbmcsIGNpcmN1bGFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gc2V0TWFwcGluZyhqc29uLCBtYXBwaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG5cbiAgZnVuY3Rpb24gZGVjb2RlRnJvbURlY29yYXRvcihqc29uOiBPYmplY3QsIHByb2R1Y3Rpb24gPSBmYWxzZSk6IE1hcHBpbmcge1xuICAgIGNvbnN0IGVudGl0eUNsYXNzID0gQ0xBU1MuZ2V0RnJvbU9iamVjdChqc29uKTtcbiAgICBjb25zdCBtYXBwaW5ncyA9IGdldE1vZGVsc01hcHBpbmcoZW50aXR5Q2xhc3MpO1xuICAgIHJldHVybiBtYXBwaW5ncyBhcyBhbnk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxzTWFwcGluZyhlbnRpdHk6IEZ1bmN0aW9uKSB7XG5cbiAgICBpZiAoIV8uaXNGdW5jdGlvbihlbnRpdHkpIHx8IGVudGl0eSA9PT0gT2JqZWN0KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENMQVNTLmdldE5hbWUoZW50aXR5KVxuXG4gICAgbGV0IGVuaXR5T1duTWFwcGluZzogYW55W10gPSBfLmlzQXJyYXkoZW50aXR5W1NZTUJPTC5NT0RFTFNfTUFQUElOR10pID9cbiAgICAgIGVudGl0eVtTWU1CT0wuTU9ERUxTX01BUFBJTkddIDogW3sgJyc6IGNsYXNzTmFtZSB9XTtcblxuICAgIGxldCByZXMgPSB7fTtcbiAgICBsZXQgcGFyZW50cyA9IGVuaXR5T1duTWFwcGluZ1xuICAgICAgLmZpbHRlcihtID0+ICFfLmlzVW5kZWZpbmVkKG1bJyddKSAmJiBtWycnXSAhPT0gY2xhc3NOYW1lKVxuICAgICAgLm1hcChtID0+IG1bJyddKTtcblxuICAgIGVuaXR5T1duTWFwcGluZy5yZXZlcnNlKCkuZm9yRWFjaChtID0+IHtcbiAgICAgIG0gPSBfLmNsb25lRGVlcChtKTtcblxuICAgICAgT2JqZWN0LmtleXMobSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gbVtrZXldXG4gICAgICAgIGNvbnN0IGlzQXJyID0gXy5pc0FycmF5KHYpXG4gICAgICAgIGNvbnN0IG1vZGVsID0gaXNBcnIgPyBfLmZpcnN0KHYpIDogdjtcbiAgICAgICAgaWYgKHBhcmVudHMuaW5jbHVkZXMobW9kZWwpKSB7XG4gICAgICAgICAgbVtrZXldID0gaXNBcnIgPyBbY2xhc3NOYW1lXSA6IGNsYXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJlcyA9IF8ubWVyZ2UocmVzLCBtKVxuICAgIH0pXG4gICAgcmVzWycnXSA9IGNsYXNzTmFtZTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuXG4gIGV4cG9ydCB0eXBlIE1hcHBpbmc8VCA9IHt9PiA9IHtcbiAgICBbUCBpbiBrZXlvZiBUXT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZChvOiBPYmplY3QsIHBhdGg6IHN0cmluZywgbWFwcGluZzogTWFwcGluZyA9IHt9KSB7XG4gICAgaWYgKCFvIHx8IEFycmF5LmlzQXJyYXkobykgfHwgdHlwZW9mIG8gIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgY29uc3Qgb2JqZWN0Q2xhc3NOYW1lID0gQ0xBU1MuZ2V0TmFtZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobykuY29uc3RydWN0b3IpO1xuICAgIGNvbnN0IHJlc29sdmVDbGFzcyA9IENMQVNTLmdldEJ5KG9iamVjdENsYXNzTmFtZSk7XG4gICAgaWYgKCFyZXNvbHZlQ2xhc3MpIHtcbiAgICAgIGlmIChvYmplY3RDbGFzc05hbWUgIT09ICdPYmplY3QnKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzQnJvd3Nlcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCByZXNvbHZlIGNsYXNzIFwiJHtvYmplY3RDbGFzc05hbWV9XCIgd2hpbGUgbWFwcGluZy5gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbWFwcGluZ1twYXRoXSkgbWFwcGluZ1twYXRoXSA9IENMQVNTLmdldE5hbWUocmVzb2x2ZUNsYXNzKSBhcyBhbnk7O1xuICB9XG5cbiAgLyoqXG4gICAqIFVTRSBPTkxZIElOIERFVkVMT1BNRU5UXG4gICAqIEBwYXJhbSBjXG4gICAqIEBwYXJhbSBwYXRoXG4gICAqIEBwYXJhbSBtYXBwaW5nXG4gICAqIEBwYXJhbSBsZXZlbFxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TWFwcGluZ05haXZlKGM6IE9iamVjdCwgcGF0aCA9ICcnLCBtYXBwaW5nOiBNYXBwaW5nID0ge30sIGxldmVsID0gMCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICBjLmZvckVhY2goYyA9PiBnZXRNYXBwaW5nTmFpdmUoYywgcGF0aCwgbWFwcGluZywgbGV2ZWwpKVxuICAgICAgcmV0dXJuIG1hcHBpbmc7XG4gICAgfVxuICAgIGlmICgrK2xldmVsID09PSAxNikgcmV0dXJuO1xuICAgIGFkZChjLCBwYXRoLCBtYXBwaW5nKTtcbiAgICBmb3IgKHZhciBwIGluIGMpIHtcbiAgICAgIGlmIChjLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgIGNvbnN0IHYgPSBjW3BdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA+IDApIHsgLy8gcmVkdWNlciBhcyBpbXBvdmVtZW50XG4gICAgICAgICAgdi5mb3JFYWNoKChlbGVtLCBpKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWh0ID0gW3BhdGgsIHBdLmZpbHRlcihjID0+IGMudHJpbSgpICE9ICcnKS5qb2luKCcuJyk7XG4gICAgICAgICAgICBnZXRNYXBwaW5nTmFpdmUoZWxlbSwgY3VycmVudFBhaHQsIG1hcHBpbmcsIGxldmVsKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWh0ID0gW3BhdGgsIHBdLmZpbHRlcihjID0+IGMudHJpbSgpICE9ICcnKS5qb2luKCcuJyk7XG4gICAgICAgICAgYWRkKHYsIGN1cnJlbnRQYWh0LCBtYXBwaW5nKTtcbiAgICAgICAgICBnZXRNYXBwaW5nTmFpdmUodiwgY3VycmVudFBhaHQsIG1hcHBpbmcsIGxldmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1hcHBpbmdQYXRoRnJvbShwYXRoTG9kaGFzOiBzdHJpbmcpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcocGF0aExvZGhhcykpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2V4ID0gL1xcWyhbMC05YS16QS1aXXxcXCd8XFxcIikqXFxdL2c7XG4gICAgcGF0aExvZGhhcyA9IHBhdGhMb2RoYXNcbiAgICAgIC5yZXBsYWNlKHJlZ2V4LCAnJylcbiAgICAgIC5yZXBsYWNlKCcuLicsICcuJyk7XG4gICAgaWYgKHBhdGhMb2RoYXMuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICBwYXRoTG9kaGFzID0gcGF0aExvZGhhcy5zbGljZSgxKVxuICAgIH1cbiAgICByZXR1cm4gcGF0aExvZGhhcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE1hcHBpbmdDaXJjKGpzb246IE9iamVjdCwgbWFwcGluZzogTWFwcGluZyA9IHt9LCBjaXJjdWxhcjogQ2lyY1tdID0gW10pIHtcblxuICAgIGNvbnN0IG1haW5DbGFzc0ZuID0gIV8uaXNBcnJheShqc29uKSAmJiBDTEFTUy5nZXRCeShtYXBwaW5nWycnXSk7XG5cbiAgICB3YWxrLk9iamVjdChqc29uLCAodiwgbG9kYXNoUGF0aCwgY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh2KSAmJiAhXy5pc051bGwodikpIHtcbiAgICAgICAgY29uc3QgbWFwcGluZ1BhdGggPSBnZXRNYXBwaW5nUGF0aEZyb20obG9kYXNoUGF0aClcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKG1hcHBpbmdbbWFwcGluZ1BhdGhdKSkge1xuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBfLmlzQXJyYXkobWFwcGluZ1ttYXBwaW5nUGF0aF0pO1xuICAgICAgICAgIGlmICghaXNBcnJheSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gaXNBcnJheSA/IF8uZmlyc3QobWFwcGluZ1ttYXBwaW5nUGF0aF0pIDogbWFwcGluZ1ttYXBwaW5nUGF0aF07XG4gICAgICAgICAgICBjb25zdCBjbGFzc0ZOID0gQ0xBU1MuZ2V0QnkoY2xhc3NOYW1lKVxuICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjbGFzc0ZOKSkge1xuXG4gICAgICAgICAgICAgIGNoYW5nZVZhbHVlKF8ubWVyZ2UobmV3IChjbGFzc0ZOIGFzIGFueSkoKSwgdikpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIGNpcmN1bGFyLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCByZWYgPSBfLmdldChqc29uLCBjLmNpcmN1cmFsVGFyZ2V0UGF0aClcbiAgICAgIF8uc2V0KGpzb24sIGMucGF0aFRvT2JqLCByZWYpXG4gICAgfSlcblxuICAgIGlmIChfLmlzRnVuY3Rpb24obWFpbkNsYXNzRm4pKSB7XG4gICAgICBqc29uID0gXy5tZXJnZShuZXcgKG1haW5DbGFzc0ZuIGFzIGFueSkoKSwganNvbilcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG5cblxuICBmdW5jdGlvbiBzZXRNYXBwaW5nKGpzb246IE9iamVjdCwgbWFwcGluZzogTWFwcGluZyA9IHt9KSB7XG5cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICByZXR1cm4ganNvbi5tYXAoaiA9PiB7XG4gICAgICAgIHJldHVybiBzZXRNYXBwaW5nKGosIG1hcHBpbmcpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IG1haW5DbGFzc0ZuID0gQ0xBU1MuZ2V0QnkobWFwcGluZ1snJ10pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4ganNvbikge1xuICAgICAgaWYgKGpzb24uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXG5cblxuICAgICAgICBpZiAoXy5pc0FycmF5KGpzb25ba2V5XSkpIHtcbiAgICAgICAgICBqc29uW2tleV0gPSBqc29uW2tleV0ubWFwKGFyck9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmpNYXBwaW5nID0gZ2V0TW9kZWxzTWFwcGluZyhDTEFTUy5nZXRCeShtYXBwaW5nW2tleV0pKVxuICAgICAgICAgICAgcmV0dXJuIHNldE1hcHBpbmcoYXJyT2JqLCBvYmpNYXBwaW5nKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChqc29uW2tleV0pKSB7XG4gICAgICAgICAgY29uc3Qgb2JqTWFwcGluZyA9IGdldE1vZGVsc01hcHBpbmcoQ0xBU1MuZ2V0QnkobWFwcGluZ1trZXldKSlcbiAgICAgICAgICBqc29uW2tleV0gPSBzZXRNYXBwaW5nKGpzb25ba2V5XSwgb2JqTWFwcGluZylcbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuXG5cbiAgICB9XG5cbiAgICBPYmplY3RcbiAgICAgIC5rZXlzKG1hcHBpbmcpXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkgIT09ICcnICYmIGtleS5zcGxpdCgnLicpLmxlbmd0aCA+PSAyKVxuICAgICAgLmZvckVhY2gobG9kYXNQYXRoID0+IHtcblxuICAgICAgICBjb25zdCBvYmpNYXBwaW5nID0gZ2V0TW9kZWxzTWFwcGluZyhDTEFTUy5nZXRCeShtYXBwaW5nW2xvZGFzUGF0aF0pKVxuICAgICAgICBjb25zdCBpbnB1dCA9IF8uZ2V0KGpzb24sIGxvZGFzUGF0aClcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHNldE1hcHBpbmcoaW5wdXQsIG9iak1hcHBpbmcpXG4gICAgICAgICAgXy5zZXQoanNvbiwgbG9kYXNQYXRoLCByZXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICBpZiAoIW1haW5DbGFzc0ZuKSB7XG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWVyZ2UobmV3IChtYWluQ2xhc3NGbiBhcyBhbnkpKCksIGpzb24pXG4gIH1cblxuXG5cblxuICBleHBvcnQgdHlwZSBNb2RlbFZhbHVlPFQ+ID0ge1xuICAgIC8qKlxuICAgICAqIEluc2lkZSBtb2RlbHMgdHlwZXNcbiAgICAgKi9cbiAgICBbcHJvcE5hbWUgaW4ga2V5b2YgVF0/OiBUW3Byb3BOYW1lXTtcbiAgfTtcblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0TW9kZWxXaXRoTWFwcGluZzxUID0gT2JqZWN0PihcbiAgICBkZWZhdWx0TW9kZWxWYWx1ZXM/OiBNb2RlbFZhbHVlPFQ+LFxuICAgIG1hcHBpbmc/OiBNYXBwaW5nPFQ+XG4gICkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBGdW5jdGlvbikge1xuXG4gICAgICBpZiAoIV8uaXNBcnJheSh0YXJnZXRbU1lNQk9MLk1PREVMU19NQVBQSU5HXSkpIHtcbiAgICAgICAgdGFyZ2V0W1NZTUJPTC5NT0RFTFNfTUFQUElOR10gPSBbXTtcbiAgICAgIH1cblxuICAgICAgKHRhcmdldFtTWU1CT0wuTU9ERUxTX01BUFBJTkddIGFzIGFueVtdKS5wdXNoKHsgJyc6IENMQVNTLmdldE5hbWUodGFyZ2V0KSB9KTtcbiAgICAgIGlmIChfLmlzT2JqZWN0KG1hcHBpbmcpKSB7XG4gICAgICAgIHRhcmdldFtTWU1CT0wuTU9ERUxTX01BUFBJTkddID0gKHRhcmdldFtTWU1CT0wuTU9ERUxTX01BUFBJTkddIGFzIGFueVtdKS5jb25jYXQobWFwcGluZylcbiAgICAgICAgT2JqZWN0LmtleXMobWFwcGluZylcbiAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IG1hcHBpbmc7XG4gICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh2KSB8fCBfLmlzRnVuY3Rpb24odikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgYFxuXG5cbiAgICAgICAgICAgIENsYXNzOiAnJHt0YXJnZXQubmFtZX0nXG5bbmcycmVzdF0gQmFkIG1hcHBpbmcgdmFsdWUgZm9yIHBhdGg6ICR7a2V5fSAsIHBsZWFzZSB1c2UgdHlwZTogPHN0cmluZz4gb3IgWzxzdHJpbmc+XVxuYDtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChfLmlzT2JqZWN0KGRlZmF1bHRNb2RlbFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgdG9NZXJnZSA9IHt9O1xuICAgICAgICBjb25zdCBkZXNjcmliZWRUYXJnZXQgPSBDTEFTU1xuICAgICAgICAgIC5kZXNjcmliZVByb3Blcml0ZXModGFyZ2V0KVxuICAgICAgICAgIC5maWx0ZXIocHJvcCA9PiAvXihbYS16QS1aMC05XXxcXF98XFwjKSskLy50ZXN0KHByb3ApKVxuXG4gICAgICAgIGRlc2NyaWJlZFRhcmdldC5mb3JFYWNoKHByb3BEZWZJbkNvbnN0ciA9PiB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRNb2RlbFZhbHVlc1twcm9wRGVmSW5Db25zdHJdKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFxuXG4gICAgICAgICAgICBDT05GTElDVDogZGVmYXVsdCB2YWx1ZSBmb3IgcHJvcGVydHk6IFwiJHtwcm9wRGVmSW5Db25zdHJ9XCJcbiAgICAgICAgICAgIGluIGNsYXNzIFwiJHt0YXJnZXQubmFtZX1cIiBhbHJlYWR5IGRlZmluZWQgYXMgdHlwZXNjcmlwdFxuICAgICAgICAgICAgZGVmYXVsdCBjbGFzcyBwcm9wcnR5IHZhbHVlLlxuXG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b01lcmdlW3Byb3BEZWZJbkNvbnN0cl0gPSBudWxsOyAvLyBUT0RPIGZyb20gdG9TdHJpbmcgSSBjYW4ndCBrbm93IHRoYXRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cblxuICAgICAgICB0YXJnZXRbU1lNQk9MLkRFRkFVTFRfTU9ERUxdID0gXy5tZXJnZSh0b01lcmdlLCBkZWZhdWx0TW9kZWxWYWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IHByb3BzVG9PbW1pdCA9IE9iamVjdFxuICAgICAgICAgIC5rZXlzKHRhcmdldFtTWU1CT0wuREVGQVVMVF9NT0RFTF0pXG4gICAgICAgICAgLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdFxuICAgICAgICAgICAgICAuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5wcm90b3R5cGUsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4gISFkZXNjcmlwdG9yO1xuICAgICAgICAgIH0pO1xuICAgICAgICBfLm1lcmdlKHRhcmdldC5wcm90b3R5cGUsIF8ub21pdCh0YXJnZXRbU1lNQk9MLkRFRkFVTFRfTU9ERUxdLCBwcm9wc1RvT21taXQpKTtcblxuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9tYXBwaW5nLnRzIl19