tedious 16.1.0 → 16.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/lib/all-headers.js +1 -2
  2. package/lib/all-headers.js.map +1 -0
  3. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +9 -31
  4. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
  5. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +9 -24
  6. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
  7. package/lib/always-encrypted/cek-entry.js +8 -12
  8. package/lib/always-encrypted/cek-entry.js.map +1 -0
  9. package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -24
  10. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
  11. package/lib/always-encrypted/key-crypto.js +5 -30
  12. package/lib/always-encrypted/key-crypto.js.map +1 -0
  13. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +11 -72
  14. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
  15. package/lib/always-encrypted/symmetric-key-cache.js +2 -13
  16. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
  17. package/lib/always-encrypted/symmetric-key.js +3 -8
  18. package/lib/always-encrypted/symmetric-key.js.map +1 -0
  19. package/lib/always-encrypted/types.js +19 -27
  20. package/lib/always-encrypted/types.js.map +1 -0
  21. package/lib/always-encrypted/utils.js +2 -6
  22. package/lib/always-encrypted/utils.js.map +1 -0
  23. package/lib/bulk-load-payload.js +7 -15
  24. package/lib/bulk-load-payload.js.map +1 -0
  25. package/lib/bulk-load.js +58 -131
  26. package/lib/bulk-load.js.map +1 -0
  27. package/lib/collation.js +7 -15
  28. package/lib/collation.js.map +1 -0
  29. package/lib/connection.js +297 -536
  30. package/lib/connection.js.map +1 -0
  31. package/lib/connector.js +6 -37
  32. package/lib/connector.js.map +1 -0
  33. package/lib/data-type.js +2 -43
  34. package/lib/data-type.js.map +1 -0
  35. package/lib/data-types/bigint.js +1 -15
  36. package/lib/data-types/bigint.js.map +1 -0
  37. package/lib/data-types/binary.js +1 -12
  38. package/lib/data-types/binary.js.map +1 -0
  39. package/lib/data-types/bit.js +1 -11
  40. package/lib/data-types/bit.js.map +1 -0
  41. package/lib/data-types/bitn.js +1 -7
  42. package/lib/data-types/bitn.js.map +1 -0
  43. package/lib/data-types/char.js +1 -20
  44. package/lib/data-types/char.js.map +1 -0
  45. package/lib/data-types/date.js +1 -15
  46. package/lib/data-types/date.js.map +1 -0
  47. package/lib/data-types/datetime.js +3 -20
  48. package/lib/data-types/datetime.js.map +1 -0
  49. package/lib/data-types/datetime2.js +1 -26
  50. package/lib/data-types/datetime2.js.map +1 -0
  51. package/lib/data-types/datetimen.js +1 -7
  52. package/lib/data-types/datetimen.js.map +1 -0
  53. package/lib/data-types/datetimeoffset.js +1 -23
  54. package/lib/data-types/datetimeoffset.js.map +1 -0
  55. package/lib/data-types/decimal.js +1 -18
  56. package/lib/data-types/decimal.js.map +1 -0
  57. package/lib/data-types/decimaln.js +1 -7
  58. package/lib/data-types/decimaln.js.map +1 -0
  59. package/lib/data-types/float.js +1 -13
  60. package/lib/data-types/float.js.map +1 -0
  61. package/lib/data-types/floatn.js +1 -7
  62. package/lib/data-types/floatn.js.map +1 -0
  63. package/lib/data-types/image.js +1 -10
  64. package/lib/data-types/image.js.map +1 -0
  65. package/lib/data-types/int.js +1 -14
  66. package/lib/data-types/int.js.map +1 -0
  67. package/lib/data-types/intn.js +1 -7
  68. package/lib/data-types/intn.js.map +1 -0
  69. package/lib/data-types/money.js +1 -12
  70. package/lib/data-types/money.js.map +1 -0
  71. package/lib/data-types/moneyn.js +1 -7
  72. package/lib/data-types/moneyn.js.map +1 -0
  73. package/lib/data-types/nchar.js +1 -14
  74. package/lib/data-types/nchar.js.map +1 -0
  75. package/lib/data-types/ntext.js +1 -10
  76. package/lib/data-types/ntext.js.map +1 -0
  77. package/lib/data-types/null.js +1 -7
  78. package/lib/data-types/null.js.map +1 -0
  79. package/lib/data-types/numeric.js +1 -18
  80. package/lib/data-types/numeric.js.map +1 -0
  81. package/lib/data-types/numericn.js +1 -7
  82. package/lib/data-types/numericn.js.map +1 -0
  83. package/lib/data-types/nvarchar.js +1 -22
  84. package/lib/data-types/nvarchar.js.map +1 -0
  85. package/lib/data-types/real.js +1 -13
  86. package/lib/data-types/real.js.map +1 -0
  87. package/lib/data-types/smalldatetime.js +1 -14
  88. package/lib/data-types/smalldatetime.js.map +1 -0
  89. package/lib/data-types/smallint.js +1 -14
  90. package/lib/data-types/smallint.js.map +1 -0
  91. package/lib/data-types/smallmoney.js +1 -13
  92. package/lib/data-types/smallmoney.js.map +1 -0
  93. package/lib/data-types/sql-variant.js +1 -6
  94. package/lib/data-types/sql-variant.js.map +1 -0
  95. package/lib/data-types/text.js +1 -18
  96. package/lib/data-types/text.js.map +1 -0
  97. package/lib/data-types/time.js +1 -22
  98. package/lib/data-types/time.js.map +1 -0
  99. package/lib/data-types/tinyint.js +1 -14
  100. package/lib/data-types/tinyint.js.map +1 -0
  101. package/lib/data-types/tvp.js +11 -27
  102. package/lib/data-types/tvp.js.map +1 -0
  103. package/lib/data-types/udt.js +1 -7
  104. package/lib/data-types/udt.js.map +1 -0
  105. package/lib/data-types/uniqueidentifier.js +1 -11
  106. package/lib/data-types/uniqueidentifier.js.map +1 -0
  107. package/lib/data-types/varbinary.js +1 -22
  108. package/lib/data-types/varbinary.js.map +1 -0
  109. package/lib/data-types/varchar.js +1 -23
  110. package/lib/data-types/varchar.js.map +1 -0
  111. package/lib/data-types/xml.js +1 -7
  112. package/lib/data-types/xml.js.map +1 -0
  113. package/lib/debug.js +4 -16
  114. package/lib/debug.js.map +1 -0
  115. package/lib/errors/abort-error.js +2 -5
  116. package/lib/errors/abort-error.js.map +1 -0
  117. package/lib/errors/timeout-error.js +2 -5
  118. package/lib/errors/timeout-error.js.map +1 -0
  119. package/lib/errors.js +10 -16
  120. package/lib/errors.js.map +1 -0
  121. package/lib/guid-parser.js +1 -7
  122. package/lib/guid-parser.js.map +1 -0
  123. package/lib/incoming-message-stream.js +9 -29
  124. package/lib/incoming-message-stream.js.map +1 -0
  125. package/lib/instance-lookup.js +3 -34
  126. package/lib/instance-lookup.js.map +1 -0
  127. package/lib/library.js +1 -1
  128. package/lib/library.js.map +1 -0
  129. package/lib/login7-payload.js +99 -100
  130. package/lib/login7-payload.js.map +1 -0
  131. package/lib/message-io.js +17 -45
  132. package/lib/message-io.js.map +1 -0
  133. package/lib/message.js +4 -8
  134. package/lib/message.js.map +1 -0
  135. package/lib/metadata-parser.js +1 -22
  136. package/lib/metadata-parser.js.map +1 -0
  137. package/lib/ntlm-payload.js +2 -22
  138. package/lib/ntlm-payload.js.map +1 -0
  139. package/lib/ntlm.js +1 -4
  140. package/lib/ntlm.js.map +1 -0
  141. package/lib/outgoing-message-stream.js +12 -21
  142. package/lib/outgoing-message-stream.js.map +1 -0
  143. package/lib/packet.js +2 -47
  144. package/lib/packet.js.map +1 -0
  145. package/lib/prelogin-payload.js +11 -54
  146. package/lib/prelogin-payload.js.map +1 -0
  147. package/lib/request.js +88 -66
  148. package/lib/request.js.map +1 -0
  149. package/lib/rpcrequest-payload.js +13 -34
  150. package/lib/rpcrequest-payload.js.map +1 -0
  151. package/lib/sender.js +1 -24
  152. package/lib/sender.js.map +1 -0
  153. package/lib/special-stored-procedure.js +1 -1
  154. package/lib/special-stored-procedure.js.map +1 -0
  155. package/lib/sqlbatch-payload.js +5 -18
  156. package/lib/sqlbatch-payload.js.map +1 -0
  157. package/lib/tds-versions.js +3 -3
  158. package/lib/tds-versions.js.map +1 -0
  159. package/lib/tedious.js +1 -12
  160. package/lib/tedious.js.map +1 -0
  161. package/lib/token/colmetadata-token-parser.js +1 -17
  162. package/lib/token/colmetadata-token-parser.js.map +1 -0
  163. package/lib/token/done-token-parser.js +2 -8
  164. package/lib/token/done-token-parser.js.map +1 -0
  165. package/lib/token/env-change-token-parser.js +7 -28
  166. package/lib/token/env-change-token-parser.js.map +1 -0
  167. package/lib/token/feature-ext-ack-parser.js +1 -10
  168. package/lib/token/feature-ext-ack-parser.js.map +1 -0
  169. package/lib/token/fedauth-info-parser.js +2 -10
  170. package/lib/token/fedauth-info-parser.js.map +1 -0
  171. package/lib/token/handler.js +39 -149
  172. package/lib/token/handler.js.map +1 -0
  173. package/lib/token/infoerror-token-parser.js +1 -5
  174. package/lib/token/infoerror-token-parser.js.map +1 -0
  175. package/lib/token/loginack-token-parser.js +1 -6
  176. package/lib/token/loginack-token-parser.js.map +1 -0
  177. package/lib/token/nbcrow-token-parser.js +2 -15
  178. package/lib/token/nbcrow-token-parser.js.map +1 -0
  179. package/lib/token/order-token-parser.js +2 -7
  180. package/lib/token/order-token-parser.js.map +1 -0
  181. package/lib/token/returnstatus-token-parser.js +2 -4
  182. package/lib/token/returnstatus-token-parser.js.map +1 -0
  183. package/lib/token/returnvalue-token-parser.js +4 -9
  184. package/lib/token/returnvalue-token-parser.js.map +1 -0
  185. package/lib/token/row-token-parser.js +2 -11
  186. package/lib/token/row-token-parser.js.map +1 -0
  187. package/lib/token/sspi-token-parser.js +1 -5
  188. package/lib/token/sspi-token-parser.js.map +1 -0
  189. package/lib/token/stream-parser.js +24 -86
  190. package/lib/token/stream-parser.js.map +1 -0
  191. package/lib/token/token-stream-parser.js +4 -13
  192. package/lib/token/token-stream-parser.js.map +1 -0
  193. package/lib/token/token.js +88 -168
  194. package/lib/token/token.js.map +1 -0
  195. package/lib/tracking-buffer/writable-tracking-buffer.js +20 -60
  196. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
  197. package/lib/transaction.js +9 -33
  198. package/lib/transaction.js.map +1 -0
  199. package/lib/transient-error-lookup.js +1 -4
  200. package/lib/transient-error-lookup.js.map +1 -0
  201. package/lib/utils/with-timeout.js +1 -9
  202. package/lib/utils/with-timeout.js.map +1 -0
  203. package/lib/value-parser.js +1 -143
  204. package/lib/value-parser.js.map +1 -0
  205. package/package.json +27 -71
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _sprintfJs = require("sprintf-js");
9
-
10
8
  var _tdsVersions = require("./tds-versions");
11
-
12
9
  const FLAGS_1 = {
13
10
  ENDIAN_LITTLE: 0x00,
14
11
  ENDIAN_BIG: 0x01,
@@ -66,11 +63,32 @@ const FEDAUTH_OPTIONS = {
66
63
  ADAL_WORKFLOW_INTEGRATED: 0x02
67
64
  };
68
65
  const FEATURE_EXT_TERMINATOR = 0xFF;
69
-
70
66
  /*
71
67
  s2.2.6.3
72
68
  */
73
69
  class Login7Payload {
70
+ tdsVersion;
71
+ packetSize;
72
+ clientProgVer;
73
+ clientPid;
74
+ connectionId;
75
+ clientTimeZone;
76
+ clientLcid;
77
+ readOnlyIntent;
78
+ initDbFatal;
79
+ userName;
80
+ password;
81
+ serverName;
82
+ appName;
83
+ hostname;
84
+ libraryName;
85
+ language;
86
+ database;
87
+ clientId;
88
+ sspi;
89
+ attachDbFile;
90
+ changePassword;
91
+ fedAuth;
74
92
  constructor({
75
93
  tdsVersion,
76
94
  packetSize,
@@ -80,28 +98,6 @@ class Login7Payload {
80
98
  clientTimeZone,
81
99
  clientLcid
82
100
  }) {
83
- this.tdsVersion = void 0;
84
- this.packetSize = void 0;
85
- this.clientProgVer = void 0;
86
- this.clientPid = void 0;
87
- this.connectionId = void 0;
88
- this.clientTimeZone = void 0;
89
- this.clientLcid = void 0;
90
- this.readOnlyIntent = void 0;
91
- this.initDbFatal = void 0;
92
- this.userName = void 0;
93
- this.password = void 0;
94
- this.serverName = void 0;
95
- this.appName = void 0;
96
- this.hostname = void 0;
97
- this.libraryName = void 0;
98
- this.language = void 0;
99
- this.database = void 0;
100
- this.clientId = void 0;
101
- this.sspi = void 0;
102
- this.attachDbFile = void 0;
103
- this.changePassword = void 0;
104
- this.fedAuth = void 0;
105
101
  this.tdsVersion = tdsVersion;
106
102
  this.packetSize = packetSize;
107
103
  this.clientProgVer = clientProgVer;
@@ -125,39 +121,52 @@ class Login7Payload {
125
121
  this.attachDbFile = undefined;
126
122
  this.changePassword = undefined;
127
123
  }
128
-
129
124
  toBuffer() {
130
125
  const fixedData = Buffer.alloc(94);
131
126
  const buffers = [fixedData];
132
127
  let offset = 0;
133
- let dataOffset = fixedData.length; // Length: 4-byte
128
+ let dataOffset = fixedData.length;
134
129
 
135
- offset = fixedData.writeUInt32LE(0, offset); // TDSVersion: 4-byte
130
+ // Length: 4-byte
131
+ offset = fixedData.writeUInt32LE(0, offset);
136
132
 
137
- offset = fixedData.writeUInt32LE(this.tdsVersion, offset); // PacketSize: 4-byte
133
+ // TDSVersion: 4-byte
134
+ offset = fixedData.writeUInt32LE(this.tdsVersion, offset);
138
135
 
139
- offset = fixedData.writeUInt32LE(this.packetSize, offset); // ClientProgVer: 4-byte
136
+ // PacketSize: 4-byte
137
+ offset = fixedData.writeUInt32LE(this.packetSize, offset);
140
138
 
141
- offset = fixedData.writeUInt32LE(this.clientProgVer, offset); // ClientPID: 4-byte
139
+ // ClientProgVer: 4-byte
140
+ offset = fixedData.writeUInt32LE(this.clientProgVer, offset);
142
141
 
143
- offset = fixedData.writeUInt32LE(this.clientPid, offset); // ConnectionID: 4-byte
142
+ // ClientPID: 4-byte
143
+ offset = fixedData.writeUInt32LE(this.clientPid, offset);
144
144
 
145
- offset = fixedData.writeUInt32LE(this.connectionId, offset); // OptionFlags1: 1-byte
145
+ // ConnectionID: 4-byte
146
+ offset = fixedData.writeUInt32LE(this.connectionId, offset);
146
147
 
147
- offset = fixedData.writeUInt8(this.buildOptionFlags1(), offset); // OptionFlags2: 1-byte
148
+ // OptionFlags1: 1-byte
149
+ offset = fixedData.writeUInt8(this.buildOptionFlags1(), offset);
148
150
 
149
- offset = fixedData.writeUInt8(this.buildOptionFlags2(), offset); // TypeFlags: 1-byte
151
+ // OptionFlags2: 1-byte
152
+ offset = fixedData.writeUInt8(this.buildOptionFlags2(), offset);
150
153
 
151
- offset = fixedData.writeUInt8(this.buildTypeFlags(), offset); // OptionFlags3: 1-byte
154
+ // TypeFlags: 1-byte
155
+ offset = fixedData.writeUInt8(this.buildTypeFlags(), offset);
152
156
 
153
- offset = fixedData.writeUInt8(this.buildOptionFlags3(), offset); // ClientTimZone: 4-byte
157
+ // OptionFlags3: 1-byte
158
+ offset = fixedData.writeUInt8(this.buildOptionFlags3(), offset);
154
159
 
155
- offset = fixedData.writeInt32LE(this.clientTimeZone, offset); // ClientLCID: 4-byte
160
+ // ClientTimZone: 4-byte
161
+ offset = fixedData.writeInt32LE(this.clientTimeZone, offset);
156
162
 
157
- offset = fixedData.writeUInt32LE(this.clientLcid, offset); // ibHostName: 2-byte
163
+ // ClientLCID: 4-byte
164
+ offset = fixedData.writeUInt32LE(this.clientLcid, offset);
158
165
 
159
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchHostName: 2-byte
166
+ // ibHostName: 2-byte
167
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
160
168
 
169
+ // cchHostName: 2-byte
161
170
  if (this.hostname) {
162
171
  const buffer = Buffer.from(this.hostname, 'ucs2');
163
172
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -165,11 +174,12 @@ class Login7Payload {
165
174
  buffers.push(buffer);
166
175
  } else {
167
176
  offset = fixedData.writeUInt16LE(dataOffset, offset);
168
- } // ibUserName: 2-byte
169
-
177
+ }
170
178
 
171
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchUserName: 2-byte
179
+ // ibUserName: 2-byte
180
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
172
181
 
182
+ // cchUserName: 2-byte
173
183
  if (this.userName) {
174
184
  const buffer = Buffer.from(this.userName, 'ucs2');
175
185
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -177,11 +187,12 @@ class Login7Payload {
177
187
  buffers.push(buffer);
178
188
  } else {
179
189
  offset = fixedData.writeUInt16LE(0, offset);
180
- } // ibPassword: 2-byte
181
-
190
+ }
182
191
 
183
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchPassword: 2-byte
192
+ // ibPassword: 2-byte
193
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
184
194
 
195
+ // cchPassword: 2-byte
185
196
  if (this.password) {
186
197
  const buffer = Buffer.from(this.password, 'ucs2');
187
198
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -189,11 +200,12 @@ class Login7Payload {
189
200
  buffers.push(this.scramblePassword(buffer));
190
201
  } else {
191
202
  offset = fixedData.writeUInt16LE(0, offset);
192
- } // ibAppName: 2-byte
193
-
203
+ }
194
204
 
195
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchAppName: 2-byte
205
+ // ibAppName: 2-byte
206
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
196
207
 
208
+ // cchAppName: 2-byte
197
209
  if (this.appName) {
198
210
  const buffer = Buffer.from(this.appName, 'ucs2');
199
211
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -201,11 +213,12 @@ class Login7Payload {
201
213
  buffers.push(buffer);
202
214
  } else {
203
215
  offset = fixedData.writeUInt16LE(0, offset);
204
- } // ibServerName: 2-byte
205
-
216
+ }
206
217
 
207
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchServerName: 2-byte
218
+ // ibServerName: 2-byte
219
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
208
220
 
221
+ // cchServerName: 2-byte
209
222
  if (this.serverName) {
210
223
  const buffer = Buffer.from(this.serverName, 'ucs2');
211
224
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -213,20 +226,23 @@ class Login7Payload {
213
226
  buffers.push(buffer);
214
227
  } else {
215
228
  offset = fixedData.writeUInt16LE(0, offset);
216
- } // (ibUnused / ibExtension): 2-byte
217
-
229
+ }
218
230
 
219
- offset = fixedData.writeUInt16LE(dataOffset, offset); // (cchUnused / cbExtension): 2-byte
231
+ // (ibUnused / ibExtension): 2-byte
232
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
220
233
 
234
+ // (cchUnused / cbExtension): 2-byte
221
235
  const extensions = this.buildFeatureExt();
222
236
  offset = fixedData.writeUInt16LE(4, offset);
223
237
  const extensionOffset = Buffer.alloc(4);
224
238
  extensionOffset.writeUInt32LE(dataOffset += 4, 0);
225
239
  dataOffset += extensions.length;
226
- buffers.push(extensionOffset, extensions); // ibCltIntName: 2-byte
240
+ buffers.push(extensionOffset, extensions);
227
241
 
228
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchCltIntName: 2-byte
242
+ // ibCltIntName: 2-byte
243
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
229
244
 
245
+ // cchCltIntName: 2-byte
230
246
  if (this.libraryName) {
231
247
  const buffer = Buffer.from(this.libraryName, 'ucs2');
232
248
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -234,11 +250,12 @@ class Login7Payload {
234
250
  buffers.push(buffer);
235
251
  } else {
236
252
  offset = fixedData.writeUInt16LE(0, offset);
237
- } // ibLanguage: 2-byte
238
-
253
+ }
239
254
 
240
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchLanguage: 2-byte
255
+ // ibLanguage: 2-byte
256
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
241
257
 
258
+ // cchLanguage: 2-byte
242
259
  if (this.language) {
243
260
  const buffer = Buffer.from(this.language, 'ucs2');
244
261
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -246,11 +263,12 @@ class Login7Payload {
246
263
  buffers.push(buffer);
247
264
  } else {
248
265
  offset = fixedData.writeUInt16LE(0, offset);
249
- } // ibDatabase: 2-byte
250
-
266
+ }
251
267
 
252
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchDatabase: 2-byte
268
+ // ibDatabase: 2-byte
269
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
253
270
 
271
+ // cchDatabase: 2-byte
254
272
  if (this.database) {
255
273
  const buffer = Buffer.from(this.database, 'ucs2');
256
274
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -258,32 +276,33 @@ class Login7Payload {
258
276
  buffers.push(buffer);
259
277
  } else {
260
278
  offset = fixedData.writeUInt16LE(0, offset);
261
- } // ClientID: 6-byte
262
-
279
+ }
263
280
 
281
+ // ClientID: 6-byte
264
282
  if (this.clientId) {
265
283
  this.clientId.copy(fixedData, offset, 0, 6);
266
284
  }
285
+ offset += 6;
267
286
 
268
- offset += 6; // ibSSPI: 2-byte
269
-
270
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cbSSPI: 2-byte
287
+ // ibSSPI: 2-byte
288
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
271
289
 
290
+ // cbSSPI: 2-byte
272
291
  if (this.sspi) {
273
292
  if (this.sspi.length > 65535) {
274
293
  offset = fixedData.writeUInt16LE(65535, offset);
275
294
  } else {
276
295
  offset = fixedData.writeUInt16LE(this.sspi.length, offset);
277
296
  }
278
-
279
297
  buffers.push(this.sspi);
280
298
  } else {
281
299
  offset = fixedData.writeUInt16LE(0, offset);
282
- } // ibAtchDBFile: 2-byte
283
-
300
+ }
284
301
 
285
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchAtchDBFile: 2-byte
302
+ // ibAtchDBFile: 2-byte
303
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
286
304
 
305
+ // cchAtchDBFile: 2-byte
287
306
  if (this.attachDbFile) {
288
307
  const buffer = Buffer.from(this.attachDbFile, 'ucs2');
289
308
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -291,11 +310,12 @@ class Login7Payload {
291
310
  buffers.push(buffer);
292
311
  } else {
293
312
  offset = fixedData.writeUInt16LE(0, offset);
294
- } // ibChangePassword: 2-byte
295
-
313
+ }
296
314
 
297
- offset = fixedData.writeUInt16LE(dataOffset, offset); // cchChangePassword: 2-byte
315
+ // ibChangePassword: 2-byte
316
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
298
317
 
318
+ // cchChangePassword: 2-byte
299
319
  if (this.changePassword) {
300
320
  const buffer = Buffer.from(this.changePassword, 'ucs2');
301
321
  offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
@@ -303,36 +323,30 @@ class Login7Payload {
303
323
  buffers.push(buffer);
304
324
  } else {
305
325
  offset = fixedData.writeUInt16LE(0, offset);
306
- } // cbSSPILong: 4-byte
307
-
326
+ }
308
327
 
328
+ // cbSSPILong: 4-byte
309
329
  if (this.sspi && this.sspi.length > 65535) {
310
330
  fixedData.writeUInt32LE(this.sspi.length, offset);
311
331
  } else {
312
332
  fixedData.writeUInt32LE(0, offset);
313
333
  }
314
-
315
334
  const data = Buffer.concat(buffers);
316
335
  data.writeUInt32LE(data.length, 0);
317
336
  return data;
318
337
  }
319
-
320
338
  buildOptionFlags1() {
321
339
  let flags1 = FLAGS_1.ENDIAN_LITTLE | FLAGS_1.CHARSET_ASCII | FLAGS_1.FLOAT_IEEE_754 | FLAGS_1.BCP_DUMPLOAD_OFF | FLAGS_1.USE_DB_OFF | FLAGS_1.SET_LANG_WARN_ON;
322
-
323
340
  if (this.initDbFatal) {
324
341
  flags1 |= FLAGS_1.INIT_DB_FATAL;
325
342
  } else {
326
343
  flags1 |= FLAGS_1.INIT_DB_WARN;
327
344
  }
328
-
329
345
  return flags1;
330
346
  }
331
-
332
347
  buildFeatureExt() {
333
348
  const buffers = [];
334
349
  const fedAuth = this.fedAuth;
335
-
336
350
  if (fedAuth) {
337
351
  switch (fedAuth.type) {
338
352
  case 'ADAL':
@@ -343,7 +357,6 @@ class Login7Payload {
343
357
  buffer.writeUInt8(fedAuth.workflow === 'integrated' ? 0x02 : FEDAUTH_OPTIONS.ADAL_WORKFLOW_USER_PASS, 6);
344
358
  buffers.push(buffer);
345
359
  break;
346
-
347
360
  case 'SECURITYTOKEN':
348
361
  const token = Buffer.from(fedAuth.fedAuthToken, 'ucs2');
349
362
  const buf = Buffer.alloc(10);
@@ -357,7 +370,6 @@ class Login7Payload {
357
370
  break;
358
371
  }
359
372
  }
360
-
361
373
  if (this.tdsVersion >= _tdsVersions.versions['7_4']) {
362
374
  // Signal UTF-8 support: Value 0x0A, bit 0 must be set to 1. Added in TDS 7.4.
363
375
  const UTF8_SUPPORT_FEATURE_ID = 0x0a;
@@ -368,39 +380,30 @@ class Login7Payload {
368
380
  buf.writeUInt8(UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8, 5);
369
381
  buffers.push(buf);
370
382
  }
371
-
372
383
  buffers.push(Buffer.from([FEATURE_EXT_TERMINATOR]));
373
384
  return Buffer.concat(buffers);
374
385
  }
375
-
376
386
  buildOptionFlags2() {
377
387
  let flags2 = FLAGS_2.INIT_LANG_WARN | FLAGS_2.ODBC_OFF | FLAGS_2.USER_NORMAL;
378
-
379
388
  if (this.sspi) {
380
389
  flags2 |= FLAGS_2.INTEGRATED_SECURITY_ON;
381
390
  } else {
382
391
  flags2 |= FLAGS_2.INTEGRATED_SECURITY_OFF;
383
392
  }
384
-
385
393
  return flags2;
386
394
  }
387
-
388
395
  buildTypeFlags() {
389
396
  let typeFlags = TYPE_FLAGS.SQL_DFLT | TYPE_FLAGS.OLEDB_OFF;
390
-
391
397
  if (this.readOnlyIntent) {
392
398
  typeFlags |= TYPE_FLAGS.READ_ONLY_INTENT;
393
399
  } else {
394
400
  typeFlags |= TYPE_FLAGS.READ_WRITE_INTENT;
395
401
  }
396
-
397
402
  return typeFlags;
398
403
  }
399
-
400
404
  buildOptionFlags3() {
401
405
  return FLAGS_3.CHANGE_PASSWORD_NO | FLAGS_3.UNKNOWN_COLLATION_HANDLING | FLAGS_3.EXTENSION_USED;
402
406
  }
403
-
404
407
  scramblePassword(password) {
405
408
  for (let b = 0, len = password.length; b < len; b++) {
406
409
  let byte = password[b];
@@ -410,17 +413,13 @@ class Login7Payload {
410
413
  byte = byte ^ 0xa5;
411
414
  password[b] = byte;
412
415
  }
413
-
414
416
  return password;
415
417
  }
416
-
417
418
  toString(indent = '') {
418
419
  return indent + 'Login7 - ' + (0, _sprintfJs.sprintf)('TDS:0x%08X, PacketSize:0x%08X, ClientProgVer:0x%08X, ClientPID:0x%08X, ConnectionID:0x%08X', this.tdsVersion, this.packetSize, this.clientProgVer, this.clientPid, this.connectionId) + '\n' + indent + ' ' + (0, _sprintfJs.sprintf)('Flags1:0x%02X, Flags2:0x%02X, TypeFlags:0x%02X, Flags3:0x%02X, ClientTimezone:%d, ClientLCID:0x%08X', this.buildOptionFlags1(), this.buildOptionFlags2(), this.buildTypeFlags(), this.buildOptionFlags3(), this.clientTimeZone, this.clientLcid) + '\n' + indent + ' ' + (0, _sprintfJs.sprintf)("Hostname:'%s', Username:'%s', Password:'%s', AppName:'%s', ServerName:'%s', LibraryName:'%s'", this.hostname, this.userName, this.password, this.appName, this.serverName, this.libraryName) + '\n' + indent + ' ' + (0, _sprintfJs.sprintf)("Language:'%s', Database:'%s', SSPI:'%s', AttachDbFile:'%s', ChangePassword:'%s'", this.language, this.database, this.sspi, this.attachDbFile, this.changePassword);
419
420
  }
420
-
421
421
  }
422
-
423
422
  var _default = Login7Payload;
424
423
  exports.default = _default;
425
424
  module.exports = Login7Payload;
426
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTEFHU18xIiwiRU5ESUFOX0xJVFRMRSIsIkVORElBTl9CSUciLCJDSEFSU0VUX0FTQ0lJIiwiQ0hBUlNFVF9FQkNESUMiLCJGTE9BVF9JRUVFXzc1NCIsIkZMT0FUX1ZBWCIsIkZMT0FUX05ENTAwMCIsIkJDUF9EVU1QTE9BRF9PTiIsIkJDUF9EVU1QTE9BRF9PRkYiLCJVU0VfREJfT04iLCJVU0VfREJfT0ZGIiwiSU5JVF9EQl9XQVJOIiwiSU5JVF9EQl9GQVRBTCIsIlNFVF9MQU5HX1dBUk5fT0ZGIiwiU0VUX0xBTkdfV0FSTl9PTiIsIkZMQUdTXzIiLCJJTklUX0xBTkdfV0FSTiIsIklOSVRfTEFOR19GQVRBTCIsIk9EQkNfT0ZGIiwiT0RCQ19PTiIsIkZfVFJBTl9CT1VOREFSWSIsIkZfQ0FDSEVfQ09OTkVDVCIsIlVTRVJfTk9STUFMIiwiVVNFUl9TRVJWRVIiLCJVU0VSX1JFTVVTRVIiLCJVU0VSX1NRTFJFUEwiLCJJTlRFR1JBVEVEX1NFQ1VSSVRZX09GRiIsIklOVEVHUkFURURfU0VDVVJJVFlfT04iLCJUWVBFX0ZMQUdTIiwiU1FMX0RGTFQiLCJTUUxfVFNRTCIsIk9MRURCX09GRiIsIk9MRURCX09OIiwiUkVBRF9XUklURV9JTlRFTlQiLCJSRUFEX09OTFlfSU5URU5UIiwiRkxBR1NfMyIsIkNIQU5HRV9QQVNTV09SRF9OTyIsIkNIQU5HRV9QQVNTV09SRF9ZRVMiLCJCSU5BUllfWE1MIiwiU1BBV05fVVNFUl9JTlNUQU5DRSIsIlVOS05PV05fQ09MTEFUSU9OX0hBTkRMSU5HIiwiRVhURU5TSU9OX1VTRUQiLCJGRURBVVRIX09QVElPTlMiLCJGRUFUVVJFX0lEIiwiTElCUkFSWV9TRUNVUklUWVRPS0VOIiwiTElCUkFSWV9BREFMIiwiRkVEQVVUSF9ZRVNfRUNITyIsIkZFREFVVEhfTk9fRUNITyIsIkFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTIiwiQURBTF9XT1JLRkxPV19JTlRFR1JBVEVEIiwiRkVBVFVSRV9FWFRfVEVSTUlOQVRPUiIsIkxvZ2luN1BheWxvYWQiLCJjb25zdHJ1Y3RvciIsInRkc1ZlcnNpb24iLCJwYWNrZXRTaXplIiwiY2xpZW50UHJvZ1ZlciIsImNsaWVudFBpZCIsImNvbm5lY3Rpb25JZCIsImNsaWVudFRpbWVab25lIiwiY2xpZW50TGNpZCIsInJlYWRPbmx5SW50ZW50IiwiaW5pdERiRmF0YWwiLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwic2VydmVyTmFtZSIsImFwcE5hbWUiLCJob3N0bmFtZSIsImxpYnJhcnlOYW1lIiwibGFuZ3VhZ2UiLCJkYXRhYmFzZSIsImNsaWVudElkIiwic3NwaSIsImF0dGFjaERiRmlsZSIsImNoYW5nZVBhc3N3b3JkIiwiZmVkQXV0aCIsInVuZGVmaW5lZCIsInRvQnVmZmVyIiwiZml4ZWREYXRhIiwiQnVmZmVyIiwiYWxsb2MiLCJidWZmZXJzIiwib2Zmc2V0IiwiZGF0YU9mZnNldCIsImxlbmd0aCIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQ4IiwiYnVpbGRPcHRpb25GbGFnczEiLCJidWlsZE9wdGlvbkZsYWdzMiIsImJ1aWxkVHlwZUZsYWdzIiwiYnVpbGRPcHRpb25GbGFnczMiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZVVJbnQxNkxFIiwiYnVmZmVyIiwiZnJvbSIsInB1c2giLCJzY3JhbWJsZVBhc3N3b3JkIiwiZXh0ZW5zaW9ucyIsImJ1aWxkRmVhdHVyZUV4dCIsImV4dGVuc2lvbk9mZnNldCIsImNvcHkiLCJkYXRhIiwiY29uY2F0IiwiZmxhZ3MxIiwidHlwZSIsImVjaG8iLCJ3b3JrZmxvdyIsInRva2VuIiwiZmVkQXV0aFRva2VuIiwiYnVmIiwidmVyc2lvbnMiLCJVVEY4X1NVUFBPUlRfRkVBVFVSRV9JRCIsIlVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCIsImZsYWdzMiIsInR5cGVGbGFncyIsImIiLCJsZW4iLCJieXRlIiwibG93TmliYmxlIiwiaGlnaE5pYmJsZSIsInRvU3RyaW5nIiwiaW5kZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dpbjctcGF5bG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcblxuY29uc3QgRkxBR1NfMSA9IHtcbiAgRU5ESUFOX0xJVFRMRTogMHgwMCxcbiAgRU5ESUFOX0JJRzogMHgwMSxcbiAgQ0hBUlNFVF9BU0NJSTogMHgwMCxcbiAgQ0hBUlNFVF9FQkNESUM6IDB4MDIsXG4gIEZMT0FUX0lFRUVfNzU0OiAweDAwLFxuICBGTE9BVF9WQVg6IDB4MDQsXG4gIEZMT0FUX05ENTAwMDogMHgwOCxcbiAgQkNQX0RVTVBMT0FEX09OOiAweDAwLFxuICBCQ1BfRFVNUExPQURfT0ZGOiAweDEwLFxuICBVU0VfREJfT046IDB4MDAsXG4gIFVTRV9EQl9PRkY6IDB4MjAsXG4gIElOSVRfREJfV0FSTjogMHgwMCxcbiAgSU5JVF9EQl9GQVRBTDogMHg0MCxcbiAgU0VUX0xBTkdfV0FSTl9PRkY6IDB4MDAsXG4gIFNFVF9MQU5HX1dBUk5fT046IDB4ODBcbn07XG5cbmNvbnN0IEZMQUdTXzIgPSB7XG4gIElOSVRfTEFOR19XQVJOOiAweDAwLFxuICBJTklUX0xBTkdfRkFUQUw6IDB4MDEsXG4gIE9EQkNfT0ZGOiAweDAwLFxuICBPREJDX09OOiAweDAyLFxuICBGX1RSQU5fQk9VTkRBUlk6IDB4MDQsXG4gIEZfQ0FDSEVfQ09OTkVDVDogMHgwOCxcbiAgVVNFUl9OT1JNQUw6IDB4MDAsXG4gIFVTRVJfU0VSVkVSOiAweDEwLFxuICBVU0VSX1JFTVVTRVI6IDB4MjAsXG4gIFVTRVJfU1FMUkVQTDogMHg0MCxcbiAgSU5URUdSQVRFRF9TRUNVUklUWV9PRkY6IDB4MDAsXG4gIElOVEVHUkFURURfU0VDVVJJVFlfT046IDB4ODBcbn07XG5cbmNvbnN0IFRZUEVfRkxBR1MgPSB7XG4gIFNRTF9ERkxUOiAweDAwLFxuICBTUUxfVFNRTDogMHgwOCxcbiAgT0xFREJfT0ZGOiAweDAwLFxuICBPTEVEQl9PTjogMHgxMCxcbiAgUkVBRF9XUklURV9JTlRFTlQ6IDB4MDAsXG4gIFJFQURfT05MWV9JTlRFTlQ6IDB4MjBcbn07XG5cbmNvbnN0IEZMQUdTXzMgPSB7XG4gIENIQU5HRV9QQVNTV09SRF9OTzogMHgwMCxcbiAgQ0hBTkdFX1BBU1NXT1JEX1lFUzogMHgwMSxcbiAgQklOQVJZX1hNTDogMHgwMixcbiAgU1BBV05fVVNFUl9JTlNUQU5DRTogMHgwNCxcbiAgVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkc6IDB4MDgsXG4gIEVYVEVOU0lPTl9VU0VEOiAweDEwXG59O1xuXG5jb25zdCBGRURBVVRIX09QVElPTlMgPSB7XG4gIEZFQVRVUkVfSUQ6IDB4MDIsXG4gIExJQlJBUllfU0VDVVJJVFlUT0tFTjogMHgwMSxcbiAgTElCUkFSWV9BREFMOiAweDAyLFxuICBGRURBVVRIX1lFU19FQ0hPOiAweDAxLFxuICBGRURBVVRIX05PX0VDSE86IDB4MDAsXG4gIEFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTOiAweDAxLFxuICBBREFMX1dPUktGTE9XX0lOVEVHUkFURUQ6IDB4MDJcbn07XG5cbmNvbnN0IEZFQVRVUkVfRVhUX1RFUk1JTkFUT1IgPSAweEZGO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRkc1ZlcnNpb246IG51bWJlcjtcbiAgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBjbGllbnRQcm9nVmVyOiBudW1iZXI7XG4gIGNsaWVudFBpZDogbnVtYmVyO1xuICBjb25uZWN0aW9uSWQ6IG51bWJlcjtcbiAgY2xpZW50VGltZVpvbmU6IG51bWJlcjtcbiAgY2xpZW50TGNpZDogbnVtYmVyO1xufVxuXG4vKlxuICBzMi4yLjYuM1xuICovXG5jbGFzcyBMb2dpbjdQYXlsb2FkIHtcbiAgdGRzVmVyc2lvbjogbnVtYmVyO1xuICBwYWNrZXRTaXplOiBudW1iZXI7XG4gIGNsaWVudFByb2dWZXI6IG51bWJlcjtcbiAgY2xpZW50UGlkOiBudW1iZXI7XG4gIGNvbm5lY3Rpb25JZDogbnVtYmVyO1xuICBjbGllbnRUaW1lWm9uZTogbnVtYmVyO1xuICBjbGllbnRMY2lkOiBudW1iZXI7XG5cbiAgcmVhZE9ubHlJbnRlbnQ6IGJvb2xlYW47XG4gIGluaXREYkZhdGFsOiBib29sZWFuO1xuXG4gIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlcnZlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXBwTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBob3N0bmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsaWJyYXJ5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkYXRhYmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGllbnRJZDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBzc3BpOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGF0dGFjaERiRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjaGFuZ2VQYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZlZEF1dGg6IHsgdHlwZTogJ0FEQUwnLCBlY2hvOiBib29sZWFuLCB3b3JrZmxvdzogJ2RlZmF1bHQnIHwgJ2ludGVncmF0ZWQnIH0gfCB7IHR5cGU6ICdTRUNVUklUWVRPS0VOJywgZWNobzogYm9vbGVhbiwgZmVkQXV0aFRva2VuOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih7IHRkc1ZlcnNpb24sIHBhY2tldFNpemUsIGNsaWVudFByb2dWZXIsIGNsaWVudFBpZCwgY29ubmVjdGlvbklkLCBjbGllbnRUaW1lWm9uZSwgY2xpZW50TGNpZCB9OiBPcHRpb25zKSB7XG4gICAgdGhpcy50ZHNWZXJzaW9uID0gdGRzVmVyc2lvbjtcbiAgICB0aGlzLnBhY2tldFNpemUgPSBwYWNrZXRTaXplO1xuICAgIHRoaXMuY2xpZW50UHJvZ1ZlciA9IGNsaWVudFByb2dWZXI7XG4gICAgdGhpcy5jbGllbnRQaWQgPSBjbGllbnRQaWQ7XG4gICAgdGhpcy5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7XG4gICAgdGhpcy5jbGllbnRUaW1lWm9uZSA9IGNsaWVudFRpbWVab25lO1xuICAgIHRoaXMuY2xpZW50TGNpZCA9IGNsaWVudExjaWQ7XG5cbiAgICB0aGlzLnJlYWRPbmx5SW50ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5pbml0RGJGYXRhbCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mZWRBdXRoID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy51c2VyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VydmVyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcE5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ob3N0bmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxpYnJhcnlOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGFuZ3VhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRhYmFzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsaWVudElkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3NwaSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmF0dGFjaERiRmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoYW5nZVBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdG9CdWZmZXIoKSB7XG4gICAgY29uc3QgZml4ZWREYXRhID0gQnVmZmVyLmFsbG9jKDk0KTtcbiAgICBjb25zdCBidWZmZXJzID0gW2ZpeGVkRGF0YV07XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgZGF0YU9mZnNldCA9IGZpeGVkRGF0YS5sZW5ndGg7XG5cbiAgICAvLyBMZW5ndGg6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKDAsIG9mZnNldCk7XG5cbiAgICAvLyBURFNWZXJzaW9uOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLnRkc1ZlcnNpb24sIG9mZnNldCk7XG5cbiAgICAvLyBQYWNrZXRTaXplOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLnBhY2tldFNpemUsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRQcm9nVmVyOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNsaWVudFByb2dWZXIsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRQSUQ6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuY2xpZW50UGlkLCBvZmZzZXQpO1xuXG4gICAgLy8gQ29ubmVjdGlvbklEOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNvbm5lY3Rpb25JZCwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMTogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMSgpLCBvZmZzZXQpO1xuXG4gICAgLy8gT3B0aW9uRmxhZ3MyOiAxLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCh0aGlzLmJ1aWxkT3B0aW9uRmxhZ3MyKCksIG9mZnNldCk7XG5cbiAgICAvLyBUeXBlRmxhZ3M6IDEtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQ4KHRoaXMuYnVpbGRUeXBlRmxhZ3MoKSwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMzogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMygpLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50VGltWm9uZTogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlSW50MzJMRSh0aGlzLmNsaWVudFRpbWVab25lLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50TENJRDogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5jbGllbnRMY2lkLCBvZmZzZXQpO1xuXG4gICAgLy8gaWJIb3N0TmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaEhvc3ROYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5ob3N0bmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliVXNlck5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hVc2VyTmFtZTogMi1ieXRlXG4gICAgaWYgKHRoaXMudXNlck5hbWUpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMudXNlck5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlBhc3N3b3JkOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoUGFzc3dvcmQ6IDItYnl0ZVxuICAgIGlmICh0aGlzLnBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnBhc3N3b3JkLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKHRoaXMuc2NyYW1ibGVQYXNzd29yZChidWZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkFwcE5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hBcHBOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5hcHBOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmFwcE5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlNlcnZlck5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hTZXJ2ZXJOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5zZXJ2ZXJOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnNlcnZlck5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyAoaWJVbnVzZWQgLyBpYkV4dGVuc2lvbik6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyAoY2NoVW51c2VkIC8gY2JFeHRlbnNpb24pOiAyLWJ5dGVcbiAgICBjb25zdCBleHRlbnNpb25zID0gdGhpcy5idWlsZEZlYXR1cmVFeHQoKTtcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSg0LCBvZmZzZXQpO1xuICAgIGNvbnN0IGV4dGVuc2lvbk9mZnNldCA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBleHRlbnNpb25PZmZzZXQud3JpdGVVSW50MzJMRShkYXRhT2Zmc2V0ICs9IDQsIDApO1xuICAgIGRhdGFPZmZzZXQgKz0gZXh0ZW5zaW9ucy5sZW5ndGg7XG4gICAgYnVmZmVycy5wdXNoKGV4dGVuc2lvbk9mZnNldCwgZXh0ZW5zaW9ucyk7XG5cbiAgICAvLyBpYkNsdEludE5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hDbHRJbnROYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5saWJyYXJ5TmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5saWJyYXJ5TmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliTGFuZ3VhZ2U6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hMYW5ndWFnZTogMi1ieXRlXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMubGFuZ3VhZ2UsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkRhdGFiYXNlOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoRGF0YWJhc2U6IDItYnl0ZVxuICAgIGlmICh0aGlzLmRhdGFiYXNlKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmRhdGFiYXNlLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gQ2xpZW50SUQ6IDYtYnl0ZVxuICAgIGlmICh0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmNsaWVudElkLmNvcHkoZml4ZWREYXRhLCBvZmZzZXQsIDAsIDYpO1xuICAgIH1cbiAgICBvZmZzZXQgKz0gNjtcblxuICAgIC8vIGliU1NQSTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNiU1NQSTogMi1ieXRlXG4gICAgaWYgKHRoaXMuc3NwaSkge1xuICAgICAgaWYgKHRoaXMuc3NwaS5sZW5ndGggPiA2NTUzNSkge1xuICAgICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSg2NTUzNSwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKHRoaXMuc3NwaS5sZW5ndGgsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlcnMucHVzaCh0aGlzLnNzcGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQXRjaERCRmlsZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaEF0Y2hEQkZpbGU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmF0dGFjaERiRmlsZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5hdHRhY2hEYkZpbGUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkNoYW5nZVBhc3N3b3JkOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoQ2hhbmdlUGFzc3dvcmQ6IDItYnl0ZVxuICAgIGlmICh0aGlzLmNoYW5nZVBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmNoYW5nZVBhc3N3b3JkLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gY2JTU1BJTG9uZzogNC1ieXRlXG4gICAgaWYgKHRoaXMuc3NwaSAmJiB0aGlzLnNzcGkubGVuZ3RoID4gNjU1MzUpIHtcbiAgICAgIGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuc3NwaS5sZW5ndGgsIG9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKGRhdGEubGVuZ3RoLCAwKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MxKCkge1xuICAgIGxldCBmbGFnczEgPSBGTEFHU18xLkVORElBTl9MSVRUTEUgfCBGTEFHU18xLkNIQVJTRVRfQVNDSUkgfCBGTEFHU18xLkZMT0FUX0lFRUVfNzU0IHwgRkxBR1NfMS5CQ1BfRFVNUExPQURfT0ZGIHwgRkxBR1NfMS5VU0VfREJfT0ZGIHwgRkxBR1NfMS5TRVRfTEFOR19XQVJOX09OO1xuICAgIGlmICh0aGlzLmluaXREYkZhdGFsKSB7XG4gICAgICBmbGFnczEgfD0gRkxBR1NfMS5JTklUX0RCX0ZBVEFMO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnczEgfD0gRkxBR1NfMS5JTklUX0RCX1dBUk47XG4gICAgfVxuICAgIHJldHVybiBmbGFnczE7XG4gIH1cblxuICBidWlsZEZlYXR1cmVFeHQoKSB7XG4gICAgY29uc3QgYnVmZmVycyA9IFtdO1xuXG4gICAgY29uc3QgZmVkQXV0aCA9IHRoaXMuZmVkQXV0aDtcbiAgICBpZiAoZmVkQXV0aCkge1xuICAgICAgc3dpdGNoIChmZWRBdXRoLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnQURBTCc6XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKDcpO1xuICAgICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEZFREFVVEhfT1BUSU9OUy5GRUFUVVJFX0lELCAwKTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRSgyLCAxKTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OCgoRkVEQVVUSF9PUFRJT05TLkxJQlJBUllfQURBTCA8PCAxKSB8IChmZWRBdXRoLmVjaG8gPyBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9ZRVNfRUNITyA6IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX05PX0VDSE8pLCA1KTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OChmZWRBdXRoLndvcmtmbG93ID09PSAnaW50ZWdyYXRlZCcgPyAweDAyIDogRkVEQVVUSF9PUFRJT05TLkFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTLCA2KTtcbiAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdTRUNVUklUWVRPS0VOJzpcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IEJ1ZmZlci5mcm9tKGZlZEF1dGguZmVkQXV0aFRva2VuLCAndWNzMicpO1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxMCk7XG5cbiAgICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50OChGRURBVVRIX09QVElPTlMuRkVBVFVSRV9JRCwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50MzJMRSh0b2tlbi5sZW5ndGggKyA0ICsgMSwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50OCgoRkVEQVVUSF9PUFRJT05TLkxJQlJBUllfU0VDVVJJVFlUT0tFTiA8PCAxKSB8IChmZWRBdXRoLmVjaG8gPyBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9ZRVNfRUNITyA6IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX05PX0VDSE8pLCBvZmZzZXQpO1xuICAgICAgICAgIGJ1Zi53cml0ZUludDMyTEUodG9rZW4ubGVuZ3RoLCBvZmZzZXQpO1xuXG4gICAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgICAgYnVmZmVycy5wdXNoKHRva2VuKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRkc1ZlcnNpb24gPj0gdmVyc2lvbnNbJzdfNCddKSB7XG4gICAgICAvLyBTaWduYWwgVVRGLTggc3VwcG9ydDogVmFsdWUgMHgwQSwgYml0IDAgbXVzdCBiZSBzZXQgdG8gMS4gQWRkZWQgaW4gVERTIDcuNC5cbiAgICAgIGNvbnN0IFVURjhfU1VQUE9SVF9GRUFUVVJFX0lEID0gMHgwYTtcbiAgICAgIGNvbnN0IFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCA9IDB4MDE7XG4gICAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgICBidWYud3JpdGVVSW50OChVVEY4X1NVUFBPUlRfRkVBVFVSRV9JRCwgMCk7XG4gICAgICBidWYud3JpdGVVSW50MzJMRSgxLCAxKTtcbiAgICAgIGJ1Zi53cml0ZVVJbnQ4KFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCwgNSk7XG4gICAgICBidWZmZXJzLnB1c2goYnVmKTtcbiAgICB9XG5cbiAgICBidWZmZXJzLnB1c2goQnVmZmVyLmZyb20oW0ZFQVRVUkVfRVhUX1RFUk1JTkFUT1JdKSk7XG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MyKCkge1xuICAgIGxldCBmbGFnczIgPSBGTEFHU18yLklOSVRfTEFOR19XQVJOIHwgRkxBR1NfMi5PREJDX09GRiB8IEZMQUdTXzIuVVNFUl9OT1JNQUw7XG4gICAgaWYgKHRoaXMuc3NwaSkge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PTjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PRkY7XG4gICAgfVxuICAgIHJldHVybiBmbGFnczI7XG4gIH1cblxuICBidWlsZFR5cGVGbGFncygpIHtcbiAgICBsZXQgdHlwZUZsYWdzID0gVFlQRV9GTEFHUy5TUUxfREZMVCB8IFRZUEVfRkxBR1MuT0xFREJfT0ZGO1xuICAgIGlmICh0aGlzLnJlYWRPbmx5SW50ZW50KSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX09OTFlfSU5URU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX1dSSVRFX0lOVEVOVDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVGbGFncztcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MzKCkge1xuICAgIHJldHVybiBGTEFHU18zLkNIQU5HRV9QQVNTV09SRF9OTyB8IEZMQUdTXzMuVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkcgfCBGTEFHU18zLkVYVEVOU0lPTl9VU0VEO1xuICB9XG5cbiAgc2NyYW1ibGVQYXNzd29yZChwYXNzd29yZDogQnVmZmVyKSB7XG4gICAgZm9yIChsZXQgYiA9IDAsIGxlbiA9IHBhc3N3b3JkLmxlbmd0aDsgYiA8IGxlbjsgYisrKSB7XG4gICAgICBsZXQgYnl0ZSA9IHBhc3N3b3JkW2JdO1xuICAgICAgY29uc3QgbG93TmliYmxlID0gYnl0ZSAmIDB4MGY7XG4gICAgICBjb25zdCBoaWdoTmliYmxlID0gYnl0ZSA+PiA0O1xuICAgICAgYnl0ZSA9IChsb3dOaWJibGUgPDwgNCkgfCBoaWdoTmliYmxlO1xuICAgICAgYnl0ZSA9IGJ5dGUgXiAweGE1O1xuICAgICAgcGFzc3dvcmRbYl0gPSBieXRlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzc3dvcmQ7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnTG9naW43IC0gJyArXG4gICAgICBzcHJpbnRmKCdURFM6MHglMDhYLCBQYWNrZXRTaXplOjB4JTA4WCwgQ2xpZW50UHJvZ1ZlcjoweCUwOFgsIENsaWVudFBJRDoweCUwOFgsIENvbm5lY3Rpb25JRDoweCUwOFgnLFxuICAgICAgICAgICAgICB0aGlzLnRkc1ZlcnNpb24sIHRoaXMucGFja2V0U2l6ZSwgdGhpcy5jbGllbnRQcm9nVmVyLCB0aGlzLmNsaWVudFBpZCwgdGhpcy5jb25uZWN0aW9uSWRcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoJ0ZsYWdzMToweCUwMlgsIEZsYWdzMjoweCUwMlgsIFR5cGVGbGFnczoweCUwMlgsIEZsYWdzMzoweCUwMlgsIENsaWVudFRpbWV6b25lOiVkLCBDbGllbnRMQ0lEOjB4JTA4WCcsXG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRPcHRpb25GbGFnczEoKSwgdGhpcy5idWlsZE9wdGlvbkZsYWdzMigpLCB0aGlzLmJ1aWxkVHlwZUZsYWdzKCksIHRoaXMuYnVpbGRPcHRpb25GbGFnczMoKSwgdGhpcy5jbGllbnRUaW1lWm9uZSwgdGhpcy5jbGllbnRMY2lkXG4gICAgICApICsgJ1xcbicgKyBpbmRlbnQgKyAnICAgICAgICAgJyArXG4gICAgICBzcHJpbnRmKFwiSG9zdG5hbWU6JyVzJywgVXNlcm5hbWU6JyVzJywgUGFzc3dvcmQ6JyVzJywgQXBwTmFtZTonJXMnLCBTZXJ2ZXJOYW1lOiclcycsIExpYnJhcnlOYW1lOiclcydcIixcbiAgICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSwgdGhpcy51c2VyTmFtZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5hcHBOYW1lLCB0aGlzLnNlcnZlck5hbWUsIHRoaXMubGlicmFyeU5hbWVcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoXCJMYW5ndWFnZTonJXMnLCBEYXRhYmFzZTonJXMnLCBTU1BJOiclcycsIEF0dGFjaERiRmlsZTonJXMnLCBDaGFuZ2VQYXNzd29yZDonJXMnXCIsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UsIHRoaXMuZGF0YWJhc2UsIHRoaXMuc3NwaSwgdGhpcy5hdHRhY2hEYkZpbGUsIHRoaXMuY2hhbmdlUGFzc3dvcmRcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9naW43UGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gTG9naW43UGF5bG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBRztFQUNkQyxhQUFhLEVBQUUsSUFERDtFQUVkQyxVQUFVLEVBQUUsSUFGRTtFQUdkQyxhQUFhLEVBQUUsSUFIRDtFQUlkQyxjQUFjLEVBQUUsSUFKRjtFQUtkQyxjQUFjLEVBQUUsSUFMRjtFQU1kQyxTQUFTLEVBQUUsSUFORztFQU9kQyxZQUFZLEVBQUUsSUFQQTtFQVFkQyxlQUFlLEVBQUUsSUFSSDtFQVNkQyxnQkFBZ0IsRUFBRSxJQVRKO0VBVWRDLFNBQVMsRUFBRSxJQVZHO0VBV2RDLFVBQVUsRUFBRSxJQVhFO0VBWWRDLFlBQVksRUFBRSxJQVpBO0VBYWRDLGFBQWEsRUFBRSxJQWJEO0VBY2RDLGlCQUFpQixFQUFFLElBZEw7RUFlZEMsZ0JBQWdCLEVBQUU7QUFmSixDQUFoQjtBQWtCQSxNQUFNQyxPQUFPLEdBQUc7RUFDZEMsY0FBYyxFQUFFLElBREY7RUFFZEMsZUFBZSxFQUFFLElBRkg7RUFHZEMsUUFBUSxFQUFFLElBSEk7RUFJZEMsT0FBTyxFQUFFLElBSks7RUFLZEMsZUFBZSxFQUFFLElBTEg7RUFNZEMsZUFBZSxFQUFFLElBTkg7RUFPZEMsV0FBVyxFQUFFLElBUEM7RUFRZEMsV0FBVyxFQUFFLElBUkM7RUFTZEMsWUFBWSxFQUFFLElBVEE7RUFVZEMsWUFBWSxFQUFFLElBVkE7RUFXZEMsdUJBQXVCLEVBQUUsSUFYWDtFQVlkQyxzQkFBc0IsRUFBRTtBQVpWLENBQWhCO0FBZUEsTUFBTUMsVUFBVSxHQUFHO0VBQ2pCQyxRQUFRLEVBQUUsSUFETztFQUVqQkMsUUFBUSxFQUFFLElBRk87RUFHakJDLFNBQVMsRUFBRSxJQUhNO0VBSWpCQyxRQUFRLEVB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
425
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl90ZHNWZXJzaW9ucyIsIkZMQUdTXzEiLCJFTkRJQU5fTElUVExFIiwiRU5ESUFOX0JJRyIsIkNIQVJTRVRfQVNDSUkiLCJDSEFSU0VUX0VCQ0RJQyIsIkZMT0FUX0lFRUVfNzU0IiwiRkxPQVRfVkFYIiwiRkxPQVRfTkQ1MDAwIiwiQkNQX0RVTVBMT0FEX09OIiwiQkNQX0RVTVBMT0FEX09GRiIsIlVTRV9EQl9PTiIsIlVTRV9EQl9PRkYiLCJJTklUX0RCX1dBUk4iLCJJTklUX0RCX0ZBVEFMIiwiU0VUX0xBTkdfV0FSTl9PRkYiLCJTRVRfTEFOR19XQVJOX09OIiwiRkxBR1NfMiIsIklOSVRfTEFOR19XQVJOIiwiSU5JVF9MQU5HX0ZBVEFMIiwiT0RCQ19PRkYiLCJPREJDX09OIiwiRl9UUkFOX0JPVU5EQVJZIiwiRl9DQUNIRV9DT05ORUNUIiwiVVNFUl9OT1JNQUwiLCJVU0VSX1NFUlZFUiIsIlVTRVJfUkVNVVNFUiIsIlVTRVJfU1FMUkVQTCIsIklOVEVHUkFURURfU0VDVVJJVFlfT0ZGIiwiSU5URUdSQVRFRF9TRUNVUklUWV9PTiIsIlRZUEVfRkxBR1MiLCJTUUxfREZMVCIsIlNRTF9UU1FMIiwiT0xFREJfT0ZGIiwiT0xFREJfT04iLCJSRUFEX1dSSVRFX0lOVEVOVCIsIlJFQURfT05MWV9JTlRFTlQiLCJGTEFHU18zIiwiQ0hBTkdFX1BBU1NXT1JEX05PIiwiQ0hBTkdFX1BBU1NXT1JEX1lFUyIsIkJJTkFSWV9YTUwiLCJTUEFXTl9VU0VSX0lOU1RBTkNFIiwiVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkciLCJFWFRFTlNJT05fVVNFRCIsIkZFREFVVEhfT1BUSU9OUyIsIkZFQVRVUkVfSUQiLCJMSUJSQVJZX1NFQ1VSSVRZVE9LRU4iLCJMSUJSQVJZX0FEQUwiLCJGRURBVVRIX1lFU19FQ0hPIiwiRkVEQVVUSF9OT19FQ0hPIiwiQURBTF9XT1JLRkxPV19VU0VSX1BBU1MiLCJBREFMX1dPUktGTE9XX0lOVEVHUkFURUQiLCJGRUFUVVJFX0VYVF9URVJNSU5BVE9SIiwiTG9naW43UGF5bG9hZCIsInRkc1ZlcnNpb24iLCJwYWNrZXRTaXplIiwiY2xpZW50UHJvZ1ZlciIsImNsaWVudFBpZCIsImNvbm5lY3Rpb25JZCIsImNsaWVudFRpbWVab25lIiwiY2xpZW50TGNpZCIsInJlYWRPbmx5SW50ZW50IiwiaW5pdERiRmF0YWwiLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwic2VydmVyTmFtZSIsImFwcE5hbWUiLCJob3N0bmFtZSIsImxpYnJhcnlOYW1lIiwibGFuZ3VhZ2UiLCJkYXRhYmFzZSIsImNsaWVudElkIiwic3NwaSIsImF0dGFjaERiRmlsZSIsImNoYW5nZVBhc3N3b3JkIiwiZmVkQXV0aCIsImNvbnN0cnVjdG9yIiwidW5kZWZpbmVkIiwidG9CdWZmZXIiLCJmaXhlZERhdGEiLCJCdWZmZXIiLCJhbGxvYyIsImJ1ZmZlcnMiLCJvZmZzZXQiLCJkYXRhT2Zmc2V0IiwibGVuZ3RoIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDgiLCJidWlsZE9wdGlvbkZsYWdzMSIsImJ1aWxkT3B0aW9uRmxhZ3MyIiwiYnVpbGRUeXBlRmxhZ3MiLCJidWlsZE9wdGlvbkZsYWdzMyIsIndyaXRlSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJidWZmZXIiLCJmcm9tIiwicHVzaCIsInNjcmFtYmxlUGFzc3dvcmQiLCJleHRlbnNpb25zIiwiYnVpbGRGZWF0dXJlRXh0IiwiZXh0ZW5zaW9uT2Zmc2V0IiwiY29weSIsImRhdGEiLCJjb25jYXQiLCJmbGFnczEiLCJ0eXBlIiwiZWNobyIsIndvcmtmbG93IiwidG9rZW4iLCJmZWRBdXRoVG9rZW4iLCJidWYiLCJ2ZXJzaW9ucyIsIlVURjhfU1VQUE9SVF9GRUFUVVJFX0lEIiwiVVRGOF9TVVBQT1JUX0NMSUVOVF9TVVBQT1JUU19VVEY4IiwiZmxhZ3MyIiwidHlwZUZsYWdzIiwiYiIsImxlbiIsImJ5dGUiLCJsb3dOaWJibGUiLCJoaWdoTmliYmxlIiwidG9TdHJpbmciLCJpbmRlbnQiLCJzcHJpbnRmIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dpbjctcGF5bG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcblxuY29uc3QgRkxBR1NfMSA9IHtcbiAgRU5ESUFOX0xJVFRMRTogMHgwMCxcbiAgRU5ESUFOX0JJRzogMHgwMSxcbiAgQ0hBUlNFVF9BU0NJSTogMHgwMCxcbiAgQ0hBUlNFVF9FQkNESUM6IDB4MDIsXG4gIEZMT0FUX0lFRUVfNzU0OiAweDAwLFxuICBGTE9BVF9WQVg6IDB4MDQsXG4gIEZMT0FUX05ENTAwMDogMHgwOCxcbiAgQkNQX0RVTVBMT0FEX09OOiAweDAwLFxuICBCQ1BfRFVNUExPQURfT0ZGOiAweDEwLFxuICBVU0VfREJfT046IDB4MDAsXG4gIFVTRV9EQl9PRkY6IDB4MjAsXG4gIElOSVRfREJfV0FSTjogMHgwMCxcbiAgSU5JVF9EQl9GQVRBTDogMHg0MCxcbiAgU0VUX0xBTkdfV0FSTl9PRkY6IDB4MDAsXG4gIFNFVF9MQU5HX1dBUk5fT046IDB4ODBcbn07XG5cbmNvbnN0IEZMQUdTXzIgPSB7XG4gIElOSVRfTEFOR19XQVJOOiAweDAwLFxuICBJTklUX0xBTkdfRkFUQUw6IDB4MDEsXG4gIE9EQkNfT0ZGOiAweDAwLFxuICBPREJDX09OOiAweDAyLFxuICBGX1RSQU5fQk9VTkRBUlk6IDB4MDQsXG4gIEZfQ0FDSEVfQ09OTkVDVDogMHgwOCxcbiAgVVNFUl9OT1JNQUw6IDB4MDAsXG4gIFVTRVJfU0VSVkVSOiAweDEwLFxuICBVU0VSX1JFTVVTRVI6IDB4MjAsXG4gIFVTRVJfU1FMUkVQTDogMHg0MCxcbiAgSU5URUdSQVRFRF9TRUNVUklUWV9PRkY6IDB4MDAsXG4gIElOVEVHUkFURURfU0VDVVJJVFlfT046IDB4ODBcbn07XG5cbmNvbnN0IFRZUEVfRkxBR1MgPSB7XG4gIFNRTF9ERkxUOiAweDAwLFxuICBTUUxfVFNRTDogMHgwOCxcbiAgT0xFREJfT0ZGOiAweDAwLFxuICBPTEVEQl9PTjogMHgxMCxcbiAgUkVBRF9XUklURV9JTlRFTlQ6IDB4MDAsXG4gIFJFQURfT05MWV9JTlRFTlQ6IDB4MjBcbn07XG5cbmNvbnN0IEZMQUdTXzMgPSB7XG4gIENIQU5HRV9QQVNTV09SRF9OTzogMHgwMCxcbiAgQ0hBTkdFX1BBU1NXT1JEX1lFUzogMHgwMSxcbiAgQklOQVJZX1hNTDogMHgwMixcbiAgU1BBV05fVVNFUl9JTlNUQU5DRTogMHgwNCxcbiAgVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkc6IDB4MDgsXG4gIEVYVEVOU0lPTl9VU0VEOiAweDEwXG59O1xuXG5jb25zdCBGRURBVVRIX09QVElPTlMgPSB7XG4gIEZFQVRVUkVfSUQ6IDB4MDIsXG4gIExJQlJBUllfU0VDVVJJVFlUT0tFTjogMHgwMSxcbiAgTElCUkFSWV9BREFMOiAweDAyLFxuICBGRURBVVRIX1lFU19FQ0hPOiAweDAxLFxuICBGRURBVVRIX05PX0VDSE86IDB4MDAsXG4gIEFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTOiAweDAxLFxuICBBREFMX1dPUktGTE9XX0lOVEVHUkFURUQ6IDB4MDJcbn07XG5cbmNvbnN0IEZFQVRVUkVfRVhUX1RFUk1JTkFUT1IgPSAweEZGO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRkc1ZlcnNpb246IG51bWJlcjtcbiAgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBjbGllbnRQcm9nVmVyOiBudW1iZXI7XG4gIGNsaWVudFBpZDogbnVtYmVyO1xuICBjb25uZWN0aW9uSWQ6IG51bWJlcjtcbiAgY2xpZW50VGltZVpvbmU6IG51bWJlcjtcbiAgY2xpZW50TGNpZDogbnVtYmVyO1xufVxuXG4vKlxuICBzMi4yLjYuM1xuICovXG5jbGFzcyBMb2dpbjdQYXlsb2FkIHtcbiAgdGRzVmVyc2lvbjogbnVtYmVyO1xuICBwYWNrZXRTaXplOiBudW1iZXI7XG4gIGNsaWVudFByb2dWZXI6IG51bWJlcjtcbiAgY2xpZW50UGlkOiBudW1iZXI7XG4gIGNvbm5lY3Rpb25JZDogbnVtYmVyO1xuICBjbGllbnRUaW1lWm9uZTogbnVtYmVyO1xuICBjbGllbnRMY2lkOiBudW1iZXI7XG5cbiAgcmVhZE9ubHlJbnRlbnQ6IGJvb2xlYW47XG4gIGluaXREYkZhdGFsOiBib29sZWFuO1xuXG4gIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlcnZlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXBwTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBob3N0bmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsaWJyYXJ5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkYXRhYmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGllbnRJZDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBzc3BpOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGF0dGFjaERiRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjaGFuZ2VQYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZlZEF1dGg6IHsgdHlwZTogJ0FEQUwnLCBlY2hvOiBib29sZWFuLCB3b3JrZmxvdzogJ2RlZmF1bHQnIHwgJ2ludGVncmF0ZWQnIH0gfCB7IHR5cGU6ICdTRUNVUklUWVRPS0VOJywgZWNobzogYm9vbGVhbiwgZmVkQXV0aFRva2VuOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih7IHRkc1ZlcnNpb24sIHBhY2tldFNpemUsIGNsaWVudFByb2dWZXIsIGNsaWVudFBpZCwgY29ubmVjdGlvbklkLCBjbGllbnRUaW1lWm9uZSwgY2xpZW50TGNpZCB9OiBPcHRpb25zKSB7XG4gICAgdGhpcy50ZHNWZXJzaW9uID0gdGRzVmVyc2lvbjtcbiAgICB0aGlzLnBhY2tldFNpemUgPSBwYWNrZXRTaXplO1xuICAgIHRoaXMuY2xpZW50UHJvZ1ZlciA9IGNsaWVudFByb2dWZXI7XG4gICAgdGhpcy5jbGllbnRQaWQgPSBjbGllbnRQaWQ7XG4gICAgdGhpcy5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7XG4gICAgdGhpcy5jbGllbnRUaW1lWm9uZSA9IGNsaWVudFRpbWVab25lO1xuICAgIHRoaXMuY2xpZW50TGNpZCA9IGNsaWVudExjaWQ7XG5cbiAgICB0aGlzLnJlYWRPbmx5SW50ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5pbml0RGJGYXRhbCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mZWRBdXRoID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy51c2VyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VydmVyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcE5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ob3N0bmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxpYnJhcnlOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGFuZ3VhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRhYmFzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsaWVudElkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3NwaSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmF0dGFjaERiRmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoYW5nZVBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdG9CdWZmZXIoKSB7XG4gICAgY29uc3QgZml4ZWREYXRhID0gQnVmZmVyLmFsbG9jKDk0KTtcbiAgICBjb25zdCBidWZmZXJzID0gW2ZpeGVkRGF0YV07XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgZGF0YU9mZnNldCA9IGZpeGVkRGF0YS5sZW5ndGg7XG5cbiAgICAvLyBMZW5ndGg6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKDAsIG9mZnNldCk7XG5cbiAgICAvLyBURFNWZXJzaW9uOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLnRkc1ZlcnNpb24sIG9mZnNldCk7XG5cbiAgICAvLyBQYWNrZXRTaXplOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLnBhY2tldFNpemUsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRQcm9nVmVyOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNsaWVudFByb2dWZXIsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRQSUQ6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuY2xpZW50UGlkLCBvZmZzZXQpO1xuXG4gICAgLy8gQ29ubmVjdGlvbklEOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNvbm5lY3Rpb25JZCwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMTogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMSgpLCBvZmZzZXQpO1xuXG4gICAgLy8gT3B0aW9uRmxhZ3MyOiAxLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCh0aGlzLmJ1aWxkT3B0aW9uRmxhZ3MyKCksIG9mZnNldCk7XG5cbiAgICAvLyBUeXBlRmxhZ3M6IDEtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQ4KHRoaXMuYnVpbGRUeXBlRmxhZ3MoKSwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMzogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMygpLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50VGltWm9uZTogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlSW50MzJMRSh0aGlzLmNsaWVudFRpbWVab25lLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50TENJRDogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5jbGllbnRMY2lkLCBvZmZzZXQpO1xuXG4gICAgLy8gaWJIb3N0TmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaEhvc3ROYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5ob3N0bmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliVXNlck5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hVc2VyTmFtZTogMi1ieXRlXG4gICAgaWYgKHRoaXMudXNlck5hbWUpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMudXNlck5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlBhc3N3b3JkOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoUGFzc3dvcmQ6IDItYnl0ZVxuICAgIGlmICh0aGlzLnBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnBhc3N3b3JkLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKHRoaXMuc2NyYW1ibGVQYXNzd29yZChidWZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkFwcE5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hBcHBOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5hcHBOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmFwcE5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlNlcnZlck5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hTZXJ2ZXJOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5zZXJ2ZXJOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnNlcnZlck5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyAoaWJVbnVzZWQgLyBpYkV4dGVuc2lvbik6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyAoY2NoVW51c2VkIC8gY2JFeHRlbnNpb24pOiAyLWJ5dGVcbiAgICBjb25zdCBleHRlbnNpb25zID0gdGhpcy5idWlsZEZlYXR1cmVFeHQoKTtcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSg0LCBvZmZzZXQpO1xuICAgIGNvbnN0IGV4dGVuc2lvbk9mZnNldCA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBleHRlbnNpb25PZmZzZXQud3JpdGVVSW50MzJMRShkYXRhT2Zmc2V0ICs9IDQsIDApO1xuICAgIGRhdGFPZmZzZXQgKz0gZXh0ZW5zaW9ucy5sZW5ndGg7XG4gICAgYnVmZmVycy5wdXNoKGV4dGVuc2lvbk9mZnNldCwgZXh0ZW5zaW9ucyk7XG5cbiAgICAvLyBpYkNsdEludE5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hDbHRJbnROYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5saWJyYXJ5TmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5saWJyYXJ5TmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliTGFuZ3VhZ2U6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hMYW5ndWFnZTogMi1ieXRlXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMubGFuZ3VhZ2UsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkRhdGFiYXNlOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoRGF0YWJhc2U6IDItYnl0ZVxuICAgIGlmICh0aGlzLmRhdGFiYXNlKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmRhdGFiYXNlLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gQ2xpZW50SUQ6IDYtYnl0ZVxuICAgIGlmICh0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmNsaWVudElkLmNvcHkoZml4ZWREYXRhLCBvZmZzZXQsIDAsIDYpO1xuICAgIH1cbiAgICBvZmZzZXQgKz0gNjtcblxuICAgIC8vIGliU1NQSTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNiU1NQSTogMi1ieXRlXG4gICAgaWYgKHRoaXMuc3NwaSkge1xuICAgICAgaWYgKHRoaXMuc3NwaS5sZW5ndGggPiA2NTUzNSkge1xuICAgICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSg2NTUzNSwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKHRoaXMuc3NwaS5sZW5ndGgsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlcnMucHVzaCh0aGlzLnNzcGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQXRjaERCRmlsZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaEF0Y2hEQkZpbGU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmF0dGFjaERiRmlsZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5hdHRhY2hEYkZpbGUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkNoYW5nZVBhc3N3b3JkOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoQ2hhbmdlUGFzc3dvcmQ6IDItYnl0ZVxuICAgIGlmICh0aGlzLmNoYW5nZVBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmNoYW5nZVBhc3N3b3JkLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gY2JTU1BJTG9uZzogNC1ieXRlXG4gICAgaWYgKHRoaXMuc3NwaSAmJiB0aGlzLnNzcGkubGVuZ3RoID4gNjU1MzUpIHtcbiAgICAgIGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuc3NwaS5sZW5ndGgsIG9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKGRhdGEubGVuZ3RoLCAwKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MxKCkge1xuICAgIGxldCBmbGFnczEgPSBGTEFHU18xLkVORElBTl9MSVRUTEUgfCBGTEFHU18xLkNIQVJTRVRfQVNDSUkgfCBGTEFHU18xLkZMT0FUX0lFRUVfNzU0IHwgRkxBR1NfMS5CQ1BfRFVNUExPQURfT0ZGIHwgRkxBR1NfMS5VU0VfREJfT0ZGIHwgRkxBR1NfMS5TRVRfTEFOR19XQVJOX09OO1xuICAgIGlmICh0aGlzLmluaXREYkZhdGFsKSB7XG4gICAgICBmbGFnczEgfD0gRkxBR1NfMS5JTklUX0RCX0ZBVEFMO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnczEgfD0gRkxBR1NfMS5JTklUX0RCX1dBUk47XG4gICAgfVxuICAgIHJldHVybiBmbGFnczE7XG4gIH1cblxuICBidWlsZEZlYXR1cmVFeHQoKSB7XG4gICAgY29uc3QgYnVmZmVycyA9IFtdO1xuXG4gICAgY29uc3QgZmVkQXV0aCA9IHRoaXMuZmVkQXV0aDtcbiAgICBpZiAoZmVkQXV0aCkge1xuICAgICAgc3dpdGNoIChmZWRBdXRoLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnQURBTCc6XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKDcpO1xuICAgICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEZFREFVVEhfT1BUSU9OUy5GRUFUVVJFX0lELCAwKTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRSgyLCAxKTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OCgoRkVEQVVUSF9PUFRJT05TLkxJQlJBUllfQURBTCA8PCAxKSB8IChmZWRBdXRoLmVjaG8gPyBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9ZRVNfRUNITyA6IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX05PX0VDSE8pLCA1KTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OChmZWRBdXRoLndvcmtmbG93ID09PSAnaW50ZWdyYXRlZCcgPyAweDAyIDogRkVEQVVUSF9PUFRJT05TLkFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTLCA2KTtcbiAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdTRUNVUklUWVRPS0VOJzpcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IEJ1ZmZlci5mcm9tKGZlZEF1dGguZmVkQXV0aFRva2VuLCAndWNzMicpO1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxMCk7XG5cbiAgICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50OChGRURBVVRIX09QVElPTlMuRkVBVFVSRV9JRCwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50MzJMRSh0b2tlbi5sZW5ndGggKyA0ICsgMSwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50OCgoRkVEQVVUSF9PUFRJT05TLkxJQlJBUllfU0VDVVJJVFlUT0tFTiA8PCAxKSB8IChmZWRBdXRoLmVjaG8gPyBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9ZRVNfRUNITyA6IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX05PX0VDSE8pLCBvZmZzZXQpO1xuICAgICAgICAgIGJ1Zi53cml0ZUludDMyTEUodG9rZW4ubGVuZ3RoLCBvZmZzZXQpO1xuXG4gICAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgICAgYnVmZmVycy5wdXNoKHRva2VuKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRkc1ZlcnNpb24gPj0gdmVyc2lvbnNbJzdfNCddKSB7XG4gICAgICAvLyBTaWduYWwgVVRGLTggc3VwcG9ydDogVmFsdWUgMHgwQSwgYml0IDAgbXVzdCBiZSBzZXQgdG8gMS4gQWRkZWQgaW4gVERTIDcuNC5cbiAgICAgIGNvbnN0IFVURjhfU1VQUE9SVF9GRUFUVVJFX0lEID0gMHgwYTtcbiAgICAgIGNvbnN0IFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCA9IDB4MDE7XG4gICAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgICBidWYud3JpdGVVSW50OChVVEY4X1NVUFBPUlRfRkVBVFVSRV9JRCwgMCk7XG4gICAgICBidWYud3JpdGVVSW50MzJMRSgxLCAxKTtcbiAgICAgIGJ1Zi53cml0ZVVJbnQ4KFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCwgNSk7XG4gICAgICBidWZmZXJzLnB1c2goYnVmKTtcbiAgICB9XG5cbiAgICBidWZmZXJzLnB1c2goQnVmZmVyLmZyb20oW0ZFQVRVUkVfRVhUX1RFUk1JTkFUT1JdKSk7XG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MyKCkge1xuICAgIGxldCBmbGFnczIgPSBGTEFHU18yLklOSVRfTEFOR19XQVJOIHwgRkxBR1NfMi5PREJDX09GRiB8IEZMQUdTXzIuVVNFUl9OT1JNQUw7XG4gICAgaWYgKHRoaXMuc3NwaSkge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PTjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PRkY7XG4gICAgfVxuICAgIHJldHVybiBmbGFnczI7XG4gIH1cblxuICBidWlsZFR5cGVGbGFncygpIHtcbiAgICBsZXQgdHlwZUZsYWdzID0gVFlQRV9GTEFHUy5TUUxfREZMVCB8IFRZUEVfRkxBR1MuT0xFREJfT0ZGO1xuICAgIGlmICh0aGlzLnJlYWRPbmx5SW50ZW50KSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX09OTFlfSU5URU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX1dSSVRFX0lOVEVOVDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVGbGFncztcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MzKCkge1xuICAgIHJldHVybiBGTEFHU18zLkNIQU5HRV9QQVNTV09SRF9OTyB8IEZMQUdTXzMuVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkcgfCBGTEFHU18zLkVYVEVOU0lPTl9VU0VEO1xuICB9XG5cbiAgc2NyYW1ibGVQYXNzd29yZChwYXNzd29yZDogQnVmZmVyKSB7XG4gICAgZm9yIChsZXQgYiA9IDAsIGxlbiA9IHBhc3N3b3JkLmxlbmd0aDsgYiA8IGxlbjsgYisrKSB7XG4gICAgICBsZXQgYnl0ZSA9IHBhc3N3b3JkW2JdO1xuICAgICAgY29uc3QgbG93TmliYmxlID0gYnl0ZSAmIDB4MGY7XG4gICAgICBjb25zdCBoaWdoTmliYmxlID0gYnl0ZSA+PiA0O1xuICAgICAgYnl0ZSA9IChsb3dOaWJibGUgPDwgNCkgfCBoaWdoTmliYmxlO1xuICAgICAgYnl0ZSA9IGJ5dGUgXiAweGE1O1xuICAgICAgcGFzc3dvcmRbYl0gPSBieXRlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzc3dvcmQ7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnTG9naW43IC0gJyArXG4gICAgICBzcHJpbnRmKCdURFM6MHglMDhYLCBQYWNrZXRTaXplOjB4JTA4WCwgQ2xpZW50UHJvZ1ZlcjoweCUwOFgsIENsaWVudFBJRDoweCUwOFgsIENvbm5lY3Rpb25JRDoweCUwOFgnLFxuICAgICAgICAgICAgICB0aGlzLnRkc1ZlcnNpb24sIHRoaXMucGFja2V0U2l6ZSwgdGhpcy5jbGllbnRQcm9nVmVyLCB0aGlzLmNsaWVudFBpZCwgdGhpcy5jb25uZWN0aW9uSWRcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoJ0ZsYWdzMToweCUwMlgsIEZsYWdzMjoweCUwMlgsIFR5cGVGbGFnczoweCUwMlgsIEZsYWdzMzoweCUwMlgsIENsaWVudFRpbWV6b25lOiVkLCBDbGllbnRMQ0lEOjB4JTA4WCcsXG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRPcHRpb25GbGFnczEoKSwgdGhpcy5idWlsZE9wdGlvbkZsYWdzMigpLCB0aGlzLmJ1aWxkVHlwZUZsYWdzKCksIHRoaXMuYnVpbGRPcHRpb25GbGFnczMoKSwgdGhpcy5jbGllbnRUaW1lWm9uZSwgdGhpcy5jbGllbnRMY2lkXG4gICAgICApICsgJ1xcbicgKyBpbmRlbnQgKyAnICAgICAgICAgJyArXG4gICAgICBzcHJpbnRmKFwiSG9zdG5hbWU6JyVzJywgVXNlcm5hbWU6JyVzJywgUGFzc3dvcmQ6JyVzJywgQXBwTmFtZTonJXMnLCBTZXJ2ZXJOYW1lOiclcycsIExpYnJhcnlOYW1lOiclcydcIixcbiAgICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSwgdGhpcy51c2VyTmFtZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5hcHBOYW1lLCB0aGlzLnNlcnZlck5hbWUsIHRoaXMubGlicmFyeU5hbWVcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoXCJMYW5ndWFnZTonJXMnLCBEYXRhYmFzZTonJXMnLCBTU1BJOiclcycsIEF0dGFjaERiRmlsZTonJXMnLCBDaGFuZ2VQYXNzd29yZDonJXMnXCIsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UsIHRoaXMuZGF0YWJhc2UsIHRoaXMuc3NwaSwgdGhpcy5hdHRhY2hEYkZpbGUsIHRoaXMuY2hhbmdlUGFzc3dvcmRcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9naW43UGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gTG9naW43UGF5bG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBRUEsTUFBTUUsT0FBTyxHQUFHO0VBQ2RDLGFBQWEsRUFBRSxJQUFJO0VBQ25CQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsYUFBYSxFQUFFLElBQUk7RUFDbkJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxjQUFjLEVBQUUsSUFBSTtFQUNwQkMsU0FBUyxFQUFFLElBQUk7RUFDZkMsWUFBWSxFQUFFLElBQUk7RUFDbEJDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsWUFBWSxFQUFFLElBQUk7RUFDbEJDLGFBQWEsRUFBRSxJQUFJO0VBQ25CQyxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQyxnQkFBZ0IsRUFBRTtBQUNwQixDQUFDO0FBRUQsTUFBTUMsT0FBTyxHQUFHO0VBQ2RDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsT0FBTyxFQUFFLElBQUk7RUFDYkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxXQUFXLEVBQUUsSUFBSTtFQUNqQkMsV0FBVyxFQUFFLElBQUk7RUFDakJDLFlBQVksRUFBRSxJQUFJO0VBQ2xCQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsdUJBQXVCLEVBQUUsSUFBSTtF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