@ondewo/csi-client-angular 2.3.1

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 (200) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +27 -0
  3. package/api/google/api/annotations.pb.d.ts +1 -0
  4. package/api/google/api/http.pb.d.ts +275 -0
  5. package/api/google/rpc/status.pb.d.ts +82 -0
  6. package/api/google/type/latlng.pb.d.ts +76 -0
  7. package/api/ondewo/csi/conversation.pb.d.ts +1312 -0
  8. package/api/ondewo/csi/conversation.pbconf.d.ts +6 -0
  9. package/api/ondewo/csi/conversation.pbsc.d.ts +167 -0
  10. package/api/ondewo/nlu/agent.pb.d.ts +3536 -0
  11. package/api/ondewo/nlu/agent.pbconf.d.ts +6 -0
  12. package/api/ondewo/nlu/agent.pbsc.d.ts +472 -0
  13. package/api/ondewo/nlu/aiservices.pb.d.ts +2472 -0
  14. package/api/ondewo/nlu/aiservices.pbconf.d.ts +6 -0
  15. package/api/ondewo/nlu/aiservices.pbsc.d.ts +150 -0
  16. package/api/ondewo/nlu/common.pb.d.ts +75 -0
  17. package/api/ondewo/nlu/context.pb.d.ts +756 -0
  18. package/api/ondewo/nlu/context.pbconf.d.ts +6 -0
  19. package/api/ondewo/nlu/context.pbsc.d.ts +119 -0
  20. package/api/ondewo/nlu/entity-type.pb.d.ts +2014 -0
  21. package/api/ondewo/nlu/entity-type.pbconf.d.ts +6 -0
  22. package/api/ondewo/nlu/entity-type.pbsc.d.ts +216 -0
  23. package/api/ondewo/nlu/intent.pb.d.ts +6236 -0
  24. package/api/ondewo/nlu/intent.pbconf.d.ts +6 -0
  25. package/api/ondewo/nlu/intent.pbsc.d.ts +456 -0
  26. package/api/ondewo/nlu/operation-metadata.pb.d.ts +166 -0
  27. package/api/ondewo/nlu/operations.pb.d.ts +578 -0
  28. package/api/ondewo/nlu/operations.pbconf.d.ts +6 -0
  29. package/api/ondewo/nlu/operations.pbsc.d.ts +87 -0
  30. package/api/ondewo/nlu/project-role.pb.d.ts +576 -0
  31. package/api/ondewo/nlu/project-role.pbconf.d.ts +6 -0
  32. package/api/ondewo/nlu/project-role.pbsc.d.ts +103 -0
  33. package/api/ondewo/nlu/project-statistics.pb.d.ts +295 -0
  34. package/api/ondewo/nlu/project-statistics.pbconf.d.ts +6 -0
  35. package/api/ondewo/nlu/project-statistics.pbsc.d.ts +151 -0
  36. package/api/ondewo/nlu/server-statistics.pb.d.ts +71 -0
  37. package/api/ondewo/nlu/server-statistics.pbconf.d.ts +6 -0
  38. package/api/ondewo/nlu/server-statistics.pbsc.d.ts +72 -0
  39. package/api/ondewo/nlu/session.pb.d.ts +2892 -0
  40. package/api/ondewo/nlu/session.pbconf.d.ts +6 -0
  41. package/api/ondewo/nlu/session.pbsc.d.ts +247 -0
  42. package/api/ondewo/nlu/user.pb.d.ts +1577 -0
  43. package/api/ondewo/nlu/user.pbconf.d.ts +6 -0
  44. package/api/ondewo/nlu/user.pbsc.d.ts +263 -0
  45. package/api/ondewo/nlu/utility.pb.d.ts +1814 -0
  46. package/api/ondewo/nlu/utility.pbconf.d.ts +6 -0
  47. package/api/ondewo/nlu/utility.pbsc.d.ts +150 -0
  48. package/api/ondewo/nlu/webhook.pb.d.ts +401 -0
  49. package/api/ondewo/nlu/webhook.pbconf.d.ts +6 -0
  50. package/api/ondewo/nlu/webhook.pbsc.d.ts +70 -0
  51. package/api/ondewo/s2t/speech-to-text.pb.d.ts +3710 -0
  52. package/api/ondewo/s2t/speech-to-text.pbconf.d.ts +6 -0
  53. package/api/ondewo/s2t/speech-to-text.pbsc.d.ts +263 -0
  54. package/api/ondewo/t2s/text-to-speech.pb.d.ts +3302 -0
  55. package/api/ondewo/t2s/text-to-speech.pbconf.d.ts +11 -0
  56. package/api/ondewo/t2s/text-to-speech.pbsc.d.ts +296 -0
  57. package/esm2020/api/google/api/annotations.pb.mjs +2 -0
  58. package/esm2020/api/google/api/http.pb.mjs +524 -0
  59. package/esm2020/api/google/rpc/status.pb.mjs +138 -0
  60. package/esm2020/api/google/type/latlng.pb.mjs +119 -0
  61. package/esm2020/api/ondewo/csi/conversation.pb.mjs +2232 -0
  62. package/esm2020/api/ondewo/csi/conversation.pbconf.mjs +13 -0
  63. package/esm2020/api/ondewo/csi/conversation.pbsc.mjs +315 -0
  64. package/esm2020/api/ondewo/nlu/agent.pb.mjs +6077 -0
  65. package/esm2020/api/ondewo/nlu/agent.pbconf.mjs +13 -0
  66. package/esm2020/api/ondewo/nlu/agent.pbsc.mjs +886 -0
  67. package/esm2020/api/ondewo/nlu/aiservices.pb.mjs +4371 -0
  68. package/esm2020/api/ondewo/nlu/aiservices.pbconf.mjs +13 -0
  69. package/esm2020/api/ondewo/nlu/aiservices.pbsc.mjs +284 -0
  70. package/esm2020/api/ondewo/nlu/common.pb.mjs +108 -0
  71. package/esm2020/api/ondewo/nlu/context.pb.mjs +1233 -0
  72. package/esm2020/api/ondewo/nlu/context.pbconf.mjs +13 -0
  73. package/esm2020/api/ondewo/nlu/context.pbsc.mjs +225 -0
  74. package/esm2020/api/ondewo/nlu/entity-type.pb.mjs +3466 -0
  75. package/esm2020/api/ondewo/nlu/entity-type.pbconf.mjs +13 -0
  76. package/esm2020/api/ondewo/nlu/entity-type.pbsc.mjs +406 -0
  77. package/esm2020/api/ondewo/nlu/intent.pb.mjs +10809 -0
  78. package/esm2020/api/ondewo/nlu/intent.pbconf.mjs +13 -0
  79. package/esm2020/api/ondewo/nlu/intent.pbsc.mjs +856 -0
  80. package/esm2020/api/ondewo/nlu/operation-metadata.pb.mjs +382 -0
  81. package/esm2020/api/ondewo/nlu/operations.pb.mjs +1003 -0
  82. package/esm2020/api/ondewo/nlu/operations.pbconf.mjs +13 -0
  83. package/esm2020/api/ondewo/nlu/operations.pbsc.mjs +165 -0
  84. package/esm2020/api/ondewo/nlu/project-role.pb.mjs +988 -0
  85. package/esm2020/api/ondewo/nlu/project-role.pbconf.mjs +13 -0
  86. package/esm2020/api/ondewo/nlu/project-role.pbsc.mjs +195 -0
  87. package/esm2020/api/ondewo/nlu/project-statistics.pb.mjs +460 -0
  88. package/esm2020/api/ondewo/nlu/project-statistics.pbconf.mjs +13 -0
  89. package/esm2020/api/ondewo/nlu/project-statistics.pbsc.mjs +285 -0
  90. package/esm2020/api/ondewo/nlu/server-statistics.pb.mjs +103 -0
  91. package/esm2020/api/ondewo/nlu/server-statistics.pbconf.mjs +13 -0
  92. package/esm2020/api/ondewo/nlu/server-statistics.pbsc.mjs +136 -0
  93. package/esm2020/api/ondewo/nlu/session.pb.mjs +5351 -0
  94. package/esm2020/api/ondewo/nlu/session.pbconf.mjs +13 -0
  95. package/esm2020/api/ondewo/nlu/session.pbsc.mjs +465 -0
  96. package/esm2020/api/ondewo/nlu/user.pb.mjs +2536 -0
  97. package/esm2020/api/ondewo/nlu/user.pbconf.mjs +13 -0
  98. package/esm2020/api/ondewo/nlu/user.pbsc.mjs +495 -0
  99. package/esm2020/api/ondewo/nlu/utility.pb.mjs +3302 -0
  100. package/esm2020/api/ondewo/nlu/utility.pbconf.mjs +13 -0
  101. package/esm2020/api/ondewo/nlu/utility.pbsc.mjs +284 -0
  102. package/esm2020/api/ondewo/nlu/webhook.pb.mjs +705 -0
  103. package/esm2020/api/ondewo/nlu/webhook.pbconf.mjs +13 -0
  104. package/esm2020/api/ondewo/nlu/webhook.pbsc.mjs +134 -0
  105. package/esm2020/api/ondewo/s2t/speech-to-text.pb.mjs +6452 -0
  106. package/esm2020/api/ondewo/s2t/speech-to-text.pbconf.mjs +13 -0
  107. package/esm2020/api/ondewo/s2t/speech-to-text.pbsc.mjs +495 -0
  108. package/esm2020/api/ondewo/t2s/text-to-speech.pb.mjs +5779 -0
  109. package/esm2020/api/ondewo/t2s/text-to-speech.pbconf.mjs +18 -0
  110. package/esm2020/api/ondewo/t2s/text-to-speech.pbsc.mjs +555 -0
  111. package/esm2020/ondewo-csi-client-angular.mjs +5 -0
  112. package/esm2020/public-api.mjs +55 -0
  113. package/fesm2015/ondewo-csi-client-angular.mjs +62142 -0
  114. package/fesm2015/ondewo-csi-client-angular.mjs.map +1 -0
  115. package/fesm2020/ondewo-csi-client-angular.mjs +62135 -0
  116. package/fesm2020/ondewo-csi-client-angular.mjs.map +1 -0
  117. package/index.d.ts +5 -0
  118. package/ondewo-csi-api/README.md +91 -0
  119. package/ondewo-csi-api/google/ads/googleads/README.md +21 -0
  120. package/ondewo-csi-api/google/api/README.md +5 -0
  121. package/ondewo-csi-api/google/api/servicecontrol/README.md +126 -0
  122. package/ondewo-csi-api/google/api/servicemanagement/README.md +102 -0
  123. package/ondewo-csi-api/google/appengine/README.md +12 -0
  124. package/ondewo-csi-api/google/assistant/embedded/README.md +3 -0
  125. package/ondewo-csi-api/google/cloud/functions/README.md +2 -0
  126. package/ondewo-csi-api/google/cloud/language/README.md +0 -0
  127. package/ondewo-csi-api/google/cloud/runtimeconfig/README.md +39 -0
  128. package/ondewo-csi-api/google/cloud/speech/README.md +3 -0
  129. package/ondewo-csi-api/google/container/README.md +0 -0
  130. package/ondewo-csi-api/google/datastore/README.md +0 -0
  131. package/ondewo-csi-api/google/devtools/cloudbuild/README.md +1 -0
  132. package/ondewo-csi-api/google/devtools/clouderrorreporting/README.md +1 -0
  133. package/ondewo-csi-api/google/example/library/README.md +4 -0
  134. package/ondewo-csi-api/google/firestore/README.md +0 -0
  135. package/ondewo-csi-api/google/genomics/README.md +14 -0
  136. package/ondewo-csi-api/google/iam/README.md +14 -0
  137. package/ondewo-csi-api/google/logging/README.md +3 -0
  138. package/ondewo-csi-api/google/longrunning/README.md +5 -0
  139. package/ondewo-csi-api/google/privacy/dlp/README.md +7 -0
  140. package/ondewo-csi-api/google/pubsub/v1beta2/README.md +136 -0
  141. package/ondewo-csi-api/google/rpc/README.md +5 -0
  142. package/ondewo-csi-api/google/streetview/publish/README.md +1 -0
  143. package/ondewo-csi-api/google/type/README.md +16 -0
  144. package/ondewo-csi-api/googleapis/README.md +87 -0
  145. package/ondewo-csi-api/googleapis/google/ads/googleads/README.md +21 -0
  146. package/ondewo-csi-api/googleapis/google/api/README.md +5 -0
  147. package/ondewo-csi-api/googleapis/google/api/servicecontrol/README.md +126 -0
  148. package/ondewo-csi-api/googleapis/google/api/servicemanagement/README.md +102 -0
  149. package/ondewo-csi-api/googleapis/google/appengine/README.md +12 -0
  150. package/ondewo-csi-api/googleapis/google/assistant/embedded/README.md +3 -0
  151. package/ondewo-csi-api/googleapis/google/cloud/functions/README.md +2 -0
  152. package/ondewo-csi-api/googleapis/google/cloud/language/README.md +0 -0
  153. package/ondewo-csi-api/googleapis/google/cloud/runtimeconfig/README.md +39 -0
  154. package/ondewo-csi-api/googleapis/google/cloud/speech/README.md +3 -0
  155. package/ondewo-csi-api/googleapis/google/container/README.md +0 -0
  156. package/ondewo-csi-api/googleapis/google/datastore/README.md +0 -0
  157. package/ondewo-csi-api/googleapis/google/devtools/cloudbuild/README.md +1 -0
  158. package/ondewo-csi-api/googleapis/google/devtools/clouderrorreporting/README.md +1 -0
  159. package/ondewo-csi-api/googleapis/google/example/library/README.md +4 -0
  160. package/ondewo-csi-api/googleapis/google/firestore/README.md +0 -0
  161. package/ondewo-csi-api/googleapis/google/genomics/README.md +14 -0
  162. package/ondewo-csi-api/googleapis/google/iam/README.md +14 -0
  163. package/ondewo-csi-api/googleapis/google/logging/README.md +3 -0
  164. package/ondewo-csi-api/googleapis/google/longrunning/README.md +5 -0
  165. package/ondewo-csi-api/googleapis/google/privacy/dlp/README.md +7 -0
  166. package/ondewo-csi-api/googleapis/google/pubsub/v1beta2/README.md +136 -0
  167. package/ondewo-csi-api/googleapis/google/rpc/README.md +5 -0
  168. package/ondewo-csi-api/googleapis/google/streetview/publish/README.md +1 -0
  169. package/ondewo-csi-api/googleapis/google/type/README.md +16 -0
  170. package/ondewo-csi-api/ondewo-nlu-api/README.md +117 -0
  171. package/ondewo-csi-api/ondewo-nlu-api/googleapis/README.md +87 -0
  172. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/ads/googleads/README.md +21 -0
  173. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/api/README.md +5 -0
  174. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/api/servicecontrol/README.md +126 -0
  175. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/api/servicemanagement/README.md +102 -0
  176. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/appengine/README.md +12 -0
  177. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/assistant/embedded/README.md +3 -0
  178. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/functions/README.md +2 -0
  179. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/language/README.md +0 -0
  180. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/runtimeconfig/README.md +39 -0
  181. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/speech/README.md +3 -0
  182. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/container/README.md +0 -0
  183. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/datastore/README.md +0 -0
  184. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/devtools/cloudbuild/README.md +1 -0
  185. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/devtools/clouderrorreporting/README.md +1 -0
  186. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/example/library/README.md +4 -0
  187. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/firestore/README.md +0 -0
  188. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/genomics/README.md +14 -0
  189. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/iam/README.md +14 -0
  190. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/logging/README.md +3 -0
  191. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/longrunning/README.md +5 -0
  192. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/privacy/dlp/README.md +7 -0
  193. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/pubsub/v1beta2/README.md +136 -0
  194. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/rpc/README.md +5 -0
  195. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/streetview/publish/README.md +1 -0
  196. package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/type/README.md +16 -0
  197. package/ondewo-csi-api/ondewo-s2t-api/README.md +89 -0
  198. package/ondewo-csi-api/ondewo-t2s-api/README.md +89 -0
  199. package/package.json +49 -0
  200. package/public-api.d.ts +54 -0
@@ -0,0 +1,705 @@
1
+ import { BinaryReader, BinaryWriter } from 'google-protobuf';
2
+ import * as ondewoNlu005 from '../../ondewo/nlu/context.pb';
3
+ import * as googleProtobuf009 from '@ngx-grpc/well-known-types';
4
+ import * as ondewoNlu012 from '../../ondewo/nlu/intent.pb';
5
+ import * as ondewoNlu014 from '../../ondewo/nlu/session.pb';
6
+ /**
7
+ * Message implementation for ondewo.nlu.PingRequest
8
+ */
9
+ export class PingRequest {
10
+ /**
11
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
12
+ * @param _value initial values object or instance of PingRequest to deeply clone from
13
+ */
14
+ constructor(_value) {
15
+ _value = _value || {};
16
+ this.session = _value.session;
17
+ PingRequest.refineValues(this);
18
+ }
19
+ /**
20
+ * Deserialize binary data to message
21
+ * @param instance message instance
22
+ */
23
+ static deserializeBinary(bytes) {
24
+ const instance = new PingRequest();
25
+ PingRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
26
+ return instance;
27
+ }
28
+ /**
29
+ * Check all the properties and set default protobuf values if necessary
30
+ * @param _instance message instance
31
+ */
32
+ static refineValues(_instance) {
33
+ _instance.session = _instance.session || '';
34
+ }
35
+ /**
36
+ * Deserializes / reads binary message into message instance using provided binary reader
37
+ * @param _instance message instance
38
+ * @param _reader binary reader instance
39
+ */
40
+ static deserializeBinaryFromReader(_instance, _reader) {
41
+ while (_reader.nextField()) {
42
+ if (_reader.isEndGroup())
43
+ break;
44
+ switch (_reader.getFieldNumber()) {
45
+ case 1:
46
+ _instance.session = _reader.readString();
47
+ break;
48
+ default:
49
+ _reader.skipField();
50
+ }
51
+ }
52
+ PingRequest.refineValues(_instance);
53
+ }
54
+ /**
55
+ * Serializes a message to binary format using provided binary reader
56
+ * @param _instance message instance
57
+ * @param _writer binary writer instance
58
+ */
59
+ static serializeBinaryToWriter(_instance, _writer) {
60
+ if (_instance.session) {
61
+ _writer.writeString(1, _instance.session);
62
+ }
63
+ }
64
+ get session() {
65
+ return this._session;
66
+ }
67
+ set session(value) {
68
+ this._session = value;
69
+ }
70
+ /**
71
+ * Serialize message to binary data
72
+ * @param instance message instance
73
+ */
74
+ serializeBinary() {
75
+ const writer = new BinaryWriter();
76
+ PingRequest.serializeBinaryToWriter(this, writer);
77
+ return writer.getResultBuffer();
78
+ }
79
+ /**
80
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
81
+ */
82
+ toObject() {
83
+ return {
84
+ session: this.session
85
+ };
86
+ }
87
+ /**
88
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
89
+ */
90
+ toJSON() {
91
+ return this.toObject();
92
+ }
93
+ /**
94
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
95
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
96
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
97
+ */
98
+ toProtobufJSON(
99
+ // @ts-ignore
100
+ options) {
101
+ return {
102
+ session: this.session
103
+ };
104
+ }
105
+ }
106
+ PingRequest.id = 'ondewo.nlu.PingRequest';
107
+ /**
108
+ * Message implementation for ondewo.nlu.WebhookRequest
109
+ */
110
+ export class WebhookRequest {
111
+ /**
112
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
113
+ * @param _value initial values object or instance of WebhookRequest to deeply clone from
114
+ */
115
+ constructor(_value) {
116
+ _value = _value || {};
117
+ this.session = _value.session;
118
+ this.responseId = _value.responseId;
119
+ this.queryResult = _value.queryResult
120
+ ? new ondewoNlu014.QueryResult(_value.queryResult)
121
+ : undefined;
122
+ this.originalDetectIntentRequest = _value.originalDetectIntentRequest
123
+ ? new OriginalDetectIntentRequest(_value.originalDetectIntentRequest)
124
+ : undefined;
125
+ this.headers = _value.headers
126
+ ? new googleProtobuf009.Struct(_value.headers)
127
+ : undefined;
128
+ WebhookRequest.refineValues(this);
129
+ }
130
+ /**
131
+ * Deserialize binary data to message
132
+ * @param instance message instance
133
+ */
134
+ static deserializeBinary(bytes) {
135
+ const instance = new WebhookRequest();
136
+ WebhookRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
137
+ return instance;
138
+ }
139
+ /**
140
+ * Check all the properties and set default protobuf values if necessary
141
+ * @param _instance message instance
142
+ */
143
+ static refineValues(_instance) {
144
+ _instance.session = _instance.session || '';
145
+ _instance.responseId = _instance.responseId || '';
146
+ _instance.queryResult = _instance.queryResult || undefined;
147
+ _instance.originalDetectIntentRequest =
148
+ _instance.originalDetectIntentRequest || undefined;
149
+ _instance.headers = _instance.headers || undefined;
150
+ }
151
+ /**
152
+ * Deserializes / reads binary message into message instance using provided binary reader
153
+ * @param _instance message instance
154
+ * @param _reader binary reader instance
155
+ */
156
+ static deserializeBinaryFromReader(_instance, _reader) {
157
+ while (_reader.nextField()) {
158
+ if (_reader.isEndGroup())
159
+ break;
160
+ switch (_reader.getFieldNumber()) {
161
+ case 4:
162
+ _instance.session = _reader.readString();
163
+ break;
164
+ case 1:
165
+ _instance.responseId = _reader.readString();
166
+ break;
167
+ case 2:
168
+ _instance.queryResult = new ondewoNlu014.QueryResult();
169
+ _reader.readMessage(_instance.queryResult, ondewoNlu014.QueryResult.deserializeBinaryFromReader);
170
+ break;
171
+ case 3:
172
+ _instance.originalDetectIntentRequest = new OriginalDetectIntentRequest();
173
+ _reader.readMessage(_instance.originalDetectIntentRequest, OriginalDetectIntentRequest.deserializeBinaryFromReader);
174
+ break;
175
+ case 5:
176
+ _instance.headers = new googleProtobuf009.Struct();
177
+ _reader.readMessage(_instance.headers, googleProtobuf009.Struct.deserializeBinaryFromReader);
178
+ break;
179
+ default:
180
+ _reader.skipField();
181
+ }
182
+ }
183
+ WebhookRequest.refineValues(_instance);
184
+ }
185
+ /**
186
+ * Serializes a message to binary format using provided binary reader
187
+ * @param _instance message instance
188
+ * @param _writer binary writer instance
189
+ */
190
+ static serializeBinaryToWriter(_instance, _writer) {
191
+ if (_instance.session) {
192
+ _writer.writeString(4, _instance.session);
193
+ }
194
+ if (_instance.responseId) {
195
+ _writer.writeString(1, _instance.responseId);
196
+ }
197
+ if (_instance.queryResult) {
198
+ _writer.writeMessage(2, _instance.queryResult, ondewoNlu014.QueryResult.serializeBinaryToWriter);
199
+ }
200
+ if (_instance.originalDetectIntentRequest) {
201
+ _writer.writeMessage(3, _instance.originalDetectIntentRequest, OriginalDetectIntentRequest.serializeBinaryToWriter);
202
+ }
203
+ if (_instance.headers) {
204
+ _writer.writeMessage(5, _instance.headers, googleProtobuf009.Struct.serializeBinaryToWriter);
205
+ }
206
+ }
207
+ get session() {
208
+ return this._session;
209
+ }
210
+ set session(value) {
211
+ this._session = value;
212
+ }
213
+ get responseId() {
214
+ return this._responseId;
215
+ }
216
+ set responseId(value) {
217
+ this._responseId = value;
218
+ }
219
+ get queryResult() {
220
+ return this._queryResult;
221
+ }
222
+ set queryResult(value) {
223
+ this._queryResult = value;
224
+ }
225
+ get originalDetectIntentRequest() {
226
+ return this._originalDetectIntentRequest;
227
+ }
228
+ set originalDetectIntentRequest(value) {
229
+ this._originalDetectIntentRequest = value;
230
+ }
231
+ get headers() {
232
+ return this._headers;
233
+ }
234
+ set headers(value) {
235
+ this._headers = value;
236
+ }
237
+ /**
238
+ * Serialize message to binary data
239
+ * @param instance message instance
240
+ */
241
+ serializeBinary() {
242
+ const writer = new BinaryWriter();
243
+ WebhookRequest.serializeBinaryToWriter(this, writer);
244
+ return writer.getResultBuffer();
245
+ }
246
+ /**
247
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
248
+ */
249
+ toObject() {
250
+ return {
251
+ session: this.session,
252
+ responseId: this.responseId,
253
+ queryResult: this.queryResult ? this.queryResult.toObject() : undefined,
254
+ originalDetectIntentRequest: this.originalDetectIntentRequest
255
+ ? this.originalDetectIntentRequest.toObject()
256
+ : undefined,
257
+ headers: this.headers ? this.headers.toObject() : undefined
258
+ };
259
+ }
260
+ /**
261
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
262
+ */
263
+ toJSON() {
264
+ return this.toObject();
265
+ }
266
+ /**
267
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
268
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
269
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
270
+ */
271
+ toProtobufJSON(
272
+ // @ts-ignore
273
+ options) {
274
+ return {
275
+ session: this.session,
276
+ responseId: this.responseId,
277
+ queryResult: this.queryResult
278
+ ? this.queryResult.toProtobufJSON(options)
279
+ : null,
280
+ originalDetectIntentRequest: this.originalDetectIntentRequest
281
+ ? this.originalDetectIntentRequest.toProtobufJSON(options)
282
+ : null,
283
+ headers: this.headers ? this.headers.toProtobufJSON(options) : null
284
+ };
285
+ }
286
+ }
287
+ WebhookRequest.id = 'ondewo.nlu.WebhookRequest';
288
+ /**
289
+ * Message implementation for ondewo.nlu.WebhookResponse
290
+ */
291
+ export class WebhookResponse {
292
+ /**
293
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
294
+ * @param _value initial values object or instance of WebhookResponse to deeply clone from
295
+ */
296
+ constructor(_value) {
297
+ _value = _value || {};
298
+ this.fulfillmentText = _value.fulfillmentText;
299
+ this.fulfillmentMessages = (_value.fulfillmentMessages || []).map(m => new ondewoNlu012.Intent.Message(m));
300
+ this.source = _value.source;
301
+ this.payload = _value.payload
302
+ ? new googleProtobuf009.Struct(_value.payload)
303
+ : undefined;
304
+ this.outputContexts = (_value.outputContexts || []).map(m => new ondewoNlu005.Context(m));
305
+ this.followupEventInput = _value.followupEventInput
306
+ ? new ondewoNlu014.EventInput(_value.followupEventInput)
307
+ : undefined;
308
+ WebhookResponse.refineValues(this);
309
+ }
310
+ /**
311
+ * Deserialize binary data to message
312
+ * @param instance message instance
313
+ */
314
+ static deserializeBinary(bytes) {
315
+ const instance = new WebhookResponse();
316
+ WebhookResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
317
+ return instance;
318
+ }
319
+ /**
320
+ * Check all the properties and set default protobuf values if necessary
321
+ * @param _instance message instance
322
+ */
323
+ static refineValues(_instance) {
324
+ _instance.fulfillmentText = _instance.fulfillmentText || '';
325
+ _instance.fulfillmentMessages = _instance.fulfillmentMessages || [];
326
+ _instance.source = _instance.source || '';
327
+ _instance.payload = _instance.payload || undefined;
328
+ _instance.outputContexts = _instance.outputContexts || [];
329
+ _instance.followupEventInput = _instance.followupEventInput || undefined;
330
+ }
331
+ /**
332
+ * Deserializes / reads binary message into message instance using provided binary reader
333
+ * @param _instance message instance
334
+ * @param _reader binary reader instance
335
+ */
336
+ static deserializeBinaryFromReader(_instance, _reader) {
337
+ while (_reader.nextField()) {
338
+ if (_reader.isEndGroup())
339
+ break;
340
+ switch (_reader.getFieldNumber()) {
341
+ case 1:
342
+ _instance.fulfillmentText = _reader.readString();
343
+ break;
344
+ case 2:
345
+ const messageInitializer2 = new ondewoNlu012.Intent.Message();
346
+ _reader.readMessage(messageInitializer2, ondewoNlu012.Intent.Message.deserializeBinaryFromReader);
347
+ (_instance.fulfillmentMessages =
348
+ _instance.fulfillmentMessages || []).push(messageInitializer2);
349
+ break;
350
+ case 3:
351
+ _instance.source = _reader.readString();
352
+ break;
353
+ case 4:
354
+ _instance.payload = new googleProtobuf009.Struct();
355
+ _reader.readMessage(_instance.payload, googleProtobuf009.Struct.deserializeBinaryFromReader);
356
+ break;
357
+ case 5:
358
+ const messageInitializer5 = new ondewoNlu005.Context();
359
+ _reader.readMessage(messageInitializer5, ondewoNlu005.Context.deserializeBinaryFromReader);
360
+ (_instance.outputContexts = _instance.outputContexts || []).push(messageInitializer5);
361
+ break;
362
+ case 6:
363
+ _instance.followupEventInput = new ondewoNlu014.EventInput();
364
+ _reader.readMessage(_instance.followupEventInput, ondewoNlu014.EventInput.deserializeBinaryFromReader);
365
+ break;
366
+ default:
367
+ _reader.skipField();
368
+ }
369
+ }
370
+ WebhookResponse.refineValues(_instance);
371
+ }
372
+ /**
373
+ * Serializes a message to binary format using provided binary reader
374
+ * @param _instance message instance
375
+ * @param _writer binary writer instance
376
+ */
377
+ static serializeBinaryToWriter(_instance, _writer) {
378
+ if (_instance.fulfillmentText) {
379
+ _writer.writeString(1, _instance.fulfillmentText);
380
+ }
381
+ if (_instance.fulfillmentMessages && _instance.fulfillmentMessages.length) {
382
+ _writer.writeRepeatedMessage(2, _instance.fulfillmentMessages, ondewoNlu012.Intent.Message.serializeBinaryToWriter);
383
+ }
384
+ if (_instance.source) {
385
+ _writer.writeString(3, _instance.source);
386
+ }
387
+ if (_instance.payload) {
388
+ _writer.writeMessage(4, _instance.payload, googleProtobuf009.Struct.serializeBinaryToWriter);
389
+ }
390
+ if (_instance.outputContexts && _instance.outputContexts.length) {
391
+ _writer.writeRepeatedMessage(5, _instance.outputContexts, ondewoNlu005.Context.serializeBinaryToWriter);
392
+ }
393
+ if (_instance.followupEventInput) {
394
+ _writer.writeMessage(6, _instance.followupEventInput, ondewoNlu014.EventInput.serializeBinaryToWriter);
395
+ }
396
+ }
397
+ get fulfillmentText() {
398
+ return this._fulfillmentText;
399
+ }
400
+ set fulfillmentText(value) {
401
+ this._fulfillmentText = value;
402
+ }
403
+ get fulfillmentMessages() {
404
+ return this._fulfillmentMessages;
405
+ }
406
+ set fulfillmentMessages(value) {
407
+ this._fulfillmentMessages = value;
408
+ }
409
+ get source() {
410
+ return this._source;
411
+ }
412
+ set source(value) {
413
+ this._source = value;
414
+ }
415
+ get payload() {
416
+ return this._payload;
417
+ }
418
+ set payload(value) {
419
+ this._payload = value;
420
+ }
421
+ get outputContexts() {
422
+ return this._outputContexts;
423
+ }
424
+ set outputContexts(value) {
425
+ this._outputContexts = value;
426
+ }
427
+ get followupEventInput() {
428
+ return this._followupEventInput;
429
+ }
430
+ set followupEventInput(value) {
431
+ this._followupEventInput = value;
432
+ }
433
+ /**
434
+ * Serialize message to binary data
435
+ * @param instance message instance
436
+ */
437
+ serializeBinary() {
438
+ const writer = new BinaryWriter();
439
+ WebhookResponse.serializeBinaryToWriter(this, writer);
440
+ return writer.getResultBuffer();
441
+ }
442
+ /**
443
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
444
+ */
445
+ toObject() {
446
+ return {
447
+ fulfillmentText: this.fulfillmentText,
448
+ fulfillmentMessages: (this.fulfillmentMessages || []).map(m => m.toObject()),
449
+ source: this.source,
450
+ payload: this.payload ? this.payload.toObject() : undefined,
451
+ outputContexts: (this.outputContexts || []).map(m => m.toObject()),
452
+ followupEventInput: this.followupEventInput
453
+ ? this.followupEventInput.toObject()
454
+ : undefined
455
+ };
456
+ }
457
+ /**
458
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
459
+ */
460
+ toJSON() {
461
+ return this.toObject();
462
+ }
463
+ /**
464
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
465
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
466
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
467
+ */
468
+ toProtobufJSON(
469
+ // @ts-ignore
470
+ options) {
471
+ return {
472
+ fulfillmentText: this.fulfillmentText,
473
+ fulfillmentMessages: (this.fulfillmentMessages || []).map(m => m.toProtobufJSON(options)),
474
+ source: this.source,
475
+ payload: this.payload ? this.payload.toProtobufJSON(options) : null,
476
+ outputContexts: (this.outputContexts || []).map(m => m.toProtobufJSON(options)),
477
+ followupEventInput: this.followupEventInput
478
+ ? this.followupEventInput.toProtobufJSON(options)
479
+ : null
480
+ };
481
+ }
482
+ }
483
+ WebhookResponse.id = 'ondewo.nlu.WebhookResponse';
484
+ /**
485
+ * Message implementation for ondewo.nlu.OriginalDetectIntentRequest
486
+ */
487
+ export class OriginalDetectIntentRequest {
488
+ /**
489
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
490
+ * @param _value initial values object or instance of OriginalDetectIntentRequest to deeply clone from
491
+ */
492
+ constructor(_value) {
493
+ _value = _value || {};
494
+ this.source = _value.source;
495
+ this.payload = _value.payload
496
+ ? new googleProtobuf009.Struct(_value.payload)
497
+ : undefined;
498
+ OriginalDetectIntentRequest.refineValues(this);
499
+ }
500
+ /**
501
+ * Deserialize binary data to message
502
+ * @param instance message instance
503
+ */
504
+ static deserializeBinary(bytes) {
505
+ const instance = new OriginalDetectIntentRequest();
506
+ OriginalDetectIntentRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
507
+ return instance;
508
+ }
509
+ /**
510
+ * Check all the properties and set default protobuf values if necessary
511
+ * @param _instance message instance
512
+ */
513
+ static refineValues(_instance) {
514
+ _instance.source = _instance.source || '';
515
+ _instance.payload = _instance.payload || undefined;
516
+ }
517
+ /**
518
+ * Deserializes / reads binary message into message instance using provided binary reader
519
+ * @param _instance message instance
520
+ * @param _reader binary reader instance
521
+ */
522
+ static deserializeBinaryFromReader(_instance, _reader) {
523
+ while (_reader.nextField()) {
524
+ if (_reader.isEndGroup())
525
+ break;
526
+ switch (_reader.getFieldNumber()) {
527
+ case 1:
528
+ _instance.source = _reader.readString();
529
+ break;
530
+ case 3:
531
+ _instance.payload = new googleProtobuf009.Struct();
532
+ _reader.readMessage(_instance.payload, googleProtobuf009.Struct.deserializeBinaryFromReader);
533
+ break;
534
+ default:
535
+ _reader.skipField();
536
+ }
537
+ }
538
+ OriginalDetectIntentRequest.refineValues(_instance);
539
+ }
540
+ /**
541
+ * Serializes a message to binary format using provided binary reader
542
+ * @param _instance message instance
543
+ * @param _writer binary writer instance
544
+ */
545
+ static serializeBinaryToWriter(_instance, _writer) {
546
+ if (_instance.source) {
547
+ _writer.writeString(1, _instance.source);
548
+ }
549
+ if (_instance.payload) {
550
+ _writer.writeMessage(3, _instance.payload, googleProtobuf009.Struct.serializeBinaryToWriter);
551
+ }
552
+ }
553
+ get source() {
554
+ return this._source;
555
+ }
556
+ set source(value) {
557
+ this._source = value;
558
+ }
559
+ get payload() {
560
+ return this._payload;
561
+ }
562
+ set payload(value) {
563
+ this._payload = value;
564
+ }
565
+ /**
566
+ * Serialize message to binary data
567
+ * @param instance message instance
568
+ */
569
+ serializeBinary() {
570
+ const writer = new BinaryWriter();
571
+ OriginalDetectIntentRequest.serializeBinaryToWriter(this, writer);
572
+ return writer.getResultBuffer();
573
+ }
574
+ /**
575
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
576
+ */
577
+ toObject() {
578
+ return {
579
+ source: this.source,
580
+ payload: this.payload ? this.payload.toObject() : undefined
581
+ };
582
+ }
583
+ /**
584
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
585
+ */
586
+ toJSON() {
587
+ return this.toObject();
588
+ }
589
+ /**
590
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
591
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
592
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
593
+ */
594
+ toProtobufJSON(
595
+ // @ts-ignore
596
+ options) {
597
+ return {
598
+ source: this.source,
599
+ payload: this.payload ? this.payload.toProtobufJSON(options) : null
600
+ };
601
+ }
602
+ }
603
+ OriginalDetectIntentRequest.id = 'ondewo.nlu.OriginalDetectIntentRequest';
604
+ /**
605
+ * Message implementation for ondewo.nlu.PingResponse
606
+ */
607
+ export class PingResponse {
608
+ /**
609
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
610
+ * @param _value initial values object or instance of PingResponse to deeply clone from
611
+ */
612
+ constructor(_value) {
613
+ _value = _value || {};
614
+ this.isReachable = _value.isReachable;
615
+ PingResponse.refineValues(this);
616
+ }
617
+ /**
618
+ * Deserialize binary data to message
619
+ * @param instance message instance
620
+ */
621
+ static deserializeBinary(bytes) {
622
+ const instance = new PingResponse();
623
+ PingResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
624
+ return instance;
625
+ }
626
+ /**
627
+ * Check all the properties and set default protobuf values if necessary
628
+ * @param _instance message instance
629
+ */
630
+ static refineValues(_instance) {
631
+ _instance.isReachable = _instance.isReachable || false;
632
+ }
633
+ /**
634
+ * Deserializes / reads binary message into message instance using provided binary reader
635
+ * @param _instance message instance
636
+ * @param _reader binary reader instance
637
+ */
638
+ static deserializeBinaryFromReader(_instance, _reader) {
639
+ while (_reader.nextField()) {
640
+ if (_reader.isEndGroup())
641
+ break;
642
+ switch (_reader.getFieldNumber()) {
643
+ case 1:
644
+ _instance.isReachable = _reader.readBool();
645
+ break;
646
+ default:
647
+ _reader.skipField();
648
+ }
649
+ }
650
+ PingResponse.refineValues(_instance);
651
+ }
652
+ /**
653
+ * Serializes a message to binary format using provided binary reader
654
+ * @param _instance message instance
655
+ * @param _writer binary writer instance
656
+ */
657
+ static serializeBinaryToWriter(_instance, _writer) {
658
+ if (_instance.isReachable) {
659
+ _writer.writeBool(1, _instance.isReachable);
660
+ }
661
+ }
662
+ get isReachable() {
663
+ return this._isReachable;
664
+ }
665
+ set isReachable(value) {
666
+ this._isReachable = value;
667
+ }
668
+ /**
669
+ * Serialize message to binary data
670
+ * @param instance message instance
671
+ */
672
+ serializeBinary() {
673
+ const writer = new BinaryWriter();
674
+ PingResponse.serializeBinaryToWriter(this, writer);
675
+ return writer.getResultBuffer();
676
+ }
677
+ /**
678
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
679
+ */
680
+ toObject() {
681
+ return {
682
+ isReachable: this.isReachable
683
+ };
684
+ }
685
+ /**
686
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
687
+ */
688
+ toJSON() {
689
+ return this.toObject();
690
+ }
691
+ /**
692
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
693
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
694
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
695
+ */
696
+ toProtobufJSON(
697
+ // @ts-ignore
698
+ options) {
699
+ return {
700
+ isReachable: this.isReachable
701
+ };
702
+ }
703
+ }
704
+ PingResponse.id = 'ondewo.nlu.PingResponse';
705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay5wYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwaS9vbmRld28vbmx1L3dlYmhvb2sucGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQU16RSxPQUFPLEtBQUssWUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBSTVELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRSxPQUFPLEtBQUssWUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sS0FBSyxZQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQTZEdEI7OztPQUdHO0lBQ0gsWUFBWSxNQUErQztRQUN6RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBbEVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFpQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ25DLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFzQjtRQUN4QyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLDJCQUEyQixDQUNoQyxTQUFzQixFQUN0QixPQUFxQjtRQUVy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TCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQztJQUNKLENBQUM7O0FBbEhNLGVBQUUsR0FBRyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbi8vXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEVcbi8vIERPIE5PVCBNT0RJRlkgSVQhIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIExPU1RcbmltcG9ydCB7XG4gIEdycGNNZXNzYWdlLFxuICBSZWN1cnNpdmVQYXJ0aWFsLFxuICBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbn0gZnJvbSAnQG5neC1ncnBjL2NvbW1vbic7XG5pbXBvcnQgeyBCaW5hcnlSZWFkZXIsIEJpbmFyeVdyaXRlciwgQnl0ZVNvdXJjZSB9IGZyb20gJ2dvb2dsZS1wcm90b2J1Zic7XG5pbXBvcnQgKiBhcyBnb29nbGVBcGkwMDAgZnJvbSAnLi4vLi4vZ29vZ2xlL2FwaS9odHRwLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAxIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZUFwaTAwMiBmcm9tICcuLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAzIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDA0IGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIG9uZGV3b05sdTAwNSBmcm9tICcuLi8uLi9vbmRld28vbmx1L2NvbnRleHQucGInO1xuaW1wb3J0ICogYXMgb25kZXdvTmx1MDA2IGZyb20gJy4uLy4uL29uZGV3by9ubHUvY29tbW9uLnBiJztcbmltcG9ydCAqIGFzIG9uZGV3b05sdTAwNyBmcm9tICcuLi8uLi9vbmRld28vbmx1L29wZXJhdGlvbnMucGInO1xuaW1wb3J0ICogYXMgZ29vZ2xlUHJvdG9idWYwMDggZnJvbSAnQG5neC1ncnBjL3dlbGwta25vd24tdHlwZXMnO1xuaW1wb3J0ICogYXMgZ29vZ2xlUHJvdG9idWYwMDkgZnJvbSAnQG5neC1ncnBjL3dlbGwta25vd24tdHlwZXMnO1xuaW1wb3J0ICogYXMgZ29vZ2xlUnBjMDEwIGZyb20gJy4uLy4uL2dvb2dsZS9ycGMvc3RhdHVzLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVR5cGUwMTEgZnJvbSAnLi4vLi4vZ29vZ2xlL3R5cGUvbGF0bG5nLnBiJztcbmltcG9ydCAqIGFzIG9uZGV3b05sdTAxMiBmcm9tICcuLi8uLi9vbmRld28vbmx1L2ludGVudC5wYic7XG5pbXBvcnQgKiBhcyBvbmRld29ObHUwMTMgZnJvbSAnLi4vLi4vb25kZXdvL25sdS9lbnRpdHktdHlwZS5wYic7XG5pbXBvcnQgKiBhcyBvbmRld29ObHUwMTQgZnJvbSAnLi4vLi4vb25kZXdvL25sdS9zZXNzaW9uLnBiJztcbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5QaW5nUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgUGluZ1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LlBpbmdSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgUGluZ1JlcXVlc3QoKTtcbiAgICBQaW5nUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFBpbmdSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnNlc3Npb24gPSBfaW5zdGFuY2Uuc2Vzc2lvbiB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFBpbmdSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zZXNzaW9uID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBQaW5nUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IFBpbmdSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNlc3Npb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Nlc3Npb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBQaW5nUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxQaW5nUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zZXNzaW9uID0gX3ZhbHVlLnNlc3Npb247XG4gICAgUGluZ1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cbiAgc2V0IHNlc3Npb24odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Nlc3Npb24gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBQaW5nUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBQaW5nUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvblxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFBpbmdSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbjogdGhpcy5zZXNzaW9uXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBQaW5nUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgUGluZ1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHNlc3Npb24/OiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgUGluZ1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHNlc3Npb24/OiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LldlYmhvb2tSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJob29rUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuV2ViaG9va1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJob29rUmVxdWVzdCgpO1xuICAgIFdlYmhvb2tSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogV2ViaG9va1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2Uuc2Vzc2lvbiA9IF9pbnN0YW5jZS5zZXNzaW9uIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5yZXNwb25zZUlkID0gX2luc3RhbmNlLnJlc3BvbnNlSWQgfHwgJyc7XG4gICAgX2luc3RhbmNlLnF1ZXJ5UmVzdWx0ID0gX2luc3RhbmNlLnF1ZXJ5UmVzdWx0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2Uub3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0ID1cbiAgICAgIF9pbnN0YW5jZS5vcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5oZWFkZXJzID0gX2luc3RhbmNlLmhlYWRlcnMgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogV2ViaG9va1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgX2luc3RhbmNlLnNlc3Npb24gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5yZXNwb25zZUlkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UucXVlcnlSZXN1bHQgPSBuZXcgb25kZXdvTmx1MDE0LlF1ZXJ5UmVzdWx0KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5xdWVyeVJlc3VsdCxcbiAgICAgICAgICAgIG9uZGV3b05sdTAxNC5RdWVyeVJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLm9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCA9IG5ldyBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLm9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCxcbiAgICAgICAgICAgIE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLmhlYWRlcnMgPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5oZWFkZXJzLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBXZWJob29rUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IFdlYmhvb2tSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNlc3Npb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoNCwgX2luc3RhbmNlLnNlc3Npb24pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnJlc3BvbnNlSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnJlc3BvbnNlSWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnF1ZXJ5UmVzdWx0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMixcbiAgICAgICAgX2luc3RhbmNlLnF1ZXJ5UmVzdWx0IGFzIGFueSxcbiAgICAgICAgb25kZXdvTmx1MDE0LlF1ZXJ5UmVzdWx0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDMsXG4gICAgICAgIF9pbnN0YW5jZS5vcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QgYXMgYW55LFxuICAgICAgICBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuaGVhZGVycykge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDUsXG4gICAgICAgIF9pbnN0YW5jZS5oZWFkZXJzIGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Nlc3Npb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Jlc3BvbnNlSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3F1ZXJ5UmVzdWx0Pzogb25kZXdvTmx1MDE0LlF1ZXJ5UmVzdWx0O1xuICBwcml2YXRlIF9vcmlnaW5hbERldGVjdEludGVudFJlcXVlc3Q/OiBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3Q7XG4gIHByaXZhdGUgX2hlYWRlcnM/OiBnb29nbGVQcm90b2J1ZjAwOS5TdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBXZWJob29rUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxXZWJob29rUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zZXNzaW9uID0gX3ZhbHVlLnNlc3Npb247XG4gICAgdGhpcy5yZXNwb25zZUlkID0gX3ZhbHVlLnJlc3BvbnNlSWQ7XG4gICAgdGhpcy5xdWVyeVJlc3VsdCA9IF92YWx1ZS5xdWVyeVJlc3VsdFxuICAgICAgPyBuZXcgb25kZXdvTmx1MDE0LlF1ZXJ5UmVzdWx0KF92YWx1ZS5xdWVyeVJlc3VsdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMub3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0ID0gX3ZhbHVlLm9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdFxuICAgICAgPyBuZXcgT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0KF92YWx1ZS5vcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlYWRlcnMgPSBfdmFsdWUuaGVhZGVyc1xuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0KF92YWx1ZS5oZWFkZXJzKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgV2ViaG9va1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cbiAgc2V0IHNlc3Npb24odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Nlc3Npb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmVzcG9uc2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZXNwb25zZUlkO1xuICB9XG4gIHNldCByZXNwb25zZUlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yZXNwb25zZUlkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHF1ZXJ5UmVzdWx0KCk6IG9uZGV3b05sdTAxNC5RdWVyeVJlc3VsdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UmVzdWx0O1xuICB9XG4gIHNldCBxdWVyeVJlc3VsdCh2YWx1ZTogb25kZXdvTmx1MDE0LlF1ZXJ5UmVzdWx0IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnlSZXN1bHQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0KCk6IE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdDtcbiAgfVxuICBzZXQgb3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0KFxuICAgIHZhbHVlOiBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGhlYWRlcnMoKTogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVycztcbiAgfVxuICBzZXQgaGVhZGVycyh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGVhZGVycyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFdlYmhvb2tSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFdlYmhvb2tSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbjogdGhpcy5zZXNzaW9uLFxuICAgICAgcmVzcG9uc2VJZDogdGhpcy5yZXNwb25zZUlkLFxuICAgICAgcXVlcnlSZXN1bHQ6IHRoaXMucXVlcnlSZXN1bHQgPyB0aGlzLnF1ZXJ5UmVzdWx0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBvcmlnaW5hbERldGVjdEludGVudFJlcXVlc3Q6IHRoaXMub3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0XG4gICAgICAgID8gdGhpcy5vcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QudG9PYmplY3QoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyA/IHRoaXMuaGVhZGVycy50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogV2ViaG9va1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uOiB0aGlzLnNlc3Npb24sXG4gICAgICByZXNwb25zZUlkOiB0aGlzLnJlc3BvbnNlSWQsXG4gICAgICBxdWVyeVJlc3VsdDogdGhpcy5xdWVyeVJlc3VsdFxuICAgICAgICA/IHRoaXMucXVlcnlSZXN1bHQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgb3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0OiB0aGlzLm9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdFxuICAgICAgICA/IHRoaXMub3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyA/IHRoaXMuaGVhZGVycy50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFdlYmhvb2tSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBXZWJob29rUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgc2Vzc2lvbj86IHN0cmluZztcbiAgICByZXNwb25zZUlkPzogc3RyaW5nO1xuICAgIHF1ZXJ5UmVzdWx0Pzogb25kZXdvTmx1MDE0LlF1ZXJ5UmVzdWx0LkFzT2JqZWN0O1xuICAgIG9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdD86IE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdC5Bc09iamVjdDtcbiAgICBoZWFkZXJzPzogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0LkFzT2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFdlYmhvb2tSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzZXNzaW9uPzogc3RyaW5nO1xuICAgIHJlc3BvbnNlSWQ/OiBzdHJpbmc7XG4gICAgcXVlcnlSZXN1bHQ/OiBvbmRld29ObHUwMTQuUXVlcnlSZXN1bHQuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIG9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdD86IE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgaGVhZGVycz86IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LldlYmhvb2tSZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgV2ViaG9va1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5XZWJob29rUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJob29rUmVzcG9uc2UoKTtcbiAgICBXZWJob29rUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBXZWJob29rUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UuZnVsZmlsbG1lbnRUZXh0ID0gX2luc3RhbmNlLmZ1bGZpbGxtZW50VGV4dCB8fCAnJztcbiAgICBfaW5zdGFuY2UuZnVsZmlsbG1lbnRNZXNzYWdlcyA9IF9pbnN0YW5jZS5mdWxmaWxsbWVudE1lc3NhZ2VzIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5zb3VyY2UgPSBfaW5zdGFuY2Uuc291cmNlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5wYXlsb2FkID0gX2luc3RhbmNlLnBheWxvYWQgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5vdXRwdXRDb250ZXh0cyA9IF9pbnN0YW5jZS5vdXRwdXRDb250ZXh0cyB8fCBbXTtcbiAgICBfaW5zdGFuY2UuZm9sbG93dXBFdmVudElucHV0ID0gX2luc3RhbmNlLmZvbGxvd3VwRXZlbnRJbnB1dCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBXZWJob29rUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmZ1bGZpbGxtZW50VGV4dCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMiA9IG5ldyBvbmRld29ObHUwMTIuSW50ZW50Lk1lc3NhZ2UoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMixcbiAgICAgICAgICAgIG9uZGV3b05sdTAxMi5JbnRlbnQuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZnVsZmlsbG1lbnRNZXNzYWdlcyA9XG4gICAgICAgICAgICBfaW5zdGFuY2UuZnVsZmlsbG1lbnRNZXNzYWdlcyB8fCBbXSkucHVzaChtZXNzYWdlSW5pdGlhbGl6ZXIyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS5zb3VyY2UgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXlsb2FkID0gbmV3IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucGF5bG9hZCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyNSA9IG5ldyBvbmRld29ObHUwMDUuQ29udGV4dCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXI1LFxuICAgICAgICAgICAgb25kZXdvTmx1MDA1LkNvbnRleHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLm91dHB1dENvbnRleHRzID0gX2luc3RhbmNlLm91dHB1dENvbnRleHRzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyNVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBfaW5zdGFuY2UuZm9sbG93dXBFdmVudElucHV0ID0gbmV3IG9uZGV3b05sdTAxNC5FdmVudElucHV0KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5mb2xsb3d1cEV2ZW50SW5wdXQsXG4gICAgICAgICAgICBvbmRld29ObHUwMTQuRXZlbnRJbnB1dC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgV2ViaG9va1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogV2ViaG9va1Jlc3BvbnNlLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmZ1bGZpbGxtZW50VGV4dCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UuZnVsZmlsbG1lbnRUZXh0KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5mdWxmaWxsbWVudE1lc3NhZ2VzICYmIF9pbnN0YW5jZS5mdWxmaWxsbWVudE1lc3NhZ2VzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMixcbiAgICAgICAgX2luc3RhbmNlLmZ1bGZpbGxtZW50TWVzc2FnZXMgYXMgYW55LFxuICAgICAgICBvbmRld29ObHUwMTIuSW50ZW50Lk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc291cmNlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDMsIF9pbnN0YW5jZS5zb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBheWxvYWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA0LFxuICAgICAgICBfaW5zdGFuY2UucGF5bG9hZCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5vdXRwdXRDb250ZXh0cyAmJiBfaW5zdGFuY2Uub3V0cHV0Q29udGV4dHMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICA1LFxuICAgICAgICBfaW5zdGFuY2Uub3V0cHV0Q29udGV4dHMgYXMgYW55LFxuICAgICAgICBvbmRld29ObHUwMDUuQ29udGV4dC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5mb2xsb3d1cEV2ZW50SW5wdXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA2LFxuICAgICAgICBfaW5zdGFuY2UuZm9sbG93dXBFdmVudElucHV0IGFzIGFueSxcbiAgICAgICAgb25kZXdvTmx1MDE0LkV2ZW50SW5wdXQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZnVsZmlsbG1lbnRUZXh0Pzogc3RyaW5nO1xuICBwcml2YXRlIF9mdWxmaWxsbWVudE1lc3NhZ2VzPzogb25kZXdvTmx1MDEyLkludGVudC5NZXNzYWdlW107XG4gIHByaXZhdGUgX3NvdXJjZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfcGF5bG9hZD86IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdDtcbiAgcHJpdmF0ZSBfb3V0cHV0Q29udGV4dHM/OiBvbmRld29ObHUwMDUuQ29udGV4dFtdO1xuICBwcml2YXRlIF9mb2xsb3d1cEV2ZW50SW5wdXQ/OiBvbmRld29ObHUwMTQuRXZlbnRJbnB1dDtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFdlYmhvb2tSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxXZWJob29rUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZnVsZmlsbG1lbnRUZXh0ID0gX3ZhbHVlLmZ1bGZpbGxtZW50VGV4dDtcbiAgICB0aGlzLmZ1bGZpbGxtZW50TWVzc2FnZXMgPSAoX3ZhbHVlLmZ1bGZpbGxtZW50TWVzc2FnZXMgfHwgW10pLm1hcChcbiAgICAgIG0gPT4gbmV3IG9uZGV3b05sdTAxMi5JbnRlbnQuTWVzc2FnZShtKVxuICAgICk7XG4gICAgdGhpcy5zb3VyY2UgPSBfdmFsdWUuc291cmNlO1xuICAgIHRoaXMucGF5bG9hZCA9IF92YWx1ZS5wYXlsb2FkXG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwOS5TdHJ1Y3QoX3ZhbHVlLnBheWxvYWQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLm91dHB1dENvbnRleHRzID0gKF92YWx1ZS5vdXRwdXRDb250ZXh0cyB8fCBbXSkubWFwKFxuICAgICAgbSA9PiBuZXcgb25kZXdvTmx1MDA1LkNvbnRleHQobSlcbiAgICApO1xuICAgIHRoaXMuZm9sbG93dXBFdmVudElucHV0ID0gX3ZhbHVlLmZvbGxvd3VwRXZlbnRJbnB1dFxuICAgICAgPyBuZXcgb25kZXdvTmx1MDE0LkV2ZW50SW5wdXQoX3ZhbHVlLmZvbGxvd3VwRXZlbnRJbnB1dClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIFdlYmhvb2tSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGZ1bGZpbGxtZW50VGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdWxmaWxsbWVudFRleHQ7XG4gIH1cbiAgc2V0IGZ1bGZpbGxtZW50VGV4dCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZnVsZmlsbG1lbnRUZXh0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGZ1bGZpbGxtZW50TWVzc2FnZXMoKTogb25kZXdvTmx1MDEyLkludGVudC5NZXNzYWdlW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdWxmaWxsbWVudE1lc3NhZ2VzO1xuICB9XG4gIHNldCBmdWxmaWxsbWVudE1lc3NhZ2VzKHZhbHVlOiBvbmRld29ObHUwMTIuSW50ZW50Lk1lc3NhZ2VbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2Z1bGZpbGxtZW50TWVzc2FnZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc291cmNlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuICBzZXQgc291cmNlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGF5bG9hZCgpOiBnb29nbGVQcm90b2J1ZjAwOS5TdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYXlsb2FkO1xuICB9XG4gIHNldCBwYXlsb2FkKHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwOS5TdHJ1Y3QgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wYXlsb2FkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG91dHB1dENvbnRleHRzKCk6IG9uZGV3b05sdTAwNS5Db250ZXh0W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRDb250ZXh0cztcbiAgfVxuICBzZXQgb3V0cHV0Q29udGV4dHModmFsdWU6IG9uZGV3b05sdTAwNS5Db250ZXh0W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vdXRwdXRDb250ZXh0cyA9IHZhbHVlO1xuICB9XG4gIGdldCBmb2xsb3d1cEV2ZW50SW5wdXQoKTogb25kZXdvTmx1MDE0LkV2ZW50SW5wdXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mb2xsb3d1cEV2ZW50SW5wdXQ7XG4gIH1cbiAgc2V0IGZvbGxvd3VwRXZlbnRJbnB1dCh2YWx1ZTogb25kZXdvTmx1MDE0LkV2ZW50SW5wdXQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9mb2xsb3d1cEV2ZW50SW5wdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBXZWJob29rUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogV2ViaG9va1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZnVsZmlsbG1lbnRUZXh0OiB0aGlzLmZ1bGZpbGxtZW50VGV4dCxcbiAgICAgIGZ1bGZpbGxtZW50TWVzc2FnZXM6ICh0aGlzLmZ1bGZpbGxtZW50TWVzc2FnZXMgfHwgW10pLm1hcChtID0+XG4gICAgICAgIG0udG9PYmplY3QoKVxuICAgICAgKSxcbiAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQgPyB0aGlzLnBheWxvYWQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIG91dHB1dENvbnRleHRzOiAodGhpcy5vdXRwdXRDb250ZXh0cyB8fCBbXSkubWFwKG0gPT4gbS50b09iamVjdCgpKSxcbiAgICAgIGZvbGxvd3VwRXZlbnRJbnB1dDogdGhpcy5mb2xsb3d1cEV2ZW50SW5wdXRcbiAgICAgICAgPyB0aGlzLmZvbGxvd3VwRXZlbnRJbnB1dC50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogV2ViaG9va1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZnVsZmlsbG1lbnRUZXh0OiB0aGlzLmZ1bGZpbGxtZW50VGV4dCxcbiAgICAgIGZ1bGZpbGxtZW50TWVzc2FnZXM6ICh0aGlzLmZ1bGZpbGxtZW50TWVzc2FnZXMgfHwgW10pLm1hcChtID0+XG4gICAgICAgIG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICksXG4gICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgcGF5bG9hZDogdGhpcy5wYXlsb2FkID8gdGhpcy5wYXlsb2FkLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIG91dHB1dENvbnRleHRzOiAodGhpcy5vdXRwdXRDb250ZXh0cyB8fCBbXSkubWFwKG0gPT5cbiAgICAgICAgbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgKSxcbiAgICAgIGZvbGxvd3VwRXZlbnRJbnB1dDogdGhpcy5mb2xsb3d1cEV2ZW50SW5wdXRcbiAgICAgICAgPyB0aGlzLmZvbGxvd3VwRXZlbnRJbnB1dC50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFdlYmhvb2tSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgV2ViaG9va1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBmdWxmaWxsbWVudFRleHQ/OiBzdHJpbmc7XG4gICAgZnVsZmlsbG1lbnRNZXNzYWdlcz86IG9uZGV3b05sdTAxMi5JbnRlbnQuTWVzc2FnZS5Bc09iamVjdFtdO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBwYXlsb2FkPzogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0LkFzT2JqZWN0O1xuICAgIG91dHB1dENvbnRleHRzPzogb25kZXdvTmx1MDA1LkNvbnRleHQuQXNPYmplY3RbXTtcbiAgICBmb2xsb3d1cEV2ZW50SW5wdXQ/OiBvbmRld29ObHUwMTQuRXZlbnRJbnB1dC5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBXZWJob29rUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGZ1bGZpbGxtZW50VGV4dD86IHN0cmluZztcbiAgICBmdWxmaWxsbWVudE1lc3NhZ2VzPzogb25kZXdvTmx1MDEyLkludGVudC5NZXNzYWdlLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBwYXlsb2FkPzogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBvdXRwdXRDb250ZXh0cz86IG9uZGV3b05sdTAwNS5Db250ZXh0LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICAgIGZvbGxvd3VwRXZlbnRJbnB1dD86IG9uZGV3b05sdTAxNC5FdmVudElucHV0LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1Lk9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCgpO1xuICAgIE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5zb3VyY2UgPSBfaW5zdGFuY2Uuc291cmNlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5wYXlsb2FkID0gX2luc3RhbmNlLnBheWxvYWQgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zb3VyY2UgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXlsb2FkID0gbmV3IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucGF5bG9hZCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNvdXJjZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2Uuc291cmNlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYXlsb2FkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLnBheWxvYWQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwOS5TdHJ1Y3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc291cmNlPzogc3RyaW5nO1xuICBwcml2YXRlIF9wYXlsb2FkPzogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0O1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zb3VyY2UgPSBfdmFsdWUuc291cmNlO1xuICAgIHRoaXMucGF5bG9hZCA9IF92YWx1ZS5wYXlsb2FkXG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwOS5TdHJ1Y3QoX3ZhbHVlLnBheWxvYWQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICB9XG4gIHNldCBzb3VyY2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xuICB9XG4gIGdldCBwYXlsb2FkKCk6IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BheWxvYWQ7XG4gIH1cbiAgc2V0IHBheWxvYWQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BheWxvYWQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZCA/IHRoaXMucGF5bG9hZC50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZCA/IHRoaXMucGF5bG9hZC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIE9yaWdpbmFsRGV0ZWN0SW50ZW50UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgT3JpZ2luYWxEZXRlY3RJbnRlbnRSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgcGF5bG9hZD86IGdvb2dsZVByb3RvYnVmMDA5LlN0cnVjdC5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBPcmlnaW5hbERldGVjdEludGVudFJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBwYXlsb2FkPzogZ29vZ2xlUHJvdG9idWYwMDkuU3RydWN0LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuUGluZ1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBQaW5nUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LlBpbmdSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFBpbmdSZXNwb25zZSgpO1xuICAgIFBpbmdSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFBpbmdSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS5pc1JlYWNoYWJsZSA9IF9pbnN0YW5jZS5pc1JlYWNoYWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFBpbmdSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuaXNSZWFjaGFibGUgPSBfcmVhZGVyLnJlYWRCb29sKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBQaW5nUmVzcG9uc2UucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBQaW5nUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuaXNSZWFjaGFibGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVCb29sKDEsIF9pbnN0YW5jZS5pc1JlYWNoYWJsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNSZWFjaGFibGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgUGluZ1Jlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFBpbmdSZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5pc1JlYWNoYWJsZSA9IF92YWx1ZS5pc1JlYWNoYWJsZTtcbiAgICBQaW5nUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBpc1JlYWNoYWJsZSgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faXNSZWFjaGFibGU7XG4gIH1cbiAgc2V0IGlzUmVhY2hhYmxlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faXNSZWFjaGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBQaW5nUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogUGluZ1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNSZWFjaGFibGU6IHRoaXMuaXNSZWFjaGFibGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBQaW5nUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBpc1JlYWNoYWJsZTogdGhpcy5pc1JlYWNoYWJsZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgUGluZ1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBQaW5nUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGlzUmVhY2hhYmxlPzogYm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBQaW5nUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGlzUmVhY2hhYmxlPzogYm9vbGVhbjtcbiAgfVxufVxuIl19